mozart-1.4.0.20080704/0000775000000000000000000000000011033376116012434 5ustar rootrootmozart-1.4.0.20080704/share/0000775000000000000000000000000011033376116013536 5ustar rootrootmozart-1.4.0.20080704/share/Makefile.in0000664000000000000000000000067107333073055015613 0ustar rootroot@SET_MAKE@ SUBDIRS = @SHAREDIRS@ .PHONY: bootstrap all install clean distclean veryclean check depend all:: bootstrap all install clean veryclean depend distclean check:: dirs="$(SUBDIRS)"; \ for i in $$dirs; do \ if (cd $$i && $(MAKE) $@); \ then true; \ else exit 1; \ fi; \ done clean veryclean distclean:: -rm -f *~ distclean:: -rm -f Makefile config.log config.status config.cache -rm -f $(SUBDIRS:%=%/Makefile) mozart-1.4.0.20080704/share/ozengine.sh.in0000775000000000000000000000043707333073055016330 0ustar rootroot#!/bin/sh url=`@srcdir@/lib/cygpath.sh $1` shift case @PLATFORM@ in win32*) OZEMULATOR=`cygpath -w "$OZEMULATOR"` OZINIT=`cygpath -w "$OZINIT"` export OZEMULATOR OZINIT exec @BUILDTOP@/platform/mswindows/ozengine $url "$@" ;; *) exec $OZEMULATOR -u $url -- "$@" ;; esac mozart-1.4.0.20080704/share/lib/0000775000000000000000000000000011033376116014304 5ustar rootrootmozart-1.4.0.20080704/share/lib/cp/0000775000000000000000000000000011033376116014706 5ustar rootrootmozart-1.4.0.20080704/share/lib/cp/Combinator.oz0000664000000000000000000001341607331533376017373 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1999 %%% %%% Last change: %%% $Date: 2001-07-31 15:47:42 +0200 (Tue, 31 Jul 2001) $ by $Author: schulte $ %%% $Revision: 13971 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Space BootDictionary(waitOr: DictWaitOr) at 'x-oz://boot/Dictionary' FDB(int: FdInt bool: FdBool 'reflect.dom': FdReflectDom) at 'x-oz://boot/FDB' export Choice Or Dis Cond Not Reify require CpSupport(expand: Expand) prepare local proc {Skip} skip end in fun {Guardify C} case {Procedure.arity C} of 1 then C [] 0 then fun {$} {C} Skip end end end end fun {Deref S} case S of suspended(S) then {Deref S} [] alternatives(_) then stuck [] succeeded(S) then S else S end end proc {WUHFI} {Wait _} end define fun {GetDomList X} {Expand {FdReflectDom X}} end fun {NewGuard C} {Space.new {Guardify C}} end proc {CommitGuard G} {{Space.merge G}} end local proc {Init N C G A} if N>0 then NG={NewGuard C.N} in G.N=NG {Dictionary.put A N {Space.askVerbose NG}} {Init N-1 C G A} end end in proc {InitGuards N C ?G ?A} G={MakeTuple '#' N} A={Dictionary.new} {Init N C G A} end end proc {KillGuards Is G} case Is of nil then skip [] I|Ir then {Space.kill G.I} {KillGuards Ir G} end end local proc {Cond1 C E} G={NewGuard C} in case {Deref {Space.askVerbose G}} of failed then {E} [] entailed then {CommitGuard G} [] stuck then {WUHFI} end end proc {Resolve G A N B E} if N==0 then if B then {WUHFI} else {E} end else I={DictWaitOr A} in case {Dictionary.get A I} of failed then {Dictionary.remove A I} {Resolve G A N-1 B E} [] succeeded(stuck) then {Dictionary.remove A I} {Space.kill G.I} {Resolve G A N-1 true E} [] alternatives(_) then {Dictionary.remove A I} {Space.kill G.I} {Resolve G A N-1 true E} [] succeeded(entailed) then {Dictionary.remove A I} {KillGuards {Dictionary.keys A} G} {CommitGuard G.I} [] suspended(AI) then {Dictionary.put A I AI} {Resolve G A N B E} end end end in proc {Cond C E} case {Width C} of 0 then {E} [] 1 then {Cond1 C.1 E} [] N then G A in {InitGuards N C G A} {Resolve G A N false E} end end end local proc {WaitFailed G A N} if N>0 then I={DictWaitOr A} in case {Dictionary.get A I} of failed then {Dictionary.remove A I} {WaitFailed G A N-1} [] suspended(AI) then {Dictionary.put A I AI} {WaitFailed G A N} else {WUHFI} end end end proc {Resolve G A N} if N>1 then I={DictWaitOr A} in case {Dictionary.get A I} of failed then {Dictionary.remove A I} {Resolve G A N-1} [] suspended(AI) then {Dictionary.put A I AI} {Resolve G A N} else {Dictionary.remove A I} {WaitFailed G A N-1} {CommitGuard G.I} end else [I]={Dictionary.keys A} in {CommitGuard G.I} end end proc {BinaryOr C1 C2} G1={NewGuard C1} A1={Space.askVerbose G1} in if {IsDet A1} andthen A1==failed then {{{Guardify C2}}} else G2={NewGuard C2} A2={Space.askVerbose G2} in if {IsDet A2} andthen A2==failed then {CommitGuard G1} else A={Dictionary.new} in {Dictionary.put A 1 A1} {Dictionary.put A 2 A2} {Resolve G1#G2 A 2} end end end in proc {Or C} case {Width C} of 0 then fail [] 1 then {{{Guardify C.1}}} [] 2 then {BinaryOr C.1 C.2} [] N then G A in {InitGuards N C G A} {Resolve G A N} end end end proc {Choice C} {C.{Space.choose {Width C}}} end local proc {CommitOrKill G J I ?B} if I==J then B={Space.merge G} else {Space.kill G} end end proc {Control G A J I ?B} {WaitOr A I} if {IsDet I} then {CommitOrKill G J I ?B} else case A of failed then {FdInt compl(J) I} [] merged then skip [] suspended(A) then {Control G A J I ?B} else {CommitOrKill G J I ?B} end end end in proc {Dis C} case {Width C} of 0 then fail [] 1 then {{{Guardify C.1}}} [] N then I={FdInt 1#N} B in {For 1 N 1 proc {$ J} G={NewGuard C.J} in thread {Control G {Space.askVerbose G} J I ?B} end end} if {IsDet I} then skip else A in thread {Space.waitStable} A=unit if {IsDet I} then skip else T={List.toTuple '#' {GetDomList I}} in I=T.{Space.choose {Width T}} end end {Wait A} end {B} end end end proc {Not P} S={Space.new proc {$ X} X=unit {P} end} in thread case {Deref {Space.askVerbose S}} of failed then skip [] entailed then fail [] stuck then {WUHFI} end end end proc {Reify P B} S={Space.new proc {$ X} X=unit {P} end} in {FdBool B} thread case {Deref {Space.askVerbose S}} of failed then B=0 [] entailed then B=1 [] stuck then {WUHFI} [] merged then skip end end thread if B==1 then {Space.merge S _} end end end end mozart-1.4.0.20080704/share/lib/cp/FD.oz0000664000000000000000000003520610473342550015561 0ustar rootroot%%% %%% Authors: %%% Joerg Wuertz (wuertz@dfki.de) %%% Tobias Mueller (tmueller@ps.uni-sb.de) %%% Christian Schulte %%% %%% Copyright: %%% Joerg Wuertz, 1997 %%% Tobias Mueller, 1997, 1998 %%% Christian Schulte, 1997, 1998 %%% %%% Last change: %%% $Date: 2006-08-24 17:27:36 +0200 (Thu, 24 Aug 2006) $ by $Author: mejias $ %%% $Revision: 16453 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor require CpSupport(vectorToType: VectorToType vectorToList: VectorToList vectorToTuple: VectorToTuple vectorMap: VectorMap expand: Expand formatOrigin: FormatOrigin) prepare FwdRelTable = fwdRelTable('=:': false '=<:': true '<:' : true '>=:': false '>:': false '\\=:': true) NegRelTable = negRelTable('=:': '\\=:' '=<:': '>:' '<:' : '>=:' '>=:': '<:' '>:': '=<:' '\\=:': '=:') FddOptVarMap = map(naive: 0 size: 1 min: 2 max: 3 nbSusps: 4 width: 5) FddOptValMap = map(min: 0 mid: 1 max: 2 splitMin: 3 splitMax: 4) import FDB at 'x-oz://boot/FDB' FDP at 'x-oz://boot/FDP' Space(waitStable) Error(registerFormatter) System(nbSusps) export %% Telling Domains int: FdInt bool: FdBool dom: FdDom decl: FdDecl list: FdList tuple: FdTuple record: FdRecord %% Reflection reflect: FdReflect %% Watching Domains watch: FdWatch %% Generic Propagators sum: FdpSum sumC: FdpSumC sumCN: FdpSumCN sumAC: FdpSumAC sumACN: GenSumACN sumD: FdpDSum sumCD: FdpDSumC %% Symbolic Propagators distinct: FdpDistinct distinct2: FdpDistinct2 distinctB: FdpDistinctB distinctD: FdpDistinctD distinctOffset: FdpDistinctOffset atMost: FdpAtMost atLeast: FdpAtLeast exactly: FdpExactly element: FdpElement %% 0/1 Propagators conj: FdpConj disj: FdpDisj nega: FdpNega exor: FdpExor impl: FdpImpl equi: FdpEqui %% Reified Propagators reified: FdReified %% Miscellaneous Propagators plus: FdpPlus minus: FdpMinus times: FdpTimes plusD: FdpPlusD minusD: FdpMinusD timesD: FdpTimesD power: FdpPower divI: FdpDivI divD: FdpDivD modI: FdpModI modD: FdpModD max: FdpMaximum min: FdpMinimum distance: FdpDistance tasksOverlap: FdpTasksOverlap less: FdLess greater: FdGreater lesseq: FdLesseq greatereq: FdGreatereq disjointC: FdDisjointC disjoint: FdpDisjoint %% Distribution assign: FdAssign distribute: FdDistribute choose: FdChoose %% Miscellaneous inf: FdInf sup: FdSup is: FdIs define {Wait Space.waitStable} {Wait FDB.int} FdpPlus = FDP.plus proc {FdpMinus X Y Z} {FdpPlus Z Y X} end FdpTimes = FDP.times FdpPlusD = FDP.plusD proc {FdpMinusD X Y Z} {FdpPlusD Z Y X} end FdpTimesD = FDP.timesD FdpPower = FDP.power FdpDivD = FDP.divD FdpDivI = FDP.divI FdpModD = FDP.modD FdpModI = FDP.modI FdpConj = FDP.conj FdpDisj = FDP.disj FdpExor = FDP.exor FdpImpl = FDP.impl FdpNega = FDP.nega FdpEqui = FDP.equi FdpIntR = FDP.'reified.int' FdpCard = FDP.'reified.card' FdpExactly = FDP.exactly FdpAtLeast = FDP.atLeast FdpAtMost = FDP.atMost FdpElement = FDP.element FdpLessEqOff = FDP.lessEqOff FdpMinimum = FDP.min FdpMaximum = FDP.max FdpDistinct = FDP.distinct FdpDistinct2 = FDP.distinct2 FdpDistinctD = FDP.distinctD FdpDistinctB = FDP.distinctB FdpDistinctOffset = FDP.distinctOffset FdpDisjoint = FDP.disjoint FdpDisjointC = FDP.disjointC FdpDistance = FDP.distance FdpTasksOverlap = FDP.tasksOverlap FdpSum = FDP.sum FdpSumC = FDP.sumC FdpDSum = FDP.sumD FdpDSumC = FDP.sumCD FdpSumAC = FDP.sumAC FdpSumCN = FDP.sumCN FdpSumR = FDP.'reified.sum' FdpSumCR = FDP.'reified.sumC' % FdpSumCNR = FDP.'reified.sumCN' not used in this functor %% %% Telling Domains %% local FdPutList = FDB.'int' proc {ListDom Xs Dom} case Xs of nil then skip [] X|Xr then {FdPutList Dom X} {ListDom Xr Dom} end end proc {TupleDom N T Dom} if N>0 then {FdPutList Dom T.N} {TupleDom N-1 T Dom} end end proc {RecordDom As R Dom} case As of nil then skip [] A|Ar then {FdPutList Dom R.A} {RecordDom Ar R Dom} end end in FdInf = {FDB.getLimits $ _} FdSup = {FDB.getLimits _} FdInt = FdPutList FdBool = FDB.'bool' FdDecl = FDB.'decl' proc {FdDom Dom Vec} case {VectorToType Vec} of list then {ListDom Vec Dom} [] tuple then {TupleDom {Width Vec} Vec Dom} [] record then {RecordDom {Arity Vec} Vec Dom} end end fun {FdList N Dom} if N>0 then {FdPutList Dom}|{FdList N-1 Dom} else nil end end proc {FdTuple L N Dom ?T} T={MakeTuple L N} {TupleDom N T Dom} end proc {FdRecord L As Dom ?R} R={MakeRecord L As} {RecordDom As R Dom} end end FdIs = FDB.'is' %% %% Reflection %% local GetDomCompact = FDB.'reflect.dom' in FdReflect = reflect(min: FDB.'reflect.min' mid: FDB.'reflect.mid' max: FDB.'reflect.max' nextLarger: FDB.'reflect.nextLarger' nextSmaller: FDB.'reflect.nextSmaller' size: FDB.'reflect.size' width: FDB.'reflect.width' nbSusps: System.nbSusps domList: fun {$ X} {Expand {GetDomCompact X}} end dom: GetDomCompact) end %% %% Generic Propagators %% proc {GenSumACN IV DDV Rel D} NIV = {VectorMap IV Number.'~'} in if FwdRelTable.Rel then {FdpSumCN IV DDV Rel D} {FdpSumCN NIV DDV Rel D} else thread or {FdpSumCN IV DDV Rel D} [] {FdpSumCN NIV DDV Rel D} end end end end %% %% Reified constraints %% local FdIntR = FdpIntR GenSumR = FdpSumR GenSumCR = FdpSumCR %% was: GenSumCNR = FdpSumCNR, but the latter blocks until the %% polynom becomes linear (bug fix) proc {GenSumCNR IV DDV Rel D B} NegRel = NegRelTable.Rel in {FdBool B} thread or B=1 {FdpSumCN IV DDV Rel D} [] B=0 {FdpSumCN IV DDV NegRel D} end end end local proc {MapIntR N T TR Dom} if N\=0 then {FdIntR Dom T.N TR.N} {MapIntR N-1 T TR Dom} end end in proc {FdDomR Dom V B} thread T = {VectorToTuple V} N = {Width T} TR = {MakeTuple '#' N} in {MapIntR N T TR Dom} {GenSumR TR '=:' N B} end end end proc {Card Low Ds Up B} thread if {FdIs Low} andthen {FdIs Up} then if {IsLiteral Ds} then {FdBool B} or B=1 Low=0 [] B=0 {FdInt 1#FdSup Low} end else {FdpCard {VectorToTuple Ds} Low Up B} end else {Exception.raiseError kernel(type 'FD.reified.card' [Low Ds Up B] fd if {FdIs Low} then 3 else 1 end 'Cardinality limits must be finite domain.')} end end end proc {GenSumACR IV DV Rel D B} NegRel = NegRelTable.Rel in {FdBool B} thread or B=1 {FdpSumAC IV DV Rel D} [] B=0 {FdpSumAC IV DV NegRel D} end end end proc {GenSumACNR IV DDV Rel D B} NegRel = NegRelTable.Rel in {FdBool B} thread or B=1 {GenSumACN IV DDV Rel D} [] B=0 {GenSumACN IV DDV NegRel D} end end end proc {DistanceR X Y Rel D B} {GenSumACR 1#~1 X#Y Rel D B} end in FdReified = reified(int: FdIntR dom: FdDomR sum: GenSumR sumC: GenSumCR sumCN: GenSumCNR sumAC: GenSumACR sumACN: GenSumACNR distance: DistanceR card: Card) end %% %% Distribution %% local proc {MakeDistrTuple V ?T} T = {VectorToTuple V} if {Record.all T FdIs} then skip else {Exception.raiseError kernel(type MakeDistrTuple [V T] 'vector(fd)' 1 'Distribution vector must contain finite domains.')} end end %% Optimized and generic SelVal = map(min: FdReflect.min max: FdReflect.max mid: FdReflect.mid splitMin: fun {$ V} 0#{FdReflect.mid V} end splitMax: fun {$ V} {FdReflect.mid V}+1#FdSup end) %% Generic only GenSelVar = map(naive: fun {$ _ _} false end size: fun {$ X Y} {FdReflect.size X}<{FdReflect.size Y} end width: fun {$ X Y} {FdReflect.width X}<{FdReflect.width Y} end nbSusps: fun {$ X Y} L1={FdReflect.nbSusps X} L2={FdReflect.nbSusps Y} in L1>L2 orelse (L1==L2 andthen {FdReflect.size X}<{FdReflect.size Y}) end min: fun {$ X Y} {FdReflect.min X}<{FdReflect.min Y} end max: fun {$ X Y} {FdReflect.max X}>{FdReflect.max Y} end) GenSelFil = map(undet: fun {$ X} {FdReflect.size X} > 1 end) %% use unit as default value to recognize the case when %% we can void the overhead of a procedure call and a synchronization %% on stability GenSelPro = map(noProc: unit) GenSelSel = map(id: fun {$ X} X end) fun {MapSelect Map AOP} if {IsAtom AOP} then Map.AOP else AOP end end fun {PreProcessSpec Spec} FullSpec = {Adjoin generic(order: size filter: undet select: id value: min procedure: noProc) case Spec of naive then generic(order:naive) [] ff then generic [] split then generic(value:splitMin) else Spec end} IsOpt = case FullSpec of generic(select:id filter:undet procedure:noProc order:OrdSpec value:ValSpec) then {IsAtom OrdSpec} andthen {IsAtom ValSpec} else false end in if IsOpt then opt(order: FullSpec.order value: FullSpec.value) else gen(order: {MapSelect GenSelVar FullSpec.order} value: {MapSelect SelVal FullSpec.value} select: {MapSelect GenSelSel FullSpec.select} filter: {MapSelect GenSelFil FullSpec.filter} procedure: {MapSelect GenSelPro FullSpec.procedure}) end end %% 1st argument must be a list, records are too slow fun {Choose Vars Order Filter} fun {Loop Vars Accu} case Vars of nil then Accu [] H|T then {Loop T if {Filter H} andthen (Accu==unit orelse {Order H Accu}) then H else Accu end} end end in {Loop Vars unit} end %% Same as Choose, but returns the filtered list of vars %% as well as the chosen variable. fun {ChooseAndRetFiltVars Vars Order Filter} NewVars fun {Loop Vars Accu NewTail} case Vars of nil then NewTail=nil Accu|NewVars [] H|T then if {Filter H} then LL in NewTail=(H|LL) {Loop T if Accu==unit orelse {Order H Accu} then H else Accu end LL} else {Loop T Accu NewTail} end end end in {Loop Vars unit NewVars} end in proc {FdDistribute RawSpec Vec} case {PreProcessSpec RawSpec} of opt(value:SelVal order:SelVar) then {Wait {FDP.distribute FddOptVarMap.SelVar FddOptValMap.SelVal Vec}} [] gen(value: SelVal order: Order select: Select filter: Fil procedure: Proc) then if {Width Vec}>0 then proc {Do Xs} {Space.waitStable} E|Fs={ChooseAndRetFiltVars Xs Order Fil} in if E\=unit then V={Select E} D={SelVal V} in if Proc\=unit then {Proc} {Space.waitStable} end choice {FdInt D V} [] {FdInt compl(D) V} end {Do Fs} end end in {Do {VectorToList Vec}} end end end proc {FdChoose RawSpec Vec ?V ?D} {Space.waitStable} % try case {PreProcessSpec RawSpec} of opt(value:SelValSpec order:SelVarSpec) then case {Filter {VectorToList Vec} GenSelFil.undet} of nil then D=unit [] X|Xs then {Choose Xs X {MapSelect GenSelVar SelVarSpec} V} {{MapSelect SelVal SelValSpec} V D} end [] gen(value: SelVal order: Order select: Select filter: Fil procedure: _) then case {Filter {VectorToList Vec} Fil} of nil then D=unit [] X|Xr then V={Select {Choose Xr X Order}} D={SelVal V} end end % catch ~1 then % {Exception.raiseError % fd(noChoice 'FD.choose' [RawSpec Vec V D] 2 % 'Vector must contain non-determined elements.')} % end end end proc {FdAssign Spec V} {Wait {FDP.assign Spec V}} end %% %% Watching variables %% FdWatch = watch(size: FDB.'watch.size' min: FDB.'watch.min' max: FDB.'watch.max') %% %% Miscalleanous %% proc {FdLess X Y} {FdpLessEqOff X Y ~1} end proc {FdGreater X Y} {FdpLessEqOff Y X ~1} end proc {FdLesseq X Y} {FdpLessEqOff X Y 0} end proc {FdGreatereq X Y} {FdpLessEqOff Y X 0} end FdDisjointC = FdpDisjointC %% %% Register error formatter %% {Error.registerFormatter fd fun {$ E} T = 'error in finite domain system' in case E of fd(noChoice A Xs P S) then %% expected Xs:list, P:int, S:virtualString error(kind: T items: (hint(l:'At argument' m:P)| hint(l:'In statement' m:apply(A Xs))| {Append {FormatOrigin A} [line(S)]})) else error(kind: T items: [line(oz(E))]) end end} end mozart-1.4.0.20080704/share/lib/cp/Schedule.oz0000664000000000000000000002574206723271726017041 0ustar rootroot%%% %%% Authors: %%% Jörg Würtz (wuertz@dfki.de) %%% Tobias Müller (tmueller@ps.uni-sb.de) %%% Christian Schulte %%% %%% Copyright: %%% Jörg Würtz, 1997 %%% Tobias Müller, 1997 %%% Christian Schulte, 1997, 1998 %%% %%% Last change: %%% $Date: 1999-05-27 18:33:26 +0200 (Thu, 27 May 1999) $ by $Author: schulte $ %%% $Revision: 11389 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor require CpSupport(vectorsToLists: VectorsToLists vectorToTuple: VectorToTuple vectorToList: VectorToList formatOrigin: FormatOrigin) import SCP(disjoint: Disjoint serialized: SchedCpIterate taskIntervals: SchedTaskIntervals serializedDisj: SchedDisjunctive 'cummulative{,EF}': SchedCpIterateCap cumulativeTI: SchedCumulativeTI cummulativeUp: SchedCpIterateCapUp 'TaskIntervalsDist{P,O}': SchedTaskIntervalsProof firstsLastsDist: SchedFirstsLasts) at 'x-oz://boot/Schedule' FD(bool is nega sum reflect distribute reified) Error(registerFormatter) Space(waitStable) export %% Serialization propagators for unary propagators Serialized SerializedDisj TaskIntervals %% Distribution for unary resources TaskIntervalsDistP TaskIntervalsDistO FirstsLastsDist FirstsDist LastsDist %% Propagators for cumulative scheduling Cumulative CumulativeEF CumulativeTI CumulativeUp %% Misc propagators Disjoint prepare V2A = VirtualString.toAtom L2R = List.toRecord local proc {TupleMapping I M} if I>0 then M.I={V2A I} {TupleMapping I-1 M} end end fun {RecordMapping As I} case As of nil then nil [] A|Ar then A # if {IsInt A} then {V2A A} elseif {IsName A} then {V2A n#I} else A end|{RecordMapping Ar I+1} end end in fun {GetMapping V ?M} if {IsTuple V} then N={Width V} in M={MakeTuple '#' N} {TupleMapping N M} true else As={Arity V} A|_=As in if {IsInt A} orelse {IsName A} then M={L2R '#' {RecordMapping As 0}} true else false end end end end local fun {DoTuple N R M} if N>0 then M.N#R.N|{DoTuple N-1 R M} else nil end end fun {DoRecord As R M} case As of nil then nil [] A|Ar then M.A#R.A|{DoRecord Ar R M} end end fun {DoList Fs M} case Fs of nil then nil [] F|Fr then M.F|{DoList Fr M} end end in fun {MapRecord R M} {L2R '#' if {IsTuple R} then {DoTuple {Width R} R M} else {DoRecord {Arity R} R M} end} end fun {MapVectors VV M} {Map {VectorToList VV} fun {$ V} {DoList {VectorToList V} M} end} end end fun {ListsToTuples Ts} {VectorToTuple {Map Ts VectorToTuple}} end define %% Force linking of finite domain module {Wait FD.bool} %% Serialization propagators for unary resources local fun {NewSerializer Propagator} proc {$ Tasks Start Dur} M TasksM StartM DurM in if {GetMapping Start ?M} then TasksM = {MapVectors Tasks M} StartM = {MapRecord Start M} DurM = {MapRecord Dur M} else TasksM = Tasks StartM = Start DurM = Dur end {Propagator TasksM StartM DurM} end end in Serialized = {NewSerializer SchedCpIterate} SerializedDisj = {NewSerializer SchedDisjunctive} TaskIntervals = {NewSerializer SchedTaskIntervals} end %% Propagators for cumulative scheduling local proc {MapCum Tasks Start Dur Use ?TasksM ?StartM ?DurM ?UseM} M in if {GetMapping Start ?M} then TasksM = {MapVectors Tasks M} StartM = {MapRecord Start M} DurM = {MapRecord Dur M} UseM = {MapRecord Use M} else TasksM = Tasks StartM = Start DurM = Dur UseM = Use end end in proc {Cumulative Tasks Start Dur Use Cap} TasksM StartM DurM UseM in {MapCum Tasks Start Dur Use ?TasksM ?StartM ?DurM ?UseM} {SchedCpIterateCap TasksM StartM DurM UseM Cap 0} end proc {CumulativeEF Tasks Start Dur Use Cap} TasksM StartM DurM UseM in {MapCum Tasks Start Dur Use ?TasksM ?StartM ?DurM ?UseM} {SchedCpIterateCap TasksM StartM DurM UseM Cap 1} end proc {CumulativeTI Tasks Start Dur Use Cap} TasksM StartM DurM UseM in {MapCum Tasks Start Dur Use ?TasksM ?StartM ?DurM ?UseM} {SchedCumulativeTI TasksM StartM DurM UseM Cap} end proc {CumulativeUp Tasks Start Dur Use Cap} TasksM StartM DurM UseM in {MapCum Tasks Start Dur Use ?TasksM ?StartM ?DurM ?UseM} {SchedCpIterateCapUp TasksM StartM DurM UseM Cap} end end %% Distribution local proc {Check Tasks Start Dur} if {All Tasks fun {$ Ts} {All Ts fun {$ T} {HasFeature Start T} andthen {HasFeature Dur T} end} end} then skip else {Exception.raiseError schedule('Check' [Tasks Start Dur] 'vector(vector)' 1 'Scheduling: records with features for start times and durations expected.')} end if {HasFeature Start pe} then skip else {Exception.raiseError schedule('Check' [Tasks Start Dur] record 2 'Scheduling: task \'pe\' expected.') } end if {Record.all Start FD.is} then skip else {Exception.raiseError kernel(type 'Check' [Tasks Start Dur] 'record(fd)' 2 'Scheduling: finite domains as start times expected.')} end if {Record.all Dur IsInt} then skip else {Exception.raiseError kernel(type 'Check' [Tasks Start Dur] 'record(int)' 3 'Scheduling: integers as durations expected.')} end end proc {EnumTI ETTuple Start Dur OldOut Stream} {Space.waitStable} NewStream NewOut in Stream = dist(OldOut NewOut)|NewStream if NewOut==~1 then %% finished NewStream = nil else Res#Left#Right = NewOut Tasks = ETTuple.(Res+1) LeftTask = Tasks.(Left+1) RightTask = Tasks.(Right+1) B0 = {FD.bool} B1 = {FD.bool} in B0={FD.reified.sum Start.LeftTask#Dur.LeftTask '=<:' Start.RightTask} B1={FD.nega B0} B1={FD.reified.sum Start.RightTask#Dur.RightTask '=<:' Start.LeftTask} {FD.distribute naive a(B0)} case B0 of 1 then {EnumTI ETTuple Start Dur Res#Left#Right NewStream} [] 0 then {EnumTI ETTuple Start Dur Res#Right#Left NewStream} end end end local proc {Before Task RT Tasks Start Dur} TaskId = Tasks.(Task+1) StartTask = Start.TaskId DurTask = Dur.TaskId in {ForAll RT proc {$ T} if Task\=T then {FD.sum StartTask#DurTask '=<:' Start.(Tasks.(1+T))} end end} end proc {After Task RT Tasks Start Dur} StartTask = Start.(Tasks.(Task+1)) in {ForAll RT proc {$ T} if Task\=T then TaskId=Tasks.(1+T) in {FD.sum Start.TaskId#Dur.TaskId '=<:' StartTask} end end} end fun {MinimalStartOrder Task1 Task2 Start Dur Tasks} Start1 = Start.(Tasks.(Task1+1)) MinStart1 = {FD.reflect.min Start1} Start2 = Start.(Tasks.(Task2+1)) MinStart2 = {FD.reflect.min Start2} in MinStart1 < MinStart2 orelse (MinStart1 == MinStart2 andthen {FD.reflect.max Start1} < {FD.reflect.max Start2}) end fun {MinimalEndOrder Task1 Task2 Start Dur Tasks} TaskId1 = (Tasks.(Task1+1)) TaskId2 = (Tasks.(Task2+1)) Start1 = Start.TaskId1 Start2 = Start.TaskId2 Dur1 = Dur.TaskId1 Dur2 = Dur.TaskId2 MaxStartDur1 = {FD.reflect.max Start1} + Dur1 MaxStartDur2 = {FD.reflect.max Start2} + Dur2 in %% good for proof of optimality MaxStartDur1 > MaxStartDur2 orelse (MaxStartDur1 == MaxStartDur2 andthen {FD.reflect.min Start1}+Dur1 > {FD.reflect.min Start2}+Dur2) end proc {Try FLs RestTasks Mode Tasks ETTuple Start Dur Stream} {Space.waitStable} case FLs of nil then fail [] H|T then case T of nil then case Mode of firsts then {Before H RestTasks Tasks Start Dur} else {After H RestTasks Tasks Start Dur} end {EnumFL ETTuple Start Dur '#'(H) Stream} else choice case Mode of firsts then {Before H RestTasks Tasks Start Dur} else {After H RestTasks Tasks Start Dur} end {EnumFL ETTuple Start Dur '#'(H) Stream} [] {Try T RestTasks Mode Tasks ETTuple Start Dur Stream} end end end end in proc {EnumFL ETTuple Start Dur OldOut Stream} {Space.waitStable} NewStream NewOut in Stream = dist(OldOut NewOut)|NewStream case NewOut of finished then NewStream = nil else Mode#FL#RestTasks#Res = NewOut Tasks = ETTuple.(Res+1) Sorted = {Sort FL case Mode of firsts then fun {$ X Y} {MinimalStartOrder X Y Start Dur Tasks} end else fun {$ X Y} {MinimalEndOrder X Y Start Dur Tasks} end end} in {Try Sorted RestTasks Mode Tasks ETTuple Start Dur NewStream} end end end fun {NewDist Dist Enum Flag} proc {$ Tasks Start Dur} Stream M TasksM StartM DurM TaskLists TaskTuples in if {GetMapping Start ?M} then TasksM = {MapVectors Tasks M} StartM = {MapRecord Start M} DurM = {MapRecord Dur M} else TasksM = Tasks StartM = Start DurM = Dur end TaskLists = {VectorsToLists TasksM} TaskTuples = {ListsToTuples TaskLists} {Check TaskLists StartM DurM} {Dist TaskTuples StartM DurM Stream Flag} {Enum TaskTuples StartM DurM nil Stream} end end in TaskIntervalsDistO = {NewDist SchedTaskIntervalsProof EnumTI 1} TaskIntervalsDistP = {NewDist SchedTaskIntervalsProof EnumTI 0} FirstsLastsDist = {NewDist SchedFirstsLasts EnumFL 0} FirstsDist = {NewDist SchedFirstsLasts EnumFL 1} LastsDist = {NewDist SchedFirstsLasts EnumFL 2} end %% %% Register error formatter %% {Error.registerFormatter schedule fun {$ E} T = 'error in scheduling' in case E of schedule(A Xs T P S) then %% expected Xs:list, T:atom, P:int S:virtualString error(kind: T items: (hint(l:'At argument' m:P)| hint(l:'Expected type' m:T)| hint(l:'In statement' m:apply(A Xs))| {Append {FormatOrigin A} [line(S)]})) else error(kind: T items: [line(oz(E))]) end end} end mozart-1.4.0.20080704/share/lib/cp/CpSupport.oz0000664000000000000000000001311506676747152017243 0ustar rootroot%%% %%% Authors: %%% Joerg Wuertz (wuertz@dfki.de) %%% Tobias Mueller (tmueller@ps.uni-sb.de) %%% Christian Schulte %%% %%% Copyright: %%% Joerg Wuertz, 1997 %%% Tobias Mueller, 1997 %%% Christian Schulte, 1997, 1998 %%% %%% Last change: %%% $Date: 1999-03-26 19:14:02 +0100 (Fri, 26 Mar 1999) $ by $Author: schulte $ %%% $Revision: 11167 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor prepare R2L = Record.toList %% %% Vector conversion %% fun {VectorToType V} if {IsList V} then list elseif {IsTuple V} then tuple elseif {IsRecord V} then record else {Exception.raiseError kernel(type VectorToType [V] vector 1 'Vector as input argument expected.')} illegal end end fun {VectorMap V P} if {VectorToType V}==list then {Map V P} else {Record.map V P} end end fun {VectorToList V} if {VectorToType V}==list then V else {R2L V} end end fun {VectorsToLists V} {Map {VectorToList V} VectorToList} end local proc {RecordToTuple As I R T} case As of nil then skip [] A|Ar then R.A=T.I {RecordToTuple Ar I+1 R T} end end in proc {VectorToTuple V ?T} case {VectorToType V} of list then T={List.toTuple '#' V} [] tuple then T=V [] record then T={MakeTuple '#' {Width V}} {RecordToTuple {Arity V} 1 V T} end end end local fun {ExpandPair L U Xs} if L=:' '>=:'] BuiltinNames = bi(twice: [twice ['FD.plus' 'FD.minus']] square: [square ['FD.times']] plus: ['FD.plus' ['FD.distance']] plus_rel: ['FD.plus' ['FD.distance' '+']] minus: ['FD.minus' nil] times: ['FD.times' nil] times_rel: ['FD.plus' ['FD.distance' '*']] divD: ['FD.divD' nil] divI: ['FD.divI' nil] modD: ['FD.modD' nil] modI: ['FD.modI' nil] conj: ['FD.conj' nil] disj: ['FD.disj' nil] exor: ['FD.exor' nil] impl: ['FD.impl' nil] equi: ['FD.equi' nil] nega: ['FD.nega' ['FD.exor' 'FD.impl' 'FD.equi']] sumCR: ['FD.reified.sumC' ArithOps] intR: ['FD.refied.int' ['FD.reified.dom']] card: ['FD.reified.card' nil] exactly: ['FD.exactly' nil] atLeast: ['FD.atLeast' nil] atMost: ['FD.atMost' nil] element: ['FD.element' nil] disjoint: ['FD.disjoint' nil] disjointC: ['FD.disjointC' nil] distance: ['FD.distance' nil] notEqOff: [notEqOff ['FD.sumC' '\\=:']] lessEqOff: ['FD.lesseq' ['FD.sumC' '=<:' '<:' '>=:' '>:' 'FD.min' 'FD.max' 'FD.modD' 'FD.modI' 'FD.disjoint' 'FD.disjointC' 'FD.distance' ]] minimum: ['FD.min' nil] maximum: ['FD.max' nil] inter: ['FD.inter' nil] union: ['FD.union' nil] distinct: ['FD.distinct' nil] distinctOffset: ['FD.distinctOffset' nil] subset: [subset ['FD.union' 'FD.inter']] sumC: ['FD.sumC' 'FD.sumCN'|'FD.reified.sumC'|ArithOps] sumCN: ['FD.sumCN' ArithOps] sumAC: ['FD.sumAC' nil] sched_disjoint_card:['FD.schedule.disjoint' nil] sched_cpIterate: ['FD.schedule.serialized' nil] sched_disjunctive: ['FD.schedule.serializedDisj' nil] fdGetMin: ['FD.reflect.min' nil] fdGetMid: ['FD.reflect.mid' nil] fdGetMax: ['FD.reflect.max' nil] fdGetDom: ['FD.reflect.dom' ['FD.reflect.domList']] fdGetCard: ['FD.reflect.size' nil] fdGetNextSmaller: ['FD.reflect.nextSmaller' nil] fdGetNextLarger: ['FD.reflect.nextLarger' nil] fdWatchSize: ['FD.watch.size' nil] fdWatchMin: ['FD.watch.min' nil] fdWatchMax: ['FD.watch.max' nil] ) fun {BIPrintName X} if {IsAtom X} andthen {HasFeature BuiltinNames X} then BuiltinNames.X.1 else X end end fun {BIOrigin X} BuiltinNames.X.2.1 end in fun {FormatOrigin A} B = {BIPrintName A} in if {HasFeature BuiltinNames B} andthen {BIOrigin B}\=nil then [unit hint(l:'Possible origin of procedure' m:oz({BIPrintName B})) line(oz({BIOrigin B}))] else nil end end end export formatOrigin: FormatOrigin vectorToType: VectorToType vectorToList: VectorToList vectorsToLists: VectorsToLists vectorToTuple: VectorToTuple vectorMap: VectorMap expand: Expand end mozart-1.4.0.20080704/share/lib/cp/Search.oz0000664000000000000000000004135107115023261016465 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1997 %%% %%% Last change: %%% $Date: 2000-05-30 22:38:09 +0200 (Tue, 30 May 2000) $ by $Author: schulte $ %%% $Revision: 12893 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import ParSearch(engine: ParallelEngine) at 'x-oz://system/ParSearch.ozf' Space export one: OneModule all: All allS: AllS allP: AllP best: BestModule object: SearchObject base: SearchBase parallel: ParallelEngine prepare %% General help routines proc {NewKiller ?Killer ?KillFlag} proc {Killer} KillFlag=kill end end %% %% Different wrappers for creation of output %% fun {WrapS S} S end define fun {WrapP S} proc {$ X} {Space.merge {Space.clone S} X} end end %% %% Make copy of space and recompute choices %% local proc {ReDo Is C} case Is of nil then skip [] I|Ir then {ReDo Ir C} {Space.commit1 C I} end end in proc {Recompute S Is C} C={Space.clone S} {ReDo Is C} end end %% %% Injection of solution constraints for best solution search %% proc {Better S O SS} CS={Space.clone SS} in {Space.inject S proc {$ X} {O {Space.merge CS} X} end} end %% %% The one solution search module %% fun {OneDepthNR KF S} if {IsFree KF} then case {Space.ask S} of failed then nil [] succeeded then S [] alternatives(N) then C={Space.clone S} in {Space.commit1 S 1} case {OneDepthNR KF S} of nil then {Space.commit2 C 2 N} {OneDepthNR KF C} elseof O then O end end else nil end end local fun {AltCopy KF I M S MRD} if I==M then {Space.commit1 S I} {OneDepthR KF S S nil MRD MRD} else C={Space.clone S} in {Space.commit1 C I} case {OneDepthR KF C S [I] 1 MRD} of nil then {AltCopy KF I+1 M S MRD} elseof O then O end end end fun {Alt KF I M S C As RD MRD} {Space.commit1 S I} if I==M then {OneDepthR KF S C I|As RD MRD} else case {OneDepthR KF S C I|As RD MRD} of nil then S={Recompute C As} in {Alt KF I+1 M S C As RD MRD} elseof O then O end end end in fun {OneDepthR KF S C As RD MRD} if {IsFree KF} then case {Space.ask S} of failed then nil [] succeeded then S [] alternatives(M) then if RD==MRD then {AltCopy KF 1 M S MRD} else {Alt KF 1 M S C As RD+1 MRD} end end else nil end end end local fun {OneDepth P MRD ?KP} KF={NewKiller ?KP} S={Space.new P} in if MRD==1 then {OneDepthNR KF S} else {OneDepthR KF S S nil MRD MRD} end end local fun {AltCopy KF I M S CD MRD CO} if I==M then {Space.commit1 S I} {OneBoundR KF S S nil CD MRD MRD CO} else C={Space.clone S} {Space.commit1 C I} O={OneBoundR KF C S [I] CD 1 MRD CO} in if {Space.is O} then O else {AltCopy KF I+1 M S CD MRD O} end end end fun {Alt KF I M S C As CD RD MRD CO} {Space.commit1 S I} if I==M then {OneBoundR KF S C I|As CD RD MRD CO} else O={OneBoundR KF S C I|As CD RD MRD CO} in if {Space.is O} then O else S={Recompute C As} in {Alt KF I+1 M S C As CD RD MRD O} end end end fun {OneBoundR KF S C As CD RD MRD CO} if {IsFree KF} then case {Space.ask S} of failed then CO [] succeeded then S [] alternatives(M) then if CD=<0 then cut elseif RD==MRD then {AltCopy KF 1 M S CD-1 MRD CO} else {Alt KF 1 M S C As CD-1 RD+1 MRD CO} end end else nil end end fun {OneIterR KF S CD MRD} if {IsFree KF} then C={Space.clone S} in case {OneBoundR KF C C nil CD MRD MRD nil} of cut then {OneIterR KF S CD+1 MRD} elseof O then O end else nil end end in fun {OneBound P MD MRD ?KP} S={Space.new P} in {OneBoundR {NewKiller ?KP} S S nil MD MRD MRD nil} end fun {OneIter P MRD ?KP} {OneIterR {NewKiller ?KP} {Space.new P} 1 MRD} end end local proc {Probe S D KF} if {IsDet KF} then raise killed end else case {Space.ask S} of failed then skip [] succeeded then raise succeeded(S) end [] alternatives(N) then if D==0 then {Space.commit1 S 1} {Probe S 0 KF} else C={Space.clone S} in {Space.commit2 S 2 N} {Probe S D-1 KF} {Space.commit1 C 1} {Probe C D KF} end end end end proc {Iterate S D M KF} if M==D then {Probe S D KF} else {Probe {Space.clone S} D KF} {Iterate S D+1 M KF} end end in proc {LDS P D ?KP} {Iterate {Space.new P} 0 D {NewKiller ?KP}} end end in OneModule = one(depth: fun {$ P MRD ?KP} case {OneDepth P MRD ?KP} of nil then nil elseof S then [{Space.merge S}] end end depthP: fun {$ P MRD ?KP} case {OneDepth P MRD ?KP} of nil then nil elseof S then [{WrapP S}] end end depthS: fun {$ P MRD ?KP} case {OneDepth P MRD ?KP} of nil then nil elseof S then [S] end end bound: fun {$ P MD MRD ?KP} case {OneBound P MD MRD ?KP} of nil then nil [] cut then cut elseof S then [{Space.merge S}] end end boundP: fun {$ P MD MRD ?KP} case {OneBound P MD MRD ?KP} of nil then nil [] cut then cut elseof S then [{WrapP S}] end end boundS: fun {$ P MD MRD ?KP} case {OneBound P MD MRD ?KP} of nil then nil [] cut then cut elseof S then [S] end end iter: fun {$ P MRD ?KP} case {OneIter P MRD ?KP} of nil then nil elseof S then [{Space.merge S}] end end iterP: fun {$ P MRD ?KP} case {OneIter P MRD ?KP} of nil then nil elseof S then [{WrapP S}] end end iterS: fun {$ P MRD ?KP} case {OneIter P MRD ?KP} of nil then nil elseof S then [S] end end lds: fun {$ P D ?KP} try {LDS P D ?KP} nil catch killed then nil [] succeeded(S) then [{Space.merge S}] end end ldsP: fun {$ P D ?KP} try {LDS P D ?KP} nil catch killed then nil [] succeeded(S) then [{WrapP S}] end end ldsS: fun {$ P D ?KP} try {LDS P D ?KP} nil catch killed then nil [] succeeded(S) then [S] end end ) end %% %% The all solution search module %% local proc {AllNR KF S W Or Os} if {IsFree KF} then case {Space.ask S} of failed then Os=Or [] succeeded then Os={W S}|Or [] alternatives(N) then C={Space.clone S} Ot in {Space.commit1 S 1} {Space.commit2 C 2 N} Os={AllNR KF S W Ot} Ot={AllNR KF C W Or} end else Os=Or end end local proc {AltCopy KF I M S MRD W Or Os} if I==M then {Space.commit1 S I} {AllR KF S S nil MRD MRD W Or Os} else C={Space.clone S} Ot in {Space.commit1 C I} Os={AllR KF C S [I] 1 MRD W Ot} Ot={AltCopy KF I+1 M S MRD W Or} end end proc {Alt KF I M S C As RD MRD W Or Os} {Space.commit1 S I} if I==M then {AllR KF S C I|As RD MRD W Or Os} else Ot NewS={Recompute C As} in Os={AllR KF S C I|As RD MRD W Ot} Ot={Alt KF I+1 M NewS C As RD MRD W Or} end end in fun {AllR KF S C As RD MRD W Or} if {IsFree KF} then case {Space.ask S} of failed then Or [] succeeded then {W S}|Or [] alternatives(M) then if RD==MRD then {AltCopy KF 1 M S MRD W Or} else {Alt KF 1 M S C As RD+1 MRD W Or} end end else Or end end end in fun {All P MRD ?KP} KF={NewKiller ?KP} S={Space.new P} in if MRD==1 then {AllNR KF S Space.merge nil} else {AllR KF S S nil MRD MRD Space.merge nil} end end fun {AllS P MRD ?KP} KF={NewKiller ?KP} S={Space.new P} in if MRD==1 then {AllNR KF S WrapS nil} else {AllR KF S S nil MRD MRD WrapS nil} end end fun {AllP P MRD ?KP} KF={NewKiller ?KP} S={Space.new P} in if MRD==1 then {AllNR KF S WrapP nil} else {AllR KF S S nil MRD MRD WrapP nil} end end end %% %% The best solution search module %% local local fun {BABNR KF S O SS} if {IsFree KF} then case {Space.ask S} of failed then SS [] succeeded then S [] alternatives(N) then C={Space.clone S} NewSS in {Space.commit1 S 1} {Space.commit2 C 2 N} NewSS={BABNR KF S O SS} if SS==NewSS then {BABNR KF C O SS} elseif NewSS==nil then nil else {Better C O NewSS} {BABNR KF C O NewSS} end end else nil end end local fun {AltCopy KF I M S MRD O SS} if I==M then {Space.commit1 S I} {BABR KF S S nil MRD MRD O SS} else C={Space.clone S} NewSS in {Space.commit1 C I} NewSS = {BABR KF C S [I] 1 MRD O SS} if NewSS==SS then {AltCopy KF I+1 M S MRD O SS} elseif NewSS==nil then nil else {Space.commit2 S I+1 M} {Better S O NewSS} {BABR KF S S nil MRD MRD O NewSS} end end end fun {Alt KF I M S C As RD MRD O SS} {Space.commit1 S I} if I==M then {BABR KF S C I|As RD MRD O SS} else NewSS = {BABR KF S C I|As RD MRD O SS} in if NewSS==SS then {Alt KF I+1 M {Recompute C As} C As RD MRD O SS} elseif NewSS==nil then nil else NewS={Recompute C As} in {Space.commit2 NewS I+1 M} {Better NewS O NewSS} {BABR KF NewS NewS nil MRD MRD O NewSS} end end end in fun {BABR KF S C As RD MRD O SS} if {IsFree KF} then case {Space.ask S} of failed then SS [] succeeded then S [] alternatives(M) then if RD==MRD then {AltCopy KF 1 M S MRD O SS} else {Alt KF 1 M S C As RD+1 MRD O SS} end end else nil end end end in fun {BestBAB P O MRD ?KP} KF={NewKiller ?KP} S={Space.new P} in if MRD==1 then {BABNR KF S O nil} else {BABR KF S S nil MRD MRD O nil} end end end local fun {RestartNR KF S O PS} if {IsFree KF} then C={Space.clone S} in case {OneDepthNR KF S} of nil then PS elseof S then {Better C O S} {RestartNR KF C O S} end else nil end end fun {RestartR KF S O PS MRD} if {IsFree KF} then C={Space.clone S} in case {OneDepthR KF S S nil MRD MRD} of nil then PS elseof S then {Better C O S} {RestartR KF C O S MRD} end else nil end end in fun {BestRestart P O MRD ?KP} KF={NewKiller ?KP} S={Space.new P} in if MRD==1 then {RestartNR KF S O nil} else {RestartR KF S O nil MRD} end end end in BestModule = best(bab: fun {$ P O MRD ?KP} case {BestBAB P O MRD ?KP} of nil then nil elseof S then [{Space.merge S}] end end babP: fun {$ P O MRD ?KP} case {BestBAB P O MRD ?KP} of nil then nil elseof S then [{WrapP S}] end end babS: fun {$ P O MRD ?KP} case {BestBAB P O MRD ?KP} of nil then nil elseof S then [S] end end restart: fun {$ P O MRD ?KP} case {BestRestart P O MRD ?KP} of nil then nil elseof S then [{Space.merge S}] end end restartP: fun {$ P O MRD ?KP} case {BestRestart P O MRD ?KP} of nil then nil elseof S then [{WrapP S}] end end restartS: fun {$ P O MRD ?KP} case {BestRestart P O MRD ?KP} of nil then nil elseof S then [S] end end) end local local proc {Recompute S|Sr C} if {Space.is S} then C={Space.clone S} else {Recompute Sr C} {Space.commit1 C S.1} end end class ReClass attr stack:nil cur rd sol:nil prev:nil isStopped:false backtrack:false feat mrd manager order meth init(P O D) cur <- {Space.new P} rd <- D isStopped <- false backtrack <- false self.mrd = D self.order = O end meth stop isStopped <- true end meth resume isStopped <- false end meth last($) case {self next($)} of stopped then stopped [] nil then @prev elseof S then prev<-S ReClass,last($) end end meth next($) if @backtrack then ReClass, backtrack backtrack <- false end {self explore($)} end meth push(M) if self.mrd==@rd then rd <- 1 stack <- 1#M#@sol|{Space.clone @cur}|@stack else rd <- @rd + 1 stack <- 1#M#@sol|@stack end end meth backtrack case @stack of nil then cur <- false [] S1|Sr then case S1 of I#M#Sol then if I==M then stack <- Sr rd <- @rd - 1 ReClass,backtrack else NextI=I+1 S2|Srr=Sr in if M==NextI andthen {Space.is S2} then {Space.commit1 S2 M} stack <- Srr rd <- self.mrd cur <- S2 if @sol\=Sol then {Better S2 self.order @sol} end elseif @sol==Sol then stack <- NextI#M#Sol|Sr cur <- {Recompute @stack} else cur <- {Recompute Sr} {Space.commit2 @cur NextI M} {Better @cur self.order @sol} rd <- self.mrd stack <- Sr end end else stack <- Sr ReClass,backtrack end end end end in class All from ReClass prop final meth explore(S) C = @cur in if @isStopped then S=stopped elseif C==false then S=nil else case {Space.ask C} of failed then All,backtrack All,explore(S) [] succeeded then S=C backtrack <- true [] alternatives(M) then All,push(M) {Space.commit1 C 1} All,explore(S) end end end end class Best from ReClass prop final meth explore(S) C = @cur in if @isStopped then S=stopped elseif C==false then S=nil else case {Space.ask C} of failed then Best,backtrack Best,explore(S) [] succeeded then S=C sol<-C backtrack<-true [] alternatives(M) then ReClass,push(M) {Space.commit1 C 1} Best,explore(S) end end end end end proc {Dummy _} skip end in class SearchObject prop locking attr RCD: 1 MyAgent: Dummy meth script(P ...) = M lock D = {CondSelect M rcd @RCD} in MyAgent <- if {HasFeature M 2} then {New Best init(P M.2 D)} else {New All init(P false D)} end RCD <- D end end meth Next($) lock A=@MyAgent in {A resume} {A next($)} end end meth next($) S=SearchObject,Next($) in if {Space.is S} then [{Space.merge {Space.clone S}}] else S end end meth nextS($) S=SearchObject,Next($) in if {Space.is S} then [{Space.clone S}] else S end end meth nextP($) S=SearchObject,Next($) in if {Space.is S} then [{WrapP S}] else S end end meth Last($) lock A=@MyAgent in {A resume} {A last($)} end end meth last($) S=SearchObject,Last($) in if {Space.is S} then [{Space.merge {Space.clone S}}] else S end end meth lastS($) S=SearchObject,Last($) in if {Space.is S} then [{Space.clone S}] else S end end meth lastP($) S=SearchObject,Last($) in if {Space.is S} then [{WrapP S}] else S end end meth stop {@MyAgent stop} end meth clear lock {@MyAgent stop} MyAgent <- Dummy end end end end %% %% Often used short cuts %% fun {SearchOne P} {OneModule.depth P 1 _} end fun {SearchAll P} {All P 1 _} end fun {SearchBest P O} {BestModule.bab P O 1 _} end SearchBase = base(one: SearchOne all: SearchAll best: SearchBest) end mozart-1.4.0.20080704/share/lib/cp/par/0000775000000000000000000000000011033101631015454 5ustar rootrootmozart-1.4.0.20080704/share/lib/cp/par/ParServer.oz0000664000000000000000000000173006651575416017772 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 1999-01-21 11:01:50 +0100 (Thu, 21 Jan 1999) $ by $Author: schulte $ %%% $Revision: 10566 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org/ %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor export new: NewServer newPort: NewServerPort define fun {NewServer C M} S P={Port.new S} PS in thread {ForAll S {New {Class.new [C] 'attr' 'feat'(server:PS) nil} M}} end proc {PS M} {Port.send P M} end PS end fun {NewServerPort C M} S P={Port.new S} in thread {ForAll S {New {Class.new [C] 'attr' 'feat'(server:P) nil} M}} end P end end mozart-1.4.0.20080704/share/lib/cp/par/ParBarChart.oz0000664000000000000000000001530306651575416020213 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 1999-01-21 11:01:50 +0100 (Thu, 21 Jan 1999) $ by $Author: schulte $ %%% $Revision: 10566 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org/ %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Tk export chart: BarChart require FindLimit at 'ParFindLimit.ozf' GetColor at 'ParGetColor.ozf' Server at 'ParServer.ozf' prepare ChartHeight = 90 BarXGap = 20 BarYGap = 10 BarHeight = 16 BarBorder = 2 fun {ToFloat X} if {IsInt X} then {IntToFloat X} else X end end fun {Format X N} X end define SmallFont = {New Tk.font tkInit(family:helvetica size:10)} BalloonFont = {New Tk.font tkInit(family:helvetica size:12)} local BalloonDelay = 1500 fun {MakeBalloon T X Y} W = {New Tk.toplevel tkInit(withdraw:true bg:black)} M = {New Tk.label tkInit(parent:W text:T bg:lightyellow font:BalloonFont)} in {Tk.batch [wm(overrideredirect W true) wm(geometry W '+'#X#'+'#Y) pack(M ipadx:3 padx:1 pady:1) update(idletasks) wm(deiconify W)]} W end in class Balloon attr cur feat top meth init(Top) self.top=Top end meth enter(GT) LeaveVar WaitVar in cur <- LeaveVar {Alarm BalloonDelay WaitVar} thread [X Y] = {Map [pointerx pointery] fun {$ WI} {Tk.returnInt winfo(WI self.top)} end} in {WaitOr LeaveVar WaitVar} if {IsDet LeaveVar} then skip else W={MakeBalloon {GT} X+10 Y+10} in {Wait LeaveVar} {W tkClose} end end end meth leave @cur = unit end end end class Bar from Tk.canvasTag attr value: 0.0 suffix: '' feat y x meth init(parent:P y:Y x:X balloon:B color:C) Bar,tkInit(parent:P) self.y = Y self.x = X {P tk(create rectangle X Y+BarBorder X Y+BarHeight-BarBorder fill: C tags: self)} {self tkBind(event:'' action: B # enter(fun {$} {Format @value 2}#' '#@suffix end))} {self tkBind(event:'' action: B # leave)} end meth set(V) value <- V end meth get($) @value end meth setSuffix(S) suffix <- S end meth redraw(Scale) W = {FloatToInt @value * Scale} in {self tk(coords self.x self.y+BarBorder self.x+W self.y+BarHeight-BarBorder)} {self tk('raise')} end end class BarChart from Tk.frame feat canvas suffix scroll x0 x1 y0 y1 bars width ticks balloon attr scale: 1.0 limit: 0.0 meth init(parent: P barwidth: BW textwidth: TW <= 60 legend: L suffix: S <= '') W = BW + TW + 3 * BarXGap IH = ({Width L} + 2)* BarHeight H = IH + 2 * BarYGap in self.x0 = TW + 2 * BarXGap self.x1 = self.x0 + BW self.y0 = BarYGap self.y1 = self.y0 + {Width L} * BarHeight self.width = BW self.balloon = {Server.newPort Balloon init(P)} BarChart,tkInit(parent:P bd:2 relief:sunken bg:white) self.canvas = {New Tk.canvas tkInit(parent: self width: W height: ChartHeight + 2*BarYGap)} {self.canvas tk(conf scrollregion: q(0 0 W {Max ChartHeight + 2*BarYGap H}))} self.scroll = {New Tk.scrollbar tkInit(parent:self width:12)} {Tk.addYScrollbar self.canvas self.scroll} %% Draw bar area {self.canvas tk(create rectangle self.x0-1 self.y0-1 self.x1+1 self.y1+1 fill: ivory outline: gray40 width: 2)} {Record.forAllInd L proc {$ I T} {self text(self.canvas I T)} end} self.bars = {Record.mapInd L fun {$ I _} {New Bar init(parent:self.canvas x:self.x0 y:self.y0+(I-1)*BarHeight color: {GetColor.get I} balloon:self.balloon)} end} self.ticks = {New Tk.canvasTag tkInit(parent:self.canvas)} self.suffix = {New Tk.canvasTag tkInit(parent:self.canvas)} {self.canvas tk(create text self.x1 self.y1 + 2 * BarHeight anchor: se font: SmallFont text: S tags: self.suffix)} {self setSuffix(S)} end meth text(P I T) Tag = {New Tk.canvasTag tkInit(parent:P)} S = {VirtualString.toString T} SS = {List.take S 10} in {self.canvas tk(create text BarXGap self.y0 + (I-1) * BarHeight + BarHeight div 2 anchor: w font: SmallFont text: SS tags: Tag)} if SS\=S then {Tag tkBind(event:'' action: self.balloon#enter(fun {$} S end))} {Tag tkBind(event:'' action: self.balloon#leave)} end end meth setSuffix(S) {self.suffix tk(itemconfigure text:S)} {Record.forAll self.bars proc {$ B} {B setSuffix(S)} end} end meth pack {Tk.batch [grid(self.canvas row:0 column:0) grid(self.scroll row:0 column:1 sticky:ns)]} end meth getMax($) {Record.foldL self.bars fun {$ M B} {Max M {B get($)}} end 0.0} end meth update(Limit NoTicks) scale <- {ToFloat self.width} / Limit {self.ticks tk(delete)} {For 1 2*NoTicks-1 1 proc {$ I} X = self.x0 + (self.width * I) div (2*NoTicks) in {self.canvas tk(create line X self.y0 X self.y1 fill: gray20 tags: self.ticks)} end} {For 0 NoTicks 1 proc {$ I} X = self.x0 + (self.width * I) div NoTicks V = (Limit / {IntToFloat NoTicks}) * {IntToFloat I} in if V=={Round V} then {self.canvas tk(create text X self.y1 + BarHeight anchor: s font: SmallFont text: {Format V 2} tags: self.ticks)} end end} {Record.forAll self.bars proc {$ B} {B redraw(@scale)} end} end meth display(I V) F = {ToFloat V} {self.bars.I set(F)} NM = BarChart,getMax($) Limit # NoTicks = {FindLimit.find NM} in if Limit==@limit then {self.bars.I redraw(@scale)} else limit <- Limit {self update(Limit NoTicks)} end end meth displayAll(RV) {Record.forAllInd self.bars proc {$ I B} {B set({ToFloat RV.I})} end} NM = BarChart,getMax($) Limit # NoTicks = {FindLimit.find NM} in if Limit==@limit then {Record.forAll self.bars proc {$ B} {B redraw(@scale)} end} else limit <- Limit {self update(Limit NoTicks)} end end end end mozart-1.4.0.20080704/share/lib/cp/par/ParSearch.oz0000664000000000000000000000665107170610235017722 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 2000-10-10 14:50:37 +0200 (Tue, 10 Oct 2000) $ by $Author: schulte $ %%% $Revision: 13224 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org/ %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor require Server at 'ParServer.ozf' import Process at 'ParProcess.ozf' Logging at 'x-oz://system/ParLogging.ozf' Manager at 'ParManager.ozf' Module export Engine define fun {UnRoll N X Xr} if N>0 then X|{UnRoll N-1 X Xr} else Xr end end class Engine feat Hosts Names attr Trace: false CurManager: unit CurLogger: unit prop locking meth init(...) = M lock Spec = {List.toTuple '#' {Record.foldRInd M fun {$ F X Ps} H#N#M = if {IsInt F} then X#1#automatic else if {IsInt X} then F#X#automatic elseif {IsAtom X} then F#1#X else F#X.1#X.2 end end in {UnRoll N H#M Ps} end nil}} in self.Hosts = {Record.mapInd Spec fun {$ I H#M} {New Process.worker init(name:H fork:M id:I)} end} self.Names = {Record.map Spec fun {$ H#_} H end} end end meth trace(OnOff <= unit) lock if OnOff==unit then Trace <- {Not @Trace} else Trace <- OnOff end if {Not @Trace} andthen @CurLogger\=unit then {@CurLogger close} CurLogger <- unit end end end meth GetLogger($) if @Trace then if @CurLogger==unit then CurLogger <- {Server.new Logging.reader init(self.Names)} else {@CurLogger reset} end @CurLogger else unit end end meth one(SF ?Ss) lock CurManager <- M L={self GetLogger($)} M={Server.new Manager.one init(logger: L worker: {Record.map self.Hosts fun {$ H} {H plain(manager: M logger: L script: SF $)} end})} in {M start} {M get(?Ss)} {Wait {M sync($)}} CurManager <- unit end end meth all(SF ?Ss) lock CurManager <- M L={self GetLogger($)} M={Server.new Manager.all init(logger: L worker: {Record.map self.Hosts fun {$ H} {H plain(manager: M logger: L script: SF $)} end})} in {M start} {M get(?Ss)} {Wait {M sync($)}} CurManager <- unit end end meth best(SF ?Ss) lock %% Get the script module [S] = if {Functor.is SF} then {Module.apply [SF]} else {Module.link [SF]} end CurManager <- M L={self GetLogger($)} M={Server.new Manager.best init(logger: L order: S.order worker: {Record.map self.Hosts fun {$ H} {H best(manager: M logger: L script: SF $)} end})} in {M start} {M get(?Ss)} {Wait {M sync($)}} CurManager <- unit end end meth stop M=@CurManager in if M\=unit then {M stop} end end meth close Engine,stop lock {Record.forAll self.Hosts proc {$ H} {H close} end} end end end end mozart-1.4.0.20080704/share/lib/cp/par/ParLogging.oz0000664000000000000000000001003406651575416020107 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 1999-01-21 11:01:50 +0100 (Thu, 21 Jan 1999) $ by $Author: schulte $ %%% $Revision: 10566 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org/ %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Statistics at 'ParStatistics.ozf' Property export writer: LogWriter reader: LogReader prepare fun {TaskToTree Ts Is} case Ts of nil then Is [] T|Tr then case T of commit(I) then {TaskToTree Tr I|Is} else {TaskToTree Tr Is} end end end proc {ArrayInc A I N} {Array.put A I {Array.get A I}+N} end class TaskData prop locking feat Tasks Overhead Nodes NoTasks Workers meth init(workers:WN) lock self.Tasks = {Dictionary.new} self.Nodes = {Array.new 1 WN 0} self.Overhead = {Array.new 1 WN 0} self.NoTasks = {Array.new 1 WN 0} self.Workers = WN end end meth PutTask(ID X) {Dictionary.put self.Tasks ID X} end meth GetTask(ID $) {Dictionary.get self.Tasks ID} end meth IncNoTask(WID) {ArrayInc self.NoTasks WID 1} end meth GetNoTask(WID $) {Array.get self.NoTasks WID} end meth AddNodes(WID N) {ArrayInc self.Nodes WID N} end meth GetNodes(WID $) {Array.get self.Nodes WID} end meth AddOverhead(WID N) {ArrayInc self.Overhead WID N} end meth GetOverhead(WID $) {Array.get self.Overhead WID} end meth start(id:ID pid:PID worker:WID start:SID) lock TaskData,PutTask(ID task(id:ID pid:PID worker:WID start:SID overhead:_ nodes:_)) end end meth stop(id:ID overhead:O nodes:N) lock TD = TaskData,GetTask(ID $) WID = TD.worker in TD.overhead = O TD.nodes = N TaskData,IncNoTask(WID) TaskData,AddOverhead(WID O) TaskData,AddNodes(WID N) end end meth getWorkers($) self.Workers end meth getTask(I $) lock TaskData,GetTask(I $) end end meth getNodes(WID Mode $) lock case Mode of avg then N=TaskData,GetNoTask(WID $) in if N==0 then 0 else TaskData,GetNodes(WID $) div N end [] total then TaskData,GetNodes(WID $) end end end meth getOverhead(WID Mode $) lock case Mode of avg then N=TaskData,GetNoTask(WID $) in if N==0 then 0 else TaskData,GetOverhead(WID $) div N end [] total then TaskData,GetOverhead(WID $) end end end meth taskToWorker(ID $) (TaskData,GetTask(ID $)).worker end end class LogWriter feat Logger meth init(L) self.Logger = L end meth log(M) L=self.Logger in if L\=unit then {L M} end end end define class LogReader feat names statistics attr data time: 0 used: 0 meth init(WorkerNames) self.names = WorkerNames self.statistics = {New Statistics.dialog init(worker:WorkerNames)} {self reset} end meth reset data <- {New TaskData init(workers:{Width self.names})} {self.statistics reset(@data)} end meth worker(WID What) case What of idle(nodes:N overhead:O id:ID) then {@data stop(id:ID nodes:N overhead:O)} {self.statistics update(WID)} else skip end end meth manager(What) case What of start then time <- {Property.get 'time.total'} [] done then used <- @time - {Property.get 'time.total'} [] steal(task:_ id:ID pid:PID worker:WID start:SID) then {@data start(id:ID pid:PID worker:WID start:SID)} else skip end end meth close {self.statistics tkClose} end end end mozart-1.4.0.20080704/share/lib/cp/par/ParFindLimit.oz0000664000000000000000000000234706651575416020410 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 1999-01-21 11:01:50 +0100 (Thu, 21 Jan 1999) $ by $Author: schulte $ %%% $Revision: 10566 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org/ %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor export find: FindLimit prepare fun {NextPower N M} if N=<{Pow 10.0 M} then {Pow 10.0 M} else {NextPower N M+1.0} end end fun {NextIntegral N P I} if N= %%% %%% Copyright: %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 1999-01-21 11:01:50 +0100 (Thu, 21 Jan 1999) $ by $Author: schulte $ %%% $Revision: 10566 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org/ %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor export get: GetColor prepare ColorTab = colors(c(106 90 205) c(46 139 87) c(205 133 63) c(176 48 96) c(250 235 215) c(154 205 50) c(173 216 230) c(70 130 180) c(139 69 19) c(143 188 143) c(188 143 143) c(189 183 107) c(100 149 237) c(233 150 122) c(255 127 80) c(184 134 11) c(178 34 34) c(0 100 0) c(222 184 135) c(95 158 160) c(255 228 196)) NoColors = {Width ColorTab} fun {GetColor N} ColorTab.((N mod NoColors) + 1) end end mozart-1.4.0.20080704/share/lib/cp/par/ParWorker.oz0000664000000000000000000001275507170610235017770 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 2000-10-10 14:50:37 +0200 (Tue, 10 Oct 2000) $ by $Author: schulte $ %%% $Revision: 13224 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org/ %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import TraceSpace(plain best) at 'ParTraceSpace.ozf' Space(new ask) require Logging(writer: LogWriter) at 'ParLogging.ozf' Server(new) at 'ParServer.ozf' export plain: NewPlainWorker best: NewBestWorker define local fun {CanSteal Ss} case Ss of nil then false [] _|Sr then Sr\=nil end end fun {Steal S1|S1r ?SS} case S1r of nil then SS=S1 nil [] _|_ then S1|{Steal S1r SS} end end in class PlainWorker from LogWriter feat manager root id attr open: nil overhead: unit nodes: 0 task_id: 0 meth init(logger: L manager: M script: S id: I) LogWriter, init(L) self.manager = M self.root = {New TraceSpace.plain new(S)} self.id = I end meth start(task:Is id:I) S={self.root clone($)} in {S internalize(Is)} overhead <- {Length Is} open <- [S] nodes <- 0 task_id <- I PlainWorker, explore end meth explore case @open of nil then PlainWorker, log(worker(self.id idle(overhead: @overhead nodes: @nodes id: @task_id))) {self.manager idle(self.id)} [] S|Sr then nodes <- @nodes + 1 case {S ask($)} of failed then open <- Sr [] succeeded then {self.manager succeeded({S merge($)})} open <- Sr [] alternatives(N) then C={S clone($)} in {S commit(1)} {C commit(2#N)} open <- S|C|Sr end {self.server explore} end end meth steal(?Stolen) if {CanSteal @open} then S in open <- {Steal @open ?S} Stolen = yes(task:{S externalize($)} id:@task_id start:@nodes+@overhead) else Stolen=no end end meth stop PlainWorker, log(worker(self.id stop(overhead: @overhead nodes: @nodes id: @task_id))) open <- nil end end end local fun {CanSteal Ss} case Ss of nil then false [] _|Sr then Sr\=nil end end fun {CanStealBest Fs Bs} case Bs of nil then {CanSteal Fs} [] _|Br then Br\=nil orelse Fs\=nil end end fun {Steal S1|S1r ?SS} case S1r of nil then SS=S1 nil [] _|_ then S1|{Steal S1r SS} end end in class BestWorker from LogWriter feat manager order root id attr fore: nil back: nil best: unit overhead: unit nodes: 0 task_id: 0 meth init(manager:M script:S order:O logger:L id:I) LogWriter, init(L) self.manager = M self.root = {New TraceSpace.best new(S O)} self.order = O self.id = I fore <- nil back <- nil best <- unit end meth IsBetter(S1 S2 $) %% Returns true, iff S2 is better than S1 if S1==unit then true else TS={Space.new proc {$ _} {self.order S1 S2} end} in if {Space.ask TS}==failed then false else true end end end meth constrain(S) if BestWorker,IsBetter(@best S $) then back <- {Append @fore @back} fore <- nil best <- S end end meth start(task:Is id:I) S={self.root clone($)} in {S internalize(Is)} overhead <- {Length Is} fore <- [S] back <- nil nodes <- 0 task_id <- I BestWorker, log(worker(self.id start(id:I))) BestWorker, explore end meth explore case @fore of nil then case @back of nil then BestWorker, log(worker(self.id idle(overhead: @overhead nodes: @nodes id: @task_id))) {self.manager idle(self.id)} [] S|Sr then back <- Sr fore <- [S] {S constrain(@best)} {self.server explore} end [] S|Sr then nodes <- @nodes + 1 case {S ask($)} of failed then fore <- Sr [] succeeded then Sol={S merge($)} in {self.manager collect(Sol)} back <- {Append Sr @back} fore <- nil best <- Sol [] alternatives(N) then C={S clone($)} in {S commit(1)} {C commit(2#N)} fore <- S|C|Sr end {self.server explore} end end meth steal($) if {CanStealBest @fore @back} then S in if @back==nil then %% Steal from foreground stack fore <- {Steal @fore ?S} else %% Steal from background stack back <- {Steal @back ?S} {S constrain(@best)} end yes(task:{S externalize($)} id:@task_id start:@nodes+@overhead) else no end end meth stop BestWorker, log(worker(self.id stop(overhead: @overhead nodes: @nodes id: @task_id))) fore <- nil back <- nil end end end fun {NewPlainWorker M} {Server.new PlainWorker M} end fun {NewBestWorker M} {Server.new BestWorker M} end end mozart-1.4.0.20080704/share/lib/cp/par/ParTraceSpace.oz0000664000000000000000000000613607170610235020525 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 2000-10-10 14:50:37 +0200 (Tue, 10 Oct 2000) $ by $Author: schulte $ %%% $Revision: 13224 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org/ %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Space export plain: PlainSpace best: BestSpace define local proc {DoUpdate S Fs Hs ?NHs} case Fs of nil then NHs=Hs [] F|Fr then NHs=F|{DoUpdate S Fr Hs} {Space.commit S F} end end in class PlainSpace attr history: nil future: nil space: nil meth new(P) space <- {Space.new P} history <- nil future <- nil end meth Update history <- {DoUpdate @space @future @history} future <- nil end meth ask($) PlainSpace,Update {Space.ask @space} end meth Clone(S H) space <- S future <- nil history <- H end meth clone($) PlainSpace,Update {New PlainSpace Clone({Space.clone @space} @history)} end meth merge($) PlainSpace,Update {Space.merge @space $} end meth commit(I) future <- case I of N#M then if N==M then N else I end else I end|@future end meth externalize($) {Append @future @history} end meth internalize(Hs) history <- nil future <- Hs PlainSpace,Update end end end local proc {DoUpdate S O Fs Hs ?NHs} case Fs of nil then NHs=Hs [] F|Fr then NHs=F|{DoUpdate S O Fr Hs} case F of commit(I) then {Space.commit S I} [] constrain(Sol) then {Space.ask S _} {Space.inject S proc {$ R} {O Sol R} end} end end end in class BestSpace feat order attr history: nil future: nil space: nil meth new(P O) space <- {Space.new P} self.order = O history <- nil future <- nil end meth Update history <- {DoUpdate @space self.order @future @history} future <- nil end meth ask($) BestSpace,Update {Space.ask @space} end meth constrain(S) future <- constrain(S)|@future end meth Clone(S O H) space <- S self.order = O future <- nil history <- H end meth clone($) BestSpace,Update {New BestSpace Clone({Space.clone @space} self.order @history)} end meth merge($) BestSpace,Update {Space.merge @space $} end meth commit(I) future <- commit(case I of N#M then if N==M then N else I end else I end)|@future end meth externalize($) {Append @future @history} end meth internalize(Hs) history <- nil future <- Hs BestSpace,Update end end end end mozart-1.4.0.20080704/share/lib/cp/par/ParProcess.oz0000664000000000000000000000414506656056227020144 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 1999-02-03 15:26:31 +0100 (Wed, 03 Feb 1999) $ by $Author: schulte $ %%% $Revision: 10699 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org/ %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor export worker: Process import Remote(manager) Module(manager) define class Process feat name id process meth init(name:Name fork:Fork id:Id) thread self.process = if Name==same then {New Module.manager init} else {New Remote.manager init(host:Name fork:Fork)} end self.name = Name self.id = Id end end meth plain(logger:L manager:M script:SF $) Id=self.id in {Wait self.name} {self.process apply(functor import Module Worker(plain) at 'x-oz://system/ParWorker.ozf' export worker: W define %% Get the script module [S] = if {Functor.is SF} then {Module.apply [SF]} else {Module.link [SF]} end %% Start worker W = {Worker.plain init(logger: L manager: M id: Id script: S.script)} end $)}.worker end meth best(logger:L manager:M script:SF $) Id=self.id in {Wait self.name} {self.process apply(functor import Module Worker(best) at 'x-oz://system/ParWorker.ozf' export worker: W define %% Get the script module [S] = if {Functor.is SF} then {Module.apply [SF]} else {Module.link [SF]} end %% Start worker W = {Worker.best init(logger: L manager: M id: Id order: S.order script: S.script)} end $)}.worker end meth close if self.name\=same then {self.process close} end end end end mozart-1.4.0.20080704/share/lib/cp/par/ParStatistics.oz0000664000000000000000000000661606651575416020666 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 1999-01-21 11:01:50 +0100 (Thu, 21 Jan 1999) $ by $Author: schulte $ %%% $Revision: 10566 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org/ %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import BarChart at 'ParBarChart.ozf' Tk TkTools export dialog: Statistics prepare fun {ToText Mode} '['# case Mode of total then 'Total' [] avg then 'Average' end # ' Nodes]' end define SmallFont = {New Tk.font tkInit(family:helvetica size:10)} TextFont = {New Tk.font tkInit(family:helvetica size:12)} class SearchChart from TkTools.textframe prop locking attr mode: total data feat bars what meth init(parent:P text:T legend:L what:W) lock SearchChart,tkInit(parent: P text: T font: TextFont) Bars = {New BarChart.chart init(parent: self.inner barwidth: 400 suffix: {ToText @mode} legend: L)} ModeVar = {New Tk.variable tkInit(@mode)} ModeFr = {New Tk.frame tkInit(parent:self.inner)} Total = {New Tk.radiobutton tkInit(parent: ModeFr font: SmallFont var: ModeVar val: total action: self # setMode(total) width: 10 text: 'Total')} Avg = {New Tk.radiobutton tkInit(parent: ModeFr font: SmallFont var: ModeVar val: avg action: self # setMode(avg) width: 10 text: 'Average')} in {Bars pack} {Tk.batch [grid(Bars padx:3 pady:2 row:0 columnspan:2) grid(Total Avg sticky:w) grid(ModeFr sticky:w row:1) ]} self.bars = Bars self.what = W end end meth reset(Data) lock data <- Data {self UpdateAll} end end meth update(WID) lock What = self.what in {self.bars display(WID {@data What(WID @mode $)})} end end meth UpdateAll Data = @data What = self.what M = {Data getWorkers($)} D = {MakeTuple '#' M} in {For 1 M 1 proc {$ WID} D.WID = {Data What(WID @mode $)} end} {self.bars displayAll(D)} end meth setMode(Mode) lock mode <- Mode {self.bars setSuffix({ToText Mode})} {self UpdateAll} end end end class Statistics from Tk.toplevel feat explored overhead meth init(worker: W) Statistics,tkInit(title: 'Statistics' withdraw: true) Explored = {New SearchChart init(parent: self text: 'Explored' legend: W what: getNodes)} Overhead = {New SearchChart init(parent: self text: 'Overhead' legend: W what: getOverhead)} in {Tk.batch [grid(Explored) grid(Overhead) update(idletasks) wm(deiconify self)]} self.explored = Explored self.overhead = Overhead end meth reset(Data) {self.explored reset(Data)} {self.overhead reset(Data)} end meth update(WID) {self.explored update(WID)} {self.overhead update(WID)} end end end mozart-1.4.0.20080704/share/lib/cp/par/ParManager.oz0000664000000000000000000001032107170610235020054 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 2000-10-10 14:50:37 +0200 (Tue, 10 Oct 2000) $ by $Author: schulte $ %%% $Revision: 13224 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org/ %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor require ParLogging(writer: LogWriter) import Space export one: OneManager all: AllManager best: BestManager define local DelayNoneFound = 100 fun {FindWork Bs W} case Bs of nil then no [] B|Br then A={W.B steal($)} in case {Label A} of yes then A [] no then {FindWork Br W} end end end in class Manager from LogWriter feat done attr busy: nil workers: '#' no_workers: 0 task_id: 0 is_done: false meth init(logger:L worker:W) LogWriter, init(L) busy <- nil workers <- W no_workers <- {Width W} task_id <- 0 is_done <- false end meth sync($) self.done end meth getTaskId(?I) I=@task_id task_id <- I+1 end meth start ID = Manager,getTaskId($) in busy <- [1] Manager, log(manager(start)) Manager, log(manager(steal(task:nil id:ID pid:~1 worker:1 start:0))) {@workers.1 start(task:nil id:ID)} {For 2 @no_workers 1 proc {$ I} {self.server idle(I)} end} end meth broadcast(M) {Record.forAll @workers proc {$ W} {W M} end} end meth idle(WID) busy <- {List.subtract @busy WID} case @busy of nil then if @is_done then skip else is_done <- true self.done = unit {self done} end elseof Bs then case {FindWork Bs @workers} of no then %% Sleep and start again thread {Delay DelayNoneFound} {self.server idle(WID)} end [] yes(task:Task id:PID start:SID) then ID=Manager,getTaskId($) in %% This guy is busy now busy <- {Append Bs [WID]} %% Give him the work Manager,log(manager(steal(task:Task id:ID pid:PID worker:WID start:SID))) {@workers.WID start(task:Task id:ID)} end end end meth done Manager, log(manager(done)) end meth stop Manager, log(manager(done)) {ForAll busy <- nil proc {$ WID} {@workers.WID stop} end} end end end class OneManager from Manager attr sol: nil meth init(logger:L worker:Ws) Manager, init(logger:L worker:Ws) sol <- _ end meth succeeded(S) if {IsDet @sol} then skip else [S] = @sol Manager, stop end end meth get($) @sol end meth done Manager,done if {IsDet @sol} then skip else @sol=nil end end end class AllManager from Manager attr sol_head: nil sol_tail: nil meth init(logger:L worker:Ws) Ss in Manager, init(logger:L worker:Ws) sol_head <- Ss sol_tail <- Ss end meth done Manager, done @sol_tail = nil end meth succeeded(S) Ss in S|Ss = (sol_tail <- Ss) end meth get($) @sol_head end end class BestManager from Manager attr sol_head: nil sol_tail: nil sol_best: unit feat order meth init(logger:L worker:Ws order:O) Ss in Manager, init(logger:L worker:Ws) sol_head <- Ss sol_tail <- Ss sol_best <- unit self.order = O end meth done Manager, done @sol_tail = nil end meth IsBetter(S1 S2 $) %% Returns true, iff S2 is better than S1 if S1==unit then true else TS={Space.new proc {$ _} {self.order S1 S2} end} in if {Space.ask TS}==failed then false else true end end end meth collect(S) if BestManager,IsBetter(@sol_best S $) then Ss in Manager,broadcast(constrain(S)) sol_best <- S S|Ss = (sol_tail <- Ss) end end meth get($) @sol_head end end end mozart-1.4.0.20080704/share/lib/cp/RecordC.oz0000664000000000000000000000207406725715127016617 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1999 %%% %%% Last change: %%% $Date: 1999-06-04 11:20:23 +0200 (Fri, 04 Jun 1999) $ by $Author: schulte $ %%% $Revision: 11432 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import BootRecordC(is: Is width: Width tell: Tell tellSize: TellSize '^': `^` hasLabel: HasLabel monitorArity: MonArity) at 'x-oz://boot/RecordC' Space(is) export Is Width Tell TellSize HasLabel MonitorArity ReflectArity '^': `^` define {Wait Space.is} proc {MonitorArity R P S} U in {MonArity R U S} proc {P} U=unit end end proc {ReflectArity R S} {MonArity R unit S} end endmozart-1.4.0.20080704/share/lib/cp/FS.oz0000664000000000000000000003644107531011155015575 0ustar rootroot%%% %%% Authors: %%% Tobias Mueller (tmueller@ps.uni-sb.de) %%% Martin Mueller (mmueller@ps.uni-sb.de) %%% %%% Contributors: %%% Denys Duchier (duchier@ps.uni-sb.de) %%% %%% Copyright: %%% Tobias Mueller, 1998 %%% Martin Mueller, 1997 %%% %%% Last change: %%% $Date: 2002-08-22 00:21:33 +0200 (Thu, 22 Aug 2002) $ by $Author: duchier $ %%% $Revision: 15083 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor require CpSupport(vectorToList: VectorToList expand: ExpandList) import FSB at 'x-oz://boot/FSB' FSP at 'x-oz://boot/FSP' Space(waitStable) FD(decl list sum int distribute) Error(registerFormatter) export include: FSIsIncl exclude: FSIsExcl intersect: FSIntersect intersectN: FSIntersectN union: FSUnion unionN: FSUnionN subset: FSSubset subseteq: FSSubset disjoint: FSDisjoint disjointN: FSDisjointN distinct: FSDistinct distinctN: FSDistinctN partition: FSPartition makeWeights: FSMakeWeights card: FSCard cardRange: FSCardRange sup: FSSup inf: FSInf diff: FSDiff compl: FSCompl complIn: FSComplIn isIn: FSIsIn forAllIn: FSForAllIn var: FSVar value: FSValue reified: FSReified monitorIn: FSMonitorIn monitorOut: FSMonitorOut reflect: FSReflect int: FSInt distribute: FSDistribute define {Wait Space.waitStable} {Wait FSB.'var.is'} FSIsIncl = FSP.include FSIsExcl = FSP.exclude FSMatch = FSP.'ini.match' FSMinN = FSP.'int.minN' FSMaxN = FSP.'int.maxN' FSSeq = FSP.'int.seq' FSIsIn = FSP.isIn FSIsInReif = FSP.'reified.isIn' FSEqualReif = FSP.'reified.equal' FSSetValue = FSB.'value.make' FSSet = FSB.'var.bounds' FSDisjoint = FSP.disjoint FSDistinct = FSP.distinct FSDistinctWith = fun {$ S1} proc {$ S2} {FSDistinct S1 S2} end end FSUnion = FSP.union FSIntersect = FSP.intersect FSSubset = FSP.subsume FSDiff = FSP.diff FSMin = FSP.'int.min' FSMax = FSP.'int.max' FSConvex = FSP.'int.convex' FSisVar = FSB.'var.is' FSisValue = FSB.'value.is' FSvalueToString = FSB.'value.toString' %% %% Distribution %% local fun {GetFeaturePath Rec Spec Path} case Path of FD|T then F#D = FD PP = if {HasFeature Spec F} then Rec.(Spec.F) else Rec.D end in if T==nil then PP else {GetFeaturePath PP Spec T} end else found_nil_in_path end end fun {Find X|Xr C} {FoldL Xr fun {$ I E} if {C I E} then I else E end end X} end fun {MinElement Y|_} case Y of L#_ then L else Y end end fun {MaxElement Ys} case {List.last Ys} of _#R then R [] Y then Y end end MINELEM = {NewName} MAXELEM = {NewName} fun {LESS X Y} case X#Y of !MINELEM#!MINELEM then false [] !MINELEM#_ then true [] _#!MINELEM then false [] !MAXELEM#!MAXELEM then false [] !MAXELEM#_ then false [] _#!MAXELEM then true else X =< Y end end fun {GREATER X Y} case X#Y of !MINELEM#!MINELEM then false [] !MINELEM#_ then false [] _#!MINELEM then true [] !MAXELEM#!MAXELEM then false [] !MAXELEM#_ then true [] _#!MAXELEM then false else X > Y end end fun {WeightMin DF} fun {$ CL WT} if CL == nil then DF else {Find {ExpandList CL} fun {$ X Y} {WT X} < {WT Y} end} end end end fun {WeightMax DF} fun {$ CL WT} if CL == nil then DF else {Find {ExpandList CL} fun {$ X Y} {WT X} > {WT Y} end} end end end fun {WeightSum CL WT} {FD.sum {Map {ExpandList CL} fun {$ X} {WT X} end} '=:'} = {FD.decl} end fun {OrderFun Spec Select WT} CardTable = c(unknown: fun {$ S} {FSGetNumOfUnknown {Select S}} end lowerBound: fun {$ S} {FSGetNumOfGlb {Select S}} end upperBound: fun {$ S} {FSGetNumOfLub {Select S}} end) fun {MakeCompTableWeight F} c(unknown: fun {$ S} {F {FSGetUnknown {Select S}} WT} end lowerBound: fun {$ S} {F {FSGetGlb {Select S}} WT} end upperBound: fun {$ S} {F {FSGetLub {Select S}} WT} end) end OrderFunTable = s(min: c(card: CardTable weightMin: {MakeCompTableWeight {WeightMin MAXELEM}} weightMax: {MakeCompTableWeight {WeightMax MAXELEM}} weightSum: {MakeCompTableWeight WeightSum}) max: c(card: CardTable weightMin: {MakeCompTableWeight {WeightMin MINELEM}} weightMax: {MakeCompTableWeight {WeightMax MINELEM}} weightSum: {MakeCompTableWeight WeightSum}) ) OrderFunTableRel = s(min: LESS max: GREATER) in if {IsProcedure Spec} then Spec else if Spec == naive then fun {$ L} L end else OrderFunRel = {GetFeaturePath OrderFunTableRel Spec [sel#min]} OrderFun = {GetFeaturePath OrderFunTable Spec [sel#min cost#card comp#unknown]} in fun {$ L} {Sort L fun {$ X Y} {OrderFunRel {OrderFun X} {OrderFun Y}} end} end end end end fun {ElementFun Spec Select WT} ElementFunTable = v(min: v(unknown: fun {$ S} {MinElement {FSReflect.unknown {Select S}}} end weight: fun {$ S} {{WeightMin error} {FSReflect.unknown {Select S}} WT} end) max: v(unknown: fun {$ S} {MaxElement {FSReflect.unknown {Select S}}} end weight: fun {$ S} {{WeightMax error} {FSReflect.unknown {Select S}} WT} end) ) in if {IsProcedure Spec} then Spec else {GetFeaturePath ElementFunTable Spec [sel#min wrt#unknown]} end end fun {FilterFun Spec Select} case Spec of true then fun {$ X} {FSGetNumOfUnknown {Select X}} > 0 end else fun {$ X} Y = {Select X} in {FSGetNumOfUnknown Y} > 0 andthen {Spec Y} end end end fun {SelectFun Spec} case Spec of id then fun {$ X} X end else Spec end end fun {RRobinFun Spec} if Spec then fun {$ H|T} {Append T [H]} end else fun {$ L} L end end end proc {FSDistNaive Xs} case Xs of nil then skip [] X|Xr then {Space.waitStable} Unknown={FSReflect.unknown X} in if Unknown==nil then {FSDistNaive Xr} else UnknownVal = {MinElement Unknown} B = {FSP.'reified.include' UnknownVal X} in {FD.distribute generic(value:max) [B]} /* choice {FSIsIncl UnknownVal X} [] {FSIsExcl UnknownVal X} end */ {FSDistNaive Xs} end end end proc {FSDistGeneric SL Order FCond Elem RRobin Sel Proc} {Space.waitStable} if Proc\=unit then {Proc} {Space.waitStable} end local FilteredSL = {Filter SL FCond} %% it is unnecessary to compute the sorted list %% we just need to pick the right variable. %% this needs to be fixed eventually. SortedSL = {Order FilteredSL} in case SortedSL of nil then skip [] HSL|_ then UnknownVal={Elem HSL} DistVar ={Sel HSL} B = {FSP.'reified.include' UnknownVal DistVar} in {FD.distribute generic(value:max) [B]} /* choice {FSIsIncl UnknownVal DistVar} [] {FSIsExcl UnknownVal DistVar} end */ {FSDistGeneric {RRobin FilteredSL} Order FCond Elem RRobin Sel Proc} end end end in proc {FSDistribute K Vs} L={VectorToList Vs} in case K of naive then {FSDistNaive L} else case {Label K} of generic then Select = {SelectFun {CondSelect K select id}} Weights = {CondSelect K weights {FSMakeWeights nil}} Order = {OrderFun {CondSelect K order order} Select Weights} Filter = {FilterFun {CondSelect K filter true} Select} Element = {ElementFun {CondSelect K element element} Select Weights} RRobin = {RRobinFun {CondSelect K rrobin false}} Proc = {CondSelect K procedure unit} in {FSDistGeneric L Order Filter Element RRobin Select Proc} else {Exception.raiseError fs(unknownDistributionStrategy 'FS.distribute' [K Vs] 1)} end end end end %% %% Shorthands %% FSCard = FSP.card FSCardRange = FSB.'cardRange' FSGetUnknown = FSB.'reflect.unknown' FSGetGlb = FSB.'reflect.lowerBound' FSGetLub = FSB.'reflect.upperBound' FSGetCard = FSB.'reflect.card' FSGetNumOfGlb = FSB.'reflect.cardOf.lowerBound' FSGetNumOfLub = fun {$ S} FSSup - FSInf + 1 - {FSB.getNumOfKnownNotIn S} end FSGetNumOfUnknown = FSB.'reflect.cardOf.unknown' FSSup = {FSB.'sup'} FSInf = 0 FSUniversalRefl = [0#FSSup] FSUniversal = {FSSetValue FSUniversalRefl} /* fun {FSIntersectN Vs} Xs = {VectorToList Vs} in {FoldR Xs FSIntersect FSUniversal} end */ proc {FSIntersectN Vs U} {FSP.intersectN Vs U} end proc {FSUnionN Vs U} {FD.sum {Map {VectorToList Vs} fun {$ V} {FSCard V} end} '>=:' {FSCard U}} {FSP.unionN Vs U} end FSDisjointN = FSP.disjointN proc {FSDistinctN Vs} Xs = {VectorToList Vs} in {ForAllTail Xs proc {$ Ts} case Ts of nil then skip [] T|Tr then {ForAll Tr {FSDistinctWith T}} end end} end proc {FSPartition Vs U} % the C++ implementation is buggy , that is why we use this % implementation for the time being % {FSP.partition Vs U} {FSDisjointN Vs} {FSUnionN Vs U} {FD.sum {Map {VectorToList Vs} fun {$ V} {FSCard V} end} '=:' {FSCard U}} end fun {FSMakeWeights WL} WeightTable = {NewDictionary} ScanWeightDescr = proc {$ D} case D of (default#W)|T then {Dictionary.put WeightTable default W} {ScanWeightDescr T} [] ((E1#E2)#W)|T then {Dictionary.put WeightTable E1 W} {ScanWeightDescr if E1 < E2 then (((E1+1)#E2)#W)|T else T end} [] (E#W)|T then {Dictionary.put WeightTable E W} {ScanWeightDescr T} [] nil then skip end end Default in {Dictionary.put WeightTable default 0} {ScanWeightDescr WL} Default = {Dictionary.get WeightTable default} fun {$ E} {Dictionary.condGet WeightTable E Default} end end fun {FSCompl S} {FSDiff FSUniversal S} end proc {FSComplIn S1 A S2} {FSDisjoint S1 S2} {FSUnion S1 S2 A} end proc {FSForAllIn S P} {ForAll {FSMonitorIn S} P} end FSVar = var(is: FSisVar decl: fun {$} {FSSet nil FSUniversalRefl} end upperBound: fun {$ B} {FSSet nil B} end lowerBound: fun {$ A} {FSSet A FSUniversalRefl} end bounds: FSSet list: list(decl: proc {$ Len Ss} Ss = {MakeList Len} {ForAll Ss FSVar.decl} end upperBound: proc {$ Len A Ss} Ss = {MakeList Len} {ForAll Ss proc {$ X} {FSVar.upperBound A X} end} end lowerBound: proc {$ Len A Ss} Ss = {MakeList Len} {ForAll Ss proc {$ X} {FSVar.lowerBound A X} end} end bounds: proc {$ Len GLB LUB Ss} Ss = {MakeList Len} {ForAll Ss proc {$ X} {FSVar.bounds GLB LUB X} end} end) tuple: tuple(decl: proc {$ L Size Ss} Ss = {MakeTuple L Size} {Record.forAll Ss FSVar.decl} end upperBound: proc {$ L Size A Ss} Ss = {MakeTuple L Size} {Record.forAll Ss proc {$ X} {FSVar.upperBound A X} end} end lowerBound: proc {$ L Size A Ss} Ss = {MakeTuple L Size} {Record.forAll Ss proc {$ X} {FSVar.lowerBound A X} end} end bounds: proc {$ L Size GLB LUB Ss} Ss = {MakeTuple L Size} {Record.forAll Ss proc {$ X} {FSVar.bounds GLB LUB X} end} end) record: record(decl: proc {$ L Ls Ss} Ss = {MakeRecord L Ls} {Record.forAll Ss FSVar.decl} end upperBound: proc {$ L Ls A Ss} Ss = {MakeRecord L Ls} {Record.forAll Ss proc {$ X} {FSVar.upperBound A X} end} end lowerBound: proc {$ L Ls A Ss} Ss = {MakeRecord L Ls} {Record.forAll Ss proc {$ X} {FSVar.lowerBound A X} end} end bounds: proc {$ L Ls GLB LUB Ss} Ss = {MakeRecord L Ls} {Record.forAll Ss proc {$ X} {FSVar.bounds GLB LUB X} end} end) ) FSValue = value(empty: {FSSetValue nil} universal: {FSSetValue FSUniversalRefl} singl: fun {$ N} {FSSetValue [N]} end make: FSSetValue is: FSisValue toString: FSvalueToString) FSReified = reified(isIn: FSIsInReif areIn: proc {$ W S BList} WList = {ExpandList {FSGetGlb {FSB.'value.make' W}}} in BList = {FD.list {Length WList} 0#1} = {Map WList fun {$ E} {FSIsInReif E S} end} end include: FSP.'reified.include' bounds: FSP.'reified.bounds' boundsN: FSP.'reified.boundsN' partition: proc {$ SVs Is GSet Rs} Rs = {Map Is fun {$ I} {FD.int [0 I]} end} {FSP.'reified.partition' SVs GSet Rs} end equal: FSEqualReif) FSMonitorIn = FSP.monitorIn FSMonitorOut = FSP.monitorOut FSReflect = reflect(unknown: FSGetUnknown unknownList: fun {$ S} {ExpandList {FSGetUnknown S}} end lowerBound: FSGetGlb lowerBoundList: fun {$ S} {ExpandList {FSGetGlb S}} end upperBound: FSGetLub upperBoundList: fun {$ S} {ExpandList {FSGetLub S}} end card: FSGetCard cardOf: card(lowerBound: FSGetNumOfGlb upperBound: FSGetNumOfLub unknown: FSGetNumOfUnknown)) FSInt = int(match: FSMatch minN: FSMinN maxN: FSMaxN seq: FSSeq min: FSMin max: FSMax convex: FSConvex) %% %% Register error formatter %% {Error.registerFormatter fs fun {$ E} T = 'error in finite set system' in case E of fs(unknownDistributionStrategy A Xs P) then error(kind: T msg: 'unknown distribution strategy' items: [hint(l:'At argument' m:P) hint(l:'In statement' m:apply(A Xs))]) else error(kind: T items: [line(oz(E))]) end end} end mozart-1.4.0.20080704/share/lib/t2p.sh0000775000000000000000000000115407104513343015350 0ustar rootroot#! /bin/sh : ${BUILDTOP=../..} : ${SRCDIR=.} : ${SRCTOP=$SRCDIR/../..} : ${OZPLATFORM=`$SRCTOP/share/bin/ozplatform`} : ${OZPREFIX=/opt/mozart-1.1.0} if test -z "$TEXT2PICKLE" then for d in \ $BUILDTOP/platform/emulator \ $BUILDTOP/platform/emulator/$OZPLATFORM \ $OZPREFIX/platform/$OZPLATFORM do if test -x $d/text2pickle.exe then TEXT2PICKLE=$d/text2pickle.exe break fi done fi if test -z "$TEXT2PICKLE" then echo Fatal error: text2pickle not found 2>&1 exit 1 fi if test "x$OZMAKE_VERBOSE" = xyes then echo "Using TEXT2PICKLE: $TEXT2PICKLE" 1>&2 fi exec $TEXT2PICKLE "$@" mozart-1.4.0.20080704/share/lib/boot-ozc.ozt.gz0000664000000000000000000152742611030716023017226 0ustar rootroot‹aScHìýk—·² ˆ~¯_Á>=k©{æl)äÓ«wßÑ‘dm­–-µ%ŸmõxnUEI‰L!¯=xÀ¦Š²~û¯"ö¶‚·Iäu™ÀëØ×¥€×2öZÂk{­àu{Âë,ö:ƒ×yìu¯‹Øë^—þkxVÅ>…”ô ™0Ï¢K [’ Ö;¶",wlA*XíØzT°Ø±å¨`­ËØ[Xê °ïëÅÛ¯D7:j8ÖÛ»¦7ÛM€ØVâÃ~wÍŽªûøÛÍŠÔ>h–ûÁ¯ÙýþÕ£Gïw»ã£×Ëýaµ€3H÷›jû¢# ™hȶ«_¾]^¯®zÇÓ­¦¦’D¯×ƒŸ—›ÛÕÃõ!rŒ“D˜Vû¦M7L_¿ù—¡ õtôôõ\ †ˆNßìÈ/ËõñÕ¾w¤§ëËãz·]î›ò§«÷·O@§LÃ~³_o/ÚC¶)m›gûý®sއßÇÕõ£7ðãáî÷ÓfiGVJ0ß,/WcúæN‘дìr·½\WÛúÏããîúñöêÅöØ»äOv×7ëÍjÿæöF_‰'œ.Üîfµ°¦ß­»ÍϧN<× úqÅßô"׫rsÛ¹ 8¯÷5Üûão§Á£/º«Õ‡åífà˜W·p~Þ®®o6õ¶N\ŽL_-‡åÏ«¿¯Ÿþ¶Z^­† ÷ëõåO›Sw"+ÌZ?Ûþi›­Š7Ð7ŸiЯÞL?´·oê8y d¢×à¸_nvûks7Æšæ¸é›Ëåv;h¯žß^ßœ¦R™x~»~r}õxÿñÐ5pMUŽûõûGË›G¯n4²¾ù´ZgY| ?ÿc³~ÿâÕ)4@ãÍúÀ¿,ô…ÿËúêø‰}_)½ÇÕfî2Ѽ³þ}i#õ¶?øÿòÜ„”‰¾o>-/—ïWü05Ç¡Á¸Þm×µØóx¿>þÖ»lß­.wû«'§œX ‚ÒºÿŠx\ËZëúj©7¿e‡4ãüú»WO†K‡¢‘õOYÿÉë?Yý'MôÛR¿IJH½µ}_Ÿ£Ã£ýòæÓ£«ÕϫͣëÝïW‡Ã_Þ×ççò“þ×r|tø´Ü¯ÕØTÿÙþ´Ú?zYÿ¨ñôAˆ/zÞÿòêé»fvÒšñ<‰æ¢Ð|´gæR%n©²½Ûßü·Ç¯_¿|G÷ÏJ­Ü¨¿óÍã—/_|ûV…ä"üXñSþqÆ?ÎùÇÿ¸äWìc•ðÿ˜Ÿ¥âg©øY*~–ŠŸ¥âg©Jï„4'ª ÷Sh-ó¬Ð†¢¾þ“š­l4&Ì+ŠI¸¿ûýýòX¿hغÿ[Ìzûýë—Ï4²& ‚c±ª‚qK ÑÇúºZ×íjJeõ/® Ýоšñ‹ð»°xDÍÔ·Ïöã‚Ñ) Ïív¨q@=t¨¿Ù¬"BóIï—‡Õí~ãÏ”^SÍX׫;tó ò—¡*£`hþôzùëJË!‡dð*É”ÇØ0 Lâê·íòz}YKµõϺò¶S¡IoMý71d¨r`vkyêÒ@ò¹g¹Y/á2‚º‹L#Q‚¼EÞà¨êÿãI\ðûÛUHƒÀtÜï66»_Öž¸ˆÇi€C¿†Ú`ºõõÈ,.%ï ƒ£Kß<ɘòÁx»çàf¿û°Þ ÍNÁö€¼™*Û¥r4âÓn}8N  €9¾ÒiLpt PæL\!Cò–›zBS»h7¹]n~;¬ù“Õ?¡´!®7 6ü¼Ú¿ß¦.ŽòúÚÝkÁì°®eÌõ‡5Ö²šiÒtz0 LúPÏ{ê„+¿¿Züþ°_5Zù)ýe~ï——?ÝÞLì«ôûÚî~©Oöľ ¿¯ËúÚÙ¬SW-f¹:?¬§.™l:›xŽ  ê5õ¼ZÝÔTayœ†[…0›}½*µˆ1=KÐZÖ[u3q5@ŒÓ=Ôyýcâ1Q²éåv{{X]ié~¹™¸Ùpm¶}Mì$i:©yÄ«Ý/צj:Ù¯®V—›‰(è¤æN¯v'ugéðI#Ü妿x'­kFÈÕå§Ý¿ß®ö뉀Gƒ²ÞÖ$vÊU`cºlô¯7ËÃa,ˆÂz{¹¹½êº1ªè÷Â|_óõíç„QØÚ"fä@VVÛŸ×ûÝöz…UШOËb…:r}Œ7˜µ†5*~\òÀÕêÃzËsW¸¼g1¢Ž¨ê‡G\„Ph« v…*î3‰'S¤þl¬ávÑùßúxX˜Kc¡oâ¦-oÞ~÷âÛçÜ>@Ýüå/ž¥ç¯¦‘íæMMŸV‹ÖT3ª5–h÷„Å/ëÍfq¹_Õ ±ßg7hZ¼¹Õ*¤Æý· ¶Æv@åæÛ,¾ÿî¥îfo¼Æí·^‚aÎ ó×o d/××kÓçööú}Íüî>,›ÑXÖ@׃|€ù¶þàÃnÖ… +ç/vàEqX\.·‹÷«ÅauüªýÎÚ½õ…ò „ñ?mwÿ94ãØÿžšçËÍæ·ÅòpXÜ.ê6k ýÐ2\Ãÿ¼hzt6œö? úñ—ÝâðËúXsü‡ÅòýîçÙýy`ùpÿ½hôæ½ÌB·¿¶ÓÐ2vÚ¼_è]ÝØIZ;þÏvfÞé=ê«5Zøÿ=ÞnwG-ÿ¹YêF‡º¿Osââ]FO—ÐhPŸÎ¤ü÷Ê|ȺÉb»ÛþåÃr{ù›éñðÛö¸üµc“…Ãý÷ÝíÖn°}É~Jfæ¿Çútª:”5 ¶‹PÑìwq[ŸõúT¢÷³Aºfï¿g¿ÞÔÔlѾ>üs½FG˜áJk²xȬÖ9üïïÚfPœzɯ×­ÀÕGÿzýû2>K¬ŽôµÛ-l £íéÎWD“îݲE³ú¨×<~Óº§ÏètÃ>£ý4:éX?õž/ŒÆ¹w–b:ÖÓqwó—öŸÒ_ ’uÿ½ùTÃêè¸y;Œæ;:úiYßBps®—ûõûz•V>ÔXwX€ª§½ ÌÕž%ƒïÏ÷«ú×ÔìRco=¼9è×Ëú\Õÿjî2ãFqüׯ_Ô|Eð_ãE8aYkÝ«;šéƒN_,ž¾øNÓ^£Uþký¯¶ÓÇWWúµ¾2u_Z¡¤Ïî«ÿñúñÛ¿=Ã2 %ó¨ïn–ëý´Ìÿúø»¿Ö<Â^,^®7@gëÕ`Ú,¾þöÉ=#4æ_õ³º»ojá¸åZàáZêÍ¿^þ尺Ѹ¶º :ü~¡µyºC«±þ«~`àûÞ*±¯——û¹2õÛpNH5G0¨‹ßßêï­nÙç~¾?¬ö¦–æ}«ÉÃ⼆Ctê^÷š‹ÒŸ?ÕwˆvxÖdfñŸ¬Çôåí~_¯ê&jô9ýOZkóÿ4J¤ÿÜt §˜Mã5K…DÞfKþyqµ£–è·fî6ËËúˆ¾ÿM3¢.¤M&§G/0M £0ýçš->~Zì~o>xø~½³t‹ÿ²ûýÓîzõ_Õ>òº ¬»Ÿÿô÷F ×,ûWܬ4¯ÄƒÛ£¾ õ™…&ËC3Gp Ò©V*kŽ=„(ºT«mÍ—Ž’!ÿôÿ,ÐáÓ?nõ ®›Åÿ’,þéùßÿ©~þO#Wì{­-ìZ.7›žY£/×ï4î·èyzÚÁjêÃØjõÜü}¿>ZžONxþŸþ¯¿üøz=¯êwã¦eØ¥UMj¶—k# šnB<ÿFÄ€Þ/¶‡cCÀÍÔêcXo €»;¦Û-¸Fèc ±95¨¡ÛÝÖWßÛ!`ÿ®3Ê@úß‹í§õûšà¸;¸–NËdÙÖXÝ]øßÓõ¡&¿#B: À©¯5`_µöÏ‹ßv·5éýmq¨YÊõ‡ßà¦kƒæ.æ¯zK¡äÔ¡fõk} 5þjñp÷û5! ¸·´Öv²þùW£´ÒÿµW·3Æ-p-ߪ#ùXZZtÀ^µ‚åèè†æ­fRêÿ ³n8=dˆl«vÃ5\±ü3B¼°¯OuÿÝ è@ƒÿéýVÓ¬©h:_‡½½«)7jìþ´Óä­ÆLM¨}Z¤†Ë\GÀA@–ž}U÷õäÕÓgÿóñwÏÿÏ7ÏžóìÛ·›¯’‹W_µÂ:¨U_ÿuäßnýÚS+/À >¯»¨çò²¾~ÐëÖ‚Ïk-¹\ÝîWß­>Xƒù¿Ô÷f=ìwïj‚˜˜fOjÂy\n~jXÂ4ûW­K±C‡D½¨I°¨Y`Ig%›–|XŠY`)g¥š‘ÌŒ Ø»ùª(½óødwóòõ™ô®ܙ,Es0“à'1Õ½iU›V¢½Ô_ëî¯kæüùMK=—õ¶&Ô«§»cóL0Ïdóá7õŸÞýð®EäÍH¢yÿî ¤Y{¾hÚK¿6º$ÝÛ;4‚ÖxÛ/ðÇwúCwg½So§éÆUÍŸQ“&5ºSyÂäTÓè‡I#«ù—µhþŒ‚#°¬£;ÍÎÑiþÅöªøb#—óc‰p‚¤BSF÷*zHÕ¤ *û×8P†˜ Ýv˜ “$Þ‰²cÔ´~ó•ÊÏqz §H,Á±+çäU»¶WG5i´ñv[Kè/×ÇšýÝØº;6¡ ö«ãí~[ÿ²Ú^=máz  n4d,ÀUåloŠý’š'½@‡XïLÜ1µ70·?õ<ßìÞ/7ÍRfÜT Ø›ª2}ݯÿ8Æ´12à‡åáøD«XÂEH£g§už4W‡c³\ ÂÌï<‹TO6UDôuû4Ëñ¾Ê¬¡ã–³B.v HzÔy¦“4(’¦©Ùò&;­á6Mƒ`–öäA—ÒëÒÐf@GœEë9nô”8 ΄?Óª™©"3µ$äZG{ü€gX•úï´¬°;@¿Þ.ׂc NΦ×ÝqUb<·=mÚù"oÏ¿¼ÃîÂ…Ÿwn}½é½ÇìÖWo½²[ŸâeŸ¤]ˆž•YŸ{ÑFÚöy¥ÿV-vëgzuëg#Ð&K³I{h¾c§£ÁuëØk×»îí]‡.ÌB•‹ntÉìA‰7¨bøDU(CñIrø”xÖpQ„Ó¨¶Ñ˜åQÛ|AÅI–ËÛ¼°HÎLlG€/FŸ°½úæðˆ¼нq-¯N%CQC™‹Š;¥°è˜š‹6­‰ô0É>±7“±B¾C`—£‚¢hVzçˆ>ŒÁ™ÖÓ.ªü‚ð¥rÑÞ>Ý2aÒnÈs‡IõçÌž¢øÔDìzO1ýÙíZ¸³Lÿ]°çÃ.%ÏVж¡NGr %î´nøŽù7¯ òú%jÏÞû_6kz÷¿]5Ìckô.(Õ׬M¡¼7…þ¼Z´¾¥„«ŒÔtÁ³“ЂBygÒâÊheIï~½[´¢Õ;L¯VñÁ<Ösxc0wK–eÜHVçÁSR;nç~F:1v:& L»|ösæJ0\âý½|/ßßË÷÷òý½|/ßß˧ßËÈ(ôææ’%òûýE{ÑÞ_´÷íýE{ÑÞ_´§^´9ƒÈÖ¥k¸U^2ŽÂz…œ#v<0&ý™ujéüLzŸ5ÁfæSÝ®5ü*Ú·o·ÆÀ.'í±´L à}Z款Øy]äÐ<)ì&(PŸ–ªp¿–¹u*’IÙ>­J×V9sd•®m^À 䬗‹(ËÖÕMóœÖ'”T¤ é,q‡EA(EkÅ~¾ð7›i5¤,<.¬)qšÐßVêë„ß-ˆ¡XƒÝ*…ËŠõ}•Þêd_~u*¸ä+IˆÉ°ÕÁ ƒ^¦ à ?ù4÷&î{؃Ïžø¥D{²ïFpl`Øù¦–6ìs±na΄ЕۣJ8}‹¶²ÂBÆx¦Ø5Œ“ÌOFµ¤îçœßsÈ28.z,ÑÂð·¾ }á°ì³/šEZ—uø\Ä“›=i?ŸÓ7:êµB‡Ñg‰žŽ —_hàú²‹ad$Âa oñ8 ö®Žû÷¡ ƒ#Ë©éGy´KYqpyf§9nöpœ( ‚ÄLŠÊž)¸Ò {©e¸ƒòx×¥(IЬC‘tSÓp{I(¿J4.ÚäšpÏ`]6° <%®ìĈ Oº°7'NÆ6-øÎÑ#èDC*EŽW%L Ò8t¶`wâ–‹ÎÀ/Ôcf{ §–òSZœŠŠŸY—°­'™–#høÍîæÙ¯dŽÿ¸2ú½ áÞ„poB¸7!Ü›îM“MÍÝ=HãȨT‰ùÛd ç’ëŠUðChbó‰=Vyâ©(*[’ZþÇ1BYÙ𠙀³pà€òÃñ°¸Fâ¸Úœ¬XáÅæØ¬ŠÖªþœÑ#Ëø‘¸$X§8éP¨·#Ð!ª´Jì YÿSå™ûµ¨Ü¯•XP©Jݯk(Ó?XsÍÀò™–KeÙ>=X£TéÐäÐDåŒòÎMS1X bQ&¼ÔA]R/›¹#¢›èÖˆà–ƒg«Uvª2ËÁ”¦c¦ƒáÜ@G“pV'çQ²ö‡Íb¤ÿ)¥û5uH'[f2YÁÈlþÈz¬ŠDû[”DY¬tŒv,ÐMœˆ š2X?†õ¡~Læ™Ù‰„Y÷¨mK6!P“д(u@²¥§€ÅÖ<6I #Ç;êkc‰6eD¤f%Yì8‹÷šUüa¬Q¤Aœvl1G/aó~¸ô1‰y ×BAÓ˜eWV‹×` sµ·"NÇÁæŒsaq]™íüwæ º Z Z°öZFï¼I‘²¡Ð±MŒ¸Aèq4´rc–9´ ùJ% 4Œ&æš®3îWY»áË7åÑì΢’ö‡Åøgâp«²”\–.ÿ®åX.ÏŽ(bf3ƒÕ÷@!iŒ°’ÛÝ8ŒX‚B ¨’î-!àø”Ò¦ò(CHºòr+à¢Í\8eÆ?÷œ&q֣ЛuP& ÃåĨO© ¸œ$–é•eið©¬ðFƒjžW’ëWVeaX?&ø§#ÕöQY¹øuÓ_ë¸ä© GÓʼrÔDQ×Ã4™Gúnä”äe ç‘IWŽ Ö\ìfgJo^wñQ]D/zu’Èòt“Åòü²Êº!Ì„­`×Mêî]ƒ$aë”Ö‘³Ëÿ×ÐD"hJ‘u:jïQð)k‰KÀw­cMŸTQò.”>ÎÛKÒNŸâ Pܮз‹&þŠ$uóxOO ´¼gg^ZrP½SÇÃh©,…1;û}ÚoËeŽÉ s´wáÔ9,Ï~ÏÊtHöëÀÚ±©öºO:üu»Ÿ¢éK-=óÜÜðŠá¥uU&¹Æ|‹‘^:Æ‹’õ œ$J!"ðY$ÐŒ4ù „—a· Žn¢S|fÓ‡ è‘(fœC?„ÇÖŠ¢ (®>ר§@Y0Üþ(iU„—ÿ k®xU외4<(S1MQÄÒ œ¾”íjÁ挹[eaì9€ ?AŸ’ôo$q•×9í)WüãHLÇ|J~<ªÉæ®­_bÔ*fQ •˜*ÒüˆˆÖÄc©Û·E÷çwôŽìS¤òóž€p¡/°3)XÛ‡)Ò"·? -„û¼»àkÿQiÎ* gPÁŸ¼ÏÓ2HéiÅm•rþm|Ã[VQG×Ï"í±(Ÿ%4^Â2‰~TÑXM/ˆI¶o†š3ðÜT™ŠãQg|ødÓ."D`/v3¨ÀÑ<BNF.I7…$\|ûÍç[¿(ˆq×ûÆÈLŒÚ¹`¾˜¸„¨aସ1^ ƒs©FœY½,£‰²|ù1ãGÉŸ8T¶´3IYN­a³X©ÈU¼2n«Þ¼ Ú¼ÏÑéÆÙúäè˜ËÖõäê$Ü*ì›ëöøÞE¶wmÃjNYˆö¦¬)HPš5´ÇF5‹÷&lD»ýHýêÕ‡¯¡²®¡û/ß¿xùöÅ·MUï*×µyŸýz¹‚à÷Ëõa¥Ëö¾y÷í¿xUÖM_ý×ßþ­}ÿݳ'¯¾{ê7ÌUÝÐLúÕËoÞÚç©ß®Èêv?­·WM³à­†ìúði:ݨo¿ýò ¢{‰‹€/·¶4=TÞ.¯WºtòÇõÏ+¯$ñn»ù Н·®±öÆúeuµøåÓj»xLLüàrw}­këû ©œnÊãe{óÍã—/_|û¶!…ÍÓ×ß½zÒtUß*ú]Q‰L” XI!EšæeFR™ˆZTLÀ³¥hKwµÆHkìâ‹ V»Þ¾?¬ö‡GûåͧGW«ŸW›G׻߯‡¿\ÓÿZûÕ£Íúý£÷ËÃê‘VF>ÜýL=Ó»ñrµýxü4¦3DLtr´fGDYÇÆdðx/ Šõhé³tøÊghå-ÄPÍ¥h¤il¨‚%ÓØòt7mÑRœ¾-\´°üÌÁµÒ]u/ÁÔÝ“"_4þÿº[_5ïÃNËѽÞÜ,3FêlÆâfXSÈçÎÀ…äÒ>z˜ =|?ÝY‚i¡CJ=3M=·»g›ÃŠ_ib¸ÚoWÒc>½0Í“ M€ÌƒLcH9é³<|̤ SxØW‘ØÚ°ÐüAËE½t_ïökÖsø1SP€ Ú†-ØúC/Ÿ:èI´‘Ê:=:d©¿è—žªø= ªc³­ØÁ87Ù×Á$«þæ++Î} ™‘Éùæ¨W0KèqmP àïÚ¤€¶%yB¾ÊûÏÀ’ r@š’á šWªýûŽçp³º\X×|ˇšëúË_V¿®.o+Ììlw”)º¾=ïWÀç4c"*áSÆ´¦B+-nwÇdNyø$ÍÈ4#ÌY¦uχãU ùBvõ1líì \Ý^߬·ÇÝ¢¬f ë©,nv‡Ãº¾êøeh†%»›v‘e„”t"Ø›J‚uyA¾€½ކ¯Æ£äìc‘þ9kOÆC»ZÊzÑYo•üràD(²uŠà™Ê¦€-b`ËØ2e M=F|1jžã}}`ŸÔŒýÛßnVd‚:ÊC¸(Óvµº:,j‰ì/1äGSL—þò—ëåO««ÕMM迬kVÙ‘¯]¢ôæŒûSvªæÛ›Q(“ÒŽt–wRŒVšU]mÿývu‹0 ããMÛWÇ7õÖ^~j!x¸B‹5®w«ëÛÍòÊ¾Š¬©á”ø}7OÉ Mê…‡Á½È|Ž^fœ^s}¡›Cy¹»"Äá Αòl¼.(Y‰×=ý“oO87¥&Ç—›–‘z¬¬üæJdúìü|àŽ;ÞFÍ=ý²_yÁ²&)Z¦­e7»Ûý%?vœZ¡ËSÖr³üxXpÚ9¡@žÕLd7tÀ5j¶žPÏf¯S¶%*-Õ­j¬…¦ÇýíöÒ´!`ªNÐÞ½zÿo«ËãÃíêóácc¨Pу7œÚñC vMä‹Ëún¬Yðëe}ͽ·lXQf«õ¢?x¯ÐÅ宿fkBÉ©ÑÎV‰\kòjd¹>­ÈÈ“œ[VÄÄn#4 4¨ô$ÅZ<¹Ý^ñ–I°ÁÄv÷¥ î¼ÔHôi½=²o+¡ØýN„þ<ú\04/(×Î#U& U7Ço‘êòäJË6šòD=«HIßåú64f î××£$RMÉ J íöòÓõîjñ¿ýº ½ rÓ”ô œî å€GÊ”7óÉN™:ìx¹Û^½Ym8²C™;Iö†¶))°´ þ´~z„…¡ý(´ÏH_X¤j¸Â0§9›°B›61¨I™O7‰|mh5µŠ”š¼84ïÛUÈH 5 |Z¾®ïµÛ=¿¡®q^7|òévûÓÃõáÁ¦vVÊñ¢HœCç5Ù%K½@Ê_¢ìT¡v±ÛS‘-Ȉ䌇6p°ÞÌÎæŒÝ±c5]U8 nFÖ&@ §À¢Ÿ:]lU‡Nw@Ž€ÚUORõ©Có±êPITr%y2„;¦ýk‹v\b˜¼ûÉ4£õ£m:µ‹Ý¼%S'+Úš©JòQGô¯n/9¶KZ£ iKóVšK*c.Ù\½c”ԆżBCº¡,,ÄX’rÆ’´Òö‘6ï6–ø…滢„Ÿ»Ýú:%”~9cå"âb>!?¢í·#ÒþŸ‹ÿgñh}Àÿ¹øÿý¸}@›~¯e÷¯Ì›åÍÍf} òüÃÛý†luZeÔ€ÔKû$݃]ä†+y”^æÝž3ر)`/£Ôàäš,-obˆ.ÁuóáÅj>ùŒ80µˆôórù~Ew‚^j4 ¦}EoMŠˆƒ.Û.¢Ò Þw«›ÝžèýJªÑiº,¬Z™ó²þ½ÏRkRµ²qyÅï6ÄKë¼ á|;-1>Œ²#Ž€žûa«´ ÌXN–å`9¹IÉO× /|9"$ýnõójX±W«0ò¸a>ä±Ã]œ N¹ _ä.8ïXµb'®›+ƪðxýÚ»r^í݈š~^ö—HÖÐçE3¨v}^>RL¥BÕ4)U#á¢Ä¤ýôÞht²wpòÁGfnÐÉoY6Oª.‚£¯Ä§ûÝÍß?éá~§ÓyW¸0 ÜïÖËÅüz¹¬ ã#ãVÈGÆjÚH”ÿ Š:á «.¢Þ3'èÎ2ò]ëY„U“±UË¢þ6_N÷VDôÝ-Ý[Å\4MÒ ŠYUo’î&ªÞ¸@N£{1/I1Äý»¢ÂøÎîézßîÄGôˆïp‹£L0³‡m"²´¶·J-¢ÄœŸß.Z&¾ÚrXá‚4í€ãŒ"…úóE2çý¹Œ"´œM”àž!ýóÉ7šõüŽ\5–àÎåuíŸú`O#¸”:M°C¡ÀЦ£xu}òi¹ý¸zöëqµ=èºp"´Gº¤{N[]L?ñúbž ¾=uÔêß„þE{sûžî}ƒDÕ&Ô—@òê+êd6øowLJúR}³B ;ÆqnÁª‘}¿Ýo¸1½»Q«›6ëíOCQŠjǦ¹†„Þ =¬U,ÿø`áâ0zçõf³ú¸Ü,~n®ÔÅújµ=êÖûÅÿ5ÀC:f¼eêõj_#òöç¶ b¥Òl¸Ú 9‘ >Æ$ŸÓ—1d‚!rz”[£&AnBeHIüüU^˜ ^_›¬rܰ^Üão´‘€„¶Ñƪ›CIˆÖƒT„Çi;*¬Mºh ‡i™ Ø Â”%†ša IpmÑÒ¥¸Þx§7ˆç›PfÒ‹²W_÷èx«- >Mâ`6ȹkŠÝ~a£ ˜ë´S_,tQÖ’-Fîy] #²C1&Ep·³goñB I¾¼…¨ä‡f½¨…iÒ¶ ýH`»£ÿ†VId:¤Ô}¦~Vço¨„©ß(¤"û¸:>ÞŒä›,!µÛã6¬yhç"Lâëíqµÿ°¼¤²rü»ŒŠ¾ŠƒKÔÑ}Å"¨J\0z\nÒïIÃøz}ù#ÌÓ~B¡Ö•í€ØÄW74å$ Õp­˜=gZE!ÒzªWo£B~@׫ƒŽà~»û×õþx»ÜeûE#Þï—¿ÑÏÜŒ!Õ}|\ò%;n äµÝ„ùhwývçî:ÿ¥–iMY-új}ä§Q¿ˆõVc ž„t¯FH¦;UÑŽ~;®"c¼…x ¦@š„›ñÉfÉàðWˆyÅ\Sp”Ÿ®6á:T)ûéúR3žË=ßJ&ÎÕ7ç‘:ËMÊ!>ûõ†b5GÚUáÍW_o–ÇãŠâßכݒ.<}»{±¾Šleýv·!«ø¨›¼-‚AO®%`Òm¾ãû€üíð>ÚGVUІÀ•GànÝÔ2wZ6A.Än¿ª‰ÀëÈ1ìÔxÐúÛø=<_ÑÅÿ›+ZD^q{U?{»ãw^E6ñŧõs޽8Dé ¼ŠŽBi‹y§/,Y¨s„A?&¤ÁÐŽÂób=F2ÚR—Œ%O߬¸‡ŒDô¦¦H?Ŭ$[|³‹ ”Ê$¼f°éÍ¿G¹Þ½Ù*i¿Ý±}ÉßÐö-w­¾ E¼¯‘àíš9ôü¥@¯‡5©¾´M…ßð«îãïKæšù»3&²¯BÌ×;µ~½¾:¢Úó‹ˆ;™0U²uÉ/ú£V{aïòBåÕ“ÿ%Aã=Æç,ÀAQW…å¥-×,kšÆÜµ0v€c“†–Ý#Ý‚ ƒÕ»Á£,2˜*Ï®oŽdž"Ï#i’õÓê7¸îŸëø­&A¾ÅwÖ^sê­Ü¯´ Žoqè¦ÁãðÊr£êUµèø£±ÆGA¶ÞÕÊ?¤Yw››[Æ y2lÚäFŽ÷ev¢»ÞÌîPd¼§‰A#FñhœHóîî>z~L‹ÿ=­Ì9ênÔÇþFÏy¹ÙXo>T-ê ~X K½2¤þžþ³…&?wRgøO£ØMpÊ›ÕöcÈYr ¾ÔGæòs=Ð &Š;ð4sMX~«õü°f2ßùë䔕ab€üG _aN=‚ êåµj]ßG&ÅÍ ÏhÑú½°‘в[:[‡NôJ’»Z?’Ü…õøÉ_™ô,âþ0‰ ÊáѦ*ØakR§0ðBås8™yª7ämˆyY>AŸ7iÞ» îºÑGci n±’3T¸¼¦ú×á×·4Wm-–F†Ð¯›õeì=ÔÔ<î/?¦(x¥f i‹²_?ùªMû5›Â:HXö–-mh¹´°a4 Çç¾)#ßpm« ­Y¦¥¹ÉpK½ºÁm€^ë½á,q"hÇÙëJãüZ}ä\KS5«‘Šk®¶ANtŠrÑÀLÇ f÷ê™.ß³ÖGð`ÔÆÉx?¢B¡°ÇßnVãi¢«k-1(Ê4?O ,ÌÐRŠ7Ñð—I"ó©Rœc¼s¤f’¥ ÷;äÜ×bÛ%ú¼ùÛ¦˜y læ7™6¿ä•#èªù­zËf"br£CÙ€·Im²û¢4,Â^f¿/‚ü+ïЊø®åì`wù¾ÌG ,!>å!2ƒnÚÔÄ(ž;ßÀžr¯'öÔß)Üiüyñ%‰ƒÅ¸ÊW ÆÈAªùÛöùR—¦l~Q6ݤ¢½¬›—£š×#ãÅJùÙ†‡¤cÒf„ð²fÑ×ÛÍz»ÒÁ6ôDެ ôÕ,ψ$®áÛLGÞY†½)³æïvoDêNu¡ˆEšM¹èÆ-ë1ÿîðq‰Ã†£¯(Øhß»¶3,£ô2é]xõŠ æ‚Æ/£Æ2hœ\ø!Ì]¸) )ú(¥2n{õÍáãóf6¢™ÑðÃ'e~¿$ýq2:'ÃÔ[šœ•4+Rúˆ8Âög§½S aY J “ÕpcK ¦ó³kÓ‰SQ Fûó@àñüàÿ’ ¦˜r9uå”ñ®¤µÑ•äRY. DC÷E°Dž9(/£ÛW¿¿Ý½z39M½Ä#öò~&sè<"†Ë.zpb7››<´7šQêþТ>²}ª•‡ÒãKmô¼Ç;FøRè¦qÇ_þÁ3ˆÒl“SÌR±D2mÍSÔŒ¥HY0JžøW &Êcã¢Æ½×òCã?çõ(“ÈÚ„ô;L˜óà$Ò9pÔ8Œº•u–'Jm«ì´vWœûAk$r¥h©%2t3fi»r9}Tp‹ƒì¥Ýð„BI?1.*È’Y–£í†ØlØ®f†‰Å‚É¡$/|ã6\y4Ù“âÍ'Xß "m:b5—ŒØÛyøÊ’)w xLUwÀ©>ÂÚ?PëÜu!W‚Û¨ÜÒ,L¦c·¾Ä—6‚Ë‚ê„0£Ù{ƒŸrßçÚÂ#ó²ï8óN$Cn ¼ö3‚g£šËHUØéæh,:~%'‚U¯áÆ3h[ D™áTu±ëFÕYÓ¥&L_^¯Þœ1åX^„KB>›@3 ÃË(v?N…*^(¨ÄpM°ÀøoïÍÖáÃÔ–/ºÈpëÔWÓXÕ.j` “Uˆ‚\!‘âöCK1qÕíO/inwÎòX”«†›‹^[\ ¤Ñ¦ë¸<$8˜=Á~¯fѤm0šEëªwû3sLÑïÙh6#h>í{ƾww'ï”Ô}†[ƒ?ïðÅèJc©þ[fáw½W¼7ÍŠ,Ó¸ïkd™¸,Ä £-8áäªù1iÂâ­ÈÀ†&F°(ìðØªæ6…ñ„è® (ÃnÁ«1¾ã}´ÓK-:ÝyZÕ6Ù«î"Ù'"K½óóaL±êQÅ£Eyæð4 ""a2š;”Lb°Iªªè”ß;Åò_à÷°€KPAÝЇvIÛ+=¾a\}£Æ&ÇvPt@Iy•¡ÆÜKŒ™Yk_Œ+#Ç ×aBÇ‚ZÇKr ö9xÆ>»ŒE”8#0•Z°àNl“‘ÔÊÉ-Oi³npÔª$˜º U¼0y/gµñTQïz+*éIÿð ?r˜ß°¿Ã‰M¬~–ÄÏœ„p˜ö̙鑧.Ãã·ã†ÇÎØ }léç+“]„…ÓÒ¢Ïé$µ”\îÖ¶Ëž&Ç€2w´ÐI‰ßa~Ÿ†#!ùx¼‡Eñ­&Oó0TÁ~€VêÑ’Be}Jº¨³¡,¦¼\F#‰#ÍÑš £6º,VÝÏO“o÷¡¯ºÅ5@Ì‚íž`Ÿe3Û2¶Ãü'‚<ñ˜v8ìæÎr'ÂF\'aãå­>»9ot±¨d.{žL(9ïÒ‡}۞ijíXมiåÁ0¦,A1e?>ø¹²ˆá~µ­±ÃÆhŸPwÖAÓõV‰‰à6a|?Ó´­â "ÿÃxÀ¿&\ðaäu¹bü—Èk•*쯑שËá_cŸ ©þר÷•IMú_£ÝÃÜþktx<øãa0õú©#½ÇOô?îÍ×\’Ï÷~­† €>’èÑëC2|š¶OñŒ{k6]Ü:–ðmÍçm[Çò¶­Ù mð"’—¥­/±l¹2)裒tPìã-Í‹w$Ùµý¼*ì²*MŠÞ|õ —[æ&·Œ…Šfuå5â'W—ãhǪå=G±ÍPà̧[®ÙL™±g—%*Øa޶R9jtmªŽÔ²ô „üúÁKÃz S\ÀÖ•Šû(¤ÂÍ qͼ*U¹f™×¬Æb®Qá5‚3€'“¢ßQ®ì´Ý pXÁ¬©¨†³¦ ÇØQŸŠ‚ |4Rè÷œ…ØG¯â¾”Êâ¾”Jü})•1¥TìQê«;KÁ|Â=Ùàî0J4°–¡ Q–L°TFÓÎ?zñ@{‚¬†pæ ‚ƒº¿/#x_FŒ|_FðQFÐRBJ¬ïPY+te”b„»Lú` 7ØŸÀ$¦è‚xW)±f~ÿ ¡«8, Wõˆšþ„]@ŒuŽÚB2C°¡\Öz„Çñ9˜€“4 ûGþQ–šÉ¸3$ûb›}~fDR½•P‚ÈZ5ûþøà¿þÕ¨ØH+éµ2ìàT.d‚Ûÿõ¿DzU^+®Q†ÅÔüo䌉Mpeå½Wù’ªÜ$Ôc¹õáÚ3@Û¥ñ-P4ucar=ê4»|Ý£€ ƃ A:ÍŠÍáM gÄ ã ‰ÖâEcYfO«˜N+}éçI“(¡€vã—×Ì„&È44 é*jo¾ZÒlæN‹z7»-É™+q +»ô|< é ?­?~êÜ,ï Æ›Ix+%  À9pm«üôÅ~øjÑ:f Wë'U¸œò„<˜°eÌÆB>óæ-Ϊk‰TŽfÍäCUyû¹Þ†®¨¬mR/ùèhñªD«Ô®N_b„8¸=@e!Aç"‹ @Ø?«××¢õËÃÚxye Ì“r}XSuk†tRãk–àµè–x¯¡=¦Ìê8gÖ‘dóUV† {õ ¹' y‰’°·ãVGT0NÖ‰†ªËše×2¾–‹ÖÇÅ…NfeLCÂX=±ZB×JŒÃVí¶_›leþ”2$)JsºŒÆëåz`¯h/$»yx ‰@s aæNvîyQ{žVÎý¼ó/8ó{T²CæóÎ([’-± ¢.%بº 0ÄÅÉÙ aÄ—ÓâŠâ¡v7NÆä‹y®t¸™Ub±Óš»àEis'ÅÎZžËWÁyo<û•c å`Á%Mm¡™Ê³yyæM­îsžø3œçÀð6Ìœõİ9Ì!ˆEg@ÉX±dL< 2 ñ$ÙX\î î4Mï êK^CSëÚ j´ŽÏB߸9N¾Ûj“ BÃÍœ%c} &RãçT”msÈ{$ÛvÕŸèzXu‹…4¨"¬W665vÎ$ùõìQ˜…×ñÄV‚=$¸«x–Í׃!€ØtL’QâÐåoq ù`“«Ga±U6±y¿¨IJ:Æybô<)§aã¥d¬Ú±Ȇ86™7 ¿ë•yã’ñÀb¤Û|j¬ÁMÿQFu?”Ôv ÆFŽš00ÓòôÊähÎ>t7K-~Øc"DxNx“„‚K囚†MQÎåÕ¿íŒ/óäkE|¤¬x«¶7׊B…}‚L­5§º«bŸÁ>i¾}&%îQ½7€gI%é6µö„ç4oTÆÒB¸µ‚Xmº—"ã–{ávjZ&ã6›„±‘„Án³CÿÝÞ•lI$å[¿uÈâqDú–zÅoÀ͹=6¢lxV‰ýpð½²Óð”AäÆ×&â'»›ßÆÒ…E&7Vü;4Ì^å1 ŠÆß[]PTîÌ9N‰(˜Ya…‘6:LJ¤¸x‘ÑüsƦ³×Í%ÊÃ3æép„èÈx eP𫬽Ü,÷|ÝSYi¶õjµ =QºLñÍjI\Žô0 ÜHë©‹{?Ôpè óÉËÇoÞ8‡'Æ¥CqÃpSN!Çæåfy°1\Ö tÃßûâ¿ÿìÛÇß<³!‰ën÷øxDu$i3Q¸foö—]-¡ ãnWcóòvsOÿ¬Ì{•Ь¸ÊÐ$ðoƒŠkØ‚KÊ`³Ç“(ËmOÏÉP£ñ›ÕæCÃã·^TˆÓ·ôò/YŒ‰elP4°çgð6j4ï×Çß¾Y ãG¤ÜoïÿÍ„~S'e¤Ða8‰]l´àok€îág Ó£õ}6 £2Ì,'ÞÐX÷H…²hâ ý°:~zûI;]÷̳ۭréñ±Ù~Zr5@ÿ<t Ï8\h*ìM}Á÷ñàMLÓEK9|ÀB®…ºÓïVõ Þ«êî‚Àßè w0² Ú#UPÎÆàÁ+@÷‡»ÝóÕñe½µ4÷Fç1³h©)LÍÇw˜“™È|´ŸFæùšâ{!u²jÖqs|¿çÀÐóvÐ{zNé9-ÙÆâñ„yàåÐ&”Ž(ØxaUK¹·g8ƒ)¥) ±öyæwA#t”I»|H›~&„‘4_ /„ÔM—Á„ ‚ êz6~‰¡ªtêµ[ÃOâí•ÀgK îé§ü¦þ?;¬*8q!z=\ÏE`•8­K¹§`ÄÁiï‚ÁÆVvî NÖÞŠ%ø,W]þî%U ›já¥wÔ É€’»Ø¬CéQ¤k§7mGÎÖq°#´Àì:X]\$‹jn|Æ%e¨S¨€ mFiתœŽÂD¹ oâ8So@ÁõÁ! ÄÆ&ï|Ú%u^‘¬u »«…IÊÑòMÓßÌA͌ɢ/¨ÙŸFu†²vÇ@ "~"ê·»3b6d.ÅB­EÑ-E À°gÁ£””aíè4™G‘90Ý¡q1c]h9Ðh’ë©°î„éêÖ4šÁ}Êî>ËÂôiôIƒ{ÍzzÕR…ÓØ î•‘€ì*!™Odöc©l¤Ö!EO°R’–àíH&ªqݪEœ%,R,À·JLÍÚ½ýþ5xí‰ðÍ^¯‡åÇÕëå±–Z}™¯/”M@€·@# tÒ‹²·Ü'l6¨aMïQ~ä¹{5 ˆÌmÝ¢àõ¬dN»÷ª™Ê$ZÚº¾Ì! ©à-[ݧ7U@6¶:MÖ7À<ªFó¡–Aõú¯ÒÚ'M!¹U©°1ÞxÑqéö [À}'ÃŽ4yZZg4Ω·0 n—¨rDÓ}•D¾É­#°—‘Ák’YÂÈ{ÍmÁ`ßULýuažH∵vðÅ ñùhÊZŸ‰¤µrúñ_Ãu/m%Ú±_ë°ƒ²´5¹Æ~]€ÑV“Ð)zSÐXb<êëJß‘¹Í:ÃF»A/†Ðf¯pŠEX.‚p'`8i}¼;A…¯(ÆZòîh%n fK¾–¼ä0Ë4âF?¢Êç<Ö$%ª¹Fž¿Šxê#¾Ôd:ÝÇ‚VÉ ˜R¸F#e”œšò–¡)§Ä)Ú˜ÞfvKx»œÁ<˜òŠ[!̧‚ââ ¾uQTò7–(¢ïO6æra£H‡W¼ŸÏ©±qŽPsùF©héVÅ”nÔ!C Ç«ˆ±ùÜ»· [ÈMuXgU‚->O'Ü۞͵“¹·ÛãÔÂû×g&tÝèÊ–rþ#Ü裭Œ¡þÄ}xÅ饷›øV¦¤< r7z˜ˆl¯÷»ËÕÕí~Y`G^ïY¾àph¶*…¯v§;ñªüîØ- ë@ÜÆÑõæµW§,.€1ÝX§~Þ`V7pö 0àu §ùè#ÁĶMº:†Ñâ¨àIÝŸ‡uH„S•Œ&îYèzc‰/LÂU8 Y‡ýO%±ÿÕ[ö ¤Ép€Bƒ¤S>C¶H#/vd\Ÿ!É„VÏ'hÂñR´#wM}ªL´¥ï= 7Š™=&¤a@†ŒFÌ$í£ŠfÆÖ¬²ÑLÒ¸x.ñ\v -Lˆ ã‰CX[ÒÒ²)¦ô!íò‚IA9˜Áy+2fÔèA!>Ï %C¦LF5aµSì"Q6£ØƒFUZ9މ·s¶&úÚV ÖìŸgŒÀÉ“œàèå\䮺a­Õ¨Ö8=ãsÖ‡F›6Ž)A¤bÓ¶©;êu|3K& NÆ3 é¾ÍEBž1­}‹K͘ÃãÛ[J –½n‰ z“_Ä/±¯ §¤mº¯†l¬£hŸ1À(®;ªG rzÔÉcXÿ$ÿ¢K7cšì aZMÖàÏ©›f ˜K7¯90våDZ¡Œo9‹¤l(4.@¸.!x70(äààzçvÉv•„n˜…]Y^Œv ›rí¥ÖÌÌù/D´ª®ÚlrkG—­ü8q±¡²wÏÍeþïܘ£?™ö˜$‡ùwŸÙ+K ÊX'££,”ç]ˆÐ¡²Þ°]1ŽJÐ  ;·«gBÂ|ÁùœàtÎ8âdŽgœÃÕ<ΜP/€óŸ<«w´Jòƒ—L1A_©öqLÉ6A×i!ÐsÔ&Á]"iŽûÁÞ/H˜Æ™½Ktò·ÏѸM¹pš94ƒ»ýƒŸ‹Ó½“¨ZŠJ² Pq-ôÜ”®¦…½DÕ˵oçj%ÎV5 õü€ÚœJD?B ÊDÒM*(ÓŽŽ‡©<ÕS¤œ“'ÔñÂHPÚ%x²5‰Li5’§ýb•gLݯ c”c?=S«Û˜î|#U,ÿ=Cf¼# i¦ŸVû_Ö‡U'Oâ݇)T~ßýt{C¿é¢'‰Ÿ ©êÉKÔ“MÀK8ß^€Øσ’Ik]àœÞ5*£q‹ ¿S–)ÇvaÌ¥üó2Ì{lY,É?¯D¤ŸÈ¸eAž3,ý\z©Óñ÷ý„òM%5¼À‚VÔb“§ôQ =ož‰Š¸‘çÓŠV½¾mT‡è¢.Êá¤Yè4jå3WƒŠY„B °Ç¦Ž)H£ïW/8¦Ý9 _2¹{\þ¹èuYéÙŒy*BãŽþƒdZ7NI^ ”&-æÑx,†õjÁôõ~½ÓÉc¸wo?­Ñ÷ë­æÂŸýz¹ºñøš™àÚ¶ö“ÛÛÃM=ñåf¿Z]ßÉóýêpËÔƒ8t@~è‚Ü­ Ô¨ïÛãŠmP vdÝÌ7*àõÕ½Þ’n`Ñ×ngƒ¼£ ò˜ŸÒ‡ú›ÀJ/’jø¹Ìæ\:‡éR^{ÓHOHÃnÀ¦²˜Êð¬ì…#*¶{B¦§ ñdH¦ÏÌa679P«·-¿Ž«ë1^M`þ-ÐlÚYà|•ö(🳂ž§d‚' 'ÚkÞŠŒà\ÕH¡Pݯȡ'¢ÈM-–÷·ã$I¨H/@E KªãUÙÂ4Ê× gkÞ© í H•Wʘd—ñØQC'5jSïõZC“ŒÊ€³çðq%ŽôQvÛCÕÎRuѪÌþS'*•‘ýG»ÞêüË#¢=Ã)Nèƒey ð|±¹ öˆ„¾?Þ»(DÝÃÙÞjÈìLøã Ø™ìtÐrØé{†ý¹±“&ß×ËOp(‚ñõf·<>¬é=Å2•Cùæ¸_o?><î^l§l•^#è©>+ÏìÐèÒ‡ñø»kæ1ŒÀ<¯Á ûU©\°ìpª °|‹Ô´ð:Ål™ϾûiÉ‘d¹mÀ2ï˜{MªrøqÅu0ìÑ…xeP«Kk+ ›J ÞyͼýÒàå7À¬¼aê|ô½çlæ¥ÈЩr¸È̘B‡ñ2§Ãëaæ8©ý²&XïS¤@bYcÏ[³÷#Ý]ÊêF ƒÑ¡ð‘ãP&DM«&£UMmQ¸«+ƒÝ>’Æl¶ôíÞîýÁ1›¾è £¢C©PãBý¿°5æç&‰G=´îma˜[0‹°XGp* ÑÐó>Ím¹Pë6 <¼;…åQln*d³1§…%<*ÇFY¤D‰ÄT¡Ê'd¡gÿ#*RÃ~O€Yp÷l¬Vê°¯ïI¤„Msô;ªÙ]êW5JσC·$ú jÑ”åí t%ºNà~àA<îfQ AH„_Ü«ôm¶Õ¯[n¯6«=(H<: Fµ4X:ÕçÒžov7Ï~މ£žÂ\˜ê4CÇÐG1aÊÂæò&à5bŸ‚2Eeüˆ¾{”Š22Ùðˆ¯¼ 0Æšñ3äG˜L@=//ŒL0’£JK4¶3 /&•2™Az9*ËéXDT¦™®´»3é±ÇÖù à2‹w‚}HÇÆ-gD~Ê>Pû9FùΚ㸌!g%‹*– ã$䨣Ò1tшã‡ß G– O©U`%­Åsc°˜Ÿ¶$9«LŽ8\ª€ähœ¶ÿ¶~Á$”×ãVôƒõNëv¤¦³ÆG]Ð×úækÆ•‡ "¦ }öˆèðû_fX 5A솊*S=*ZBé7»ýqô— ÛŽʤnËœ–€(²ùÛ:i«¼ùÍØïô£Ò½÷!B!%+¨¢ *=z\úr+2yù¹"¨0Û)í2†²Jö€ðÎÁ‡ }HÚ¼ó{C°žy–!ÂV!‡úq'eÏ_ãŒe=ÐpÈÛœ™”šZ[tÍVwìù;ð“B¹.m‘õ)†Œ9b;˨¨>=]‚¢ãõ¥Kð±<É?Žùº<ôaÆ}(/º‘óçÙ,áƒ#ªVwh›9T…rª¹É8à 4ÌÏzè@šLjmÌ»€’ <‘Et›Q©Ãˆ\C_íyA3,g[9dFP)’~Øä0Ø’¹a“g 5Ù‰¤Æ`ô]*ï 3¡rerõ 8Ï=7Î(tqžkÏMÔÈÄ*pž. ó<†ÙRóçAw l|Õ…/{t Fß5 Ê3¤O<¨Zt¹`ó[°!4 ø2í1‹th³Ô½kg2[Œ€ìœ2x —5˜ÿýñ RYsç‡îº |Ôâ«ALŠQ5Ž*–œnl"Á¤D$ò!*ùhÿÄÎMû’–Qe‘Ô¥ÙðÚ±ö~ôˆiáùSQbšµÄt´ò¼­Ëã8Œš GMålÔ”ÁÀ¨éH†e”à6˜¶f¦bÏ©ä,Â08ÃÁÚšõÓCèçæœöé´uf‚áf ­c+íšõd^ÚJS‘Í@[í#j«í}Àuƒ–`†Þb¯UF½ôñ£ ¹´©[ûb{|xµþù»¸$ø:Z‘•,Ô´MˆõOÕÍÜÿ€…Ÿ”7yÀ.r;ï”iš°/?eŠoŸ ¤®¼'Ÿ›‰?<èi¿çwäѤ»?VVƒ‹ùÊ|¸›\.âlÅBXº²ôahÏ“1l¤Ó+§í?ôpò}0XrÑf`ë¶Àó9Pu¾SÌ#’PDÄzÑFQ.;yد\:7d‚Vú̇õ]¬ª¼Ä`µŠ!ÚYÀRé‚‚ÙÌ‚!c fSÓ&S=—yL" SÄû|tÙ 9à<ŸÂOÉ™®Z5¬ú̄ۃ’¯ÜƒårÐyê³ñz¿»YíqBƒ¦ïœd*y âß Ö(ö ãõÇAVd ò|[3hi 1f¯wûº›ëúmûÝ­iÓ€Ý$ ñBÐTD†é|.Wÿ¶[o#Ó3óBKqáª)H-DƒÂr¡§Z’‘LiåŠýl¶Ï4Ò§žúU½Äÿ¤Ï ßFâ6±Ñs“ôp½9®ö‘©kïJ#ï6W/#ïsû>ÞEÑ4ù.ò¾´ïã]TÐd_Ó¾L\¯‹÷û™È ½F›åû­'-#».õ]/o"o¥yŠÔ‹~³Ü×Ñ2×9¤ºrmâ]A®’]˜Ž.š×ñJÈeòþ¸_^Òa_øgÂû^oËqùÓêi7ÂB ¯]$È¡¡›vu'qÒj¶üØ>JاãŽÎÍ=fðH&4صàƒRsÈóûú†#¸£"º ìp¯/yW„)ÑO€[¬Pø¢ sM¶oÍ,<¬!Bñ(5©P(oŠ÷ÒâìT9Ê;6ÊÓØ¤A¬r4¥v*¸V/-›<ˆzJàŠ!§“Îz¦CÙ! Oxé6°ßDoªÃÖ3y’ùE3ªerBɓ«å¢Ïgë?+/óÕÈþÅ"HbÕ cÖ×G0Áßô*~]6úó”™©n¨p“VÛv’"@P'um0H º7SÖ…QTr…Úë=¿@‰cp€õ‹4 vûó»ÐØêÑa8´F…8v tèÝØ`…qnš¾iÎÓÌÒ^ÊïîpýyqŸžÓ€ŠèÏ«±ÑÆ­x)yt‚"pŽ<•Ñð_:Vc’—Ø ‘‰Žk2ôýÄ@H1:kµÈ‚ 0¸y½\Ï.i5JB‰¡*%¹"*¥.³cH!Æ™Ã(¡·OÒýÐöX™â\q_ 6¥õkœMýc,ýÖžý’¹Zd8-Î[ »½¸ÅH¹Ö6w¯çÍe‹jyî]Xm‡Ý©:¼S{Ì™:KäØ7+æ2ž:,ãVð¥ã¿°]•¯K1«*š%FÞ ²¢–J¶OP2Å¡&^<Šfqé ™Gô²šð€ÎCåÔÄâÝjÃQKLc¬QD±ÊVy.ÊEüR+s©½{“%´ÌÊÆÄ*b 8$l~ij¹BèŠr/-Ñ-¸—ö¢Áæ‡ibgðÚ]n!}.Bú\¢þ]rΛ†°ùÆ·÷õæö`÷5ûaXíÐØÃPÜ0ÌQÜÀoÛ®w(ë)m×IdЍ­AåÔj8ì8ÈáÎ6\ý®Óž:¦OÚ ¦…tó‚ç—åúøj& ®Äˆ3ÖÚ°›©3ÀlCyÕ™3ž#pœ.-¢u:M‹Tz¹rx):—pÿ#%R -Pc@‰–E˰a®b¤Ám­àNß°Ž­‘”áCD«}¸èS20¹«tBŒt„Ú%4BB–ÕTöB¥°°|3³_‘‘»Ø¯ÞJ9e4Õc„1™Ÿæ“O‹á‰³Kì*kùPØc“Ë®S® )žÕ”¼Îs|}¶#ö&ÆKÓai\P±´h$ÈÙOˆ —r³˜ „§¹‘X®^S Éžïf¥1&”GŸ“4êþù¹3Çäc])“¶e˯ ÊFF^Û+qÇœÐáÎì%Î j7'Ô²¿i'¯á:šãv‰–RoÈðˆ“ýáœP>Õ#ÑÙ³§>óÙsQ-ÞÙSMsÊ{©›ì½ãHö>›UIcÇ™P—ÃTê¹{:Ÿš³h/Êr¸³]‰³µúü'Z‹þ³„ÿü̧…íÏÃ|öøî9Ð?:ä\à@GXH8§Z¸f:•uœó¢t÷ÛØ»-ËаípaÎkšE°¸#ìçnÒ»»Æp“*ŠóŸ››Ì²±XÌÇMRæÎt#wëi‹:œ›ÆUâxÇ.ãc™¸³5žqhÜv¼ðp}Æq˜~>0jQÅ •å$+Ï ,©3±eüRSñËqc­_ÞèÂ;¥ …p„»Ù„$%ðëÄéC‚Ü#Ü!r|£Ê™w˜ i !á 8µÜ¡e„žãc€‰ad¶Í¸/؇¢H¤kŠAå8°¸¿s ˜Hœµ/ÒLCAe«XMÆœ9£˜$—#n¡§…Wæ)„èâwJиÕx;Aß&œãFê8,6ݲ?U6Ô„‰WUek˜D³1+Tˆ~í02C3,,Ýú¢„®!˜(]’qãÂÞMlÚFSjÐÜ–)yÒs?$î‰ñyÐ’ï"¬Þ¨›w)8Þå30.¼{ÆåÏŸ /*SaŸÏ«?ȸä ãr×Òwϵt"¸uÇ\K¨¾çZî¹–Ï̵ÊÌ˵š#f>®…Vóúœ\K,-ΰ¯Ñ²ŒãZ°'&¾)¼K\²ˆþJ\ ŽÿD1Ý(ô0ddÆÚä0´-”¶š¬e^Û²Fæ",wq’ç„ð¾œË˜ð;.þjç’wN¢XtÇc=·äš ˆh9ŽYñÔˆ‹°C&â« X'Û%kCcR,z¬Óp5|Åå#4HW6€ ÕåÃQ% ë¤Oν*Ñèí¨Ñj/ÇAé,4Ý9 iEÏX4PuMBøƒÅñ(Seó03Ô1Vüu2}™*¿sžbC®Œfïø£R"¬vœ]À„éU-3“B×çÂXÆ©\XNž ¨ÁÈ+rÁFÏT a€¤„¾MÇNq*Çu„LöŽTœ#‹+ì?t?磸8¶(*ÂЩ±éz$ÍŒ7³ªœ×9Á¤ÖF¹±óçë왡wlãH¤F1-%q†9ÚÝûÂþÃøÂRyd¢óBI%®Ïç +55GÅ+:ås‰WC$¦j0äì×SS½TØóÑ“·€÷ê—·B ·“·>ƒ°å@¼¶î…­Ù„­j¸½Âþ„^Qͼ¶ºôÔ•BÂÖxI+CC·CŽ•´²{I˸Æ+¬Ý¶H+ÐýÚí?•\E•Ýç‘«ª3¨ÉO«Î¯'ŸI¬­'g¢@æÕ“3Ñij0 &e‡>ŸÁwv’@5Ù{äbþ ¤Wµè¸›tªÅ7~FÆùMÿ‚ÏÁõmùïĉ LššEäûƒûSÌ2Îâ8PÅÈ•wØ=m„/AèÛX¶À¥¥J:Y´ƒÇYwlâÉÇ~¸a±£I$BØ´r°K³3æÂŠe…Šbÿ$—•°ph¦pTÃk¤‹½B“ùò­éµ;B_n¬ÓéìQ]‘']Œ‡åùù&fźùšd,_ØÙgek2šo}"WSc¿÷È£}ùpÚÇ9€í±æ¥NÀJ»~³º~¿Ú”O}·¾Ô1 {TɬϺhóv)™»âvò NíìRÛr)ì F±“¶¼x¶Ž‘pÉàFõŒ(¤—H‰ àan_Kf€ûìêä±ÙÔ²!Œí urÅœ0ò$%‡gJ!„aÌ8žð9ú\š†ýš·B‰$^V$¡ã°M –Z]KÑ‘¥%MÄ/"‚)…üÛCA ÊÃÁÑ‘Ž­jy8T GC3’jyº¨ÿ>²5w n”H¥PH½‹ätÇß:¦Œ‰¿U„öù”îŸ+倚jCH’F\rçÐPp4ö†_M·Kã‹Î5Îta¹À$në._Lè^øj_g-˜š„|ÑÊ÷²·Ibµ3Š6õ\KÒ`éÊ´T… ëÜfÞõXô2‰›Â$gÉÌÎî`9àBÃdGfÆx1§ÞÊã}Qá³LØ ¥T¯V,ÀZìhÁˆÏ¸jAwöÎ0©™8øˆ:.ÌçÍ$ÝV6Ãè*ìÆÓ„*y·¦3Äîy¬áp ¬H0eôbœ[SÕ¡åNm}Ó”,i€­*4n;^4V(ãøÆ¢š+”]|žX¡6J(ä"(þ:¢˜5› '¸è ¡ñ¦šv˜:C¤­Ä.A×ÌYÍ£™Îg«€‘ 8«ÞÄ‹ê<ÜwL" S„~Dõù1Þ|6÷³èC (êR®¼yBM‹“+Õ™ë1MÒ”ó¼.¹nåƒnÞ*k)çèŒ=Ž_ʼCå 'qäê¤ÄãH\¨|›îíå(`ºëî<XTˆ9ãg._ž¯&`ˆ…§°çÖÑÜAYîé™Õ{© kλk&Žâ¢Çu©×úçŠèÙŽ‘¡tHްadˆqØ@††Ñ˜ù³tjAŒ5f$ùÍ$vVÅÒ raw ª§biðü¢ Š~~QpÑ bóJ–„Ü €ÿ  T=g„8<¥§H°®—+BF@{æÇ¨Ä×ð#ñ Ó³Æ2@ÜK|÷_ÃDÈ3K|¦hû<¬£Üú|Ÿ&R_9‚Tb‡P,ñéq‡H|U#ñ&îµ£ýÑĽa¡;±{qïKÜ«OÞl4ˆ¡f³‰{!0'‹{bºÅ»ëz‰…+Ö˜ …d¼›åþ›úy’¿1³ß}<â}<âÔxÄTŒq”ŸžN7³8)Ò¼ëøÈúø¼®Í”Ì/iŽFnGŒÞò%'i©j®xÄò¢;±W`bŠØ ¤ÓÃüCp¶ÃxD‰×&gcö´ÂÐ#½\åEÌ£}¾Č‹0 ×€FŸ“{¤n(c¾æNd’°-‹0üÀ¦J¥în™¤+NâtÔ×Ë›ÁáaU³TJÔÓåf·]=Ÿ‡Àþ±SÈ-oŽ» ƒ=Ý?żöÈ™ ”ýQNô:!î,dcšÞq‡yäüî,Õt¸#ÑM³{²ÀÚþŒÏ #~^ü)™pïì†õAñeø§gÂ%½¶fdÂiÆÓ™pD/|5tVfgü.óRS¥~NeUŒáß±°—¤ êñ‚ÿF×±TØøÃn_ïâ¹òþ”³Ï:ØË»ƒc:‹g0c ;渥 9(¸Ó6 ã¯–ôhˆD7£Í¤ÿ­¢Ö!B$^×PÙ Õ¹r÷FFîâ¬U)*£¤(¦óž›±£ ÃËöÈ€¨+ì!êÊQ›*­ ûÚžñÑ÷°@#·#¦‹ÈE¬8^;ƒxm?;í^›¡,;íÄáiÌr,­\äT¤Ñ¸ÉÙØcöTˆ‘§bt[Éè—§òǃÔp“îj¦â>ŠcÔfcƒ—JKÚ{,ërýRÅÑ`jœ ?9HM:ˆ<ƒNT,ö‹J /Ç#$vüI›?PÞƒcBÚ¥íH¥Ç`n®¾ëQl^Ä)hF›—‡ëCûé.TƒŠ¦â¦€‹›,W¶EÐÔV“#ÒȱÁqVEJR^Aå…"´Dõl‚OŠ ?C5Èï­£ÇÞ~Xð©œÜÓ¥UI +÷L÷¸ÏñhQ™ÇÞz×lJ5‹ÌãBdzÏ}·”cŒRÎüç¾-Ü,r4hw¤}ï¸cýÆi§ L´ üéSÉž4™Ž˜TèÍçlMʦ©î˜2L/9ÑÏ*3µ°ÞËL÷2Ó½Ìt/3Íh^R3+€GD=(ìhê¥Ù¬ì5]”]´9i¡—SÌK%¸0`Ì›—Ê3˜—æÌªé"=1Ö1û ~¢§Ñz†Ù+‚9ˆ±‹…IT9õ fÑäŽw̺TŽ<†bPí¸aBÖùÂ,2fÑC\NÏ݈‰K6‹]açV,d‰ÊE5w•DÏ$".ã­ ÜŽ•´ØROà<.Ya*çhƒ1#i9$8›H“ ð‚šstÔy‰Åeˆæ¾@:&ÜáèµÍcy¦žzMšA‚eí´DõÖFÊ£åÞR&'êDÁ*;CH69¥¼ Wù)—‹AÒTJSŸÛüä½›¢”=¦óKQöÝ Pÿp”]¢{Ùif{S>¯9»£°5–Ú$©¡èd~¯F‡îx’RRÔ?› Ä§_Šžºùò¤Þ JÌ™›/qjv¶P¡ŠºõÐ ÊItd„ÝZa_,&µIQ»lQYn¥¤Ñ"RmQåp )´EÝE É£®ðHTB@3¾Œ„]@Ñ9cÆŠÛ7Њ÷Íå¬XLÚ–©ÂÖ"¦2¢^M3›jÄ)ÅÞ%8‘—#.È3]rWž`¹k½9®öÁ«À%Áò±Â–åÛÂfQÏ_M²7[Î+<æž;cí0±«¸¢'ÍËEÊet:ƒäY/ì½_e‚eIàÌ籘b|þ¬”µ"3Œ°w¿ŒÑñc_‡¬,É2,·ÞüžŒö›\Ÿ)ª"ÞZp̪Or«´|ZåâTn•‰›å¸ÕàbRì× m±¬8Z‡™ íXXSϳ—õ]}qþÒX)y’ÑÀ‚Ø(葪¬7Ô4þœ Ž RFË?Ms~ä.ØÇÎ$=»ˆÀ%¢@Eär™Ž”D:Äô”šTŠÚX&Ö¤ôèl¨(Ð&%<'¼ bwòÉ%ïS|ê¼\¥å0;ê\íw7ÿTcKÜYgFF§…ðžÑùS1:ù{cŠ슀cañDˆNÖǧ5âN):/°‘£1ª¤Ë9¾§Ùd+cÙ{Ó±l Qcp{b2¶G%z…Ñáâ·½Ô1ç“™_³?ʼHÞg›àWaòˆxâŽs˜ìA…šŸ‰¨ºxUªóg4baQ˜",ˆ6³˜Ëi>:Àé:ÃæV,I£”) .†CÓ½SŽÉÆì4Ì~æÈ€ÛÏpäÃñ¸ Þ=·ñçâ6F˜ÿR.…Hñ¹ã6’.ßÉ>>@ƒ´eߪöW©˜"V…®­òàõ~w¹ººÝ¯Ö§÷ø›éêÉ«ïžúdNŠL Œ7¶uýöå‹7o[¡öÕ{”Bܧ÷H`Ñ’.P‰~G`ÞÜlLDð³b„Ÿmó‡H#ss”‘/¡`Ø£ï«ýáÑ~yóéÑÕêçÕæÑõî÷«Ãá/ï÷Ëíå'ý¯åþøèði¹_=Ú¬ß?z¿<¬}{{ý~µ¸ûmS™øÓûz³[~x½û…îy!ó¶ ®5––c"ñ²q¡ø O˜øA)à>Jï€<.šlÓ^ŠÑyûtô¿ùJÙA0 áIÜ..P qëþòÒ,ÕÞ«ztÎänå\|›ûÈàÖ»¦oïA¼¤à&˜æ š ²Oܲ”:qŸD³OUdŸD,#wt©#ëê©; ðÔ=ƒ3ÒiúÁTú˜b;5„˜IÝLÁE;ZÕØßÎD6§ypeš![ÎTÀUaÄè\´ Œ¾Ifavb#R¾ãÜ#¦‹qˆÐŠyHžÙBOƒ(1wOü2.ÞFkÕ•~²*˜“Çè[ùÅöXßÙcoá +ÌÜhaùMö 97çAg"»ÀÉn¬<Õ’ F]ìÑΕÕFËc)›¸Á‚ÆŒ­Ö ×ÙË_NbkpÜppÇ¥mZŽoÖ[#ŠØŒBi·;9:-Re7ž g‘ øê,+ ×÷ãƒÿõÇè aMÊ":sž³¾ðªQõáõîêAß(|—1žu}0†ÉN#õ+ŠØ±½Ž81&×.7»ý±‘MÜ®!u8H)žà"%z„úSJ j$ñß7ëûìgnÊT]ãu ÕCûfó‹PÚá–á {ZLn“DA$•¥H+K¼ŒÍCôšFWI6áôô¶+FÂI+áhg89ÕF•áÙµ³²ê5Çú–EË»€––Ü<Ý-ƒîä™n>Ùq¹Ë6? Ëfû­2¢çcÒ)dØGเC•,:¨²¦³@f_¾^oë£ß^e ýÞòC²æ³GúG) _ ×Âׯ–´¡1÷è±ç›`i™cj Žh{<â–SÊ„å?†a!Š´,Ƽ$±ÃB0‹Áд¢áXXø‡lqC±ûûJô'sþ·HúgÐCKÿÏk:ÃÜÐ`+xõþßV—LJ–anò’ôn §†¹Sz0 â0¦±Žkƒú§19b ƒ ã´0 œcñݲÄF†·Á!6'ƒn‘’(S Æ&Y•»ñ¹‚–…ùXi£_Lš§2y  ÏÒô`þ6oÍ·Ð +ã¿g‰Qˆgpeð¼€? -¶<á4­Ö[Œ©àÜ ‹ }Ÿ6k„óú">G4¢OûT-X–·›ïgè Åž(RWÑ?² ¾Ä8n o”i DHSJ 0$9ü %µ‘’ÓA‰8ôæ¸Ó¢³‡m6E´ ¼ìü^¨ vÐí6˜÷}^!\tU‡Y?‰/ Þ” ¾çáGY]D¤¤çö2"蛄-¦ÅÈíÚ÷¸\Šsx®…„ˆ¯Ú´È ug´ê’¶‘fFÊÜ„¯•NbƒX<A%6Vº LêòA<·Ä% 2|C”=|ëT1ɪ{(Æ1ž£‘N‡ º±»p%PúÞE,ì"*e´99fíê»L3ö ´G6Ј&t,§ë¸Ñy÷è* +R1wAâξþ“v¯C9ã:T¦H†S¥Hp«“>]OøE€T#…ÝYâˆPi£å}zB¼ÈiÏ„@JfÝ%÷ÆPó¢î±(ùE¶’Gî½vª¤¢Y^+‡=_´×!WÑ-¡ Z„¹ RSNA²ví,c ôœWI™&¥ÐÍ4ÑËëÏÈVR¾{8[ÙqŽF0–m/_Œ³Øsް–1Æ0íî“P£cHç^¥é(y.tdðBG‡ñ=„6ÐØÑµˆY𯫌3‘·ø6œ)¬Ä`¹(ïÂÓn¿úGÆÄ;Y_VA…#çÀE¤ÇŸkß)Hc<}¾DÐ çtlÙã.­ýÈK2Õ,ÊpŸ_™=߆m8‹^æ–±ÜðòÜ#žb€‚_I¬ñsG.zµÇää d‰<"&ÉÃþ[ÖÖ-Ç‘aVˆf ŒPΕ¹ò-k†bgU DþÁ ¯S ûÆÎï®È(?<¶t ƉÁsÎëዱF›ðÅVxïz\Ðɬº˜$5'HiH#²óB´´zð¥Uä@\J™±¨ÒöŠ-U>E¡×%%#>tùp¬®á¹_ñ¼»ªÅ,»e9ŒžÛ3‚çß ²ê>¿øxgЮ ” _”¹&—8¼''c¯Æ¡o‹¸´‹|ÌÔ:¹ô» äÇäâ§¢’ÉÅNq0˜öeó-yc|žQì½ÔCê"Ò®;Hì’5‚´‡$@éÌ –Õ øF¢ãAj,£ðB#¿_I‚y¼ueF°ÿd£„ AÕŸªÂþ°ÍáŸí¯2k…ðñès[€Ã2È.Šö´Ö¸»…«Ô×úžW ÿuACuaù6°ZܶN»áö­ë&uçm€Ï›•—Z<ÈJ´8ƒÿ‹ðØ|’áË3¤ ÉÐáÛ¥ˆ«„쎫êˆÏtCå€Ð.,sîú¾$*Û4IU=“/;'ß'ë'!oÃcïBÑ)ÝâBìu°öÅÈÂã4¿àÄœ°*šc\%$†ýücйæ€É$3±šZ”£Ìuñ‡õf³ú¸Üè’á‡U¾›L’¥—8S6NÆ‘é\t@¯·[n¦|2`Á†&Áy·m¸ÃKû[gæ@©Ó²×‡D§ë]T{2ÌßSŸî1¹yS͸ä©VŽ4Ü[‰þ|‰+40¥·\H›8ÅxSc‚æÜ¿BÉÙéý.üÂ4Ùb®ªÎï0â„s"†¢±·D.¨Öegæ)îÖNÖš„¼#µƒœ(EB›u¦.é ª’¯ÄEóxàdT£Êfq©9egrûLŽÉЉSdgÍø^Ú,:2ïJ+užË7&)¶O$ƒ§’àÀíWzóÚtYR |±(Õ_šŽÉ çRæšR;•bÑ&¤‚7Is<M鄚ï]l~%=¯>¯m%ø—Mô¨ó™Ïr>ÑëtÑ&Uô¿óàsÙ‘‹rV̓õ“ IH ’j©!óu<áÑ·ü^¬=BÇÜúzq)/Ø>™Ôñyy&Þ¦Çp^¢2‰Qä\SRS²Õd?ÃÄòÊè“çšXÚ71_”ì¸<¯ÌÍ÷\Á*ÛŠn©OçKzÈ™˜“Œ&#fi›·’YÚ(hç—<Ã/šÁ«!3Š!$‘0ÒÅ—™‘\z3"ª@;‡nE‚åÖ¼Ùe 5Jó/193vð-eC"óhðˆxRßøçO }¿owÛÆ\®ù¢àÍUv*6-vb² §c¡§~mà&/ÅʼŸ[6ƒ«!3 ñ9>£49‹\öÏÈ žG 0ÓB»¬tÀà‰ôâïÊk^ª±¬yAø4Ž-;÷e 'ó2׳•©eJriü‡=šÄý*Ìs3Ü/°p¹_硼h3Œ™’!ª9f(73Ãü¦PVvµÜÖw$ç™g 7z†ñ|A˜J6Ÿ#R{ZÆF b§Tƒ5KV[3X Ú†…,«Dè‰W}:(Ö÷°GÅ”öD— Tß´Y'ɳ(Á¢üç UÚ}0²á£Àûêö\2¤²Ëäj©ðÅöÓj¿>".{,ÊÃàÆ­w™òj˹T«XÖÊ‹A¢Vµü,LƒÄ9ŒÓ"9 kHÝ¡èŽc s}D”Á¸’6ïÙ(\•§Ûó1F؈; ›1ÿÅKÜÏÆI°|šˆ¢OÊÑ:>1D‰6ˆ‘PÊM1Ú§Ÿ!l’*-2+%»N¹.òøêŠ×Þ š_ZïÓþ^Œ©§©€Ré€ k~­ŒÑ¾˜š_U_$aPиŸ2ˆ$NâZæÎŒkaœÀ”.FëpòüPæ#¤“µ:¶3"ÜæÚ%BV¤¼Úl#÷ȲÖÌÀÖyÍ–‹ oà‚•µCék°g%ŽË}¾`®…Há2;‡n‡@¬ËèH“oBR|Í £wé«£" ÝÌMØFYK­CÒ½H³3e(îšåÚ m›®~4sýˆ,H[›0B~hEj¥ae,–w)ºÍ€T¢”²V²»‡·^Õg@íT¢Xof¿‚¦W ä§)E“ ÑNÓùp{ûç?Ô±<ƒv¥3ž§šÏªë„`2÷¨>©;Qi†Úíñ×[Çâiñ÷:¤Å‚ …ê A[”‚0¸ŠÛïgc|yÇuÁ4ê®M õÍFñ¾É× J´òÌêêÜðdˆ–±{OÞ3î@IÀeîBÒó²՞ƌ}9‚™‡ÜPÃÙãºÖ ´,›)sz JqåøC°§ÝýJ’ŠI:UgŽÈø 5®¸_ZŽ<¯)-c7­¶Ÿ"˜ªzg+í‡K:ådJSOyJŽ3³ÜêÐåêŸù a-s8—n>¥ºùÎÕVÙlDU 3+Æ5h²õ"6¥t.[Π]ý(=sl’´òç|ûÆlR–Åì jD´JV]¶Ö qi`íéŠVI›h•WÇO«=‚v´V;OíàÔØãi¯Ô£¼‚þúuW~u\ªÕƺ¦>ÕÛ!PäRìà×9Ýq«5¦“`îØ¹SŠ2L38Ú^46òOÒª¸S9æ”Çiô½;¬ÅÄo<é‚?ÂU°-’®ÓX˜¨–“OcááŸr³d–ÓˆuíµŽ*É Ë‡ŒáãóžÝ,Êß­³[$c¥ÝAÒâ°³KáÙØµ¢û8—#Ž36+Zb¶°>±àE[uçªõ#¦GzšñŽwUa 0Ù¢UÁi*SzÈYCrQjH>‡µâ3Z‹ì.÷æób9HkÉ̻ד¥NH§Û"Vé"šFânY¥!²hŸ‘á{2­"Îé –vÇAdcLá8’[›eRZŠQv¯LXO°€xwËJF;|º˜ï &9R¥ÊA¤Ê×™Q~„dÑ‚† ôÇc(»û_ÈP gR€SÑó³I9àLʾ3™Õ¾ÉAÉ*ɹN[Óy¾(Ýjƒj6?WF¢9IkSÍå ;UkÓû y9„z^SŽñÄÙ °ë—T6aXšz„T»Ô~³üiõõ~µjÛ!7\¡F‹x.¯˜ô±<€e$ÜJx΄ğqØ ÏsyTÐÖ~<÷3Ì7¦#=Ãî8‰ð‚ òmà Ê–Þ³†…œ’6tZê›ñƒÙL·äÜ*Ñ:cNJ—Œ®Óa-S5, b}ÿí‹ÿþý³oó¬y[”:øs·Óï¿Þ,?º~jxÆ"œpkÊ/]øèD·w Â8©µJ |•SKUTñëDv:´†îÖÃýW­€€3bõ_µçÃJ¤ Ÿ–Â*¶wO†éõ+P~¾wÍ|çßÛi3‹#4ÆM#-šÆÔ´ÍpªŒJ‘œÆ}8§¦³VqÚšGœÌ|§éUÿÌ&Ó©üxJ­õó­¼·Ì/_¼y븬ԇB4ïƒCÞ>ÅvUï‘Aáæbžj&F§¹Ænd¦ÑÔ#¥¶^î¶6ëËãaèR–³á…"'.­†Ð¤»ÿd@“?Âä§4™÷'•Œ1dÆ‚H8 =%]¦L[2¿^Ÿ †ŸÙ¤(TÙd}xv}sümtv Jt¡¥S”%–G2Nö{Š8’ GúmŸÎØ4L>i%“И—HbQªX•­Ž-,°ô]̸uM¤qùd£mIΘ1J ˆ Vˆù¹ú”¹‹«÷$ž¾{6¦>ZA–‡)ÂÔ'£ /ålJÞÈÅ|L=eYé£3òëÔR=¹pvù¸Ç1Ë"Ñggeò8ûü—$üW†ìLÌx”µáuiN¸ŠòçC¾Ë(ö ûNFöòF¹Ò×Õ Zf­b&k\ìfÍ!9Ù§ÕåO¯—ûÕOt`‚‹òä>x²Yõ;þzM±U»1Ôù)˜VÀ6e•~rXdjz1ÜÕ 0×9=s§ŽyVN‡–˜xeƒ†w.#®ó<1uú½<œáµÝ(ç¤pmê1ho¡'Awþjm–ÌÏPq"Z‹ -¹1éù×'Lœ£BòÀ‰Ö‡ãì|[ü‚An¾ ­ì;w¾!I«2Ìk´Ò¤wm2€ÔÛ¶úz¿»þv·ê:ÊÙ2‚ædA=À£wdFjÿ‚§2ákÖ'¯¾{̃ªk”Zn|¿<¬BCä„‘2ã rl–þÕû[]nW¿ ´à8ÿäåã7oÜÝ;B„.í5”5\W0I£®°CÕ0Lz¶¨§/žX%˜ÇÿêrØÎr¿¹}\4lˈ9àè|ed`o†F2T4(<‚Õ€„îwo‰eCɂҸÀ?ß`rÊÒÌî¤lce§Œ*µ¦ÒÈœÆ ¡;¤ Nx’—ÁóÇÔ¤â£@ËT1Œ¬eòÅÕšÕb¦”ˆ€¤Ãäé, ©ý¼Üà ã£]ÕØÌL”Õ튅ÜbDTZ‰ç1‚d¶”¡J} ð•V@LÚîÛã§ÑØ‚ƒÐÜX!¶ Â…¬„âZ´1çÉàÎ{{–Jôa$“îË/¤æPwðu1:‚°† €)“Š*OŸY~€ò‰—¶‚ ùŸÂ¥*úÙ$ÊDMF{k_«à*+Ç\eØ÷·Í=[Sc‹ŠÈ¡|*Gñ:Y˜/×uc†ÄNgm˜~üf܆ÉWýí¸<ß-ZEmü»î\1^Á?½Ãçn@XuTµw·B3;ÒðòG’ÚÄ&&6)'U8¢)ST"!G²rD1Á»P»è;ý»=CŠOôSŽQRˆÜ!-sìˆ2I]új ŸVþ+騶hön}åý;ðГ@š+…áFGz¯  ýa¸c'±‚¥§ hX*,Œ§ $Øu#¬§BËvûE(ß×ÏÞ~Ú¯–WäÍõíæ¸þšùľpß‘‰ŒÔ¶a§Ì^‰ÄFv·',,ƒÿƒGßVûãýòæÓ£«ÕϫͣëÝïW‡Ã_Œ}Aÿk¹?>:|ZîW6ë÷´VñÑËzî~tYé.¿ñ'7:V GóháÙ7šƒO—&+Ã>áR“™×¥r‹ƒN•5¦BŒî›R$™É5‚®ÊRJ^ß›öТ» §éŽ ì€'Þm4¥Éâ3±¶–ñè‡Å㨠+—ÜÃÊúñx;•ƒ)R¹$Å¢uÉRh!Ó…­Åuáe&Mƒ V ?ç›Gúp4“K„˦éÇkhC!±Ë l~„ÏËp&\xP-Ç“%ò Ðf8¡ºÍ‘w‡gs#3OȲ¥p˜J¢våínp+oB ˜8¬¨Ž•½fDB¹ž’yÔÅaq9aª°¯š¥|}J{²4€Êþ^!¸¥%Eã¸þ-c„'­ ªµD•áYñŽ—ÝU¶¢‘d‡På|C(¦(²Í¿ ì• J+@…9S‘‘0gF»†9Õj„óO…pÒaP®Q.Œð.f­ÔùÛjsœßXqÅ©s< .¾Eò„À²>CD!7ž –}½©Áho.¦¤tèg¼¶¸HÙ6CºGT±¿Ï/Wœ Ä^Å‹«^2\ž”8Ä®c$Î+D½ÜW3õÂz­:ª°V¸j†úU4 ÞÃ𦡠']ÅQ¡ý® Ì:ÁÝxüùÁï2‚÷GP°N#ãxQÔCûZ ;Jಠ¹#ì¢ í3LØ_mW£Q_ ±Û1c¨Ÿq´=6‚×.Dêýt >N—EtÏ­²"®€ñ<âýÇ•eð3.f!âÌò°6-f3I–zÝé¡W³ûo,fS£6“UZå…çæ¡øný1Šg޲w¢x(û©Þ9Ã[¨= ×Ü#øgCðþÜ×,‚Ó ‰q†lNÚ£9¶†M§Á„ÒƒqC¡““'isr¦­z4NYa'¬V¯ZÝN¶ˆžø<ÉqÌqWv®ÙjÚ©þPrúCy5p‡.+š›=?^¤ œ5’.1ÅÎ&Tu8@7hÏqD7èEà*Tù'¬ˆ¯üK²Æ*ÿÜQïUþ±jB½Ê)Qþ)Ì„ë?€BÒRJVùרK° $ÔTqÊ?Oµjò$CÒÂr–ž.,BwÒ$ž?3[®SWùÜêZzTp2²dm4ÄI*8JøOÓÀ° V1‡•Ô2(ÔÊÓÀUc4pJ»H©÷2(T=&<ír$ûx"æì÷rè÷¶ÔFç ùv9š—ÆÙ9 üóˆc #âíäÍvð; Â¥“OUd'ÅØÌ§í?ØI/ÌS©Õ?\#V 3L%N.gµò8¢¬ÇlD”Ö®Áúì#žrWSà”ÑÍVV©:&†(‹–,ÏiÕ ôXy"Fàö)ððÍéîcø6Æï‡Á7×ÿ |kA¼Ç·ðmš1E­”'c´©aË‚+çorà­^`ìý…½ÏÚþcX¨.ª§À”A3 [ü»ðµ˜žýÛŽûÙJ¦§c}µÒ(ƒ¤·ú³ëtòd¸C¯ÉÏâ—“bø5&g=ƒ_1ŽÇ¯ÄóâÖýЫß{ösiTª;¯Q±k6IÍšÓlòÚ ýɼé`á_ovËãÃÍî£ñÁg\ÖJ(úR£ÃO¨?‚Š!¥‹\°NþtIW÷o¼ûl¤[d!R.TO‘  aãÐwÀE² !w›ÍÛZþŒ=±½ {‘R’ÖW{ìågGôÉ— Ì” ða³<W[Ú”Ägä"§_ï6W/Ùiº7ÌDsQÐG%ÛÅwÑο‹v^‘G’nχÝþqd‡ÚWL÷\Øäúðz_“´_œ;f}/i†Íòp$}•yøHÒ¼2¹¤Û-évãñÑ«@µz½Ú\À·0Èu“Ò®™Gtö«ŸW{´žK2É\äëÃnd' ¤ÒA¯‡Û÷´Š3ÇåOtšúáSî IŠ**¡èú+²þRÒÓqܽ½½ÙPx~Y?ù˜g»m© Ÿß.WÃíµ2ÁŽ8¾xg9_CŸ1‰S6…”rÂðìÑ9W ‡Ãú‘A<«°ñ¬¾[7#Wµgsä•éJ’æÁ¤Š‹XŠ™p£2Ö y°byAä_ ì$+^‚=âcšìpUpFZeï Zä·†SCÏœ™fŽMªT ¦;–±FDÅÿX¦Ö¹ÂÜ¢ýÓo'õŸ+šS76$­B:iÈ9Ò”Ò‘U+i^¬C&Ø ÇžKaÂóÜ[-•Κ  ÜB#eÜ{¾·ãMMW,¢é ¬½Æâu„)^‘UØõYãßMkªâ“I]€¬ähL­ˆô¹s0äQ‡ôhÍ£™yO}ñ®ÈªœfX?oÈ~ŽóØ s,´ø=ü s¥ÍΆ”¤A\Ÿwu¤þ[ÇfZVtŒÞ JŸš‚‘dh…ÐT@¥Wð„IàWÅ·Ùsm§R F¸¬Ê÷ÒôöTBÅîO#r7ÇKW‘2Áƒ±nà• vJÃÄ>•Ö8ÌHàሎt{¶­‰ÑãýÇ1þÆ3pêévÀÚGR$nÛ-;ž\p XâêìΡ÷Ulû ‰µœGîÿ¸) R¦"ûD^‹&ÖšTh!š˜÷ëeÕ®Œ%RGÀ'Ócø-.×øÁAY)YD`jt˜5óPë"þþ©ÞÐÛ«1™jõ’„vèо´ŽC èï¾L„-îï`ž„ °Ì”Ö!A$ñJ9(ÖÞ¢­´HR4z;jÔ`Öø*Ó¡é(˜zµ‘t‘ô¿Ÿ©°0–÷Ãú]¹àÂËmô .·=¾r½råÔ ñõµ7{ñ«Êºå¶ëÍd°÷Ö;Ïçå·ç¨ƒUžßož2XIG6.–²«r&¡<Ú?uÀ£÷¡?OçHÏ“RGž³—å)cS¬È½7<Â1æTÈYjæd AötæÝ{Z?ýîÃúåvxˆb¦oX*«þËPˆØmÈèÛ¼ÛpŒŸöƒÉÐZ«ÊÉbRt,vÚ܆x™G߈‡ ´#GÕø%w#Џ+Tö]‰þ“€h—Þ%Y½$¹$ºýw¨õÜÆ’À;´îP]‚ïP¨8lƒ›º¹C]f®;Ô4굪|×‹Ë –™‹—)üÌ9ïÐz¹®ÚhH·ò{XF•éÓ/Þ‚ŸL×ÅëãUr&±¯(*róÊxðQL~r†Ôî›—–Ÿíæ9oÚ½IËBž|G<×Ò·¯ÀÚ4,ÉÊÉG¢Kì,ÂaÌuP‚Uß î:¨’¡·MÓˆLÅg» ”@±±5Xd «ŒåVdj i·ÈÄ$IJ§åÌø.y=õ’qoñ‹héd<ççÒEÆ=˜ªäìTœ…IDaŠÙi-J7•¥Ñ³RqY Ï&Rñþ˜Ø™¨8š‚GrË$—ó™>È! ¹6¼ÑTŽ ‰€üq…@ã´ý‡ÑT}ÑL†YYïG{!ÐTzQœgU\ £½m–o>ø¥K5„ÌŠZ62“I Nl±^$9VD…ágòÃèRÎoÌÂÖsDYÑÙÅóc{ͬE”“XÔ.Z}g€*d€–¶uPO4°*yâçjÄyŽ:J´Ñ‹ljc5*oªÉÞ€ÿÛþ8F¸óÜê8êóÌ*›S}„ÞwžÛÓ+ÈéµHÊž^«=éKëO’Eb·±0,àL·sÏé͇މ¹ŠO<«ÙLÂYžŽr_:õhRmkš kÛÂ2ª€aû¡„3¼‰!†·L8äaw=ƒÍMÜE›[6Âæ&°3ÖèªÜ‰‰\01MFq8ƾ†ãÅÛ¢ÚD¾dµœh_ë+YÆmv¡ìkÎ1†ãd†¥À±x–¤NAbL/Bq­kn© oÅÅ‹:ÂÄ-t*“Sd˨Õjº$Éæ3¼öôùkLÎT{zlIEëΫÏRQiˆ$˜3.#4Aþáɼ£gRàeÔåþ2±zþµ6FÌÄþ$ž]M9ó}‡]-Kݵv³Ü¡N·©¹¡ï¶M-[.ö0ñlj…ÍÔ-Tÿ Su¾FK<úTxôvÔè È*Pµv.{ÚD jÜéÄ¥µl¶§5· .p¿"óàŠä\PàvÔ+[ Ô§Îç‚â)K™UåÌgyu1ÈÈ—Î¥5>€²ºƒº\£#ý#(sÕhen9¨Èô+¼à?ì §ÕSé£3©s³3ÜéÈÎç])#\A—¤ .ìÂIaT¥w¥äøJsŸd$̲rœÇ"„YÎcó}g¸N<Ænû.=‡a„.‹Y‰¢'-%Fq’Cío$±Cb#ΉY9î¶2úp×ȹc*çðuü 1•óø:ŽŽ©”³*‹õ?“¯cžÑŒôѹÈ{4|jŒzŸóOï¦ÜÉQ2 Óâ¼UnA=<^‚ò"ºAÇÚðlFB1ßóÏ#òSOFÂlŒú5V­+Ö=®£ÈqžéÐ#£xººzärϦހ\¶É—o=8_:m_Ìš)ÐmÐZ>p<*[Á+pd}&< “)¶Qñ’ÆyFp&1mãaˆ“&9_$ƒ .·^&ä‰Ã„ÛS1!VhÍaBëøøÇÇ„ aé &ä Á„Sã_sêê‘Kô;æCR#Lûd`P Åûl@yë„~½¼9ÙÔz—L@Pcèzb›8>ÊÊem)‚xÒFÍ*F§…)p…k­pÝ&«&€Rî 3 ¾ô)Yø×ûí‘j<Î0¯—0ÝÊx¥][¢ü"qK4YÎÝÊyRŒ “Us¥<чî¬q*ÆÉ"Ö„­7Uíïm½*E öb ±Æ{\P!Íœ—mG°z^:b­3¦&ÕªBC·C†¤§V25¡{ –Æ="N|_¸4äw&Š\Ž"gÃÈãá]L#üÝ%öM°x$LÚ,3ªèÀíîþRçÙqI œp,+¼ßí½$š{I º—lŽ?Ï rܘŒÕ"ˆt®”eã³Â¨xÁ²ˆšBÍ䲜S‡Æi4æ„ñq$kS>F†â²€ ¥œsq~Z†zasMŽ¡ üãx;^ȈEx/Ç;¼ #8®¸Cd”ñ¢²ˆßåÐH‡°®Å þ 33Y/ieóÇÏ ÒQÜ9ù|Gõ|lÚø›¦K Rš¦cÞÜsj¦´TÔIEûˆ¤„ÅâÜ2!Ä¡NE$1ÂWBb_ \.J9± ¥œ|LñQB94LÛ}-’@~0¥È[Z„r²àU| ÎsvÑ”šñϳç8,©xÙ{d4uƒ Ì6N°­rØÀ'9D· E‡‚Ap]‘ŽÂt]V­ÖÅ˧<𣂡›0gãu-±Ü]‚!dÞ¡Ô/±³´ ¢’¸øoµ£××^>ê‘ /(¡4\>§€QÜÁ3¦çö:Å >Ï¿ŽTî:—ïжõ¸Þ’z“ž“khûÇ v@ƒ¨Iu6õˆ—-¢é-­\ˆ©G¨ããD¶½˜én›?8»ˆg#Lc›Æðu)œ›±‘‚y1&²Hiö8Ãç¢í?¼0Ý!–Ü!6ùz±œvˆ½tÔ¸ÌkÇi³¯ƒÑ™»ú\Yù˜‘»N[oœP66;ƒ3åEÊ‹yL†EÌ,/F°’ ï°Ç;$ÖxÒÉ;Tïp:ßàÆý’|Ãq³y)Wµ*O9ê’Ö}eR4ŽV‹²é ,Bk‘Áy_àÝò¬Rö‹ðçOá6_0:ƒÛ\ÒzN½S'YIT§I{ñ£À&„Žàþ6†xaÉôi¥Dt°­xsb˜‡ún‡y”#ŒN ì´@¯ìÍSvdN+HY¨¦ÐH Z 4v;f±ˆPP6̲ÄD¬ÜC Ö#+wT’â§ÿä„è†l“4G"ˆâÞ0.ON40’±A |  0{Y1¯ñIˈëC(šD9€ÀÁr,§©ÔLqƒúdÎÁiâ ˆ™èw‰ôg-á£b¡yÂ’,o#;ú˜øh Þ1xœ¶ÿq5“ÀC®—n0Îâ¼wL”n ÌöïØ8OcÍ ñ„ÿ ?UÒ#ŽÙa†Ø‹Žá×ÒàÀ›1k‘íüaFóø¹Œ2´tæÔ?ÁÏ…;|>‘‹1Ç“ËMåBt±T¹ÏRÌNµÃÞqvjDˆ“ª;- …ÕlÒmÑë ˜¡qÚþ£‚,ë”e³²N&zé4<å—ü¤±qå5NëqH†(;¿¢{†¨­è–s)ºË 13œ@Kë ŸÌñÚ¼¼¡èV\ŒþY9ßa¶ˆdš¦cø!mÎ1e­ðXÃÙ!ð'™¢´ rêmwÃ9WÖ¼¹9œ|l Ýœ•Ãð,ºó4åËE.Æ\¾\È•Ñ9RÞÁàT‰Ç༜Igä~ ÎâcrFhØS,¼xLŽ´v‚²#t°¬ÑË©:#‰ÆnÇÇøä©±æÒY+ß ‡CzaΩ°˜æ°¡®r6 •'Â3“â’¾ø©$ßõ¬Fu„úRnM¡Ê?€gk96Ÿ¹˜+ïA´ÿ™DmŽ:R}óLÔ1šåkŒî2jCÎ’ÕŬW˜Y?QwƒÞ)F}ŒðÃPAœZ…¦H‚$+‡.Ì"ì‚ÚŽÕûòlyGüѶ¼WïËñâÕe¿¬æʈg&[Ú—dÄ3? y/#~‡½“ñ?H¸”qňÓàó2â)qÂ瑱öÂy|‘1Af=Ç¿#b+ÛoÓý^öÕBpHÊl,Wèí2AÊ4¸@ä2yôýaµ?<Ú/o>=ºZý¼Ú<ºÞý~u8üåý~¹½ü¤ÿµÜ>-÷«G›õûGï—‡Õ£ÛãÃÝïÐǸàP$c·jexùr¾Ðödâú –æí®½å5œ¯£»Ýû´G…k¡êE ìíu¸½¨¬wŒ<¢G9¾Èaª€²P~<¹tÅ€_Nþ)@íïcrº€Oq‰†qÝOA —:ö"ŒLìÝh5É2¶ÑÃöªà¥@¿·4$E4Êdú·mm)ñ·¤Æ¹ùþÅË·/¾µÛŸ‚¶ûëÝ~µþ¸}½[ok–àáú€5*ØP@,¯‡=#XÓ<‰aË|òØ#Çp¦"#tEž€>wƒ®¤<¹83]‘èÚ ðŠ ^*„å >ûß• ü—õñÍq¿Þ~d;/eÙ4z¼ß/ýIDButv;˜¢@*8FúB<î¾Þì–GÓÏ“Wß=m;Ñ“ùâÍ[ÿ ®Ïˆö¿¹Zÿܾ¶dþu³õáÙÏ«-óøÛå‘yúêꊴHõ½½» Ç,ÀÌ£h'OÑF!õ¢jzD´ÏÑYFÅ× …D´RTUP¢~d³åͪ6“üp»½<îö-YÄ\(¢Uõ:ˆ¨ÉÇ¿hýi!ú£j9*o ’¼ÕÕIw¿]ýòu[Ê–cìûÙ"(ƒêÀÈ1u4(eq6Ì2.5R•­j(ƒ×ôã cŒŒ#‰Ž"{…94 ×+þ7›ŸL Ÿ/8‘’ôŒ’ŽdY¼ n¬ÍðX›®é¹ý:r½Ä‹œ EiJîE‰äZ)RÆ&|B3Aö_OL¢µ_•̼˜UHV,É…¾>xÜQ'•¶=¦LþQóCÃ{wõ-‚®¹´¥yÒÒÑùËô+zŒÈhŽŠ³šô æ÷йkaYƒ¥o±‡6»Ý݉Á²EÛAÜ}èZA+,*S§áÑry-/wöá'úô°¦W¢~È4­ûP²Oi—«õ†>d@e!]ýzCžÁ¹û7»ÓrÒl¿»Ý^‘§Ü±+tø÷=å$¸Uó—cþpöÁ ”ý¶h‘ ¡T= >HÂL+î=+ôA†´7PL‡|ðá›Ýþ‹Uˆsɾ/ËÚnê½}Àu¯ákMYׄaN»{Ó¢F;¶÷¥]Ÿ³­ü6’i£¿ ?€]Ïðcá·á?æ'_ªÌoC›Ô#mÛüøàÑð!› Þ<Ó§1}%äÃÊó…ŽcbÑÄC;Ñð]­P†P1Ë)ѳG¡EIÀWÌ'Bàòòruè‡kP%;ÔDx®d*ÃGÌU$e{Pµ(âa‹¬ { th¾V¿^~Zn?®jžoD‰6bŒ’¤tϹ ]äÖÔXk„µ¸=Ç¡eÆ^òtw\ø^úNâÎ.;—òóOØWžÏãѸ”© ”.%ÊñÂ÷‰¡üG´\—«$Ø\È™Ê`M¦¿úPOëv¿â¯Ýä¿ýr}اÏö{æRÊ:I)dVl¹ÊzO8‡±¼ mƒ­DµæA©€§ŸezfWía³cLÃZ)qñ§vèP‰ôq…Äk#j¢![ïfɵ”\Kuáb+í?mle+ÚÀ“Æ~׫VІס=ô‰F|— lÂÄMTˆ– Ž´»‡(.QÍVdóOƒON1h:ñIùø´Ògc,6y¥ÄÚÃò{]Ø4qÿãá•T¢+rBÉò~»]Þgœl•µ—Õ †H¨rÂJÜ#*}åyøHJÊ–>õJrPï=hEº/À>é“f©(¤{‘'´¯Š<*H+))ßÿËjùSDZClxQP}iaŠí"î~¥¯ÊÇ›M{Ýg ùâàJÎ/DÏAb *BÕñqu5»R)Ø©ÜZFý°ÒƒX 5„±È)+“é&Q4+cõ:ÁÄ-KÕ Ì®)2ùt ¯bçöêY˪M<Ü®~y@Î_¯“\=—¬§²É‹•wa­æÜÞܬ.ßî^íjìE¼:SjLt Ô:Ns “ƒÅn óó-L2äâ‚É0úkNJ9ªwùùf÷~¹i>aÐË«ñqju„79íϪY#^ôLô6wZM ‡‹Oë="UŽˆ[(ðÒb²a’YÃ’b%E)-e„èT”¾GÄHtNe¥× YæùËÝ/Ø5Ë=½_o¹~^kÏLæù››å%5‰®ßßܰýÿÚìZênagŽ;Üã.¦QpèXêtõñ·›u¨¨›´žÖÍH´UMjp²}•¨ÕããîšmT!×n³RH‘TÑp„z}ô l×q&P+ØJ¶•Ä­4"0­„HQ«è|S\Ó m…ûró%­2Ô Û*G­àøàµC᪈Ó<Ö6›¥ŠŠX¬ŠŠèËY³Ù©.& N'Ø-Ëw"iÛxþÞV;Ï@¬e2Ñ€!JÆxH,eÂ<Šx¾­èˆE‡¹½Dªÿ2ÁËW¢ßÑ’ [PeÄ]SÔá‚’pr&²RÈé&²ùí¸jB2ˆ‰¬pÌP“ëåOHù\Š12±Àºg‰'² YÈ4È@ñŒÕiñÊ“LŒç`4ÆÊÐ[6 älIùÞ’åb4Ã5% ä)Q$F‰¢³¤ÀèçÑ"Ëæ°wa ¾MËÐUµuÿ×ëåæ@L‚„óp>úòØîŽ‘·úÒØícÃihŽûÛU|-Qün)pÌ.i³¤¶ïRÁÁÑJ†‡Ëí•ç(íûFèsðÞÆ.*"ªÈ cþ7BóìrèÑ> ¡!ÛÕÇ%N#k)™±˜V”fó´Y'Ûø®_ÖWÇObokVf}8F_×§–ó¡ÍüVWëÿqÍ”ßL¯ ¢YRÅF ˆܶlÃZ‚Âí(ãTÊÜÿB#þÄsOõQMTƒ¸…ÇïKfJßõ)º\îùc+t¦¾úýfµ$l,ñ[\½¾Ù¬®WÛã[Ø Šqño"àL«·hDZüö»kn©˜£AÏ"ü’ç…Ð ²]×ÓáÁKs½0‡…ìpûþp{½â=€eW¢VMòç¥G0¨·P.pˆ#9mCå7\Eš¥^3 =Û4ó›®øs¯¬!Û®ðÛ[iåGtnv¿àcPr_TÞŸÖÞ¾F¯Äkfñ‰m*¼¦'Ù¦’4e›ù{cO7i–ÍüÓÅ~âïÑåf·eD®º]´«O8ÛÎß%M)â'oùQxaWÍC"ƒp%Š¡õJ¶cÜ.$¨Ì σYbOjëg£GÁ Ü0ðÈàì̃¾Þï.WW·ûÕw«Ð{M®þåÍÛïjH¾{§o—‰:Q;QCS{» Ã>Õ4hÂUšˆÒŸsTî}Ï÷=ßñž{ÏP>ω.榜šjh$7>)æ&ŒZŸMHÂ'BÉ0š„O„f,–ó`±œ‹åçó`q>çó`q>çó`q>çó`q>ó`q1ó`q1ó`q1ó`q1ðxV-M¢üÖ9Ý÷üGï¹Ëyhg9í,ç¡å<´³œ‡v–óÐÎrÚYÎC;Ëy8€r š‹«y°¸š‹«y°¸š‹«y°¸š‹«y°¸š‹«y°X$ó ±HæÁcSZexæÁdSsqxæÁe‘ÌdrKf²¹%3Ý’™ðYÌ„Ïb&|3á3qž˜ ÏLøLÜ'¦Â3>ÏeCžËˆ<“YÌdF3Ù‘ÅL†d1“%YÌdJ3Ù’ÅLÆd1“5Y 4'ßÑñ¾ç;Øs?ŽÍDëfr63yˆ™Ü ÄLþb&‡1“ǘÉå@Ìäs fr:3yˆ™ÜÄL~b&Ç1“ç˜Éõ@ ô=¸#ät^Ì™&ÄLb&— 1“Ï„˜ÉiBÌä5!fr›3ùMˆ™'ã9±ÑR¢þ¾bx²»ùMwÚD2xåøl$C¦ãxËæög4œaa"o]Â+ýþ¶u˜ŸBà¯MÉ>“Ì3uÁÖšó zn˜ªáÑ$mzÐHJµÞ 0é²²æÏ(8zR»¹$„£:MçŸ\ÕüG6`r£;ÍÏÑiqŽN˶Á"ÿDì_lèê‹,’/7ô)ë9q†Ö¦£Aé¡l¦ÿñÝöªI3Ìí_ã@é!o¦ÿñÝöP«s¢OM›´¸•ýk(C(á„n¿-_Ž"É(EÒ9‡"ºQ$°ïERœÑ1+i+Ü¢ì|ØÒ7d& œÀ ÀC»$Øcü(RvgþÌÎl,•")“Ò&¦ÔJ«´¶ÝæÙTÿÝBa:kÑÐ;™äF†Ÿyu0›óQ*芩ÓÛ”zJ2=m™$ ÑÛCnzЃ`¦·‡zH bÊ:˜ÝI ÒËùI•­&AꊑêSîAÙ }ü$ŽIÀð)s 5B89 ܘ3øçµfQ2¦Ï0½”=þñUÉ* °p·Ò*ef³g¹cËð6¶²xczE{ÌõóØõÆåìÜ#Þ@çMØ_þ{þ ŸÐª§ª ·g£ŠZŽì%BÑÞ–ßó V%¯vGoÃ<Šòò^+¤o2<½å)Ãfī̸âH\•™ð­ ÏÔçÿ~ð¤/ýÌàI™ñàù#v,3ó((ôäŸf~2«Fl ‘gc·‰”\kÛ™U <œô lºŒÇ£VÞr4tl€Ë‚eî¥J0g ó©ú¬›ÝT]mÑ¢pâ·Ž¹¨6ö[–DŸVø¦%Ñœ_['J¢añ6°VçàTÀõ­Ya¸Ý !ÙN„ŠÛŠ¥W* h".•Ì“*ümù6ø§@¿X2¨ñ£q¥ }{gܳ9pEÉ+ âg=+^ÿX¦>zf£ÐdÔR´è2[ÒÊN¤­6£äo‹»†´(zÊ”GÚ²,Ý*á•e»©bÀÙUolºN»oŠ–•ðÛìé°J0¢kS¼v4k°cŽ’¸ÌœÓw½+ðÁ$®;&Š=AeE<àUª@ðŠÜº( ;AÀ÷W‚ú `á=.à^ šJóù]?.zý6°\ÜqQ‰3rHo[1Ù›8=.€ÅaÉyYU ›Uiá…§`éªÒÂ[w|;¸âġΡ~ç \˜³Ê¸0g¬n¹÷Ì1‡É‚‡N† »"bmU¤ô“–…«¬Ì2gñô„’¸ Å¡ªº®¢@ÏÆwFÑž‡Š9ý7€í,]êìäè’J$q (à@yÊQXó"G—ö,o!9Nz¬FªixÇI,ÑV„%=Jy%<‹¸!ÖU§¤'.ûeæ7øÞÓ9 QýÚ½vÖAÑvÄcKS-%ÁgC™tFlÏ‚ þÉ:wZôIrˆHé¸hÉn£ ÊY´¼]\‡ÚgÀA7›wÉÆ¯`ÎÜÃ(œøIãõvœæxQŠ›Ãõ áLãÒñל¿WzÍ©Ò9Çè?Õ8ö¶ZåqkÁ¢Âáz7=ÞõkQ/éV½³L.ZÂÕ®l«‹ñ&î®E„«L¥0^ÕÞ³ð4á+^ø!vq”öGÃê¦Îœ¢ÒÄŠU*5ÌÛð2MÂ0|k:ª_ø cQ6.‡Òªš"OsŠqXB "“§‘o»Ï.4Á9ff˸·ÇVÏrc–ƒWµûÁ ˜áâå>¨Eªâ+=PKÖµ½¥^«t8 :ø#Æ•9á·^êg™@&DiŸH(XRÀ3(å3Dÿ8´8“åa,+±Ï¬j@à³‘× 3¥¢R{*C66tÉ"IÍÙ§û´dŸRnÇÀ1yYðüL cUfÄÜ®hZ娓®íö¢ÉxäxVÚÄtÆ Âpdú/ð/Ö 80.áÕ/Rýظ̻rr;ÉÒ@¦ìúc{ý¤e{¤Ý£RG•5¯)û¨Ryä¼3ì#UVUЗªŠ,üP%a÷ªR*l%$K¨Ðñ6m}q­{nš9ý…{Ôæl?tr­’”N('ÓÎó<|T$yؽ”˜õ0st¡íóp½Ò<-‚S™©°•Ž'xá”PfB‚,´Td Ó‚,tVUÍ2Ò*§@ˆ$Y„ûX‘Å‘"§wM•¥á‡…C&‡¾ÊMÈM;—£¥C9÷¨P¶UîZ |v›µᣬ,ônÚsDF@´2Èi^¶jP-ï&³W]T.BwG>ðª«â³É\Úh$}žî$§:pí*›±æ ~–þ¡Á/²?4øU~1ÂÆÁÆâƒ`‚ÄÓ$qæPçâ¥%!RT$èiÒÑvÓKÛàzGæZ®!s8Þ)›\ÊŸUÙ2>lx=ôB9å)¬Èx‚™ÇS9wº êšÏ¾Ð"5%Äþ¨25•q>ëMˆWqZ<»<¦,Âä—ËסƒÉŠûk¦¢âA%qðT‹/ì&u…†«¬fšà¹œâX]B{FÁkž–’½i3‘HÍxjW2›­+?Å_ê É,Î'~1˜:¸'žÚÙ¼µdp7Æcƒ$½¬)¿äð*‰ûŸ~Uºù§_XªÕÝÓwÖ½IÒ©©Ï4µcÈpŒtÀL4òÐå+ú¤·ûåëX¾TœSür“ÈF,Ô„I¨>NˆS瑘‡û¨ðÊ6tò½àNóëaJÙ÷nä ØæYô˜ŽŸp&û´es!ky*ušuÚÜÓM³"ަg+³2Îçœ}ð¼WpŽšñ26ŸŽ©¹Œ›×Ï¿Úi$1Ê”®"Ym&tÕqxÏ¿$y\ÁPGþªä¯g¤ùÿñÒšIÇX$ñ…ül0tÜ~ŸIÕŠÓ>Œ‘ìS«‡åq¦Œ!þçã!ÛuìYÈá¦KìÏš.­+ü„íè0]ŽÙŽ€dwy‡XÀò4L…cˆžwÃ7ÔîWtCmÆññZv¸§ý²(ËŠÃóÒ—²:§Vêìœn%úÈãÝ¿WÀs Âê'³ ³Î"W#¾SQ‡Wí/ÝéE¡¯iUìJÚŸ.‰—}ÕsLOüY—Í$—Q?míìš%¥´?sNU°ÊE³Ë8ÃÀnƒJÂm`Žòÿá À2nðÌÞQ^â ³¹ûÑúVeIâÀ#zse‰Ë…¢ÁÒ]ôqöÃf˜™ þ_æ´3I¼ë™2ópNñÍë®6tÞêËivÞYW0@Öz+œ:o>‚ö˦ ÑT!ÕÝÉ1Är´‘SðN®ß(‡^ÎCžÙÃÝÆúø²…õN¦ÙÖaÕiÛš-Í„£í# «þg?§4—9s˜Ç¾†: “çàÈì cBIù;%¨µDbïk)ñ5"Àu™PQi„JÜ3#“I\ýù¥ÅÀtç7®HXéG.ë~2ó‚äí2; rªÛÑÌ’ D»£ö6¼™ÙH–*" uîZ{™ÁG~Ǭ«„ìñz™Èºò$±ÝINè6ìAêe™=UÒí…Û÷È…‘”<1Ä.fªöG럵ŽúŽTi©œ°‰J„ÜtF]ð3Õ:êÃä;\HÈÑ)1‹̺ÜHî~¨£^ö/½‚ªÃfqªÚc(é€+¢Gu*ù—fæÀ£òLI+æä‚Xn€6ÂËÇæ¦9I†cHlá¥Ê1‰õ9ceC¸\§Ž¼Ú”®|"¢,e\`í61xá÷äÉæ\OVßà1¨D Ñ©ú-²°ù\Nhª õ”C½ÔVUºËÉʼn6€3Ì/ØèÐ,ó¹ã½¼qiH"†*cT¦v/:‰û _qdâî|E…ðKXQâÈï¸+*èŽá‚só‚pÁpr3?Ë{a{©R¹©DBÎRi 6(Sa«º…`T$ÉTü 9ÌR$À¿Ï¤Ù`ORüèd†]Îh&x˜yî+(Êx"·jT7OµŸåYÂ/)Ý­\IûïVAô¹‹>6+F:ɤÖØÂýnœì<‰s¦ÝGtº\kÆ<¯ŠŽ•k™6-"çéHζêÎ%pØX\¾SPqJèƒM(nf^šÔ@q wÐàOe)£Iru÷\8K¼* ^òÌjY´GM«’0³HDeóô92¼ŽI’Ϭ̔ýN\IM%Iù‘µµbÚV‰gP0UUΣxa”ÉùtYCAèˆ?=U3„+ÊçÁVñºÓwda¤’®BÿŽ,Ì ^iQ%øŽ”¢C7_5pÕÍW 'ÏÅF#êÆëæÍà§ëæK±×ËDÖÕŒ#x)Ä$Ij×+ƒüuM“p]ã":м*==ü ZÏ®4àßuÕ Þ× l#Ù÷Ò¼ çIoNžÈVά—Lbó¸ [@¥Ïný_ž_kg—‰¤*›Ö¤B{" ×½ÌP l8‹þp4‡ÕLqèw©MK‘!Ï¡;pøæy Ü¤ñ"ÓË,r/i—IÆæ!…?þÂùK,BNˆXÞJ Íì6…U.\ª(Ëãä I(•'$ùYžôa¹X;¡?Ιœj@FTôÜ¢0ö¶:æ¤Ìy243uˆªTÃÕ›bè¿Lf˜ÀPx$ÿ@"§¢F»þD­ë¿èð)[±ín]“¹Iõ¤‰Kü¤óÿdV‡×Ŧ|’ðnkEÎùòô[+ØÏ¢={ÄÁN‘`Là6H€‰SoǦæ²H½ ê`S­Ò6~¥Ðcæ~ +D’\œ¹tÚ1 Z²C+Ä·ÓmC¹[íòæÅ=‹‚?–¥FàÛVwšVH`©5Ê–ÚÌ¢` g¹ò2V›Ä¥"bY­Φ¹‚”Õ¹q4rX©bÜ$]gÝÊÜòŽ æ34 ¬jJW#á„®þyªÓ6€X<Âyv™ã[+ ŠyH#¸&ø±Èó„KÌ# †*e< Ù&ïòOš–6t‹?ƒÚúô-Ö{»­d·8õK&䶘3ùd}Œ‘Xšþã~tç¢fÌ¡ßE`Í ;R@À,]é‘ãÂ’OFÃa×x@<Í¥ýŽHš¶Ëj¹á°ÃiGŒßrçÖPß=˜ò?eÖH·cq/“e.¬2…a¬Êb”<‘1ò÷Ù“' ˆƒY˘>vºc]ýó¬ðˆƒç|ã_Q{÷Ôl¬«Àx²9!gʇÝÁÓc<£ô&»2/ØÒMy.…·kÖ52îZ\_ d=ïMÊêžÏëÊ|n«~3á¡ßE O°WØ~˼*!²² ¥„m‰N¯È çP ~ +7÷j>$¦ Z>&¹éYì³¹É å•ó”-?~ÇN®Þæ ì*¿Û¥Wt,i£vȵ‰6˜Âju7‰¿6e§+h95œð=l”·•1 ¸øšÀeµJö¯âަt³Ü€×55z_7°ä1:œ"%TÉl¼W«VÈÆ[çÁß‘µîÎn|æTtü»¾ñxëm¤ß¼áåéRx'^`y:¡K7‘ Ó[$'ø€ëÀ|;¦é©Á÷¼Ø[*|á*ÙA‚‹3D6ÔÑ3Té´ê©Á÷ü%S–Þᕘj,…ìÇèDÊ<~‚Ï¥)ã9"îÐí¯wdn XÑ*/æG©¸Æ%sRø¼+MÒ—RWTa´NçwYT™¥×tKx‹™®_²¾qyåEì(?®¡#Ñv•;ššï-‚{œ…Ù ?t‰ó˜w ,ßV‹^Ò¼!þùf}K¬ÍQi-„÷©rK@)Ošq«ûnª»Iåªx$E˜9­ó»&b•Y>“iH/K–ëlÜJ!ü‹¿°ø¨èºZi¦Æ»í?4Ûêê¶IoKìgYפòv1ºàØÙW©'Cïåó•XÖ#¬v í5Ëj‰Tf–?{p ¬BUŒ/©ž&J”œO•`ŸZ¢ Åm¢¥Ki;xKÛ~†»OçÑt”攦Jð‘?’Í„ŒÄÔ7R´8jf¥îx°`î•™Ô¼ šÁl_?[Ú¼˜ !.}ʺ·ˆkO¿ÜÔ|;^P‚©Á÷O+eIîn8†iuS¯¬³ ÃyLN‹®šR“…Óñ…ŽƒË³Dæ¼m,¨wœ“„ÜÀ¾±¨ln»v?ã¨\¸m RˆÊsû‰Ê£ÿf4í.L¶#g˜Ð-'Ÿ•w&ŽŸ½"XrJö²KMsVyP¤ž×¢I¿Æó´í‚{ºn}x‘ÎP©:.úÆjÅÁçö*ý î‚'kÅa‹7°£1š<{žfXeœ&–ßaŽ’»ZÉQJ3÷¥4õÌ¿æ‘ÓPéd ³î}ú·Y§v:~üô*Â÷4¿74ãÀD/ ´ÂŽ{©è XÖ6:ôîIÇ+Š+èFk@›ÁOրºm`™X$ͽTÚû›&†,ìÊ‚öPq@bÈ"«û£M Yd)Öi›GI²Vd}$Ã,Eæ”Ê=r uà0Ô]ÜÈá”±?–GCß§Ñd=ý~vhˆ@>›¤7ŸÏ¤ÎÆd*†(ÿ^@Ù¸‚LSå¸!ÒÕè[ÔQЬJþ·¨&@ 7„¾æ!Pú(—*Ô"uÖ¯ö©·"TÀÈXºT*•ڦ⠎’¤¢- W@ÂQ¯ÊƒÝ£\†NeRá#árDæ .§ºþ~ &~FÑÇö"&õ":zñ†a4hÁ#1wm€-V!Î9 :™'Çac Bý)v{x/r–^º }ÍX]êO€¿dÉÎ;JzÎQ¢g±—QùOqäþ,ÝÔþY÷öžÀ~qüýG °šÝ½'°Pnª(úä{{O`¿8þþyìÆh:ޤRç÷iÎ0Øu‚ŠQ÷huδ7œV'õÜéS£¾¶+ OVǺج~ýÛr{µYíÍ÷’_ÿN¯›2µñ7ŸIï3cp+Uå)¸ °æ¹ýÑê¤KUØù9ݪ¬î'…•)¥°En‰vðnÖ¡,ñq¥bwa#&ÿ‡5ÀîÖW LØ]Ùªž–"ÆQp¤Ã¶ìúÔÕ3HÆÇ¥ Ä7»›g¿v8Ðq6àëvŠ ‚+AšMÝ/u ¼L[_Iý§´Ù¡ú,ÁJìA «Ó×`Û( õü\¥ZW,;Ærš²„Ì7¸ë/±ÿV5@Šö _þZÙ9ZŠVõל——ëÃѲ³°,¡=Ä{hsrz·ñçp&1o©=û°¨AŸ´Ù™3ã%æ©¶{é§Þ1¼*,ì (îªsÛ£:LÆ,ØnÿÝÎ0`Ü¢ÏEÓµ¨$-s±µ¨P“—/Þ¼õçReñ/éƒ*éêÝú¸çä;%Ø…„Á»‡Ô‹0î#½Cõ¾<ÛÞ^ׇªF4³ÙßÞ^¿¯ëÚò·ß¿~ù¬9«Þ>Wuv×Âweýîz¹ù°Û_¯®Þü¶=.}»_­(ˆEø¨ ›™‘Fzòˆ~GUdÕb3ÅFÇ‚‰ô‰Ä'á³dâ¹ Ÿ ¯ð¤É‰§ðÓêò§··7›•Ù=ÿ 6Ø6H9ÒŒ`¼†wÂâêâ,ä”ñcÊ*­òBÒÖ 2P¤2ÖžŽÎÀCÑoÒWȩޣÇ=zÜ] ÿkö‡\éi@ãÛ×»Z0>Ëýaõ渺 ?ÓïùïdýÝÍîy«ê·µÀéSÒG]¬s«Ú;{WËHdm#µ$‹2ñ¢ÎÉW§?A«'Tžêå«ÙÇ— qñ­²ªiõvu}³©ÙàF[/;>Ê“æ£7«¿]m/W±v‚p8¬?n¯WµÐi)mË››Íú²spe›njix[7ý™pуö½îâÙ¯7ûÕá¬Lauž.—7ư ›óaÙÈH°[Ow›Íri‘é_o®.—_‡ÎøëZþXn†b{’žÛ}ü+›Ý¬™åïn7“w’|ŽG©=Êv·¥âVJf8hÄ×ûÝÕw«ãÀuTUw§ÃבŠõô !ŒƒgôßV¿Ñ¦dñHw¯—ûåõÐ%*çZ¢¹«À3÷¢Vç|мÊj)çäuz²YÞ†hJF…2h}3—ûõÍq·'LC™·»ŸVÛ§«Ë¡äDSù³’•H ’Øô)ñûѯQã:ünõq5T  ]ÂO]ÿªâúrõk}£nâäQåj÷øýûýêçðþ1åº~£—@üÄ‹í§Õ~}\]}³»ZÜ ¡õ—q4³J…_ý2ˆqFZ!D KñõÕ‹ˆaC”¹i Ý½–”KÆ@=åL‹!ª¹(gt€¹T»±Êù„Ræ ÆH%P¸Ø#¸m6´ÞÝþøâ¸š¦ê1ŸÐ²ŠòôýôÉ´a[_\kHÇøV0æ~ F‘Í2•$oÖµì6R¨Å\„‚Ýb ]ÿÍ­äd¼1ŸÁ›üƾ“/¡úŠ(ÛckRNéßo×û˜6Ñ\ffYbM’FôZ3–ÂŒwb¨¯Ì-¹šNµo·—õí¿Ç4±™Ò±ácrC 8"8ÓíȰ¿C.‡2#¢xø¹°x𣕶'el>Œ_ï¼—çlÒí(â/$túÍúÈìöÏW[í{½Û?‰5Ì‚†/¢.$U4Õa,±¶…iKT’~«Ò´ŠÜÃŽ¶>Ö”!ˆT7ÑýY|þÑžHêC7,ræòùÔl”:PWò!Z“>cÔ|QæGÀF¾Ýÿ{"çÛO{OÑà71žo?­#b«ÎV¦¬6" ŒA¸±ëÒÎcý6d¹Ž¨„±t×õe¬¹Áa#ÖÈÒ«}Ü´)ŠÊ4¡ G(²0¤W7Úÿ.¶ô%ÿêý¿u6j¤…éÕÒ‰ö5Ø]þä›ýFÊ6ŠmPÚ4 ¾leC-ãÑ0[±6UÓ&™ÑWlvËè ¾^®)dœ:°[uî÷ ð?]óþ²B€Æÿƒ6ÒETÆoó¸ºy½[Ç.Ò{*¼9.k $ê¸)ŒÅÔ0±A!ž|Ú­c~¢Â˜<´m-Öðá_v»ßˆáËüïR£~н6Ú)pN-̯ á ßñx{ÕÏÆÕàq|c §Kxöï·ËMt- ¿ú.ö¾2^¤Ç®9ií—Ö“./÷»X aŽVü`z^Ú3Ûs2=Ýλx"º¸ –1¢¶©`/v>Lšù›_ÖŒ ~¸°›˜ëM³ŒË˜$›Ö³ûíîæ¥Ža£¾ˆJÀ–µÞ‡púrÓèõíá“iï¯hšînúZ–¦%ÐlÚvÄ›pXðOû~»&RmtiáfºÑ7ë³ýžq‚ìÛzšKúëuÔq)Ñt³¯Iì·Ëk¾‘,.~ÔÂÊú’À’h¤D*€&^·i\Èø$*> ¤ žÅ]¦X¬÷šzB%x ßëåùx`ƒ(q‹·»]ï5I4ÿlÛ¾þîÕ·µ ’牾m “\[Š4ÍK“_¾¾“«$-K¨gª Ù´!Wç4lÇìrßj&Ò‰±²]à,oȳ¤ ’.íÌï0Åöwôm’£çmmZ´Ï3ô-LÛ=Jâ`ô{@NÑsÔeÒ«s+èߟ¼úî)zˆ¢ªÖ2—èw‡ÈÐÔÐtþ]Ã÷ôÅ‘Ô̾B ‚Imm™ÚY…vÖþ®;©ÍMœ"xøõ?ûªþç“WOŸýÏÇß={ü?ß<{þͳoß^lš¤8‰N“zéM\ÿ6¿‰Ë•34ë̲¬ÿrE uV ¡ò<Ø„%.£CPHÐö—â6‘‰W¥É+Û„s $z|y¦úÝã Ãé¢)º¢~ñêØÕW}üƒ¤Ò%£-ìä<„KÇ \›×©Í@ôÒoBDNŒE¸,Gã´ýç1„³9›Ô@„S='„csÉ…©N¦Ø:a½¬+L^öDÜeꩨ(îNKv2$i»ÙhÜe2(ŒÄ]K‹©Ú;§7:=*²?¢„<`@”8‘‡÷qLæ þ©ý#Gt޲•Ôüð“¥Üõ˜°L@eyƒÄþ¢ÌßàC­š* ¥Pä7Mà äŸIáĥв0¿C… j˜¦ÐFA‰í¨§ÿ6=˜¿Í[ó-´WÐúQð{dJ¿ÍàöÉày=‰WÁ\C[ÑTU@¸lq‚¾‡në$ô}Ú¬Q†Nµy yxl‘,œ°'V%¢Z°)›âi€"„#·j·k’éýUü€Šh“Õ¨>¶ÉI t$Ó ¤C’ÙPPLEï“@Éâ ¸N‹ÎJ´YÏ-êãÏ…ìü^¨ vt~Ÿ÷}^!\ô‹ðð$ñ%Á»#€èêÑúGYálö5÷ åÐ7 [LŠÉØ®}÷Ú 1p®ϵÐÉ9EVzeᄲî uŒìr» ›¸Ph)⥳MÌõR§ãÒ€¶<©IÄdp²~›æ^ŠØ<0G‹åÈð »>ÍqˆÊ¶ˆdÙ€ÉÐPi·ð^t/bѽˆÅE´%]„R°j"Ǭ]}—in^Ü‘Ey-›³ª;HrºŽu² «…ï¥bî‚Ä}ý'í^‡rÆu¨raJjáUÈ47&}ºžð‹ éq^ØmK STÚèˆzB¼ÈiÏ…î9•̺Kî¡4æEÝcQò‹l¥Ü{í²3ÍòZáëù¢½F¹Š6h MГÍï§©^oSä§+7*0Ö@ÏɃæ‚ÓÖzKðB)ÒçÓ‡#/üô…Á0’Æý[ H…%ƒ&ä‰ÃFJƒ‘ªsM) *Ï5£<(?׌Š` ³íQbƒš4¥hFßPèÖ¤:…ây¬Ô“ZâlÙU/©{Üó¢- ³ÒÇ_³§õq÷ÈδÉ’´¯EiðJMzNÄ|ˆÚs"f›Qx Š;~òúG WN¤çšRßÕ2Úõ\-óM©çj™mFá8 C8£At˜(Ú­HjlašM’:§y„M:--s43-ìÍ”z"”ɵ—É8ÆÓ)’°&ÈæÄ¶5@—ůìaµ½úæðñ¹…‚¹Á,XÔk% ‰g§Ùç æëßEWƉNÄ¥zªíÕZ?]A›™«[*^bþ@šCýÐÄ8Ú$×<¨Vúµ—¦Œ,¼5²dÚ“ µËžG&£Øcz&<Ÿgý3¿þ0™jU¼°’d©¼}Nâï£ÏÝ‚ªXs[s(DƱ´|€9[ºH ±z#VòÁ,±{†&¥>ZI¨ŠàcrnžQ†0¸O ù¦™Û—#œHc7Ú™f[Í;ž9V±¿ÃØ×Aìù}¾Ù½_êâR.eoK)ØnuÉ+K@|§ûñ§MiEjojéà….}ÊH 0ÅÕK½{W~À­ð<€#µ„LöÚÈ$N[Ú`Ͷ}NŠü¹Ð£ÊG]œv™Ù‹sÖ«æNî^‡Ÿ…‡Õw!h±ª šK({3«A´=EàÃ÷<ì¯O]§n-F/­€×¥Vž‰m2kfwÓz”!ˆž³}7£E±ŸEŸ uà‹··¸‡Fo½³ Ûm xˆÆ&^ABˆ~¤sNÖÍdNK¹ã±k.ž•/žE áGìÕaí³y‡ìYN˜3xž¼.ï¡+VÊ:D4®”ÀÂæ¨ ÕaRnêŽÝòcìŒê -ožqüXô»SáÜ×Fc¾üÖ8bþa:¢ã%ÕÖ Ä;2Â}¡MÂjJ¿øÖ*Á¡²˜X±—•´¾ók¿Š3¿Ìöº!¬ï'`eˆ)ê×;£Qúh0¤}…¸QÂð™s¥–ZßQ——)˜H&œÉ¥œÉâ„–4‘8¡I2ÒÚŒŸ— ¶)ì·Z§'ó¡•,’UpŒ¹r2¹Ê䥈§Ëæ‰ Àh 'À®óù*B–«R OÚØ&Bê™´Õ@µ×´kTíœBTŸsn½YÜèq˪¼‚àmZAŒf¼5;f(¿^Q~Ì+ŽŸ6„ì¸ì¬Hò{fV¤¥qÔˆ'mçÇ%suç‘92WžÜvË2Ñt ýq×&;ÁfBPâÂî‡Â^$ª¡#|£Ñ¶&Ò‘ö_©î„Txÿ®ç´SA׉“Õ>Y)⯀˜ˆœ[{€àåÛ@¤©ƒS¾ïâ*½ã ¹Kñõ¼Üw—ûÝw‡›ATMO#ðÏŽa=–Šù‹%@rÞ Må«Ëýí5ñV'$›¿ÁÄe¦I[|8§§(Y{Üé›?€üŽËÞ‹Ó—{ ,cˆ6d]Ÿw2‡w\œÓ’ËfÙéȨˆÕM‚y<5;¾"ØØ«’’¿\KÎæòÕZ(GèO#ë¿TË)‘«#á•N­é¸™ãA yPøµ°0œêÁ¡=?7!Ô#,3Ë¡ì–PÄ¢Ë*@C²«´¯U>äW×Qu-xT×LÞ–¬(EpEÄfEfr¬dòìòyk«:éÃë‡Xœ™»Žl9edôêm¦?AØZáÌS‡ù•߇µnD‚ðµ"Ê2ŠØÁAáÈþ#¿;탃¾ ŠƒZg”ƒ6nÍ,¥€t DX߆J¶AAæÿÛk²Î¼~Ξ4V÷®Ø{Òšk%Jæ?‚Ý‹qIp©ó麉ìÐPV7—5v£º£D޾ɍ¥èN^›cXNøáÿÛ3?˜£„• æ¼÷–®â¹95¹AÍD§&£¯#Ìý%ÏBf}8ÐKÒ¯ØËo¹¤4õ¶íšhº¢†N‹41‘΀Ö{¨7Që̾2ƒ+D/ƒ²äø{¿ÊÃÕ!ƧvË ³ƒùö£Ôg Ø`ðG¨d1*‘"ùe $Åç!JY¢ Œ¶)‚1&| ]µ©òÐ~Ä"t-%.‘BWü½C—ÄNÙx¼—‰á‚ $±y›0È{”ù¸I”Å˱ÐÃ:q}쌒;°ðêióÕLÎJVÓszE¼º+›UN¯ÈLn»µÞaè½Å`!ð¼­,Ù\[š³˜-u‚‘Š\ﺮ /,Xlû[†Ë-2Y™o(#&«vøKMVwägTÎöÓÃh/6¸Åê[šsªG´¥Y R7™ðézŒH´²w´†‚ž„Ù8¤šÇíØpIqr,ØØä²…Qð°$„ÖîO<€” ªŠ‘šÀ×ò);‘ŠæÀwc<Ï|#4þÆI0×MP&âø<¼rk&#ÈÆŸÔM'Á„.KuŒàš“ÅTM‘3U§©°oa‘ƒ‘ñ´° ¤çiùAIÇ®ì=yáDŠ‹C(‘U·ç:m²`ú¬ÀDš>Î>DÈF²husç¶j‰‘$)$J£f‡ÕHI<«(Qßð_Ï(ˆ$ÏD~HZjf^è%äkïj:?ôB¼{µüð̬p‹P¼¯¦!s‰ÍhùšéÿmÍ‚Ll%H‰“ L7þŸ–¤J „ttÑéèŠs„x¤Á bþ%3±/25'Gkì`Ài­U=mEŒ‡ÕfžðQm<½ [N¢þºÔ‡Ž½ªâ~ÿŠ6ˆ2ˆÓ¯Ñò…ó~Œ"ª#.êÆn?â‚ÄSòsen.‚-js¼Û'YÓsDµn NdOäc7Ö «ó¶myX!fhDéµw¯ç=N׌^.3©ÁÇt Ü€$½ÖëÖc‡×¿Õÿí=ŽªÞPÕè©S»h¥kpŽÄ—Im£]¦;ëì_ø¤h`zQ“ì¹×,4÷Ã)"0ZRÜÏ•UÆQëùê-£S‚(¢ÿ½…΋NéÃ}ín.öéÉY:Q¾š¹‹ð"ÈKYƒ—é{@gY¼UIìê„à˜¼ã q{×èª$zX~ ª™sGsãZ\zin½´œ‹ˆLÎ)wWÆ5—Þ4nøä ÍÖf3÷ª~Cs`¹b¢Nðòü¸tKDº³éërW>oôΛjÞ-¸|îéëÆ—U’7ðÆ[xýìÝëßå[Äæ`I‹#à`*0ì@tM¯¼(È“ÕøkÝ9 ºg±ÍÄZR5¨’N® )ÎYœ–H-‰¯•¤)Ú•ùÐÏ (§ ¯È^oßM¾4 ´\3G˱M¨ål‡ê£S:“8ÂÁO:ÂQsoÒq2˜Æ âUì Wéñ¦£Uá½ñ0zíG—¦‚UèQâ ´`ÆBÇbÄ©C¼‰”ÌÚͶ3=!?;4÷L<%kÙÈŠ/Öè§@äöãœýˆ»Ü½©ìלÂ~M0©›l û‰jöóÝüòÄko‚éø‘*[}÷Ìš>qÿ¸˜µ©æ:´Ea³ÂC«dMž眀lâ#Ñ6 cêYul›àß6àßeÉ ÍË­ZzœXlÆàfÉ!G£éà¦=5|ÙŸcï0ûcwt²%Z„ަȺ35—¨(J@º<ΟÈ-7w|•Ür;÷8­€K¹X0ù$«Éªü!ø-–Uþim?}L+iE†Äe•ðÚó+¶„ô&'㛈ŸÂŠ-ŠI&Ý7gZ2…/hk€Ë"be?ˆâý qùDú.6"#¶ÉÏݲ -`A:Å‚bnìŒõ7)bA¹s‰Tì'( É;ýíZ‘ Ì=9)æÒ®U·º4æ2ù 9lرN¹9§ÒµñOêû[”ÙÆ˜¼Ž@µæ…N¼jXÂfûk®_& &¶:ÞšÔ”8‘ äTÝ!eu±¤ÂmªXì‘ *öÊÊX2ÿK†xÓ!'S£¾7ÛËîYdø¡)€:%ÆÔ5¢8íÌ9اƒ¾«m 2J]SÕT™—Sj¼Þ{ýds‰‡¸j1LÍ7!õèšn¡pçb Ätß }†t÷½¤Ó¾›¨µÆ¼kà £à¾Yå,µèÀ«1Y‚Õxícm/À¡&#,2¿l>,ë`Á“6¨ç1[ÏA…4šfz”\¤$1¬l1,Ž7«ªwÚ;*+šrZ²Îð=”-¬âI‘ÙE ´èôû E ”®fRIðòÚ¥Hæu‘}Sf„ú æ 2 /Ä2ba"a6ÄÁE îr ™óÕÒ™E²”0“^l4s^‚õ{NT.µ£9Ì‘¯‡yÍRšÀ\ íøðËÕ6ƒºÞ–‚Çÿ¤à•/añK^Y÷A`âÏ:'’:i|1ýN•ÈxÝÛšfvg65¬gÖ»éâ$ÑmŠE/0‹^fº¥f zQhÐO§õ\¥ÌÂmû8tž¶éSg)}›^G,Õy¸¦À2ÎÙ´¶9Îþ¥ÍüNeN\è~–]ž˜¬!ëÇŸ9gD’¾¤a5Û8yO8SÂ6®f§ u¹²m ³Å¶1,ŃîÐì…IØÅãc€£è›^ †–Ú3X^¾xóÖýÅ4ã ™–½á#/©é›r-2ö‹‘UKW7ì¦ôZE :çz%÷x¯rãç»o磉N^—ßžà ²‚HfÔEÛ`Àpúb}ç 0Dj"ÓaFõ@pÂ48éÖØ»¸dø®Î©17»6èr3ømq‚m•±™ 5mÐámþN õð¯!Ìør¸{ˆŸ &G³Bž+y×(¡‘±A)Ðð+^pŸ pd@`t„÷!!\Þ‡à÷áhìQ2ÒÖuù˜½f÷!ÅW’4:˜éa:eœTÙEÙ[“ÊQÛˆé9IÉœ3¶S&Ó¬Ëí"¤óä”]R¹¾>ê>hlüP„ ìCxYa[†Œå:]²ã=CÎGÖú ¼D&ŠkbN›H‰I{ZØ£P_’r…OÈ$¹Í%9ŒO2ÉEÞ×A%ú.=*WC-A BI5 -ƒ­Z6z¢FÀ g‰š;9*{2PuFp¬DÊ­âgVðó„Æ™E.3ø¹‡ð®…Óç/àçB$ñóc‹­ÇÏEwlüò³¡èÇ”¼ûÌìl z×å ½"ÛæÖë|´„¨à#ä¢ W¢³A‹R„M¸€§í:}‘ïÞVg@ÈÄ×Dxí䬜ó@Ë]+`û’Ëçm%rº¸sÅ‘°øB´”ÒÆ©øM©ÃHÿËÀûŸqô.8_\¤RÛÊ.s›âýÏ)c¦·›?Ó8C2¨£µõþ >_êóøÎ¹G³“žvpdÛÛ†æ ñ÷g ¦Š+ä3LUptÀo°dÓXk'݃\z‘+¡0]•1nØ%c›ñ@ ø”j»ok6 Lâ4]˜»¸¶£Æ§ÎÉÿ´ª;h?@O*‘} ³O_!qÿUï­ .Ò+Ë=¤Êrå ñé\Ägã¨8h:ë‰O1_|Ro¦q†2ñi üˆž®#>’;A|.»Õ Ì7+¦:þÈÏN•_ › s*)LÅ40’}=`î˜>]˜®,á†Á Âtvo&Ø„d]aÚô’™-Lí£U.*UrriŽ­NŒ¦rfÓ¸_]†ßý“G8¬N[†ðäÙç•nÞNŽ_€ä¢b¸»™BéJAr|x;÷ƒ/i&~O åàExCõÉ‹³`m {§šJá5v„ÍiÆ´ÉðaóN¤ þ9ÇQ¦:aÝx³¸Ñýrƒ ú’8‘„¶>K¨&¤O¶o·3ŽøÝÆ úÿ\=GÑ4Ç Öhâ~÷žqôMðÖ®TǺñFvkMÂŽu‡Ë‹ æÆéO®ú©3—øñ€©†té&¦§Õ£¡hù†ts»ã …íËÒA嵨³4æuÖ‚#¦Œ†"‘”¿î¤%åœE$V€¥¿!Vygô<ÞêGœãm]„áÍ3Ž ¡° \é ôò³ò‚ÞL‰ît…—kýq‹Q¸Ð…Ê«T.LÖ½²D€‚÷(HwëY­T„cÒ9Õê`ªï¾K I”¸bn—BîØí"+y°§„:ÒÔs#%Í4´Ñ½ö¨ VaÃ’v%¡ÈÍ7RŠº“øÓ"7uæAç1´mV4IÙÈQ¹nÂ2°  }’€›#~aKŽàœ-Ñ]p™m î‰.—Žw!ÓhÝáµW±‚½!™Ã,!bÞ.@cLWCpÎ×ð þÓ·?¾Ú¼ùöûñWý½3†)1½™žýøÓû§~ùüõÓWÏU÷3<ÿ}wþæf{þ÷¯®Ç×Õ1#÷Zºw )Š÷Eç•ÐÃI´¼0¨€U-aû©S„^OjÍ{¢(=Êßn?¼¹üçý~2˜jASŸ£ÓË~úg‡WOÍ«r¦íiïÍ·—û‹]oÚà/þ…«Ûë_®ÔŸW‰¿Òþ¯»ßÃÑK™3Ø»‰ž8.úwŸÚ¿ù¸½¾yRH&HŽ!Du¡ªpú²…ëð–€ìy[5N޼¼ÜïàD°õBn2;‰lÛ~’zséED(Djûÿò`FñòÜÔVŠÌðEöoá…/È[S m«Ú.ôf÷¹`q)‘gÓ¶Rü¥·wâ=Å)/w{t°ÜJ:` èÔ,³±$ìzú|ÛM¼Ì½—ÿ뜿„·Z¨:Zجµ(V²ÔšÄ¸" ÜP‚¨â—WÛßÿûåÅͯðëüöØ€5Â'K¡QªÌ“¥ð¶òŲT‰·ÕV1%I•ö|zuÕ[ovWÛco²j-§å7Ú¯kë e| 'P¸ˆ7¶`'JÞ™»}ц̣Dèñž@‰Ó¥1ó–2EŽ­#Ç··WÝ2ÍÞ‹â°M*hÖP´6 è¼-ð§å[4],Q¾ °”š²{ðç_^¼|ûâµ-\PM>úÙ~üð?wç7:žÿ~þ+œ® Qõ'KÅO»›™ûT"¼Êö AäðäaŸ$®9’¨YU\Ãf‹Å5 {DBB>D„2B§e@ }ˆð;blÁšÆ"ë.ï Ÿáæ~ÆZõóÜaµ}üá¸Ûþ¡i•}ø©÷IJ6Á²íØÚJ4~ë'A1¥E”7úÓñrY³èËÒ¾üÝî š¾Áü~¡Öñ…}Ÿ\9'µ¤€àCÿ!ŽI§ÎŠ1¨n j…Fà­†²Åܹ2Ù5„O ¤5âOÝ7 …üÕ[­Ñç麢 d™®+1‰‹V€÷“^<·eËâ¹Mü`F€÷Ù?ÂåDÇ+@Œx¦ñYš*!xå‹ì%f_²Â{IÙX7Û×&,Éx¦`Iþ½ÇUø»wö§ ÿ™Å  rdúÀu‚¦­]zü ƒ’×iÞ Œ¶ ˜¬m‘Ëò‘TRÈÝ26-^R¼(Î…(`R¸It¦d?óÞ‚ü«[³äÒ|z¾øÉ¡n-Ã!ÁǃM)<“‚D·Z(Ñ· \ÅÞ‚HBÞ‚…í‚çÊhµÇÁö"Ñ4_Dˆ-“ÿœ±™ÿO)näIô¨a=ZÏ“ð‘á#f4Â; tp4R?zZ?JØ ÒÈ-÷÷"}%S:{‘ÇŸÀÖÖ Ç'Ę”åÞ0T´Jû?ù+‰qäÔÓÙë{sû!~¹FZ]£ó&’«H‘’% jéõöóîíá/—Ç›Ûm÷æ¦ô ÐEBˆŸvÊwÐÇ5ž°æ _Šâžt‹ï7ÃŽ“Ç: $–OðARXÁ!œ ÊÌå¯3笷S§ÍÈi¾Zeð?¿>ß^¹’¥g¿nAE åÑxD¦WÖ&.q¸¸=WIowŸ¯ºíÍî:;äÀ«Ÿ·ße?õå'Õ)§n?_Mm?©¤ ol¯¯wŸ?Àœ@ê3Z뚌^ŒìŽûm÷|®_Maß)Adp+€­Iá?;\ìÞÜŽÅà’ªVþÎáöæê‰¤>"BQÂíõîhé …uªšej·ûýîúæ¿ÝîŽÉ´Ï¥¨âùïWÇÝõuOÑÁë‚í=QêƒÖá*™¯:NØÅž t%Ùñx8ª†»ýIDѧ‚„¯·Çã¶'ŠbLšªƒí5&¥T—n¼ýãªxW™j:xÕÏ?ïÝbU~XÊQ&ÔyÜ}R9& ù2“›:¨aÞ·‡W=ql?Ížéúý¸Ø]üåMo€š›–"÷A9Û³ ”Ýlx–%‰/ª‹Æö=)Np'1"ãóÕe/|ÞÜ^]Ž ó“RE?m×>ÞCšQ›ôÝîÃ-0–ÅÄ[¿&ÄÔÁ쎿í~ô‹”ðwÕvÿ÷íåM`¸a¯VZÿ¼9ÜÏwþ–âÃmÃö¸Ù]¨RÙë‰Á™b“Ÿo•º€¹âTcï?K^U¬ô¬ÛmE«>ß— ,4[ﺮd\Öz´3õ®‚Aúò0Q‰ÕC¡–÷ºg¶So23ìñr7UÕÃÐŒ/ÿש‘¹RáÏnÇÞ_‰Tú~­HãçA@í¦F×âHÕöÖËÍîüfú1|p{³ûe¯M‹ãm/ËÎÆ¿¬Ç]*YH£võûÝî"ðÒÐR*9¼9ñš&uæêçÝõm7QϨ÷þÅþò&k×a_6º²kwü´{¾ÿmâUþýÍ$Ùj™óÂb»€t«ÚíS/zÞþzÜm'У¹H‹Õ„»‰}¤e…þHìç'àþ’º­D¢Òùžv‰•„ä[˜!DËO‘bÙao?&=BŠ$…¯g«=x4E IâÓ)úðy]ùG¹™Ô1¿½–38äpôDö{}ûùÃîh¨õƒˆv8d=>z: /Œ]ì1–äq, o§Á‹û:¤O(Rw} îFZvŒ‡Éi~X{ŠFåÔ9˜/ >CI½"Ý!<؈Vo„ôÏ£š>~Ó9oÆÖÛ ïd¿ÞŠšÃË6½po„ÇñìñNôºYðaÕ;Ó˜ã»Ãwœ(ÜwZô+z+{¤O£ºÓ˜…{ú«Ùƒ²“½«(òŒ->Ò(‰Ðš:"+RÇ´¦úÊFØNú?¦IxóôœPbÈ67” ³}ZL¯¿Íªâ“·Ã™±€ru[ ¡!ÓŸƒ3¡öæågB{ˆÞìºãf=ç5iÑøë4º€pÐ{ÍÍ_›ÉR·õpWðÐÉÜ2[ˆ}P ï´Áîänƒ<½¾¾ü´ß¸pÜúp Ó§¿UxÀ£n!`>nFšTCþ°ñ[ï<½°‡\¶ä`õ›vZþÊ`»1ølý;á3WL¹ûƒM™cê‡ â0h ]…K¶ï€ëxïŒ{K3§Çbˆ ˆ[u àØh…«E\ ÚíCT+@Wt|T}òjwóëáÂr¸¤¡¯—5|;)C‰ªFj*[FV\.µñÔê;‘öTi hÛ ß>v ¨×i\¡2®­›,£…}Œ<fe 8æœ>Õ\vq\,6J„•/`#JNãI!¨ÓøÀ¨– =òdÛ6@­(²í@w‹z3Ÿl[6—l©#ÛöKPÜ yÆF¶ªYŠCèõHë<(Ù·Udê'¢1Ñé…£ô‰n]–>{ßø1†>CËB´³é³­>—>Ù@ŸÃ·œ>5ò:+”> Éã0Z8b•ð8ÿ,õÁ5x†%Ô[Ê ¡¨CÒªŒ˜k=ß!i _â(c\s†ùü±ÓÂ_§Ñ…ÓMCÐHàÂÕ#wUIƒSgŹFCÜŠÓv ”tP'y‚tZŠ’ Í8ݬ&éPÏŒ+'aI‡~ –œÆ_§Ñ…’u*‘4¸ð;$ªM)J:|&é 95z£¹V·†š¬AÛøxV+E&•9MíßQ`Âyj†Dk&?åæSÛ èŸDƒÃÖzê#‚ì MÍG­õ§•ÁU\e7Î=°¼Ü{Dšwj»j Ò®…˜ž¾óÖ¹¬ lWÄe,ú+Úß̳³ºä–ŒÐ+°;»ëïaÌPkf`„q´ð«[ËŒ, ×ÖQA€r`È= 5 "ìK :Áí?¹aÏþIhu€¾©^@5¸í!þ½ŠÍ^Q‚Dg¼9QаvMþÎ `³môÞy€3ÔÔbÞg$ýÙL í5sH®7Ø|Ù–uöã‹ÞŸ…ˆ~,»(´ÃêMë®Îñ7`ìõ®8U ˆô ¨á µŸ/ß·XBV‰›ˆÜz$±±^r뽕=B2¸+ ;ß’ÁFénp¥Ù´V­ë(€zlDYF…Eñ^à|¨þ‹í!Ô“COqr ܈™ÌZ¹¶ìÜ ™ÃyT`›’æ 3wlêî±a'çlXz¹|d¥ØØËCž´•Ðiµ :¼j¶«³Ë‘1!ÅÛ«­´†€Ö–ÚühxëáYUsÎö½ÚœÍ÷½šÍà{™Ï»ïÕè>Ð ]1µÓÑÔífäõÜ!+XxÄ<¾ÿo›}Ž!6 )×Wt4°/råQÇ¿½iÀ¢5íHâ{Z´ÊÅ £"‡¶ióî…´\o^|ôäÑh¤KŒ|MRøYYˆ©háy¤p(ò"¹VìÇËÄ4HGwvšôÚÕ¢õkhº4ó NÖh¾¯Uµ]Á±)'8ÙÔY‚k-Á™;Á)u#(Áµ!Á9L!é[ŠÑèßö£þ^Ôï¸%¡ÝÕ’t,ɳGÆò¡7#KöG¿Ïkô–tzPv˜¶Ô;´ vhCv ¹ôwÌmžÚʲCûE°CkØ¡ÅÙT•ÞXUÑÊï^®f£)H’Ðü Š~,†æúú?4c|Xa&gFD¤ª¢³F^kmwûæ#'#ƒ¦Î`'$ÂCBŠÑ->×!áxIEè@²rœÉ<¯ h2¸-8ˆ° b4¢Û©Á« ™¯L×YuèÃ^§–|7¢;šrêz‰)âh˜ÏkÐù%"ýXx¾ÿC„§l~¾cv¾µU"öãGϱD ˆÄñ¤¢¢E ]³TŠàÄlý‘›h3ºoùP]2òƒ)TU“c$³$š«øÓ±»T ݃ֈ¦Õ(c̯MéǪQ§“T¬ò Ö¨ÎöÍe *Çkò Ö§Ø=c(v_8c0Ve-1‚ü2VK°3ªS l%œùõ)ýXt©S¹ÌçU¨Âa¢žK8ÜŽùøÑŽB`gð…w÷®…ˆD$ª 5%9m¡ti‘Š½Ç ‡}*/•Ÿ[kºJ;SbÈl—{¶8B6³1\Á9ZƃŸu™à0.Ð:žþm QÄÑÌëѼ-ä0á8Œã÷l>6Sì ¾p„e-þ.D³‚­3  „3·ˆGEÑ@†:mN‚õ.͂ͭä×¶!óñ£'…ÀÎà 'œº("Ñl«I¹\eˆŠÚØÞ•¨‰v~òC畚†hkàC“ð\¢­uÍÇ,¢mÑš=ÑÖºp]ã+A´MEd´ø»v ¶Î€‚N>[X²Ø/Ñô!©š&€µuRW+Z짨­ Q^zØÅ9.’µ‡º{øÖ¨† ‡«'Ç0·Û6ÌOCí±>¼‚Ñ}y£ž›mi’ŒJ ݰ¨ØvÓD¯“zx=Ey¸šÇ$1ø Ѐ#œ"[ÙS,.¥³]X@Êc®8ØõH—!%Æ•7Âï¡€ò¹ßòzNaö¢@(›«’:ƒ&ô Í'ˆâjËCѶ(v§dm“Ë¥”–ä³ÃŠíÆ*-™fˆÇ¤´$5Ú¿Ç.±[—Q ‰¹?¶M¦žï°Ü^v£¶¼}a)Ç%û‡¼¡ˆÊ˜wŽñ|ÞÅê— Àï uS¿P^U;Ý™Eùr~C?V*ëÖ6APº™çð…ÞŠtÝUÄœYEHªÊÉ 3æ£çÎvHÓµ°2Isgÿ² yÄïè…«×ìyæÅ©ü#¹2Ø÷mRÀq6 ɾF3ê¹±_Jå1œ, ;Î"ï̇‘îjoYn<`Wør™rÄ›½î…á3ž›Ÿ á°e?t‡ÛÎŽ¦¶| )Iày3ˆ£E)@žƒÍU¢ù¿IyŸâ0Â7,á]z¦I•[ ªTCTn¹%júÿåV™ù@*Cûú±K(ÁÎ —PªQ,†Ih?×ß+2 0Ï7™æ^øj•[ý25½Þ“ÎlÆ1lAŸP‚‡6 gß.0¸ ¥sC›ªï©åJ¿„ئÆ`g–à˜–¡˜Ä8ÆSÚ³üÂiXa©3HAixAʰ*AÃŒ‡4¼Dê32Ÿ†]Î}øúÑÓ°Â`g†Ó0k›$&)²z}˜·Ùà¾c? P.²[Ÿ©q¿7cã²jø)‡7ê³èTiäKM§b\œÚÌÄ› ±ÆHh·ù‰ÈêuF>ÒéíY•tk5.;ƒº3àÖŠÄ'døä°Õ „Ãj Ãê‚EÏì®äV §s»‘Ê•/ _?z䦦D! çAQÉ,&ãÕÇ êÁa.ƒ ƒ³`p;0Ö•oŠã‚:¯tC¢"ç3ú€û—<+ì3%8(—r¥²çùÐ3I…ÃRT›l>Aƒ6lAyÚ!üØ)Óý]ç² `sc§¤rõ Ãמ;ƒ° JŠb¦©Íê«IZžJ]]u6Ø©º|†P¯¥3 £”¶ ‚¼!!uЇe:á§2û1–´Ä!Z`žª¿„¦8‰ÁNlµh6ãæÈ„m™Íê!ˆ±€œ‘³À Ø˜ÈøHp|z]53ÖE C²z̵ ¤®ÖE#C‚“Žä ‚k$8‡ÄÚŸ&[$˜Èš¼’g%á̤ú‚ ¦D‡¦Ž—“;^ž?ºoé$½E¨(Wÿa­ÀþçÓCÂ=uâ~$Ò7©i4B³s;ÿè%…¢þÎ{ˆž©3yæ£ëHæt‰s,«ù†¹«¾~ôèWì ÂbL2]ìAZZ£¨ÄÌ‚À˜2 €d±ð±%ÛºhÐÁ“Cüô >uE%Gǰî2¨hÌǧj ¤Ð"’š"±Îª;çår™±üZ†v¾ìÿÐø}ØÌ^üF´‚ΖÒIóõ£—­Å$ÒÒ~A| ¢2^þLþ ˜gój5Ô%ªy'» *h•ˆ÷Ð*Œ÷ðÎ&­Ä{\¥Îðõc'*ÁÎ '*ZÉ*‰Ê8qÔê§V`DK+Ø?FÂò´ÓwN²ã01µL”.ç%€-]£ †.IP÷ÄøüæåýÕÜST„TŽ.Íן.Í J`)Þ@—Dà¨í”pù+ÓåÚÇ@õJ;³.Œù¼¼ê@ˆ¤Æ£q4L 3Qe1>mF‰Ì‡Aˆ3~†W=¹) uaüá½aI2‘䣭/­k+ж–‹³ù¢­¥ˆ Q(ÚZjYK¶“sD›½Á :%ÚÔ„üãm‰ð@ÑÚ^M@!T´±*,ìksqû&*ÚZhÉ13ƒ»È6™m–.xlOGr®8bãG<œüdKšÃ¹ÚÊM¸ùÉJ¤j,È D,­iR‚ÑF™€`DZñ&štf (ì‰C¿±Øö©ËÈÄ+ŸÛ­0¨ y·õ°T}ˆçTÑßš–rŠ'ŠE¾`¡Dôë›{ŽIKèÊZ3"ÐÌov]–›!=|ýØ} ÁΠטŒ2•˜$-üþ_·û‹nw4#èbî Ý¸þ ÜO[­wO§þ†óvüwÍÆS2þ»%f4²›æqîô‡¹J5é ƒÔx»yƒhÿûÔAÚpBu S£žD½õÎ{añ>^®žÿž'{BŒ¤xó_>¯çšÉ‡1šèþËhPáγ÷$:®0ÕJ|l.û¿yÿúÙÈ{ñÙ³¯{ôôí¯6o¾}òìðùê²gË77½.|Öm¯¯ÿýûÝîâIüqK[0^Û€9i8Ãß¾ëߨ[Yû¹zœÿYq<úJ¯ceÿÎöü|wu³»H CúWŽ»«Ãñ¦$1„5xÒO›˜«éºÜ÷£oÃéì—{©ÁÚ«oz“i{ýë‰ãµþjm§C5’þçî|Á@ö-úÞþòÓËçì§•ý—ÿãÿؼ=6Ÿ·û?6=ÒÇëßèµ^î?mÎ5 nƒüu)›™£k'ª¶îÍ·7‡Ã«~¢çzø­(Z. ¦ÅüôLýÏ»ëÛîæe(€ Þ¼zúòå‹×oÅš›r@s €§5ëì»Æzž ÛÐ2ÅÊ{1ò—ËãÍí¶{ssTû pœ•–¢¨÷ G}÷í/¯_ü·_ž¿~ú깚+q8ü¼ûÏÛËãîâéN Q‘ØÖB™7 »$ÀgsXå¿ü—BBØo}›k¿BÞ€š ey€F ÒƒûÛ+•ÄSFç?.qn»¬y’'µ«Ñ' ¼Y\Ç YÌu†H÷†N ‡“©oÁ‹ë¡ÎÃäGÚŒˆæeïŸÀ£ÙÌoÆðñjÉ aHïWp„â§¹BT“>Ï~ìQºÄFJêý³É÷ý³yÜ!×ÓI_$w(ŒÊ¾,嬟¬÷¾?ö7Ï÷À`›0²ÓR÷âu{àÍ$žr–Ã!ý¬°ž„ÃyÿéÕ*6 ç9 R Žˆ#ßÌUœÓÃwðáóÁ¯• °ßÛ›ð“£íj¶*mJì§²ý‡Øyܲâjåéo©Ð[ºû‡:$¼ÛCï·HNp iŒw¨i €ñß (M™Û¿©¨p´‚ÉæÒæãíç«ïz ý¼§Ð?àtuâSåX®”§8c>åìØ^ï~ùù%œ ÁPqé¡Û~èÏÛß_ß~þ°;þø1árrD<—O"”O{­mmˆåVkÙå(,£hvsÕmÿPîÇnØ_CÇÛ—5’(Ê{ò¿ãf©õhÿÛ8Å«Ã?·Ç›å޼Ud?:üóO=AWG¬ÇœÍhõz¾âè;XOB¡ f\¶ŸÁ³B3c½-ð`™¹“'lÁz6…·„t¡T;J|m/ò¡¼àH¼:.nÏ• |»ûܳú &:€èGløÒb½Ø_Þüáš·ÿPÞ°ÿ`_Ö^[Ї òÅ"Î$5t‚áÆ­¹^øy[É×”¦ë9ÆøÒR;) w®µ“­@Ü€ûÞ\|=37,í„Í]/¹…/-µ¹­aÓ¿l¡QW´›M“°éj¦ífSEÆ>…t¬óv ývj½4ð–ÄÖÔ\g¹T¡JïË~¾ÿmÑÕ€ijÜçnk¥UŸœ[[v·ÿt¹ß™\V Dmßî/vçÝö¸»ØØý. ÖHV.Ÿ‚[ìÐÙáðpÓ’-„¢oP$3ä­ÅPÇ<– +²$±uV”¢:e.v‡Ãßo¯^ì¶H-™¬Ø…a -9»2È6) ûßnw0L ¡)I˜ „m……ü'ƒã„Îfƒòj)¡xûŸ"éÈij¡äR$EÕ±Ø,„è¢OÞ!»#‹™ÇôRN`úõ,d]P@ó·Ð>Y¨NÑêó7f=SAÔ‰KIñ—2·ûýA½¿Ø:ÁK|hÕT&ìúöðæöÃõÍ\±äÚ0ëŠ^îo^o?ïæágt5¤z(›G$ÕŠ¹¦z=+Ö[Œ 5Pùˆ T‘ \WAV¥îY{ÿ_펟fo>…X[¾ùpSN^ ”׈ÏU½o{Mt|^¶·ë|´Ÿ¼DÁ{Û4%c¡o­gÉ]Ýζ(Ìy`#¬G%f)ˆä‡&M‘¡Z}‘Î*úf;Õ5Ä×»›·‡«n÷Û®ƒŒ”úp(gùåz—zCn>ßv7—ýÐñ¸2;%@± ZâO¡o!â~=º}¾Ÿ›Í¢ÍšŠk½„¢^I²m¸®åï_x•ØÅG*î¾Äjº_û'@ìLZZ13Ú¬´ V”¢)ai ’IQÁó@áf–.Í_=„ò]]wótqN°ªÀK‰òªâG ×.’‚ØrE\Þ?1Š2À?äê Ê)L£"ÕE§D9g’Y‰ô,•I«†n‚E!ÚŠFi¯¿gù^¯g‚Ç‹J© iòÏx¡`!+–TžBµt37fÅÐXsËAØoîiÓá;˜B9 .æÈ’-‡FÌŠ‘ˆë…d!?,Ö‹˜^cd$‰áÔWSu·…<[Rœ{ ‘8gnÓŠÜ ­¨UùX.‹s ß•V?ÀÝ\ÎÚwJ×'S<õse¬z\hš2ÔMšK(#‰‹’!¬#KDÀZ©ãXÛßvoR…÷ñÁÚTìBð-HìrÅëáÊ.kÅÁÚ §ÿÖ+,öÖƒäõ2„0IÉ–Ÿ+¾þuᶬ˜"èZeA)]nêCT+®.Åi'ÉZâ€Î \—Íd ERªEdƒ}·^.Bñ<òZ³0F®ÇõÑšãcäwa OØÀjMCáŽV„lß²š&R¤…O±{ È3·`ų1§¯,æ†g‡âõkXšDÿxùâÍ[W8¨ÿH^U×z~8/†WÇixR§1“¨ïîõ ¼/t¼èò·|·Te^Oþú$ñç¶2%àßþ±ß˜3œ›ÿ±¬;Ä‚>M!FÇÝhu¶<@ÑE±+áÕºÓ²¾EúI,«êEèUBÿ­…‚ ÷©(~+LºûåáÓO¿n¯1/ÂÞæÙ`|êŽþBì–¸˜[ ßB4<æ¸@ææÈ"CÁÈöü¡Ü)îx»ï±÷ëÅîÃí§OHv±l 䌵ŸŒˆ)~Òꢆð¥±)r¶«È‹DÜÏvénÀ¢¿Âh BÊëcÔÌ=:°ÏÓÜÆUùÈ+¬˜Â/o˜³²åÉVÉge¯“åÔ̬%‰eI?¨z`œdñr?Τ¡H#«?aÐÄo—ÅfšÔõ‚c‡ý<|Ãc;'à{½àË!ÑУm‡C­ºÿíÒhKU£ƒ“ªRÉ™ |èS¼”Úy[O£ž°5«žl–ƒD+«eg°—Ð’Öû³Ö2>oχ_öýfÏÜ•5ƒÈ]+¬Û–…»ˆ&@ú{Ø(Cq3wj͸2Äà BZ¢.Ú(¬è»ª°eÀrdX•#co!GtJj{(€Å^à ,x-"Çù´7LW2‚†Åd šªÏ#è5[¬gq¨uKxöãÏß¹Qî£!¯èKÒHý;8òÄ\ÑK³? ÝäªÞô@ûáâu³‘ð‘NŽÇ_B´épv„I8˜Nû‡„‚!Ãýcr‡ßå2øŒ¶û wãp-çIØ®eš%{d•è+^ŽŸ·Ýå?wφ@.Nò¾9YšbÈèQ;%Rà †°èýŠ ÆO«  0:—Ú…Ð.AÀ à8x­/5€Àû¡°g0nUÀ/ý3À ¤‚ %A°Fådù® ŽB„WY…l‰é ¼&îŸao!H¢’(‚$Š ‰"Hb@¡Ô?CPÂ2úÃ;GA뉧“ÿô>›3îª0ÜÕ?ïÈ}¡²ð$]Ó ‰/4üç>ŸxÏÛÔ0<ñ¼Æ‡AÕ× õüœrü | kàgZ§Ï~üîùßžþüüéßÞ<ÿáÕó×oÏRwGW}ÑüU_íÆÞBFEû%\õEùpç‘LÜûË+b¯dÁ=Eµ½ž+^¿0$ó¢÷ºÔoê_úº®–ù÷rXw«Ñ¸9ºùŠ WÓ½ÒW{—{Û«”μ[¿©Ã‘»Ê^ìï8|? ÞRÆnPnvñ½fxùvùñ`wÂAÓO ú”¢Oú”£Oú´FŸ6èS‰>mñU$‡¯ŽàË#øú¾@‚¯àK$ø ¾H‚¯’⫤‰=ÄWIñUR|•_%ÅWIñUR|•_%ÃWÉðU²©â«dø*¾J†¯’á«dø*¾Jޝ’ã«äø*y‚#ñUr|•_%ÇWÉñUr|•_¥ÀW)ðU |•"!xðU |•_¥ÀW)ðUÖø*k|•5¾ÊÚÜÌÉõj£ëkïÎW«ô³ñN¾÷žR!ƒÊ Ðl¨ÍÕÓOQígUuÍ ( …/{#:4˜)cÞ•±Z×7K3Aý§¹¾ÎS š] OíOû¦Ø”\“>& Zïc TþEðœÑaŠøJkZ ,š½±×ÞB -Gg¦ÅM w;pp0}3|? “ WDk|w½Ã ïýÛ+ƒëÚÙYâþos—³®åæI¡Å­3‡fïøôÕ˜Ü{S!ÒRf>Üvœ¾:sí&¼ º¥løiîAšÜ±;¨á¡æ}äö™wVû÷³ãwV×Ìps[!7ׯ>›lZóS¶Ãß_^ÞìŽÛî½+M-Â-I` ¹žÞÛŠ¿•Awͦö Ò¢r¸Oõ«Á»ùjð~5x¿¼_ Þ/ÆàýñÛÇíþüWc²cã,«)µà•\˜ÅÆSf)#§,%`™Þ–qÓbÌ$D‹.ó@fÃHÖjzç, 8´hoß2|ÿÎ[÷´%ðCwø°í†1 ÿ0ÚÚ¨Gÿá/Q0Ò³ Þ9Ë@ÆÆÚ=X)¡s€8üPI[¦FNùÆšs#§ï箣i!EÚo¯J¢ñàû[•³d j=`Ü›ÞûF9Ýà$<ÐbpäZ­µ 7ˆùmêÂ|ûkâìDMxo·áì,yFŽ]~æÑ›ÓøhÕRo¾2i‚ªõQÁµ'O½ï-–±+H¦Tšz÷Ð×V tfæ8ð÷ZË-$7"‰™€"Ôkl“Tf ÿwV›Á4El kéa‹7ê·ÚêU£îx,K¡©×鬕° ¸ä¨xdY+ÄÎà,FæµÔß𛎢å«g­Ú2— ">\¾©2.… d¡£7œ×Ü[—šjû?ܓį¼ä€®Š8îØV y+N´Uæ­ÔË_óVøã»uã±$“¯BB÷C2ì«8ÁeC~OQ ‚9ÃçÑ»chy ›”x¥%ööæüW+N¤þ«÷Ó’³þ]§ˆÍ¿Uë"÷o)Ü¿‰ fBaÿÀéHs§q]Ê÷+Þ¶0ä§weù9ÊŠ÷ÀÇîÛŒîóº˜ÿÀ&܃z3ÚúA3 Ù=~݃v@íX5 u|B,JÇGÔ¢s|Ä,*ÇGÜ¢q|$²(ôm Íïa„¯„þ˜=Ü¥vØ%‰Æ@¾îÒ£Ú%F믻ôøw©npC 2~ÝŽ»ÞcÆùn˜yÚœE¾‹149 O廈AÍ:z3:,¥¹yk.@NÑ™Y}ò`Þh–µ‡õm‘¯¤t¤„zãÒx¼ö¢Séðúœ²Î[㵈*å.ó úaໞå†_;`9 ^ ,tËjiÀ¥\ Ba m !ÆCAhKT å¡-#„Ú <ßL\ËTÙtîëG×Rì ÂbLš¸V] Ž¢RûDÈòÕ3]Œ­ ãµúWm…9 ‚^Ú­‚®~]q÷ÓÖ…ixåèê‹–{ÿ6úAÿ»ñ7xÖºgf½:þlîˆ^Ò·µ-<µ`œ×$üM'oü€ô€î¶Zð _ðMb™%Ã7L¿ Ifa†Jløï/‡Ë‹ [Æ1C—­6ɬ!.~ýÒ±¢:'Ãĵ$>dR«¢¹£Ãü€¢c˜R%!:H˜\¸%Ã,0s ïÈËòð¯`:¾H˜({$išQX‹²<àà ¡ËÎâÒÓP¦q m ƒ¡1eÿªEV¼:t–Á¦Ì<…†‚T#¨dÕx\*X;ˆR¶µ“)Ç4Ï4uƒšÎlÅ„å‡wŽÔIhó³]¾az¤å†šÖ{Yp»›}ð]2—.BJ¡çšÖª\ö m ÔXÉšY}™(dÑÄßUmœ–4Í}:K›þú˜y¸×V˜!†T9Ö×us‹G+*±8ñSÞ½„Ñ,GRõäRmÈʉ>lÀºKô¹Iǃ«tݤ¨ÛúÄ}ÍxÒ¡Û=BTÌB)~ݵ4´q…¾ùCT!õf¼ì“„âH¸¨|ÛXWÍðó$ÃmÚ§Ÿšõë…2`†Sµö´©>NJmÍ’ú¯žÚgN„ªÈALµÐ2óF»¡f"YHDh&²á)EÍDÁjáÍ\3uˆOÚª• 3ï8¬¤3óž!)· âÙÊÏUÑÁGõ°wž%úÃf,¾f–Á [‡ì«vü" cÒ ßÖ) ¶£Ýñ±N!$~8›o^ä̢Ɯ·‘{pšnƺ¦ €³´±_`0Ûg ÈÎÀ‹·ΰ_¹Ž±J; ú]4ÀˆYA‰eáiÁ[#¿=!~ªÁ…Ýt†nýjÏZØ´Må=un»·]ûÈvÉaÊM8!Ù…1B¦|Š .9ˆP’Ú0;Ò9̯œ>M€1O9\éëÊ25øVÅ‚“$.¦h¶×©Òì.ìì½ËùÖˆì‰l¼‰†BVMßI‰c%.ºAÖÝ߉h$Àª‡B—Ô×Õ4¢pÊ™„g¬Ox¶@Ô.«mtbóÀµvãÂTáŠìyšð±O <¾VÁL½#à;†T_]îo¯ýdˆ~ËU£Ñ2"?pýƒÚáìÑ©@;uhÌv‘ghK1߇v„où/(ølâX©gBÉ3àB[]o=l©97¸Hw@¨'â´ Ñ™ÈG–dMDde‘)gr’ ÚÝXSxSñ¨nˆUždT4C!à:Hbu‡&÷FlƤ¥/ ‚Þ{HÔÈ?Þ òEÊÏÏb§+‚S.yž5½¾ÍDTñ]X¼&ÓI¡³mÒkI¸GQ†@H˜„òUPÓ£ëe¨‡I»@ïát¢ ’i>š‹­ÿ£Ií¤I6®+/¢´¶++Ëÿ•¿ÎRP.bŠa” ñÍEH–Ò$•øCgjc}áCŒð19”‡~€»8È]@e¤g‹WÞ9:gÚ¹ ñ¸6“TI_>>[‰pߨ’†ÎÕ-vw½kãu…l°©îNÂùAèèM´ÖÔ$~UEi¼] …ÖÅN”×´QS‚×úuHÆ{I•{‘öÊ|Ü4gÙB_£W:÷êc/ôÕxê Zb| …¾„ùêDØØ6"\~d$qI´y>ÆÃƒˆ)zeõ÷·¿özøbÆ®iÎ!+Í'9„´íð"’šÓº:C„‹ËP#‘ޝZ›&C‰‚ôšè&Mó ÒMÞ¾s_?z:Uì ÂtJ+Š¢£Sk³L›gc`Ên‡OPšqr²‡%(hÞ…|CPT%«YEÍt$¨¿”7ïÐù:ÜÆzl4EM‚Aá,AS5õ;ÃŽØ´Žm¼|õ¬µ…¼,h3/ÎÀhÜÅK'B—ï½S2´Æ£r5oý@~-­'§Oa O5që¦$v}›¡öKýg‰Eø‹°gû‚5y|e[ûI—Ÿ¬5䯛Y¥h ÌO–¢)°q¶0ŽJ‚;‰cwföäæ].jV.ûcl˜¢—ƒZ?>ÐH´åÃO/)-Îⳡc5‡j,:Bƒr¹‘ˆ,îlí•Bw¯!®9³6€u«6^ef³ïñh·^‹lÏîº/~øt4ç5t¦ÞÅì¤VA<"™KX¿«£´þj¤1û IœÙÎfÔ;%ËÕ+t˜î0Ãå@‡­·’{-~ˆy*ªÑëÆÖ¢Ë$¨«FÉ\ìb5 ÈÂäkWý 1¯eA ØùR*β×Ôô^ìÛ•SNÍŒ2¶o³Gõp¦³ÿYŸ!Å\µÕð-Sû-šHø‹Ôâ£w<!$‚åˆîÔ<ʽ侦rË,s3½ÄzíΛ–—cåba¬ÛšpµEʳð ¶f[æ¿ÚÆK‹cê$þ‚Ä~ˆ=71>àñƒ:~ âñô¡‚àA )ÑÿR <¦RCJcÀh :£1è4†”ŲRCÊbHY )‹!áb€*À1 <”Ç€òPÊc¸x 9ã1`Fʶ_]ßð\„}Z­~3An“èÜ«>Èݲ<\ …§A´wÖT®¾³èŒCàö01sÍ~ˆ¯ºÓÕ[¾¿š<$âÅwZÁ!~=NXß™ö§˜5òhˆÀ½Á 'î¡¥â Þ|x)*?¢Ñ AiôX‰†Ó©-æ ÷k÷Þ/mk¸ŸN‹ŸJž ÐptfÚ¡{¦› {S¦ªè“0•^YÏOÖ@TiÉѨÚ=±#ì†32¹MÕ&šj§3â²s_?v¤QØ„%De5ŠJÄha>§;AÏîùŒj_'Š&ObÁ2õ,Ì÷ ^Ï\ø ͸Y+Ú £ÃÏ<$V~%µ•3%—o ¹ 3Ht4=2 dPö Óh®(„ìJâ¿§/ˆ&E )†­ÌÚÏèÑÛØÛÜ eŒ¼i,vfû°¹m¸t9ï¡Ü¶>‚c;Åna.TæËRòò:!M“}ÇÄõ¼ÊÃée3]ˆÀ´Ô3à᥎M$Rs»jcº~c"‘q¹ÉyÄæ((Ãå'mËR~Þ ›ÑÖüd.ã5z à| Å»…·âHã‰Ïíõ¡‹iAÜy¬ù‰\P´; ¦é .BqÅÖ.¯L’J¾ŒØäápý桎Mè°ˆ~Q:y¢þ¥/f4xWªÏ¢BÓ|¨B‘W·¶GL jnÖÐ÷SMç¶¹{€»g’·àYÝÖð½àv ó¬m|FÁx²ª}¤Ï|Ô¼GDæh¨ˆßkZ×VØ›ÃÊïIؽiƒRòa‚¼ô•4ì7(3¶Àð†ÀÏ!¬$¸=qØñ+%X»¬‚}à2—¨1Ê´{ÐÛDCS‰U ‡LMjÛHÎ:îãˆÇm=ù~ê†QÔ5)=žÌ²Ëº  ÄþúQDiŒ¾S¼dÌ&ºª+hdê½:nšOã¿×„>E¯¥3l8 öEîÿM.+¼³e¹3„Úˆì~° ‘2–’Ím Û£ßÚbí^Ð!ÝULó–%éb÷¾,žh÷2µ,1G2Ýÿ²še’IÊ9’©¾ïeµÕbºðh1= x¢@29ðš{¯™c Þ?xmkÀï”?cYòN—uOÓ`X`sXã¾-9å>ðÜ4í½ca– rï›DJLùM"¢@bßÕ‹ìY¨9Ë»®sòæ²0‚ •µÔÀÖØÔHM®D½7pA¦MWïʰFêxLi)£4% ™8¥)NèÜ«=N©ñÔ´ÄøjÍ Bz£ø3…áêCSÕ=Q“,?¯ŒÀh4(P0±$ÀY|ö£5cÁ] }°*¤Û{sFÍ™¤9v=Qs¦#·4ùePŽi1¤†S n³1‰¥!]´ó,Yr†åèÔaÀºŸ5ŠÙÝl¢’#?ô0$ëh-~@•ÈH”¹Ž¡0iÚ›ßèªql¾C«Æ JÀ`7§‚nNRÌéæ$ÙD7'#} _D7'§Î §ó±t£ ð5†J£Õsæ«)aú¹Ÿ(ìíÂÚÙoì8ÍŸÕk4/â’^÷3Mg^Ú`èŒ7¤­—HZs\ž¤mœ¤MölÈÍ¥ a8 Þ$1I‘Õë!8J¬msUBþs)h5üt òLm‰¾Q…ç)2åqcyIq×Î,‹éÜǸð¾3˜À%~²Tw@ÚÝžû™X]Žò£wàjæms\jÔ<AnQ6óÊ ˜£I—@#¥H)¡`i ÀÍ—p½¸ÆkgЈK‰ÚÉ[àwÔUáê)‘<šè ³µàÃOwº.#ö§úö8î(’7/w"Æ%RQ]€É È& füaíý‡Ší6‰#ÑA9$YîþÐqÁÁ"…_Cét1“ì‹›#NÓ']Ñ *HäARK  i¨¿!R7j+6`kmæeƒ;­8¼úèCmî¬RhACˉŽlÄ—®gÈòÝyDj×´@¬ÓB›¢©õ&´¬˜;ë›Tã¹yížÏ³30EMÎZJmi¢Î­%48fñ?+XhøËªÁÏ—ñ§Zd·xÔ¼—++Ю­j9‰çœî÷’Ë‘ñ°-”ðYì‘“åÛÌqðwèÇH¿wüòÕÐvÁA‡8»2Pã„L`ÊñO|UAöXX¼pxjŠcþŒ°â–zGMáð“ði>ÅÏ&Hô)¼vÊE´‘lj5ãË#øú¾@‚¯àK$ø ¾Hb”uËÚP±Å‘aj%t$ûZ}§6B˜ÓEQiÛp~ zIØÄÜþ}Ÿ=A¿RáúTˆî ¾JšØC|•_%ÅWIñUR|•_%ÅWIñU2|• _%K*¾J†¯’á«dø*¾J†¯¹®Os ¾Jޝ’ã«ä ŽÄWÉñUr|•\ûçm7Õµ=šœ(ò¯ ­†oÊ­&Ð2ò÷‚m±úUl}9bkL¡k-Ú9ïbFc˯ûýåì÷W5õUM=¬šòeN;Üf3Ä<æ6nii#ƒ—„…ú1j¥š¬`+O5%ƒÒ±¿q6Ï ¢ˆøîÌbÏ|÷Ca0«¹¿Ê÷¯òý«|ÿ*ßO”ï‰rœÓSÒ'íµÀëü ÿ=`#ü q¢&ÉÄ€U–™ç$­°Ð”u̘Wh€Ú#u²SýÊZ¦ÅHk¼™uòäíhL4È3¤‚ñˆÚÓµ ÌO ›ñFcsWezŸ´‚“+“£wnž4"Ç6ƒñ lŠÜø5_U xÛFëó™ëáÓt/Û-Á乇— OíêbGŽƒW’77œ–™él‡rµå b¨b¨-! ½Š¹%Ë­ÃBêè¼Þ>æIôóŠ`xØpÍÏî,©qÚ4UTo±…òߦ‹lOüÀ·œì%ÈÍWzÒŸ6ê,ãw„w—œDíPDž:ÉH2*ß:Þ’GbIq'ûnâÁ^7ÖU[ït¾3µ¯x ·%/ik¨yœå–*dÿÏ7ï_?Ÿ´ñÖÄOÚz|òôí¯þö]ÿø¦W½‚zóíþðçÝööæòãe¤â§øk0­ã'„‚'™> ã= O¾ùåzw¼þ渽úõ›‹Ýo»î›Ï‡^\_ÿ‡Ñäê·íñæ›ë_·ÇÝ7Ýå‡oΟ¯.»Ýñ›Ÿ¶ÇëÝÿüÓáŸOÂúa‡…ýñÓ±—¿ÔyˆzóêéË—/^¿U¼Áè Èøã‚@ðÄÅDaÓKûnw³=ÿ5^ØËoÞö?ÞþòÓËçšaƒ þê­•‘xÞâÏ«Ôû5ú¼M ÃÑç,e…Þ$FOÍJ$#â«8´-Ž ÉðÇ8°Mâm|Ê:1Ž·Fâƒàp7øØ5ŽLÖb¸,&¼ÔÖ%èHIªôVßù–68Zœ,øML™;± íåü[ᄘ€¦Åß6ì›ýÎià.w5Ev8Ü HêÄÛ Hð·O¤/RÍ£€eéô‘±{“xŒC’{u¼K)-Ž/%)’‰+µäû„?ÂmÅ×Щw´QIó,%¯q0fo¸ÞÀ³”ðAdÂÈ™µO ¾œSÕjB˜â0à“Ý“¾Jh ™0ep–IlÅÉÔ>ËL˜Kìs­œr÷¬1KõÏcyöCʹ·à "ÿµ¬ß/•ÿe,ëÄ.Ö ¹=GÍ­®ya‡ºæ9ѳöón¬²’ÚJq¢¿§­˜/JìP‚mï5^„cƒ¯ñø~¶"%rvjÂðJ˜ÆshìŽDÇ—}OÈMP&!Mÿ—%ê­ãî%ê¥D ¼Ynå:y¼/ލsÙÐT4ÓFNÖÔÌ+NP™i%'P–€†Î Ë%õNÃfÿ"Õº«$ÆCoª84_zÐr‘Y•;ó"ñ©2ù9Þ댸ý¼nJ<$"li醃“fnváakRS;+â—J Í;[‘`ëû-UÅ‘7[Ì& UJa“J%%M)••°Ìå®™¤¹{»sžèÃ!I‰Õû •' Eë9þ‹Ü„œI9°¡h‡áASó‚X‰Œ}jê8{ÃãG hYÐKKï¤üpæýùþÓå~^…½*NÞËÎ>Ltí—p†º #@jÜ R­*®Z=üçíîø‚­ÔPv ý°bʬ¤ @ŽmZËXj9¬_Îq§:zü7|Q¼ŠŸBËÀ‡-è ƒÃ{°Ò–*X?ﮯ·ŸñJØY‚â[Èh]÷ã|<nvGÀ@°‹E[O÷žh%À‡èð3â ?ùÿØ\ì®Ï—WºÙÈÇC×þqýÄ{c÷ûîüVÿñðqcHö¸½¼Þ]l¶ûÍî÷óùò €B`;Bƒ¤é=MzB*Ò»Ý'èR”f¾òáÛ~ø·×`hŠ :Øì%9r]õ#_^t€ )ãí¬Œ²»g„ô¿ÿ¬t»ûFµì[•´ü T 5”NhÓ(w–¬ßï'à$õÒàJ 2DRiñ?C:Ó)9(ýn÷Ÿói¢È^N?K€‘ÀÌI$eõb’ÀÔ„¶”LV§‰gÝn{\ *jˆðÈb­5D=¨F{Eô¯Ÿ»×Ñ f¡ 6k9ç ·Rß)[2m­”­!¹%Êœº0 ½p?PÖ*|ïÄ=ºX"JŪãœúf…T³97·ûË›rè ÑEKñ/Ð÷àŽ–’ØŠ¤8é¸*‰½ßý#ácÎ9ò #^ÄêÁž•óâîF¬_Êöââíáùþ7øn… „dÃH0JÓb‘Ohƒ]Y‰€±€~mú¶†JäCè3`nPC"‚pûH 4õ¸GÐ Ç—˜všÁõ|?ßàjÚU}×U`¯!UæÂ0ÀWF>0A3½Š6‘Päéax'~(1¹3s_8K(´†ÁˆÒ9D°[BÅÁS1õc]9 G!ó§¾]#2 }ÓÆ#ð&ügLF«fžHÍ‹ã@2.±,LÍÁùÛ]×Í/4PO M!:–-IC¬n ðȪKÚ‘ãÛ >Ä_+"(,ÒW—$ç0× fn°Ü“ýþÞ°U·|ìö»ã<¢ÅôÊB¢ÅÖµp j!••-%Hºknâ%¡!H-–§Â(ËÕÔ-Gìד®n)™G1È—SÌé°°˜¤  u!ÁþÄÏdF¦až!Èi’ ò >¿AÞcðY©‚¾|G5•—{wLx˜¼Ã¡?Ê¡©7M0®Ð¡Qõ×?Ù˜ÖQÀܧË\Ÿטÿ‰’\C–Y•/®ÿb"Jot@éÇã/= •2>)ÉŸÜ©CT°%Ë~ûÇÕîÙ¯»ó¿Ãy‘:®gÃÝ-on¶7»gÝöúzrRÌ€ð$; ¾¹n‘W©li‘{ k¬Z8vPç–†¨¥ëÝÍÏªÎæÇýŸÕ5¯€yíX€u">ØVJ:|šš.?qKO{Á€`‚"£¥ÄõB"n@èÂe;[X,†=J•Öꦥ¸ Ñ·U…m,³ƒ@OPÄ" /ö‚¢l†’}:ykAáõïÏß÷Jïfw~³»˜eëÕE!­R—¾¶Î’{úÃÈFÕjno®no¾Û}¸ý¤<$':¬Fg‘Ń¥€æ6|´0žW,W¾ÛwÛãîbóÛpìõ·§‰˜·[™œWóR+g‚ü<Ê(É7O{!þiÿy·¿Q/~è¶ÝæçÝ'2>â 8æ+5öÿ¾ù¿0vê§ìÿïÓÿ–eªS>Iº–žš (€›Ÿ ÁDlÞwq°khÛ:!°Ôñdíž¿ÞÛ›8b”ZlQ~£.³†Ð—U‡p®o¶Ç›7·~úu{½(±çˆz»d»¿Øüc{©ÿý±_šº<¸Û©SD%2Ëq,¡G uÊ˽:àt¹¿Ø]íúÿéÙðæ×ãn Ý/FÔ£†Çz`À&ưépuù'{¿2äÛ=L¿:\îA\³8TÌ”_ñæÛŸ VÑ") ÄÑjýC¥~PZ´Š®»Ãp¢J¨e;½3„REÙ*„^D>jaŠvQ,.Õ}ŠþtøçgD|ÿøÏux¾Uºc÷¹×ÓÇÍÚæI•uk³èâòúªÛþñæp{<‡FbîT¾{ç©× ¦-ULFXs€SK·¾óÃ’ó/Ã74K!é¤ÒB~WŸÀk}‰ûÕnwõëAí‹’P~Ë¢ð;UûÛîxùñ4ªZ˜ÀD d[Ta; ñ>àzЬƒà2aV<ë÷燼ÅósçU 7ÄΑP8ŸTf}«eù TB*XšâËË)¾|v8î KÚ‰ †ä!ìcC $ÿ8^Èè8»ë^«mKõ.‚›‚R; £Éýã›Ìuüóöø÷ï/×@íå‹áp¬¬A빊,õ\«Pký£ÍáüüöxÜíÏw׋éy qâRÇ0%OzÆx³ÛíŸЂLq/¥Lκ¹<ºßv\_‚Œ ®¡ýÛ¶»Ý© ÔÕöS9©Áø!Ž{do§(—›fÙ´ ‚jT ;&kkÅ\°bšC©´ßv¿?¨ ¨ÑÖÙ 2¾Kø*¡Çw½eðùr¯fØw‡óÞbp‘…’=ÄNÈgá¦~:¹îbazsÜî¯{çå³qn›OÇíÕ¯Käj6<˜éDÃ@D7þ½DZ3)‰^Ç aH©R˜†”!gkÂ(G?#’,i°s%b‡>–Þ$rÃ#}gVETkž…éUV„™104vJ"1Y¡Ï©"Íî¬c”:wR& ’BGLê²·`V{ f-Kª$zžF°ŸaU4X£ŸL`Å­D¤RC±d/Ö,^ø~·»xsûa– @ÊO}O] Ô‚°€°°^¡„ëV4UÎUÒ¥×ôý÷ÍÍq·Ó!K}‚úòŠ¿BY•jafÆöü?o/E“›¡©YX2†§„R“BÏvݨ?/:â_¶*È©I‹Î•$š±I‹ôi© ÀJ*ßúÉÇžg7燞¸.÷×½=¾Ùý®,ØkÌzí¿)QŽqÃÏ u?ÃŽ÷É‚ªúDï7ÂtÌèÉÿè×wÛÝüä¬Pn¤ÕvÁ-[^‘õÞA¢›…žo>=ÅLB„ÚUïw•ɱ.XUU´°æ_‚iLõ}wø©_ROG,¬ª;£…gT˜ ãqÐ?ooÎ-Ú• 9'Ôþ<aýù̳¿{þ·§??ú·7ÏxõüõÛ³U"öÙaßcgƒýöz×CPõ¿_ìžv*q³{)ú_Ï·]÷ç:Ýÿ]ý„ïw7·Ç}ÿÝþâ»ÝGu@GõB|ù-icg]ÿ³îªïÜUeý†:‰oF§údšJßêƒ!æ¡wZ…Óá«û±¶ÞÿòYíù»BjÆ%Rÿ¬¹tЛ߈¸‚èÓîæååÍî¸íÞÁµñqmæ i¾øËöØÿÿ»÷Ì k7»ë›×·Ÿ?ìŽïF* Úá·Ý«þ¿wïõÕð¦Ûýþ_·û •ÃQŸHɆÁ<¨ ܲiÜŸ®oÞ»çMèÞyû …Û×ÝO ‰þ]÷ïºfÁð¦|7¾›˜’DŒ êñ¤D`^¨˜GRýˆÙ \ X¾ºu”«ÑìÓ§EªE°ñvùñ 0’!U]g€¶Mɇ¹Ï»ž&þ2èÔŽºíLþÕ¡€´€«FiÈ¥Å*MaÕ¾o‡!vÅæMû›êý0–[̨ͮ’`Ïzø^äfKq$e‹…ÎòBÏ ï¼­¥dëEXkÌîèU÷³þ¼;?/Þ Ú]št Ø“r¯‚ïx²Á°Äg½6û‘#@ŸP2CHsÇÀ²mës‡|îPÐuŸ†ìBv!Y†H³ +c#ÀdÍ“rcó>f©qRlçÞŸÁv†œí¨Ïz…l7wÕIG^‡“©e¾Ý^v‰¥‰lTßi j4«çÍÒ-P•ØB=Íÿ ‚«ÃÕóß³³a@õ_t‚Æi9`Õ—åä%hî-¦”hEil‰I‰î\ÚìBõô`Rö†c,/ÛþZy†âÆÜgcLJf§óVÏ5iÑë™l¾ÜÌ‹6Ù‡XEY>=¬ÌZ>ú¿Šp Oíj„'é#ÓÙ}dP"ýD„¹Ÿê÷ŠUã¿iíÄ\[·òº…ª…LhæÃãÑmdزaVõíå¾»Üï¾;ÜxËë#Ï„±\µ¾pì…,?`õ¢Å<±…V6þà0Ð9ì¾Z¿ÊªΑm±Ôbéð;ǤˆÝ_6èwÄ]²cBhñêúÓ~­Âÿóá Wi«jêjQ{Ñ ô´â„ÖdÑš(¢‘-yƒ­£3pÃ/œvH®g¹ýûä”zÀêÅʺ`!îøL°0Ý¡äpgÄn¬ü£;TàCöj¨3Z'ñFªÒš[®~R«Š°‡}“J_Ö“ÊÇ­e‹€úF[“ÀGVdFaË»ÛÑ>õŠ5lô€ ” i‘+=Yþ~*éÚô#­U›Pšè£ßëèwy,ck!8¯^ NSËkÖs ¯'Ìq+âí“1:íÞxJõ½T R˜xJˆ=†‰½x½ƒ¶Qù´÷‰x̤ Ø“:·ÐfƒYË$=äCÃa70µjpeµµ.4Srk"a,jŸ1ú•E¿²h‹Nø…nÁ(]‘qg¨Rú †mp Š0JP³ÆGvå:<q€VHêåpaµžfGÓ]öŽìL?â¢þëapÞœE¾?ø2´ØõWá"šš‘ä!†oÄáµüݱ’„®“!f0Šp¥2J>·ûó_ÍÄ„ ï6˜ü·ô½Ü—ïåü›]÷qÔî¯_à|‚Pð'vÂ_€½"ŸÎPKŠÂ¸âݸôÓ ŽÂÆHˆm½•Žä‚P'õ¡·Î‡Zô«Ýͯ‡ †ìV;ŒØ?ŒŽ—9Ú:<Êð»ZWg–-“³¨ÍívJF¿7Ñï­™®ñ•FÃ#‚˜m=túáh$‹ÕK&ȽÙXOÈ¼Š’ðiᨑ„iôWÔÃÈÆ š:ƒ fÞ‹a õe¤Ÿà¾ sÈtNaŒšåšóÃ? ¤š¾3³aôÒfq“ǰ^ÒÈ£õå9³QŒ<"ªÝXëU4ôÌÆä]8¹ÊŽN‹È`|ê‹-ôеKSYczºRhê Vpº’µÚÐE°Å[ºÚÆÔ”ñk[h1¡©$Ÿ<’²ü\•"| [6ÄoTOÈâa~mpûÑ赇 # ²`~Þ> ޱ‰ÝnÑo*Êh0è7Íh²}†ÑZâ§ëDÎ=HÙR+‡YöŸÐ Ú@&šzŒ,(nK@ÝaÁ6ð³"ãÅG´”z¹Ä0È“N§8 „%¾€|Zž"é“O½Ä}hÅ|ò¡Ž|Ìמ|Z>€ ËÆòi%†È1D.Í£±hé+ˆ¤U$z:1“H-h"ñ«ŸÇÎD¿¾&|ɲ=>±4G¢ÌHpÆzê‡mò¨Ûâ]Ó¦¡ÎLQf0µ»eãRþ®ñ«¨6ÄØ@Õß® Ѧ¾‹ÒŽ'ϼ´ƒ†ót¡M•8µfò³(Œ”cPÍâ xï3ã˜[’xBõð•~œ®²[vÀé<Ø¢7Ñ@{Ž›¬;xý>úÜè¤Ðâª4MŽ–g÷4Ø‚.Fe3PÕðSû}ËÊË1E†„zf‘˜™ÈÖ›YW½Úp™U6WàÅ=AiEæ±_ßÏç»Â{€ÒªÇÔC8bð~žØR¿´ÐÔ ïÌ:¼ýšùÓ'“Y‰ü{t ßW&ÍOC—…ƒªÖùš6-Ô6JªA+ÿm?¢âòaúƇê<±Äî'ÌÂ=£L¢û‘ù‚¯\½’rªz%¯ò5ƒv†S Ú4î§Wù×ÿ.¢ÓÛ]Øq˜-aMy€7øâ:34|×Ç}ƒfªV­:EÁ#I°0ÜW¦ÌGég\T1b%“–‹Âí4·,]©%Ä|H»ÇCVmp‹./PA/ÁìüpÖZÞ®‡d ®Á'8#NXËÝÏÁŒÑ¿‹ÚÇÐðLøÖ¾yÆ©‹y»gŒZÝnì§þ÷³¸jßZ†O­™v¨1K–4P†É©ñסf;x9Þ9ð°Æ ‰¹üL ’᣼|7bÅWcÃIìa‹'“ÀyuœÞt-62AÐ ÷!«¬…í “9û‰àØÝ+6³£[ìc™3ÄÁªÂt„bˆ b&y¬”.æQº£]âßFì Wì¯Å®‘B£E˜ˆhƒ2?OÂÌÀ’cÉ–èÚg#ÁZ¤Xeò[á}‹Jr³òvUÀ—s¸É‘õ^)ÃÄî2 ýË`SÏŠÄ;CѾmŒ[ÜÓÒú ‹›ÙB!Éÿ>ÔuR89ã€ºÍ ƒÑ uÿ®y=þ››×•<œüBqU¢©às1Ý)Mͱájt=ptä=oßj‚Êã»FhFÛ— r†eÑz9jiýK®/Êê–íJT,ÚœVQ;ÔÌ6›0+7ÔÌ”‘$V`ë^Ã5ð$”³ïÑ'»\‹›°=”ê|ÿäÕ¶S]Nwùdð Ø¿ ¹xÀžð:Ø‹P¿Øë&m¦ êéûH§u£fø©Û©Æã*@¸ùpûIõ~=o67õÛõÿûóáŸÛãÍþù§ÃñSª«:ð«ÜÓd÷@ „§šÇ¶Ýær¯6 o;›Gሱ^«¡ìm›j½Önã—ÞJ1-Wý«/-D°Oì ¡*iÃ%áãÈUú"ªÉ¦fz;ãE°.lB‹½„à*ÑÖŒEDÿØA›}¬‘Ô#[H’ZR £èâÉ7¿\ïŽ×ߨ–Ëß\ì~ÛußôÜvq}ý¦ þÃ{ß\ÿº=î¾é.?|cIúÝ ýúO‡²†Í­½±€¡Ô\ûÝáöÚkª§2ÛžY •ÓzŒ›2#¢Ûd¤»÷Òr¶K¼Ô _Õž öv=1fJ¬²Jw$ì¢ï9ÝÜüqUÍr•F{_JËÌ›ÍöøéVݬµhô5´–¹]÷j™ƒšJ¶ªÌEî.[øé-×Ânˆ`1H_¿»³ÓØýé‡ë›ãö\iňé‡-ø n«•´­ƒ÷Vjx6O nˆG¶’$TeÕ*¶ùûe×íÀ­Jå7xsl+aGë’Þ¥È]ˆDB¨)!hK©¹ íU/(·Ÿv𺂠»7{†FäÊÙ*K³Æûú‰_,鶈¢<@útcØÇZQæÆ²÷AÒQÚT#QÕÞ0ð*†âqtëæá)TÈÅí°+rÑÀ’wÊvòyìJÆ4 tmRÜÂ{µÒ·'Ëî“î?Ì]`Jö4 ë–ˆŠ×'îÏÿ®ªõcóî’Æh£´¹9‚¼üð™eÀöȹ« h»`?ô~¬éf´ ¾Ø÷ûÚS*˜q=ïú ¤)õbÄ#˜9y5Øõë‹Ð/N5ϺZ6Pür¨bí$ÙÈ”"kÛ–¡íúýù¼_•㦯X(YÆkË6{B4Îá¾5wÞí¶Ç™·=¬Ê—+-Û èyq#ÔŒÈE#p „}½¶ÿuÝJ¹P°—0â ž…7ý¶:Ð¥òvOÄé¢ôÍîøÛîÇý1mï¹A®#ž»V•¥Âw #ÒÔbѵ…;ˆÜ íGUýYÁ‹Ð^H}{ºa¡çá n6õB„šPfHó̃0gk”ÔÓB9~¦G÷ŽÊzÁ«Á”oVSE#ÐüÓ3ãš‹õÆÂî X‹s$ ò¹,d¡:/èåk.’Ö}T±¨÷þ†öØVôì§ÚL!NY›¯ejw«E»û~зÈÝôØÕê8P´ ˆ’âØiT2ºî*åZ§…C…QpÅ4°‚bbVµŸ’!Ô &÷d,÷ÄY”„Ô¯“Ø/¾%.=ÓV6“äÒ3²±\.¦ Õ#]rIŒ@&©m@z¦uù—ži HTÉ6N³ÑJ€„¬A–E6qÞVÄ.ˆj¬×td»½¹‹/ßm@V„D×$|ˆè‹ +45f¬„E¹d,™°#57.«MDŒÕVëá¾­ÖÃ}KFÜ«|Ÿ—BJG 'U”ÕÇWðîíDMn¢ª\øúå9Ë'ðt¦²Æ—ÓnB]Ž\§éZ!²È}çgóµUó–f;ßQoiã¢f-F:Ji |)õžF2×âÍ%ÊõO®%nííC€ lPZ㮵6“”Ž(7g§ÁòG¤ñœcÁeë¢02ÉZ=6©KPF+Zá(ã¾’ F±<Ê4œëîP&Šb+ó%2)Îb×4­.‚‘æ2窖¨5D\Õ‡Ù&»Gög T` ’,n†¤ö‡o'4±ýBÕM¡A‰+/1dÞ„yáõEQ{º(𕏭$:\Vž~Vø™ù™šL²LO-z¼ÑUs¤i†!&tm·+Îù÷ƒTÁÞ:‹ú –*ÚÏÚ:†è8·v§ ÛÑ9Ü–UJ”ºr;gAÅÇ.¥'¢FH…o¹]TÇ6h!dmƒQŽëxÌušsT]¡šØÕìUæ)×pÔõÙé±—Ñã¥RíšóÆèž.›Æ™ToD-`zy•Þ|s>±„|öØ‚ç÷]û] m®NËúüô ÷ùÑ‚§%ê…¬&`–)›œCä-£þmj«…GÑe¤¡ÂxTÔXj• ë´¾ßLZË›ˆf¬-ˤCˆ”â.ž ¡SŸzdheÏ”OM‘.p꬟ø Ÿ‹ P¤)lu91Òt„…U±UÆœ¨Yiš¿“53ÙoP¿¼S§¡)j°0!íÏ:a4ôÄ‘šž5ÜV™)Ä©[Åh"®¡Æê“§ÕCä(„ñD0 ˜8™tÍYÀ„œzCÓÄHÜŠ:K^s×ÜÔiæ9 ¬5›fì~ëÔùlàÊi;…UÕj ­‡7БËpãXÑZyˆ‡d €„’T»¢­13$Ø5qò®õð¼ÙuPâã‡3÷T¡´ÓŒ1«… þq ‡YÌ‚¶Ú߀Hi4šŸ^__~ÚÌnOð÷Æ•ÇÖ·ÍìŒÜŶ°o„ª·ã™oœÇoý¶ .Ô˜Aû‹WןÞ{ë¢`ûüÁ­@@Æ Âw‘÷¤>¹é‰ñ™Ï‰–áM¸å\e#ÕÖb Úfé/>X¬ÝÁÐcTT¸#JzOe†-=“M[5BL°™a£Î¾ùØÙL¡¨ÓAÙ¬vÉÊÇÆf"–Ý–¶ª‘gnFB ±bÙ$^ëu(â&Ž#ÇøˆGOK:îÍ»¡ -ÆF‘õ)ò$YS<«V×þñn3PešB›Ž5Kä@2ΧÐ`14¿úȈU!¯Ó¸Â‰µÍâ0^8B—xÞ-T±±ïüŸ–±fÛ aò ¯µ2¬Û ¥Ct‹òtØ$,–†I‡|>6$‘§ÊÐacé°ÁøGF‡±MÂ{š%ŽCLh‚ ¥?{e0íÒÐZ|ª±¸7OuÙ¤ò¹ˆy*s\& û£v í˜0ªh xxBá¸Ó(õ(iI44H'F‰‡=/ë¡yPVÀ<Ñû*©¿¯Âúÿ1.÷ ‘õ+X:=õY2hÝ$dñžÕ‡T*µ(Æ™AÔ<æpú|™&9n—ÒÆtµ,Y Ód*Ž’‘iÒÊ4‰{ÉL¦)äuW¨Lk)ÁpˆÜåæDÝ|ë)XÄsË Dy©…£ô‰Æ òôÙ2àËjúl_jŠœ;’ãm"4?Jà²mfÈÇNµ ¥Æ FµŒS¿W€ÃlëÐ.\{¦ÂWÇ2¤cÒ1ÃH–cEŠŽÑ·kìaƒ=”gSA{Xå}Þ ôÂXSémןf¬ž<œ¡ä«`± ³*¨"®]9C\Dœ§qV-¯!¶i¬‰âaŠ7F4&;¸3?C8š$–~áŸmíR½Ë3¼?[Q4é,±óøA~”sÌî äg•¼c„ MW¼ŒzÁ~MèÚÛæhT!oGpðW†D:ú\-[Y­¬¦:ˤá^4LX™Z’1b©<Š£gQÜ-]6×@ˆý\ÔÀBïŽj§iê8_%%ªñ©gFægg ª¦yÛ4sŒ/éð¥h”IçÃê}Þí«‡‡¥±Ö5ƒ}7&âFð;¤9”øüë•úÚzô8;î…^!mûá°÷ÈïXü+.‹?¯¡ÉÙú2ŸfG|±ÉlªñË—^vL³N§{™Dè¿×A7°ð†å–ÜgÒ ®Š¡äxoÓó;8Ò`ÓG{Ê„ž^«d$:2¾9(oÖ ÅÔÖ¬o€Ìzgûà‰M¨Œ'Tÿ¨ôQpaÀÐb Ò}éf¡ëÕÜëb1ß ÑŠŒS`ÔéqQd8fZ7Žñfô(zïžãÛÈqãVÛÈÜk‚;pö©Õƒi®1ٲΎúÈ}8ÕN#1F®öáj1bÊCîb }¸æ, ©>\Ò] ¾ xõáÞoÀ‡-ŠCŠ€!e˜òaÊÈÒ6µhm{OgHñHíØÏ!%²Gц\..º1îiº@\::t–˜«‹õõ°MÖ„–¨¸àÜâK «SôN L[b"úœf‰ynzÂkÃÊÁÈ¥  Vv1fø†UVåØ=°â( ”i»Ëª|à …dB’xÂD‘>ñ­Dª2Ä|•ä*µÊh\gSýŸ®äŸôcu³Riná©e°ò±+ “ U(<‹ý^ÍkÄüHÒêD:]ÍÄMC¼hÅèõÉ\Û%ªäOÕYkëÕîæ×ÃÅÆ·F ñ|xMMû/ZI-±Èn$P—ÙêqdµNÕ6uvÒg£:,æ-È—iãPr­Ûe=]6vÚ¦ZòÌoêÒ™äânqn´²o˜,÷ý³0 ¦Ì9z%pPeõã¤2‘­gc-sô£þÓ½¯ýŠƒ¼2ÑÄÕèjäHÅäh˜ —Ìf¦Ç®cª;YL‹ðQ7ˆã˜WâºÄä¼’å‘~¶‰Bù¶I‡S2®HRÍU2J,ñÊÍÿ+(™ñtÎûM¸³ÔŽò«v€×b‹Ì׌öÄ`k2=MÃ7!E _’‹Ù%×n“À~îѼªX‡aìw–‹»WIm–ÏÒ‹Ôøu4>ZþÙdÇÊšü’D¾Ï \Ç£ûÓi|BŬ™AmÖAmó& &Àk¨OÓèÉ9N£8JAiƒN T£ç ÓèœH´$„SwxJÿ§oT˜çrêõ9Í=ÔA\­ò‘«nÓN£UÝ4¸ŒdD-æº[ÕíI8€˜U[àïù9Τ*žÐK9íÁrì†`’êzk…1”Þå|z·Ýôczg® ’þO‡|çÒ»×·ç4z·'¥†!;½+œv…(½³°_—C-Fï®­Õ#¢wä’ ÎìEÞ¤u>¸GÖQ»Ñi䣬3ÿ0g ZÝÊyp1 qEnåÙ'Î×G,Ê>)ºj5Àíp¦D£µÓXD¹GÐz3ÒãˆÝñæpå{‚3ÓöÜ3•6†¹»e«Ò¿ÖÚÀà ªnºq©«\5,šÄÛ¶–ìØ¨.#;y&·R;ˆí¼ ²ñùº³c„õx5ddb^3°û©Ú(Ä©åû²â(¢×Ý’,„­wÄìf“TØÄ›&›“JÎ$ª•;]¼Ãgœêt‘=?§¹ªÓL„IA:ÿü íÃEãß…e,·™„ˆú¶-7 ´€ÐÐ ÔÅ|d"Pá´Ó(DE`í.¨cjG‹-\9ÌÀ{…d‹«¨³xôíd²<´Ñ2—3Oâ9s›LGbsö(–%Œ ¦x‚*ˆÓÀ ÷DÃ\ﳚÞ:M^¨p˜¨‘×ð³ ]EÁV‰Ïu;ƼOfÈÇ.j}Z¡’„ÂÁ¢®Ì6Ÿ–òP‰±¨®'yˆ};)@ÀCë'­*UüŠ9¤n&*xÝŒ×`ç}ˆ''U¬8*’*ñïñýHªÄÆ„TBÙ­+eòB([ñ¡éºÓdŒ ¡ù§¹„Ç`´’u¤“ó*>´Ó 9ôÈ,g$ŽÜ˜öhÃ÷]âH]@«ð…KœÖïz9â9^­Wqò*½,|EúP 1aºŒ~8’d½s7?Öy CŽñ{$ ô:ÿT"o+´¨•·{ Öç”ÞÇ울 íµøã9{Àš-ΰ2(áí´mp+¦“F£)ÈLA¶@)‹©‘§^vj%Ñ#k|?SÏ3K(FºŠh°´PœTÊÑá+× ÖÈØ›ñô"#5]”©hïÏÌþ J¶|O=ŸN§Tb+J««æTJ†ˆ‰';òÔËS”6¾¿ŒÒ OQêìÜ!¥Y*@)œNiÔ£¶;¡´Sw„ƒñ|Ú1¶g󽑵?‚òÒëWµÄï´€G?kFGì…wpÍvôÑn¡ <-ëÖê|èðctkÜÅl¹#d|+vkBœ6Ñ !ø¡·D¯™ ‡ƒ§¼¿Ú÷®Ì„Òþ“UÄ=Õ—GÖ¤Ø0Zª©—§2áãûK"ÉXIV¡OšR§ÝCǹg‘ÉžIÓÇ=a§ññ’fc¢àNYŒNÙWêZB]6DL× ·éƒai"Ä\þÈ"v 7]@Ô¦ÃòÁ("qvèð“êp n5¼_ô“º>t9Ö£W²üx Á$šÉcr†¨,¸ñ/Ú[îA´m Ëkb—œå_Cmëß’"“éÜîœê93@‹J›R¶œP‹ªvØôŽIW1‹óë7ð¥¡IU3bx&U MªºöÏ7›G^Ò¹Mz%žÊÄÖ1B¯YÌ\||\µD_ÎD-‡÷ƒH¿F—ÔþðÖ$˜GA?vóÈÅAÜ[¼òk Ô¯J›!…dŪ²hýõø&×â’¤*õ² ^ÆæÌ°ƒg6¼—ãã X±<ª'î¾Ç‘òÇ9Põë^P€ƒè¹¶}ÜœÍq+¥UAnÖìÆ€¸¸SÅœžÇØiši×Ú9éÚ[ ñ"/7E)ôz®ðP“?YzyéVo Œ ©¸_„P¸TûúÄR‘æËµAF»Má)\š]™¢v§˜?R±åîqÆ öÿ]4”Ìé眧âÂr{êJž¸=f„/|{껺ÇgJdeyº·i º «-¬YV7ç7Ì– šM€¼À@OP7§Œ€›Lßg¤ŒJÌØl*w¼&õl‡=8êlM‰Úš²®íÏ|jƒÛ©ž»á»VÄ¥˜u-9¬"aQ=bk:×q„àÙ:ŽZJÉ«uMºþ™ýwåiô²sÏuÃû¥y+òZº×nF°µ›QÅÍbÓ½yÓs5åsyêÜ·íئ6ê§îöz“SåÖ2eæèÐônÜ]—ï}†RY„ \&gGPteiöŽ3ûÃ£ÞÆuEt4Þ¸îEÌŒ'§!j²!¹¥LÏ̺7Õ>ý’ñ1>rÑËÖ‘Ç\¾¨ÁWo%9’0ãîµm s$.â*µdæ=švñiFX ¦p,)dëVÞûOPĉ˜…†Ct‚3¬¥•5f-¢Nvž[Íp†C•Ìä\Wölü--®ç[šZò´Õ¡A)"¡Án'`&s hläÛüÚ¯<±\~ -ØÔ¬+HáXIb”½¾ÜtÓÆ&¬G€'¸Yvƒ˳ËrqÁ,ˆNk£[´nÁS4ãÜ‚§ƒÊÅq†'Ä©…ÀúHs¿‰ÑwBqî·2#.bŠ6ñhjÝÏOy.g˜GCÝgÚÆu‡F‘‚„Ö:åΣIØG aÉz@ÒïÁ&@ÚR«€ù¹žÐ5eÑûÞXŸ,¾j'Ï¿9F@ ªéÎ.h+_«:¦uá•la¡Æ@§|æù6V6‚Ò ”á¬éµ¡Aʈ‡ÓHùS8€ÐÐΠ\4%èpÐwÖЃdÞT'…ˆ=é7 Ê´ËÊXõâÝÕEAIS’Â]§QåŽ ³M“¨*ËB‹R³¾3P !L8ÉJÚýÒÑi¦"}ŽZ gn •–O}çû÷ieij¦¨M·"¦he©ÌYœùªuàKóÎuv´UÂa€`ò†{úöÇWû®~ÓOMëÍ›oŸü_ÿç·OR/4ú…ôß…úû_ÿš~£·ß|ûñÿ³;2 ¿Ðc~óËõîxýÍq{õë7»ßvÝ7Ÿÿ¼¸¾þs™úm{¼ùæú×íq÷Mwùá›óÃç«Ënwüæ—ý¾×°ß÷§Ã?# úq_mÿ¾ûþâYÿnÿÝ››^¶|ÞõUZ‹`<;ÞƒÎK¶ûPÄÏjä%ð¬•*t­mÅúåÿx߇§µ¢k†D¾tÅMüŒ'cûþôêªû#ó©·ÆBNÆž±)¤ù;B5k|Ráâ^|>úéx¸¸=6S ò(&~mÃB©˜ Ru­ÝcÔ˜9‰í22Aªïšh”¹ýÝëïïC¯b]ñC ³·]±y«;^ÛºQ‘KööVÜõT¢Yä/&ª””àw©Ù×¥ªÇ¡2vŸõÍ0œºÜR@'±tóàFÝõæ-6Vp9úööª3ÿs==H)Vª‡7V1òB¨° Qƒqòö`ã*º;ÐÈýIP …LçXm›¸­1ó~nS” &@ðuÿÛùôØ“ò~·=ê$ðq{¹¿›À„ÀÌÈ……,¼Tfæ±Ø3\rúD•YY@6˜uî$…´Pº~à žyÑ*{{óí“ÿ;ˆ¾cƒ‡é ÿÿ‰~#Rßè<Àÿ~³0æ]DõÎét1{ðYÅàg¾Ü_\î?=Ýo»?®/ Ô%E×ݯ£2!Úï;—î¿þñã»ÝA4YÝÙW:.U÷±`PÑ‚kŒDrtNÝž–^‰p‹fYžD/ý{…ߨR @S)[feôj€´:‰Öó±’„m¯-•c*ž}yýçÃíþâåA•õÌ¥¤K Jð’ºßpU†ÏÛ8‰ìò+ŠÍ^Rr¿¨ûÝq{³ûþpüñöfw|s~¸¢¨hÛ°/e·¸dîÁcx–ï“2PÜÌ#(äN"ßañÊ’t½x(Òp(€h¹ ˜¹é˜E´|Ó¡rÚb¼u<ûñ§÷Oÿüòù맯žû­Ì¨ŸwwÇeâ;…• °gøE¨y‰ptÐúnºz¡ÄΫ?Þ®^*ë™N$0³¾VRQ°l·õΣ[ÔÏXN·EÎeéJ’ÂIÙïGõÆó߯¶ûëËÃ˱ΰ`™²`p tûðg°œe5‰–:s‹×µ4KjV­*¹Ý­Ýî_zc~wþ÷¨/)Rz›ïãÐóvcònù®ñf/)µeœÛ-{ñùêp1Ë“” b ˜)‰…%(n.õ¶õŒö›µÁ! Ð«=@PEË¢ýy§G?âI^i§ò»ÝþÒgõêZ¿óóîúæxy~EB¸á·J¨í€¬ƒì3@%Æ_<¥Y¸jmö‡›ÍåþFÇó3l££‹Qî€)3Cî^ôæŸ'÷°për¹Ç×2¤½õ¤vOTVè­*î°Tßšân>»g%^)bú“ÅË—€Í÷…ñÝ<Ž«V h•–¯$Ékdá'ØKe»èNA~>w››_·ûÍauóªäTSA<åò¯³Z5‚[Óý]úGŠ˜ÅmQ˜¢˜ÖrçÇÕ`d(ü-ƒfG—)™Â1Š_6cb‚²ØÓO€‡£”Eþß·Çý›_·‡h.„i?Dzâ×'‡“£>È?úYú€¾Z‰Ðçqw±;ïz‰Ðps¸úNËœ¹ú?Ö³WïFÐ9ÅB‹ÅÙTÄÑÍê ‡n{M†mÿYãyþ†»™€Ñ‹n給.µ™w±… –¬¤$A‘Å_$.É"–qm E*F½gå6K­­ÛE ïåëHÚuÊ­?ï×»u“’÷¹O#øóv )=9ÁY+?®&¹gÃÉ¿§]çÊm\?T-bßÚÏڇЫÍï…{„9ŸËDoŒMƒaòðJ´e$íý,ªG4§PýZaîhIÐ>‚3•‘ø} "Ózeæ~¬è !H:m%) ¤Ö^Bíﺒ¾„”´-\£ƒÖ~a!²åüƒ˜v'.r¬Å.Ú Z…T½!6ú)Ä‘6À¡ÕƒIÌ`…2RFk/C¸êŽ5pVÌ Ã==a`„U£ó½|ñæm¼¯Ñ3<Ó4¿'Òëd¡×øìÇŸ¿wNj("_ÓRjüû[0€9®–ø>u°¹J%/kvZ…­>µñæýÍö÷°º¶ÜVBk` ñˆ¾„ÖM‡@ºGH:Îøê#;—¿mov¯v7¿@SdË¥gyzssü~·áï95Ç›JVË"i8eI®èà^ö~Ù_þçí.é«(ò%y¶×BDÏ=\î‘ _ØÇ°'FÂEÿ°»ùi{s³;î:žÿ~uÜ]«šœx„|Š6÷®Æ™F6&Êä #¬1ZÆö™û1ݰƒdX x†˜`Å–Ki ÙK*™C,bóÀ¡g;— ’òÈdá¤Eš~e'‘ ø`=ÉØ€:búæöC!†Ëo!‚`Õ²'² Ñ ¶`EÜ  À¾Å¸ãŠ2áÐDñ*uÂê—ýáêæòóå?wßà9à@(„½¹TÁÓÇWÛóã¡Ûa"Ôbh èD"vèé@X£Ö?C¦•j%Fd`[’m˜˜9Ÿöö«Ý‘‘ ŰD;SY<ðÌ„e¨fÂ&E–À˜µ{Ðáj ˈ·ÈÖ Þ+Þ×ÅÖxA%•U¥ÙŸ#­-CÓJ˜¡ÿ®lé_©ôöÕñp~£¢­T½ìÏ·û·—Ÿ‘³_$Ã$RuéøÅáûóí56,Hl‡VHSÈ R ú)$^ô5$VAÚE?M´äúL߇›×[ØPH.™’. Ðõ–庩´fz›bþ•"Œ·ÇíþúãáøyüìÇcþCŲÓ=ë¶·×¾Ó‡иÞúç˜Q°iÁêz®7 „‹zêËÖÿ²èÚq-=U—­§aC óúŸ‹¢ wÓ¼øøôøá2¨×FWÃÆOTücz&eðÅ÷ú€üÔ,ùfbýLRÑÆŸÐ`žÿºÛ^L}Á‚/&,IðöÔÊqpöÁ¿õýñðù§£¯5Ð/Z’ Æîzî:o&éjäS©ö½9£0‰Üvœi·´¥ñ‡SSé3O/†JºÀµÁYŸøïO ®HþùõùöÊrïäL¸¾™ú vHî7ñ¼ˆKôQ‚ø›IäŠà£‰)Ä(ÃÌ›z_ 2èùÞno&¥=%#Åmb&æ¨FTé&ÉOŸ¦MGL•*"JFD!¡ü OØâðT:&cÎí¾Þý#°­ð/ȀؗÛ»îÇãÀJS_èÕ ¦&^g•÷úÛÝñóÔûšÃŸžn÷“ªƒê#?•¿\ï&‰êÃÊúå·|@µàï¹Yß³íŠDÕ¦Ó³Ûã±ßÖA:ýej{• øóS`¡G‡‘º±S’§[hß=ÿÛÓŸŸ?ýÛ›ç?¼zþúíI÷Yðj¸ë Þ6inm›{Û¤½mê¶Érìõ<‘4Uâåíö²ƒ"F_ÿHôíƒ=:Vàïø:»×Šw^€÷Ä6½C^ç÷´MŽ\×ÔÒ0ó´t¯#RT€ÊŒi≷>Þ® ehmšHIô;* O_Wþ³ÒU5©Yꥫš¥Zýeɺ Yý:^‚ÕßÍcõwv)«',®ÓX]œÊê½­|ö˜Œdm—<¸‘Ür¢=ŽJç•ä`ÌÉYÁF—͇IŠ"‘¿X,9£öÁö l{ÅÆ»,ð5õ¥£²EŒ ‘—Yc#–8±ÌàáërB7á뱀„£Ã¸Ì×Ò­{P{tï -{gë)2ªMü X øcUPÌ1Nãdºuîº 9}V„Å Ël §1Ç´/Î EDLõ1™ß™lÉ`ÏÔAë P«îÎN‰ðÓµ.ªfCÍó.ùÞ÷ŒëQ»}pY5Ê §-«>ɘ@|~uix§ï?Ãîo…½^Û ÜJ0âî®÷„”erwyx{Vty¸÷gaY~Àj:è¾J\lf^%ž·¨šM6Ä ®o²£9'i½Í¾JÜÞî®í!Z«Ñ£€•˜o"e?‹½¢XœEz>áTM ÉÅ.Õi«ÊvâšbI^¼&¡<¡¤á‡mɪfD„ r3¶A‹`)£=c£-rc2‹‘Éó[Ó“€µ"ty•l,¶¶ÐbX²0ž:!m°„ŠÔuÍ´¼flþ\ž¢ÜÌõaBÅ Û}EëèNøŠ*â,åG|ïgÓ9·áý@Ð至ØÙÿнX˜Pñ]ꄊd‚ÆÆ€Ö-¬e$¬Ö›;/¡"Y# ~Z9¡2Lòà ÈNãmžPPQ1ɹþ!ªùýb1Sç„·T_í³6íD´ïNä2_EäܺDôøËئº`›fÄpë{ÚUÇ wÃm1QPÁwF‰Ôk Ѭ”®‰ck%6¾ètLͲZº¦Ø_3]3ÛY} ëH2ÄVý‰’ÁÜ¥dH˜«dæK†Þp?{L;Ìî<„Å.+©Ý™*ÉÁw”Ý™Šˆ®ÝI®/~±XÐÌÍîØpÙŒìŽlbÊd²;“ “8‘˳XÄDÙX`Å›"Ó–O,z}õÞ§ùÅÉ SDšLóÇJÉ  ³b*”d§¯É »JMIÌÓ“AsEQI2H‹”.)ñOWÒ“ rËb(AŸ¶¬æ$Û‰W¨,P§“>gh2¨ÃÈJf5µ^NgŒ"ÊІ`NSC©|ˆº±~Þ"Þ RèQ‹ü¡;|ØvÃ"¶µŠN-¦­*â#­$¶ù)1Óå-Û›ó_­2Сƶö‡µfÕ¯:[dþÙjÞ?1Ø5ö¡zqê ‘{CM“N£G ó §[«¨8‚šIÛPYv\T¯OŒf…­§pKÞX-$Q ×Þé¥â(ÂG%uŠ ÀZì.ëÉ|Ѝܢ©ðÊA®Ÿ2 ¯ÎlT´ÿg8Æ€Ó©C+áq³¾­7£¥=ìÇ{Z¤BƯ×",ožÔš#;Ü lÆlÓ{H¢±=:hJÚ™pÒÂ?Àè‚Uz‰K ³:+ ±ÿÂÄ†ó¦ ƒÔzLÙêµØOoŠ:Òä‰KýHø¨ñà1hÞÒQúñcµÎV€™£y‚Vø4é6, IKuišL§³5‚° ¥<;v@@¹dHQÍ ô¯Â@ÿæå¾»Üï~ên¯˜ ¨e’{Ü89\^ à!¹Œ%2qW#svW#‹5Ǻ3ÌÖÿJt,Û³8g—ˆ˜|“Z4“­÷iYë u»®‘o²P¾±V«:&¨/ßX`d $xÄ­uéÄåuü–:BÉ7ÕO$þPºá ¨NLÐÅI:WM—Ò¹”‘4ÅÌ×¹j*½±ã¸KunLœ÷Jµj§÷hš›Õ{˜_\c'ð4TG¸ªè¨gýL³ghB£µ ÐÀQJRŠÎò[•e0µ¤N¯ ‚ùl.±q#¬FáÒV.e~[É×øeÄ7»¢¿ŒÕðkÆš…ß–š›;Ä/cÕ4~ñg/ãÖ‹ó»‚V€ºiº©Ù,ºiV¤›f.ݘZ µ‚»¤›¶šá¯ P];¬Ô0ªžëªõñßXÔ×NqŒ¸j7eê¹ÖGñ[Õ„ÝSÏ‚ZÛiYá´ìøºœ%Î+ãÔ3¯à‡2p?ú7’ê9"òÁ¾ ƒLl“2ñø¡MN„‘'G®ú*&“ŒEh uïÎ"T3h‹s8!ë"÷ ÖÆK* ‹Q¨®ó?àz4!cJez7?€b ©«wä:Vû¼óñ üàÈ´/)Ð: ‰?óplež½ ®¥Xu-ˆ1hÔ BÔiJæ÷‹ºVKYAèZ¨ëåÉZ¨› „o„gæÚñm¹AyÄÚ&±Ü8>Ñä1%ÿ u€UqÔ .DˆƒV+ƒû ´NC‚Ñt ×V/;C¹+­®ÇýJ´roˆC‚ÆQcwk+wÕ…5Rîd)ÕÍuö8'¢›}!U$Y±µXâ9‚4óiã°G»5¯]…WȆxB1\—c멦Qå÷»{ûïë ,ɲ%…1W¡Þ­_<1œ‹w ·Ã„2EƒS•‘‰$çG¸¸Ö]r·â\,¬ý«ùÍÙXh-Ô.>yBg¤ ±ÁI!}Xe”Ú Ø‡¼fü¥ž§p^s&‚¶¹/ØbóĪ0 Þ;ú‡óq´të}5=5N‚­ïHŸ)jMqÍ …S×—ozh LÜ ødg¹ÉøêÁ𠉛0T±ÔÁ~(Ø:ƒLK‡â3TŽ­x­ã4ÑtšF€Yön3ØÏm‚ŠjóIUqß9 "]X¤ÌoJÌàíÇb­ûi“+ø‚£kæQPâ1< öVÆA¯~l=×fp;Ax…Žšjòvê–¡¼Á²¼¡€e1õ„Ÿô±ÈŽ–Sc”ÆƇîg€dŠ ž2ñúw)Ö!Ëð°Q–æÛvù·lb?5ýå^ÁX¨‰jD>G­ R©;^ ¡°:é~6‹@½¿&ïIF¥ˆé§ÓÛ’ VGÒ™7RŠ’WÃOÛ(9ïIF¥'ÃOÛÚ.ŽJ©7R̘’ÚŸ°ôE˜!)b1Ž®ÉðåÝzÚh³Q’‹?LBoAçöý!¨š;*ºœ€µí݇gRâ´jgµ3¾éî´ ¿swuP°Cu ÍiqóNãX +ÝÃ*³á•H»$zλÕû A¬ëа=›úq'ŽVEº®Ñ[¥Á:È,w©8¶k,‚úˉ±M6Qˆ€c¨'#êky–©Sþ>aT¬Ý+´ŸVŠïÔšÁkgÐãרÿ« g~]w´z½ Ácpþ“ÅpºÑ§ÙY‹1?ØìYð~w¿5å§××—ŸöÃ#$T¾ø­D‡¤ß)m¥av¬3„±iþÖ˸…¾4CámÏû?´bã3™Ü„')òLf" MâPôRíiä Ÿé(´Ož=6>k„ñ"Ý|%”þÚûþ Kš )qÅÐ<Ø{b0Æ ~Ôi)Î!òäFjiI+‘n'ëIK¿‰IÄÐ6gŽÐó¤f´‡ˆ‹ïý±í&z  k¿ÙX£Ê)I»è˜Ô>Ih™¬F[ÚHØÅ˜ë0?‡ë[Ô ?dyǘRâI®v„±8Š 'ÒÍjä}º&‘ƒåÑV6ÒÞµ×&•mßpwˆ¦# fxµÅuH·?½ßáÿÕîæ×ÃE°?ɨ‘ŽxlFc;ù­·ˆ´iXÁ%úfœS°¡n ,D©ckÀלOKÂÕäùÌ{4¶m™À<üX®¥%@›£Xè”pª*”3iŸ÷²9pRÛ=$8aXö¯ˆ1…í† o6Bd¥ȤY+]/´3ëÂxE¿ËrsŸÚHVT‘„ªsº©X‚?Sï•´À·+Oô5²ZxL8"ŒH.TÞOœäýIÞóÀ z·Xƒ5­Å¢UP9WYfNv×LëÖù,lã)•‡"߇CLÝ!F‘n§­Ì„%ù0jÃR’8GMï\'ôå=3mXJ¼¢x‘ kÊ>;7ìc·a5j;ƒIÜJeT8tù(¶r6^½iv2Lì/Þ&ƒ2S>©zçÿ(•àì EHS:öXÑ«pbñ½ŒÂ};ŠÃãÔJ2,9€H›7´] +WÊûŽéåþK/Oâg–þE–ÇâZ^˯N 1HTºj6í W¢Ò-Ò•1<LǾè¨Ö†‰æHW&²$;Oº ']Ͱ^º*Ôv“¸tm]Çp ¸uˆWo„tEžéoA…ITêŸVX«ßk׎u”¢LÆw+ÊÝ^d|VIø ‘ÔkÉÌê%^…óµgTY+Ø%=¢úÏš²<˜™{úÀ ˤÄIÐö/mÀâ$íuFT;ÆÊæS-ê6&j×­¦dñ`¦9, $%Öÿhníº–¦öfÄÿQT;ÖÐ?©%s?} W»; Ga¶׿'…O™|F7·àNÍñÈÄ$u…QŸ»öŽ&®gyܪ²ß/Ì<|àŠ(e’°It·÷˜ß6[$›?Ð…h;>Ï›Å1 ÷õLΑY$Ž{ÃH°a C¨OB´ø€yL4눪l¶wMãüÒSâ?V$õs>öÇC–v:õ 9REi‰4P gâç[|jùÒq‚*6_0BЫ¶ú?81 E®X°g$qƒÜ¢€½i“Ô¹a»ZШí &qµ@]ÿc ¹ÎŒ€†¬QuR;Ó¢D"Hi3‘a £înrC0š·¹?Úðs^m3ý‚喝mýákÛ4^;ƒFLêçkÛ2±GPëaCЉf¶Ø ‘kshvè õ£RŒ/bT&¤£!QZ«k†Ëze¶ÄŒUk3vàÑË+…ÄÎà —W<¨š‘‰É+Ë+¼7si]ÞH ŸÃKSI¸FI<^/TAÐ‚× ÂÌ*°6Ö2€ƒ¦v°¸4±”µ_#cž—ðqws q0W(ßòŠX¯%X‡pm£=î«Mª›ð®„äÌ„Õ4¦«~Þ1´gX¹ÕhÁyñ¤NRÇù•û%'éâ‘Q]!j K3!kpëzAy„¾ï…çg«‹Ê¿“çg2ø&Y$Z…šîµ1î0¨gALIˆ ,UÔÿ.¡¾ûœ¦Úª,PMÒ0z@ ÚÐõEàNéÐõMßîG—\²Æ(\‰#uFùË ŒØ(V¸ Ôq–º;Úþôåk-cyÝ¿ƒ·ëñÆ«¢y.„oÛ"f?QyQì!°hꌯ?ÑÐ3ŸĈÁýœèSgH¿ûöÍû×ÏúOßþøêoßõ¸ÑUå›7þVޝ ŸQgªØ?z&¹„Z8ZoªÀÑDÉ³ÞæwOÞ¼zúòå‹×o7Ê`m¯Á,5Oèî~†–'Þ:ƒéÝë7ß^ßì®~:\îoÀg½©ÃŸPôYjÆZ‘ÂÇ翟﮴ƒo'\Žä€ÔáSø¬»®®Ðƒß"ÓBúSý<Á³®UÝ_çE`†ûÒ?C`F(´zIƒ¼‡ì©1Ê÷¾ ö§·QúýùîðâóÕá(¢ŸATƒ!A²D¾•È·AŠDWcHƇK áSÇ»á3>È„ý3l½È¦!,E$„9/ ÔŽõÛôä—ý¾·2wÇ7ÿxsÓKðÏ»ýÍ7Ê6}R,y ÉCkäÜLΞ¶°¢âˆ±@öÀ›DÀ„Ã×¢Wu¥CÆBÞ[¬ðPí6Ã?ï>îŽóˆD`B~9‘Àe-YBൈ4T[¨’ Ñ­r Þ«IÄbã-$>ŽÙEDU¦ZЍxîÞþ°ÛïŽ=÷¿Þý£·gÒ)Ñb:…ÔtÚZ0‚#ž$˽]LN'Ȩ²OgXªTÙ%¿)úõá8ùªïABÜ`n²À™”ñjû÷ÝËí‡]÷ãñûÞõº=îæQ:ªi–S:ÿäõ`Ô¦>‰ÚͺÐiBÌ<Äï(nIX‹Ì¬û…!ã2úï= 0zrá+j¸BóJEîÝ䢑ìê¹ãÍù¶g#ò.bmДOÖÖýPßßgYg/CÅP9A2v *K>n0có— ]¥R·ó¿ËöÒ>¶ÑòDùûÂzsëÍ·ÿý²»8ß/ÁPLЫ­ZÝÜ1QC“èÔ‡n˜Š,}üawóçËýÂy‘ð ßæÚƒ 윢%á³å AÔ#[è½ €-5‰À‚ß@˜ŠBØÈ“=»[owÇÏóè'Ф‹SV‚Þ2/dÚmJ(tÛ››ÝþÍî?owûs˜ À"H‹M‚`®È]W PÀ3lg°gsénb>vÝŒÊJ¿-KŒ”nAqàCu¹\Í,üb’  L€˜‡3ùýVÿã¿ÝîŽÌ\e„bÁu²[é-¬j”Bu Ó$-)e%yhÁ!ŸÍ~,C–*»›¹Ý+ÚGH‚küô&ûøÑËoÞÆd?ká3Mñ{>Ó{¿WÇÏ ÅÆSÔiÜ žÈÏËJ92×»›ŸŽ—û›×ÛÏP)t,½ÉÌÒb BLeý—<ꮦž¦øuñò¾;¤——bARÄ‚%Š05CUdŒžP½À«»®P§ îz†» &6tZ´ßá;Éc©¹5)aêx!N K­SGý«½Z¹þc³ý}³;¾³ýö—Ÿ^>×uQD Pé†'—ûÍy·½¾ÞŒíOF^òùpÜmn~Ýî7‡ýnó?>î¶7}Ò¿{}~¼¼º97P•ï + \¬9§vÈ$ŽÜ«4†Þ»;®‡¤îãË@ÃÕñpµÊ  ‡ÏóÑ ¢n9%bÀ0åR[åp¼y¦øÿ;ýué†!ï¥êе²ËÏWÝåù%¬Ï*Z—ÍI›¯!YW¼°;× H¬©éYY1ËI3ܵ=Ä †WŸa5{qˆ‘ ɲ·îÐLÂü€e/%QºZ¥YjDø=¼¢M«z0­>ÞîÏ•B(2®ôK»õjYõÄC)Ô:ˆÝïJh¯ˆˆ²èãCÄåçu” |ˆ¸:î®¶Çy)|ÿ20qÜýçíåLôÃ"kÆBáHªœb©xDÒO?H¡ßI™1C‘„Dó=>ðLUÌz šW¥•|Egаª¨¢‰ÈTKx*•ù|º?ìÿ²…Å‹3Õ/®RÉÔ#( J°6EŽV,Mº=OιZ$¡*¤|úDT¾¹ý0=/II)§ЭŊq!†„Ö «¯©³?·{P!•¢±š‡‰¤þ–-A áׇg‡î°¿~{øþx@Ë•×27Jìºë¥Ìþ8\ŸÕºü¸´ Á x2¢¡yÖmo¯§H(šU ñ‹ë ààªòìbwÞm[ìˆa9(ߥYÓ£EOè¡§ö ;—éËò%¿=^þv¹í^ηÝOÇÞçúÒÈZÕ-(£ÃªDˆ­bH¬86ò1R )StÇË1ZF!?﮺íùî»C×A+;LaÀwŠJ, °ý¯:ç‹¢C*ÏX ý®ãúÅþÍùáª@»-x€Gêo^n¯­T—JŽè¸X¤Î~§Z™ ÝéÍ|}øn÷áöø¶À„O_ô¶ª´%úæfw'[¢0G¤4ƒîD<» k.O Þ£ÍfΫ™)«ÁFu`Îð¦,)û†óJ^B!]8ßø`¨Î ;,(&:î.?^î.R¯´ªëöó³×iŠïÉR M|÷ÓÏ?>פ[ì4-D²F·¬¡½±^Ë–«Æc²ŒèÖakKÛÀG56«mûEt!4¯ã”4M/žÛÿåÙß=ÿÛÓŸŸ?ýÛ›ç?¼zþúíY÷-¸\õb>,Ûi-îÁ\ªïýxîõáQ—=Q›š;üÆxÕÐgÈ4Òrm‚ü†P4¼Ñú]øwØ®Qu]bÃåŸ?~üþ²ÛmvßfÄsC ëèŠ,½=ãp$=­7gäGŠXÈÏn%^QfHÍÀÀ2n ¾ ‘¹¢4LÖ ¡©»Ü÷¬IÓÒRѸ€BêÊPH†Òa`ð4\EÌüxÂ\Ê*ÚЦ¿[=¦UÑ’g º»ëŽí©’@ðbÛ‰~Û‹ ø÷ÏŸU.ôùïWÇÝõ5¸K±R »²EŽIÿj‘?EM“Ù`a¯,Ñ’ÌħW×Õ÷!¿P[ 9™pOø¿+»¨®Ò³Í0|ÊóÕð¹'1Q„ˆ’ÝðPÌO'¬nœ×{}c{‡6Ë <—½®Êuêþw¤×¶ß¦Ù5üµŽùÝôÙ=ó/©ÔËïL7cè̽ªMò×öƧ¡]¸{%lómÓ‰Z¶•ûéw¢–î:‹q$ƒ¨›ðšEõûœ­ŠnŒ;vݸ~ÒLŽ:@àCðyO+óù¼'¯ijæ&´Õ$æ°ëõÌßfAóÈ|Dxi.¤ ü#Ú‹2Þ9!ÚÊáÊ,RîÝq×;øŸtÞ@!˜yÛ]1/6 /eð^®ÏàIþïè5Lö¶×ôUKñ°Á%Ý¥³nKhµ™2;Vÿdîx¬<€‚‹O"”#d‹&r-„UVænKÒi©Íì|€÷o —}Ý.èµwŒcðY´­‰Ù¿°Å™œ0»S?¸Û+°¬÷*ÞW€Ï´\±#—·S³dwŸzp•Kþ6œôEñiyS—È›Õïɱ·›"ôê_nÝ“ãÓ)@熸Kozj³—™Xáw³ ¾‰ž ÷çùÞŠGMËù~bG{œþÐ>l;OÒEãÑ„TàÈéXxëRDµvX»S#çjòíÌ¥mgص2áe3j ÆCל;¬’è£)¢öéNÔd-²3Õ%3› K®ýᛘ|¯S|ÓXÙ‡B"nH\°eJB®ón5r\g1àqÆœþÍëú½£tŽVV·²(±YÚ ˆÍÙ)ŸA“;¥+LA€»Œ3Ú†V9 o¦‚wZy/³èeÿcÏL€&’³¥Âk¨b»È[cȺ×b\¡î§•eú2ƶqÿfUc¶¤mÎ⺣àXð r×ëô†«Yàè RÓtØ” ³ìO«.Ð[:1ô¶#èT `ìOæžÃáß­4ƒ°è.>…ùÓ ƒ¡àLp·D@Ý@rÕxÄv†ºùôPêÎ_:[‡³ò³ XŸåÅ[À€ž3“òR,1:j%Fá»ÌЯXŠè—_œ‡=$µXt4Ü­9o‰Èœ¯Ï7Ë UëªîT˜Ÿúâ[D„G®*¼0ØúôÄŒC8Ou@f²×W"¶ å·èÏbc/ЋœR9JòØáCjÖ<'¢q²‘KžW3YOœF/ûT¢fŒ îÌž­Ì^†vDÖ:CRá~Ÿ>Ëé¾Å/¯%}ÈépŸç\Q 8Þ º%?7ÚV¹@³@‹1:éß’¾‡šˆX¨6 {üšVÈ žãY³ñ–û€¼Ý»º-Õ÷ÍuÑÜnÉáòbã|g,ôíY_Ü}Û¹± üãÑ3ÆwñΩ…öR¡˜ôé&À’6›|W °X`ßÕ£ák¾ã8h3â0†VÿÅñš›:s‘{ÀüðRpßͳÌN°–x¾±•$§LR;bà ´ß ¡Ð ‰<‹ ‰&…ŸÒ­¥þÔ†A*Y¸X4âO2Ä¥´O!š¯Vô2“j8{¸À §3¸€òÁêjdIË-Ù²iÖÔãÖ<|wÛ³A¾ô »qòæîlxg˯’2¸=è“YÂn=ÂöÐ1°—¾ Ç†6¤¾ANË|Ù[KÍJÒò”·`õ¬5d FþÁŠ{ëö˜Ðh+é~Záb~oRÿÖ0¶:tâ‘n?´·P5(ãœ÷W ÛQs³½ìÞ@» ÙÙÖ`Jg[O¼Ý‰Ô‚gù[2Ï'‰XJ³1ê,Šê]´©1úÄäbrbJPn2d­Ì¤éQ‹óDƒÅÃj5Ä9ñà™rì…º¥J¯ËAk- *JðO¹ABëáSâml Ž vÔcdx cÖ ìÙ úÀ·-¼mþVáæHœÇ»(Bûxê÷œå¢1³ÓrÑbÁÛE'ã=Ü¿·bN¨K»õÏØ‰NSŠ…1A)ÀóÖãK “úB|©Õ|€ÎÍòð¾—Ffgpw9ÚÜ>¥„ÕbdÚ,᪠®]«fª­Â”72 Ð÷Fr[ÎI…o9ta„º^Àþô\˜þwšú·Y˜vî| ‘0yx¦s¸x „i¼bµñ˜\B|'÷ŽH¯;%šðŠÜ‰Ðs}Þâ@“X[¦:*ü43ÍQ‹y¥ó\Á\¤Xeä<~‘ ܸÏð9baÓc2ÝÚ_È:ï© õ ï¯v=ƒ0‘ŸÈ€¦ù< ÷‰HQΛ܌á6ì<1ŠZäXÕnË\ð¦5‘ )(­‘o¢­ñO2ülá§:l!êÊãaë‚[£)ë‚Pko/Ðm†7já‡!ýµú¬Ôn©Y”•,‰_=q_þc‹@2º„, ÚÀ™)ùJË6Ï © B&qÄ£,e „m& ‰—° /±õÜH¾+ˆ—X ,u8Ç"©Éx‰¡³†×槈â•i´Gçu’ñä\O/éç> â%°(FP²ñ³Š•ã%4&$^¢–Ò¹ëE/ SkZu¾¨z /9VÅæqY-© —JÑÑ,ò­ý|¼DÂ&8¯ÁgÄÞ½Wq9˜p` Ôyxp°B›/±’{I•§+øC>2á<)ÛX ÍßJ›‰U?›Ú•©ûÙvW+U\•‚­¢/÷OἺ‚°h<gAAú¬I ØÄÌu°ÙÏ‚2ל®Á¾·…`~‰=l±‡¤ @ý!* GVÕ„¸Àg p…èƯÀtIz!ž²14±¢²>‹¯l2Æ–âÎ|Š¥ÒA[òÝÞAŸ¸¶…AŒ0dª±ýadö¯ÑIϸD­/{t3®ÜN.,výšè÷¸’<®ùŽ+Sƒœ°EñœÊÔº£÷0„ ÔµµÇñ°¡ÕÏ'Uçà™’j“;DlÂ1m’ÖY]Ô¤tÕ I“ëaÝP$"¼?ɱEqªüð‘Lòê¸ÎÒd‘Ù³® ¦`æk n”¸?[C°ìl]%d"ô–5Qb–m–F?D5ØšM~—ˆ_¢Uñ5URNÿÞÃ%IHÕ¤€ŒD ‹÷ Ræ H$e.1ÙÀ]IÆàóª'ÆmtdCà„²™VÁQ¸;|41¦‰¦v lq¬šH&âv(¹d"/7é‡ÚbÌD@.ª¦µÇÕÒB¿µ’$wHòd}ï}G’<:j[òJ]3ŠíÕ\roÁ²âNFº8â0ÏÖâ,X¬yš.,¾#áw¼ßYñÅÐÜ‹M²gD$t³Ù öOËåBÞLËË|ÎGðwõÕPÏop3ªsÔ;ôØum’Ž$ê9¢C0›sx&üª›§ÁÊÔ œ άe¼VòÙM‹»ˆž8Ƴ‘Xv 6À3F±mI&Ä]QepX˜– lñ~ã‚e©×•Ú¦àIBlû%èN~íM¶ÜÿM„`ð2‹L&6›DZXcu¡®MºâÁ¥@>DqšŽxÎ9l({ÂùBO”¢á¾û•5ˆìŒ¹§ ÒéùL ‡õø¶åe‰\ÎØ¡%†Žú­ÐÁ,˜É"ŠTD˜€FHàÄDyëä$tr’¼L*YI~oó7õ½#Cjp8Ã§í¾† ƒŠ““ gþùLsáIm‘µíhbƒú.G9؇…únÏÕ{ü…Ú—œRÙŒºÍ,¡?¼i­äÅ_R Ó- ãAÚ‰Œ. :üfDÆê2¸¼Û4ÐEˆ}ÈÎri"Mt¡±˜Eò&IéyÙ–Rª68ü@Ä{ci³Ž7–d\·¼Ô.†±=ÆÌ9ÄŒî˜$!'C™9Ù™Qaó d ¡DfÈÅ3`#²“‡S#£Àtiçäyò†Äïè5]¹G"[Ͷ‘~iA“6wË9² üĆ.ß¼H,³ª´ÝŒšÊû3qæ|â"`ëÆÕ‘l7´8þTýHÙxx¢ˆâ) * Pfœd¦gY?%Ž­F~J@‰¡êýb-''¸~÷+˜TØÛíe‡ØÀš´æ«ÃN‹ â „O-xœ`¡ó\\”÷GOr˜“ê)í´›2¯ ˆ•UUxõuyF‘gÑ£€ª½×sG$¦N三z±DA_ÊDéûPÃ&’…‰øOr¨ÌÕcs‡âë EÖ*á.ªž=G#”ˆ¢ÞTÑV¶Ä¯£–mrÖfÖ–_ÄþÞŸé00ßÄÚ¢äjp‡žÌÖoøm%Œ‡Ø}зi+D¥Ùf´vïfÛqJZi½?å'XQ‹ØcPY/LƒÃÂXÑRa͉ZùíLËïUŽx¤ ûe<âÌ´ÀpJžÿ‹Üü¡ŒÁêH+8b Õkb{="‚ƒ¸´yÉaaHªHZÖ êž¸•s¹c:–]äÑÐ"MOˆ~pñ½Aóíƒ%1í]¤érd2îúwÖz3<¶ó30'.!ˆØÊ4‹A,tµ#l åM&j0™Ýbüȳ ;‹ã––2G-Àw‰ÅeDò&¶D\GßY!5ù€âìÝѨ逢&òÎÐt,|lÖÛ3<ÿÕÆ]ãê ¨ƒ¸?°Šº4nWæšóå¾]«µ-2Ü'ºÀæ;µ’6x¦-}$ íÛÉÞÄ1+¢ìŸ]k/$S<5AJ0oÃzè°FžÖ<Ú¸YõÚ hòÿ¡ñK¹uo!)©‘‡’*`BžáELR5°Ò¯Ôˆ~R§< ¶»Gåd®šèk±M½ ýœÑJÜ”„TÊ\}ŒK²¹?­\Í`ƒ’‰HÞtIû®6${dÜÞV8 B0÷Ó7¸3F**g»h‚â,Ñ6ˆòŽÖïö†H!¿60ÈG&*Z"“OC¤Û‡ foü›HUù%Œd¿)søÁœU‚jÊÎÌp6÷µçKÀI<_®â'ë&Î$ŠT~æ3Ž+Ü„ 5í…C·¨ÛhŠJkP5äCé…ùý.“9Ä"«VÑð1ü pOíþœ=9ØøLLƒ“‚Ÿ;ÙLЉ‚¥3SŸùñM8æHÿÓÓ¼¾8Y<7žŒx¶Ý½A9F^<ÛˆI©x>å”TJ<ûÞÙ,ñœ/ã±³MvôÈ%š1½)q­ÏøšVÿûÅéÜ®Ÿ_Õqý,O&ò‰PP´=Ünú<"/µA ªnšÊýôUuSÕ¤Ã3áôÞô¦ÝíÇ¡ª•jbúRÑZ°µ<Ü‘˜0›xza(v³´î1‹F48 '‚ù¸ºÌzÜ©ÐÑ™Í][ ¬Ç É}D~ÍdkçÎ5ÒdÊø„âÃ:‡¾0Ò@È“ JÑ2¶¢ƒ5jÇ씲†µxí®_”õk[”&Ýò¢ñ|©fQh !: p›Ø6ìÎehÔÏ=5?Úß-•¡ ÅÊÝmtfJŽAi=– Øx lS‘ èÜJˆ81¡7æÓ`’pÍÍžÓõ*Âá­§F8VõÏÄøôˆÃÖ\$ÕVAF`B °Öe êçÈ3–™Ð[#­š¦_ãùaQ2%"…ªZcq!j«¢UHöÐú×' œ¿>¸%îÞZxœ" ÷ b–Öph-&A…Hà’¬¨`µ‰­â\!|÷ûùîJ•Ľ>\ììzË™OÁÃX?E´ƒpiíé &Ñýáf)…®†¸SH6ÁÈŒjyðq{Ùåñ“*½ä§ aÏ-õøR#"¬œ”i£æ¹þûåJÅIiÅš:†ï¸½¼Þ-ÞQZ#[’œAvU¥ |ûk¯–/þd”ó\ø^¾xó¶ÿñö—Ÿ^>ôgÒQ€×Vö3_ü±ß~¾<_Ÿn…ñ›WO_¾|ñú­Ròʼ@ÔAö*@Ât>ÔÐoTçÇÿ¹;¿ÙôžÂß7·×»‹Íáöæú²'«ÃÇÍgm÷¹‡=Ç6a.e¸òpê4µ)_žw×»{E3[¨‹±½¿ähI ÔÔk9¸&9˜’Èßo{ `üò@[§ûpüO¯®º?ô"~:ÎO§÷ .´„%5Tëì*’[¬”æÛãíƒípo¬€=FåŦïJ3lYKÇ*‚ 1ÉNÂ.ò â;¥<0ª” y1ð”£×…qX—䈇ÄÐÛ˜U IÀ2EÉÒ ÜîbQ 7 3AQR€Ö Æeˆй¤ðS”^¼gƒ{È^©¼¦‹Ëco)Ž„/éÀÇ•2óãǽ±u{óæòóUwùñrw1¾0°äè.!Ù ¦+òtØ[„°1·aIJJ/z‘î-²¦ÒO1ySøi‘•ˆŠ!¼ðÓ2î™AÇ=-~Øžÿýö >Þ]ß|¼„¤{Þ+Ðnw}“¬f…øåýáÛã<¾Ú?wW‡c4¼S×TY¥WÇÝÇËßÁÇ×7Û›Ëë›Ëóë“ydNSGœ»íõ5Â,ÕqˆƒŒ¸Ã=2‘5IÀLù›~Yæ–÷_NF1H‘•ÏÉšÉÓ››ãå‡ÛÄç— ¢ß-†»y ùÓö¸ÛßÄï ˆƒ„"‘Hçb;%„äD'>^o?ïþ´ßýcaä±ÐFYÍ©%˜¯ìQ‘¾Z䆺g1,ÄþÁw‡UŠÂ·½ wy¾Õ­¬˜nÅà‚d‡d)Ú~‰Í€>C ± RL?“X8u*E³0Ð,UXór¿×ƒœÈ¡•Ž¢ŸúvŽæ rFиB6î˜GZ~Äzzôñ+ ÁŸÑ›ÀãG‹Y/—Ot$ ¹.|HrÂëíYxZÒ`.–ÙÆ‚\« ½¥$:VÑŒE×·) xÇ}†P1Ýe “^h•=cA Šö…âÜ;¢1d{ bÎ )¥ÆiE¦ï~†6£­ ‹y}r2êÊCQ«ÈQI$k8lÛêú˜aëN1b ¹!e%j÷xY"áwa™R⨊ˆ£Äf¼û XIÍ ²Ieú +‚¨ºA–V$˜°éè,0æ¼ìíNޱøý4#E‘²‘ L ×X(£bj ‡aßÂôqª¬¯5F§®<¼ÜB÷[g8”R}¯~úñç·4Äu,Õ¦>\ü Ñ¢HÁb,-•¡˜ÝE[d [d»PÏ l!ÜTÄtÆšh¾ÇÛù°€F×mé²Ò?}øãõnw)¨%ñ”òC*_JüâbÓ ÎòÂ(ºå˜AiÛ§‹À©f*f÷óîú¶Ñ”sîP–"™¥¬N°*4‚³h$²8mˆÄ“ ÀB «¢H`颙3„*@ÅÞ®w7O»ÎÖ»_C:FÃy°Þc)ŽËê~JýŸ3ª–‰ƒ¼œÅfmYÄî/²ãÈwÅQ~ˆY$õð€+—†(—ç0Š”ÏL?((‚T rØü¿6—ûÍGåÈ)§ó×Ýöb£î;ø¦1)5PÕMVSO J Ì@\¨òæTˆšJÜÝöÓæü×Ýùß7*‰v¹ÿ”¬Õ†GÿÖõæòÓþpÜ¥kGu¥ôíþ¸;?|Ú_þsw±ÑÓ hÏ"ÝÑ P&«ZkÁ³Õx¾Pˆ¥vs=†'ãøº8uûO`Y¯'ä Ùìêx8ß]Üwf‡ÿ‡ê¯O6‡}÷‡e¶þÇ…×ó9o<Û›ÍçÃõM?çÎðÿài ¿éÕ[ dµ2ò2¨0»wea™ e•öQ¤Árzœ¶G6惾†ùçE&ò"zAI…=ƒß*õuÏzj5¥¨ ·ž—·d¾r³½ÆêJÜl_×x¥XmåŒó9*óûä²ëvŸ¶ÝÆÏÉ>n®wr —ÁXùìj#7ö ÁF²4ž(kð—ý~w}£ó×Ó›D`ÁØâRíY˜n}Lß^ëÃO îÞÖÝ|Þÿ¾ƒçš q"¾š®›µRJ¼3_>IMýšµêÌDª-ÿ5úë“_|ø@6L/[gìþM1Í¿÷K»¾Þ~ÚýÛf¸I[{ÁB]á³þn¿g<ûñ»ç{úóó§{óü‡WÏ_¿]Þ´ìŽ{fÊíNô(º-îœô¥ö̼¿.dÓS›ÚØ–í†ô £UÅVïöH%*Ky¬’ç„}ø*y£ä1Ħ7¶}˜>à…’È—ðªò»mÖJ+J“´‹DgçYt?WŒP°ÅjG‰ØpÅíÏíÝ:ˆ¼Aº'åh€¹÷Þš°+ Ò\f¨”HsÑAtOl¿CîÆcMw¤ÖËt-½ÈWà¶^ï^_o}è÷ðÕêlÖÕ³fyY Ê!ñûm£«.tb/¡ò{íŽm¡xR@)¸žì‘Ê)hþFå*b/?Z¬zléß 5z»ÃÛ ‡("çT€¡øÀ+žV6ÇÌŸ wŠÂ¦ÞÃFÓÖÞ™€ºV^ܸ:Õç:VšÍ2‹!væõA Èm¿Èå ðZ;×2ÛÞ\P—aÂüudÈ­Õ``d”¼Õ‰\yF¼3i†cZxQësâ"µG\õIßòG®7qͺNƒV‚Ž÷‚”ˆýÛ\êŸ5apç½ôìíƒÜ@ÁeÑà²5?[ÄFª«¥æì嬣¬Üˆ€ t“&$‚¹A°gÇ(dt>¾ ÇšuE—ý[qí-´k`9¹°|¸4°ðⲑe<îZrq™¨Cj¢Ñ»RfÙ¹gÉ\†Ï‘¹“W—а]BìÆEcö¥®´Þ‘|| ^-¡Æj†‹=¶ÑD ŽyX•5šÛ…™·ÎðêkhD5”£â“@ñIjy»½ìà Ä´Ò+èܘèBWÞ%3˜oTmtÁå«v çY!¶3xŒ¬U€h™ØŒ;î!˜è»R°õ+PìGT™õDßÛ¬oRÿâ ¦­%0íœmoÎuX§zfÒÖûÙ#Îxè $Álx‚ŽÏê <«Їg„‚g’Ôñ³ªutåÆ#êNÞè=VÉ ~Û‚ñ¨¨X<aqÏøƒ¨yÖÏ?ëeX/u¿WI"cX¡>¡ú)Çðµ<¸%Ù¬­k“¤¸'¤¿¥UÕÄðõ‚µ±ŠÂµq÷­Ÿµ,†¥jDÏËTÏ÷xôó´¿ÿÜ.…¬m±;}lníø’ó©=ŠÊdíx“Ez<,ªk²;½%j°ðµÄà1½E5§ò,OoɰG9'Ûº½žV¤× ^'&e¤«¦=\^l€#m…*B$DˆY˜žN6¡® ó§Næ[»!MÉMž’eŽ’ãs60~ëØ©Ù$#‘™S…Vn|—FFð®ÂJg²øgq.ÅZu¡w>Š¡|*ç ž+Š|X§;Eyk1RÇ>Dv’|a„¥—?~–ȦéˆçfɦØSÃÎ,Nu»+ÏÉóJ|wêùè5»ÿ5 HsvªY—Q¡1·ÕgI+ÐO»r@—Ë Á&kq6JTmºÈÁ£¬ÚLd<-3̲(TQ°Ú K;¾K‰§N8±“i²D£0 Òdg’%3Ä.^’3ˆ‹­Ä¾Ö[x–*E¸VPû"¶N«R U¯^û3À§.ͬ†¿ÙAjh Ößڳb×r ?ÁµŒèõ1KF‡ÁŽ%Çîa´¶¢cÉ3 µ‘|Æ8î4žMTÿÅ>f$´â™[ ‰ íXjµÑû±Y‹-<ª‡¹Î|:ÏŽÿh|\Ìî°ÿnÏCæÝdQÊò(#*, ‹fÀba}íTâ<òÜýz0#U¸0ˆKÄxõúÙz°„OúÐÙxÊ™­Õ^Œõ«º¼^Ê34&6,³éL±›µØ„˜™&L ª… –¡|ïNðvÌN€'8µ°]JUX¦ýͶGn²]%žâ¦y ¨6²3 g,刓ýF ¼'×Efá)1 ¨ VŠÀ'ª±V5®`:èKeæg‹d9R§ˆÕW)¦‹un Á¢¿I6‰ë¢b6IêsgdŒ‚hªæ*Â.ÌE3`«Dg73upàØÏé/¯æRó"óÔ &îh+ÚàIj% à‘R Àž5ÖDÙ™#{ãï7SFºõ…I9º:w•4?‚%‡’ѾⲟÏNÈÞD(mqƒ‰USæö¨t¢ šxËó"¥ÕÁiÆ)uÔÚ‡a*ç1…›Qî„`íNjlY=²‘þ×w¶‘^Ás`Ä %ÑBIn¡’AÜþdj£ñà}¶\BøÅW2ëp:XŠI _Y%)[óÓÓšô|ô|®‚¯@ú‚/Ÿ„HȹIÚ{Ôj ?Q<°á¬=nÜ Däħ\fX+Ç‚mRpªÌÓÕj—;Ÿ6 ±#=¥ÆàD[ò„àõ%w©cóo‹NÂa– Fƒ0‚t1²c-ëb„˜§#É©ƒú_¬u¥º|ÁÀó/øúK^†e(–§ ðÊ$c¤òÏ¡8?œÑÚVØ&Ë‹R}ûô·;‘®÷™?Ò¬ê?[fý™oÆìÁI›Û,=ÚôõDè1WÍš )› Z`…q0‹ÄÔ…ö§%9³î|#|Ø Þúƒ4“ƒØÎ5úß‚šAD”ÁR‘‰B-‹Àt™jâÄdŠ NÅLk]ô`æì!X³ýÜÉ÷ì§#¸b±” ¨LÄ8É¡_Ñ/jh.7hÜ5^óUÖIDb®¾ƒ!Ûp3 ­»”«Dæ ÊÌy LÏfÇÀôB'>˜£­•MgMèÆ¿D½g?ÁÀlNc2üºšXl'Ó&VS¥²Õ6¼8•8ާ…t‡ey4–ÑÝÀuóíÿw>Ù,apWŒw:ƒOô!‹0ÅÃê»õ)ŒódBÿK¦0³¬¯V€©6ACzÀàç -™.¿s2có{êc´u"­°ó´‚á¦ÝµBÒ8MfHƒD`ÏDŒóËJ…ONÒÔU²KF‘¤)i.Q"iN¤³ŒG%YîŒ|N“,µ­£TxIùáÅGC¾L)\·õW\âªáÕ}b{—t±XEfÀÑ®x®ˆ]VU¾¶~Aw:ÚÃRÛGu3Ù!#;4bæoºZ ^³ÄZ×ßU¯‘KÛÚËïS­ÿ¤Yd¤[»gƒ”U“Ùë`cÖ’Úý´Î—ú]"Ýo%{@væ`˦Ϧ2@ñ™ñ‰=Id+’éU—Âpq/‘8a–(`oÛ°I_Oν(m°¤ªÆ•2³›|çgà3‡ ãï‚d_¾ñœ]!z,%ˆqÙ"³â" Û é{a%Ž;†ç‹¿[7H_ž°Ë.òT¾Ë,»Ëë+– [‘M9ÕœÀ éÙ®Mg䊥)–s~ …§µls ]žÆ«vhPÎÑÃt‹š[Ü×õC¬3ˆmŽòˆ„Þo¢l=•<§ ªÝX¿ÅmÒäù7üìWص<´0Of|Gô.;p2UiÀ7O™Ò_à{x ²ãÓ£=„`Ö9ò(ÒôqÍ "ôþg+…íñâÈ Kß"Q©ùt¦Gq]H¿UýŠ;£_w’:G¿E¸&›9¸Ž=í®­N[‚k#ÙV>4’(Š*oMÃݹdé/ÑumwÛ)3Ž $+rã|b\p¤Œ5« ͤ±àR)#JÇBÀ]£d=n ¦0<^êê¾N¯«aÛ†€Ôà OÂ$‰†º3·ƒ$MLül®Û-ûÐ;n·9o: ¬ý<%  Âºçi#™³ÀC!‚ˆMj‘AÍá†Y³Ý39•A•s|~Ò;73Ü>luÉÂ͢ವó¾jéÓÖ¤Þ–ÎìÂð&´äðdÓÀA 2æ{‘¨Oz9©o.\¡Á<øµÄ@Lq‡›³ZzÛEµjØï ]0 ˆ¡#&F šè»‚T¸e»¤º!¢Ý §9†ñïÀÙ@õK†˜ic«°†íp¾Œ )½E܉"kËÅjÆ ÖG¢‘ æ,”æ²éé?ü•“œP¸Ë x2(ÖM{™>x¬næx¬ÎÌ9T…>§]´$Hðqpß ç­ù)*{˜}¢^`´Þ²”ÔäA‰vµúªè€t; Êq/Wêš6r|—ï#‘:›øu–Ša©ß8í$‘º·ˆü£"ƒÐ”œæ–|¼Ãzù|¾CìP/‰’pJÃê( —:›Kžbx”ee&'È´>Óæw.6¤áÈw¯t9ùî·Tºœ¢F…Ûú• `eiR#ó×g0†G ± ƒ²"vÿUޤd"ÏrÝpôIAåðSz4GRÒÃE‹–LÐKÉ<o•€·²àšv´vÔ¹µ l"zã.鑨qœÑ|‘º4LÜù¥=|m~¿€™äYŠ¥ €Ù²:Y€Áb"ÄWµ´ÖšVÆi¶1ßϘöt0cIb2µÜ¹mœEÍüOË—/›L+%3ˆÆR Msv³|bÛèèü°°´Ôq¨1U@HƒTHuëëÚÛ΂2…±!nš‹ÐjÀØ©éö}L˰_Ná0 ¾†‚•tÍ ÌZ5[S˜¹û¯¹ žGGû+©f:ŸDï°~FœœïgÞæè|š;¤f*fl‹žWw<ÈÐáW*êþ?Ÿ¿üö³iíLHòL0FžqFÞkú}§¯-?PÂ?{úâ»oÏ?}ò×ëëþ´¯nÿdÿãé»wÝoOo¹ûdø“t lãù7O¿þú«o_8žnÄe  …ª`{«vC6Â8o T[zHd½YºÝÉ:òS€õ­b€Ôß?ïßõ_šh=%yöÏW¿^^ÿr†W¹OÛøÓï¾£ zŒŒÑ=З8Ùã²¢xR2eKÞjý®3R ÏÀ=n9˜‚^cÆ$Ù|x€3Á€?¹ú绫W÷W¯¯{… ÿÇíU/÷ŒåþæpÿëÕ¡»úùþpóóáÓÿ0žNÖ t¯rGÞ£ÚóOûy³Ø²ùpÁHXè¼ËÎ]œ=ßbä¸Uˆ6]kÑ}¦hËÀ*è`Œ5„<à÷jJËI•+ÜH t1…@ïiò NÁ šìôH ¨ Hº/Ivzµ5¥˜”öoº)bZ%›ndy)º@œ¢¸°ù-QplÝRÑ.÷Û8kÊî¢h9hPtÙ ìô¸v¥&;SŽ#©DÙfgT‚Âgó¦9•ø¶mq IPûQ¹Â-í¶ÍžÕ#ÑÝjŠ™ jp<¤ìÒ9Ê®]1EóQG|qûÛWwï»{°?°—RAƒ^‡ÂEfQJЛº•è-èþ<ÀùVT¹YR<¯Ù ’íÊ^f!d†Â…¬‘xy‘ä&ñ–åwÆËàI}`^v¬È ¥¦…¿µE÷J†u$û)ö&ÿ’­í䘋³ƒÖDcÊÆ+²¼±ÍůªçÖWÿþþÒxN6¯UP3ñÓëû7ß^¾½ú¬»¼ûµ2Œ2cJ!(±Ë.ÅÈÍ׉Q"HIeÈÀ¡Êœ €Ìòš<+\º,ÄEE/í^ôXÏ4Ré)FC]m²DÞŠ ²/þúý×ÏŒ'iú=½L&àËÈðûîæÎ¸ŸLèýäÝåíÝÕí!ð;^ßܯá^½>Ëp±@·Û®¼À©ƒUß½º¼¾~øe»éÑ›ë_o/oÿѯÂÚßôË|J¯¯zr§*Ä3ë ³fQW!æ¹k´Ž ÚÛ±Ñ:Ò†Ü<}õªþÁàÙX~x¶‘:YHîhZ-¤•œnµPNØŸÿ¿}ßóöW7×÷—½$põÏËW÷Ýo€×‡ÁÛþ˜/1Äqn~ú½JÛelÇ[±…Ql²Ã¯¿zþÂüôÙw?|îßi¦PÑÐg¿$ßÞ,æðf3‚òÿ %\.Cå7 ñ#$ÖÈ;'»]àä¶š«ˆ{CdfÆ€¥ÀB¶ŽÅ85u‚ñ#«¨(³§²CTEÄôÀž|ñùŸo¯ÞüüæêõŸ_ß¼ ~–‰h|ÿæšÆ—n{3½@Ñw v@TGxÕ Ç œ:xv„¥æîþòþêíÕuO¸³F¿”<”P¡2ñ¬B϶^挙¿N†¨Ò'&ÝâÏ?ýöíÕÕëÏob1NtÞX=‚ñÍõÏoþ¹ö<ݱnÞ]Ý#Ï`²¼¹?Ü_þãêð?  ËÛ_ÞN¦à\ ¨óá)*ŠìPÙâa g6§ä³?ÿë“ÿï¿>G|"š™ð”A·þËÍ}úÉ'w¿õÂÑÛOܺnþëgº*B`3›ëÝTŠ}56h'¤ÏŠ÷ ]§¥qàVÛ‘4ÍZ J‰Õø  ;=ð³88p3*' g¸æ1ÍØ`IƒÜ¯È[NI!ÜYaDÑæe ÀwE–ëìÚ/y¨T´¸¼¿¿}óÓûû«^®Ó9öµ«e¹k[à ¾3*éŸÝôûñƒ£ÂÇ sLÊã£yY8Ð1¦¦§(32Ò’¶¡ÀDàÝÁÒ™d{Ô~þéýo﮾+´ÈR[eSY†¢ZAÔ'f(À{À4©Pp. ÉÀOÆÁea5²? ­ª‡XØmhW‰-9Ëþ‹“èÁ—(9 EƒL*Ä»À¾ËyWi \ÿ ’¢Œ ®Q–ç& ) „'ÂX”(b 'S´`É(¦ \sÖ¢+€˜2@¼€w½2 ží”ýÌ«ßëR£!ÍÛœ˜Ñ‘ÛY0èP’ýÒcÇœXg¹¼?L6“c­$¹·ewŽì,G:ôè²us Ž|AþŠG¯ÃÑ =LÄ”nÏ­ÀBŽÎÏf6?;sÄEâ4øª0»,>¦,{zó[%¦1$=¬·ŒE¯gö×››;’¿h's!J´ö]“FL™È³†>S¥àù»ËWW¶Az]‰‡ì½ÔôOïŒ@jr¦°•ð±è4Ðê×oˆ‹¿—6>²APòÙÍÛŸÞ˜ÈÅ?ÿë“~î­Ú­0+<](QÑéÜŽw‹†œèH99Ò›Ûõ'úÙwŸ?ûûÓž=ýûóg_~óìÛ´ÂmÑæ )5ce&üëÐü@ee®6ZTT΢rmL1¹»{W!=hÜaj35ñkiõd_¼*¬ãúeXÏU^LjX¹ÚOz¶¦Ôԇȗ_ôM PùERÞqföæ­FÙŽ¯¸*ÜÁô®&XT+«9øþ)®2Øa…ßൠ6úT¯¥a Ãj. =’Ú›ü0µµ ʦˆä‹„Æê„SU3_¹íH¢±øC>$ðylÑ•tÇ: ¹nY¨3º%™´ P!$×B‘W¾Æ#}ÂÉ:ÑT_t(dwšjtk¤Ä\,ø×Ôv±‚,֌լ/Ш9ípYÛ~ ÀÏt­« 4j®§VIGh4í4í¢5<­3+Ðh`ÛYP⃠/,ÐèaŒ 4†evãmZœ‘i;¼¨ýß‘ÙòŠu–NµÏdë»'úg¼u8 ü3!ùVÕ’<Ó’¾74O稫¼GŸIæÇ³@u¥^AiÉ€RMü„Ä’þY»…ž: Dfè))šK ªˆkç-Þ²|™{˜é(-SÕá®O…u9 ¯ÏWÝL$$·³f…?'чµpPÑÂ]ÝûbÁ×õbŸ•]“Ùë.½>þìú®Ù¦‹${Ä¢G,:‹Ú¤¡®ëãNe9€a‘ܼ’”œƒgI!$Ý{y°1< /…ÑQªd”YMÑ1‘H‰K9D Ä¹Cg~Íñ’"ÊÝ·¸„?hKˆØ*nrN 9ÝHôü“,f¾´s¢‡¥–ù,é<£Çœ¢!Ä®¼¼—°8U¡ä zé+¾ƒ@—)YŠ\`ä¼oô}at|«¼:”.q†G$G ٙ˹#ê áäã1|¸c¨Åã1|øcèUaH=|,Ö­hþ¶ÇÇ à_ KÍØee•¥¦Qí´Ô´U¨U³Zl±Ô4™V×›,5`¬¥¦Á]§ÏÍR3À¶³ Lal,55¯šÃ„KŒ¸›nß è`ňM5 ´óËKƒ†YN nÂkå ù³7+=ưã:½¹–º¦¿[Í·7Ûl§(ì[(%FÞ UBŒ`<³°MòÔëjØEÅ$iVtZ+¥ÍÖ8ÁËàå´}Ú9)n†Fäîlwó¨e1P9 ;ˆ%ó&¦h,èÐÝ%@¢ÝM2ÝjV€-€\#p 5À| ÑÃz š%çÔ,®¸_±ß·3¬ñÀÉqüå  ˆç¥áôNŒQD—€f˽ šVt÷¦ž¿7=©<j`gNC\wÖðŠ ¸­r`)ÿδ˜s©“v¸0Ķ[ÛfjàÎHÌâó0¡˜UsÖ@1«‘B1K œ³fYÌ‘‘P fÅOÁ.ÑÎõ¼’ZZ gG3Á—‡ãÍ7 †‰ç\(þL-Ôð×YÑõ¡fâõ¾À~é¨îqôË™m¨D—ðºÃ?qÔ w{Zv¨àÂ&Qíûîý7Ü„¯ó€d”}wÇýÙg†¶€KÉÁ¢­rGº[Ì9¾? ¼4cŒÔóÎjã”N‧~F÷Ò!q[9{ȼ("Yvno v4ekÖö6àÂK0~4àw™>”c{gÕøÕ’05Ñ@̽gR¡Üñë Sðídš²àyç£!ÓpôöKw‹f7m“š‚nM“Ñ=I Epur1Ññ…"Ê4ƶ±ÂRjÁl¬üæ-˜ kÇéœ%Ó‡õ›ñ­™ó"°ZjÄ#ivºä‘º˜µL6LGjPêÀÓZàZÃÄ#]p4ÓÛ‘WÖYXC'š¿$¾~gþµ>ƲóB¤ u±€Í£àÌñgÌ BuŠdN”ó’4D¯Lš‰zj*íà±àá߯³Z$ôÎÅÊ×¹SFœ¡Z,7Ülº#¤1"wŽtÉ<žC]2ºô@öÑ¡ê0¢Ð)‘BÏrÄCRº Pþ6Dáö&¨á?¤§”ø‚s›Vƒ™ÝéFÕ :í˜Ö .’8DÌ è=Èb½sú‘©š2ù1r<4ôŒC†‚Ç\o*Œœ¦³Œ%ϬÚÃd¢x•žîJªñ;S[ñä¢v:žcpQ®³¹†Â©KnAæ·)h!òÁEòUè ‚±•f%  `Ë |xEz±œ¬'äÞ_¾éž£ˆµ®PÐËáá ¤¡mt˜Ú„òb?wVÑ÷àõ“tó‚Y)^dY1^WøvO©<ª6·3nƲ‡èfnáуÅâ:eßkqè¿R¨u¿u;°X8šÓ«¹nO“Æ oîÖFÎR鯧{)ë ‡r%†‘˜í[½ýÖµ…ôÿì¢`LŒ6!°' ŠÃˆÏg܇Vü¬é4˜1O„*ºžPaJ à.Àú:ó´&êŔ`äÊ=1‡\™¦Œ,seM9†åʵ‡´\Y»G}(¹ýÖI¡›Y“_q ò ¯6 Ìr?ƒÉÏYëñkVaf]·ÂC1½cPdÿĬÃ2=Ö;ã1¹¿hößnE< CÚ„÷‹¸‘ÙþÊWÆslsžÍçÙÚbQ½u×V¨- äp¯(z«aêæ$zÔÚóžTÓ‰Ç X„Mî=­'Wç/ áø€ÛEeHªÄRÕTb¨9’ªÚ{Ý‹HÕ8߇T­K—07Ú^>»€³§^Ã)tèzµÂW«ãÓJ€”|ÙÔÕ~Ù¡‡ÖˆÃ¿+Ö-¦guˆ–þ5: ì{,  }'<Û({Db b˜jÓBI$Ž8ŽñÁ\^ÐÎ’Àëk:`ÀÖ´Ê¢zÛFp’Þ䣮}w`Ån§žd\ûK™"Ô  sYÔ’7(pß,9°ƒÐ7¨ ÐQñ<Ƽ&mn8I|<€Óy»ŒiY> 7OíÄi„“>ØtKÄÞã-g(œseà@~ ë¨/;HÔŸö¢È¨’È]ž°ÐŸ€¢šã¶,|ÐPpt» [•XK1Y 1j®uE!˜ >p‘‚‹D\­æÌ ˸þ!†l˜Î1%hdðÕùxçAÀÁâFHиVÃâ†ÏuÐwÀÌG ¸³Y(h˜“V- K³âs‹8«;ëb+´¦2A™PD°jy«¬èËÃcKøpzi•Òé÷y{· ,‚ª®c¸ÆB*öëm£²ü0:ËPóì~êbeD 'ØQ\·€»ÄÍÌú-2œ™¸5:UÙã R\fW”ÕÕ[‘© ÕÊJ„HÑ2WÝÈåÈÌëêã=k¨V^¢«G®†­Ü0f7‚3OÎL+7ðî,xS¸[ÕYù,gÃÙ3”rÃ4¨N®F\ÜR3óoZ”»•ª%ÏkBŒï}^é)Ý´³ï\äl•ÉigýuÙPMsQ/7(Rì2ófL'.ÍÒöuLE‚•Lõ}bò@|¦,šº³çF`ÓÄÔò›ˆ-¡'ÏCe9;£À²!,´ö¯ª"><¬†SÅ6L@Ðe[(䇰ë;m¹’™XBº,–Éb[ Ч×"N› ºš¿™(¤‹Ê2n¬™-&%bCÑ‹ÂΊžOã)‘ÁJBVq„ôÌòuýQ/¿ñ!iχ“¹ðˆåIkˆ8[h!°e±EW±E«Xl1¥ÖŠ-¾bò‰ÄÃH­Øb§:{±e€wgÁ‹Å–ZÇb‹‡û$4$û?,‰-Vœ¨¥[´ž¢{ìó€Ûô‚ÂFîDÊÃÆ1rŒ J|¯Î¨‘µ4‡Ñ$á >”; Z.Ê*¨K!W bʸº¶hš:Rf¼®^7[/®XPƒ=e·)¼Õ@§Ñ Ä_¢rÁy‚hÇÈ*˜»¹‚¡0‘—qàWã–5¦Óz®ë n| K§}­¶0?O§Ç«Øâ˜5gÃäWXòÐùΞúPì,Ð0õm| ¡)=ãíê›x]ݰ$¶É5H:­h&bì·_d\`sªáiúóí3x`r˃Š3éq%)¸Qìá\I"æâ„·…¨Æ§%ÌdóxÕØŠŠúÀ_o¸ñm%ño½a¼ñNB(»ñVolùRôxÓ"`âìŠùÇ:nÛY8"" ªJ†˜„ŽOM×B"ÀÖÌ­ÈÕúØôñßµð´JÁC ä»­ñwò¤õ:J¦‚Oc¶œZSc2d¿ t$ù`¦¦7ÅÂLl N<ü÷(õçÊ'RSn´òùØØŒ5†ø[Æ}ئíóð3Hpr!ÆÀla’…["•]®$Ë5 Yß³‹FPÕöb´ò’4ín[¹²ÙROuO lš´K£lº©ÎœÒYxw¼˜Ò U…KŸàläÂˆÒ ÿæ˜Ú Ó)ST¬ ©]ÿ\H³ªþyt2¡5>g÷½pã^¤–!³…øDSŸ†Š’ÚàPÎ ›Ñ(½ç’þ,F ÉCRš 4gG¢ÌBx[¾lÊŒÏt­Ó4Ѩ#ï ¤Æy“s®ÂÏòqú³Ÿ¥Äœ'º’Iaþiø~¦Šœ‹%ߦÝ)|€ùè8`PO(ýßÉÉÓÿ» ƒ1«ñ‹øýoXÊZ2³xâ‚t }áqÍ€`J|ʳéÅã>¸ŒÑ ¦ô—נ๷%Y: \ääÕ$0Å„f_˜ª õ FÀsoO Ü@¶ätv¤.Ì\$Ž8¤Ç޽@-y¹­ªàðÈ9®WÐhÜY¬ì]@Æo9²èe_ÍZ} ])r!AvÊñ,—8£þåÝÈESrò$ëœî¦Â\i+NtVz€¢áú\ýX:#Ê* [g‘Y#Šæ´¢¡8xÑÐNuö¢áï΂‹†Ú·W1Ü™—SÙ°Ær¡Ÿè§fÒ¯×<¯Ç%1 ‹VÛ µàþ;`Ät•(G&5:“}ÞbŸäÙ‚K‘ 5-’в.\Ø6cU“‚[U. ÀõgÅœIXïbðº MÅΣi<(=GAÜ‘·"r_´âFpµHgø‘Älv€=’º'gY÷ÄüH}þÐ9&¢w窈aÄYç8òé€ä“èôìTž”/RÐ;<‘;¼E‰þœKB ¢OA?ª §I1YKº‘2exíÌ…›»-kr3]pZ‰$*à›I‚e!&#++(Ø "(´ (haýÆLëõûŠ­w„õƒˆMŽ0› ÙùΞýPì,Ð0ûoj_‹+†æäxû„ûÃŒì~`9—nürÍs=ÔÌt×*>9\#kxrØ“í¾'±V«oxåÿ†Z}]§ÍMú7>ìÓn ÁÆø¤£I†î†j  »â0UéŽX E.óí—i–T³¤©#ÔR³ðÞì!<€j]ù¿€dÚn¨ÆY šÏŠÝ8PZ.rEIr²%Eµˆ,øÀÝ‘Mk·ïvv—fw¶ÒÙ3È1ƒãB,aL%Z@¯^’qåÂèö¿Î$9¦Ü­ˆ¼5IjÄtM€W‡æ—…{g™›¼7g›qÂÝDhœÈä—±`«3Ùihù2ÛùàCWèFf°1[ŽÁ2¶Îò1(zÀÝ-ˆMñèÑò0V’WÜ ™åù~Š’Åmy›_ßù1Ï^i‹--˜g¤Vùú0"°3º§Û÷²Árdd?z=ž€7cTöù(’ôÏáÉdk„“:Òç9©5X%§¿!×lI6IÿNsÒVæüþö×|³Ÿ-U@yüvT˜,›—­ò»"о >[³.\ÖŒ:"?é€òo«A᳑æL³r«¿¸ilzbŽH}U÷eXËóͨ©ŠÛ†‹ð­Yð Åל¨Ûž{Ð ~žaQúvöbì/Þd³ib;~*3‹Í0.j;ÈE¹rtrž|t”«%Ö¥Íî¯Í&Ãúd¬ÜKÇÊk³õƒð¼r?çpO—k³ _›ÍÍvî¼×€¼³Ƽ×2T§þ' O-°6[ƒÙ.gÊ®Àn,ÛåUmW¤bK@ZÍ( ÎZaq˜Š«yâçJ,ô¢ËÖ Xì¢èܨ0¸›!S|ƽö:ØTüh«6\í&Ç—\é6{ ó L t[S²þ„ONÉšÎãeÁ+0ïÓ!%[_º­‹—ZJÆÛÐ~Í+å®ÒJÆçËìAÉꉒÙÙΞ’q±8@S2éSš‚>¥d…eÚ,)“ÜhLø¨KÊ$³KAÄOJÊfÌÑL48å(ûHÀKH /ˆ’’Àåb(³µfD¾ù²'ù0¸5Ä5 òqT³¡¯Ae'²³¨iL@Òxsè:òK:griXÍL¢»8Lî5Tc†¬[ŒšÁŒÉáŽ(ÇP‘˜Å¨rÑ¡†}|ôç ãðÝxûV³°¸¨‰¹Ú'ça;4’´d¯³Tr1 ¿ÌÅ$ÍRµ\LFÛ½¬°ÁâÅäbÀv©Å«9Œ¯q̳çUR(š‰Ìîe_ŸEf{ÝèbÙØ¥”µ7)WeY•ªMixNX޳}ć9™äÆqáaf*Äð?Âû>/”»ò Å• ã«껓ìÃÚ‘ÁduH¹–¾çc èFd9ÆÌ¯„*0Ò¯õÕ ú±Zl±gzÒTÍõjšÃê¨B¦3j{Eúênª³'k¼; ^HÖøÔjEÅp¯Ô?÷¿²Å-b9<ð#fšF{ Gލk(Ó8!'ðª`˜8›djb6ª¢bÒIùð;ì`“‘åÂ5A+n,ì—j¨®"áË‰Ê ‚Ü©¬$Q b£D ôvq¹C§sdú;›At¼L†ßp¢ß¾ûÓÕíKÞ• kˆŽ»Sì õ¡¹Œë]ûˆøõ¬Ðí\÷æ0±eHQÐ%‹A‹l¹¨¡ §€q˜T)L"Øìfšq3™¢™ìà¸OÓÌ1rÍO°¬-, f%»¡î¼ABmÆ]2Ò"Α7’Ýy4’Ið™/ºíF“ùýÁʦgédÁé‰nÞe[Û]V>œ×7Þ³¢HÿÆ8Ç—?“† øØaêÈÍëÈâÄw¦{ u&¶µN¾N”ÿæ¸ãÌM™Àr8ïD‹ÿnESß4µŠFÛÔãßvéðÃ9J ôDÂzªF'mG§Á:»@ðI ý¶ùèÛã<’Ç•ew˜¼s0Ì%O,.ÃEé<Áø ¨™]€„/Ç ”„«Ì¼ 4Y+g>þ½%·Ü‰i@à15f^„²´­MêïG‘nm~¼’’Â]Ñ`´”xצ›ÙA¼‹ï>·wßêqD$ñ:[u@:ìµ3ª^kp;hÑée0G°¾°X?–ÀŽJÎë:€o¿·0sfÙD"í ™Š6yIÞbªò´vÑ´àšC l; ÊÆV_”M¨ 0nyI¶oî¡Û¦7‡&‘ªîG¯¦¿S¡êþß¾”-伩É3á#?‚g>mcz&Õ$ñuv,x莗}Ú†Ca:loG„é™Dµ¿¬p8™O½´ìÓRñ‘JËq.˜³ÇOÓ§Œå4!òõšæ­Zަ…©y‘,·ÇÐŽ%Èrñ–f6ÄDÖ̘LµôF4ü¸wm7pZc¼c”sÆøtYIXÛLœTjõÄm|èSbÁ ‹‰A7îÒ•™¿ =Eù=m ò†ÚªL= €¼¼ö”°S|þéó—ß~6‰¦œ<ô‰ oõ„¿à-Ì÷ü›§_ýÕ·ƒfÁ‡Œ\²ºÕ'mÁBȦ*0LŸ5’Ì·ãèCµô­¢Cs§F‘sm$Ø^C—Þ€£™?«§/¾ûæðüÓ'½¾îiöÕíŸì ×áÿ¼º|ýÉ ‡=)Æ vL1ƒkð¨qÛ ÙG?™¶ìšá;@ЦŸ€>êu“ñt2 Ì(N1æ¢lÍL0‡§ã€|yx{sw¸¹¾:üO‡7ׇ·–„þÚCú0Ȥÿy Îéà­èD^Ì¢@;]@>èñvžB,\ ò)ØPéŒÞ ð۶¡ˆ® #oÍ“Ø1ÿþyÿø¾®¿ŸÏ?12ùF8×ܪÂÝ´p ¢W¥žúÍÕÝÝå/W%CU H¡eÑgG(À±…@¸¾-|ú½ çY“è^•È @çR8Ìß³FµŽã‘{r\úlóFíoÈheÜvñA<»‰ªhõ`ŒÂzyÅP½[‰õžÁö Ù&Žåw_ĵˎŸƒ­Òõìå¼…F;Ú<½¿¿ý¢×{WbN™–WŒ9;Q·„<ÕC…8ãVÚTÁl‚Ñ·7o¿¿½y·òÀ徤‚ŽvÔfÀ·ÛØIûQ‹ÅÙE”©Ð%‹ö³ž‰ÉX–xÉkPŒpŒùX|yz}ÙývwõìŸïnnï×òI üÊGm M­F›d©[ö„D?J>K®ZÙ=Ø,½ !¡{]ÙìõnS€Ã¡píé'à$@¤CHžÁ»‡IJ[[p­u9ôÏÿ%É·«*aí[ ž  ¿ë%[K1ô®f€oGmpe¹«M©Ànr1㔯ÊòZÑ@hã ©øû£×ë×^X‰\@Þ=‚±À…ô6"æÄª<ïBþ( P¦ä ãÔZ°ªk±cWµ€Þæ} ªC5²£¨b {q}ÈØzqÈž¼ÒÏî^]¾»úþò¾ÿÇõz²Pö²r´·/ÝŸmÆlLqj;…!#@ÚZö0Ê,-%1 LJ£7@e q–¨{ €/²‚š¡ÍÊ+\úÇ\£ûÑ^þSaü(úYImE‘/…ñQ7×Ýo‡wvƒwC|Ô¿½»½yõ¯O>ù·Ÿß_ÿë“#ã¤ò…¢@ÇÊF²ôØüüÓ/nnß^vŠ@Ù;" }[f=Ò0ÌšzOÄ)4Ý‚O‹Îà 1?º¤ŽÑ5¤S±’>Øÿø¾¿1ïÖ‘»!s}Or·STí´Dñvµ³Fïg'k+Ê‘PZi›h@äÍ1§~´5“ìY2· zÅ~Góé†,$ zµ£UYÏiè'`†Èz¹ò ǧ(ACvÿMC—!Ú ïÚÊK™ØvàNa"ÃFQ&㣈j….Î&i`E,³‰_ yc·ï_™Ì¡% ÀV&¨QDNh䣿™³V±‹¡(gªÙ«¦Œn¼« @`K^@”2Ñ7ª4Bõ¨ò˘WX{tŽ œ¢…ЉŽ(R>L$ÿ›·O]ÖÞw¯^½¿½½º~E÷W&%ŸŒI<è­ `Ä+=(hOlêàg¾¿êºçoþëŠÒCÆŠL¼À4*ކ5 h’è•ýZ¿{wum— .p ³% ¹ö‹¿~ÿõ3“ û4ú¯"¦Pì—M²O NDÐGÙµé"n}ŒCºôÍIEôIHpcº {<²8ôôö—‚¡€0ØLÑw ©ÈÆ®5ÒÚ¡< ì¸EJ¤*”Üfäev­ÌEÁÃX€‚»_¼˜·˜‚”_é69Õ"ì:‘»ÞÕñ…®Á[AB÷®ø¬†VÂÝ^"*Ð>Ñ@Mè+Y"`QËÄd<¸Þüòë} 9Ùm›Hà€ ÁÖJüüæòWÏþýýå +­¼jûf°Ó›pÌV€õÈåEÖ#”ƒ^²ü­EàIÿ'D2Á¦e–®(ZÖV²˜¡@Èá° ÝÊd¶øh0e)š€ w¥ ÓEW´¬â0 ¯u™8b˼L ØSVÒ0û¦ðÑíå›ë•a?zßÖ’ ¸n;@ªöõ^ë2'ä>™iàbÒí`mäm oÁÕÙU.Z¸ÓŸ}÷ù³¿?ýáÙÓ¿?öå7Ͼ}±¡\¢¤ÍÅl¹DÅ]a<[.Q¹ÎeqlÁmU%=Ó]…°™ªˆ¾œöøõÙWE”¶QÑ1\Q7í<(Óí§k4£Ól=j]ÄtØ’GÒ„%Ç€Ã_ºaaÅE[îRkáÿ†µòæý3å[šŽ – ¦Þ)•›O´þo8¶ö•§ò{Jù‡Á{S›;;QÔ‰âeXà;)¾²É@i{®Ú X}A ƒªÄ¤L(fTeFIªOÅŒU®˜1(¾ëŠÎâzsË3N×Öîô5«“E,Uq >-ÔÂïõÂïÙ*é»UK„Û'.K¹â¤7o^ÂJ´ÁªñšÛ×ÙK}š Áà6ɲyUc‘àžÎc»©¶¸&ø„7ã'äÈL-Âf£Ôm‹e-£¨¬q§W´Žã5[j€ZØ:NÚfðóìÙçØÎ³φE51c3°}GÊZÇñºÿª¨Ë)¯iW¤ò]Nú½å»¹å«Ë€ÙççÔÍÍêÈîðÃ!œœ¬ßÞ`gg‘’”vIi8îæÆ-!Ii]Íè5$¥‘´(ù6’"íLÃÜ|%M~ª2a—…CrƒûM(×Ë“™¸;Â÷Ýû»ðD“¦dÌAwêÙk ¨”ÿ@r¨<íd€nËÚpgö=ëý;Ù{’ˆÎyªžíñafQÏ"éégkÈFØózˆ£óÍÎôÔ½ªõCÍ©m£í35®_ÑZã®l¹o$5«­}ïšÚÚ÷´¸}Ôe›”«v8·÷KE,,.k0Ÿ&f>m[eÏ~Æ®!*ÑlƒðY°ÃµÉ÷´ $ŽÒ¸Y@1–.·[ÏôqýkC­Ùp@ÁÄø·×0"'«ÚñT‡™«šmtè0‚6\YjE3‹ ™#»Èä;ñ”Ü7q¶‡\Âàpr€NkLÐÞu£Àó:'ÁFîsRq´oRÐá¸!ôé«¢ä<Ï€Ú±yà¶'h&VÓ)— 3ɲzV´ÿ²ÔñËâS×/;jTL|få„ÈÒZ“Ç ÒÐ%L¹qO¡ãÀšµ»ÑP¹eÕ´»ÛE°S×Ej¦Ï°\‘¡Ä!lÃõ^w‰zõ;.¢ÄQ˜„¯i³ä!QÐ,½–Ù9k°ãÀŒúØ ]@ñY4­ÿŠÏ¢á`ìj©ø,´{‡X|Bñ9Á­Ö¾©rû WÖ,²³`\}eƒO@ 7_Y¿¬™>AÛ—EúbÑ&”‰;Ñ×Þa4ÈÒD±i'Y“w’MáŸ?•Eë¹U%)DÛK$5l±'áÎÛ­„¬q‹=¡¼ºmöi­±Î¬²l·­&-î¶–o±úvÍX³ ¶´ËNuîæ,ï΂7…»5g5Þô¡b¸O“ý¼âoÝ´rN–,’ËhƒÒ.v]´Œ®áž`Ú¥9£MíØ•£©¾­üE`ac#~†~êybŽÕTy‡ïL_GQÇ-þ^:W/MÒ–n¾9§·Ðfùɬ>ÛË"U£¼ ¸ÐÕ¸£:iCéfn!ÑL+ÛSL±{¯Ü–¶ W™kÞ{²Eh_”Á‹_N+¼6“`Ó˜æ/‹dÒ6ù8[]P !½ðÁëÜÿðߥº{§“:Y$Å"ÅK0 òì@)˜dòï.Ñ@¡á¡Þ9 ê^aÖÚNcA}UÉXİÂÇ£‰ +¯1y'ˆÛˆŸTñ'È^ãŒ;ÁktEž$Ö¤›üH¾™»¡“]Èd(Ï%¦¬4Ó3°{ŸRî X†¹£lÿcæ –¬/á¤lïáA È .rvQQ_UÇXýƒ°Cø!úê0éRA »¨ÖYÉ,]­»¡x¹ v7ŠÄZ±»­"Õëö°^ìnš¼+d±ÛP#+v7´Eè9ŠÝ¼; ÞîFì–6s»=Ü];j²ÿqR/Þ÷q ËJ4þoh{iãHû¬žwöðÄ"cqb_-¦ÝUrìÒ+ÕÎU“g5y k¡»Ä¶€ï%”©Š…¶zv)MÉR‚à¸SòZJvÝka—no™:ÆŸÝ;x²M×{‹:‹ G><ü:ü¾;€M‡/­Ÿv¾óxí»@òH"uÈÌÔyäÉÌéÃÄsɉßÙ|ÄD¡îûUÈ SPc˜³Ö…[u’×a³o³ämG/2ŽÄeíxiò³#ï!zzMBå€Ã­|ÁãÙ—— ;Pœ Ö”zÙƒŸëàNz'òGå씳½³ JgP˜—Î$ÓX:“œEÒ™¨6E%› TÙC:3—Ù´ƒtfàÝYðbéLÔm°ôîÈ(ê8ï›§§^ãÃôÔ…:äB3–#µ"æF–„»8²$ôgoäšÈ’Ú‘'ÌÝ%Q˜{$€OÆëv§ùëCÀ®ƒ”‘DE¬ª‘’ ì¢:å!6a›×êq‰dzb,9±º€U‡¨õ¥»áÅ J_†KO1píŠ`öh9@HKÐ( ³ŠìWñq$†9O†cëì)‘‘~ÑÌ4P;Ì‘ÐC¸À¬Gp§W ¶.k„ÛA‚ôÊ”+Ì{‹¢àìiýÅÎ Òzż—‰ÇÐÔž²ÄÛÇñÜÃQ®ˆªlŸ”>$¢²33‹~„A8V¡ŸÚ g^ŽßA&o–b2Â2ŒŠÆšF‚u€Þ-GéÜ…-ï'ËÈ•z$Ða Ì¸?C¯ªD¾|ÑAe…]ÜÙØA¸MF7h>ZpÄjck‘Š‘”%ã„ëOÀ ›ƒUú< v—?òvŽw%ï쌯¿RÑõ÷¬TäÕ„$Ά;å³@A˜SAÄgb æ¡zÜÄió²4/ ‘ á¨;{²áŽš§ÜÜÉX_ ÈQ}'€ÜÌ#ó¢†KzÃPñlòÀÊ‹5¯@Gpºþ"˧ëI-; xELbMM[“…(;™3efˆ„»Î{mKƇ:Lšñ<Ä…Ê©GëåÍ!›ñáDÕ6˜'1͉Ãdâ«s²äËð–Ázò@CXfz˜DÄ,kñŽMÑðKˆ½`t(’Ÿ¬ªÖ2àOpó;‚È3é}÷líàü–óÿ®)ƒËN”ÆËsšÒœögX`”ì|ö‡±4ætV?¤È›¬Ï­­L,Íavw}ÙH™lš„oEÚ—Û¯Îì×èÁ;ÇàËô°ó©¹eµÞMèídñ›ƒ5¢ó†ŽÓêy9¡5~eR>õ°€ ™WÚJ3ƒ*ÝÅ|H´*&HÕ‚ÚÚš|¨‡ÕO´óhHwt‡9eÄVX\«À“4cI8zk­`XÖ™Y l; ÊÆÖ’Ø´ü0afãÉjo[}ò•¯ ‡Wµžþ:]ÀÎ˼@çŸ)_‡û(Ö(òl(5ž~++EŸÑt.¥9IûRµ¯(¼W3ò¬™žY 64o.ú„>)ÞÔþo8kI­7Å먎ÃðDìDÑÌ8ñHÔƒç`³ŒcÆK7Éd°ùœÍz ÏÖÊìxéE3z»š½IØ ­ÞßÊ(`Dšò'+CûUËówoÐ~có³TØNuöFÚ1=co wÃ5«t°ôî©‘¶=œ<2ÒîÏ]o¨ÚºNb"—t%'Ye—ã(iˆ:sÊg{±9îPW<®Ð“ˆÞ41;ÈSËÃêžFÏ5OÀlшIÎèŒ ~ÐÏ(¢;Hð–öR>¼,um a}Èy™ˆž8 JƒQÊ\Ûv$ ¸ÉÍŽObÌã‡EÑ3cÌó1 ³ÖéùŠò†ºu–˜AN¥×s*mý™”Si¦"ס.8~Eº¶ŽÉµéÊǰŒœ;ÿÑcLÿ4Ì‚¢í14'^oóŸ: oi§Iº…÷:ÖC½¨I\jº©ÿ7ðGh9 +»ñzÜxí”а ¯y…‹Äš08Õm)ЍÌp|‘›§,Õ݃”†$ÙÙŽW½ž½c&jçÁˆS˜Zµ%N¥U‡ù˜Ú šåZ[Ž+­é¤vYAfÇbœÖ‚J~dpÍÛrË&ŶpÑž”²[Xš·Õ¯J s¥Û€™ôïäÅtáJ;¥nni).¢ƒ¹¤¥¶Òšƒ2> tžÂj’ÏRô\ ©šá¶§Å®à´gJ,õ\µ´à¬Qm¸§Ïç‹.~´œ—È" JçGã°nV,Åâzb“öf+†dÂSrÍ·Ž9ZŸ°˜ù€Þ¥ÉÀÝZÈÌ›´ õ ˜ù~!ÁÛ˜9 âõºÏlÅ‘ò Þ™¨éÝx± XS‰2½i•Ç‚ñê¨kj,uÒäL¡Õè»èâyt’cûwýßPU:£í;­7©œVZÄØûc²¸wJÍXÆeèãx¸_ n¸ÿÖéÚÈÌìàòˆÍ¢}jçô¬–¾7Æ8‘sÙœ:ª6͘òâd½)ˆz\ J|rj8 ùÐÊç(.â}ˆÄcÎ7u˜›^‚Ùe¾‘ùᔚĴÀm)?YBF‡Ù*^UHɉ˜Ö¢ Œ\ŸMÏŽ{ò?Œ—pñÖ´€† ‡3E-4èü»”§q[‰ÖÁ04ö¹ªE‘[!³‚ºrëy'1L¤x„I ÇUBI«%ñ=¯ã!E)YÌÀ©:Ë wá~pp+ýˆ³ FÄ£,ñkÁ81çø†Ú¨[þ¢²µ¬ÃÍ+ÝHI›‹x(Çœ±«¯ß-cÎ×PthíTÖ8k;OR;t=»l‡nœÂ¢Û8Ý@¶[ìÐmEC§ ìÐÆÔl–g8{;ôÅÎ-…¦¨kVÕ‡ ëhNÆþxûŽ:DÎhµ›žWŽÜ/×NhQ»~‘z9<¹)v÷"g»=sp©ë¸Ö"Ô×gz7ÖU•p!rÝ˺ï-:RX]¡»š‡#Gï°ì;¥°™B¯ŠÆU\ªç>^©6,:´lÎp Ùòôs<(oŽpQ&GgúúTÞüÏW(øPg «Çã3†èž±ó)¹X0O^uCr"¥©"ri·j38$ÜK  ÈÚyrtZ ;‚Ë0é\†Ê.d¥Î—²3ÃŽDÄksóöë,O¯#Á'µe SG¸w)“+¢ j6ÓFn‡((ëìdv#š&ÎŒûxw¼˜û+Æ‚¥pN½³—pÿÛ?';F.™˜‰¦P/\M¾Šþ†»øÔ6G®—C™A8KB…òÚµªæ‘W­° |knaìà «XBxÔ]–#«¬|Ä|ß‚ÈW«à“dm†B½Q:“-3)ƒôL¶ á†Î‹E’”H¸hn­D„ §  Vd}_f׿³°â`4°˜Ë. ‘œátë©0–‡—Í|™©ˆX ™/•él!Kµ Ø!¼BE `áw¢YÖ`«;ZRkÇ?A3˜%0sÂV V.´ºƒ¥’“³j²ch¿UÊn™§¨ 7²,YL)mD*ªžÇ9æH¿¯E+é1G!ÎF¬ÂÎñêÉNTÕ2¸‘vŽ_5Ï´³ð»(ÖAëC–á…©CV>“µ¶½ >s«#½ñ|£…ðe"D…shFvLO3¥1‹a6XZ‚¨¡¬™zq×iµ²Öå 愎³Ÿ_ x(ûj{)#Ë5úK;{ ±þ¢8¡\ö~(Ù$•r5íÊl’–5)™·I‚DÃMÅ4Gµ+–ƒ™Ò¶³pLl•Æ·1€‘¢âT€HŒÆ}²êZ+ÿ7ðÛ×µŠì¢ö™lÉ3å+û[¹GÕÔmåh’Ct<,PÑ-"heUoÕŒGï¦àv»PøPÇ’nŒ‘X;YG€ªšl’ŸÄÜþ¢wëgK™Æ Õ³35%3qaTd§í"#ûQ¨³ Wä;øÁB'(§¹fÛ6šíÑÓLúÜ¢‹V<|±÷Û`açÀßh™ùFËÜ7u•ì|¹³8ê’¤çÑŒ>=ɳ+ÖG3§š¨%Çea•I}žiËõc¸õ¥ÄÉå,óLèD¨1x&];Œ–ÌÉ%ÝËì!u–>_ £ç$Å;mÔª>~ ]Ø6-:Ÿùð£§D.LÐ}^|Ö €Ó†³–ù³—6ž5” ´å™ ƒWT>˜‹{H âîý›¤o3‰H¿`©ÀÄH´Q>R³(#qûéXûÂÒ•r¢©¤+åD´KWÊIh81“ø~d“®”§+$¹ ]© ‘:éJEºR‘®T¤+éJEºR‘®T¦+•éJeºRI‚ŠÒ•JPOÚ©§+•éJeºREä*ÉDY׬䑺 †fÍä­ q6. ÕQ¿Õ8õÉÕ $|Ÿƒ ôÍ8Nåÿ:Ó ù·)µ9þ·ÒÁOÂ|+§ºsý7d­oe³øŠ‹©Ÿ{‘ _ÑØ£7£Uµ¶ßõZó†™hêI«òÁÀÜ™“¢ÜCøÑ -Íì>ÊyœLY.ÝÖSðDê <3Mž ‚]]6®³Å£à`}å"C“˜1…5v[Ÿ.mùšsW¨è(Ç̆Г¥×uc ½;2Ù’²[µÝ‹âp‹5¾v "ÎUõÇ~5‚¦Jj¿.Ø?–Rxè9d]>á«Kê¾NCã´6²E¾0@"¹}VûF,«ÅÌ:¸`ÎTŠø »Í…­lÛ­Eß ”ŠN¹d L—µ·gÈE¥¹,…ùJü„/ŒqúÂìLJ©>ØY¶‡ù!¯"ŸöáÎŒÒQççòüÐ{n”'ÑN œ7V,ð$¢‹E%%Ê]ãbjZN 5f¡VW1ÔÚC\S>\¼k„‡!ÂÄüõuÌÇS‘Ê. S” ˜²ÆŒ&1iîîL̵¯,Uœ‰˜Bä,&µLB}=c÷½3ÍÎ2h€$†ËV' Xi¸7HÑYÈ G‰õÚ8ísÈÑ&/Ipš#4KÂøøJ¦ÖÏz'/Üp]Ù©Z"SÛ žn7,ù̆۹ Û@ˆÙ ÛWN»áÖMÁ©‘Ê­ü¡Oq{:iǃ©TVÂgFŽ •Ôë|Ãÿ 1û×sñêÌÔÅì'âÂÿíGoG:"+F|Aý³&M<•ÕÄ>ÄôŒ4[èŸÉ:yÖo¿eÉx¢QŒ4jhZA¿•`¼šÓñjI|Z-î~JÿLT}¦ÒýŠVÅìÒ<« \úùƒi<­èšU-Óg­f)L{XÉŠ¼üuM7H¶°bV U«jú­®DºFKú¬Ñ¯òdAMÏ49ß¶­™·‘¦m¥é3F÷š}´Òç$O”izMÔØ£²°âõ„O Ö?þ.ü`:Ý_«hkŽF{< ðC‚ûPQœ®Å} àÐzü¨§ñj‡oîœdUŵÇ=|«éZGôôóêi<>ëçÕ)öt§’à=J‹Kïfÿiÿž¿ÿÓ³©`€3‚4ti¥&t¢©5y¯©[¿Kê“@ï‰ý0zej²’•š3®Žåú‰Ë½_gý»3EC°Ó8ò~„Á…Y1[—%“å©ßQ4öÉË©Ú]˜ÓÜVk„¥Q¢HK÷)†Jg‰±CÉfëQÛÓlàpA‰JjW‚:X5?!dfmCågõj;$¶}í¤e±;G#Íp,kcõûD'îÁ Ø#¬ÜB ‚‚áå!CQAÒc–¨ú@g@žúîµ×óU-Ïp¯~©ª_?ÿôùËo?›‚(X¯$Ïðk‚>k5}Ökô=•>kz ‘×4y >«jº2¾¤SJ°²šƒgtx¡è·lAôÜ„>#«cCWDú Ì«ÁIÔè8 M¶QèÀèk½FwÆjº3xþ5TSÊP¬Ó6 O„¦Ûàè=F*(ðz€diÐ3°pB¤ÒTà5t`8F‡ë—ð§W¯XÐd+¦$š”.ÝmÖ€MPªÕHtd`-@€z¼E7}¯QàxZJû¡%£ë ¾mZD)D•>£ ¢/±&O_|÷Íáù§Ï¿O_“”BõjGúHõÓ'e+øìyÑ ÈÑí·‚/È Bš÷ü›§_ýÕ·/Æ-@2ѱeò„#X,äy6<@ÛþÛÝ‹›/ž^¿¦/oï›Ë\=ûç»Û«»»77×ÿ×û«ÛߊáÊšoƒ+§°t ]6º J½é*²­(p7NA !@)A?®è‡Hê{èù‡ÏÀ/K›1úùûŸ6-`Û“ªFB5¯¢¢aÿŒ²“¢]u÷ù›Û«W÷oþ㊠ ¢99ñ’3’6#¬®œÜ)$D!ãýÿýóþ‡ûaS¢Å_¯¯¯îî¿øÀ’ê‚ nY•‡2|JVÁ8ŽöQX—ä^²²ÂU® Hrt@Ø^tQžXô¸ºý“Ó‰X|2X!ž¤Ãd9B‡KƒS½†#]´^k7DöÒOCVSt9³@ûñFÎ€Ì n|Š\Ђ..š‚"&04 ”Ɉ•YZŠÎ }ÐRêÔ.#avÓ‚.k㦑®¹i‡ÀÔ–]>¶.¿hGP¡¦: <|ëÅ_¿ÿú™ñGD—ׇë›ûÃÍ»!æå²{<ÿ·û_¯®ÿõÉáÝåíýáÍõÁׇ»¹í²ÑŠ"›Ðçöýß}æØ¹ 9zð7³ÚƈôÜSêFš@sÖÔm%›Æ=²¹Â8=m"L@O3š Üúÿæý»Ï>íÿùÙwŸ?ûûÓž=ýûóg_~óìÛݧ4†hA œË­ÀGk4QK»Ð0“Ä—$$ø€«EGub¤žq>üÈ0õK÷RÞ•å^E˜@õŸ`M5 âßLÒKÿÃw?ñ¦»:\}š …0‘<Åh!1Z¸|^É]à„l1Z4«Q! 'šÆOëÌÑðÔ!ºU¨_›nLQâ'«ˆçà Çó%È£p< n³9¿ïÞß±à=RÈ?pqŸäô:›*÷ÁE δgf齤².犴 ` \æ«dzrTº@’æY2MK¦)׎f%Ò·—×w?ßܾDÒïnWJÙPÜ.eo´“-ì‰ Ú`AeZp9`€Ey«¼µE1†>+èd$£oœ¸[˜wœìp«Ø³Ëì|Ö]¾¿»º[wc$pgl¿1ÀÇìÝ*£’JàYÚª}µA‡&òt#)z9Mé`ÈM½tÀ QÊD=5à-àâ7¤ÄÅCO(tÕ…&=Ù£ßóOïoûöæ5µl2àqGö5h1 ÎFðh#H‹Nº0´ºO‹­’àv!¤áð½cN¡pmƃÏP´r5I®ð[/g1‰(³Ä#OyQx y{¨Yê¦êñãíå?®¾º¾¿ÑÁYq¿{õêýííÕõ+$ê±%€v~º ™ßs eNR€xГäÒRÐN6.ewWÐåÝ¡»üéª;ÜÜ~¾º¼{z„®o®ï®®ïÞ¼ºì½¢~¸ùùðndwÿ1¢g¡cûfìÝ›¶ »Õ:PĬË% Ѱþ ®þýýå`ÙÎÉ…ÂöC(Ô@wؼ_+²wœÅ.A =ŒÈ¦_¢S!-ŽO= =ŸÇõ¼´²IøByÇ_tÛGnAìã®fz”³²³,# ä$lÇAøæºûͱ‡»!~àß^]Þ]ýë“ë›ë×ol¸ÁapvÿçÕkt: `$kç`$—cíÌ€,”©ûaHWH(¤l½EãGÒYl…8ÓÝ›×WŸ¹ó=oƒ˜M8^.’´áƒÒÿ|vÃ`bº¼ì…+Ü&†°2|·¸1ä™+´u§_È%@dëï²Àø‚`Œ×+Wžóîõä“·Žal9“Çî ÔÒ¾ÍèHùÀUv¤*ð¢}>}÷®ûíûÛ›WÖVªµ†©4•ìôÊù/7¯IÞQ©a`í "ŸùYWbkY*P1¶–¸uVl¡*¥VEòm9›.9€ì6åz†æ(ý¶t<@SQ`aêþ&ÒôÕÏOoªö­C]Ž¢gŽ@Ý£ïa²`§÷¿w5M£.È[ÊÂjòÛÃIŠ'…FŒi`¤2Ç9̽žw |k„è'Öññç¡ å“Ù1™©Ä[^š¼<Ã/®Þ¾+"-ÅA Ž'€Ë (ø¶æà˜ žaÎÑãdîóÐVe=_åe3¥–#p^GmÐ&Z]ᨠ5΋Ží3¯ŠÜúÇdJóýRÂr=ëmeelIØÝ=ã,—w…î™!y0³ÝþòþíÕõ}™w†ge*m¯vCÝc=OZNn€íÕ‚½nÖš¸58’{ õ…ÁƒïÆ,¯"ô]&öÇ E[E‹ûïoîýüêçË÷Ý=] J°†\—K'ˆ?f¨‚ÔG@/Öœ—Œ@²8¨”ˆ[D¼ãôƒH” ^cCŸúìh]xâÙÂëDT¸èT_:r;HA¢§wŒ‚JAm¥äèÊR”€íH8®4P¢iLj¦ w3ûAˆ±-¥¢ÜJíÌUAé¼Ý§Eݶ{NKeÓ½%Ç·ïïî?]^¿¹»sýê>½pèÄKã­}k{_þzuùzg©±DLg'–0‚óØö—7ׯ·Ó Ä GGO'»AÔ"øœf;Ÿ¤”«všƒ„fWv·ï#Õ\]žqZÍ5êD²®$ôqe|?\Ih-¡¹#4›š…Ê·Á±ægQÙïâÛá“’öɽ+ëûån¹7›V¤i‰ì¼¢†ÛŠÚ©×[Ô r¾YZŠ”ÿ¶¬¥aâ|ÖÂÏ.óí`M£i –¼¢z¶¡Æ‡èœu&•óý®ÙN²kTbfhÂôGØ¥øh›£B#,+5ß*bÙ£­[r[ƒÎÒ£D–Q*²ÊA9læìŽÇ€öÏE kYëõò]¦¯Ñ0ÚÎ=ÂøÔ0ÖE]n>ºV·{xº0´‹\€§Ó”õ^Ò”@ ugÒÐÝ5s;!œÅ<œ'‡£ðtY|Zü0ÕÚÛ|ZóÚLÚµ©¸á_ÜÑ Œ Ά¾˜k.ícÂ܃phTû{£ 3•>·q±šùz*ÀƒëôõÒ¡}ñï S0ÿ ”œÆuÖƒ€ÂˆzU[Ús’ãÎJ–U3ǵ[l¸C!ï;Ô¿ º¡•Ûª [N €]‚‰tq—ÓØÐÞNýõ&rÙýˆ¿õ¥²MOøÕ_œ…‘ñt®ª¡üÙQª>GC«ÚYgïï€ÜjÖÎíð!Eèî—÷ þpâ†V«Ìò¿M~zÙ‡\™ßvâz퉂zÍôŹЦZœ<€bã<†ÕówêcÝÕ|ÐÐGº«¦Zâ@TÞu:4€ÎA`¬ÉrÕá\˜Vh\_0‹×UÁ(|q=?J€!®N} †4ÔDïØD±©Åñ©MúA[ù! ᜗öÛJ¯ý‚1²ËkPjù¬!äo“ó•ÜÌ—áb)^Öú¹¬ð^.]Öè^¢û*ÒûºÂyûx_g﫬ª*vu¸qgNá™+„!‰Ó>PùÓKà ¹\ü¹B`;!ß󷫇’¤¡ àÆdeÃÔñøžERØïàxì—­=È‹ÛðÅVÅÃÕ7Ôj°’”ð{{-h< ‰°k™ßÈŠUr/­Ÿ›Qã܇äCýЦ'çvh§W:>¨™§ßáïP‘_T@ÎÊo¶S\oÈÊ|}¼!«‡£ü¨âKÏŽëB{NnLÍô{=Ccª¬–~‚~¡€ö¡X¢ÝDE#De—+caJØÛ_ôEÚÿuhÿʹhËk1ì͵€•KÇÿ™ÏÌÉ #_†+ºÅ2ÞØ‰Øô·ŸÁ("æA¥x¸û¬nÈ3VÉ#ÇgMEŸIž>«#ïUC9¬dŽªô[IÇc¢¢ßÖ <“doŒ×y&´{Oúg’kú¬nÉ·Z(ò¬©y6$§§ãÕάt›>cµðSš¼7d”§Ïÿl‚KÃÝúØgFa_צŒ˜ê¶%ã©ÖíÍï·Ò‚<ëñ“àZÕ( S.$yV1·75=ÓVŒ Aæ5yÍé· Ì;4̜ޫ, Ôôd^˜ŸÎÁãçô¬fdìJ#œçßVôÎÈx’ÞQÖÖnÞz‚QEp§šÞ›àË)½è÷ΰ¦ï1´f;zú¶rãM°Ò$Ï”¦wY5äÞVµ"÷¶ª[,‰VKç-çÓÐ>UýR{ó‚°³ÞŽaŽØ‚¡™ÃC©='ÜaÂÍAïÞ‚Aá\äûãâ 3_o—Q› ŽMQœæï¸C/â=‚Ápê ãÖËC†¢·2–§ºœÒÒ2a~/©þqöÚ6d¯<Úëßë¥C³×¡¹4ë%Çî#'/cÈõEßÝCzƒfœ”]‘"X‘: ÷T¸¢šº§>ðŠÚR'ò¢ûpc€á´–&Ȧùàkág—yŽö°¦QêÜVTÏjœ´°{]c—û#ìR|´Öƒ3ª>3ݶ¦A‘ÕÁëÊ{¬Œr4ŒoÁ#ŒO ãÅLÍŒ.8ÑáÃÐ…ÁcâöXŸÇ–ëÕœ!îtVþÁå·pr5¨ËBdÎÔ{Ç‘M}ƒg{ û²³7Ђ§BÒDQ¸À’Æ®ÙÚ™$Jå3[PRyãÃ/¨¡Êå]¨~—–²É3D‚|4¤ý„\Tè%0|t¤@h|x· ªg¾Þƒ”Ë ÇìÀ†p¹ß¦ì#œÆ€"·À(PÙ…]£Â¸^ñ^ $Ç(Šê<Š@íÍ‹ÂΛ>Ú„œ`‡ó±w ]À“rÛÌéìA;µ •Ý¥ð ú@)\»š……E«Lœî9\¡Óy¸‡(᳉tÛžÍZjö{gµ<Ëst“w˳:¡ðP\D XôÀp „Ù†­+b26N}/7bã1w±™7Œ¬»ª&_úwÕ>l*Qóÿh`& Ic0†xÄ'O I)>AšÇÂA¿¼2‹ß2ç'ý»á>랇åj¥ÁíØÁ>® »ó…cY†Ýƒivç_Ac‚]¼‹³¯ aëct¶ÆE¨@Y¶g~‘vÄ ‚†­7!âú )5¡ÝHs·ÿÚQ™ =Vù¿ýCægá "† Ùû|š"øVUô½†Óg Gªð©‚Eø |K³ò9÷UF°ªêi¬“Š:,kù•fñ£«¢W°ö¾R//·^^n½¼Ü†¥_¤Ô] dÎŽæ¡§‰U0”"w–Z 7mþUk]DÃ;„ŠŽÓ.ÔþÒ¤Dƒ™O•ˆ ´4¦Ö‹#U²w—Ž˜ê!í Lø¿A .$ šT8éiŸ§ võòrJdÉ tvÕç¶"pOƒ˜î²9/Ž?SîÏT¶Êÿδuç7Ñ`I+¨p©Ü;®·]Ó™ŒXJ~<T²,0xVŒÊ.¨\Œ:©ôyuç¼a/ýe÷•.‚_b@ýíåâXù¨Ysïïø œk»ü šu!õåg`® ‰«Í"1§‹!"q5»ßžkœ\R‡ËpÌKꆥv–ƒJŽ¿Zw´¯DfªN5†-L·õ$o://½‡Œ×™ê¼dS§r£7îô¨ãl€!î$?Ëñ°§àg'XÕj€òõëoî~y9~Á‚¯^º‡ú‚tlwlq¡ ÁÀ^moÕ_nn:ûªçXÑOshKij¸ŸÕDÍ)¶!3” ùaj>ÙeŒfÃÉÝ÷Wõ¹Ý®·½úhÖ m©!$›?Ý^^¿úÕ ^­ÅM ‘o¸3+Ã+ú%^ºJÃEéì½iý—Á1Å‘"y’Üݹ«Ûêq6“q?RÉPÉH¿¨ìû¦£rÿÛw?ñ¦»:\}ÚãË×_=áц‰Vg½n1ý£ÿ¯ç/¿ýÌ?éUOOžóô믿úö…¡½êœ¼Ê8ãé3Ý[ú ëhM^#OÌæâ'Š|5¿Ê§/¾ûæðüÓ¿^_÷·øÿzuû[1$ @ ?9Ž­SˆzùI-d¾Âï((DKŒ¿âÛ`ÞáÔþþyÿÃýðCÛàÏ7·_ÜÞ¼ŸàÄCùg-Ñ·EØôÅ÷ék§F€Ñ(²0øø°‘dC E„a¬¦ãKú%Z! à’P0FwYéÒÙ»TÑCßz]ÁjÀðŒQ¾];ê—V¤–ˆ"]è#S¬ ·Q¾²•=€F(ðMKC‡X`yaºD™+Ô˜5¡ôµsÔ„¾ÿá»Ï/FÝ2Õ£pm¹½|÷ë'¯¯þãªûäíͽ¾»ûë¤þuy{ÿÉݯ—·WŸto~úäÕÍÛwoº«ÛO¾¸¹ýúææÝŸoþë‰ß°þÑ×ñâ¯ßýÌ,'’gbOH¥ÓGut ÀkGŒ;>ˆ¡ÐôPx{ùÏ7oßü×Uîzxç͵{gZ_ðZ/s«þµ›w÷ÉPÇ/ØS™ Ç>>tªaçï»û7ïºßÐä²:á䬟üÕÍûë{<3;bæx¢ÖLÔuW¯îÓ¯8癯؛w·Wï®®_£6¥Ë‹×ÂûQ{sÕ½ÎM+Ü Oßå¦F ¯¢%<¡%>¶F»ÿàáL‚ì`¸_Ý}{sÿåÕõÏBBV2·{mNâúþÍõûÜmdZü篃¿5óÂÂkÞtž ®ÙϾûüÙߟþðìéߟ?ûò›gß¾¸èÆ0 £ú†ÈÓÆSJ+à zàIÖ’5…¡.’¡$ŠÄtDñhöÀýÍçü߃7ÛõJ\ÙxF‚ŠäÅôYÀöæoB–@lø˜1ü: ÉE8Ly=fD…KÕxŽ6³T¼$ƪÌs<<30]3NnÏlýž3[^{ Ù½åÖšŸU«÷ƒFz¹T>Ï!Xörx­· dn’ F®Å¤ÜûkÇçv›0Ræ ˜YTî€øGµç u[KyrÈ:G‘V®5’WK(qîÖßôìÜŒåî­>¤ÜNr§´…D¬¹Õ9 ÌŒÏ7afæÖ­ÄÌì¥Î=_y!Ö#2Ï\à,ÁÏ@;{ +¥ƒ-÷Af/vn±kÙúÝ\n’¥Îm.GñçpoõbsßB’×nbõ¥Î,–çnonòµ·}ˆ¸Xú\¯¤Æ'ºBëã!kËcÛ€«<èÊb-ÙTÓòxeÃÍ¿~swï’Aî®î¿¿½yuõúýíÕW?lœýÓ¿<ñC?õ/kšV$â<E”Ž¢A.Ê–ÕÔÉ8CÆ—„>»y÷Û¥Ô*ë ¤ÆÿvMõs<›àí ,5 |sݽ¹¾úüæÞû"I¬h^EÞìಉ١ûTñôø‡ìï(“Z:›ˆo>ñFŸÂ Sµ–Ë}Œ©PáîÜGÃb¿ìn~ºì(EC i¢µD{àm˜ßjònÄaÊT 7áòËux."gƒp¢!S¹’Œ×Á”&åÝ\ŽÐDomrc6Ë®É÷õ (^IR¨¾ æ K$¡ä<ÛáOeÓª²Æ¨fÈqé!FóŒÒ.ùm»5c´ŸkS3¤¹úw˜7C&ÑàvËïÿ% ¸Lj ›ÀåócªÜ‹U-† 5&@†yƒ±mO„ÙrLãNNlµ|…›7¯§k›fâù‹vîËÉöÒæâõ™÷ヱW¿ÿ­%Lg˜‚×u3å²åa2V;fÔÌî’ûŽš³»$F[“`öÕ!æyÓ MøÍ¬™6ÌVûÑ}/ ã’çDHòå6q¤6ñð0¸kÍ8ê—ñåìrË’Ó²6&„’uEHbaüó,(Ó€žÝ€¡YžCÄVB+½%têz мˆ¡‰Á°0±íÜ­G؉£Õî™ù"’7†uöú 儈« Ùʇ39ÚýžJà…WRç ‡’T°™ñ† þ RßÂK…®Ú¤¢&îï¶ëŽÏ“gÃ!îR¥T={/ØìÆšÍ16Õ {G˜Ra‡ŸTºkSxC„‚[“–r#4‰?+OJeP…ÏÈ •÷xÍ$Ûº¬XÈâ=2-ÒfYÁl×”ª:|-¦ª‰c Yì|ëÆ5E´#„3œ³c1y¸´A–]@ZeŠ ˜& 4!?Uð©ÉÒ•DF°"6 «Ž´êñ¡Îż{ÛB`¢½—Ýáù¯Âýq‚Ç×6ò-@”áH=+V)–<’Ê«Æn©•€xX—ËLviÐöóHÞ{~î÷Á”¢}øR,Z$ÛPÚÕpï´Ò)C¦X‹Î´-Né_(˜¡žâ;ªÊÊ®‚1Ð’ ôµ× A}*Ña«ú2¸Ô‘‘^îVþÍñ0„´d†Å¢f®—»ýM "ϸHP´·ÿ‰^Æÿu%2Æ›zXDcP²ZѬ™o¡X†¯ûTcŒî”¼  y Z-ϤJni¦¤”Ï@V›Xß’Gvg=`d\†e’à®!rÅ7ÎÈáØB£ÅøÿøÑk¦Bâð_ºv†ÚˆŸý¿ç/ð¬é–_Ì“R¨Ý.ß÷ gØï¤m7¢sØIåªyó»8¦ ^Ìp^Ý€™k(Õ‚¦qæ’Fª;nàƒ#uq‰k§l)ÏHˆ Ô³ ”Ëg% ÎJ%ÿ¦“®GþFgK¡m¯ß”5;§“7Î<É“3e!µ0@g1üó…cvnž\mÇ.›vÕ/×.–o`z ¨Ýs­¬CV<5³ñà½Æð².y/ª9H`…°APë-ïb…´ d ¶éÄ'TmJT¨Vù°‹ŽïÏdKôrž@:ãx©Ü˃׎E GAb\ÁÕÔ£’YQgŒ ”óxã”F” XN&÷S—}ùráÀw§/ËÚÇëq$$ô ˆ(<÷”#îÿ#ü˜²íŽOÙvæeˆ5®KM!›ž´›X¢(cËñ¿b÷XV¤Xâ›ôÙ£hÒ )ØòM ù`A?¤¨oìIm#È{¬SºÇZANEÒõMWÞ~Q*Å äßâ€t‰g J`ÊÊ„A0×]6ˆƒÆ«Ç1aØ—1ßæÃ"f|•m€! Ä„•æ8e£h]d㩳m-"PQ|Ø€0¢j nrd'\¦”1ûE“‚†xCBLãpüXØâ¢4Fú&¶ÇswÞMpîµ#nÆ!aV6¼¦Œ"jøOT8¶ýýÍFÈ|û>Ú „銹?Ö‘hî¥j+÷Ÿ¼õO­ëѾ ÿŸuëþs(œß™OÖpàB­žø“   ]q$”Uýgh}ü/Ô¶Å´™ÊY&6S&zs±éb}Jæx…í˜ðx✷>àXîv•Ú_”3•ÍᎲƒ§f0h% „¯y~–ÊïÐ S|Rm"Uö¾jŸí£ z3T¥k‹ÀV·á6%Œ#êâHY§­åúJ K8¦ÜcÌ^&r»#ìw?ï0NÙ ¦Ã’ù39ñX͘ÿOåE.Í´Y+ÓáþU@D`0rÕ €Íø§Å—<2B¯ aÒ§Ê þ³/‡„â˶@4§ÙK¤aÅI×S¯á¥§?£Âà MxÃ)uÁÉRÞ’Ù*OØ¡·¬ˆªNÙuöh~&×¼5D½XýG|,`6ÁùAZµGBº1tªnZÂõ¾ubrŠ?n!<»iX~“Yõ!ãŒjØp¸Ž‚0m‚I/>þOd·$?‚~OÆ|ÓkÍ1ÑÙðzwœ ˜ÍŠ­r«ï™¨”)dTéHôkóŠD·‡bº²v?¸¸PÖÊLÐSF¾Ñ‡bÖ «në³­>|µ—H»ä(ÕÆÁšÃÈ…-”è¦Ò|Îa¼¸Ž“ɆkÕ:!r-[ ãÅøúË–´»4½³ÀK•jbPÁCB^ !.Í‘Ê^" ùȈt³È3a€H0@ŒëŸZÇÉxÅUôy˜ÃHlÑÎÚë‚4Gŵù#àUHë—e ” “g‡YXÛSñöBîm/t¢‡Yt¢ªÆ?PŽ:b{D?YÖ ð/…QŠóÚ@;®º_fìw[ð¦ÅÔžã–æO¦_Ñ–/y¬ud0ÇÑê å-˜ÉÖH¼a.g¦á¢ùC\¥ÃsãI'àáÜO`:òF7ÑÊdü1…V KìpuŸ8þ“Ü–UI–be&.#çåBÕ#¶ÐEbtYÀ¼h¾Å“ç|®Êµ\‹7|Hàæœ/û…ÿðÌ ŸáZö5&ÍúÀsy°‰U¼–µûã:Œ=ô÷W°fûOå-Xœ7æbrqÏsçïleý@ž\…w·X¾*OÞ˜!ü t: Q$—yŠ¢æxcFuÊn&ƒˆÑbƒå¥v5Kgi’Ϩ ¢{J¨RtoV¢;b{q£_á8¨ãωÅ}IœáJX”jXa\ùrÈUÁ éñ²T²;Ž~-{Œ2”òµbŠwR¦¦{nȆ² ²ˆå‘ø {öÌT½QÑ.M­ù”Ôy™,5îëŸLõt¦œý6ÉíÌüi\–ÌN„±Å*G&`5Ö6“–ýmŒ>4uŒÇïàý3˜ÐÒŽÀ´kpÖÀcÖÕ™e„Ü"4jLŽˆ*D&‚dÝq*Œy'*mÊ® E‰hƒ`ñRØ÷NÔ.¾ ™4Xü¸¨‰¹»E‘î†8›÷ o)gþÊOSƒÀƒY¹SÙJ1 ™&›à03M…åjö`!”׊Ñß‘Ëòâ\ =Ô¹!üÛ é™þi¼ª“ ]ÃO0S˜Ÿi–Z8’oʾʺÂum×4£èé…üzY +â{%¦˜èÔÕïqWí ª eÝ ”zÁEõêÎïÔµÌøUçõ´ºM€$ŒY}ˆØîRò¯  ¾b¹s |õŽü€@ëw: Êm9cX¹&ÕˆÖü1©mÁðÜHý¯ÄAéÊ•#ø¬6¦#;ÚδJ>_ò Z¤&ã2µ+ë7‰ðŽ…Áňðóû&mH™2#ηUÔNÆà)ç±rƒÅù„õç¥ûa™YÕÅ’t ‘ Åš:ØF|£¹u´ýAf EÜ¢Õò²(R å!ãó0Â:^«#ÏÖ¥{@¯¡ —u¼£±@ÛPÛ@Šy¢¸’E,0‹¼gévcåjpEuY÷Úƒ¡0^׉Æ'ã÷ŒZ›s}>˜À‡¥@„Ì Á泈-ú€‚)–¦55LJB·’5ŽMÓ<­&ú`HØêÜc`ã#UV•^bEµ‹RotÆÑ4½TTÈ/Mt3>kf ‚±u‘álí6rHCÏ_‚SÕ<' †§djR2 *ØýqU<$±:¡çƒFÎÔeª5ã°hf°ÎüšAó>PÄe-@»Äc ݤK$ŽBü¾©Eú¥Ó…ùŽ[ç­—ÐáPD\`Ùb9¿ì(i8Ž’©àÂ1J¸¥ZóždHl=/ ÐŒùƉ¤Ž¬3 âÄKÁ›ÑšŸ¯HmhƒÍx%©¢‚×ñ: –ºÀáBb\w䈦î^&eáQ Z¥Í’¼«°ô|&æ¡¶Åz³–ä˜ÁgêëZq¨?ÞpoΆtõ!­ÈYEŠ—«:8ðì³WŒK3´¶KXq:gÞ¯ìëc“°;iÒTÖ´¦Êô"•郰óxØ›‡¶]Li§qEÚ¡ ÚÚœ4ö~bˆÛŸ_ßÜ?½»{óËõ2þå«WïÉÃ~_O£çÙû˜;ö¦ùç}~†\“]g½;Ï.ßFˆ ÓôêmºÚàÆ0]Ê‹/štÛÑÊZJâŽÞµkÍtœŠæÏ.ƒn1 J6¢¢2„„´mGÂz)çÍõ=%c€ X"ÜÈÎØÆ3öŠàåûnãÄœô^±Éê`-¿ D-c™WäNU!d۩δ­‚Mtoî6‚’ 6_€„áýÖ?ûõ_ß|nñÀðªôÛFQÊV@$Å0R£(±`5Z ø0k@LN¥å©´’õ"]ˆ'¸lëãHÝë¬ö8¼ó„(”·Ð­|Ü‚|kñî³›ëû7×Ô¬˜l ÌÛPÿGÂ=´\­uM˜_ EV%Ÿ9¼évçåßHЊèýõ?®oþóú‹îò—‚Å dTgú ],döÞÆ¶ŠxâNª%å;£ª~°W70-ÙįÄJÔ`¤|o´ú±=è5~_Å„¡˜Åê„ÜÃy‚¥ä“Š SshXd‘@ì¢,ê’ð/¯ˆÜ ¹)‹:( ¹á€€ºRH ‰Ïv•s2HÁ'2›{eÐ2Þ¿ÛN§öÕõ3ù—ßrSžË×Ñ’‚ƒŽ:zf»yºl6QJ¼X~8ð—¸höãmËÛáJH_rîdñN}vó~è~ù+ÀÖ¢ÓÚzèn"d¢iáðe«ßzôP%ÞC€Bê%k);ø2—þVƒÂÑdŒ¼,©$ë_þ?ßäûúf+^¡Ðž£ï[ mEHüä…릒Ù%•"bk©ŒÎîp“® •Ö1ÑrK÷/@ œhRb(EÛ%ý|s‹´]…wݶj£ƒëáòþêõNF¡þ¡’ð¤x#ãTß¿¿ÿ‚®’nS–ÈÒxÊ»_Á]‰ðç³ï~øüÉj¦ûóOo$UÁܼô™¤Ïxfˆ^šú Á{õÌ&7ý×8Ä÷?|÷Ùpë–)ÖˆÚf—1)uÓ*SÅS·µÖ­É‰s9°.C­3]L_SÖ¡MAï7¯φ4ϾûüÙߟþðìéߟ?ûò›gß¾¸è>%µ´ÉZ &òH—žs aaêr’TdŠÛûÒRQ)±©ÛO¦ª )¥ïÒQ¹È™\[š€f¾XÉš^**ÃG(È£„†˜3™HP"ËSé°èn}vóöݰ±”ú•ú…U‘﯄üå&Ø-u·œ ô#踢pÙÉŠ "ØvÛ©³jâ}‘T„l ÛÐDþ^±“E—èë››¼—Š|Y{Y= Ç¨èk9MŶ979ûf‡™c`Ò¤aòªnu¯ÐÕù9˜a\îÜÈ–‘FšèòOþzwu{÷Éíå»_?y}õWÝ'ooþëõÝݿؔÐá_—·÷ŸÜýzy{õI÷æ§O^YRxûÉ÷·o®ï¿½|{õç›ÿzl¡œÚšö2X72Äw¤íãÏtõºÇ¤®~vyþâ‡~®^‘Oš–N~GúA.Ò‚$Ö «©Qƒ ë©Óe&õ4íg7ï~sàmÚ=&tHpƤ»’äý!íYóðxRy%,åѦÜi*»ôC©¸K¡ËQö‚ŠÉÉ{ *bÈlÖ•J`<ܦð•žÀ6]=R™UC±ƒzÚõðh8zª—æ¦;qîÛ÷oººuiæMÒiÜIyžžÿ.®•󟵤jß°·¡XË‹1ílߴ®N³Ç9Kж«:>u_ºÙÔs§î;bMÛ®ÝE™EpÖŠ1Ù~¬ î2ÓpÜ£Lmšº Z/3=‡ØzŠŠå6dàMÇÂ7TèèÆ±æÆÝ“ü YÈyš¶]ê¹f»iÕˆžòÚ¶©Ä⪢”¦ö=ŠŠ›ªƒ`3!”-èÐ?#•m›æK›Šlyá„ ¦U4SfGªå„ãL$<¹Íݸ‚ãÍFeü!Qz¹køö°¸b+àÌ­ Wú8íºŠ¶¦òfÕæþ2ø2S²2*.’g´¶&j»¢x7Œh¾v†©‰?Ó*/`—Óº¹¤ŠývÝ\ŸËÚ ‚á€õÕ¢4Ø Ø’·)wáêGåîó^!~uyw嵂ô+`éÌ(Á@£ÛvtJú߈à4øð”Ä’ öÏÞäLA6Ú) 6çŸõR®b!xždøPè¡—€ëØv¾;Á¡Ôd`¤Ž†±¶' Aû¸‰»ÖVÒÔk…1Ù‡FƒÚF¬o7|vs›Ú pÖF¨ÔšHöÅ—XÉK¼ä%kà}%3‰Y¨€D‡)>kÈ3k¡Ižx2/Ïæ ì’ à—Qt<©ÀxŠƒgh<àRV¢Eóø) )©DÁ{¢A+¦P‘¬DSðšŽÇ°> æÕR @Ô¦hŒÏ›׈!Pó?Æ:uß½zõþööêúÕ¢Ÿ}ýôùsoç35V…®ú»ßkP‚…¶ß«fM#œˆæÕz ÚɮҲýòž^_ßÜÅ£e~þÕg†Y…@‘á?T²eY±mƒâuÓK·ý˜wéÛþ:ý%7ÙH# Á:'½¸§•¦p°©`Ù¦‹ÖõqÒÁp¤’1@ õÍCùOo/oÿñśۡRH¹Ö´ànƒmÛs*Áa2}àZŠŒhÏTà“ÌöÝhêðüªûh¤Ùòݳ~M‘õkfD±åæjš¾Lu†8h:z]ޱòsug*Ž´féÊb«JQì“Á¾´ÏšÐ</Ê-ÕáÙeX¥Ñ¶yzïÐ Ö7u_Þõ§õÍÝ/i M_âÔúö¿þTÿÏÍ=ØÆÿ­1 ЙAá̤ ä î>G+QiÏÕ¾+Ä f¹ À8ˆ ãahVL›€}ïþ®Çúþ»a `JRv~$©‡òTÿù¦{ýêòöuÑXR·™±ÚÖ¸ßß]½Î½¡-ïêù@Ñ\%TÃÜΉê$¯—¨!pLðž‘tÖñJ×R‚òJî˜I“®$¦«KÏÜM‹ä¹“oXî|Í/¹Ï#îds ·µË ¤#¦óa²eOM$»­îd9 VQ$ =Z§¤1 ü™GÊ=^Y<:—@ðgº€X|±6 9a¶Ì´Ô\8{Ùƒ(dMð½l. :k_+V_ÎWÁtu(R›ÏogeiZΣ²t¼²ÄhÒñDc…»Éè¨Ö-˜dYˆuÇ™câ5¥¨ìñ=Í1øútc/é¶¡5CX([5¡6/ÚètYþ—PÜ52k‰ð åã¦ÍNÈOYÁ»­Ò×ÙšXÎØ¤ Ñ*°Z·<ÖöGùv?cu°’"‚ùh¬£.iäѤÑä*•¢–>PÔŠt4¶lµŽ7RËIð냩Û0„p'#u‹\!Ýiƒ*†E4Kœ"Q½VæfßFZc•¹]ðÜÛîH•ywùÛäÝ @£ôóê׫Wÿ°~Q šÇzpÑ/²Õé/à L%Œul€‡ºOÄL„À²V­ªè®†Ðø“ÛîQŠu°".ð¨XñýÈ/u#PÕ ™£òut¦,ª)°«ZÄ®mŒ j=­Ç‡cÛ€äI›ç8þÿ)œ†¹pe40à}þ S þ%8“Í)䋈˜ÿU]$9mú´\Obk@0áøƒ» ~˜Í®Ø^üëž›µ‰ ó’iTEÄ4FK—3¦2‘EJ›Ëq0±87×Ýoýÿ{uJ©ƒÚ䯷@Ÿæ´”pÛ€RR[6‚ÖoÎð•1Ò¨ óèëC›‰€R•©; ‚›ŠÄ°¢åD;PɪpLPóÃÈéÖkdxqbÕÃæP¢ªJf)÷ ;R7ôË(’ uC§¹=׉+™X{ x(“óx%ðj›< ¹RÅpäe¦åð¡D3¹þÒnTäT•`B©…c"Òœšå•^#üUभfQf`ª±çNú—(È´ŒG ²J©ØÝº¤ªþxŽüÀ<:PVÏã•ZÀ«m¤> äJvIØz6a>COêSГ|ÄIQj(3q²Æ¤ÔÖá€Á?";‰ªštÁþ—Ðr‘š”ÂØUÇ(F`&–˜0`EÉ$Ög³EP {‰,WŠ­ˆ„àÎõt¤åêÅo﮾ûù°èQ,4Á…F;ûË\¨ÇŠ]å¬ö1ëó–(9$ìîöŠî¨×ÅÍ?¡&G-0XË/؊讣sAxÅðŠÍáÕ6fEwd‘+±>%v_¸+Ç,òñQüF¼YaÊÏu€£û,ï¸Ø2b7E×ó\ž3E¡–ãDSvi3Èð%²%J…æI|Ö(AMtT_ù˜ú阗ˆ,¹ã¨Pr òTHP*äìèb ¢â¥*júÉÄþ¡%Šæ4Z¢X.´DEJË6ÿ§b+,1|§Àæ·¿ÅaÍù½ç"Âí/ûˆ‘"gv°ùvb$oœÝÞNrd°ˆ"êþ(GzR.i£I¹Xaì€åÈéL›y_&³ˆµ‰„7¡3]>ŠS©2I…ŠîϨ™ ]2bŒØ[в¹PËÉü™ê{Î¥^±üR‚¼¤ Ry“÷F ×øü꟯®Þ™ï] ê Sa{ÑÃù »‚cA"a¥ò¶Û 4¥oB9h+‰¥ÁôÓ´ÙÌ>“Ê—–#–F&v©Œ„m|±uÙy½e’2bUhtd1júÛˆq1½W>Çh%(®ÖNüM^›2ÿ"üÇË"”¯ ã¿ÎâN†¯Š ËuÐQ¨Án‰bZ&.rªýF÷Ã4|5àë󼽺¾§Š6râ µ¢=…ãýÅSWóþö74qH14_ÃQê…¹Fµ09íó*5lvϯîÿz=`‰©tµŽªHyöÓÆf÷îSRá}pçH~k 5ù6až>3ØýŠó~5¤ /ñåÊœ¿t‹á˜ÛDÉÀÉeìgbŽ2y=_.|ø@#¡ßc•ÕÅQ F!NKиk«b«Î6%G7‰V _¼æ½u–|ŠÍ†2ÔEnƒ¡L„©-‘ ¥ËêP(%Ý-eÓj-eÇ[Ê`Èø±êÕŠpl¡¢£šLÓ1Û”¯¬ãeX·ÍV¦ÃÅM‹rË&ÌB]ÐÇMëå!–; Žºz 6q¡ìüÕpxŠß Õ§h즫{Ÿ6c‘Å=ãrq›Éê3+ðŸÍdæ·•Ñò¢µÀ@ž^1#çnB>¼`u}>þ—“ôÃŒ ޶ýyR¹ö•8¶¼c6&GœèÖ™ˆ QA~˜‹… #Œ<™ÃH™ó*1ÒØ`.}AÔº(Ä=Uë’e(zRm†~3]å8-yŸµ˜åÕo-q²MSa[ÛØT±Â©+P­¢áoãzÕ‚â1äã¸ëÔk=ä×É"ÃÓü~Þ¬åM!SEÃRSE­‰©âeXø˜*íèf¯&•!ÝΚ¢Šù©$"Ü|óëÀf˜Š£-á¿gŒ1哚½ìLo$žyŽÞ¨ÖqóÒÜë Ëma7[ÜB~M¹ô‡µbhSdä?¢%IS”UBhaŒžÑÎB/ÜSæû˜¦®pŠ0>" 1k‘›/ÿ¦x¸'q{ƒØx“áôYQ["Òª8±ר ì®~Æ ì(KäpïG×u^F ÌÄ.Ø<¬D7c&NÄÞ!'’.ºa×)i|Û´@i,_„n§‚o ¹f»Q©MmMà-o—oyî4 jC[nÝ‚˜©´Õ.GMˆGÆbˆ\.ºaê5 6ˆ›È´I˜CL1…{jÙ¶™È.i´°X#*»¤#ã<žß_½ûþæMOW ›r1¿ìéR‰lîšÏì˜ôMh0òÜ+fxZF¸c=–\~Íþ9&¦»Si/‰*:—ÀîÏ”«yÔªPk“ÒÄÈû°a¿–…€=Ø´”³’ ‰Ú”é]¨r;ç‰ÄÄ»¼ÿ³dEáíþÔMnƒÿD¢ %qîâsü'’aìÙ;Öxe4Ú£e–h @MŠh‡ÂwTtÌ|>áRV¥h·z5Áâ¦E¥jpšDšË ræ4»B£+ÏæBByy«QÔzwñ˜a8R<–<]–ÿ%wm<ÃÛcyV®ˆ9‘!j#Ͼy}ÕãÄk‹‹5­”ŒÊ^óÜ/1 äÌÀ+™JÎ)/Jãše,í†ÛßIâÑÍ[%^qæ¡V¸ß¥ŠÎ¡W˜Ž‹Ð«.@¯m•ë`]y;"Æù‡ïFÎð‘=Ð 2ÇÕÌ 0~ Ñ-p)ëµ¢EY¿˜^Fiè5‘éÂwŠŠž±Q–€/±Ÿ‚xÛV¨†´ +>º kÊIË\fï“ÁÁù›0ˆ}6V'[ÏhjL=M«x žqÍyd~Pc)„8 ’ƒ5)JºsöQQ‚\,vצ¹}ª]Bž!¢Ùb¨öóÆâI›Å-Z4!j­Lñ’—;¸#Ìðn´zQh£Õ '^Þþ4D’Ò%‚Xg ²­¹ ¾J‚Vôù-A]ï.ïû^o=ª˜ P¥ U˜eΆ)j߈v^gSUžíîV‰9XMÂÕkåÌKu»÷ÄUj…í_Eœ:àÓ.ÔÊ‘mz_2gZÒÕÌ”¨ðúg]t›ë3+…RS6XseDi™%óg¾³RƒLóB%è­Ô}X¸Ôi‰uxFÃÿªØcÛ@sä¸ A"¾ ÷ý›«û_o^Ûs\ šÌ² G†Ý`+g= îEÁ÷¨dà1´ñ~$ ü@]þ×[šA¿½4°ÎÇñnnVº½Æ}c±±]/k ªFÖ(u•k½À>ÛEÖxt—o–5Nà.×+Š+y ²F)ÓóÙ2ZâØ²†æÁR§%6áyY#.w’¦Õ0Iòj˜¬hbû†Th’S.²)WÈÝÀÌÝ éžxKóÄû讌ÕÏ£ Û¸º˜² [¬A& 3±TN>Ѐ±ÃëAB-JMzö׊À0åü®@¦HêÓ˜Ì`Ÿq#LÑõ ^^ÙO·—ׯ~2¿†³n v{†¦;*˜’¹je=’®ÿ$›o ¿˜“ݬ†ópqs‚†_OŸ –e¥U‹l®üÚ\0MsèwN3ÕP\Ûw†2ÿ{QBx¶¹=™éIöæí»›Ûž›~z¸¾ú«[Ó¦Œ–.d |>jEm¿h‰ÞB‰ºæÔ9KåäɹPìÍvÙ@Ð/DRD0ôd`,3ßf­“:gŒúoØ­øoÚܺf;s¸—êè4j¸^‘Ñ£vêöjiá÷>eÉê¥LGVï:^m~Ù'jX…¹HÓÿ²@ª15Øþ^5‘§¥RÆ£TR´«BZÇ©A¶’I!zµÑ¹ ôjçóäjY€^Û¢†Ã\¹<Ž} ¨á&¾nei¤¦3JúU²ÙkQ³‹´¸³ù-‡vf¶³üaTs&qÖÎÆŒvvÁÂPKgÈÄMc>Ö8”ÚfS‘ÁÄ–>Ûf²sÐ| T‹*“Bê™Æ [ã+Qà܆øJko.«¤ ¾²®ój·øÊ`5E,ð1¾Òñ¿"=nÿc+Ð YšãeóVÀZ—¡×¶øJ~@8sÆck»ƒW·³ÚöVÕ¨¨ºó›ÆDú÷úhJ"hmY gE]ˆ¦¬Ûü ïMé×ôM¹C4eY-²uÄe…ʪYtTA4¥?fÆp¯Yƒ{ÛhŒ7Û'·"ÁÀ¨eÃ|<¥ûl¾¬–‹–, gìY CR¸ ˜ð‹÷•Æ\}®PÚ6ß§Éâýµµvç»Lx™<( ¾›¶ÅgËJø^~OjƒÍ6ü lû>˜Aí«tz•ó!`[<ør¾ŸF¶ð*ËÒ h4F¹LeÏN+àƒ(Ôí~@—ç)“Ø<Œ/mÂЮÈÒÖ°tÁþ—P8Û_Ú¬È-ÕaYÅ#¬# ÿ¬»|wÃ&¢ÿÍ`]é‰Ñ—a·¿y‘ hb¼=ÆÏ}@H5ë-–uDwÀ¥ 3âšH¤Ž@õ§ǥĩǔ¸M)qjÿ”¸vEJ\,<:Ð…”¸Fâ×9qêásâ7)£èMÞÁŠîŽ™c¥+µ¸\ô¹Î.¼ Å5MþÐ÷Öâü𵏴8¹¿‹¤]‘§Q9 3kä<îÕkpoÕid°ÄiiÙ’ËËÖG7;Ég±-·YV óc¨ƒ‹3Zê89?Ôì²5¾zInÐjœÁÎíìÌ›¨°JBE»ŽméÚ´¹ÃŠöYvQ±á**hãnÇŠ.*’;ÃëN]TT…øö˜¹StQc>š‡†ô¥6*õ m¾‘åÚ|Vb-r2|À6*þY2^Xø›¬³0aìAú+6P€ñз…¢ãLÕ—­F `TãÕâ(*Ñ`dåͧó"A;£ƒ$jújYT ›”JXBªyl¥²¨{ê®v"¡‚>l0úqŽz†"j–äd Ìþކ¶YŽMt‚ö¿ëèô›¯ÛÐÊb|ÜèeÐÁú¦u¹‹DäÓ¤ûžr~Ëhd=uBk¸0MQ¾ Ñ/¢°ýzð³ïýqLíNn‹ÊåªtáÚÉ@³õA¹¿¨^,/”ûK åØ2Ax® Ø èÏFœIt÷ Õ ç;Jåâ„5'â+º"ÐNçí˜pÿ¥æã8[66Z^W’дXnƒ‰§ g#éHÞP/Q$iCBâv<.bm”ŽÝQ²pl9:©à'è¤3sÌ0¬œKäSÆhÎ }B­îÎ Un[+*O/ªG¸Q‚ki‡ö¸ûù oN¢PÔ%‚ûxÎySr;ÔørÓ¥aQÜi²:¡:úÖŒ$Á†™‘•9x‰8ž)ªÓA¢Q½m§¬ìk¾>(28?tñ6›:=”£M={O\‰KP+tN=*«ñ‰>©jUZ (ƒÛ@¹½æQ› :µÙ¦1‰N½Ú'­B[®ŠªéD.Ö(·¦ “fÚл¹¶÷ÔèÓ½§üðÔïNúKéj…hR‡Fí|Ú—¡G;ל@WU²ö—}:LÕa–wä6â>ÐnVêÒú¢/C­è¸ŠûÓBÚý˜;³¤uÃ&~GiÝZ¬ˆ®QÅ})›÷Dk­@vmÔ¶£Šû~=ΕE$þ™’ñë ÷NöOq&7g]IúȬ\àdZ[Z?-“VéÌk*;»Å€,‚ÂÓWÁúÁô^ÏN?•%ð TÁš“1Ȧ¼‡Å ËúzZ 2Ðdôí{&Â!Ô0báÍõMýºÜ]ZéKŠ.ÜÞ¡r÷ ùsùOÊ6Ç¢=aËH]ñϱñçPV“䙕ՒgabnHÝÐ ü|ȈßfþÁ…L—zäèíΣGc,ÿcåè:ì>ý£`íMø‘¾u0€•ê*YD"Qðoæ·´ ÿ» þ{ú@±šÇøß*4È9×áΣ}3¨hÓP:¨ £õ$ĪPè"XG |[ÿϸŒh}A @ ˜cFuX¯ë:ü!XS>ŸÖ§C@³à¸šh¤iÛ:‘Y$í·ÓµŠF Î7µPdàÓKu€±m&x'Z^xûÄ Â¶Ú(ãDÃH6oÉ&ŸS¤Æç7÷ãÆV¨Ò©w“ë93SÁ•Ë€g9­Ñ4^Î wu˜œPÑ>-à"Œ¸s¼-ïö6ÆÃÈôAzÙ9¦;T>ëçu¬UæœL3ü ˜è£Ù—èæºÄ‡TkÚ)fÔõ˜AqO—Ý Ô^Þ¿ù«˜k¯`Õ¡»Õa‹AЪqxS-èqƒ¡î›Ø‘un­±«6\_HZþÓdGQWYœXÀñœ˜Å3…ŽœˆvgáýJÀ®Â–—ƒ(EIåEO%ˆžÞï7 =!,Lô7Éœw,tZ»Õ˜ æN!ˆ²zò"Ã¥JÉI65þËôÂély@€ Ÿ-4W=ÝQ=08²°Jå²Ý3³¹ÃŠbÍŽÕ©²

íºàV(<å›Ëm\Ö‚€ä¸îðƒ«+Y–ÿe.©zÁíüºÇ:°ÅŠ0žÆÝé#Øßýô?®^ {þñíÍë¶È%`Û_öña7; Xæ^`·}ˆÈËïr'7v°–„_=º±$e¬j))¯oxt.“¤<)Ÿ-9ø3 ðk“ˆÌÃÓ‚R Èm8@-”bâ†~ek<[<°8’«Üï_’ÏúšŽ×éT3ͤ²\l-ê„ÙY­Ÿõ¨Ö¯Öc£×‘ÄjEÛŽFFG5±ýé˜ùlq-ô*ÜÛFµš`…ÓÊÒ ,o}KËḑ\—™jy¶èGq›ÌB’“/ ¸]&ÏŽ•„›tYþ—‚*ç å…´\ŠÙ„þŽ#$Ùoožui]¡H¿s”Ù(Ìð—(¾Õþ²O­ 6ÒÆV"•—'篳ŒþÙ}ïX$(XG÷x,4ÖuUû µrEÑŽ)MñÎ×uÕ’-!Ö]§Å$Øõ¡+ºê°wÈ>"sWw‘?58[K4 åO)ÁÙî,wN‹y”;—;¥Ú_î”k”ä::*„sKôDáÜqD%^QŠxq±å®L+ˆ ¾ïûw5×8Î7ph_Ú„¶(ü;[Àaˆ¶¤ç¹gå†i%•ŠéÊÚÊ d´MWÖè³mt‚ù¼qWªe<ܦĶÁ²òÈ'/çŒxô;:—EÏž5ÊÂtedå($O3%·êÐ4Ãò¸¤F§5DJ_“.Øÿ²ƒ&¬VhÂ-.ÚðØÔrÙ ²š°Ú/±Í™Nmâ_ŽŠDW»»|8ÁŠΣdz›¶»/QkÔ]ËäÙΔ5óN%ækcMÊÐ{3-%ßD"BPÍŸAQ’Ng¶x«SÖêÏ'ºÍDÇ€¢AQÁåÞVáh°¨ “êJ8iTé¡,óÑu! +¡˜ë<,@'Ý”O™Ï9Ÿ’ÊMÅ7  DšfØÊˆ¹¢ ÄÌÛBR©d*ê(2Å™|U§’g°õË[€‚««*YRü3-ªÅ fîœïy¬óU"ó~YXÿB—6éJ}ä){Q“^Û5–Sž¼½º»»üåêðúj»¼¿¹}¿4QèÁ"9¾þ¹›È†@‚L¥Þêè½x9ƒåýç›Û·—ÝÓÛ_h||i‹ºÂXø²}•Ö?¡çÏ8XGÑуum,y©ÕŒÅd«ÕUÑ·X]Û\v¥]Ô‚ÕUi aìluóhu=ÞêªtŽ­kWX]Û\éõé˜yìÁ¤H§Šn›…D†k›Ö”5‘$òÊLw$ç…!û§­©î‹r‘ðto5¬VöÀáþÃÓ°¼d¾Ær¸ÿ°óV>oÝcê8šøŽ”ÀìZk­Ò¥Û|zayN ³r^§à³%7\æÎ. 9‰2C?†÷Ѝ”Ã1sí(“rìò/R ?ï÷­ÑKÚȱ ¨¨À}”ðÜ¥À½Yѹ¸WƒNÕãU%YpzÉ´ ®Mk¼&£½+¬‚š2ùp7Ñ…sâµærÔ¼-«g/.’õˆ;NÑùˆ‹ä—i(â¤êÃióaJ«ûom?¨ÕL‚òVG0 0:2 Pe½"ꈂŽÎ¯pl>ŒZáTl]°Â¾“/Œ‚ÿßßÜÿÚSË÷Ý} $Û,$Û™ÏWê£Èƒo,̦G+E³T5 ›Ý+;fZR"4>zVØ’­3µ¯ jšÉ•¢Y®nût¦r>BUW+Ðl“*›`}y\Ë»Y…Øeã=§ª·%âgꫯ÷÷g á‹G>ÎÔ(ó§|'ú,>gcí…÷÷·Wä³2žZ/÷2ÿAÎzóŸm´ é­©<^`ÿÓÄuM/ÂÞÉ?~mæÀ’2%I‹Wt~êäQ{ ŒÎYÏ›5ñr—àà&ªYÌ‚K’£Ê‰)îŠ{J³s=ª÷å̱å !Í"$ër¦tFi«ÁÊÙstž* Et(J±K‰ð "aÿ:NÒ*]–ÿ%¬‚¿1øK¯gaÕŽÑ_ö‚—ì?«š_öQ[X•Íž5¶Doi1 ÛMYñë(â™ÊJ ¬5š\Å ëE¯X…âÀbäb ÈÕ,!×¶P°°UÃR…b´ÏòQ¾H~>‚œ:énr: Dß"§çüôº*ÌŽª3v‘Ý…s¿ Gá|áœ?žö¬(ÂÃ*䬗Ñ9/О:c)Ù-Mª V\‡<Ú ŠÎ¡=eÊzÆX°U¦¬É{GÊ”5O—副-•)#‰,0M¯ŸbdÝÉD¾¢XT-³ ;Š—9³¸l]‹ñ²ŽÂ´v®¬¢ˆæ? —SªZ‹ÜtÇøfEFŽ-xŽ„ËrÔR󨵉ª‹P´Ìã×I­ß‘çó‰kÙ‰3‰k[:ÆÇ1”aê×ôþZme'(=]ïSzš±œÅZ6Þu³ ·_÷®à—ó(ïP) ÙßahJ0£]ÎH Ý|*VÝ¢Ý6oaØm!XSŽ^>¼]z†š†½.¼ý8‰Æ‡¹¼9Wί¬êkJÖ iߌea³POãKŽê›lªlÒÓ†âfÁ‹íd(þêçB)¾É*4æ—¤x–3ó¦ÐHÜDÎV»½dø` EüêQ†÷̉7ûˆ› Œ!±Ž• 9Yb³¶fDc?-%Û®T­–áIÂì%´æyár’®¢Ãeº4Ucöl1Ÿ=à¢É3͉b '%³„¸óiÄ@2Aòˆ;¢å¦3QH ‘¬Œ)PdËÑdÊŽ @f J‰ ÷`Éÿ¥oã»>(ì¯ú^ýûû«ë{05:£•|˜¾HÍ ²)Aä÷6å4ç¦áµ³`,(§M èðΪ鴘GÕôxÕ”×'°à­ˆ g,碙Ι±yÝ´ÑEX·±ky¨š!'<|?¤‚Цb–»~ —湡ñÐæ‚'Ec°ù1¸ëü¡Ì¥ù9aîØŽ;lÎP–‚TÜs½×ä*ó/ß+o{‡›æu½›½ëz7ÙºÞÍ\5³¥ŒžÑplFO»Æ÷ÂvòW~õ³­xX®×f­<á/q•¸v¿Òà¶’D僺ç3/Zó*»õ«ƒ+)«ƒÍ!«ýÉÛ5ñ¥Ù×xt¢av„[l·¶ Aõ!XZÚ,aËqißåzá«:ÌÒïö%áÏ{‹º• ‹àmaöJ+áï­pµë(Ê£Â5«pµ' 3«Ì­¨ ­ŠÎ™‰y…«…x·Ñò©\~UÙ6‰q®°FT†T)®üᔨ3¯0¢`—{ÆYêæð‘i Ñ©"EÔáIy}‘v,?¾[y‘Š!*v^åE”ñnq ‡IäàåF€ :[Qd5ÛâÊ œª3¿÷Ê ô«Í°Ú¤~¶¶¥ ã(BÊ$Ç›øØ‚.­†ÜiÏ>ÓZû ûØ·ÂäÝ%¥5¦i΢#œÓÁñ/èª7IIŠ ›”uO'¶WuŒ¤>xŽÄ¨unÍ]Ú/©+çUYÁ½¸ý¾ÝUÛ´ih÷nÓÐfóQÛl›†öÃf»K©¢ºZcØäιs¤aóË‘‚.Z…ë*g×´¿ìÁųixFãZŽàª«Èz9îo¯ßiE<õ1„kʳƒ]”â”uµ¦×ÑÁ ̚ϳ«+6‹Y;$øfÑëa|ãÝ”×=Z¿¹¾4cm"ïÐö&®ø.ÖMv§‹‰MY0I])„{'üŠÇh’~ÅîÑ$uµÊ‰ÒDg5E“Lç¼DˆdÖíí+rÁ$ší[ƒ$íBRИÌÃ¥ßÕá>ð±œhʲÛêjå;ËûÑråõÕmÿ÷µ#5Pp—¡¬^Wxn»O _d«Ó_r¯d" òÙAm hÈž¬Š/fƒ?½úõêÕ?þºÞ° ¡ÁjŠØÁ£êi$ìDûÙŠª˜Öm” ¡<:ÔÒß–aØ&ÒÊ¢Ó‚Rúì‘äéz!m 4åäõ–¾^6&Ë5·YKÙ×pÉÖËí³‘55ãó§×_‰-Ô!Œ­ ÖRDckF±°Ý_?ekôS93ƒÿžNtù°ä:Š0ÄËñž¼‡ ,«G¢FU…cM Ý GŠ\Èz(! rþì~Ùƒ0øµ<†U„a÷Äøš­Ñ º‹O”ñyì%صM[ä„b)i0 S3¥Cr;`[­V#–÷(SD阋‰fu 0$Ö˜NìÙ¤$ú†­Æ#[£1 gW=Rc|öïïñûËûQ®1¬"µ™…45¬˜ÿ)Ô,£/nñUˆœùPòB_ôÅ{•Žâ>‹­¥£`Jæq¤Ÿ¯"ýMt0Ãäéo‹0l[E¬,f'ïŸpÚVyV”÷ðáÞ¾ùåWšú;óÑ vW?Óo yQ^uÞìiÑ–Ò®$•)7‘½oc^Bæ|‘ù¢?âãSS‚õQËG)Ù‘Êý½*|"‘Ÿè‚”ÌY)†/)‹JÐl?Iyë•Ï;lAvá˜;9lE Ùæ4‡-×s‡¼w…:¿ªGÇíêØþŠ8_k)«è¬&Çm€} LL­Ã¾ãÚZ%#AÁÜ@åaÌ6´þfI‰ßÛ,XíßÚ±¦aüë‘‚ÍCÃB¤`ó¬‚Íç")³ÆˆØþ ÖDBÊ0?lûÃaÙ_/²¡bÇPH™sGóª¬np- Ì¼W9»j¤ühW˜2ƒ`ÛqœL¬qCK䆎QkÁ®  °¼§A!_ ƒÂ,+BïmeEâš0ÆnƒÀ/àݲ¶Pà"êÎ’>[é\{”ôçè#;ËM¬ñÅË::«IÒÐn^Ò¢íŽñƒ5å壈ÿD|‘÷7nñ©óóÈÐS‘k^8\˜ãù5ÎéœÇ òÝÝU\•:—*V‹\ªXôK”*fÙ©V“B®}£¶­¦À,.bÿθõk5+)âlñÑZ%wï+V°·úÈ£¯ÕT‹f·Ž¯Õ4-çük5Õ"Ûg`s­¦:Ûa­¬œ5Ž áYY2xà{[ÅÅ:Šò(+ÏÒýx4YcKPÈ*®¢s^¨ÕT˪ïv¨Õ4­ê±VÓ‰k5I+þk5=Öjò8z˜ô½3ªÕ$E‘Åá±V”`äþ-Uk ¸¥V“B‘G†=IW‹f¾VS-äN{ÖjšÖòX«)ØÇ¾µš ï.)­±**¡ýoÿ‚€ÎKPñøZMÓ‚k5}¤µšj 1¢£›Æ$‹>®VS“ÞÐözŒ prÎ0¹P«ÉÙõŽ­Õ$×6•»ëG6œ[6ìʬiSÖ3Ÿ¯å®9ÿ—Þ!6£ #æ´Å½¢¦uqÖÇ(…)JAîï…3øTŒ\ut0¹_`˜ÍvmŒåeÁ²ò8vD¤Â‡i¼7ŠUD±×¡´Ê¬Ànدڡdb0/öë±`‰)Þö‹éú¹1_×G|A鯥¿õJ?;rU3ËR£ò®Ÿ¾vZݾÂëšÓíƒEå"ÎW—“WE&ÊåºgÏÁX#|òóÍíÛËîðîòöòíÕýÕí*n)R(né\õˆtC{©ýh­ù¬!UÙ2mo~¹¾¼¿¡ýèwm Xˬÿc{¬ÜÉÿ¡šäÚ{v!|Uæyn¡x†[ìÝ­Â/èѲC· ±{ æZ­ò´¢n2:g6ߺ¾V¬ó¶ ,Q÷úàBä–Äò@Ý닚æ}$=$"ôpñúQzHXeþ?;ÒEÒs±¯„}>mG1ã# md^ò<ÂG"wègQÑò{ò‘@±1¯‘È5Š Že‘š ÈÞêN¡92pP‰tYþ—Ц·Ö>'÷±Ï©5 ÚÓ£ís¯º^)4Щlä¥ùe'Fî/5ì¼ :•˜Püw²Ð I„‘G ÝEfÀ±p¬äk¦»xt0“ä;j­ç±«^Ä®Mo­ƒUM«ÉʻĜ6¦ÖGÓø{ /‡»?‘%Œ +[ì†Ä©v SÚ ìeøŽÔ:wGbÓ§¥@d~àmA ó×Fñ¬µá‡$c'KB – {gM¡¥FW9²±wbWóhªÙ1±‹ö*?žañ5˜'£³šÄ¾éœcÁ–2¬¶ó¶bˆ`yÁ²rœ+¡ß‰U˜Â\€(.Ãiÿ„u‘hÖÕÖƒ„£„Î< ûÕ²ªwΫDžUPålÈ(6Çc¨™ò\[‰<åGGjuš¥Ëò¿„ßlLÓk¼¿z§¨ ƒ)·ï_ªe:«×ê9®å€Ù¸ #L¨e:*%nr¯È‰i%EœïQ/›,e¼èþ®csÍôÊFNøCmçZ.£×¶Râ*XVÇNZãa8TÞ ó|ßy˜¬óa·ƒ§á*Ù쵨ã \ç!†ùèÁÂv–?Œ¬ò‰ÉœQís¼³ ŽÄ€²)Kg ÷¬?Ž®‡þ¢^˜ ¿l³öm ³! ¨ôÙ¶x òÖ–¾úzkuûp°½4@½EÌúê«öP¦ÖYµ··Þ/éQÜÁ[_!÷É‘¼qM?õÖûsfl÷ô ÜÛæ¯g‘›xº96ùð>ŒdÄeU^ΜÛÅB· ÷i ±ìùrœìâ´Moß|l ª¯ßÚ´uÈý6´’Fì7ÑbgË›tv·~áæ÷µ½€Š`ÆŸÙVFYÿ3ËÒ èÃ@™:eÏNËŸA`;ÛÍ @žkÈzÔ;z¬«„»ÞÉMûYwywˆÉn¿ÎVz¬w¬ôX眴j*•0o ¨£E¿ÃLjeņGS€wÔ Ê34«n rÑÆ¸Å«y“wÍk“ˆ3Ì:­*b'¶ìäíóùZA6.ÖDîxš(p1Øã^a±ÓBwqæÑ6oàÐàw¤! Yƒ]Ù°Øbì‹ØµÍЫʣ؇ö…m³…çeÆfÚ;í«û÷—ÝÓÛ_Nm6mfzõl5›‚†Û̦ÙXI“¸^`6mêÖî*éWôh8Ý!T:Rޤ—kB%ël¨ä„yóvÓF—cÞ¶NhQ]£iY9Âù!â$³dµ¤ÈËŠ »|Xíd ±§•ì›D¸Ñ Òc%ûl„[³)ÂíÅ_¿ÿú™9Ëé%sKÀµQݾþêù‹øæ %;¤ûG%W\#‘¶‚…dX¼ÁIIÃ_ic†Wm¨Ððÿ 0‚טÛ?or„±'”ßßÞ¼ºzýþöꇫŸÇe?ýËó?ô úáeOxÍ õ F¥£@—·¬F&ãˆëQ;­Gï´žz§õ4;­§Ýg=MµÏz¶ÓzRù`ëzvÂçf'|nvÂçf'|nvÂçf'|nvÂçv'|nwÂçv'|nwÂçv'|nwÂçv'|nwÂçv'|n÷ÁgQíƒÏ¢ÚŸEµ>‹j|Õ>øl½H{¬g|U>gTnóð™ï„Ï|'|æ;á3ß ŸùNøÌwÂg¾>óðYì„Ïb'|;á³Ø ŸÅNø,vÂg±>‹ðYì„Ïb'|–;á³Ü ŸåNø,wÂg¹>ËðYî„Ïr'|–;á³Ü ŸÕNø¬vÂgµ>«ðYí„Ïj'|V;á³Ú ŸÕNø¬vÂg½>ëðYï„Ïz'|Ö;á³Þ ŸõNø¬wÂg½>ëð¹Þ Ÿëð¹Þ Ÿwò–м¥b'o©ØÉ[*vò–м¥b'o©ØÉ[*vò–м¥b'o©ØÉ[* ½¥«,ÉË“¦È¿)òo]OŠü[ד"ÿÆõ×êÆõ×êÖõ¤ÈÿH²“Vìä‡;ùaÅN~X±“Vìä‡;ùaåN~X¹“Vî䇕;ùaåN~X¹“Vî䇕…~ØåqöÁg¹“çQîäy”;yåNžG¹“çQîäy”;yåNžG <ݧ­ˆ[?»y÷Û0æÜæJøàVÓ²ÞÅ´»¿Ã3ßj¢²M¶qãÞå&–ü"ˆþí²¢£übñýùÍýaÊñŽZo­ê=ëªdeZ©œpfSfnëÔ <3‡Õ’"µí!늸ûJÁ.ÃqÀ…1£¡vUÎ~¹º3=\æùØ#vÊ‘aãX»mSå¶Mc«ó0 ‹1Û%q\Q˜Þ\$ çÁfM½²aIYA8t¦1J³lšéÖΜ»`o“.Á\†Î”m9ÁÙaŒGy³ÝËûW¿úíš!+mV.k¡daÛ˜uHZdPâ\ˆ Qš üV“!e+òÕ\öþU{"æÇ§‘Ø»‚1ÌÐ ;ÔËñ Y²]‚‡­½sÔQ_'îxÓòíEÒ…{&­”’óKG9¢®N!`IÍ„‚B¾màl“ìLŒ¿¬/ñ1“ËZ¡‡c˜c´7´ O²$‚¶‘¦OlΨÁrÐXZBäãHDm+N4-If^"%AC¦fÊNæ†eA´OEœt˜¨ºG$Z"‚Ì9='?GMÖÐ) 5dmãðçþêö²s2GüDÒÁ¦3çF&?í™7gÞÌŸ¹0yÜ„ÆPê/×-š²¡'êï:¼E•ÆfH ÎŽ)½^CxùUúÐ;ÂÕ#"Ch÷p5•¨l¬Yž/&ÙžaAŸäg>.UŒHš9å2qc¸ä6Ýuü tFt‰«ý†«g?|É vûuDÝ2¬þ}÷þŽ­Íô`ôKà1² g0dç¾èæ³~ààŒ›¬ÇÉÆæ"zxn_2;Á’­•,ùpbÖhuZP0€`Uàr·¯3—-½„FÖ>KÚ¬[éÁ´Ç« 0î™U‰Ã‹¥ÙûLi*3úˆÓG‰<í8qòh_êï[r‚ë 1FŠš;²w´÷HÒ_ŽŸÍ·ÊVê1ÁÝt/õú틲×dNîjÍ à ™ªU­Œª*"HÒ«Xt½õ!áDPù€Æ‡Ë .®[t÷«‹ä1?а&ª•lh>½n{’ÁŠsâ")½2#©:ÖÉ–,‡" Ry¥PzI¢b‚e‰Xá ºDíNKóxzb€æñYš§¬Ð«ÚÈÞÅéT-…­¡–‡ãm:”ÅÂäP©âË‘'UåËC ¼Ðí ÕE‚êÀ8'é£H/ íQò0I¦@´u&X`¿ô†¹÷º½¼~õ«½¹åäHþÓv“Þ·Ú–Œõ¼}øk.¬.©y‘BÅ@ÝHóGEb ® k‰?†<‹Ô /ó‘•iÎM¯eZB„ÿ‰>s)‡ žkb üÌP“䢛 ó$…4Ãæm@ Ë G1BêÍMg_NšÙ?œìžr©ÙMÔÌ+ìw÷ØfCBó#r–#nÕ&âæ„P 4"nUvUà& WÈTê%¥RíMjÃâ¬õ|ÀMjÒ›$àMª ÔÄ>ÍSÓ ¥V´ƒ-¹IžeoÒ ÑiFº—viõÌs³&%sf®Tã@k+Eè)bdj$ƒÀbÂè-¥zóˆ1`Dg"F#ÂrM¼r…ä¦ øÚ1€ùÝËQ!½­„—C0ï(”WqþaóÙk ƒÆÖ.û&Ž3“CãE·Èä0I½£íÔ «cnJDšÍ{õœìžØG |¢Ëíp¼k c–zZÎI¬sÜlI4s~¦l¸"³tÝüHDwÃðÛéä†ÿ±°`bzÆhR"8ÏçéX"  ˆ´µ5w'¡­‰ŠÇ|49‘^©“©Y‘(á$“y•—&N½˜8Lh•ºÄº˜ìÛ¦yf¤XDˆIøVÒ‘£ËsøKXlÝ–1l`ÅžˆG¸ÎÃ6 Mo†–w€ÆòFG‚Šä¤UÄ[­ö±Pà ±#g-\¦œ‰~p¤žnOCs£ÿ€,Øäþ>òà‡âÁ­†èP¼lƒÉàƒ­>¿\|Íøñ¹ãƒ0‰æBÐKeñ¡Öˆ6„טy;3Í£CƒÑAríÄ%q¬m)¼Õ" qŠK³ßŸ=F4#$'þFƒR„v— ŽÀÝØªˆùé‡y;3ͱb€·/θVŒh‰œæleÞ¢Lâ£qäÄÆ¡Fs>¾Þ8"”Š‹µl7Žèƒ5ŽŒCž;`Ú¦ µJ¤®B…mºõòˆ…äѼýaX_gV³÷`ûƒfÐêßs¹Ðê/øûƒæ›¬þ.ØeüþÜQGp”Øê/ê*¬8„'´$©†'8ž^f¤p‚x„™J3YËÁ|à@XOŽ42VMC]þ:½3^=2f˜8­á]5Íà0´±15P=mhcæ ç´±q´±¡ÚèÒÆÚä¦ ð´±©Ã@À©GÔ|ÊmZb­$5U£®ßd¿4Ϙ‡vf?»1æ¦ÁöŽ–‡ÙbC–h\ÝÃFSçÖ¬«%Î3ļzƼ6 j˜ ˆtBq’DØg¬Ár†utfÖ}¸Ð08,~´1~¬‹+5j@«'ü8F UåHiK³‘ÎkZ+,´-Æ)”j"ØN4+Þºñ¤š½©0ª–V^“”´Ì–²Í¯Ê¬tèýEUøíœ£)¸ .ëË…./6y,(†¥•'PZdAÚn–´Ðˆ˜e·Ò6%?‡ÓVŒÅÒÂ9êÙ9šxWIÕÍ­F¡Š«ú†¿Ö±(EÒqœ6S »›J§¶øa*¦óüG2\Ÿ'S‚[&sWvXà]Úd*½Us°‚ùl îf󸎽¨Ôhü‹>ã "¬¿\/ƒ=Ó ÙRÜyìåkS .˜CÏÎQS k«ÂZ„°˜/ÔbGˆbàPÓífê øê 0ŽE+HÐ'Š<± ¸òôˆ!¤>×|ì_þàþÀUܸꠢ·!a¡Xᙇìwª?|Q^p 1¿Lçt™ŠŠ#Î׈šçŽGѯÐþðšßZÄkõ¥\ ›êy%(¸S‘'Œ‚oFHm Ô°n°hC6·ÌøR¥Œê°ŠR™®)ÅêQÙ3ëÜÇg®5Hë–’(X­A2 ¡H=Òvë+=ÒfâÎLâÓ·½‰sÞêä…£Œ ÆÝK ÒÎFÐe‹%6ožÞh‘ƒÖb ¤ò%W n6auïå®Í,Ÿ…J«áÑx9ß Aà™:7Ù¹Si À…dUûîc=Ýzd7kìŸI!„ê¨ä!ç$%´æ%ÅÒàì™ «½Ò¦JR´JK«šSëÌ!Arº>ÞKjNðÀ\>­"#¤ >qù¶…ìU‹µå´DåâÿÆÏý2i+IõÀ—©ˆˆ»n‰ÿ3wfˆë¾¤¦-À >Ô<"ÆÆå±Úv5>¸ø¿ñã³ÇÓÀJÖôR|¨…‚@DøàT—UøP[|¬®–³6ÜkŠÖC·øÐ„‚£¬¼I¤Œ©vµ,×øEåÇïÏ%jiÛ`5¦õÎCÁqª¼ïÜðãÉl߸GÜÑÏŒ¡Á‡mЈLðÄH™1úW-g…$Vµ([D’è“¥l‘þ$;jÈF¹PL3YåB1]0ŒÛý¢A.-ÿ™¬g¹$S„e!©š¸Q½:›‘m¶Ü™^$ï! ­%™å$Fšù¸™jQÜ p²„¶4Ó&­+ÛÚÜ›¦ÔTóÔžma}Æ|äœTfR§y©tñNMê×Ѻ¤ò€ŽäËjW18ÂêÂaw»Qe¡ Æ ÂbÉff¡f6”ÉWrr‰Ã¤@ÕsÄØå+uf]`A¡Õ©5qŒãÊ¡Å×EªíÌV°i¾¦F/¿Èjû"8NTL7ž±ÓÌ``³Ï[ÖgWUE"_ή*ÆêJc£X'驊OžÐRIÏ•I?>s¶n ×`!¶®*Õ@ "IOOë+µ«™y;3 D‡y»ZQ\¿/Æõ¯°³e#ÿw®RhäžÅÂXE-mËv1lDK­b¤A}&¼ž€(y' v”9R~\@ê/«‰aÛ1ÎÂH#›­´’ˆ±fm$šMð3DÌ~|îDl€^g€‰ç±ú°žˆqãá¦Dl­5 À›MðŽ‰ØÒí:ú*-Ñ›?pxóÞyGà¤z¬¸Rª*,^!WH 3„ȯXƒØl â8ä¹Ó aЧ LAk¼‰Jø~5Â6ÝúiR‘Ìú:³HW6D<+ÑB‹ž’Q}t¹2â™›!ª|Dë ê´k¿?{Ôi™Y¬ ÎC/µý»©Uë9ÀLË“ ŸÒdúHE¡p)™å“‚ý£?eîx[%É=..曫û_o^‡nå¡Î|y©ÞÎq8º¼IdX¾úߌQ ¸Ï!ìSÆÝÀfH!HŒ$Ô4ãÀíÎmO÷ÐV£¥ù¤æîO¿{)úk¥ÝÖÌÿ§6Í'ìSYùÿÔÒ¿Pù¤ÍG3O›éÝÊ¿«Úi ÅýÓÆ¿ÐTþ3-§§Ì¿«[ÿŸ˜)üÓºñËÑ|Z÷OîÇ­k‹àm"%{~L:Ic–Ìâ÷•%½ºÁ ð”¨dÄb4Y“Õœ¦–Éš±ççw¦jô0¢€™-ŒONìaî–†îhß: MQÁ0ÄŒèbG"ñ-1¼™ØÝ\2agPÏè麬e$M¸‹­ÚL÷Ê='ÑUó“ðê&ü&‘pðZ=ÄÁë‡8øæ!¾}€ƒ¯«8øš=ÀÁ×ü¾–pðµzˆƒ×qð¹FÅ»NÒ<ÀÁÛbѧž„=ÀÁ7ü¾ng%F,“®—05'ö•ˆN $²Ý¼ð4‰{QHòâšÓ˜V)M¹ñŒJÔ:Ó^ÞN!èíŒC‡ dQV·ÝyQuy®ül‰1tFõO[Ë„­8-µ/+Nëë°84ër ŒŠkSž×Zq˜ÁèÜ÷çnÅiÇ3©‰5ÌØitåyHu IÈfësIȰ¾L¤tâH¥­è€U½}È¢30ÌEWÆ ¥+viák‚Ɇ§ˆÂòpƒÁŽ\ÈP.*Ä…Ç$ô»ŸD9oWm‘€™•ÊÑTž„[Ь#Ü^¢3ÈQ«Ý’Þ¢CáU(mza®Dg.¤V2ŸzµVš×ŒG¡—¦¦Â:†f®‘õ± “-0XÛÇ!Ïœ€˜v„˜€ñÊY"Ø‚ô³u’þÈQÞ‡]hÛ–ºÔ]—Ävy ™9@ÍË.ÌWn€Ô0ª©M¾%Ö9g‹œ,ÞÞ}éú\Fž×0ͯ?‰ œ±ÑM>¥¯bãZ˜mì庄~I*ÎUê2øÒ쀷{uÛ0÷›«øv¯“EÌíæb¯ÛÍÝí¶Cžûíæ&k!¾ÝÂ÷5lÑí†ÉMùÛÜÖ¢ÛPƒ#o·»6suY¯sŒ'Ê\g!°ƒ8_ˆ$ΧӢ‰bhL´ÿÊë,tµÓuî:Û!Ïý: “í6€_gÙøò<lkp¾úëœ8âÖ2k}QĬçÙ{š”tÔ*$Í"(LËH‹• ‰º¼‚„rxb»#åpÄ;Ôb|ñ‡ÄYÇ–‡é0a jŽÕ+ 0%à†Ho @²…¥—µa8·òi-+bS8÷qH:¤hA€3$@L;BL€4 µ… ¶HžpÖµ³×å‰ÕòÄ€ Axièóòuî%nxuÔ‡C­ìËb®³–{©Ê]g]Üc²iÞÿ÷ó—ß~<ӣϾûþåÓ¿|ýìÛ§ß<ûûçýï÷= ÛöðüÓïÞß÷3}ñú«ëgÿ|w{uw7€'Š‘u<{úâ»oú‘ž<}÷®{Óy?ŸаO–Ö#¢õ<¿ï±çí•Ùe4{ÓÖdA<^Î4&ïǼ1c™_groõ‚Ñ"@Žßè'væÃ+UtnœñA¦zò§ßôHÉíšðaSªÁø‚®ˆËAß{ò ¡·KpÚO!Õ9°ÿÛŸÿ ­ëéÈð‡ÿ>ýSføø¿ý7øø‡TÂ_z|ÏŒ×ø¿å¶Ÿ÷Óÿ¸zuÿç}òüëøÂÿŸþÿàÓþÃçÿ;ÞÁ8÷Õ?_ýzyý Þ½_ßÿö/™~Ÿþ >NOªðºÿ ³ ÷¤æÓÚšÞœþ†P$UˆŸPž[ñ=ä7k-['´Itÿ¶ m@–Ú¼ ²ʆ‹ä´¶âÓÁQ­_û`¦^wß¶À.¦Àa Ñê?ûî‡Ï§ëÁ†9¾þêù‹CÌ}Z9_ݼ¾úòêú›Ë\=û÷÷ƒÁú\ó ªc½.šLÉ`²èì’gæì2Ó»À O-Ö‡„[ŸU"aß=Ô>ë.ßß]ýåæõodñŒ©FÆ"ÚTÙ¼¹Ë_fÙŠVÓ¼ ±î‚Pê{…j€íý¨½Û8£šŠ2„)ÃíhL9f½(;óëýËe¯). 6Ðbs*W–}¼‹#plïCàòÌ~No ©NgÇËN‰,Û,&ä‰ñÁè`‡Ãÿ|xe€zø BžV%ÞŒ¢ÏŽ£ÀPѵ¿»½yEÈ6´d°­–žŽ“#¯ÖZ™w<¦xɯ,Ãâ¿è.¹Ë¼Ä%öêú58Êfkë±kÎ\¹-¢:´9=¼¨w‚œÐˆ2aƒV¸iewW÷ßß¾¹¾ÿöòíÕ*H‹]=°Çï˜\Ûµd:¾=CHÉe×¹°—»ÝÖü4tå1ì)ùøì²¥Sê©MÈ+c:VÁÞ¸hÿz÷æúòmÄ—æ8Åf½7•"Öª¾CW•ÝÎw³ê v‘×~‘BÚé)¤ñ3 üä[Fß³ô/£9@­»ájäzW¯ßß^ýpõ3ùÖ"ÒØÍ¿¿ùìæÝoy¨¥êóÜêòW7ê¥z‡‰³»}ÿªPSÊ’EƬ=3܉Uè`æ?Å YwÙê=½³\vßO‘g¡ ÚÈU²~ œPÉ€<¡A¹3¡JÎfU¨(ª(Zªjö½lÆ£õ€#ÌU€íÛÅ-úžN†&K©ø`ê{òÿ*ñÅoÕa¢»;†æ®#BrO‰ÁlûFàØ6Ãúæ†Åþ2„ßܾ^ ö= GÙÃ:YÙ4‘O @ ¥ÏñÇcL×ð  ŸE¢¦“ìf™{«a³ËÞCrà~v.ãõÛèŒ|G?•ìᤞhtlàˆV.|=uO]¢õ¯£,h鳇¥,‚SSJé3¤Ä>ÿÇ›wßÞ¼&n³õ®¾ÍÇÌ]¿”Ãðÿ¨˜Tv´n/›è®n³ít!ÙC.F›Y§ûW¯ß_¿¾Üšî²õùE+X í=“š]7rJR¼vU«I,ð<<‰Ö¿SðÂÐÿnë34𪻼…$'–¬Ñ\I*5¡74¾üƒMõÍ5ÙÓRݬ ìm!¨ãøÓmœò‚—îúµ¯¦ÞõoaÄeA‡| 'qII-¨¥Ïåñwؤ×?¿¿z÷ýÍʾ? *;N¿âM$¡9@àt'$50îìüõÄ > Á ÚÀ*RP£Î²CKŸ!äÅo﮾ûù¯~ôa,U iŸ—·ÄËŸ‹ÊbU…³€³¿a…îˆpóQ Û}¬›ŸaÒÑ~†%{"›H›ÞÓë°´E;Ø‹®ÅÇ÷â¯ßý,ªNÄ DäV®ŠèwԖדD½£º™$«_€hÄÐ{3G1B±‡äP»ôYNrâ\r#9eê|Ð-–Šük§ÖúÝ–¶9à¸Ú3ts»Žn#kÃÒOï®î¿½úç1Uœ“~| Y½âq1ëàÄþcLYǣϸ .K¯Âis¦5m5ò]½ùG ÑNv HÞpÆÛâŽù®~úíqÇx+«X %µ)·kò+ɰ¸ˆ˜(Œ÷öé‹›\ÑRwBå2·ß™Ú‚È¡’;QäwØVr†œ!ðïo;¿/Þt÷W·í¥–»7{¾8•èRJjKíñî§»¼¿¿º~~õïﯮ_^YÒOÑáÊ*7mæë7×ÿj—–ÌQ6âóþŽzûÕmAÌþNGòåÕýoné.2gÁ`Y$2UQVŸØ‚WÏßÿ”~Öê‰â0ð7¬%ó½6æVšI¾¦ÊO®bëq<®íY[öA]xZž\ÑaÀ£¤T”@Àר;¾" Ô¯™AŸÞÿ2¨•™—w/^•yËhYï_¾;¤ŒÖ®Ž_›ˆÿ/¯®¯n{Ÿt ð’cf mÈ!/›ÚJ ‡âÞ{6$Iðá­çÙÝ«ËwW¯ ËÜp:ýÖ8ëêX íþþö‹«Ëb îÿéŠîm ®/HvwEV¦Ž¿/YRQ¤’ðè"Ôùú+JvA±¿õ–ÑÜf6–þûú+xm¹-÷™-M’{ÅY®Þ¼zz}Ùýv÷†JS€`¡dUR‰Ñ§ Ά¯Î«! Då91èvŒeöõÁúÕÝçW×o®hªt 2)Q‘¤HY¡Û« ‰êwqN|­I÷LøZ}د5‡G¾ö`q-+ØÅ»–2bƒÒÝ r¸–œê¾[5b^¬F<Žzîjkg ˆ ”¬¹oºõӈ͒;³ÀÝØ¤íÌ Ž)îðËœ Zרٰ;Ù¶Ø™×°;ûýÙc“iž=À c“®¤JHÀî<ÈõÅ’ÜŽUƒc§BªßV…ãŸH¿Í²Å :->>l Ñ:ÁÖ‘± »o.N=6øÒì8'1âÔãöð(F¡ë–Ør Í®ÅDTzøkµŠf 3 rAa7nÎÝjkÚ‡ü ÉøÓ΀“ñþ'ÛtëDi.“ü=scœ®=€¦3€ØMø¨hޝ™ãëj"ᣩ¶˜ã¹9ÜaiöûsÇÚ€ÆÚ¦€r؆[7Ïûù`?$²G²Hl“ÏØ=["oÒ'yÑÕDxÉE$SOS$rJðO󻤔ä3Ç)=»rã"ƒƒ½[npÝf èŒb8íΜí9‰c0 ×£è°Yth› Qܦ⑓½ µ”eŠ«ÌÕZ'{"PÈyÒ,-vn¦s§Í¨;YH››ªÁÂ)ÈÓ½GE /H6DêGOI+8œîU*pp¼ ê¢L(‰.é²à2k51'Ðxï%¸4U —†‰ÈjÒ®\˜¢š¬&…*nãö:÷ñ™ß ½Î ß ¦4„"pPqt™pó”¨Ïõœ?‘%këÌJöá±ÃXZCœáUíÖÑrkný’ôÎ “‹oG=wdÀÚ(bdÂKoxkGÕ’­óñwÑ[…_Lbƒñª™Sæâ`SyËÄ$*e&׿œ˜Ýt*G޶0JÕ;Úl0§¿TîâIyÀßqé?‡ÃqÄnüÁF,ÇY‹ ñß%²¶¬ë® ÖufÍ€ÿ(J]¦ØÜ.ئ=|}ǃóVÛ…h–®ÙÅ)/@ä§ÛËëW¿¢T£ bsË:s§ YȢИՈ&²´ía5+z²”²ÒÚŸ™þ z¦~C·:EÄJñ7a¥kئ0ÎÆ:.)~Ðt‡õª©Don :håÕùv•×-Êk#[Ö y§bêj©fs{ؽ·Z;书!& Êô ÛÔ}éäXuQªœ‡xÄäÑ=`;¢}‡N:>»÷aÓÙ"¤V[CÕ`Õ< ÙÐlkÆp3]­Ž\äíaäfšRä3DÆzFF-9„"âfíáhnf“‡Y!~lQµ‚áne´³æ°Z Ôõ~I.Â…ôŒ£ž;â `í !â´L„!=xAZ‚ðB¿ôÍ%TAGÊÔÁ$À"NÌL4«!©œfÙ&Ïm:1Ä'Fn·°°!ÍËA6ÎX]jHœIGWq8¹µ¢¤þDbŠŸ;Wm°àØ´ºIì4ÓÊÞCá3­ì=\oÕèÇPùòm37·²«SA±6 ÄÎÂ,sã¤Wç4iÃlu# ’“:ŠKw®írÁ¶- ¸ÔgÖðBøñ.9Ê,7½È.*5t!&•f6ØŽ,¦v/!-ù@Ö£‡)øÉ]s­GYïAd=…ûg°*vMÖ|iA˜1T³Sª´©b^Û7A®´…kgÁ˜a;ZMÀBN· z©J…p]Öy¹*´u—ÈUn´Ò^RÙpŒº²Ü»Ö~r•¦Â÷ˆóQ Z-ÖW2ïǨãDÌB¹ÊT²«ûÑ,; ³ ‚×:ìÞ1AÉUò0+WAÿs«ü@ ¾Êd/ß9y(â¢ëJŸ/ (3ÑE³$wN@Ñ­Õ¹kƒóPv=¨€ÒàxaVµ±IÛ÷Þp‹óĺ6c4««áÅOåˆ*‰0£çi½!‹–Ø7‡I¼1aÇæbßúø€žFºÿ£ÖA'”䑤@©=¿ëv´Â·7þ&á£ÕнËUˆÏj}|?x½ÚÁ+]œ”ûúì‘q€`g†‘‘UQà ”ÀÉ+]¬Ô'¯»³3íÃÍ`´þïˆQìW­ÖU­âv I‰Z\ê˜ÜçŽÌ–ð50Ë`GÍ"{Ÿ‡æ oß<3¢ƒ+øiMôF¤Š´²¨t£çðQ…‚1õoqézK*ô¤{ÏÖ™™­J3Á©¸Ìü¹׉» 2h ¦fæÇòfœ"l‘•i™c¬Ñ0Mê§E`g´‡]2F$ÿ\ÅØc]N Ë„{—ÐŒÙÖN*nõ—¬äàtËr§ç×”Þâµo¢ãù»¨zU€G37íR„òuzfÊ _S}©¦»_IE ³Cé•#c\4¥¬>çžz±Ñˉ D?Z.iRV†ÆâLA¡øv8Eq)׬s+U‡IåŽÌ QÙ°â„g™1•¸\@®”êX+ ˜ÑYD¸ˆtóÐNàÄb'˜©T¬)Æ•û˜ º\À28R;[! ¤ªøÍ—®È\m ÚQ'" 5Þ_–‡§ô«.¦žu:6Q:Y—Q:'Ø;JYêç)+ž§ƒ;R:ˆß°_Å2”NÕ!¥kªÍ”NéGJ·‚Ò©S%ZKéÔ¨=«zÒ©}( 0*¥t”°ìJéaÚÒi¼¿bJ§hQ${ZZèq5 V œÂÑ83Úy¼åoí’ÈÚØí/“ÊíË0ÙÅv!5Mj<¡WëˆÄÊ’išÞ…âi5üj#VO3É]¨”ÓèÜ«zõ4ƒjÔ…Jk0ʽڮžÆªÎÀ¤…“í” ¢êòZ5‡G¯Õö¤,ƆÝP¬‰:P5ÌYµ#.}¤¢‡¶cˆ¥8™27ÔŒ·±ˆ×ùÙÎÞÛ0K•‰ a-SŒôéþK"h6; ¼…Óy·H€ãÇzcàÞY(CºÅûÅZŽÃÍX¹8î ï+¼_¬ \¥Þ/ŸÉ6~}ö×b€`g–»u A‰¼_I&[¡÷«ykKC•¶{¿ZZ$Å ¯xíÞ—±5xU.¢ó¨¡*‡ã×禼‹F ç‹N ‰k*!"[’ÍJ:;ï>B˜ 7ÆèhY´» á{ÜfP®u“šj}ãViÔöâŠbga–Á«49屉Â÷4ؾwŒ¬ ù£dæY/¬ãÎ"õx[4Ÿ‹Ý‹”:èáœI”˜wx:€ÒÚé K2,}¶6çGõ%–C#ÞʰA‡—‰¦íZ5„½@¼h!³âʬo(,ÖÝ£W/’™¿ªÐíÃ}æ`Ò’qÖ&Sr:†½ÞœQ¬½¼šKÿÈÔns`rõáéj6,0HLKš©2>s"Ï“=3É-“Úl¶Û…@¥³SÓ(» 9œBgOœ~çȈ˜,’ÅÖb§½ŒÌ(r-Ãú•H3*Ö6#¼K;­ €4—Ø„^r¡")U¹Õ5ÌZˆ|ùàfísÇΞY ›5<À,¦%¢¢Ö‡éâNÀDr].ßտ´æý?ž¿üö³éyP·Á³§/¾ûæðüÓ'ß\ÝÿúÅÍíÛËî/—wW–ùÉpOÒÏûÃ÷Ožóô믿úöŸòÙ‰FòIÈ{ý1yÔ’'Ûwmà³ï~ø|Ú‰¦ùú«ç/¦Q¦É3 ÔÌ:Dÿg¼ÈJ¨x‘ÿ¼ÿáþS>t {þé°Ü›×dHF·Oµ—VÓgMKW@>ÌŸÐ%ç§2Yƒ[fM/OöGôç?ÿ™àTÙö˜PûcC=Ü%ìG5ÔöOŸ K^DD­xnòßð›»ïÞ]]Ïå§££«š"CÃ$x†ÆñÊø¿íqîPrå7îæõŸnÞß÷´xÅtg›)Ä— ;€aÛîY¯Ò· _6Õ³¶•@Ý‘ £½oÛk» ¬¬©Ž\SÏÒ{QßÉGwëÀËé/…ÁQ[!» |t3ê"ªŠI&¥MˆÖ!º¶jïë%€ÌFBW¿R21x=³ç”+ÖɧæLâgþé· |«è· ¢£þ3=ZoÕ àÉ©¨pSúŒˆpý)~Ö]ÞÝ}{óúŠlþ¤¢[ÁN °²¦tÛWœÈ‚Œ<)HKyÖòÞs·¼*’*T‰KQò¤dzŠftœº>Ùñ¢¡KNÓÒ¥<ÍÐÙõ4ÕòØûfÑüu¬|$mïnoÞm‡núCo§h‘u mS‚-èËbËE;©[°c`Ó‰tO'Ô¼øáŽJ¥ç¯[ôÊÜý¡W¦› ài*rer¯Jj~Q½îðýí›ëûo/ß^­„o‘¥¨¾Gmå”:ºËèê.ÒÚ¹{îÜZx¬V†¤ÿÝŽt³jo`vdAž<3 Lß TœÈX'•1Ö½¸y×]ýÇU¾¤J”=Àø™½›é{:Œ@ÝÑèaðŸ|é…Юy”Â$rTø )L_ß¼úÇЗÑ1: ."at“YWØz¸ÿõêú Ùé“®ßꎬÐAn'< k²‡7S•nó _OQ:õð5Zÿ:‚ªi[e÷Ùƒ )ºñÒgˆ ½¸ýíƒ!ÊÑÑ]RÀ>©°°"栗ܓW—÷¯"WÏøÃýío»‘§¤›¨ÛSŽÜNâ-œ–8QL(=õu{YO¯Ø9¸ïÃå¯#W´É3F,æ#h IØÎÔ Äf”>CÔìÛ›gÝÝùY áÁÚµn¢U‘ îäT"ÚÁ9x‰Çmò=röêv/q²‡SÒÞU ZM>u 4þ'ŸÁêWQO ¯9¢x<ù&ú‚'ð ›üÐÊ且+@7ËRn_[ÈäÐÖñÈd²‡½ntQP׊Ö_êfGõyó¥ŽÖ_r­½BT)üN{ůë¯ð¼èÿþþr–ýþòþþê–ÄЕÝ÷†‘…ÑYÍ7c¼—?½¹31È·ï_ O×á%2Co7Àƒmî±¥Dguÿ­¥ã‡d™…çƒb±Àùà÷(Ë¢K7÷X1Ö? ÎGœ?Ï[:9]á6aYïÉZ· ˹͜Ôãîº; ÆjެwT·sd° òvâ"1zúsLÿç¬\4ÛŸ!Vn³t> #ßzÎÑšbØ NöC0ì¹ èÊö²|fÏAø Ï\ñË(ŠòDPd4rF⌅쎼¼RÖG#ör .Ë.Ø-É&@£/ ß* ÁáåƒÓ;JŸE´ßyïØÂÈê*;òço^_õ²çk“ Œ`­@݇¬ç6´£`2Ø@Ô6’)RdR§_i1O•fE÷pº¼~=ÍìaÌ:BºPe‰''—.æ6t*é"ÃF¬)ØÊ&™CÜ¢!sà­œ4t¨ð£ë¹¡^+`¨³p ÑM¬ -¢Y±È€g!Ÿ~J“q÷MžÝC:FÕÒgÈÔ7’§ÏºË÷ž„®äNK×Ä…J–±«2DŒ³Åɯ€ßôC8ùÑFNêéG á–寧júb}è&VRµ“«“h€-¿ðÙaº|p²„®šÉ’;Õÿ÷ÿ§$sDÃä‚2©æon~™,¯@í—É€ñAþ’ø]îNúܧóBÇŽzý~ÖÓ³HL·°2Ó…aTB±`ÿ ”P‚ÈÈÒgˆ~õóÙHge'켉p€bo‚p${8ƒÐH¿¢õ÷^ì‚¶ùÞGë_ºôŽÿQæ~·tû3|K?@”ó¢¨2÷^ƒ$ã r‰{†²ÚÞü¼£LbA¼‰ª@oþ‡ *”¼%pàÛ%‘q+ë‰Ñžžà#ˆÑÖLÛRù£™¡F§–?@P@á3èÀ ŽÈ‘±‘†ÁZ6ÅÏŠª9Ä߈7Oß½ëÞ¼2…úÎÜâ/^uýìŸïn¯îîV;Ä@5•hÖϾûüÙߟþðìéߟ?ûò›gß¾ å¤—*Z+ÛªDÔÕY§mÀæúxűÒ'ÊV—Ü5B°•ÆåªJã¶Œ4ÝÖõ±½:ÿõù—o´].—¸Ì¸” B•{Émk3,¤³óÂjüÕ4éå¦ š4m´¹z šèz5šÈ M4i§tŽh2@°³Ãh¢* !‰ÐÄ5G; MÛI£Ÿ¢É|§2Œ&Še¨‰Šûèu} „c¦oA‚<|ylÛßÎyöÈ3Àµ³`ÄÈ£Ù«¾ kw5õ#…\ï–„¦v> n’ÄÁyµ®ˆ%ñÝ$BëÃó(öÈ£NãÈ#£ñ‹J)Ö\ÁªˆØ¶È“¨š©ÿôqä©uäióÜÉ“kgÁ˜Â×vLD*à”>y¡O^ñ÷Wôåø­kêéÍÔ9rº¿¾£m¦z ‚/l’Y"Ûú0QÓ šÀGªÈ¹¹¼´ë¤øú°º²¼a‡É§5y¡°4¼Rbæ Ò–Êõ€€Tn“Ĭ*âU´È«"SËš È«fLL3È+<òªÂžd€ØY˜eW5Í!D^Mup¼-Þ¾yæ^âP¦¨@@x¿›/ǽº'ý |é¹y““'`pä×M¹º—Ü ð“Î{/9X àkíZ!æ¯Ö2†­2þþÐì|À…Gvþ`ì\7«ÖP0 ˆ¼Þ@ëjÒ WPDé)¢àì)âÄÎÂ,C'O7 ‰Øyò²ÏUA”f9|?Z«Œü7D€cíÓkFo’ÿÔ„0ú£ÿ vf„iüõã4A˜“VÓwŠlrûÊq@7p¢·†ÁL`Ó­•èNìÒ¾føG¾¶;_0ª¥Á˜Æs,Ú(,¦•Õ*šd á­XÚ­}€ÑøõÙ¤Ö†]ÃÔ}òÇDvp`ØÜÔx˜wî†ÑR»¾A Y±:ÚŽØÀ¬Ú6¥;ƒµgV- ž8KܰŠf7$ó6o³v›IwÕ=ÊË ÜÍÁ«â¬wÔµÔ K”á×þ«¢·†±~º½¼~õ«Å*ƒäú˜kÓÙ[éÚï$Q>¬:LÁÃ6š×è蔀h wÈë2&0G! lÙ^…mFŒUVäª["õ™(²“,ÜßlH?‘M5Ù…Jåg^f–f¿>û»?@°³Ã´µ‰ $LDâsP.>3wv"xåçnUÌXÔ¾0âE…5’OdSçCŠÖq í9…óì±¥­%=1¶´Uãa…à›îžb ƒâôÜšZ{áZzá œZFd,‹?Ö&êñÇ`ÓZºÒ I1e®øúã×g); ° ¦ÔBÙoœ§èûͰÎÎ Ñd]½¡Mhñƒ&ªâ,ÚÜöÓ¶íj4i&4i?†(4ÁÎ ¢‰ª„‚DìÇ T«‚>ÌÔ "Ƽ"†ª¨uaDŒ&Æú õETµ¾¾Hí=ã×玂F VU’ˆ~ìà(0 éì¼Mæí¿M#B—E“þb›ë§\—ÐÏí |ªôXî×llôAç8{TaÖI<íÚMjû3­ª9bR;Á-6°›4éd”0ë´4ïß$qã;í-È uût!­Q–‹àe…aíú2ø¨q½]êéªÔ'¬ÎÂbû¼Mc;È·ØÎE‚íj¶s¶ Û™Çv;ÀÙcû˜ÿ= £3×ú¡³ƒ¦<ÊØ™î…íiƒQò­"“Y ËBšmuvñæÖÄ«q¡T%"wlªfâ »â™ÌUê`ã)ã˜ç‹µ‘©8b\¾`±ˆŒp‘äRé…O(#ŽÿâÁîÛ—Ïõ/77ÝKOF†Š­æ¯KI0;H¹¯*$… ÄÚwvš“sP\ázüy9Â0YA˜Š¾3ƒ?ÂúÔ4—}ÞK±Æ[nÀ‹…5_ObÎ[]zér¨cζ ±ßT[ÉE?6Ø*9mI 2Á*) ²ÄUú \K\Ù:]Ç^G©§@+¸ºOh8{J:@±³@K¡i²”ªZ˜š“u6Þ¾y¦Ë£ó £ÆXpcì;úÐÕÝÐA)–Á¤¸ž9«ø†ö*,h^¨57¾î½ú8J—vb4ª%%P›› ß«±Ì·Ê!¬³îˆBc,¢è(a¸ßݺ –äèMÃO8\±áÐ0®Ô²ñ€‰ 9Yäâí›gJ¤"\RS>«;aÌŠ3æ(TeWÂqºKˆ,°ÒÙ!ÝTd vNƒ¨© Äð€P6»­·v.Z »#•k^v¤þËîæ§Ën'òÇÁ’1ˆx.\; b Ï9:@U*WeÁìtÈ„—E:¡„B^ÎBÞ"ÝŽ2´Û;2´¶öÃm…vû nyê1jeê½eY‹w Y,ã™HÍÌú‹2‘–ƒ&p„Eš×,ÓãÊì ÉZ¤öcÔ‹lÙj›)jsÐr©vFHYgtò1ã˜g/·46Üz€c `ktj;„+p*·xw¾q‹áb½NÌ%–͇«ÞkvÛÙÍA2?/GÃÔtÕÒÒo#ж±A~e)«pµõêFcs¿>{dlm‰8eÝíuÅ9%²€fâ–râRAzRЕœÛAkaXèù"–®¦}ºªcÚ§×ÅÏ;ˆÚ‹ö5Žöcž;ºÀvŽ„ŽËþŒ¥5caoäêôæ;ÍbœÌ•ÖU;^ùÒx®ÎœG’Gè4õV‡(*ÖŽÃ6-÷#€nmøJð*̇á«`}èà*0ÓØšbÂ0¤Dæžk&Œ«f\´üˆ¯mgA‰Ñ«0!"€ñdOŒ·?¡ûÛËûW¿:pr;š¨í´¾´}5>··ÎVp§‡ì ê"0B„4ÜÔ*°ÃòŒR’Ž…ƒæÐf*Ÿ~óæõÁ[+RF= ješÎ|ªÈ…ŽçiôäÎO…*Ì(ßãš{ÛG̯J@œznÄéÕX«í%ãjK¼YQ1Ôøp«Ó –ë0r­×Æ µ½®Î¥^¡ÎiA–Žýˆ ”W†[Ò"Ä7WëCµÆΞb 럀†)¶Õ›lÎQX0Û?­›Ë,´³ë‚—uƒÚ¥E¦)±–<ösµÍ*TbvjµŸËTÍ4j×øõùã‘m§<@ ã‘LBÊ<('ƒt¼ýµi+fêÎÎ1c‹Þ|é#fľtVM>‹r"³Í—ÞúÊöúãð¥ëÑ—®/Ý"ÇTiÇÐÔ9œ9'ñbÅ€ž¨“ßd¢ÄnÒD鱯lñ29 „iá¨üR\…,„©L‡LWä„Ý GÉܸ>ÙÒIÙ m˸¯pú. E¡%Û÷*«ölÎ~EÈ43S.,•»hÈæL¹0(Ñ…ÓÖÀúU°³_  ul~b[B’´ž1?ÍQ’4pödt€bg–BÓˆÖº„5Å$¥t4Fí%1-Žë\•ÐcÜÙåmàÌ Xp¬®pp’®e$´±-ÁIºæë…6œ4~}ö5€°³Ë T­%†%B¨¢“ÌR:;ñ”C•:C~Æãí­ OQ¥­V£ŠÏJ¿>T©-íi­êdQ¥á-†%B——~ ª KéìÄUÖ¥ ލÒÐ$ŽUꘪˆ 8ݨõTÅ— ¿>{TilÂȱªD]!X"]pSáp3yg§‚ȱ.9pDëÈÑÆÊ-²ÐuËV»g[ïž¿>{ä@ØYˆec H`‰cKŸz3wgg‚¸±.•ÎáuݸÑ&¸±!õ\opÝˈ…ë^®{m]÷À—jè}]Ñ[hQ§®||ljÛúW5ÉM, “вJI¼ Sqg‚De0P$úy¤z…Dþué|ùëŠZk;[T¬?‘ éõu+E~Ÿ^?~}îÈo@ØYˆe°»‡†%°vH°7KéìÄUÖ%ƒ¨Âh˜E–¨r]†½°ƒH~‘3¬‰D‘•5òt~̳G fãÑ8bêé~Îá¯|‹az €Ç<«£ìG®JCãcöR\ž‘iLÂqF¦"`ž³LgÁ±}¾Ð]Û9Ë`;W ¶oˆ9­¹Ø Û™ÇvþQô&2€í,sè܆ì8pŠÎþ ~7èÌmç¤ ×åŽè,2 P-dÌ›TTY;U ¾FX;%MÉÖ.š Ö]Û΂2ƒÑSl´¤@N1Ú¶bŒžÉà0:LÓ'þJQ¼ ‡žôh)Kª‡Í è: („ó|]j£Ãy*Yœ—Q!¬þ8ÖÙ™¹„å Ï`·÷]Œœ?v²¤´Ê·ÅîÆññœl²Åpb"x{AuÎ=ìr-è©í_‘ìüÿÏÞß.Éq#‹‚àÿzŠÜc\³éÓ |#d3kæ(^ÚŠ¤Fd÷%ÍŽ­¦TLQu¬â©*v·úé7܈DK}tíö)12p8ü îwߨ+ÂÚžÇo^½Ø½þúÑÿ¶;ü¿¿›÷¾Þ=:<ýîå“.¡à‰fðx`º§†g~&¯Õ_]\|¾¹Ù_]ìÿr~»ÿÓ«Ïw‡%XH¿2„€jzòúÅãï¾{þòGôìÄcsj ¦’!ë‚ÏZ­ âUS•?Ó=x£ßÌöã7‡Çw‡¯Jëõ××v‚ïÏïîö7WàS.õéט€@×n_×rû B[. ÛA0þªäaŸÞ^œÚ¿ÿ’;8‚°vr¨å•4\ÜAÕ¸vp|ÒÉþKnÖê]‚+ؾKÒš¬ Q=ˆ÷ºíÁ¶â(£éJÔ3H(ÛQ ¤Ùº úM}Â-èïà½O4¨ù®}<ÿuÿüêîzáð­µ{ÙRØ!Ø=ñj FÖj0¿ž¶ _ÞZ³ôæó…±«×î &¢6« ˆ‘–K{”~lflo­o“yš&;rÎÚíhjÓ±ÆÏ/ áð÷…ÿaâó÷ÄŸhQˆ–'@EÖ©D… â“ëÃ)z-Þ[žAd´YXÔÒ›Éý^”¹qº¬Ü—›w¢ëøå &P¬Œ,OÌöíÉ«¾™°ÅÍ€ß=ý&Û¿äѸÍé3·§s@àÿ¹€6ØUس.–I#zŸí¯ö7çwû÷Í5ø«:Ï­9Ê3mŽò7—.¦—@ h>‰Š]>L BF·Ðl#U€Ìñh¶’íº…éV Dì¤}Üj $TÛDa mWBvÒßß\^ݽ<ÿ¸Rí›Ëhí„ÄD“%µR>ÈÉQ=-`½ÖéMqÿZ_I²ˆ%­0â±Bç$ŸQ{Ø/ `Ç7LÐÿ°?¢./Ž–ô:dªH¯¸ÝÊÈv @’Ê5?"aøá[Èùœ¢à#n ð„ |åË{[Gªpgÿôüö›ýÕå~¥%n*r´S<¢_rìäÛœl|pÛ«T‚¶Í ½Ü¶s¨›yóÎA”¿ ¸sHì£nçX ¾ÛnÊôpíÆ´ôæ`Ñ¢&‹jv¸EоYc0¯·&DCŸs륬3'nOlNp„`1s⯷û›†„[O‘zŽ2€rE¼ošC¤Ý+ Kh4nÅQNu_à"ZuH‚.+h¤a'nÚàiÏøÈèÈà ûJ)2¼¢ü5V œF69º¦ÞííN…ÂbšùZâù§BKŸöv§ÂìŠî×§Ðp[6‘.d à°Xa¬ÑA'Ð?jÑãôOWµ5úÇæUÈ3±ùøŠˆ·1¥`%Õv =“Ø–½ì4¾1ã(Ù?óÿ«&›vó"Æ´¶µ›R宪ޔcÃóp=ÈAús›å!m÷âb-Ò[æß!èØ¸ Œþ·&AÀ·uyûæúÓ°ÿû~X…asO½%U7^ "` ý½âùv·Ñ-Sà,¹˜‡”]²=§¤oBjR2ŸH²Ù…½Ñ]]Áx|нn+BŽMîLVÒÎù|tææ×F‡r¯[ÊíþäâjVgм>ãT³Ø¯'u,‡ {†ŸŠ†Ïû—×ï—D˜–Y}³% {»Dá=æ>J¯šæ@q_L‹[`Í1½éîV¯šÞ¼;â꾘vw}zÂQ nñ±_]M‚ð¶å®Ý´–ѼvˆñÅýßLð0q¡—MåÏwðÅ<¬wܦD÷†0¾Pž{¾Œ‡qøˆ Úpò óÜÛÉ#_F»üu DŽ[”VmJ .XèDN@º€‡ŸÊ>7a½IŽÐEõ3ÌLúÏ‹ý'#š1S}}|ßÏ´:~‘þ´âØP²”pC ³“ d×HE,>úõ`óí‡ÿ7曘M…,mü¦Ð¸áFîJèbKļGåḴ…4 ÝnV“)Të%0âÞ¹ ÁTGªT>Ã/é¸r<ú ].z>QƒxÜýŸ»Ûxí‚uãz7±-’úe.ÏÄK8%Ã&[² ÆõìÛ2™èˆ+ø+3)-Ê*,¨£„Rœ§ö&^ýô¿öwß]_üZiê´”X6jnðv*<]ð&a@ZfPlèJN)¶'¯d ® QÜ¿h@V±$!<Ãò írË»ò&LÆo¯o>žÿóòî—oö?Ÿî¶É…ÍuœP!~l„ÿãÿ¬ªW1ÜT¬÷#ÿX14È·ºÒšª˜—y~ÍÛD¸n™›ØB„çËÁœzÛBHëÜVQ­Ú¦/ª‘µr# ©}6Ïå͸{+%m3OkØNAM ¬5  SP<…Õ>›§œÍ—D*ˆ©i5YM0›¹Ð÷™tH.ãñrysýYÝôy s¢²³Øžmmk¹Y½ßo®6[^Né0&ºÃw‡÷¾ÝŸß}¾ÙXã…­€¬DÓÔızäjŒ(ýÉ«ožþøø‡§|ýôÙ‹§/ßøÎS ßMã™ïPÀ³V|ì…€v‹—Y‡¤qï &ì‹¶OƒÆºž³¬‘‚kC¤»±‘)6|×óðÅFMÉEúÆ;´»Eô¾„ïç],Dú…‚_äÐeúE¿àHK‘ñ‹wÓªóðIO÷¨}ŠÀ{µˆhG“^-¾'}èÕõ|}HÎ@_¸´]˜í×bàƒch C c×M÷¶!¥ú³¸§C‹!)a;ÑTMÌWMìº)AÁÄ®ŒèyíÄÖf&väZ…G¿¸N•Ò¶­š˜®šØ50‘½»B’e´SÞ»]ÚëÆS&XÜŒ4¢¡šŽTŸèZºH¡€2íñÓOmc†ø 'B|'L1~hÛ&BÄ>‡Ÿ^˜ä)¾­éÊõÎ3ÌØÛ‹™H6Åx,M}“¢nüo/—oúq3<û{ ñf§˜añWa¦Ë»/¸,Š/¬ÔwíñO§6“ž“º9¿ºøÅQs*&ð \=~Eì>WD\/¦ ‚àŠØñ+â÷¸"#2‡XšÃñãW¤ïsEÊ)ƒƒ±²A­F༃c{Š.@žÿ·õ↻Ý6Ó¶--ƒûïSÙ¥ècc0ÚñnZ|ì© 8@;Ž¡öpºÈœXƒ2Ә̯оÈm¦6×;³Ã ö*Éä–*É Q’Û™DärsŸ€isã“ô9Òss•&ý.½q¨Ýó´#fm’“`l¬è\{fĸã¡ÕÚ¸êDcaG”ÈäÆLlس;Œ¶Ï¯qؤZHá+®—zÿžx±½…ï/¤!^ðRF§Òf1œË€ÅiÕYv|'žwã±ç èðÞÚLín­¸éÖõ¶MÙuç-ƒê¦ì¼ãl Õ”¬k¥Eáà0–£²w¨d]•yKVߦ5:ÞÞ^~¸Š˜ãÙÛý9©˜xq|Sà™…×lÖÀi;²®SjïÆâ]ÞBgO‡¤ÐÐs ½!WÓ›ôæ¾~ðôfP88Œè­8*§½O—ŸoÃQñm,ç :@2¸‰QBYg9B¡èë…¦]¤)ñ]^× ºH׊ „BÍ¢- ‡1œP¨8*ÃÙòGÇ£›‡z>bLà”AWRFÁs ¬ãÜ*Åíg`¦Všœ¸;ÒÛ­¿_Ë«©…#‰ÿÞ0Øž94ç(ëØÖ<³š¨Z%œ¬ËV³ÈjZÑî[íÆvßã^>,i¸|âDÄ$Ø }ë³åO½ì3Ó 4¤· =ë[¨Äë‹Ú !7Tt-qæ:žóŽñß7Ïq Çs‚¤[ÇsÎ àýzƒ@ï¼Aà¾~ð gP88Œá '¨ÂQ‰^i"§”Ì܃›ª [Ù±˜*†J ¾åP![M} ÷õƒ' ƒÂÁa¬@=ÅQ‰*ú”46*„'ÖxO*8¡È® ·%Oè|Ë¡B½–PHÅ}ýà Å ppà E Ž£‘!$õbÔÊ9ž€% #Tœ* ¤!9NªË‹#Lên5iLN:÷õÃ' iãc8i(Òã¨DdI}±Ûdˆ‰UÁ˜› 6-Š¢}PdªUžÖA·šP]M(SÔÅ}ýà Å ppà ¥ï4ŽJL†ø\u2D»3Jriôxõi˜bdÉzôÒè_MS€Ä}ýàIàpp+†b8*1Ò"@ÒÄÚ+p´ÓA/Êj_’ž6a­,\Ìíåü¬…b¿¥¶$@1Eži‚ÌÑÃñ\-a°¡+ý—?Cæ°-Ž3 ïiä=&$2 ‚S×áJÊäï9ļ«k†ì7¦×µ­Ù†o¸»àŸ§`š¢S_ûaŠO®¹…×N¯..>ßÜì¯.ö¥”ùèæúbÿþóÍ 4‰àHÂý2ÎÊÌ|P“wûû«;ø¡†kר¦JH\Â÷B8®wþ-2/›šò€ûÕuå%^%[¿XJ¢Tî@Áöü#9°"™uw³ùæ®HÑ:þñ®Û¡£Šv·à·!(­¦Ù%x ÑuÝ­çWê·¶ˆº¾¹0mÙ³äÈŠ—ÓÖÄu;Q˜°UÑ2lÓ0ið$VüÛ…pÂÀ¥†Ý®¤Ðt(yêãa0JåæL+úÓÑJ*M›#£ŽXJ±(‰Õb[÷ ÀºUG°ÞnF{Óv¿Hy™#–RD»NjÁGûÆ4ûù0PÚ÷ ­Ý…¶qkÉ.|-¥m£þÛ ÝZÊ9¥™˜G .y¤Õ1k)bž8x|wwsùÓç»ãXà°¶×_N7mX`jíV4-R‹4ª:n5ÅÍ`Ž 6oF€xkqª”x¶ã¿eC<;n5Eü§¢ïo®?íoî.dáŽÄŸÚ0ÃÔÚÍhZÄi‰wÜjŠ›!3lÞŒqîöü#½¾ŽÁÅÅñG#nøu4âKs;1wtZüÏñ“û8[}Ÿ;³RpkšlmS Ýoe»t[í¢ƒ ²Œu„ë08G|-h qptHÛO[.¬.+|<`‘]UÇ-ÜÞ:mÁãí1}uíà†òzscÝÒjDcÝ ¸Muíü†HÞÜY®ãž›¿¶uÏF4³^Îw¡Õkº‚/ÜêÕǘ\Ïdwê'ªÚrÔ™ Á}IÝ!¡OÿÁÁ I§îÍ m%%u%·áþ@¿¤Ó⤈/aã¤à£R_‚·ñ{yñ¿íÿϲ¿®é™ÕjBãâº× [ù^'41œª ÑF‰ žV™‡ô­æˆpÑñ›z¨.óAü$É3°îWÈÿ›ýOŸ?¼@£\ÈÖÌAÓ9¾E£ GÎÁÓ9£îÚ#çèÒ9¾G½`èf#-G°÷ d{÷Û§}Ùj…¨ª RÙæ[S~«˜ïxõÄ&öD˜‚$c!~XM/l–§"]ÏD¨w6å²O¹ÚLŒ?Píú…&.2e»ú}õ×ÛýÍíW7çŸ~ùêýþïûá«×ÿz{û®œ§ù×ùÍÝW·¿œßì¿.úêâúã§ËaóÕ“ë÷ûgû«?_ÿëÑ$ÈÃQâN̉qdÛ„Žÿ)a;]Éxôß"~7:~Çi0²‹Þ¢}üÃô–äñëè¿§Lá™ {lFÚøß"4r(IÍœ¬+šA$‹˜†r üOm1]?Q¿PÁ¡yôß |¤‹FfS4~‰D?¨ø‡¦.~>Á'#0?DÛ¥“‘¦eËØúíäôV?M¡D2j´¿Ñ®~ˆ¦ ÓKæ‚y4Á†ŽÞIÀ‹Þ:˜ŒOM%ì 1| n蛋"Ž—&f LÆwém…¨ú¦¿ 3&ÏwÔûŸÇdöÇyýæ‡Ã¬?¼;ð&÷ucñ;5¬vPlv4 F-ÛÍÓ߷“ßAØ O~i+<ù¯­ðä7öƒµ!ÙO~¯a+<ù±­ð4¢gÖˆžY#zfè™5¢gÖˆžY#zfè™5¢gÖˆžY#zæè™7¢gÞˆžÁ]Ñ­ð4¢gÞˆžy#zæè™7¢gÞˆžE#zèY4¢gшžE#zèY4¢gшžE#zèY6¢gÙˆže#z–èY6¢gÙˆže#z–èY6¢gÙˆžU#zVèY5¢gÕˆžU#zVèY5¢gÕˆžU#zVèY7¢g]GÏ3-¨à¤3½š¶¬´§èFœ¢qŠnÄ)º§èFœ¢qŠnÄ)}#NéIþ¾=÷è¹oDÏ}#zîÑs߈žûFôÜ·¡gѵ¡gѵ¡gѵ¡gѵ¡gѵ¡gѵ¡gѵ¡gÑÕÑóé4õ#¯Û÷6rCtä( ¸POp+<ä¨^¸žFrÔJÜ O#¹|n…§=7ŠðŠF^Ñ(Â+ExE£¯há"¼¢Q„W4ŠðŠF^Ñ(Â+ExE£¯há"¼¢Q„W4ŠðŠF^Ñ(Â+ExE£¯há"¼¢Q„W4ŠðŠF^Ñ(Â+ExE£¯há"¼‰ð_묃̓ëO¿™1Çœ»¸ô|ȹ#¦/ßM x>ùΔâ5ÃûzŒæ+_íz±°yÉ”T}ûnjk}ò öyL˱z\deXåYTm»Õ`[wî[œß×–í*µzPÛ9àK®®f«ä``æ÷7Ø–= e¯[-¦z0Ï£”œbÔ…AgQÅ΢ ì>6çþg$È3šÈ[FÈ;R eØçY¼qÔ{ǺŸ™}±™‹ˆl¹×3¬ ­‹Ì_­Æyƒ¥³ WUl{†.6n¬as~wñ‹_’íhA·Ød:™JÛ(‡Ú3éÔíƒÝá$F"|±Eg±â¿¿Ý_½qûáínê(Á¢Y“†ñ³ÃŸ}WDOöQémƒ™v {2ûÐ#Ce¼‹PGie>BÜÞÕí²Ñ~ 8TH3C`ƒ¥'”Îõ½Ìz{9â’ï ù6¤ <&³“¦“EÔÌÞR›ªücÝÿƧ¼ÃKÖô#Ì3îÊ4¢ïX?ƒ×XŠQ†£€÷ Hç›t0ˆÚ-á ð»ug‡gþϨí?ÇC‹ýOKŒ½ #’S¬_zá‹o ¸1H±‚q7œûÚn&®ïø¯7~kƒò‹"áQbãñç¸G ƒ?óñuå®rÛ0=dx»…|¤Ö¿\_î³ÖÎ-™Ž½«[{‘ç…¸«ó}ù~œe©?|‡—†M†Ïd–J„w~S3Íq“ß ¤ ”@_™Ÿ„¢ý»½>Y/}çŒlF »"TåsËv|zYN<å#˜z4¢R!¦µ·^(pi{§¹ðYúL{q ä#‰^EÕY´M²)1Þ¦yB÷z*}ßɦӴ-U¼±„’A4o6à9í¼½B,]¡ôfŠ!F’–y1¨zóh´2³YÅÈ01Y§;÷‡[è" ,ögI¼Q`ÿZUåé?ö|…ùE¤›œŠVa7Y…ï²QÊöÌG‘]òγ‡°i§ ‚03´DBWÙ†À•± °Ý¼d”óíÝ»„Ë¢"Ò ãR†¾,£¢ásKrnF Bô†ÂKPBb“±¼¹ÄwÑùëÝHÜ^E½}»›>fC¢ô"Æ!³™†´"ìÆ ÔU Ѳ€¹LiÊ÷°½¦£š^ÄšÁ^6§þry,õm6ÞLΠRù†Çm åLÿ¡×ŽžÅ£[ÚõøøÏÊ–qÒ5•½8C,•lWQsË‹™yfAÚ˜a,Ÿ{ ‚%¯µò•ÿØfwŠ‚ã˜Ým%’³ˆ°dãÿ¹Ü5Ðn´â…­;…¹¾üÖÄ èÖ® E ¿ÅŒŸå]¥»³ã¸_频ÒÌ— K»Q„Jwõ†q}•m.Š+É=uÐ ôG“' ê¦  †oÆÉ !XŒ Â[l~I¨0-L\Ãd‰ôÒE¹-S Þ‰ï®ë#åë«ZªK\@•Ýt4ꨎÒÁkjj°çºêæHt-Mé<ó•§ðå±ÈM^ÍöµÒfpY¡®Júà*±ž^z±º . mÖÝÇ^ ö‹,Œ^h¼´8ó•/Ó Éaôÿ ž…QºÛ„‹®#îHÈ,[×`_<Ë]ö†h/1QŒ/0€’Ê0XÝâ× OÓÊbM‘dóôj ïWs€9`üøs€ÅÞ`‘…s€(‘ÐvåVt€¶P vR”8P´-G6«§¦?i´.í@+ˆƒ‚½?C¾Iøøñƒ'Ž^X`!‡Yâ \ HœŽÇéÊ»9…LOmŽ“Ãü”ˆ(CŸ’ß@j=9è@ê÷@{ƒEJ´(1rл äÐ[\Q¨ÉìèówžPr '*RrPëɲõäÐ{rp?tr0Ø,²prPóHÌWÞÜØ¶ ”`ø‚Ѹ­ÁhbkôÝ‚éWÛ¬ Óÿl ƒ½Á" %Æç‘˜¯¼=ÁÈ J0b=Á0†9)KNïƒû>dž`¸"R8&w(>¤O} r†’̨½øw¡‰ Z‹E”’DÐD<Á.Df }‚'À–ÍÕ1gjº ›?Ö¨EÃTãkÆuA]½ØÕÑá˜øaäËR™¢ÄÛ>‹gWÜpöÄýh1øÇ.y†ËB¦›?[øX[ˆ@‡sM3]È\Ã&ÉòÞ|¤gUb›MJp«‡§˜6ð¥<5dsg8ÉU¢`TÉõ"OŒ*!T´%´ó§…"Oø\­"/l”õ¡‹<á¬-aëóA‘gª¶G¢`7_y _IÊÁÐ*÷|´ßË=kЈÞFBà Ï^£v]Z`rÏóÌ‚™\[¢§ 3èD:™©ÿxiÆÔ;ÂÜ<*KàQ\ôÁY,É <¯Öó¼ähš+•:öBÓλV𼔓úhžgžç¥k€RhDc4ÂHgm >äowî©õ¢ô©Ñø.–3Õr2¤Ãú›Yeæep$Âá{VÈ•¬:E±N2ûÇ–Ù-žqÌkñ<^ªo¹©ÃüRÃhsØåØI·ÚÝ=Ûp…Ç‹r‘>ŸÔßI¢ÈTGê‚#s¸¥ „qy–4ül­Q»ôÞTÄ.z^(¯FòË$ÙÜ:€o ÅS8÷Ú%ž”îëšR ßMxA•té‘ÄŸðRñÉ!æƒø4bâäâ\&BÄg">ܬ˜ÄÄ'ïC¯3kî9þ—¯»S–ÞM—õˆ K©‘ã2,h^£r™&ÿã5øáŸ¦_Ÿ°¬÷ÿɨ¶@O×#§ú3€‡æµTœ~(KÚ|¨ÒöaÈ™IÊöÜÉ‹ø¡ýÕÇ ,¼´‡T쥫NT°©'•ŠG‘¬<ìs¶Ìàuœóo$¸A"•Vl#A‡cé—©ÃÎâß‹’@ÏE®Ói|‘Ì!–ÈXÒ;:Cæç ¦Ð#Éä)On@xýX¯Õ©°f#™$IDÉ¥QåÅìb2þ³áú§óa|§¿ó¬K•µ¡hOçæWt5½Fh¥ÙóüªTŒhp·#…©Â°×Òøö+e)Ú’`Ðíï Tí10Q½U\—Ù|A\×Èù"®‹âÇ¿WÏä&'Ø(O›ÌcU­ŸG?»Ìaê?cÂ¥‘Ú ¦O¦6æXòd*d¥.Èc¸Éf”´ëây„€6ºÙ ™„ެàì¯kèiv +”·#NOãÏ”§ôÔz2­´÷ç߉ž ×Ûsô„€èГî8\ƒCQ¼úx‚s(œ^†hbñöé):½þ÷¢ “Kõ‡F¼^³Þ?ùéùÉ,)ÔJª=ø˜ùä–Tæ nª|›×;AGÕ¦lº_Ð|b^ó©ÑibþÓF0ìŸ'ž+˜Ì«¤6⹎yÈ-ÅÕ8<‡=H˜¸OͧIîÌg;üz9ÓLXÿ#)Tš9Fˆ@¸l^â“$ÒNßuþ­gî›yÿ$ÜxãL„8÷®J.CÙ·Ã,ÚM¶Yx/fQÁlõ[ú¡Æfl&¼ÙHÜH-7¹Ûàà ɛ˜Æ^+Ê9å³Y‡ßm”F÷å˜[¿«ãÎ~-ŒœtÜÂ0Ÿ¹È»¾ÏqAâòJ1Ô}T¬±HvhrÉÏe=ë2H™Muîš[îk!òNzJx„ÍÌÅôÔKw7PÈñîfRŽ3’L€¾†M!^Y½G“ GŠ–öã‡~GŠØN¢œqMH”G‚~þú«Ú%É.±Ôçˆx3cšSífÝ©óþ~½C«åÔjÕUÕ¾ÜïsÚ0â…ImX$éð¢Ý¸!f¢¥UíˆåôŸí+gõ+ïa&—ׄ@Åßa4å_´L›ÚmÄékÃl'ˆÕ¨2sS/+y½\D]D!Œí='p–ìj¯5ÙýìvÌRg…HÇÄÁÑ*ÛeQëÊhà T–Yö…õ‘XŠFaý.å´$Ÿnfãn{yáú‘¥ñ¢«|êkUé+GSSó´ôf®ózÉ‘R%ªÈf·=Ö`ÊÖ骱o ½Ü‚j0'ó¾˜u¢»ñêûêéû.öž(F>FâÑE¢õ«pŒV:GÀm»(níý§Á^wʵ¢ÉÆ]r ÊÕõW¡h&EúV›j—^»‡ îù¢=¸  s/š¥vnÅ4¹_ª›Á [$ˆ9s±±´âèú|¼âúëóÖ3Âʬ“ñ¾ËÌÒ¹¡Ëž—Ú²%yàþre=¼þzɸ¼¹šåœÁ2 Ê@,4W³ Ä<óL…¹ÂÊy [­1½Œ½Š{|C!_"˜~7’í!ñóÕ&¼Ð+5f¬ »äy^ªI.Y}³@jò@ígæ5Èwþ-±C‹^xޏ}.Pýýä>ð©d3–ªšm'•<Ð «r,^dyÓ'N@ÍzLYŽ ¶âøì¨ ‹Ü Š—÷Êí^/v:BI‡RÔ¿½ YŒç¸öÊ\ ÌRˆ(Õ×}ð_O˜A ÿ7Y¥8Q« ,Kj'¹To¹¬¶¤"dÄ­¢ &Eœ¶®½JLV®4è5 ^¢ƒÈv¤A]m•ô`u2®«µ—{VWKÿ_˜®ö" ?ËšSþ[ij N»x6Ñ/©õ‘‚i¯\e•rEh‚ÙŽQfïQšÁ~3HáÊûíz„&B¢eZ×Í¾ÎÆO²˜aùÁ]HÅI„çáŸÌT^åñ6MXó)‘íaõ´ãXiuÀÃþsؔҚ\Ç6Wvß=ò»ShUÓâ‰Ä!›°µgübqh„†¹í)\ßa„̼CNž–iÌòïr ”$ç®ÏÍËÙ>> ‹¾<°;äî˜s«ÌތˀL ŽÛŠÂO~r\ÒÚ^Û<%oŒúS‰X^R jÞûˆ¼ç)—Y[úÁi={F œ‰>éœH­§æµDö®HѡϠç,EGwocP¢Š§ÉÆå]å.ŠÛ½õÆPž¹ŸP^à$Ä9 ¨n´7²`‚¨Þ«+ÜÕnÒ€]¶>‘5¹½£Ý ÿ3š V“ѸWŒ}¤ˆ ÿô’¶îCéE¸NÅÓ>B< Rrÿ'„u` Îr@$Wà-Ö'€°2k“°dϼfŒlÉ`¥Àì ‹aåo(*pz l)»£ –ÝL¾6ßÌHÚ7C7UæÿÄ›š´žqtR¥Ò=Òà-hТ¬ÔQØÒ‹¸Ð.Ðó¿[²AF7›¦sø]`0‡z Ì@¤:ÎßX¢\E–«^]5zƒ’JÌtž¶•-¤P‘¦þODE ŠŃô $”d©hPÍEƒbH¯ ãFä37-pA¡äq3J²´Á‘í 0)}LJ/Á¤éâré~VD"zZºc¡êQ=-».ÝÿëýI• x¹w‚$B‚‚%øm0ªïY؈¿E%øxj¸£OÝEšÙ»‘Ä2ަé3ßO‚I÷>Ô—åhg ŸÃ0â™W0²ÚÒ'<éÁ"©`5RRÛìjrŸ×#1öÈ .ïÉ~»(s Ü#ŠøíÎ^èÇ=÷ûžý¬ü§ŸK(ä¬xœóÅyñƒ Ïﯿ ›ßÛ ²‡?N®w‘߇-8}bSÝ›×3°Î$ÇxX Ká1?†µXáfª€š?-ËçÃ'™û‰‘—¾‡RàI*è|´µD¾=WëÞ'(èG˜qMõÏRþÁµ'æÃ챎O[4†„{8ö$?yëóÈy½ÐÍB…ÑE¾ñ“„5h,)'*-.ž7^ü[|Æ‹G$…ƒ•¨¤8ˆìX$ ÿ_˜HîsIì~+)„îýŸH,ŠÙ«ÉÍ;ž³Bƒ«äÐú.6¤§§±á‘¾ûÌÂîÏ'Ͱo¿C370M2‰Ëæ0+OfÝ™p2ßœÒu AMKhHBG]Í6 žÀl|Î(,õT/Ú–†h²°š#DEýŸHeM}À#ÚLT–á-§œ8TNEßÁT9ëûáó­Ÿ%¹Gç·Ò™*f>‘ÓÞB)/X¨³íÙÀXT ÛŽÔ`´½ä[¾i¦×Å{†È6w°¼ÁD³‚WÅ‚—¤|+‚իϹ јˆœîÊR*¾«%{!-†AÁ¿˜¦À&±i“9oÿºþaˆ0Ê|n+¶[f›»+ùnYSS‘8M(ïCí o;ºœË1MÓÎÑO’d…+ûÌG“ì)Àš—.y#•¤Q¿áÁ¿±â(dW§ì§=ºÁ'e>“ŽÏAs–¥ '‹"ÛÞG%ó YžÀ¦Q´÷"UóæSþ`ß8ÃjL; (LgÉßÀ[¶–Q¢ˆ›œA“ç­ß>ÅÀ=#—T'ü¬Û¶÷áYÈ¥@¦‰\J¬B¯ŒUǨÿc$¶I¥I‚A,… ¸x/÷;Ùg†I~ÈŒ]ÉÀU´½ŒO²ˆLÌ!&¸Šk³I ¿û‰ÑÔKç¦å¬ýmá(uâz¡Ouö×bºè/IÊz®«^©St‡ÐBG<èÕB”ÎÊQSÁ¤©x²o3ùÙÉmç,Äå¢?‹7eDm.”äC]í±=SÐ&¿ “iú ÓéAú=|ðè«¿Þîon¿º9ÿôËWï÷ß_}¼þ×ûÛÛÿpˆ0ÿ:¿¹ûêö—ó›ýWÃåO_]\üt9ìo¾úþüî`._½0–èåÕ‡?_ÿëQ:Óaøç¿îí ¯?ÿ”Ã%Ôôäõ‹Çß}÷üå«´4X5ÿ¼%zø/­díÿñÃþCþQ†!à€¾‚€,禊À£æjð믯¯Ü惯ºjL²ã1™Â%pýýÙd œ 3²ºFN{Þ›œ@ÆfH¹Çç|ÇÔÌÐ)ö™¥Š×w~†‘ýì?|v‹~´°ˆˆ‰ÿÇ›§Ww7¿åïS¸MæÀ“Ö01ßÝóÛçWï÷ÿĨ±ÀDcÓo’0„ ðh-©ŒëøþúöÍu"Ò]4¬7ìφ‹ìÑU)qнù£9Ò›õ/Ÿ/‡÷onöÕ—íDziHˆgPð%Òm|Ëjeø ƒ¼÷¦v°:r»¹þtþá`n<n÷·µhæ'ßH^'X7òfS>.?­á†Í½Mìl”1/ö7ö£ÝöüêîzôÍ„fi 5ÀÆ­¯–‰(ATÒ \ûŠY+H®~GëkBšÉÉêÕÖ ²Í‘5Þ Œm’{r#WOI: -æDpëÞ‚Ì…Mˆm«jO¿½¼zÿæp’^žvÛX“Öè; ðfP‹ø “š’Êz ®~:¿½¼@pÄpÕzN‰½­­;zx$´HªÀL»%Öœ›¶ìüºõ4®ö|ù›ñ!¾úû>: Æ~ ô霈OÉ]æ¸ðIÆ¿ëíqûÑÓ^ì?ߟoÎ/o÷Oon®o-®“\(¤§ÆM÷÷§ÿõù`zü;+üXº;ŒvXD“*q ¦Š¨÷»ç¯ßþ¼ùë÷ß=Mü–#ΦêÞ´ŽŽ¾0rʪ‡®ÌTƒä:¿òÈÍvrT°Õ£þðùêÍåÇýáÈuñøÓ§áò⛢ Ú9z"‚WëÅ#=ç–!ÞïŸí¯ <À«S„3lVBâ¿Ó] :£þncj?¢¬'þ£1ÞŸ ܾ¤ õ(în®‡o‡ë<¿úùúõ?.ï.~ÓcÎxh‰i9Y™õÐØßEñ„\y \«²ÿð(É!»PRÌAòÄ l'ï 4M1?Âvš¦LªyR’ôÕëùæòfq·~U Û½müQš¡ÇŽomgÀ$qÛì½·V Âr*Š Ý{ªy±¿ûå¨âçl$<2 Ä7Ì ?b°•ì>&)˜¨rdÍéüq>Èž(ìuòЊ›%¸JÄ¢›©Ìæ.j!­Žüûs›ÇýøööòH(ßà#¹ÜN³øð þN¿NÔ){›,¢M ãŽÆEN¼ÁÐr8ý:I;.†À–&¥Ø±µ©&cÍf¨‹£Rܲ¤\=vùÑ,—wA Ñœx´˜š@Ú믽¼z¿Ç´a…»£„,~rÓ9¢59žÌª¶Ò1†u“l1u\q Ô ôÑ<¿2«úßI²¬TKÜ$Ü]BF8nä?Ž_<àTŸxtåIaç7Ó¿“ÎR|Í/Z•e?…¹-IÇL€<»_ª­=Ãþ^ÖSË…üä¾N[š/ÐÂ\Ú¸TZ¯èßÿj²älw:4TÝÕþ ‚8`¢RõScÐ&xùùãOû£uPYßì_!Yòõ`_ÏïSäIuÙzW"UG‹ª\¡Ú)ù‰Ìçt÷åþ*zj‘à•¹ ÚˆÃë¶ï»ëó÷/î>Ÿo>ÔæÇѺá¦m«©Ëk ‡Fixü™¹6S¿>Z¥f¬/%6ž’þöªÑîÚ{ þüÃÛÞÓ_îÿñýíþóûkŸEÿêââóÍÍþêaº8Òã³”*?ˆO<@ŒK¸zDªRáâ• ÿ“Ûà¯ÌÕx rKôØU9Ð(Ìj áT¸ð6k*zz>ÒµK8Pâç{(«°_ÄP3®ø7抄ÑIÓ¦F¢¯Nd¨Ú”ã+‰®*ªRMtUY3Ç­3€Z!3‚¬âÄç¯j7Œ™~YÒó®¾UDGÙt Ñte˜I6¦N§Ô#WAz³ÿ°õU†q-êO² ãµø ¨>Ë4Y‡ý:ÏN5ö›«ølqÈNÀ0yÕN 1¡#A½¼}sýi°—|×mA•p¯Ý$k ÙºÀ’zh¤W!öVæV:ùþæòêîåùǵÐÐÞ@ðÑraú‘¨Ù½œ&¢’%ë° -Õ#ˆ‹¶[‚mi?ʬC¯*nËÕª1¹zDØ·ÏSx%Ty{k‰Ih´*(ï¶jýöf‰Éq]‰õªHW¥ k.çÌz’¥úVLa>ð~$‰ŽvÊ^‹üy0÷xn.ï~Ãßël0ç*2;ú¸—=Ü¥‰”àê„QˆŸn®/¬«„g>4ºjpå‰ág=’ïG‘ge|qwÌ\~+½"ÆÂ?w—Wó€{}ðÒ#­2H&!pÿ_53ðkÇåÒŒ{ûËõ?aà¡ΦITšÌmé°j%jØâJ”a¶÷¾¸¼Z=Iðî Þï/àõʉ"@ö è¯Õ “RÃÙÙÛ’¯?#Añ|m‡ÞŸß}¾Ù·¿­ç*jÅÕåm)ã”’yÖuȑŤþ¾[kQÛìÉ«ïß=þËwO_>~ñ4ÈaI}Òõûß–Þ5¼ÿúúæîÛ냅Küu1ýíádonÍ-½/½èj«,½®ü¥R#¶Ÿü²¿øõùUl\à_éñ«×Ãõ?j€êlé›ÿç”à/“éåq‹ßpaëC¾µ[`Jý/}!“/^›z›ðÆñÔòÍÓÿðôñ¯Ÿ>{ñôå´úRß÷©Œª¯%´Hþ¿‰-UJi^—Õþ/éïòíÞNuH3òÍÇB\[M~‡¶BïwS~dn5þ$wS#ô©Éx±&nè{Ž7 ¾HrÒ Ü4jRæ"Žù£Co‚Û»¬äó´"èKgµ™ûƒ:Ã`Ö]E Ëxy¶î0R zjÞNWÚ°¨ýS¼ai÷ê™®%Ÿ)Ò{@âYÜÙÁ#p]'8Á¹©ÁY©Á¸½­Û‡ÃÞàkÚ‡ob¾Ð[3ÂðÛwÑî…ºÊvS/N> K›Ò¿¿ ›?h½Ë°„´­=ØRÑh i¦|]hÛnŒû>8k©¬{±Š6G ¢kìa=$]þë%N§Zê¾§Ùm¦7²gï¢MȨ!.%Pƒ©AŸÅ(Éänjødyo¹—ááA‘ŸkTâ;{‘Øç„DÈH8+…dh6/|ú”Å3 ÷ÐÙã» § ¢bùÂÎy“<Èþ­! ½±õnjù”ôÍœi°Q«\!” –éPfädêŽaòòC{„}{ÐDÆ·lW®#(`M/îÐ^¼-‘ôÓéÒ>éˆCíŒQ›ƒbO ‹¢ÁbÅ” ^lYšµ] .…o>¤–Õ8y‡{%:ÛÚˆÓ ‘柽Õ<íNœ4Z@LüeE0 Y‘‰B›bOÚ£HyÎ(wKp|c÷-†2éu‰÷0ˆ»È͘—ž—ZgÍZFUéÿéló³¤ïSÒ ¶°ŒÚuȇ¾_ X†ïÒdF‚A%Æ!¬$Ê!ÂPø@«%S®YÓD…™r¤ÂÆyË«8Ûöm‡•×ÀX>¯5‡ƒL.ú„ZñeñÆ!ø‚´¥~óçF/ ’SOÄ¢¡ÏÕD½)5ú­.w@›¾B ¦pÕå-5{9حöTKî·Ô*Ví·TÜM[ê›GÛ…)1)Uɤ\0 £‡¸õôžG@nR"»š]á»Êw“9xäHæê¬ZÞêÝ\ÿ_AFéc5Y0Ã,g™’mãß‘çðOL}ßKIÍÀ#&À£°W¦˜y£lPÅÖlôsÜW 9~—ü%ÑÙÞúŠFVŸÎ…£¦Á®áw´fgH»Dû Ú“í°Åž-ð½ë_5B„ø¸\¼ç£ªÏr¿œwÌ,õL…N±‡Ý!¬›9˜¢²3 ³Pk a8‚g£,ºÝ¢O UQ5Z²fs»—¹†(ˆžF‘Žoˆã-nцP5ÖÀ+¢j>RõG™œüPJ!=¸ g´òit^¨zÇD¤g½¼C@ð¸Ê›EÇi!£ÎƒËs‡ äÌ^j¸mÈz6l›FÐz¬ö;pÀ­`Q¥%Qþ÷;þ)äd)Œ’H‡¦²¾Ï¬f:WQš³\‘iÚSZkMó$Òðnò˜—»ÌZ»®0+s®t-ý«³O…•Ú‡§‰TõäJÊÇBwqž9uå„ë]±§'qp¦ òÿÙO·tEd’ìO¤¨4*N‚ıqæ”2ê°q=Ápì¥èJç7ŸÇ¨öô_îë*(Ëw^Ää *zŸfïóìur–:\s`tö¾5{úy[s¥ïc‡³Ô—÷ôöŒdgÿwjÃi±6X$Å[YSVpÁa‹ô@´þø‘mø«»œîÌnéŽw¢÷aL¬¿ÆEsÄ¡ZßL:;9åú7’Ã1æ&ÜĬÿ6¶¢mˆšC¤ÛÅv­ÉÀóV™Áz.5B`ÅSã{žq¼Ïøå磜xq0-Ó»A.C-ÁQÄͶïV(¯$ÆZ¶¨_'ÒÄzF5#öŽ,/×JÔCiÕÖœ7Å ½z`Ãd¤N¦ÞìÞàÿ*4=ž!:µek†sœ…B™ýÃŒ±¤ G嵦2ön3«¼g#–×ÔÂÈÎ‡Þ \SM#ïCœ1Á<Ë¢©eõ2$cQ~–±ŠA‡J1  ÁÌ[7¹Ù2QͳÝsÄe—™,]>Ë˳Gs†=ÌÎô°Ïwpž 0ó/8RK8Us8 ø‚NOèâDPƒtÜ+:xb=AGélÆ¥LŠY_­eâÁò,”!FÂü#)B¾†QŒ)ì£Ù5ÅéòÀç_Ó .Ô£²Ã”÷ÑâßýμîË)‡îÂ}‘(Åšaðx‡¢wt8‘i°ÀÆ?H¢Æ†äý[vÃù¬éÈTàÑ$¨Œå¤äoœMž‰f.„”ö]ñ´²e«C¾œNÌÝOÌÈŒK'æ *1Y}žÂ=H™&ƒû  zØT:MØŽ¥ª'å$-I n>}æHñ”dnÒ”_PÀC2oÄNdðñ’åWƒýìÁËi®3©¨Uyn32Ú»fä ž8¿}~Ë „k>K_ºì'j–¦‰R=™…Jv *Ä{eÔå`µcBÒŽåì,W§–ñLY’é€Ì;™Jí :õ\™ªS\'äÞŸ(·/ORyëMêDÀ¼¬`Áw»pÀÀc ó~›Âð-úñä¶÷€9#Â`[Lyñ‰Cñãå>ûÀ·+¥\/ÁYÈcšn Z2ÜŒà вƒ¡aC£ƒ%IŒTû®©GfbGSrRõ;ªÎ-?j‡TÂnKÈëììSé§u7w‰Áï׆K å_ç/1¸ÐÒªK ³1àc¢‹Þ+Íåi龯8da,±ÅJîçŠƒŽ•‰%­Üä`gHn‰Q„^qÈVE‹±™–ÒZ*‚ áðÞº² '£N;oÜØ$áÎÓJpFäØÒ|xŽò¹©jþtbñ9áF5š§ê|6À-´l JMî"¥æ…ê2Â…[0㪠ï2ãùüh“H±4ïc.†gq…žðre?a¤(.˱hBÚü"ëLˆ£ÖLÂ僥ŒÓð Ê( òp§PB>² 4X~Aùˆ…ë~öŠñׄäò‘³WÀ²lÄ쿞’8[³§}o!iJ‚ÿ’-Ú‹•Ê9÷=eátt5€ÐäqrOrÚëM›Ám‡fñµˆBÖbçnˆwý“ùŒ)ÐÅ% ‹/ÝOæÜLLòð%éeñK^!MxõËl™¼š(`¨J‘sf¬A99q€ÙÍÁYîÉB6qXìîü}l³ÿr+5T¾°kÇN_–ÌKU(µ~?·Ã<µ± º#$MnòˆÎúQžÇ¾hKÇÍNöˆžI2LnÚ§w ²+dvîrNÕCÂ:ã³l+Џèr Ùº@=×Óaÿ€"ÿ"ÚónD<¯¯çá²Ï´`$Ȇ¦rS€üjÙ$#ÃlG†Ð·—8 Rp¸2rýœ_ªšWõ‰÷ƒ„”êâ¡ÙÇGÌëý®3ôµÿçÿ8¿z?ìoÌrµ,ä–‚\‰£;UñM>ù¦îSO„fdÑŒ|ú4ãáè—òÅÜìTßÕ§’ÜfI ?X»"»ždÐòHåcK]žgx{.(N@gñ!ÌÇë P΋‚O¡CÉ[Øð)¼¢‚7ˆ-‚=ÕèÓ‡·° |HÙ>Æ×Gð|…_"Á×HðE|•_%ÅWIñUR|•3‘â«t }ºÊ¼_!¥=rQ嘹xé„Z‹TJ´4š}!+(ä´Ù#™R¹"¥½@‰Xr {OΗ‹ŠÙx~f4«bÉñt*cçÕCˆ­Åú¢ÛM*¿!=ïê˜Z°€p»õ›/l­òƒÎ¥}ý?}<‡ÛRÔ`é§DŸ …=«ŽtêCa*ßzÚçä¼y1½£w“I‘Ý4_çGOØy\bi“,6·`ÉNž ñ¹ÝȈ!u‰¾¨¹?ÔÜ&5—žp„'‘s¶·£7fŸ®?=ýç”û垎r±ƒ´½fl0¹µd3¤£Á‡oý€Ò×O¼ý!’«H\×ÇôʪÎÕqê8ép^tm¤i||à!«‹_™L jï&›{J|£v÷:_ä¢ÉµÛ̸Ù’å.‹ø](£»ìÔ$ÞK2wmX]3YØùué…„ð¼B²CžìcwBôsN©ÈåëÚûg|t°ak1Qï~å9?3K$¸-LÊç¸x·—w[Š LžÜ.}8úîi4€pÓ©)ôýðùÖã©à¶ w—Ï¢sSöǘ2=yãü©Èú­#b­Ê|–É€àÿñ¾Á¢ ÀãÏiþy]:Ú¼›ñKÙ*œ Ž.“FÑãCßB¾Œ7–fóeÍ—_f9¤IåNO•5A j«o:~û%3Æ)o‘ªèFô!Dfà›ßÏ’F¨fí]Ð ´ë 9w“"æ®×ßþœºàלÍQ[C«Ó¹s#­zý»¥nQ]Ù¢‚|ÌÁ2óÚ˜fÆ&œ †Ûf:ÈrËý÷b…>‘m¦ý3›÷D(°ÐR*\k¡!ù;Üœ,nJB¯¾ÆÑÔDCÆÏM´wþ¡ôÚo¼Ú¨ÜÞHxa'Ö•xÞ øÎ•F#»ÒLX aœäÒÙÑ„ð`[»½‹µ}R#ÄãcªédõQž¤s‘ºõ11¡Ò>ç#(Qòߢk0߆'ë–„‹}bÝy÷-¸¥Qu’ÈÛ~¯ªè/¯UuÉ?JœèáBVø„t¼×ÛÏCñCƆ¬rÄ´ò„†D(¯¸ÚªgqÚïÖgîN=)6Jw¿5[¤»_ÌJ÷B´ÐrãžÊ¬GGìa1OªŠæ€ž^$y5ÈàÐY³%ÇÈ"3„=Kù®Úz¤< á‡yVH1”pAhÛã3‚.'86çÖ˳ÓfˆáoÉ<† ndóÆCcF¯QKƒÓBÉ”ñ0¹ç7üBŽ;ÞÈ¿ªÉ-å5‡Z3Ôiê²Ú÷hŒ“ËdÄQŸæºM1”8ª(¯°¦ù30ÉBƒ1}óTAmsÁÐ,Ž´J4“ˆNg,﹓bSá\T3åØh*ŠK¥¿f˜0=`Ì– JÊИ ‰]_JãîfͤýpKø*Ë]߆ ä"5Þ³ÿO"2õ¤þ?B±­þ¿ ãÁ(.ûÁ€K;œ—`Üd&—kñ>rÑs•”݈¹×ã\}Üš ÿ¥I4¯„èt3©*Ç·‰º*åsê’gÖ“Ñ›Cøa³1G’c!bÍ‘x´IÃ{·k‘;i… Ì–•SVd/Ð,'Ê¡ÉEG?£†=)ì9¸Üj¯¥ðñ<›ˆ’;zÿÌ'îgîÐ3 ï Z/ùð¯-IéãõùÓ‡1X¡. µ™4?LzOsÁ”6ËÜ*βÓù¼fÉ)Mcs%~¢:Êi_%.kýš¤ë„£U’ÿÞ'¿óÄf®+¹·h¨„H,/f®yY¶³N?º.&Ý_®Ì–ì4î# ™(uXJJ IåÿkÁ޳>¯ñn DÓàÊ€ÃÔàƒqI˜½*…ßÇOð›–q ÿaw½ƒbU?!”÷ßaIüµßÆæüÚ9ó4~ÿ-’Çïª6QóPk}"¿ls"?b%"se~žÏóG^×y]öq1¯Ëˆ+Ò‹³Lå—Sì¥ã3Šh¾ÅX2Ï Y,+4ŸÚùAX…ùóR$~ýÒdó¥éhiN¶ý‘‹üç·ÉèœN{V %¢…nú#÷øJmK©Ò{'+Ž0LŽ0®´Z8ÂØUýn*ÊUs„ À£„çU·S÷5'Ž”˜ÓCZñÔßÔ‰k:ŽàP2þ-úÆÆ‰Ã$Ÿšá$±²èØÄÉÒX4õj× ÚÿžÉ ïf{>²ªpk>Ú³’0ŠÖæ¶ÿ • ލ  pÜñïš#Î‡ÐØ_Ù#à,Ý©#ù¶öÅšH_0çmj ˜>0̨µ“ ‚… I9NóKŸ Tå²=/âÐëýðó†ìPa³à+2ÂrL:¥¢ó˜ÌWo@ Þó)'þñ]$#’¾1…Ð} ÆùR÷þ½¢[7ÖLn_ÕèUUöRežMh!²àX'Εêô(NsšJV?“IdT ºãY…#Ô“´ˆ£ÉNö¯â ‡èÈéEŠ_`$'‹ßàsvinôqc´ÿ*œÞZè\ƒøŽçEdèS´€S.IÒ ,Õ̓­ºÆ`ˆ`بlRNÊ+˜bÖí°18*û7ªŒó<%°ZîIá£BÏ­ìQ9äG|Á­Œè‰;<(˜ïtž‚¼æõWs½©7¯ëÜJO­_þeqÃ#ETkõo0ó)`?£--ÌNÇ;¼ºT.ìlpŽªKJˆ7#T™ëß=_ºv¶¦jœßð•ãŸýå8½Ë½^Hâ¿dÒ=!y$Ò`Q9‹2è׉o­x¼.ÛÆ“LW;"­™€Çm“œž¢DÇ6Ô@58 J*3qÉÚwu‡¯¤ïºd%ò^W¢ýr"^ -­$Ù;¹K÷9äÛ¬ÂFdb!™HGܬ†v¸÷U¼19×Aàh;ÔÀ:2¨ï<ôZIôáLô.I"´‚Ó{¥N&™ì¹G¡”؉kJèÚ\•ÍWEß–gIfÛÛX0âW¹Sï)ZÔ®/L’aÁkbfÖ<…6õÕBÜÃ+(VؽŠLƒRîºÂ§IÞ°[ €*y7m=B%™í8¬[±I»ÐŒÊÞ°³ ß™Wb±³t«#%lwxqy5ÝÆNoÁzVÖ÷æÁù×_*‹ù׬wÅÓ j‚æI”£ ÅÒ&ßN¯g]#‘í—ëC¨H)Ó,4ÁÎZ8ƒ3hþ;ßÖËß³ù®4ïBoq&€3E9ë°×Ñâ×»5n)æÆP¾_ZÉTO$ùŒùí ò ȧn}[¼9~õM™ÚÅ’Äã—,¦«G… Öý U”è혭…8ÁÒ[I ¾°Æò³èÜê¿,«ž€/}Bn ¶¤ÐÇ騒‘„-C®ð¶¤}+¶d-ݘž-©óÓ4âlÉ”ÜElð+¶ô©2IEʈ;ëûS p2³ÁÁ*‰)SPeá8“ø“Qodv¶ ‰‰ðç™’ä|–†hð*ÀÝb.;ÔlÊ¿´ðV| iÁaÀI .’ˆˆôG—5Ò‚³É[vœ´ð]5ü˜^Zpçþ7hÄ¥…à‰øÅ¤…gè -DÊsîäÁ%8yp‹î“­´ÀŸíc‡MbÞ7ñ×X iXdým,£0 Z»7_‡O&›Sƒ_{â ëfy®®Ü.5©õtÐEÐâó!¸Î–uò³übå4V ÐäàèïßN0Ò†‚Qè‚%ibFÙ[Uk£ìZ™Q"F7惌¯ƒC#.e(rÃüb‚1m]ø ÏZL¼úIïµØŸŸz'í6sĬvp‹û·ã:Öë$<ó:®S,Ñaj]ª‹ã:E’¢DGp \çÆ|ð\'Çó‚©DŽë”НMøÅ¸Î_2ÌÎ+Ñ?“ÀÏ2»yl[ÓbKR.§Ç@þoÇR¾ŸÑJ–"a) ›49–Ò"‰HꜨb)gZê´SBED}†«ÔÎuMòÃ>x®Ò¶Ú²Å$ÎUZ‡B, Š5ÂUþ’[ÄF2ý§™|&ZMæ\_zµÔâXe[Pac Ù¬©¿Ù¡ú‚Õ§Ò^{WÊÒì¥ý ÒÔ4û߇À7¨&”qA8û+¬4è·×2ó Èó;¼¹–¡<®erýÓŠ×õÉ+åˆDçÀ0ãÚ[äÅþî—ë÷!ús8Dwïjc¼aÌAЄ³îè{€a¹ƒu¡½žã½ž;X狵àŽÞsÇ8ìƒçƒÚÁa¥&û© RŒb6]’N—oŸù’”2éñŒQUy56 ÈÌf¦6q¤Ñ'~ìÞcaE¥Ãy%áêDÍz“†0ÌšÒvYîSx5+¾ø±TI#8Ñ«S®™$Ž?¥JÄ—7—GZ9ÇH”‹“‚E:¥ðw†ÆŒ·Lóá ‘Ï„TO}I¶È»hµx±ÈRkùx¶…›bYÐÀ~+ÀsÔDú¸Y¦î<Ÿ­¡H¢ÇŠl÷Rûbšîµ/,¦‡ŒÒÊ„UWíÂlaR킉êÊIò?ã}!×m¹ÚEå·ž*¶Ì ª]ŒßbÕ.ÆŸ²HWUñ‹ü< ’õO[üˆ´ê.– ‡ w‹à…eü-îÆûã¢ò•§‹ÊÈc|•¶%aLiY.½áì@בïaç쌃êÅ,^ûF(埻òk0vÅrÍÇ:÷Ç+«úˆ¿òpD{Ëàt*|ö·?ú[®ìoéñ÷À\:ª •H”¡§²sy:·÷]É|÷HDaÀÓkÛ`Ö¶¸dèÖpt³`ŠqÙFgêøö¹åî!(ÿ?ÊÁü¡»¾€îJ)R8Št9Rlà3ìº1ô$iI|„#9•Ý]ÛÂþë§pâáÈ]pIÎúKRîINa™®·M2æü`/³pÜ lDI.™"uŽ®ÓÚA+ÁB]‚®ó–qêæàvžý OwÙÒPq²°.8ü½è¦ÑåãS2F$¤c*D~Ìÿ4óÁÍ)L‰F‰PÚÝ”˜=añ:84æøµgO®u쇟ð«ÓÕ'¢^™$Y¢ë0ËgµÌ¿Å¢Q²l¬Ì›Ö¹Å‰ŒÖ½ß1{¤à#wîÖˆr)„BÞeðenr>„FI4Ãâ͘{döo•ý;^gøn6ÈÍ·ÜÒÊ .ó,œ ÑŠ’¢+— "3ŸR‹øËJz&ÐÇ2¤ÛÚ»¿l<ðûK½¥{¡Q3Öw§<¢ÉÎUÅáš$:¹äˆE„ïüb£ûÌ¥Þ܆ 6YVö¯.“òl«»p{¨a9Úº· J;.Ì&·Q.Þu¡‚!jé‹›åGŒÄ#•:в'q+-vpÚe–•ºµµo0©Ü»|u¯¦j$Á»"¹\ïæÜ_Ý­Ró&1¹šÇXË¥A¯{E•†EµÎq þíÕJÌW©ÚjÌ·&ª¿½Â° V‡mŒ7ÚóÁÓÿúl…þÊ}hiè¶'+¿¨ãì]?Êâ ›m]ÄÄßΉ ;Ñ#éÅã`ÓyȸZÛ‘ÉÑç¡|-ÇQÇë_/?½4†Ó¢ŽÈÚ¢ÜÚv·(ó/°ãô*Dú¥o# hCI¢È×rQ|³¿ÎoªÔÀ¼‚‚«LB”öÍ,>d¾µ^€âô÷Àœ4`9GÊ¥»ý§ï¯/¯îBu€‰¢*ßõ,K{ l£ÑÒÆ<^>å‹9Ž:Þüöiÿêç‡G¨çK@( Þ°#eŠÃÊ6rá-ƒG“Kº’c%ÉùÝÞ![‘Kýl;›öJ¾{þúÍáÏ›¿~ÿÝSjL #qÐo¯m|ÚFQ¿Écþ»)¸JˆsN¦ïE¥ay˜døi '.–®ÎÀÕ*’Ö#Þ°G±ÏµAä& !áãE fT™Èé£7ן†ýß÷Ãîü§Ã)î<÷W†õˆ¥±ÓÍJè¡ ÄíÒCOµ€'ÝäQbqwf=6hüáåùÇým½Wx–˜ð茗R¦vQÛooö·¿4 Ý¢Fc…_²flè§9ÖcDÛŸlHùÉÁOWé‚ÿȃ:¾"ÈG•ñ½W7ߟßÝíošc*xqüùëªâNÇDþ:ÝæÈCìÄÖAP[åÙ¿g/~-Mšhÿôaï9À&o®cì®¥× [tûÖ®MÊfûg¨r 3Ø8‡üÊ¡IqËÉŠX1ÎHC¶Æ&½½þ¸ÿîü§=0f‘sW#µ!rD¡.DÄ׈EDá¡2€ÝC§ù!é2í<ÌÈòf¹ûâü×ý\vBIfð*s°*Ë¥2 (‘-)ך\ÓG&“ÿÏw×.\á ÀÜ(«¬qèõ PAÒA›D{§p>DŽ\ÇÏ'fGCÆÇrÐ1@ ˆj@1Y3V‰Ni»l¬-t:cÚþ÷ÞSìY…0¬–iߟ_Þ‰°<ÉfÇ”i5|±Ìu"këöUC²¸ž¦fóè¼ù2ÆgHt¥AAÉ4ìc%óæó§žBjÈ5V:³~=höyBµË_nÌÄEå)¶åMÓs2Øé¹PF*–ÿ…#¨IRÜÄþ9¿½¼X–JÈÈÔÒH=Pïîn¾ÝŸå^ây$-l+ÏÏíné„q%\_{³ß;œÃ°¦*[@G¯?ÿT‹¦:ÿî64¡§-¨«êt\5]¨oo®?~s òÆ Xâ}U|#–ŠMy *VY«÷!!Øôœo‚Ìc¬¿¯Ñj‹ô«’E€ýêÓÝåÇËíG`@´@B Ù—døz*΀I<0CU¨¦GŽÐ¥ 2·Vÿþú—ó›ýûÒ+ÚÝCE¬ !ÎdúY‹^ .aG#–ÛFì ð"×r) [êæu ÇNUiBªŸÌrX §“›hšȳ4X\bµ»§Hˆ,‚ðy#YTr…f<œRCá϶¬á3pRݲäÒÆ#9\[7­†ˆ×t#O#šnÃ+pï{€¨âZ0cJ‘îÑÐDE"v†Ó ] ÏÀ!’µ:wÜÀá3jmƒ«÷öø9P-ñŽ¥ÚzoÆÂ9v~¥š˜;s"XxlkzP5*{Éèè‚90èU5éºÕ¶Å, ´¶ÎõE¡¬ŒÝºÿ¯Ï*‰D®£cI"ZaêÇñuâ,å5™à†g 3@Æ……âp«ÛFUè +( &K(5*{ÿÏO7È0k;Ëh†GÿÚs8¦0Á^΋èŽb-u y5­¬Š/sÊÞxZÆñùøæòî74À…®®.tyÔ§÷°!JXÁSfΪ üâüîâ—v,` B‡¬‡µ¦/EwùT6çÇCÁùäÕ7O|üÃÓÇ?¾~úìÅÓ—o|¥Ã¨gÑl¿ÓÌ!.€™VÅï‘7‰¯LW¨•™ÕpK»F¹:m„!-˜ +#íc|Á™¾Ë¥žË…2#H··—®v hðY\Êx¬(7[×wÚƒê*ŸX¹Ð…aÒ:êQ±^>3q\d:tâ0¦*Û¶øÝ*î•‹ÔÍÕ–»©¨¶Ý·™FºiVU›<ì#è êªMR7†2ÞУj“vÙƒ[å–j“5ØE .¡,›nPçQI¤Dõ¸÷=R”×ÕyT<)kÀÎX¾Ï[Ö²#»žî4õà|1¤qʲ2là£0'ÎÁ5à(N3Ûx#i_Ö{ôjt‡£{õ`g¡yÌ}m€HL2舳-…†Ð)o9Cgy†¦Þ.£#&GÖØÔµOBºR)§ü4$fï'YÓ*ÍÕË3¬ïy0ÌÐRðK¿ÄÝdÎÂb®‡NOFÒ(6óO½ë9}ÊG¥>ÓYŒ8í8„Ùzk1‹ñÁ!8Ǽm-&:Nw½L˜ÇZ‹yÕxW³¶b™„¹­éf6zCeñ4 Z)zSw28ަߎO|“êrë´Kq*ésÉdtÑ0™û·LGV3¹c¯Ã 8K¸Æyv(jq/ nðDÍF™U(ω‰&·¯p\@ãÎ ³Ô’Î3ŠaÁñ&í ëºÎžþ;C6íûXŒ$xU¶¢+¤Hˆb³»h1l£NP ‚‹É`FyQ´¢‹¤ Šûm]$ê˜]Ô[¼¸¨7æI¼@üæ«Çÿ3˜™7Q#‹A!pb¡]°ÁÍÐà•ƒ J/Ëу¥è+ • ŒˆkÁlŒ“Ñád°ˆa>_~b1„~ŽÁB É °Ö‹Ð÷Â7|Îí±í!U½û«‘¢ç &FtÕ4KÍ’À_Ãã…ŒJ>vÄxŸŠ?o×5ñó´éF>KÄÖOÞ;¢P=üròëØ:­_—ˆ £qCÛƒ#åß²_¥ÙݾA³cýžã@8áËtr\ëÅn½¦fbé¸V«©ÅÎkj7惱Œä§ ‡²a\Åøíë¥IØk‚—e‘í¦p8rø¶…6~-¸r;&R—P,¥Ðøs~‚ËâðQª xz¿ ô2-¾ÈÂF–œ¬¨ ó'àÞ¤B¢¢™ü ìÐÄ7¯O讘ø–.Ê,A'G…Ù½´¬9mÖô=egÙA09’EöÚegj¿žð@]½ÞM«e·äöÓ$‡Ð,&çG–³ÇȘ‚Yk W½~9ýÙQ7Ô0B4Œ$±†!]×oP1B·R12¨7æƒW1ÂÅš qcîN¢1B°FtŒgû c²\¿XœEY–^6‰{ápâÊ2×¼Üù q‡z…ÏÔq$¥œ:sÎö,ŽúWÊ å´ˆ¤…frÍ )Ëõ«qâÌM¸bÊu­šéÒ"”òÜã"Š&™åýF(Nló<ì˜y²³•J]0mRñ±z#šüº"¡Ô;²¼ EÔgÈ7¦›Úù,¯Ó òìß,ûw–^ù óø^–OZðºÏæšIøbW…<-œx„Šy³KW›]ŽA*4K†Š>KèNø=(°0õeÔÖà´Ô¿ýÔïJö“YqO Q/R‹ˆnq÷´•E¤vÞ"rc>x‹È vpxÄ-¢^õW ‚E@cºüì‚Er Šo7%îórðÑóà¢#]p Ó+°÷Ë0÷¿"^ö78„H¡„,';¤HÇøz–“o‘ÒžåÆ1:ËYÄ(ËINy,E0–} wÙ!dÆÌ¹ê!Õ~úü’Ù±¯Í®¶ïóÕZÛ]®½ p«õwóTvâ­â°ÔÑÆ2ó<ƒ’§â’[õi‹fèJN[áªx#oÁìÊ¢ 6=¤t@é§·Qƒ¸âxD›ÙÕ¢²/ÎPï\ÒÉr=bb²Î²í-‰Jù=GI4ˆl:2¡]ð)Z2q©Q}´7€¤s}’\g\s ÑB58 ÒÍÇß4éØ€Â¨ùïÞt³âjFí¤Ó[,pp­Åéªû]²Ëj·^·P©é–~çu‹óÁëƒØÁá×-Œ¥æ\@0æàò™ÁAà¢â¼Öùi2èóÓ2¯AX¤ßÆÄfôQêÄÛ^¸lŠv$ÄÕ8Z ÂojE<¾„ríÄñ³-8ÛÅÁî9ö`}zÚ±w¿å(Ÿ—Ùƒ»AäÚŒÐ2‡ôn‰CöÁsȘëoP‰sˆ}@W‚c$“£÷ø.Y_¨Óûªb?¦ps“†¼bôó\²`Ùeóè.Švm‡Ìüáјs74 éáhn‚Ó÷\ü¨+x®pK/¹ÄœÀƒn9A„DËLl Ç¢sþzc¡h‡•ÍË ± üð™¥R“Ì"ÝEO$XËz$ó'hè³8ÞnðHu±ÁÛ<µâ½u„ðÅqà£b¤—s+6åÊØ±dAìËNE‹ ô"©Î*r´ÐÚ?óž•>D3Ư¼t7(Æpé.{‰£’ï t÷QºRf?É! t–Iwêæv¡¶Ã_ì^KÇŽ_‡uÿMÁ&‡"d£$¹ËÆÔÒ9©í‚˜w=<ï|(i쀧pÊãÒá-Y ŽŠP®/ßB®>ÆÅ— g3ä’…×ú g“ZÏ Nz©Çå—Ré©Nå&UEZ²TbéTwlZr?Ö Âl^Þ”ø¼Óáö€LQø{oÉ%¶,G Ѭ]D¶eZvóbx<Œ×´£Î–íHJ à†hžÜ•>ðÒL³¯¡ý™¹ðæ6I9¥¤äƖ¢æÀwìXMkºKXmsÞ)*-»"«Í°3ˆ‡0ÀƒçƒÅÁ! çž>$õS›ùòt¦ãƒ‘v²¾Q ¶ &;9ZéEêRUÞçÁ”iÅY{EmX¼6ŸeoëÙ¹°÷8Õƒ§ªÞƒ /éXªR$\.)Þ\ïM R’™c¸^{×iÍ^§GmÅW èh;I(ÇÕÎonÀPu¬tVÃ7ö}¼}»›rœÀÅL$iyþ@íqâm…rNtùhï ÿ”/"xŠß~ð÷þI°Ëýäõ ›eqùm9&‹«å½9‹Ë']Ugqåÿ&Ù¿i:„¯Š„$v5Èâ‹t ÉÈÄk¬VY\(›»ËqF°¡Zë‹Nó7ÌÑ“’"7ߣÁ>° ê½m<°Qx&Hu–ø(ì =H˜²Á1eê>'3ØÿôU1*-DE»é0Íô¤HètÊ¿º¯ê)em±38dĚŃÉü©Æ›q Èn‡f@#·ÅYvGïë®òþqèä†(Z[mÜÕ^b/èDÅßñnÒÀÉ —MÙè›ny"Š89VÎU¤¦_Hñ*æˆx×vî‹Ô²N¬’åi>@òl¸þé|—§PÒ5t582‚h ^-B¨øF6 N¥¶Ð"ãK÷ÙWL%Yc¤óþŸ> ÅÄRÖØÑ> +G p{€ç ‹òÁa8G½=oh®Bä;E}TY"C€ùMr­Hv´E|A úègo¬Ì—ŽõwnORâ×öïÕ_"Ñœs÷W$§ ÿVŒË Sp;Æ=9;¼$ÉÀ Ä{ãâhžm=¦ ËidÑ%îÑwï"з%øa"zJ […[Å•c`î¶z–B]¡€n¿²Xå*8­ ö9•Óá^Æ™éð;oM/ "çs`B˜ÍÒ‰¤,‚T]2ÀRùàˆ:7¤’+³žd’´î²±Ðï –ZK?)Q¡4Ù™µ\çZîß:ï²g%ïr( iñ%ÇÑ1Š$!ùÓJ‡PØ9Üÿú’¢<è‘p/™0R\<$QDKÑüD¼„Ž’[L¼=f>ž§P&š!láºt˜ýˆEŸÏˆ›sddë¶\Â|z·åºK‚ìÇÿô‡‚€ëÉÀûí¼D ¹óKv“N¶®>aI)î互Á‡îFãbG™^"É%)ðRÙäˆO0YbG|Ë­:áiª_`·Nen±Ü-Ë{%9áó0 ‚ñåÄ'¢Šû|ϼ!Ìã,Âd8kÉTêÛÍN½S¼n;Õr3|žØ”{cÑ>Ú¹¯ÉøŒeÛ|2æd:Ë[Ðä¾+Që ª¸ã°èÆÃØßVÝ ÝŽÆz&•Åâà–cÓke(LSlb·‡½—2I¶·ÃÃÔPwZ–R¤ÃûHp^ ËGj“‹z3ñ_-©<+eU%y“Ö—Ö²êFt«‘ñ±ðêÛ&;Áµ”…" ¸ß4±ž¯â5_´kºØ5¸5b“D:ìz±ð¥tÆÛ°|;ÖÒU|S@õ³ÇÇ$V#×ËÛV¸¨¹æ>žeÕÁqf >-®§¢˜/ƒ“&˜ü`}V޾ á£ÙèU­^fR+‘Ü\#ö~åÊ„a­Ø”•k®F ÃJ§ÐÝl^Í”øšÓtÂb‚zìÒ¸j]”eé­OÆZ‚„>RÐ|÷„&‚B/™@Šògfî#ˆ]l…?{íÉ%k‰QL¥Awǵ™7›ÐÊ:Ô x¹i™f ýëð`Çn±õÎ[‡n€Ï6‹ƒCÎ6=™Œ.›ùò¶)Ô´ša›årVt™Ðç+¸ÌkGíªíè/jù%Ù=é6±›Óm½(ð]ß'U\mS/ò–ùÎåqôª[©Ûf¸±ßIKã°ž n‡J”ûN耮ÇÓ8]¾}Ö´Úš;sq*'¸8‚Pæ|2(ž·%¼Ê€gŸÒÑ+ ôy\ ÷<âÁ€öþ¡iã Áñ­ÑäÈCvh ºLÀø/ê)±›;¸½l¡ |ýöm R¿½w¤ …O?•Ÿp‡x{kEÝÞί±+:wÕqc>tÉc;8<â’‡¨ W ‚aË·üÌK”\?‹-Î{h™`W5¸E42?{¢q5ØSšQ¢¿†¾B ö®#o5(l¹«Ça>1êÎ o—8b¤œt%8ƈÑ;UJÄØ–Ô¨‹šùx á¾±»<*Ü©jÇRŒ&^Jý¬îáFûÑÂáîÆ|ðüd;8<âüÄ$¸J¬~ò~¬ÀNÂO ƒ‘]–îå/ç„>´®ÌBÃ3E-· >K‹Á-¿•Z`cMP@Ü$1+J}øcZ`}9fµZ-° ܰžŒ n‡JœŒyZå|Âq¿ƒdŒT¶Ë.Äé\¦‚õ–iÞ}$žx×&и<.0Á6Š7¨¦þ;h§†ÒGóÂÑCdGæ}Ìk´“hvô-ÒÇ1<[‹ñè!JGÊý±ÁÐsï–Ÿ¸ ³î“Yvª¿ý}¸[Xe-ºŽEÁB4 ©V¬Í$ÄW#ÎûS°bx ~8sù)‹'xäí»Ê™ÌQfÊù" ue¡p\íA¿U[k‚j¾7ºKežˆ(ÏŽöZ(~_ßNS¡)2bƒš|î$û8æ˜9~ÓR7ÉôÙî¿:…ÆÐ 5†‚æ¶ÓJêDcpïÁ]£1Üî#t<Ç|ðCvû¸ÆÐ<©>1!ó€Žç"fè†FKL©uàÅ;ìsÏâˆðÎTKÞŸ.©Gƒ‰€°^¢uwøÇëw/ŸLϤRÓ³Ço^½øñ›Ãwֆؽþúïß]_üúæ—ǼŸ‚ZõéX‡=¹~¿¶¿2ã¼<üçŸ.Ü¿¿2Tù(BDÀ¼~ñø»ïž¿|ã·qv6÷ŒJð• |Ùˆ‡£Ö‡ë˜Ã£½¹ùÍ ¶8#`)‚ÃÕAL!ëÕ½ZþÐ[hAhÈ”Ãhˆ²¾34ô4\Y_²Š˜Ÿ/¬®{¯¨%öïMb} «sŽ‚Æ=ßÈ Èì_²µÇ /¯Ÿ·§à…D¶1v˜q„÷^Þýòøæ'SV`— žÌ‘]™¨V!ÝáéOp +I‰ò–¤Äà³6«‚DµU¨€jö¯ñv­Ý£ÅîéRŽãv3Ò‰u$É:2l™‹gñä×v<ùxtf] ¹´9ú×âbé ò\¾˜ã¸îñO·w7çw-5m +R@Çu´€lŸˆe˜Vá<Æ’Çû÷çw2_KKíZ‚Xl¶.HVs²û¿>Ÿ›£÷øí}RjÃñ,ç··—®~ظÝJZÐþQ“šØ{ðÙ:®N1ø§i1ëŒ K=FAœlYv…­‡Ï?žÿº/ÐRí^B>ÃöïX­˜-:ZÍÚÍlªyµ¶Z×*iá\jeE?׬¬_¶JŠ««|X²æ8¹ 2JÞ®Akàà%N$¾„h¶‹Gõ ÄciQˆñ ™·Î#QBb†n¥@ˆ¡ Ï–¡U;RHq ÖŽÛ íÀÇMòà?Îo®þzu³?¿øÅäÉn¢¥â!ŽŸ­¶?âÊHý­~7nïÎïö÷Ww»ÏÓ²ðÀåÚä©=2Òn÷aµ¿±¡˜ÁÉåÕ¸o‰»cÎË€i:Ä¢¨@3·É€Yð÷G&'õ§l»W2¢˜`8~dÒÆìÊI¹1=¢ˆvnæZèN±`ò¹GØg6œ¾C¼‘ˆâ8†1°ã1ïÄqLzIV_2½dnaM̓ ù>BÁFGÚ) ¶Û¼­~¤ýP\U² '¯~øfZ™=¢~÷üõ›œs ( 7¨Â9?IÆx8ÚmKaÄN‰«UÊ8xIBÿ3v •0ЊødPÚ@€ˆJiµ›`Õžo;î•ö3A‘õ— úüçí¶üVÔK ö‹ÝH Ñ~9Rȳê÷üç‡y笈{$žÜ8i¢«Ëù®ŒGþÛ;K«èQ@•j¨’°‘  ‹ZðØ`Ȥ01 6Zv¬êr,ºQTuUaÍûU o/|ú4\^œ· ›œ\|õ0al³hQH1öTq>]Œ=I`#j’Dë`ð""â?alŽèdõÈ’/ÈBÈrŽã#g<üåúýo‹ÃTò ßw)á_·ãÌpì1Õ-<…$1÷HŠ]_·[µãÓù 74ðÛ:"®K:¯v‰7*,é„·{W‚³¹ˆ;é J¸°Ä¿’<Ê]5y&ÊàU…{fDRTìåtš½±”Br¢Vç­$¡Ù›R¦XÏ÷7×û÷Ÿoö?ìÛ†ˆ LS÷Љˆ„âõ±75¦;BVAQþ%eUaI-dU´h<-·öª‘®«–³étXœ²]eßÁ· ³Ö…>ªfÕ1#§…l›gc«Â;&ú÷×ù;ÞªFLñ¯~:j$„[Ë,¤Ù([K%¡¸Mc<¹þG ³¥Kk¨#šMVÏDýl¥‡å}{}³¿üpõýõåÕÝþæÕÍKsdÊ_²¿]o~û´zss +Ç '‘ÂJ{ ·J–„„çÌÊEô|†ª“štß*‘úâü×½¡4GÓ=¸&ƒê¡GŽË»Ž8Óª´$F¯tô¨_ɺl¸ŠÆÂïPÖY¦%àSŠ>åèÓ ï€q&yÉòiIm@~¯‰†¢f_V¡·†20MSCáˆo <@OœPfcÑ8”øÛ]vò/eÒ#ºµG\šÈBÖ¡=¼‹„ùš–dÁ“Wß<ýññOÿøúé³O_¾©)pš½•F[•Î׿Y ÐüßHŸ2•d̺xÎ7dœi8aŠ`®æå¿_9VSƳU9V­A‹;W޵g]¼Rj‹‡®-Çz"ʱª/ÇêÆ|ðåX b‡G¬+í¸W ‚§2¸éò‘®e~׳ÚÝ›Ënû:á+ËnÏ×¥.W¼.—¨–'ˆ„*”¨–³¨YHÄzH¾¡¾SœŸ«ºœÞ͵:•»©--œ%¡™ê¸p3Ý ²†ÎB§ÖCçEÆw¦*Úùà ³üÀ‘íe”ÍÔkÇ?êÓü8þ£&÷¶ƒ)ëÉ`¿:ð5í:…–/ÏMŠxbžrZ?¿»øeÚ> %öo§=ìy¬¡Ò:‘dpëœn±ïÂ~Šn0ÚylºŽ!Ò‰V»©3‹ýÉwoaV€·ŽgåõŽtîoÇ“õÅ,Œ‡ç±IºÙ#í󯽡]ã|/áˆ,že´m‰ô™oeRlJ^h'¼ÌåmÉæÖo”º·§@umPHÛ› `7Iß-¤Ù£×r2ZV°Ö2+Ílõݨ¶Ÿ„ã6z³3´Bñ üÏàp£b‰”LÑãô}6%ªàk8nó$Kö}=æí[ðï¶YøÙ÷Þ4Ð{zãgHﻑÓÖgµÚÇÝÀè-ÈNèlÏàš"3¸ØÌPå`ý™\=ZF¢²"Þ´W¬–‘˜ÍDYÜ/¤Ô©ÂñÆ`ö,³¹{«.€«,‹Ãð1–ÊÚ³¬Œìé"SF«»žD/Çg¤wΜ£÷Yö¾È^'éëùù2?»±ôu‘½.³×³#”Ê^Ï[6‰ôuš½Î³×Õ³“ŸŒ#²CÏ…å}õ-éñ}åijí¼E©Ñì°Î£É¶ŒdæÙÜñŽâbí—bý]–„ª“³OU¨ÜyõõO7çW¿8{H8 ŸF¡ª'Ýäw\ .žh”>ÚØpþÓé§Æz‚ѽô&v¾5çÚÁcs¤üî=,´Û•›½–ŒûLh'¤÷eY¥N{ï/ñV`|¤çá5+ï 4Áxö‡ò >&¾ýæú.âNsj±”ã»­ù>(ÜÄÔYFó2üÐ僱=:f_ÝröI‚g’€ž†àÓ÷*bÜ"Vžwõ<®:Æw±¶Ž ·ë°Y!`?Thó<ÚÉ®ñÃl7žzß›;R Û‰*ó²Ívðó áëîes(ÆrT:/›âŽJ–.ñô&#ÑÿÜùU1Ž¿oÈøf6²Ã³d [Óø>f²€÷ãþç4„FrèEùgæù'ôo,‹Éô£w1†bqàß+Ú¿Á××¶äAtZ,tètÓ‹Þáùn²Ã;KΓî‹",SŒ„,ÕË•“»õ &Úe´Š­œðQ,Œ­ UŽ1͵2=©ÜǬ;Ëú]†Æç^AAëœÔUÞ5wl{âÃPíZø¡…Fø(râ@«™€iì€y±¿ûåú}Œ³.£„Æ/,Tt¤6V1ø’ôóÌ8òH F§AÍ:û9”{P»ç˜¹«wSÃoäko ±]Ñì_QÉ‚¼¼ éòÏ!®†ïJlÀ4[* çõÂZ}KLÒÍÏF\  ûówQiª#ýYÁ=[t8fŽŽ—Ÿ?þ´¿9ƒ}s½¡½ûca6X€úK¢ÑÆžˆ(+w§^á]p æî%äøŸzœ2Ñê·ÛžÝGôǼnµ4¡”9V‡~TûÅÍt[É*V ÜMŠf:ÅPDñ›7NM|6‰•Vk–}lGT•EÔàðRäžpº¢RZz—[}<É;ò¦ “I¯Û7Çç­å‘ìxÌð²’á žÍ„ïat¢Ä÷¹øH‰-ú‚.ÁÒ/XÅxú /|’È“Y$°‡2ýPbï(ìa⇎é]“lõ¯G%kWš¼îù=ÆîÝF¨‚@RÉ…*‹“,¡BHη˜(žCžg¥zâ<4ÒûX¥ú»ç±z†As²•™ å"”Î$ÀVÎ0E¬!c ‡Ï¨XœÍQ±Ïem`bx/31œ ÑÐÇã•) K.ž³ØÓbŽ2gàèD †}çD2gŽ!ƒ/,ÀZÀVÂ+¦ã§ ›x[)–‡Wb™”¥©Q€¸YŸá¤ˆç£W8-sdv~‰+X„õŽÄô¼sD¤¨sÒvŒÔ1'Ί3â ÕCÆœ¢]ÏP=D ãñ&qR (—ïÝñ1ÇcïÝÛ„kKŒc>t%d;8<j´,DÇŸËÔê(fÊqL‡ÞÿÓ?E Fô±tÊœO•Â*¹’_¥R—Ä„³œ U›YÁl†à¦óv€ Y ·!0‚zš øqˆ°¥PfÆNVœ6‰~%X˜&2Òspˆ1¤Ï€ƒU8‰¤2“:NW ¾*tç4˜»3~†HoN½ÒpÒ›ú#˜È¤÷œÀæÝÑ+e .¥Fj•+Ò‰ ˜ÌCR2r+¸/öš!6n§‰Hó€”1ó†ÃIl™Ž˜S„î^[z»ÅÙVœ«³¥Sx,é0ÌàÁ’ XýMcäÕÈ®ðÃ8ÝZÈujqbaà®ZeÅÇ«,5Ïò]~å|”X˜ãí£TäÀgÙi1u¦ b*Ö†~fÎPvÝNu –.™·&fr}(þ^)[¿C\JÃW>ÅÕâ€B¤ Å'îߣ;  „aŸÏ›=ãÕ:FÝ*z4])¡ÍTzßÂ$úù¼6Šßåtÿý-fè÷Ë &Iñ˜•¡Øšó21Ÿ÷AüåcµÓy’®Ô¦.²HÜá«û¢™=c°38d zúf~o">e=.·Æàôv/UÖBˆ†4¼2„:S<©À™ ŽPìŠØ)ŠØVE6ÇÝŒºá´ Kõ†ÎÌÍ2pƒjÁp£ îgIá~1‰f1Qò°h’’âÊ•Ë]¯\+°ÜW^Æ”&8½ü› ¬nðÙ\ûþó«÷ÃþÆ’9‘…¾Í2⟪ÊFf±ëÜF© y<'!B?ØêK± ±ÓCÅ“%ØÁ³Ü}}…oQ-•‰Äžâ³ÁüëÀžÂ4= /Tö1¾eö1¾>‚/à+$„âk$ø"‘dDK ø*)¾JН’⫤ø*)¾JjÓ3h¯“lD¯mUd™S,3ÓnÐÞß²t×ZÞNw U.v¨fTÓù2þ®C¸d“«bðý` ó—ˆüqxò–ŒE—tƺþнÚMI±,ÇfÙ²‰Yɸݜ¢…PÊ„»Ï»,éQ[>)ƒc+‚j«´³ñ~A£ËozD²@Í_ˆðv^Øj½€|úvCíÔÓr, ‹Tž`Àûtêþƒ'ö?ö{­ÀN©NT'‘üë#͉Oןžþó*ýƒJ›QiáD~ü­ÈÊ»ƒ8– ªŒ Ô'z¢ÐбÀ*4÷ãÞÊ’V‹I™t‹èA¨¹óŒ·2·Š±Î…-òÜ*ÆDš[%}þiïwc7çSéÝ i¦ÊI.C&’n&;‹9‰0°zz–Ý›ÁmE¾G.ÿJ„á>Ý£àØa•½¼g!r¸ \X|r€yÌ—î·ŒàW'óp\þïê«“Á@Î4Wü1Ï'+¸#3u†]ô`î¾vy’ñn¦Jtt½Ñ'Æ!)Zá’ôÍ~ë½xòišSži‡ ”ü ÛÚ»‘‘஼©Á¯‰ç§pl«¹½hQ,ñ8?u9·or7*6Û’lèßJ¢_¢ªÅ×àÐS\ÈLœdHÏûË´W¨5={£µpí0çœèn­Ïo>Õ%Dôrá%¯¹\è³ý"7Ü)DºÁ¨DQ(;ù5s«hcˆN‰B67ß`qˆB67“lªGiÆîÿÌnÉâpžséË!ÇŒqà ! ðàmáR· ÒpÛÀtoŽ¥cÀ¦8K—Ÿ¤ gõæÆ¹8°C\\AêT÷>Å9¿m(ìæ`áÍÃDh—%"´ïO” CPµ£‰í±ß«òÂHȃ‡Ò< ©¾PÄg!¦ôöXÝ·0V?' ¹oјû©*–Õ\$œÙXáö~}¬Ø R)’Ìèd›[üöò×C‰†ÐLïY73qæ¶fEgòŽŸî< 4In{…"ê³·Øæ:-¥×ÔBÛ$»ƒ£»¯Œ¢• H4±[ "Hucsptµ£ˆ šX  ;œ&Ö}rö¡ÔëŠû½L«µgÿýìŽ}CöÁëgƒÛÁ¡ÕÏœ¨> +Áqh_š-ß>ƒ÷{³J„˜ÐãD„[7Qéx^[¹Çø TÖó䯗°] )FXÝ¾Ü SÎN:q•ú5ëØg Å8C•p¨bHÛ'={èðXÃëY¡Äó…{žk³Ò5rôZެ"‡Ú ¨ãË_¼Ó#ª×øÌÅ«f÷¹>¾ÈÆ™FuÙ’£rS6Xù”Ožó-ý­\ü25 ÕÆÀ ÔSFéŸ7g¼SYñ¡yplûpËK<„®sòBteñ^’!"Kœœ÷i$fÊXçM°^‡4?WBo‹XŒ¾Eç¸é÷Ç.°M°,= ï÷MŒ Ê|eçÈ1Òrºg³ÔzÀ#¤Pƒ@F,ŠlÉ7ÌÛ1äøÕv«Ê§¹Q¬ì$-š`ŠÀÛ£(‘E Á|=Ãù{g7ÛA4¶jÂ/IPzÆ*sÕ1íBÜTÝ,³øzq³ŒéX Fx×»éú·††¤Žòã|(üLóŒúŽGÿ+«påu-³Ë®áòX¡@Ö´-yÝX_¬}zCeo¨]èW‚)eÅ>¥‹™{]9kuéë9Ýär Ñ4!k‡ã‘'etÎw}Ÿ.wuÅÂ+…Š+õކò Qò²¼ç÷ì¿ÙkIµOî½Ãûó…j¥š}àæ{æ,±7‰Wœ)¬èœ¤@Õ,¦¸¬Xb\N ðÔ'.¸G+Nâ*+ûÄWŸÄÍ~:Êžr‹ÛÁ¡ù£Ûù“8Ÿù>îD~lÆ®« 5ï¥òÕ¡d:z:˜§Žß&O{ ‹ ¦d BŽï0S¥ ÿJâ½p2ðù"‰w4 ÞÏÈH,Ìv‘åZ´ÜÒÙàÈ •0Z>/°pOöñ›y¿m0@1ëõ>À7=-Æ6W¹—­ß‘Âk¬3ñyÞzÌîI¡‹,—$5·Å9+úµæöŒœíƒœuÃ>x9;¶—5¨Äå¬ IŽã8_~Á©="ð…æ›xZ #Æ´:erYð®s™y×%Ù­§5ÙлN»@kòwá]·¸*qZÓ¡R"Oq,w€Ö(ˆNƒnkf.Õ*hî”­¤÷äû:aÅ Êç Å ¦nTÞ'[—ИñfBÍšøZçÃä¾¾Tx‹íD³&a??üŠFæã"OŽ‹t)ô•½3Cnfë·ÓuÖ^9„õ=[!‘Èì¬ßÕµÀ$âŸzbt›ÊF§1¨r’kfèg©t#¢!Ë(izêå ÈC×›ô(¶B‘ï2]ÌÊ⤔Œú u¢Òª?ÍÁ¥+KF󮪌¹è®ü¼-7ÙPáæÉ¢ …Äê«m(»n'kñ>´\wBOye^—¬5kt¯ñÎÝ‚®²¤í`ëQáñÐt•Aáà0†ëª^I•žeóåÛgö¿lÑ;ÚšHû¼bSòÙáe‰AÜÀO‹œvýf{¼öGZHblâ•÷Ê%M•@û Þ{×Û ·…IW¸‡‹qî¦£Í NÅ}váv;ÆÈ¢ƒV¹edщ”‘µO¸]ÁÈ¢£ë™zF¿~èŒlQ88Œ¡Œ,H'qTbŒì=@0ò#[|½-ÙEð&pâ°iézÓiÅÙL_Ï­ÅÙŒíÆ³Ù8ìƒgƒÛÁ¡²À&áüËS#™ÉÔyÞ@lÔ,¤Öí&jbÂf á$žÛ’x¢^=Ñ1RZá®Þ}Ž_FÙ]-ê#$ë8ªLõ»õúˆòõúÈÅú†ðõƒg´1%(tj:Fs ÖTbúˆïæõQ–2%Ï9´3æÏdÿý4×ÖŸ[\'6ÆzÄfëZé:&ðØ¢`}[ì7ø¼Síb‹4dùŽÃ>xd®.¨A%΂R¥º.àÉò¥…,ßÌíh¼ŠïBi¼ «nI,”õ sáµ\ò$Ôú¶lH’—ß45 ð|Ú­o¼¹Ô‰Ì.GÍ.'o+GÓu£ÍÄ[a̱NƒÕbÌ<Îyz –NSȾy—æ‡Ëö1€ôUÙ7>St)ûÍZ©Š¢£÷Õ8öt‰÷È›M_IøÕCU×<©Š}»Ý,ûÄðdyåäãĆž–¢ SÛ ] rù »¥/$ƒ%Ømf«]–ž“ðbÿSŸ²Ä€O|Ý”€•õ©ïç”cH9ÂRa`g¹:'h ÒÙ³¬úü€T`ÓÄ?í%,r¢@±¦ìÛq³UÛS·võßõ@Åw¥Õ¬ì§9u,*‚ç %“3ƒ¤>pº¢¥–Pl©µãTiÞ"tG†0惷•+1cðˆ[„ºŸp• éëHÃ3xï«Â\ß$«é=Ž\.þ!h«u¤±8c„à)µˆlëv™ Bv+M_œbµ â?\Ò´þ°\× Arz^E‚ϙՆë½JàŒ9‰gøÏ9-ÉÙCNÍóýíµšgGW Åp¦5î/t …à/·µP=+x úÔçŠt…6ÃlËëw/ŸL´ê§gß¼z±{ýõ£'×ï÷ÏöWÏœìýÓ…ûç#ð1xÐ1F{õÓÿÚ_Ü}w}ñëËÚaù#ÁÁ#BÁ“žtù3Ý«¹ œ?~sx|wøZñÈ7`>½zŸÕk8ÐÁô©y­øŒ´;,ôõ×××d›Yƒ Þ¼ôŒ£ÄÞ*jH7ÐÅW†ñeˆÆ×/÷Ýó—o¼>Ó=£ì+•|d«[,é8:7Õ“¾½¾ùx>üÏË»_ïüóp׊ܫÉX¢úéò Ö8+¹Â£!¥Mô—?,Ð\/ÀX\”Ö5dÒxÐ5‘5ïA¸HÏà =­X³†ø%r¡†Ûd©È{«X %û?¥¸NVTˆm–âHñW³ÀGé×7¥r0! Ò Š!@ëE auÌ8ÿÁTóQ0c o5@á„—•ô¡r?‚>øiµJ•yõÉØ{PzŸBƒ”Y¥NWœX°xT'U4ÄɃ*…ÕA²A(õ$$LŸ!Ââèeoˆ’~bYÙFp¯¼?Ä•œ€±Úé‡ý}¾¼Ù¿|óá”·ÒT[ƒ¤¥Ca×ïÿrýþ·-VENHÿ:Uh§Ûa´sÀ¢4çõçWw{hÓ$Ò9ýª?|õq{{þaÿ·W+÷a<¿”†V†˜?ݨø|DU‘ÖŠA€5‡¨ªóÏZöZ@‚> áfÿ_ÖS¹£Q<ÿþüî°Ù+æŠYCÞ…dÝhU`AP°VÚb9ø Ì/…œJkNâ•Ë3Ë•[…›· 9:³’dO^ýðÍ´«o¿{þúMŽÇü™Bžiä™,ƒ¬´®ü`Y[ÍŠz ’á|PÒbNYL2öâH§¢ÃäqÒŠ7µ4ÚH«%IEzhòUú7ûÏ–?[éfLìÒÎ8QÏo.ï~{ýù§áòvÙ{ ¼ÍÄxÄ–¼Ùß®²¬)…!Ûuärò‚°l³%‹8¡U'É*ŠB¢BØ3oØ—ˆLªò¹÷ˆBÔPÀƒ…^YA²Èr¤@ô]{ôÖf½Ân…CwMì›?½8ÿuoLƒ•¬‡IÀí¬‡ŽY ÆwÛ\LB‚ÄöKk°„è@¾dˆ‰ y¸o1„a1ȇQ+L½""º+z†0±Hœ¶§à_‹É ìdJ¸ücFƒ(ò·Æü®ˆ©uô9td¨à‹××7wÎËr»ŽÍMK–lÞÀ[”.ãtÀ±•EtG–ˆª©`8A!¶;€8­²é tsêÌWev!§4ç¤3¯ü nœ/‘é Æ‰ú#u†YOà¶óŠhàf=óíæŸ+J"¸#j9Eaíz0ŽÚvî-â!æ&jq vS q†6´}_³×˛ eÕYሖG΄[@: -Ú­Çpô*“J3È) Vg‹÷Ÿ? —&t÷óþüîóÍ~wyµûè¼J¿ìÏß#ÌñßÚHª<ÀÁˆÔ…e>«Ê¨ "´²Ë¶9À'ƒ~–#¥M b…5B ‡ôÀ¡¯õ^ˆ¦Ê3t¯Dƒ±{#BRÐt-+ß*vªR[=š[зajG8â¶ÜH~ȶCC¦¯ŽrÄ¡½•D±DÊŠhEÙLÙoþúýwOíÅ¡–éÓ E\Bã³t,NQµ]GY” ]·È‘b.Òy³Ùé¡‘Óó)]#u°WÉáÊCÓ¦ÀG2þ9¶ ŒEËÁŽ€Û¢b¨Ï£Žv K¯>¼¯¡,æ…À@áø›/®`SnݹÇ&À÷ä—ýůÏWç*0d'¡Çv>–tUY³9X{8áV{0X]Öv•îF^RH(½b OÈNCÛ1®j—'uTbñtDÅ ¼†(?óËÚ ƒJàÍ6&{e<qâb¼Øc”¯j$2ê®P5™YA w³0y=\ÿc½Ã–µLäÂÖÑë):ä©I=¼ø>óùÓî«.ÈÊ ¸Ï·ÚjgÐ×µÕÞE<_¥IºmMãE@°ì„“[£Ê ئ]yåf¡yo `:V£hÔ°÷€3d˜ZÅrêï;È|[‰cÛ£ñ9AÄ¢*S·H,ñ…êrtÒ¤Ò]Þš;1/ÿeê$ ëèЧÐ#²¼ÄC|Æè9»-Ì„ë§Dí¬T¸ˆ¥v„ÂU'Xrt_™¼ü„@zwuû^¡Ü ˆ'Þ§á0 ó;Õú”šQqÄ/ªœ›5”È•,ÑUù«Y¢ÿ+YX ’¹Ÿ<Ê. X©–?›)ù‚]åÒ0胭uBuÁ»'Uhz¶·yßß\^ݽ<ÿ«ÄÌ\`x2œßÞ>´Ò2óÄIëî"o¾ä…'pg(4Xå™èñÞ\·{äê¦üù?]¤ÿ磊Š) IaÞZÉYæ¸PªÂC/ øE«´]‘/‹LÒÌ9†“˜Ž×èå“-XŒÅÍñÛIÁŠ‹Ò«ü&• £J„A:HGˆ U0L¬(ä±RpVcÕëtMˆÛJ5QÞ´¼Æ±¥šÀjŽ«Òô럗ÇãkKuÇž¼úæéxúøÇ×OŸ½xúòÍBUÐ>ëh¸½*¨ë0<„1|UPS]opÅôЪ ²ëÒª  Ê^¾ü..ù6þ¶\2²Ôkݯ*oñ°¢+º]ÙàòïWhQ¶+´(;ŽZ”Î -j¬Ðâ<ÉN´â1íyló¡ó˜Eìàðˆó±uB#óÖé¨}ªÎ¢Î"¾Tê|L?P8uÖÕ Ÿíœ1×ÜâcpËÿ÷ãLUäL»äB fIú´Ê5ç«x¸AäT庶ÉP¿› _?x®"®Ó²ÁÎU´S8*érUÖÕÛk𩱝%?Qïøü0q z¶CÙ¦õôZº8µ[Ý"GR¦dr}‹ZuÃ>x2¸* Ô³€®ÇH;8ÖM0ÂÔSÁëÓ-• í¡¬8lKÁWZHƒ[/F·«˜±X‡wQ“Œ‹ )|+Ê5„Ë(kG¸$®öÁ®ÁíàP‰.'Iyˆã|ù Ç|E'ñ¨¦¾oBâ®m.”6Q™ºÆ%/6€ÙÖ'«I?Éi5ÐÂѯ%YÒÒ{gš܆¢œ‰RågrZP)\¦*ElèºvP² U œÉa—ó‡È™·ƒCe3ûÐRÇq¾ü´ ‚o›”ŒoH…êcl³’ÁŽR Ý@¢rËQ ©ñ+â¶Ë(Ý t©ÅKNéSßðc†.-ó;ìf{ð„iP>8 ã„)´ XDQŸ¯„1îcRi¼â¥Ù«~'|G”ÚQki±‡ˆX@“ëšh°R;ÛBí=ÞÑYJ–ZBí_Q¤vê!eKh†‚‘a€‡OÀ½tಂÍãŽw¡YÖ„Mä´Ç¼©03¡™hp㢤ÀW’‚c9áx¾«Wò ÿ‚äè%,Ph t^ëÈ:+ú'Óé-ºmWj„[KzÂJ¹¡û²Tdê [é±Lêd½ò-Ö6«c8«(!çQ™/1"w#MÖÐA+×oE6€.ŒÕ¶øM”,]ÝñdíjÐÉHÓÕd$'2Òô÷@F…ƒÃNFæªÿ,*óå'§Ì "*÷ÚdçäZFŽ„{{{ùáj|É`?¸µ¢Z`‹kDóÂLëÔ Pb·ž6µd«iSÚt_?xÚ4(ÆpÚì;Š£³ÒæµÛÎI’ÁMŒÊÚ“:² lÚ„•æÂ²î?ZÑ[‚*z‹•Rh±W:Ù'½®©§#ùÞêu$¯É÷Pë½ý¹¾œ´µÓ‘Þý¥È8éÒíÇÏ#9í­t6ޤáE7Ù¾‘åôÙŠšjÞîß¶©è¶-ȳ]ƒÛF¶ê8 å©S»NûxÅ fRä«™)Äǯ:3Yc83QV@夡ÓåÛg4é…Ë U¯à/JÈøWÆ,”|è^è|,?ôÃRfœOÝ;ºPF´]ZíH¤yqv\â{XhÏ^PéGï²@` ØÔ7ƗÑã_%Ï–­N™û éðËGÂã0Ü:`WÖúõ‡Tcq„Pé4³ÐžÃ…®YWö¦¦évŠÁ‘sõ›'À²á+p…Š-¸ wn8(ÊñS«¢:ÑíªóG­¡Eåd&šá!Ú?ûàE¾ÁíàP Ä“í7Þ¹Ÿ Ù$JtI2@ºÁ¢|ÖBdõ­ï¾ÜÝ`al_+ò,¿])N™tDÃu¢8’Ý‹ÂÑ.£â¬”Iü´½Âý‚"—~Ô»Jý`íáC»ôþˆÓÅ’˜3kœG‚5{"af°1„6w¸ßº{|4ιó€sÆRL«­»çA$èîeaü$)±[܆`§X 9Y Enñ6h5~Ù#ÆXÍ®ÔÙ5|7»•eGVöߥûo_};QA´éÙÏþHåEw†×r‚& Aö‘ZNk¥ˆ Íé† ‚X¨‚qÙFQ Á†\ %žE¥„H\…í¶[oÖ.‹Š“@FnØoˆQôP‰k|É'tç?lEªñÓÔ¥ØGý6Qã³:®NÉÇoWª Ù¹#¤¤žT ‚uŒ¾*¡5¦&üÔ0*bšrµ ‹ÏÌ)»ì€`&ÂK@̦Àd`Í*y WÄ’ø¡ ä,œÅ!9zÍeK¢Ž’0[ĉÙ'îuŶœG¤š‚±G‹ŸI‹¹a¼ø‘.ÕÄ ?ªëwÏ#ñpœ/¿˜*…ÔÒl˜…#®mp $µ!F)2ãI7%)Ÿ|´"÷K)NW’ÔÚÜ/>å~³=xJ3(†qJÓŠ,ÔçŠÎŸ‚3Eç=‡¿ƒ£­¦ŽX´H‚PiêXTõãÕ5“ìæ5Û\VqtþA“ݰ#TWúÀ3r:vfãóT¹ê%…~ÀAª\͇ðÃÒZ¡²/®µ+¬•”ÖZÌΞ“dteÔ¦*œW¨ð,”Q¥ó€ø•·kSÎìX¿h¦Lë®XÞòuÉÎpÔ}ùRçŒ Ù‡ã^„,i¸íÙ„˜›H¾_Î>´ n\”ÄJR@p¬&Ÿ>û0yàÝ N€›õŒä“&(b‰ ªW¸9¢»œkž²™él‡æCÛÛ»V+ß]üD’‡¸ w<ø{N¼í5ÌV÷¾Ð”ó¼â 㢜‡†ùÏ¿q0%¹‡/SŒ›Œ^t"CÂå:!Eú,z€ê)BV9ëv)gç Œf¯ó ,Ó¥ž§cªHœrSúb­ÊT޹¥?|[ÌB<Ñ&°ð$¶„ÃXQÅ +‘4gŽ8Èó-nHìqݼ!”?¬ ñŒŽCŒŠM—¬`¤#fNnÈBÓTá—ø´©Ä+?å¥ïŠƒ…¦žÖ,l†–¯ÿ=øf,‡4\Ÿ±P{‡âØÌ—Ÿè3ä*wÌ0U³*mËÛ R½>mK›zƒö¯D‚š9¬ÉDHJO9Ê)ì‰Ç¡z,÷PHŠ!yP¹Zå0w‚1‚±ô–ü#Íú‚AËÛÅ<­7øû5'ÐtÝìïW»Ñß?ûà9Ýàvp¨Ä9ë¤hÄc¤Ú÷W’Ô¢ÈZjïŽx?ÎRØ”±`)4NmÀvÃìÂàŽrÏCº®q‚{™¶èGñº†´ Û…Ìä€?]­È0ׂO_™aÎõnÌ0¿~ðì.\˜ÁÎî"]2TNvpºüy¡hpã¶2ñDÁw¬%íØ{Þ^Eýê"e<\4¿~ødàÇÚ% d ÓkÍ*12è'£SÑaHÅ2351 Çð*Q÷E.¡3_ïpe‘L–§LX,*üò¦V$ÍÈê7\¾Ñ²_}yÓ9¦l°~×Cä ƒÂÁa ç •ó„G%L­G\Þ´ nâ²óA¢´–{‰úƒ³áÙn ¤N žPèéPà‰€Ÿ'ªÂÏãÛÛë ðæŒq:ó¡F¤lTIëh¥¥@Û7~1 pO¢¿ˆ ÖÌ8|Ç€`­žuMïPEÀ2kÛ?»!Û%.kkm)q׊Z ÛÍÞo¨þöj-®Ûšø§!£¿½ÂÐÜØª§U^©:ž®<á!ÍsqN‡­»¿,_»ÐÖ㛟?î¯îV’Ò1÷’k¯Jà 1òk¬R`;à­äWœé–ے±VÈ•œ€R}-ÁÆÝÛ¹£t­-iBÄÝ>݃rû¬ö÷ ûukÊ:jKÍPmRRPpz­âŠô†g¬@HäKdRd´c éfÿaoH¤gö1Îô#]}ø’Ú+Êh¨•tˆ £5ðµû¢œ£B2R·ŒwB{ŸñÃ-…øSjœ'[å{;vÛ 7˜ä¸´è àÛ 6SþøÍá‡;ãÒV‡Ù¯öÿðÿ°ÿÐh·û»ooö·¿ü°~KZš9ÎŽ_¶5šÚ ¢¸š‘Ñ­Év\‹‰9ö㿑Ce\K²Œ'¯~øfZ‡ G“…i±ü¬ø<Ü—‡ÿÞ"?¸?z\Ùf7´„ÄðeÝÐpA ˜ÝRåõݺŠÍ.[‰:¶¿ ËYQ;bacŽV1ÐÇxؤhjlïa+/¬¡ûMµÁ6 ;Ccïjˆ×½Ö3/E•·îþ<óébÚyDÚ¸#Ö°Í9&ySÀñÎ1lI ³rÁqGfÞ4jpü‘¹°ªU'å§ÿ¼Ø2ÖÒÜC¬;èøßfÝÕ$yôˆ‡lj¤üéÂ=\I,uñùê£Å‘Ç$tEÇ¥–?ï ><šÁ¤¹ê¬"úmVGl¥¶‡ÿh-ßÿðêɘÔ.ˆfj,é˹_½¹ü¸ÿóõ¿…5¸‹0ÉA·çðR¯à-BgÈý*Bá='Bà³^Á›D½Fîka·š(ü–x¨ÇîzÑhÂYǘ¥»ý0üyÿÏ‹_ί>X9_¥ž^½Úÿã21†)x ®×ÐËÐkYZ¤˜é¿½¾ùóÅõgg^#¿}<ÿçåÇËå‹?_^ÍþüëìØ¿—·å?~î.? ¿_¸>HÊÙÉo?ÄÐ* ïÃùÂ'|zä"Z¯rĮ⅃€ÜCì{„P{¶+¥0˜+ö>ÿôiõ™á¸¹!išÁ’È]@ e="%z„ {ì[Ý÷}"áÀnÜ Á)ÿüË÷w¿,Ю›uxÐxFw`­Q÷çŸ~{¹ß¿ÿöóÝç›=D³©áÞÔžôžôžôžôžô‚‚ JïçÒŽ@ÑD(›þ±JxòŽR{utÜž-þò×çß½yþrBöûë»§‘” Òy„[A>¼8¾²Ô¹7J¿»væåïÝïÅ_/.ö··3_Ûß§eQ=U\pÎñ¹åÈ€pþ¡‰Š^ÒÓÇrú@³è›f2òŠ©•a—Zµ4n‹åòè“W?ý¯ýÅÝŸÿóÑÿõŸ~ú?þÃýæ%@ñeÇ£O×oûd½†.Œ5™<ªÞ¤¢™IåKsQâ«L‹.žLæBå€û×_¿»Üï[Áº{j.³?yõÍÓÿðôñ¯Ÿ>{ñô図ákPz†š‚l"ž}šÕÃâëj$­ŒBk_©‘™jÖdª3ý)²0¸J ¥Þ?$-íw:JzÏú†¹QÑŠ¸¬YT,tÕ‰0u>`IõæõýŽîçc(:X«`ö¼@‘<.G8«ÏÇ––“ÃB ;Wû©ŽÈ§"•Q 7ó·ë<‘“y"מÈ#y"£ÿVkÈÞP¬ˆëiNpøÂÍž íZäR‹“¼@å|ùLCφëŸÎ?$縒ð|Q>„=dZÐ(.8óùwR—a@’]V­ð¹¶Ó…%nR"n"ënùŽQº¥Ÿ‰SæOñ•"¬buþº5ßAéÏœCݤ˜e JŒñúóÇäo;„¶4­$õ}ÙDL—ÛÕÍ3"%d\¢»ÊNߟoc¤…OñàµåS Ú’ÿ(n'7½·Ž D´6ÿ?KSñ«ysà Ü^ýÃþ ËÒV!KÀHʘÅn Ir1 ŒžEâ½ÀÈêULŠRÝž¢"D¼‘0Ä[¹utëÖÉäe[Ê´÷6ïç·Ž¹­3r{Íns‹÷ÑÌÑŒ%~žªês}çϲbK*þö³PàaöIÓ!ÐÌžXÞC¶Æ¢â}‘bº™»"ŒÈ†ÙÂ$±y¶•2ÙVÊTÑ.z oùX:aó”Ée>¿2UFÎ?k蓘j~¡_\:™)\\Ö/õT˜õœ°G™¤¿Þ' \¢{¨ú~­Žâ ìËÇ/žNdœì/_½|ZO: þHÒž¥Y¾•fûLšN´ã5Wó4«ÍƦtk*ÒsàKZƒn¿+¥MäjÔ4Sðë¨äö³]*À§’±¾F_éxÎÔ"¥S:^-x‘²{E ãH¾|KXâ?% «­$L’î#‰ÜõÇMNçiØ{¿¿Ù¯ôëSŠ–Ó]L¹ñ·(q1œøb’®?÷s XÛü!Q•H‘®0ûûJ« –¤ôf’Ê#°Ó±÷ÌçIʸ _Œq¦54e|…ŒGSGS.iñ/xj &dÞ¯ÁÉ‘—Hˆk˜]¶ý0Ùo¦–ܹ<ù»BÁþyja¡–_óÃä*oË gš4&T˜]8€®÷¨o ¼Uq®¨ñp-ê¼2• .³:*©„eIÓŠ;jý‚­xá^DQ”`ˆ%˜'&澂HL«CÛ.8xIa<Év¦üûf·ÊV1.xÚq °•§Ùfá¥-b}åQ»E¯ÆÔ…»$À.±’ øò»T¶k÷h³'ˆä^¼°G¢–˜Ý£ zº{$~œ´Õ–b›½"D"»dõúiÞaǸݥ•þ:Û'¢qæËÝuc¯A¦›ë5ŸöHO­(ÿ=ªöX²»qDiFC†Øï!Т« aÖ#´¼”ïòQW’Dì)KÌká=¼ Jf1/Æ”´5æ5Éc’Ó”_Ô¼Æ\¶ƒYâæJºYÖ¹É*úüÙ¹ŸFh›BVLŒ´ÙÛ…¬ô.Ô’©Ü,¬ô®D™¤’2?ìŘK¹†2;H™~Ê?(sÚ’ß9en÷råžÚ‰2½q¸D™Ú^Xwb ‰cš¯H–ô é=Ú;Â)Q`p$©w]„˰çBY£Î,ºeOß•´MÖR‘p‹·íb¤ZS¥å6Øì™£˜³×uðä#YR9ϽeƒaØ_¬bÛ(]F3O3æö$æß…B·i²$¨_H?*¹\m+¦e—kƒP)Ûì2£E« q§yŸ=7.³ï¯oïÖ:í%pÚ«8Üô»tÚÇMfß҆/ç´ßJSL ¦¤½B0f{J`Ê0ô£pŸîÏ?Ÿ_¢¯û ú0S¬.#js©Ý«$ ( ߋijÀ£üå$˜Çie|LÎs~p+\ºhuxÉí²]àá>Ê7¨½Ì›LÑ6·:<#åyû·®Òɤ«\Ú¦õX¯#V àxÄ­¡G®KÛJeíØA1ôóùaÿóÎyAÿåõ›3ÿðî@EBÀ–Pb/‚5lÜM®"ØFxx#xD#xd#xò.[áÑàÉÛ¯n„Gæ ª7Â#óæ—[áiDϲ=ËFô,ѳlDϲ=ËFô,ѳ‚ôl.¤ÈDÒ?¹þô›ãFÚÇ?AÚ[£ßÿ#<6›þÁckÍÚt£5ôl.÷1¸OR-Ë'Ö3mvæØ÷ñö]0ÙØ8jÎÆ«]°A·,Nÿ[«XÜêAù)§T± ÇQ·jO–SÉ\X …DW vý¨ýƒY©aà Ã.°ðÖak8rð5<¹aØ®Ü0l‘/‡¯™ÖgÙAÆÞ`ÞwdȽ¿ajcŽ–ÁÝŠÞ‡ ”éôIüЖ Iȳ˜Ðýì/ ò×í6«5Ü}ÛMÞÈûÀæ޳Ž2_„д‘~íæ‰Tî0è4™Ù1§P‡yÜç¸&6›¸ÐAC„ÏgGŸöPŠ3$%*‘Ű.‚Ìp.e°ÇBfÂãt€uùñ³Îbƒ*“Ü{ˆb§{Xk¸pˆ“}Ñä1—=Föæžw¼½§Qd+<-õ9Ù?< tZòµC/ýÂ5 )çï=nJ/ÌŒå7sy aHô:)Œ‚ðBjHfüº7:ͯǣ:íMlæ@695™óèã; ¦‡{*…bjòƼœLò1×§™t0säS›œ\Ù±dj>3µ—é6·¿nêÞœŒsäS›¨ƒ$µq”K_`5!&RͧöW8ºjì¶¡™t0säS›Ü¦^Ë™U!zÑ]55µ $“ùÔæ• ×Qì }73u¸(ª§fF^J{Iä”Éi-vjOfÂeˆŸôÕ?L:˜9€Ö4²ZÊ>™[ÏÌíQÁÑe£s £È¥„Û¨l©ãhëfMúg¼~ÝÒ(¿Ã`nãc–}¬£Xç) am韉j©bfÌ`n#ÑTVcf$žÔý(ý32XÍm…éa0·iаdn>3·å0ln3ë`æs™¦X,Nñ´†˜ÃÒËëµ&p|8óÖ¯Ñ7O@¾ÝM6-€¹§„Ï>%ø(O>fá>#•JöŽzš•|ºÏàã#ÿÄð‰ñ=Ÿ°ð)Ÿ¡*xòlaæéZ!ðõEøDŸ5ä3ødç dƒÀgä¬&)|¼ ŸêN_oàÓ„å®·ÜJµDÞŽ“ÄÿÎý¾¹;÷/“|@’{jI>ÉÇ$`Ð ’»‘IO "÷ðç/ä¿÷ñžÄ¾‰ä6R0áAÀï®ÿ9ÅÆ'çÕnÊûqoýQ~²‰ÇÝíÀžPð„Á¯²áÜyÐxáãpÏȵtïìÛH¾yåâϲw){‡†ž§ 93#ÙÈÜõáqçô|p$ž.Zy‰K¤VžD/‘ÅKdñY¼Ä X~óç›ýåÏ—û÷YÉ8=ÆTèï>ÁÊg¦o¼Ä_™™ÈVÆßÉ'˜ é£—^"Õ%RÈP"›#g’z¬“8ÒƒMœ‡2®úÛo~phym FÆ]{Ï “óÖ F`ð6÷ÊQ¿¹£Òc!u6€ïÉŠøvë§ k?ÝŒ©×ŸÎ/öO~¹¾¾].$ðäúãO—Wçw×7ß\Þ;Ä«›cG8hÖ÷ÇŽñòz#2òf? ¯Mjÿ¦Aý?ã0þÏGÿ¿ÿ|ôÿ,4*òé8íy/EšCP†oÇ®ê(˜¼¾„àŒ}¡¥Ûa« à²ì/Æ•8ôéyDLïo[ZРÈnØÁ§ˆa hyVF¡zëÙýhö¤ „„`WVü5¨bÑ× ÆÄ^C4 ò¦ÒàkˆŽê‘®Øø’+ BŠªf†ÃkƒÖ­JÕlŒ†$„V³/š8^w,¯5X#r>F ¾F‘6Ôè¢`Ëânã­ÇŠþB+‡Så™ìéÉèiSå]9©”¢’‡@pì%>ÿ•ú‹µ\J úAèî¸~¯ïÎï./_¿Ý^Þ‚¶oþú½½˜ÅvA·ý#•x®•G$³‹ôŸl5bJ%ݽ9{"Ë­Y•¢È(«o/onï^Ý<_s‡@Ú[hñžLSîÒ+æTæÚÙ¹Ìfë>ù^û˜BxqÐw*嬿~/ÜAjš­Ð¿°q‹Å[BË¡½ªß½¼Vqö,üW7¿{¦¾Â³ýÝ7çwçk¯…ÇOæ×?BH؇½‘ÈgÙ þ¦Òn µ5ãUŒ›Ãª>Œ«Ê1_Sbݰd§Ç+éÝH‹Ÿ.wèñ]Ú²ÐßÜœÿöçËÛÂ!_ºC¾{+ms’¼F­`z|wýqf,çU0÷ÿ|ž4±Hߢ᭙¡Xxéê:ïA2½ÅÃ[×7Å—Dèã’ÌðŒ·å8|h›ó<9HÙ9@•{éóÕ¯soéé­,ÛŠB¾¹¼0Äw~3·o¶–Lüêܰãß×çws#Z”Ž­ðОdækî^²WŽçÞs½N®/æÐe ¸—æ–eQÿòüãÛØ´Jú¡†ÿëÕå}.u’öâᣗŸ?þ´¿A§ÙÔ]%™Â^Šóý°)tOKŸÚýþúfnk¬tr/Í`“Û Éá>(¸»¼·Ïô²H_ž™\F­*f^SÑkÃùOûãT^úÚnè뻛˫s“ؽ|óùÓ0±°Ûq  |3zFJ’©AÈ>ú?] äE«Æ;‰äë-P ëD¡‘I>€, À‹T°× ›iÍ‚¢"ÿý50}Y$//#E„½ËÛoöEí ,UüíòæîóùÐÃÞ0¦¹½Òbxýä—ýůo~û´ß­µwKEìÍŽÉ QOÔd2Tûü6YÇËë¬-@B>M¦Ÿ½>[¬] p7þÿ§çþð‰«1Ö>šê¬úL¹R¹ k—G4aDw&²…|y€â¶œ}ú}TüÀ–®M?àH&nž¨»> ÑôŒñïØÄ5áþ'šï¾büi+ˆ³¼^íe·îu3OrQ,™4 ÍK¤ÊDÛí?¨gíëý*ëÑdÕãŠFnqÏX¬vBH±Xb¡jë7"è@B¾ªYœ•VrØAÁUq ýê\ ƒ&ÛÎÚHO–º9EÜì/2kÞKm;yú±9¯¼ßßçÄšÿßø#Œ?›Äðug0ó$Á{ {/:Y›ý%™Ú#Òûë§ÿ~èüz–ѤH\jÅöš]B¬ k¿p\~9À#Žþ§é ~³›výñ,OÅ©^ Wà‹t~·ÏÁ òØxLò—¤¶/½ÜÿÃ8`*&íÖÓT~¼å±„äscu½#“õåÕ›¨õúöúãÇóúQ³+Q_‰óÀx‡øwÆ_—æ¤óØ“½Ï8kÆ[KÑ<éTó…TÉ¢b½–3UR^ Á‹ðx™<Ê£ªYú:˜Ô~Tëù®ukÖÏ™ ìbã‰ùñz7žÍŠJp¼ô²J²2@UéXNf<¶yS c‘y§RzØO…H怸Òpa_˜Âº¾Ù ¡½=`ŒU£¦,&}³¿{s8&Üþù ¡_Ýü/¯Þïß?Zq®êìÅ‚ø\柭†¹¶H+~»´®¹B^y“›Ã ½3Tt»p£›‹]=U5`“*›ºcf_ïçÖ ›J”ƪý‰çÅ=U±Sé$‚øD6žDEÒò'&¥Ñ¸TÜUáöέu[݆ж³73:÷™+—þv$k;¨g?…3öÌýYìgØû¥<®:ÆA…ûM:ìßgŸ½Áãéžç…%´-Å –@p‘¾l·%—žF„Óe„ãKâ' †³FºSïÝ%íf~ýùüöîÉa8„By4öaèÀoÑ×IÇ akÄ@ CÁË`Ñ0+z‘Ε4†À¿EÜF˜Üs3·âqón:ËÝÔÖ&F‰ß[VŽ’hn#Öw4Nx'tX80ä;Ϧ¡œùC“³Mí>ù¾¥®çÅw¦Çó|ÃVóOÝ…ÿ<ü§T~þƒ‰†·$™9Ø7Î|oS»Ð· Ì~*zåÿŒVœæÿ“O¹†Cö?…°q[šÝ=á?ù¼iäç_`¾4e2Ì&xX>—*<%a6ÆÃ¸®™¬{—LŸñi05ýg&æ}X£VPëx.6Р”!Ëò ¥ÆxˆrCx1˜ÓσŸ((TO¶áôÓˆ€ÝîÛÌÎl*¿>õP)½n¦ ÝÀíj†uoÊŠåÔ}F¤ï÷± hYÚUU=øD :”µFhXË‹+ØQþ×$ß¹vž»@êŒ8’ôM¼áêzÕru¬S‹«ëÝ›¤°·È›ÕcZW{‚1긜9þ1Å3¦ÃŠíÇ¢€#F5Ž’‰àˆ!Ã¥ë13îê7kADF«ƒZ&]~fµ‘NŠvþ;=YéçñøŸA&²^Lÿ9=ÕÓS==•#@(Y˜_TS1Ê4*¯“]Pnb’öf_=f_;&ïjÇä]õ˜¤zLÞ<¥ðæ– O:¯e™Í3Р«õ ²F 5ƒ®a¯£fèÙ‰gÝ©M aÃÙ'ÑSÏÀOÍÓBœš§]c¦SjF×Tæ¤kèU×t ®v²ëb½ÌOɉÿãÏö¤84I"O®äÉ‚«æ{RÄŸ\!È“+yr…àê45v÷fŸëÏhÞ™œ®ZÊ)×í|A ×ýnW<¨T®óò)¬½œ8âì±KõáœuøŸs”¼çÞe×Êè²¶’EI{òUÞfKsã¸aüñîl XK›Àã×¥ó"»`Ð?Xlç»`åµ±;TàõƒG» FP–=;kì¼IãOhòÉH ºxÆvY„›è °°E·‚j(¼™ ÀgHŒ ŽËGwjmÇN»¹ƒÝËDðø˜VbÂÙžÛhôß–`´½r fl„ê †ú,,v!Ã6ZhÖyŒ%ƒ± ïŠL Þ¼ýRÝiO¬?½§óÝž¬”ƒÿÉ}Vߣxü ‰ =†ïÎ/õyØÇ~ªWÎEO¯q‹ñ¶ÚŽÈ–ÜK]s2ý¹{@R.€nSh¬Ó*B‡`qd)WhþM[§ P¶·Œg"Jð=syâ…åä%Nð©šX'©û£æ8uÝN?K©3³RDLãfPGžaáaD[÷Àgÿ?HįÐÍ"2Î^I‚wò, Þq;!ÿôÑÖŽ‘U¿^¿5Н̨ìšì€>$ Kcã‘ãàαp•ß™êeØàñªÔÉE×Êu#È—ÁÊ’\ÆCH4d˜Ú ®íCîµo.c¼yʘ8ğɘ8Äÿ6Q‹aì’H B©Z¤^Û…v³Ê•†„®–E A¸%ÛCžPû ÄŽhÈÓ?«0ù§Öî#\Ì$޹y1ç#ÍŠ†´ÔAB„cc‡Y«Iy3 EY¡Clý5hTÅÓÐv¡ÃàŒKÌ—A¥¡ù3¿ {]õÁÊÝŸVJ­D”RV< VåRJZæMÍz©wå3B?Îİñ¢9“-Ò*»z°0æ°+û³L`W¤ »îîvî`·g³Tp˜aµûQä ³‹Óta¼¬:´·6”P£:ÂAë5sš‚/h Öõ[4…ûlçºfà°§ûß•"„Ù3Ú̸Ö¼v‚Á?žùŒuèg¬èá?“øgèù³žˆ¨±L8«å˜p hrŒè…¥(`®åô{`¦Oß`J9‘ƒj ”Š_P…²µ Žÿ.œ¢ƒ•™g¹AÇà{.ƒç—ý°K„ñ¿óK}>„]¸°ªÄÿŸ§×Â]ˆø*ü‘ˆÆ…¢Å‡~™u7¹Îç÷±²ð9ŸÇÿ¦5²•«–¯Ç4qýeyž¸W[ìª{š_ZN˜FÔªÜoþx›®¸“éýˆxAp)yk¶¸þ¿ê^‡œä7aI‰È ŽŠË»!™îRžeßY²ìÉ}‘€@së˜Ô}["غ嚃óÛŒ±Ô£–ÛfŒÞ;d›Ž;Ôj3ÕX¡ƒ5:Ï2cÔ:ÁzáQ{Óþ’Æ£yDÁ®O ýø ôÚÑ­ç¯A€²Á’hdïBÚˆu¨öTÌ­ê󌂡œU0ÕóíBü<:SÓè—’ì«¥â&³Æ ï,••Ê*$GQTº~ˆ X!˜ƒr5‘lÄŒHðƒ2=÷öØeÈ"'{=ˆwZ˜Ÿ›†xAÓŒ^äøÌÞõ´É¿ó¹BÀDÄr¸ŠùDÈ%goœÌ‚Qæ%DÜ5XÀâk°ØÉÑfΤœt]´/Šz—G £kÞÁ@yÄU/P`´¹h&E¡]|Ë]…rð9EÀèœå½8óÀrB`]ÄãÄûøÁ6©0ïg«I©ñ#¬fR¢C úö.Ójˆ]0b#Vñnzuxø6¡Àäe¿SèL ÎÍ0Ù%vÉ4\⃋RIüxWIüÔá««ÀW–Ÿ n󢨳ü1Xv@Ù„÷žŒSÜWÑÏšðŠyP›Ë~öDÎv“ö~ö…‹ÄÈýåb6™ÎâÑ”øG¾dN¹òÁ‡Þ OLj!–2 ø 5í’\¿‘m³²q‰Ï2 z+õ7S’Ž#ÓC×gô@>Èçàé' ù$_“˜>1¿ç…ýòU%HË™Å?VÂþéóøÓó¹„)U•´bå³´5DßønÀñ¹Um¢, íræ¸ýÍÐázªjdÏVš.øÓú ìæk@}yú ×öBŸFµ. |ÒÁ«áœ@É#Ý“ÛÂOG/nO8+ÅeìŠ\oß4Ñŧ¬dž#6½?årrõ&¢p”³_fr{—óÿ¸kyº”úC3Vˆsr"æŽÓ›–Óp  cÁ‘¦ä.º¿ÞEøA3~:„7’£#âî)'H[ 5¡*îº!XD]QE³øj+6Ð]M>Áï%™QN¯Dd†‘ƒeÿ„ø»° .3E%õv¦UTÌÇjçmï#¤AJôBP?«-Ë…ë¼ [6V >dBóþ…ïrV3÷#§ˆìpft¬pÕeyß!ÜjŸ«3 ,“LÄ3ÄûìU³30nG –ï”7+]òË⺦¼WÜNEÐÌq,<•᪞^"u™žûóÈÌðƒ9¾·þ…¾ƒ$q:€ðžVÓ¹Ð@8XDÑuH͇¾»O Œ¬Â@ï><…i¾d~õ±þîfm†rbQλtDÚøŒÏØŸ6R€næ5·çÚŠŒî]j @ %…«’N¬èôƒŽ»’]—“Þy?“³#ˆò€@&í0áXÏÈøš‰ ¤ÉÉ~OIö3ü¸Ò~ªéXà‘o ÖÖ¿l´6ªÍ§P¬QkO!*ðþ¤ÍC4.6ó©µ ´8„ùÓjgÿ©„š‰³Ü÷à£>¼oÜâˆ"•aK·„ƒ4lË‹D&†Š»^àÓ_â°ª.’æ =ÛE¾É„ °E³ËB;Xàr&OŽÞ«œÑ@o¿M“IÃduSˆi’e.<úÅ«Y,=ât•â5›é÷³:=q%ê…CVÐiHQœ™‡EæÅ΋k ÇWÄ“swÈ{ÂV$ÈŠ¨ehÊAÅ(·"E’‰™ûZ‘5´ ä芑ɊâD•Ü)çw3uÊ÷èܹ}eÝ¢\p ʾ;«Y&Ò6$+«‚ÁUK¡ïüÉPì]ôÓ Fœ°çÊ.¸Á,TÞ•å1Rãˆ$YYh¹þfÒœ”a^ÈÂôµÅÒ`‘‚#K‰d}^R€,Ùù¥Îç¼ÍÓÙº– 1Ù‘UÔc6K%³ˆìºQ|pí‰Ç१>LeŽìHŽ…3\j;q?Ù æŸÚÊ>W±{r—xþKóβp…J4.‹®ö™´«øxï‚Ïþì¹„ï¦ z·¬ã0Nìh‰âÖî笷Dõ¶µ“bߟoý¶Ï"š-pü9„ºp¤ Æm¦M0Pže‡Ë`”M¦³Üí/æöÈ-¹ñ¹S—ÎTòôŽE*R„ ãXgösK0ºÆ¸{æËbëÏI‰$M2=g Úl™x๭Óc€D—$7œÍœŸ7«"¸U­¸ÄÁARïl•¸‘ ÑšFCbŽ@ÄM9¸¸ "§(]âcz졈¥‹uV éVªQé’²ïbD8[³Do¸TI¬R"Dä‹‘Á0Ct,H,qŠ‚ ³$]2¤õ§—.(T¤ †3ˈ8ƒ²Dº_jcPpÝ¥‘taEé"WK†¯‚h´ÆôÎxFvèU(]¤¶ÒEŠÄ˜‘Ψ’…z²¥Öf˜ Y2ejG¼©¯j]½–Ã"‘Lšœ³EÍìŸKlü¸³%L2üèÓ³P±¶Aí K~ƒ¥6œ e|c¬—þˆQ¡wL€$”¶ù%iä)&BÙ‡?=F8Yí†UIdß tVº,PÌù_ñ—['XZìÖ£$¡S’P!! ïÙ $!PÁ¤¹=[(Íw‘`RÊz8ͬ>o骦æìˆ3ÕÊê®3ähýàš8¬1Ä~ÀDïbÓ.[㌜²=–Íê5É’oã¿ùÍžx¶L×sù²·‚ \£P• c<[Z eЭÞî‰ÏX‹@{Æ ù÷Ñ~ÛAã ×;Ú e–,Ãießü™mêk¾;Ã’ªŠ÷…ç. º5ûƒ_8òàj‚Tc²ïpXôö†•}ÁOm—’–ôpèÓÛ„Éü¡qØÃ?­G±§ð”7WÃØ ,3”šÊ^gdø,?øDj<–› Š`‹^:¨DãGÀYùßKDÔÆ.ß#Emïeõ¡Éº¾u]ä$pt¥Ëaƒe(”ÑHÂh¤#^Ø!g7|ÛÌ LZnyXõéÐÞ‰î³Ðƒî?ÏŠÈ9G·š¢u·e—tì> ­Fˆe„&ï./Þìev(Ž´ A{rtÑ”!änÌÒ˜6ÆQAb8(‚Ç"8‹zOó4¡H'„Ûn17XD!Gë$ ÔK´K!¤G'µ'm³ñ¸˜›`IÕºê«t4B&rëFÍTSŒb•Íží,s –—à:@ Jpæ{ nîkË£Iæ6é„·°]ÊH©Î ‹³cd5Ðc;¡,‚­p6†¦ä{êØn7@z½~Þ…Ô$•gUa18X„åˆ4çIelØEˆ„QO·t EN=Åé7¥Ëð˜…ä­»ßÞ^~¸ýñÖº·fhÅ–<14‘¶¥T…'õ`㻡0f-ÿ2<1vdÉWñ/±¤ëkãç™õ3ÌK½`¡¸‡ì1¯Aß`±…2/cb‹ùÒ#Џ›xÌ'æwgÐËèi^㸠&JO(¢çé‰q~wô¤3zR3ôe:û±íå:C5.obðo>tª1H,NPªá$±¦&\Mê?]zF5Ø]'É;ïøº¾|?Bˆ°fY ~ Dˆ¡æþÌúµ%;NÀÉ®n>™%;ÛHX²ã2¶ÏI§6ˆ1—6°NŒq/Æ8Þ*é$§X \– ÅtÁ.Å"’LDÒR AŒ¿†äÚž‹¸ŠsO-#s% ÒCÖUb Fô©ƒS~ Ù vz°Vr€Áô`‹r[Ï‚ààÇRàXÄD²¸®2í„p!qUÌ7PÌ„³!IÊÍÚ禬¡ˆ¾ ?f(BŠÀP"lv’ÁJ’u81™è£Ÿ™LLoÏÓ‡t*ȱ“‰õô!9~t—¡íÛ¸²9S­@:^MÊÓ‡ûø¡Ó‡Aß`±…ÓG/p,bôáC¡ÇЇϘiQúëéCu¸üP<•ý¢èzù¡=}¸:}ô [(}(¡p,bEoÑ(Š;l à³ÃîÏR„®mKºKi½ß`e+ÍVSD(B£Á–‡FÒú·5ä+KšR‹˜ÄðÕÝŽÚ¨¦¸3©| ²HšáÎ$­R]ÙoÐ(¡¥y=}¸Úµ0þ{p ô [8}hŽc‘Ôct•Ä03v"”"ú Ñs”"z–èÒùÛŠð@èr¾*<@Cx 4WØDÑÛ¨bÏp5Ò p‚"2_z&4 _q&ÏܼÐÁÂ…ÑÝà¢î%°° ©®K4(éÄn= ix市†|ñ˜ñû‡NCƒƒEØY ´aNê~EPªcd—P˜G3¬.ƒKóZ’dNO„f /öw¿\¿ODýóÊMrí¢¸&É?&ÙÇùúíÒ»”&×»¹UkÞ8šTr—Ðd?C“™›û`0òy²ónîñÍNvIƒÅ NX}âæžp…VH:@:±"‘µ"x UÒÛ£9ºÞ'­H‡zä 7±©†F\-úážF^åшAÒ`q‚Ò"jÂF#Þ<:›o€Bid½×VØiÙÒM=î„øV˜õ³"zõ›z¯íøñƒ§ÛcUQÈi–z(WóXÌ—^ ¤¥LHm¢’¢¾|[}LpŸ È껌`\QÇi”£îºÞÁ¬(lk鈷O• ]ç`¦v •äé×fö—…Mý4$Žz\CN7Ë)D$C–nŸÙ"6æ#›þ”\ûÊ ÿŒ¶-âG~±TïÚ‡úíÂ¥›Oã(ŠX$IÂñí¡å’,ŸçV«Ð„ûMEª`2/¸qyÌÕï#\ÞÍ¢Uu@ÍÖô¬Ar1Sš1äÐI¾·v+ØYëãŠì,ΓÈ'aë½’Š“Õ‘OêããÇ]q§8<ÑXÄS¯Ó„Å©ÃQºtKìÖ gYI‘Lé!Í™”OAx(ÓAœ¤ò—ºçlO[óál†•r]; Qr_–Qw©)Á÷1ásÇŠ¹ Ò­&w–?~ðänýi[(¹‹4l7aqÂÓ,,SvÂg6%¸s¥\Ÿ%D|ÉQ ç·qÅq[¡ÍìQ’"c‡\o³ºŽø ¬¨6Ïá?_¿{ù$“ð5Ép|QJBÀš¯ô>¿ñ¾>0ÐÅp~³÷ï~s}±ÿùfŸOª{k]"—fÛY‚zå¦2@j[65®8ѪŠ(á¾<ÿØnïäòf  _º0 _¹ýnâ1Û°uü‚Š;¯þ´ÿpyµ <ª¶“¹›åðIö[êÊÍ&`{ŽÚl¸ÊãWTÜm}øòêúîðÞ_>ß½Üïßï߯Üèt¼Þ(꽌ÀKÜøk7¯‰ö ›§Û.¦´o¤ ûöòzÛ¾Ái´GÔ•{„€xÄðåq‹ëÀpº†‰?X&Ê·5}IN;r91»®Ý`—Å<ÇÊòx%EÎ1¦ñ‡ µj§˜aÃÙm2†ÔÝÑ{ôáˆ=Z˜j%ó€ÑŽX Â9PBUŠ1¨XÖÏüv¼£ð ­çË(2w p”Ò8Û¶b»é¹Š@Ctã20R±¹Çj['×bbñÌ{buk(± RüK!ùÃ$ë¶ÂâØ£Â‡É_d­ãžôp}ë!zr}}³V,è†çmlõWQ$_íŒ7ûÒÂôíFL·Çž—n!¦Çq¸PUa¶¸rUÅ»¬ú¾GF‰PÜyzøùx‚4a’•{­*[l?¶-¢ÄTÔœ‰?]z kõοùë÷ß=µ˜0ë'˜Ó<ýøéî·×wç¿NCöˆ/Ÿ@i‚=[‰‹q+7T6U?ôØ QÜPsTûôùö—Í;z*ä0­Å~SÛ•{ó« èÁlkÎÄÔ8&L˜óróÃå‡_îæ¤_ú%Ÿ¾ünÿóŠÍ1|ss}óâöò°EÐàA_pBOB˜žƒÖ&x Qéè„ËÔ{  YB•ñ-ÝìõG˜ÈøJê‡â;õC Ýú“W?|3¡ÝnÎwÏ_¿‰ùæÏF4PZgÿO&8˜ÌQB>?§¥íü½ÀîÈ;O"ó"ãQQ^·¥YðŸRøû/ô͘R`úX¸|‡s to÷4ŒèÄŒ߂6¡%,d­==»g0¨* TÇ^?}º¹þçó«_ö7—wçW \\}­Æ´.ÎP¥{eÅ Ðʘ5ç×àïûï¾¹¾{ú×®IWyßk°&+N“×ô׫Ëë«Ç—¥ªb=Ç‚ªB[ )V¡‹ë±T»Ú)€¢Ÿƒ×ŠÀV1^Í~B)Í¡€­hÙX¨oÃðÍåíÝåÕźÖþ¾þ¸ÿë§7×/kQ*ªBÖǰ¯bÂ*i¹%Þ¿o?ÿ³å~¶Ù [‹+zr…Äã7î‚û†Ìa°–ì�¾ùx~÷ø`8€ìN¡ é[YHuÀ½ú×åÏ, ^{´ûßÿ÷8•ŽbŒº»ë÷ÀNªƒêÍoŸöo®ÿö|­‘|AÞCW«ÞšXv0ôlf %ÿœÅÈ*óèæú}ízF=4i6¯÷µ‰“À‰ «!½n ÐØÄLµµ1ãÒ.,S®‘¾íûÎÜ¥ÀP×Ï)›˜ ŠG¯n.?\^»óÛÛýÉÊTWH‰êg—ýý¯žL¾[CÈTCï‰r½Ï(áܔݰÌ¥RŠJîŠ(Æ—Kü}[GŸûö¤VQ$XK=3&&ôl÷ýÍåÕÝ7çwç»§_Þyòê›§?>þáéã_?}öâéË7gÃ×hm6ÚG³O³úRàþ†ÇRËâénGRGßݬ©½:}w~9¼Þ_½qûáínjÀKæÚoƒ½úùÛËa¿Ûá†jí½ß~>˜`53z-bDè7Ú¨6ìîL3d?Uø gɽôQI¼@Á±Ù:#ú𓹔MÔýÑa§ï./vçnüíöòv÷ó›«Ë«™ß¼i}¹çv§­{vwyµût}{{ùÓðÛîóÕ˜9eÜÜ_Ag"æÿ¤PJ!«(_ÐØ,tµ+h6š~Âƃñ´B&MÅŸ&™d¯0q1r¥à9 yØX·Bþ¸FÏÑLÑ ;xÃ,»OKÆ+L¥¶Qþ÷Tnù~è¨Üö‡»MS3xI+o“€¿ÅªÞšm g{Òs( q‰=¥èS a4ŒNV]¨¨“,z–qÑ«Ÿ>,é #vû~ºÙøÿ°Þ˵<E£Fø« •ÞêÝ[O ±¡í©Ïoo?ïÿ:I‡o¹ÛTáÐ8Ýì! ªD*Ü?ò¥K$0¶lÖLGôÖŒ°WŸî.?^þkoN;?ì?Ý”P\—›¼Ö‡‘’—‰;^Ûçæü¸ïhñàgâœÃùí/Û0òÄÏhPr[‰Uç-ÞèÓ1¨¨y=ÉM¹MbÌñ;¬ùl#9žýÍ"îÈ)Àl9ìÙÒ)"ÀÞª:£þªµ U;Ïð²eÙÞF³)Êî̾ç†Ù:sjS\£”fÀ¤5_¬«÷»¿›{æ…Ì&­‘ùíåÍíxq ¯6Ç™ 6¨Ê ‚ „ÍÅôÆ1*ÓpžÕÆM8£Wðˆ'!ÝV±ë&H-%v~Üt½± ¯¶âÁ›k‹Õïö'`‚iZÏÍ™ÞWÈxzõw 4·ìòTus?Ûß!ó&êû Pˆz@¨&ãÈtQq“Zøs<`ûÏ çgfÚ w~ëêT ß– ^n¼Å?|³j/Ÿ^ÝÝü†O@io3ƒÎ/~1Ç£mÓ<þôé`èÿP¤ ¶$’Þ¶Zm™¤€,Ñå(ÍX8-¯¬‡gð"à âd‰Ë‘ËÇû©ìÈt¼·ŽFþ«ËKiŠ;Vûæ@Ù¯~ú_û‹»g~S”„ÆÓOÓæUe@{NÄ‹˜¹ CcÒ˰ƒçä°¹)y•‡ZIŒÐ¸Úe|Ÿ >}45RÌK„ÄÙ 5ÀÖ«Á^eJcF¬\Þ¾8lßÇóÉäp™—œƒÇojYP4;Ö¤ø Ï /·ÑŽ„g6|à*㣄9˜Ã±Mê>j‡Ùx•xÄN0¬@ÏÌ&Ð~˜ÑáÕNQMΟ÷ÆY«:¶ÌÇy.‡aÿá|0FÒ7¶ˆóeã¼*ÌÚ>_ÞÄGãô cÁ —·wÅ7¤ÇCƒ ¹¢b/âD¬ðE¨zëÿ³ßìoA~9’-šz×Ò Z„´"6ȆɸŠc«!~ -°´¨»¢´ÍÇSš³_ ÉNÑzà57Ì‘RÐOª”2äÐ(~0ŸXtFÕD)r£ŠÞ_œÿöÓ~¬óúîÆ8áóq6žÑìÈ…!7{{í &i –üD»ÄÞšTµj¶@î1´c‹ßõ}—é‹yÄ!.§nh ÄPk·}P‚=èýû>³æ1×.[±îjÕ—ÅÓ¸š#°›¿‰\4Áîÿ!¦J„‰—_< §+n¼ÑÏ?>~sýëþj…a:Ưۆxr¦¤›ÜÚÊ/M®c=¼’ø½ &ê`JΛõ`‰X•m#ŸoÁÚp›¥R‡gê¿\_Ô‘WÝJ8ÌÄÜ,%ÀÄø(›35kÀhøRòl!ªˆœ‘ Q@kê÷’ °Gb[©B 9úÄx [eÃÜŸBáãÿ,h°º=zSÂ0wrí;ýX¤óâ,<}‘_dé‹´ø"M_$sáùôK’~ÙE_âî*…® xµ2‘È™de2âs¢+‰m-ÐÚ)^»1“ Rî3Æí•í“ÓmM„Eµ™÷ÑW½ÝßÜ~usþé—¯ÞÛŠà¯ÿõþöö?\ #ó¯ó›»¯n9?è€áò§¯.®?~ºö7_}ÿÊæþùú_À’Œzzñë«}øöò|xuóÞ&.Â2®‘J mï þ Eô’¤ÿKÆ&1,JagU5€aMúdìDi¯zœßŒ­U³á6»*Îgª9ø“Ë«›'¿|¾úuõÝ!¦~NicÔãiió¤±ÖU·C6MŸpð~ýØ 9(dׂU…TQàD6šŠù{È)MadÒCÞf*ÇH±C¹*^U5ÍÁs¨Lí¬˜ä”½«ŒÍW7cŽÎúÍ+þðix4u¸Îo~3}B¢icŒ5ŒF‘~E/wYމêã…#ˆF 9¥B$vUç{‚EgÁ;*;6Zš½Ÿ—}N³åÑly4[ÉÆ£ùôÙrI¾Üìçlõ$‡dàüûlºl¶lt†ŠíÛ˜g`bWF§ð)EŸ2ô)GŸ ô©DŸ*ô©FŸöø*:ü1¾:‚/àë#ø ¾B‚/‘àk$ø" ¾JН’ö_%ÅWIñUR|•_%ÅWIñUR|• _%ÃWÉ ¤Š¯’á«dø*¾J†¯’á«dø*yjÁoxáx^ZÇ%ê+>åâªX¿ô‚^Bܽʣ‡ˆÃÿNkÍ n˜xö±ô_z-½@—^ K/,á.ñ ]⺄ÉSj<º„!º´ëˆs‘®èUœqp„.‚¼a#f1°Döt‰ì7u3hKìBqµÈ.8¢O 6iÁˆ›¡·z‹j üE’¥Ý%K»Kwwi–Q‹=ú½þâ7ß|I+{G-Äønºüæ‹ßظVJˆ¦¡échzµ’Ô ž£}˜ð?>õ»$Èãúâünÿ‰å/Ï#:µ%éJ?Sh‰a…¸ötn”¥s¶›®œÆ•¦MÓÍÐï6IèQj/u 6RÒVžuŦò‡l×ÇËÿ²ÁF?e²v_£©X‘é€á°þ‘_~÷ö]´î˜S£Ÿéø?±zô3ÿ',ÞÝÏï<Ÿ'få8þÅÍþ°­f¨w㯈XÑŒ‡ ý8]„@|<5?Þ»x§P""ðn/ß ·zw¾hÖðu¯s¢#ó”Fc›<ÿM|¥Â M 6©2yÛ—îo{ ç ò”N!ÅV3à“MAôCdHæ8êÞUŽ÷—n͆û™†ÿL¨"B&Uãx<Š Ù?’ãÝPK°Å–°eà x]d¤Z™³ö7Áßa E0Z¢éòY-?ÖÖvÂáÁ ¦òÁ˜ŒËd0ñs<˜ß–D,£„šÐâ"v-‚Šã â἞ñ¶Ü&ƒûǵ&•g™ ‚)Ú.š-¯7z’·»°®ÁLjÑý8ÆUPTt›ôÁ»úlB º"P5(f0’ã a+¤pj¥gˆ|04£·(TÌ›“ L‡ª¬æ/ïF^ù.Šœ€-¹ä’ß°£ú,£ï¢hýÿ³÷·MvÛH‚(ü½~ʼnØž‰èo$èØ»jI­u\YrXš]+â‰ðS’ŽíÚ¦ª4U¥žöþúK  ò”Žºµ±=eñ@"‘oÈLd[ħ ¶`+ªdDz3«ËµsÉ õ? ñ¡jA*ý*Írã½éÙ2=N(µ%ÉKadPð™ÞBáX ¶GÊÚ3Û ¥¥.$,÷ðX§› 1,,¶à #ƒB4Ùˆ·òà4ç¤.Tç‘ æ£(Å(&¹lÚidÿ[½ÿ骆*'ö< ýaVŸÁ®‘iÛ:¬¼A¤Òü3pÀÌîgä‰Àl‚TI˜Çª•}Û2©MtÒÅg P¿›ˆèS_»Få7šÿj߃#óé'P]ñ[¡þ¶®¯ŽÓŒ’®]´E1(¶vO#"…Xµc¾ íšoÃÓlA˜4Í[åÖ(àKÌõðÁŠ‘\è°˜:¨˜¡4“98Ktödë6"åd±aH€h¹žÂEÚa$´òl­…øÊØEy•ñx—œ —èÆ¼uü)–jßõ³å|<ů!ÙÖ=r€ÁLmÚ`U*Á·2Ê$/ž}MýàÍÅTÿj¬oð®mþLœqyªjQ@Fò¡€÷HL)Á°† É}õñønîŒã¦AŠ" 9§K*;x •HÙJTN¡Üô"::Zrç-PˆuL®¹ßZÛH¹Ï‰à™œŠâWcé*Y.ÛÖSút/5MÔkåç4üÓklkó2(q SÓN K[XÔq¼„#ë3áçÝÍµí¤’[Qî¶¢B –ÝÈusYFeÛ,’|)#ù[ÈöZi «bºi!±—©W¹Éê¸õ`Ö“ÊQa}!çí2TJåBDt¨+ h)¿ ["}бêmµjl/ãY#k넊Ά›^ó=K|¿¾…û´«ÿóòî/ÇKUâÅÍ·ºõ|j†ýJÇ“ ÙP¤.dBº½=^ã-¬‘’i´Aêœô ¢kà§X¬È-Ž H H«däK†œsQxK^ë¡"ÂC*ÂF@¸ÞðFÌzýO­¬¼{~óîrx¢‹¾-Ojaƒ¾SÅ&ŠéŠ"‘A¯ÿõøæãÊÏú£-1ðÓ”yM|Zñ‰íÅåX4 h· ˆå€Îö×Wÿ‰çç°’ÐwíðøåoýùùÓ°¤(³½åžo}”ào«ú%ÿññ½Ž=Ð×u ã©7=ß_}zëWÈF?k_ô:usŒ ½¾ytûÛÝÒ'b«lnÚU•½­¿ºüóÍû?–Þìt‹£ß#‹üp¼ÿýæýèœÌ_LZpñ6òèþþöêí§ûåøüÑÈ2Uëò¥¨T=Ò}Î#¦Ç_Wxzróÿ^]¿?¾K*áïwúýqãžÄݳÐ÷uqŸ'7e/ê`ºSâ¯Ë‰Hÿ~|÷× oë~›¯.ŸßÜüõò÷ãåû¥×©~ý ðú•ÔZ[qòþÃå¤w‚©à}'zG0ud¡ËÎ'£÷:tЈ8¼!uxƒû×\ˆÉ¶ódò©ÿDAÉšüÿëåÝýë)\<ª&<ëNö:ìÒÚÈ]¥µÉ&õ(áyu~b"‹ù ù Qè4¶b,ö&HÔáXœ#DáÒç ×ÈHW¿]¢zf1mM²‚"ZðÒÑ5aZ¾ŠˆÒ˺Væ÷¹Xžyóì÷½Õ·'è¾w¤÷‡šq…ì;³xCB¸«HA3è¹QRèדBGAþœ!…6"k¹^8tÉt[ ›°5}|îD¢Ð7hláD"9ŽÅ¹¹_¸t"î^v g¢YÉ1ú`hBÎ}ô ›AÓ‡d¡òh×)ªÇ ³òPÙ‡~êR†DôÅ m&_‚þP4ÂP‘"¸65##‘0i"Ñ£¹Tÿ|BoœÌëèÌjÉ;Ó{Ú]ˆ‰­Xa~¢än{!Æëkͼ±’v LþåÏn1‹J=R‹“² ¡x¤lR§×©PIt*çjªï˜jØ$z¥÷ÌèVapÐCéV¹ž=:#’  µWÙ’õ¯=$iÌá“)$?:­U¿z35¸ ÑÄ…“`DôÚ‹7Ùñ+”·Ðå€u„SƒÛ¦‘2½o‘Ͳpœ^Ž®'ÏÔs³úÁN}àî¨íÅöÕÝýÔ{7ØýG/¨ ¶t{W~À}±4<c(Ž4`²ÊšTk„ƒIöZX1i¾Vd½£I²–A »àhÒ×Ì4`-û$Ó×¶PI¥Z&f±/Hªï|¶±Œ d™jó§þt,Çã[À©•®sa\'’g$™xGðE¯;ó;`ÉJÄÛ.{"3.ÝÂ[ b©mƒ‘XQ©’w;¡RÅ\”…REð ’Aµsu¥ $hSc)ÎÓË4ߟ»`Q4ÂPÁ"‹ô‘ñÒg_ÞtëYÒR( ‘;mKÚWœâ®y’®3HãÈÒ(É»ÃpBîÁÑIrKC[^ ï•ê±mZˆýõhƒ´ÓÇgOŽ6«ZXôDSqË:‹˜gÕiÓ³µº’ˆÝþ¼' Ýþ6aµ‘u¤Cök·½uÄíÕÈéãsßþÖXGmÂ:j{ŽcÙ~¾Ìý­QcmFÙ¬¯pÍöw ˆ²éíï"5ÆsÑ“Äöwž+Ý~…>>÷íWè4¶ÐíïÁ±ˆmÿbUO3èQÑí+·Ao7£7px?Œ[»¬–Yôq·j¯,ZEC—/ºHúl­éà¯ðÍºÈÆM ûOòpË+r›¤$s©”qlUŒéãsgiŒ¿[(ãHWœ6ÅxéÁ©r®à|3X ”B‡'ÄDNR骈ÖZ›%z¿”RP  –V Ô¸4ê0é°ÖË‹9àÂa™G—ö*¶%Ín|ÛSPÿOóm߆šº]çºÖ|Ûsä°±À·Ìò­ùøÜùV¡oÐØBù¶— ŽÅÙš—®õ}w< ,“rígBÕj5Üã§¢/›ôÉ>¤žx|ºøÃw}ƒŸTú&:©´¶Fa9çöMÅI…Oœ;}|末Ñ7hlaœÛϑҋH6·n$ \Ui›q˜úÅÌ ëÌŸþ"rŒŽ«!°´<1o‡^éN¯„{Ëî_ 5b)$Ý£š‰®í®¸@}˜ób_tîÕiÙ;9C\§›Ü«š¨MC{È_5`îÕ…¿`_+xÈÕÉÁ\X^7Ÿ;¯›è²ÂÊë”2‹˜–¶Âu³–Öà zvŒJV‡ö°4¬yòÇ×P|l7ÅG[ ²53°&ÜF¹ÞGÓS¹ú ·õæ¦Ïú-”¸ìóXŒ—(¾9ÒŸŽ0&4¢h¡Ç˜ë’GÎB½ªwž3¦ÿtHJGnEih‚¨lµKpÔ‚&J}Èš4dNÆ)ŠâS¦%€ÛÚ©«­hêÙó§ƒÞšÅ•/£‹âèZŠ?«Ï\–†^ã`©ä}P»#œai¦½GŠuw²7xÛ" ß0ß¶RÄ ²ÞÞ°9"ÓÇç.bú-TÄŠNàXÄÎhŽH¥ˆÝ+ Y²Zë —öÏ`Ì(FÏ3áô#ZZ‚†•ú–Ê–‘œý]ÊéMÁâ ×H±Á¾yî\£4hœ \Ó:ä q…ä.»^jZs¤s—gEb2¬œ8ªÊèíê>„ÍÉÞÀ‰SÎí\q-aÚÝ$~›ø]$ñéúøMßUH|›ö0}|ö´k$~—øà81‰ÝM¯¸~ªáô´»Hc5ôpkúá¡‹Ñu·5¨†Ö;t•çw‰æ0ùŒº/âÜÕi§|J5‰ô$Èïš) ‰‹T'Ùxl몙8'ë#Žìü6&º¶ÔÜ"Æß²L{‡Ù¹¡A‡à¾GpÑ("‰ÂŒþŽèD2s bÈ - 2™lðAÖ+óXÈòCæî›è4ÞÃ]âÞÊrý,>i} ¢§Ñ‡Mâýìw Š¼¶ÚÿŠ qyƱƚ½÷ệ˜ÆEÛƒA§PHšÞ\2ï7,Ä¡ë˜'P_ÀŽƒP iq"Oë9õº‚xù´áÏjܰðnqºõ¢^ç`–â¼€²}Z<áÛay á­^Á§áY Äš…Ò6¶Óž¿÷B/ZÈÖЀ@QiHN;°Q‰¡âB¹íÄ-™VjêqÄnìZU„þÊUu¢ŸwÄQk#¶´ÈÜÇ?Ìûýi|Ïd#ÓwIÆNÞiý¼3…€ðF HËZžk0cccöò×’j–dÁ:³N–j"ì_· $®=ž8·¥¥Dšèv7šÐ³\[ÐéËpŒò hŽmÑ’ðžçSÞ£ñ¤¡tš¸A -kPû,ól¸y{9LÍê)%1°+d^S†Ÿ \I§¿ÓÔðÀjÖC#ek6BóP/L­²OZXÓ|ÑÁß´©C“§3°ÂºkÎæØdS­³š Òƒ#›¬¥áñâ#æSIá›ÇQX8j÷<‡[:òŽ–¡ò€•{ Wóµå«¾6ô/¸1…hâ W𦅯Hv :Minÿý^^¿Ž·ææZ^¼ý8~×È‚ïhðµx˾uÖIŜ̛“{ßFÞîù'M2!²¸«Úd<(Z‚ÑÎ[ß²/jEßAœ•IÿÛà¾:Ù¤°3d`²i5™&¼Ö³u¾…NÏZ…’Áó'¸DjyˆLÓe†ÍŒ&.RÒOú®‰ìz9.q ~ ÚL–Å´‚ÍâP’Gæ«Ûƒc»mºÁˆ¨„dÙF¨³¥lOño>>ý{~VŠ@îÿÎN©ßˆ,¾¶8O°[44ûÙÁ’Heƒª´ "q7„‚ü‹…ÕÇæ•Ò„VK»øKã&Ù™JÄf*i±R§£’(õ(]hÃÊøzº1®Õé†m¢ÌiÞš£ˆ‰ˆîQs`«C£«¤‘$¸wÌ›õ×ÎÇÑû)rPöþ¤ýúÌC…ƒÁXŒJs¬’® g„J$/ÀÊ}²® KØC™L 6!ˆv§ck‰Ä åN4¦$oèóµ œï‰¼0y¤Á³¹cƒƒ\5“Ôç£$§p$à“AG t½AºººDž‰v¿_¾œÃ´5 Ž.¤Á¥rúmiT/©Ÿ4=OˆÀ^†"0›#—}»^Ú«¨öë³ …ƒÁØ3Íôp+õãvú ÜÖ‚sd™ÞŠ M'7©wÛ ô ò±õ¬=. IÃBqí²TbY¸àÐQ¾Ãiëo®ÞOHD"©@øä$Ø4è²[%².³ô2ƒq1·"mÑ÷¹;LsšD¤.|W}PøÕÇ„wFŠ7,,áVZvC9C߃!gLœŸðVôlG‹ZIy[ŠòΡµÈ#„œ-Ž iƒ”e^Qi„Ïá RqÌgØøÎlP8Œá‚•…µQBTdùš1‚jÌQ>–ƒf&'« š© ¬F‚}z9(T ÂZ´ .¬Ežâ»õÕÆAºÕl…-`¿>{a­P8Œáº%ŽJÌ“lK$DÔ¼Æ1 !ÌÄ(¡¬½OlÂÌík=‘;—¤Ô¸Ý¥PȈ/vÐ0CÔ_•K{ò²—­òÌ`,hÓ=5wmÄ>µÝp"ÆáyÆé †7ÕÙsŽÂ÷`Ð öW›bú¸z cIÖø+›·eæ·=š*ƒh*bèÁÅ7ƒúÿÖ¡ËËûw¿Û3FBÇŒèëÜUíÆü›š@Gí}/cÙO Š_|úðöxk·<¡ž>ØQCYVÛ8WK¿ˆHV¬ùæ£UG·ÃÓ¸3K]¡o¯òÃìxøùçCè€ÔÚiÄ|Îx€µEøÀM"³ëÒµ ’ÆŒÿqøt‡ù:#ÊOŒ÷~¶ÒÖ®ÙPCʤï @̼ / 1oo;%¼•·ÝÚFe˜01µ¤µPÀ”^ÍIVò„q$£SoO|%׿X!Ûµú #üåÁ´ç´Ãž½ìW¸ *qáÞ7®¡\ˆãù¢A¸üY¸b AŸ9'í¡½a]* ÎB$€ï›}Jšè±à•lC€}ؼž÷ö¦åì™Ø{G€fس'Àžë¢××D0ç´wÁЦë}ú—]ã0goŸ)Bí‚"#(²l…ëÀzFí 9~ٛˇ´i¸C†~ÞufA] ÷éÅtGt6M.ÀQÝÓ =Þ-p›Âá”Kº!K­Ø–s} $Zv”ðüª±“ÿ™Ï1 UÙßÇ„!ã×z)¸}ì_µÚ<¾}ÌÍæ û·¿Èˆ=B"à­pbѺ]Ržš9 !$§.Þ,Xöt?K= ¡òBôÜ­¡SQ¤@¬Ð*:„FxEW÷(8pRw—ö4ÎvZöà¦:w™¯ñ=ôâBÝ\Ùp Ïx'N‚GШӛž+Íœ©*æ¦7ÇU†m¦3+7!»Œúû÷Æ¿‚ NWãt ¼mwÛ›Oo[Ú@s_,c!ÒÌ.¦M /[˜.ã^¬³ÜsIŠçÀâ³b¤8±Ez´emHÿ:ó$%» ,™¬?䖽Ř/Àõ…dJ™B뽃 ˹z°´…ƒ%þr+ŽÜÉ’Ò°‰V|—þ:}ñœ±;3N¥Z`ÄàÈ•;Ðä ¨¶¼lÞ—/%]=x²©ž@X°MÓ Â`k¼±þÁ€›¤W®Æ£ >zxgðÁš.ÄGgñ_h,ÉgÕó fجER 7#xêe‚„pËÔ>¹Îûc@Á¾mÊ´ˆ¬!ßXŠÈÒa+?Á1ËÌÙ‚šHyZ\.eLXk±ðŽeBdˬô* Ú÷òõ2PœÇ?å«'Ñ¿Y–2suëçJ®ùîs¥ù¬+ž+2»¬•Œæ|d¡½9¸|Äâäv{eMÑ‹ ;¦À´FÝ-iwŸ% ðIU(zÛì']¸û2‚~ìß¶Šcg‰¨œ{?6S¥nÝÀ½€^ð¿hãжtþñ’IT!môEü{¼lbSü´à‘3m­¹hf¯eÇOê¦Ùd…í|Dí6W¶Ht »4xaá8T`ÞîÁ¡—†)MufÌ ÷èhÛàþUjzôÌçï•mÍQ¯u7 ÖÔ)m\ÜgªVX ÒblšSuÛ‡†ºÃ¦8ÀCµ}Í$ †‡ê|’š5ì–ó•ƒjAhÆ2vúŒŸñ 4ƒné>EdAfŽY(²Í¥…Ó•Š8Í]Š º°Þ¸h­{ªMù'ß=zýò‡_žŒ{|ÿU\_}÷î÷㻿þp¼»»üí8¾ðê͋ǎ Hü€6²™Ÿ©ÁƾyõèÏŸ®†û«ëG?W#JGàÿäûMø€°ñóË»»ãíýë?>ïâédß(€‰úÏ^ýðèùóï_¼žÈ9ü¶ª`E=O@׉º{ ®-xñ–û­?ßÄc‰_â×ì´Ó³¾Ö2iàÙN« 7hÅÎ&11òC&„OÀwÉ)ø›¢-˜‚¿c¯WÃðoŠÚÞ.gÄbÈä`8˜·7‡Ñ4ü¯`(¸äXaü!ôoJxm•‚Q¯/?l´Sƒ>ýûÇã»û•«Æ1Oz" >e~½ùtý~%ln×€ä)ü®­úŽ00_/ËŒ ™NúÂF[™—H`tB Ùè”ö†} Fßd>Ò 0&LE‡|×Àg%ûºE+<ªÖu ¢¨7èºe”Õ­*iØtã×ïGûOA€]7龦Œ ¤ªAƒd‰WÜ"£¥DU,ðÁ®o7t-s¸Ý›hîÐKJr?ÙÀõ”<"qÌì¹ãÚÍ(Þ²9kÕVÙš0+pÌ&±Â%µb-~ˆêÕâÁpYeŸXD¼¶[öb%Ê}é lŸEõ@t6 šÏ¯yî“¥‡‚ž†C:ñDå@Aýãéõß^}z{w_)¢(¢äÅWŠÄy¹  [I]S–²Æ­ëI© ª;w—OŽwïŽ×ð¶IRµð¸°ZR…ÀR ìŸoÞÿÀ Ê7BKº’¿‡Ï¨*<ŸA„΋ŒOpãIМ‘ÇSÜ(Ù@Ï!Pºö̈’›#¢•¬ƒè¥-¬Sï,ÃÖ’d¡)ñÕÕ‡pÆn㾃?+€uÔɯ\#"á)!EŒ´ ž!&N›PÇᴠІÌ@TG¼˜IàHÒ²Ã3ïÉ?½|¬ m£RÝ;]hK%òVöÆ«ßv]G[n’od½š3”{{ýˆJo`HA|Ü•.ÿz|òéÇ?~¼½yw|ÿéöxxúÝøæã—Ožþòè§§~yõôÙO_¼¾¾WkT´€ºÚaáäQ¸ÁåUêÐ ÕÚÿû½i;¡R‹èT{hü/ÑÚÿâÌþ³…EètAwü¯)iþù(DÝ5æNÚÿj…ý/Aí1;¡vB줱sH;EgghíÜŽÏìðÔŽ®»DÆˆÒ £O:ÙAO×ùHš•.Kª?a7§(Ò7|GÁÍ53óS-{ng&¥3ë{Œä§f ¥¦vAYMÂNSGrj¦â”:H™™šƒ,55µ»o£Pm*ƒb jÉ©¹Š´é›&™©a_55u7ßÚ§îìÔñMŸäÔºþl×䧆eÕÔÒGš‚ÝFÿ’Së«’姆ýL»âijõW—å'ö‚MÑÔº¯Î”ÌL=²'Ê\ {jlîsÒïâìj`5|¿0?yè&Ü&$j”7ÄÎ/‹ç'&Y‚.ÌOA*©žŸÙx½‰ÁS;_9å­y×@³)`zou™Ôñ——¿þåjã«â­v˜Çï¹Ê‰„9yy—o8µJñùpù×£Îâ^F–Ê…eà ˆ_Ë )±Í7P¢¿«#-®d(˜±‰¡Öj¤ä2ªãÙþ8/o¼¼Mô*j/ÈGÀ"·EŽ’\õ³S’!:Ÿ@’$köÙíϦX<Œ}¦X|ÁÒ|! èeS<‘±Ï‘üír8Üê .‡áòíqÀšK}ñ%¸ZÂ8ìs5ΖÔn,W!],ך` cÈ·É]à;äBlÚ…_—÷Ÿn[öA¹•ÆÿbFÚy'N‚uD®Vb==E‘ÂÜ4’#^K; ùŠý›ÞêÑ™bžæ>-Ým ¦R")¼B‘Þ…¢D÷¢üè½ôs³]h—8–DB/#’‰³a4„dÓÚz‡ï–dŸžb7Ñ ÅQzÒó£¶úÝò•‹¢•I;‰Üš‘Hró¡è\Z‰GÄªÆæÃÙB«&foÏœ^:¦„{¸ÑhvÇ÷ugÅÒ¦³@ýŽ…eaf ç¢s’§ …*Hä½Òggçù˜q|{¼|÷»*l°’t0.Ý@:õ÷M–=#ˆØ«ö³m„ò·©vÂZÜïxÕû¬ ,z%‹¿|„!KEî‰n\—ò`¯Ü©=ý…H²ïöõ¤½ðÆ}­¼ðÁF&–H@Óy9¾HÐwH>ýÏO—'ò¸;aSç…Ä/× g ü½\µƒüîY”lqû1$£üó¸ýðÕ`V Øâé£ð(¿ñækìͲI HU¥¸;ÞÿÇ8ÖÕñvëhÊx{Ç{z{{sûÃÝo©;ûbbb½Ä}± ßÆCO+Á·áz{ƒf-Š:#mW÷Þiyyu}øõòj8Bß ½Áà^ÍkƒR´ìÊ를%l¸`ùn¸¼=¹ ¨³DJ¯¸­ˆ‹»ÕÖÞ£ÝùÜCó‚½ÌõXç"”Á_‹¢ipH9r.rÍ«rV’Q™§þ¤H¸ŠjAòê¯W_ܼ_®W+Eй?~üñF©’|yæÖZ-ÍÊbR Í¥TÓ¢*<ðò×SîH ]aÊX‘¿ÇwºDº]ˆ7Öù*ƸÁÒzɵo=Á ’Ë- ^hÝ_Þ? dFE”Rwø]Á6Ó ¶œV)¢?Ïi5±̪©ÁÔŠÖ³A·ˆV°”ýÌÄ*(Vbrç¸I½Äñ×€¡pßz¥*é¶`Ý%aWº‡]ãAÕ?Y»Ÿe©ß¥û¹Mªu {ÊêäLríe.겂Y¶Ñ €î{Ì „Ô©EÎÑO¿Åj„"Ô[±/¯.ŸßÜüõò÷ãåZñ[V‰·”ÈToZ Fi;K+>"°¡û»‰úŠDõ6ŠÜgŸÜ¬$E¤„êRÜCÞ©U`4X«-S/E…qÖ/ånü¯«w®/‡?î®VŒ%‚M[³ÿz–îí¸© JzÁS=öB݈y|s}{«2‰Ýe”C°êNÕÑ»i*&>YVÒCYvk!= H©^Ƭu¹ùÊ Ù„ÕWÁãåøÑ¯•ÓîzDÝu%ØÖÀœÔÏÈ õHßÕÕƒXµë€('ÐZŠòZ«ÀcRã\‰_xtÛ$mjÉÈB0š®–ðÖ}دéûªü­">X †öÏF×P¼¯ÜØJ×yÛ#›Î]d}—X`ñ”¿uñÓø»£AàsmQÖM-Ê:ŠëèeŒ3éƒ>wºrõ¾býhmW¨ÅjÜ-ÕûÙo(öÔ~c{Ú¢Géžf¶ÝiÔ$V§JdÚ6¥Ü¬‘÷×–.Ôÿn:ûß´“{ÎzÓ¸x|v:™¡ÍÍÌÛ¶£õT>H7 5ƒ÷Qc@£3¿»j~Sä É·ßÀ\µÍ6/k»Þü•¶:üpz±Ë4ÜæþPvSø A)åhE;œ× Ûö‰4Áþäº3}PÈ©™ybSPÂjš¦Ý{ßuÞlDô®É½ú?¶¸—«9GüjºeÌÓÂÔìϦßÀØ‚¨#\¢ÃˆAvØWÑ|ç‘ÉÈüîʓԨväiÔ¶ÍÚ¶þ¨t"N¿) Ýn¯)`ÈÚ`°ÌëÚfÚnVËü9BDdî³Ôgq‹Þg‡D»Ý ]í³ƒkn›nÒk‡÷_D[«áeV] ‰óÝ|§v®¶ílÜ,~ì÷¨›ÔÆ]nû‹|OÛ¸µ/ šiÓ*\ÉH ­RXÿZLJfÔaßYN‰èÓÖìüYíx®á¦í€P`$ÿM'Ⱦ7’ÿæ÷@þƒÎ±Ži¡ c ìciJ4S§ÝM!E]´OX‘fkJ'ètY=Çêý$î¨ðå€òmOÈ¡t{ÒD¿w«æÞ¸õ4ºæõ¸."C„Š¡ê½ ¤)i ÄöI£6M$@`÷8î­J.ÐÞª™ÎÒ{£ÏËR3ÑI½?D aó2˜æGÞhÏ|æ~ØúÓØxlûh›¤:ˆµ ÞmžDoÅmm+Z£çwo é3k é%дJÎ)*Û&9’©Fë“ôعÑ:,5#„–‘³gVñº1§\¥î|5Má@ròô©=ÈÄ[Š€æóÎàcPð˜.0ëy~¦Å¾=Š%ŽÕÈÏôàÍ0jÅ¥[—–nÁQp¹½8*mÛ&Ùh­-“Ý+%¯'ò’7)ûè¥X$¡‚7/EÿhYж)EK„¨ÛUÛ·='9”‰2'«"ÍZ¬ëó¿k_ÈŽÂë牌y’^1X}…z•^~÷ööòúÝÊtà âVŠH,b…Mÿp¼ÿýæ½]ª·ä‹OÞogO@Ë:×Á¬%Ûy£Hyô¡ò0_Ô®^/ñçÓÿœ2X¼?¸¥:ôÆ[/:¬ÝP“þžƒ®#Fºy·•LЭX˜•¾Ô±m9×r&¬Ž³}²  ‘âe›‚0àfy<áE‚ø Ì„ž†øq3pªAá–Ä̧Ni®NÀ 8(&´%âL}2‚ºÅ6+˜)u#uÙÑd~4 óLææž$bV¨r€uëçâ‹R{y®È¨¡Y=6Ô¦ <+boî”Rá{ ?‹­‡lÌÍ–>!ê˜Eâ×-,‘Òr‰åD»àñ*ý<úw·¿èß]Œ£Ú¢Èùõ"Æ‹¤x‰-/”í²T(£'yiZJŽv”:Ò›t»ð6^Õn>µ˜³ÿët8ºÜíBŒk¡ŸÖ»ž2ít0°õh0æÌ,…ƒÁXŒJã`aDà¨Äü+ö™Žø'Kà^‰´¨5@È?ðŸ >ÉÕ!÷tº IÝW˜i3;úˆ.~„Ìä§7úÚCÁUÒ…þÛWÔ‘Y( œø5÷ø´ßéT¡^ Ýhî]˜¶é¼3Ì›ÙÙHêøÆ›‡E±”&-"¯áfR(‘¼wT6“h'q”ÃÌÎtÄ_ºEô1òH„<’C^ÀÖ  8à,šàIƒv%¡NA0Û ç$Ç`Ä\ˆ{4F·-Æ€JÈtŒ!B$&?•ÜŒ˜DÕZÚI«5FA&–Qk¬u uµ,æë¢ F­1ŽÄ ÔšNy6°qÔ>7µ¦P8Œáj‡Ù»3*çÜñpù:©W*ú³Ðh…AŸ—Sîõ<'û~4ÌämU~Ú~^=P?z)ö!p¯@8=dîù¾ãDäd3Y§õfk1§Q£dÞ®äš@ÒÉiéÃ%8Äé#hh V!}DƒÜ˜Y>­“>æë³—> …ƒÁ.}L ‚Êùq¸|•4åö…Ÿøƒ²d&ÝÞú(K˜ÎŽ!-µ ¹ †ô…KÊîc9»ÛQ1é“qãPFËçØãŒÖ„kÃh-ÕüʤÃh-]¯æ;Çhæë³g´Öäì)ŒáŒ¦J'Q3šµ †/b´ëàiâõZÛéý\P{T( ÆP ‘8*ÛdA›çøÇã³òp›Ï^{@ rӗܱ¾âŸxÛI(+×€´ „‹>Ñ×¥1©çÛ=?ûV‹ÛPpú2åÜjSC1Ò`ø•s(óçåœh(žY,š¶õÑÙÉŠÓ¸ht Ý*9×5VÎM_Ÿ»œÓ( Æp9§ᢨDL9µðëiüsz'³q(£¥“ÌÒŒ6žpF#’ûèìúŠÓ¸ -]ÍhÄ1šùúìM¡p0æP9?—3Úìo/ÒÝÁÙ7yبÐÇÿdbBÑá`Èé»~i1aÂ’ˆ˜`,L9ée…˜`6—…˜ NL0{'ù¼Å„Bá`0†‹ Þw8*m.^¾þr›'JRü’NéÜ»L¶ºÁ‰=»fØ$#Ü…á¬R „ü°-@˜¹Ø€€œø!ܲ²¨¢¿œ(!ÅÞFWYÛ ?Mzú½8©)Ö RÛûÙz™½‹ÖqraepSÈ/”Õ DIŽÁ T°W\á¢ÁÞBð V'iý'èê°gÇœ`Ðw}Ž‚]¡p0Ã{˨äaáò›³0ýN ‘«×‰Ô@Ä™ã³^"Õoa6§ø`µXÎeþ§‘˜ü.E (ïV䋜áÝVAÉjœ$m»:’Ú¹<àéë³çÝÖn‹Ä#©­Ge€F™K¢Ò)#°ì×z‚«™[œ…)™%·¤­™ û? i÷´5›Û–§«.š”þéÕOlfᔼÛeO"SHgO Sû!Y’hú=MA5½dC²ó™ß#¡<+½J%²Æ…ê좑ÜdKÛ©÷0¹^xñHvöò~î[«äGKÖûÑrØ“o°›Yë$„1ªÇò×&•PWƒgQ%"2¡ìÊO@RPªÊÎDo'HÖÞTyLÉšm²%¤1ÒJ{!B@ÎS†—·ö}·€¹LM‚ÙK‘ŸOZtRÙ6Íô7.¦£Þû* ¿ ȽäDoç& •¬Ù( Ñ'­–÷•ÙV˜/4% £);DfØûä܇8Y¨¥,bawÙûôQ}âWä6¬/n-ëu“‚ãÛþþ„ËæO·£Á©‚1ùB_Ns¯ÔHåÊ]*"Ÿ‘ ¦%¨-qœXP3´?ÈÅ,*‚kÒÐ$O bjlÅ>­ÓÖÈ‚<Ü·ò /t´·Ò4¡>o#Ÿ¶ùÛ¡>Bý©¤è§D¶æS>!]K nDr8¢8?Xá »åˆÚÞ¾$Þ×®×iPÒ¸ÿ޲¦ ©æo(oÒp².üÏh=ø@öà5Bã'¢CÑFº€¨É-Á€}ñðÕÚ)¸„ûL8Ê£»ÑÇ¿<¾»?¾?\~•ß§Ûãáòî@¯Ç·¿}úpUÝͯ‡ÿþþêÝý·—··—üÿïêÅÿqøîÿ9ü÷¿]ÿã° JÌ›´iÁŽˆáºz"àPn~ÁPãw€J¾Sc<¡`Sz É”PoFµ–;(gj7R>ɸ—Ë”ŒPúŒ÷ LžpQÒÀgp3’Àœ7|¥ý½hÝ©V0›wûúp5n-¶ÕVοÝêÓm5³È1SÁÚŠ}GæòöÃÍíAï°Ú{rwÿUѳ#œ­uルDŒìÚÖ›ÂSd¼NBÌ5ÐM V²u@¸µÈ€ÛŽOn¦£ÁÓ¿¿ûýòú·ã·* ðLÒ€ŠÙ´…»ÜB9ì¼:( šòyÉ„È+[€ŽæHß!¤±ëQ…ôA1œBLA:ˆ¦‘à ¸ˆÈ#Á +C1–^è¸ôízuF©ê_>ŒêæíhXÞÝÜÞŽ:éðëÍí]Þ¾?¼?¾.o5™ýk)³Œ`îpt Á” Ìï¯#4ѹ> ¢!ö¦=„^*§P!þ˜Ìа(ï%ÅVS$¶òœîU;q©…¶Jîo!´ˆ*Ü ”t•@YÓô  DÁòÔZQ7×ÇÑFД˜EO °Úr p9bDª?]k²ïïo¯Þ~º‡â“ËL$ÆmôaýRûÀ0Œ M"œWÑ °ÀU®FèÄËãš/ÀÑá»z‡ÿÅJ¥OwÇÃíñ??]ÝïL%ËYB E§ 'ˆÜJñ¾7fw·Êýƒ¾˜u ·×“ý-E1¹Í¾ò½Ê« G]ý`OêˆÝ† 9Àm‘Í8~àä="Â’GߟtЍ£’~üéåãÙªÓäÛ†~d[ÍF ç­ì¹ºÐJÚ®ëhË…Ž°ôQxÄÕ¹kmB¿jm_è}UVÚ³ãýc%+Ÿ\Þ_ž~7¾óøå“§¿<úéé£_^=}öÃÓ¯/†ïðò&TxóÏóÆ— \¾{¦]· Õ'ƒÑ%÷.Ö×Òmô½èF\ärš øŒ•ªr«k†ýv 턱<æ‡9rnqŽ.}Qe¡p H+H®½C6>]_ýúGP?%µ°®¤ðóâJ{ 3ÊTPI8ú»ò]0½æýÓ—`]'‘°° ëP¾Î(yùë_®†ãáøÝ¢†iw‹Ó)k%û€¹€8âBÝX¡›r>bÈAm% Ÿ‚"®9Š2­­$ó¼)û0›túã›.WZ)¿¬ÄlØaEˆyͼ-Qu"‘âÎî ]I»OÑ!Lj½§8uú-©ÓOqzï}€)v‹RSŠD¼)¦" mÈ–²„g‰ íµ°1î»ãpÔ!±Ã¿üû¿Æ?·Zs~½Õâ{ ¶Å>ˆ¨Žá] Ãñ·Ëááv0׿De4MTEÓ0GYäl Ùà$²ž’ÜÚwŽŠA¤0DB“")s¥ZÉ­Û)ô×Û› ú?‰"n/Ìýàe0âÛXCb7U·Mܼý?ã?¿EQn!ÁËÝBÔw¨n¡žØÿbsÂ)æÂs ½üõ¥Þµ'î!æÃ1ÏÿE¹‡ô-’¿Ó€ë«gá’°€Ñîî!Ü/°î!p-?ß»ØÝWXë/Š#i=ýÏ•”E‹ÎoÅ”µs8÷éb„h¡:ˆK¡?«,ˆ;~¨tE`·è°ó…JlC@x…¹Z>^ùªbÉ*"Ëç:d˜µß*ÿØ—=>ùôáÃÆØ_aè+û˜û%]æ‰-8I;®Y‘4TKnp»RV}0WÔïz³3 s®5¡8IZP-LGHä0Þ® †øÊ¤ú««Ûè_ôML™§êSƒ>ޝ¼þŸ?$§%x¶f !ï¤á oB@æ!‹ú?}lÐ¥šÀü;ùwúÍ úUáÚû‡oÒˆ€±n$´îSÆý¶Ò†ëŠ*ÚÓW}WYïe¨$Ù¡îBƒ&5©±Ê7SÕ² ÜF–î;{ê×ĆÚ*œq‘Û²›öÑ#d,uÈtå½~¶$Ê~ 2¨O1ð6Àµê ÚØJî-±ìØêçîAj‹7¹J6¬nE,¼ /Ðä²Lü Ãr(aÄq¯é rLà› 5ß³Ä÷ˆa„y?£Ùüâø_ëìæ®ß5Áš´›×ƒÎðØ_h8Cá»é|TbØvЙ=ZæXé™ÑÑãß?]ÿu-1ízCJ», £¨Ú|ÚrŠ*ÚµŠ ö µWOÜÕוTPv뫘 ö'íye)Ôº{ÊIÒuí©¹Ï³Q¸|‰~ÈqK©«×+é¹3¼…NwvÙEa$Zë8ú úOtEúo»d?ÃÊý‡hÜ´ÿû›>jMØöƒ]<çíÇ"÷ûoÿ7·+crmpËöd`T¬ Û~ÀPçk«´ÍÃpÿó›wkmULMnØ~¸Î=Ö„l?Ì".+Ð#IÔ§—ȵ1¨ü)’»xvÆ\_ýç§ã‹Ëë*TÚh[ nÿŽ+ÃÈm×yªûX 6Š®åÈLؘ«VÛºQf$°à%¤äÚå80e?/³T°IYåÄb6ٹ˴¦Ä}xÚµã·ï~?¾û룩*Ô]ÛÀ{ñ%™£ ÙøI¤—·W÷®®ý«øksGÃUê›v…‡¿© LQ./´@ǘ?àõˆáµã¹ ßPðÊia _¿Þ|º†y•…(J3^%’È„ÜÊ+% ŽLˆÈdAû€.+µPÅüÛýïo K/0’:†ÐÀR!}BŸõ"}UTÔJj™æÜM>IÂÊW§ÿ2ZÃêþÑ*.ò"Õ0}ãÅӻشÈõ¸™‰ú`^èþ)­±Â°*`e¾Hl¸-ú?Ôìë ›v_?C·«›1\Vh¤ÎžBÆÛUu¯ÔŠô ©¬L¥K ¿3·h:_ ×Ði•\PYÈk;BEöÚ.æP'M2ÐÝÝåoÇ Ñj£)¾õaa¸|{”%[PkC©QìV!L¬„üœdý²” -·ŒÛý ÎïKÐG]dî¼ü¨#sî\ÍñBó“©Fö¾vœ ØÞç;9 #wçGu† ƒ¡XèA¬¤s «˜êxkíè …|¸º»»ºþíá)½âStë»áSEHÈ­q‚ø5K@G¾ãHáx´ó)×S~Lu ™m„üš H>bÅa×’1+6ÜeÃnÒàëìUÙ5ö*L7E4óW%•HKHç'íóƒI¨WßrÓj§qNf§`*P2­×å”ujE“@½FMjÂÁ6qF{šU´igѯè½EäW«î?ØNø =’bjš ¦GzY¹—Òæ¡{‹sÛbT?Ó™Ýìb¹£{t£Ùö©ÝÖß–[©»ÏÕJ½Í…÷5ÌC™¹÷ª¬¸ùËà*v¸c’ìoGx6ܼ½¦Oð–ÜÕP´Ù2ûŠðPÒP>A®‘òåý»ß®Z³Gœº¿ÓÐúߤó÷Üþ·ä\¸ç²ñÞ×9ÿÓsjçøîª‹Ö…=M5.@ÓÌ|óù¾¡$"W³¤ž0ó{\Šj²h&nî“•(vÿ:ºžHöˆ22]þ¸ì’_Éd¯OÞó üJŒM¾›žp·ó#¹hõhëý<þêšúDž$À„ôñqß0©ÑÓ²EúàR ñÓšO-•A¬ }Ç/(a£òöô§Ô4Ó,¨xÀ¦õ•4öYÊ Ú áþÚBz©¢™˜¹h|oV û̦Ÿ¾J¦¿møé›ùÓ6±Ï|Z”€?[I `ï’û,!Q›ö½e‘[+¶åa6À€ñ%ú>-Íf/Üø´l6¾í Mw rÈHÄ–0L"êΊ‘”ƒ-WA/I’—“h•‹¸-«·©.±î¥ØRܳOl=™ÈÓô•F¿£]_3]b xØUí¼ñ$輦'lÛ#µhxhƒ+R|jܳm*¿H”7 Y*%˜È ÞU²kðÅ\¯ZBòN'KÈ…)žø]1-î‰w“f«Þ1-'Êծߘ’t×ßx8E.sæíß»™ì©7°/t'íßtÓßþ"2›h̬cü"kj˜‘ΪÏð0Ù*'¹Ø¼ɃŃÂ[vÿŠ7œ–ÐØfŽ–ÝàìÆ7 ¡µ›%[Á/О¦ùCÊ3­¯ÊbÚCŠ: îœQ\¦ µÚ(Ĺ:£ æ¼T"ʬåñàéþúÖrÏfk¹ï¸÷ßfã{†T>ýTddYå´`dåÛÓG¶AÜð~\9ïüãÀ¯ˆXyC¡s†Bß!Ò7ÒÈý$f‹ßµ^ÌϤ¢p°¦üÎÒ DFf¥ïxHy&²*iú] `æü†n„VŸS`ߎÿÿ+¿x‘ðù™ãž+0H½…¬öS‚£PÏ[iÀb ,cÕ @¤ AŽs#•ˆÁcGóAº"ÑF/–<Ìtâ_ë²< rλh©À–ÞQ®ôT¶|C-‘ødùs œ¼Dxö‹~F~%'9İ÷¬°òØ£/Ü Ÿwq'Š’Ä,hœ°ªyµù ú¶TͰ†YxöG…Œ‡ ¥u56”-ˆâs¤UìGZ€=ŽdkvD™ÇH G:žþÊ‘_GFôU¢_øºò¼ê¦N !2‰Íj\#qVtêÆŒíþ‰åž˜zËÃjgLÿ¨Çäžþ-µ–Ñ@D+Ü ¦ÍSCßÉÒ³¡®É}p<”‘³…ßwnúµ¡oLÏD(KÔ|a{³Ü h‰˜þv»Ì°F¶!S#Eðo½£M´¯û*¿JÀ—€†ÓŒo軄ñ¹›/ĈIwïç”pæ@‚hÒF°Ø^씀œÛ¡œì8Ÿþ¢þ0=]`>·Á@m:ÝÅs"†ßÈ,ÊÐ"§X(ue˜Ö²³Ç1¢iǽ1ûƲ¢Ïs;Äþù`ë‰úO@6¦õA®öšêØ}$lëFV40ød²WpÒ2jAp2V+W1jqîU™M¢a6϶qüõ7ï6¾lÐs‹ŒŸ×Â˳‡¿b°Pt­Ÿ~‚ðêçǓ┫Íd{‚82å -…¥C«4èÁd=#ö ªXzS1iË ñ¥'ì9ò¯{Özº„Ò¦?Ì©`qîHǬ±ßEÀ&ìd&A¾?L kÓ×hÒû¶8÷œôgüPl+³å½ ƒ±•&ôÑ £’;„…ˇ‰ùXÇ¥PgYáSp  ”Žò ´ÑõX­ÀȆ6MµêŒýÕd#ÉZ²‘ÍL65‰Îl ƒ1Œlh3ê:•ÙHÐÕAí˜ ò™ë/;oÑQ®FíU…Ìý‰Ú!YzÈÂI rûE‚lk„7G'¦¿À…³_™F¢f1¤³è݇àÕEd|//O›í¬=Œ$e:zy/,úùŠÂ¯šôWÌû ,p3 º]@i<:Ã/œ‘bQ¿s: §\2Rb°º°»€M6 ­°ƒ‘§¨þC/Ðeõmè”9ôå¡®gâ°VÿƒÐ9…£TÿéC¢&ïyé?ƒÂÁ` לõ8*1ýgùô«þûçМtÓß>^ÍJýÇúnúœã¾ê¿ýôë;ø…§HXŸtœ}NýÇIlC{g¯ÿ”€Œ<#å@£Ÿ7+ÿÒM…ràKÊ¡mZø…'e ÚO+eA /±;KcÎŽ\‹JY4´ e[†:gǺÐ9ÛÕHÙV¬vÎêšFÊš¯Ï^Ê*c¸”•ÃQÉÝãpùúµþUÔ¦%k$‚œa<ú(®‹à ·BØ¿ðªGá PS”ËyÉì_Äã¾^[m”ÀÏ|™ég(X §ÑœÓ½ â¡!A s9Zøòïõ€dˆPöô€Äïr}N=0¢]øýôÈÔ—’ƒ‡¨úêË3õÕÓàXÎrX¯¾ÌÕÆuêËd„ îë³W_ …ƒÁª¾ÈøŽÊÙ .ÿ[}}Ö“iÚvú RySwÇÐÑ‘+,¨&hâ­"ØVùP‘*ð]czå.;öT rA¾:±îQ—âÓ†ž•îÁ¤…’ƒ ¨ϧö¢Bœ4x‚%$La´Bˆ²>AD +ħ¯Ï]ˆkc¸gaÒÄŒJLˆÛg_…øi„8•ö/¸ ùUˆŸ³§2k‰OzîB\K‰ÁTˆç3¶q!În‰&f7‡’<|gfBw~öÙ%í4/ÚÛƒÉK´cž½hgÄh"¦½aˆhçt¸ŽE»S¨æGU"Åâ’›éúÆýK¤Œÿn½ÿîèüßÒ¬u Á—«a2ý´üŽ÷¿ß¼Bj0Cï2Œ$» Óƒ¼XËÏÛHd5®âÐS­·)}#ͱœ$Ì..‚~‰ÆeŽ¥f6ØbŽÍ°§šYððË?çÆž ‹ƒAΞ³#†Øä–£å»BÓ}Ph:‘mâ]9Œ#,õÆØÃ'ŠÔ”‰^Q$fÜaÿ"×ã3Žçí°À”ÅbÎoþ73m×Gön‚¼h°E%&§ÄŠý•˜Í¯=Ð!v»$ôû>Œ3»eŽ’5ƒ-˜6à(T Ú 'xê=éEàæ+£ŠFôlvH¯Ð½Óf€³× ‹ƒAª ÔÞùÚ`Æ&v2êíkô«JH¨„SŸ¡h#©Ù¸°ÆÙœŒhÓO”Å‚s噃ÊÓ(Ú„ õÌÖîËt„Ám×Ã+•€SdÐ$õ¨ì­¬C‹3qTÎ/=ŠÊYÌñ“…úGÁƒø ÐÑ‚Äe¯ ÄE¢H\G†Ä+ q­CJcHi )J-†”ÆÒRCJcHi )!e1` n‹!e1¤,†”ŲRCÊ@ý†R£ÔGcDM%êa!n¢GÖ9à© ~·%||ˆÞx;ä8Aq …™¸Ú~£Œ±(NÕ?W&PÚϱ¨Â„K1°õ_BÔI£p0÷®opTꞇë'–áÖ…V“³Ì¬’çI“ JýÙ…\SlýµA{¾Õï´fÁ­p§J½æßœÎÿMz÷ßmßÎÿ=e€ëÿÍüßt‡ £‹Ôß‚s\"ð^•oaMC¡¬ó-èÄí¼uœèfE°3›1ܦ¨#m›>4wº ßEI£€\lßA¦Œè«„`ÔDœÐ˜îÍ6qfýRæÐ¢wŸÎ>yÇF†„ÓÔdŸ®¯~ý#Y»# Èϰæu\AÌò¯‚0à.îÖÒYFoãMøh›ÌâƒFøˆ¦8ÜæÊš6 wÉckºÅlƒrV´ZbE?Û!%Aúr’,E’É’"™2ªDÿ¦ÙÏÀÚ­Ÿ+}›‚Ï•l ’ÉP_SüðÍÁY+kŠ‚ €æ«`j1>I§·[zøŽm5øq¦fblùuáë§«šèÚË!š>C”pÜIŸö]²(`)2i£–؇UÕÁ9RéìÁçlBñ¹!êAÒÁg†¨#ý¹AÄ?£ŠCÔŠ3‚3]ÔQi0'#LþW„¥©œú*ƒƒ¬tV¨9} õϵY©ý.ë²úg`#¨Óîܲ …ƒÁXŒJ}eB68*‰m«¯_Ÿÿ´]£-Qý®Ž]è³rpº òù+§A:¢–ÝÊà6+íM]fÚ.™–™–ñ…þ|ÿØŒöP~æx… n¸-õ¯†ú6`Ôsœ™Å³ ,EpUØÅá܆÷ŒC\ÑMßÄ'ÖizÒ›¿IlOˈ™á¦ô3"¦)IþÜS`ún·†æ khÞsšš‹£Ÿh{Ðm1•4h/”¤S—4 óü8|º‹xS)ŸT­Ã+0tÀµÿ8iEcƒú»†pôéìu2ж»‘QÚ¢Øì˜‹ƒL êfr‚xÙ•™Úcñ¸Šë)ªz4ˆ ã;®œo?taW­|Rö}x{¼ucú^¼wpA#Æh~³Ìï'HËJ —9ÔCNâˆÀðŸ¹÷5)OXëà*›m=iñ¸¨°GmddQžåï‘¢ò,/#/ùºÖ`ˆüB’d ¤K©0á4pëñ0ìªl`D„ô“i<Äz»–F–õÉo ª—‚qJ›R*Ǽzóâ±{FâÊ'?“ x¾ëe†"”"ÏÀð¤`JVò!¯ïïWׇ›·ÿçøîþpùñãp5ëhW~ãcïù÷¯^럿üéIˆˆ³W?‹z ™> "Ì‹>eèSŽ>èS¨¢ËÈIUY*AZ•nztww¼½¤xb¥ª¥z7¨ZHš[—ùÃÆóžù–4íEÌJ¹”õðëåÕp„¾¨”ëÚ‰ˆ Ùä÷)fGÈ>zróÿ^]¿?¾=.o¥”iŠtO±”©7è–…Yøð¶…µY_dRBÊþÇå;d†ì±ýÇŸ^>Vª¼mˆª!tŒk4œy+{®“FÚ®ëhË…I¹ôâ¤6U‚ª´q¸6Þ‹€©e?Òγãý_> ÓËûËÃÓïÆW¿|òô—G?=}ôË«§Ï~xúâõÅðHÝÐ9 A>7©ˆA‚¼Pì‰%ÂHWm›2gè8Rk~xùë_FQu8~ç“>ô‚âöÔ‘Eì®0;—±öYÕÓ*H:¾{r¼_/HrôÞ"H¡ ÛiYˆ íá¡u“ EâÎ6CÐøÕFBæ(cV,@ù¥2p÷Š"z*å^ÈP»¬ ²n÷rëbtUk!D®aØÂdi=«?Ô"x~óXyÚ+¨‡ïiD#{ºÓª0ÑýŽ›èÚ‡õryƒÅd&8*”]jÆä¡ü蜠Ƈ™8#öÐ¥Wâ¢Dâ„bI%ˆßîÉ—)žßß8Gs…KL5/ÙSJê—†1 ÷ob¶æ c¶ÿºzÿûaf¹}ù 3ÿò×ÿV8^ÉVûú€àöí°"Œ›ê¼), !¸½O-˜õsr†e0ø6~9å¥bÖ.߇eÖ˜3Ì„PþÛߎ÷Ïõ@Ä7ÕùR™Z/zS#ù’›˜zgK[¯cê}Ã5ØòÎZE¾½¹ޗׇë›dˆ‚Cþý×i/nîW¿Ø—øwjèõ`¤¿o8ƒÂøèîúl¿)NÏ]s$°÷íòú}ŠÑ$S!ŒVÆ{køIá(çÇsgæ—·+yªñM¼¼«c]-ce˜»‰•Ëν›Xy¿)NËÊÅðb+:ë}e×UôýèúýJ~Eª·ðkÁ}•ëÁÜèunÐñpÖ àÄ/ïÝ©|ðGïÞïî^¾\¹EM‘—¿Ø_½³ ¬Û0è#‚&ܰàrÛ4Bfç̃º÷S˜mÜÞ%5²ôÚ ‘XÆœoÔGð†¨M;ü?‡)Hå]ÛáJ±¢/kß"’èC9<àëg‚éµ»n™âø÷Çw÷Ç÷‡Ëûã0üéðþêbŒËÛ?þÛ`nÂnn—··—ü·«kÈõ¥ùìE7é ‹¹è†A’û!•¥ÆóªËu¤‡©§>n'Tþ©É¥)è)Š‹Ú[NìºYÝAoáUeˆq…×£‡Ë»Ï^ö沊¿Ýÿ~<ü~y÷ûáþÓÇ‹Vþ‘¬£)°…¤‡¸‰ ±<"Íü9IR»ªö!Å_—÷:Ì iP ‚ÿ¦~ÿJ„Ÿ‘;xmý6_§äŒë_÷ø4{Œp)²ÄRI³zçge"rwÿUÝ|VNGغ˜ÀŒtò§ÏL») ¤ŽÃîz¯=–…Ç­Îõ»ß/¯;°*.¬§›=­ÿµ„e9ñpy{õöÓýö§û»«÷G-vï†Ë»»Ãœ‡_pŽ׈!1¤(’!SHÎD¶ad ¦M’Ã~¹9qBÖMròdì§è‘ D E;¼—„ŽìÀ˜ŽžàX¦AÙ Qª¼iñ´e7I §-º?OA’ÌÜm$;Š*ÅXYªVŸªJ³%òŒ ‚‰q±RYˆúÛ1éS{¾¤ö "¤àK{=!^ÎFõ޾R1ƒ)" ù𦰰ò-BV…¥Ðg‹hÒFئ ÖšÚ-‡æêÈú¨Jƒ”{©ªÀ±°J+PòHàMÈmu-{´óBI=Râ1µ*w®uŸèµPÞÄ`ªÂ{~`q´kèg«=AÂm`¡=`˜4àÂþ Õ½“­y˜èñÖ<¬¥AkÑ© Ï+[ó°¶YßšÇtKÜ×çÞšG£p0C¯e³®á8*çêÈáòõ3õ£T%d]'ÐË*Õ_ÁïÔãnw»NÛ õ¶)ÔÛÊâ^ …z½’ÑŽ7 ÙÝ úõƒü®7ë•×nà×ÓàOËôÉæí8Xu)ª ¡L¿¶…º vC6L߉¹ë±¢TÉ*˜¾cÍj¦wm{§¯Ïžé;Ó%Ma gzÉ[•ÓÛöB¦¯7 ¸ôü\\/©ý4´UüãòÚQ%}zt¯)ì­QÞÎÆ•¿ððt>òMÆáã©Gžé#<˜•.  ƒ“Ó “d$,”jÅ´@Žv%´B˜Hw©g²Õžì*„‰ìÖw©çN˜˜¯Ï^˜(c¸0é¥ÄQ‰ ÷윅I߲鯼øÇ&ãJW ƒ“³&ŠZCœ¨0I·½N “¾6´&¼a¡:Õ,W Þh»g0V˜L_Ÿ½0Q( ÆPa›H˜8TνàÂå7¾A:ó±ÜЧ1 ¶Àxš6J†v¨éNÖyûz´²‚îºk­i CȈÐ@[žiÌ›pÆà+!ºv&º 3Õr+ªàALo„ÅÂn…Šp&Ë¡ ÁLôéÿ# J-“¥º¤Åý‡¢ lŠk¤†ªYíÑQÛÐ ©AÄz©Ñ:©a¾>w©¡Q8ŒáR£§G¥œTS¼|ýl2A6Ê{æ‹п|É ¸=oŒøN3ƈnêÉ…4;Ý7AsîZc$°™6#}Œý>do<<‚ž²n•RvP†§±˜è›1EË1•é·ºë-w µ¸1Å5†83˜mÐ…oË*‹»×ù½Ö¢vq†X9AÅ­b^ÆÐãŽm—–'ÐT[êXHf¨ýŽzy2Êó€7ñ0‡Ü¹ŠÂ™„wŽÂÇÿD&"º§yº—õƒóÜé^#v0xDé^ÌþxLåëWÕÚÓ82í@@(8¿”x'|ó?ä*t2&O9mÓN„Yh÷Yë·ûd;1FÞôÌ›”Þê]óüqs±·ÁÚüë …œ’O¯,À¶+Ò©I¶3¹XC׃!ã´­ Ïž”Ù3]S‘Š'h³>{¦?LÚvúú쥎Bá`0†KªUh•±Ô± ”:Ñy/ð‚4™ü‰ÒÊ—*ž.;¬®ãé=¹ÓÚ/ ä<Œ¼–;Õþf»w±qÔX¬épöd<‡v¤­`OFÙJöìšÆ±§ùúìÙS¡p0ÃÙ“µGål#‡Ëwì{`°«:–PÀ¸0€µàPQ•YMÔ¥i,»mO`7SëýÙž“!x“0²y˜ÝÑŠ‹%‚Óµ9]CçpüvÔ¹qŽBá`0†sŽà]•ñòƒL.4×3­³V¹×שuzÑ’Ä‹6[/,šuÓ‚m~˜5Hå¼jägp^I nØX@“.otϤƒ)(!!VÄ’òEB§¾s;º3¼øvQH¦jù’¸±¯<„ÖZ½B$ÔªèCµÊ+|LãàëÕª»u6}}öÂA¡p0Ã…CæPBTÆË?Sá°Ä‰3»öÓ‹–ã¦B]Õ°Ó{„xÐìŸaª ¸ŒxHîVô3rÙÅj>oÏ µafÜ3Ø‘„Ñ¢ª3ùä"Ö™ûÔ ¢=ë¸g0#šØaºä8 pö¢Iaq0HÃESO}ë<Âflñ»àõZ7`þ½Òë·|ð^ãõËû-¿,x*edÞšO\'Ä‘3 òfq6ŒÈ¯+!4 ü„ˆCùŠ,/ø,VÞ,ì Û=ÜŸÝdrô=0ׂ=V¾¸}Šéjn"‹Þ Å”‚îòàôõÙK[…ÂÁ`,!mÃû>3*a°Ñ,c°QC2˜‰Ïͤx +ƒ2VFÛPüô3*Šðô#+\#mÃן~Ü%·éës'zÂÁ` %ú¶‘G%FôV³l z É`&ÞI8¶ ¼lè„°ððÒWœ’[BšÕtâ®5M_Ÿ?˜;ª c8¶ÃQ‰9Ÿ]ð:0EfãÊ‘¨e€Ü>,wpëEf»Èa=V—]”„²«¯ˆ´¤_/»\vÐôõÙÓ¤Bá`0†Ó$ G%&»lvÐg ÇUòQ­v0‹C‰ñŸ0Ú¢í0ÔJÈF[h|X¡•5 ΗŒÖŸÔÞZ¾ddm¯N{é _š¯Ïž/ ƒ1œ/9§iTRdùZ—h¨ã„ô¬là„ûÐ|WˆpOå‚û©e™Ý\½ŸÐmé:ßæàÝ×Aªq1˜¥cÒ &Z,&çÃ3wÒ•mIœÈ™7} DX0ªÀ%a¿›É·ä$o!ŸV¦ {B¹œ¯&¦i{0¤¼—•Êa,#yxß|Â¥5’‡ëZ(ë$Ë`š¾>{ÉÃMY&…1\ògz&P/˜ à ÈMIénú¹Oð§PÄ›¨"ÖH€1$CàB†Î* \µB¬&pâr€¦¯ÏžÀ…‰xµ¦r)Fà}£1yI$ «Žë ’ÁL¼— ›8´aš†äM´T¬¦â褅÷CΑN ƒ1œNÆÿ‡££“„ÿ}(H3ñ.’Pk¬BéWWáônÛ~mÎoG\öÃôõùй÷Ô"•L ¡tŒá¨Ä%¼?]G(SAP51J(kÏ·z,îM„"I¸ºgK'úÕ„âê´N_Ÿ=¡(c8¡È¦ÁQ‰Jx»’PL†˜š%”Šœ­$‰Ó¿äáá‘×DLqÓu„âÂhm¢4깊Bá`0– ”¶ÃQ‰Êa4 É`&F ¥¢¾b+SîÛ>tßJQRëÝ·d=É/Ã}+'÷mŸrßöŒã¨ÄeÐS?¹VljQB‰ý…%„ÒóDì©Ó ¥„Ò·«cOdŽ=õx»†s#…ÂÁ` %”®iŽJŒPÚ=Eêc˜š%”t‡$¡t Á38º†‡G:!×JgBåëÅ„¦¯ÏP4 ƒ±¡´G%F(;\× fb”PÒB2„Òṕã9-<ÓùZBéW_!.B1}}þ„ÒT‚_ T£#¹¡(H31J(]¡xQl"žéÚ ‡ò(H‘¸Ç¡8‡òôõÙ 1WÛÆpB¡ ÅQ‰Šu(o"iˆÜ)ÖÓÉ B¡wÌvT„gº¶FõPºÚ1Kcvúúì E¡p0KJ˜‡9£!ºƒcVC2˜‰QB©ðÌv´Ã=³#á™®«8õt´_홥Î3;}}þ„Ò‹€Ü3ÛÅ!*€ÊxùAÒ zݨ:¼âºP:íœäÇ­-:ÕÎSÿë,'rÁƒòÖE—bî %"ËŸ²& ™£MfœqðÛÞüý§ùÓÁìÎâÚ—¶áêæ\šM¯rp”²s±1›0ª‹E`Ü®¸|0L aZõè4Z"4Zûuja³ë©ün•NÔ6¦’€~ûs”Ãb2¸G¤ár¸u¦hˆMîp.Èá4™ûõC§KW±¬)ºúóa¾ê…\±¦…ŸF“ªIºö¾£FÜ`ð„’vEœ¦k §éZzxú ÷{×ÒÕqêâ4Ó×gO× …ƒÁX‚®e£3DmœæÌ“bõj³8”ׯ‚°’¤óM±µY±Áƒx“ñV1Áƒ¸®«uÍâØcàü †”ÆÒRŠd=P‘µ‰<¢ii¤D&ÊõME4·ëÖ'ÊQ¤›¾>{)1õ/TÃ¥„lY•Y¾>ˆ}-õeçú2J}éýÌvcr³ÆG a­VÃ}˜”Ó“uY~ÌÐ¥—”³¥(h§eŒ1Î呪£;<¢<+W €AÇ“Á¶c]˜ŽuÓ˜gO ±ƒÁc‚8:wVÃ/‰8Ú‰8:\$ÖØÙL&¨ƒ‡Õ÷û•Y®ÆÎæ —øèõË~y2®óþ;ÊH{xõÝÝå“ãÝ»q…ÿûêþ÷ñWo^ø&Fxs¿úáÑóçß¿xm ';ãô¬…¯µ Þ›[bÁ²Z ~¸7WTmDùYãÖõ`[Pg»a6PNÍ N©-[°«y”Ø<Ä`Î~;ŠNõû_Š›`m&ˆ×ðóL²‹ÚÏÍL$ÌRèÁJÇ;¥pt{-Ä*êõ[«6¦ ÁW|Ct2Ü…ÕžÑfWgÐÏh¼ŽeoqB޼ºz||sýÞ$î$G Ë®J!$ô½zÓ%@Ô–0¥j„µ'ÕŸO2KÚO ''`ì°ß†­euÕBïÛå›·juyŠ;»¨RsmúæñpùéîA²=O#fëI#@À&ñ)÷<ÌnŸ™%IN熸<[/•xÜÛ†·¯;Þ>\Þ¿ûýˆx#‹“ ÕÅÞ‰‹á®oHZíÄ®² I«™%­•o—ûI·…ÂCè9f­,HPZŠð]¡ÝZš£¹vs/7Š]¾¯=´]ì‚8Éã0dÇÍ3 ÄV:Ú~xJªÌõíüÅÏ“ë‹.¦úPýý¯nè!—S>Ïå»öÍ—w:È!ŸéòNfIÿD‰ý +÷³Ù×p¯gv¸’3¹ ƒ\¼ùl÷² ’*/è´rßÜ “,©ÔÎýþ×=¯k>¼[t®ôÕ— c[–Øþ#¶–ýwrýMQ*VIbzŠ"¹iв|¦’)‚rHÿà»ÚÓ„ÀàºOE–^Ü\ÿÛÛ››áxy}¸¼}{5}*õþÿõëÿï›ÃÝýåýñÃñ#(vFŠ„.èG¡ “} ¾ƒB:r°„=ô‰Ü•AÞë%2Ôe}E:+zªBBjs3´ã­–´rlí© š›#½ C•mX’;¡ž©æNÞC¬Ã­F²p ØÖà–$-Û@ oô[Ÿy¬p8\Ý.‡ÿºüãîðëåpçAR7UuH¾±bä·O—·ÈQqÙUù—P$ßç_8ü¾û‡íAéþa{ÿÀûw‹çöAãñ¡÷‰6ˆQ}‹H­RA[8"£<¤íaFVÛf_rË‘qé&8x€ FèÕ»Ë=³-ö;EœÔ)Þ!"½M.ê-}»[Ž.¢ß³žÈ–£KrA˜p«ó&‘P/º˜ŒSÐGo¥ 2j/¢y÷ûñÝ_G¿úíúòþæöåÛÿs|·–x£yK¶u½Çnqaí{»] LÿðDD[QHE?ÞÞ¼;¾ÿt»Òq&vÍt@vv×µa´vg#-•ižÓÒÃÑÍŸ?] ÷W+oÊŠnßëOõׯ—Wvúê¼ìúö™@ŽE{OÁNîçû!ŠR Y…þ9mã\]ÿv¸¾¹þ·V¶.¯ßë'7±ÚzüòÉÓ_ýôôÑ/¯ž>ûáé‹×-˜zŔ尯ïYV­•¸4ÑŒ„³ }Þ\øi3ÆlØÌ„j¢ÁŒ»[áwÎñV5’Ë Ý\ïúį)mÍÅêvsºo‚)mm¾>{:P( Ætõär¨DJ[3Û) 7¡4•æyß|-èž(è®ûþ Ýõ(ϯî¼>Às£Ó¸,¸B³`xÇg)º ãs_ÓC^šæ›ëX„:1_Ÿ=‹(c8‹´½H£’ ËÿÚkí¡[—$ÑMïG]7!öŒ±°GŃ!ú=Z`:âû¯ÜOðv,QQ¿ëÂÎŒýº6zFðv鬰 x]+Üéë³¼ …ƒÁ.x%íÓ¨Œ¯} ^ÛÉyEÛª/¥÷[0ØÆnÑzƒò=Ø^•2Md`𰦩1Md…iâÚÀN_Ÿ=‡ÈÉ4‘)ÓDö-ŽJìg»-FD¹¦‘³†d0ct²º9 ² 3§-˜÷ 0ú}˜BbÏÍú®¶•° éÅêÆfL̰‰/¢±™Bá`0vQ›´¦]Ÿ8þöŒ1ÓÚÜC°Ã-Yóõ;º#¦Ó9-Âcã>=W©d—ÃÏvƒzF9|s‹ƒª‘NlÇÆÂæŠ’¹ᙯ² ¼Onî½ vÍéë ¿W­3lÙaÖpžÖtÛ`¡ö$ùà ¢{ýHÈÝ)3…¿Ø°W¥Y,ñ0¢Ïi|º|û]v‘lgI'á¨èæÏ77ƒùD åá6] ¿ÚvÒB7ÄF\óa½ Öºé_,SÜú¬]áX"JX¨ÆÐ €e\…ô×fvˆ¢Èÿy¤'ì.Kì]Y¨级z/ ü¨):4ÿ‚‡Ö”Ð#z9ÃÈ ¼ñ™4a’#þ¤Mt4Hl)'ìz`È{¶w 9dþt0,Œ ÖĦÖß®çœ'™ šßZŽH{`Љ¤>3ýê™A±Õ?¿Ël¸HO¨ßÞ^^¿ûÝH˜^›,“HDÝŨYºh²¼ñè90JRPŽoRâ;£££ÆøÐ•q‚íIÅa¬g‰PJϤß5+ýÄF)±–^ìÒ’µ‡©=ä4æ¹ ±ƒÁ#naJפ˜…níj¢åëgÚ¸d&b¢è]b¾™é`¬±H¦°‰##úŒ¡3@­z ìÀ@p‚$©mÓº˜V@\ãS5XÕe_`À¥'OØ‘Ë@Œ-` žF oÁKM¸þÊÆRÓgAj hËMÇPàêr€hŒx³Wüý ÜÆþíbå 4%¹XòR…‡ÑLre:;½ÁǘØspPì¬çªp°0©¡60{]®·“T«Gb =íDN­ð†œdÎíQóµh‚°jÞG¹„‚ô bðE+éP\©• f!å¬'²Â§Í ŽŸVÃÒŠIø`‰b²"á^¾H$¨PÒBqV|rçïezt§óqÚgÃÍÛËaÚ´¯³=>ÇÆêÿËg  žˆ¼€‡œ… ÚAÙcLËÁl3ÎLm×|fêUDI¥yÄMˆaëd†=`Xo¾íÓõÕ¯ülÁX0:|ƒ§œ%È!I%W&‹þ¦Âlü´mdjãrÙ¥PCtÖ¼§¼o!Kò¾ eâh¤œN>¼™‰µBƒ¯<âÑ‹Ú#^‚1G¼€ ø"ÌÞcîL+(='H£ñÇã¶ 5]ÝÇc"aëU/ïPGˆmIK)üPg m¿ËêìS+Ã2ç:etôhö%$ÎiÜ•1Ž• À*Äa&5ÇXä ³¯™p¸»X>ÒØ Óϱ'=»=ów²þ€”j+H›¬4ìˆØê­!7[ÄË‚‡ãà=ç öŒFx¦2€7rZˆh/``ü½m§¿Fôc¯ô­u>hª :ÚEmnÑ ½þ ¢ÁPnPf,àôÅNkc ,i?ŽÕL˜T¨,Výf‰?OÀâS¶ ìO”Áì5qÎöš^GÆpòÖwÂóûj{Îî~îwÄf ~Of2osMo\–¼µ³™ºÌé”˾I°ì<šÍŠÛ•0»8kØ*‰³2€£„Ï‚¶þá@ÖÎ9«C0jR·FP˜|§÷wý¡q¬MÃe k‚$CâÂ.åG qt9'n>)…Ú å}hp;TÆ86G ®q޽ÇØH¾îÔÒÆü•(,ç̾­Á# túË ‘ö@Ã{N7G ©uò#h0”Û0ç|$ ‡>©›Šæo¤¿°#¹™6œÜúÎëdv?÷;2Gð;úÜG QΜ…™úõ´ÁnñKùŸû4*á³ ­‚#±sÎüdLéÁXÎØ&¬¾¯Ç"è-’ñÜm Ä7ÍK@ƒ‡ê#’fæd†=û#Âí`PãXH׳ÃLjŽ¥•ÆÑòõ³äéç0ƒƒ é=Â@(ƒŒJôgv8¹y«  ekí­ Å0“ÅÙ Iã‚(Óùvì`¬3ä4ÉÆ"•:?¹a1ç\t#ò-ŸÜOú¢²-3“ÇCEm&p4$ÆßÓŽž€¿‘É»ãkF¸_óÇ`Ø¡ÂA Ãq$4[fü¡ Rå)×Ãt–¤<*Ér˜ŽÇ"¢~Nñµému&Šû ÒVcg0ȸ(ö4,K v¬=d]±X ÀdÆ™‘«$Èæ¹ê cþ:¢Mƒï>¥¡¼5§k`žî$¥! ±¼©ìu…i‡~äÐ ÕMñøLñŠ dV†uœ™Ï0L‘" qÖº€\,RRJ˜V~àÉÖ°üÏ'H `Æ%—YÍÃLO3œq%Ìœat²£Ÿw™I¿Æ–=ÈœyR§u ¯&,ÎóÚÉýƒ¹Ì``0š×ó | ®çÊÏË´Šß ¶»WP™cÛí—˜Ô9ÕcŠ[΄( Æ´YªÚ¿‰ ðã «¶Ñ¿ÑSÎJf%ë˜Uà·1kß^Í­¢íSÜÚíÉ­wÆ,ü•[¿rëYqk{Šzr#³vM—bV‘âKŒÓ‚N\., å%Jø4>üòs´bܪgd†¡¡OaÒ]€Õâ†%¡ÁØYÇ4ˆlÐ=ãÜùnYc#Ìåµ ÇAÈê^ܸÈ÷õ¹ë5 ƒ±•Æ7/ûG¥óÏDË×ÏÂâŽQe1§Kß–TŠe ´d#Âh+«¡¹læË…’©ºeòeãƒà›/„ìAÍý!¯`ƒæš6èyPé–Û¯¤Œ Œƒª×ºÖvÑ hœ‡f€³ç„Þ¤)¤¡œ@£@iˆÍ˜•BNøpyÿîwç 5sK#rz1wÑÿîŒ_¹÷Üãj¬~³äi”㛀= çøUûU¢²_DâøX0 È’¾ñì†>h¶[Ô$¹å8X(pë M"Ñ,m%$y“6‰D3݇ÖçMj¯Â¯PQ´¡«Ës¸Ü×çΘ…ƒÁΘ4¬>£)èÍ-Û8–Œôªœê'ª$;‚ØáqiÚíP˜êø½+CéÇ¥ƒs¦ð N§+Ê nƒehW™edG2m ec©(J—ÁïMËÑ2hf¡d%%ú¾r(¤Ñèó‚A¼—‹t Ñò>”މn ›æ’ÅÛÒ'¶…òh[lqÓ¶PznÛBélK?ÍÅK·…ŠÔ¶táaŠ? ì¢bZF‡ 9Z•À¥Ÿ.ª¡•ªÔÓŽ(\©# SœÂÜÚ[-xÀâ<~ âA´”YGÛ²ûÃGˆ²0×éˆLܦamà9d:`­MÃØÌ¯¥6mãc¿>{›F¡p0Ãm!ŽJî.?°i"ŸPÓm›0ÞÏY˜z.™Â‘}Û7‰CC40«+ÈE«ÈêPCó†ã‹æT„‹ÖyKÎoæ5ØÅ'ŠsIÖ]Y®Ð>8/GÇ–þ ¢ÌA…3àD˜%"Dick‚h°fZ°fÖXÄ>·#·M¾1¬¹¬16‚`ˆ4j‘wÓÑú¼Ñ覉•—˜é]¼Ÿü Ö­dÆêb>$5õ€‘aîÓ]Lµãb÷U0 fÊ@A•sAF“+o6lð÷ôA’a° •­¡3¤ñ§{}Ýúq¨D}Ú6¡ÝÖø„Ldågô³Ö%6ÜtnúY˜2 c¸~–º/b•±3ÐfÈ~îþ¦3Žp’5LÚÂc³‘–mØö€µÖÇâßœóoŽÈ‹èœvgxæ‘Y|ƒ¶< =…—8¦ß1‘´äÅqG‘Œo4¸Øž’‰Ã™Âü3O B²j§Ãr+]B`NÅ=W§›nËÎåÌ´¸þ´E£8Ü-1ŒÜ´Ó_ ¤HqLŠf§èLeÊñ¯¬…;‘ÔáõåÌDYSÀ°w œr)R5nÁÂïg6ÊÜ“ƒRR®ÞJÖU.¸kT¹ìÂÐ^g/:­QåRÌ¡½RUn»Ú¯Ï^•+c¸*ï#UîP‰…löûIÂ}ÊTï) @”9‡õÎ.¸~²Ý{¥©»àäd‘÷ Æ@©e nÖ-k]pÈ!þô=Rõ[¼GªFT‹Ö(g¬ ô±l_’×÷^¾R®o×÷_D>ÂÁ` åzUVG%Æõí #lБt,ÚÓðk¸&Æ3ÇBÖpàkœ¨ª `߬§*Ö¤nðe¨ª³T5}}îT¥Q8Œ%¨*Ê–r¨Ä¨ª; Æöé¬!ÌÄ{Œ$ò‰‰ò‰úu-–©¤.ŸH¦|¢i€³§2q0Iä1N‚›³36Éo ×o°~µMÔ{ªžÁúò ?§sÙý³edßðh”lR}B‚<{¤MÑò•Zë`dàDjÉ•góïC¿ñPéðt=!¦(æo€ŸsÔ¥CÚvi:är*äòÀâ=ˆ”ÓŠdÑÉ!ìqBZá%uâmŠõWÒݽ·)rΊå ÒZÜ|0褖Y¤oTxæÖ܉H+uï2 ´?°Ò`ì.+ýP×sÑ ›/£áÇ~}l‰'lüTÆ=jÙƒ˜Àö¤{¤+±ËºŸèË}n†³Ë_Ò`ÄwöoLbcgÿ†€S.ù7<°P…fÒ#•ÞBMÂc=¤ŽqùþpqÉBVØ4ÉX]¼2EySáêa¼[Ÿ)ªÓ¯ l0yæM.nŠå+Œá&—ý(3*1ó¼Ÿa| CŸ‚{0`®ÓÅ F8ƒ=¯°yE´xk›àToLìµ¼"ºÕH¢q¼b¾>{^Q( Æp^iÃ\ß•¯ˆæðмҚ0 Ì=xEKäMTf@rRávc-_}L'}ª2_Ÿ=Uµl·ÊÌPUGŽJŒª,ñììlOžº¸öKzž~ÏÝ[í¿Qˆ ^P£j­ÿ¡=^4ª@ ð:%s³Æ˜Hx©ºð®§—?™¹S»Ž[ÝÍ–¸‘{nܪP8ŒáÜ:WýEPIåÃ,We°ü²gþ>÷çKd°X¥Ø`ÑÏ+Fra)¾¦ó “°LÇ—oû‰ýØ^ÂÛ#†í{“X’î›ÎQ4¥#¹?ùîÕ›Ý3? læg^¿üáðê»o^=zfõOw—ß,ŽAšAñ¯½|ûŽïîŸß¼ûë‹›÷ÇÅQañ#ÁÁ#BÁ (o©KßË’ñøïÁà{¤‘ð¨)Åwˆ¬íOŽwïF.ûVÉk°Â[Þ«=þý‹×VÀe'œžµ-@"†ØÍ멦&%äþrsûárøßW÷¿ÂçòÓpJ¢X+#*äC¾°ÏH ·©ÿ(ºþtùñãðÇÓ뿽úôöî~%iôÒ‚ËÝqiß„ßýòdðþ;ʨ‡móyÕ‡»ŽÞ£ß|TR¾qyèµ»ÆwÜ5…¿-k¹ð²óÕBY͸Á€V©@¦]t5 :ðs\ÓÔ±Uäv;ŒŒ¼ûýøî¯mÊO·À*"Ô¾±¾ˆ±[°Ráð;ùÍÕ0ù7eÞ.ï¿NëØæ2›µ`ÇÔ­á 2í$Úv>üË(Íooþþ¯`¸B™äþÇ•˜'=zU* b(J./Òë„ P1Bò ™”’"@ÆosÀ=ÿþÕkàâ'zŽð “™EÒJšò…¨5ò9tèT /;ŠNVxH,ãÁý¬ÚÌÓ-6©JO;7›4iˆîjC„š†@ÜÿóÓÕíñýK¨´%Tê¹Ù9"m2Ü,£qws޳¼=>òɧŠRZˆñõ¤= ©P” ÑÕûÌü)FÆJbìv5l¡–ݺL:×9²Ò(€vL¥øSIáX¤Æ@I‹Ä;±É½GÃqïìà!9î!ú=`ïëeK ˆ{Ç9! ˆåµ”\éœd«}çd¼Ž”»hÔÚ]ôãåýýñöz_æÐ\Ëœ’£sÔQ ”ù˜,‡lž@·çÈâÀf?1ð­€äαã“ ±ÄÀ¾·™í#(€4%0ØŠL­ ,½ºüóÍû?Vî6âšÝ¢rê$âuìwœ£ÙO TD®ß­‘ˆf݇okO͹¤) KÁøìÚ&~¥ðXvêØÍõÍõ¿ &]ÔÆj†Ë·Gè£FŒ!6ƒNÌÊhH8 ±Ä ì×^Ø‹½$³±±«²ØXéÁ4#Dã4߇ÓT…¹(íz‹Ãa›ö¿È ½Çþ;n@MEl‡/ pþp¼»»üí˜àá„Mä»yGJEäûO‡+•ûjöúòÃñN1ð;¥$vˆmÿà[˜.Û $R¡ÎßÛL¡»¥Þ, ŽEd;9Ff'/⟂g| „øsòÚn΢4áºÄìßëX¼zDhVBÌ ÷óÂ5E׺'uøK"«h¼¢­FüX˜ðo!ìòðx€šçÔxø k,²_JÖˆI¥Óqz…718v²­8Ò}ýûñöêިݻuGTJö<¢"'ÈÍëAΩ ºéœJÿÂå“+uº)³®)ŒŒœØ2N"!œ³f'$îbÉ:B«Âìf,îFŽÉ)ú2Ud¾Bÿ|¡Î©5_qÃt§@#68;öÕ©—~SnãJqNÚ]ïA@A»}A˜<ß7;Ë?¨<¿¼¿¿½zûé~µD·Ã=²~½ù„¸j?—|‡Bóáä»CꮾŠGó¨õ¨ÞŠV$µ}o_v -øPºßî”9³Ià×§rù8SâJ‘DÖ¶ˆü=‚L`I˜ÐøÜ$ô›34W›.ïo>\½›ÄÑÇÛ›ÇÛ{,FZ$öœ¾?/©ß”Ý>(”ðÜ@F†n ÕË·{ SoX«¿_Nɪ¾¼~7êåÛ›‡Qù83±‚{ÄRFbÖˆð)ÝADÊ÷-RöBî ·(&¡*‰ Ë¿DÌ`Ò¬•l)B¶ÄW‹å6!—Õ°·òpf$ð$Q®Ö*•fçsÄŽn®yI˜Í¨}›R)óGïz’0«¼ºþÍÈ¥d´„©õÁû!§Ž›R˜5A±h5…wM±|ŠDïõŸñAáðëåÕp,Ë~ÁÀ˜…„8’YˆÚ±;:“Á„¼‡npä5"‘rÕšïˆvaXÚ9à"·[°M…ˤÍÂäîòÕÕ‡ÃÊ«° mJèÚãø`W,âñËŸž¸1Ì>Ç$ÐῬpiåQô¨.ѿɋ~)Â]‰Ÿ 9¼ $Ýϔ˯fÏÜÎ3ª9µ±ÚíáŠ?SçŽu¦^ßþñÅ—+ƒ[€ÜgÄn®˜±Œ ÉsË Äiwª)vWó} Å‚…Tì‹›§ÃÝnôZ@‡H~YƒRܘͨytýþñ͇Wë´ÊxÂ/òÊ—žÕષ/±¶aÞÁi‘«ªq­Åë.w0¿|òô—G?=}ôË«§Ï~xúâõêzµ¦;Î`Ê^~ õjUíÏÁ”úÄëÕö̶IŠj€Î=Ãå7ù ÕDƒw¯"ã=Ç;z²^͵8¯éÂ6 èÕdàšsO_Ÿ=(c(ð¦8*±"ã¶ÍÊ–.l ’ÁLüÏPÅ[WÞ^ÎmìõàwyðÃéõ¶Âjöšg9iBž9ž;óFwÏp¦a¼Á½z5¼àœI˜/=„aœ¹Ôk7]+Üï'[ˆwì0w;C:µy]µSݰūEf;) ŽôœOºF{ë:13ˆî¢²NY¸F°Ó×gO’S×*…±IöG%F’-€QM?7.±eçsInêwkÎiƒœòH@UôBà”®7*\k×éë³§…ÂÁ` §e|£¨Äè$ÑÚu¡Ð‰rljQBYÛoMÕá-n8#ag,±®É5÷ÍÅúÖ®BñŸ0àõ ÛñYÒJgH{DN+̵”§!61Z‘V²Ì%zƒ0 2Ñ`@i&n¦UB3Œ%„ ë‚fǼ¥4Ĩ¡™ÞÑŒàìiFaq0HÃi†73blb4“íMç$M,¯·H#÷`ÀD)‹UP'xGrÎyØË£”5²ieµ£,3ÀÙS–Ââ`– ¬¶=”e±‰PV‹4(^Û›MC2˜‰QZá5´Ò%LaA")$WÑ 3÷i)>4O>D¯`pcž?ùtÆÌñˆ“p†Ã/ß"[5É6«ÖÃŒG?ý—‹%ò¢~Û5õåÚ/8ŠúúŽºÖ;¶ÐÍ W!u08D9ATp‚HÙp­×8^mTWs(ru›ÂÖ5>›¾>{š“×¼Má¨|ŽJLdRãjíª̼(¤{q§é¤e «ÛD']x’éj…­@d㸀ÃôõÙÓ‰Bá`0– )pT"‡–Í0ú¾À,©Jœ2òÝ”ûýÊèXD­¦yGÖS†‹AL_Ÿ?e˜v} c8etœâ¨Ä(Ã*¦Ì„›ðÃÑÞÐDVÐA'ð6Ê#°¡&‘5'»®5É û[íô„Ûö‹P& ‹ƒAN ²a161ebÞ« îÎFÕL(qÔøž%I˜R„”-×܆8$«q郌!3ÀÙ‡Ââ`†‡hDè*rØìâ°îg‰LiÛlõÝpun¹j÷ëiZ:¯7ß{ÕÆª”ó[[«ÿÝgÑ«ü+³£{›m+X±}/Øà¡£gÄL¯åcªu4™P‡ƒÇ—ÁóšÄZ&à>Lßæö¯!Œ^A&qœdÌï›PÀ™AAÓägâ ¢(¢-´§,ØAy3hvö^|spáàpì¼q<™M6(-£ŸáÇÞ˱À"õ¹và"'ÍDÏ“¯`ÚœX#`Ðók’&&¶9?°X»ðûÎ`[Ò«Õ ÆpP*#kZ M‹;ëE”ª È:“n£ru$°u‘@ñe$1hc¸Ê&Dà¨ÄL{ ÌL8%¨qQ:¨ô0áGƒJŠ,_?3eÿlä>¨ÎâÒ«-“!é9(ËØ¤#dÓQb„¥­Š<ÅV6ø­çVr"dÝQÂpi]¦[Ë iG•ñ9J{Åá¼)N!v0xD)®ë[Ç=‹ƒµ´ÂåsGqê¸AME8Ïä’ȘÕJO½©¸Ï^N ‰RƒÜ®=?‘"©b€vÈûýJ ÕÚá=,—uYr1ÜÁÏsºÈ"ül‚_ðl¸y{9L#ÆžKföxÜ%ýWgCån5#uî¦1îÑ úòþÝïö}FÍË„¹¿JB졳§ýïŽp9?—Ô=§Ü½ßu²ŸŸ“ù[9¿ßöb~¿Õ—ÃÌ7:åyzÎçÿ–Þû¼™ÇoZï[Âf8uå³iœnþoé­…v3ü¤óÆä:f«Öí g[eÜ¿ûb ì=ÌX~ö©¹ƒ¤:ùD7]žw6ÆôóÛÛËëw¿þœ|ù½ _À’~Q+ûÂæ<ýÔ½H 4›„»5®%r º\¼óQ¶_Ö¶Ò}asù…¬z¾ €)ù²´™2)¾0€»µ ¡s®I+ßx³Õöu$˜ŽxEÓ ÒþUªÆÁ³’ýŸË¬ä Â%ñÍ#ˆÔjW§^c\³6ˆú´Ú½íÜáþùT¢¶èÔÑÁÉ ÿ™>1j Cj›R¨(­(Å ß+(¥ßËï­c·ñvÔ:êŽÿŸ—×ï‡ã­90ðgý¼3³ã¶›ï©­ƒ•3œŸe±r0ž=&Ø0Ÿd“aÜ\°D²V.°E€J¸:?B’«‹Ghó#<óGˆ+"l‹2þ„gM—ÐëË|ý®&A@HÚ'Á¸\¯ÃÑ6*zZᤀ )ZIí"t€ÖKô=Dè ïµËïew;©Ó3ôÒ¬æ6fWCÒ|)ÉÜÇ›Oÿ뽄i‰ˆWvÞæ•¹Ôø%¬ÛY¬p—¦þT&ŒŽñ(ê/©Óõµf/°çºL±¶ËJú_—ƒïglW Áü°x3!sÎm²ÆjF(¨ f¨PH*»ŸžÈháÆRÄJ=Öšq8lô/,êG‰$;!¢˜÷QÚ@Ǭ‚åë¢À™ïøŸf¤¤‡QßKžàN~a‡hù…¹„•ßü øKs ÷Î%ˆR$„‹}LÉ–-÷¼©ø°ñeX]ŽDòÊð‚û6'+5Áá×cÓ$€ê4°Ýõ‰¦ÒD”œÝ1{‚{t‘lsOëç ضO-ýfbÛ žÞÝ Ù·ƒAeŒcÛ–”øúÓñ´«‰–¯­9¥Bu´’!nk,ËÛ™ÉÎN‚?[]f­¨2«=XY¥Hè&žÜZ[è[ã#[•<Î`š77f…IØòÎqÊx°0jþÆ—Ö¦sb­õù&^äÏöœ–®2.¦ù«Ë¢A"³׸tŠqm-C4IB;‹$áÝÐÜxV[ŠIA£ Y?Bwáj÷ ¯ùšh¬ÀW/Í…»G>wÍwÞâC<Û?ûH"@b0ÜiF×UÛÏ€—Ó™Âh’ts~·•À>2žÅÄä`mS‚Ñ4ªE· á•bV#m08ò7BxÃ¥¹‘8¬ø òqÏÄb† ýÜÝ¿™vm N•L2NõÀ" ŸšX¤qÉàX híÑ@Gê$FÚsŽ™r(ÎíoãQ3‘§%Ôž >gzWx8 '“Zc pØÉH“yEá(iÂfˆ^áõ©½¢ a¯L—ææÝºÔxW8júúìU…Bá`0–P=ÅQi#ñò‘Ôø Í޵̄ØM{ÝÕk¢ótcʶ"tcª'΋íÖ›0ZLšNpÒ5ûš8{ÒQX ÒpÒiÛ0²á°i1/ŸÍ¤£ ’àô¯å¨Mr6ç~= —î¯x"8ZMÏ:øL:Ô¬&u!fÕ…'5> à‡ØŠÞO| Áj_´ÊþJèSo’!ô«nðmpäõ™$ð!@àçCγ kñ }kÉÐh¼WÐY|ªbAY¯DPaÒ-Ì~ºá,¿nC[¼ûÅöSíÒý9ßɉn˜°mñQ•…d 5›ö 5›´¢iÍá³³%NNtøÔË ¥Ã»¦›Zh'…ÝQ d¤îIëîáÝ&ÌÄëO>ûX#‰.ûÖl ›ÙW?—`,ð¼ñX‹Ç1ÐÍ®qN[Íç±¢3'Ÿþ'.ÀAÊbÄB²î粊ڒU=ð!Ó'/€,öcÌE²ø¯÷¢s•£,¼î‡ÐJo‚âÓh—AFtU`–F'!Rr…OºpVQ<ëŠ3p‹Îºlet¶ícÏ¶Š¹ãê⑵¿\Þ£à8¹’´KÉ)I,LÀ*Á:9Š*ÉŠâS²§x æ%AÖ¡lÈaý‰È4[]}"’{"2œ½êSX ÒPÕ×7"è=csFr¸|t¤HTM…šÑ›cRkÕ–ùa˜jˆ&¤©ŸåÄ«ÒL:óóààK\RF¡Ü¬‹‹ó^—†oM· M!ƒ!”‡+ê‚õ ìܨy¸'M`èJRÁÃ}#Ó†n†‡{ËÃÓçÎ˃AÎô y8ÀfÌý}Z®QMÉ$GVvb»š{ª${ºhuëÎ,—5&$ÙÂ?&«jMšÕw7z-ªåXÆcÉäL&…db=úÇö³è>;µ@ÿúžraþ w,:Ÿ4æ îØî‚R„Ƥ$Ìý!,u†©ÈÞÌvâ„Ó6ܶ.¬\1",L’‘fZq‡ë˜µõù°œ$»%þ›ÿð vƒ1¤4†”ÆÒRCJcHôPfãÊ~w1¢þûÕ›Ý#Ðø ¥´ŸÉ¾[þPxï¼úáÑóçß¿x­Õ%³ÒÑ2ˆŸµ àa{ôúå¿<¸÷„w‡Wß £Ñ„öoRYB‰€½¼°DBÖHhÃ`t!°O;ù´CRÆ¥ÿ?½|삹­é»×ÒSÿˆŒÆ1oeÏuÒ~Ûum¹®"@í`wçmJ÷¥ÂÞ2Ô>ˆÝAè¸U¡ãïï^ßüõx}xúÝøóã—Ožþòè§§~yõôÙO_¼¾¾ÕLÔÚzÏbõ*áÍ|õ=’ºX/,í]™Ìxáµºì• u?O§¼Ž?¼üõ/WÃñpüÎã:(Ð'Ìȧˆó™<ìºùt?bûÉñí§ß~¼½ù¸2V*ä®a$ÄI¸yA˜ «SI$t»% —É0ä ¾E†Ááv“aãXz×¾Ôû—ãåýZêER›¶PïÚ7^F½ûÆAæ°9©FNB[4pÑìÜ©÷ÑýýíZêEøv õîàbŠ„Qo]¢J ¼HíŇàŠl,]Kô;Bñ%òŠº³¹–Wø®9þH–ìæµ¹Ú)ñí8ãhùþx{u}&¨û¨)Ù®»Äá!eýEä8Wo2†ýÍëÁä!€¹Î±TuÐw¤±Ñ»úítM‹XFÆ…å»c‚÷4L‹²õ ×àj†¤à ÜÒ=}›Èê«×–#á;a»OÝ×X¿åHY»;º@!Æê–@ÿøåOOæep5Åóï_½ö$˜V}Á3™@ëÎ¤Öø5A§€>_ܼ‡ÞÀèµ§ëüº+Ð;­àO—?<½þ[E|W”8‹/òn!xt9P'ø)Gõë8Æ:&ærO/ÂjµËÀDaÝÅõ * Eð]ÃÛ E€¥ì—?TEEvïv½»¹)»#XB™0¨,}`•wugn>éˆçíZïyãAÃæõì—«QJ}bïvuqlJÌÀVƒÐ0TÛ¬¤²«×Eöv}Û•~'ù4 O.ïW¿IðÞÀ9ùÛƒù°ê¼û!ºÉ{ž× Ô/d¿ºK'¤îêšFÁèçªi„,æ<üàET:ÂyYìüAáØjÎÃ[ëAVƒâ=-œmîÚh!˜A^)Bê¶ùòþþx{]cÝì[â®zû‚Nç ßG4¯wtsx3ü39ºý5,yº§Á˜Å®ë§wü¨’+kÝ×QûÅÏphžMeOGµ#õFwð‚Dñ6O+Ýânç|Ï0äw;º˜Ïàl·p¬uµó}®Â,l+Íá#ÛÈë¿LtwËžé®ÙH ~&Ã>L÷æ9¬êHÙ³i •ïHÙ›^ƒûúì ð+cx~.¨äaáò¿ô>Ú=Ç6« ZI t¦lwìPP\Ýõeˆ«š'rö‘Þ½ì¥ñ¼öAº’Jí~û%¤ÍxЊ)埻oàêÚ(€ZнZçlh¤i21ÒVë|m©s=lâbXY4~QÕѶ‚•¹L´™Ì°2q¬l¾>{VæS—“c8+ Òá¨t¢å‡0Îäí—òϤ̼™´|ÿšù"jÄýÖ§¥t"øz‘Oˆ/¢o’Fá`0†ÓIÛ$P‰Ñ‰•ŸNäÏ]V]¿Œ ç5”‰‰†È ©žœ¶[Ð+|$¯ŒKEIݯÒlIB„µ"a¢© Í–­aÌ‘¦ùúìIS¡p0KfÄ啳Р—¯Ï--5õ`fB)ƒÖPF— ŒŽD”Q£ÜÚ~=eð™2ú/ƒ2:CIPÆÜ4B%&´ló˜HĬ! ’ÁLŒ « ”Žã­Òû® Uw›#ŸØÍ×ÚN˃ÙíÁ½zöä 5¼£úͼ˜®Ç‰E6½7—‡Î™†"äÌ94§åÒ¦ýBs¬œVËtšFñ2®x0 D‰’W¥$‹†(¥ˆˆ²Æä’L¬–^­“^æë³'W…ÂÁ` #HÞоI£’#ËçÓ*©»1ßôÉS²@v=X^¶MZ¢¿—á03Úúîr=·=–»0ÝdÞc!¿Y;Ò_.î›· Ñ]Dû¾é^Ö`Âô‡-òEÄ @:¿9׺¿à€Â%Ú²þííåõ»ßͱø£7-^‘Fhéæö»nßFCtéA³èÔ vɪ!³¼Á¬“ù.’ÈÖïÅó´5YR¤¯l}…kGúy©aÓ_húàYËêÙpóör˜Üݸ!U*ÓSÑ=ÕjYZ 9‘ü½Š6k1'E“@ŠX.s픉‡«§3°2´Oäöêë샴ÁàÈßAæ ¸µõ»m±óÓøÏâ P‰º¨úòUµÈ„¨Dªµ4‰&N,žÊž1j(yÇî§VL íNËÁ¢ÑÏâ)€è÷ ŠÌÒR3 §˜m‹³mñ,!÷ÕYÆØ9Á:÷mq«N/ƒ9¬ÄàêY¢Ã—¼a (ÃÕid3&q[áÏÑFùºÃ¥2™´Ø¶œ×áÒ p0‹QiližÓû¬?¿;luH31J(m ¡´hà‡7<ŒV˜‚r« E®üÈ™Päø1( ÆpBáÆ¦¨ÄEî@( ’ÁLŒJWA(œ~"”.p¶÷‚®"c¶qõZQˆœ–*¾»Áâ`– •ÞuzDZ/?¢šVЇ¨3Ì6NŒÒЬ Ñ þöñî;>ÆÕ‰ Z¤_O+²i­˜ΞVƒ4œVDdŸ@lÆËßJ+ ’ÁLŒÒÊú •q¬.a©´.˜0ÑÊ:4ÑŠìjh…Ì´"уÂÙÑJgŒ•¶AC3ã¼?´c3^~.ù 8h° L~Øé’ÌÚ³TŒ:éú¼˜q,ixÓ5Ad¡ÏF!uJÛAg…ÝìÈh¢y‚¥ë¼0cž=Á*Ä8ÁKhv :ÏñÄpùú™=#™’ÑMeœ ¼©6>$ ,Ò½øÅTMý·mCÚõýóNû?û^™"·_Ì^0jöüu\æáÑ¿:*­#8Ël%$²ßD ß ‘±}'pÆ ÓçÎé1–ô®GĽžˆ30”æ»éD9’6* ÖgGñF6àtj”I/›TWsЗú±æü&›e¿>{Q¤P8Œá¢H†ÙQ3*áùÍ,ëùMA2˜‰QBYŸ,5Ž…'Kñ¦“¥ú®æ /W'KÉÆ&KٯϟP:#¯zEœûó¡s0#Ã/< kfK)ÎÈ ˜1ƒWj,AK@•D7ƒl@ ízÓ‡¯³SBñÁEÆZ 1Nl¶k‰!e¦¶ˆ¡÷†‡E#0ô%Æ©š|NnÓhÌìØ¬A¾?Ã?ð2í>VSaº^ ,Ê“VÕàÈôì=%#ŒPýQ‘+C„æÉD{½Ÿ2¦"«ôÇ$ºùj×¶¨a˜¢†Ó˜g¯RbƒG\¥˜P ‹àÍÆì?›>nw[AÔ!¿%iòÜïH‰t\fÔã²À¸´A$÷‰¨!Ç-güXX),4„…#œ=Ø™/J\‘oqÁÞM&r'W š?v·²7ƒ6îdÔ /²O ”$9¬?RøJ9xj@-m0Øß런^â”ÙäŠèøÉw¦=ÑÎÔë¿ÁqÉY…JúÞ(&Ù i‰´"-‘H‚§%Sï©e¢¯­ Igxa”«op_Ÿ½V( Æ Xô8*çãG¸üfaBÑLâI]kSÓYŒÏoöÑ¿mU¥ùAü‰ñkKUÌxü@ÄÚøA¼›;?ˆ!¥1¤4†”Jˆ!¥1¤4†”ÆÒRCJƒkˆ é-4O‹%Q3®¶Â!2¾"°žá™~¤ïü >'4'¢ºã×"oƒ“ùDm^={ 5¼ "€6.µ¡ †¤Ë{N¥š¦}ª¾Ë :R:ëg>Òið»»«ß®¡ZZZ¼¹å­Öˆ‰£Šhj"Þðh#g#ad½V¢ ›¥ZÉ–^³_Ÿ;Ijc ’l[•IR£«4PV¢Ï2˜y12©(Ñ7Žc†N ã5tÒÓÕtâ2ý¦¯ÏŸNL¬@a §C*1:Idú­"2Q.i)zºŠ”PJà}‘‰Pdhæ®,ßKÍ ¢&ÏC“¨0à‰/ÁÒÕX Ò´ÒÑ‹›­ •ѲÌ%zîA!“¬Ç…KEv(%N3”û¹¯œð¦‚f(e54ã²ÿ¦Ξfƒ4œf¨ô=n6‘ˆ—«©ÃÐ 8öÐTr¶€»J¡Ñóäæþ0‡YÒ4¤ç–#:O‰˜ßáuixòˆc hîež¡Q}E&DøÁEô‘W#“H~~uwÉø±÷rÌPq #Èãj("™™£¾®–j6 —ضÎaw½Eƒ£‡³ ㆋ~?؉ÄÂú賄ƒ‘{¨ªZ›†,¹ŸuÀY—ãr+‚pÉN å ¢Cv!v$¨ “‰ÊCT•‡8éjìYUyˆy5¸ÎÞ¦òBnÈÈQà° ý›åëx ¨ô.Wdӱр€Åqvj %‘ÖDeêÜßÓ0"(k"‚}³:"¨3$ŒÞ1_Ÿ?O'üž&"‚=ã8*‘ã%3ŒåÇ5õ`fBuHM °ç)ÊeÔÄûv=e̱â;GÊP( Æ”Ñ÷8*'(µ'‚-1@É`&F ¥"ÈXL kxx.–ë[xŽƒÐµÍE$uÁâéës'ÂÁ` %Ö´G%&B¢`±¯kr0è6¢z*”4*B}¬éðð0#MHøýºPßD^Á½RÒp…`¦¯ÏŸ4:­óÆpÒ ¼ÅQ‰ÉT׬0Ì —0ähRÚ ©/ÖT#Ò«Ì¢P"¬è1’¸!È+û6aÎÖZ*k%ÂÍ Ý\ŸmÄ F2Ô©ˆoB@÷%®Ö¸ *qê¤\:t8îê´5h¢hq"Õ2p>ÙfJ-¤æÖ‘#Ú´fšÖÚÓ;‡9Z É ’Y!w0¸D™¢"ÞÇL|„)hˆÚTØýŒv«Ã´u’™ÂãÍ9Ò¾Bá`0†Ó> ªy¨Ä$³ qo°î4$ƒ™%”Šx3WóBa¡IB›Šcc¬_M(®ºÿôõÙŠBá`0– ”Nà¨Ä¬»¨º¡uÇL)!5J1†4œ7¤ÁiDø5†?÷zt•’†t¤a¾>ÒÐmØ5ÆpÒàÉ£2^>"C@k2AëgP3°K.9NØ«1+aÖÀ4äÎê4YÔ#ƒs>±#ïðƒNÅ-lfúË#¬ HpС¤æ c.ô¯c…~f…þ‹8è(c8+Ù᨜½káò5yŽà¨èNP[ÜnDŠ˜Ž¬Ú3LâJˆ .Î82›!`º¦Ùcáj3Q³ºùžôl0hk×^A½3C?›wvœó²6ÿt’ª>äŸ^@9GPR¹C7R˜¤Lµ¢ ´æ[ãèñâ3‰ ˆ9#!õò5ì÷5rËß0pËBÝLjÌœ–¬íM#Yãh¦…æÜ92ðtVa gàVÈ<*ãå¯Ñeà‡€üK-hû`@EI«"ÄÂÚ6qÔêšð¨Ej̤V®>j1b™¾>{ÒR( ÆpÒê"‹“d.H0K[ŽZI¿gH’mÖ±ÄQ«kCÆ¡9#"¾Ê:íK˃á”Á½zöä 5¼$ÈÁyöša9X=ÿe\ Õ‹ÌQÊ« á¤*û³°²ÿˆÈuwŒˆª¨ìÏæΗQÙŸM•ýYª²?“-ÃQ‰Ñä÷ýØTÙ_MŒJM@GÂZã†PzBÃÕ­kaN²ŸƒÂå9/ÌÝ÷›8Z1·ÒPZás?bS¬Ë;\¾~¦t5 ‘ô&­&žZ:8LùŸ¬g-”|å©…Òmƒh! 7DéÚŽNàÞŒzp;‚9!VߥÆI—†VÍ®J•ß»&HµÕ‘€o¦ \ Ôì´®K)ó-=eÁU»ù÷ÃÕõ§;;8Êñ ä(—| ·ì4ðƒõ"ÊÍëÆDQÿÒmDâ>Ñ£ šâ‹W›#6m¾mÚ*{sˆNÿ‡swrM§ ÆÉŠål£qO ‚÷¡6Þ@»hb> ÜïõÝŸ WÝR[FR«zÕ¨¤žž†â×&¡ƒë£Ì>œlVìD°„ ö´Œ‚Ü]u ÕÄ åw¶pX‘(wPžkÂÖç¿9¨ c0tð•“OÉÉ£¾Ù¤¯”ûOý78N°uéÿNG«jd èÊn·('Êô“f84DLàkui»ùš‹ë½±êž.(™ó'A©+YÕlMZýŠ»ºvù™—ܳI©è"* ©h ¼,E•ŠÖ¯ ¥bc8é!§1Ù‰×ä ³ÉK/o<è)”+œH3’Ù‘em;þãÕ›Ý3¢J"DÏzÂçG¯~xôüù÷/^k@žNC6²Ï(x? CK:öòLÆTóÉìw^¿üá—'ã÷ ýáÕwßþõð ïÁÐDå+îŒé²• ÉÁ£AJû"ÀêØrŒÚ†²ö¢µžÀÙôj:øÒ••,)Á‡(šÜì5`Å‘Nºø™,DZ~™ŠÃ[%¦µÌíŸF¥öãíÕõýë?>¿Uº°|’£(À†VÚìÐKÅ®-.¬„e° Ù R|h5H†¨ªG2²þ +ù&|Í)‘u_}÷áò¯GõÒNøÆÔ^䪵›¾ÒѶa)É] ã'ãN½¼½úíêºjˆd{Q¾b%Ú¡ Ü„v(Ì·¬šF*7¿ͼG8µHWÔ,àêîåÇãê(2žÊvÃSýB gи)ÚÄ–@q~Jƒ¿Ž Ýþv·vCw•hˆ9Y¿dG¡ü-ÛÑÔê ÖÐ-+8 Ú©'äguËôòíqXIÍ®²nЖ¥`Æ+¢]\nÈîdwÆ;¹Ñ;ŠN [—ƒ!d‰ìß6 »H#{­¨_\b4@å¿I¶‘ú+*ýl˜IÏ„ÑÆàšv².•!ü¿^®#u‰mGƒÁSõB‘u$‚}ˆ"ÑD§Û®ßTÈçýñÙñº‚ÁÕÕØ÷ ÁÏö!Èê{™6®¶×rGÃÁ–¥`H®óíìh‡U!yדÕnþ„i@ûJ$ïÂhWwþ?×"zOÓÁÃöµTš¨ŽF,GÔµŸªhìÊ êà©©zƒöQÈjþNzÈ}þý«×>>iz>òÀã—?=™qÂLÓÁ³icƒgàÁ$ÏPèKþ;Ä^Ã@Ö«G¯oþz®Å¥•£ï § Êö=õ$’WyêONÑ–ù‚ ¦@ 0È¿-ŒAœïz4Ò`ª Õ§ð<ˆ7é´Ü Ü=QìŸtÂÄJñ$vOm×,a?œáÖÁ³I7ÃêgÑÍøZ$C¹M2ñýü‘õÖ¬]ýhýýåÓ0<¹¼¿\¹Ðý³e-T½$Ìwö»”å—<ÜÖìß®±f8ZÝ"%ä—º°2%l·X¿…úöøëp|WêW™Ýû¡ÁQýB-€é'ͤðh¢2]…@«á³¤«`+ùü™*T5¨Ý3ÆQŸ¤-b¿ÈÆúù+ª£àŽDZÀÀV²—{bÏäg±­w7Ð"›ëÄîþtÄ=0 @DNCøiÝfw¿|÷îÓííñúHÎ*9º‹½Žæá c_Öƒ«ûÓÝZˆìHØŠ·-‘gݾFlSÛä"Ù/÷;EãÏà‰0 ^‘V ÁÎHxè!ûK5KØò)âºÙ@Åÿ¡ÜOŽ£m¹Ž5›®ÈyWœ X/°³‹B|;{1±Û939‚ÄZ@L,Áåd—ÐñʹG™[ $„*ÜŠ Û“®·¸Së‘VD˜l#iZt2+¤7hŒpø%B [õöêúýÊ}ß3¯Û‘­ËA$ÌÚ¶íd·`ÉK`ƒnD·JÊŒ'²UÇzDÀn4öXBt´2™;…†²|‹2¢ƒ°a²F@½¶·ÇËw¿«g+iæ?m:ïÔfçׄEME™ØÕî»üøqøãéõß^}z{·ÎýÀú]íY!»­ º}*Èw{óõ©¾¸ü°–ºB±•î´ªý‚‘h€ »b›ÂX[¤Pêr i¥ô »ÅÁˆoHU„tÄÙ®wC„4¿ªýÂ¥hJbá­çH‡Š-+Ëz€ hzEûEHѰáîÆJ]€tÜŠ=MØ-Òüªö‹–¢aÆéÌšýØ3mgKDuaYû…WÑàäþR±|W1µ!›^¦Uj·ñJï¼ wuÛ°gMŒ}ïwɰxWw?%…)w #aùèI䗅e`ÉY‘Äú‹¸˜0O9€¡…Wþ’ Ø­2Ò^wãÑëÒHÕ†ø»OV5 ½åŒ]—€\‹–)Â"#ˆ§ð„ë×öq˜’5¢ò—"›V†² ‘l† )ãXÀïã{]-om~“ÐÈÙƬ½«³´*DG@×Y¡ Dé|gõý©~‹ö<£ïìqü”Ý"¤pXÙþìý~uÈŸIˆºM5Jv•ïÑþ‡¿~·á.ƈõ=³·ÜÅX\Øž•+ÊÒy©ê’Gu§fߨe6“tÄk¿j«‡àòþþx[Qˆ`Äõ¾Âiw—Ž·2ìÀW'¦RE=ý¤ÔÄc»8ÍæAC³ÅÌáÛo0weW ºùtÿñÓý“ãÛO¿Õоà–î¹4ˆÉ|Žq–Ç/Ÿ<ýåÑOOýòê鳞¾xÖ¹Wu½SÆÛ¯¯W©s*åïÔ‘`uAû‡ª_ÏtÏ O?O@¿½½¼~÷»Á³i—7•zß±·ëo/@o×r°$ÚÎl[ËY¤à> eôÎÜ wjBsV`¡m_ˆé^Áa.Í*, Ú?jÜÜïLcž.ìŽÕ®ë…h:p1·Œ^Ñ?J·Û1à‰/¡k´Æâ`cÓ´9j{¿ ¦‡Mq€ý£ì3Ýt¬ý£‚ j-Ç¿ÿÏËë÷ÃñVO%("ü\S‹ïsÅýp¯L›_×ÁµÔ&]@ÿ£¹iÀ“›{O|§ºXá1ÀýDVºš·Mˆ·°9Š×~ëµÕ&‡©ýo[¤=1ÚÖ”E=CÜ÷æo׬éÒe»SäÛmØn?ï¿yïí³ÙBp»i¯Ñ2N;Eƒ¶½†O+pü ¿¨ãlÛE´!2½€ ‘m'Ž’n@hOŠd7­Á± ¿åÐ*`¬U€vÌÖ¹¦ù—ÞÃÁlY¹)å·þˆL) \-Çß…ý!‰G›Sïhêóišz8µ»?·51NôDë~ñ[~¼ùøôïY^6¼é&t†ÌÝ„fˆšnp ¹³¾·Ž°P­bº*åê{^¡ï»4Ø1ú¾c¶ïÑ÷}®¥m¢±(ïHw±¶±¨žÃÀFP£õÜ”½Bá`0†+ûN0•³ —ŸhA›ƒõ·5¤Ñâ­D¹lÂV¢ýºž³F1t²ª•hw°¦ àü©£5Ä<" §I“›XÛÙ.¤Û„k–¥)H31J+m­H h¢•n–zuëÚÎÃIr™¤•H¸Ð<ùH½‚Áyöä£;<¢ä3ÚÁÒá*@°m„/_?Óh‰• î8ØÃÖ”uíhMk2 ›ìB,Bl~_è2ëN/ÖÞò[ÀeÚÎ2oŒú6~}K ;ÐP­ §€i§ïDÐÿ—5ša»Ã|€³{­‘¼_kØÀ ¤þЮ1(n?2”ÂÔ³¤‹È‘FáöF£á¥‹ÛvA2³ mR¶ùþ¿4Å™.¾E=­­½Ø3quæ//_ê‘hš{ÁÚÔ>.3áÓ_ïõÊŘ󆂷’´M‹û4R3ƒn E¨Oþ3­ìè4‘8ÌW-Åô»–³É4ù²ü†Nr4Þƒ e!hEXÑ1ÕÚ3?$Í éà ›È—5µ}æ7µ­öœË J‹jT2èMÌúCÛcèlŒœ>W0¯¢|€Ï7póéHóàä¡zö–ƒÅ:ð:ô€k¹08y²³c~ÅÑ3V{‚1ۿ䱋I¤Kîùç 5ںƀÛp5tYxP [д 7‰r{”4–®sÌ1Mé$ÕWÔûÃtPŸ¾>w[Z£p0‹QiliÖ‘4* ²|-Ñ=)ZkïL‚žÞ¶ nà­ M…Á}´`ZÇE´› 2x €Œ÷æ¯ pÒª9–šdçã‚1æÉó»‡lo- A\N¾)ñ¼ŽÁ,8Û}³È„ {?nG~õx`l›!8˜9Éè…² 7úeä4T2Ê ÉÈ$¶§ «$ãDv}Ú÷Ž\›µ<¨ÎQ8*,i¸pä]çƒb3^~ËE¨ËÃÓ~ÞZGO(­>ˆ#v{$„ÍY‹ {Æ 834Z&ðøÎ Åò¢°ˆc|´Tÿst›Ôö f7Pê+ˆO~À@£Æ ¨­pô Ñ̦Š"Žžqn ¤°8¤á $$;ø ä°)’ÃåãÖEž‹BƒiC>cÙ$$ùH£À÷YÌúU´öoÍU§éD›ç83ÉÙk:EƒÙuŒQY:,ͨ¢Ç#2#J‚ˆ ëú FmIMD†SǨf€³gT…ÅÁ eÔ–w3blŒS¼8Õ*–„çÛz„ß< ß{ÕÜÛÒÐB¹öeÈ„æ÷¢cÀ_Âaâ£m óWŸ_âAÓ^¸Õ±üG‹âPâGEœdó6§!ñQªdˆ¶tˆtQ‡ YT»üE×1³çDƤI°‘¬EäDÑšåCdËNSùÓÚ…f8¢yˆ­þÂîGš¾ôr›—cȈ=êÒòïóYG”94Í̺¡fÏ{JnÎBQG時 0v>¸Žžá­|÷áF~óIÓ'6=¶0àÇÞË}ôr‹˜+Þë±––Ñ¿{ÌJD2TMÛÍš iV[*[ó·ä_?¡ÓˆmtÌJ³üqæœ!q5K£S7Jgñ#êkœ÷È4l`Frfƒs6—ÀI ý^7½—KE£u¢¡ëäÛ ’Hƒ!Ê‚i¢¨}/ýY@Æ%µøÆãb&¤³4H"m3W›0œÇE …¡˜>-¥²X¤ª¨–mK(§cù“–ÓVàyG–/8 0Æâ¬Zžõé‘HT&%5ÉŸþúPœ’Xž"Ÿû¯óøõx÷ÍËk‹ØùA ¿3;"ÛÌ]&Cƒ¨ -`ˆ¼¹±®%{ò¼°>ù¡%0žd•Ï„œë¤!›'?¸›V¬Öå>ä7¾â‰ò¾á¹Œ²ÞüÅr^¶äVÐC"bKv…?hî*`Á)º[‰Ï|¢§”\²’m1+„¡`OBj&a=üb>ÇO[{ZgZ2 Q–šÃÃPØ—(Kc˜6u@¬TF šµàÌ)Z<ÎF=»¨õòÉ ;Ã$ ÐjC`ÆFz­¸š§ëì cl¾ ‡½5_d $mˆ|¤GF6AlÀ¯ý·þoâdÁ‚@MŠÍg¾ W©3×a&ÇÏÎŒ‘Œ`¤3Ѷqf1 ø“C·9ðÖEzD.éãš=­žX)|°C•réƃ± ËÛô0è‚,™ÚÓÂM ü²Ì ÀæˆøA,ÿ8TÅGCJcHi )1—RCJcHi )!¥1¤4†”ŲÐ:²ÄI=âð’ÚN‚+ªÏ¬HW“Ú+¡Kðˆ5ð-1ø¨h ßâð-8<ƒc18E@íí£)c¢ìŸó=œ˜ÂGpõ ®‹A|Sd]põùAL"»?„KD(¢–BZ!ð-†P2a(s’‘tBGÛ–Ú#ƒ½Ro^ñ'Íô¾4¿½üõ/WÃñpün.7ƒ5ÓcH£ê—â~þý«×sÙÖðŒë:Wñ³y&Á3Úsø¬kà¼y& 2GŸ ø-È·º~vøL"ïIä=&è‚yñ3¸^. NYÁ æ£\ ˜GÞc®‚ {-ÄíÀ·#!ÁyMG„{VZ–¾G)ö2‡.œ¨ºktb¥“üÂv‹…œŠ®îÜx!­vlוœ¶/*l¾¥ßáŽS””™e-,Ó · |×cM3 L«‡²eÀ¾¿~wóáãåý•ªÞ5\¾=w èW~p5Ò/OÆÇ÷Š;¥.Âvyý¾¤ ²8äÑŠö4œÃ’š{ÓÍŽSWëæ¼¬ Æ®]óê»ì`½ÏŠÀ/ü…Ù.oG“긖ۜDªnïÇ^ vyBa_B’Þ›Þ`¥ZìÑúÞO ,\7R˼‰H!|´6þ?.sü×ÕûûßOÉ(òÍŽ5‰S–}ˆô EaEñ Ééè€ûG`Z7‡T€FÖZ]žß7›kú/³}û0V÷_†ë8}ße„ý÷컼Ϟ®o­Ìö,à¿¡µ2XÆ~ÝmÑ^«ªxËò oÕ¬§®ã¬¾¶#»UwœÅײ_K…äú¡Ê¨g9Ɔø3¤ç5ò ¡¬S 6ÖÝyí7ƒŽW _°/kb}³ }|?®oV×±_ÇØäÚ›"»ÉEÓ즪’SÓ¯1œws”öóÝïü™ž]Ù¬ðYG OIˆX]ßwãÒ»Úz¤°‹™XÛ†X—€ÛQ W·!N­fÏöÃÕŸcàjмgúÖÁØJöëÅ¹ËæßU4ÛÔeR÷Äï.”r—l²YÙ’9¹z(j÷‹ZPä\ŒôÄdµXOF´×rYïéí~X¨½…NÐCÑ‹tµgË\†téU×öçÖ= öãÇúþÜ©Õì×—;‰vr’–õgÛ6ÅfªÝŒÿ÷ÿWèÊâ=b«RØê6Ñ ï …´¬õ>ÿñ§—uþTO‘S!/ª’Id¯ËoGVBdz ·u»ü;þÍ”ËHÝ?hCQÌSµâoÿãîx{÷ííåÇß¿}üÛqøöÃÍÿ}w÷o&/SýëòöþÛ»ß/oßWo¿UÞî«áxûíã›÷ÇW÷7·Ç¿ù¿ßx¢ë©Ê©m“†ï@!};6þ@êƒïWz€É¹ÉœLïÕü*üÚP¦þýב¿ˆ‘¼½yw|ÿéöøÓQg +Êÿó«×?døÓ›‘ö%S>ñI—Ç™¢•ðÄ ¦µð€¼ÔJx×Vò`+áɳuð\HÜ] Vÿ¥žèYìDÏb'z;ѳ؉žÅNô,v¢çÒó0š&áõÍÇ7ÿ8L7íIo‹Þ5¾²Õ…Aý*ïö.upgs±–M`7E‚@­¸Ä ™Õ7;K®Ý,_´Œ…ƒÄd`a øQéº+åÿ5–†ñ°Ì.Uc‹öa;œÃÚúZ´›[ᬨ®¥o +°`½?}UEw飽kk)Ü U1u]-æjRÄ$È¢íE@Pû.ÓK-Àêêâú½¡,·D]v(¤‰x«²p«|abï #w_¼2Vþðç?VJ`ÎÕ9 á²oÒõ’îuÁ(†–«­(¶ÉñZµ/]ĺ9SA­‹•õ»9?Ø‚0_€hQˆž0Ñ"Š>î.)RUŸHôfq}pìdª'¤‹_·ÆöhœÛ3Ùëîuæk²ô5‚¥®×c¢ n#Çä*ð¶N¢•Œí:rÕ8Ó¯ÕÊÐö5ŸŸ9ŠݹIè²°{„R”ïéÔ ß5`7V”~aÂÐô¼¼÷»³¬Ô L•<rÖŠã3ª÷8jÄæN jÍ×Y´¤j?JUqÅ—üöR–DÚ°3¸•õ§ÌE•‡ïZW£Æ«tHU P‰–N»“À]¿Vß™ r©¦'ç z”,•×@›&TÝ­¢…7¼ Ê aB£Å-è¶–;ÛeQ¡îVkÌÈ…ÖÒ@‡Ÿ8/¹Ðj#yÄÆûðûB:$ÙZAñ¢‘êwyů³ÂÂñyΞáa;®º $²^‘®\HKÄJ\ÓS¡tPDé8ïDÅè¸kAY'EDz±ýÔt©Ž&CǸ­ÖIºÚVëÆV3ßž9…+Ä O…›–}H³KŽ4»œy_&›~æöYÒ#ebL.M-jPk@il¹]LcÆs iLú²Ræd%Nc²e«iLN4&ñëçEc qƒÂFc=%9ôÅ‹>)!.·Ò Ù–^±Tâ­§èIÔ YAz=C¢}аue×ge¸õ™f­êÓÍåX_B_V…»A¡ £>Òp?B P¯Z ’êÏÐbÆc´Ü+¢¸““oÐ#M–H£+, ÄÍ÷t¿‡ô¸‘™ïc0˜ïa*õüôÚ,V›‰2ÜúŽÚ¤ á@§Q×,·®wƒA~;ó\¡¸Í$î§Ïœã4ò+”ç³B„ј=D~ê^!xñ¹õ­¶ ¡@åi""Ü&m.ÓQQ«‡Xl³mŸZ‡XøT·t͆MSù伯ö ‘‹R“­C tŒ—î7„v"¿°I¶÷3µ[p˜Åz?s»ÓLùþe]ë¢Ó¦ áÅô|É =žl°ÝBa»š–ÎCÐ!·™IXFô[?ÖN€Â)¶–L[ú;uvðkÇz?[‰¨ þl«k{9F‚%]äP–DÂò‘íÒ6E•52ø|V¶bÆ*òP’Íî»Äg ù†¼]`¢0h"ìîåëR²+ •máûTœSÕ`)îðtRÆÂ$±1ǘÄÝ;ë[êÖ£þ¢Úyš”òÃÚ#ájÇå3°­´¦ïÏ]9*_¨rä]{˜çŒGÄ™)(€O œƒ†g\ÝŠ`h]Ò´±4ëí†uû%úS‹ömV¾ÎF![D‡vаù’ÚJ+÷ Ñ %zÎ 9t8ѯï–:Z]8Ñ ½\Oô¢©"z›á2}îD¯8h|¡Dß‹þàS¦Å#f2èzß"ÔI[~hû¼'Ôþ±º\•vtí{ä’•Ü[mOâ·Zèt½…L¸Ýävs¹^¯fò“~'ëPý´ú¿G©*fv@û€ý¶ Æ…ˆûì aôæ Âça‡V´6§.WƒƒÒßCnWKûÇ µ93‘´[gÐ. @»¡?Ƀ5µ‹k’¶ë’wR°8²_B*°µ]8ggÜ2Aín ý ÑpáÕØõ °P­åäð‰_•Õ'&Q¹Pý@œd¡ˆ=ê©Ë°‡<±Ob ö1[³+¼â[kkY˜Wíh§¯9”z¦àŽ63 ùH&u;:'¦Ç{ɳvâí‡ùdÿå1Y×—l Êd±  ño±°£rBnóD§É€wP{åeœR„µm§'·C6Í>:¨& 6d×Ù?Ö ¨þÉý}0„²9.ûPõk‰S ®Paá÷8×$!L|I"ppØaÍÎó‹ÄQ+ žZ"÷Gúd¡ÈhÐT“gèÌ-½Ø¸'àdäǨƒfcAþ™ß…Ѧ¡V9÷†Zp|;F ŽÑåMdk…¦³}­…Øú$pöøóãæ8²ùÂz§î®Ï4'}‹æîÒ¦‘Þ–’ÎJ×'ý^Ö¤ï c© öûs?é+_1¥Æ£Ü[s w¸rKÒé<]®‡¥ý3ŸÇZÑNb÷k𒀚ån5ØÅÂY>ÈbUÀ,³j>58er2ßµ³?ø2ÿæêýH|¼Gž%Þr| W>ÔŽzƒ1^´sVð"mðTBJšÀë¶2™Ðƒ¬òºÙTúéû3çEÀAã åEU¼ÆãE€Çxå‰DcJhäˆrN‡¯3gøÌá=ÜÝ”^ZÖ WÜúlŠ´$5'C‚c‡ÕGÚ*‚k-Á‘/!½šŽ“ _Á1F}Ý?ãÑ5qVŽºy;TÐNÚ?ž ½õÌRꄆV¤G¤ ͦâ„j¸¤%î‰Þè…¤}hïIÙÐ6Ó ó^ÿ¾¡¹æ, …^ñÑ6èšl¸ßTˆá¨j™ß\F-G|®±òsÎB=á`±„žGVß‘ü€xºnö/I¼‡8@Db\q£=’“Lmqi+iePŸeWK%-דuÂþQß,—ÎŽ|p©ÁÊ/3ws‘;à;=¢­35»ùüŬ™É-˜±u—ÆÜ[Ì¥KÛG¬q&« QIiSµ¾¢á¥Œnx>ßçvÜð3\ÄŽåÔrˆQØñøQK¾X€3ºK·Ò}(I—‹ÞˆAI2)‰Æ³±Yͥ딒Îþñ¹±÷j"Ú.䬔ôA:ý^ú@ñÙ”FEU«Ðß=d>üƒÔU´4hÒÁ ¯åø«b¼ÔÎÞztùO•:±Ê:«ñ©T’œYC»  d±[ }x{¼ýy’„¼‘*MšuóŠÙÑZó{ÛÛ?Êd‰¨s>\wù £ö‘pšø6Å8P|O‚Á‚Yã‡È[ñ=‰fäxkv!ÙG½‹±Ú°+“`A#¨pxßm`sÿ„yFwbþ" ’x¬9cÁÃ*|Äaßm¡·3ÊùCÕ»ëlóŒàrËø(.i6ÎÈà#€˜/·Âër¼2RPögBò?³üÏ"ÿs´øîGô3̓Fó Ñ[s'¬T—vá¹ íû+b˜Ûß³Á}d-Æ´‘€ ZõdaÎØb^µ2Ï|’õ…U ³9@^ªÛ!PåaaÙ{ ¬ì[ùÓF‘Öಳ¼ÈŸiùcT|ç_ðVÿÌ¡„ ’邆z=WvÛd2T@LÔ¥¸@Uß„hÈ—[LöŸy»’rÐSkr÷‰Ýýž3ûÇÛýž;S·w6ŒÞ}Ó¦§|÷rË=WϭϰkT¨b÷£¼Ä¼(Ùq÷£vǰyCý˲œòƒuôÀ¶zs*è” [ó¦öç6êÝÍòù‘+ø«Ü¾äRŒzÏ…ÚÊ/ܪ¹;‘ˆàªY½Š]}†°²Y:8Æ÷:¬¬vó" ¾Ú™R‰Ämï쟙ÁÇZñÎæ‹wõÏ}\Í•a%Ùù1¸:ýæÎYÊ_pâZZSN”jgâ"±&^¢|oú ˆ°v– ö1÷µ´N—T[-[¦êòjxŽÂõa.5ŒR®³xkõ¸k{'!äa*©EoöÑ¿mÛìùAü‰ý‡¶äü€ÇDü Ä+°Õþç1¤4†”ÆRàéŒ!¥1¤4†ŠÆ)—;zÒ’Lù¦f žyü3Wö´‡·ÒÖÅDç‡s¢oBßOŽdw’B>PŒSízùë_®†ãáøÝáÉwÏ¿õú—'Oÿr¸WYö½óÇòžºÿV^ÚWo^<žŒ%Üãg}>$t~òøåoýùùÓ~xj!`²9¼úîÑû÷?{ùîÝ]ü½ì»õCòqÈgÇ{l<=a< x À;ÂãÕž?ÿþ… *s&‘À€¼%úâØ^3PÒƒ±HO!‚ãm1:à`ÕÀ"5>£È3¸¨ Ú’“ëÄ`{ØMI ¨x äóÓUé6=#=F3@ éÂs%褀p|L>zýò‡Y‰QÝý~y{|ÿäæú†b bP´ø£ù>Nð7¥{t`1ñS/=µQüšÛ*(ÊeŸœSI׿½Í9§óàÇ€jHÏ1ÇÄüV"ÛÅ$2^e»ÄÚC‘/Ññé tÝ ä=L3@>ŸAݪJqg-€o|aHÆ#î‘ýèœö¶{ެ—yóbqÜå¶£RÕÇ3Ë«ÞÀ%²Å{¦(x$Ûoß¼?¾º¿¹=þi69¾UÁùo ŦŠhˆMU0<Âî²1R¾o ¨]4šR¯¾3ïþ¯G·¿­µµð²Ÿ:aŽð¾ºÞ­.þšÁÝ ’@"ݼr×QǤ~5U!û¸a%‹d%â÷%)¾£…‚jb`VqêLòáêz\Ô©hd%} –B=}@uP¹ °Í‡5D€n‘Ú‰} ]‰î¢D1º¡æ®[Ä'ªr¯¾{|óáã§ûc57¢†0‡'ûîèn'b s©Y f!VÍZ|ØUÕdw“O…‡”Ó€Q(êÝÕgÀšý[Bº'G㢘õ³#> 79ñ-r¸(9èc›°%è¡ø´(Ù†¦‡GÝtv{º~v\ê–½A|P(#âï•iAlÿK·1ºÐñðg[¾}ˆg|{Ã\:Þ¹¿‡nO¾ÅêX•?ßK8`¶<‰—L‡à3ŽÀ®ÜŸP-8<Ý·Ð7÷íÛügöc¢NR.ÿz^¯ŽÐà  þÍ—gν™àM‚Òd–2Å]d¤v>«à‡Näxúáãý?½B8mYí¯> {'ÜUÇz-ü ÇzY[V‚xR dX8ÀçHJoÔî[1EÙWnCQð´Ø…åNå*Ý+ÊþJ…óVî >Z;Žöäx{üµˆkzèWÁö|§`A…u»ÞíéSS{±Ë Û!8,ò›I¶ë5EzÍ ýín2lU¨GcáSzcP(A/ú-þ Ûû-ã!|Œb[æ@ ÊRù¾W%xl ,Bµ˜*z­h´:PQ ¼Ô:ÆNkå•Öëdn™/¾Xæ.ozÑ0™ -‹"òÏ'•ЦWy0·Çß^\~8‚ÐHpY½~j X¹“Eâ»x'·½•€E†c¶D‚ ¥Z}îñÆ+õ…ºƒ/7þT²Â«Ë¿ß/¼HT(úÅñï÷o¾¿~ü;²•P(ašx §y˜76I×a.yïYÀzL-÷ýÍÓWà(­—¯!–Å Ý3L­•u §À5,òÙnhyÝëDt|Õ‹ Œ£·­QˆM]°F(¥ªµð^;¶[…xÌ![/ªW;Lsë@$u0\&©à I) Ûð4ïz$FÅ‘ ?ò¬?ÿe/ÒoÝ^ïèÊÀöbãZý†óVï7!ÈÙI+?ᾩk¥k÷¬,˜\ºgȳúuÀý’Êö«ŒñN¹7«÷eO^BðV¹̺­“™¡RÊÙ£˜Å…oUSaÃÞ•æévw÷—·÷•& jÕ[,Û¥i´˜oÂwgãY…@Ž×÷ÇÛÿµkl·_(–ÃtçâŒKYren-j't­¢vÏ,X#µ‹ÀlY0Vi,ôtaÏpa°}ç˜çªÙõVÄç¦y` Ð=W´5=L &”€u÷0/4pAã"‹>Å ±Œ|ŸH˜}€:Q»TZ‚g•Ï „ŸRøÚD§ è;=×Úÿ†€gÆÏõ$B™öÅhäȳù¶Gž!ïiÛ&~¶tbïÄÿ~Mø]Ÿù É}IÜUW×_}÷îæúþêúÓ¥2  Û^ã~b’?œÔ7O…+?â¨xWòˆyVtí;‘¥W–á‡'œo bfZ‘E¿ iëÐöãO/«¼ývTk£‘m*·RÂy+{ý¶#„uÂvf {MaZ[Ý„3m‡…ŠFÝ(ûæÛÿ¸;ÞÞ}{{ùñ÷oßÿv¾ýpóßßÝý›)¨¢þ5ZçßêûÕßWo¿}wóáãÕp¼ýÖ£‘¿ù¿ß‹p‚ПQ¨)È0“4‹IÈ£&Ù/zÖ99%öEs´Øxˆ(ÖÉñPÖ˜ä·ø[(îM2]ü Â'áxSeyúË£Ÿž>úåÕÓg?<}ñúbøtZÐÝ{µÂ÷,k ØB’¶–µÅÂ>~º~uwoûÜï¼½yw|ÿév<áÿ::ýùÕëŸÆiz3Š[ÓÛ;¬™æÂJGÁÚ%Ô@×c•ð€’e•ðÄ•Îjá‰K¹ÕÂW€«…'.W O\o®ž”©«ƒ§‹«ÛÕ³=weôœ(XˆOšxùëÈ{ìûNr£ÛInt;Én'¹Ñí$7ºä†ÜInÈä†ÜInÈô ,£ç3aϯ#ùëÈ_Gþ:òב¿Žüuä¯#ùëÈ_Gþ:òב¿Ž¼|Øm9ÐI—ljNµðÄN§Zxb§S-< 9J<}ìtª„§­X*á‰NµðÄN§Zxb§S-<;Ñs¿=÷;Ñs¿=÷ûÐsßìCÏ}³=÷Í>ôÜ7ûÐsßìCϦYåðìCÏ}³=÷Í>ôÜ7;Ñ3èÎU hêU ÏNô ZˆÕ³=ƒ†eµðìDÏ =Z-<;Ñ3lÆVèáV lýV ÏNô ÍU³=öv•ðìDÏt'z¦;Ñ3݉žÙNôÌv¢g¶=³è™íDÏl'zf;Ñ3Û‰žÙNôÌv¢g¾=óè™ïDÏ|'zæ;Ñ3߉žùNôÌw¢g¾=óèYìDÏb'z;ѳ؉ž¤çá;B4˜sï㛨A§D^{µÇô)žþ£S-ÚùaÎêµ½ê5Ë¥myKl;e×/Y=¸º®®OnîseÝÊ^C5½ô1là ;¡Û–ÎÍ„ƒ¨Io[2³mçlÚP»þÑl ?çç³jQ»f1DN1(Ýííô¿Up°‚ÅZ‚þÕòS *öG¿œþ· ޶`q«í6,n›0‘ŸmæþÁgNû¨Xª½)ÏÕmfŠ‚YZ ˜ηQdKì3_!¨Qïw^÷úÆ}ª†×‡Ðß”’ša´:äg+Ëš¬¤#Ó’ž 7o/‡iîÓ£c|ëÏß»ù£6îÁt^wµ„©ûàAüüêþx{9XTã }ߦØáRc¤•ÂI#<Œ7ÆélÁÚJBl–ìcÇ[£˜èi”Lr ^ÃYø—³>ÀXä§Q¥p4h” ´Üë;p)©Qß¶’xì&<Šé>ÙôŒµöµŒNìèˆY$qÍô”:ÞàzüÿoÞx‹\"q³ý6hGZA®!1×pº ×èë£0)Ü:hv5©§¼¹Ìkf&ýGt_g ¤\‰Ðgñ4 ¬Ð ˆÎ~ ÇýyÞ'GÖÙsjiš9tí^E”o¼©©es̓o  ×Ï>ûÙÉ×=†FÔ»:ˆ®’¶±\gj4–«˜·ØÆØ"€Iåžä%†‚kÐ`Ä”œç'6a×¾ÍÓ[åhÅÊ2»bWÁçm˦ÂqܰÁP¦‡m’±„W³«%Y4f@ã#)+wB’jP" Ÿ°ÙžF•MS¥lÞLûÍtO“…JËr¨$ñ0Ý5ê¥A«¡`5qo~¤ ®®³t¤µUf¢;'B½eq(¨ÙП £ŸÙô?DV¥úF@«rY©Ü¨øáî·Ÿí &ª"½cÚÞép[ÊhSã“èßÏ[66LÕz}y5<qaS[jk:†ŠT+'ÖÓ?ÍQZŸ“þrn`í µe¨¶–“ÓYg‘g ªX€jcªÓiPFùü8|º³Ò }H~WÕl]8s¢eˆôš;ÃÂ]sjOˆ¿fΧÿÈšíqßqªþ—÷ï~·¼¦Õ§ìµ –p(Qÿ”ZÓË&0/—²x(Í^’RûgR®úŸfâicP;è7ps5¹]vº‹øX‘=ÈÞ|±Ñû™míÆJðSß\½Ÿ¦M˜Û rñçÀ¼Îß °P±«ÉYŠVÿ±ÖÚ„&Ä(‹Ð$«Ñž}ߎSéÖ‹°¨!ÛY 1Ë’Š–/ái;OV:[ñG×¥e¤w“,½–¦&u‘,½õhÉ"DF²t±dâ@syßimÛÓÙ*ÔO5Ï›”‹RÉÒ·Òþñ$‹*žI–ž[ßÑ4K‡s¦ÞÞ;…n5¹‡S}Ô0ñj (Ü‘Ïò4ßYš7¡Ãµ’Ãr_þÐhÏ3 AÑfó=:d¸”ÏÙÚF ŒõÞ8GúVúØ É÷:g»üœ,ाK „Ý8É»rœäA…p’b¡As ÆI´é}÷%éì¾Ù㨿%Ök×Ñ´é˜þÓÈÃÌI´Ñ§:õô"åB<ðNÇB¼Êû+Úp¢ÿˬ=j-Tåχ„.Y§‘B„Æ'´c…[3î)Lå­:Joý‚G8ú c_€ŽR,5hB9‹Ð³ú gõ1g.’2t]/ZÝ^BDÐúƒ(Ò¸4*puVjs^Š YDQg©Lñðó§îõ©I“°À­ø0ïˆþñJÙýÝbRáùʾ>å>ÝÇ ¶ii§ÑØð`g'S”¨±“¤d½?ƒÞt›(m=|’>·M¾›×æchùOà7¦Dâ…F ÀéÜþ`ݦ=¤·[œwŠ·Ê,ê³ÇôÎ z£ð ì¬é©eÝJ‰l 2 ø¬5#ñŸ™wÚ`¿¨‡1íY’ »€ ­ ‚¼ŸŠéë`oƒÝï&JÊì¬Gó‚Y>1˜¢lÄ.«Nôæé×:t™h<\QbÑŽ1¡=€ sÀ‘ŒÍ‘ÏøP1ºg®Š!Æô_ùDgË:Áq&àêR&¶[Ú”ÀjÅÖçF¬š Î=¡ï´F 1˜Ðͪê: ,4 ­¸\hò_`èø­÷êjßÞɘY#8‰ v&¤!b™?Ëvf?û&Ø/±y¿FR½¬fty‰+%9Ó.U…’UR£ŠJo¨UHòCÇ|X¦LÀ¤.3â"“ÿ€@­À4t)ôYÆÉ·Ú¨æ ?®òΚ"†T¬)‚‘ žðA¹NûDL iÿ’†K|îDÄ™AbÌMDBö(ïYçÇ"íÁ{‹Æ¤=G Ï’ùÓY’š's Å>ºOA"Ú9EÊ×c¨Ò›_Κ¡À±i·à¨j³|â¥"ÇÆqF6 _›ãÏ錎»»«ß®§OfT.@æ¡’~f@Û¶…ñT a9æ!ëEpåõ§â¡A³ &Ùì Õ5¢MèëÞP´µLzH ÂŠõ2Ѧ=o-Á9!Ô"UËïÖŸ>ké¦8h|¡Ò­m{‡˜t³ü™ð²ØÖˆò¶ÅéÝ–<ýµNդ›ͩ,£?-Û^&é/²yRg#ÓçN’ §ƒF!J’]燫fÔb$iÃUIþìým“Ý6². ~¯_±¾œÐ™}lâ/žsn„ÚRk+ŽdûZê½¥˜=á)«–í:MUiW•Üv¸¿}€ääbIåÝÑî¥"A ‘È7d&q\Âmˆâ½)Ûâ"™d‘….Šˆð‚rÛ¢¼®É“9?à )žãUpÉ^Q ën ŽWSºŒ   k ‘ß\CN[yNiZl„¶<2BëuœbL ¶Zo„¶‡Ñµ?tžÐØë ² O´²›Eb:ójmFYgiZËün¦µž˜Vb™;_ RR«°Ìm}ÛÀÙÌí|3:ß–_­ó5òηß?tbÒì ¾ 1uÑ!Œ HÀvNqzªíñóÛ½c/6eS(©Êõ¤jCþ”T»6Ü ñfг8­±ÃqžTÛÊ‘ªýþ¡“ªF`oð…HUTÂã0Â# ÕÖá4!C¼çºãŠ:Åô#[ž>nÿ-_ÀÞà ’¶ZMÚÂFÝ i‹ª,ßÖ]ËSNÚ¢RyËw†´ÙHÚã÷œ´ {ƒ/HÚMí¼<ÕÁ†šÒ™·Á{󥵎õÿ™?Í¡Çè°œ¢ÙɸŽÄOtR–`þrF3Jkø.ÌÀ½Ì“ËH0‘9‚¶d¦%gÉàQïN:C¦½w“Œ=î˜ÐA bÁÔƒq´ >u`Ó¬foŒB¦Ž‹¹Ì²å”¸ÕDsÄG<•öÏ——WSøPšÙУ¤†ÐTNiX{=Š Šuc†3jÇQܳMÀGfwBâ ?„ž§Ké4Lµ‹éTo¶§ù™FrÏlv&&üìÃ{ÁÚA†ã"oÒF óÈŽµ²ó©ÎÒ3'‘{ráóÓ?7yŸ!‡qþpTDàþ`aLÂò,òÈ?së¥xEß«BUv¡›è0–“?i0‰'Ï'D:wFÖ³t:!¿M öM0Ëð{v°I?B_w:üÈÖ(Áˆæ2‚[_fЫ=æÚ&åóòô-"ZQw;­œ#Z…–<]‚:yæîö‡GÊÕÌÙqQ’sVÙ’<Ò‹}7Ao.#ªwxûüœ¦I£7”b¹:‹ø¨7¤•a'Y1úÆÒa­÷±cƒètmeŸKHŸÒg¥Æ1iã.Ÿ0§Qæ„3þ‰”Ÿq ˆ‘4z4d½$«6Ýx%§€=LMNPéÁqYl(7oí61&,ºàÒ‘SÑMØ;Oª# lFOo†GS¢–ˆ+04Èöð´‡q{ “$ô’/cEí}¢»_Cœ±Ý¦|v)z^˜dP£Q æpÎgGšIða‡$Éß(°Þ):JRªŽL/“eQ¨½2ñu ú•œÎEœf¯Ä&V °z7Êç”ÊøÙ5ÆÂéñC– âE=2SðC›¿³²…d‡Da†Ved,ÍW#‡Ü߆³CdÂUú¡åe&\®p >Ü‘àAWõQû*bàÌœÑJÀ8ê£ûc6N|Û†¥jŸªcÎ}ÖŽ¥ÜSÏRc?ݧ3üâ°P(d€’^j$·»¬˜¤êäœ y×óïÙüv“ånÀ«æÃº€óäíön [¶ˆh²ë”–©ü£âYv]^½Î(KÎtïßAÓT8 SÏ 6èl ÈFEæ¿IZИÎôZ» êÝÇÝû§±×d¥H´Þ¿®šEb:sЃ–ë’éTSàÁ§qÏI9ôÑi*ãrj:˜1ëj“¯!»¶‚y¯¢aÞ«èæüÎIÞ«hÙ|ÞkkELïZ>tâj­Ÿ¡0ïU´M¨6&TMŠ$ž9’A Å >O«$c탬™c»’ôÀª³jZvß2-7Kî] (›È•änrɹ-€”ýg-Æ)8­rÿóµQ]æa ™1elåxʨ •½¬Ü1>$ÚÜ6 ¦³¡æÌÚª2º{S»Ëü83Nÿ)ÿOw±…·é9ÊIÛÒÓó-Ô\ @”)½Á"ÊýNüãþÕ$UÁÐä@jaª‘΀.P²2<8£"Ô¨"Æ–\Eõ%HEÈÊr«"T!á²ÚáΈìÏÕnÆ¥'¸rý‰ YµðÜ™d" åHéªZ»sgó¶±í‚åý#ñSˆŸÊQ¢'Öu=OݵU:½ÿÁ“wÛ`Ó2V^o£² í·>w¼‰É…/R¼„$la6”0›í@È6õU'‡,èkéhá„!\Éå:Z&k¸E°ohˆÞ†¡ •z:蘖<*%¥AvyäÎ…Ñ×P2ä‰FCÒ›ÏïhÆ·§![*Å>ǘr³ö ©È‘ñHŽXB‡¢§ ˜Tý2 -Ô›™M΢‰Ü©­ždqeOÏLƒK:8È$ÄsBÙ9P°$³Ó°”ˆNsÈÚ™Ýnè³í(G"HÁ€Å’òuÀ_ï~¹¾8L±6÷ áE=…Þ@\È‹) èÉo‹‚.t7ÊÚ»âe( Sc¹©ñìÔÌ)bik ¯Š|…q?^”Óy¬Vp“4ÉDÇRåN°$¶,¸S‘°•)c­·Ðð$-´›À9[à6N8ŸMu43ìÍ„BÔ95‚ËñvI×…%KùH®£Ù[ê22³’Õ%c¼q”,[k­°Žö’ž¼ïMóYqîHcÃ,“‘B¼ÔY\°¡Ÿ1,)ev]M+Í+÷ö›ï<Þ¸’SûNçR}pGMoHUUWØŒÐh…úýÿ­'ÒÆ“çA8j¸Ö ]B>éñaÑ”‹[Z¨(Ëe™°_O{¶úÔP•Œ„s‚*Aýzzé÷ (‹jgÔ6‹ØZéùvË‚,ÔÕ2ÊCŽ"|/ÅÙ‡à#1¶>P0/£C®¨hdäý#NY§ø\oÅË´¸‰áe­ÝB¬2s,w~ro˜¡ŒÞèŒPùGì2çök;!¾¨­D/œ§7Ѳ!~4#Ðj&ì׿Êd¿tÝœžÐÍ¢Û‘A:_RFÕ\e4ûY”@÷6<™o¤&Š0Ÿá ¢ÅCs¥âQ?•rw¨¡j­oÿcUºtÌp…Ðå`7ˆU –„(Çd·CÄq¦oúN1¶~,³©‹VÈæ6Ää7!OÓQß6YøÑ‚&™Ms’Ìœö‹ÏïLøÞ¸³ã«Åwü4óܪ¾†ÂÖHFLöF*R›4$N_{©|ÈTþ$·;,ç2fÍÊìX`Ö´Ì••]M©¹ó܆®p{¹·ÃƒØ®:PÜ|ž YúÊ2tn_JÎn¼j ŸpÆ&`Ù>nzˆ75Úpº_—áí7œÊƒÒr÷l8,BúGµ{dAò5„²r(ñj‘óÀUÀqEV$-x«Q n1%}iN*4uMÑL@99Š X{ƒlÌÐ8u›ÜËx¢á`ˆÀµ6DÐIÿÁxÆÑ3±~dŽˆ˜Ÿâ³î›™–Þv‘3"‰z†#¥GÂŽSÕn%¶äÄ¢crNèiÕSˆ.½(Ù?[.Ŀ޴ëƒÎ—í#±ê[à…$›.ïýÈÕ‘U]ñÉ3‚ýt¾â\©u²LÅk”"+]3â% eUvw½jIœ2ƒkôfvy°¯å瀅¦Mi†^? e}O¥ävµåjSlAÛ6õsîÁìM_جª+z^ ºŠjÖÊùù¦C±ŸÏN}{ÏBÁ˜õ¥1â†7ÎîJ† ¦®Íÿ&kQE›\ÈI…ì6‡.˜º70¢£™jñ ¢úVfez³…4°àºÛr?¼=à”Prh]ˆyî~¡0^/”~¼ÅE°è®Ó!—}…Ý›ÓKQÉ|Šb˜Òù:€•k¶¾t~Í$¬ÙR³6mÈœiT2É’©Yí(Çm%3zý8:jpÔ”¤¨2áÄ©k¡jÚ1&3?$áDpèƒäÕœÛa×ùÁôSÉ h]\3¬'„sŠØØ'¶ÂÊüâŽæórˆñò¸á= Æýªpè9ŸVF5Ã?_½ýækýóòñ‹Ï¿ym³žÛ–\2òLÑ'Ýôäëo¿{ûøO/ž~óøåÓž ¯ïôU~ÕáÕW6ÿ¿¼úåúf`¡_ß¾]øŒuÃgÓ¯ï?,}Òp=ÒÍqÀJ$cpæÛ•4 zzüúۗØž¾¿¼$ÿ€i~©¥Ã#‚µÜ*, 8>«9}$è—êwŸÏ£…Ejè@ÿê—ó›ãE:^Û5&2™v²>{Ñh3£Â½WJOj4Èz’CËïŽ7ïϯŽWw·)$M³ŠÐD¬©ýúfUÇ =4ØAVütùóÇ›ã›?_ýuá ¥YôÅõßù™°ž£àñÍåÝï ¥žË_n„!kB™á“÷²®‡N®Žÿ¹”n6è·îÒ®‹xª&_Uk¥AyGtú9’p}2ÉÏ v!Z0.†•Ъ“|Á ntÚrÉx¡™¦¾‹ÿýäòYió–>#†I0iN@i«Q Äï¤[*ÉÀüº ¨ÚAnd°Ù#Å; ù±TÑþìx§%S @±ÂÄëÐÙ.µ¬ø¥.È£xÚ€H°´ÒRåɱ?ÿýxñ|0PocJˆ·±"ßÖF XGçÃÚ®ˆœ—Û?C4IžAS†ø&I¥¯œ!³|^âTÄØ[¦QCnëœSém”Í2ë 0M¸î¨²æP;J ˜ÞÈ$"Ù6÷)âAè àý¥¢† 黬 $Uh½ÞÎõhg>¾¸¸)\aj/wŒ žŠlýL)6tÇ!Z °!\*–IÛµZç~7ì)q?zóÔ‹Ñ/­ÊB_o¢MÎZŠF0ŠP ¨’Ù‚ª(TPÌЕAϨÐ*2j€¬ä±r÷9í"Wm¢•ë§l¢Å~Ó 30!Ì'ì• ¿QñЖ‰³Û]ÿÛóÁ r¯Œ4D`)“ÀšĶÈH£š® %Fжë_ïž\{>vÜ`Y( 쫯.¾7NÝR:;xûfWªM ýÅè̯üÜ^r3ëjU½NþPñx’ü)!ú’Iø´¨Š¤Ï0²JÖhЫãß^œÿxì×aÙ¬[±0²qHÖS#üY/‘xZk¥.ŒP¤M6ØÁ²2.Ê‹ã¿qÁ΢Mž^ÞÉ®nxW¸cU-õ>PÞZ0l¹ínøÙÜsòoç7Wç﩯¦£ëÀÂ(ÖÖò7oo1´RjGV ûk–wq›F-Í@o–ž ¶ú÷ÇŸÀ8´ß–d\Ú*‚$ÿ!œÖ”^„ƒ4{Ü_þzüþU ÈÔv/ý[ç~ˆWG“ú¿^þüËñöîé¯ÇââGøB´R ´ç< s ®¬Ó/é¶‹³E^jFqõº_KRšÐÊÀcO¯~}uùwÂc rûI°”ÐeMæWÓí FÖja Ùk­mR(»Ú‰¶tøè O0sÐjm4C¦¬fKüÐhaê‚𯹼…~ñuֲŒ'¤»ÛçW¿\þxyGñ”€ µÏ²rÕÓöù…”ŒžhX Ò<ñwMè;ª9ò{Ën5DárŽ—z‰`ÀKª¢ŒÊ!ÑámI €uØjïM–xú…é¨5†Ö…ª4Ðl¥Ñ~q­ÿµjß-„vy§¦žØ)è)K,ì90éi.r}uDAW¸J4 ›©’ÅDzæô5×¹mëV9Ķ®8]— àÈšÅõÏG÷Ñ‹ç¯^§<“>Sô™QÆé³fz†ícÃ~¼¹9^Ý=B;0œ˜>` <ëÀ³ô&hŒ´z†&¾åf˺%$ê-é«»ów¥ €@ ž[.Ãò 솨² bˆ<¡ÆzKõppéxÖØqº|Ga5ìÝ/oaõ퇻Ë÷ÃÞ‡¸þ—ý³`ïÇhþÀVkÔ«9 ¦·ôOצ“V¾~²þ;­y¿Y¶ó µY‘¹9Þ×éA}iânz­æisŽWºu.r¼Æ°aÃH À2ënžÙõø¯u Õ¥Á”š¨‹'O¬•Ú s±Æq/¯ŽÿùûÛ~:¿ìÁÎWæÌ¼ìOµ+‘WSˆöe¼<ÿðáòŠ$(dQ–eªÏm¼Â º¾ òÕW·ß½;/Jöÿ¢Ä³’#8=ÙVDñØ•h+Íü4+c}Ä#è2VÍ7ÈÇ\9÷ìÂÑÇFØâƒrª)ÛWÍSÍœ»…1F,Íë¿|gJWðämN&ÌÐÕ0ðž•‘÷®_a¹ž¬;.5Œï& NÇàØ(L7µÉMtdi[ïØÂÓúÚòg×TGs9 †ìœv»ç`×±m)%°n$°Cç{Ï›2ßn±Ì8çXfÔf:y:À2« Ì…É"’Ñ3 Žè³ÍS[»ÏáÍŽþ>„¾SfB×$ª—®„>c é{ëŽÿ¹r%ŠR] W ꄉP,Í/Z‡¦Aœ½ÕËMA½¼}úþÃÝïë_ïÈ1§N†r>5¾ûX)koé“aÐË+ð@QS”tL9æÞ…ÜÅñݺü9N•Ç ¼ÐÒTÚæ @JWCàj­P£±¯“ÔË~6Àj†%6â½à £]e,7pÞ¢ð[ÔŽ!C ~»¼µØŒo'gÖ‘J±>|ö“Ín:§Ç¢PàxGŸ6ÌÑ‘¸OÆ™ §1°6?¨(ð^ã̲‚ N¢Ìjå«Aô®ÑJ³ÍÈ@‚m¹Gé*'x¨€ü®zJ²¤Ž o°t:ñë6Rzyþ×ã¿ßÝ]Óø\‘“e€t#?¹ÆãfÖ¡¤«==…¥ëP6;['èÏ—7·´$žX+í£¡žï¾¹6…ŽÎo¾^¯Üâ”m—‹|{ÅC™PEG °ÊÐ÷çË~Ê›0Xv]-[Þf”•’£™)•¹EÍ@Sˆ·QÐô ‹ÞöGûöÝ»7·Ï¯þíñ ­­Çž9þfŠÿ<¿º8þVŠé2C¨ÓeàJè¯h­„²ÿëõ¥«W:ß2;`ã|%5rÜôß.iæ-ȳ¬+²i’´p5‚VŒa /ÄcåË®y§tÑ«ÝJ0Alýì˜-aCå"@àö‘Ÿßæf í#é¤9E ú”SªâeŸ2Ê%¨‡>¬€ÿ4ëÀ¡šä-ÁO©Û6›Ÿh”ÒÁtJÉßÎ/ï^ÝÁrP¹”†+zì |Ù‡ZwJš5B>Ä®š_¨?u¥¦]tûáwŸoÐÉF°¥Û`\<êoN…þ¯Ë¾Ü÷°²üªU&ƒòvØéâžn»?¦-~­دÎÝði'¦“O—¾”ã «>SæêXØEŸj‰Ê³à/dT æÏ×72Å—ªÌ™ÒèCSAlé«&ýÊ”ú]ø¨›>´MÁ¤T4Ê«?6[Êí‚QãhpÌ*@ýŸ>;—Ë«o?Þ}ø*ë5 1ÅäX~uyª¦†ßëaÉn:Þ€Éyp¸.®a‡©?lÿøÊ”‰»<ï/ÿ>üñ{Áx¦ ¦û>>rµ´ˆ,9—°]Z½Ž[‚! 1¨tdŽ*Îwfê$½úp9‰«…JŸJ´ÂKp,:+fŽ7¿“ê¾^²¢j# µ”ðzò±'„sS×z M¡Áëãí7×wfÓõ|á Ù5ÆbÒ'¾—(Tš–‰s7 ‹†=¿r‡:—¾êŒgïw·(ÃæËžT­äQŒ?[nææ8°ëñêÝ1’Mxø6þb©yeP]"Œv×èøËÕåO‹jTÙbµ#"·¨9ý2ÞrãÝr™ýù÷Çó‹%2s“í^´à Þ…CüûÍåÝ~•©ÿi Q}üÑc¾Zš‹)s:f¾Y\{ÅjúÕÒ@|Üäüþ®_l«uÖ·7ƒyqýëò v¯c$, x`¡…2µû^µ.ÿø>®íŒéT™)]o.ßid”˜ ~•ìÝKxnŒýýõõ_no ?ÒŒ©Yg©xsc9øÇ??ýírQF1ßøê¥b¬Rj|V»fÜ‹Qå¸W{'ê·_6äY×ÕM2@­K5&­ZáhB¸G¢eÉ]ÇeÒªV‚%HàgUÛÑyÖ<ah×ÔI-÷£z@*Y¥‘NjÀ£¿ŸÍ Ú1‚Ž®­TòeÝ©ŠNï&R`yç:kÇgMÕ0ô²$c6uÝ%ÍšŽ¹9ùUŒ¥xμe2Ã’Š¹Û|ÓÛÀÃŽy–“ËöNÈÞPÛ}ô*X¦W#‰ÜºøvMhF¥ÚÊK>EPhˆñ½[5n!ÆgS +j•J #ƒ;YIF!; ¹A3Y{Z{n¯bÕTÐ…Bh´Ý»Y±ð7rÇóZ>Q Éň‹W»Óüúºæ'YUö§9#7®ÇföªëËpàd¶þA£ ‡ÔŒ'ð\h b~ÔÙâ È¢ª¢àBuƒ…†’QªzçQН€‡½x3¯®ý-ÆoD½£+¶Yò7Ÿ-º}"™[Ýß&€¸Î Ä⌚,d”ìD3V‘8›¿EW¥8žß\¼¬æ F+˜NÕl;³‚7Eú´'ÕkÝŠ6³¡Ø¡ 0õiK`ùuÇË‚Ÿå‘]xYpoE áI#_Úº9+æÉ"‰WØ—,é+Øl[ºÉq¾˜' ˜¶=£7ì†3ˆö_δ *±>ó7‡P…ó@ƒ"q>†·•¿ m˜[t1ù|Ë9ÞàøÍÛP¿÷O¸'s/bgvý§]} ·L1¯é™õÙ¥F"B®[úp0M½ã„U¤àñ·3ÙÍX ¬›ñ`-Û>„&¬Åi‚j–R ½| t<{Yûn.(Áµòy€¶¼{ch#%D÷,>£T{Òz³#\)Xœ \ÈnÍà†î’&½a߆[óÐê£dÛÐ »ê`…šš„ëþs&y;®ß$Œ”nˆÎoº7M"øùtaºk- ¤Ã~wüqàiTt!ÇØý³ßŸèЭW~W·›3ûßúYc~”VOM…y éºd‰üÑ·½iFÞ…æ÷¼¼Û ûÚ<ÁŽ— ½Eê®Ú,#¯ÍüðFÁ$käyMSãþÐe¨bÎr  ’K3ox½DPiTFP ÿ{îóN¡§*!ß׼ߚ³Ù¾æá‚z=í ˜³M-›rˆ7Âd¤j´©…‘¶Ñ}OX’¸ï KFLé{E4Ÿbñ„2¼ÄºöL‰·Ÿby8¯ófÇø–P+ögt[f¾<ùV˜¤²?¡»oÜ#yAHf:·Ôg¬ûFî¼r†?qN¤Ç0Õ;{(œ<¦OBtÂ{A"ÒÐY5úGÌ­¤Í&!$)˜²?€¬ÂÝõZ²lvduâн_;º]ðü[èÄDçü•³D·ÉSA\§iäg2$µèWj"ÀnQn°}GùDè‘ ²ªN#Ô?M?jÏ€lÐY–úGuð#¾b?¸×BüqèÔbíDÂÂ~Ë oVúÓo÷Üðkì܉ƒöÌþ44E8DØ ‡(#5ÁG{˃ÿRRÇbí³»]éÏFìÊ$6RŠêÌOÍŠ6š½y[.ØŠ¬¾"Oq”Ϭ­ÔÂÿÖv^|¦µ‡_ã¡(bIï‘uYCM­:÷ã  PÎMX×rì·h@:§Úeš,ù¥’ 8&áéV,"f󮥕qêÎäØó°ó½qØk¬íÒÆ‘îy(‹Ük«cöùíE6õVC_v1rt2˜i„!º¶jlÓ.ah„„”Oõ#R& Ò4’R«àaôµ ðQõ$'T}$gqQçpÑdqÑØà× pa¦6pvø©ŒAçì@í=XŽR`ñf²ÍÇ=?L<»éÞ-Ú‰`š‰ŽòjôØ!ŧId…Šã´7¡ˆX#eìØ3°µÙ „û‡­Í3¹‡svÌ&9£®×ŒÞâåêXµJ »§.«- y+ ]˜°Ãék'¨Ä=HÔNÚ|hNy|b–NFa á–uVË%ª@÷ OGГ&z½"çrë®­­*@.bì•svL§'‚èapÔV+rÖ¶íѾaaO؇h¸Wd·+òŠG‰Í[óSÏøOu£áð}ÉÙ¾œôÍ}ßw|òZ&,R`N66å ¡¾‡ #¬±R²ù££˜Ý‡9–ͬõHÃã½ëÊÔGo2ê4:¿Rèpq‹¸F>1sBŠÕ7N'æÄ”‰5ù1>Cpª…µ¥ûÚÜ-i[Ë`º¹Þc–ÐZºã çùØ ôæ\ÝvëO?Þ˜‰ñ¬¿þñ¼whD2!¬ŒísÙ!&‡0îlž>6ÈjóÃsåüî¡\µT4uGßõoí\¡¯³¦ÚtÌi:Ôh¦™;U—žÕKÌù¥#~"d=JpR†Áù ëžZº)Ô=´­Ý13YŽóÖPµôµÅù6Y•B=#iÖKF6Âh~:°ëqgø˜OòÌM²,ÝÐbqèFä‡îîudl7rs¯#ÛÓziÂqÛqå~ܾhøStÒý³‘FŠn‚úЗóš~Ôµ§ÒÔnòMº?IØ›ˆ?¾ÍÄwæïQÍŸ‘´rà¬$ÂÐñãÙøÐŒ qUÏ[1nr„=Ù(W\JÕ€^i|¹© Ö#šï°3Ímð礥URßK;è’¿ÛäïÆ€[»‰~óñýÇçÙžÙn{u°V†‡ç‡õèM{Òü[é«â™Ötwln‚e­gf¿ÂI:ÀLõ)g!dÎ ¿9Pyœž‹Få üšÕt±¯é·ÏòÑ=íÊcÍ%3bK•?”)³nñ VV™J 7àש2ããˆæ» .DTJˆXNTf`/3-‡Vs½CÕ,‘-3s»§S©KDæ€âUÚƒ_Ȩ½^·>kmœ6‰lNIé$¤ÌMBÄí…„ìÎþÑíÕÖäÅ`¯vˆÅ ÖtnìÈ^mMž^ÛåYüT{5åhÂòˆÅ 5YÌܯ€øè4Û"±cl+հÈöúŸ÷°›°¿,`-ªJlfnŸWÀÚ…*°zÝú,{|^ÛåµD,`5ë›ö ÷,€vOw'5ÛŠ®õð¹¡jî!w:T,Oôy¡«¨=ߥ-óû‰í N‰©Ë$”\—¶B’G "LEg“óÅÅ:Æ"&|é ‡L€IúhEÒhÀš @8OJ²èm¸¡»¾=¦œ/ý2|Âí7ðuûìž =X† )!LsFá6¾=Øm|º ÐAÛ,É£d³štòQ%V-ß|)9uáƒö090|Ò9àÄÎ[¬‰›XÇ«Q‡§p¦™›i™+¸ä‚Flü4~Ú¦pS€ò¥óCaÛð‰ƒ//‚`z+*ÖFåù§"X^ͤÈ/Åíæç°ƒйóÚtnÂx\9:çÂ…£=FBIñ’µã„S1ˆA éVÃÚ›:ª×¢\lqÝ’½ÇçÁuÄ×mcZ®ŒG»§«0­ãÜ69Ü W|͹:êD6Ì–‹ì’Ʃ׻.ZÿÀIHÿ@¤}¸Ààc÷!2h ×[ã¯7•£gÖÛÅæ«3b­E–gh@¡à‰õ´ñ`[Îzʤ¢¬´ž@<> ™Þ™2˜™0q $W¤[Žè{PUMFây`0±„TtÈ4O7‹ø"º!i‹t³ÿY«ÂœwOuÍʱ¼é䇖ŽF@uãæoáF[’?T4vY“ݦtï@øä þnø†-íþ7rYáðbuáÄy']Ó%šÌ^eÒÈG!H‡e^¡›5œc'±çYʘ©‹út‚ÒÍÖ`¢­Ô a-‹vo+L±µj^"çB!‡_lZvä=ÞAa!Þi»ÈÖÜi”°ÒOך+º¶™9¸¯íZ)>;PsBû´Êtã"ìiO°¦æý-„µÜÝùS4³…ÁO0Êã˜Ó4I}!—„‹ŸÃÖªyá®O£+ D1]usÁ†…­«:#ÒiïZHétVUUg~ùš£n§ŽåsØÙhšä±ë^ÇIéÃSfóg“¬ôáEæ’³ªsr²yéç õçƒÓ;éÁÖ+¾ST¨Œ3't®Û{©“#Ê%“—·+ØÛ »ö¹ÕY*̤ôßçvh _>Ò±?r±cF7D·H™ÑU.±ït]Õ,õ‚hK§À Ðè¡Ë}+:†¡’¿Óœ¸¥ci¼vñÀ>˜ïÒ`S5–gÌßÉhþcÌœj‰Ø~üm§Ù-ž³q`P¶Ô€ôvÜл ·Ä]„v !!ËÕ–Õœê`+¼Û¶%ÈK «ð¼Æ$3ù¼^ã.MjOS†VS_cÊ17+ÍJäN,ÍŸ†k½—¢ŸçxˆoJžæ€¥÷‘Ÿìi%œíöЀê¶[‚<­I¸l^+mTìBVæWÅeQîw¬:s Ÿi2‡a!cå!Ƨä i«<„¿ÊÈ( ƵíðG1†E[PZæsÃ`»Ãz{»`aכϷÎ'hÛŒŸ3 »­ÖÇkŠLÆ} @W´Ye±ÍÊà$ÑZ'§'=R#5 n†¶É~Fë"jS£U6 –;² ?eö.ð{4Z5 ½7âÌb·X­ÝFéÞâ¾Hm§_¹6OòÅn¼ä~æA?)†ç&‚¹EPàl‘B¯¥ ô~à"óëæÇÜZZã„x™=˜Åà*!Ý(]23ßìíÜQjºî Øèk>í-ûç„ïöCfÕ·‡Ì°ÚQªU†¾Î‹Å–E‡»x¦ã(!œåGZÑ]öônrHÜËhKºhe½ƒ­P¡ö¹ '´"‰©Å’!.•BL,žÎw†\ZUÞ2›C$6<¦)J!jŠ.ŽÞP°'eÔUìÞ_[œ|‚/³Ðå\—`&a@CÃzßrîªdB¦î°"X†¥ì:pRÎ’šO¸“ëfYÿÕ+Ø)(CQÞ8lZÑG÷iÂ$;ÇDkT¯)ÝÑÝWlfØuÜ2’Ë*âý&(NšàQ5ò.ñÔáëÀ—±ðÕ¼a>Us©wËRîDŠ_¸ÎÆ‹ÉfjÐͳ©waf%kîÎ4KPQݸ4¾UôR¾â›°ãøŒÑ¡u OåçìÂÓ¬d¤ýyzÛWñ4Ëú/i~ˆVý3?Øtæ;>Ù‹}$¨dŠo§Îä(ÂcÀ<Éž½ sKÒ\×_Ð<•Pij ©Á0ïEIBBh±/õ¡L"ôF,%{y,þiA=D ÊrÞkÖ‰òwÚw²© öa[ê\C'¼æ,„Ì~Ö-cå¶‘w¤À^d¶(Äð鉻âOk/–ê “Á앪§é ŒtwTpðU/—TÙ ?ÀT[ÞåA ,\NG˜½›p™jêlnþ¬Ç•v2ÂàÃe’˜ÓÔ>{„t£x‹´£(á]NŠþ[¶m0º}¦„›ÈzKË÷¸¼ ÇOq?†ìûðƒ±».¾¬lÓ=³:Š[Ì>YábwŸfÙN?xö&˜ÉìÈs>wc!ù-Õs¨ m °í°ã°=9ÂSü»üб‘»ÞùH±(ÍUÓ†j£|2w=Ý·¾ÁÀ‚ŒÃy½e´y+cÆ®«OìPrÃ~‚½™UÄ÷éÏ÷JÙO¹£çý™=6xUûÂR  µÉxfMuúÆÌ­ØF¥Ø[pvžòtåEo‹”(ʵZE™vµ>ù q»>>ç¶pK(:˜ŸsaÿÒβ Ät­B¡€ªVÜ´0 4ŸtšfÙz2Õ µª¸…•V&1]5³À4ÉßV£6HÍA“ÃZZ(L0mŸÕ‡øLpå/†ÔWD¾zûÍ×þ—ÃþÙã×ß¾<¼úêÑÓ÷—wÃvà_žüøóÓ«»›ßÑE“>k;òh°B“'*hóêåã/žóÚ‚¾Üø9}ÒÑïÒŠµ’Ç%§w¬.jWf ¥­È§¥(á,AI]„’p zx2¼¸ûŠ«ÀW_ „ý×׿ úã‚"„“þ‡Y‘I`·dýíO1ÂXC§©PÃt¸ýxûa`±ÛÃO×7Ç_7€[1={ñüÕkóêëo¿2fp5*èãÕÅq ÷÷ƒ¿8ü:ŠáÃÇÛá¯óÛƒãQ@ÐS_4Ü‚ElxªE(9 < +ÞHf•z¥ý¬ïÎßýr$ËЦdTdæ”®‡$!Ÿ`îqºfËýûgtªÚn!æhEî¦ÅòCìfK3FÁÅž˜Ðë2ïHà ӃG×w‡ów·‡ë«vóû(ñK‡Êî‡ ¥'H¸SD‘”[òKyÿ–Û~C¬à5º<€×°\9Aò©ŠjìãöƼáÔËÆŠA/x¡’À'£Am¾Šsÿ@°w#ìßÝ\¿;^|¼9~Dzœj¶ù9‘1ãiËÕõÕtß hAdzij³}7`ýëa»Amà;.=»Uå¨tëèØÇ•‰U«šÃy\i5þ®¶`¾¿üœxóRÉ´W»±jÍGŒŽ'~é¨E[ÏŒ.éøvð‚$+t9ø¥°«6ípçŠÒnNa‡\±=Vës #[dRV Zƒ­ÚÎxrÝR{‰º°@þk;£¢_bû í:„‹W,Ú~{£5ƒî@ž(JÉ!¢ÙÁsZˆÃ}`ù‘D¥i¿U¾&?–‹Qû–¥¡€°+‚¤«˜Ä”•S Ë fKíä¡l*êøÄÙ‘ÔJ/ï#“oÿÅ<úÿøŸÿñèQ®)›þϸ¥_´®eÏÀ* ÖÒ &Á¶QÐå¬ç­ND‡öðÌ£Dh +äÄ @ìçÒ`©Fêá¿uN1–J…F“;ÙÍ¥]lv~dpÕ–¹õO°'[ Ÿ¶®†b¥¶~‹‚:›GE'4v]S"IJP¿íæà’ÁMEñ†]} àŽ/xXG'ðÀkrvqʼnÑ9¢¡RmofØcÓ°0Â~.ãÂ` ìš$¤×Å) © ÅY‘’+vSÄ(od×ìJ 5vvuè—J¥ yŠûž‹Òw?Ú/”Æ÷ib3¶:‹g»‡Ïma„?>ú9,«ûöëµ()v«EÄ qWNÇèÌç¾ó—¾O?ÿÓÚ•ÊíræDø¨‰Yl#½OŸÑt¶œD¹·Û–r#Ô÷ºÏ„EÑDi˜ŒŒ¶¨`+Ë@$- ¡Øò!õ"÷PQx­œ­¸/-P‰ð£4Dn²Ô!´Ⱥ@9Rˆ×è· JJ…,ÆH¡ùOÅ#ZômÃûÅ)Ê•œãºVÍ䮼:ï §%í—jʹã•30à _é…ºƒöVœ¥™ªâ7ºKE)Ú 1ÔWÁ©j舠X…@GA’¥DI–tWƒœø0"ÐR˜ŠÀ àùÀWеÇ=Œ:|Kwg¢C> Ô <ÂX€ã~¤Ûw رÔ4´£¤-P‚µ±Y×üѵ¾E,à[mb¤Åˆôï¿=¿º½»ùò§óÛ»Ò“® ’À5 œˆ5:}¹ö F~H¤ŸRS©A5Š6&ÿÐPl§äàãv^ïž\_}üqåIÙÂ5SÝ: T6‹€µ°Ä³¡%´, äß2$Ö©‰Ï^{±NáØU ðdÕd®¢‡U8ç©xÜ2@ 4ÌRÄïVç’¿þöÉÓÿôñ¯ž>{ùô›×cMˤÝÁUðmYËÊêªwí¯Ï/{“ÑjØjï‹ì}¤,Ÿ+>½½,_x¯maÑïü]ΦŠ^o‹æ¥ÕôZÓ k•GLTMÏ=N§of–W/ÆÞt·Æ7Åuë ‹†¥IíâuµMs]žÊ:NJL¿¶Tâøaåj9×%(wQ®˜Ú±–>ãþ[‹QÕd)()L 뜚>jX­S²7dG,¯/NënWÊ—ÕR]º¶8(3 o¨I¯l((yJîס5O‡U=i%¢:¦zIzK÷Ð)¿NE»ÉWXz_ñŸžP¦ÚO¬´0]<²ÿÎç˜üæ.(ÀB"X‹ÞÞJZXµÝPµë,ŽÊ+ád´-Žjþ$ÅQç•#¯ØT]}…rTN9Ž[×J6c³f5jZCËn_©ãz¦xµû ÷†ÊK<åŸÕuMžé²Áΰ¹=dî&!wïV|VðŒ»¶reÅf´Öö.0Én•ƒÌ] ºŠ ×ªÓ6.-siçBs”µb.m¼1ÿ'ygÉ»–büméÈ•¼ ×ržü=È{×yZÅÖç[§jJG!±ñºnDÆoߌËS}J¢_‚¨ ‚S˰ˆ7 ‹tkYÄz{›NŽ¿Ñ5‰où[6ËïomgûjJúš¹šxÐ8ÝóÑûäàÖ]Iœn)æöœ3þäÅsƒ…oO’Pj”õîªq›5ŸtûK¨Œ¹VBYCvgÀÐ>j5`bµe`7q.x׿0ç?9°èââÝv´!ÛÑË^÷‚I@(³y­P*xg!– bO¦à9•„¬“xGZë„è8„oóQ5ì÷êhž‘õWèŠ:ßKšLœ:ÁCÞïe·«Ê+û5~¯'—‹Y¯‘íÁ;¹:›_ 1œ¢Þ˜ÏB×]™ÔD€úÖ¯H2ÿCâßʲ}Ó°“S1¥NÐCg\ º¬MÌ7ž[ ƒSˆ%ÿ†AdO(Lsß÷ä¦~yye¹7ìJ²$|ÜE ^“ %ƒ,N °Üº„;’¸A `JïÃ=VrÛ9÷ˆy|7¶xrÛÑhÏêtQ‰‚«L¤O¦\ ÕØc5eüÞqi«S`µã3ŽêîM$”¥¼vñ˜ö0‰r Iq^5K9ÎVt_Ê©rälÃ#úq‚“\œÔ¥V:œC¶‹@òõ¡·¥ÎI(ôšýÎKQ(L8¦}ÚP–6L¶ —ZŽÉpÛiŒä­Gd'øJþÉY—³Æ½ü§"ú<-f2;OÛ‘3:äÒ†< 'çœн+À;'1&˜isúŒ„¨y¸º¡õlëÛX‹O{½·´ûGØ­rÁŒ`«¡‘ltã56éNÆópH7À¿€ü‰[1]ž÷:p²"qH: œ³8p⦉<"ù›ÑY'ËÙÆT&;*çSNý¿º»É/bÝ›ÌOµÜË{8}í‚-ˆ_‹`Én½Û¡1ɦڻòºÙ|Ò}þ¢÷H(޽GB5QÖ””.Ù¤ p‘÷~¹gÖ”{êâ±3>%“×0b ‡ø˜OÉ,Doñž.ˆÁ¥ÔUN&N„ùEJp@ISô4âÐyÚÃè’+ ’?¨XÙç•õ¨d²M‚ÙJâv|F´³~ÑEè)±kÓ‰33®hGfÓüîÒvŒÍè,¨Èý2ʤÐý’ìò`‹`h» ñfýÂNÕø_çJ6³.êä…I{³ª§ælx’¨¨ÕxµHbÑ"–çö}”:æ ág~’•,€-iþ“u ÕuS5‰祳?TxŽ Â<¯@׻ᚇ)ì‹—ôU”v‹N¦Ì¥ÝN'¤žÛ\Ç 3Ëßu³ïíZíËdÏ•)XÌEÜg¬‡V'!¨‘‰•úc|›{gx¹}ßöE†ú±³j¢i2Þ·ÖÏš¼ŽNÏaËÒÛgز4VÚ!q9tÁhv÷¦wDÖ¤†¼­B£70+Gy;ôí›`If" ñZ;¬«“Œ`ÿ0PqÀ(“­‰ëPä܆|ÒìsÛ3—\mõáX?@tf{=Ù”Þyã%{Ç3ŽéO>9ùu€dËÉ‹vQ ; ÿ<À†8EáfVάE«ÐzÇA¸iÛÚvÑÚ8gPb=9T%@S·×}<Ê< GG*°ZÞ?åy?Ù@i<öžT ¾%(;ë,¶;o+íÑYÞ‹tÚ¦n;u´ WgÐ{š®k"xŒ),™KcôQÖX ¸CÕ€ˆ–-sêôvP/oñ¿÷,a;NQØÝѰ/ј•kwÓôÉ¡Žv<™Šy13lã¢óíaÜÀHÆ„ÿuAíæƒÎÿ›ÙM ~V>Ͷµ“n=Ø‚n…õÕm ×ÎÓeH­çº-R íº5‹˜dÖF²Æ…cqÔe¾±‰¿mñ·zýOCꔑs€§o4ˆ÷¡š@äl§áUœÜe¼÷/ö.á 0yY–M31ì®)ë^ÔG,XuíóÛÊ{‹¨*®ö•Û€ÁRS8RsÆ¿Z­>S~c¡ÈV+Ú9ì)]W[È.+yÂeò&ymDÖŠæmŽû…¸ "³·‘‚»SÅ{›©{Ûÿ'•”.»EÖŠæ4sg®¹XŒø$RΞ˾)÷_€ Ú•Íï¡šÍ ºyKV <º!÷>xݦ¬ñ–¾cé~³âÙÊq°¨LцZxÀ7ü9'}™ÝˆÉšéIÌÎr¥lHæ²åx}/âĬæn>eev¬õ!»UÕ ²‘Ù®²^’Þ÷ùг±½ÅcŠ`c"(&Âr¦ ‚˜>‰ËŸ´[˜0å¾<+žÈdåbÉÌO’ú)ÌÎGõjõ]¶vn.ßÅÁI"¯ê &¾GG=«h„ß¹™A¾–8# @ðŒ©ËJÕŽ ir/^ÛPÊ”[HÆðTã&ìݰcûÀ­©ÎÂË8~Ò_NT»KÓpBÒ—Ýu1;·Z6þ79˺âÁÇã3áyÚÀ5´9ÃGŒ#ÓzRÆ‚œìh7åϘ# (¼šAy(¨\x/îZd¡NP§NµÐɽ@õjø{» ”•Ű #ûzŠ?„Œ½Xöp¶âÉ´µ˜Äe³ ¯oäþw[ ÂN{Ô-9¥#(AçG8æç,Kçô4“­ŸÚâ01¾Pµÿ øEUU˜bb=-¹&mÏå`ØÌÉÝÌ¡žX­â¶'‹w:¶>Ém!¢î¢H30®Ia$ªªëNÑoBBôÅß¼]DoÑ 9¯‰Òƒ„EŽÿtO t3ƒ¢R$L“™JÌF°TbZêhü–ÎJÌFï’œVoWᬑ»6D ¦¨y:HôKù”P^Y¸Ü1N|œ&¿ FRL¯EoQŸÊžÙ³´š‘O÷ïo_Ç£™›Ýw­3©âŒç7 Vßžh,»Þrét YÑú˶w+q}Õ¶±©ÙÖ©Ú:¿Z—ÖiJ/YˆkȼÍ׈í-S[s¼±è\{¼ÇÓwâi©’^¶Ð]>‹! [DU2%K§B3%‹«ù9®M*íË?àŽ¨Ï±®;|®ôÌ«l,ĉ[°h­õ±tû’6\ì­ìQlÀa]sXëÀÝ3ÏaÖïš%ð"˜á;ÃVVWtøŽÙ‡ÆxÍÈÐè…ŒWW>¥b¼#ƃW€‹èiƒiOÞ©Ôþa€›ì®¢½ñ‘Í‚;h×ÌnYií2[æËtçòíÙƒ›šûßçSþb_B?>“­c(ðÚÖ6…½7™—‰ê\¾!UÃSªl2;Q/Ü ÇVÓØ54gN³02µx¶¹1<Ñ[€òmÃýËuÕa ¢f¢שé­o5craQO“oµ—oãP]¾|÷½X¾±éÖEŠ÷T¾Á›š3e“q’ùäß…›;E4³OGÏo€åèíÔ¿@–Ƚ˜Ë*DÛÅ3.|p%‹2 |ÈÆÍâõv­# (4‘QǯeÄä"ô¶šKºÈ˜òõÜEèëLy[޶÷}>xŽcvßUçîF¯ÅtÅEŒ`dQ8o;å8ת³RûXY5>·j‡«¼_ [ãS~>Ci@,¦áÏôÄTš>pí\‘\pkÉ…¼I3+²UÊYsl æ”BRñ¤nñÐY…ÚÔ‘g´U_Á„ÅÁÝ™áñ”¿á3Þ°4À&Q™,²ß-xП…¬óÐ''yƒoJ¹ß¬VÄÍ(¥›¸Ê¤3*€Ï=°žæ²f\sšmsCÉ¥ºi3»Ú–GYè­ ÷aË’ÒnŽZPg^RæÅ¢)Lod->e÷ФbcÖ¶<=•Љ„n©ÈÂP¹—оr´×m˜´LÚú²N•}.¬S´Q¾²7ÒýÖ9ª8Ò0VùßàMÝ‚}mG¯ìm*/‹lh¨M÷\ÿpƒ`•n›/ ‚4@&-já^.–h…0j@ŠÓB•°fN ¬ÓÝhr±Uóøêp9âϯȖՈë=´;á\ 2«y‹@\}¾øíaæZ»U[•Å^úÒû®x§c4®ªšÅèZ‡²‚!¾f§aœcƒYa[ Ö*³¼±fúä|*ú8šŠeЏ­\î&)Ï¿Úî‹2G¬ïìãÈž€G¨å‚R§ÌÝé@rI2`»áÏ}Ý&§6Ík ã9¡±êÂ],&é}¹ñ“H^; ÐËî#«v¶|Eñ:Áid¨ÄÖ=˜®èu6Ñù“óF[p¹‰ï漩X,dâŽwhK6×è™ …FfKÒpoi» Λ†eÂ<;9oìE–ãªw„dƒïÞ¢7Ż՜ӉWãmSB#ÓoS àjЦΟB8}¤!°!¢X^#l!>ý€Ê~CŒFR¥c%ŽT‘ÿ±câ°:¡°‘bÉÿX˜PÈÌqA 1Í)zˆZ]ºÅR磪£’ï1‚S­ÖÆXr>*9®`;u´¹·Ï‰º %¬P s¡ž˜Û‹j¿·Ï*ªíŽ Å š/_9â}zÍ”º'Í Ý¿¡˜Æð€—_—yßÛCNžê܉јêG’J%!–ù–ÊßNö€vZ†{˶Pøn(ŠÒ¨—Ðkêø¾ÎTÝ_Y‚¨Q]ÆË?#fm†nï¿~ðbV£°·Ãb¶njŒJÏȦx¦{¦ß¾zûÍ×þ—¬ž=~ýíËë¯=}y7Ðû¿èß¿ ¬ty¼ýR£ùQúù Uý“W/¿xñü›×®Ù‘Æg5§y¤ª.}¶}"d\q•>k»†ŒH@ÍNžÓ‰‚É+údyšôÅ ìèø`Ž\×*J{ÓI°¤Ý°-^ ×üz81õ§—ýÝåÕ·ïÖ\KcŒRÊ 4F´Ëœ(¹ÉŽTDnE 摵0›ršÌ Ñv€ÄèuÁ\¶€¬9AÒð ÐÅoù·°`‰†r@!ë ö,àêÓˆññÍÏ+¹«EXÜÌ]`MNŸ’äõ&ÖÊ#¡HÄ5-y³²X {Òž /î4¦š»‘™ ° fŸï°:, âùSNÚ.5÷*ÄÑh̰Ýë¿|gnÁbé$kå'©oˆŠ§’ö);ÂÃð¥ÐbYg ¾Eí…¥hÉ Æ=™¶DÚPy®_[ù-mß02A…9áCž5w8Ò¿ÿ¦…Ð÷Çó‹•’UéÉb»…`ö”©™JZ$SkBIy„ìf› h•¬ÕFã”6b?+39,„wkì°Ž¶£ 4)÷Ôö`Nš RôdéOSôòþ½Šh#•q>ôOÕâ8Ï›²š÷Ð×# ÜNÚ~»Þ®Ç®žÖžæýÝÍõ»ãÅÇ›ã÷ÇŸJ(>/Xêjœ¯O/#+ö’HMBuÚªÚMþûÍ`T¬”]Ä“ô龦i.@vQߨi²«Ì²ÉÝ„€Eë?´#ß"½»j_}üÑjƒÞµ»Ú pãvZÈ9yBˆ`H¯¥£2C ÂõÕä!¿§É3æ½nñtY =ojŒçƒ¬ç}=MWDÀe¶2Å@éFî¼€úàtú§!y%Å´E6W±Y»ód«oõ Ósi^&‰òÄ{u cAÑJt< ”ßßõkµÙuQ)â6έ&ï4æoöcþB8c´7äÝÞ|V2ÍÒéP ëWæqc(d”qÀ£ª€üJ™›ò2]*Q/FH§ÁIÞÉ®n8 ìDÓ+úbƒ¸È,3@-ÒcàEYæYb(é„Ч+¥É·7ÇŸ³Ò²mèâŸ$O•íÓ<\Ü7àÞóv£¨L!¾Ý»s5üÿ“cþûñâùÕåÚ¹¾ŸjO’8Ù©—NÄÆ›m”ÑÐïÂfTRàÞ€‡;ƒxø´Tiæ¶gµØÑÄCºNHËÀP7ÏŒ$ôHv¾^pWMW¨æÉòœº@Þ)Q$ò÷›C‘½k˜¹9­dί¯¯~ºüùãÍñ͟ίþºRа=½*@œ4¤¶mÊ!h5ͬÉá©FÃfû½È®Í.Yµ_Ì­ªF·›rôYéMQh«$`‘¢,W¦(&¢h˜îM@VnG ;©¸ ®°¶¢–ßýÒÎÀØH‰=²ÎlL)H]¡¨.¥‡Ò¬7c-2•Š’ãà6‡ÐíD­ ºÊp{è›]·­5²kÇÏ ÛR/7¢'ˆ(NõðâÍÙØºG;n‡]Æ«ãÝ㛟?¾?^­Ý/Õˆ NØ/ê-gŒ˜jßM´ªvKDÌâèŸEÁ”&¾oöt"ÍÑüµK¥Ö@¥²|'øæò&NÃj¹•¡[-@©YPÊ2ÞËŒèí¾f´–ý€Æ+‰R‰€x(§¿"æÔ0š™Åtá8"5Ï?|è/ß›ÓR·o?¯.n?]ß=ÞGS ñÅóW¯Í«¯¿ýþ‰oÓ7Pã¹#>ÁÃC0n\Ï£àùÇ«‹ã Ôß_^/¿º '}>løûQÐ×4*Y˜„¬ s޲:¯Ú›dƒž¥‡¤ Ȧ¡ÒoO>µ-"WªÍ‘M‹–ˆUAÑWž/«ª=Ý›Õh©pÏMC"Ëôe €•EŸž`¿—nœŠ‡XîW4bá­9Ãé—Ó3®Ž7—ïôŸúØï:;_î*£vøi“¦>ÕE¦>2÷h Pßϯ[€bÀdàÓ:4-3ju%ƒÚì"ƒÝy;#é^uûe.Ž‚'(Mi  €¸"—Ô¤›Á ùè…~+´-ƒùb º?ålÑN"¦y‘É`+)x'yV&1üêâåíÏ'Š-“»j{Z)‘^Ú.ÁaóDP'´[eob¿#ù!ö;µAÝ“ÙA‹Â‚'Í«Ûïô(å¿"b›9…!uFõ£oüßÇww_\ÿfÿ…N3•ˆØ*§àIzUÒ;ð¦ƒ3áÙ…iï‘à fã4×x‘Ëô!N’uk)\ˆÃÀ¬[ÊêA«H)Ãýå uo¿øñ÷»ã»ë‹ã¿Ý¾¼Ä1puSÜ€-:Ѓ+õÀë›ß__ÿåöøøv“ZÃIÉæ§f’é åFÀ+L„ûm~‚·•¬)#c´nþv%–uU¡ßW úD(»Låâm#Žì´Ë¶K'™rÇÓ1 xž5%ɧûñãÏO»$G1;pš²£žTó¼t›Ñc ôÑJ"zâæ·’PØã„Ô±SyÁO… ¶ÃËNÔߨ›ö«Dv?üpuwóûi†Ð\ÉeŽ«RމöëoŸ<ýáñ÷Oÿðêé³—O¿y–_e¸üj­l™ñÚ_&\Ï¥­TÈ㚸amtX°“b…ÅÐÝíu‹«Ý×é½¾eÎAudRj•E÷ãÜÉ7A Ðg÷^Ö¥fY°P±I]d²·5%a ÐfC кÍ`nxR´=¬¾Ö¼iª¨´~áµæL#ÞNÕvðàË€j,öi¸ h'»CÀR6QP÷,ª¶ì.V KÝÚ®Mí×Ë«þòêøøn„\šÐ±qae|iBÇl1Ýá9­×Ê|×O®ï¨)‚Üc?JEøãSRkÖ‚ß².ìÆ"Ê]ŽæJ;3£;A“++£KÀò•ŸÃix¹ÁÏ#‰•T~vàFWVÝ×0M—H,K,û¾ X:£è¦–üÍ)ð‚ÎI·Le'†8«ëd‚–×W‰+YwtIŠ`Kõ­˜W ö=¼Šš\’Üb3²kËÕÚÕ]_¦w~ÿôîîN‰½ãïÞD_týG¢yuµ‚~®*¾Eò´û¤2`ÎÝ者ˆ^OoiÑ8°*¢ËcûQª“Ëæâ›Ä¤¶m³%ÐáíÛÛïá ×hÍ(¶"íCz…½ËQí#ªS6¢º®˜½a‡õFTg̽ÕF”šhÚ‹шÒXì-Ò Õ2Þ¢`35¢ü…ã©í™¤í˜ ÿë„°þ»ªý*´Uå–Òì£ôßãªèe^ ¤ÅîÉõp3·B˜nã»gõŽ3 £{¦ÚJºßÅmU‘^½ÝÒÌéÖ²{¸÷gi»¦‚UOÖ®1¤«”ZFJhÛ‘::ß·¡žªûé(-pÂäÓÝÏc§{“S( ]õ~œe=¼ #pD¬jK[²… G{à„ìÐïÖ ý–‰ ý–Õñަuwå­ú-“Ñ-9¥B¿vBìà¡ }ƒÅÞ" }ц¶c€ÍÚã,ž~ |s4°‰¢Û@E0”»dÇ_Šînë± «£‡î×ïfB]dëŽÏÆIv‰’±¾=K}sáÆ&ÒÁý”ãzXÅÄ+B—æÒ¢–«“Ûi¸J¼z/“ 7s´š^·Þ^ _PäK„|Ç&Ö 4ð·Ph™.UMˆ­÷€Ýƒ_o-•ë5é휑›èB­Lîq‹6¹þÂ*¸ñ &×T‡[;kê9’¯,ßçBjkYJmÖüUÈLµ¹ûåa™Ú–%Àˆ& pWbÍ-DknÕÐ!LcÄVeˆµ¼.øˆXoÚ²ÐNwžõö“Y±`»Úy× $Ñ’½”‚%À–÷¶8lzWñéÖ§< ,¨ë΂Û«•%„uÁd¾Z¹Õ¿@U•S Èd <Жä¥qSÌX%'uÛôÁ[%Q½Å ¶J¤RAo¸Çc2ýQ™%~úÅXèJ™ÛÇ…Z•ì XÒžNXÚ‹¼õ¼ µÁÅY 6Y“`ˆ¥6U…ž»yë d«_d nñ\¸^®=ŒîÙñëO‡…½Å¦CÝÔ rÒ°ñôý…Žσ ‡îíH2à®q2 “”QËh:|ƒ¿¬U2¶¢ ·NÝÁmlž8Á­%&Ž& :Øtt:}Ì2ºæ•z™šÊÊþ†wTªaïØèööòç«òˆ¸e´¬º‰–1½'6xêvB‰]íý‡i±Î&ãC‘ëX«°/úÚí Åa&ËÁ_úÝÚäŒ4–ëlHåuƒI !uíž½ æ”uÊØc¸iÉ‚‹la›ìí«ã"Cä À"`çä‰&œ—[rjà¯Ê2)¼DÝ,[o™ªø48¡Ì±·faòH·<{¿þWxåm,(ßj»Ålp¤FŠ š§ÉDjÚ&ŠÔðJÍYÀ9ÍÓlŠÔ˜¨ÆH@ˆHÁbo‘†5O+BWt‚M¦O"5˜'ÊÎÙû¶36s/à!*A¶[ä‘+Žç<õ-’åJneÆý<ŒS²Ú@É­Úâ~æÌS²íàÁS²Æbo‘†)Y»‰(ÙaSzœÅÓî+³i~=¶·Ö€»Ã·—’Ú6IºóÎèÉéÜñÎþVŸ»}nWcx~CRat§8DÞ6bS8Í:ëˆí\Òi~ªÝ}(¥l.ÆI4V¸u4€b˜Um`ÖŽf¿Yfíµcö?åÌj i.A¬ù ÿr3ƒÞ÷ùàù·S#¸MÔU>ÛQÄV€dO‚ÿší𵄍ã|£± JÛì*^/~Í`&wÓj]ÐYcÈT#²A½ž ºJ‘jc‘ÑÅ¡Æ%Å­ÐYƒŒ‹¶†¥:K¡,xÍÁ)d°Ø[¤ašg*¶¾"l¦Ö—{¦ÎPjLÇ÷¿ÆéX5å/øgÞÓi\FºÍY˜Ó‘G›Ž ,§¡hpÎÀ™ÇCÓ­À~Ÿ¶Á †ÙøÂ' :úè-9@Þp\ c5¶:;ÖÅVg»Ás×±f“Õé ŒO6~! .ÁmV'êî؇Zñ½"ýº-˜ßc¾ ï1]mŽH\ÁMgà$$®ÁÏÁÖ0>r1’IÁ‰ÏÂ什¼#¬Tëhé&#Õ6¤%w] k!ñªªb–ÙQ­5$º6s¦wF¤™Z86z ä!Š4ÂÞb ‰´áEÃó¨LEšÓ%Bœå7Pžòß„´E £ 3‹édÏúëÏûÃä—YÈþõVMh©è¬ü–`eÞAšZþËó“[®HÒ{ÈJíw»®½]FÈvës2‡¾Zx*‰WŒOD¡i¥Yç¹¶“*Ÿ°*9Ƥ46bÛçgF‹ØÞâ3#÷!9#$LJìȶ™2Q^Êt–׌ÇkúM¬ÎSFË-Q¦÷ü¡Y¿Ó¾_{À ºIüÐ$W;k w» yí¬]ླྀÑÁÏH.»ÀÑÃÚ¥ö2‡pJùšâ{KàPL­O¸ú’Ä%hÅÔø¶bª]o ÔÓúBë@ØÅëý×^ iöcX 9•LßÄflWR¢™!²bë Ü-Y“0kîÂй§‹uõvè®Wk­9‘a£õ©°C_96 uëO…l`#îÙHü1ØHŒl$rl$™À¨§“…¯ª‘ÚØ+j XÚÅ“ ñ1’©d¤®”!Óõ©ªC_Ôf²d*ëh3XY«ÈÔ²¼”SH¶ÜÃ%\ªªëàÁSªõ°¬‰‰o)U5a”!À&²@í•“ó.Z„/Øñj`µn·@7œÎŠ)58“œôØàT,q¯18Uxt768Uzªw‹ÝWè§®´a¤—·Á†7.¶™Ò,ð˜ç*ç: XXÜÀÄ´(¤]ÛÍ•j°ÐYŸ];ôÕf„NÍÙ!:l}$kè½uét£<8Ýh¿~ðG£°·Ã§áF%’8îôÑœe ‹‘Z/I-ˆ‚¶KQû:ÂasªÖ)‘ZÅ%Gcįc¦x3èÄO¢P•dò¯ñÃâèY÷v’T>ç+8;\ç­ gÁ5˜’H|X cjÌKåÀ·&‚QËåSJëäÄ&·"¹Á¥ ÕúÔM} †ï†QéBÎùús8C'›J —ºé:xð¢¦V 7¸t!¯ZöŒÇØDf8LÝU-î7|7-ÀN– ZtÔz~ßpˆÆBÜ^#5æöÀ,ú¶ÏwžžIJy}ã`q•ù¢ÀØ‚¼hLÝ0C|P^¬Ï-úÂçö†ñ¹=.Ö_—sÓ¹=ár ]^^´ÊZ->·ÇYÅ¢S?6An¡€¹…Ÿ<Ü?]Ÿ7¬D¢³^Ÿœ8ô…KésQN—ë¢#óm*uf8KYðþ¥Î,{‹´Œèì¢26Ñ®Îå'Â#ž‰È{ËDDëOCŸå7ˆ!V 6µÌ¼ )®OÚãŒU°ÅðBN F#O­³ú™í„OW}•zÌŽ×ÂÆÿ÷|Yöc˜9Ï dìùX¹¢b¹‚IÒcMF̺ã®^Å[%üïs2k˜L]G˜gÝH358 TØlú;ÞïÄ mILŒ" ±7SðM®?3to†ˆó´ý¤R‡ƒx "H—r„”c͵>nèKd4ob£ß\’²V\p•1Ífąˆs_?xq¡QØ[Œaq!*5Êtú‰ÚšU/¹,úØ„U û¢èÂøjn~b²Û ÆËP±Á´2 sœ­Øb0I³s¶àáêòÁ¥;wKyRÄ·¹jnI§NoÞ)`°šƒ-ñC&µ*¨O¿r®j½“5&uý‡°LêѳS·Ø2ÙCÈjè±Â¤ÑVÆîWla ËoeVl‘â0lû|ðò¥õÀ»Þ°ú0qL€`6ùjãùs7Í(ݧÅŠéΰš>å‡o+ǃ\ÖNMÔþYÝVí3îˈLÏšÊ-§vþ ÜÔN´’´믙žM’Ó?c>ÿŒ5qàÍŽëKˆýÕ‚ô§Z÷í4_åÓü·úNsåË3LߊŠ>“œXxâÔ õFÚÍE㯴‹¢sàr‚É×xÿTHt3Š -NóÒ7/sa©Oè%x‹ÌÞdr÷ô4ŸÁp†p^áì]y½ã³.µøì-ú°ZõMÕj>x*ôÁSt9â@­ÜzÌ[žOZÞ¨ÐU믜ÉQ#G»JƘèÑ‚}¿ﭼߣ·2`†¥|¬‚Ò¹: òºÃéÖN‡bÚ²—^¾®š~á¦+!8ÕùŸžµ¾r–µ¾Û:—pé&ÀFDÍ& 8šs ñÑœeŽUº2|îÓ¤Êx¼Šdaô !¦šs7‘œÅ°Žp;6'tÿÁì³*wÂMT>ž#F[¶O–|Ȳøv |;ùÔ‚» &%>éêŒ2¦‚»­¡¿š+ÊàÁäÝ9FòÒ뜬b1mtEË) BA)6TæUÝúßЀ¬>ŸL’gÕdàZøx·@æõaRY’lúñÀ’î —#’t°vÁ§ ‘µÁ«ˆ¦Ø,Õ©Cbº4‡¬~£¹xÜôÐäæþ‰ïßù. J޶U~^’LÙb±N°˜í3—óè¯çÐß  %Z¬{[›:ÖŽ ÔNδ( z§ÜÉ{ ®/J0;X¶.¸¼·àö:{Ý[Œ`?´½…v,­ÿbbp¤]³„ ò¬#U®ª’̆çA€Ú”Øã;A»´®z¨ ‰jɄɘX‹ªc4U½”?‹}-ÔG4N]Ô*ù{ÞPn¶a§'?x®µøÃ€ÚžîßÔã£bn£àöø‘¥wöÒlи˜fHF³ŒÔ+(RúiKž£ÈÔâÆ:s.t‘7ÛÞL°Ü- ®çüt‘¢¬( Õq>н f‚ÌÚcÎ}î¼Þþé[÷Ô™ƒ‰æ¢42k‡9[°Ã”*Œv˜ŠjPFÓT¶l oIwT~á0&tªp†ÒC‰UÒœãÙùPÌꥵÛÙTŒ ’Kò*äì,«y6žh)£¥|™¬\*ÿR¾tÁÌ—õ&¾Tm,ö©ü“eÂÎtÖ‘cäÌF<}h~5Ð&à+Ÿ-™^88|Ë™ÿ R9†Á¢{plæ£d#@9Ëk¿ÓzÐ%Ka‡Axv›õIcqf{»¤óª~•ñ™Sõ }Æ™7‘$q¶éêS“™c’d§ì”Ò:V«ÛÜ¥Ì%áðB<5ŽæG~é"ý½ÍL:ÙæJlªx“ñÁ”w cÃBÚÁ¬û\o(»ÃŽë>óÆßceÐ%Œ OÎçéXC£‘Ôeç鸧ŽT>“½cd³‘0qó¥ï|÷½)Þ­÷±cmz€w÷˜Ìÿ€ g„‰;Va´Ý˜äSrlOkÏOéçdU\ß0fehÎvaS ‡.4‘³7ä[>}[Må¶Â Ëœem·æv@Ù”¾i÷hÇÊÛÑÁ=g”3 ƒ™©ÝSåTOŒ õÞ$Ýj§áDÞÚâRC“¤<ÚŒþ’)T¤^œ¯½pj½¸º¬d5Û)ßÖžwq*"Ë#Ædçl¡)0@‡,Ÿ¶»‡äóLæëö|Q#»z+ª ÚP–‰w'Ÿó..š/Ù=Ô)*ÛöÔC†ý¬êèÓQi|÷½P‰JEÙ—Þ§³Éü‰ʉ¡ /˜±ÛYOÙÆ"©O†ŽæäMêR‰$|>˜åέö2ÈZ›*kÎÉ/§>ÖÉ/y(—_.e"/¿F‰;Ÿö‘íWMýÊia&¹­ǪVãÛeŸ•‹jxnAPðÉzC'QÑJfF æ3æ¬âŽÂuÊ i©¸rXËÐŒ´ÑƒwèöP˜Òà¶·¨Ä†y§‰Œq ª?ɰúSV[´3N/ŒuîØd…MF¼Ë7ofî½*¢ÙfCÁdŽfã+ë¤XWOÜŠiò¶²hã!‹±ÏO°±½Å#&X[­À{ù&OåDâé;‚¼~Üö%G|{/_eŸÛí¾`– óoüYñÈ«:%\rЛê ÎR¹^¦$˜7c5u2;$Q+ÂZ¥ùBô–£h1ëçÑhÎןԭhˆª·4%„fAð†HV+ ‹Íg¹á!1%œ* Z/ 8½’ÑKÿ¯ÅðïWo¿ùzz¤$yÆH#ÉÚéÙã×ß¾<¼úêÑÓ÷—w«üËw7Ç‹ËwwßoÞüùA¦ÏÚ®!ƒòô‰ Ú¼zùøÅ‹çß¼¶HWóŽŸÓ'…MV¼´Ö  E˜-i´ü ã¶ÿ|}ó'SÓçxû¥¦‚ý,[€D^“eÁD´<é SB´DÀ.¢¥B=øO†wúE;Àq~õû‡~ç×ýô‰=ÄÉÚ…â”jOY(‚¿“çƒV‰,Ié*щ­a½¶¬è ‚¤ƒ”DF…îܬ…üJaû]§§ƒèƒ€|šF`äãíá$„©¨%LPÊjÐ}`LÐBÿSøã›Ÿ¢XGÜ:^³'qS$Ÿ0DØy¥‚AKר+`Á>®ÛeÆÎ®Õ‚›ùK´tö ÿ…uçT2ñòYÖE´V—I‘ƒ,¦[û*QìØÚÅèìÙÕ ïuöI~TŒ/>»/³TBEæ TRÄá˜(–ŠDyÛ!ᳩ/ þF¸:ð]ÛñÑ!º¡ý)bô¡G 5 ‹&p¯˜¾WÔßóZHªÇ²ŒÄ€]~¿Œ$êreP]‰ÊC(.°Ëô°hO®ª@VT wQ6°$+¢¤ú fƒ fÈð ÑUz€Y”¶è(§wŒKé—u ñC§w³ý¶‚¯>þ¸ÒR®Š¼bÅ–òò.`ÅT¨¥,ÒßI[@Aiwû—y&J t ˜ØÏ«´ŽJ8e«¨,âæy¡{¿“H„…¼¯ßø!’Èëãû+i¤-RF¥4BWqûDÀŽ›òýiDÒm‹ˆL]—.‚# ºû”¤ó§—ýÝåÕ·ï>|¼[ICÔl;EÃäô!¥DÀ)sßHº·@Ï”ÍJ¼ƒ³sûóÍñøfíòìÊâm[¦˜›í9ä”m·27\J”+Å üT½¢ÌÎl XíôS8ÄúUZoq¨"ìTPŠØ6 @l|£EZ¶œŠ“M“ lA¿Üaå^ßœ_Ýþt¼Ù` £æ„å£8>a&h · p°8HÊþf(@A{Þ÷AAÜ›_ iÀpúŒœ »çukäòNuFÈJj{nO5œ0`.ÐPF¡¹œ’9 ÛQ­P¸Œpç¿¥9÷øêBç\ž÷—þø}ƒBxÙnªÐ%Ûqf@ Q#°Ô¢îðì-¶¡þÕ/×7w/.=^l0×Û% ˆ)ì1'YÞfdÒC(#ËhÅ¢ô†áJ¦Ïо©('}ºõ¯¹¼Ð¿ABUE¡‚bÏë©&R~^ÈÇFà,MX@áåý9|ýr08Á}UâqY?'d»nUD$˜†gò{`«·ˆ¬Ýwq/SBÞ¢®Ç­b}Ä6ÞCþÑ$òÆGFÇ N­S}ŽélËS¹Ú¿õú/ß½xjNfø.LºÈÍí‡Ë¾×£_ßœßü>õÙÑ5­iΘ ³;þöáæx{«EÜ]_Þ]¿ÿÐûnŽ?_ÞÓ¾=ûåüãðÏ‹Gôëw×ÇÃÏÇ«ã͹9WÑ_È2ÿ$Øéhúã=‰°WŽVݾŽî“5h<DrÛþ¡Ñ{ßûß [^¦v=›Qn\1DTÛ"µ™…Û¾À…ý­œÿ÷ÇÛãͯG=÷•‡7XY²`ñJî9`ÐP²/“ Û#ƒDGíÖpË)HªoNšÝˆÎvlžìOyvÜÀOr»•u²¤'¨™’L5Cd#2îå⨠8Ú†ºÑäð©¤9âÃ3@YèY!9whã ¾ý¼d¿ÞoȪ]½ 'ÇXÆI ²ß¶§@É\¥Ò­ú ¬p‚Ø}ØóQ «8Õ¾c'o‚ìP4fcx87ïf·|ëchk ÷N@'+àãlŠ’¹Wb[ÿúP˜Ù˯¤tfò„Ì©>:”™´’$H‰/>] dÅH‰Z‰'×ÇÛo®ï¾}÷îãÍóµ‹K½J'¥ÿœº¸ñ\P@dÛÑõüü‹DcÑ9‚Ó¨‰ÂEGï…žžß¾Hh%¡xø QSO¹Û9 œmæ<‡mžS•ãóÛ?_Þ¬GÿžŽ €¤m“@øßV $;qÄO©I…Ì_Ð?m‡|­¥½!ã%eÒcÆ(“„ŠpÜ–èA˜àx‚ %.!GšÃɵiôïã‹‹A_¼¸~wÞ?½úu%óЬǓ˜gƒ-žâ£.ÝS{yþ»ó7€û•1™jß½:8u¸Ã”P祊&~²ëîdñq½¾Z).+s‚è8Ýu+QZíZ\b˜øŽE‰)lº9 ¼9ÖùúÛ'OxüýÓÇ?¼zúìåÓo^? ñºâvo lãñÂßÎ%âÊÛî1óS¶u±Ã; ‚šîÌöfïk~ám µÏ…¹]'¬éÎ%wÃÅ(ðyĈ±ú¼0—’ÒòæôØåòæBÉLyó..o®Ôªòæ#n›Š2¯æ ™ëRýÂÂÖü.ü1(ì-Æ0½JÙaT¢;8üÝ@gÁ…?ÑÕ;ñeV¼ã-ÖÜe=îJ€ñ‚Ðx9ÈC†&בû®Ü0Ò}ìoz«â/ImÏÑ—î  äË©Au ×ë,­UgYHJ|WˆØÀBReî Ñ¡¥pÝëj ÉÆÝ›[ÌBªò,d¿~ð,¤QØ[Œaª+‰Q nQþš«…ËT[Ÿ¥—/„'Éðööò竱Uryœvò™©V´Ù“OÊZåQePÔ[Œ@:mÖÓ©¬jr­çH§Ýdk´³u÷¦2ÛI3©²RÓBFÓbüú¡S°Aao1†)˜ñz•éôÇå}qy{÷fšl4…[z×ä¬ ôò¼.2Óé-ôÚÖ^mV²©ÀìºäoV¥Ò/XºŠL¤dú@¥êôA:Ö¦RHy )O!å„ÞRHy )O!å)¤<…”§òR‘B*RHE ©H!)¤"…T¤ŠR‘B*RHe ©L!•)¤2…T¦ÊR™B*SHe ©L!U)¤*…T¥ªR•BªRHU ©J!U)¤*…´N!­SHëÒ:…´N!­SHëÒ:…´N!­SH›Ò&…´I!mRH›Ò&…´I!mRH›È®6Û:¬Ð“G‚>’ô‘:#v¼XÞkôìD[ `o‘ghxòì@Ã+³6cÖ[!…iw7jd#3Æ¥ŸTc{eß}ûÓŸ/ûãáøÕ Â^<õÚk2inlˆ™™dš‚R…qù1;`LXL-îÊÒ± ó¸Á]gàÙ†lÿu©ÖЦ¶Tâa tùÍEgŠòHK²þÃó´sÎ6 :#C@ƒÍN.þý¿.ûþñTêríUÑ \ítJæý©Ç)è|PVà¶‹8ó8Øïî˜{¢?——IP"€•UJ€5êQU„½2ìq-Ú;äT_¢ÍP¥&Êz…:¬L¦X_¼éîúF«åïÇZ{/Ï?|¸¼úyíâàÖSrôNÍÊÏÏ ñõfÝJ'ÈÐÉEºp ºQåFø)"HÐ¬ä”ÆÇÉÅÏݤ[œ@R§Z ™I¡ãþû^ïÿÞª'(UüSº:9›ÏJ†@ ê'”+8µ-ž⇭gPï]¾Þ›ô;m¡w®KqrýW:!t™À6©¯8,.8RT‰tåtÇ{Ýt)´ÕU«àv{aé¾ûþÛ¯c·cj˜xcòœ 2³íL†¯¬x­DÝH—TáÃÈã¿Mh¢spiN©Å‡±=Á/ÿr{¼¹ýòæüÃ/_^=ö_¾¿þûÅííÿñæüêÝ/ú¯ó›»/o9¿9~Ù_þø¥.Ä|Ùo¾||{{|ÿãð¯/®ÿþ(ÄOµ{…è¿"Á~xa!› ÷ËC¹ B £í»›ëwÇ‹ZØü4’Áã?½zýý0Ø÷o‡vЦ¯½ˆÒ^ˆ {#4ÄŸ¼â0ßñ³Cx2! ›÷êÀx7FKC8g»lÀ³ô@ª~¦WÙ§‘yÏt ð©Y&…¸géÌû0›H’De-¹ÞŸß½ûÅ-‹¦/ÑèD%!\Ϋ¤ÑD)ÄxèuÌEO<è¹¾4 5-U€ðéõ[·pâÓ…x•ãÇz3rÃÚƒ¼Ç™Dîä¡cª·ÓßÀd|;²‰q˜€§ÒdìgQ\]Í&±)·„ >!™ôäsfE¥v͘ués³P4@Óe¯©R§lÜ!J“æ&G„¶€:Ý)Oš;LÞëSßÚfÐËfb¦0‹<:¶âÈ×¥Õ5˜HÝ3úÚ¨ äPðZ¯ÌQàP*¹ôüˆbòT^Ÿ@åül •×g„ÊU@錾æ¯ÊpJî¸B@%Í<¥¥ˆ]½‰ Ôä©4³gReCΚ‚S*\øÆ­a έ“'¸1=5F³ãÿèÌÔÛCV9æe§Œä©+÷b:¥4IzIé¬ >ãô5Z¢èœ¦:‡õ=¨.¸ñmÀY…甦:§¿U‹èŽÒ‘¦ ^Ó ¤#]%+ £. #peÐé¿0$h¥NÕ­¯+QÂ0`ÝÕ©6–šž[6þ¿eÃ_Míÿå4´2™óªi8)K‘Ó0Êö*n¿²ÿÈÕP³Î›jî8dzþúÇó>`ƒÅëëÞ6Ç ¾„µ|jÜĬùƒ•SrzhNœ=Úk`Ч+¦ÉsÓ”fšu¶DÄ'¦I­ýü`Ôð$²“~뤷˜¦á‰Ý×yËí3e$LVÙ³›~—æÖq¶NcÒÞ‰ÎtJÓ@`ˆ& rÛa"ÙÈ´!بfüÿÑêÒ‰é_ÜýKú)ÿ/>ýË!µJh2µ}²Ð™œûíÅÊþÅÊþåÊþåÊþÕÊþMd¦,::+9QÚdpÎÚñ°MD¾)é¶ 9,fó4 íÀðaFº%›o»eÕƒÛëE¢Oõ m…Vvúÿ•Œ–ÇÂØÕVÀþçŠ]ž[ý9›hëj\e;ãAg®£xG燜¨­‚öð¥3ž-ù„Š7G>v Sû¥Íz+;€öo¿²a^“J[hvuvÖ 焪 ÜŠøÔã£Ï™i†p¦Í3æÿ2Ž4R%¡q ŽäGAÓ©uÇvsÔÿ„ÓÔËœ/ñ9}“‹ ÓÐÕÌaRam@8b„ni¨:ãŒxü kp–pcµZÅF¥ñ@ðV¦¨­1Ø»:_hìõY˜/Új‰éÌ+Dôœ(±øp“•x™Ÿ•)䥡GDÆàŽjÊ:X…  àº;¬¦2Q­®R»ÒjãǞʺÊ˱ôª™Eb:s@>Yw¤Ñq¶¶¶·dÇ¿ï“mýq=3HùÍg–E圬ÂÂ1¬‘‡Õ&€hãmh¡  G0|f¿èD¨Ø|A"”¾ð2fjPA z±Âºpk”¤4n ¤žùtjÕ8ê J µÖª »"¨Jg^ZÊ×Ú’ }Ì’íºBq† ê$Í0ÔR ·wr±7¾¦ìÏRŠà)5Á{3NÄe™·;ø³ÄQÅã (`?u)tC½¡ƒ³ä>×Yx«`V׊ÄÐÍèùl£¬0©iíX#LšØ¤êøŒ0É(Å:0©J•¢áמªMZ,b<»Øâð—;,pˆa·¿LÑâUœV>qŠø£7óÆý _¨‘óy%Ã¥]ëD¡ð­xê¸æsJÿa#’Y§Ò¾Xßá`)Œ{Ô°6}ÔUù°mÒG?ƒ:Áå·£Ó#–‚ÊYÄÓŒ´z}y1.{B¹¤š}”oîüIy{æiAŒñç! nYªé¸‰)B#‰Ÿ âL³úÂ;Ö\P&;§õ™>¸€HÞe§ ÕÅÒ¤¥…Æý4ÙRrhšéþ Þüy¶ä–ó¡žQ÷C§éŒÐV™J³ATЧË"Ê.ç˜Ú}2é?È=&©g…V*GêkQ× »V¢Ûu­hf°(óçFšZu÷.D‚Ä#Mz#b?Ñ@móiêªê ÄD´b`/ÃòXÛû½ +ÅgVµŸÉÍçYÛ6gI¸ì÷é‰#Ó,ê5pj‹î3ƒ¶-?ƒŒÔ†oɰ0a+¨;s«KjËCÎK ·'îš\Ãb*Ƴh{ƽăÿ\†Q{ðûœðn’Á«¶u?¡Ù$¾¹G¾fŠ9Œ[yå“E,™³ˆæÜ›>—Xµ¤“{:¸²Î½^²Þ¬PŽIƒ]¾DÄÊØ§Qèz{ˆzÛm¯ÞÒöf›bÜt±áê&&‰[Ùn`Ûè>7±Þ7Ï™;²Â Ñ8òføÅÃrCìõY)Ç{…D"¸brr!ŸN‘RI–Ô—Q<™Ð%iÍN&²±õ—pqF\1F¦Å!~n| Î3Ë’Iä½³œ×;xg9—ÊþÊ0 á³ÅÍeäq;ùäן_ë7#œf^8<гïƒh‰ì&g¼j7äÂüÄÅ÷€›'È6Y ÃZÁvÖqÙ¶»•<íxs7Iô1èÝr#”$½Ã/vþ)7«ð˜vž? K‰çÛ2òÔI–DkÈy­aœVöR©ú$3¨6÷Çỉ•O¬TÆÙ$vâ¹c59Ÿf¤œbãu‚×<okàBE§„CÃÀ lÝA•5çi1‡ÖÔjGp^¼AÐHè,#õqVs ®ä÷VlÁ!È+êzœ4>7ÒB¨q·Uâ-¼]ÃÝÆè*5̉´·‡éÞ½@D5¡,>˧èI1'“²×—F~ì¨exÂ*ÿoCi9¶Cs#?¬ êD¸/ÛQ~â¶›·}ŽŽ ÝTÐ}š™N[2Ú%€kÒåŠÝ©•.]GàŠ  ‚WBÚÙ Ýpå›’02ÊU¬ˆ¼ä+ãs5£ˆfôKwoüTõ¢Ø|AõRDZHG·;Igî˜6ºbTý¨±<™Ý§‘FBÀõÏÉv#ø3*VC$ç¿ñ$|g¶ÁÕBê€Ó J{ƒAHìkoœÓ])˜Û;¬Jt ¸/Sr gm|Wyzn\¢ÈØò¡Ó³ÆQoP鹩TÐÕ„*çŽKgž @&Ih4i|ÀÖH‡Hëð†á µEõW¦LØÌ¤2ÍÐ s2°ÁI=Œf4{ƒ/D3ÂÕ^63§·þ^öÉÔ°6©‚Ké~žO©¢"§EUÇ}ýH2ÒŠ¥)äŒØ„àèQ °‹Þ9Ÿ“OIij™>jk™~ØÊ:}Ô EàòG˜ü£¶%sä<<„©€„HÉÓJv…@EKÓ%ð4g Èàh6S$bÑø‰ O$y’Ô"‹NèùÇ|ëð‰gxMN;™ƒ³€ÈÌñ—OH –ø³Òbí"C‰X"ðäHÀ ' x”ù:êê*ìÄȳV0 …fáË*¢YÈͳ |TÏÎKàÍË~^5>bþG"¹¶ýƒOA[ÿ©KVÙy%;ÈÙtË¥ …ì ä,t™ÈÕ „ÃÄ8Èj‘›\)‘©•Ó oø}9Ô^ÎíGÂ3z( § 7î6ôFAØJÑFAûµk»î̪°Ü¹y;†õf“=3åJÌO`èÉâÑ#é™"׌çUÚ'#âi™\Ò°EÜ07cÐûóFF ¡õ†®Î²Ê]#R77òqÑsÃiiª$n â°Þ[ˆß-«ÉÄèKÐïªXeÁ°<‰ «uM÷'|º ÎZè ¦Eh® dE±CÐ- ʈù–é­®ØÀô ýÂç¤7?¸³MÓƒônlž¤3`éµ,…”“ÄʲûëñÍôúZ€Šœ4—%±HGPàbã(–­2bÚÞ2Ÿuö®EÁ3±¹Ï€8„-à‘?EýàÒeRÀ}"¹GAÔÒb¡óSѪÆíÒ話;§´&óõ('ôÙ+ABáÕ¡'‚Ìy!f<¦ØµoÈ;¼cW-©&lúÍϤThðM À}rU¡I¡7+)BzלQ µ3èEx¼ŠÜ^­ÑMÄmžZbì¨ñ쪞Æ19õ×(ròf¡]'Ç#z¨RŠY yï²°ãÆäˆãŒi±õLÑ71ˆä›‘ñj(£7„ DEgEã2ëx¼Sé욢,úOòÐO7H3ëÜ›@üe'vܕҪõÒ=ˆ4ËÜHW͈ªQª¶Ôé%;;4Õ)¢$ØKÜÔŽ@ì¸ëD™*»ëD©l~è'%M½!H SÚì +·SC¡UÅ )‰®o¬u?Úu‹\ÛâæŸöN óÏqë«ÿ9&Â鎋ùgåÿtVqO<ðÿlåôO³•Vm²î¼{jiê„€WÂ^ÞþìnƒÏÞŒ°þ£ 1«½øÏĸç?Ê/ýH€ô§Å$Èé[üHev³¹|U5k)1–©>#@΂a¬é(¾1°¹“¼ à“¹ô%Š?ã+ÒZÑ>è"=Ý GRñ6¼"Îwe3)õG¦ˆù™"ºÃŸÑ‘ý¨©Uú¨ei­ÑT~› œUù•0OÜ_/Jx7“ùzõ·vé|¡õ±Û´b½h„2?ÒeŒ¾ ǘª¯ƒT¹äª4îrYaΩ€Óîf´–& ³1jCí]Àý”«=4qü!Ö¹ëN]ç.{fþ3¢¿e>ríóp\âbæƒLN5ÏçÁvè­DBûïü0Ÿ $ÁéWÚ0aK߆þ¤p›uäwråÒI²etŠ3£vœÌmD¨ï ŠÎÚu†e9“ ÝY½™7ÄGçKݵ'ÜÞTQ|´q®ãX¿Åt6.¾“?˜}m.ȇiÿl>£ ܱã¨cP\Í ¯r"ÜÄ;GnÍÞ®ãÐÂhxTRRJGlÇD¼ˆú¿îléøHÃ+cÑO9`v°ÊXi†‚Á‘•a@j„JÛ—ù`«ÆÎ¤--¤G“m“šMÕ±C(eô-u¤’žÁýˆ’äÎÕ  ¶i%} &ì|~à4b•αõD±c+Á¨,Ê547õU¼ösó^£Ú^³ä‘좚zuªIUçAtð¨Ú§0úVS&¢$9i¥ª°p”FfâHP&ö@h²gì2÷:9±({ƒ&"Žâm©$fÔƒ¹µi(' ܤq›4l“FmêU›N™“5¡ ‹uÁ‹Ì#šoF´œJhüÑ÷‹hÕ¥ÐÏ›ù˜´;›1LĈ)§ãÝõ’ƒËTÈ+xó†¾8凬©SŒZÝ Ë"u"kçJM­ 6=c`ßÉÕ­GZ=‹Ï¢q{×ûg÷<º5b"º˜”åªu˜uí#üî•‘Oƒ^·Oy6^;rÞDø’ Y®ÐU­{Lè¶šÇrÇa%:ƒ|æ<Ú5ùLa ¦5m0·GÝOÀU±€ ɾ|ßQÊŒ¼"ãÃâ?ŸÊ ÐôóPÆsšçÞ¦ç>$—Þl4“21ŽHújiúÃ?ÆÌÅÜ69"]Tßa>q„Ï}« 8GI=}9#3u œ‘˜ê®t‚B±%æ6[° ¦™…b£÷¹Ï–qŸ¡w„Ú”ž«ÏƒÚÁÖ s Ò€Ó,bp¤6@¾½®Ò¢+ d™ùé|ŽÍ©”è¨S¸kxó6*\ãœn$Œ>oÞçRÝ™äLÎrLÐè2M˰&vÀZ‹éíG:3†‚ª}¡“ãícœ;;#?ÂÏ¢pL>µ/à)˦J 5§ßÀ»͉èEÿdÚ43‘‡'(T—IãßÁbeég@²dC}ÞU­Ñ-}Dªª+Uë` çÉV)÷ó|Ê’­O ’-ŸžV.ÝG6mãÿÙTþŸJøŠÚÿ“uþŸ>Hºä';h-Ü®ŒRtDb Z•Òm&ÏgfQ¢[&÷ÈlSÖØ}F܃»!àö~×!”¸÷!™Øuˆ¶¹ï!îº÷!8»÷!D{ïC(ÈÝk|R 4™ôX¢£;NE·UK¬U>µ->1× ÝeFÖíMžÜ[Æ~„=U!¤7ŒÙß ùƒžBÚÈèðæ0Ú9AÛ; öÐe;–ãù6 ãÄò¡˜úgb`ikþÄãBÚKÈÂÆ½3Qä¼ýª*ì×èüš›J6ŸÄ¦TÜ ¯µ E2ëõËbº/4þ2Ys±èÑpönöy5NkÄlI»ü¬Ñtsññæ·aà6,SçP Ï[|!ʦÁ/Hâ=ë¯<ïÇ‘¢>\;Á@))jè¤"\‘lÃ0Ì”U’9úµ~KûòŽ0ú ª³7³-'P¦#~Sã(³sQÔöþ³ðÊ,³Q:-güqgdô(œ¹ )ýÓÚÿ“›ŒûϪòÿ”v0'€è©lrÓ…Ã yèO›Lw›åï͘ŠÄŸ0ô‰ Ÿmѱ_×3¯÷0™ù{S ð°[± Ò¹‚Jÿˆx Å,3×ÑkÊûÄøHg|«zÈõˆµÜ‹<…)"q®±òSÚ? b]M¥?bƒèrTÆ4Aã4R†|ÙPF¤µHq†á’Iè©W,”ø#rÀ?âBÉ*Ú¥L …Ÿ3ãiwšD^By0¼¹KDÉØiYÌ;DÅó¡‰0öá½(öá.`MlÑ }b‚ÃjHÕ!>!=E Õì–ÂMg™# î…èôÓtÌÚï J¬”i3vYPÙöÛ“ú%jåðÏWo¿ùÚ?Íôäñëo_þðdx|§ïjª¯¾º:þ« (ª#ßQ8Ê¡ Óß À®¢˜dRAHª´aÃpC2Šlèr1‚ÜÂÕ³èvù`j2ìç¡ëhÔ9¬ “1ZAHÀîè4–À›…b´p"{/oŽ'å­y2•™NúÖLKßGFyñþçÿøG(€¬èô—¬K„`}f¨Pì^ëååÕÇÛûÂT½ÿItyê,öBÕ@WÕò!’Íÿ Ȇ {²ÜÇ*úø⯷JNj…ú:²ˆ¹¸>Þ~s=XŽzƒš~*C M¢Ò“xw}uwsÝÿ¹¿þÛó«Ÿ® šTŠÄ‹Tûø¨c™©©®ÓS;¾ëÏoŽ/Î<ö€€‚ãQWM б¯¾ÅæÕIÚ|^§­©jžkM´Álëù™§­‹ÌlßšÒò\kÊÁs­W.Ïô kñà)n‹íl—HøØ8ÁÚ¿…O±º@^F­hpÙ í‚ܘó±¢)Zª†L;ºçˆÚÍZn]Ù¾¦.b©1GeûЪ¦s"°ÔØGÝv…CdM65˜¦¯¼ã¢2ˆã²ÝJá®ε[P yèN.CatC˜ÙXHd@ѵhcÁXE÷tèY 'l‹`å]În¬´Ýx;H'd’ ­l¼ôÐîhT Ø.Wè[jZqäA¢ÓG†ä…PnFìÜj”L¾K0 Ê•ÀÚ…à` 2ôQE‡4Ú2BE©h×€v ‚jMDÆèJ®ÎwÇã‡_®{"s©?Q´d½¯ä_Ïo±M_ôõÓþòýåÕ`Ó=9ž_|}}Aæ“p¼ÈsR"à Ù!wp FÜÖhåyiÑ÷—[êÏ‚¤Ð6¯‘¢Õ CS¼uÔõÊu¥ã}üÕ_/?äˆïR‹ µ ÜT¶É ãS+Ûmô‚öE–wÐ~í„‹6á-‹+ÛmùÂâæk ²Ã?Ö¶¯Œy^žÿu¨q¥r¥*2Ø6ÉT¤é7 †gÇ»»¾¼ Ó̬D‹Tó^³¢vÄÆYýÅìÉ×Ì ™NûÍkÙ(ã+W é¨fUð dSL¥_÷Çó2q0CÙnÄZéo.ï~ÿ÷Ë‹»_H/•Pä£Ç··Ç÷?öÇ›¯ûóÛ‚°C 3¿þö»·ÿôâé7_>¼»Úqýúæüê¶dÍó«Û»cѮێú$€oé&7L#€0´|€ÁŒúäòõJ)Š`´EQÔ]Ÿ#S´Ïظ¿ÖWËÎMØÏâJ´D”ZÔݶ-|)p]6Ïi±Y”¨Æ­.òc–O€RLñ§Du”ºãñ6¿sszbG­ëèõæÉÐ-v9(Ç•~J½,…Ÿ¢mOñ¨ÔgS:*p•£ xžc£B­Eú} d{¡× í#‰#ŽA hX»@ª@'Õ¼¸5è£X…þ R~_êDFJΨÝGôp?"G/Wï6¯`JØàfûqó×§WÄŸ±` þô½¢¯¾2ãß¾^ö1m›çîÊ%+2¿‹—l'R§ghú_©=¶h6~‰þõb©­V¯.ÿ~$3¹½»¾±„öñ¾¥‚˜û!©¿>_¹Ø @uÊb¯5³fæ±È:5äÛw>Þ½úøã&È"…nNݪÅ6šÉSû»ÿ +ÅaVmG·ãŠºPh$4œ@åª!‡U´Ç–%f”ž\ÿcÿÐŒ#`Ûîµ!O‰ÈÓÆ:ŽPE;ƒbŽXv£¬› EiE-Bئ1IHŸµêÃ;ümظßþÇÕ#úò¿ý·ƒñyk)ùUÔ"bqX˜SïüV–ÍŽ°[®»Éî Ù{­NH4 µí19æwì„ëB'ŽÞKÓ]~XÇÙhW±•³×2ªh$¨”« `ålT€+òþ8à³{õ×`(s¦ÚÿÂϲl³_P6› _iŸÕ‡›ëŸ.ûãw7×ï¦fxï¤=³ßÙæÅÓjm¿ 55‹ ˜„_Ë\±v]cð¡/Íf³äæ–:YîÕÉrþáÃqåQ5z‚‘Zº³b"‰á7ñ¬>óî—㻿žD)Öd QÀ®!+ ¿„·¯ÆcI’Ëw¨'h¤'¯ïV.ùiÆå6z ˆew ®ÞÌšp÷žµöjŸ-sa€½ÒÐ}NÛ¤|ÝiÙ]âêº5ßÕÑ Vã´¹/圲¿OÔ){+±¿'ǡԽS§ƒÜlÛÜ&ã>1‹„GÎÖ-25Oðní´çCÝBÍIØu¥¶&©¤³¸:þmËŠ „í­^ €ªÓæB¦±5Ú¢rÒgh#Œ ·XHèp¢¨DÝÝÐF™su¹Î-Å@zïfØ+£gA&ÐÐ^ôèÅóW¯ÓÅMŸ©<`‚æó/¸.K)\œ¶kÁ3CœøU胎¿ëf¦í_ã@K&¸Z ÁŒÏ$òЕ¸JÂ3Ÿº DO tÃÂæaT+Õí9¶}}ýo—7wÏûWw7—W¤$Ï.(âjNþDy¤shqxüÿÌ"ϵúÿ ¸8jÊ/zË) Ùÿøî«  $ÐrÔllæÒ ¢r)­þd@þ¿È¬Æ"c2jC2åm1Dã@üG®o£:Ó›wï/3o®¯l6nöõ«wçƒõ–yýË]æÅ‡Ë\ý=ªRÓ3…¬cE¾ZY–'Š" ÑQ·&xÖ@K%S†¿ÊœkÝMáE© %ÄTïäÄ ~üò”ÿRô1çtõ+I±RI:càCX–, °ðŒ-µUL³gôÛùJCø¨ÑØŽÆÀŽªûæõëúü<‘)‘„OÊA)F6B§«7&•ÍkÛ¬trx¯®úÑí××~×5uLîxññæøýñ'JéÕà—·¹ºüÏÇoÎßÓŒ¸ŸwA>œN¡§5À™eÎEsº­dœQœÐî莡"msª’p¢­Sڮ̩‹Ãzt‡~ê4¿þöÉÓÿôñ¯ž>{ùô›×´–­0EAmÝlRÌ·2…JkRÙ8,þÖ«¶uo[Ó§½ÂÉ—ü¬+ ®úëÜt‡gÉ|­¡iÜÏXFVÿÉDçÿÙ*÷O.ÜE}Cwµíu¬÷ûGº¹h»»Ò‚»ÁµG ww¥x}ÁÝÚÑ…F,a9ÜäV¿È`XØ.Øî T&6+×¶ù'¢sˆM ¢¡ôODD7Q ëÆ_ø¹Qe;ߤàªÛF¥ ¯fDÓÍ}W¨#‡ŽéÁ…xøN‡¸.;½?/ƒ7^¢­”6RzWÝ|¡”9²sP_ ܨ±µ¯zº&=¼N‡> ïOÉ_90Ýi_޳þ2'Wú=º€ûžoÛžtº¬" ;‰h{}{zݶùŒŸy²9Á²¿çG•î4­å~FI¬ÿ0 gý¨©;Çqf&œ®eXŽß™È¤º6?Jñ3zÅøxÍU %ã›ÏÞ&Ÿ%ÔT+ÑÒ7‘¡|‡“èx'¨¢Ëeá wC€»ä ßцWnhœ½u #;³0ŠÁ[èÒ iÑ-X zJWË”î®aßBé:K¶CÕý?ÝZ‘ÁÛvæäûI:¬ˆÒ&iª‘Ø;Ê]ý•Ì\s1ÿ•7’.À(ã’àJwWÓ§å™A•…´çx^xe¶ð5ƒWµ¸[*×2YtqM–êd×ÕÌ…ð'0ßg™OHLzb½[ˆ‡Æ„E„L£®Ñí¦[•WSãÏ2¦PÝ(ðÆÐÈᰥ̱¥£¹{aËFÀ«º¼*ËÀý™©¸hÝ [:ZýUî.¾…¯èOn·–½ 1&î¶.$î-–Y³žœ›€œ[UÅP¿õP‹ø fÏ-¦¤¥[1g)~@tËï‡ð3à–Ü`†o,+bà‰Žô¼z‡èù¯9•ÿŠH“ðDÛlá?»¥[ÿU·å«náJÛì…þZˬêË_‡ ¯«,ÙÏ{ûÄ_SÖÌ=›á%¸9¤ fàjê %”óŒâ·bDGæB½åj“u3â©kZ tÞÁ¦o Ï ß°*½ë&sßé ~•®ëP|‡ïò5‚˜hÓ{5áEÏék¯@oª¦ƒ$à ò(¬.Œ÷‚[-´•Ãf®vº%y-éúÞàmçM¥@ä,åʵ÷k"’ÌqWJë• Ä)8gBƒÛÍE¼—ÊGºÓŽªZ}w,½§z™Æë„Ƴ÷TÏì^–iœµó4Þ,Òxä7ßDçMžÎ”N^£+ëß8¹-gŸ) SÒ[KøÈŠLÍ®Oy õ¸¨@6ø æÇ ò ¨ö‰34‡Qx¶RÞLk2¡鑱%– Cb<¤P}ûÕ°OŽ?éó —×WÃ\DÇ Æ8¯ÍWþ•åŸFV.^§ñÒTnÿî<ò¡Nôw2=MWO‘›f}$ÏÀå³>Ævðq³S»©÷é\:¿¥NJϼ@L—ÓAéÕ±ˆ»¢:yÝŒ¯ÚTBDôíþùãU¶Í`Hdßýrùó/ÁK?6÷Aý7Ծ˵ ;'íyÚß]¿ÿâîÚÄÿéòÎvùîüæbö½¾›m¾ÁõÕq¶Á@LýñýñêîõµEÍ·½úßsï/.oß__^ÍŽñÓÍõû%8’•$ï/oçÞÆË²Ð>Ö°åÕ1m¿¾P7×àRãôúã·ßgÕNËÙ÷3‹fÉkfÕÆùe`®šÞçð=¾~þ× Ž ®Ž?ŸÏ6ˆ9‹¾/ÀÂßôÅ‚ˆ=AÝ*NkAÕf£•>“`ÄßïŽãS…Ü|›wï?Ì7Èà~j!Üá31ûÉ­–µó½ÞÞݼûJ–©Íœ£­þýòîØœo.“kòõ±ï¿8÷îx‹h;½½½ü©ók¿’ÔQXµhÅkÐý ˜‡UxÜóñ=ݽþð "òñõ×Ww75ãë'—?_":_?ÓÆCþõ‹ë¿ÑZޝ¿»Á2Ù½þxõnæõ«ç˜Æ×˜`fì7³3»»Öš2ÿvvbw׳cßýþáˆ(Ô‹ãÀD0•ó°äs¯^\¿û+f×âÕåÝñl }#èåõÕùM^©‡M®¯.žÎLIãgPÎ áæ*«°Qé±XsóÀV >º¼}úþÃÝïó=(}¿å_¿/´x~ó×Wç?- ùýQ§¡y°Ùï°: Üu§¤ÍãI Ùݵ ÞÌ·úÛùåÝ·ˆU:~Э¾ø Ëî©ÁÍùå-å(Öµ@ý¹¿>¿ûâ?}iKÁ·çï®Ñ*M/‘ÄßÞ^"ú›^Î|zw>óéð’ϾÍwüîñ7¾œ™êìL¿!ûÁ¾ûéå5ZöñåwÄ ^ö××®yî‹þÉ9ûîæú#4ƒìÛ¹¥š]©Ûÿ¼Ald_έâì2Ý]?‡Êн͚<¾¾9öÇwzƒs¼Áš!i“Ž5rLÛ›txDãðõ`¼ÿŠ ðœnýR„~swmf˜}›· øüùüc÷…™Õ“Áÿ×ó«‹~ø§¹ñЍ™ÏèGN”„·Ÿ*z⾘nº^Õ …þ”Bæå/ç·h× ˆ•À$r ˜>†m¤þEŠ^ËÂ|3ƒp›t<€ýÿŒÀv®¶šâCÕ€|7ÿ7ž½}}þ#Ý^ `wdú‚nšXÛR4u¢ƒ}ûãÿ>¾Ó’îÃïYm5¶ùY_H~‹ ’… [9 ´óØûõµ6šò£__v’¶ëòMnã=Ÿ–å»ëÒy7 éWôÞÕmÓ[Ïþw` Ä®ÂçÚ_FŠÞ?FR#j‘Ù»67—Ш _¿úøc?ÛIjûÙÕàY“í&ñUx¢mé3N™ ë€ {¾»žì­ü4ˆ!æw£’~£·Ú›œ»œë3j‚”È ¿wÏì¿üûœÒð †ã¶$ròÉë_nŽçzÆô:Cc£Ë+ÍkÞöœiˆÔ°÷êã­vѳ>Üæ#ßàæ¨xù÷·%óÞÝ\Î|ƒ»_ðD/U¢Ëõ¢54/ï.ßC®tl*cbá6¤›0ƒ®5œ* µl«€e@ 1 ýµ&Yí‹/µ<=¿øö ILQQ@PZ™¨‰~+* °@î: œÞ™¿:öÇwˆq˜»ÂÜv¥÷oÇ óo@ ¶Í`íüùx~7h40 ìg—·6gû l4÷úc2hÚà]fØÔ5øæxœk Év±Éoùw—Èk¨€±í“ÐTÜæf© [Û×wq=×|»ØÑ¿ÔúföåÒ²Žƒéõÿõñ:{ЩD:°H¢?žÿ5v‡Ý¢¦Í—XYkìKæýbiÃâ±±*OAOÚäfiÃŒÓ,i–qœ%­ˆ[,ӇגFØW–4ÊúË`;ì3KšÎøÍþ]jéö+yùÿš{ùßç^âͨ{9ûöξý?g_þÏÙ·³ßþßs¯‡-ý¹w±ï"z…©Xèñ;èÞ0¯®®ï²p\ßd_Ý^þ=;ZÎU4½|“{ûÛ8$H}ÑI>CÄlæõ—þ‰ê>•bì|j=¥¶óª£ÖbÄJã¼·ÕDý®“ÇÞºš†Uó¯ëôõ4Zܰ ´yÉâ—¹>Z„‚é5Ÿ}m2X_ÿå»þòá†ÇU¸ªê´‹ ”tõD³É&s„iô‰¾£l¼TÉxcwÑ<üCdÿà(ý3U6îºÞÃù6uÏ7zÙv•%”4’D´2J¡ŠÉ$¤‘ØÚ”0W,)Xü& °¸3çx[³…ĸb)®|ëÏ©©štNî“p¶ä`ÅÆ/Xîòü›ÜWóf«ÒÕi8‘mñëiŠ"X¶0ñým](f""ÿRᵇÄjTÐs=7ñè+–‘¬ì-Ò¤næ—ˆ1 êˆÊ¸«.ç¦R7M:•˜?ÔP0±PßlZ¥HÕm¬ÎLò£i1æg1ªÓó8ʨâ63‹QÍ.L¤#ÉËÈ®ÎÁJÏ%q³õ›d¢ÄŠ`íKüdù~ vÁºc¸RSmYÇDJuüc­yÑdÕøÈR›d@Ëæ°QwS')}Sc,”K!x-i9ËäMõéë™ ÷t; ëð˶ÜÀ\»´-KÑåßìLÝuV¦£œ¾ð5Y%¼a˜]X,l¼ráš:½¾mÒ €$ßȃI݉Ų’>ÉÚMCˆyáJg eí%Ådר²ˆÞwšHˆøqgMè1ÍÇÈüŒN_&+Ò, c“fO0òâÝ‹©4Ì$T]fZÎÀÜ8“Þ¼lqó_>HÖT>Eñ3ê‡ ‡]Š\œN€gÅ4DGNq`xT#^Ù²àH_¤•xËŽ‚w'9¢£Eë(Év/[ÆAB[{ÏwþÐõ”L 8EÙ5±ÆîÖ9ÎJÑ’U0ÑÞEnñ˜BÔIO\Ä`eOfŽœq^†ã¸?¶I7±Ús3M¶È!GöéÁø!,…K°.öä?Ãã4‘1Š 'Dê‰Z<»uDšÇÃÞ‡½ê˜I,<›Ñ.76W—²™Y”Lî%[&t±–u½s-NeäÃØÍØ zY²sšpW”43ZQ&¢7f ÇšŒôdÔ¬ä'Ù¶Í*þÞA¹G[y?Û‚(Ò\$´¦%Z>]nvE.öhÈ“ÿHˆU†Ðh¾3Š]U{Îñ^z‹ñB’biè…G®(p?Q‚h¸.]´Ùñöнøµi3(;) /:þ Bm´L[œ¨Ÿìåw ŒUù1ö›_®œùàÎêí…?ºªâ&g™ŸG—á¾Ü=Ñò-ùÑv#䋽ǘvéLQ¤•šõ =€ø¨ãJ!{¹Ë_9sÕ¦aü\.:c©Fg@ïG0|4Þ–¸*ASçNÿ¯¨3t*€3‚‹ÂˆÜSÈLƒ5x°ŒC‰;.¬‡ {RÂËÌîšPN˜ƒT´õ^”ÅÞéì¥þ¸¢ÁËê餃‡¦qtÊyO¿F8HXˆarÛõByzœíkݯõô ÏAÑf36Mmñ^nú¤AH™^3 Y6 ü¤Œ­yê]¥ª£,E[¿¬2¥Øžrü'–smÙ®9òµ*ûǺ5ðŸE#ú> aÙ‰åB¹¤Ï‘zè9bQœ%Þïv´“sɶ=“Üb¾¡°è\gñ¦=l·.’ÞÙZ¿oÆVz Ñíñîëk}ÍÕúË”¸~;¶}7€ð§çhúáÏÇ»—wÇ›óþí8ø…®>yŸÒîI"èÅdHшW ¸J`ÖÓe—`µéäRT±yT%Ÿ—Q3ŸÂKEj!IBòãI…e€£T½-ˆÎ‡ ÄQZ&ú¶Z8n¡@,ÅüI2c/Y°°„žW±:Z™¸^{`€å›¦÷ n_£÷‹¢é 6´ýoOt‹6ÜSËtk*ÐÖTŒ¿rž‰t|¥7Û,Øt S‰œ·º¡¯6n…ߦ­pvÓ4€6ì¶Ù²›à½y5ävçf Àh¨ñ“w7Ç_ÿv~syþcoúv»s7·“ÔhàP,Å“ÞE¶"@ˆhÝ–Q¹¡”©qý Â#œEHts"Ht޼|y‰ƒÖâ`ƒƒ…»R·åMWc@@?Ì7òf¸¼rÉ‹ÑU+¼èQú@¥È6–3Aw²»ô¼©}÷ý·_륩+Æ:¦çõ¦ŠIY·Ò,'ä°TMÅ„[AG%ãbi¢]íþê¢Ã ‰Úaãòê«—Ÿóø»ï^¼ŸÞªr8d‡`EUpŠÂQpüùÛïC©VJH©" é‡ÊKGM¼wÇÛ»¯C®Õ’FÆD,B“$fH÷·kð6døË«þòêø]ÿñÖrfȪF:½yë¥C0L³ããgA—Г¨²<¸H½fùè³DŠd :ØeëÜ~uL7 ïD²rMÆEŠz/ZÁ4 0í.÷Í^^^ÙvF”ëÕo‘~T*‚®©OýìVÛ“ ÙAÁReµS¨_§TdƒT“l"—•ãÐê3dƒœ’à Ý´9÷y@ˆó:½ÕºTåHÝ+íOjœx§˜!ï8O& e)·HýûøÄˆçì–&“ku† VÛ[b†E«‘¡‚DTVëKìž_ݽ¾ÈQßw¿‚EègçÑN‘9ú‰ˆÊÖñÑW’¿9dâ<ÆÿþæXži/“Õéò¬b\õX>v\¤–¬¸­±ž:ØÿꈫÚñrÏVD93Ô¯}çå”§F¦z3‰­#þNAZ#òP2X-i‡ÊÑg@«¬v`£b$î !Dz:/iC#üY #"»ÛɬI1/™í“áì¾/ ÿ1³†ˆð©*‡Dˆº½ ’MÓt»‰hVaƒp”¨]ˆ×Ð:zæ–:±–Zqÿ›ñ,æð¬™àœ¢Jºõ_Ú쳕áIwÔB<üjÀÓÅûó[¶$A¤wT/¬é˜b­h mêE¹Q &”¢Nq0NÈÑ2kiJ“›i•a§üê«G_þåöxsûåÍù‡_¾¼8þzì¿|ý÷‹ÛÛÿþãÍùÕ»_ô_ç7w_Þþr~sü²¿üñËw¾üó“/®ÿþ(BÐ"¼ƒ.¬˜dÒûQ"€:L¥Õ¬‰Ì(â^Ñm…÷ë¯>~øp}s7‚u;lb†ÐõÍûó»oo.6!ø83¦ kv´áéZ/þùÝ‹ãùí]® 3M^^‡-|ÇÄÖrZ¸ƒ>aaè2N¯ðÅåíÿ¾¾¼ºû:×HØFƒ0zw$Ë&;]9~wyõîîÛŸ~ì€\KeZþú$÷¾¶ïŸçÞ7Ãûc|¼Ê¡wÕÇÿüx™{¯içøÛù»»þ÷L“¦2M®oâ÷ÃßôÍæ_Ÿß\à7O®ßã/Ï˼¸ÌtõÒ_Rœ¼øæøÛÝ‹ó›ŸèôûWïy üûùÝ»_04öÖ¼zuù÷caš˜/ßèÉ·µ}¦À¹®:¦i°?ÞÞ>ýϒȧïÏ»|ÿ‘bùý 4Èó >n›|¼Í5VZç貑ö}@—žWyæ®iõêúLdêWóÇ>…k|øÃÍ‘bôöÝ/Ç‹Þ}x®³£îŽ™÷ŽÕx‡ˆujóqàØË_sëÊõ´oÿóã @s-4fo?þ˜gù¦1-Þ?¦y›\,0íÎûñý×ßçº×ì~wùþHQhžRúO ©ÝýíòEâ`²\_!… q ûy4hBóÕ#2¥è_)õ1 £ûÖôð(@;62$þ¨pd9?2¯ÇNB c¬+îPšuY‰&;u$û3ª‡g4RÖ2š¹Ã@ä­eTöKSöíh˜¹MÎ¥oÙ!]¹ÎÂ#_™žGbÖ87 ¸çœgááâ€×X8V0"¾9¥Dÿ ÉÌPË´ýñ‹Á(¼<ïeuñdpesFý8º½‡ ’•Ô>ƒDºèÈÙ†nK–ªÉwó¯X¾«ãÏçHç1q9¢M³œ,N`js$ÛÈÉ6m'.Piü!w’v°Ê cúžMß?YÉŽ4mnYäv“bØmå>?ÿm5hîøŸtIgé aô ¤ü!aÍÜô4E+¾Eήí¤S7l’†T—sž i: psüéòxñE `ÜkU/0¨]®ýozËðÅí üVSŽýtÉÆ_n ÖYýñÝÝ †üîé¤>ìms[&?}[¨nз' îâú=à´!ˆÝäÃrbòdK“‹Æ+‡¡JyiëÂXkíÙòQ¡®‰> Ý9›?_©ãÊéñNíýÙæå4Ü«§þîújÅGÞñQ Oî—FpëûêÁ­GqÃgÆW9ûÝŠ„ŠD¼&wn“x©%‰mù¨Ð|ü=ŒñÙa$ç†tÞ Xèàz£.ÙJ “Û2bÓ=Kz3ÝÇÜòA‘Þ"È4¿½smMHeüþÌ}²¹0ÒøÉ›ð“° C£ÓUa„giD‘~fwÖ2†£6ŠŽ Pèã:׺N[¿ ‚‰$È%@d-ÉòÉ&tI“ÔšˆW”&Ey€¥3£Æg«…1 s 0ŽŠè=ËŸžÛR®‰‘ "8š0ˆH„ui¬6[èɵF«K` ŸmHwÕ+!@r$Ž3¦‰ÑkCœä4¨ŸF˜¢ÓÒÈr:ðI„êÆ-›'ná»›aKaRON¡æÎ ZðÂ:ÊÐ)…Èö)Íæ…]ÒÕ´4Ñ“‡Óùãø½“Ó{£ Q:x`R +¥½,•q"Ër+-rB‹öUF©ºe’¾s¶Èw×··—ƒT>\[qsýÓáÃÍõ»ãÅÇcûǧŸÉ -…¼¦˜“%ÉB—†ÿ6"3èl]¼×NI\dIÛ‹$ž!æô,+¾’ˆ©Í¹žˆÝwe'2 <§…6—¢®Ô9oš¨©»‡SWµ iÑtVWÔMD>¶.5Y‘©ÛÊåÓ”D#ކØh#^þþؿ֊7µÈ‹ðp*%JÃ\“^9ŸEO•…wÙ·ÁeËã˜Ñ` GŸÑÏÿ§¿]ó÷£gâ蟸[oà5ÏâIwÒYÍ;þ”ôÞËó+¸9`Í‚‘ýˆé©QR÷dÕýl 27 °§¢ÝxÞ˜‡ö%©q'º÷î6#“³îBT5CµT²½]BDÝÇm£ý„"ÒR5Uðï‰4›€Ut‡MxIoÜ”+[wÈz¢åÞP–‰sç3[gƒ„uíãè$ʧ¿}8¿ºXÁ5.G–áõÃÉÃפ6P­îÌÕ7°‰Ý32°°ƒÊ/CsÍ$-KÂýãЊ‡½u\qox×èÎgK̰s¯]ÐÁ‘ç¶ÎY;cÎÁ`8i4Æ’@sˆëô’@?,×ýXw`dbì­)ûÓf‹gl¿Ž˜''Ø~<ŠùºYÁ×< pWcÊ>™¼1Ï×­çëïÎ/oVò¶ëìø!Ó-ÑQO#@_Ø0¡D§L%Ùn¸MH´» *™µ,N{X¬l-DV µj9žšÑ%a9<=d ëõ2p ‡ìš¨–Íãj]›‘Bþpu¤pظV܇SÌG¦Îƒi`VßÎî ‰Ÿ¡¸Íw.þýñ§ƒÝ®<þÓ«×ß ~ÿv æ®•D„½ˆÒ^Ôèl¦Núáiv‚§Ý žnxº4r¶žŽíß ±=t´IíCÓCGûõÐÑ>T=t´YíC×CGûöÐÑ^”Íö¢l¶e³½(›íEÙl/Êf{Q6Û‹²Ù^”Íö¢l¶eó½(›ïEÙ|/Êæ{Q6§”Ýëì’hO0^c3î Â%Ó¾ÀdÁùÜM÷·m´1.³yÐ ¹ÙSŒ©ùº|àÁd ÝØêmÏHw@*r¡ìwžqð Äåmö®„uQA°;€¤+Ij:Ìá´¡«Ï6²IÞœÚx´¤ÛÕÃàôÔÌù’BYÐôit°EºÍø)‰ZÔ¤l©öU¿ÏµuÿÂj€l介¶ îqFè áŠðiÊÐõ×?ž÷c+ä$×pö,0žÕ&³²KçÖ˜Ì.œ[SÍÌÍ9`¹¼Ï¹uIùèÀRÙ©—¿×‹‰ vÊÉè@î²¢¦ºáÓ´ÂKˆ Su×°÷þ{3é [ëKóeæÌ4'À3–´¿5Õl«%Í÷§hgjÅ"3o“E 3<Ós‚QÕFÃ:ò¯¡©®r4àÇg‚®òWYè…îͺ¦ë­ þ•zF3Ö.Ëj:o6Ex,-®$ÏÂ\$™b‰ìsÝ",ò;˜—žPoàOçe¤&óŽz;/93/þæÕfç¥:3¯yïS/޳7½ÌqL Ó˜OMLÕÑGS44xÆÀ³ô¼¹¬A#žIðLg©Ë‡ŠÖÁZ»M°!2`Chu †©W«rƒ†ÂMº¨aêýÊ64´Ï[rK&36ˆ}b­7÷!¤~—j+üÞ„Üø³²ZÛÒžuÆ áiî,á=ùÞL•¢Çp`;­¹|°$ž)`á¶~*ÁtÏâØ3¢ÊmL|˜)]sy˜²<‹CÓé‰ÀHæÌ߬êv¹•Q4,TŠ“¾š„¾üÒõõhÉkjkÄ•uG—z!Í;^¯8Ä›éñ¹®Ë€¸ÁÒJK´#·s’„¹³“0¸;# æÚêVgÕ&¥ŒÜžŠÄÌm˜ÞÖH_lÍBæ<Žb«Cpn~! •׳üVôÂtäˆ×;Ĩz½˜+óZE—úÉ•›¯?ëD„9™!4ýôm‰¯†o^Þþš~õ¤É­7Ô…¬yN©6¸ÕpÙÎÎ90â’s.€ Má,[ ŒÛÔ4ðÚÍ {ÍÜ_';Bø¬1w³q‡[ã´ãŽ8‡†@~;BânÇ?JïPr“x~Øq>p×lá¡'gü¯>Lúa’sH†¹ ¼!{ØŠM+.Xíø´õ2¡ÉŠ-ÎR´¬[*É¡qbK5mžpã: ¸íG>kÆî†¾ùøþÇã+R5¹—ϳ|$ÂKñ"4C çÕ›i@a¦‡ÓãåÓ³þÍÏ=½Æ¸‘ê*JƒØ"â4}ö†‘0Iõ¬0Ñ’ 7|Opn ºÚÇu<7ŽSŸy•ï܈\|EûÏK&¾ž=sg_gC@‹5 N#oÃÕñË%ƒ¢ }‰š‹”f‚ˆ%õA²á-`ˆéþfœuŽ<5 ôfÁ1%4Þ™a•þBT¿Ó ŽJ ßY®®;,´šØD‘Î4qÿ9Š帼=n䛧˃¾»‹I#E`Ag6q‘rÞ­Ìâ«><ím´²z3‰ih¨3kÝ(èI÷¥ÕÖnk¨Ï‰é3ƒ¼ò¡kµòõW®.ú„‡v|f>ñjOHÖÌ&kÍþ¤©U:¢´†;4a"^ôyZÍ´°;þÖ²žrWÞ™ž¥Ü°D£‘¯ºˆ—žDÅSúÙwfÏEZs¶²#k›È* S7ý DÕº “‹¤–ÃKšY+C€DíƒÁ:r·VÐbˆ,ÜÏ M·’ú’Ì뺎` Å©ƒI:X¦tfÙµ¸¥Æ;;±v¢e0&œ˜©ü¥'€l™@v°9Ó¦wİ‚»CFTG\D„&´Û8c3ÎnU{Cç÷Ť]=þ(*„Í~¸ccÅ#T‹ôÙ¸:KGW}ãôˆ@’Ù/“æéA€äDä6‡µš²…Q3»g:¿4ñ%~ –tn§U#×ËÖ!¨8n¤VlÏhd6'P Ú{¨øyiÇ!uÔ@ * дкš- aLó-Ù·r[-Ñ›¸Fð˜]zΩâjP'NuöGwªðª&‹)ÁÖþi*¼jI ´0àU]žÛŸüAœ*f^½™2A8‘K«UåÓ{N3¯ÞL"+œ*†>{CŽÂdÖ©b$Aoøžƒtîuf²­Ë¨vÞƒ›£ªªNá/ Í'«,b"ã¼ } QHh’;‹N“àà"r>v!Ÿ”„„ò,rBheÆÍ#s ÃM~¸ž”6Iešg]4OC›lžBšyúž›3I]š6O Ì´ÐüOƒ¹WATNœWNúNõ ÁàšØ«Ð0uÌŒgÿ7qkF˜s†ûÌZØŠqp1Œë[Oï åÓ¤ûzL›´HO„§_ÐóùétÉÉkrßD—©ímŽW#(¤KöÄ–“ŽÓáÈ` ½d52É(ÕÕ—y娑Íq>‰6sÖ–Ü"j3_1†ñùÝê,Ú5†X;ý7°i&"Y¸Åœw| }pù>d{ÂhïÐõÀÓX u÷†–Ï@þO¿‹éoÍPkÀ3Qg„JPKÓ·ªø™´RIOG{läÙÚÙcö@¥?éAóØuM·fò ܓ贚ÀªÂ3té9ç÷ÂÖur7 Úg‡Él!‹¥§Õ›Ida%œËÆU”Ë&͹ æŽëðtâ±#=¾{”/â"Í.×áDBŠ„pB*’|Ak"ôh%@L”tWzLÒà±7X˜&çº*§?c$Ïxekm3Ûn@”cyÒxîObh8[€&JçQ¥‡îÍ@ªÌ™%f_Irņ>÷Ý×:n‡Üè ¦:J®ŒB!{%18çíŸW‰!µ96ŒzÈ{í\b¦?² ›g³éM¥åLÍ*ôç@ºvö•šfjI1ëdÓ‹²ë䬢Zþs¶¬Sg„|-]'Ë쵤;ºÚTL•NcÙu’á:!ߺ‡ÆsÉÃ-<¾µ²VyÙòÍÇaäLÁòMÇežû«­Í9š‰è4¥wê,½^m.‘pü`öžlÞˆÈwC´Ø:ò$¡ý¬V,ˆ[%Ÿ|…Í É}a¥üQ›ÛÁ5­ÇüaÔCk_ÑÄËþö%Ã& ›—c>¿=J@ù§+”c©7¢qÖÉ.!ÈM5 ÓJçª¶ë¤æÖÉß|#ÿÁì|{Ê:™¼@óxLGšºèx“1.ZE5“Ù~´þ´ˆÙ~Ôæ€·Ÿ]º¢nv±NÊâ|í¹´dÛJįÚchdõ5gtÁ,x1ðQ°^ßÝG÷‚F vÌaÝ,F3…x<÷‹á敽¼LMÝ›ï[à•ÑÊ|oX|Íx‰`˦ ÙïMw-¡ßwDð%eß{÷y°«ibfêæP™žœŸ`>È ßßwáNžDóó!Hã7zƒ ã›§§ÂZ-ÒÆÝÓèúOÅÇòÎÁŸ9ÐÉŽ’ž1;;ˆ’#ìzÑu–^œ1Á Çòþà®ø©;ñõsLãÎSìSÕÔqò¦Ê¾‘ñ›ˆˆøô%ɘÜ3'ÂñD—ù¬âûœ¸"Eší=HaK„_G™¶ŠùÖá7g›‰Êv };)i ?‡-Ó“ aÙ—Ÿ!Š]C³dGטª‚aHëm(ö†§Ãð{F¤ÃT÷2ŒL‡q6dBnÙ°Ò8²)\iyæ~‹'­<ŸÕ;90—5fDAï$JQK$U“–&¯Þè–&'~ŒT•èlkªŠí%°<,÷¤˜K^˜.Ê –Î'÷’(š4ƒ4Ä24âZT¡ºWþxµ ¢9Ѹ]Y©¼Ö3—·æêæmN+Ä[ HïG€½œ,zÛÍ]ð”ì'|Eù† çÁqFOé²;ú§qê&ÜC›7ܬ(÷U­‚ÑÍswŠöÍ0‹äH‚z fÂH…5¡z;0é¨ò‹2·½ŠYÈËÎÞ\þæ‰ÛL¶7oSQZ%íŒd±Ÿï–ƒP ò9=P LìþÌ@µ÷pFö4 Š3S{PË‘ˆ­Õ!9oå¨lðE;-&à8µ©‘,8õ‘ñ¢ba)\6Jè`uv%$|ªÌЂ mBMž*3²;½â2¶¼×³å(wÉqn½WØÊQ¡¦„(ý§ Bš( j冂(>⤚ތ|Šèµ¯½çp‘Äá}Ä¡k4EFkIÕ˜mgü6™±8”ýH^K³O¶nB$¯ÇçÝY"¯gŽ9ÒMÐÊkCºgY1Š$'ôÄ‘0Í ðè\äaJ ¤XãFŽKå:ót’?ö\¿nŽ$:T_Ùžì]Òârø³'r <¸d …R TS%ðÒ;^/^ûæ4 ¢ƒ¯H ë°¹wm¡bY¨€Ð2¸7"7Ò6aR¬wZh§¥è8ÜŽ“Ó6MçKíënüÉî‘Ô—³¸‡=Ï«ÿÏØÓ­Oݰ‡ã"’OS)÷®æ6”rœ¦/ÎhWVÏ£QîÇÉo­ÑÚ.ÔCJZÞïÍ?ÏÛˆ¤£´ßÈsà¼Äyå$`õ§)sŽÄèt\6¥’lÁóøt°9j‚É~«2Ò4Z òœ¾,ö¹Ñ=Mêsë‘оw¾½ö4jKI «/*¬ãH_¸Á( ˜” ÆTµ«+,G.¨Æß±ð!0}¸·†¦Ãѱ’~/ Ó/G“Á‹\É#â!);Иã,w µJ¨!ª»0¾&êµ,~&p¯-Ùz˜Äc¶9âhVk·nN8 Ý$ËѸã^V /«xë~ÿë?Ç3Jáæbó“æEˆtÔdB›úÓ¦j΋%kjõÖñIãÎÆúÓ­KšD-\ ÐFi*{Å;Ï5ßn;d³XéðRTÏ“Óo-%Ñr˜Q±ƒ9 Ãx嵇Ój研ˡÀü*6‚¶œxvГû£?SbsN±±Zzc£É­cr²ò'ÑŒžñ‡¢\´+’p­{ØZEÿŸ‘ó6$ŠmP= 1Wôu¨óai—{>õâAr,²2‘Ai}¨Þêxdµ¦Ì»1‚ZÅÎÞ¦‘‘—c´Ó mE6R¸éx6ë¯s“öó阑™­¯5SÙ?lÝÆ?Ÿ$ÔFŒÑ*줌8ñ²NÇ]GV& ØÞÊxWwÆÙx¹Þ=BOâ+rú5AžÄgëmÛÔ>`t B)æŽÖéµÝ_LUtð%1ÓHÇ)8¶ÑO¯//Æ9ÆmÔ!gùBÄ7K¬`Û9ç q_uÆ5ÕE7. ]ï ·?«øªK®a‚ÑQïÁÏB_Jè xÚ'¡·i†­¶Óí}Ù9•n¥½ïõ‚Û¡J_kûÞèöTéwF¹Õáa¹šû·Ä!I8•ÀŒ5äõ{Ñ&Ÿn%9é£t ˆ˜M2èÍ„ÃUó' Ñ‘tt„ƒgò Äà“´=•m˜äaJ7 i˜µâD}åbE‚¸ZºHf ÷ºÅµ÷º&Ë+\\õÈ † ¼Xz3412™y/CûÛž`ÈÂÄ"˜¼ÛÆéhèrž»ätÅ4Lʲ†–LÃÜ”Ë”Š¦!ç¦ÁwB­´«­¨ýnìUÖDË-›9˜ÄçC­2ŒÈÉ|Z¸HK; ð»±Ä§¤3Aú•È“ä¨lóцüö§?_öÇÃñ«ÁÆ{ñüÕkoê5]—>âm]g,}6ÈÔ´UÕÈô™öð¦Íµj<ä™l‚)<~ýíËž /îôA~xõÕÅ Ô/¯ÞÝñ\£*hô§\#4zÀ’øÃ¶Uã‡7—?~¼;‚/)fu©Ýÿúz ÚŽ"²­"Áº§HÀüÙØ‚7¹çÇÿ½0Òúòê'J+d>á´Çûãí-|Hft’ÅEPÑp2Ä{]á¬iCI­¥4Ï[È´I¦7R=Œø¡ŒHÝàúoá:Ø^⇆’ Wàbó¦ÉÀPij¿ýøþñ×߀޳_5ö«¯ .‡ºÜG­ý£CpaAùû¼^ßßþõöÛ_7ýù0Ë6‡iÍšw—ï`ñ+?j[1|ô7í³žf7üëÕÛo¾öäô þVÏå§‹´yg„kôˆU]EžåzÕòëÑñææúæpyu0jáx¸¸~>üuûûíÝñý£´¯+]úÌHÖ0Ò†L*8U ‚Hƒú|ën(ïWw²–t×’A9§+ú®¥­–01ʈ«ë¯¹¾|w]Rœ€FœŒ1=xõòñ‹Ï¿ymv ëú¡ûóų@DïØí '}iŸRŸ³¬ÞQâ]ó=õþÂj“øñ#ù_¼?ÿíQöÝåUöÝíåßÁËM Hv³S!LÈ¡¦€13Xy|{{ùóUÚØˆtº5‘²jÉ_v„"f)A4‹8ay”KQ *¸4¹L²½>¤Ò^›×7Ô<`­‘Š ÊBëèëw¹ñÚI@1`þ´ÔüÑî}¬*; êí±?¾»Û«Öí? µ–Òú ±¯o‰Äέx[Ïw{2­«†PÂú"Fi[äÝõû=Á§|éi´½‹ŸÉò. x¸`O®!dTwÕ”7© bŠ~H™ý}†H-Y*C´ÉõI¸I\ÀhŽÄä$¶0B™usÊTn¡Dô®\-÷lÖ<ŸYf+“_]|¼ûóe¯b·Ë`çPÅï]fq*v^îýFزÜ÷±ºaÓ¯¿ýþIØ1 ÿ@#âïèàtÝÉ“¾«"š)Á÷¨úãïšYâQÿ§` R(“±åýÉvVSëܶ¾«Íñ»›ëw¹Úêúxuq¼Ë5ЮˆKâÀÓ§ô ›hVsD:¬Ú°± ÿ¨ƒ?‚‹™Ñ€ÈrÌòRׯˆÑ†ã‡þò®¨åO?mãÖïnŽz͆}â«Çw¤`@ª(éåù‡WÎÞðù£gÇ«áûá_\^d÷ŸáÒ‘~k=Š̾K;«óÅ‚eÁ&è†  ò Ã53snŠçLàÜÑ ®çÁŽýFއ¬X#Iê$!Rx58W?¾úxûáö^¦ú·Ë‹»_î¥çÄC“Ãâzlœ_þ :n©ŸPØ”oï¿0¢ðeDv³¤]†CÔØUd0ÄdØòeÖêZ[Òï·O:$úë k¯oï?ÞÞÞ]_ݧŽñÛ/02íØöõütñÿ ÎêeP)1€9—j‘¿Í,_üÐVfŽÒœFMa@‘†éãFž2hÈ8Šùg3îÏ1r•%æ×ùîÅÓÑY¾Í¹OÖCÛçWïŽß“Ö@TaÇÊÚÄÈKĹ­¯‘j3ñ™au¼üòýÀÿï.ïÖRif4dG!_ _‚ü/Œ}Ï=Ù%¸ÎÈw¡ŠœO'ø >ÁMQÄc~„9šAšëëó›‹Ë«óAéþ~è/ß_ÞÝZÅõã1ÖY_û9»ŠëôTˆB>›5yBHî“K%uVndÜ".Õ”RÀ ŒqÊ(ô°©ký>§óç‹'×ï‰ÄYòܟ׶ãϯîþ©V>•Z*<'i„v»wrv5Ê 1¾Ñ à-¯mŸ?úóÅ÷ÇŸ´»ë‹Aqé3 ¡âfl‘ºÒ÷Ɇ>}}uüíîÕûó¾?Þ,´zq~óól#œâßFž7úö*磊7Zã‡#^Ò¶(‡¤«hÌä•teš6|5âte=½ñ$š`ÏE‰ t?GŠš‡XfML›ó2É–ê{–ƒ4º¯°Ãd«=g+mO²²”P"¹Ú/_†"¨›s·„‚Ƥ%éMê€ ¬ªMŽÈÝ k7SùZãb·Xj‰¶,Ã%g€£ "Cå`˜®ö‹;oDŒfD:i9ŸËŸ._èÄd(Áýk*›80+ZÆÓUè°?èvô°¥ß‚qi~îxB"å2¤+sî>& H´'.ÔSP ˜‹[(t`[_B˜jë$9*\ÓwÃvifÉ/Aúñx~"y†ò ¤)€dj-Ø›µ ×Ê?HŒGå¸9D@ŸmÖª^ºi—œfcÇ z¤ BQ’Â(N­á”ð$x†>ed);^ø%P¢ VrB˜ƒ??ù¾Œ,a^ÿi%ÞK77k»ùîûo¿65Šc­hÌIgΤ¬ÛΔÊêD§´ˆsåTü1ïñߦ?ÿ-qM˜›_þåöxsûåÍù‡_¾¼8þzì¿|ý÷‹ÛÛÿnëæé¿Îoî¾¼ýåüæøeùã—·?|¸ž<ÕG%´9^o¾¸þû£`Oõ¡¹¯¿}òô‡Çß?}üë§Ï^>ýæõY?žÊ/§=¼°ÀMÀóp®úOr~,Šb.>Þ‡Òèxü§W¯¿ûþí0IV™¹ÙËÆEq7uròžCx2Õ‡5Óø¿NÏhmŠF-è¨Ý ¢n'ˆDµD"-ú°"¾Db/ˆä^©½ ¢|ÞÅX\íèëë¿ìµrLt®NÉÛ.Ä^žªÚÑíUi¦¨0N¦ζrq÷;2ûl#óÜÈÃ2¶¤h•¹Ôš‡EŒü]”Ó^ƒÊÄ=<—ìqS‘³©‡ºØ‘ïÇ>áUXÇɶñE†4”ÝTú‡èA×.êoºÕß pàoH±sM#ËÞKsZQ~X…?{¤ß^ÝÄ9)õÕØë•Ã…tŨ\M”h!ý}‚Є´wo]™rVÝa¬„|ˆ XCh¾êM4ù¨V•Ò½«!›¹#Í£Bu„´—¸§#Dœå–.SU+àÁíˉœE¦‰ñEËC­"Ÿì_¤Ì¼¾‘ÜhfKwO¼‚Ò<Ä’n±ä‰.ùŽ*,¬VqÉò }›ì¦X2^ 8š»êÃ^§boiÊ”z›ý¾¶×±Ø‹“à®2ˆÊ²…Uqs$ÚŒë Ð}yzi‚»O*{% m§¢vî> $Ž\IÐíâhàèWÇþ§CPÅ?°(ˆ°ŠîˆÍ¬úzæò½ÚÖÈÆ,ZžRðXF3Pž‚'Å•,?Ø Q†¤­ÆϰZ “GÑD«/w¿\_Ì“«¥¢á6Å/Ñ´f®’άMjÞ§û†ÎT.#Uü´ZªàU2@U(ËÁE±Ò(‡9ú6–ƒ©+º9žÙƒ‘ñ¾NyjüôH$Ê Lp€¥©øn2ëjv$¥iZÖ¤\m5ª“ü¤Ó…5E1RR/¬b¡me*›å–_4¥A»©ÆsdÍ-yw°7Úú’7ÚxS _«R™w·šZ_Í2­+ƒG0â4Zt{Êt±Çh莫è&·¸âghQk(Uÿï̸_Õ³­ë&Bº%óïÚðrmýD _ÛUO[°3ÈóÊ(C%¢Kœœy–Üè"sˆ•SIÝÇwN¦ºZý;À©ÄøÿÓ,TS¹)Ó“/xú L<¼‘Ü U).!ÊL™âƪ©è$ÑU8q½Êˆ¢Õ#â‡÷ick¤™½zÒt',Õ«° $&“[ØL«%ŒÛYÃØi–´mÒÁ•¸åNGi’y3ó˜·å˜N{kk*ùÁR 0hEl{ww±4r)³Ó"fW?¶MàmØI³?‰#vJ•ÓÕÅËÛŸßÓ†4¼¼ J˜Ùá4ÏZR6–ˆ³,–zu·é:Mý¸~n4ãüŽhþÚØ„ÄèN•PÆ„vw^$h<ô£J½ß ³¦GÒ&k‰h;£×f2 „sÖ&l©ãFÛ„º0] ‹+S¶û°Æ(lUµÚ(´NC •‚n²‡e¶Æ?Ô6dci ¿¶†œÜÉ´3’#?z£¥\Û5æË¯$êâфРÍÃÝ‹Y°íëLè¹åvV¤mùЗÛ8:A6Çz¹»Z†ýx4ÁåvêÓë¡ìä:#ç‡Y@jšZ"jê(VXÅ"¹b|üëäJ×m+|”+öãNh¹€]£ QÚ¸Q¤(œ¨ÉÄ“­…¯!Œâ T áè]D—Ò†\MX&ަ‰f&VÇÀx™hÌuˆ‘:Ư8yôõ[˜>: ±éÃc§ÐGÓp:,;hÞÈ"}€[q }0 z=}0¾AzHGöë‡Nö"-H¬–³X$S®‰ü%3|ŸÜ]îM!—6M £†ê ¤”ÑC<ÑCÝa=)mQDÊ“ÒAôõ[”x- Q¨X¸«.R²ƒ+ÙMç2Œ3ÁÙü…)C `ôUƒËUF<1ò$N°½N"’–D$7Á6=£”wH(y悦…P²Y¥Þ, äžf=÷ð†,ás_2°KpO꿞c +;z×ÁCg ÁÞ 2á½X"¡®v7vGq•ŽÚ„Ž2—,WÁÜÇÄ&¹.,e MÈv%e¢;Ÿ¸aK ¢›IòEºä,uÅ:{wz¦Ì±4õ¥3`þþ4‡ÝŽJI)º¦,ºÜéY°”ñ k.vÒ™{½IÒ;‹¯qö#ºD§#Ÿ‘+@|Ê99SB«™i¥AN0tË9âœJRü§ìmSÿúæýùÝËãííùÏG’óŸ”—K»sO NtèHP”þ/1(_j~£¥©ðA(tξ'À1pš§•£NŸ¨âÄ 8E/©ŠÙ•œ9( Hìëo¿{ûøO/ž~óøåÓ‰ht-éfx}óû.HøuÛ’S6:iÉ Î¯›Mrài ²'%ÿíÕ¦Å7K°¨ÿöj%Êé1£SP^pªtYdë;—·ßÝ]þJŽ/àÓ¿® ú<Óá&øt+—!tûR”VX1z€”ÂÙ‚|}GÍ¿žßšQ‰²Úò/®·•èg6·¢ ç´©Pô³ŠÈŒRaC+ôjµ,¸6Mü]<¿Y·~ô\á ë°»}YIÖ™Kîþíxóãõ­.QµC }€Ïö¸0 \¹"ˆø¶ ´‚úI+§óh —ºÄÆ«ãÍj=3‹pÿ @KÑ p¨œîfo‘Àó6§^‡]ÑçïþºÜßÀ-ÈVÿ´buE5jK¡‡´FçHZўʾC³AÏrÔS¤¦Šª8iY± \„|4'„¡¢¹#0•NÀ0íòJ (­PÒŒ…‹;D^™ÛîÎïc<{ˆ)#uV‰[PÀñiK±¸}Èx¡µŠü[`¸92*‘n7% *$•NƒÌ€^jÑ ýЏ‹@öL36 Ó€»403îck_^AD©¹"Ù;z€H¡j+¬22Wø3×TF¡ØË|»®ñ œÒoº ˜ôŸK˜*Ø«’&aÇI½6A¯W³ÖAúŒ–ëÀÊ–²3€;•(·­Z+ëF=¿m™Goßëkê±ÊU,‰%Fk‘îÝ(ùGGš(#;¬Ð‡Wc!,Í=1:ñâB7³ëÝhb@Â1c–rRÈTÛ(ãׂ?Ö¹uņ=N£Æ ùTçF(U7lZ‡M ݘ³3îelÇx…ë“êÜìRâf:}U¸IÏô(õÜiç²B.%ýž^€#âQ :Ú«‹Hƒ¦[!’ôKÿ•Œ+ŒAÌá$æÏNAÄ!¦Þ¨8$S‰Öñѧ\`Df+òuDÜdÈoÊ€h6¢ýä*Ö6ß&*r-LñGæ¥>H’éP?¾úëë_†öf`W^Â¥>¼yûÆÕyñ)^ÙT —îƒßº‚™D‹·aÐ$h'ÇðƃAoÀ¢ÜLOÓ2šX|Mާ2SD¥ 0%äH@2X÷Û’S©#•éAž9”8Ü;`ó羜ø30žAÚõççç?S¤'sNÈ!/H‚`IzƒC8ɇ0†ì-p„.øÂã!älžEeªm0x¨cýoÎá™^‡g:ä\~r¤ƒ‹¥#†žLA˜?À‘Ÿ^£É'áó«K05«…¤é@&@UD$µ ;2·­º•™mü Îô&œÁi TÊÁîæíšdŒcÁfdf0Þó‰ÆÏ"ŒP@ýÿgïo›ä¸q„Qô{ÿŠŠñ„#žØ]%ßòÅqϬÑê®lùHš]ëÄFÌmK%©§ºµÝ­{~ýM‚I&I€LfVVwÙÓcuU“A`.…LËëxÇ E^m¯+¨åD³â^ƒM±`^>q^Ô˜ë5¢(^”LRø#y±Ãœ´ðJƒ¢×c’D±üŽ¥ädº¬ý(Zµü6ƒ”Ë#Ð¥½bi^>q¢Ð˜Ó PÈèYdŸrø£ˆBFŠÒ ¢Ð@è*´¤Xzß2Ï8°Ÿ¡èVB4ÎG—ª¬jUã „4­ÎfMó ®ùEÚâëa¶c*ÌÔ¤ Ù8Ê´ÃϨ ÒœI2´4&ÜíÇ«kT\aUÈ‚Ž¢:£<~Q9 mÅñãÆt7Ë|=”ÕŒ°PºÍJ|=%s |f›\ tòÃùõõ¹®ây8°¶«eH§P·éb˜.DŠL£kÐ.+Jr=*Êó%Í%­pe‘¨žsTW-K¿ÞÔ3GËOHõ/qUwÂYNtƪŽO™‚˦Éqqƒ¥ ÿ®¿ºYæfÇÀ®']Œ´Uð8…ËB‰²^%Fä bœÌÌ-íÈÊPLaš§Ò2Qq“pPLWi‡uªî ž³’¬ðò¯Až$ÃOb'*ª|5.GôL–:[ƒ÷é×ÖRÉë%aˆ„ä[B®ÒƒÔ_êf¦BŽw÷nÔÀ¹=~ œÝî"-N²U°w_=¹úüóÅ¥Þ,#÷—›[«–úÂBÏ‚n!—ÑôØÙ:ÏÄçÀ5©àåVéòåVéòåVéòåVéòeYYŒ‚޶*!·òÊ­ A(ì?\‘Úª„ÚŠ²ÕV”­¶¢lµe«­([mEÙj+ÊV˜²õ½ôPVíQ^ûÎk'¯}£ŸÛ}v‘g»¨ä#ž¹ Ùd|wR‘ÂzߌËÕÝ6wùÔ—À!òp¼ýiM§òªT§Úˆ ÃÆËæ¹4­®SU<æC =4;@P²by~”Ø•¬¬j8N¥³w©õßvÊÿim½Þì¹|º" h‘{lá¹ÿ<»œÜÃÕ|&Ÿ¶QþÉèö½oð´ ¸&8WqÎA9QùéXZ+W…9AaŽÅ˜‹Šãþ¤Ø¢ÆŸÄ{ÊÒË!Ý¡¨PBH0_ù*|ÇF¡ZS—Ôĉü zAÁûúf7,2]àõ÷}81Ë$âJ¢Ÿ-,ƒ|0ia•ɽ,ùŽ¤ÊØ‹&âNEgÖ?b”1yäëíü Ô.¤+Ó#ˆE±ëÝ—¬0… eÔrt’ æu |ïˆ†ë³¼Ë ˆœ›-~1í…¬ÀMW‘¬.]±%è¼õ(ù¾lhAàhñ¡ŸùÎ1„h?ønj&GÔÌã‚püTà^É`¶®úÀ Ù5mI"ÄàŽëÑfè§Åçà@Æ‹ê(_ת­ˆV*(Pâû]uäžãñRþ˜?ù»2–¿0Lº±¸)Ïà#mv%i³„Ÿr*d µ“dGn Êå’3?1"™fG Z‹yý©Dg5ä@ÒäÇôõr³]§¨ùĶ‘P>¡ÿµ"VsŸLÄÔ|¨ÁÛå÷|Iîù=¼OÌ?z3G¿6“§R¿»¯¡*¢ã¤à*:‹wIÑ91¯4w0%œîê€8éÂ[:·‘zÚñ¡ÝxýG+;?|ýüóþú§Q>֨ʯ¡å¥êt1‘ºŠ¦@h°Ç´ÒA;ñ司¦Ã —â'¼uÁRx{r?bàpuÎ;ñÊg¡-RJOdþ;I.¨œµa:û¯Ýýu»EÖ¤àPƒ¡ž´lÚrum‹*†TÞ¬ü"ô3BLáÜSí!Q.SÎ`6SeŒ,஌׬âk—ŠT°ì±8¨ —ÚØY!Ëß2f5ÑÖª³c pG&|"s…;<"sE†¸ÝA¸&Ððü/ÄN¢äÉÎ×0ƒì½IËDJ‘ñëù.“@ñè ¦n÷÷¦K†Ð­ß,8†eÑfѲD1œìùt™ £6—€´–ÓQc2z·yMUÿÚs%©œ¿ÒÆâž'•¡€.ãª^mÝŒÿZRÒ·¦÷É” !ô­øG Bã^¨`ºËWuƒw~7oíP–ìBÕ>me³KŸâQ½-M9¾u3a¬´‚3/¢æÐ”$-MTºÞº—bJ;XŠ kkÇ£ŽùÊ©½1y%ŠJ½x³›Ì蚸º–X´n°_~ýü³U©òæ¿S¦¼™9ˆñßi_íF5_%ñ³Nfw‹³r"l êÈ‘äæ´d+kËN‘†’Jsšøu%äü XcPDc É<`×e5è@Ðß=°ªn퟉ ÆâÜTa»‰ô/§Å l$¸16á„Xa‚,¯k¢1"œÅ.· ¨Î/m•)­Óý•RF-54 „Ãâ#Q¨v"ˆ6¦óÔDŒ¯Õ¶2B>uÌÔ:Aö&fr¹ú_gïbQþYEúgÿ0†UJeg¡Ål,bŠŽtÖÎ6^é|k넪)„é6헵ǎ…¥6Úe Z:ÝvýDvÌb/tùúq©L1‡¯_56 l@1]!Oq{VÄDInV• î…‰\{ÒkIß7w³3lþ&*˜¬Ùt Â7>æ{óó|oÙø¤ ¢*6ðÆT!ZL2ëáÌãñ1^Yzp"\Äàùìã4ƒ½g4ýc=púk]¹B¹ª› Þ…³ †$°!‚5Pxœ:ìÏ "™êöQ¦&ø™ 'SL$d^*„.¥·Ì¸ßaC†ò9¢qµˆÈÀ@4Ÿù=)m²°ÚßB“eOq°ðe72…¬MSC­†Îc°3Kå×qå܆ê[d÷žù *Š¡‚ðM?Èà§ùÐWâ0£„g•æÈ9ǬQ¡[€ÛP£XÀÏ=Üš Õ.säU d­p'td[Îà3ŽH3Xëu¿O™Â=LŸD‹jœ¯Ðb%4Õ6)y²e»h³÷íl*Òx@ÕÑwƒôUŸE‡<¦¹!@°„ ãœEnå”t¦€f‚™Âš¸˜r´˜é’Ü›­x‹Íýhᑵ„¥‚p iw1!D]¹Ü´a‰ R«êꉊ©ÇŠ¢´¢éº2&É»mƒôiÒ–>“޽É9€]§y‡­‰Ô¬µ&—SSJT j“¢Lz9õ#TU7e¾:õ#y¤3Q¤²ŸÏkAD?$-:ùp$ÿЬ…á+挡ÁÆN²îÐ=#„ý²ú­•­úygg~ÏNFí‘öhÎO¼Ì¡g[“ñ?¬ 2"rþÖ/ì¨0%”9±øþ̧°å§ðàuä{v-Ð+¾ÓóYÂéY(…©”n5p~ÃÐNI°{60(³BŒY’8Æ¡¹Äu‘ dàr T#áÖš„Œ$í)%²¢û|8Ïll¢•è¶®<9|kw8Ï •ÿ]–SW‹,©YÊ‚"¯`§±‰ÒZˆÀô"ë§¡‡V³‘âtkF AÐËöw³”Œ ±Šdá$'ˆs^RÐúc!æõ–\–Nqe-ë›jÈ(æ4T„°ÐLÓ¤º"£¤]b;àæÞðöQÌR¤, ‡'¦¥Léè¶EÛ–„`•¿‹òÆßŸÑé¦õh2½cч±†ßE¡c j"ÆýœbNjÒÄ2¡•~æ+„†nqè¡eÝ Îç :@çNÐ@2ŸKמ×v±lÝh×?̳á‚Ò*ß5ÊþñN‰]ÃÜÇzz ùZõ“œ¼èÆ$¹4sçµ€†¦_Â4ÈÛrª5ÃÏÉ¥EJLÉQ5mtŲ]µp¨Ò<“¯‚{Ñ®Œ<Ð dµ°×{ÐQ°óö`ª41ÓQ¢†®¡$¡ÔvÛ »‡¡Î¼S²¿æoÎÅ–=ßb€|\Áu\ƒ+2´3œ%:ÿÒŒ¯§‘w~§²Ä¤"¯„ý3EÁó L3sO»fúhÐ {œNˆ×'žíòz ¼¶¬}ƒ&‹†2׋U8e¹Ä y³ç0øÜ9svP ÔÊZ’cúµ¢Æš>§u»™fi™>å[в'äÁLvj¦J"‘gpZ™aÿC);ZØFÃ'z"Љž0ô$Úa³7`u.Òf(¤„ëØ¼=Cù@ÇÄWcÖ®wŸ®.ÞíQ­ªÁ…Œª¦ŽŸµP‡%zÄÐ ×ûaÞédV¸R •Jί©º°T®@†Óuá!“¹ÖˆÌpx„|1# kÊ¥ÚvQ®.ßáÛ Ïd U˜¶K×$ý¯¿üûŸŸ/Ȱe|HÞ¨Óh4Ë“'¹¬µl+Ó­]§’âNx9`êÓræÈÈ{ÕˆšÐ¨3aî/5#îß§Úè2¨7·_ý¨A¥ËD}Þ_Ü£tžƒxjRÄ"‹‰ÅcñÏ>µÝ¼Êd$±è*Gßí¯÷‹ðGu£ñˆX‚Kè tŽÿØæÕ1û ø./ÂeÉÏS”¥¯PkõÔv}V§»J&É„­ÌýN“¹¨’dÞáÂp°ö R’šÖ¾Þ|:#¨©“*ñb­“`ž÷.Ïu¡ö’ê$sy•d7øüæ—òÒÒ2»(]r‰ì/ª˜æw4îk¯Æ}míNÒ5Ò–î$î=œˆT4T;¼{1œ±tžþܳ’Œ–'½˜ö™Â ëFâƒV²nEytSpP9Ä×ÁÁðäY¡­œ3¾&ŠÝ“B¨,̈́޷ŽðpuE#‘Þøñ°´íhŸÂþÂŽ²±·.¡ÊÏ)r²9aÊ:TkƒîPZñ|öõüú½™‹2ÔªÖzÁ™;¹­³cë\µ¯¹ø²Pñ‹¹¡üñg7ø.µ¿—Š$÷¬ré*¼¥rK× dè4¸ñãËER˜¼h÷ì£<¯!áð[­À ߨhÜ~ [åÿ=#|A¤Á»Èäˆ S¯Å–ÛÒVS´N„)ÒÆV%ß¾ìU³饊*íi%ºÈ¢«"ŸbƒVlJªôH©PË%öÐ2Íò» ¤‰§”ªdËJe¤£*kPåì“R"ñ.ÌË P+eœŸ¤»>ZürÑ÷¨ãŽÐLäJUÿÉÕçÏ·/¯ÿƒh½òT6¶µÑ«_HÇ]‚z6¤ø\éùå|àà.U†®Q±–Rœ†+Å,!‹%ôDqZN7ļ);ÿ¬K¨»!]Ü];üéâòüú·—Deu|€«æëˆP¯áBå‚“­HiIàC‰Bv,ÀÈdËa`’¸¹êÿ† ,”}àn¦´ôd3.ò_Üþ92¯ŽÍg)ý÷éAgCRxM,7ÞV+]EÄO¬/QÊ w»l ­Ö%Â’´å˜¥$ÛQ¸®ñ»s¤_P^dÑ+SÆä6 åæJìô$p¥ÀMÍ’÷o‚ô˜·)Õ^¿E´¾f/&¥T°³<^PØ«lÜçÃñ31.–‡äšZ´¢å÷Ê=EƒˆÞ¤ …Ô£O0eb919¯u2ü°ÿ;9HÙÛÏö·ß]}Ö90r öˆf Ï„è‹ r¢ü"õb¢b›®=hWW·ß]¼Ó¦ŽA Ä/7ëÌÿzâÂnrNcç’UÇ;Æ*?RÇíìÍÈn¿ð¶ÚÅ*Ÿ\U…ëæë—/ºÒé›ß¾ìQ®epû mQÚXTß6[K4íþñòêz¿¤æ—ò]¿ÁpqHÂföÙšØyjLlP*Í|nÀر Ÿ”ÏîöØ€-ÐE2øÔ>ûç7æ(G¨Îc,ü4án<áÓÝ4ìÅ૟ñ©ËÜÛ"›¦“º÷ߌpYý­ˆÁ,fÂOß$ýôXnøzæB#¦Ä;4V•&ÄRjÅû0ØC—Qhì ²Ú:lóÚ…¾¹þº„ãYåGp¼˜B7ÈÐ5>G,‰Ø$"¦ŽXúäI§p­Ñ€ff?‹Å릈uùlsÙ{50ÉukaÝŒkãåõ“O_/Y²€V쇜ºÅnK“"I¿M"zR¤Ö¹)9Eë²$+—½húZ¶Üu´ÜÖaëR‰²üFÒpX¾ì¯o5Èe04 ’Sö†;¯ó$×0üx~q½€â œÝÏÐæ†¥nrÙMëpátLÙ2"ë]_Kvˆî.Üy$ah)9Ì‘4èö¦r|õZ_‡p¤;ž§ î‚ýqƒ- Ü£rÖ˜‹¸GA˜CS•“lëƒé‘¬´ùšà|‘a$«Ùåå’°IH ¯¼Ý€1±ùP!“ÿsº§S~BÒJD{D&2/kÃY®ª—äÀ4È'j¶+ê_ϵw‹M›ßBr9å³2‘'"þ[©¼AJ^˜]Aä°r(ý·u»`ifiT¹@IE É"'ajJ,Ô+¥Zã; Ö¼R•‹•.±šËTÚW#ìVhJ±¾¼~ùóÿÙ¿»]¢ÉX›Fÿ½©`Ô!«`Äqªp¡ÅÚ…f±ÒÅ.\|Þ"ÒÈp¥›û¯7Kl# ·tþ2»¡‹óøÆÙÒãxÑ k\â¥JQÒlCÈ0?nÓbX{*;ŽÒ\M?±!ÐÑ· Áý¨~ê%´Ãí¸aïv M9Ǧ”)çÈ´£VÓŽoŒ iÇÚJ0í¸aÑI…é$eŽùç¥d Ú–NÖûRFfÆ62#cšPÆÈ%jH‡iÇzhg¤´àÛÒN³švRæ_Æœq†vÚvÄÚií¸ahÇÒ¡oI;íjÚ¡LІvJuã.¤¾„vL;÷ Ÿ8í ƒá¶´Ó­¦Øžíh§*Ô‹Û*¤¶„vjD;Õƒ^¼•‹³ŒvÚj5íP~C;i½8¤ÒNµ„v¦]9¦dõÛ–vÒœ¼Ô²[§Á|GQÍ¢p–'©Ñ¿¶Ì§{˜osŸ†#H‰öi1•[â~æ÷Tª™$°›ª]me)‹¬pÙóÙÖd_^¿ß_ïß/¼ŸXa݈¿7#,+1Â6¬äb?¹¸‰Ð¿ß…Ájiã¬=E̯´Æ8ûÃE¿ÄZ"âØ•i¼“^Y»pèYã ÆOq,Æe=:Œïyëµ—Ê{wE„"eQv³YŒæ8ÝTÿ¼?»$f ù[܈¿7N§B ð)ï²¥³ÚäÉS&ÏÖÕWšah/ùçóþfQ8Cáh©óÀ)q4±®Ðjc#Oe¡j\P^QêŒîýÝÕçó‹Ë×_öï–†ùêÒ4(ÁX]s§•ª©çåSµÒ-ˆZá©ôÍ[ZWy60†•'WŸ¿ôû_\¢#ˆ m)D)[Oí‚°fÓ˜˜Ÿ_Þ¾¼þYû%|ö¬ý¢*…±_S>1ã¢lRòQ†`7ÿ€µmˆÓtîšQʘ­½HÊ B†fÄqŠý«•z§0. ®}zs”OŸ¹ ª‚šÏóeZ¢¤º~T’>µÉ0‹È”íãdiQ"Ô) êÀQqPGlJŒœ lÊ&|… &Éäx‰¸¤†ºÏ´..©( âJ÷3„?uÔåÀµQäj×@hÂÂ-œ²½ýK»Ï°¼ý¬ããör¹(’Å$·÷·57 µÛºÓõ˜µcõ3¿'T­%v®ÕK¶Ú¤ÁSáÖó®ä:pJÀùµ–uK0Gáý.Ë(±T§|Ø9²Y£Ã}yÖçÆËÉÚtSˆ~£¼ÏÂ;‹éÔÜré}n£ ãË%~X}ïpZVwQïÊ®«²"ÁÅÀ™Ô­º1œÑLBZ HHðªúŸ”2w:6émáYmû…b¢@ï5 W ô•jC60PeákáD6ê½Ã? xê@+€ +0©ŽŠúH—–8л¡RZ˜R˜ÔiáÆq`bµÌãqCÊÞ;gÁ«ýÀßÀmzýæÕ€êWo~úÀ®×(îÆ/;mX:k!¢1ÙíD]O®¾ü¶3J3ãMP´% 0+È”¿ñ,¢2^FLMÔ´0‘¡€`ñ ÆÀM0‹ ±_…1.Qm60ã‡_M‘\#ÈVw•9ù™DÏð+@ÄZc¸†_(fˆÓ×gÚcM‘JÙOÖ®Šlií× Ý5õµÂR‰N{kà`y8Þ®š?`r‡¡UÜÛÈòÞF®S#CÅÔxG«RØ¥¦™2†[­Àí|•;†r69ö¡êœñÁµFƒÅ7OrG¿á-êì—,Ð7å´ds=wG¨¶´õÙO/:Ôú@*&ØW|6ƒ=Ý ´ôÌCI|>à" Z+Gæï õã«iW½¬W÷,ëe§%m;âþ²ZbVÞBÙ²þw}Ñw}û«£ïMô½¾w1Q³6õÀZ`UwmvÏ©håEЏÓvƒNeÜi·A§uÜ)côªP¯‰ðE½6¨W¾A¯-êUlÐk‡z•ôÊ*Ô­Ú¢[†º­·èñÛ‚¹â.¶{1Ä_l cˆøÐùføLëuY»ãÊÌ%‘$à[H†Äß‚i’0ü@®õëŒo²–×¥ó5mÂVHò-d G"‹oÁV‰,±aq$²Äû!G"KlÁ]‰,±pÄ´b‹Í‹#¦›bZ±ÅæÅ;ˆ-¸Œ£í@l±y Äeb .ˆËä\&—É-¸L .“[p™@\&·à2¸LnÁeq™Ü‚Ëâ2¹— Äer“óâ2¹É q™Ü‚Ë$â2u —y:‚ $W[p˜DŒ«d_ó bh¶éÓ*³j Ö’H¾¨-XK"ù¢¶`-¬z«-XK"ù¢6a-$_Ô&¬…äK½Å&‘|©`¯ûÑo=;ÊÅK8ÏAž—óœåìýÌ!©æíùE¯qÜA´7Í["²ýÅó×o¦)t•BÏêé$¾~bQq­AÎ£ê ¶®FUéÌ_érDy¢t ÇQõD©k"¶îˆªLQp ‡À ¿VIǬ/3} W‡Ý5897g Q¶®ÁÝQ¾‡áª#œZFÜQ` Q-»AK< €*ºI´ó‹R„xÑ™—®Æ ëh%¨bKhòèÀW Z\ó©Å°õ´™Ÿß!„\_û ÝZpGDIŸW¶š%ÇÓ·B?¼ÿÏý»Û+Tg·Ä%©*Õ“¾<ü~º»ˆW‹¢&ü¬ÆW9dG.<„+®­ˆäxJ½ôKÔ "˜ß¿e¶ñ§HâV0LüL 7‘àäX–Ž_dD«&~fp63K½ KC‹Ÿu/e Š$ÞÅ“¨ ,UøUÃiñøY×! ð–˜.šC}5’¨{#PbÄarèð¤01€ÈýôPS«O´k¨¥&³Á°˜ý ~†‘bö—¸Zêq¿ Ÿ™}-Æž xIak‚:;ófgža–6:BLšxe+h(q3ŽV‚µ˜ù ÒS›W‡E\²Ê6QþoÝåB„±HÛ7Pˆëüæ—oÈÁàkа—%m_øÖT¢îñÍ/èÝ¥Wà,6žßüÛß´2îaãaÇøï»ÃÃîð;Üpq?âšoÛ⌙Äá’ºPŽÂðùÍŸ¿£!©BµØ+wª¢:W¥Ó0†˜'¶p:~Iáˆcq(¡^%pPá£wñ›%cdˆIˆlF›-„€ãùŸ_ÿi%˜TuÕ"J˜}ki7ãµuQWŒuƒƒxïñÚ:ºÛ†KÖu"¸É´›Üî`SžÂ%Ú]l°ZWöôÝ—G#FEO—]ˆæàÁœ"ð= £¼OËoàŽ1„‡Þö¯%ÆDQäý[îîíWñ„üK·ö–› ³o}ËíÂÛž¦¶»í¹¸Ó™Ûžë:¹È¹®Ó™;šë:UÇè4y§óN›|§÷wÛ9}MÓ<Ô™+È‹¬ÌÝåÄq~PtiÆÞ¤Ðrú¦‹õv.¸pbî%èÌe‚0¸˜ÎS?ŒýÞo}6‚‘¾áY (Û§ÎüË«K¯hhœj©ÆcÀ!i[ç§Q"‡YåcÖIÆí„0HU&Ô€é·å‡Ân(…ž`ÇTøÖO#¾Â'¸gžHô$ºÃÛfñÞê+§pÓ¢ÔåÅ9‘p,:Øq|^á:dzAÀg“AiCgþBás‚—†tÞÏ&æ³À€ºëÃÃÖÝZýãë‹[ät[ܧ{6ŸÁ•æû«aµ®®I`8‘Æmcµ¹D/iaCFóÍp C¢™¡˜ÙΰÿnC¡Ú¯½•ººEòp-þ %~¦›lî)®µ¾bß4,«Å;’Ãù+TãëUjüÍ×/_®†'?œ__Ÿt{ 2ßøI«¸üÁÚ|½6_B£óû7#í0xÔDã»î¹`òmѨuAÔÄÖBÔl•·©Ù*oSƒó6­„(¾{¿"|’] Q½DeÜXÐQeÿn8µ‰l-†Û˜ÁÖBÔÆ ¶¢˜ÁVC3„àF(²Ì˜Ý©¶¶&ws>ø6Ò6cÍ.÷q*¶)ŒpöwÝöÚnÜg§TÑÞ©ÌFCfò3‹1‡§— Ù&Q7é~¦*Ù~ó¨·é0æ÷†‡cø+wonƒÆñÍ~üJ84Ñõ#ã­¶â,9{u|ÊgKÃê7zEÌLÏB)œSÞŽ0PY¯‰ S­µÄLtª¶1QêÄÌ"0çJ›`dJ¦ê¥¥È JÈeð¶ Ây‹ÙU!ñã“àÚèQ™™ëïðs=}šÑ;8‚`Æ‹5¢š:¹XƒÒ/‘{ŽØ%ØÅ'¼ÆìÜG˜]a¢Ugÿ<‹9ÀWiѯƒ#6´ÏBˆ‘B%vÂDþ}Êw‰DU™ãÍrĹB/¿5á@28Ì›˜§ß®Û!f1ŸÑaæ<„©_KŒ¾~þymæDŠÍß‚‚¶¸]³žÜ dBÆÖíº«iUrmwm².Ça¢’†ÁèX$ja؃ì#w'Ó’ß^Lï ‰;•vÿ*1ŠÜÖŸƒ¦9{îT–¸®²u2Öž ¿æ{U…•L¬mjѬèA™ÀÕË$á¬™í¡†ƒ"hm¶‡Æô``Py –ü$9ðÀJ÷Àº‚܃fdÚœå³`¸†@{ãÓ!@Ô›¢–uÔ’AË–èS…-¥4-‰>eØR’ì’JÿbwRB_ÁÞ‚EóAÏÌp'Q–X¸\OïêŠu¯»€?ÇÓ˜ ÚAäDp»!y÷!—§WÀŸ‘AÌô¢§#PŒ=¬?—¤Û/Ưÿ‘*Ü‚ÜÞ!T€ ¦Úqƒ½ÈmôNÌÎÛoBÿØ_©Œ“ùÙôócÿõÆ—î‘>G Høj†§Á’ö‰e"N‰/Þà7>ùhJôe óvrö¬ÌÏu¨¢Å«Žõ¹è~Rÿ™$ó™‹3T¦¸]´tŒ˜Ü”uÒÌL,myi³b(5cñ>Mìk gDKºñ˜ ¼á¦òáVû´´¾îåû´4Ûƒ¬:/Û§¥¬MkvúÚô```kvzâRx° iŸÖm`Ÿ–‚@{¸Okˆz3Ù}ZϾ7؜٧5¦{³r3û´^ÕÞ#“Þ§5ãÀ½/2æˆ)ãð¹OÛˆ£ÓÞ§+ïÓŠ¡Cø îÓÑV™§­»·ý}l.ùĵ¹ÖŠqbsɇÏl.z¼–ô–²š»]Dÿ'¬ÖZn¥dÊ^²[b¦lw6ú¶#\§e§ôõ€-r?®¥$±HüÛ©Êåö‚ª›;*XoæÆ§Ù9jIš,2F…ȰÇv!7þ´ KNBÃ8´œÅo°x­V±}ÅwX|×€!A€ê¡Ã§^BËPI±R2$+Œ\•%»©¾Î[Ñ[]#ýX&—»!XÃår·AsãÛ§Îà}=`‹dð¦k“XdÔÔ-;œ“5ñ*¯qb,m‡4{T¤Ø:ñ"•Å.¼UY&Tzç·~?¾~ac¸<Þ=@+EúËãEY› ÿ6"ÿå®lÖ® ÿÖ ŽoŸ:ù·†üÛùwA<Æ"šºE)®˜ £u ·Šð© äóË›Oƒø|-Û.$o·Œ|@±o;Po#æáþœÆébKÏ|»F Fï{GFZŽ:Ä10"†¸oLÓUtÕòðZÖ%ì˜òƒ¨ØŠp{Ö‰åaT-³\cÞ>u®éŒ¡¨Sd$ëÜ}«‹T”]k…jf4ePS£óØÊ°ZÖ5d”=¯Xå9à—.»<оµUŽÇ·O~ù¸×T1ÒHÇ«†Æ"u(hía8¸A˜ÜÜÑ‹š H €àú_%­t yú…½èÛ­ËéäaÄÎÎâÃHm^М÷O” ©à&+€§§ÌÀÊ ¬ ö+£–y…MºÀsŒf6p™æ9^u˯8µ6ru|ûÄyÐ×¶HžãÁÍŒE4uâ ²k-Œåm¼tj~šÓ_†&6Š ¿Ñ3h°ˆ¬ñ£ÆD_Ûúò!öe–î$ˆ?4ðšì%wŠàQËô²h@z7îЪ;×*² ìÁà‚?²F=xW{@rô]Eßkj:dËÜ ""À ¿]»y’fPì\[8s§(Ž3Ç=ŽI¢p–ÆÚç¥ÂæÖžûµÃ$ ‹Nº3–Ö̽~Â.»¾tÂ.Úˆ2vÙ䟸¼NÔZ œªé 2[d˜Å)©ˆLM-1zßmQö-”oÉ{ðäåoÿéÅÓÿtÊuÔ@Ö¯ƒø¦Ê¯`@ŽÚ!oÁò“dL§²Òq/†Mh#ÃÈõ¹¦½ð"PmÆx› ê_n÷}ÿHkßÄ/&Ó%#¤RØàDùœo—J¶böá”ý¬ˆ¾Ã5³¬ITñ)J¶”Fܳùê3Xùzy=²ÎÂÅ-šFÙâR‹°~h B@-ñR.÷×:äþr).•qp-£àÉ0‚_’žEÈÄÕ“¨®:„a0êÖγ˺ ¿† ÐÁ>†vc´FԺ͖ÎX+b × aùl ø1Ch.^“(¿+.´2òQü¬Kw¯$žY £ŽùñúâoƒNm§3ö*}.5¯P~Ù<< 53>ÌíéõõÕõ“«¯ÃYcÝ"GÈù—Oç7¯÷ûKèwÍbEi=ÍRÈÜ`Bh.Œ[AÙ0O^¾ú.îÁ~!·¡>²ðaÀ¼À!´RÞqô¬Á=³g]›¡œ}ˆU“Zª¿Ÿ__.£9NmÑk÷¶e-õ„ã¢$¸â(Õˆ8\)‡Kºêð©’ãú–+ùI/R°>;ðÆØÅÜ 7`bG[¡ðþ]ó'Qc¶èB'î>ÿÕ\Ã{ùDÖ ^%®ô~áZR fJC.±Ç”‰œNs<Á²_¾›áæ’åÈ’e¶èc‹–WÃZ|¦ôˆ Šfpqc\¦+`¶7ùq¼ÈãPáañíþ•øßîâr8b]ýr»ÿß—Ôiñ[0f¬®{%fÀùßÿ›h÷îúüæ“%I%w ÔùÏW×·‹€òsÝs®­H>{=äê}²Ö'+ èóÀ–|ó 2!²G¬åß#”ªñL3µ-a†"„xbÑ®÷ÿgÿnX5¬ËS`lv‡óÚù»wûEŒFÙ'¸¨ !áщ¥Î€¤ü½|†þEe»©¥b­q)5L$®’xˆÈÇ0iT_*òÓ|ØáÉÿ¯ÿõ¿vöe\á‘$©‰òjè÷ÅÕLJÃó>'á–¬ÉÍíùõíë¯?C§‹h +0‡Xðbl1!‚ÒÔïA”Væ¾¹J[LeöߊÁ÷+(iCiE-ðÁ³!6¾ŽŒÊω‡½|ÃØÒ9K!çàÙ~‰µŽ JýZzÎM¼Ø-Žë»Þ‡WœšÆ8®À\Jó[Áu³¿E¦˜eèÞR1ÂøØpZýØVˆþíäûþÖé‹ÐN¹{W£ãaƒélå÷ÜP–,vPn8°Ëκ)ýó8¶caM>ã¾äøG%ëGq?˨'\š­$' y'»ºá>‰z? ò)–ª¹r9óE+KÌÈë‚Û8Ãç@*>ƒ°dT]N• ¹vŸ~si½Z´á…·%öì’‘:_üúyݲø¼œµŸZZsýÛÅåÇÝíÕΆOìÎw—W—ÿªË&RJ#BW‘a¾,2feˆ"Q´#Ì|©ÐMŒGÅ|PtO™rAíxEryé”ÆÒ¢&5 Í\¥KwB}#.™ê¸hYxlŠ÷ïãÔ¢UˆäªÊï®>¹è÷×¾?w}uPÝN€Ê»Käî_VYU¤ g±^U4n«Ò…íV¥ Û­J¶[ål·*ÊÙÅ¡þk!êâ+«!Úª(g·UQÎŽJl» ¢­(»Ã”Ý•ôª!<﮾xíå¤Êû«ûp7É+AwT ñè#³{™§F†©äL¶; ª.8)5¦Â¡£@ÔP«LÉ–&JL¼‚•Íeÿ[3W\ ÍϪ“~4y=6j3Ýt¬§ Àº$«M3ç¸ÁÊ Ï>à{…{^î<ë¯~>ïwÓº(;Zœg&H!×áS“¯NeÆ»°R&‘FÎC um*V‚dh‰žÒR²ÄA?¨öƒ&BÑZnƒä˜öƒýM 6N2ûR@ž%Ó÷ø™y~ Ö&›q­œ<›êؤ‚BAÙH ¨(ç )§i9èÙDCºzg@Z>%È"¢ÃÇÇeŸ r¹»°ò~ —\û­OÙLEÁåa3á K”ج„ÄQÅ(¢Øf¥‹hƒ¾– ¨t ¶2g@§z•eeo›Ã=sÐhD§¶¥<‹tT[ÖW³·c5TºØgsFÒ¸½±þüÖÎË%L ÷¥DbͶñæà¨dUè¡Uïý²µ",ûJ1Ú¶»(óÊŠ`IŠOJ4 Ö ¤ò×±Ö5Þ::aÁ·[; ‰®õI¬}ß œôVc³#·Ü7L7¦WI×íd¨SÏiËz U ±l1¥ôñÖÐÏø†JB(ÞU¢Ò‰:Ú´¦Ò'ÈÖ”ûDé» ÌePb»±„A1yWÍÍ„Q3! ™ í»hzºÞ'Ò¨õ¦ªžuŸ­VT>ÎQš¯?C'©ü9ÙØ†oP‚@‰†š4Û‘+åv %'}S+]>gE'!ʆ%¼ƒ5¦Áî{(²,Rç2Ê K«3Š®_x¤R(™²¥Pá³Eº•Þ³êÊ?xv¾n…È Q»’Ï rSpµzã­+”ïKËàZZòÔ¯w2—Õʃ³Úǘ^º³X±·B)öyµ=±£DÇÕàG¬öÓlü,Îae¤ =!ÆJWI¬ §D䣗I4Á^iŠŒ%å¡ËëÛœÅYÀÉ¢jèZ4öÏs}µÕˆ—†sû t|óÉÌ›ÊOøO„Oàú‰v´x¶S¤@DZÞÅ*ÙE=±J©øQ£±@‡”M¬ÏMR™ =êâî¹lQ_M‹€¨E÷U72†^§Jˆðà”PÛ¨áñ^ó3µB˜i”jâV¼iš¸UÕúj€({¦QS¡ÞkÔU-xÔ¯z¤Ü#‡+UÇX3™wzÔ—p‹¯ì#)c2…©¦F˜uUEÐ[‹ÿ¢˜æè=Š X¬kb¬jYL[B PWcZlŽ0Ѷ1G ˆð€ _²qeÛf"û ªiØÕn."Œ7uŒ—a¡1eUñŒ»ÍΤŒzצmÐÒרqkZÅ­w­,1ðÖÉGŒ+Ī÷"“] ©àŽ,Ç\˜¶†…ˆ‰A!±)Ìv3ÞÑ1¸¬ÿˆeª~ï(t7Brb„§mp4¬šbÄãsе>B.}aéMµáüšzáè-[úÂÒº¥#t G`މ³c >Yuo ÓWCô¹ì8¤ß;#Ê: ñ˜sE¤ä¥æÔD«ïOгÖüé–)l º<Â*u'¨Ah˽­P`™Ëe ¸~ïh«d€9¹UªÓj¸'Tßzw ·ºX/¹pPš—·P ÊTE.[e·mÑÂ¥ÁMD¥#EÕÁÖ.ƒÐD>Fjœ]"Kèkö,ÉqCð–Ó•«kZPyÁÎ'@í¢1Ô9ÞLò´äª¾ÚÁ1˜_!eÊØ‚Úå1lÓ•YÁ“ƒJÞß,kØe³pÞ;Úl€9µXvÓ¼½ÅCU÷fe:Rÿ iÀÄ3Áâa 95pŒÇ!€:á+ܦ÷æþÌ:|þ,óè÷ŽC^’S#¯š/sFë8«¥/¤eÌ=hUu t;ígu–º.3¤®UÕ-}­;¹Âm}ùÍ‘¸1”âdÌ©©0fO*‘°án"SÉÙ;ußs»Þ½+•Gè½™ª$ßõnÓtpîo+|îÏ Çá½ãì6’SÛmZŽïÔÞÕµŽÓ¦ü‚%jes¤%RG0‚¾DM¸íÌîïm³¡K®mOÊàØU¦ö¼Â^—ìVÜU¤Áqkèx ÄBQljX…-Ì/’SÛÍêTÍý¹©ºÎÜK±®ÒRQØuÇ 6!91Q¨ïíœ0â•Ó“,³¶ê÷Ž/Œxçªá>oç¡sçªm…Ñɉ±ý¸z§«–Å©èûk§ÄºTpÇ-K|Ly0Žw¨ç ¢Ù9#ÂÙóRñì[°;F@ûá„Øa#8ªîÞ옜óÊüYfÇÔïg¯6œÚ^í‚9NC ñVM°eª¹~ïöjG1,äBMbŠ£ØXHNíÍêT÷w%‹ ³‹‰…—²¸8Ò­¬’SF»—u¨ID_xݰ³.M<÷ &%ƒü‹²^¨· ïݘ”'È%s›‡NIg“Ǹ=X ™Õ;9¨šPaš=Ò˜ÌUGrNèœËÀQÕ†2D-¼Ò¬ódœÑQôw½å(¡àM Uºå(°EaË1œÚ–£ê“Y°Ö,á¾Î/X{¬;†ïúà«f ÐIN¶5_ DšC’9´ "©ÁÇë…Î8ýÞqˆ¤>EgœÎãtJêZÝÁª¹„R…¨îȈä¡kž†cÁ“…®a„àÙB]3œšbdVïä ZxµR'j:¢ºÖ4GŒ‹ÔIÜŽØ{›Ò·éÝ]ÜšS4ÜÓ·o£1Œ´Xe» œØZã)ë>¸„:ÑTK{ÊŽa "«#ìƒyk2qw!„U„`ºl[(a#ÌCØ!ú<¡ka½(%´w 3!!––‰®îfBy0Tâ¶‚áRsòâNš®$¦_¨ÐtMÙ=”Ãý†º§†°Z¨ÔtÝq”š’SÆ<9¨dÚK~äc¸¨j¨,Q5˜prz•~¯ˆ´ƒ=¨L~ÀœØ!K˜òfÛ¬uªËò%ßþ`-7ˆ˜Àì²3^¦ú¬YvvŒ°Àƒ—)A/ûj²Î‚zo¬ÏZÈŸ½4 …~ïWÄI¦ à#:SéŒÈŒB À›\W¦¦Á-`N€P2“M¼ª–A(Y :Q|Hs²ÅÇÕ<„a˜«i€–®°NÁ › K SHtå…›Ý „›æÔ„›¤ ¸Þ3T†ð7†J Õ1•MAumQÉ{»É*TÝÁBÆdVUÛ›¬Û Õ1øåàóC]UG¤°…U¢¶»îæI1u•Œ³E'›:Jq[ðÂÒä½E¿ˆº6¬áça®sµn„ääx§½·¢a•ù³ìF…~ï8Kd 9µ%jÒéØ*¨RA•^¢8„â½ Nª‘šµ×?Ôfĸl]Ö€¶dtËé-”?· ¡Zò@WmLj¦Qn2ðJ976±³_Á2œ¨Ñßdu¶Ú?#*ˆŠøaÒŸæ¶*k0Hq“.…”±nQÑPÙ­¯­’æÂÍ(oa9x¢Ú²&­(‰¢°Z¸bY†ÂÚñSMQXSX‡( ¬oµ€`m*µ¹šˆ¢mëé£#½¶quÔZWŽÙG«ÀekYÉ*„Y?ÎßÑ#Ñ¡}’¡z|’µq0ÙH?š |ÉñÑp ©Ñ#WâRÜUís*Î%kWiÏõ…ëñI.&¦úŒnÚmO[ITôM´".&u1–®*ƪRx9¸+5<-šDÝó u¯PÀUÔ—®ºäô¨²#:| Gèè‘l\È TÑÆš €tE5•{Ô¢åP ÂD¦]W\EÐKŽJ}Ö¸>]])jÇâîkb „pß Ú€²ÅëØÖmÜ}×ù­ l2W¶œ©l¥Åª‚¢x¦ak·œ× U²#­s¼âŸ oOÌ_Ål­pÕAY± ªíâ‰R „*ÑÄ•ªeôH6¨Xõ5)–-Q„Ü{¨ 2óÂÒºðÀn‘E8èå¢ÕVä†O¤¿²ê€•è2% È<òiêîåHŒ[ˆ©LñÆLy˜Ò ƦÊ0¥²"èS¦"¤ïy\±åô~x×9t±¦ç]ú½€-d]]²ºA \¥Ð’T"d z9€­£“"}S+–¾°p^a¦8)œqp¿-™K_X:‚X:‚X:B¦¾È?‹:¬Íÿ´HpÒ_dªŒüó A%ýçÝ'Låyf gtx)Ô|T ŠÂjiÃ$‹­ ~(%Ò¡V¢YÆhæ3ý)º?–ê.u2SîþaÙNwÙÚ‡#c™\R OAÍœ,«´óÏ»”ŽèU#N|)óñû°ÎÔÂ~ 5ŸÖj¹ð8[«…æZ­P˜plMùr,ØfÓ›êktŠ›ªãަ Wä䨷á'.yâ°Q'® ø)Œ$tNB·Ž[ˆ9:[â´×am'ÉÓŒêô-šè$[ÄäJ'÷Äôxàò/ÞýåXé2[=HŸ9LͦDzÐÞî”v•©FU®€ëå‡%<|ZB•]‘Š-]DZ>l€÷%DØCk)¦šÓ<êM±B' Ï;XöŸ;ç~®p¾§ÜiJßg:ISnFíìÆhFíiÚÀ܉jYŒ¾…fßY6«v wfÄf©ø»œ`G®Ê@°èªÜT° Y?àk ¾Z¹ O}c’³Ó)+A‰ËQÖ^æ£åtõcîÖraˆª¾y’Œçvk™´O@qšJÿ LÔh@бt,¸õ­Ø‚ÔŠŒ(¹å÷¹Ðª`o%å+)JÈ–6÷¸%5µ,+ånbý•†'ÔßJøxª¿nNè ¾ûÂ}Yë‡èm¸ç~ß‚Ð-Hc 5œÚ‚ܪ8-ˆ’÷½ ,u6 ìÍ!Ž*ý‚Kôö|Š—òt&‡³E–—˜ýåÂ8!P§ƒ<â/SCG~×~W’Ù?•ªÒvëÒP[#Ø•_ hQÌqLkêa³†ŒÚ ɨÝhÙYª¿9øfÈõW¯›¯Hõg—{ YvM‹‰êž¶Ë._~ý½]Z$èÌ]§² u\¡éT̵Pe}Yщ~ˆ¿²Ø@'–à|BÉ2JPaë‹™IÀ$»[[ö­fŒ™?&y+Ó¬%e Qw5Y­Èé^#¬Ç-p¦G@91svPîëwO ùÓ²»¢…FJ íR:N ]÷{§.ü‘âŽh u -XOxý梁߳‡ô.1%Òm7Ë MR:ÃmÒY¡u:è²?|lr½{ë÷Ìë|ZF¥Ÿ´hÕ8jÓ '5z ¯~EÒCéd[ S…À Ûqù|é·¯Lse~zùáÏý~·ÿvXíÏ_¿þ<~óòûÝëoÏ¿~ü¼¿¼ýþüÝõÕÓË¿…¿ÿõ»2nuÅ×nhú~ÿá³n–jÓmú‹º®^ïÿçëþòÝ~jiHlh$ÐçÓ_¿œ_¾g‰®%ƒv¿ì8ÿ¼?0YÜ1×Ù´ãŽoF(Þ\éîŸ^¿ýá‰{ 㪙ž¼þþñ‹Ïx£éJUqËaBøí=éâ'ƒ†ÙÏP»$’—@R@’A ø6a³90[ ψv ZÁ¡5S…W§A„Ã~—u 3îOÔ‚xFÁŒð4¾]r²[þ d"£= h2¹v2É6;jcòOމ(g»1×=!´˜ð ±xRu:²"Ê?Àjr#lFÇ¡hýŠVte£ägäÒH<¶ (¹c6[Ùˆnå,\Q/ y*2Ÿ£ Y °5ýc#ÂQ)aÁÔ½Jéæ#lÆfw,\ˆF[>²+…A|tÜzð9ñ˜JbŠ#ªª‡-Àfûãdlè4›ŸyÑFZŽ0lWÜšbñ!ù>(›OØ€µ9n¸.˜çeRṛú.Ur&ÆN„Í‘±™˜8ˆÐŽ(i“cnÆbÉŽ(š¡*ì^9>¶±ê¨L·úQþ£S öžÜ¿’^¢¥¤æƒ] w½âIÈŽ(ó–€±™Ð;è€+NÙòˆrð ©=#jP‡M}3åý00îÖò–ãnY±D¬Þå“ZøÝåÈNìÝ>¾ ³'eÁ˜G¹è÷×Âý·«|ãMã©Î ðäåwOÿúøÕÓÇ}ýôÙ÷OxsÖI\b í €n‚ÝOl³QT&}„Þm…›ýí×Wïöï¿^ï_í?Œ¹'ÿéõ›WÃP¯Þ“ddèSHx݈ânÚ(÷_ Ou$œp åÉÕ—ß,bY..$8óÙ-öÐŹÍü`ó€<ûÉCßÅeq¹ÿîêv&Â1‚ƒÆ-âlŠ0k»Î»a[î¢|?ÅÙ@,Õiÿm­bò©, ÂÝ”QEÅÎ&¢›ÔãÎ6T1ºt>¡)9ÉÄJ/´Ró¹°ñK,hxuñ~lCdÊs[ò‰˜ÅÑæ³þêçóÞ[éDnH›qˆ@µ—Ä&…IemÑuÖ3Ÿã&m±ëœKÚÂsyLj²…ArÛ€.`A:+N4-´} ºh=ºÈBK‚ˆHAD ãD~a÷¢¤ûÏç·ï>¹>LËñ_+^@üÁøÉ Ê(®ÿ±ÿzc· ”‘ÍÐCgé¡¶ØùáëçŸ÷×Žî› _ªM_å¸üa1%”ð²òû‹Ë-À,ηĴ¤É¨×TC“”V0VÊ(G"Ñ•/a‚E¬ÆEä‚ÿÚì©Ã7n—S_È?U\oY"H9&ƒÆ_=n~²¯a#tÊÑ©°RÚ‰Ši;pdËUå“jF™“ †…~ÓÃÖE¹<— ý¦‡mÈÄʇÛÈܰB¨‚agrÝ&†Z™Ð&àƒíÂå(t»¬ÄAIó) ­€ò!KT% ¯ýÉC æÚ“ævÓpµTüjf6'ÕÚ„¬Ò€õ¬ øÙ9^íh–Zä™…M®»äÝ?ݺ7è ›·+ :x·³ÃË~º,Èc-f˜ÅfŠÿ‡ÙuuL˜E˜d.Á9µñ0à^~kžšÄJDøNE7,Ä„o(û¸*®ˆi—Pq=)L¨%Þÿ¥ ˜ÎA˜Ð°“]sMëÃ!ó¬<  „zVt@gبÓfÒìxdô¶‡•®aWa¯&¢_‰Fh8‰]¾„«‹2þ Þ± ©Ã7Ó©k%“!üð§" Pµô–p…o:Ç(.ꊺ @%—C­âêÒJòÀïᾋ¨›‚‹^[Iû%AG3´2žÿm4$yžˆÛÁ4CyV¨¥¦Œú%´Ì çzBFm ¢²³_>…ÅJ[æ“öpȸZÔ ¡‡·+q½Îlžë&k67'w)TÕÖÌ·¨úfs_‡¯MäJ`7Õavsç£8Èda›¹­Âr€ÍœUqòqm`;KX¨kk¶ÂDmk¬1QsOE)¶*[¥0gª^ÜiÒTúHzýSˆhqâÐä|¶èRqŸ5Ùgÿm'bj®€Š”¥¢Àº'¬&ƒœ3ó7»±,J`àp–³ìŽÊÃ\î¶VK4iIF% d[‚D’mÚÄ-©×k̺ó1ûqß(ñЀ–¤I{*.§“ÿ†ÀÉ´C§*Û³=+=A VgØáFÖ1H›ød´ðÖ‚u58È7#Þ|—)€XqÙå= ^7ØM„ü=Hì¡jH„8q¿·’å€4´¿ud|5Ö|ôÍ;C²,žÁÛ0 4Æs7ü¨xëA ؈gg>sˆÎr§bDIÊ75Ì»à|S<T:0ȫƥ óà›dé¢ZS°¤d™Ä… ° édÁUØñd½)G 3o X‰gŠÊMXP¡òÆíé’Ó&-«Ê.Öð„œ…JVn"y#R`uò y,RSþHö"*VlN©."š$Ù&uÖEè‹ú"ÚØ¶Ñ—¨EZä?Y2Kè'iؼ#«Þvš$mLEEˆä E”H/:?„°¿:q¨Z,“L%Hz¤¼$ˆ¤%®,AÚØ[.Í ÙJ’2E&]8²DNÈäF&ׇãH=Qz°[œáé•Ñ®êØAÊ$ KÂne:l Þ–[8Nhb–ôSR¨Ê¤ê(KÄ¿LîÂrÿy‰þª’’\m!Éå¡>ÝÚÊ—:Þ]^ã;5s…9öž¸¹ì=X%ÎbsE­“CëbŒ¾ùÒº·62Wæ]ÝÏš¼–‹ÌÁ抱ýƒ¹b÷`®x0WÄc>˜+ÌæŠsѹâÁ\ñ`®(bËsѹ"~ýÁ\1ÛɃ¹¢p·[ÖGÊ\1{OÝ\QÃ%qm•8£JçVæG2³»à­ððÆ x…ÍQävoGÈ3f ^—š-¦–ËÌþÿ9ŸÓplR¡“EÞ’}@²ëpÚ,˜6È'”°Þ,£®ž7 ùŸží&£ÇDf¦‡¸Äî»oßüåÇOÇÏAµù±ËÏçï8ÿ¼ÿ¤?ÿz³ –4¸(L+Ñ#¢Q²|eÕá5a€Sc%p®Æö½°NK"ff`qÈÉ×e¢S\DjA§,*Z¢°W¯m¥DͦӀ Sè¸R«0×L¯õf½†U~¸fˆ,“\p$(ØÅ÷¢¢M°“_Eo»¥b³^]3\Ó«|–I"X £ûKQðÓFψi³Ž(¦ÇpA6Æ:zaxŠ 4_üƒ¨Çˆ¬Öâ¿ÇXªÈ³"„ªÈ³å<6¯È3\œu…™µ/—)Ìü SËá:ìà“X…9¸Ö)ò+z-&bôÁQeRjûa —RÛWôzTµ}5<ËÔöC¦]¨¶c¾…Ú~˜XI©í+z=ªÚ~ ðÜ|–Û«í‡`ü^Õv\–þ>ÕöC 91µ}…"³Ú~Èàw¦¶¯Ð7PÛÏ=¾Ú>ޱPmïîÄü^Ãü^¤Ì$6“ê(Æž½f7„Ô>qt;ŸÑHæÏ‡ÀxJœ"Í“2!͉íE+Øs»½èÁïl/Z!Ü‹&ǶŒwW_/oº)½þúyá~ÔÞÅ~ÔÍpÙlíA>Çu@¥÷žàÌÔ”ž>swñ¸ÖgB2Ø)æÄBŸXóåÐoæ¥Ô! Á„ÕÙ֔خ·æžvë„â±B&,߬9-;{›½Ú>ë(s-n‡¬ÞŸèxáYßÅÙ¬5\ãySàëAÐ0MD´dnÖ6qv¹V!Û¦‚Eஎ,Y îV¢dñ3}B ´èÿMR?mô¯,õk;üúïh°œ0?”Sù²¿\Ü(‹ˆò@VUGðˆ’g‰"òdMâ°CoGõrf~w[?J‡V°ŒÝèæ%2£^{\¼W£!þ Dœ—²…Sða™uL)öäªï÷ï–j²h%ób,?À¶* §éTÎø'æ ¬ò ÃãJ°2|’²È%°\>¯+ ßVtêÝ@×/p{âÐÐxá t`ŠÅ»FêH”Ø•WÛ‚Z,?HéYº¡Òô±¾V&H–ÖVŒÇ ¹^ÛïÏÿ†nÐÌ!e^©˜ƒmÖ²~‘eá"ãã#.Ží Ñ• Ž³H ]Á0ùæûçû_—nžeq¢lže·Ý<çBÄç×tEtôá`m¶y.˜žy˜c9aá?À™šß£Ö홤Ú{ȾØWsGûãjø–è‰=ó€±±¢ø69Îì6¹~­Of›LÈ®ò8ì”H]m×8î6ùBk\xŸœ5eñÕFÜÀì46[ ýŸ¯®KöxŠÈÆÞ]]~è/ÞÝ^\~|üîÝ×Ï_ûs¸™½KÜâ^we›œÆwûwý›ß¾ ÍW¦r4êÚFåÌH9"ººú‚×Áûñ¯?^_½›~±7ê…GL„àOã»Õëè¾õºÑ¿hþåuÐ`Š`R|/€l&¦ørª6Ï÷Šºyòò»§}üêé㿾~úìû§?¼Ie»øùúüòÝ'“OAARÕIÊ_¯”ºƒ>™œoôg#ο1èÃï¢kw^¥v&Gã°3)M2¹7D[æÐ˜Z.˽áP’{õ'Ro…i–\WËê%£®“]$Ó/š})*Æì21ê¥!“)ֻŠnÍß³09Ô‚¦S³Ö÷ÏlšËzà)Äl­þ]± ÛM]­c6Ù•&º™Z.c6„fsíïŒÙxØE@ú$,õr~;„ôYj6ÉÊÖ‡&žº+f3k}ÿ̦¹¬žŠÁw»hHƒ<`ñ=h£ï¨K?¨£2nPÅP‹xPH^‹³jIòiK>íO?«4ëf.z|_(¡dâ¶œ:/Ÿjűœ±2ÍeF [&åS½g`¶9s=ùd7Ã0î8L¿Vqòµ±ä±"^ÖxDؼÎR¶ ÇS% öü¢¢S’ˆåzý ì>&DŒ‰×ŸÏoß}r›Ú?cR5ø*ÔnZ~óˆMQ_sËév>ÁãÏÀë§»{ÁÑà PÔ"IGm²›>Šéc=}„$w5$4¥ç‰:?Åkîý#“»Ÿ€sî_ k±Òƒ9 NKo'n.Ô’Ù<›±<±WŇ6tjsS3¨„ -”ŒÀ[$c'Gɨü.vc^M´6'Œà@¸£å@ÝpBH¸nÃý%„‚ ?yd¡±`Û™œúhE5:z˜< ˆ‘N5V:o¿ðS6ª”ðîD^xòj,Æù†’^8¨¢×í’Ò^Mch™Úfjt¢CØÛÖüávǹ65()ú¡¤Ää¯sn³€Íúnq^L'¤Úª&ç€÷A‹Ô€-ÿO©’-Ó“gdžTè‰ Ä´•”hÕj‰Ff7­Âq9F†T!¬JŸÂ†õÆ&}Ò–,i´Ü±ˆþ ¯á,× Ñ¡ŠGŠtƒ©˜¥ÜytØU ´µ™¤½®Àâƒæªfç:Áê¸ÉןEš…?´××þ`–¡t¹ÉX§y§'Ç:"éa]P@é%ÛXf$бŔ—^úƒAöõígãïdqÚ$±]ê}²‡]ÑÊ7câî‡_j´‘j© ›Ú±Ç+»ªqhý×02|³Û«Æ¿+æÔ{¬ldZîǧ09hÈ+öØàµ€”ƒÍQŽMíosêZ«WKU[m[´µÔ¦œ…5¼|WtÎÈmFhAïëºv…à§§-1GxàÆŒEÎ"ÃXc{ÄXk)Qý·²î¸]*ûg:JÖY¶€¯:^Øè!ú£?§·o=ö ŸZeÏÕób;w/+Ü¥v“>‹ w÷RoÒK“ëEOþôÖnxV?vïXôâæµ eÍ‹ñDó ¢Yµ ÊrU0¼ºΤ×'ûϨ`Ûg€`7¥¾wç{Ò$í’“;Ç…%4¦Âål”œ’ñjÿ`UTaˆzÕ§JUY‹Ê)„(¢ ]s!è|)€Ö×RG$å‹¶Ý.Ëõ¸pdd÷t§eô ŒDN¡È)”!VäJ¨û9>X Dލ\M—Päð&éŸù§9I"LjM=¨C±&vøQ‘ãe OŽé¥Âúá6P`y€*­QöFÍ^¨´ÆJ*­´Rcu“áÀÓ‚”`ýw§Yiã ü9p6zÿwr6’por2A&)ú@&‡c˜û(¬¡J*ÖP"><Þ×Q¦*¦ŠY‘AÍQE=™ý5R*8g%¿zÕNŽMÒ«vò\²¾t5ŠêãîÕ²`¯ö Â{5ìÅ=l½h¯&Ã5lôuÇÙ[ÇÍ÷°Oýdý96SáŸë±I3Bô3þÚÎçv@>B„N¦7@{Ã%ØåHºÎKaC!É TîÆ³£1»Q'áöa¶tk_Izµ8î0…V3d¡Ïƒsû÷ŒTâ©.–ÝÊïE’>ô3<Û!™ûÌ®æÑÄO!¹¥&4-š KÌÄ÷;EÊãµd.I$q°$u0R`$}0’@”ý%F8dI*ai%mtB‘˜ã»í³†|ÚRÈt{¡¼È9™°ï˜á¼|ÒœäaN.ý€t«R펓 ÈI>â$ëò¨}Ìþ˜íE®­°¿¬YªžÔ–(trÇêÛB»Ü*l7mêSBîÝèh¬¯ÀÖœö~³¤øJÊÑEbtPž„àgQˆCzgã3’c€ÕÌþ™lÞªëìÇš1÷THƒÊ ‰°á›S ü"Ïâ‹ ðb„VpP%*7àä.¾¸ì/.÷ß]Ýî"3€Óx²¶@ãšœš…k¡ªgô ­ÿ´»IsªKê>z°_áÖ°Ha±øáín ØõmJŠ˜·Ý]Ñ!ãT,Á„%+–CVo[ ^XØK‡z©¢^’šD¸Dê^p£›ÜxW£2”д­`gÉ8'kâõÝn7æ{knº•œ^óºõ×®mÀÂˈÐé]eF³õn‚ÅC‹µ4zôz€7‘E«RøIœÝb³sá…¶øê5Rñ®ÌƦïÂ1·r¯Y¯‰}íí.x<^“÷ëMî{x®ñÇ%3ZX!—óh&}ÿì\x7«½ÚD³ˆIId\¦Pµ PÀµX>¹X·“þ€Æ;#NÔÁ1=q8¡ó);ý»ìª“­?níË¿Ÿ\¼)l¡ªc$ªêªóQ¥Ty TuG]uxÖ–ÿ›<žVjª…‹Óðç¹»â¦j!ÝGûj̓‘Z&U‘³8;U-k8óÇ61c1=Šá7yœLš;mÁ¤U6>ëù‰âS¢µyxÍȳP¹ù‚§Z3z-ÉS-Úg&M„ýeÙÒ¹:´`½‚ísð§¯,Ï.åà'‰‹2ˆÐ€—¸·XÒ„Æ–ÛÐ,à´µ‰8lÓp§NåÈ3cE9€×S‹†¬=´²~¨Éî0E ©ÛS’ú-©s,³¥‰9Ïê„5‹^¨7è¦{Ã:VgIrMî÷ÀêFIF¬ný`!©F¶fc¥±Êx¯'[¹ëåÈZÐÔfY¾ëŸ'˜äŒ¿bG»5mt¼˜ðSk¹­8¶Ç­IàÛ´ž¶9ï`¸´IÙ^èऱ‡G}Á „Ÿ‘-:"KEÆ.ÈĶ1­_¶ ½‹oKo.ü$cÿ÷N±6‚€ÄuDà wâðo<èúW8¨ò€ùŒ¡YÇç…nDš‡NŸŒ™"I3oOœ!MA£{Ö¿¾ò* b‚DtöHþQþ1pf…ÉÕŠôî²-7iø.×…y³2ôèy޳ámIµšœ$ÙÚW’&Wt>Ââ®5pÚHS²Igb:$šxÚ¾SB›šÖ+“`Ð,0óz< W¥j!’w|7 ŒA$âÿÎ2èN * ϼ~¦•%or]3ƒƒÚO£é4¢}eš·æ§—þ|Ñïwûowß}ûâùë7~ùž..€Êu$ª[±¢ªQ%峂B~Rò©¨–— ›­o2ô°¶ÀÉÆu‹Rõ¤VÌz“âA"Qûga(_]Jnuù 6QZM$ 6ñ¢ÒÒQIÀ‚Šì¼j©:¹÷Äx˦Škï.á*ùóÕrïbº $°Õ%Éþd ©«I|«ÂÐGñ}‘¬±œ¨‡ž(Ɇ«Û¥Ëm%¤ã\yê] Xfù¨rÔ~é²y­ªé›ªJ¸–î‡]QHªüHlÜõÚ"bK¥©_¸lsXæáz[QༀÒWÅ"ÀCŽž'S,6 Óz­6¶„L5ruˆçÝ“iŠ“Vo ÛsÌ hñš$«—ÞõFz4þ]Á/ðoŠ0±MT3T-ê© úfY;\b›:[-q—Šõ‹wÖÙÞ)‡tàè…¤NRG߈¨H ûPwy¨‰­c h¾Uñ˜€á˜X¯dx@æ$Ë 1V‰ •c -Ô­×*¬a/u û¿_ßQÃ*F FO/ˆ`}áÙ®„KÉGìà’•IÀYÁÞVÔ9Y‘›9YÁ8¯UË‹©¤?'¸‰¢³ ­rq¼ÎK4¶š~,Ô̼çíATÕƒízs`ͨ§ æ[Ñë’E&¤PYákJÜ›PéV°@Œ /R;$±&4%‘¢Óµšm§X8øÚ£ÿìàÙgØøNhE¼Dyc+« ræDIéŦüD±ðàŒs‰1Q«ý${%N_óŠìÀ©„Z‰9:eêLœ!y{¼?R¯ÇAP ´!$Ô®5½&&Yâ'`’<œzÏ´¿Ïé©jÒŒa‰2~6ž»‚g£"¶3š‚2Ð’´dpß^]X*¨Tß2Ô¨ÈB¯ÿóÕõÓ~ÿyyûæêOç7ïJ…$ÞF— É`YŒ& ½á1£Àþù·Ô¯Íðëû«¿_Þ^¡åám—Áª¤<¸¤z¿º±$’pÊ•,åï0êEb‹ñ—¹––øNAÌã$$çÈ6à‘sÐE¢q»v1Ùb)räU_=à̪8˜ì8Š^L C âuÁI´H+ÖIUÊÞ¼Ú^‚ÑGèå)í$¥G§Ãµà0^¤MQcˆŸ%7x>ˆ¦ÿHý(†ÿ¿©µíù¢õ ~Àz'µ…ëµÚšO­qŒÞh½Ü3«@™]A†ecÁF}·"{ÜiH2¬GêÃõÕgb¼I\¬|>¹úºTõde–ª§J«ž©su&Héÿ‹–ÛÒ–lDe<%Q)$Ôñd…Þ-–Nô•ÄFÑöQˆR™RÈïk±+ÔB·zžÿþëÓE¿Oð_[Y2Ë"£Šzµÿxq3œŸ_^ÜâEö:µ1îÙîŠ:‚Túáñ¼1L˜Z@arìL Ž`ÅRGܲ8aǪÐ)tx†vÅQ`ŧՊx—Ø+«f˜p`/Ï?ïߣ–ÔNËkbVl‘s‹[ê`õL0ëžcs^=,—@‡ƒ•k<åg¢ƒêØ\`“ïªX×CNáL%nÆÕÌù—ËÛ‹þé¯_Î/ßï‘-8yÏdƒ‹&óK>w°,èá HŠ@0Ç.%¹ d>Dp (màNHôÀ¥¤ˆ#ð¶0{aPæ†Ëêç¯ýíÅ—~ÿƒÞ-žôç_oö(âÈïïÇW/Ÿè)ÖŠîÝ gY·€´l²©E×Õ|ªyå]aÝ©ëm–¶6ÂðĬ­Ñß<úËÍþúæÑõù—OÞïÿ¶ï}¾úÇû››5×øô·óëÛG7ŸÎ¯÷ú‹ŸyôøË—þâݹ¾°öoWÿøÆÁ_p»!Y>îMÁæ—ƒÔæJÙO­Ò§ÚxB6SýxusûãõÕ»ýÍÍ5÷äåwOÿúøÕÓÇ}ýôÙ÷OxsÖ÷÷¼tw rÀÕÞðÓ°q²;Wp‡HßoÛÙ»SÎÖ].c…_³8ÊŽïn5ºªWüœLlË›©¶ÕsMoüÖxØ…{·ñDp}?“ ¯ÇÀÿ9UòÓÿYa£$Á l=‹PM‰Z[Êåû™r‡w.½„¢½iî'!T;¢ªÓå·ø ¤›mÉèßÖµ*·$ÀÆŸ8¤\ПXe³2Wl”WpI½ö1aÊ¢ìŒrœ¶ž_'©±^ÂÍׂ̭ ¢*ÛIM]–Õ¥b;´\•·¾ÇÚ-[—gj""Q‘LØr‰Aý«ëùü¨qz3®´I1ÝW+=ɦ™”Ï|FÓwx«Ã),û€8¶ •K”àÏ à;wéºÓ5™"Ir ÞW£ÒÉ´ß7*5‹/ånΈ~˜ `˜ ¿ÐR/é×Np‡µFý²iô¢—Ô¥‡Æ<Ö ,’ÌÄ,I™Vš€¬úSS»´@b _ÑçZê»mÀ=Âd¾öN*•­M'ñl°Ò[-Äf){I) ª–©N£òÁÙš™Å²ÉèÒJ­ˆvgæÑ ¡<Ùô]Ž*-.¢['[´>`ÛHS$vü×bïÅ·BØ=_òÎ>ëô9üƒQÜ‘ÍÌ,T•¤µ~üÕõhåX„t2?ç ç%š8/{‘¸LBÕ5¼l"šEmzÇ…oáqæò2ÄöYè;uø²IŽêåž úÊ"zމ‹1ó¨¨EŒOã3 5$ü˜‡IÃ’TI ­·2g"óZræ5AïWµíîô–¦Hr³JÕ",“²vJ-7à®ËñùµD”øë¡XœâÝϯ¬‡;Ãg€HwP\]¹J6JrSb9ß-8+‘)ˆñ$¾”9Ä'æp˜öC y}ZMÅDê@Kö3êG– "g˜Ð’þfcRGùöT•µ‚4ÍõJ‘dŒC f´¿]}ÑÈ-n]ƒ ³aM¥‘ÁFÂz¡ÙÐõD8ñjlðüæ¿¿Ù]LóñâoûËoðÏ×ûÿùzq½¿¦«Qõÿû&îߥæß SYqìøÇŽ)ï&ðKå®!Œ°%ø-^b»4kÑ[Í‹¾ß<ïw—»ÛO7»wW—·û_o£µu6ÎZâ³`ugV`ÄŽÆÒ »[ÿ’î™ "^У„eVw_ ñMÖµ°¿J¶‹¨9\M÷?ô‹÷ƒÈ[`®Ö†LéïÓÓˆIkuP/Ý%ŸûõßÏ/ß÷ûk}d¨ÎRf`f½È˜€+ DNPòk´Z?ÎíXA"±M'yWèêËÓ_“=Ñ Ô‘#÷“j‡)%WF.ri­vñ¤´[¦Ì{8êÚ£—§¿~¹^H3ºÿiüiܘhœÙ¼u@Q™¦C²=sû€é29­«äI.Ó]vêÌ÷µølUhý°Úaý° öÛ‘¥mûh‚òTÉÁ!½ñ§qí–Œ´%giíf‡ßÎYì:àÃêEÍy`{ó·'†iêHíZœùÙ˜ÅÌH"íô‡¼­í! rñ&„¬3…‘}?Uj2u²ák3Ö¢¥¯ ›­"6Æ€bSY—~@Eÿ­ÝØA{¢ç©ý>ˆü@¡„øn±XkÊ™ò-+ùýXïâa M0 qôIB‡a×Í‚±#˜Î=t¡æØ¾ ¾ã¢í‹º(¸n+$$!ô‰ gE;z«m‰øÔ­zç8–?"òÓ& (ÞEˆ´-Ø|M„–ž2ì_cÝ®*@"^ Œ±Ã”œo#ðÊßÅ(^nÅY¶4~l fÎUƒ4‰A†ŸPsÂÚE5[G(*÷‹'K\ãB½Ñ’MQ™w63æR+'A…¸÷²)ê¿UÐsÙÔ³Ö~>ÿm÷óÞ8 vç·»ÏW7·»«ËwûµæZÓã8ýþÃ-ôü0)ïî/nÐ 9ƱûÁÏ=>ŽqþîÝסm'E삺dsKQâÈù6#+ù°ñÚ,3;מ–æÛuv9ó«P10a ´¾ìÿlû|b¯¿ìß- •~ ±7lî4…‚Έ¨ƒÅ‡‰œy©ç}Ku>¡R*#ØäjB7}¦nªr"h¼‰X¼C½²$ÂùL¸<‹©àõןÂ0-‚±m©zK DÌŠ<õgcC,½c³„xkò4=Ÿc•¾Bàÿn2–zã€ËEf"~ì¿Þ8 u²!Ž2’01“BwFDÈ]âäÊ™ý×ÞóÐHñ#A d™¥µŸ\Q8Ñþs1dd«A(sÍ[‚Çg¸jçÅq‡5ÑâƒZÔ$õ·¸ Me­j8™F%ˆóåóŠª`’­½riãì:dâpa­¦œò‚ìÔ©zfEÒè¯ ëÅÜj ÷kI;Î:@g†Ìãf^ú49é£ÅzK‘E[ >¯86ÝacŸp}ƒ<¡!ŸJ¹µ`œ,lÖÅT7¢wS¯No§”’Xáú8a% ²±âCgpÄ ¯gí2¼.<6¡b…°IôÞ$†[ÐuI´Dx œßØ| ÍÌ›$°:½Ô²„½…‡ô2"% \“/=ÕdM™JH Æ6’eÀѽrÔë²÷ñ1~xT®%ƒS¿òƒŸÝÜÉý0î}°a*¬¯ Û \i}ÿõzÿjÿaÄÆã?½~ójõÕÛAg¬ÂNk¯QÜ ?ÃÎÜUðbÃ\‘Ü "j _Q¬kp«ÝOKÿäêËo»ÑmÔÙCRå/¿ÚMþGé‘÷uwz.ÅÙUTÁEGl?b?uï8#Ïx 8rÉÄÔÈVÏö®~ùÁ?‹à8à6XºSuoh©‘µ3]E«L`OÑ­á>pŒÍdà—–©œÝܱ‰ ¹¹ñxÔ–¡FâÝU¦¤Ÿj–µÈÜñƒpÛPdÐ ÎýOÐiEÙÖ¶Õ†áÒuñ„í¦ÛÉëC“†cÁë}ÿa’šù˜l̤ƊVÚ1)¼§Á¹ˆñf"I}ý„·Ø>Gœé88ßÀg_ΆiÀt<êe`QŒ¢¡ ?ÒÓìP×EßÛ$!qERÄv|މqF%j`•q¸ÁJÖå>-*Ó(Ó—XEI"ŒguˆC—X©Uu°…ÇäøŠ q¥ˆºO=O‘N ¼±bu\7!')üýÅå×+‡wN×Á&¦ŠÀlònt‚1úqèТ*³ËaîÁB¨^ çäoWQœ“»¤5-L<}„·û[4Øx²ÃŹæšÄý¸„ýØÛÞ(ÓHY¾—gýÕÏçýn ºñvŠ·#…HF– î Ãá£0é/¿é—¼ìEFd9{´1Y½/§ùwФ’ʆ„KÎ@1Nò´*ZŠDî-p#ÕÙK­–½îv RêÛЄ5Sn=o: ÿLЃï¹Í±pŽÔÈÓ ëR3pk¸ã dˆŒÀ•×@¾_Y2‚MH6»ð6 q]y¬~Óvã¿Ó–`F„Ouåžé ¾‘ØužKF1ôïyÎV†‰"áÚÔ¾ÖSºÛ¢œ4«l—+·³ÔLZÒµiþÁÙ+4©öš2c‚ÕDÔ6~ˆL£ìAkû.J ôWËeÞ Tí¼ôrãMM-ÝZ |§2› ¡ ‹¸{0ïh4IBA™é('|¤íW‘öŠûÌ£ƒ)EÓH¯Iâ̋ޙìb~޽N†íHô„¡'¸‰&Vç&°í`ƒÊYTÈEW—ÞCºBùé¹`^¦ý1¸qÀ䓯?Þ?}~ŸúéÙWú­/^"_ô›y>¼÷·Ôo0¯o¯/.?¦¾8ë íoÈì…*mHö¹—;ùã× œÁ#?ÔØÍ³ý툴² Ý-»hä_Zò£W(Œ^m=YãG¯Ji#HÛ.›:Ckó¯¿ÈêÇóë›%©38d™7ö4fµª,È¢/Æ„h»©ýðh©ì.ã{ z|ÕÒJŸ’PY?ê;*«Æ=ÛºÃb'zAv,ˆ†Ínâr¾™îEAZ]'èœNîÝYlÎ";8Q´`’9[¿‡¬­v†\Áá‡Hýmûª÷³U7lbÚì”(»§‰Bˆöp?ÅH¶a¯>G aÓî :6ðCÛœ8Æ–ôdˆ·ŸÐ[b¸Ÿ*šp}Ó¿—N1Èqø4…‹ÎýÉ?ÉaÁÑþM$À Àñ‚‰]ƒ¾~þyMj¥YÏjåR;ca$á7tꯥØw;Ê“¸qØ#ž›ÓÁEh iç…Ÿá&öOæ„´<ƒƒ[óÞgƒ–PÉ)NüÉRoÁ™*y¶'ÎGàÕ­Ð.nîº ° …‡öî¬8; ·îºØi‰.×  |Aá.î› xnâªk¯Ëczl b9.ª´6í¼ŸbxFOnÏ(Æ¡Hà E“ñ è¦õ»©€>›–¦?ðÙ ò 2ñEþÙ.‹µ»¢mψ$X5Éñ3ↀýk’bFìù¼¼8áîÊü dBP5=ÌŽ$ĸ–¢†|[Ò_KÑ@"*Iã°yCÌ6ó“}§®Ð€å{'Ê~l¿ñù]àçÎï!PM˜­p`†íÝžPš3xê•éGzÜxª¤*[@£µ UÚ}y˜´$Åã,4‚„F¤ YÊxù +‚Q•TGÈH&ŠPrÀ o<ò~Ñ€§Gz@ËΖù‰õ ¤Ÿ+<¹ZpZ#*‹jµ'™Hå7Í´_·r?]Ûø}§Tx¾mþä&ray¨ê ¦#ۚͮTÒ‡±"M¾wÈ™c‰ùñdRxoäZЉ¤ KîÄÙ)Ôé¾—g}Sµ*ê«%ûZºŒ5CÎé“^ÆÚ™¥ŽÆ2ú¡®&$Œ–-Ú»ŽƒŸmø¨ fŽŽš-ø)‚dÌÊ${dpnû I(yFh·-תd-|¨åªK`(´/Œ×DÀX¡¶ÆwK éZ;P”í¤âQÒ¥‘-X˜$êÞ·à„¨_‘r´n&­Í÷J¦ÂXjÇZé¢>kŽ€ÉS²ó+Ù=+>7ø×ãŸyƒRˆôŒ'Bz(¯eÕÍb¹vÓó¶‹ÆŠô¦ÅG¢:=¬H§LßhA¡ÉÔãX#$@™U4‰€»'äÚû½±'ÐZŠ×‡õ>C?ÛM!mÅÇ­e]ó¾ 6h!¢ íS„a#ênðÜVãÙ:&ÁsKäéÈ…œÂ=5‰Í¬@ä$Ò@QU-xÎÕ™¢nw¤îA„$“×þ­ßÁ^ûŸLwLÔßóMŠÜ§$ß,ö°|›q‡¯Ï·¾ÌŒ\í¾·ÙFy›ÛŽð6/Ë}Ôy8°ŽCؘ¥ó°ñ|*Ù–ŽÃëýº:±Ì»D0°Ír‹¼‡G®BJ~GNn-Ä^À¢ñR¦a}Õ…FâÊ23 S "¸ã%1ÜkÊ•Õ2m¢¬ ~ºë‹¼98°#ˆ‰8z_¡÷ƒË@´™Üöšuý(²> $t\K²ÿTš0AW±O#lœ¬èþæuU1¢æuEBh¶Xƒ#Fq¦®wŸÎ¯uB¬WéT]ª\f1?²ÊbRËwÎÕH¥ÝLª.]÷á»ýõþÃãþâ\W_&²:ÿÒÀ4jñ:u5úL×¹ÕÐçœ1ærb‡‚=ÌÌOˆcátE‡3 š’ ‰²i7ãäêns“£R6~÷¶ãCÒïiA Ïz&ÂyÌhÖî8ËwhüÀPWp @ ZX®!i?‚¡9˹ÝÒ¢\eö( v":jp¾^U‘päÒ$r—äSñ'èO|üÒ”'©Œ¸¬#ò&SéQŽ”3‰êI@êBJ7±ÄÎ,žtB {£^ {ãr…à—Ø@¶"¯¢êÌŒúzÑ¿ÿþüËRY/]p† u€!ý”¸GHfHôg•ÈÈ’+8’+ò’4¾àádN¼šÞ8À[ ðzµz¿#n‰¬é†UÌxî}¸5ééÌWÚO µéèŒ'ö×Db ûs(µÑ^e¨‰iqæÔ´à„Š*Äwþ+ó8“ÎãžÜæè<îAÚ“»‚*Ý‹:Í$=;‹-yž¡{,á‡n{(ßÖˌ邺vP‚*|•¥PE_] /¼VgcŸ0)]|®A>Í:æ+k ÜÄ52#„3ž³òzZ#9cÜ_ÎÎ\¢-fΔѬÆU•6³¬a+^AªîR{¢÷lÎ ‡»,©I”ÈgÝÕ×++„ÚÇæ¡/ÈôMv},L%íðªv ƒ6K=/²©ÊW"µd¢Dõ­2Ìßåø˜‘¡ºÄ@±Üñ¨µÝ`m @Žä!!5³U è7ê¯;QI=(­ó4wÌÌû-μÅŹøÛT.~.¡'Dßò?¿üíïŸöרð›,Mà $A³¹SCä³:åB+Bôh_×íù5*¥—„…`㥰„±%ÑS.¶)úLæÌêò€«Œ;Lꈭ«Ë÷¿|Ù/*ý ׃ËÏӘѩÅ>°Î‹}€~&Éë˜PW‰'µjR+¶ZãT/<™jé®ï¢Ii¦ 2“l³rÆD}͵ʧ/ZâŸrµwý‰mÑ®葹!§Ép>#›âÅuQ^ôýÕþfwyu»Ûÿúeÿîvw~¹;¿þøõóþòveAPb;£jãx=…YcøQâ§·°Ÿ!ù\7Õ ÈF²ªòðûøúãêØO k«1"ß:‘Ñ%EºÛ]Ôén7ÅÑ‘=¡W¼oO¨Áž¦‡·¶¥ªà€;õtÚÓ¬>¥rG{ÿ’DpÖGQQdŽÂù›ÍãÄBÕ]dò–Xþ‚Wá-±¼;ƒcˆçbôƒYuÇOýº&CÎ!½„‰æ=ÊÚØÏÔNVm¶“­דÀb£ä6ûfk‰ ã%z nò„1HÅÖÆmÖù0§N×…6IÚÞ\ ²øÍo_–fòªƒú‰nà8Mp·0L¯2yÕôMâ³à"±½Iïûœ¾Ei|’A,—'Ø¿›Í2ť؊áÔ:ˆƒÂî£Aé‚{/r&(¼01v3ÛŒ‚À\óœñbÀý÷RÚõKh[bÝCŠ‘„ü‚Ž$ñÖ!ñþx}ñyëa< vÃg/“ fsí_‡¤œEN'"PßÖéÍ‹hs7Õ¬‚¡aÔ!áÊ &¤:7‘ýÀÛñcSÔŒ½N7&Ó!܆Ngð©yA‚Ž‚«%.a6éZÔƒŸË®ƒzEÞQ/̆Äýàn™|¿ÚÜÝNÂw;IOû|>¼á¯ÌÇAnöaày—¼éwXÖ‚¡™‹Où«M¸™8ì%Ä7 ;Fg :Âc²u©âîœôÌà&E¹VøºˆÍ\€d1ÈOF,Ê>Ío(yó]%n…ÛáQå<¼³J$G¡qR˜‘uÌY«œ4Ç­ê6•OÓ{Ô5“ü ç~È ƒ“3˜ÖÛõ$xà“+:“Oâ­9¡“f2ÇUúN*…Í¡²å¹W„¡„ùU,=µŠ¶È$Zrj%ÜÄä„ë÷@û¤;åî~vÀý‡]ìˆMLEÑÏ«D{žê'q¸®Z¶Tv@±Eÿ€bŽ%îºùÌ5w}#êɧý»_Þ\ý²¿\z‹HÇ7h|£š*¡šº6ä'Úñ¸Õ¤ˆ\®@XN?žáe<#RIÙ“·„[?~{9Ý…µ·KØ.ŠÐNè©ã¯JJ ¬˜Ä±+b _ŽÎ˜–HcÑ÷ûç½ãÎÝíÕî <»ÿÎi_ú°¥;Û—óÎk)±ˆèRBw‹ÚKÎýÕùíz¹ZUä¡ÕzÜnC ´˜»ç^å*Ú;óýÅå÷ç¿.½áî;7#¯Í—aÎ}œaæˆIÜ.Üp H™I™~³ó®šî¦ÜÿKÅéf‰9 q:æìŸ¼*•½³¿ã==¾€±ú|?ò@ÔËb)ÝU% Û'@Õ¶#“_}½Ý]}Ø °|Ü“jÜA‘u‚yý6Pâgžüu›¯0¨+;ÂqoeM(ü$ 4v xÕ-qû ¸Ï9Uke^¶pJÕéª×/øÛþzi~í$¦Ac{5NO.¢T"¢K¦‰‚hH—s2‘{Lv1=ö¦yÚR’ÐÏLõkÒêá$‡F:—>ò.S9gOš5‘”+¯óPa¡›eØè89(KÄ"tãöÔÀ"ÕOܯêw¹»¸¼ÝÜ_zjÅ 5"gF‡#}‚´ú4z‚ÞãØéŽí8rGÉfµQÄ>¢Žk†¡è_ðHG¯žY—˜îˆN^wd£ë²êÀ®yî]¨Ñ¶ŸÕ#é±ý…mñAØ#|quùQ_µ+“i²ìÊ̱"_‡)>Eµ¾ùzùËåÕß/תµþtñª-¦ŒP´WÝAB°&qC°×Añd» €£ÐùçŸ/>~½úzc‰àËõ ÖüZD ,‘? Ͳ®i|Ì‹(BD ±ŸZ¼f3’”2lS*å%ÛXÕƒ¦³µ`ÈâZ™£Ô)i¤ñÊÕFçT"Ñ÷‘âËdżHÈ`0óüÝpÒ)ãÀm0[€¢Ilt†,S2RG¨~JÌt¾á/ýùÅ%z©Æ˜)ÒÇÊH#¨‘ ‰š…i‡Óà >9dí-¶›«¼§_/fÖ©VðÊ÷]âyÛð /j%k㚀e&N¥‹G³%u´!Íi;ú€‡5ÅqGð¬ÉÕ™ŒH\X—‡Õq¹¾Šó@$‹¸Û›ú”AÊqÝùÕFâtÁ­Œt•EHBð*²¨’¡þ§Sc‘ÕP4â¬( Ëœó Îmù=>—AÒdÔÊ쥉°£3ÆO^1ÈËâ—udTU­8M`ÙzŒv¾ CËÃpBð¯@kr³ÓÈÖcôãs’õ3Ñ€ùzŒ…Ñ€+ë1°æë1æêT°†Q8›\CÆ Øl|µæmj^¨6MG®sÔj Ö;4GÏBÓñnwPzHõ.㜸_Q]»Âm„¼EÑrG„ŽÒ8iÖ×[x¼wCΣ°D2”Ò°>póJ$ã;<þæ-¼ÉZF»¢)ÁTƒÚ ó’Õ¯Íä9¨ o½®È+“õs'S"â;”±$³­¢ÐnGi¢ŽzÅ”c&IwI!yWu‰ÂW"Ž!î…6Dçææ{Ú#†Ï¥);ŽÜÌI÷òâóqÉ9/¶õ,«ÖÃ}&¶¬¦Õ*מàæt6÷«êñ$³¶ZOÓxÃOÃÆAÁÑ)ú‡”ç±öøˆD0!U–'¸T‚Žq‘E&†cPÀÊkÊ!-† 0ñû-’äê`RÞ5W‡8Îf6É4'W-A¶ùxêÚØ.qb'?vúðô?š—iëYJ„n—Cg#ë§›IA"¾ä¤6ÛR#”Y´ò.§;pë8d¤;qŸ ßlMïÖgSʸ%q;Ô‹, GÜSùÁ&ò… ŠýÑ~mÜÝÄžQPX+(`|>@I™†ŽsT-VRšÇf¬9Ôx´l–… À›­?åx!Odäá EZ ©g|‰ ´Äm{BÁ£²43}ôªµØÝy|VCIgÒJpš ýbù Þ,6àÈè Í1™­oǘŽëøËåÿ|½º]ê®0ä舓Ϧq_ßX«eý “ÒÄÙjÁzæ4âT!ÛÚ7ý0uV|“UK;›"ÁÞdMÎú–/\æ=Ã÷&;úÚd|±V[bÛÐZí[BrѵÖÜD2ÈâË쎣¬ý+Q~ô P‘ÑÆ­m •Èã1?ûÇ”‚J_Ûò©úÌ7'J¹Û4‘Äm˜Üˆ°ZÔÕáóP¶yXh3JåËÆÏOŒùyÃê×Õ–Ãðã{¶‚â” s•‡öD *¹´Š!Û.e)Hóì3?¨«`AÓp—Xp£•[FC»s²é¢ôÝ×ßþûþ×7WÏ/ßZÞÈÓˆñ&².8g^KK.#-¾¿¸tâÂê'DÁÛ@´¸äIgT†¼É™ÐæÀR zt°–Œs¸å/%éž‚°Jškè å8R{ &¹¤‡`ù^z(ò/šg¿6q‡Œ3F߆)£ÃŠãoálðeÛ´Ø!έò¸!‚Éàz±2”žùçÏ%ï‡aYÉÑ$Cò;¦DÁÚ;7·ÄÕl‡ ®zd£ m’w_ªƒI(”ê:0ïÉËÞ Òû¯/žþðìÍ¿O#B\fМWc¡×xdl¬¾1×ÿŸ¿<}õö¯¯ß¼zþó^;:¾¬BÁè§‘°1lOß`²yùúMü2qK}“ùé€ÅWO‡¾~ó×ù÷—ß6CÌô•Ph†¯oß?Ç!’X†(B˜••q®~â¾NAn˱  „SÐìÅós B°Ô>­~9¶ô:‰ŸðVvÓ³°}dÖ©ü2°˜/’QßÀZüË ¿?úp~ƒï%dT/~Q2Šc›¯ñš.Þðn,Óʈ"X\¿vE°"J/ëû—_`acÓóôue8ï8-­%-[Âä¾zQ0ïÁ’z§Ò®$…gûÛWçOÄ3EœŠxTiÁ.®Î<ô÷õ¢ —+‹D+‚¾;"íÑ=¡Ìr|SQQ¹VÅShÑ—ÉÿtuuûxŠ_¸V Åí`ý/ëÐ@6ì$ªjemïþéÔE!)5~kÌáp«Ô,ÿÍ£¿Üì¯o]ŸùôèýþoûþÑ竼¿¹ùWÖ¦¿_ß>ºùt~½Ô_üüèêË#-&þíêß„{5;Ì}Fÿ`bÙÏRÝÕ ŽÁPhNÏÁ;»ÉIïè'Ì‘c Dçc¾4¿¢ÅÍþÔØ÷_¯÷¯öF÷øOƒ:4 þêí€Æ*\ ×ëFwWØåkáéÎp¨èˆXµDŒmß "±Dr+ˆÔVÕ[AW] ÑV”Ͷ¢l¾eó­(›oEÙ|+Êæ[Q6ߊ²ùV”Í·¢l¾eó­([lEÙb+Ê[Q¶ØŠ²Eeg.^àQ3©ºVÍu+ž[ñŒØŠgÄV<#0ÏhWrxwîÉÕ—ßœNèê*WNÈ­[Ôÿk¯×1›ºÚùÕõö>ApA+u¥(ŽÄçöŸEÑ"ÖY‘»K·¼×’zË{ÍÝA[ßkæê׽ʣôªŽÒk}”^›£ôÚ¥×î8\p$æ:w±ã°;±ã0;‡±ã°;±ã0;—ñãpŸá²ìDèˆÅCÏpâ1‡žáÖcäh}Ýl QïT`V‚K˜¼³ÖHgýÔw¢HÆ•E!â£PP9Ì’YZÙš‹ó#n¢&3¬Gm’!}:0ŠNn :Ù" òV°‰VÕK X.¹;_ÈÒÀ³þêçó~ìÇÞÄŸ"”­%V‡jÖ*¬Íù“‡ì(Q@òþd»œ eDk…²ž7´£zíz3Ö£P ÍJxhjÆÍˆÃ-Kï‡j2ÑñÔ$±4Ê l”ÌÞTv©ý™töa3. #˜6M0~¢ ïgækó ÷ª-ý=ó—oFƒNjÂé0ÝÆ#Ÿ€8™ ~3¡¡o-²xAéÔ ZM6 hNM¢*í™l¶ ‚Öš­4jW²ŽVÒ ø· k°s¬´Çš­¡@o£ˆüñ ~„JØX$—Ƹb× rÔ„)ìØð ~M"-w4¯a¾ÿ,ެÄöu¨{ÓµXÈUyD²ÊBÕ‘•Cl0÷úàž×ûþÄ×À.³,ÉrÖ[Ž\r-.Y¢i#ÀIûëþ×?¿|ßï¯õú44ö+¸@ÖB² "(8 Ç}ªý8±ƒzhB"˜ÄÇ”q!èo]VT°-;úrõåé¯ 'Mtº2J6®‡éJd„ûÞ t³¼‚˜S]m\&àV‹²vúON˜;áýøþ‰Ë=]oßoGqÖ)IÉVU~lBˆàXÅe.wH âr ?œ˜Wêx0£ê„§‡aØï÷·Ÿ®ÞÂ~R6V7üðøææâãe܆¥Û”¦ÓHí‡0,êæ¸€U ‰ò–Iv;ŸšÅ|À*>Õ ^Â|d„±ƒçÀ`£é½kw>½ÇˆDSÇúBÖ’ù@-¿¼ù4pÞ{3ˆÕ¥—¿)ƒ¶oI]… ª A„£z¾g³]ò R ï|ž4’®M° ¦ks#ÙÑ5\NѵwSr,=Gºæ>Ho›ž:éj$õ€’t¹ÃU…p0™}ØèA’«,)cU…Ȓí«jÕ›-M¯ÞW{•¼ˆ4ôÐÌïèÜI#‚V‰ÔVqÏ(#a TM>9ònw²•§·]&oSUI«Þ¢pâ.Úè{·`×íIñ·bñ¿géÆÎg,‡‚Þ²Ô4΢GDMb[ÛuæøoJk5/ë¶Æ«Ì«@+M…DØbÓ~»M_ Ã7Ê1•6à›`?›VŸ\zFWÊéNHí¡­ì"L´Cšö[4‰2ãUÓ.6Ð7Ø®´™¾iC}Ó²è;º)xçV#ZI½„=¬ÁÊwk'.sqÔ62*,—[¥Ô)£ £,4áíbŸ¡³Ê·N8Ælê99ÆRónàHðƒÞ©†k©Gë=°OG¦•å ° :‹jY!&7à´°ä•D{Ë4ü,cÎÃÊûo«øË@[Ô)OwuòN À†ѯÜÿ•­9&tÒ’Ôò7íóI–u2þÎBMGD?Ç2Ó­ÍŸ®Y–ê0XªË‚Q3¯McþtkÀh Ä!¦Á Í¶‡«r<â\ŒUGjЇ‡ÐÕHì'†+AøÖïW”ÌmjV!`}»kpND­ ÂNK¶yé7œµÎ%,<›ÞØ.ezÓ˜¤Ó¤ Öp¤Ìyz]VÜJÎ\¦³:Ÿ»-'è©ç­ 7h.uš.¼söÉh× æ8©DB«Y ×'OêéXH"âµÂg•½Þî ïþl¬¬‚L$Dä+ED‘õ,¾‘éiRj7¹âD¼ m9}+SQ$È8¢AË6@ƒ\ÊRL” îX$——¼X&{ºä1†ä8á(ð?G¢£{¥·“ކ²‰Â³“À4*1iÕÄÙ-âÅq5`Ç×¼hna0l€‚3“x˜ÄϨ‘!üŠ:Æû”¬Îˆ“AùPHêEÑPÈJÁd¨û€EYCúˆ$DE ªèr·À œQÚãtky ìä6±¡=Ÿ¤ï^Û›•¯h„ýc¡Ñ_3>rØ3'äéûÖ2§/¼95ž\’Ü€ß µDQ–Ê„Ûßë= 6ùòVE¹Ý­IJhb“& gGL²[‚·è;$´ß^ʇOŸõÃÞ›Ù?i )UÓAþõ îB;oÎÇ÷AzKÚ +”ð“ ÉÖbJíBQ(¦TˆnJù¦V¡à Ô}ÁÙ¤éÁPCj&^x(­œCâ¬òfHû`>´S(8—Rr%-¬* ,óƒžfò&9ýʬOiÌ„°B3ÁU“ñùT>U¼ üVº7”“Šäô+*@ˆ¿Z¹i&]Â-æ%¦V¢fS˜Œ>ÌYFÚÌ;&êj…£Ú¥ÚƒõŽ Õ€:¦ÜíÛÕÞ1ÈRBM÷9#óUmÝ’&•ûu¥ÖÀƒ¾¥BÞ€lz R×¢{›gR¹"D"‘luBÚóë¬ôóÎñ»Q¬„ˆ &mÒ;èÉ$Oú¾æbsQüUlJ±mÓ}¶mªéûBV£:0:Pô¢Ý¾ƒØan»/%¶¶YÜ>¼¹4¸]t6,-+昇'iFj9³—¡àCä·FM‚þ“§ùœÀ¬@žâÛFFß#³~Î)2oJAÀ A2ÉIEÖGßÓÂCöÓSëí"±²–©m¯‰@¨Pk7ô%@Û™>"#ãìåý'£—%«}û¡‚`wÊ~†E9_78ùJ¦@‘䢓ïÐHðÎÚ¾—°´¬Ún0c½ÊÂ@²ÄTäÖTå'÷*<0Á€æÜµØÀaÎúÇÝþ¨þÊÞÙ‰mìÇ“GkZr{îáVœ17döÚaŠc°ô³ÝœêÒÁ V ¥ön ;Qqk_+³Q ú*CåÌElÇZh"±J_ÌZYu§d嘥vi.2S¢™Ú)vü{ ž¼eÞPþx&õæòý÷7ßz@ö`;Jl_ÑkÜJ•f¡è{."eœ~pÄ’줕§Ì*íD.€Ø½dláA¾J_Å^îà|…T|>!(~‰)0`áõ [z+º¶Ú°Š6Ü3µdïÍN1¿gvd8ì{=lsÑž™ÍL™%kÐ6Ê´]HšÊ9N)ë‡ÛÌÒ%¹Ë%\~Ú–¹ôvL…@6= ©„ f-]áP—{¹ 3c‹"Á%_[pbx3Qp"C.‹78„ Ë½ùs»K`+5 ² ÷V¯Ð“¾“{ï2®|„‡ŒFšÑ@_Gž 8‹/;±8±YJ¼™|å„x“ïS.Ì ÝL¼Év¹1QÊzi orJQ¯½Ò(¥jLk¯4=š±ÊRºÊ3¥W%JÛý“ƒ„¡â³éÛŒåW> –Lñ†¾ƒ+ðè{~lt²¡‘`‚`õ'³‚!æ ˜ÅâûƒèÂÌ!‚ªÃYpH©7¤™7²í ÌÞÌ.é=v;©M9!9<ôÕ”AUš\½Z´…ªa¾.u±ŽÒU…½  (ZØXZadOÚÎÈÛ4Zc9Úº£î9Útk¯†¯‚ SœØSÊähÓ%*jï(“£ Üõ”J&DT¶‡zh jih›î¡3=ÔŠk²fK¯§ËF61k€ÁÁØ·„Ô†j hÇT‡Ý\‡L໩ÃôUs{+>ô ç ¾RTW³Pë«™Š¾“sJ#©5ƒ2I")aq3Ðpdʲ”Ñh`À¬kà º!–¤£­ÖmŠyô¢C¿ÆwÉ@ã%Á„(~…ÛI Áÿ#Ä®Ãnå^¨{;gÒXBFtí$dx=m; j»¡Ê ¸·äAOzÜÖ[zR¶_¨ÆLºcóÓ¸ð ]ëæÎ†—äÅœX‹‹ïÏÌ%|Žóê3´› ÓÚ-•9y4TÜPµkJC<…š£‚zm°Ï&•†½º7{ÿŒ9GÔIß›»gÍ1¡+Mа‘æ¨ QÖëBÍѼSª#}À×= lV„ý¦mý«ueÝs±“¼x+îsK“D|M8Žl,m«‚³NI8Ž9Mö¦‹E÷¹a´Þût艠“V`qèNŠ+± V– ϱW’¼»ñG¸Õ=°T(©ÛèWîÿªVÜÍ–]kµëåoÊ í⤪‚Ȭ¤k8þäÑ® ´´eá½~?´•³Š¾GÁqóÀyº&c.Œœ|qbúÎw#®²±Wö²ÆÚ=ØŽÄ+’Fkö‚/§%U)¶#i‰$3™û;µÎCóà†½1³®*uåy;tD=àbj];þÈ5èìšÅè¤RgÐf>Ö#fÑÙÍFŒN¸' Lzð$ ŒvÝo6€‘iN*@o7”“ÃURKß7®(í"´CÒ=uvZš9å;@‰N!x…“·‚¤½òµôc +oÎD¦[Åa°œkn;÷¶)©®»sˆµÑø$KYn½K=à!«…ß•¯}LÈr1™hîú¿Å™n•ñwêárt“;C!A¨glÂ}:{òö¢Ü¶2~03Íb"Ù9׳g"V•°É¦ð ’t(såWPÒ5 xEÙ8@[”: ÷°±È “,ØêNÖÉq‡?Â…£ ¨P¥LÅoœÃÀiœ#Í[b Mö­›8R Gs¥ ÕŽÂ 7zA4Vð (¦¦{ÏIÆTo@FèÙcwa^ ”—Á¬Ó×.mp‘Š §Â[Ã<U°X¦­^¬¶ ÂîG᎞ˆìbµ­‡“1jÑ.U¡l.…Í]»jñÜUì­îœ[ù?W4“%ñCÈ]so\³8ÉúŠ[S°~m¹{ºvçͽ]Êú q•Ó2ýU‚ !…"YsxH4–J§6½ŒÑHé—›ý£ñ™ì0Ìg¦Óûã³Öñ™J×9!>“ÃY9xiÚyýŽHðfã‡_Õ­åËù*æÝ…bŽÇJ‹¨p›xs|ûÔ5\¾°cÜ’èb,¶WÑÔ¹Ú|ŠîŠ(£@wE¼¯ê …Uz_]JHߢaMðª©Ò¢pwÚ•Xã†5Ù°Á árôi33cDu[#I]‘ºXø¤¤¹)»Õë^ÇÆkÈ‘ñÏ„2eù„t”ç/ 4r'ÈÅŸµVh£Ë áu‰À¹ Óî-27ö­Z»WÚ·j‡o*d't§ê,G/3n™5Æ< q5šwc 4ÀùÃ".n¢{7–±MPÇ£©¬›mŒm¼4l¥2VTVÆš·O]Æ6Ü`±F&#c;Fb‘Êi.<€Ý$ÙÞìBºæ}; ùµ¹ªdy™´Bè ô/EW3‰PHÂjqí. ¬6(’ÙT6vzaGõBÂb–°Út‘È"¬ `ilQ„UW•$±Xï²Â5p•.ݼ»*që;¿y'ïD¨ÔuM÷ÖEÛ:Ú„» ¬Ÿ]júiƒH¼Q÷ºÐ&ÝÅåãŸ3y5Éprò’zá}K¾Ëo·îTŠ\xžì”5+ùç"øE„7­ÏfÚ¨:sŽ6 gÒKqòMÙ¬}S!Ñs&`‡o6öá*"vø–<þm­ˆtäí{L=È!rÃÈßÁ§6ŒºÂõâu΢N,×DjSSzá†ÁÇ c|ûÄ7 @_Ø¢7Œ¦#±Hj"V{@sæ¬ÇÒI`*=@N’XþÊ*Mb8ôHŒW‘ÓI"ÇXÍ*>CHFÞ÷¶éÉ825NHBb­ïøBS_iTuŸÏæ"æUå@°FÚa}¬p+"H'ÑÊíÿµ©RÆ1ƒD·5£Ëṳ̂8#I›uˆï´¹˜$áðH6»ÅÒ“Wíré)­ô4oŸ:Ñ3¸·£±E=,ާ;GÑÔC‹4ìš×*hÄÓybÇ,J]㆓­È¨üzFa½D=Hô6M9`ìaŒ ÓƒÌ!€2ô?C‰PZÉÒ® ]Ò¤[{Þ¡|h™¸áuFx 'Ú©†mù»o_¿ýáÉðçñ›—ßï^ûfÿëíôpl?Ð>äè‘’èãaïýnx|;¼<œ^{~ûôò}üJÛ5¹^Ì^OO~xüýÓ©ßvè÷1ô;L´é˜b­)ÝÍ8“ú†‰S vyU­tN6#˜Ò“é†AþôõÇò1#èr81¿þöÕÀ–/-ïV€n×ËÇÙ¸Òßè¥þX†GZ´~ƒ–Ô[‹×ß?~ñâùoFq”íß®±pˆF€ÿ›MgƒbùzRϹ°ŠÐ€¢J‰oØø^ûbÀcù*¼€/ž¿~¢»Êâ¥+{&Õ€xƒÖe„#(hWŽ@͖ߤ14DíëUtÓ¢y6ásíAóÑÀ.\ •ï~áj`ñ¿úäZÈ¡™VnVò°À¸O`„!n§0R£V ­wj^„ó’ð[ßMð>ž)"›?!›q7ûnó®\֩ݬ¢C%š&±eTm+Ï.…>ÉAÊH³u»`‰4;ñ²…ˆßVt¡Þ–BŸD|mD×ZõC 9%0Rw#¯,2wLk+$‰ëŽÐ1×±hXF¡:¼eK —ä3Ð#ÀQ©™4E¼¦ÖmY9¥!ÒßëŠPöݕ޺^^îKñS#a¸?œ·=Y|y=±]eÐøâã‘´:¼¾ûy»ÃŒ‘a”­Õ3Ò6Ð^”Þ+ŸôW7{­¾Ü”ë/ͧqƒ‚y§‡^&k$%WÊŒ¼à'·CmŸ¹ùôõö»«¿_ÆÝvXäû‹¤ÆSG]ܵÔ¶OWÏ-0&0Êf&}ðAàF 6émGÀðµ#Œ+šY/_FÅ-ÓG©m2ÿu}q»_vi1/‡ý2Ûï2‹]—>ã,@z»\ƒ¢Ú­Â< Ž÷3$R$¸É©PŽšž¤¦‡7jÆÁ4 e6H\ïßí/þ†w·–‘IP+—íÕ†6Yí}ÂÂÍðR-Û+ìLƒI>yùê;’.O©”š{t*ÀÍpF³«¸M(B´žñýÅÍÍÅåÇrª´ñù+Ø-%Þ-[Ø-onwÎâìz©ãg` žpV3ô¬…aâÞšm,XªÍìfÉ޽]*lGÙz„n³ ™Z,´œGŸ¢fGîþ€ý}#µˆHì,"z3|RЖDd34-B.ob[÷2á=OZ4ë?ÎoÞ ©7±Ø²T铇ŽÊíGZ*–ÛE´3+Š)Á;t”uúÈ™ÕÚf¶•…:ÖÇŽÎ^$ß1ĈÇCô™}àŠÎòƒÂ]/¡üµ›ûÝÕååþ¢¿™Su#ô“©ÜåÈt\¾¾:é¹¢Ny…دX¢— µt¶ØÎaнHIWÔÁw½Qc³”mŠøâË…¶ ƒ£b–À”P@üµ&þówïö_°ìÅÎÔÊ”™ÐÖùe)Ê*=Ñ*BïU¨¿T Fžôç77¨‡ ïýœáÈfh8¶dq¾4ÈgD8¹ZºÜHW7ÜŸvp¶ªõýÍÅçý˯ ¢qK­6–>Ûn‚ËxÒÐöz$­„{Žvòßžÿ²ÿñêšPzÖJ #šÝª—áðç‹tÈ™Ò'ëþâæv¿ÔÀ·b»×N£ƒ|­ œ?Ÿ¿ûåÅÕGj6¾Œ#ÐOìGØQuO{oÚBfлlë­6±õäÐI²k†=Øjff_¼©fmf!-i£ö»þby°YZÚ3¶Ò qÐÊ `qÉnÓp”Ó×ëEGQë´pý·ýõôxÁi#ÜÅâÓt››.^›yñH{FJì«(#,:짘E0]L9fm_a SœvûM­ ñ7·×ûóÏ™ÉͨŸy¨q¼Üò‘fmsúñÏ}þÃÓ7Ù¯_>ù¿~÷ìÕãï 2§Ö¾ð,Rc¡ C½~óêiéX5>©¼?¿=ÿxí#?Ðå;B÷üòâV{Z„c°äÅвñ9+h"_CôåúêöêÝU_Ðy‰œ^ÆFúZÔœøDNm‰0çàQNBc#%@PÈôM6ô$æ’xÆÓs*º²ž?”–;éûÅo®îcTôn*¼êñåû/¾”8¬ºÛUëЇþëͧø•Y%rñ„á%!jq¤äÆN¶;a;cTr„ #wÊN}Ç Î„ÂF¢Hε#Ëü ó²#AYlÔ ÅcsÝ2"+?ËN“õ“ˆ ‹hcË;Ä‚³'¾{8öžœÁâ0¬2¿X!¡Ö3„úw’¶ŒPy‘nz¡Þ?.@I)=Ç‹œç™ñRdzÜòÆJI¬‘£!®Î:„Ç—ñÈV‡BàÓï–”vP(„¥3U¡”Ìð¢¬{ØN9UFd‰Zª*š'‹#ôDX{SëÏý~Eh½è6”Ž«Cë'à Ë &Ê`'mø.Rßí:»úðánc¤öP‘:7úlüúéÓÿøë“¿¼*3울žÀóí¾ï—ÑH»!„€%×x áè ¥¼Uƒëþ<æ2ƒcûS×ÊÿÙ“H!Úø÷OûËwûôä¸4¦§l˜uM ‹úÔ6EáÓó:KýOøŽ/4~MñÞ}½¾&1áöUy|¦Â–CƒšÄ–1Õ6†ÞÉP¨$Õ Lt3ÜÛê™CZ±F©?§;lr&K+ͧyÆ:€°©s¬Ñò—Ø2ìT\.îý¤%¶L2ó;8i­ƒù½¢ÑÝù±«ØWÉ»"á2Gˆ3¬ÑÆõ®_/¹2Dds!2%àg)NãǶS ^%X2Bò6_§uà—ý¯W/xñ­6Þ DÂóÁ™ŽÅúzÝ?¿1úßä.L`¯¾û¯Wa ­7¾ùîé«WýóóOxIýúò/oЯ¹í’ÄzyþC²ŸLläÆíû‹Kêéþú!–’ h— ¿ÒGÏËóÏû—×¹F~Y õ¥ô¿ ð¢ï÷Ïûï¯Þïqô-ˆOÒ?¾zùdsOù”§òÕÖn êœJßEÌR™¦Z 雫—¯±­9Ž_©=Ïî¸È¯¯¾~AO¯n?í¯ovôѯÓG¿«¿_B¬!øC…³CÁídä—È“m¶Þà‘§³bÓYY«á^ÿõùýåõ«à²±4_5nLãŸâÆätí¢ù÷TÉ^ÅïË7ÿ>B=Â[Ô¸á/á}öêÇyÔoQãv„7n¼^÷½Õ"Ò‚% `s¿ÙÑ,¬M®—†xF\k;¯—§ß_ž¼üîé_¿zúø¯¯Ÿ>ûþéoÎúoQâa]9ªã¾(q"dª8æÖÅ[P]«±5¾ Á93Å7p:ù1C ¤uµÍŒ A¼Ùä*6 ÇV¶KdHç8ÁpPŸŠÛRÏlò`qte=ž{RUŒ³‚ [­Ÿòµ ^·(¨‹^G?º×ý ÷~ù?W*«Â9(í’C N¸Ì Aµ¤ê»lGTæbxüŽJèFB ¤zãú£€Ô¡Ú! ÑÚ‡ªx¤ú—08!¤›4ïb„ ”Ýýê;Ê, VÓœ!Ó3¹ÌhÔ„úˆmƒE}·¡,©ÝDÎë’ÎïT7u“Ö²á"M áªpü å³Á©4‰V˜Ô©®8¡±æ8/½ã”bÕÆàª1ާ3óµvƒ¹´Å÷E3 âû|“¬[pò–aÎ&J˜Póï'ÚŒ¨›(:'™•¿^ÿW8ˆ]TåbÒGÞAÎÊBòwØý—)ƒñ¢è^mÅW™×ÆkRI±u­I²)^·";]¬øe+…íW‡¬T·Ö f&@e¬Ùx]1èâ½ùeaž Näõ:„6š±&eEkRS5O0[Í0§` Y5ãŸ÷:ä7}Cøâ¼¿øÇ݈¤]¿ØnÛ¥ÁÌcÛ]T^F5”\9€—§7´E^ð„ßÊ L\úõ?®OûM"P8á.ãÄmi¨4?#Üo2sÑ,¸ ¼§|}µ™+ý¶¨î^gÇ=:È”ixÜã{ì+¯.gT iÓb{5±=hE_ƯÎ/nöt§džâìÒI2üWù@ΫÏ_®÷7Ø`¦ [J˜õÿÛ_üüãPc:†#×pñ1òMB Sç8£RfšÚãÿ…º}¿¢Bì_ï{"•%ÕÖ¤3+o¯«d bí‡óÏE ŒInÿ|}õùñåÊè5óJIó2qIkø4Ù ÍÉfx/¡16+”Jm“¡¸›B×…!Ù¿&®±P@`« ÑŠ°öàFÄ….°OSG“By2ˆ©¥‡¨Q›%M“L ï4(d†ªlÀÈŒÆrÌs?Å©EëwÆ—_Ëv XóWU¿£OoÎ/ú'rvÏ¿õNQ&æA`-é´Ì·ÅúÅŽdN-˹ñ}=`+ÆbXTŠÄ¢ÜÙÈ‚xêÿðŽnÒ2Do>ÓŠ]W†Âæ,ÏbîB2¢ÚM1x.^¹ãdwô ,„Òì HÐ+Щý“‘Þ[Âï–1¦÷š^fëä-sk·•8ÔFð³ÅÛ¡êh²›™ ·„W%@ÝшVF縰¶\¨»È‡@÷½çÝÊ[RÀ¦ùU¯` †èͨbð£ EbÑèVÙþ‡0èH@øÚ”[ò«+lU73\¬‹Âø·\étʃ äѰQÌn÷úÙÒ/o>iƒq#ÎKß´’Æf©ÌO XÕ-Ðb]w)EÉö¿’h|¡ÕVl·Xoåxþ[¢‹ëíÎLQ’¼ubÄÒšSP›8Ñ´@i,¢©Wñ®M‡vZÀ".—hzAôht$fKèΜ9†ù¬Pu1á%L±ÐDâ7¡˜ÌKIQ.8“±´uJ¬v]ßÒ 0ì–þ °J¢u'ƒåï²% C!G ÿwç/Žùllut– J%;Õ& n—T›÷ƒ Ú ~šøEËöMÁËmA›nPÇ®gq´>O5íPS8#Ÿß¾ûäp_à òÎþ/˜™¯Ê}dûXuÓS1µeS}YþÄîi®³-š¹Äõ¸Å,¤|RQNÚœ\éì QH‚zY¦ZÓ?ÒÛŠ–(=Zài1¤Å·¦W7ê³áˆÐV Gz‚Û0Üz‘rSãÌÌ ì·£Ûz*hÞú¾|†hïoéÞ0õío?÷D/ø>²vžág™äëT6œÖ‰¸²Xe#ºÃüÚ×ýÍþúúêzwq¹ÓqI»ÏWï¿ö8­!oñèq‡¡³¿\þryõwœrâH¾¡Oݺ¸²ößÜìn¯v_¯ûÕVXþ¾«8éWŸþzþîvxûêr¿»ú°ûïotJ‰ÿþf7ýßß  ? Ûí×ëýîr¿OöñÜÜPÜýMSÛîÃðê0Ï}QÃúª ÑòåÏÿG»¸Ç°‡ÝÅî4ßRG¾Ç1`œHJkî3ÆÏpȾÂϰ÷RgE™'#вZ “D˜b‹!Ž“Ó{8yüåK1°üÀ©!¸xI:Q/O¼«cTÕò gýïFTÌu_”¿u½“«¸‚¢pK" qylß ¯/îN’”ÔÂ;¼µ§’úùd3ê3"¨pŠ®ðr¡ã–Þœäÿyã¯:ß-¾NÜD XK”S­ V(4õ}Ýoýåf}óèúü˧Gï÷Û÷>_ýãýÍÍ¿û’þv~}ûèæÓùõþQñó£«/4¼ÑÛü¿]ý㛀z\ _8’2‹—È×2ì‚:Þf(xgñ#Ãw(Ow³ÿpuy›j££8¾NýÚA€TŸø™ë=åõ ç!è(‡O©Þ¹ÆîÅ穟5J..m&Õ@ãäâæâòýþ×-&9>ù–ÆÊçýíyêw‘/ç¦&NŠu¨ž½áÇò›ÛÜ–õˆß½º°œaÝ0Îû9üó©ù˜n[;fR™«àú"ÖÌF½ƒØ‡´¥õÚ"‘ŒL0²û]…$¥9?ù9æ6¤»¾ºüí3~þþ½MÄχ}t“h)rä†{Öà7ß_ágñ3ífùŸ¯W·{üÓÕ{œ6Á¨~½½…¿ðñ»ó/@9èùþòvÑøî‚€áÝ•ŸŽÁÁÐ {:‘Öû÷øÑ¾ÇÏ>`@ß_\ÇcçŽ ·#N7Ûcùp±ïßßøÄ`@B^&FÂy,@ªSÝ~Âm?ጟp’²O? ó Sð'í¿Ã0ç.ŽG½ÀO¢ ˽Œïõq޼¸¼!Úa¨ùÍTƒŽ ¦ŽTôø½-P¨|M,ÜçýåW@ÌÞ—Wf‰nÞ]_|Aâ…™çbÕ@?úr›ÈGGóòZ, ¾\cÎþâMÌÖ7çŸ1,‰¶&Ò›Ïç=žåÍ—s<•›Ûë‹_0œÃã«K,7onë :$n?p×ùV+—øi(qíSL_: M¨NÚ>\]a®¿ýD< øÒ>½¸¥À²úò?Ab‘gkiœˆ^öðñáãÃLJÏñO<Ëð¡m-Ólœ ÆÆtÚ{ç6Rx5g^8óp™€j•ãǺ‘ —g”²&ÿ´ËÕÅbzƒ£ÜE¬1Œ|7È[ÞIŸ`ìÐÈ8 ‘³è­7õÀÃNb-™µqk(µ‘©) <úyìUö=MC­F^:ÝìÔ<—NãûàÚ†Bµ ^ŠêÔ(tlçá!qÑxd„\ &Æ,Ûx¨†’¢·zd0NCåºý-Z¢`¡mL„ÉÚEnRHpŒs²ˆwÚµ/*’È)‰`í:·fòº‘¿ÊݤìQRK±l—ŽC×ÁýžœŒÔ]*êaí¡¼HdӬψ=ï ½áÐlC½ïArêì.ÿM˜ ØN9E÷¼®SÂ3³\x°NLzŒr˜$3¤( %öÿzib]ŽG|·’ †H¯ !U#é ŽÌÆòüðõóÏûkÓv@IÈYZèïÂ9Ùd.‘MÃdÒÜö„;ΆNG}ˆ÷ìÈÝó” ÞeBÄðerIGp¨l4Ó9šÊ")Ž×–â`Ù„Gq,ÂÙRÖO8@cBûi>êÈ÷†¢ôžSFV5 .®¦Ô5¾ç‰¹§»(™&î­OÚÁ‚ÆQc(k\R5ÙvÐq°YµQ}üÓÈ5ŠAÿ,±3©¢E“UlÌS9²ü³Ý¤æßKýâb¥+D΢ÜÄ‹1«tªÐ ¹ôÝ *Ìøav¿%<Œs=tΧi$~o›žx5ÀR8AÈ2>Kw©² 5mñÜwclƨÉÝî¦#`àæ¦Ê‘=ŒãÎÆ§d–=Þ qiš™µi)’“ƒ0ë£ *k9#6ÙŠËLV+¼¹‚2pe]¡¶âòð*¬²¨ÖÔl®MÀ‰‚å5f{0lþ!@ KM¨$A C&”=)DìiÆPS^_hgVºõŽ,r$FžOF¢ܨÀŸ¨A¾ç€kbàD œÚE‘JÚ€µ ÝúÛÖ›ÈïY°8½Yljê¨17ç6. »Þ#àÓ©=Ú'yуÀÆ¢ªíXÆ 3•½ÒBIB©B()ªÿAN?{³ %Aø1 …R‡<)óBI6Ä|Ê„’4*®TÄn=ÉT„Á @Ï’Šð ITMÖMç´H”^ú†ÜM5Eõ@?!‰æ‹¦)TU -A5Á¶ÉmhS . QQFœª^±c*¹zÇTÒ NÔ15’[JN#„(èLÒ!7!%*(d5Á~R”˜XzI KM9=Ð ­“×Ì-ž#¤…IoNIw¨@Ô„‰œà¾¼ïSÎ¥›ã­¢-ÎÂä}Þw C ,{m‹î,BF#BdÜ P 50zÍŒ^·~xs9âêRRd’çÖºN y>Z±VÀ`µì¨uË1§1¬÷¦‹ü±ºï=8O‡3 zÒKØÃ‚Ñ×H{“%\É©¬q„%XÖé†ð ìÌ~:ŒºæÂþ±Y<ôW`<óÑÕf>º§ug8 #«8Ã/ÁòZ“>2¶¢£&G“ Eõ¸œ5Ô˜hYÜ''‹Ã|䙉VŽ0PÍ´€ç†Ü¦QžÊ“)Å2(6Yàãε¤Jâ=Å‘¨®¢â|m\‚ÒUom?®zKTœtÑë©|‘Y—°X-(w~YH»EÒ‰¸+"[U2qI§;¢îã?¹úüE—íÙ¿‡A]4L_$ÅwÓßÍ; ïê"Z¾ö¨^]âö-Ôefô,Ÿ7ÆÏ¦B>¥o„—fëüòˆ®NÎåÅÍ't¢¢ŸÓ“—?¾}ü§OxüýÓ g:ÏÒÿK-.u‹È7!…üˇþëͧE×¹ÎVC­Bñuî#_Ê/FÂ×óÄœ3üÝ\n¦ê^‚HYÓI8½*DC‰@à5†ªd-C HüûõÅí²äŒcY³š’ˆ;ë‚Ä5sgÝ%Ï(ÈmSBZ€•¹;ëé¥OÜ7Äh­³åèSÖŸ~»Ý¿¾½¾¸Du8S À6aåøºw %bœóg·š[­œtX·^! “ D`D…d—)—O€àÔBR}×rK 1·²K¥‘ 2´¬¦”Bö'›áA‹¤æžõ4W*"p²²26Á+8×RQ2j×Íxy" F¤.[MáxþLc}6œÉf¦ õEØû‡«Ç×5ËrˆXKÅÅÔ†Qš½Jõ‡ç[”6ìßÏÛìrHp¥,Z…æG¤4âU#¦ „ö6SJíhD¢Šî¬$ç#¯p*)"O#' ¬ã ÿ¦ÒݶیLù†É­’hG`Ui,q~T,Ÿ(¦xõàF¡>Q0£<é”ð>‘ù4»ò™tKlðmÃ%«…´*¾Ç¬-‹¬³u<åW¬ö¾p±$/Üí¼¡¼!œ¸~–.˜|-8‘FÃF¢—¤ÅIÄæ/Í…“¬:4å>öcäK tÚàfÝa8)1«hsP”sËm¡ ²ÔÕ@K¬Q£SÓ®mºJ¶-‡­³Žo¸Ð3&`wörÊYÙ(¢´·gàXëUžnØ(Oåãªò~hƒ¹—SvÈòΟÌ4‰ØñÄr•‹hÅmº™Ào bÏ ½a‘™Õ^É V'W½$o ÃÂË,Š%¤wH¦ùaGÁ=ã¸BDvWjŠŽ€E;}VõcBi;Ä?ú‹ŸÑ|4P€1¤dKÌp;ý±x†ŽŸ‚/%[Wªœ•Îñw7‰ÍÔÖü$"a8Î@ÛW&â;¿Úõ°7|üb5‹îMòЇ¤ªS!~úúáÃg¨±þ&Á–ßßî¯÷(e9îÈ´¾w†;÷E Æ5¾à*žûøNØŒ2÷âÞ«¶¯§pKYâÖW*sÆTh bè$§£‘ÀTœO*Ê~ýñÍŸÏß“pTäÓìqÅBäžÇéûÇõލ‹h†ZÅ™cËì9Â/”´H7ª"Êy#GÍ™ûúx œ‹%j=©ö†š†ˆ•sJÆY7ƒ;mÄ-j‡ê%Ô£:¥š»¥úR^à`æåE‹Îüó]Ú8ž<‘‰%™j_7fÁñš{·­\ÂÈø",YĹ XßΑ® >s¶òUîìa*­V+lk!•ÒŒLÐ a|ÇöÊS@Œ(C>6>Q­»Òf.è’ÔÖŽS±Íh¹ ›¬ºIÏ&(æ¼§x&Ç5QxO°µîhžØ¯—úlí³šH»Ž•¬…ì ŠÝ 'Sg \C‰ ™X DV:˜æÿ}ñüOÏ_®Â¡'x{–vMf;hUÕµhT%|‰µ›‚Äõ•°‚wb»Ã×e3¿ùòèéõõÕ5Jfnµc¸'ENì–êáñÃã‡ÇßÇãis²êÖÿúßÿû›¨aøÕTêóu‰eU+`+š¶*·EÙ=ËDô.gÏ *<ý•oÀ7PV•n¨£ã&þ¥ £8F|u1‰8¸|5DqúZˆTݾ"ÇÕ¯†ˆÊ>° ¢­J€(\d%DñMÕmEÙj+ÊV[Q¶Úвë­(»Þвë­(»Þвë­(»Þвë­(»Þвë­(»Þв›­(»ÙвLÙpßë,Q%Ið¶ÝM`§MøA'ö¯½¶Ë̽°Ýó°fè±kž2EWo——DòÓ q ³%›¦¨”ãp "HRÞ«Ü~zÌý³”ª`~Ë{eGéu†(VöZ²ÂË{Yᕽª£ôZ¥×æ(½¶Géµ;$™K×)agÄÁO ßDÉ?,Ýç¶QSpµR¢ZVv´âÒíg·-´´dO¬Ø4 +6¶×p¯¯üÖº ›p}†+‚è3K¨òÁû#ýºƒ /®nšE¤–MÛŒÿZfÐUÔ:7ój·x&©È¬ô,|#1Æ”9;I7M´=¹êZ^uˆ˜ ÌGIš0jþë5»Å\È!EzãÉp^ÙÏ{çqakiÄÏV½H]<ªeMß*­nê©ÜënÚ­MΑyBoù(ËqiÃ0¥ƒi úM¾î2¶;ÿ`‘_’ã#+Jœ›Ë¬¦1h¤Ê‘,6Ì|•ÍtÝ@­ß¶¦k–BÚ»¶FYïLýf{ 虵zN9/½i[Ÿ*øFƒ;p¤øtùí¼ ]WÁ¿2¦W]­«åø¯ÝotÿìTÝú 9á‰Û³„}‹Õñ[Ëîåo&)ˆ«èþ[ŽÔn,+Ôñƒûj\_-Év l–ÐÑ­®ü6A˜a€Z:ForAQ”£Î…Ä®±~fjï,Àc7ⱓÕÑ&Ê‹Ùo6TE”=Ò±Ý(“»VùMÎt?“÷ƒÄ–yri .Ó܃ä…ô]Ò^Ë€uœÖ¥ë•¬×Ÿ9=G¤N—ÞŒmkS‡¹Ç)­&iÅP¥è±êŒoèãBIåŠU ïÊ,Q°J-Mjí2‘VŸ¤¿°c‹$É ¿w$¥ø=„%Y­èµ(šž·L\ª>xÞD²I½ÄPÝG+­/æ{+-íMr¥-Ž2X¥³Š’•ƒÙÓ´ZŒ‡ú®Î-…ˆÐ¦Qû‡M®¬ö!)DØ£Z x až/—ÝÊß?ßú”™<ŧLô.þÂ?›)ò&xû… /êἫOGÎ Ãc¯xA3iÐ[$cÇANTûu§Â…ÙAyÇ” ¤£îEÓ(Quݦ fMb'ž©zCeˆß*"óXU!IT0E˜Ä(Ú[îØkvC_ˆ 7;…Lò°€‚Ævo—Ž@³¦âˆ–$æ&4uuÝܦÙ±ÙX829jnãÞôÜÀ†/åTؾšúM’®ÕéM+, "ehAò‹ýæÜ–V+“$¢9QÊÂ&¥Gº¤å$tç5Ý$*--í†pÝ®é†i /³Pði³‹l_íÈMî‹þJFòÙúl¾õ0ˆd²z3¬éŸŸ„¡ÀºµžÛ4QE ¯Î†˜žJ÷Tq÷±î¨B¦pÇØÃôTŠéµéi5µúÕ¹¾ÜÇ©A l;ŒOI9ý‹ð|[¶4¹åßîjOµ®©‡MBŠÕ- ïl9›6NÉštËâ>yqŸô†BµÅ}Šâ>eqŸ²¸OÊ~ŸhYÜg]Ü'Øñã&ŠUq[kÒà’T}›¦MqêaAшdŒ U?sœ8ÂÚવ¨Ûñi™7A཮ÀDÆ”±¶õí¢±vþ¸,yh`õ(° ´Meÿx–Ç–Y ÌWÉ8¬Ä†gÁB9¢ìÙ-=âÂÇÖØ`7³šK¹Ç8R¹¡Ü0é–™6¤),˜V_FóPÞ I¹Ê=KxÉ—f‡c&LG³Ér ,9­y‰X®q4Þ¡Àà]É3Q¶¨ò8ØòœVi ôáYÆ•=ñéçH ­‘KLÝe,`­$Å«KZêçsq“5[c÷ìmËéï§hmaÒÕÆ iI‘ºxU@Œ)œÞÑþ1Λ¶ÎJ\*.LYÏO}v›©-m¦Y“dª»&îŽ{¸ b_Șr-xU!&†•:Ñ™Çv5Ö \Þ®l Nd£w‹‘‰f*3 ‰€qÜ. ¢†á8·ì­¯ákÕ:xªvºýB †_•ò¿VΦ.Ü#1ÙÞmïPÒþÄvFŠmå ÝQ•OzV¶ÜÕÆ¥èKã ¢'­–¶iñiC£ƒË‡¥²¶âµJ]žÜZ Búv—•ö&‰sa`¹<ÌFqâ$}Œ€ù+ )ÁÖÆ‚­ÊâSâ3GSŽŠxô¹oJQ¯¦XWë8ðåstDxH+ÔUg°Qs °kãÅ÷ïM+퇳òú̺,]fY8ßœV/sB”ˆè;Ú´ ‰`øßöj¢ ÇÎz†òËlÃÇ=Ø“PXKª¶ ™ô ˆP ˆ(Y9w±ˆR/Á'¯ÕHR½”Áµ þß2«­î9f_‰•Ì#÷ˆ>DqÑF˜}`˜˜¨|›½Ÿqd–}¹‡Æ¼È±/¥Eº!†/9ÚóM„yFœè¬`UHšÙS]ɹgçb©B#º­„^‡â]ùyëû‰ò6º´¶¥Æó§'"¤ßūИHÜ‹âÎ&â¢o>"#ŒE d<ÁÁÄI½³t; ä¸3¢ŽÌ€$‘fþx–µhr|¤¢ k+¿ á9_ :=z9½°ÔÜQ«¿F÷jk#T¯d G/hpuX +ÔÉMDmº†}ÙØ[´ŽäœsµK"§nL—ôާ\%@N6æ¿N¤Û9ŠãÓ[ˆÓb#ä€éS#DND KÅv¡Õ$@¢—¸!µº”$Ñåq‘ ±§|ô¤rµKÚï:ÊnÀ{`L÷½Û„|š¯ªaÏÔ¼hm‡Pn®ÙÔl©ÃÜôÔp†G±ð¼æ­7M©lHAl/7¬Ñ™æ\$Ÿh {€1­uÉS#`>-y:@1{· xú¡7ºóu?YÇЀ•ÝCÂÑ{÷Ú@#`ݼ†ÃŸézÓ3ûnÀ²u3·_˜>6>—êw‘ûß®ã5€©6u°×4VœRŽ…Úfðr’´¦ˆ¿ñÙ½LW']‹Þµtê!ù:Н÷M ÎÜf±ñÔ¾èôXÌnÆÕÌë,ÿúŒ†VóüësÀ‹üë3 }-ó¯Û½Éu~Û¯URœA¨¦GRV´<8mBþ‘$ÚˆÕÀiBXýˆÎçÖ£šwÍ™ß|ôx£fÌoÊ.G U¬(6®YŠE'pß$=EeÙ½¬ØªÔÀ­f½bôJÖÁJºÂÉTÎÀÚº2‘µl;wɆq¶ç‡6€'ÎáL¦óg´Ž» Ý59¾Ð³§œ¯€Æ°†ÈÆÌ~¤Íò#sdg™†Ü`;«ª<Ã8ëüVªFQ²†B¨ >0¥µmwF*;ΆՓÖÛÝh`I IXÕP¤°suàPT32ºYúAqÓÂ.¬ ®½¢6”2? mOgÄí*?À*°ö®Àkcñjf±õ‚QlRƒ½¡SÈ× ¼«@è(fïð2jÿhPŒY`“´SHÙI}?iw$5 :—(éŸÏ\¬ü– I-Îi ÖQvT2_K=DF¯Êo™;;&o4²¤ºèAØ• ½ÃÊ O‰%§á"bÔ7´»ÝªÏs’3Á¾s2‰×m6 Âä7ÓʚþOjfì÷HždÒJؘ!jwj\³æ,u¹Þríþ×?¿|ßï¯a*ˆÁCÂ-ï±*LœZ®ßÍPðág´»B`Ú<›©®2פå~C³â6öjŒ ‡ï#èÕ—§¿bì¥S]kJí0ý9MÁ\8å ´FÆ# ”WûŽ%íõK‹¢€¸7F ( Ü³––ҳрõ-}˜;ã×J[-‹©˜(ÉŸ …mÐß ±A mq‰l‹ú¨7è£Ù vƒ>º-hìBu»ú³Ýd2 ¯l11üˆãG?R¡˜Êñµ®SÓCIšáÇÛqOö™TÉh]ï Ž לx&âgCO’h‡žñŽe ' ç†Ýëa ß`Ì–ßÒUf?\]ï/>^¦šèмW7©_›á×÷_â!‡W1V¨¤.§Ê+\žºF­p#ÅQí_¢¬okX¿Ú”×ýõŸ¯®?ŸßPÏ ª|Üú5¾ÇÁŒÃh+Aúñúâòöé¯ïö_€ñ+¸¤qÕ”F¯uŒ¨ém±ÛÛñ¿A³GCáúádÏÏ5o ªÆÚ®m?_/µò³»½Ú}јÚíuÉãÝçýÍÍùÇý7¸½o÷Á-2¼ƒÆg©²àãbÏ~Ô(ôÄkVxîÐáúî—ôŠaÂ/# ³„¯ö¯Î/nö!!’Ƥ &Ö­†äm8Ø4VcŠO»ûzù Žï3K ¯ÌRhÙ|¯¼¹úÞPAb©%«Â?Åyñ/™Ç³ýåþúâ]RɦNLŒÚ‚ºí ë鯷Ã^ˆhËTR¾¬ÿqõÞ\ýçÅõí×óþõíÀàÑx™øµp±¼ çŽÈï&Ú |¼ß¬øÀ6¾º"–/]›c]šÞñ¤9ý—U©wg#ï³9ä8‡WO"ƒ°xýíëÛóë—û…e‡]b»pD߸BÚ²ì1$™#Àê­t&7ZçcÖø0{%™wxYJþö™/q·è‘ Ñ†ØPA¥­÷¢o£ísZ^>Îö¿±(÷ ŠOÓ]µ6eMó7ÿvûézþw9¿5`–ÄmF)¸–%_Ûó1@[)!®ç—®Ž;H†=¿Ý¾ÁÍ¢‹# %«æÔ2¥ïoÐþÃtfÉ3oB¡`–å‚Ù7PÛÏЈ[?¾dñ4ŽÅBA,™/YÝaÓþ[d¹p+1xRôú†;ßH¥ýÌØe¹!œ+ó­Õ.V…ÈÿUf¨¥rp‰ÄÞ!Yj飼zRsöé!â¿tòÔCBÏB| ]Ü=Kì«ÿ»`_•-=ðú†º®Åì.ºN ­<€ú ¬wçUÁ¬®¬¯M‚*ЕSÚ8iY5µ°–ØÙ)jÃoÒÚJÑ»õÒ*ÕÅe‰ZXÆPª -FÄJuîõ—ówxii…:ÏÜíf¬§pWw» ߟÿúbÿáöõÅ?a[%Dz5‚ò+•CGΘ#ø#bññíp’ùd‰è-EG”(^GG„üæƒcÛ õlÀ'qÒÃϸÄcPϘvŸ”<ë6'žq‰wWêk%–ëÄ3®*„NøSRË(.·‹Ù}íËõÕ»ýû¯×ûÝ_ÑþÖµÙþû›ìŽh_¸½úÒïÿ¶ïwç?ßÜ^Ÿ¿#­ÇÔôÇžÄ/$ŒW?ÿŸý»ÛÝù—/ýÅ»sÐç¯>ìÞõç77¥PïÊ6ü®o÷ Y¨Û#õ­<Ƕi²Arx6a+·€`ÒyôðÄ|8¿èÉÆwÞ?MMòçþêÝ/d—ðõÆÍ/_È7àêwW—ï‚szÿwòýáøH¿¨ ÞDÍ`ƒêpruÌ5Ù nõÑ®Z Œ¨ªÐx1å2ô®nÀ?Â¥Uoóvåa£|ýíW7o®þóõk†ÉfØyc{C:[Æ. Xc$§¦¬½‰I ²>+"9s† ›ÊF-3YÿÚàF}¡Óùá9yûRßüÀ@BH*«)Ä»¡˜wUKùWÊL9¸Ö[?‹¨\…!?QMÇ&ªËÇ]éð [Ùȇôäâ#èŠmÜFyô½ ›wgø„ÿ½=ËÞv¨¢ï6žN†PÇläÒâJ޶Zò[Kj|ÌQæe.³é9;tÐ=²)æL´/ùYñ²þº2IÖ“]÷®1E¤âP¹ù:šc5Ÿ³™»–qÍš³Dº%|}%¦¼`ñô—Ÿˆ—¥êßMi`®’L3=A úVdòÇù¾YÜw˜~bL”Lõ-fûÆ÷6QŽ)[°LyåÚ¤[nØ#âÝêÿ*ÒÝtꕼò6môý×ÏK=ûòOvÿ÷*[z¸¶¯ë\^Í+©L´Y7:z« &$aŽp]Ýpâàµbµ¶tÿ Z²&c –}mf²c#Ñ.Þ’edœÅLC¯Ç|„ÚRra3·¤§–ò·¶ÕÐkœ›8³çOX¤ZzÍÞüåÇOw~P-¯Àþ0¾_cÞÖ5º×bËÅK‘hSx‰©p>Ê ½840ùh8`d­oáAG¿¾Ù÷ýýÁãèá®ÐBHÑ꾂c\õ.<¦ù·ê­Ê¯+«2˜k攦\Øáç×:Êóñ—/ýÒóãÓàöŠsR/µúØÜuµäý?òn_ÔYëÆ>N–ñà !ªÜ&N-N€£s5 {Ä3Iׂÿâ[©PëÚWu¥¢¼ôu ûC¢Ká‡x8Fú8é{˜¦Æ¿˜z£ÄŸ/õœ§’Eþ••à8µ±C¿wè§uç9ÚJ&´Áá DÈÚt’0e­Q”ÿzê&ƒ¤þLI;*šeqÌ˨lùà=õÕœCÜpóºÝa LG\„À¶[ÖV„s€ÀÛÚ¸ÂÖGWôvM-ØdºòMÆùL çk·É4ñ4Â=¦u{ÌšÍÅ/Ö0[¸™“ÈUX®ÉœXתȉõm7[_û^‘ŽÂ55ÔÉô…"íGù q‚Xs¾å qN&•Ù5Qœƒ?uvO  4þ|±ïQ ÑÚ°Ëüý‘% }·ÿùëG¶0X-1×tB8Q#æCÆ\{õ§Öï.n¾hBübÂÌY§øñ9aùá GE¸¦šˆ/ÀâÞ¦,B`áP”ªC¸Ö1O-‘¹³ÿŸ¯ÁYU¸8eXdAÍ®< ÷¥.÷biRÖŽùþæà9­2V ³aµËéY¾ZÏ>¶ÖÌõú·r'ƒ £?œÞ/ ;†Ã –ÓOÇ4.jza$Ý ãt䛿 ußï…EÒ´³ (‰é3º“VÔ½ ”…ÓßfÌE­Sçõ–R¹Cˆ=,Ô©XÞÎcÔ‘»ÌM¥uœùòpN§ø’¸ü.¨ 3Ü,¼ÑŸë ‹U²Æ;ٌПp3òê?–~Xó¢&J¾Y’3€êŒÐ¼p«8æÍž>eÕL5Ç빘&(p±ÆK´âHˆWkltXœ ¡ô¨µ´m,Ðrº®ëÆbîÎBòšUõÀˆ=âßA…¬{ýÒJdèô=úoýåfXG×ç_>=z¯£}¾úÇû››5–1ýíüúöÑͧóëý£þâçG7_E‹ùoWÿøÆ›Ã‹S­TäÄ‘yÁ (ÃS~´ñ‘¯öÆ#Äã?½~ójìÕÛa†lÐrQ/¢¸›8ï'_ OœT¬…(Ž©Y '´ "*†hDqtÑZˆÚ8Îh-Dmß´¢8®j5Dq6ØÕaÊî¿Ê"=¹úòÛθ@^µR¦òy•ÅwßmÎ?h}A!Sºç»«Ûݸ„rØREp²É÷Qä—ö  {—‹\Ê x«»°O$é´¹IA}V¿t«]QÃvgþCô7aEœŸ°ª ’’gX M0¤5”!hµ‹þÂ!la`›Wçž¾õ£åP\¥? >¢‹AqýI¨·aAΰZÿZ÷è‹o³¯Êª?ÕÂu,˜ý*s ßϦp½Ÿv¶d ]h”Gmy¢­ZÐ2CbWcíš»xE”M3‘XM$éÖæØŽk(p:‹¡ ‰œ­cawÕ|¥ÍÀM±d ªrXÖ%Óà9IT$&4¹sm'çDnb0œLÄId1µ9нðÇИR{gD‚n²Ê^PÇÔÐñÖÄ¢æa|"ƒpeIHC"ͼËsÀ˜fÞ-ØøÁ°Ú:ESM‹·#ƒÉÝäª7!·&GåT´Ûçá˜ßY¢­•W1Sm­$B¼Mó âþÔéŸLz÷Î¥~ThÛBJÎdpkLy*úNÒzºÐ¦%æ ­ã—ƒ„º2 }ˆqé¸ß¸AøiVõB!,ÙÆš6~¹pùmÖÎùå·þ^÷Æ¡Ëß%kƒ®« cñBV† ¡EÒÌ€4¨[üInñx©êöèKåÐÏ ?ëÄÄNÕŠ•¢ÚÎÀo[ePMÄÍMÍÉ&‰Ó3nŸEÕЦåÎßn Ž´‘äοCÀ²uŠ&›CÈÉèeo³€ÔÙ_jj]ö•èJ‹Mømo Cekú™¨ìRÉ ¯ ÇÇ^ÉñJžežDðË¿3òÐ&еg£üœêôœNZÃR¶/FïIø›.(©aOüMã®’nzâ7ÃÝá‰_O¤×Ö·³(–Ù›.mÔ‰!2Åe+‘qÓÉz@ ¢¬#»HûV(R\㋹r䜬¥RŒ¢º•ö xÛY#c'+ˆT'++‘8MÝÎ%QŒê%ñŽŠ•–vBÔà+-!ÎUYV‰(„D^[nQ︦,Á÷É%ïP„þà Üé taaå?ê ˆ%+p@Ù0o¨`¨®XnÅ«D#L[©ÅÕŽ%'<ƒE(óñTL¹•2’uÞRÙ£çéO±u<½ó<šø4]Y¹Â9©cÌ5ý¨ªéiíÚŠF8Ü9—–öÖºrêA¸§œ¹ªÆ½ÆÕä1Ñ}·Ōš¡Í%U{¦Iß!Ì ºÀ*f÷4}4¨[‰:ÆBÝÉb2%\ µ8Y®¡ÿÓᦸIà†3RÇxÀMûž¿i›;‡fS–öu‘½0É&ÝŽÙºíô´é¦§ÓÇÎä@R‰ÂÏŒ×y±—Áy™ïU8*˜†ÈŒ¦Ò@C\‘ò,Ѳ¸Ï®¸Ï®´Ïa)ψˆ/¢Ý†]hIvò³¯™}ó‡ÙFVÌ^Μ½þà³õjÍìëf©7œ°ÿ™g/îEêe§RŠ$±ˆƒ'²:.Õ¦)X¢ ê§MAFXQ=n‡<ç^ª³‹Ø$œtnÈž±SY ××ÄÆ¬uv»Ž»LººJîøQ´N;njg†j'õ¹VN;n˜3NÕ“JYu¿G¹DRe¡hƸž\æz¯&¤þ•ëQvQ# <¨KD4ZÞµÉ@¹®Õ½,gvmJ¹üx¼¨p¤,:ªœá¤œYà¶Ñ\ù°R¿•ªm⹠퓤-»ƒèY÷;¼ß„Ñ).xÅ Ž~öË~ÚpI©³**…|t²Â\žŒ`XenALa×0”ã6È"|¥ßKjBeœ6„Íp‚@œðvGšÍHN˜ã–9?sÞ¿™qŒZÐ;ú&l ”£R´û5iœ ËïzÊ\bšµQi„äÙ÷02€-‰Ehí1%îÅñGˆBHèXE.ållZ›Ñ¯^‰XeÉDš SŸee§·.¸ZfïtÍ\-ƒ›~•hàäFì4Óôï=ä¬òûØ‚ ;Ü5Ñ.ʼnz†vdhK”eˆ^d´ña—{bÝõICUß{ŒÑÉéªYÅ3¯±Òr )‘æ6{¢M¡€‘€¢äÏœPIè½±m…±m‰@Þ‰™Ì+—§GŒ ȋȷ"Ú”8¸É[ñ{Bß/ÿay™×÷ÀýG"Æe‡»|$+MFs4ÎH'L]%XfI' Ã^˜ˆ yÙf[ [Iª{–<ý3òÌÁJV.–2Wu(ÓJº-R3mÛƒ‹–$áj¿;¿WZÀ™ÚuV¥’(µò¸r¹¢ à¾é°­ÖàåV’öáYTS2ȯ·Ã–T6-ýøÕ$IQîdè°g·TU;Ý͙盧×àì%Ð iSª(DðÚOýƒ:éí.sÌ® ."[Ú76Gá!Y¿wV³ËÞÔ÷,|•}^Íç7·oÎ/ú'CGai“߸bä9™¼È7{N¶2…(µœ“Óä‡Y ˜©Þ¡xJÄ<ÕŽ<ŦÞÜíefÇPuÌPYÉ!ìŸ1Ó¸ª<Á£¦¶“‚¤;Uåo ðH'µiÇ>.¿#s:+Ìl}i{Á-ÀpÎÿ­œO›×ÂÁý»;·5hŠ]F\¥ô¥w²i‡š–Ü};ô*Ö2 }\Õ0-ò;0{gÛãY›ë&r#Mý¡ˆIîÊ5Šßmå餜ĖØÂã#M„s·¯«D£•Çè0“!‹–"ÿfAäËïç‚zP NoyIýÐ= riF¡]D :>îTïd–#»2y·½V}Rj *si‘ £Zkþ(›GvÇ’fÀŸÀ/j|¹ú—0åB>¨@-…N9范§ċ®­t•9øƒ cæ—ù–C§³ è?u€»–îZFÜ%1Ðñ@ô$3hi›°‘ËìÏÖñT¸ä¶¿yeÞOìÒxD¶?Bò@ ζÆyom8¡rÌŽD*•8Åp¢ð!(öÂ-þ´iº“RPå•aœ¶ÜFwï:K¸ëpà TÇØï»oiìÓD'Pª­;ÃîÛ$Pê÷C»»aRN½ô°“l]YŽ] (}&EØ- ºnÑAÒG î"¢“VòƒuîcÓ˜áïýx¹­õÒ¦É\uœ ƒm"ùîCÖ¢“EtpÈèÆ„9'¡=ü¡á¤ýTôY±ÄÅ:k‡ÀaYdOpjÐ2âaõÿ˜«?ozâö—üª&‰‡?ÄùŸŽ,Zšzi¾ºHç 2N{Ö€{]sr¿*YóȬw¤lHïÌëb_ŠÌÃ^ÚSßvGs}i”öÿ¿½gmŽG9©Ë&|?\¹J´²åsm¹VÞd·*UjDÉŒ9ä„ÑWû뀠$ÈÙò]¾X~¡ÑÝ@œƒKôUò B„¤ÐÚ^øyH$¢ "—u¡˜}ZÙ|f„$O):1ôYj”&3+*v#Ḣ‘‹V7d÷&¸ß¼‡ˆuÌy“ÖÙ{cÇëíkx L¶¯‘å;o°Ô(Ü .Nv¢!°Œùl–,Ê?Ïœ`¡¨Ÿk ˜šZ¡+NÞ %œ…ŒƒRŽ]9¦ˆv$~ÌÿHÑAÃ5¶Cç¬)‹A QÌ*ªö±^ Òñn¯i£WU½Éè¥YR'ûóí"c Ý4aiư÷FÕ—Ìx®'ÖÈ¯ó¸“Æ÷íUï÷Á|#x£þPÈ׋ý¦œhSqïfÂÄODí— MEk&ʉˆ} ÒH´¦¬¨3}øUôÏ*ËFí*ËBú§ÇoûûGÅÞ ˆ£oîh7 Üû3·QË5Û`L˜‰ð-Ðrºu;£ªÓø‚ï}â¹­ÂØ&g‰Jß"ïÖlªS½b&ù3ÍT§›ÓÐahì>䦶7¦KH¶zæLív™íïÉÌ’ë»]`‚Ó>øŸÑ]Q9¤·TýŸoL C§” ù®Ò„¥}¾à~º`ÿ¿L|)@„b_€S³+!¬ÓÝ«½´·«‡}Wlê^Ñíá}Ñ}iÚσ ôÁð¬µYQ$Åäq¸ùk:bZ…ËaFgß#·8-fü,m^ø{ÏŽç.¯Œ<Ð HŽ'iЦ^R:·ENÄ;ä:;\|ØŽàa" î»§e}?Wß)?¢ŸN.ÎŽIo»C÷®‹),ÃJŒ‰ê¦s¾´eGuFW@.ÚÐÕ#ÁÙùÍ…óçšÙUÅÍH8„Žv }àÇ mZka/ñ)\ä]^9Åi›0ß¾¹ú8~\vÛýØ8L!-±&'zˆªê:ß|¦xÜ7„µ"KzØXUÅÍBF7Ku€~=m€P@çt_ÊÍRaô0¾úßš,í ¥ªr[v߬7õÖ`6¼}`Ý ú†¯âGºˆÈk”WôV†Y1/ý馩o^ˆlžßM«^àá,r¼É8&‡„{…”ŠSšóÆe· p߉hž**åéaäFϘÌhάö4bi¸ŽOö«N×óyÖ†¢D " ºäØqDÐ?¸¼½(+²óx¡“‡›Ú“G ‘ÏͲa¥¢t’:ÜŒú‰>4`ÂÐ˜Ð´Ê ¢pH½`Ì›=Q]ïß.¤SáZôåñäLù¡x•œØ«T›âØã &57N•_³¿Ü3?DN¶ÒL䙜ƒ^ YŒÍõÿ›nØ„/tšgè'€CVÎðŒ u»ëèF‡È§ÏΡ¦¨Ø@G¶€ÑŠFõ†(",òÁg~¦b$:³_é[l²È6úŽì±î©Œ‡Ö¿£™w"¼ƒ¬7ºÿÛTù~/mwO†òz Ó« C{Uå÷%ù¼¢Ìç¶-¦Ÿ@WêÆÂ;]<[4åÓGøšÇmÁÆ9Ü{Ú1{/ÄøÃ³~ÔLº2…ZkšÌ*Øþ:Hv%ÄQ[ÎØ–{hÀœ#½mZgÛ/Á”d-£øPYA0Ê÷BzΘ–ˆÍëÂémÐ9¦Q ô¾©èÅÄaOýD{g—·E½Ôs:z>ôô§Þ„Oš-a˜¡ÿr#Y²Í§¼¾£2n®-*}íømAíf& " ‰¬d°õ3¤¤…ßÏÊ™‰P-[Ùc@0øsÉnÇN¸hƒœ;ˆƒ­¼¾!Ôá4þK¹/8Þ•÷Åœ“Ò÷Ë%†¹+éñ<Íëçx:ñ@Sç«1¿9vþÝÆmî§+ñw¶Ù„Ü›[™|º®-¯Ý)Ôå`®@.%5ØíFZ~RïL¢:i›&P: ÛIÄ€ï¤A0Õ3Ù‡5ˆEkœ À3¾jGÁˆìpO£PÆ>u^ô VÀB]ç Ý'Lr[‰B jª{›¦¾%vK·T‹…ŸdECšÚìÉ,áDí|ßT¨ àW9z®0ü¥rÜ™,ÆUŠ¿ú}°ÚYŽ?õ›Eú#èÈý¾¼«·Ô %{‡ÇÁ/?•mèRBþõx~‰m‰V6¥)ÔÅVZ†²ý ÑhÒEáÉzç7GZó_íë‡v ž·âôÎ|î|eX>'šËfz-@äâ í ‡Âh$0,…9†ÂvÈösðØþg‘~I5QËy #)¬D›—‚·H .Û÷Èôái¢® mä\Ó .uSÚ,†>NÙ9yÛæI–§V“º(Û}wÌœ ûsÖëÊÈ¡<Û]Þ•Ô_ÞƒHͻ뒒ŽÓôaÜ ur~,»3:Ò^£¼Ñ­”IDÈß~Tò³Y‘‡X²Ã[æÂþ‰ÚÇÒ׈ÛâwÀ”G.ïG,ì8e„¯9tÔ jÑ™³Å[£¢Ÿÿ¼#4ÒSΩðù¶ù²²Ký¤‚õ‘·eÁüœœ$ÿ¹.¾œÜ ŽØ…K •¿åŸêܯ_ó‹ÓФ€n•ËÈФ«Ö˃ä'X¶ìÏÂNBÐz#Ôª“ßRã­ûTŒ¡çΗ|O¬Ü#žtËÐJÂõUÓ|Þ;Uù¹`½&JŸ(«Í¡¥¾×êyKl0"§É V#Et`R§—ŽdÈ**jµœH8®µ¥!baæ=!i0E.LHZx®¥HîIîw%ÙlÕwNQí êr9ìõ€ãñùÌž7Ì-“÷±¾=NOJx[•À:?²¬‹LA ž(èêìª*2zbõ¡:´dBËë|%ºÐÓKò .öžåŠð° ãÁ&ŸãáPìJ<Ê÷á‚Ì­‡ÕNHо´éÓ™ ý˜múòöî°Å~k—©œ#•˜€ &ïÁð"FY ¨ÌŽð8õlWfGŸ˜J­-޹å×HP+…ð;Ä—î…0›š Ìû|еB¤t-<‹äÈ|yèÇ ç¶,ª~?Ò‡­;;æ1ÑO^Gr•³Ão´nV‰õ94ŠÍXï¿ÿ å|ÈÉÞìv¯‡Xš"ѵ‡Á•ï$,ÉX (bIQ¥Á~¸\p{c2¦)ºË{›?í Ó]¨,¼X\Œ)ªÇ‚t~ù‹ré¹;ÄRòcÓ0Õ±oZhÂËxIXø‹Jžì“_¥ö˯¿ü*ÅS´Ç<#p´+Ä w¼**¿)xúÂ<$A óû¨XðõG%>êW©Ð5¿Íie,³+¿9Q§½Å3vfªÊüê u1ljgØ—ÈÀƈí¼ê?ÃÓMвr³%vln G« ûŽýMÄs%zŽ«™3WKX¿Ñ»îPÜ;†ñ¢@ñ/¼Ëô™¹¬xOë3wšk1Þ×'"w”h¼ÉJçôÂD ¼ ¯,fDÊ(LžI7®ÑYѤDðœz &3OxÑg‡àÞ9ÛjéÌÀgY"¨…oðWÀ³Áåî Uݲ*pvê6quËê֥òa&öe™Ð¶?kb™¶2ih1¢(^Çñl½L[‘†Þ\”˜äÓla0mpÔvð^=£¨ƒ÷ð• ¼FËŸ#zVI¥y»kì;A ·`¶8Öv‚Ãnƒ5n»Õ†DãØî˜u¨ ÃâëO³°Ýȼú}Wlhš»aÓtÂàÙ%ØxœpYƒÞš^píB¸/òalŸ%ÑÈ)?ê÷žãÛt—C¿ñÜUïálk À)bômŸIõÚš[±=–é£të@ÎŽ(ÀÀ+M…ϯœ¤ŠbN‹È‰@Ó{`ÄEÓÈò"R×eÝì}w`:Ë ¨cŽFLtZÒ# HBÚð , 1-XYiì!žêPþÿŠº+ +tŸhª‰sMÓÀЉ0‰ì½Se´‘ œª*؇¦íDÖÒ¦jöS³ /?‡¡ÓóCµkË„¡®œÈUÙhZIMƒªïËÍ›i:’¦uµË‘Dk³ ]E»¶b,Ì+V¶¤+³=ÐP ÒÞÞ-rØÂ&÷äæò¾qnˆaÍ¢öˆh­Š[,Wò)BÎÏ÷¥E˜Ð}OsŒÂEJîÍ–õÑ œ[šuÔö:{” žò|¸ØÚíÝIa4‰‰€ß³–»ª¹&‹Oå;"ÕøÔá]£Uñ¦Þº¹3~k?}Úû"¥ýß/¬ègÒØbL~î;îòÇý±£xÈ?”'J×±4¦üÿd¡° äëÓF$kÂÆ¦•ÇõnW­VD„û –ÕEÂáä\MŽ!µ«Mª#0‡gÁ¤x‚jä wuÉcÙ.ZaÐAo)Ì8 kǬ2ðÁ+_¿ìnìУ޷4]|&ÿÙŽîƒÑEJ^OUeï¹=Êÿ3•bxœC‹Ül ÀÞ:]H o0ƒN,Ëx¡£ç2ž¯žª¦-ïÊ¥•‘8¥ÉÑK¼gÏù“M¬’݄ק#(<»";„zj,Pü²ºáv +íÎõQ4cƒ‡" õ¼Ùnó¥q¨²Ñ-ÆÌœ7¦0Ôé›3'Ãý]Ç.2\[ÍõôêHVÏQ"YÕ8ÐÉ[$ÔuÁ=¹ìšÃS'ï…e1§ˆå‰Ð¯Z í„ñ”ø(ÿô8‘ŠË4™)Ïs¥ ÀGÉÝÞ½èd ú_Y›aƒØ·õòÌ_q©¤ÿ+ï=e^ëm!lcÑÂj[ÆŒ­-…ýel¾j[èÃoûxZ­-Ìóz<Ÿ@. s ñ]kþYóŸ 2X¾½ùX »¥6/å3Œ»¹pû“Ýçªi¬£}žOÕ2#o²±ð"˜s@¼ûð"2»žù\Ø ´p&ôhÅ.0fº±¼oU ó%æÚ“Àæzs4«s>WS¾ÞjñmåfmMÜŽÈ¢)9(„/ÍfñUìº{ÝzMèãГf1s!3£YXÕ£4HÅE´:=GQQZ”ò?ò÷)w>‡¼)M+ ù ‹÷My3™Õ$D¨oÓö†{= ‹^XæÌyýH¾„¹ÄeSä÷IéÕA4h´AfçŽ0Ρ’_L–q&¤Ü37ŒŽ&FzØUb$8â ›I”b¸bÅŽÿõ±«l½›àT ÁIÚ!XUÀ&^XCçò Môãžüiye^C*_*&Ntfa‚!òS™Y¼l`ã1‡T3(fÂÈã$1C+˜Hâ³k⸲+3ê. »d€£ÕJn¨"Â)Ôp83•1:ÒÒ’ |7 &G[ ßha'Íë商3Öc˜£#äh\˜ÙœòwÅØYgóŒ>Žk" y ”̓yý¥PûÛèÇù²è"ÉÕn» ªß¯²ˆ*ß,þÍ„2)IVŒµFëÃT%͘« ÔÐá@ÅYÀÿHê&êF4%Jí¸¾)‰Åä¨f¥d)Î2”W·qò?Ü¥?Oü7[ãLü7Ê`bÞ >éEÖõéKÙ )dbiU?I4nBD,°iV IÖoZ÷™mîõÅHx° ¨>¢®›ÊÀâ;c@#{ ŽñQ¾ö9C$‘à˜Äû^ѪGße˜|ï¦m’ÄÆu5ËÈïuˆ¦‹{,U‹S½†ózƒçv°ø‹Zðc5íüi-:=ƒGK´dÏ”(IBÂ42c2/«s" ¹:t‘÷{ô…õÓò! rz¸18|Ñ©Ýû #‚þú-¥ } •ôIŒúk1x­÷7«§Ów“1` 8ˆM—JÅ4îçŸÞ®9A h\«¸ÓÒ”ïËåÿ·ÍÍ,É6¯ó»ÆËXÅwdÔwü"MxJÎŽL&§èÚ?Ô]‹f°É­™Âów=Hß§Ê1zäÉ6ì¦ÂõV=tý†÷ ^8´ÕC”ÞÙú;´ ¨vgj†Cæä×ß)Ô¸}žä¡ºaûU“ß8·‡zC3ò]aöŒPûÊÌtµ:¯SŒUÖŸ®‚HWF! &c¡¬½ú+'oÃKŨ!âÖ• O3l@˜´ÙñÅË,Á ¨}V%¬ï˶é èÜN„yZ§_²Ú?ô‚Ÿ Y&â…¦Àü2Ä_r"žšg?'wÎ_¿qö›¶ÜuV×ɯ»· CܺÊH¶•§Þt¥djÉyXª¯¼–„0ª0 @éì½3ÛgÃݽß àH2p)d>uˆØ•Ók<õw_¢UúkïGÚsýw¨½¨¿ûDuéyl…g2a©IÚ  JÚþRiƒ~” EŸÂE R€}Ò‰´!óH‘ydÈ<2d2 ™t‘¶9êðôÕÓ¨!ÐV¬¶ö;Sj´¦ìO“jÏÐÒûs¤¬‘^ }HWƒÖ·¢TŒÓ3ÄA º¾ÞÆÂê{!ô ú™‹zí&CÇß~µµÇ–~%zÓ´—H®“<26Rzj±Åj:w[¡<„Àc‚ñX¬Î1Y§i…gHÀËqê¹ Hn²c;Ú B¦„è¡ëͨáMU~:߸„Ëû©ëΙ™:`û ?Ô§ ©5t¡Þ±4r2?ž™‘.ágM£ØIDdaS ÌŠ¡d–ö4±åeÓs°¥UÌj ÝYŒêìoÉСû•ìQßN ÛdŸµICH39c”Úž}}XþE$èA¨R.E)@ „^Èu'x˜èã³ê <Š\§n/'†Øk~’ë 5Q|l<_†£Š0ùÉsSÆ·È<³7ì u[ÄU`æº-4)¦›FV°°O4ì"• J©? 9c˜=GY4¬Ÿè8S(W–P(—¬oóÀ‚‰%–Þ ¼Î|*cè«Ñ„ˆt\B¾æº;†²*ÆkB½º¤&½ØÓ|/_¦çU½xH6¹—d^Dvø [ÿ!›œ˜ñC/ÊÈ?>O}”?,«m’ñÌŽ8S;uÔê5¡›ÚJÃÒÐÔ3ÜK¦0‡•ÜtÄeR0ŒY б!$$ ³‘¯ä ø•·¡*Q;Þš{¼(Óñßüårµ¾òˇ갗K î“ÙQ+ãIÃh0s^}-u‰F ñ#¶:,œêÕ ]Í\t}¹DËÑØ§8“¦+‘°&=Ùe̬¾›± —ŠiO´ª¾xí]Y÷ï1qÍnyÃt`)Ð¥õÉ,•dT*‡É,æÂB²W˜¨ÁS?a*9Ý ¨¬*S¯N6XàQÀ’—ÒgówÅMëmïE&RW å)ŠÙ×àä…Ò0òŽ÷rùð*à5’ý1>ä°Á•ääR½€ÝAΰçºCù¡ƒ èlÏR1ê‡Ò0c÷\1MZ ÂÉŠæ aª—ÑŠäÂwúæÂÐ( åc0y“ V7õƒ­ÏÆ–èB칩„xºêÅ7+Å:gB&qÑÉt¦®#µ`p`”¢†<—}!¯©È# ¥Õ"Ä9@ȳ8]²«ˆc]pú:¨!,Ó¢“íʵ½–ôbG+÷£Z™á£!Ì¿× ·™E$ÛR F‡æºÚM`ò½Š¡Ôèk΢ú¬ääQ”–Ö¹ú‹œq;"£Å¢ÿÕxž F¦ÌO8ÇjÇ¡9kfíüÓlM`­™ ´¨Â‡l*`-Úõ«Ë‹ÿߢ=8mozart-1.4.0.20080704/share/lib/Base.ozf0000664000000000000000000006241511030716023015676 0ustar rootrootkÀX‹Ì=˜EÖýªª»§{gCpY$A–Ae„EQÂDUoYXw™Y7 ¨¿§ (*JÓ™P1'ŒPÌ9çœfñ¯ªó,Èywÿ÷Ð;ÝÕÕU/׫ªWU¼ïn{¼ô‰µ/\±øAñÁ%'ÿ]Óx_qÓRÆ:ÝšÖœ©nÊ6 š ½ª¾¾nNJ0#=»>ÛД`Ô̤;Áy¦¦.iC_›Y+Œr>xJcªÜ\]nÄ1¸:+Ÿ§“­É¤ÊcêfpSªÜV·#jñA\WÕ03%.â|p]]J,ÒMü_US—Â"3SSbƒëëÓx‹™jšæÈ߆ª9TI#•m nl¬™ž¡ç¦ª ½ÆŸ>ò1;3U§ŸñÙqM 5™éXýUéÑSŽIWcõ±kšœÂ,¼uóˆ³Yæl0œ3*F(N‡¸ºÖÜÔܦbæ4¥½üCÒ0þÔÉŸU ÆÍ™Zú­«"’ØC²™©ãÒu²b>É#~}hºŽj·‡ÖT7Õd3U Jùìêt==¦Ä}z ŸfTe¦c¥¼|v}J,áÆ°šº¦tCJT›ÃꪚšÒ„õ°ºl‘WþŽÏÏàC¾óàJ™²øÝB®ËÖM KÞI’‹?˜L›_«ô±*ýZÁ‡Ñwß3%§>¶ºU9ÖRþ†ñ3ÒUÈ©¼O#O*Ñh¹9LIâpPš <¸ªqXºJÑ’KXmü;>ë`‘'\°Íá— ¼“\µ‡7ú¼Ë“nnÌ#ùWÇ›—0]1ˆn$‹Lº‘L¢;Å&}xãP‚?ðD\¢ãW峈ұáÃg ú̸ï"8ãÃÒiõ#6XºD“­ÉL%ÑzO`F¥ Ýà·U ÈÙêZy3ªjf:%Î×uºU_“,tÛ*}¢…I1ñV %:ÌÏÇÛ ”IHwŠø7rºW¤l…wQ¼ù¨,Òý,ÁGʆËõ4ñÑÙòÙ¨¨øJ/…,N\ÅyEÁ´ü)ðî›Ç+šÉ\Ž­ªi$ž8ÄW2slzVºõ±Ùf2“bœ´–|">©Ž…Õ§°q㲄ÏJº!dĸcéÇpyW7ã³JÏòÝGW1Ýg)Æ|<\Ã1¾†¨®;’#”Üèªêšñ1?"=âð*zmÓ+Î=m rëðš©M3lžBŸEö¡ ’}ÅЂãBù­òr½º.‹dâÕhx=#*ö7陬h¦3LMñ±´—#ŸO§·«Á3kËgÖñéHË™˜6XÔ¦çào7c¦#mx%Mðzd“8áš™…E ±Ô4™ûÄš²Šqˆ†-vä_?°õ¾blþ¬ é¬qå¶‚uµ{¶‘{uJÛDÜhR¬ÙxS6`ÿD «W÷DE3¯Þ±^}lSþ"HÝGVn k.”³]vI•CO¼öÇk ðÀýéÞÁxs%UâcŠj1Ë-u34K,V÷Ãd³ŸnH«Í¢1Í1¬öŒ@û ×(“«ñ ¯QãÚÖ϶â­cSéÖ•({&š÷ÏD»¥ÛÐØ„å£.6eÃ’)MsêI€Szœ/¡¢È8ÎQ‹nÆ4פ›v˜Dc;&ÿ¶ÈhK4£ÊXKyj[N±êUÞDZe ¢Ä¨Rq¾P‚hªídãè#U~L}h‹&ÔJë(׫”³µ ô©Êí@9­G*§l[Ö%Ú¢Ò`+(òbÐÛ…à0š¤¢[¿ByªHECMVY§B|?£¦1R“!Ãç{2ky^Mã¸æF]6žõÈAÔ, Fc3Y޼ÆP©ÑRuâ!Û¨ŠI‰“™…­ 2T¦‹&̮Ȗ'i¢r^”Þ‹JT©3ˆb¥Ì*½cðPøÈÔÙñ”è‡4V©b_½IY@ü­%§À¿²î˜h __ó¦Ë—3W°xcÀ:[ÿdv~Ê.K“©´P·®aåF•ëNWùît•ïN‹b^E†¦½?É<­õ*I9QFæ0ƒ©ƒ5ë;|F µ§;ǽ™½£1Íñ,;YêN&wÖ§)o±KLÞÈÄ]d"ºŠ»Êı2q7cšãîn©»áJNËõ:騅)±'ª!6ù] ü‘_u·ê«šj”Ç[÷äË¢Q¶XI“~eRÏXc󔦆*Ù°º·Š½ò›P†ú(î]Jß÷¶(ÍÉÐ'î=ÐËr´šAÇo$rÖñÎÔD¨(%†ëÇQ‹”}ùñ5õÄ´V£%“ñ¹•ü ÞûÂÐÊùçæpD#×(\Î-Oœ¬+¸HÙ­‘¤¾˜8ât=Ô3³nàd=Ú 64JG F?ØîÌr¿0ý²oá,›µnåv[D•xpSS9){Ùþ9ng츚¦@»¯âEÌám,¢r1Ù»i­¼úçþUÕýg†JðKÚV‹ßÒ¯ØÆs ^A Ç¥u…^ΧÖÌJ9í”ê‹bë4Êi¥¨»'úó™YdD¿”òEÛoz¼"¯ÑMgœ‡ä°•+ñ7éÓB½Xëfôd_·°ý"ô9SŸFm£u«^½aUrH§êVɱ~䣪©RC5ò—’«å@ —Ÿ õ%OÏÆŽº&Õ¿ûvLkP.‹Nɲ?ÃeùBkï"ÇŽÿ3•Ü(üÒ­´ëÍXëb³®§hTäQ$&Š›òUTÍ–¿å*Ão`4Îiľƒïœ™.ÉŸÔí©~·å)Ý.KÙRöþ){`Ê> E2ào){PÊL„–Ý.HÙ¦ì!Rðõ|°`å' µËwÏ~Ì4ŽĿ⠀íêçzNª†¶Ö;z¹é´¾?ȧԧº^M=ë‰ûLØgi°>'"ÿjpv’»úUònvÇêäÝКéäzãÝA Uõ3ä݈ìqr,Iz„õ¶‚¤XÞ«¯ªNË»ÃÐ;n¦h¢*7²î÷MY•Ã>x„BAÿ%BŸ®«³¾ÒÅýºQ¥F9Åx«Æ‰SÁö$üøìÿ¸Ý0ë{mµ˜À«gֻ̕R®7ÖÕ b"ù¤Õ3¾TJL*r;m‡{VmxÄC Ý;buŠ!¦d³uÖ\C«äèé´ª:ÕâŠCy†F+F0j½DSCs:BUÆ|Úâ«Y§ö!)1 •2sLJŒSkq(ÄR2ééU)ûД=BŠçÈ0[ êFlŠ3ˆgi ÂWÑ€zªé*ľ,U^T‰6}fšF¥fJÙ£‘·T}V AlZCv¦rþ*ÄŒšé3$ŠcÐJ'½ =Sƒe•}HlP¨¯Aö¥)MŽü;ãµh»²3­³ Â<Õ"áÎt» ©¥@ꬴ¸B’jŒ«¿ûÈ®BDõLGt"~ -؃ì"`%Ú+Lœ{Öˆmg/R”^S±­ë53{üÔÆÆä”†ªLõ zB—ºW#ê_ºW]Í”^ä{õ¢ðžÙãEƒ–8,®Æ%zJ—Ö|Z—v¤l§ð LOwø¢¬8òÂä(kÛ⛲D$¹¾¹)q®ˆ¦fÒÇå FXÊZG’i¦¬M$QÏ”µ‹¦ªñ›ÄYz«œ79€¡]ËAÛÊ)Ù=ÊIw˜Ê:´îDå/‡«§B\—õT£ ‰yPä?«1ˆÄ|°ý´¾öX{\2" åCcó U;1~Ø_“ŽÐ‰ÉíÂI®]*eÝÚÕÅ4M›§‰<šÙ´LÈTêâó?þø£P+N‡ä K‹™=^dbîPâÈ6ÞˆAO¿µKLu%Tv#ûÚŒ\^{‚oìÃSöD2™ö$ez[ô"øKIvâ½C -jZ?ê­[xøIoHVÖ9ñs¨xi»Ë )4,“¸LÏ$Õ4&~×  (m‰­¡l„ªSc=‰³Œ|šð:®@ŽEø ‹…­†{bG)q¹ž ¼íÈ l!Ë3`)#fiÖߟ•l [ »<Ä6±õ|ˆ¥±¥¥ôÕnN’)°@ JX‚óÊXœ«ÂMÐÚh3ŠÍΰK1ë¬u2Kà^"Jô)10d•ò^lùÄÖ˜,ä’¢Ò¨M7dÒuI,€¤=6i‘´¦G{rÒ®l!½øïa‘¤“¢»QŠ?%ºM¾•ën¥?­Žº³Pã:0C¥Ùì²Ë.´¥hø3â%©Rö‘IH&íñIq”‘É–cÛNp®U×€kúFo¬µŠ®¯ÇÚzßÃÐUmí‘kX¦3¨Ôr­;ãB,§Îg¼:»QöQ飓öß% ¸L¬JºêyJ2Y<- ¡àFcØãíjû0{jâZˆÉžª·@t0 ®ñ5ŒrX‰X%4}ÎR ‰åšžGb–Ç™àùºàZB‡ š˜«§†™êÄ,}/ç…R×8˜(¢I ’âc|L¥UÌv†ÎϰªJQû>á‡8kˆsgqÖŠŒZ‰tkÎÆdÄO[]ü;Jš'÷jZÊñ¨P’øwšü?,™8ÁRÚÖµg×$h.=ª%}ÄÿÀ‰”ÉN¨5,Y<=L)“äEïe DÎͰi¤ôñã³£Ç!ëå2pO\XW(å¥b¶V´?×ñSm͵ÚïÔ‚ì|Ècç>vN'‰‚“ÂLœ‘”©ˆDMÒ>&i×&mTƒ™îëL„çGDÛ¢âúy눈ԗDßÒ™¿èdÖ•CœÅâʶ“9ÑÔ&üRÍ$f…“¥Lu†õ£”ƒŽÆm%ºÆtà%p„âI Â/ëâPÅÁB[­Æ m¢`‘aN,dùᄹ)-¶a Ðç [åep8Ï3‚ýad†.×ä’0³x'eÈFf”µ«ÒzŽœº+£l$ éÈŒXï±r1Hèu¥±Aþ`Nc1›˜ÃWB«VˆXs‹$µ›üV€ D+lÙáZ@«T‚`šârªôæ¤=«øøpyht‘16¡¾‹SÀâÍ[%–a’Ô{j)ÉØÇÙ³±®M‹OLJúú¥|jiŒF„îd(ôÁ“n Øø àIÚÎ ¹>›·Û«ÝD!C tÆ+ó u•SÇg|O+×ñ¤p=¨Åšy´¤Â?yQÕØ$I MX‘]ìa“]ä­™@Ó¨ÏÖýùîÀE’¡5Ó3ÝTª[…¼ˆi¼ÇÓ§t€3'9еŽÿH:t2šËÄž3Öõ¤®òý¶ è)¤9¢¹L,€Bß±W3‹§‚=lôøg—µu¸ðle™Ó_P³™‰uÌiyfÖd+…ûP5;±ÐíIø¢‰zJsçK«ý5™š¸ÐOQ3­‰‹ô¸—ÒN'ÖrÈùÙÄç¦ E÷zæTíÏê&Ъ45å+ïoëNFR¸x1„ù‡lRâ(û4°O{Ø ¡,¡¾›RCSUSGgêæØ‹ˆveN5Ø·t_”²~G–À ÍxÍÄFØ çÃ9p cƒµ ê¿Vi¢½0 Ë.H@»AЋºDB#Û€OØB:ë M› ȰLÒÿN0˜z‡Öbæ¡ñ Éi½4é -öeRÂç@¾š0èY›ÒR Ni´»ÓñZE+BEc¼#ÿ‡8ø‹;IìÔÖî<=Ñë (eÆ?KçØT•?Á‡Ì.5M¼ÛÄÃ}è°o…Öd¶KÒeGcC˜±™£2Lk Ð¥½Àr¨Ù4¾d‹GŸ$#¾ Ч•^‹ÆG•Fe¢ÏâTO#;%í3Ámá¢ÏÔü Iw¦"¢ÿp$‹O6Âdl%›¾‰ñ.$Gg“¨”²¾]€MŒS3·M¶Û£QC_SSÌÇ¿“ˆ/–²ŒxWÁv´À½³Q¥ŸgN¿«kåÀ®eîýxïzˆtM¼åvè»Ø5±R÷žö÷³á‹g¸û°Wû„2Gé©îk[ö¬urâlݤÈT¾¾v}.D-u‚¼½OüoâŸU€TÃt ±¼wÂÌ+Á>ì¥9•¶F©ú€ü)bù_­TV@•®†uïH%®eù4è%ØË q!Ø* &Ö€¥žê²ÇaS1øì?hâZ¸Ö¢d–KAÏgÌ•nsA݉9|Wn Î&0ûè7pj>9ésEÆâ]!{:õ24M§Ì“8¯}ÄC\¬²KÖÛs0våÛËAœ2Э¢ª¦¡1±ÒvzšÚµƒAìÊ ”ÊoØUØ ²ûóQ™®èë÷а {SûŽš•Í;ZÀt‚f üËTëŽbŽæ‰Zwq§×ð —ãÃùØf_¯-² D{>€à[ù¤ñ.…W¢¾t¼=²Q»™ã¦I2¢ Ô¹„Dzf¨.m–c_“+wcd¥‰¦ðÏ {Ï'xð¬¢.x«Q“.riBc‡»hÖí5X 1õ\Óh#ßWFmf;IêÞù •K]ñqöh8I\yîó°æLî-ÁrØÖg¯UMY«pIøe)Û¯#ˆÞùįuÂÒÄJôh¸þn°#t·Ãa_â£wi޶ì„*ÊEßüAï§j‘!Á…’°¾ùØ æ$Ű¡N„ã±õ8 “>ÅäC\ó}VôŽÅJ ‘ìz¢#¾À$õß}±Ž\mÛ¾’e…ªö¤È¸öë#ÐíŒæ›¦9ç ã~nd³ržÓxš[êv\CuÊx„ÛÙìÐô´ªæº¦Æ”ñ$=«ª«›RU]›2V2J&eÜC¥ß›2ž¢RèV–ò̇.´zù`>õÉí”ne¾Gy^6+ç<)䱡` Ü/n„xcº Ë™{=ˆ[!O%ÉŘ¢ß lh6ŒeGM£¼÷ºy‡Õdªê(å>ˆM£{L£Ç`© Ø¡ç›!6µyæÌ9ÎëGÁ˜._ÓÃKÀ¦géæu÷#ìšRý/Ûœ ÐIð&€EûI‰ï€hlÊR™òí£¢ß“zzýÄMuîKr=‰[ µ¢d û¸ f¦«¦c‹ÜÔ”nÈØ“K™ÝàhƒÆ‘vG‡öéì¶+aаö1"S"jTÃm:“}Êi¼Wžâž{tÒ¾ ’âvÈ—Áy#kgV5UÏHÚí’öÍØ;} Gí.š–LÜ GÃiöÒéL‘ÉHÜI¨(ݧRÇ5O¡À!)ûX›} ^·F)¹‹¤ätcfwQÑZH†ôû6 Üó‡L—¸÷ðpïêáÞáôóÑÊÕ )„¢¶ºø?ÂÇhD“·A“»=šLWPÞDøØLê›!æŠDè]5Íê!©?Mu“Ìηå»Cyw‚÷É]xÝ%ÄîH¯cO¢Ä=`9”š-e{à4rÚ ˜Í>]«äˆ‹3˜Æ:15nðº‡Ëz"SüeľìADgXâ~T×(ðêê5 mFâŸ<îEÿËÁÃÂý$DòËÙ`44ß‚Ý/Èkƒ-̈#4mÈ·ï#¨ï4"#ó ºÑêXgºB>l Sy·Oœ{ðº7Jœ=¥”TýÞû#R"í†'%y¨!ÕRJºý;R$ }êÄ“ ËšÂum™Å÷}Á¢›dñ`ìFh<…®±CFïp‡bt³fVB L~ËñŽ0“?0y/ é¯aiÕö´‰Ô&Y¬EŸ3aVT˜ŸUákîó‘z¯Q¤ºKÖk”Q-AQˆ5h±=Æ”+Ó×cL1…ÇÅšo·ÁšG=¼ )ꔞԇV66õ†á+E驯‡_öh™{™Á¢Iɽ ÷ñ¸ç¶EŠ{v”{ÂÜû"½ž’{î=ìqÏ­-À½ -sïaâÞÍ>Ràõh©^Ä=»Â8žjyòZTƒÚ9g= â0ªªUhôóò¶¹ª.eo‚”x›bÇB¦Ä³ KÙJÙ{ÉIIÿ¶[ÇTv¨Ýšì1¿Â½ÓËÝ;£Ì½3{¹w±ÝÝ;«=ú`ºØŸÑM®Ç„né•ù…Ví'D‚ÂXí›ò׬}NþµRz õZéâŠÚ·!e <þT„ØóU„={kHt³ÂèOt{Æ3HŠno¬þZ… ®1ZZÖZô‡ÑNtúƒB±IUúVõ8^›ñz¯'ñzÊçßÓx=C<%½ßKý< ê÷9çw“óû¼óûBX®_Ä륨ô–r}¼ë×¼vgzV ôñ;(ÏLJèõu„^}Pœ;Þ8š*yÕkp¦«½,9îWx4hÇÄáò¶ƒ i4\›Ñ)GãØÚh¥{jÇh´Ì\-fzÇ÷‡zƒuÚ¡Kås­öíàTª,¦H«•¶]\êü?ÆÈøTpZÒ™ñ›©—!i,e2D-©¿bz…aÜö!#ò ú?ïB‘Zl×3›=(ÝD ø<Ò¿Jœ{ÉgÅkx½eE_d·ËÈôvĘ¢'[üA„®ýˆy°ëNqúà °0ÑÚu'2#û»¾F~ Âx­Rò ŠTh¤ UTƒQ–—£dXØÑïÒvç!ž7y:<ÃÓáJO‡=½6{:Ü/O× È3YŒ£FWÔõË_¦YÌ© ;~£Óîß’XífÂÄbLg¦Òç£VNA–èµ—Ë_Q»2G¿i(—açûsoÚkP¨‰¿Y¶ØÒñsÚûMé°&í·d»GnIÒ¾B U¼g[V¼·)Âí”T¼3å}°n%æ‘ê¹£mÉ™á¶äóˆì‹Ê' ,íy)WïyMÖäéß©ølÙ+‘‹´”B> â‡öÝËïɶåŽVîƒZY…ìVÃkD =0ÈÆyž.„žA®MdàÊÐ|²Ñ@]úâiðw,qÃÎ{E5òšºõŒÆˆ0‰k§á Õå/×àÃ'Øí7}ŸÓ°+2‡á—šçkVPž)`γ¸Îcöªï‰ ë ¢åd©§~7¨ëõøXÀ?áXgTvû]Ÿ»ï‘n¿ì?¿$;nïGã£z1ˆXð!´ÍíèPÏóðý¥Au2õÝÙÓ·]<}K” )D— ]µŸo£A{À’º¸;Œ+ê¹>Ї’$úK‘ïˆìÇçbFQÉìü•Ùùa™ý,"³eäÿ0,­+Õô‘o ±&×÷é f  ?G*Ûk%(•­…{}ÞÛ°Û&‡8÷qîÿùcì‚ÂHšý 0Ñ&ØŸæ±?ä±ý9 ¥°¿ûK@‡Êþ ЮÛ_C_±‰Ç¦9#0Öcr•Ec°éŠ·äx "ö˼“O6×óñ½Ù®âøÛ_™ôqê®”õÝ•*¢Ù¤ûà@¶ä Í’zÊ¡¶‘ñ¶ç8~ƒDør`¾„dOè]ŒÌ!~sØ”Á´/‡}db3OäÆÚSíïhl¶Xƒæ8Ná±`=ji4‡¬+¹3ÙÂbqâILÌý1 A,Qv”ÄÛYœÇI‘J´Ñi$¢IŒ®ÆÆ).P4GcTœ#±[ÀÊ6ÍH7WCÍz»¤x‚uÙlms}ÒþÔµü{5ôOø’ˆµ}‰½èv?BÜk›PÕ`ÿÁÿ($O™Ð'åß'äßÍòïãòïcòï+ô·¯ø‚‹*¹lá lfŸÂk3^Oâõ8^á…ù¨íUš©þ’~@‚‡­Sñ›zXS=X{­J°ý“œ©ÿiÆÚÓ,2»_ì5HyPÈöC'w"b]¡ÿ ¯ŸÙ_Àþ½˜SYž3)LKY#`iÅú–t§°¿(»Ná(»sY‘[“»€¶øˆ(ãˆwkÓJüþµ ýx^¬s+ùÏjIL)3ZVA†dw ’Ú¾'°­…õ¸ØÑÙ¤ëSÓSšiݺý›²¿ãÏV¤×i¬ƒEdÁq)ƒ®}KÈ„ï} lÑì-/Ø[C•ÀÖ¬RÈî“5暪?€VÑTÚ'3YÇ)ø3—%Ë œœEÇeq÷™#GXt€”‡=yüZÌc…ãÂK˜óYÂýÚ_êlŸÊJY^€=9‰Ìî]Ô Í8ÇѲˆ  ‹<±!¸æá5Ÿ•¹jµ©³²ºÌ­+°î:qŽny©öi,ÿß$ü»)øOg…Eà_àÁ?=¿ðï¦àßùÏá?/,ëvÝr¢˜«2‰sYÜ‹ žiJœÇ ¼g™Ë^ÈúÚ‹˜}‹Î— ’ÁG‡´gþUÍð#ÝÏDòÑ¢nÑvÀ) Ž~8BÉ n_ÌÂÐ –!J]ùûL&ÎbÆx§˜¤CWî(ÐV(5³X‘é*’l_ T’Ž†Ñ¾?ï.˜áF醨ÌÛNÈÒµ^»¾w«tc–3uqåDóœÿ”õ,–ôîÏfÉâs"¸èÌÕ $\–0]â‚èNÖP ªŒµbý9b $z^Öš‹Lw¦ér°€UZÛ AÝ=ô9-L–àu.³Ïc(þ¡`6° A¹Ì“#¹v¿Ax;Ñkmö¤@«3˰·ZHv¹L£0÷8K™jœ*—åHÚPYÓUÓrOBý8U×Y×ýÿJ]Ë‘ú+"Ô/'Ì÷á{Smç»x©MPžö¶çŠ Å~ ðl +Í å“Á5A¢?ë=$ú  yÜKYäç³db‰nùëîÐÕS=i™eñï< î0mþ8ðn(qjFÆqd·W"%÷èK£Pç` R¥pb/9%l*â«J/Šï ©ˆë¿Çí ˜¸˜C³´í –ü_24O‹ÁÏડ=ö£H”ÅØLW(Õ’ 5SÛ—zh¥ZW­$Y¾`ÍE1‡s>—·êÔõÑðeOÀœxtO_y¡LcÉC–RªwÕ{°$Ëã\¨†(¡³‰Xš~â÷ WR¸Ïí&w²ô>€-ZO†ÅƵàûnî{jñ¢£ÍMðÛ8¢Ïá©Bð¾—B´Bð*Ô‚›ðgFŸKhŠm[±ÞQëyè9ñ<$ŒžoY„É*môP 8Ÿ&×u-nRP‹à &ðÑ/Θà¦.Æ¢8\ô›‡Uq8˜ÄA¿øl’† ™94+wBq˜ ”N‚6lG¢·Î‰óI“9S#€@dj0ØDÁç;uï¦÷aÄ<®Â€ÇTæaЦæ×!Òž÷ã­0—½-\[t~ûI.Ãê+ݨúâK"œ>”L«èÅ{£/%F«ýÕ°ˆÀ{qgõPjZ3È,†ÓµeÈþÖ½è1§O7—„Øp)Kº¡ô¸Öá ݯDA¼<ÞÏÒ&b—!b]&>bC¬1é!ŒÊ,Ò´<ò0ÑŠO6—[mË0Õ5%aFƒ*Øé™âw®ö Ÿ‘¬ÙA]Î’ÁÖý2–ìk_Áì¢[_Ü¢Ê")´8ïN×?m¬É$Ös‹vlëIû©$îÒóÔ¹ AñÕF”Œ®}%Òc'dôð–}U„’£d:„÷$F_ͬ¡Yg‡7,£'ð!ÜYøÓÎåôB®£/Ö hÅO”×Ï{Ô¤ÖU!^_V¹+‰Hº}MŽï3}AÓØÂcA\÷Wýl'Hýì›™í<_SŸ¸…Ńñ öµLÆ4Ùë˜}˜}-glX¹aj涉¡X¦¥læGœ©@¦¹bÂJðšæŠáÇÓ¦ æt"™@ÄEiÒé¼ä”fP´-î@¿IÃäz‰6¦2ßÒ™—‘ntZ–×ÕÆ5DNc&ëÜd¶‘Þ³¸Çý ]Ð…ŠoˆHH}0.b|`.±žñ#jêíëQÈú®ÐñE©M†Br¢Ô;¡,>xŸ¼'Â]3æý馗j=ŒÝQ`ûhLùÊ8nnÊÐ6í-§é>l¤ ÓØžuÑr» „‘ž±)Ÿy8“~^ÔÞKX70uÉØ.?VÕ¡ËzØâ#dC³‚Ö•Œ"ªÜÄRe<Òd˜h¡Ö”¯Æ,C']3dH™)×ÈÄ|ùÉCêèØÈë1šÝœ(Cø–a¿ËP!|qòÖL]¯¨Ì¯Èˆ›•nÝèy‚àMÌ‹_¥Ç›ñ:¬ÌÍSK»#º5VF|¾Êb‡ôw²"7ÌÇÝtʾÅS„ÃaF!×HnB80´xlçÞÎÈ?Å~"ƒÐS*ÑFVZN*s‚"sV“]ãׂًü(¾5Bìqd¥Ì[?€À½Yã]8‘âÇ7N?wOÙ/a´žµ++¥º Y6dÔ$kÍ )]¹+N7ú¡!Q¹•µ(·‘HÜrî;†!®ÞÅ\õñ z7±tC°ÃåxÄŒïE€ÝÃLñs/7*ÈÂüt)‚Œ|E²!X/UzO˜‹÷¢£ÐÚã“?ÖaíD$ïóØ@‚êæ}ØZŽ<›5¹€—c^bðRö2¸<¼¾‘Ú)ÕÔ0!×,{K ¨2&w²Æ”âû"šDÒ0ÞH ÜB”^6‚ÀtÕ#ÐÄDÙ6ð1ä“©ÕÕÒ3é&òÑ Ê>Ã>A§ÝºñR­”S ÑSôÔ]omL¥UÆý†m›Fÿlª4jôÏ}¤ù}LjUTîw<º G±ŽÔ¿À¡þC¾ít©&ýÿ)Ò?!ýdIú @‘~#DzE÷ `‡é®% ˜ÈØ’îB„îk B÷[¦ûÆÝÊ¡{%-æ×?ç± ÂwÛ)@÷àŽ‹äËü 0?NÄ_ÊŠúnŽkʵR+÷&úVãʽbl6çòÉ$gkìd´ª7*Ž<áÈ‘rh9㋤«ô(ËïÀ¦4búKËUp0²&›'YÓ_ŒË,Ò%stC.­ÉCøD2ÇÈ7LC3MHÄähH¬K¯nÂc’ÑÓ”½it‰t1®2¯LmŠaêlœo‹cãˆ_ã|~Ñ3Œ î1°:ª'+CÆúá–GÉÆxwÙÛçc ²7¶À»ÿçà®Ahn¹ý¥DtÿH® 99 ÈÒ¦Y:ZÊÒ%Ž,mfmZ’¥° ]ò_¤Ç"$þ»¤+Ÿ.éqs ¥èt”“+Á“¢º’"SKÄ`"gÿQúÕ¡ë¢*MHåVÀǶɭÇÜڜí*iq0ʉϰø¸À&¬c[ücGm­­4$»@wÎ}iråAwñÞL‘C#ýŒæi–ï#·NG(j€÷“»«”#sF©‘ˆ ¯Gä.R’V~®^Ô é-H**Ín¼œÂbPá_÷ã]ñé°?°ÒS˜Úï$ýL^ÅOFШ–ž møh<Ålµ·½1l¶D/c;Ó-èqáóM·ìîIg˜ä-•8|Š%#)O¤â™©˜*×$uçϲ˜Ë”ˆâç"ئå0Ç€æÌ~–¤=Ë7ÀÞx–EÑ ‘“^%íNÓšñÌ6=Ë·CCŽÏáÝó,€½z/%£{ ¼»\E2z1´$¥cÁ1‚í Ꞡʪb=›C¬i¤Bú³˜–KÓ|`RGòmº‡×>º°¨>ÇFZw&ðN¨ÛBzŸFãp? [ýaÚÙ©»ø‚ö#f*hÉZýNÕ££M ôý”µ¦é͈6ý4SÀy ¶zte64÷*0?d‘9‚Â6øãÉh”’ñS’ñ¥7[†’ኅý S’€¹þ¯%á½Ð˜ÄgÚ6II&Áþ”) ¶Ã 'œÛQäÿg-ðÿSâÿç›%ÿG(öÁ²ßáýˆc½¦Ô\ÿë?²þ‹0ë¿dÉÄ*‘ç±·6mOMœ«[NBNð,9‘ð0W ßyFÞ;q%<—ð0ÿoÏ%<2 _EÈ|œìŸ¿\öl¿fÖ0N$ö@àø†zç´)â®$#=±àR tÉH” $Bïwn_ Y‚¯¢£û_“|o¶ô@_¾Á÷-³=øHö£í Tmo’T{Q6Ôžäî¥ç,¿þ&ä|}æþw9Š?Gò÷7g¢è'¯IPü 3÷·ÿúDÑï!=ß!Þñ’¹3$oíï™âèŒ?c(-€Ø1†Öù¹%ÊÏ?D@:Aò3£Øù#3s*/3Ûe¥6‘ÃöYùCˆ•?†YùS+OÄz„±ÇK§çwVèñR™$¹™ØÊlçxDŠÊ–¼] ð;Züµ†¥‰»CsãžâE6Ìñ½Ô–TjKgX-Æ0º2?Ú/ l8fßäd¾¢ÅÏ!º'¤î?GÈÿ?Òª>|$aü ‹ sPEŒý1§YEáèC}»Ö»n 55shä!C(6Í *B÷ÑÖÉïè#„ÈéÉÝâ Ë!íÿ9*-¿#F!a!øÀÅÄžvÌÕoÌrá/…ÛÀ71§q0zI2–if…æé¸‰€ë•ñ8МIÀ[ëb´'Ú¿†äè·°ýž#GÿrôsäèTÊ‘2 (Džä`Îÿ’ó}È–œ >¤èT*§áå4è•R^¤ÓàÈ˨ˆ¼Ê'¸”.¥ب#8ߎÇptPRNæIùÑ”-!xO‰À{ HQ™¢ˆ¹ÜPGæJ˜"¥dÈ*ÌÒÝ—šE$pQF8ÉH\•M74åS’ëB t§ð ÄÌå!‰9•G%f.H‘¹Ù5= xÐôŒð¼„ ÔÜüÿÓÞÜÒ×y.œ*¥Æ¸TàÏ|. ÎepF~êvÁÙÇ38ឥ!(PIž|¢ë*ã‰]ÐÂçfOŒîYœyQ9šÏ•ÝÂà´ó”m.çSNç–‹ÉR9•É‘ñKû.sƒ—ÜÐun‚DƤIŒ‰,@Ú¸Ž˜UTæ£é©ð¶X;-$H§‡iAŽ ÍW‚ô©k{‡lψ\)úôÿ§íù,¤Ë‹"<8MIQ…"{!W²S±c¢C½5ªý/ˆÎ¸ ä,ŠJÎBGr>A}FêÓ•äLPmí™Ê/[Zc‚šUÛM7åе‰üÔ|RÙ¢[<[tFH„Î ‹ÐâZr¾ðe'BãîõXÜC&Ã/ÿ§"4ΊÐk!Hßðà' g£¦¹ ÍN¤Õµ^œFÕÇÇôØfœ†ßã÷¥·°qš'¿E‡œ~ 9ÅÕÕBÄÆÙÜl:'‡‹#Îrqž·_ bD˜ gý§¸pn„ g(.,P\°—pEû;N{?Fæ?Oû³¢´?#Dûs¹ºZ ý’íÏË¡ý™Šö;´_ÎÝ1õà¬a|üŸâÀÒKg3ž%X–qӉɂ8[…ÑÑ|ùxʼnŠÌ"!9!t?”A Ó¸3_‰Nnà‚ ÍUØ‚`;2s~žGüó¢£ãç²hØÂRžKùeÊ/Ï¡üYŠò:”_é™òa²_øŸ"ûŠÙÏVd_ ¼Ž9Ÿ '‚¤ÄZðh>f{4÷çˆþ ‚/÷~yTÚ/ˉYÑÁÏ|%þ~B³ ²Ÿ#É®ovæ"/ô7'R|óÿÕlä!W삇–(Óô¶3ŽŠÞHU5m ô¯Íp'v ÍIÒ$å¿0/ù^”5ï†XCS}(Öø‹6éõ*äMñêbç*ÿæCgbr 7ý!®£@ÿpÇg¸;tiyZ’&,·75¹T­Øú(‰Õ!gbMØ™¸0G›ÏSb5׫K¹í‹UX¦æþ_ÉÔ©!™º8Bú¥J¦Ô÷E\ÉRÿ6Åýï‰RsD’š¢<¸¸%Aºˆim›eJf+9º„ gl …höOoÿ›24' þÚ]¡Ky2±ÔhÚ™ÕËŒÂPâà&û2žxD/ŒBg_‰+y¡¿+§\¡Ô×¾œÛWÐÖÂܾ’—_Óî,ÅgF–„-W­PW~#ˆ«ù_\=å*’=Þ¾Š—9K±§UdK\¬ÇÔSMcbnÐ2IÚ;´Õ¼+§æl¼ƒr´àTXÞ‰³8‹:›µ;®§ÖÖ@ÈFeI½úšîæ1³¸·Yô¨ ,g_^ûZpK8.·„ãjW@|yzK/¿§n›xzkàÔ±«yã˜Ö½…´R•¦¥äªöâk"B¼Bª¤Ù…Àìâ:Nôª ƒZ ÑE8͆XkÎ2%BµÀ³õv´*Jr©2è´±Žn@¥µ\nR-ï@Þ¹›Ú_ƒb·Ž{ÇÀt$ûZ.×®®“ GKu¹¢ufvª\Aª\×),ɧԫx²¯}=·oÀ²oâùÞrDy¼ûz^|^DæÎ§­ƒ@œù»Ñ17ò¾6£í›8f/‹É2éã7sSÞ“ÌX»Ã/h[ÿæÁòÀ,®öó8\Îs´Ñ`„·—Tï´‹ñ÷fž8Õ0ÌfëzfúÚ·pûÖó½R‚Äomëi;£»xÛÑÙòÙMéL#ê[cO÷0ùă¼P?ß“þ­®•åiõÀðCÚRé!}ˆjµY¥˜ËX¢åkÌ? ¤uq‰¦kr3Z\Z¢Õ~“#m…šÚ°_>|Éœ—²Ç.ÎõléÍBmTäÅÎÓt$­ø¶ˆÀ]2ÞqWÖïÚë°jÝø®šY¶»#øüe»{ão 6®ƒd2…m³NÑ ÓiOAéäˆl¬"Fp>w">ÜÁã’ÜÃå>»‰%"&ù˜É6Ù·s¹º°í¡Á± Æ'­äWÁ`¤¿Iûû«}^˜înnáìæt5!wGˆ±äyjç T?¬úN.J7 IÜÇ M´P$0‰yÂr’H0Í@Ñ3[X,<Ù•ßVÚ :"Í=;-gNë¿›å!=Üéø´tWŽÜ®‘@óжÝè ¼}Tni¿vÚ ½Ñþyaä¸ZßnÀð{:Zg¥8EîIaË=?G—Gȉ^õF\îælr`»PÁ¶N´Ýƒ`»76Ú)\Á†Ò=è‚h{[§`YÂ7°ÁA@´0 ´{Ï-Bó(÷ñ,)X®v`y ÚE߃å~–«,‹ÿ*, „¿ÙœëbüÐìh]ÆŒ­EË\•>nXs]”.ûA^–ïÚZú=5ñ’žÈ=ß7ñŒÞº…Sí<ñ²^>Â7“&b©(klYf©šèá~Ž,°â('öÃÜ~„Ûrs¡°7qû±Þú;Ö! ö·`?Îÿ­åÂe‡v–³ûH{3ÿ°}œÜ®]Ò¦¾ÚŸîg?É/„84³ª¡v\Õ´´ý·Ÿæ­LØ3¼ø¹ˆ!ºTYåoÀ«í_à|\ó”R¶WOà˜\h/#ÑíÅ„¢( '¼Þ_g¿%}^ül¤ÆËÔÀ§´û;Öø<hn±w¹×~ 0QFø3ÑEVÉ3 ™ŒïgzÑ*è©=#§>¯¬o]ž´À« R1¶Ë“„ÃY·äI~Oò‰'Ä‹ i “yjoúÁÀr°Ý›< IL3!n¡±5óD¥=W/ê·4›ÚB^ûÔ– ø*oz˜ eŠç±^»nKŽúù%œ»Åeâr6'v¨Uèj`Ã0+ßÑ3¥ŠL]sŽÐÖ VûÎ÷€N›…hfLmWwbnñÈ_‹Xfˈ•Ø&X™HϤHK4m–ÇÍI’’qX®iÌH$Ø,0°ÒO·:rbQ«æbù…X’V”!§€Úõ¹úÜR-gnm‘ØòÙ@ûâXÄ ªÌ´H\¾æÊ‰•-õŪ•Ë=³ˆ"w$°‘G[ÂNeQÄ?IT *j·Ík?øFZtÁ ð»Y[¹"ˆÂBô54T¬ÖL˸WW:÷Ws¶^ÄÂÐ-µ‰*6P¬vÁ7Jä%jü:dˤ)‰Œb¾Jí_ò9x%j?ÿÊɵ3H§öñ¯Zâºż¯¼Èzì“^®F:¯o)ñ¶P"í‚Jh—,Ï«©«KO¯ª£¡”dñK'ôr5 =V+§ÁŠu()1VFPœUwëÀi».AÛuq¦”‘™ÜÝ Žµ“½ÁóD :¢/…F):=헹ܴ_üÆõFêyn}C²ø•ÐW€<Ãñ0¡¾Ü«ÜšžF]îÄk<ØÛªon*e=9i¤GÁ9{Ë= {¥˜6ièŽÖ®LÒø6Nľ]áô wN©t†éÐWi|ãõ¨ÿ¤!rÝ<Ñ8ƒ¨oqsœ°L¼Í[€mHÏÌÎJÛ×3û5noeøè„hÐñzéGaÒfìvT¢¯Ò5ãwp7"ûÉMI;46×¼ 6‚%Ïç[)7s"/™žJhÓ$ZãtìIþ{ÞÂû^ûûï…óžè¬[™gq'gjÍ[S#uEùAy¸“gunÙjYèo¤‡õð­9™¤‘›?þܾ>$ïE™lÆ  %:g§JµX=9+”ð:OŠ7¸9Um-ž´ßÀç7¹ ýí“ö›r˜6‡ßo¿ß‰ðûJâ·i­c•dø» q}¦\ÙM,Ç®ÿÃ4 ø($ÃòØ×«P°LËÔÌÛáìi-äÊêi““EV£eì…"y{{1µ·I³á)ql¤‡/,î4uu’byÂ@aS>cŒ>Ruâ­àØzIŒ^è|nì…©šðR55äg7Ê1»Ñû'·éA¤Ö‘”;´uØ8&ƒÉ·“°Á}?((†”Õ¸LÖGyÎæ‰É<îDBxK„<©¹Úá¾7 vQT>. %¼ÃÃ{9"ð.‰À{¸JŽÒèëÀLð>·†Ô¥«þ#3Ç—t×fpŽÝÇ¢šï[)„|(Zêê¶pvèýʽׂzŸ€ú ÔÕÊdֳà ¦ÏióÌ醚&{#At8ˆz„•‚‚ö'yªpæ IP‚«îLASw9¼hzäAÇ΄dE !pC ® N>údÿ€'‹?ÀyŒ0Ô+Øf©>Ÿq>xêTRÍÜþÛ!´©Í D£á¨ÛQn@³>^/µ`¼Ò!µ Ÿ&»Hœu’84ežF å‹ð=æä-‰Ó‰8ê|¡–ÓÞIƒV4b¥kr³—Jcnì…Ôó3Õòÿ¹z—nØ'Ö5G&y@¤ÇWZÅZg£³YûNKžâ“”Ø>ÖYïhË+,Al£™&z˜×Q–nmB—æC©gçèþ›ôÕ¸Ô<¹ÏŸ¤ƒZê¡ËC©?Ùš£^/o ªÎxbáøŒ¸ÕS™Í9<¢8U‘ç©çâO"ì¾VºuÓö&÷ãcän›½wSs!àldÍ2 ÁÙù!†î>¦j›Y5èåof]t5>á-miAï?vb*§¡ý”«O>Qùü­"(ËgôEHû?wÊø är½¢LÅëA‹™ÞeRåœ>°s=›S•ó*Ê—Ê­SVæ%0‘¢|Åcè¦s6P[P¥I™GVßìᬾášå m‘”$ÛY}ã[óZÈd~Ƀ”øŠLÎׯSÞÆ0‚ðC×'á0à÷!,õÖyÆP-Òh[ìO@õO}(ê×<·oÚo#Ð^òŒëGÁ¨&h¿ãq§Ýv!–¶§Gµ<ç–N’¸Á&cy°2–a³ÃÂfûN?Ó”6•iʸR0-Ï‹BKZ|´¾å¹íÑw„Ù÷ÌnP¿OƒQF˜má¶l^²A*†o…lÓ†+„ÒˆÌ"FœÈr5™´øò”ŒÀNòt´(ÍûgB>‚ñû”l!}ù@ úÙ<(è_ò€¦,â-jŠ·ó)ÑO‹Ž`¼^Í;}¬'aü¬ªMÓéÊ4¢M¡}=zÃ×4ÍDÛÆ±4æM!‚Z '»kr=F‰6ŠùÔ¸~¹˜†å$‹ˆÔy#I;ï›Té\P…Æ{º{°s]Õty–WyØÂ|‚Ž×»C6¸5îNDáÅqØuåN{K›zï> çœÙÙ•j¥L†»ò^j ]E¥éÖ]ibÖð$÷6ƒ·zÑŸD=£BŽmGûƒ y} ±€”éÇÀ¼éOtOÅwI IbI"¸·%ø™»bpß–Áô$áúœðó@ X f kO•‹™äxqÙ7°ª³™iuè\7Êïß }-ÚÞ¶³íüW¨o/+oˆæþ/þ%"07)ó¸”3I^~å1šþA#Þ˜x64õXÓX>³žv¯ê1Ð.J‹y7P´ØX%6£}›‰6LŒiNÀuEQ'W(FWšÝX®4y´ºÍ¸±ežf_À"‚±"ÔVýÂÕ•ˆ_ypã¨_ÜmÒ݇çTPB ûÿ)û7.ÏóAbmëfé'ðzµ©8ÅÍužøø§›Šµ l(Nû‹ÿ ›Š7F6on*NîÄV7»Hʼʯèþ7îß¿ŒÈýAîi®èl¾³¤é8EćÌHW×VT5¤3Mö‘‰Kõ˜;9bp"ˆ™É~üÎÖs¿Q­¡ÇF(Íó²ÿh¦U‰÷m;QKD5a÷œVg”4æþXTíDzsÊXûBNœLíÆPÿÊ%Ý÷ž9+*,ó£ÃR;Õ¨HU¦-svæ¨lF¢(sŸÊý‡T^IÒ“EP¶N¾µ™+’}ívö©"™X&lÿ6{žhZ$ÜåV:ª¯¯ÝÖž/’åyN^Š©ât!2Ùl½}šöé"2K~ÐÁ{ì|‘ìHÓä ¥Ìì€Lžµ§Gw"ûÀ¦óE"§‹Àøš){ Sî4{¡À?øðïkïe/ÂlgûL‘X®[NôXM£½X”y±dÉ®þ}iW{/~5‚ííÊÇÈ÷ Ý9K”²v{(cNKÈhpÍÂô}j¡|ê7<ØNcŸ)þU|¾+ÍbŸ#ô¡ÙQtA»]÷—•tÕJy©  :Æ3ËAné@>¼“p¶pC4©–s„3ý ž:p’b‰°Ïöy"±BÄ(jD†«Ý*b&y½T$®Õ­!3š3ò9ñ êMº®N¾»ìe¢¯½\Ø;%í"qnÊ2žëXñk¬îT“óOïMT;©¶goO‚»Ýq{¦Åé]çn8€9'2=ã‘ñ™Ð|üªá ñø„Û+EñHî’ô#´ÁmŸÑ~0𚻬~Oeú¤ãÜ••ò`€¿Oóõ‡½åû=°F¡º@D¶Çû”–T€½J¯‰v7™-M”h{`«‘BE{’³D€•°ULã;u…ýÐáQƒèBVêý‘ ¯{‘(kDëIƒ/öE"›²A1c_âbñWB­¦£®#›ëšj†eÔñehQˆi’³…Øh1ݰѺŠ""ðÉ£˜݉.ôèŠnáBÃÜ…=±X©ÅŒŽh/iU.Œ‹E'è"íÒ˜%s&ƒP&6•gB·Qºnð‘rYc˜A‹)_k]”ÀBˆ_¶ºDS'ˆ^,\}¼)–{Ô:À lO/öZdK÷ràlV¤Óf¢X©¨Ì ?•« fÆ*ó+óÅfçà‘HÑ÷Ê¢ÍCø,Z\*¬ƒÓuõ#k2ÍØ*uÆ!2Z¶|5hF¿3 åúÁm-0T«RΗ(!$/EkP|YŽûå ŽËEŒà¨¨sÁ(wÀÀLÿ—ù`\.ä(ÅWD ¹_EÀâ ’ЏG‘Ñ´1S÷ RëF‘(z¯å4FÀb<~Ê)Î…&RœÕ‚›ŒÖŠÊÕ¥îþWøpü“àPGÅ_åËËU"Ï¥ŠÊÌ×kÙ_åJ”«„YOk¶˜î¤ |µgJ0M¬‚àñò\“£å*{2™×ü7Š˜«¦¥¬´Ød¹‘H!2km´i’~Æ¡~húIªIñ t²æd  µ’¶ü2Jñ‹6G3©•m(F¤‹†ú8qüR*£‡:Þt|9ê¥×š3T@ôÎVþPÀ¿ðæ6*kÕ›w'¼°kw½%íg3[n¹¿4ÅôX¥Ui‰—•Ò­‹÷š¡ëÁûQq—Rqý@ôpö.Mt÷ç€&r¶i~’3uõ„Â`]D¹®‹Ô÷°ª¯›ªïr§¾nþ^)ÿb}×åjÑõ‘*QMÜî2Ê8V™¤]«e‡(ò]Ý¥ ê,ëœÑðTU×·¬(7Dª{TU×YUw•S]g§:|©nÙ6ª»a›Êpíö•Á^ïy#^7 ûf‘¸Û=`¨.;½¯}‹ôSn‰Uº)ý›šÆ¾öm¾óoe}í;„}§HßÁm“âÞrÎ¥Vy=º ½ÏîŒî„NHÐf°úóQþa]Ng]ˆ“`·EtZBf`Ó%h¥Wtž7ôQN7`‰çZ¬ä‘.Ôù¡„»„êH†yÄYÏ’ÅwG°|Lùœ¯?œÎ èÒÁU5uÈË¿ïVCï¶]W†žW3ºJóœxf£`ûˆï{Ÿ‡Â«!§ÍL–Ç“‹–ÜÔ 9fíq´{ 7hŒ[Ü/ÌñÙñÍõuit«JYŸ½å+ ß]ëoÕªÓ&ϓî« ªÇþö×Lg¬»øžM6+š\Î òXŽÂ*Ï4¥7LÇf±OoàøÆ cm/sÚN™†"A´Ú2Pû)çž廯W†Øtôõ)ù^Gî^Òý¤ Ñ¥ O(í[)D‚s£h%y LlsF*ϺÐB~©0 ‚ù“RæÅɜϠññ¡ÂzÏzénû=Ò]Rënû¯•«‹;Ò1Š °ŒZBöÿ¶ZZŽ–3ŒvAh`HòçòȱqD=í}BQ»Š`ú”¹€ñ# Ó‡…åaZÊzI³$ò\1:ÐrÑTk•„þvæ£+ÍZAx¹‡ÛÁm5‹àöP·‡sÔâie¨Ö ±¡²I´õÄ x^ŠÂN 0‰®×ÏBiÈŸ9ç’M($Eð¬R‡+°³Mx\ä‡PÊöνÎ ãòœ=äÇ„±W•´FÓhÛ…4‚äí‘N›(” S'”wàì‘¥Ê×F窨à<ÖÊ#Ž›#8>§|¬Ó?ˆš¹ÇiHÿ §«Í È«½âÖÑß_hݱǵ„»8/lèö:¦Mÿ]®£GV¦#B@o¡Ó=é,‚ŒÏ+ƒü3pÙs߈0vÇžûÏnÛ´Šƒè…0–¸“œj½×ryRc «¾B¯ßî÷[¨}zBä¶Qn?o?Çíߣ t^P¶x¾c‹Ÿq©„îVîd†çoË ?Á÷E¥Ñ3>ð}‘\i >fÞêæC½ÕÍBÒæs.3xÛÀw S„ô ýBÇ’œÉÙÀÛ߉ô³¨ˆ}±'EKGA¾ÈBJõ¹ª ]¶µ^R.sLÖ³NËÜ[™«eÛ1WOG¨ö²2W?"ú@¥>#â¡{Ï ×î~(Ó]c=Éωc &ÌèÐ'Ú„©Sù䉮ÁÔmáVá“C;@†èûKˆ¾O uEuø™°ÙzUú¹!^Qfk “ž«x^XJY}Ø%ÌkÂ'¸&+ÔˆË-ª©}ÓÛîé·o¦œV•äPϲ9ÿÓ¦ÜwbWDQ^Bù9¡®(ÊÏç4y¯*£õíÃWDž”ŸŒ½EÉAðkÀÜn¡s°ü r½¦ »˜«q×…3><4]îÞ® ð<ÿ ³ÑùgÝQÏWТZU@§ž9ƒ¯/ˆ&Pð¥HU¯«ªV;U½ìV5<ãTµš‡ŽZÛVU/…ªzY„N•}_¾*ìׄýIÔJ½¡¬Ô'\Y©7ºÍtö“&#õ ߆‘z=‚Ë›à7šŒÔd¤F{‡ÅQÿ¨¯2R2à»AzÇ{bÎV|¹«V)´úz“'=·„¤çõ¨côAØô¼!hÖ^#ÐŽPá-5<²‘‹®D…·…%©PWEGñuí l£¢ÁIZáBMF·pÞïk~ŒDÐý(~3B¦·•£ùÈIñ–#d={í”è„Wç«¥Êv%rCrüéƒCMÔ›!)xKø‡ ¿Vá ïH@Œõœ$@Þ±á éi5³KÙ>#¯çî€|?ÿ”­ƒ9ä‹“ïöo01 i„Dþ¢·E=´[C Ô†¼#BÁEáÉÀwŸ÷#ø¼+¹È:i%$~ï‰R–(|d ‰lm:¯Y•ÓhùÇþaTúû!ê½—ccÞ“åó…BÐqÃâ#‘R¢¶ ¦²R™VÀ0K G÷}%¯3éĈEþ°pQ½Ñ¥y]õ:äl„ âY 4/x´‰2ÚÈmÔ·?ñVHa>áûa¸ù üIàOÔö‘eHà]ö|$SlK±Šm! €‰Û jyÊ願²DçpàCÅß¹âÀg¢ Àú¿ó–¨ÿi™”å{šñA„Í×d­šy›*ûa]˜®?'·Öõ\ˆÜŸ†û:lœ>CrðcEîc´> múÜ©à£KîœP"íϨýôC ÏC}Ÿ³î'Ê'û™+Ÿì+Ç'“[áúâŽ>æØ¦OöE©OÕæ³1>† ýRć…Êë=ôǘ·wqÊÛ5W_^P>ͬÐÎ jób&@‹S9µ-m^¼Þô 1å‹ ¾ ëÀWÈ”o"ð¦ˆ2U&¥u ã0S½E¥Þ¢X…4¤%d,/Š-ýd-ï›ë‡ÙMùMXrrÔâsÓ7£¾ù>£<&}³&}Aò g¯WÆ%,!Ý8ô{˜·OçÞ_ÎдeàoÒ©ï(Gnó7w qäÛ²¿„Õä;äÈ÷`¿TÎíQÚßVÚÎxç¿> ‡#»{9CSËlv„zàU…¦täèÌWŠ[VüЙ!Ù²vl‰`øµbÇFÆÇR¡?(ñËë=ô>oö èÌɆ|0h*Šâ¸ÑˆÑþ» †@³Q9,ºÁ?y Ä¢-!"üVš‘E?GøF±h¢RšŸPi: ÒLôXTšÎR(¹âsG–BùJ39äÏ! ÊQšo§¾p8õk@iFx\úb;\ú%‚äwŠK·+ËfÏçʘÝî3Æ7f‹t䋦ø"'Øü}‘w€/¾1»+Ä—_B(Ïç!¾ü*hyXñ=‘Í;¾W®ï*PÍ ö:vl•:+bˆ¸Y¢tf.·‘Û¾Ð&Urû—Ü ¯@û·¹âß"ôÚ¢„âlà3‰¿ khvX]USS;¥»Ïz#œQÄ£Ñw;<ÚÅyÂ$¨Ìâ½ÔˆvB í;»¥¬ßëwKÝñÃրܱºÜP<פ!Ä ìöo¿| ÿ.’ÁÇꨈý \Œ%ÎЮ»âï…Ký«%ÛÚ!ØŠ`_2ÞL¬:›¬èÙí»ñ§ÃïÝ[~YìH~ñÁæC~ü7¡üV¡®P¿ìì°`þãäˆTþ¤\ã M%TiëÚݦ=»Cð÷7ß)4ïMìHLæ…fg@³E!‰8YWW³%9ÛÊü¬D`#§êª=˜†G)X³-)8%Bš_”Ý:ó:*q®Œ¿×8M¿G79õ·7U=nW*Úu öº¥˜‚ö¶Ùi™å¡óC[t?%J¬¹zH NÕ“Åó"¸þª¨w1ãU„ë|Ý µ÷ª~±’}ˆa^À.WˆÒ +÷d¢¨XEI1[¡ÃL̬õ°»4*è—„}^»ùˆÎit~S£Ö'3>@¾¡T—~2 ŒZïånS†}iꬪ!ëÜñêÖswÚrF«O Axšž;ZM3Ä·EG€~W4^ìHèB½PJhU°K‹ò¹x[òyzÉ­ÊJ½ËÔŒáÝuig½r™6Òµþßή>ŠâŠß›™· _¹&‚`TŒ¯b<ë?ÁjUPÔ ~´19’rï.Fl @‚…*h¨@¡… -(´ ¤ % ÔP‚%Štfwï3úkËï—ÍoßÌÞ¾7ófß¼™}ï¿‘E­†ã4×µá}ëî=ÛíYÿOïÔ¢ï [Uw˜%FOÅÄ †iñ£³R©szBK/XFª£´:«°?»Lg¿A$tú–pèt¤y;Ýp!6-7®=“!±=ÓÛµ§ MÓóÌT|™­øjL+>¢ô²ïRúŒ„®(c¦Qj²ßO,äÖû‰¦ÿãýÄÅê9ú~¢9QϵÓóŒvý²0~2ªFz.ß2_Ö |JÎDýý·Y(g£¬E BúO-¡ùåÌt¢z;ÒE¼¸JOéFÎQ£¨K:°Þv¬§…fÂîpýyð‰ãV‹?´€,ç¢ t©ä¯S²ÏQÇd!ç¡|ÓÄœd‰ÙËáT×Ê'é7È"œ˜v+¾°8Ìǰõз~Q P.DýŠÃB¾„rÊÅ(— s ¦ ó<Þß¿W‡FèÐß—Q.Åô BL¶„Èr¤k!ê•]Us³þksíÐøæÖc¶óì—Ñ!§ƒ|ØÁ Vö­˜4Dõ¶>}Wê°euÝ«èœlÃhªŠiF§ÁÞÐÈPÀë+Ðtµ‘¬èA@®yÓ&.—‚\†Î_a²VUÈoåH¯\®Y¦†*áäk(P®0ûæu è(çCŽü5ÊKÚ}ðC?3ÌÈäÃÅxÛÅ ša%¾¼_ÕŠ7Qš¨{f|åJÕµ8D&7˜šùök\'ѧKg½DëÒ±—0Ÿ˜z¢ÒÕi/ÔD–£OºCÂVdhT@{÷]¿n^¥ÚýˆæÎÎq†OÞPW¼ÙÎðT0³¨.«±ãÁ°Ø+Q÷X£’\ ÖÃDÁlf£ „2¥»rö:ZaÂA’¾„r[Ä,dXrD€-ØjÌΑ¿Aùf»SFoȯt,× ;&äç:ˆLžjù¯Ö•jå܈É6*ðx¿’»Ô¹.\`þ4GɵŠG©\‡aüàP®¯PþåúHIЫJ6 ü]¤dÌ=þ|ù{ÔÎFt¾ŽZó<]¾"Ï,t~®P”ó4†«<Þñn[Š\ÍÍ9ˈ!8g2JF®ÔR8k#UŠŒT™ÌæEªé¶÷£~r*X¾é_$<âS™™~5±K¦FÃ}s$sÉÍè’[ÔQ.i¸dªVÃP¾‹înæéy:¯0×WàQCÁy“ͲÜ`P)Åy*Læåy‚A5ª3Oì¢sµžìèàóõâ­ Ñ‚‡óBê!‚™ûŽÖôV”Û”F.hôÅ?bâ—S,£Ô7µ§<b¦D¡©Ç(×¥$ üM£'°¾©ÚL]îµBu°þ¼ÏvÜèGî¡Âëã׌ÿ„Ù.¹íS3ùJ‰²£ÝÓPi²fY©)šõÎXTlO  #teS™ÅØägmië‡ï=uë÷£·ß©[º åŸUÑ_PîF燘ÚEÝðo\çÝÎ:óÿ]îlŠCØô†Á®y~_þÐèqÉ.y³5˜:›ãéV—¼Í%¹†vÃRºä•j˜¹d—ì’C\òz—ì¦:Ê‹Ršë ¨Ž’b\ŸìUC“Ë&Œô‚»û·È¨D‘Eù>wgÄ”Æ +?RöÌ•©,qšÆhuˆ"7´ce°Ñ(m³Rß>u˜·NèþéúcA”•–©.ûñ’ï`,?V\³3³Ò’l®ÔE’ÞÍJâ£Õ©ÍõŒpݯŽP@ù©êÔ‰\Û ÙÌÜÃ/Æ@S÷vP3™aÖŸÁ@@Uaf $;¬äa† C­èKÁ:¡ùé)#2pÄ£]Ã&ûf¢¸ê©$ýh‚©ffr›„|“G{òð÷+AbóÛ.*Y³<œÀ²†™9ȧMÔ,[0)Ìîïz®Wì&?meo+õ8?œz<ÃýØ5ìÞ¬­+3å8+ç ÕŠþóK\:9™)ÿËaïË$éÚG|帖öÆíŽK /Î'E&Á/SÏBB °š±cø,.Í´£©€GôùQŒÐŸ©ÓW­éLËþ/iiº¯Ž¡ ÿkƒ[`ÄiÀÕÚˆWs;Á–kà(ÕZsmÛŽÂÐÓæí¸ö¥´ƒÓ¨†ç?P~®æïަ{šPìqw²Ný{ên©¢’mjPÈ_äîl»„ßî-ð†ì+½ÁØßyƒ#‹só<j„vS¢”r£”Å!LÝ¡ b„Šç0Ä ŒPƒÆæÆP÷–ÉVÕ²(ÿ‰ö)¿@yå)”§UÍXù/UqåY”_¢ü7Ês‰˜¥å­%gН.ÖFžòØî°²Ñ_cטóãÉmjÔC¦òÉZ‹hBØ ó·«Z"Û~S…_)±¿¶Dåyµ@ye5ÈçYfÈrC/Ïä$C§#N6”·æœcXé¹¾ü9ÅF¶»kÔQ/õæ‡ ÝÝ¢JÕjëî-). 9+.Ñ‚|op¬sjl‰ÏS+§î˜"³…ӌةá++ gUì/•Å+«”ôÓ 9ÃÍZ3Äbx™!ƒ%OKŠoQñø˜Ze c¨ñþRYmÄܾÐ[Psû1‘)@´H·[û·1?ÒE1¤n»G ©$ðy|¡¬ÆD…31¸ãhOn öN¹|Y!dêšqr¦Òk¡×P³”j =–•ÃùhS½ŽË9†œŽzÙ}ä\CÖòU.•Û©Æ{µèÏX3Óš-ǘϦÀyØÉö²Ýl³˜‹p%´ˆì ?ePƦ°½|>ÔñŽÝöóÇrS[`'oáËÄ"þàI(ãÕb%¶–â2låÕl6;çENÁJlÄj5?®ÁÎé'Ù¨c|'ì†c¬NÍ›[Å2Ø.J¶B3;φ®a{Å ½°FÜpóv¸é ð-‚âÎ:v†í•°Œmfk”ù_ļÙJ¶•µŠó|3ßÎ÷ñ_¬Ç¥ìœ¸ç˜X‰÷5ós¬…MØÏÖ³'—B54²8)N*v o„ݼY”‰ÖÊ6Š¥âŒ¨d³¡.­Ã<ùzØ á ¤Tòs|+_ÏÄU×eWŠíª£¸ã=eL3Ž—Aý©%¦ìâìžÑë²¾W_;Àå¾eð°»î½ÿ¡Ñ?1f¬/ðÔ3Ï•CTA ÔºŸFÒô =D?¥‡i¦GèQzŒ§ŸÑÏ)—ž <Ê'¡*$/¥q¤¬<ùÈOÅô$(H!*¡§¨”ž¦ ô ý‚~IÏÒs4‘ž**š4h PÐT i@•@U@ÓfUÕÍš4¨hÐ\ : y@/½4hÐB —€-Z>±Nã[V_ƒtõ‚aîØ‹³@ØÕ°‰G®þÕüe<ñmozart-1.4.0.20080704/share/lib/oze.sh0000775000000000000000000000142307336252401015441 0ustar rootroot#!/bin/sh : ${BUILDTOP=../..} : ${SRCDIR=.} : ${OZPLATFORM=`$SRCDIR/../bin/ozplatform`} : ${OZPREFIX=/usr/local/oz} : ${OZINIT="$BUILDTOP/share/lib/Init.ozf"} case $OZPLATFORM in win32*) exe=emulator.dll ;; *) exe=emulator.exe ;; esac if test -z "$OZEMULATOR" then for d in \ $BUILDTOP/platform/emulator \ $OZPREFIX/platform/$OZPLATFORM do if test -x $d/$exe then OZEMULATOR=$d/$exe break fi done fi if test "x$OZMAKE_VERBOSE" = xyes then echo "Using OZEMULATOR: $OZEMULATOR" fi url=$1 shift case $OZPLATFORM in win32*) OZEMULATOR=`cygpath -w $OZEMULATOR` OZINIT=`cygpath -w $OZINIT` export OZEMULATOR OZINIT exec $BUILDTOP/platform/mswindows/ozengine $url "$@" ;; *) exec $OZEMULATOR -init $OZINIT -u $url -- "$@" ;; esac mozart-1.4.0.20080704/share/lib/Makefile.in0000664000000000000000000003413411030716023016346 0ustar rootrootBUILDTOP = @BUILDTOP@ BUILDDIR = $(BUILDTOP)/share/lib BUILDEMU = $(BUILDTOP)/platform/emulator VPATH = @srcdir@ SRCDIR = @srcdir@ HOMEURL = @HOMEURL@ BOOTURL = x-oz://boot SYSTEMURL = x-oz://system PLATFORM = @PLATFORM@ PREFIX = @prefix@ OZPREFIX = @prefix@ OZBIN = $(PREFIX)/bin OZLIB = $(PREFIX)/share IMAGESDIR = $(OZLIB)/images SHELL = /bin/sh LN_S = @LN_S@ M4 = @M4@ PERL = @PERL@ THEGZIP = @THEGZIP@ INSTALL = @INSTALL@ INSTALL_FILE = $(INSTALL) -m 444 INSTALL_BIN = $(INSTALL) -m 555 INSTALL_DIR = @INSTALL_DIR@ OZENGINE = @OZENGINE@ COMPRESSLEVEL = @oz_picklecompression@ COMPRESSFLAGS = -z $(COMPRESSLEVEL) EXE_EXT = @EXE_EXT@ DENYS_EVENTS = @DENYS_EVENTS@ ifeq ($(DENYS_EVENTS),yes) DENYS_FLAGS = -DDENYS_EVENTS DENYS_SPSRCS = EventSIGCHLD Timer DENYS_DPSRCS = VirtualSite Perdio else DENYS_FLAGS = DENYS_SPSRCS = DENYS_DPSRCS = endif SITE_PROPERTY = @SITE_PROPERTY@ ifeq ($(SITE_PROPERTY),yes) SITE_PROPERTY_FLAGS = -DSITE_PROPERTY SITE_PROPERTY_SRCS = SiteProperty else SITE_PROPERTY_FLAGS = SITE_PROPERTY_SRCS = endif OZCFLAGS = $(COMPRESSFLAGS) $(DENYS_FLAGS) $(SITE_PROPERTY_FLAGS) OZC = @OZC@ OZLOADSEP = @OZLOADSEP@ OZLOADWIN = @OZLOADWIN@ OZLOADCACHE = @OZLOADCACHE@ CYGPATH = $(SRCDIR)/cygpath.sh CYG_SRCDIR = $(shell $(CYGPATH) $(SRCDIR)) CYG_BUILDDIR = $(shell $(CYGPATH) $(BUILDDIR)) CYG_PREFIX = $(shell $(CYGPATH) $(PREFIX)) CYG_BUILDEMU = $(shell $(CYGPATH) $(BUILDEMU)) ifeq ($(OZLOADCACHE),) CYG_OZCACHE = else CYG_OZCACHE = %cache=$(shell $(CYGPATH) $(OZLOADCACHE))/cache endif COMPILENOMODE = $(OZC) $(OZCFLAGS) -l Base=$(CYG_SRCDIR)/Base.ozf -b $(CYG_BUILDDIR)/ COMPILE = $(COMPILENOMODE) -c COMPILEEXEC = $(COMPILENOMODE) -x @OZEXECFILE@ OZLFLAGS = $(COMPRESSFLAGS) OZL = @OZL@ P2T = $(SRCDIR)/p2t.sh T2P = $(SRCDIR)/t2p.sh # exports export BUILDTOP export SRCDIR export OZPREFIX export OZLIB export OZPATH = .$(OZLOADSEP)$(shell $(CYGPATH) $(SRCDIR)) export OZ_PI = 1 export OZ_LIB = $(OZLIB) export OZ_LOAD = $(subst %,$(OZLOADSEP),root=.%prefix=$(CYG_SRCDIR)/=$(CYG_BUILDDIR)/%cache=$(CYG_PREFIX)/cache%prefix=/=/$(OZLOADWIN)$(CYG_OZCACHE)%=) export OZMAKE_COPYALWAYS = no export OZMAKE_VERBOSE = no SPSRC = Error ErrorFormatters Finalize Service $(DENYS_SPSRCS) OPSRC = Open ZlibIO APSRC = Application CPSRC1 = Search FD FS Combinator RecordC CPSRC2 = Schedule ParSearch ParWorker ParLogging DPSRC = Connection Discovery Remote RemoteServer Fault URL DPStatistics \ DP DPDefaults DPErrorFormatters DPService Site $(DENYS_DPSRCS) WPSRC = Tk TkTools Tix SUPPSRC = Type Narrator Listener ErrorListener DefaultURL ObjectSupport MACSRC = Macro BackquoteMacro LoopMacro RUNFUNCTORS1 = \ $(SPSRC:%=%.ozf) \ $(OPSRC:%=%.ozf) \ $(APSRC:%=%.ozf) \ $(CPSRC1:%=%.ozf) \ $(MACSRC:%=%.ozf) RUNFUNCTORS = $(RUNFUNCTORS1) Init.ozf FUNCTORS1 = \ $(RUNFUNCTORS1) \ $(DPSRC:%=%.ozf) \ $(WPSRC:%=%.ozf) \ $(SUPPSRC:%=%.ozf) \ $(CPSRC2:%=%.ozf) \ Compiler.ozf FUNCTORS = $(FUNCTORS1) Init.ozf SYSLETS0 = ozc ozl SYSLETS = $(SYSLETS0:%=%$(EXE_EXT)) .PHONY: all all: $(FUNCTORS) $(SYSLETS) #--------------------------------------------------------------------- # Automatic Makefile update #--------------------------------------------------------------------- Makefile: Makefile.in ../config.status cd .. && ./config.status support/DefaultURL.oz: support/DefaultURL.oz.in ../config.status cd .. && ./config.status ../config.status: ../configure cd .. && ./config.status --recheck #--------------------------------------------------------------------- # Init #--------------------------------------------------------------------- INITSRC0 = Init Resolve Prop Module ModuleAbstractions UrlExpand INITSRC = $(INITSRC0:%=init/%.oz) Init.ozf: URL.ozf DefaultURL.ozf $(INITSRC) $(COMPILE) init/Init.oz -o Init.ozf #--------------------------------------------------------------------- # Base #--------------------------------------------------------------------- .PHONY: new-base BASESRC1 = \ Record Unit Tuple Atom Name Procedure \ Int Float Number Bool List Chunk \ Literal Value Cell Lock Char String \ VirtualString Object Loop Port \ Time Thread Array Dictionary WeakDictionary \ Exception Functor BitArray BitString \ ByteString ForeignPointer $(SITE_PROPERTY_SRCS) Base BASESRC = $(BASESRC1:%=base/%.oz) new-base: $(BASESRC) $(OZC) $(OZCFLAGS) -c base/Base.oz -o $(SRCDIR)/Base.ozf #--------------------------------------------------------------------- # Remaining functors #--------------------------------------------------------------------- $(FUNCTORS): Base.ozf %.ozf: sp/%.oz Base.ozf $(COMPILE) $(shell $(CYGPATH) "$<") -o $@ %.ozf: op/%.oz Base.ozf $(COMPILE) $(shell $(CYGPATH) "$<") -o $@ %.ozf: ap/%.oz Base.ozf $(COMPILE) $(shell $(CYGPATH) "$<") -o $@ Search.ozf: cp/Search.oz Base.ozf $(COMPILE) $(shell $(CYGPATH) "$<") -o $@ CpSupport.ozf: cp/CpSupport.oz Base.ozf $(COMPILE) $(shell $(CYGPATH) "$<") -o $@ %.ozf: cp/%.oz CpSupport.ozf Base.ozf $(COMPILE) $(shell $(CYGPATH) "$<") -o $@ PARSEARCHFUNCTORS = \ ParBarChart.ozf ParFindLimit.ozf ParGetColor.ozf \ ParLogging.ozf ParManager.ozf ParProcess.ozf \ ParSearch.ozf ParServer.ozf ParStatistics.ozf \ ParTraceSpace.ozf ParWorker.ozf ParBarChart.ozf: ParGetColor.ozf ParFindLimit.ozf ParServer.ozf ParLogging.ozf: ParStatistics.ozf ParStatistics.ozf: ParBarChart.ozf ParManager.ozf: ParLogging.ozf ParSearchTmp.ozf: cp/par/ParSearch.oz \ ParServer.ozf $(COMPILE) $(shell $(CYGPATH) "$<") -o $@ ParWorkerTmp.ozf: cp/par/ParWorker.oz \ ParLogging.ozf ParTraceSpace.ozf ParServer.ozf $(COMPILE) $(shell $(CYGPATH) "$<") -o $@ ParLoggingTmp.ozf: cp/par/ParLogging.oz $(COMPILE) $(shell $(CYGPATH) "$<") -o $@ ParWorker.ozf: ParWorkerTmp.ozf ozl$(EXE_EXT) $(OZENGINE) ozl$(EXE_EXT) $(COMPRESSFLAGS) $< -o $@ ParLogging.ozf: ParLoggingTmp.ozf ParStatistics.ozf ozl$(EXE_EXT) $(OZENGINE) ozl$(EXE_EXT) $(COMPRESSFLAGS) $< -o $@ ParSearch.ozf: ParSearchTmp.ozf ParProcess.ozf ParManager.ozf ozl$(EXE_EXT) $(OZENGINE) ozl$(EXE_EXT) $(COMPRESSFLAGS) $< -o $@ %.ozf: cp/par/%.oz Base.ozf $(COMPILE) $(shell $(CYGPATH) "$<") -o $@ %.ozf: dp/%.oz Base.ozf $(COMPILE) $(shell $(CYGPATH) "$<") -o $@ %.ozf: wp/%.oz Base.ozf $(COMPILE) $(shell $(CYGPATH) "$<") -o $@ %.ozf: %.oz Base.ozf $(COMPILE) $(shell $(CYGPATH) "$<") -o $@ %.ozf: compiler/%.oz Base.ozf $(COMPILE) $(shell $(CYGPATH) "$<") -o $@ %.ozf: support/%.oz Base.ozf $(COMPILE) $(shell $(CYGPATH) "$<") -o $@ # support dependencies DefaultURL.ozf: URL.ozf # op dependencies Open.ozf: op/HtmlTable.oz # wp dependencies Tk.ozf: wp/Tk.oz wp/TkInit.oz wp/TkOptions.oz $(COMPILE) --norecordhoist $(shell $(CYGPATH) "$<") -o $@ TkTools.ozf: DefaultURL.ozf # compiler dependencies COMPILERSRC1 = \ CompilerClass.oz PrintName.oz ParseOz.oz FormatStrings.oz \ CheckTupleSyntax.oz GroundZip.oz Builtins.oz Core.oz Annotate.oz \ StaticAnalysis.oz POTypes.oz PatternMatching.oz CodeGen.oz \ CodeStore.oz CodeEmitter.oz BindingAnalysis.oz TupleSyntax.oz \ Unnester.oz UnnestFD.oz Assembler.oz Interface.oz Abstractions.oz \ Errors.oz RunTime.oz ForLoop.oz COMPILERSRCEXTRA = compiler-Builtins.oz COMPILERSRCNOVER = \ $(COMPILERSRC1:%=compiler/%) $(COMPILERSRCEXTRA) # NOTE: update this list also in platform/emulator/Makefile.in BIMODSPECS = \ Array Atom BitArray Bool Cell Char Chunk Class \ Dictionary Exception Float ForeignPointer Int List Literal \ Lock Name Number Object Port Procedure Record \ String Thread Time Tuple Unit Value VirtualString \ BitString ByteString Word InterFault \ WeakDictionary Alice $(SITE_PROPERTY_SRCS) EMUSRCDIR=$(SRCDIR)/../../platform/emulator BIDECL=$(EMUSRCDIR)/bidecl.perl BIMODFILES = $(BIMODSPECS:%=$(EMUSRCDIR)/mod%.spec) first: $(COMPILERSRCEXTRA) compiler-Builtins.oz: $(BIMODFILES) $(PERL) $(BIDECL) -srcdir $(EMUSRCDIR) -builtins $(BIMODSPECS) > $@ FUNFUNCTORS = PrintName.ozf Builtins.ozf Unnester.ozf Core.ozf \ StaticAnalysis.ozf CodeGen.ozf CodeStore.ozf CodeEmitter.ozf \ Assembler.ozf Main.ozf RunTime.ozf Annotate.ozf GroundZip.ozf \ ForLoop.ozf PrintName.ozf: compiler/PrintName.oz GroundZip.ozf: compiler/GroundZip.oz Builtins.ozf: compiler/Builtins.oz GroundZip.ozf compiler-Builtins.oz Unnester.ozf: compiler/Unnester.oz compiler/TupleSyntax.oz \ compiler/BindingAnalysis.oz compiler/UnnestFD.oz FD.ozf Annotate.ozf: compiler/Annotate.oz Core.ozf: compiler/Core.oz Annotate.ozf StaticAnalysis.ozf: compiler/StaticAnalysis.oz compiler/POTypes.oz \ Search.ozf FD.ozf FS.ozf $(COMPILE) compiler/StaticAnalysis.oz -o $@ CodeGen.ozf: compiler/CodeGen.oz compiler/PatternMatching.oz CodeStore.ozf: compiler/CodeStore.oz CodeEmitter.ozf: compiler/CodeEmitter.oz Assembler.ozf: compiler/Assembler.oz Main.ozf: compiler/Main.oz compiler/FormatStrings.oz \ compiler/CheckTupleSyntax.oz compiler/ParseOz.oz \ compiler/CompilerClass.oz compiler/Interface.oz \ compiler/Abstractions.oz compiler/Errors.oz \ Base.ozf RunTime.ozf: compiler/RunTime.oz Base.ozf $(COMPILE) $(shell $(CYGPATH) "$<") -o $@ Compiler.ozf: $(FUNFUNCTORS) ozl$(EXE_EXT) $(OZENGINE) ozl$(EXE_EXT) $(COMPRESSFLAGS) Main.ozf -o Compiler.ozf #--------------------------------------------------------------------- # Syslets #--------------------------------------------------------------------- $(SYSLETS): $(RUNFUNCTORS) ozc$(EXE_EXT): Base.ozf ozbatch/Compile.oz $(COMPILEEXEC) ozbatch/Compile.oz -o $@ ozl$(EXE_EXT): Base.ozf DefaultURL.ozf \ linker/Print.oz linker/Main.oz linker/Link.oz $(COMPILEEXEC) linker/Main.oz -o $@ #--------------------------------------------------------------------- # Installation #--------------------------------------------------------------------- .PHONY: install install-main install-images install-cache LIBFUNCTORS = \ $(FUNCTORS:%=$(OZLIB)/%) BINFILES = \ $(SYSLETS:%=$(OZBIN)/%) BOOTINITTXT = boot-init.ozt BOOTOZCTXT = boot-ozc.ozt install: install-main install-images install-cache install-main: all $(OZBIN) $(BINFILES) NEWCACHEDIR = $(PREFIX)/cache/x-oz/system IMAGES1 = mini-dec.xbm mini-inc.xbm IMAGES = $(IMAGES1:%=$(IMAGESDIR)/%) NEWIMAGESDIR = $(NEWCACHEDIR)/images NEWIMAGES = $(IMAGES1:%=$(NEWIMAGESDIR)/%) install-images: #install-images: \ # $(IMAGESDIR) $(IMAGES) HOMECACHE = @HOMECACHE@ CACHEDIR = $(PREFIX)/cache/$(HOMECACHE) NEWFUNCTORS = $(FUNCTORS1:%=$(NEWCACHEDIR)/%) NEWINIT = $(OZLIB)/Init.ozf install-cache: $(NEWCACHEDIR) $(NEWFUNCTORS) \ $(OZLIB) $(NEWINIT) \ $(NEWIMAGESDIR) $(NEWIMAGES) $(NEWCACHEDIR) $(NEWIMAGESDIR): $(INSTALL_DIR) $@ $(NEWCACHEDIR)/%: % $(INSTALL_FILE) $< $@ $(CACHEDIR): $(INSTALL_DIR) $(CACHEDIR) -rm -rf $(CACHEDIR) $(LN_S) ../../.. $(CACHEDIR) $(OZLIB) $(IMAGESDIR) $(OZBIN): $(INSTALL_DIR) $@ $(OZLIB)/%.ozf: %.ozf $(INSTALL_FILE) $< $@ $(IMAGESDIR)/%: images/% $(INSTALL_FILE) $< $@ $(OZBIN)/%: % $(INSTALL_BIN) $< $@ $(OZLIB)/boot-%: boot-% $(INSTALL_FILE) $< $@ #--------------------------------------------------------------------- # Cleaning up #--------------------------------------------------------------------- .PHONY: clean veryclean distclean CLEANFILES = \ $(COMPILERSRCEXTRA) \ CpSupport.ozf ParWorkerTmp.ozf ParLoggingTmp.ozf ParSearchTmp.ozf \ $(FUNCTORS) $(FUNFUNCTORS) $(PARSEARCHFUNCTORS) \ $(SYSLETS) $(BOOTINITTXT) $(BOOTOZCTXT) boot-init boot-ozc clean: -rm -f $(CLEANFILES) veryclean: clean distclean: veryclean @echo To really make distclean, please use \"cd ..\; make distclean\". #--------------------------------------------------------------------- # Bootstrapping #--------------------------------------------------------------------- .PHONY: bootstrap check # use the boot compiler to create the functors bootstrap: $(MAKE) boot-unzip boot-init boot-ozc boot-all boot-all: $(MAKE) all \ OZC=$(SRCDIR)/boot-ozc.sh \ OZENGINE=$(SRCDIR)/oze.sh \ OZINIT=Init.ozf \ OZ_LIB=. \ OZ_LOAD="$(subst %,$(OZLOADSEP),root=.%prefix=$(CYG_SRCDIR)/=$(CYG_BUILDDIR)/%prefix=/=/%prefix=./=./$(OZLOADWIN)%all=.%all=$(CYG_BUILDEMU)/%=)" boot--%: $(MAKE) $* \ OZC=$(SRCDIR)/boot-ozc.sh \ OZENGINE=$(SRCDIR)/oze.sh \ OZINIT=Init.ozf \ OZ_LIB=. \ OZ_LOAD="$(subst %,$(OZLOADSEP),root=.%prefix=$(CYG_SRCDIR)/=$(CYG_BUILDDIR)/%prefix=/=/%prefix=./=./$(OZLOADWIN)%all=.%all=$(CYG_BUILDEMU)/%=)" check: #--------------------------------------------------------------------- # Boot compiler #--------------------------------------------------------------------- # The boot compiler is simply the ordinary compiler with all functors # packaged together using the linker. There is also a a boot init # file which is just the ordinary Init functor. Both are provided in # the text-pickle format from which the boot functors are obtained # using text2pickle. #--------------------------------------------------------------------- .PHONY: new-boot $(BOOTINITTXT): $(MAKE) boot-init.linked && \ $(P2T) < boot-init.linked > $@ && \ rm -f boot-init.linked $(BOOTOZCTXT): $(MAKE) boot-ozc.linked && \ $(P2T) < boot-ozc.linked > $@ && \ rm -f boot-ozc.linked new-boot: -rm -f $(BOOTINITTXT) $(BOOTOZCTXT) $(MAKE) $(BOOTINITTXT) $(BOOTOZCTXT) $(THEGZIP) < $(BOOTINITTXT) > $(SRCDIR)/$(BOOTINITTXT).gz $(THEGZIP) < $(BOOTOZCTXT) > $(SRCDIR)/$(BOOTOZCTXT).gz boot-unzip: rm -f $(BOOTINITTXT) $(BOOTOZCTXT) $(THEGZIP) -d < $(SRCDIR)/$(BOOTINITTXT).gz > $(BOOTINITTXT) $(THEGZIP) -d < $(SRCDIR)/$(BOOTOZCTXT).gz > $(BOOTOZCTXT) BOOTINITTXTFROM = $(BOOTINITTXT) BOOTOZCTXTFROM = $(BOOTOZCTXT) boot-ozc: $(BOOTOZCTXTFROM) $(T2P) -o $@ < $< \ || (rm -f $@; exit 1) boot-init: $(BOOTINITTXTFROM) $(T2P) -o $@ < $< \ || (rm -f $@; exit 1) boot-ozc.linked: ozc$(EXE_EXT) ozl$(EXE_EXT) Compiler.ozf $(SUPPSRC:%=%.ozf) OZINIT=Init.ozf OZ_LOAD="$(subst %,$(OZLOADSEP),root=.%prefix=/=/%prefix=./=./$(OZLOADWIN)%prefix=x-oz://system/=./%pattern=x-oz://system/?{x}=./?{x}.ozf%prefix=x-oz://system/=../tools/%pattern=x-oz://system/?{x}=../tools/?{x}.ozf%prefix=x-oz://boot/=$(CYG_BUILDEMU)/%=)" $(SRCDIR)/oze.sh ozl$(EXE_EXT) --verbose --include=x-oz://system --exclude=x-oz://boot,x-oz://system/Module,x-oz://system/Property,x-oz://system/System,x-oz://system/Space,x-oz://system/OS,x-oz://system/Resolve,x-oz://system/Pickle,x-oz://system/Gump,x-oz://system/ProductionTemplates $< -o $@ boot-init.linked: Init.ozf cp $< $@ # no suffixes needed .SUFFIXES: .PHONY: depend depend: mozart-1.4.0.20080704/share/lib/boot-ozc.sh0000775000000000000000000000203307336252401016376 0ustar rootroot#! /bin/sh # : ${BUILDTOP=../..} : ${SRCDIR=.} : ${SRCTOP=$SRCDIR/../..} : ${OZPLATFORM=`$SRCTOP/share/bin/ozplatform`} : ${OZPREFIX=/usr/local/oz} : ${OZBOOTINIT="$BUILDTOP/share/lib/boot-init"} : ${OZBOOTOZC="$BUILDTOP/share/lib/boot-ozc"} case $OZPLATFORM in win32*) exe=emulator.dll ;; *) exe=emulator.exe ;; esac if test -z "$OZEMULATOR" then for d in \ $BUILDTOP/platform/emulator \ $OZPREFIX/platform/$OZPLATFORM do if test -x $d/$exe then OZEMULATOR=$d/$exe break fi done fi if test -z "$OZEMULATOR" then echo Fatal error: $exe not found exit 1 fi if test "x$OZMAKE_VERBOSE" = xyes then echo "Using OZEMULATOR: $OZEMULATOR" echo "Using OZBOOTINIT: $OZBOOTINIT" echo "Using OZBOOTOZC: $OZBOOTOZC" fi case $OZPLATFORM in win32*) OZEMULATOR=`cygpath -w $OZEMULATOR` OZINIT=`cygpath -w $OZBOOTINIT` export OZEMULATOR OZINIT exec $BUILDTOP/platform/mswindows/ozengine `cygpath -w $OZBOOTOZC` "$@" ;; *) exec $OZEMULATOR -init $OZBOOTINIT -u $OZBOOTOZC -- "$@" ;; esac mozart-1.4.0.20080704/share/lib/cygpath.sh0000775000000000000000000000055310032533174016302 0ustar rootroot#!/bin/sh case `uname -s` in CYGWIN*) pathname=`cygpath -w "$1" | sed 's|\\\\|/|g'` case "$pathname" in ?:* ) device=`expr substr "$pathname" 1 1 | tr '[:upper:]' '[:lower:]'` pathname=`expr "$pathname" : '.\(:.*\)$'` pathname="$device$pathname" echo "$pathname" ;; *) echo "$pathname" ;; esac ;; *) echo "$1" ;; esac mozart-1.4.0.20080704/share/lib/ozbatch/0000775000000000000000000000000011033376117015737 5ustar rootrootmozart-1.4.0.20080704/share/lib/ozbatch/Compile.oz0000664000000000000000000004407111003322211017666 0ustar rootroot%%% %%% Author: %%% Leif Kornstaedt %%% %%% Copyright: %%% Leif Kornstaedt, 1998-2001 %%% %%% Last change: %%% $Date: 2008-04-22 10:40:41 +0200 (Tue, 22 Apr 2008) $ by $Author: raph $ %%% $Revision: 16946 $ %%% %%% This file is part of Mozart, an implementation of Oz 3: %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Module Property(get put) System(printInfo printError) Error(messageToVirtualString) OS(putEnv getEnv system) Open(file) Pickle(saveWithHeader) Compiler(engine interface) Application(getArgs exit) prepare UsageError = 'command line option error' BatchCompilationError = 'batch compilation error' OptSpecs = record(%% mode in which to run mode(single type: atom(help core scode ecode execute dump executable) default: execute) help(char: [&h &?] alias: mode#help) core(char: &E alias: mode#core) scode(char: &S alias: mode#scode) ecode(char: &s alias: mode#ecode) execute(char: &e alias: mode#execute) dump(char: &c alias: mode#dump) executable(char: &x alias: mode#executable) %% options valid in all modes verbose(rightmost char: &v type: bool default: auto) quiet(rightmost char: &q alias: verbose#false) makedepend(rightmost char: &M default: false) %% options for individual modes outputfile(single char: &o type: string default: unit) target(rightmost type: atom(unix windows) default: unit) unix(alias: target#unix) windows(alias: target#windows) execheader(single type: string validate: alt(when(disj(execpath execfile execwrapper) false))) execpath(single type: string validate: alt(when(disj(execheader execfile execwrapper) false))) execfile(single type: string validate: alt(when(disj(execheader execpath execwrapper) false))) execwrapper(single type: string validate: alt(when(disj(execheader execpath execfile) false))) compress(rightmost char: &z type: int(min: 0 max: 9) default: 0) %% %% between all of the following, order is important %% %% preparing the compiler state 'define'(char: &D type: list(atom)) undefine(char: &U type: list(atom)) environment(char: &l type: list(string)) incdir(char: &I type: string) include(type: string) %% compiler switches compilerpasses(type: bool) showinsert(type: bool) echoqueries(type: bool) showdeclares(type: bool) watchdog(type: bool) warnredecl(type: bool) warnshadow(type: bool) warnunused(type: bool) warnunusedformals(type: bool) warnforward(type: bool) warnopt(type: bool) expression(type: bool) allowdeprecated(type: bool) gump(type: bool) gumpscannerbestfit(type: bool) gumpscannercaseless(type: bool) gumpscannernowarn(type: bool) gumpscannerbackup(type: bool) gumpscannerperfreport(type: bool) gumpscannerstatistics(type: bool) gumpparseroutputsimplified(type: bool) gumpparserverbose(type: bool) staticanalysis(type: bool) realcore(type: bool) debugvalue(type: bool) debugtype(type: bool) recordhoist(type: bool) profile(char: &p type: bool) controlflowinfo(type: bool) staticvarnames(type: bool) debuginfo(char: &g alias: [controlflowinfo#true staticvarnames#true]) dynamicvarnames(type: bool) %% compiler options maxerrors(type: int) baseurl(char: &b type: string) gumpdirectory(single type: string default: unit)) Usage = 'You have to choose one of the following modes of operation:\n'# '-h, -?, --help Output usage information and exit.\n'# '-e, --execute, --mode=execute Compile and execute a statement.\n'# ' This is the default mode.\n'# '-c, --dump, --mode=dump Compile and evaluate an expression,\n'# ' pickling the result\n'# ' (file extension: .ozf).\n'# '-x, --executable, --mode=executable\n'# ' Compile and evaluate an expression,\n'# ' making result executable\n'# ' (file extension: none).\n'# '-E, --core, --mode=core Compile a statement to core language\n'# ' (file extension: .ozi).\n'# '-S, --scode, --mode=scode Compile a statement to assembly code\n'# ' (file extension: .ozm).\n'# '-s, --ecode, --mode=ecode Compile an expression to assembly code\n'# ' (file extension: .ozm).\n'# '\n'# 'Additionally, you may specify the following options:\n'# '-v, --verbose Display all compiler messages.\n'# '-q, --quiet Inhibit compiler messages\n'# ' unless an error is encountered.\n'# '-M, --makedepend Instead of executing, write a list\n'# ' of dependencies to stdout.\n'# '-o FILE, --outputfile=FILE Write output to FILE (`-\' for stdout).\n'# '--execheader=STR Use header STR for executables\n'# ' (Unix default:\n'# ' "#!/bin/sh\\nexec ozengine $0 "$@"\\n").\n'# '--execpath=STR Use above header, with ozengine\n'# ' replaced by STR.\n'# '--execfile=FILE Use contents of FILE as header\n'# ' (Windows default:\n'# ' /bin/ozwrapper.bin).\n'# '--execwrapper=FILE Use above header, with ozwrapper.bin\n'# ' replaced by STR.\n'# '--target=(unix|windows) when creating an executable functor, do\n'# ' it for this platform (default current).\n'# '-z N, --compress=N Use compression level N for pickles.\n'# '-D NAME, --define=NAME Define macro name NAME.\n'# '-U NAME, --undefine=NAME Undefine macro name NAME.\n'# '-l FNCS, --environment=FNCS Make functors FNCS (a comma-separated\n'# ' pair list VAR=URL) available in the\n'# ' environment.\n'# '-I DIR, --incdir=DIR Add DIR to the head of OZPATH.\n'# '--include=FILE Compile and execute the statement in FILE\n'# ' before processing the remaining options.\n'# '\n'# 'The following compiler switches have the described effects when set:\n'# %% Note that the remaining options are not documented here on purpose. '--(no)compilerpasses Show compiler passes.\n'# '--(no)warnredecl Warn about top-level redeclarations.\n'# '--(no)warnshadow Warn about all redeclarations.\n'# '--(no)warnunused Warn about unused variables.\n'# '--(no)warnunusedformals Warn about unused variables and formals.\n'# '--(no)warnforward Warn about oo forward declarations.\n'# '--(no)warnopt Warn about missed optimizations.\n'# '--(no)expression Expect expressions, not statements.\n'# '--(no)allowdeprecated Allow use of deprecated syntax.\n'# '--(no)gump Allow Gump definitions.\n'# '--(no)staticanalysis Run static analysis.\n'# '--(no)realcore Output the real non-fancy core syntax.\n'# '--(no)debugvalue Annotate variable values in core output.\n'# '--(no)debugtype Annotate variable types in core output.\n'# '-p, --(no)profile Include profiling information.\n'# '--(no)controlflowinfo Include control flow information.\n'# '--(no)staticvarnames Include static variable name information.\n'# '-g, --(no)debuginfo The two switches above.\n'# '--(no)dynamicvarnames Dynamically assign variable names.\n'# '\n'# 'The following compiler options can be set:\n'# '--maxerrors=N Limit the number of errors reported to N.\n'# '--baseurl=STRING Set the base URL to resolve imports of\n'# ' computed functors to STRING.\n'# '--gumpdirectory=STRING Set the directory where Gump will create\n'# ' its output files to STRING.\n' define Platform = {Property.get 'platform.os'} fun {MakeExecHeader Path} '#!/bin/sh\nexec '#Path#' "$0" "$@"\n' end fun {MakeExecFile File} {Property.get 'oz.home'}#'/bin/'#File end DefaultExecWindows = file({MakeExecFile 'ozwrapper.bin'}) DefaultExecUnix = string({MakeExecHeader 'ozengine'}) DefaultExec = case Platform of win32 then DefaultExecWindows else DefaultExecUnix end local fun {IsIDChar C} {Char.isAlNum C} orelse C == &_ end fun {IsQuotedVariable S} case S of C1|Cr then if C1 == &` andthen Cr == nil then true elseif C1 == 0 then false else {IsQuotedVariable Cr} end [] nil then false end end fun {IsPrintName X} {IsAtom X} andthen local S = {Atom.toString X} in case S of C|Cr then case C of &` then {IsQuotedVariable Cr} else {Char.isUpper C} andthen {All Cr IsIDChar} end [] nil then false end end end ModMan = {New Module.manager init()} in proc {IncludeFunctor S Compiler} Var URL VarAtom Export in {String.token S &= ?Var ?URL} VarAtom = {String.toAtom Var} Export = case URL of nil then {ModMan link(name: Var $)} else {ModMan link(url: URL $)} end if {IsPrintName VarAtom} then {Compiler enqueue(mergeEnv(env(VarAtom: Export)))} else {Report error(kind: UsageError msg: 'illegal variable identifier `'#Var#'\' specified' items: [hint(l: 'Hint' m: ('Use --help to obtain '# 'usage information'))])} end {Compiler enqueue(mergeEnv({Record.filterInd Export fun {$ P _} {IsPrintName P} end}))} end end local fun {NotIsDirSep C} C \= &/ andthen (Platform \= win32 orelse C \= &\\) end fun {ChangeExtensionSub S NewExt} case S of ".oz" then NewExt elseof ".ozg" then NewExt elseof C|Cr then C|{ChangeExtensionSub Cr NewExt} [] nil then NewExt end end in fun {ChangeExtension S NewExt} {ChangeExtensionSub {Reverse {List.takeWhile {Reverse S} NotIsDirSep}} NewExt} end fun {Dirname S} case S of stdout then unit else {Reverse {List.dropWhile {Reverse S} NotIsDirSep}} end end end proc {ReadFile File ?VS} F in F = {New Open.file init(name: File flags: [read])} {F read(list: ?VS size: all)} {F close()} end proc {Report E} {System.printError {Error.messageToVirtualString E}} raise error end end in try OptRec BatchCompiler UI IncDir FileNames in try OptRec = {Application.getArgs OptSpecs} catch error(ap(usage VS) ...) then {Report error(kind: UsageError msg: VS items: [hint(l: 'Hint' m: ('Use --help to obtain '# 'usage information'))])} end case OptRec.mode of help then X in X = {Property.get 'application.url'} {System.printInfo 'Usage: '#X#' { [option] | [file] }\n'#Usage} raise success end else skip end BatchCompiler = {New Compiler.engine init()} UI = {New Compiler.interface init(BatchCompiler OptRec.verbose)} {BatchCompiler enqueue(setSwitch(showdeclares false))} {BatchCompiler enqueue(setSwitch(threadedqueries false))} IncDir = {NewCell nil} FileNames = {Filter OptRec.1 fun {$ Y} case Y of Opt#X then case Opt of 'define' then {ForAll X proc {$ D} {BatchCompiler enqueue(macroDefine(D))} end} [] undefine then {ForAll X proc {$ D} {BatchCompiler enqueue(macroUndef(D))} end} [] environment then {ForAll X proc {$ S} {IncludeFunctor S BatchCompiler} end} [] incdir then {Assign IncDir X|{Access IncDir}} [] include then {BatchCompiler enqueue(pushSwitches())} {BatchCompiler enqueue(setSwitch(feedtoemulator true))} {BatchCompiler enqueue(feedFile(X return))} {BatchCompiler enqueue(popSwitches())} {UI sync()} if {UI hasErrors($)} then raise error end end [] maxerrors then {BatchCompiler enqueue(setMaxNumberOfErrors(X))} [] baseurl then {BatchCompiler enqueue(setBaseURL(X))} elseof SwitchName then {BatchCompiler enqueue(setSwitch(SwitchName X))} end false else true end end} {OS.putEnv 'OZPATH' {FoldL {Access IncDir} fun {$ In S} {Append S case Platform of win32 then &; else &: end|In} end case {OS.getEnv 'OZPATH'} of false then "." elseof S then S end}} if FileNames == nil then {Report error(kind: UsageError msg: 'no input files given' items: [hint(l: 'Hint' m: ('Use --help to obtain '# 'usage information'))])} elseif OptRec.outputfile \= "-" andthen OptRec.outputfile \= unit andthen {Length FileNames} > 1 then {Report error(kind: UsageError msg: ('only one input file allowed when '# 'an output file name is given'))} else {ForAll FileNames proc {$ Arg} OFN GumpDir R in {UI reset()} case OptRec.outputfile of unit then case OptRec.mode of core then OFN = {ChangeExtension Arg ".ozi"} [] scode then OFN = {ChangeExtension Arg ".ozm"} [] ecode then OFN = {ChangeExtension Arg ".ozm"} [] execute then if OptRec.makedepend then {Report error(kind: UsageError msg: ('--makedepend with --execute '# 'needs an --outputfile'))} end OFN = unit [] dump then OFN = {ChangeExtension Arg ".ozf"} [] executable then ExeExt in ExeExt = case OptRec.target of unix then "" [] windows then ".exe" elsecase Platform of win32 then ".exe" else "" end OFN = {ChangeExtension Arg ExeExt} end elseof "-" then if OptRec.mode == dump orelse OptRec.mode == executable then {Report error(kind: UsageError msg: 'dumping to stdout is not possible')} else OFN = stdout end else if OptRec.mode == execute andthen {Not OptRec.makedepend} then {Report error(kind: UsageError msg: ('no output file name must be '# 'specified for --execute'))} else OFN = OptRec.outputfile end end GumpDir = case OptRec.gumpdirectory of unit then case OFN of unit then unit elsecase {Dirname OFN} of "" then unit elseof Dir then Dir end elseof Dir then Dir end {BatchCompiler enqueue(setGumpDirectory(GumpDir))} {BatchCompiler enqueue(pushSwitches())} if OptRec.makedepend then {BatchCompiler enqueue(setSwitch(unnest false))} end case OptRec.mode of core then {BatchCompiler enqueue(setSwitch(core true))} {BatchCompiler enqueue(setSwitch(codegen false))} [] scode then {BatchCompiler enqueue(setSwitch(outputcode true))} {BatchCompiler enqueue(setSwitch(feedtoemulator false))} [] ecode then {BatchCompiler enqueue(setSwitch(outputcode true))} {BatchCompiler enqueue(setSwitch(expression true))} {BatchCompiler enqueue(setSwitch(feedtoemulator false))} [] execute then {BatchCompiler enqueue(setSwitch(feedtoemulator true))} else % dump, executable {BatchCompiler enqueue(setSwitch(expression true))} {BatchCompiler enqueue(setSwitch(feedtoemulator true))} end {BatchCompiler enqueue(feedFile(Arg return(result: ?R)))} {BatchCompiler enqueue(popSwitches())} {UI sync()} if {UI hasErrors($)} then raise error end end if OptRec.makedepend then File VS in File = {New Open.file init(name: stdout flags: [write])} VS = (OFN#':'# case {UI getInsertedFiles($)} of Ns=_|_ then {FoldL Ns fun {$ In X} In#' \\\n\t'#X end ""} [] nil then "" end#'\n') {File write(vs: VS)} {File close()} else case OptRec.mode of dump then {Pickle.saveWithHeader R OFN '' OptRec.compress} [] executable then Exec Exec2 in if {Functor.is R} then skip else {Report error(kind: BatchCompilationError msg: 'only functors can be made executable' items: [hint(l: 'Value found' m: oz(R))])} end Exec = case {CondSelect OptRec execheader unit} of unit then case {CondSelect OptRec execpath unit} of unit then case {CondSelect OptRec execfile unit} of unit then case {CondSelect OptRec execwrapper unit} of unit then case OptRec.target of unix then DefaultExecUnix [] windows then DefaultExecWindows else DefaultExec end elseof S then file({MakeExecFile S}) end elseof S then file(S) end elseof S then string({MakeExecHeader S}) end elseof S then string(S) end Exec2 = case Exec of file(S) then {ReadFile S} [] string(S) then S end {Pickle.saveWithHeader R OFN Exec2 OptRec.compress} case Platform of win32 then skip elsecase {OS.system 'chmod +x '#OFN} of 0 then skip elseof N then {Report error(kind: BatchCompilationError msg: 'failed to make output file executable' items: [hint(l: 'Error code' m: N)])} end [] execute then skip else File in % core, scode, ecode File = {New Open.file init(name: OFN flags: [write create truncate])} {File write(vs: {UI getSource($)})} {File close()} end end end} end raise success end catch error then {Application.exit 1} [] success then {Application.exit 0} end end mozart-1.4.0.20080704/share/lib/boot-init.ozt.gz0000664000000000000000000011777411030716023017376 0ustar rootroot‹HScHí½k“ܶ² ø½EEÌíNÜ+øRìÝ Y’u£×U·ïX3gÂQê.I}MuõTUûqfgû& `±dùZv«$Hä;Wçï‰ÿ”Ý[=yøøo?¼ú/«çYÕ°‚Õ¼bòœ QÖ /ÔU‘UyÃ哬ÿŸwŸ¾}úøõÛ'Ý/.^¿üéÉÓïW‡‡buþðC×ôâùùEßTtþðêù¿þðôÕ£—Oåó»›ËÃv÷üIÿžÛCΊîõímû;ùœwO7¿Ýnwò1ë_îÃn»ö›ë¶k<÷ê1„þm÷ü¢ûެé>ûn»=Ø÷r¢ðA)‡¿ù°u— ñ`É%4vÛÏä U÷ððûí†Ó4@(K¹(÷~ûçí?>xð¾÷„ùž}_îÖ›·¯Çï³Ùkùo®v?„ü£éŸMQzKŸI(ü°ßìövëÛO®6¿lÚŸ·ÿ¸Úïÿùýn}sùIþµÞì?­w›íõû×7ׇÏ»÷·ÿ¸çõ(wóÞ 4Í)4Õk!ìoE"2äuˆy}¹>\oohŒ©»—žlÞß}¤ûòt·Ûîè¯åã7»íífw ¿Üêóß÷‡ÍçQœÔOJkû ¢>&F“ˆº½¹ØÞ¶r+éwä&í?m™VÖ¿âŒJÀª«GA’äáöŽ>ý\ÒŸËíÍÕ³Ía±r5Öîúæðô·ËÍm¿é½6£3|¿9¼]_ï7¯o¾k·—?££íh…R÷f™×Šl^&~ áÉzúQðþ¡ÙpÞÀ¯lõô¡<ð¯Ÿ<ýéÑÛ§~:úìåÓWgíÃììõëÍI0äNÈŽ_¨~†a†îÁe%¿ë0æÅõþð£|¯û³[þî˜]n®îv›·›ª‡n=¾;¿xÛõö]·d™~íñöfXßÜ>x\L¿öoëön£‡n²Ú™Æãííï æn*z …S1Kh—²ëcÝv˜³>l^È?oÙ<ûLøú¦½¾Ù<é®®žö/ýø£Ù=#3?Ù,Á½Ümº>ÿm½»^¿o7/»/Þ™±åÓnPóE×TÆŒÌú—d_?¾{÷c?G>6Ç»Y“Ë—Ÿ\ÙÿŸ˜\r§âG¬ØqˆXþa#W¡‘»#]‘¤‰ÕœçÒà³ÿ¢g)XÊú!ŸµÛ÷ëÌdssõdñ…BRáƒÂ$iÉs0rYPä¤jfZÔ|5TòO¹^}[2‚åôJ6ûÃwÏû#æò”/ºÎ눯rç+M(õ—òµ·›ËíîÊì'ëg«Ÿ”„Wï!ìùÅõa³[·?:ï^mÁ©ì6‡»ÝM·œú©BCå†l~ûÛúæªÝìºxQ(*sõrÿñ€6ƒGÌ|él¥¡fS[n ”ƒ˜4ºþ|—“­‚l-ÈÖ’l­ÈÖšlmèYdt3=;X z~Œž £gÈäqÎ+ܼ€Ðþ­w»mßõ¸Å3‰çœW:ý¶Q›>y÷Ú!…Oà ‚y˜|X_·»‡WZ õeêùåÔÉ‘@ª/ðØ“ÅYý•­ŠÚ¦nü¦°¾KÌ Nü¥¾wý”B+ÄbV©¹À-„–ž…7ÕY±²'ㄪZbˆÛííÓß¾Q±/CÅ^?ÔúyÃU$»Ð1 ­ä Âøîî2í/Îg­ëe©ä8¼ðŽá¿ü×åQìd:ýäõ‡ï¯ÛÍjóБD{)×H¯©wØßÿ¤oä{à ƒÖÑè?¤âúÝo†—¾ûáù‹‹ç¯ŒÆI*<î]|ê–ôêþáÓõ~¬;!_>ìî@o=”*£b³"bãœeBñdÛ1âzjsÍTžŠŒÏRº½_ï7úibµ›Ô¢œoÝüßì®·»k¥ŒêW ,’€õó{pòñ­2 §F§Y)ª1Ö°JiËzº* %w×U“‰ºÎ• [Âj¨‹ú·éaˆ²Öó)«âÿ0aÍ%aýî÷W›ÍÕeSr÷6W[«¿•X»¹R¿ß#N9Þ¼Þ?Ùî%ÐÜR^Ê–æ:‹`VÆÐÜR>%ƒDWœA×@z ‡4™\¡¾Ër‹€C1JŠû¥¼$Xf¤¨FÇõ ©½u_7žX/œár|ú*h‡/Á•â¯e¤‘`Õ=¼»¹þð»³~†uö†·bBÉüMÎ䜠·«¾$“áë“ÍæèÏl€ZWj«”±PCÖ.Èvà¶t‘ Ĺ¼j§Ó8=ò˜˜æ¬¿Fί (š%aaž„U$áæ"Ô5jiPKZNÕ}Ï`Ç^yÄCX˜fÈñG9x‡”Nr@µþ~¯ûo4‚Üãq‘tÑMŽèþº›òµT¨€®%ü¾Þˆwð|ñ;h¯ þJD¼ƒVƒG¬Ç-x}Æ$¼x,Lë+éäíÝJ)n%z‘’#½È¬o×àtÅ›饓I`_ŸÁŽP¯Ëãöv³ß¶¿lÐ7œ^Âi?¨4¯©?ÁÛÜ݈\x WLÔçõÍúã&ä—'ù vÅE¦ÁëKÒgóâ‡7/ž®´ ¤Wl씘@ UæáŒªÔÿãÆCû“QcÕ­qTzÀî‘͹¯.圶ïÿ}séyÒ²B²z—íz¿_¥z…ùÌwÓŸ²¼6G-SÇÛNÌw+}¹½ºk ˆXbV*ê4Uy6¬.hÙÌ£ÛóÜÙÉ…âu^äYSi¶ñVʨjXVô-ÜóÖøýû»[©|Ð1ë»öðÃÛxþ”ë²d©;,–Œ[€ÚH©åõþâúsèe7¸ =¦}·ð[’²»]ënŽþröç×ï;Šww ¡`™<ªë»Ã'c· Þ‘kÕ¡Ñõe¨í¡½þøys›ëUë#§»>| <–3üŸw›]&y´÷—Ÿ6ŸÉ僫R|ŒíIxSóÀ9ÙÞTtsC÷’Ñ€ŠrƼ¨î©ùz3§…›QúPV=@zŸfX–5Ô†ëО¼áò «¨°'ªÀî&V‹üuÈþlÈÑÿ –9Å"ªbõ`¯ts^:l¶Ÿ±â«ˆ’{oå¥òkïKŸ†xtŽfË[ßDÏ„VØHû¶>\~2h%¤É?Ó?Ì÷/ŒbVz”BÝñ91NB´.¥Õ~0ñ¯ç³gi£ K*4A[—¦ÕDÙ¬‚ŸQаI舃 ìQ¹7[otÒ®U²åm„‚lÊÆ1©DSÚºH !~cÚaâãÉŽ$cü«•ÙB)µËÆ R É _lõÉw§èþ:Jüz}uø„ „’éÌ;­q¤ÈÑ++@®oo»…FÍ—Ÿo}žYÔ$×Ëk1¹§VLÉå?oÐû±î²õ°»üDKðІÕr?4þëõáÓÅúºE/¨e[l9ð[ùî÷æ§Ãþ*{ýá¦ß ¿¡ç<ò\®Tø±\ÝðSíÿF?ûèØ£¼‡„j¬ñž«»)0ÝïÛíúzøêîóûÍî~'zžß¿Ñ „ ²M¾ såaãÍÌI­!ÿímRò×\]Ÿy¥Ø7Õ¥~(cF9\LÆ]Â8ÆÃÁÇW›@d9çTVÜŹÚA ‰íå™\áð` q¹ÁÂ^¸Qõš8n¸É‹Z3NeÒ1ì.ŒoK2ív•+ÒNÊ$XöÀ¾SÐìtM6z é¨ý Ô¯¥c˜%g|l GòÒ³è»B‚V,¾cAQL±\Q¢˜±õúù „ñ<‚ºRO+¤$Ö!ƒÆYJÁÁÀÀ€†Ú+Ø2„’)S~P v÷®¼GIMÈ@Ãú[¹#¼Ý?šþœÐhÈÃX‡NB¯ ¯²Œ•ø Ç(`ü‘£õÒÉŒ¢$EìC¡Ô÷WŠ¡7Û§NÜи FÑ·iÊ1H-¬Àóòúænoš ÷ ´¾¼ì=6Ò¡W È”b.^sìÃÉF¢tîrfŠnaŽà<£{WoàûôGöP=òËÁR¾ƒ×q8! )1 0 ä*~l¼áMP`r+<ˆ"ÿ¿oYx7¼ÛÀþi3`̉„)õ[@nKoAmƒZob“V²0–@o²[ÿšˆŠ9[AbbÝn,Ôy$"ÀAi!\Ùà‰c»!|çtCÔgšÓM³L7ŒÀËYý0o»U˜¾ÈÕÏ…VŽi°Œ‰ÉxË2'ŽÇ¬‘¸Õãù#IëÔ($ äó"WæÆ‚À]•å´T§¥ŠØ´ÊVØ©âPT]‘î-⹪DVªÈ³ÒxQ*f裩ñæ=6rQ½ryƒþqcd5Ô²v‡ã`øÔ°“eµŠ K3†j“¡”î¯Ë«bç;´ í±/ÌX0ÎëÔ¡ó2^Ë»ÀMt^;$­è ]žWø}I:yV( áÇJtµz\„6ÂêÏÎÏDžˆÚ[-ÖGgKÝvÈ)¤ œT-“šrSu^ØP/<öˆú¼ì»ÊæÞëNXN3û¥ YE¸ÆþHƒ$±…(ÆUTIIàB1æM8SÅøÖŠˆ­%޲³µØ×OÍswl76øBŒ"OÁ±Ô¬N‘×e>º(jïXd^÷ Àçc\ b£È%`»¹,ƒÇ-UL]å\’«®÷³xe™qFGf"¿×<û‚{7 pî~fâ«Ý#ëj_õò“Hpå§@*«ðI׬Œßrt‘#‚cñ•¼Q«ø¨q|<_•Ù";A™â sJ?@¢RwA\ SЉþ"øÆª?Ø] ¦´é_QLcŸ3ãN¦Ev×p<:ˆøhïÀy„ô‘(ûa,¯‚ÒTp6¬ ?«!’€¨ƒcRåÈmðãÚ,tcÎØ0éÌàü€…Pî1Á‚0–*J²²±ã~!%¶vÿ(Ø)˜å¾ê.òÃÍì_Uµ«dœI¡âl”[¯FIš§w(½ÇTš$Ë„¡Õ6”Ãè”Å‹ï.“Ä GÏŠÄ %ÜWÁÀíù,YW=‚]S5_M®–%' ©™çUìG&1—ýOØm}WãˆÌ{ÿ2ÏmÞú_E°¦gË!»Tß«ÄFþß÷¨’Ê~×ÐåúÜpa¦Ú‹c¬¨ûݧùEÁŒu K oå‰~CûËÒËk·ü7È’R§ä½×‰Æa°Ý0yãæâgAQekU¸œ›mËÿÖ1&("§eöÖ¶a(ŸÒLæhïlEŠÐЃ¥%¬†D~l‚Ž‹òHh¿Ÿê¥-­RòزBÀÉ‹'×NűÔ5.ôËÖ"ž økòweÄ´1ÆeîÂé€Î,ÞŸÿ"ÅAµa¼j5Áý çÍê:¥…ÓÙM¹ª ª±Wq11wßnáH%D,?ÒPÜÇ0m¤t‡U $4AÑý‹'šzÏ…NC8OA Rãr†XŒœQQ5`ðêÑ´du8’Lèág~×'Ózî×á“YÁ“y‘z4u¹\s¡Úý£i£/‡°§T‰@ ONûBgúºY[äë:›Ù›vHf†2 ¢“H^¤Ò`Ú¦§;Yg ­ŠŽ¥Yé±F=Nh<"„‘ñ뎈'C¾ óýÿ ¶?˜ìóhAf¼"ÉÔ AÉœs•¥ä!–˜¦=Xƒð-¤ÿ àè ¢e>àÕÑ Ûc3öäÅUäãˆxžQڭצm­Ý-m²ù›¤©X\kJu\ôÙ‰@›ÎB©K{$\¼"ÜÙ ÚÚÉ=I˜U}©‹p©°‚NP ¸~bˆeOÌOåÈu%îÄòm«`—ñ4ó¡”.Ôýø‡†% " ’ÆåÆwd n¼jªM®²™tWø£ÝÇ}2rÀø€a¼ÈÄÁ™]áµõ‚Œ :•6p`ˆÒ®D'K.V~µmGó„ J±¦Þ±Þ¢@MÇ–Ø‚T$ÃÍ åô`½3=æéÒ%R:o)õšÊÔZ2øØÌ<~HI1çøõ9c.º˜›iô#×4,Ó-Úúš—Û›«óM»¹< EéIûÌã_õùg|‡ípø;¢o$UŸÕĆ`=b˜s—'bŽûå6š˜¬<–I…”Ì:0» ®²è\®/?áJKñ(߈wmKÞ>9 KDØ•.”a:×Ϋ>µPL:és³>}®*béL¾ÚႹ¡ñ|ð”l¾ßW‰ö«ñ̊朸K|HÇTHaÐëÿër(R579GäcŽßhŽSɵ—ÌL‘òj$E´rÛGoÏŸ&"x%À˜ÃXã<L#3+ÓÅX`Íxú £ª!‚¶Ñi•‹ýqz˜˜Øãñ&´æSy>œPƨ,ÃÙ7¢X ³U²ŽÇU0Xž~}õïÛë›G˜©png‡â‡Õ†ø4Ô+|” ¤¶đӠ\ã^mwŸ×íõ?6oÖIº0•®žŠaLs…ÝgªÌbäeÝÛòUÿèU˜VeÈ5››—½ìèçg6¸†Lò1ŠÑ^°XP©Z8 kd)îø~"ü£Œi-W {¥ ˆRç‡õåωYÃò ? ;‰T¬Ö? ¬BYÛw\ÉGcå ”®#SðJT*jŒb:© n×áÝè(8žd‚9Oñs'&\ :ªDü¸Dà‚ˆœ\VVô"°<‡Ûi¤8ñ¢%é·SÅ.Tát @Èö¢.ìÊU=‘ +Ô j ¡lD`X/´ƒ³)»E;Sè™-œ9RÄET8°[*} l—LnR‡Ó©MÛ;c‰£Ì,Ħveó  ¸M4ô…W×å÷#qüèr>1æbVŸ ´ežþ¸£ø‰b‡À*Š™‘$–MBCFDÎ7MkÒ‚pFHdãpBÞaDÿ€,²¡ºGU„›©üäo7¿lvûåƒN+ ÍØv´?ÎŒÍRLÿ…‡f°ÒZ–Ë‘UcÊ=sÝD ƵãM›ÂêeMa#ä剤ny0KË7Ž•‰´ — ˜§glÚ꣞‡Eñè {ÒÄö¶pƒ/µ‹Áð÷{ÿò/¿Dv¢¦]¨ œUB ?Ž6Xb–Œ‰I؃ŸÎ€ˆPù±hï…ÄË/PlaöZQ°‡¼'ˆÅAjœ áG¢võÈF[^)Úl®¯B„k½1!õLçÞ^`l¹­qؾØþºÙÝóÖ.YÓS@H-„¸ë›¬“Ï;²»ÍX;®ú°“OÅjHµ® fï7«Š,•X^ô?ûtJ*×VÓÿÆû«ïE_þ€ ö™’Í<佇š4D@CÂq:Ѥ‚ô¥¼â‹!wëþ`¬0ºÂV£P)YíëÎ5 ¯Z›YÙÆùy ê8¾|D\vkˆÃ÷U 1qáÀäPk§JÚ†uõ¶€’ïâ*5*y.s¬d(Àù©'€Áó$ÒûΉ“$)L"  dõ`ΊbpqQŒ3N£çõ×¼xùm¬ŠÀ66o£LìØY ksܶ¸Ã}ÛÅb"B8ä<ªs•98pP„È©<;É {ÃïØ`N¶ï1’ž lƒŸž‹RfŽr/áuJf‘P_­{C°T& ð Ö½ù ï#1[—ž(ò>Cü’žaœ^Ô1Ï0Àƒ‡| Rk¨òã FëBø‡âì®ƪõ|rÿŒÈ¥zžÕò§âS+dré@ù¤ÛÈ«zéñë·OÀ,L¹zózíÕZt={A´/è‚ö]о  ÚtAû‚.h¯ŠÅÍ´*Tå0ÀÍ%ÝIIwR:¡—ª¤—ª¢—ª¡ûn辺oí½NµÓ¡}ÀÇ´šú€¿=4Ñ:HXâÕû›ù#~Ùþ÷ÏÚÛ oÇ<œñ•”.EqÿôárÿL)VÈ´Zž|{âkïËø³ïK¢0ýà)Ôó*ç2êòˆô«f0ªÎCT¬·¥rK™¬61…Øm’ŸPgæ^"^WC­%7T 9— êåÒC…JQ}ðýC7;ê6À€Ènëü$Ý6A&â‹'e©ÁH¬‰È<Ç&–œ˜&˜"À3£Ô*w¤>‰÷ÿ~ï?;FÁ@åtÜéhäã2&«ÇPA.¨wã‚ü’¾—x)ú–fÄ*Å%ôüÕ÷¯=êph°Rò²® ‘AÇ ßÅŸÖí¾ ‹€Ÿž¾HJ:¦ :ð(æyùS’ظ~ÐÜ}´ ÈÞÁU¢È4"èF>@¾õÓYk KÏtv™`=Û`^Ê…s-t® ¦6ÎᦄQRfgÕÅcÝ×™Rl~:¤óÃîúæ#NˆÄr®2"ý¼¹I¬ÍZ2ü´‡£Ÿû`ÂrÇÑx,umàºÿ²þhqÚ¥Ù -vb‰‡/(¿QGŽÔyä”Í Ãzg$§d©"5°ÌÑÍuWæ‰N$ ú¦`ˆYŽk×Ca:Ô•º-ôir@ý†+Ox(;NDJ1ßÉaV8#4¤×´U0 .œïñ1\Ñw[Œ%š½Rü?p—D’itR8:ÈëpbdY8Œ¿}hÊ¥ù@O¥HVk¥Çâr°sïéo—›[ùáýÝúz¿\.¼²TÎõ»]û~}…©NYf«UÆH•(ð°ÕtçÍ\ôEôE¯YNßµVäÊ\–åÀÈ"×Ú\òþ/×·)Nµª$ v¤ ÉÉ»º'ãÀwh(vÙMÆá„;Oå›F qM­E‡ÛEñBæ˜ÀãJµ}ç¯ÄìâDâîT45ë=~¿§ªÌq‰™®¿ùtÓYÞ»9öŒ„‡³‰w{/¡Æê@kù#ÏW.ÓàœNEBzæú ¹è}JúÐRyôÁƒj‡õi\•;u.[Ãz: &3@›œÈYîÀø$[%L’g~Wê2“¡¡.ǹ6"JJöM&õu Fµ£MæÕ/kåa-¤Az:v½éÜ»¹Gû`Òî¡8O(Ž/§=mµhйPî¤t6r$ÚˆÕà?‹±áŠcuô‡¦€(ƺ‡·§pt 2ˆÍÁûj¢.êÔ¨ sÉÌ­°µ7})ik¦<Ê¥÷uƒ¾vò®ã©ÓºR⋉N dAa*ÎÖL5A½²£z —[ÀªW¨ù4R†" …‚±?s©ùüþí#E™½µL”‚mF9îŒ^¬\ꦮª?“«Š0”7#œ€­ƒŒŠ¬«§äAÇëY8u˹±&'Œã1y·¨3p¿àa½,Æ~ÈfEš_uFµ `F©P=óâyŠÖ_ÉVdV†Ñê)n…q SàHH±¢tªµ¸¢m®-|(t¸ ×?zy|Í/º “ò8îayÖÿÆmS–+ßaR¸ìZÕG3sИøHYgé Ÿ®¼Yð£Ç+H6ÊæÁ™äcm’æcÒ)çA©ƒN9žÜð/;`NÛ“È¿V´£.‰¼hÎ"˜šq^úÔ Î–ö;¢™0\ŽþšnmÆøÏɯË1fþÚ\c)Ž©Eè„þ? Xo¦÷'4Z`IG×*"5ê,WŽ5 ã4éGqâÄg!><ÅÔ¯-`ùpaüê‘´j\æþëOß¾óñ4 ¯aÚgÂUžª¿<îDñJ TÅõó‰õîèØ#ÍÕÉh]]Æ«;ŠËñêÛ‘ªçjºë"^âu8<¤~Îa16¥»˜Zà;›ÀEµ½HJƒýùÅÙBq>(ÃSÉ‘7V6._è”DÚ'ÚPL–A²1’n™’5J;KH;K'5¥ô„ áÛn»±×Ô’ë×Îw—£ofêÍnÙÖwía?ú*W¯~ß‘ ÷²Ú˜Mÿêþðrsø4új¥_ݬ£ƒ ûÚÄŒTAÌîÍÝf3թГŸ±¨ìkS«ÉÔ›ov×7‡WëÏ ÙäÑ÷Ô;£ÅWß­÷›—ë›õÇÜÐ'Ï+Ö±ûtË ¹œ[ù_ðÌ*ŠjÕÞɬ$6Éãâ½Ç®eÞýGoÞ¼x—08 ×*—8Úý§o:΃…3ÍM2™sŠÝ›õSªcy&ÿ|ˆÎU*îïë?ÉK å«”€cŸ`HÐ!È7FdíÆU$‰è§ÆÄ–!S£ žïqÚp¾i?¬\÷ã.0£ M[¸£–Uî µ›*Ïþzw}øýåõ^ èÓ’ŠrÅÝÆ¢^ãì_á9[_±1Ü#¸÷àCG‡ï€AOeŠ _­\ÎÓ‚E;²jHæÝW?_|êÞ¿Zé‰nŸ@…mï±dÚöeøðgíöýºp ¸Jy» ÷6“ŸNË $ 'Ã’ †qR_ØwÿrÿÑrûêôô‘0ž™Æø~‰óF V.cOœ^J.*ȪÁ2¦Ô¹¦2Ú'¥«Ñ¦:>ÊäE”#:m-B•ZYÞØTÄïàxÊ—p¬²Lw5á )™IÚšœê®ÐäúJv„o–MÄ+W¢í×îKÕ{ô/*Ð˶†bñyY‚5o,ñX ×XéÐ¥¦Gf¥JqRÕìõHÏBêi?}«ó'p¶'³YŸ„¨‹3?ãXý>Ç­+O$tÔ¸Ô‡{fIePP©¥Lû*Óÿ4_r ÆÞ«²)yVG ÃÐaA?Ì¡_àÉÏ$îü7¤ÂD&JB†Ø#Êézò­JhÅsQ…Î Éî¨3ñ¬‡ ú82ï9Y•Ô¬Åèá‚Ò%xá´9m¿§ÍÀ˜Ë§Uø1Kx˜eP°Ííè¯öÂè‡]LxÐôøh@&‚es×¥>»cJ³3$͕õ=i[pߟÑ4ê¨Nòh%ÍŸw©M²O(õÕ4ûdU©èÆâ §n,Q@!QåY1ÞáFð5Á¶JzÃ÷ò "2ñÇZ„­²ÚGms¥9¬ž°_Èü‰øŽ±gÁ¬ªº[××í9Í|.Ü!ƹ!Ò,ö]·.r“É?}®ØÁäo%⥠='Ò‚ξnÚ°\eäº÷äúR~·Þý~¿Ûô{¤4ÉʰÅ7±1ìex)ùo­úPœÔ )ÉQ¨7@ZV½ H0–-L ²î”UJ’Z]Š@;@i`7.#:]Ú›ž«,˲E}©TÃÝjœùiÈÆÅŰ¥‘UyP1±HnPÉ ám­XXcg4þªU?57= 3K5o'íyLp:ôúío뛫v³“ǹ‰:¶˜çÉ ÑO@ÜQ/Šò©Š&£££ˆA¬í[+×ç¿`º)A7ã“@P+vc{ûô7<Ãðõ%e´:(9€“7þdºµ&|† cƒ‘çbÆG9¶95.WuY_¼~ô$Hž²KX&Ýe.»<w~ñôeB§ w´MêZAÏ‘ GN”Íw @êµÿ÷:Î÷çÕo×ÿøý ³'#ŒwTóDf Ñx`}Ñöç¡©·o çÏŠaöK™¶ä^²JZD.~¿Ý<þ´¹üùÍn{¿¥¼ n)½ v¹!ö‡X2´ÏĈxÝ´°V¬LžKíñçíÕ]»ÁÒ®J‚lÅ ý%ÉåÜ\Ýí6÷•†#ÃÙ¹c¯^_¼{ó4á„åáíÀöçiRuv;]kðãwÚ9kt„yàõŪˆÜÎæy|£V÷¾±ã¹Ñî‡É·íÝͤ;>[Z{ÝÞHOVðƒLòí— ÉerÙøã]a|òQ91_¿ÿ÷Íåáþvûlsx±½üÍ4joª ch1]®ì#S%¹àD£# ¢0ÿ+«Šáz îá$0fÃä$äB]üðæÅÓ !ÑVfòÏ›ý¾{ûÍúpØìn 2¦… (€îH1¹5dÔÍÐ\Ž ÝÉäJÈKcÀtœ¢ çg)QæDz$GûgÆ‰Š´‡æ³ô+Øê—A$“öæSlc‘Z±¦ÄÂw|»â!sŒ¡ A~ʯfÖb#G¢jFŽDo M3Æs±"ЪÜm¤¬AŽÌ€ nP9ÞQ¢YI!nX޹dDáÝ7›_ c“\…\òtú£/QN®<ˆŒ¡b„ÎïÞ·×{|#FAV㛸Γɺá0cÖ¢?bÐÏóA_¹â${“ÀËe€ÀÇ`ÚDUY¡³÷ î$NR_²òzˆv~e¾$©LÁS¦O‡T&DW ?aŠÖ´›¬FƒxÆÇðÌzŽ@øTÚ¦0|8XäYSðj6º=sE3f™ÿ²ò€Ë$%—~tÛvmÌt§ªn) r V ~«%taM 5Ȇ˜b¿{ßQuÝäHucU¬“2®3ÒˆVŠ(àV,òç>¤ãå ”Õ†<üÇ$…Æ S“ú¶"è,ÊkÈDènFÅÐ4”v"®Wƒ#gÆúT ¥;v? ¥+¨’º÷=/ k—³:ëT$žJœîÔ°FcÙ X¾C‘“ˆ~¹ÒBó«¨@Ç–ºG$ñI1ÖÊ3Q…ylj¨½4ÌömV–Ë® çTИÍÊĸàböÐ}d¹¹a•ç–Ä¥¢‰µ9½ªæÌ&ÎÍËžŸQ:ÁõX ¾ y8ËvŒ¹æ´Å|*¿ŽñÊ©®™ÀeøLЀ;†ËͳŒFž"¥’RÀ†&±G /ƒDgU•E€ÚƉ9r"-b°¡èq¦¨1.©Ü9ng ìÝËf<ä“ì±ÊFÕrñ,rªÍDF²·z:©kÀÊŠ^¦L³v;bJº$¿å†í¬¤}¸òêOƒZT@j Õc©Œ˜µ½¾Z‘âqìµ=0ì0HhÌF¤ìªèBÏlag¤QïS–›Þ­ÂMë¨<”sç$žÊ¸.(œs(h,4ÙßFw—QÃQ]¤*òä«[V.®ˆ3,‘Ï6¹|¡µªI¯É 3æ ³w?Q*8cÄÌà5NÚ½¹Ü¸)"¥CÎ)®6ú  NSnºô–s8ã2Üê‘ØƒÓL7öà§3 "„c'Çÿ8°ixèÏãØµ¢`ÇŃ‹s„hDån^• º´ã”˜UsœôÝëoÊšT @|² °[¾¦r­QD2NWdg¤t¡_ÆAL¥Ž ªD ×Ï=u†È|D·5Óé`ˆåœ“WÑ)êƒ$ÀÒŸ¶‘¼§Sä3ÆàË]²¦mø£ÛŽKqƒ§U#Ðû?7é(ÔŠ“t4Z»æ£RÎp€Y•ôÛPÄl°îCÐûÙ8RÊ¢{×ýU!¹^À“ nžÔÌF÷(PURojbã‹Â3`jai@N†Õª´D$²›mLËÿ¯r¶ë븣“-Ò(†Hâ—ƒ3N£çõ×¼xùm¬ŠÀ66oc+¹{82dmŽÛw¸¯c[¢XLD-{"×J¦ø!ˆ i­ÈN²ÂÞpÇ[úÌÉN¬£â; ëΨu÷¹—𺠮ƒØªÀº7K%˾ŠÓ¬{óÞGb¶\+iÖèKŒž0Z{‘JXÅH6à@yÀå”}‰ùaCâ¸ç©£i©½#Âú6VËŸŠMeœÔ´ô±n.7V娡' þÞßÜûÛÓâèôeûoÜ?k÷ÏÊý³tÿô@ó óóárÿLqØÒu 8Üf»½µG'ISnS,ã`\O°tP–מþËHcìƒJLN¼jFB›VÂÏÈ„Láêèü4B†×"œé9õ¾±W¡Î Õ—ã›ön¿Òê8CKÝ|*ÎÕõ6¹CÀXY6g§ DÅQ·ËFv[ç'é¶ ^_Ú4¦5LIÞ² RÅϵSÍlÂ%oYMçTgØjH#>V7áóBŽ3Ï:y•YüÅÓËq€1¼}KC[8ˆñ¯Sâúmë+c‡+—ÈæŽ¹€Hóæ› fùÆB•tMë×ʤ+Ç»Rüúl&T ¥XRp—D²ôÉ r1zÖD§Å±LYT©yÂÉñ¨¬5™!»Ñtj\Í3±¸ÒK¨@T5˜†Ž™ÁÅäÃöͲ°Såa£ÓeϯóW{þÓ–"&ø 2èÆn°P½UXŸ>šÕç> HK¨ FCÑ’NJ?5żéO„yÅI®%ê)úàV·>¾.©” ©D戚˜œÔ™¶*ÏL,¶Ãµ5®ÖRØÑþ¬j`$D÷”Zˆ:õg 0ÂuØE–«œŸÐ§ÒV£o|î\Q WapÂXák……¶ýsÑlJÊ-пõì¥ýÆ<˳þ7nšJ{\ z°î‚£™9˜Ë |Ьåé§Cü \~$u¼¡ ÊÒ1ᡊS&O¤q¹$ØŠS΃âN9^‡_xÀœ ¯'×_ÌY”‰2gÎ"ø–q™3¶*±%¶Äž¯íB­¸ÊWÊ×å?Gmn®ÀÇ*Ó¡Û¡rZcŸÅ»ð]½ŒÏqIÆ„C9M+±dµEó£€V['šŽíâž9%Y=¸®{¶ÖŽæ³Ú*–æ/Ïj;^R‹\qýÃ|òBç¾Ð~+Í ‰Ü`Hàȯ%]vÊìT=›œÊ#Z†E¬lu8Ü2®L/–2¤XÆé`rð% íg ø ‘ ƒi,uÐõfòøÓMŸÄøîžÐ¤± _ÆðD÷™TšR¢:á @tÁŽb@ ~Í'žÓ¿Ö8½x3ï”ÖÄœtÓ)ü‰þŠ,¸8:aœS%o†–¾žÂw»í¯{U¹Ým¼ýüþúf}Ø’n¯[úõàÍúfÓOon6*7zôä Ñt~Xº;çúrn>¬ïÚÃo_àG×ûËî6ØýN=9ì®ßßIhŸ~^ÃÁú5+ñ{»Ýv'ïÃÍ ± êéÛÍG9†âé/ëöÉõºÝ~Ä~»m·;¢ÇïŸà¦sÜ$—·v›Ø^ÿcƒ<»û|K6¾Yï(„Î/×7Ô”Ÿßìo»­%p%¸J/×—»-n5…fÜæWëÝŽDÅ×ožSmOo~¡šÏ7»_ (æœ0ü²ª×q~w{»ÝykjKeò½ÛÍ î/ÇýýãrM@/[·×›¼o†ö# &ë^¼¹¾ü™X©7»nÕ!»Ø|¾m;™ŸžîîùÕ€sŒéÚYæ1Ñþy{Øà™sôæùå§ ¹§ç›õNò›w¿\_¯_Sã 4 ÁÅõo¸íg¢éb»mñjÉÊO}¹½)ôo×»ÃݺíA&ˆyÂ%6È )NtUÓIº4WC´3hô£8ÜÞÐÍš©# ä‰P†fÅÈö@¦2Æè×Yžº¸ê·iÎaðCùÉvœ^³šžS5’Äí/³bœÏ“e¡É~þàZf4A½Z›P{€®è|ß¶$eK¾­ÍÈÅ“gßÖ,tYÉå2—¸®úgZ{Í‹_z¾1M ®e§C÷Và ìIC£ô·-Iß’ÄØ©àÊÓ¯[ùä% Óqú ‰’AÞîÛ! JuaººRùêo{²Øžøš° ôí_jíC$-¸ô!RG“´ò›„¥Md)Ô2J—dEf@zù¶W3ö* -BàöI¼áCð|Û«9{•Æ)fª!´µ48A=MêÚrƒBE¢êâ›2Œ°©¢ñ7)a©¥bwh§Ò„„¿ÔWt L*€Ý‰JŒ> ¡û7‡Èß· ?õ†½+¬:ÈÊ/½ÚÉRÁ7ûMh-›ÑHãuÄ–7¤ mx°}ñð‚·êÛÒ¬Š^±“›¾‰Í§ÝÀ2DãBüÒ7y™…ÿk­X¢N"D%èöTÕFâEú×Ú©ÐZ~³€þQk@ï w:<ßV8ä"Ví.ä†úF‰‚÷f˜3 íÕBvÔo—Iú†Ö&t9¤©FÒœ{RUÄßÎì×·á‰ÊÿÐM˜ª;þ¶³§ÞÙ¿ÖZ¦™C”(10-vA~ÛªŠ“¸%ßT´Á%þ¦¢ .MùMÔ[¢šR½eÒÝ&¿ñÉ{Ð%'ÞkÓtÆI%Ñ!Å×7úÞØãjO;<É^é©Ñe‰ZŸÐ´¾ùáþa(òMÑ÷ E¾­ñôÄôT“Ã7ŸàT6d±K&Äæ„Ø™T7ð…œÞ¿¹íþI09ŽlÏoÌÒØ†Ðžžì‰µSß²2-´¯¢ô#¥—,9°g)8‘~|ãñ௵4‰~G Ymÿ Ào[;¦YK 8m(î7Öõ†|Ó$,½WÁelàß¼µfìl¢æ!¸–ià·Ó6¶'‰N©fÎ4&~1Qã?·_±FÓEÉúRoÌ–ÆY¹Uã SaÊVã¸jœ)q3^”ÍÔ” ”r}‹²9…ßX_ãF¨Éûq† l/r§NzÃ) f:¬8, ¦úº½;è4ì¶¤Ö ×Íôßf*°&NîOƒÑ£J˜ŸµÛ÷ë¶§TÇ)ÊPuœ—A)™ß‚K1ç¸LQ]—iʈ²#P´‰㥖Y^Y•7\>ék„?GE›ŠÜTUâ~Õ&!¾ëWgˆÿi·ÙoÛ_6 Ç¢‘¨äTrÆô+9Õ}‡ÅRIl5Vêxâ|8u‰¢…^STÙB]dê°Ù­[]{ª[^øˆ™G€¨:µ$Èn‘<½Ž}9dbˆØòWùʯÆeG•5¶8+ç÷ŸEôŸ¦>ò '‘[³à$òº±õ’eÅ0EÓ¾Ûn[]Óì…*æÕÁ[1U±qî sõ.àÑ}KOŸò³÷»õÍå'U T­F±ÐšSÓÈ;úÙý,ˆþ£’+e‡‘ðVù‰HPWMÍs úV‚¤– ÉdØY2¿bÝ8M›ªËG{ãTT1¥ÊíÚBŸQäЭ ;†¤U¥w@äÞ6r‘u£S¹o õVuæ]yÜy«Ã¦v@P—Í2;ã²U)† Õ‘…ÕJÝmú1RÅN’·!SõTÝM«‰z¾ÁS›÷ðò3¢Dì0]&k3jÊOãäu´4$ ­ô=šuÛ§Af®TÃÒBVÊ»×c…L lÔ<*ÍÉó‘B—q•ã ·ÆL¤k’ˆ:xãÝ?zs^ÿH@!J9+‘3PÂ*9SX)¨Ô€AE¾UTV|“SòNNytx±ÞRjÍ*ÑÝQ†Ñ =éªInW‰É•âA,éé ä0-JÃã4ð6ò»ug³UÏÅxoêy×›¬Q×IÙãjP8ŸZ B³ÄŬˆY"Ýl6éF%t3w2A=|ºg¡Âò;ÂüIôÄY`XìOoÀcç ¼ÔÿÓë²(ÕÕÔqx*Ù4àqç:® .Ž(5:^¶û¸žˆï¨Îç-õ^¨?¾'tc}=aCáI;:Ž/dGñWH­äR£$U·*”^öWˆ0ÄX_7Ýaاú,M¬H·QmåšòŸoÚ€1t8+B8Ùw´ôåþ£eWƒ,çè§®oÚë›Í“íÜOÃhÂ#G…Ûe¡e¸M¿æ£}de? £6ï—®ˆÐ7ˆóÙ*Xji²ÍàJaÕÞd̽¥ö%Çi•¢£g– R™=xæ_·c=-%ÛžÕúøK,¡Æq$#(ìŠÕ jzÒ³aºŒŒ‰Å<9ý /7‡OÛ«•ÔøB!¯í—¹¥.úÉZ¹B­¹Ï75tŽd¥°†Á¨4Æt¡“‘ã…̼zVŠÃúº}Üd°"ð>¬ÈCÌOùÉq¯B|¶‚#cœw Úwf¸Ãáœô ›WŠœ=w iÊY2Ú9ëí{š3¼ÿy}ûüæê€k0¡ïÊuô»ž¿¸xþ |}Ùno6÷h­ÈÔ™†Äv€Ú'¶Ò$Óý¬e;׆¥7uèKÅÕí6ÿ#ä„·sZ§uý-ÔúÅND‘¶”:?²÷|EjÍ(Åž§TãàkâV!h8FLª%ŠæHàyx»k4ðfÇø$¤R~«Ö¤½ <¦¶S’Qw E#‘#î§F,Ó¸šÀî«¢ïsHÕÕ_gý&V#4G• ©hMµ(¤^å`Ôa´ ýQP’¾ê‰ †pI„Ô÷L^@Ž ÿ †Lëör¦Z]}•BsºeùÊÓÙÝQ7›+ÏÜ·ŸŸAìÛ£}¼ÂŠêãT SÇ‹%¯*õt1|–pKœâ+ذd3-ë  N΀Eñ&ሠ€*Fw¦HDma”»Cˆ­Èì¿H=ãe††3ž¤R¶=u@î:âÔ4 SA=´Ä,…™„8ÿ¬{—ðϪsxKïðÂ.œûU3«oÚ»=[¹TÄvœáSM‘ïÊåN ãßþ%Ç￲ ³¾X†Ÿs<ˆÓgè4À>«K†º4ç_´XñÁ*4&9>ú„v„x ÃDhQ RÎ ]cYÀcåp×Ü—ëYÀç9ÑTLILØ2™sŽÊ +œ5´q%1ýp³¿>l®¾[ï7/×7ë›Ý?u4íéÛùG @>ØX¡‡;v÷¤]ùŒ²@0Ûêˆû„u€5ÔnˆÔü+|Ð/åÞSÇúm;,õ ç˜&޶0°2`ãa£™p6 0Fv“µ;ˆgÙž=ø°ÞîS<\•’3¸÷ážô›•*cŸF«‰X¤J6vàþ|ñ©{ÿJÊ ¸çÊ«†ŸfCiœQL?£Î¹5éVjGdPô³ 8qØK\Cù¦jF„ŸšEÍ<Ê/˜y#WˆPŽŸ˜–E½È‘ýûÿ² »pÂZ¨‚<¨Ýñ\·Ç~.·¨m7Wø~"îw<?ǽð†·îÃ’Nln›Ý¬K•c. Þ­3:tÖ·²€„­);€?ì6›•6•Z‚ǽq쨬b?¼zþ¯?<}õèåSÛtØn¿ïø¾]€ÉÏž<|¡0ÓÊL§&Ç3íx2<“«ÿ¡##`‚Íi0 ýoÀ+ ½*Aûà1¡y(ÓÞÉ Ð^Y°Íêù€½:œ}¿¾üÙ_ê†þÀÉÖU÷ÕÍæWj#z&Œ—c «td„¾E¡µ5U“‰ºÎµÁBhdRŽ#JB¢TÝ{ðÃ~³Û?Ø­o?=¸Úü²i|Þþãj¿ÿgM'ä_ëÝáÁþÓz·yÐ^¿ð¾»:¼~ÿï›ËÃýí?îù6]§ß¿¥&Õë´Ít;¶°ÿ´›¶þ-…ÃSò,äô¼Ë€5ÎMKذ´„•Ù@_„Ç\8BíBCBî\AÂŒÏ&‚¼™_Ð.büí´íÀp_LxƒC¼¹Â‹G··íï.£é"I^+qàÉõ¥œöz÷ûýËíÍÕ³ àÍŠAO’wD<Õ>b Ì9„Þ7ðÞ0¢cI#§cN5¨F2}Œ -Î –s{ø´Ùýz½ßŒÊxý}Øn·?ßÝúob§%Ü’c—–¨Ï"Ô¾Y„Ž\=#xÅ0\üðF©Cývà€#¿´\6 ¸ ¨nûõá°ŒP¤¸Õ¨{0c çÆCT"DÓÿ®4ÔÚhm^Í{j§¾Qº£ í]zJš×IovÛËÍÕÝnóvó¡Ÿý£ïÎ/ÞvP½}'ç„d*ÐëƒV:$Âë…Ï‚¥ˆ‚% ¤¡‡ ¼ü§ç©5-Ù™jXêE`i…ùš…yÀ0¶ 4¾Rq&4Ëœf¶Ìqfø³{)ª¦ Vº€Œ]ii«0/æ.eåÆdYGc sbÐ}#Úr¢m‚h“!&¬t§¾Ò:ó<7BÅ’†1,,?3\§=cjË!÷'æˆÝ”®‘yf\`<# õMÑŒß!kª3Ò„g ŒH“å“ÖÆìD¦Åc#$òVÌ›ÜÔVî¡{D Á|F’v·­UÔB¦Þ8V•¸­Ö`ÆVšÂ^ªJD¤W„ï:_9îúðâ’«`¿9ßKû6/Ô”¸ßÑïKõ=‡‘}IßWJ±¡Æ¯¯P#,V¯Œ<†%@–rôìÏZiþŽŽ{‰Ocð;ó$º°k¬ã ë8ø'0 ޿ܰ« Íó™ZÕRÅñ ³õCGo¤\% ЉAõÍo[ß\µ›Ê[à¦ñàˆôm)·ÛÛ§¿(z$¨RÕÃéZ5£°qAbZ¾ Ò‰a­ÂVô^é¾§"& ¢¿Ây¯T—ôÖ;$LÎv8âØFJ²«3l¤>ãcHøo7IRÊVF—êÖ£ ѵŠDÞ1ˆŠLHI²["²Kl-"¼¾FOyÒZ—ôx‚-ê@jŠ Á=ÁµD0‘6ù½$¸¢’› x Vxô{å, \ØHs@p sî újLv)ôÕ€ v¶s'a…ºeæ§®#‡Èù·j-ÇÉ\çVíÙ89ûÙXñ‡q’~Ëg)gù‡‰Õ%A äémåYu)A3:F]qª|O1¦u¡žO{êZõÖ"[™(D¾&Š(T¬¢Öe”(”ÍœC©¼ Uœ~Aå‰" e]ªï© &‰B©ˆR¡D%ONQÝ«Ž½•}`WÉœU(þøÊx¹3 aËÜY/ä ëf¸ «¦Îœ‘r|=“#%Ú‡%›ˆ“BÜ!âM€ [œ,ëQò‚âËÂñÓiŒ’tŠ,…Ã{é?âKEo;ÈB|`©$8àc ª9ךsÏ™›ð9bHx¡Ý^©«Ä¹š %Û–ƒáô'O{«(Åzµøsq mˆ kÚPéü %LT¹po'£| ]O$áæ |ÕW©úÊQNJð^†";®ß&ÀÑÁI7ç¡:q ¯"#EIŒ/z$ôºÕzWEejnýï•©WC¸Mîœhý¥¡»³ÉŒ˜›“?S3ÅVÏ)£²Ã7ौËC昈٠%52ê8`"-À›>þËhåÂûÝúúUh9w‘ˆYÐKÅÀRÁûγE+egÓ8¬fÑSôºtî7çö'úì±W²×$µRu•SÙhÕ¶™¦®cƒ|®îW¬áBiìmÛ'„SÞ('Ì‘*5»Úqš€ëe¯sƒC$}uƒ|œLw²ã¶õKåe¡½g06Ö*÷W£Nô·&ë÷¨É¹G6I¨Â¨Ìh_wØ"ÓµÏaF^:ΦÃ|Œú~ÝŒdbäœZ94c'\×°¡ðq'WWô‰„Ì+<‘à"ôùâÂÆö qŒ*³QÆ D–Û¬q¡ò˜4 ¯uÉG]ôVgÕÎK°2TðëŠ3kת¥ò—P»ÌsȤK8,,œ5(h¯+Ø›o¶1 *2ŸdêÆ–°øë©(F×Ë·J×Ú{c0µã]d“Ä# Ë”.6cªcú¯¿r”Q˧rcÐa¬€<Ô°Š…]+8oÒ<9â„—œ+¦"P[$³Á˸›&"xxœÉ"7Z5È™›q&Ø{¬ÑÎúتáL2Ï%£þŠÌ±¨ÿQÿX…1­Bê OH<äIf}`¦’s›cC-&7ʸ„“Ìê,ý$׿$믿ö“Ì”=V®y’Eæœd»ŠÂ¢œ·b9Õ5 £¦åÇ!7"Äx±Ð)¨b\b̤‚”åMÌg”>–åu‰°‹;}×åŠW4}{ŽýË‘Á\iGîð´Æ &jÃö9Z—0”rfø~¢.î"jñ¾SÚ¬E÷ý/¶•öü ²±%*f,=sZñíÈ>!!Ä×°ûöJ]õ‚Zõ|lÕ§Dìçƒ\ÌMX ôqœÒݰµž½zš^v‚ÚK2ß*ªN^¿$îŒ_¿‚Ñׯ(ÉKhËOìõ«N’àaÑ‹óÞÈͪúÖ~í7²\ÑV- y#—ͰHpas«²t&nýÝÄa%Páë à :·j™n\ÓÔµ¨ g‚8êª?¡®ú…˜žD\˜©ÿ‚ëÛðìßd7!’›ºžöé¡í,¸µ$[+²µ&[²•Ñ3Z9ÇèˆwFÏÑdô =EFϑѓdºXGÑ‹ø.c†LûÄÉi4xÈ‘ÂÆ?€ÍÍ- €ˆmT®”—²›¡>œÊ¦5'èê}u¨½Œ åÆÚ`¤¦Ü¹aJÏdƒKP+k˜Ãq|į (.¢PÓ²AJˆÌL2‘Ó«°¤âô*'O^ÌHçS¥%ô rzÊŸJ±zÕŸ!ÃZÒV­ Éê5<·«Wvpzq&®^¤³Ä Ú^]z‘ {59µ‚WCUÀ8GF+E_[ÕꟆ©Ü}½s2*åE"?¦ Z¨ö˜%¡ã%¤&f+-]v¶u#àixçç¶+r3ÎØÙ°Jo½UP¸ôÿTdúhW%™„©i¥4åìÓ³¹k9b4ôsò`zÑŒçéK—P±kôÖé±{œ–?1º$U±§µ=¤C¥ÉÅWuhSZƒu MÆ£}É‹ºH—¯.ê¦vª^•3T2M9\ÉG]Ôleñ•¤ò+»¨å~/Wº¨ó¬¬í*Á•ÅöNfˆ(2x¡‰g¾$¬ÖSCæäHµÈ5œKWù¨ˆDì&4lÆ›Msmã5›BŠ8Ž4³i?™¯Ýl*¯UxF ‘L$òLE0â0c]ïĉ*Hä™òñZ€Hä=‘è{üʉ„ZÒV­ I$ræpóve­ÛŒ;qM£!¥ ؽ€,ÉqØB€çT¸Úöï™qí¥Šº1+ 8Ì/@j æÔ§Q먆€Î‹Šút,ú§ ]X÷¿(î _ gÒŽa& ªp½w†ZxÝäÎújxv½óÑh³ùäëøi'ƒ)Å©<$ù Ë‚ä+ÏI'ÏKGQ§;üå9+#´Jŧ+ÈøŸ@ó Ö¯UËEÒ*ηgž8[iÝ›%UD°fØÏ‰çÓ~–@ž¥(âmcºÎ"R|º€øùY\5$µÔ­ZYò ”ég€ç¤é5ç¥ãùÔ¤{>å\Ìð|bœýù×~äú©tø&ÑT_=$­°yͪ8 v™ÉÉâ/ËʘaÕU¬³ö:±ŸI¾”Q6¯JRS1#ïóŒ«2:Es‚y“VÈÿí ªbºëÊ3¢ÕÔAò‡ÌÓ<шœ'Õù(©„ *!çA½Ç5ˆ³q9O”}d¢É)•r7·!U¦0’f“ä4óÌüch¤\ƒº0¿–uc~-j½‰*p$à©·‡!Ożàõ¼];¾¾Zs‰ #±•Ÿ >Í…z GôZ`NÁZ+Hû÷¤ç4¢AñD&¨±UJ]eº"ŸØ©Ë‰1UH8¹*'^„t$÷"ìôÉâê.§=åa€)Oy«•OÉgì'é è×8”3Qÿ˜|㎂tÊ/ÿtÎ8i'¬ªSœËYM°U4yIäüb¸WåKóÓ¨-ÒwCs ã1b"TT’¸9³Ñø5Œ:NµÞ‘ðkêx2æfó‡†Ç4WLäï’N,RØòÑK­cÄZf&P´NÑxv§Áÿ%fE)VQ²T”öÔh†‡?ÎV6ÿór9Ö~VêZ º;!¿—­U œÇ‡aÄH©š‰Ä‡ åJ`i8pòÄÂbJñѰ°3¬ø(V½â£¡“r|eй~­Z.•n£)`,û°Œ„Û‘m²VLx/F[¼üüfG|£yÆHŠ&¤†nHŠ$Ì:yáÔ$æ@S‡Ðª4íjXQÁ9*n G-DØÎp=é-œó>dGPºaB¢r*f™_·À\xdI”Œõˆ¢(•S@%:®²«E×BL¯ÔÕ©òé*"B%ŽÒ!ÕH9®ÊÄ¿Úüúý]·Cíz¿_9àUÓýëý‹íåÏ×7ïÑOÏe%;ï(œ²¹9ì®7ûð ‡­Æð†©UP5Þ»?o~é©/U*þ” ¨g¿¾ú÷íõÍ=°; üREMñfó+|Te°L ~ÏÀï TÚ ˜ªUŸ œßçõîçóõ‡ €¦Û[€Q€²ðf¥Ïý¿ßû¿þ~ïž‹€¹Ê©€0Çšù]©•¿¬ ¢ÀhüB¥D¾ó»÷)¥s¤}TÀdmÃPÆÅœrTò²ta¨¦qnÇx23Ž»NgTâ,C,P‰SŸ‡®5¨Êx1m÷ê܃u8myg ·®Ic¸'ë»}T©^!_Q‚1‡±üJõùòùx$òñ äsô2T‰'•A<÷±1£°Ñ‘äÇY•#á1ñ¢œ _ØÉ(ÈøeSx\$ã1.Æ“ŠÇ†Òâª>Di†Ø¢†Ðd1/CEÅtwQýãêÚ%¸¹Øpàºc°”¢”UF;P9Lc›ÌüÂõOmž*ô5S¸¦T •˜ªR±¢B8¡Þ¬ô朗ZQTêwu‰4ª—2€èjk"Ó?õSý­z_‰ Úo@‹ …‚¤Põƒ uª½R=T™ã0 ¡ ¤Â´B{ Î·qÇÏðsSf –ŸÑàCN?òräa£)HJláp¯Ý©x£½ª<B³õ2ëñQ $øþç,S*l–g•O¶9 ”" Ší´í¡›eä#×´2n3ccõø",åÔç ÀE› /l€aYxIàî¨tóyÆ´eí$2†•òž™»¡oæ¿1¨±˜6¾vŒEΕÁ¹ª„|¬pÄUVø*Æ'42²âG†—TèKÙG“Z/髯‚.+ãùêîóûÍN㤠¹+„§ô,ÁbÙ†Üoà: >í.ð¬ª{0ån˜Qg36¾ˆã „¥Ÿ\ÄÊ,"çYŸb,bw—)ÇEG»i¬Ÿ‡SEt$ ¯#(§W‰)Ã1'î‚Ìžý•¯ëÄëP/¸M©’Ã[­šö$PÆ5—®gô"¨Œæ•ÙYG%é¡’2n⪭ž%îY¥D„u–åÔMiôƒ‰8 Ðtpáæ=ŠÕ†Jô4´óqÈUð…Ðxo@2¢êW¨Š²eˆ¦è9jè/8›—™(‘Ò:b?"ÍÆWôRV»¸ü¦°ÁÄ„üúp# o¤æTS*¼êSͨô¢kp.0£Êèd{TûØÀgM ±{Fõen]>Æ$œAB70Ž:™‹áa7:$ Ë>´ÏjVòøKöT‡¤Úx«0!SoTþ¢ÔdâD,‡¨'b±ù¢:Õ„:yÓ#ù+ÇÄ©¦4uµ,‡vWËrSš¸Z›‘?N$aðgE‡‘Î݈¤  ”*dB³IÇ9òc¤ ·$áˆHÊKw${Ùã9X«ñÕÃLÆ1¥Ë¢Wv?X¨s«Ê¦=í ¨7HNz ]àðõï‚+cŘ—pĉ[²½Rë×ýäÄ\íRÑóR•"¶ëÐÙ:"Á‚j¤_siæ…7¶†– ¦O 4Ec–½ L'?!ž/³þEïsNx¦cu\=!IÖÜÙGf%þ)ºñÌ.(Y{À:ÌÈX+d¬©•¤$\ÕÈhèpŒPÉG—ø•µ|Ÿ °’Òy¡v1¹ö·Îȱü¶}JÈÛ~ná¤@JÝh' Ì$=P½ `Îïà9¯âVxæ@‘ZD&'Hm`Ç-­·ˆzÛ¾$EþRèÑ”I§Yfòâ\ôêUsGw¯ÅOŒÂ£Hf«ZÔ\|Ù›X œ/yœ¢0xøžù=Àõ©ƒëcÀàUòA%î;§×i–g6Û¤×Ìì¦;t’!ˆž‘}ƛтØÏ¢K…FðÅÙ[ØÃ£·ÞZ†Í¶z»ŽdçCŒîó©78Ÿ|Ãfí|‡L?ö‹ë¶€.¨\òмÊÕ¢¶Êˆ¦—S7©=o>oF^õÇúr'ða{oB4|M&Ý>rø,vø!@)à*‘ÇUÄgÚ¡Jß„e.]ÿ'B¢2¯ú ñfbòõèäGâdíH:ZʆÇ.Š0rò܉ް—ÁÚgi1ö<ñã8ìžá`ù@²p™,¢²®€ëPAs‡Õõ*œ+BÈ<%ÛÏ›„vž+o-0æ0– ¬äØ~Ö-”ÁÀ:¦t'ÙÙD'S s=+¡#®¹A­;Ä©®_Ñ›²s“ö¢pa}7+'ØRèûLjì‰4Š^&‹âdåØ$Ÿ¸ØÍq~?Òã‘n4LôWõrSŽ{w—I©ìõ†û§&&÷›p²Œ¥Òs€¼1“ä‚-™fg“O§'Àk7s˜îDìŽL_·íæãº}³ÛÞî"þÞ`eÈŽI2$Ûjã"Tɽð½QÊCÛöêEÂÅ‘«PèŒiÇò\ߢ ß§o8“„{ºT÷T‹kì§y%ÓoDÊuï17WC˜H{ù‹D½þºH±JN’BŠë£“t‚›fQÁ2@s÷4›ä}™d¿ºEX·çò˜íeÂÀó¢{Þê †Ó HX‡’T)”² &Ñ‘zR›ßÆ5æxþ°Ã™Ä|x-Oɲ$¤†Á&YÎØ%DHyl2D`ˆ|»ÊfyáF•#ëFîkà­ýðÌ-HT¬&cß~l: ïHâƒÔʾ'²ür«¡|y}s·g`fY#´d>?í Gšª0 IÓˆ°t&±–ä§ðA ß‹`„ð ’Øëyç$5)'ÉêP ¶¬zu Òº*e[Y¥*—âÜæà%˜øÓ¾È½ô›»Ü<|3«³è$Ùì…û×û{©‡T“3¿a^`Ô“¬?«’Ê+ý|¦ ~J›goo¯é±ìãðk¹ÈaEÿ?¦6,Àf\ r¾~ØØŽ |ª«é©¬dBª"­³Î3sn:`”>¡òiàÌ[îЃ"Øgt)èåöl5ð7þ¼X£³­åKM‰NIE |™‰•6R/51151W?=r8¡„PE8qx«lJ2—è×ønPå¶X‰Ò¤%ÌÒ¼>¨{Eoõ]^YâxÛкf=x3£Bâ1­²ücf¤Ï!û¢™Ã¸u°nÎì ¡+ý“Óc—SOq'¹*‹–¤MâK)B(ÁÍö¦¿¬ûA‘*(^-T`"kë\õOãÎÚ²82 rÇ€¬ïÚú¨ÊɼݲRþ‚‘Ééé”å¬à ˜å¬’Ô@FsoX2yY)Ma¨¼æc,§QoÛvsé²’Ç8HŸ›$’ÆÃdò0É|'×¥2™53fÒôó³–ýZ9 ¨Ì¸}–\•1W³¬Q³Ïä8±CÙ×K[f‰ THòÑœAõ“¤uVýôFË;"&!1Ú[vEr™ö–õ¾ö88ëÉ ð•Q‚Lè†8ê‘f³ªæ¡·M&p碌Êò`/¡Ê_G"Ý¡>ʕ皛˜,¡Y+âZG¾Öþ÷ÐuÅ:=ú¡ÈqЙΠû©ËFó^^ð–’ûKIxþÏ%°P"m¡$#‹|#‰n«(}ħ–«Ôþ*J ™µ\ó@ ,WZ.ÿ{»\5:ÎÞˆÖ¹U+ÄÏ7~¾[2¸6¿&:zìü®bérvÑ”öá~õà>‡g$²S±¼õôŒôà&í   ÃÚ5Oeµ+ÌoaöêË-.ˆ°0Û\¢ò sÙæ 7‚HDË<J6Éþ`ƒ˜z2e¿ÊÔ>+‹Õ+íÛÍz‡ø×D¾³, vôbù ±”dÊg Ä4lƒ±‡£JM9ÔÝK´RsðCYY;=MdŒF‰ O˜Ð(ò@xEJG˜’áׯMŽEˆˆH$üd»qsB%Œ î«c˜³ùë1kB-E»ç7Ÿ6»ë€°I=ua°cû†¹Bùá®a¹;ì1VE ZN©&ÕØ!¦ƒ#&œ|Æ·Ø„e¯DU_ç#H.Q!àÿ•¬±c1ʱ(·è|ås‘rÌá!‚¦Ú`3çùØ1—N®®h M JùA-N’V¦d@B1i+Vƒ¬'§~6znZãXìYFQ®ŠL“–…iCX C\ša%Œ•—„wµE¨`_äCö £•:¦3$Û–ÒÝ!o yB”5V²ë·œy¹…W¤¨í _ÑÑ0wdzq/øF^oãAP•áùÍûŠV»ŠBí2>ÖHÕ&œÞ¡Ô¡íeu¾™¶Æ‰FŸ°:úÒ®^®lÛ|탠‰û‡^jûŒñ}£Ð sm€üš"à5H5H;o{¿{õ÷ùÐ|ÄÉ™ú™“OÚ)ÓPW§vPMO37Þ™fš6ÎËÙ?·%ªãüʕјßQh¾¨ª' ÁòÒ¡ú¨6Y@£é+·Ó¯·‘;ÅQ6Âï t@‰¥›vGèÕàZ°é=Á‰Ô?ÍÉ «¥SàËLÇ“âÕ/YmQƒAí`Á²Õ†ƒÓæŽ/[í𱻨¬Âb¼ßå$òÔ©ºÁ G[ý†J+,Rc—ÒßÎt˜¯‘6 {tœ®p Un1‡+ÚfªÍk¬€ÇKA5 Dµú¿ÿý_t½úTë0&â$ºû:䊊*–"¹Ž‡wpR%qCÍi MG,eä‰ÙDÈ“ôÏ¡ {¾Ü~»¯|çê«S®>¾r¯>cÊU ˜²E¡ÔŽBy}øÔ]P–jˆaplr”ZüŒÐi©þ¦UZül\Û UPS-2œƒÐå8ÂÆS:åPdsÀ ³t6r‚—&S$Û‘R“äøÍÖ"ãó:°ˆˆãØ$ٞĊ>ެ1¶Ÿ*9Ž Ó‘,GÇÊÂ>ç8Ù"Çêâ͸gå”§ÃÄŒ‹öéo8-Á×ux«,U Ž’"£/ÁÝ.ħ5lü8' –~´¸±ÜhWYå\ÛŒg>x ã#=Ϩ¤ŽwÃÉ`ŠÕ DR§©ø“æª9ÖÂ| +<Ä'´"™]žÌJzy ·sbÞ#.ž$u @:ß^0WW§‘_Ä\ݤÆÈç!x̤Uóä“yÔ ‹øõJ²Ãuh„–Q®=Á¨Ç¨Wa<Ä<Ú•î"VÔŒax±òΗë"–S”J嚦T®î ³#¨‡Ïô¤ˆÿ~ÂÏÍ0 úü„¢w$ “,é´G28’ùÔ‘,RµpyTž˜¸#‰õQóŽ[Pk„Uv!½A³˜b„hŽPØkô%6“ !¸qv“%ÖPQ®‚죩(ÌNýÁrnŠÒÕ¡¢RÃòrýóæûÝf3¼Ç†oXì[hó‘æ æþ7,B®®ÎCääGxñùT‹æ·|ÈV$ Œs•ɨHp9 GÄØz©5ëëö±Ç’†…2DÒò¦$q)oR|¶«¬+dÖòÜ&­uZk¤Ó¶‹Hà}–~13ëÆ0ÄÊÅ$åm^¨ÀôqA‚i‡´Ù ]Ù"œÝ0¨/ b'œU Ó+dᬊjûJ¡ª!;vD’I—¯ ¤ê5¹{ש5öŒËKäîÛ óáÐòlEJ#ì !aHmHUM÷2¦d t[7Ô*Ulå;͉ܘ¦„›Q¡ù ¸I,"q±d'‰<*¦ÿ' ™Úe!Ö€ÐdᦃŠm»³$¿(ÞÇD¤|µÚú '<5Æ“PÐr0ÁcF3ÎB,f aœÉtÅÑ .•Bs)ãç\îZðÅf‚ÝYâÏÏ/ܱÙš­¦ãÊoÒ8Û7õ9>>;Qk^"+ÈåöæC{}yØÇ®U½XâÔšx)‚Ü|ý-há šù'˜|Ä4æPõ”G@M2R„Aµô§ÞÉF¬2'q'T\+@ž à©Rå]ïŸ~¾=üžœúNŽ $ “oŠd*#µ. J¸¨G2àŽÊE¤l1mœ´Ö 8ac3|mX¼Å—BñB)UeT`Á¤±×Ƈ۷a†%ŽV{¬µ!ID V±åùtA<Ƨ;H®Í±›,OÃ`Ó³dËᦷ,›^-ŦKB8Ýt*ÜIÖ~lÿÜäêM;°Q]Á ë$pS›Jj®ï´¤;¾f iq"„]×ê±Jsº†ª:Dª4 'Èj°]¸rëÄûU¦º•YÓðKFãÉvÖ»¹Íìx0£³ÉµÏ?Ô Sòþ§±=J¢ìëU¡/úªèÜ…ÛB¤öøúÌ)´Êj‘Ú»þ¶ÈݯzÁ~ÒÃ1Ï'@xç‚àÂ>Dï¼s{°{†T¨Qv|:Æm Ð,³ü²4•R¸‚•q-Ùè¤L­ø¥­Šé1Y̘ ÛYMÄó&"ççÃäb¹*'ö%plø°p?,¨qY»È¬#,í´û‘íôŒˆ-U^€šÈ÷ï9n I&M5ÀPHI"ODdÜæ“ìŠO#2³,³9Sµóz±EÈc!‚ä,›†-ƒ-[¶ü¤¦À&‘š“„ T9B8BåFžg^Fœç‰' ]ÎsᩉWÑ“\DœçÈEˆ:Ï)Ì_î¬&Ô¤Q.!…Ýì ¿@Ƚgèm¬ ƒIÛÕ›V‚áAXè+¥mð¦›s–®! ›&R‡:f‡_&'æÞ)aSO4]Ñ1¤ È”.àåf÷1© «Î„ j|Ô¥d”zy_¨”VÖ'­ “‚·Çv¥:#Äÿ@˜qÆ|çÿ‘3sPó•ýJes¯¢À,êêáuøŠÄjc!b*‰Û‡%Ÿ&h‘/Ì)ê§”ôÐc׋ZÙ r2äG°Räɱf%ÒÇ/[n×>œWnVRMÚˆ['PSÆíPÓÊbqž‡©iÖ Ô4O'§9y1ŽœE¦t«ËS §óêEĉnÑÄU©'ÅÙ±ô,À2Œ~‰k1 Ì¥_˜SðÚÇ×…)~€QX€¸&§³ÂiЗ%®UDÂdâjšfÄýãÑyrœÕ˽շÉ&ÚëÖÇp‚žy Œü^¨8{°ÿˆâòQ^‰é Á%]ˆAö_~}SŽ@õ”îA'§Ÿ,R6í,BïODg ˜)J+…±E±Ê…¨ÿµHIR§ŒØÅöL ªŠL ¸ˆÔâŽËAB³“a( Ñýo=¹L))Ô2 ˜ÀhèÝ_&\-”ËOg… fœËo{}µ² ^ß$ªUXoZ]=*¦Rõ…“½ç¼Fz«§êKMTD\41œ '"5fœ|à0ÇW‹è1rC‡ðÇÎÉ*ãO«)w-õ 3ô¨§ÍäÝþ?ì˜Ôi“) 0ä0”O\o-T£žé,ÎâG\{§ÝÁl–“3ì«" •V)N° 9îºf•9¬p–àÝÄ„s-æI"(ÂAéZ˜ÊÓ'@ abA˜%4R 0L¦–»0͛ǿá.ηJÔ²EÒà\œ17ªY§  ¾‹žúŽNOÌY‚nÕn8/°ViQÔ;b$ê›çÒVòøÓæòç7ëÝæF0DñÛõ~ÿzŸ¥!`ö¢0?œ«ÉUÿoœDK­bL¢—"§”òò²@wÂiŠü¬Ý¾_·«AÅæ“åZ±r2­Äuïùÿú—rJ´È@ïšñâkØNâJñ/Æo™¦ F>w%Œ'‘/E-O¸>þ`z§ÿ˜‰j•ÝŸàŽÓUK’ÂKN]n2'bó–+­ ¿u›µù~·ýüj{£hj4lKx—W̸ą˜¦€`Eá&£( wÎGR•rÖ¨ì`ÝÚ<ß}ÓQV{™W„¬¤wORÁû7Ûý¡³ÔßËê”»*Óéó `W®£ › |èæ-qbóŒJ%AS|ÃÒ£ e¤´0qîPJ78ƒÏß6ŸßnöÛö— î­#Ò\àwðgüÁ @áOÌ]ËA¼G¸Ly½Ùí¶»Àó¼{~·kÏ¿9¬CsË«ñEÌ¥šêÍõåÏ-Z=oÿ{—Û›Ãîúýêóöê®ÝD3œÙpæ29˜c€zøàÁûk p(ÌCè‰s—Pß+<Ãó&×Tf!{¶9hÜ|µþŒ–*HÔæ°‡ŽC8à‰ ËŠì$X’#yµ>\Ãbæw¿ý_7êÙÿŽXF…,ÜBö%7#Œ!dâ…Tt—ê÷ä ,u¸9Ì›Õ\;ü4¬`5WÑ=¿Øè'yUdUÞp%›À4Fò¶E–tnûiJÆó}¿=ñŸŠ`‚,;œïžDÄÌõÅ­D4˜lî—½%3ΫŒ Ì<43—ëîæÐ±.Kwãáu!ÐZÅyˆÍ#›Ã§í>“9œ†HWë ÷ŽÜñs¸&"ùÕ—çšðøw7Áf´J«øqsx~sØì´ü6ůŽJÔ´ámrÂÎÕ¶wØmcþÞ 펛 ÞB|ÍMláøìqꙌæ–<Æ ž ˜r+‚Xa’GÀŠ GìœäpÒ°Âk>Ÿ€Lû»¥Me‚»ã•;ÝÞ¶¿/ŠŸ¸4ÖlF{âôœÂÙÄ ‘$ÈÃò¤!F¹ bð%nÇa"ÄõBp’Gì=1Ñ™²d´b˜àÍ3N[7w ÷„IcX{ƒk:ÂY;Ì}dîïš±Ž|gB‹ÉT{„«S2N«™º” ùŸ¨f*QWñ®™:ÊoPg.Jê&D(b-pf´™$»×¦Ý>Å‚Úàå®Ñ~*oL\ñ±â /¥’ªÝ®¯èÇ•T+Þ’zAŠÑEï`gâöÁ!õò¥ôf{ø~{ws…V–Ðê M:G›ÝÄ›áS›©•¬i)–ä“`‡ôLÄœå4&ÊÎÿ9FgKѸ)JŸÂ¸‘1|y¤£À?ÕŒúºj_ßnnPó‡ínsýñfÁéPSª´^ÏÐ.§c´V¸¦J¾¤úkOÏŸJÌG%Ÿ`MÝ—–MÓ—æÅëGOÒ6—šÀÜÍpšž8Îã;ë{žpå ¹iÛûëËËÍ~¿ÀI:ìÖ—‰‰üæ®5^‘™3[ óÑm»>tðóýW]Ôƒ‚=“0ûÎñ]ð£Ûë çýNþŠ^h&š|t= R…Ñ{ Úﻫ`&Ùéì‰épÌÿÀ}öAª-H7›_Qg5¾M^ÿ·Ÿ.Þ>züô§—¯Ÿüðâ©ûÜrÂ¥¶<½ùeì„AÓA&™ç{‡kbæ»"Ú^ªËlõY£áCÿÛ«<´·»ë›ÃS× a½ÕZ¿~…©~õ»õ~sjGŠ„b/—¸t¡WÈ|ʯ^¿zoã-¬ c*á= 耇ª…”fî)•Åý_××ó£®Z‚SÆB'´šŽFNc‰mœ£v„ÉÞVöø¿>‰Xj±ðöN0ÓŽpØ( 0ö³ñ£q±h^6ŽÐãôOk¤O~üúíŒÜ³ÙbärxM‚‡¡,æWwµpb0ÓAŒÎ9–ŠÂ$ÂóF¾#@NÂõÿÑk#-Ö1èeÉQD´ J¡"D‹á˜CX$¡l¯o~ŽÅ7¯ô‹ã‘›‰cUðÉI|”Óí—=ÑHO˜ôs ñfê˜íY‚,·JÀ©³’÷åæ·Û5¡ËŒ™¦4S¿Þý°k/¶ÝŒØï«—°âëñS<‚XKyâàC‚-¶¤5F{(y‡W›ÜŽÄ2‰~8£ñ +T°…ç X6j’Ëÿá틟ÛóCÇìL ÷Ážq<Ú#ÜWÎ#"´Ã‰ªKõ$̼¬˜6¸”øb†&ŸÄ}Ή}VÉÒja¬žÀgo´°-‰VÂ6³ Ôåè7ÚŽégä@e]Žßh'y4‘…ð4%ÝJm`4hóÞÆ,*ýìí I±ú_dJ4î$0ˆ¦½MáB¡´¼9î{3y÷A·æ å£«;kÎéªgdêýž5¾gæU—;Ìg<º±¯ÓAl¦“ca|R#åɧPƾûE˜af|5–/!T,XÊ<Î÷VÃu¡R® lLà*fÚÛsíö¢Ö™,lôÆï ax/ß=› æúåþ§ñç{ñ°aý/ui2KÄ/Aã cS«ašÆÎµûCÈ·EZçMpfr^Ý}~¿Ù¹ëàá ƒ 9jòûù |9p*5”çÐY§MBð„÷¬TŒ¿Çöoµ1çsa˜9™—«iÔ*?êüaÏt_ +Ž;XÎãÅ6´ --RYÙŽè˜É»ÂEOþ«™ŠAc¨Õ :ó{–âñ-Ý5”äsGª2’XƒüÅV•±”«ê^QÑžòOEß Ó‰Êv(ú›Éܹ¦8ovÛËÍÕÝnóvóa¥õ¯¾;¿xÛÁùö]Çú°Ñ)Ð ì¤òÈ[>–š ’3 i&Ï&gË@“/ _± 4Å2ДË@³ çË`q¾ óe°˜/ƒÅ|,æË`1_‹ù2XÌ—Áb¾ óe°˜/ƒÅb,Ë`±X‹Å2X,–Áb± ‹e°X,ƒÅb,‹MµÚË{¼½ý}¥…ûŽÓƒJ3Ëé©óÌêªlöŒUŸüÔ¶ª´ªª‘JQ§â¹2üÈ*E©PLßÐ(É· nFˆÔùÓŸl«AÀ†m&—›ßFÔ ‚‰BŒÊßêæû|™(kȤR Šî ?¶?KurâØŠ@ÈCí SŽÑß>£vòÛ½¥Ìä’qöTv\¥Ì§öæS¥.󱂙ì2Ð`Ƙ:c<¬#ÔDêýV:€À)êS™¢w4ˆZàËYˆ¹2xV⌅0iÞsCÌIÌz¢e¼’V‹°W fXŸ>c!Íób6P1±¡®>P¨µÌÔœyjñ¸l¿"#€ÍZ+T™.݈”ï®v,¿³žëì°‚N"¬2a »ZìN;€(u¿‹ÝVyÈô=Çùr½g„©z¤wŸkòc꽋-—.»®ðá ¥ÇŠ+8i¡'M˜që½nŽ[Ò©Þ3—¿‚üö;Cj‘¶)R±îþ;½rïõöa!Œ×ÇpÒv­Œy©f^¥1?‰½Ó• Lâob¥›ƒë èy¼SS$¢Jê”Ò(GbïaK\°wOŒ˜ƒæÕ(š¿35y Bã3QªEñfT« 1Äu†d"“ sÊjxóøU7ãF±¿c€DŒ[Æ%7»j¤í«JdÓªª£¹þ‘ñ20%Í÷tpó4ºTÅÂ])¸+O<П('3—¿1|ØÝAÂå´“>âs>3>ªç TÎù(›óQ1磑óæ·ùÒ¥.&"+ØJàH/Ê'!«`ÒPn¼Xkƒ¬ÐN¬›¤,jE˜O…¸Ï‹³€+†òêû\ ›êÌu1©T=/¦Ë¦xÇåÇ•®|\kÿ‹zp¡2¤Ê«K%a´‚B]ÄúáÍ{lk=¯|λWC9›q6ê&B¢_ ãì’NAY.…³&w8xM esye¶w=²5‚ØÔ¹P¹þ§|d¯ô°J³‚ú”¼¼¾ê —°Š`½Æ9ýݽ]4²¿ÙE{ùY–=¸­„û.ÁhßsFºÝL« ‰TRÅ(je4 %…ZÓÊCTÎÈaµ2r-N‰b}P¦cà0ÂàH#úõ[y£ûËÁ­²A.s«ÏÁ,€ßâ :)Èéã(|JvfȘE ä0—¼Ôµ†NPL¼Â[0åM¶ +SäÖª+˿ʉçœ5¬¬îÔ®Ëgš¬À)Àâ(kâ}@ÆI/Pž½ýÕ~yÝ;Az¹sïe¦KÃaHÅcœùªH1¼îÍI{|6NÔÏHI°„úpú¦’“ ݈³Š˜ ÂÇ ŒáÇЛÛ#³r…¤‚îb}Ýb%]¥NZ ×åÙ˜d˩ų´lü6ƒK9:´\>·œÁAÍ-½T‹Þš='P%î´D]!9#é€ì$2Ü+ëñVýÓä1 æQl(Op} h ÷úφNúp§“C ×÷™P½§î?*[ú‡Œb9ä•HÖR;{½ðͬîäV]ÁþÕ¬è /jdÑì´3Å}“¾>;>2c 9#BeÊK˪y·jšþôsBm„eœ~žÁé+õߟcþE­½ß þ:DÅ–YuJâógÎüË?ÍüëByó3Ä™êâµ5ô0.a9@—3ÍmX”bQ•ÊÅq&‰0o~ûÛúæªÝìÔÈe€ï æ—V+Š€¤)Ú:äþes~Â&ìm@k<¦Šw¿4Óv§âL»Ç»Mš˜•œ·½}ú[pJìk²ùH¨ ×Ü0Ëîº2‡Ð¢Ü€…>ë]Î<Éô;r)Œäì d•œÓ4J5ŽÂúšþ1ø.æŒâ· ²¯Å=žãÖŠl­ÉÖ†žE`rôì==FÏÑdô =EFϑѓdô,s×TX¬è U+ޏ( ýOEql _|ÃÁd!Z¡üVdçc Y`PQ”9†OÌGÙW}8’ÏTYÒ(úÌϳÁ‡Oå{ÃRp»ö…1Û :„U œž¾ü¿ÂɇòŠ$­Áòzÿ†$Ð|Áü񾯢ŽÐ^ÀG‘²:Óÿ0¤ƒÉü!ÃãŒØAǾ2nüw«W½^°õb³MúŒ L²ê˜¾ôÛû«±Ñ©34¢ ­´I¦f «ÏÞl˜¦ùïH (ùHYú¥aµ~ˆÖäçâ˜×Tá¦7)-[-6Dg«K¨¶kä¹UBÖÐj%1Ñ7ÙdØuBJ‚ºR%Ò‘ª e«`:ƒÊ4Vé'hНkgBdzFûUŸl¥žDíN¢°[Sеl28–e#“0*{ ,? ­Eê€:óëö–úA`¹; õ³¢ga¼xXyªYH([š…Ý£¤Kó‚ó£PL‹ëÏfŒ(IW` :“MÉœ5¬WP?ç̼öá\B4´zÜ¥P†U9ÊV…(ˆz\•°PŸîÛÄ e¼ ÐJuUt à½úICÑ‹<P Ìl*&¬åFAÎmЫ &"àÒgFù¾\A¬Üçó,w Úcœ£ÓóœÇ¸?¨|G’W9ˆÿídÈ ?ƒÅþ4| _¾øÇÔ«|oªF+HyÎJ³{ µ™õÚ°›: ‡£ç±HQû.QHË•¾¾=̱°à±9WÊ3?.úGÕŠbT ÞÿR’qçÈ_d\¹^¥u6n*ÉÒ:Wy³´ÎÆe´<­³#$'§3 2"[y[ß?6ž§Æ*DØ5 Â5 Ë®×TÃ)jvÆ9sÊA°»ŸÏ»óörÿQñž«ánõO¡:~­:m'‘ËB5½0-ÿµ„Ø”?kf0aŒ(ûGkÆF÷R-á 8k= :#f€‰­„ÚO‚èzÉœ6F­¼\òV­0Iÿx!À LåÚ52k#å†"q-8œ-n#•`æ$›”sá ˆ0Hn@5»mœºÃeü^ ß.“³‘H6§˜‹\ y.œ€“l§Ã÷,‰;ž}"C±ÒæJ^ðÊñÐP3hM3å êêPÑLo€)ÙyF Ú‘îU¶a$fÉ È·$L–§•bã÷Äè †ÉÇ)PêÒò…Â$E>älÕù›bó16LÑŸV‘’Iä;ž:“nBE4ÊOG‹x….+E‹„õªQ•m§qVldᤠ¹&ú)¡B•BÿS:„ )“¿›ç¦UËë3 h¡ÿˆ@ï÷ÂBǃ'øÀÔAµV¬ã¨Œ$/­¢&þÉ•®(y鸢°ÊœX#g*cä+Ee´* ;©)2äÀ§HMiµ ðÊpg&fˈ$7Øsë„ PQ8wõWÃùh¸QÁR¸ËuÄ;š!B8ÃQ :{ÑœÍ Àø<À")ôHˆí©£@ ˆ(ÎFž¹V±ãhŽ$6­¢-þ–a yA`YcÙƒtÍ1ÂŒVX"Ï·e¹rsE¢GDt&צ¤¥ºªáÎÚÔ€¼•ýô ´ÖM W„œç¬€úÿåUfÂt½ *ÝäbJÒ0Û`¬þ³0>–‚i¨Žq5í§ìÜP‰:jDŽ mÖ ‘eiÉWd6íPá‡pjgƵqù(43©¤³^Eg꿬 b½;{@Š¡{F4s'O«;"´ž¶4ÖCQØVTŸ˜¨2)u mÎL¡”¡ˆ%´&ÙÊ“´<¯àÅ7Ï÷tçáN }p€3‰³Ó+7† ´3rKZµþÎ4òqÃŒŽQ9#åV;w¦6ä–²P*âºQ,|]š !Ó›Þè‘›3ßÒ)ç:8™-ˆc×Ó•_æ¢ÓˤF§½J [Lúºj€kÇûÅç›´áe—k¢gY×Ss2`޼Ñã–ç9„n&6z˜%®´ 5h”Q¼€EaŽ5ahüÃÉ+ÇFÙ 3d¸UÉ‚ÜQoµm&tëË¡§Xášazتïj¿ô¼)é a‹ÿú]ë Ðí|-?#¹ë ,Gl`$o ¦j˜ˆk꘰Ä~ÅNàí5*³%J· ƒ)ÌæÌ&¾ÑªKƒÙ†ßõøg³A2¹<ãDU;1˃IãÈÅK bÛ¶~äãºàO3²Ëi7=Ü*üÅc‚©8$÷¬Ò>•i.ªrjE$xÖ¨˜I4†£MÄöœ ’Èô4Ú¾î:¸”Щdé¸`ú×f5ß—M_âS¶œC¸;IŠx7zî8Õ‹"Þ\8“«Œ2s²Â ¾%Þ\cHl— ·Îz‡5Ìa^%ZûÒ‰[ Ÿ rFÄV)‚Ê3†¶šöFO&¨¹ÍÜlªTTó¼¨Õ?µ­|¦ù"Kž|7jì¹àû“|»ÕÄ¡ŒÈ¹ÍògP˜)WždÌñå%4 2jB‹.­Z•”åèw+i!Z”d0¸Å™ïV-ð4‡;CoîÂT»À#’D<•Æõ““í\g‹ç¡ ß„ZÀ*K|ìJ¥Òʼn¨´>Ë(¹9SY?$5&©t! >·!狼ÉÔAó•\–Ý•T«¬íÊ?• «þ!cK»'Í™/މxý ËMì3JÓÁý¹*–³È*󑌻?…0Sg¦‰WÖuLR 4Š¡TÔ 2@zÌÊ êAÒ£"D€ÀÛ€ùs[æñ¹àäX1X!•ôvé§H(|}œ­¯1n·™«Špí'ó¸Åöu îçyWXÖyË*|v`ŸXé õlpÙÓt<\!w­q¼n €ü÷ñ˜© ÀÑtCCZß‘t¨Š,˜ á8 æTc™ä ñµAE\œòÆlÕI^œ¥€öXž…õÂNtW–ú®,lê­Lÿ©ôE!È,d‘rY•Ycþ—UQš›É^V…T—U÷&!A?¤;µú¸Ñ«$|~¹9¿EÍ Y"¾ Ü•EL‡e…!{ì ùïг*ãgUfAúq:[C«0ðËKœ¶B…¸ÊSE6‘[nRÉNÌø¼bÏ! "š›<Å4:Ðq4Jí¸Ü¡¦—€Ì^Vˆ ébKNtÏ o¼ó Q®úøî¯ÍÏW™R”ÖÿDѨR«ÙÊ!ãÓPÏc`kž­ë3ÄÁ›¡l8:ÛFX¶©(UY¥Aµ£m̯M*ÓýZçÜüZ ó‚È2¦‡%’Ãò¾oDƒGï6ýi:§*‡M›kôTŽ7ãÄ1î¦Q¬3KRCæ7"Œa5hÞN¬FóöqzÕŒ+Ï3K¨U7h¹ÃA`†›î7^ÿ½ˆ±^NH³ü5ã_GêœÊý§À‘o˜ö§¢F p„ü“áÈ×ÔË7|ÃWèy¾*†&qw¾J ¾Js×’WêÃüe!OUB¶üYòkêå+9æ,ÚÜñã "ÑDºÏŸú¸¢F¸X×®p^ã]ï}Óµ7=È*„ÊFÉãØ aê ‡ç$”ÅQöé¥r’øÞRôO4&O‘Z»ÚD°AKýSŸABF7gÇ­\ ÏÒ‘ù@u:;AD W­’7f÷²Pvº‡•Ü]äÐVËkcÎáÞŠ¡4{È©ŽuIHz© k >€ê†+xãhr-øÑ^ãæàÍ pr…aG'F*2D™Õ80„Ž=¤ñ\ 7ÿ˜ó ÿDÆsQXŠÀhbˆ8r®ð‘;ÛcÉ!ÅvЕÈýÎ^¥†÷m÷F*AMœëÑšÔIB‘cpú ä¸Dóô¯À täšRH¨ ¶Id#™çÚežsh mˆ·e×u^’UO»å•<E6Y¸ƒ.Á0¹Ñ“e’õÓºÄÕ4rÂrÊôÛ&/º0Š¡uѵÇv6ÂÌK€½öEe½öݺÉzä Ù9Kë†G\MÚä(¢q)«E»ŸÁ1nhý*Ù ·±>ÎjZ}€Î’^M//¡ɪï ¢Câ Ãʇź8ådŸ#¢ìVAé3$fº^N¾é='0c>Œ…Ð'_ +c˜’Ž;|œ³ ^‡`¨¥S‚É÷Ž$ñp*^Nè´vÆÂúÒ+"ØI ;ºÄb…2²ŽçÁ@HWfÖñŒŠ©0,]å‘âóÁR 9?†Z„j,%)á¸v\“ã'AKO5ΚX©ÇŽ™`!Þù8”禡Ai¾†r †â$0hD×YPŒ¬!†B+Vÿ˜DAÝGMã3²Ežs¿)ã•ßÄœ‚Р½º&Ïx5Áû $üñŒ1<ÕWZù R5=J5û÷Ìõò‚™§4€3çR¥Í…Lw?= sGa§™‹H[1” Æa^ sjøc·J³Ç9WQÓÎÕD|†µà¬<ýÿ᡼᤹ª{,5œ ´™™£qÓöOÜ€ã 5ºz`Fî8M;$¡ ¯Š½³åDañ“{ý /Éì4«Ùù±ÿÛ ðÕ¯I²ÚR}Ñ%oV®1hN«ŒÎ†¶ùA ô¡±Z†¯ ÏggЦ³.ÌE5 $j&7_I£šÕÛú¨†k„¡Í˜À5­DιlºkO¯[°:£÷8=}Æ(4™¥#ư(&Ò‚°÷u<0FíRûcBÂx«Ç i±G¹EÙOÕ:µŠŸú*(ý$¹"òÆÿ…HBÇSLÅñ•zHQÕž´ Iå¢4ýPP±•ˉ½” Å V”ÿ’z1«B#°NjÈļS‚9KÌM¥©Fv2»¤Á `—¡i4v',r|½A2p>nFŒÉü]b…ßû ¥ßPù SÍÝå¼…ô((]ÁFøVC0ÁN/õTzÁïÒÍmIP0úÞÁHlnOdà=¡~†A‡=ÛÄKþ"ù»è/š¿ö~ö%IÈðÁñòTæ’Ïý,‘f¨Bà¬ÂJ|/œ,ï¹Ñ¡šœÕ­öĩЀ´©Ô&Ú'Rý¥¥a¯«(Yªµòôýz@9å›ÑÕ”m%F5åÚ ¯„qkHJëè’I? PêÉèi2‚²+øZ¾¶à*ÄXÀ¨îU&Y¹Áþ*HCf1˜FÕ‚l¼1gþi6¾(oý Ô«j^ŽÙnó>ãó>+æ}VÏû¬IþL_½ƒ¢ÎyiÄ :^%Ç\ò¨æ¬}!èã@€LÒ¤—ZvÕ«œgM=ê¾¢ª¼2ƒ–C³’@U(9¤ª]ö‚40õ¥ó¥rD(ªfË„ié¹0¦? ygÒG2¥u ø, æz¸mÍÜ’Øtg,+tPJi*tÙot¦1ë4:žA+lPsGJØÆºàä—ö½RåžìÞ«ãÞ+#û+éþ 1šìÔ:ƒÚFaw]5_`Æ=ßq¡…ëº)¢Þk²¸þšÌí“{îwku7ŒÏýÒfrÈ® ~ 'h³¶ÌFÖ&½X„Ư†¡‹"W]D½H•èTìTSø¼f¥üú×Kýèõ‡ï¯ÛÍjó°Cžó—^¼xþêB^—µüûÝ«Ç^s34?ºxýò§'¾TüÃùÃ_¯oxN~Ö€f›CÒká°o³’ùMuF ÇçÿöúåSÿYÆk*ÑØ5G ˆ9ôóâùù…YŒ2wgÏúç0Ç­tŽçÌÜvóº·¾½m¯»«³ÛÀûw»öžÿ‘,WúÁ]îú·Þþãáƒûß÷‡Íç/·WwíæþöÐó:|»ÙoÛ_–ìñ\ý³`‡o®/^tÎovÛÛÍîðû‚]¾>ŸÕ™y ãnï·ÛÃÞ¾@b0áž I&ì^“@Ç%9.è¼çè(8§£ï™>ž 5O9´ÄùÃD|Ig))×½?ì7»ýƒÝúöÓƒ«Í/›öÁçí?®öûÖÔ_þµÞì?­w›íõû’ž÷ÇõÑûýa·¾”Ôaß¡ Ú$†@‘µ ý…Ì $#s0ï+kuÔê÷ˆ}¡ptÙˆ!ÿ˜¾¸¾ù¿‡G,+WêÈ<±1Mà¾tP• MÕ*ÑÁþ©wÕE1÷£îÕÏëŸ7=Çï‹ w yt!LMÙ ´Óƒ ) ´=à¸ÀJÄòצûòv}èx¶Ü¾ëئß0*G¥BsA³,¼’ÿ—}ÌVWãfª%xh°z>•îpDZ |ð0¨˜#š0 ÆñŽz‰Õ“*‘ãêêoïƒtºùãæÐ¿Œ6“'b»ü.ÍÔ¬ë\ª@Úë \'zÆ—k¨çJ²ßÓq3Ýkަ»O™®APu=mn~ÁûƒH ‰Í˜vâÙ§­F³yÕqÉ%Á»ÕÛ‹íú ¿‡•ñ¾ú&yëˆÛބЯ¡Qà ¾b0| ÍŠ8Êh3ºSÝ•~üúí0_sA±-àჅűã {ÿþ}yo|2øÿ¡“Ÿ7W€Ì½yûú±=¿Ê,R5¬`µ¼.¥¾–Éhdž+ÕZÆ8g™Ê(s±g~×A§&ª©îÆ&óI…¼¾ßîuÀ=•¢ùã×OžþôèíÓG??}öòé«‹NˆGžå\¹3ÁQ‡Ñ FCkÍVÖ'Úš­¤ªAöÄ`R¥e`žß¦“{—¹IÞÁÇ_'¹zNy¸Œ¤ˆ ‚ëTÚÍŒÒ×.š?™ôX!  Æf*ÅK†Õ.£‡—eè\6ˆÄ\Ã}“ J¢æg*ÄŒ:Ç„q,ÂEœåÕþîòr³¹rÎ/8è^«%Aò¨}ØÞÝ B5ènó?ï6ûÃÃVÊ`qÏ5ŠÞ?ÛhŠÔäñ©äàP˾Ò"ç•QÝæÍóHR#¹—§¿]v´òㆠí+Äw»±ßãæýþú£ÇlÛ12ÉEôc|Þ2ÈWâ¦jd1k¹˜ßýðüÅÅóWr»oÚöþõþÑ †½:hœÝ‹§Åª¼}—{Xæù?C¾ܳ½1ýޝ Œ%3‰XïÏiÊ›i☠*´ø hr© b#ðÎa•±ÓÔ#Ó‡Ýöæ€Z߯/‘xuÐÅ^'2}}çaæúj첞fs£ÆxyþÌm&ýÒÕ!Ì`è·0èËë[#šH”Ë0§‹?cèŽ †UCˆV'B«F¾LÏ‘"ÍövÞiX>Kõ`Õ1´/BfŒevA·g¡~ÊéöÓÎ$Ì$+í´e/4Ã&ÀÍb,K„;´¢½M3 Þ˜óÃîúæãÅ6tC‡®|.æ^¡°42o,ÖŒÓ"‡¿—ûñËzx*wa˜fæâ‰Róÿô\ û×¼»xÙR‹ Fx>b€¼ÁÎ3U€Ü3‡ÙÝ“rôÍv5бù5x̰`Å¡û\B•8†_/¥2Íÿ*0±±¹äd3ËGT¢ÄdC›O(£çm>ϱžï ^­¨Ïýx3n¸W&å%¶L]!?­ï~ûª¶ Û¹gnqœðuƒ›&6$<ŸD 6Vï®6½–èý÷ë«7Ö,{䯯®7áóµ<‚‘ Æm{}xtÐ|FìÌøRÜF ÜBðøsÌ7ÔäŸïß›¼ó.äP)ÕžÚGÈÍA´6æ'½†?4]1Zïÿ±ú?úýÒ5oª^ëþß±;eŸo¯÷ôbÕPÎ þÐJÿÏÿ÷ŠÖþÿ÷›íaÕûQ¾o7à °â>æ¬FÙ6¶¤§WÇíÉåúòÓæÿ$æãH»ŽÚž±zEzÍžu’>–íbÈÂG¸g.tϱ»m×2-Óˆ(?žÄÃ/±o;@Žm¯ö÷o”ð‘,‡ôØ> í ºñ¢°|Wã +*˜£¡@2‘!‘'û£Ì<0Ÿ %›ÚúÃÛŸ| dÝüo6»ëKÔ~…X0–£±ž›¡IdgË9iã…Y„&ϰ÷Líßþ¤ñs´€s8{$Ô†ÀˆÅ& ¡ÿIS‰Ÿ¼¨æÔ^Z"‚ þk*¦#eì@œÔÐb5£(ÃÍBÇŸ»€YA¤šôî}úÛmw¦ÉPÇ#Ž*'p)b‰BÄñêš"6‡Û_oÖŸéõ`¹\»n9îÚ~½™u0Fø™ êlV„Ìí Íå„Z?ánŠŸ6 ±"‘›£q^Ž(‚Ãj–\XìhX" ;§ùm' r£òP„~-N û´QЍL†¥QLTC:¬‘ñräôd·½MQ†•"Œ;ŒgmI´Lá¡«!¿Z¡2„P8B¦¤³µÍTŽÒvôIÀû,#&ñ˜Û¡6%H›b”#}ýÙ[·ò‰Q ®`–²—×7w{;_¨Û3ª:ÇÝœÎQ… ‚U+O§ìkõÂvsÊ3rñU”ɘ2ªæ©XHÍCSiÌg…ÌýˆÎÓ‰é8Í=QŠ èÿ7ú1Aøˆ›8à‘Š^ð›×9ÁScÆ›øŽ˜ó´ ‰ºÃž’÷QŽýÁ`0ª3;©ûj{ -ÕU‚aVHv°ß¬w—Ÿ|y¿ Ý/éHžH`eŒÀžã ý¯ÿÛOo=~úӋמàÕ‹ðy㮘„©`sC7WdsI¿]ÓÞeA¿-ÂŽòšTgÀI†¤ý+jZÀ)I1å¾) K°RI7ʘr8Vzã_Ì&xáQ‡õÐ$ªS8NŸ‰ø7ÏŸ>zûøoÞàÿÒÉyÝ JœîÿïA'Æ=@K0ž¢ËüäõÅëÿ¢÷ª_K—”ËHLq þæÑÅßâ`Œ³_p÷°à—Û›×ïvšv’RÙÓèÑÝ7Gó¼9*s(@c‘Ós"MqÅÌS#È$]®Áè»×6oº«hzä~Ç~zzþøÑ´tá÷ÏŸ¾yô¶k{‹çrÛ®¶»Ï÷·{Lð-N¨ $j!È ^hŠwÂŽ[’¿&3nˆ]’|Ú¯³Ø¬^C÷ôõ÷ÿ?ç¶Hl9Ïmozart-1.4.0.20080704/share/lib/sp/0000775000000000000000000000000011033376117014727 5ustar rootrootmozart-1.4.0.20080704/share/lib/sp/Error.oz0000664000000000000000000003314007743300743016400 0ustar rootroot%%% %%% Authors: %%% Leif Kornstaedt %%% Martin Mueller %%% %%% Contributors: %%% Martin Henz %%% Benjamin Lorenz %%% %%% Copyright: %%% Leif Kornstaedt, 1998 %%% Martin Mueller, 1997 %%% %%% Last change: %%% $Date: 2003-10-15 19:20:35 +0200 (Wed, 15 Oct 2003) $ by $Author: popow $ %%% $Revision: 15626 $ %%% %%% This file is part of Mozart, an implementation of Oz 3: %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% %% %% Error messages have the following format %% (where all fields are optional): %% %% ::= %% ([kind: ] %% [msg: ] %% [items: []] %% [info: ] % copied from exception %% [stack: ] % copied from exception %% [footer: bool]) %% %% ::= error | warn % no special meaning %% %% ::= %% atom | int | float | string %% | '#'( ... ) %% | oz(value) %% | pn(atom) %% | %% | apply( [value]) %% | list([value] ) %% %% ::= pos(atom % file name; '' if not known %% int % line number; required %% int) % column number; ~1 if not known %% %% ::= hint([l: ] %% [m: ]) %% | %% | line() % full line %% | unit % empty line %% %% ::= [] %% ::= apply( [value]) %% | fapply( [value] int) %% | 'fail' %% | eq(value value) %% | tell(value value) %% ::= procedure | atom %% %% ::= [] %% ::= (kind: atom %% [file: atom] %% [line: int] %% [column: int] %% ['PC': int] %% [data: value] %% ...) %% ::= 'entry' | 'exit' %% %% Output format is approximately: %% %% %*********** kind ******** %% %** %% %** msg %% %** %% %** line %% %** ... %% %** %% %** info %% %** stack %% %** %% %************************* (if footer) %% functor import Property(get) System(printName printError) ErrorFormatters(kernel: KernelFormatter object: ObjectFormatter failure: FailureFormatter recordC: RecordCFormatter system: SystemFormatter ap: APFormatter dp: DPFormatter os: OSFormatter foreign: ForeignFormatter url: URLFormatter module: ModuleFormatter) export ExceptionToMessage MessageToVirtualString ExtendedVSToVS PrintException RegisterFormatter prepare SKIP = 0 % alignment spaces WIDTH = 65 % width of error message output BugReport = 'Please send bug report to bugs@mozart-oz.org' %% some formatting routines fun {Repeat N C} {ForThread 1 N 1 fun {$ In _} C|In end nil} end fun {StarLine X} '%** '#X#'\n' end Stars = '%***' NumStarsLeft = {VirtualString.length Stars} EmptyLine = '%**\n' Footer = '%**'#{Repeat WIDTH - 3 &-}#'\n' fun {PosToVS F L C PC} Elems in Elems = {Filter [case F of '' then "" else 'file "'#F#'"' end case L of unit then "" else 'line '#L end case C of ~1 then "" [] unit then "" else 'column '#C end case PC of unit then "" else 'PC = '#PC end] fun {$ X} X \= "" end} case Elems of E1|Er then {FoldL Er fun {$ In E} In#', '#E end E1} else "" end end fun {FormatPartialAppl A Xs N} '{'#if {IsAtom A} then pn(A) else oz(A) end# case Xs of nil then "" else ' '#list(Xs ' ') end# case N of 0 then "" else {Loop.forThread 1 N 1 fun {$ In I} & |&_|In end nil} end#'}' end fun {FormatAppl A Xs} {FormatPartialAppl A Xs 0} end define %% %% Translation of Extended Virtual Strings to Virtual Strings %% local fun {OzValueToVS X} P in P = {Property.get errors} {Value.toVirtualString X P.depth P.width} end local proc {EscapeVariableChar Hd C|Cr Tl} case Cr of nil then Hd = C|Tl % terminating quote else if C == &` orelse C == &\\ then Hd = &\\|C|Tl elseif C < 10 then Hd = &\\|&x|&0|(&0 + C)|Tl elseif C < 16 then Hd = &\\|&x|&0|(&A + C - 10)|Tl elseif C < 26 then Hd = &\\|&x|&1|(&0 + C - 16)|Tl elseif C < 32 then Hd = &\\|&x|&1|(&A + C - 26)|Tl else Hd = C|Tl end end end in fun {PrintNameToVS PrintName} case PrintName of unit then '_' elsecase {Atom.toString {System.printName PrintName}} of &`|Sr then &`|{FoldLTail Sr EscapeVariableChar $ nil} elsecase PrintName of nil then "nil" [] '#' then "#" else {System.printName PrintName} end end end fun {ListToVS Xs Sep} case Xs of nil then "" elseof [X] then oz(X) elseof X1|Xr then oz(X1)#Sep#{ListToVS Xr Sep} end end in fun {ExtendedVSToVS X} if {IsDet X} then case X of oz(M) then {OzValueToVS M} [] pn(M) then {PrintNameToVS M} [] pos(F L C) then {PosToVS F L C unit} [] apply(A Xs) then {ExtendedVSToVS {FormatAppl A Xs}} [] list(Xs Sep) then {ExtendedVSToVS {ListToVS Xs Sep}} [] '#'(...) andthen {IsTuple X} then {Record.map X ExtendedVSToVS} else X end else {OzValueToVS X} end end end %% %% Accessing Exception Components %% fun {GetExceptionDispatch Exc} case Exc of error(DispatchField ...) then DispatchField [] system(DispatchField ...) then DispatchField elseif {IsRecord Exc} then Exc else unit end end local fun {DebugField Exc} if {IsRecord Exc} then {CondSelect Exc debug unit} else unit end end fun {InfoField Exc} D in D = {DebugField Exc} case {Value.status D} of det(record) then {CondSelect D info unit} [] future then {CondSelect D info unit} else unit end end in fun {GetExceptionInfo Exc} case {InfoField Exc} of unit then nil elseof Is then {Map Is fun {$ I} case I of apply(X Xs) then hint(l:'In statement' m:{FormatAppl X Xs}) [] fapply(X Xs N) then hint(l:'In statement' m:{FormatPartialAppl X Xs N}) [] 'fail' then hint(l:'Tell' m:'fail') [] eq(X Y) then hint(l:'Tell' m:oz(X)#' = '#oz(Y)) [] tell(X Y) then hint(l:'Tell' m:oz(X)#' = '#oz(Y)) else hint(l:'Info' m:oz(I)) end end} end end fun {GetExceptionStack Exc} D = {DebugField Exc} Dstatus = {Value.status D} in if Dstatus == det(record) orelse Dstatus == future then if {HasFeature D stack} andthen {Property.get 'errors.thread'} > 0 then D.stack else unit end else unit end end end %% %% output call stack %% fun {GetStack Xs N} case Xs of nil then "" [] X|Xr then if N > 0 then Pos = {PosToVS {CondSelect X file ''} {CondSelect X line unit} {CondSelect X column ~1} {CondSelect X 'PC' unit}} Kind = case X.kind of 'call/c' then 'call' [] 'call/f' then 'call' [] 'lock/c' then 'lock' [] 'lock/f' then 'lock' [] 'exception handler/c' then 'exception handler' [] 'exception handler/f' then 'exception handler' [] 'conditional/c' then 'conditional' [] 'conditional/f' then 'conditional' [] 'definition/c' then 'definition' [] 'definition/f' then 'definition' [] 'skip/c' then 'skip' [] 'skip/f' then 'skip' [] 'fail/c' then 'fail' [] 'fail/f' then 'fail' [] 'thread/c' then 'thread' [] 'thread/f' then 'thread' elseof K then K end in case Kind of call then if {HasFeature X data} then Data in Data = X.data if {IsDet Data} then PN = {System.printName Data} in if {IsObject Data} then case PN of '' then 'object application' else 'object application of class \''#PN#'\'' end else case PN of '' then 'procedure' [] 'Toplevel abstraction' then 'toplevel abstraction' else 'procedure \''#PN#'\'' end end else 'procedure _' end else 'procedure' end else Kind end# if Pos == "" then "" else ' in '#Pos end|{GetStack Xr N - 1} else ['...'] end end end %% %% Converting a Message to a Virtual String %% local local fun {AttachLeftSizes Xs} {Map Xs fun {$ X} case X of hint(l:L) then {VirtualString.length {ExtendedVSToVS L}} # X [] hint(l:L m:_) then {VirtualString.length {ExtendedVSToVS L}} # X else 0 # X end end} end fun {MaxLeftSize Xs} {FoldL Xs fun {$ In L#_} {Max In L} end 0} end fun {Spaces N} {Repeat N & } end in fun {Lines Xs} Ys = {AttachLeftSizes Xs} Align = {MaxLeftSize Ys} + SKIP in {FoldR Ys fun {$ L#X In} case X of unit then EmptyLine [] line(H) then {StarLine {ExtendedVSToVS H}} [] pos(_ _ _) then {StarLine 'in '#{ExtendedVSToVS X}} [] hint then EmptyLine [] hint(l:Left) then {StarLine {ExtendedVSToVS Left}} [] hint(m:Mid) then {StarLine {Spaces Align - L + 2}#{ExtendedVSToVS Mid}} [] hint(l:Left m:Mid) then {StarLine {ExtendedVSToVS Left}#':'#{Spaces Align - L + 1}# {ExtendedVSToVS Mid}} end#In end ""} end end fun {ErrorKind Message} Kind = case {CondSelect Message kind unit} of unit then '' elseof X then ' '#{ExtendedVSToVS X}#' ' end NumStars = WIDTH - {VirtualString.length Kind} - NumStarsLeft NumStars1 = NumStars div 2 NumStars2 = (NumStars + 1) div 2 in Stars#{Repeat NumStars1 &*}#Kind#{Repeat NumStars2 &*}#'\n'# EmptyLine end fun {ErrorMsg Message} case {CondSelect Message msg unit} of unit then "" elseof Msg then {StarLine {ExtendedVSToVS Msg}}# EmptyLine end end fun {ErrorItems Message} case {CondSelect Message items unit} of unit then "" elseof Ts then {Lines Ts} end end fun {ErrorInfo Message} case {CondSelect Message info unit} of unit then "" elseof Ts then {Lines Ts} end end fun {ErrorStack Message} case {CondSelect Message stack unit} of unit then "" elseof Frames then N in N = {Property.get 'errors.thread'} if N > 0 then EmptyLine# {StarLine 'Call Stack:'}# {FoldR {GetStack Frames N} fun {$ Frame In} {StarLine Frame}#In end ""} else "" end end end fun {ErrorFooter Message} if {CondSelect Message footer false} then Footer else "" end end in fun {MessageToVirtualString Message} '\n'# {ErrorKind Message}# {ErrorMsg Message}# {ErrorItems Message}# {ErrorInfo Message}# {ErrorStack Message}# {ErrorFooter Message} end end %% %% Converting an Exception to a Message %% local fun {Extend Message Exc} {Adjoin Message error(info: {GetExceptionInfo Exc} stack: {GetExceptionStack Exc})} end fun {GenericFormatter Msg Exc} {Extend error(msg: Msg items: [line(oz(Exc))]) Exc} end in fun {ExceptionToMessage Exc} T = 'Error: unhandled exception' E = {GetExceptionDispatch Exc} in if E \= unit andthen {IsRecord E} then Key in Key = {Label E} if {Dictionary.member ErrorRegistry Key} then {Extend {{Dictionary.get ErrorRegistry Key} E} Exc} else {GenericFormatter T Exc} end else {GenericFormatter T Exc} end end end %% %% Printing an Exception %% local fun {FormatReRaiseExc Exc ExcExc} error(kind: 'exception formatter error' msg: 'unable to print error message' items: [hint(l:'Initial exception' m:oz({GetExceptionDispatch Exc})) hint(l:'Format exception' m:oz({GetExceptionDispatch ExcExc})) unit line(BugReport)] stack: {GetExceptionStack Exc} footer: true) end in proc {PrintException Exc} try M in M = {AdjoinAt {ExceptionToMessage Exc} footer true} {System.printError {MessageToVirtualString M}} catch X then {System.printError {MessageToVirtualString {FormatReRaiseExc Exc X}}} end end end %% %% The Registry %% ErrorRegistry = {NewDictionary} proc {RegisterFormatter Key Formatter} {Dictionary.put ErrorRegistry Key Formatter} end {RegisterFormatter kernel KernelFormatter} {RegisterFormatter object ObjectFormatter} {RegisterFormatter failure FailureFormatter} {RegisterFormatter recordC RecordCFormatter} {RegisterFormatter system SystemFormatter} {RegisterFormatter ap APFormatter} {RegisterFormatter dp DPFormatter} {RegisterFormatter os OSFormatter} {RegisterFormatter foreign ForeignFormatter} {RegisterFormatter url URLFormatter} {RegisterFormatter module ModuleFormatter} end mozart-1.4.0.20080704/share/lib/sp/WeakPointer.oz0000664000000000000000000000070106674523646017547 0ustar rootrootfunctor import WD at 'x-oz://boot/WeakDictionary' export make : MakeWeakPointer is : IsWeakPointer deref : DerefWeakPointer define Table = {WD.new _} {WD.close Table} Tag = {NewName} fun {MakeWeakPointer V} N = {NewName} in {WD.put Table N V} {Chunk.new weakPointer(Tag:N)} end fun {IsWeakPointer X} {HasFeature X Tag} end fun {DerefWeakPointer X} {WD.get Table X.Tag} end end mozart-1.4.0.20080704/share/lib/sp/EventSIGUSR2.oz0000664000000000000000000000077106676233372017422 0ustar rootrootfunctor import VS(handler:Handler) at 'x-oz://boot/VirtualSite' export handler : SIGUSR2 define Synch = {NewCell _} proc {SIGUSR2 E} {Exchange Synch unit _} end thread This = {Thread.this} proc {Loop} %% look it up now to avoid race condition %% since it may become bound concurrently More = {Access Synch} in if {Handler} then {Thread.preempt This} else {Wait More} end {Loop} end in {Thread.setPriority This 'high'} {Loop} end end mozart-1.4.0.20080704/share/lib/sp/EventSIGCHLD.oz0000664000000000000000000000024106676233372017371 0ustar rootrootfunctor import Process(handler:Handler) at 'x-oz://contrib/os/process.so{native}' export handler : SIGCHLD define proc {SIGCHLD E} {Handler} end end mozart-1.4.0.20080704/share/lib/sp/Service.oz0000664000000000000000000001002007110012765016667 0ustar rootroot%%% %%% Authors: %%% Denys Duchier (duchier@ps.uni-sb.de) %%% %%% Contributor: %%% %%% Copyright: %%% Denys Duchier, 1999 %%% %%% Last change: %%% $Date: 2000-05-15 17:21:25 +0200 (Mon, 15 May 2000) $ by $Author: schulte $ %%% $Revision: 12799 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Error export Asynchronous Synchronous define %% asynchronous service fun fun {NewAsynchronousServiceFun1 ServiceFunction} L P = {NewPort L} proc {ServiceHandler Request#Result} try {ServiceFunction Request Result} catch E then {Error.printException E} end end fun {InvokeService Request} {Port.sendRecv P Request} end in thread {ForAll L ServiceHandler} end InvokeService end %% asynchronous service proc %% avoids making and having a ref to a useless global var fun {NewAsynchronousServiceProc1 ServiceProc} L P = {NewPort L} proc {ServiceHandler Request} try {ServiceProc Request} catch E then {Error.printException E} end end proc {InvokeService Request} {Send P Request} end in thread {ForAll L ServiceHandler} end InvokeService end %% synchronous service fun fun {NewSynchronousServiceFun1 ServiceFunction} L P = {NewPort L} proc {ServiceHandler Request#Reply} Reply = try answer({ServiceFunction Request}) catch E then except(E) end end fun {InvokeService Request} case {Port.sendRecv P Request} of answer(V) then V [] except(E) then raise E end end end in thread {ForAll L ServiceHandler} end InvokeService end %% synchronous service proc %% needs the global var anyway for synchronization fun {NewSynchronousServiceProc1 ServiceProc} S = {NewSynchronousServiceFun1 fun {$ X} {ServiceProc X} unit end} proc {InvokeService X} {S X _} end in InvokeService end %% for convenience allow 0,1,2,3 ary functions fun {NewServiceFun NewServiceFun1 F} case {Procedure.arity F} of 1 then S = {NewServiceFun1 fun {$ _} {F} end} fun {InvokeService} {S unit} end in InvokeService [] 2 then {NewServiceFun1 F} [] 3 then S = {NewServiceFun1 fun {$ X#Y} {F X Y} end} fun {InvokeService X Y} {S X#Y} end in InvokeService [] 4 then S = {NewServiceFun1 fun {$ X#Y#Z} {F X Y Z} end} fun {InvokeService X Y Z} {S X#Y#Z} end in InvokeService end end fun {NewAsynchronousServiceFun F} {NewServiceFun NewAsynchronousServiceFun1 F} end fun {NewSynchronousServiceFun F} {NewServiceFun NewSynchronousServiceFun1 F} end %% for convenience allow 0,1,2,3,4 ary procedures fun {NewServiceProc NewServiceProc1 P} case {Procedure.arity P} of 0 then S = {NewServiceProc1 proc {$ _} {P} end} proc {InvokeService} {S unit} end in InvokeService [] 1 then {NewServiceProc1 P} [] 2 then S = {NewServiceProc1 proc {$ X#Y} {P X Y} end} proc {InvokeService X Y} {S X#Y} end in InvokeService [] 3 then S = {NewServiceProc1 proc {$ X#Y#Z} {P X Y Z} end} proc {InvokeService X Y Z} {S X#Y#Z} end in InvokeService [] 4 then S = {NewServiceProc1 proc {$ X#Y#Z#U} {P X Y Z U} end} proc {InvokeService X Y Z U} {S X#Y#Z#U} end in InvokeService end end fun {NewAsynchronousServiceProc P} {NewServiceProc NewAsynchronousServiceProc1 P} end fun {NewSynchronousServiceProc P} {NewServiceProc NewSynchronousServiceProc1 P} end Asynchronous = asynchronous(newFun : NewAsynchronousServiceFun newProc : NewAsynchronousServiceProc) Synchronous = synchronous(newFun : NewSynchronousServiceFun newProc : NewSynchronousServiceProc) end mozart-1.4.0.20080704/share/lib/sp/ErrorFormatters.oz0000664000000000000000000005241110140210020020416 0ustar rootroot%%% %%% Authors: %%% Martin Mueller %%% %%% Contributors: %%% Denys Duchier %%% Martin Henz %%% Leif Kornstaedt %%% Benjamin Lorenz %%% Christian Schulte %%% %%% Copyright: %%% Martin Mueller, 1997 %%% %%% Last change: %%% $Date: 2004-10-28 17:28:16 +0200 (Thu, 28 Oct 2004) $ by $Author: duchier $ %%% $Revision: 16048 $ %%% %%% This file is part of Mozart, an implementation of Oz 3: %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import System(printName) export kernel: KernelFormatter object: ObjectFormatter failure: FailureFormatter recordC: RecordCFormatter system: SystemFormatter ap: APFormatter dp: DPFormatter os: OSFormatter foreign: ForeignFormatter url: URLFormatter module: ModuleFormatter prepare BugReport = 'Please send bug report to bugs@mozart-oz.org' fun {LayoutDot R F X Op} if {IsDet R} andthen {IsRecord R} andthen {Length {Arity R}}>5 then [hint(l:'In statement' m:'R ' # Op # ' ' # oz(F) # ' = ' # oz(X)) hint(l:'Expected fields' m:list({Arity R} ' ')) hint(l:'Record value' m:oz(R))] else {LayoutBin R F X Op} end end fun {LayoutComma C M} [hint(l:'In statement' m:'C, '#oz(M)) hint(l:'Class value' m:oz(C))] end fun {LayoutBin X Y Z Op} [hint(l:'In statement' m:oz(X) # ' ' # Op # ' ' # oz(Y) # ' = ' # oz(Z))] end fun {IsNotNL X} X \= &\n end fun {ToLower Xs} {Map {VirtualString.toString Xs} Char.toLower} end local fun {DoFormatTypes Text S} case S of nil then nil else First Rest in {List.takeDropWhile S.2 IsNotNL First Rest} case Text of '' then hint(m:{ToLower First}) else hint(l:Text m:{ToLower First}) end|{DoFormatTypes '' Rest} end end in fun {FormatTypes T} {DoFormatTypes 'Expected type' &\n|{Atom.toString T}} end end local fun {DoFormatHint S} case S of nil then nil else First Rest in {List.takeDropWhile S.2 IsNotNL First Rest} line(First) | {DoFormatHint Rest} end end in fun {FormatHint S} if S \= nil then unit|{DoFormatHint &\n|{VirtualString.toString S}} else nil end end end fun {Plural N} if N == 1 then '' else 's' end end define %% %% kernel related errors %% fun {KernelFormatter E} case E of kernel(type A Xs T P S) then % expected A:procedure or atom, Xs: list, T: atom, P:int, S: virtualString LayOut = case A # Xs of '.' # [R F X] then Ls = {LayoutDot R F X '.'} in {Append Ls {FormatHint S}} elseof '^' # [R F X] then Ls = {LayoutDot R F X '^'} in {Append Ls {FormatHint S}} elseof ',' # [C M] then Ls = {LayoutComma C M} in {Append Ls {FormatHint S}} elseof '+1' # [X Y] then Ls = [hint(l:'In statement' m:oz(X) # ' + 1 = ' # oz(Y)) hint(l:'Possible origin' m:'1 + ' # oz(X) # ' = ' # oz(Y))] in {Append Ls {FormatHint S}} elseof fdTellConstraint # [X Y] then Ls = [hint(l:'In statement' m:oz(X) # ' :: ' # oz(Y))] in {Append Ls {FormatHint S}} else if {Member A ['+' '-' '*' '/' '<' '>' '=<' '>=' '\\=']} then Ls = case Xs of [X Y Z] then {LayoutBin X Y Z A} else [hint(l:'In statement' m:apply(A Xs))] end in {Append Ls {FormatHint S}} else Ls = [hint(l:'In statement' m:apply(A Xs))] in {Append Ls {FormatHint S}} end end in error(kind: 'type error' items: {Append {FormatTypes T} if P\=0 then hint(l:'At argument' m:P) | LayOut else LayOut end}) elseof kernel(instantiation A Xs T P S) then %% expected A: procedure or atom, Xs: list, T: atom, %% P:int, S:virtualString LayOut = {Append [hint(l:'In statement' m:apply(A Xs))] {FormatHint S}} in error(kind: 'instantiation error' items: {Append {FormatTypes T} if P\=0 then hint(l:'At argument' m:P) | LayOut else LayOut end}) elseof kernel(apply X Xs) then %% expected X: procedure or atom, Xs: list error(kind: 'error in application' msg: 'Application of non-procedure and non-object' items: [hint(l:'In statement' m:apply(X Xs))]) elseof kernel('.' R F) then %% expected R: chunk or record, F: feature error(kind: 'Error: illegal field selection' items: {LayoutDot R F _ '.'}) elseof kernel(recordConstruction L As) then %% expected L: literal, As: property list error(kind: 'Error: duplicate fields' msg: 'Duplicate fields in record construction' items: [hint(l:'Label' m:oz(L)) hint(l:'Feature-field Pairs' m:list(As ' '))]) elseof kernel(recordPattern L As) then %% expected L: literal, As: feature list error(kind: 'Error: duplicate fields' msg: 'Duplicate fields in record pattern' items: [hint(l:'Label' m:oz(L)) hint(l:'Features' m:list(As ' '))]) elseof kernel(arity P Xs) then %% expected P: procedure or object, Xs: list N = if {IsProcedure P} then {Procedure.arity P} else 1 end M = {Length Xs} in error(kind: 'Error: illegal number of arguments' items: [hint(l:'In statement' m:apply(P Xs)) hint(l:'Expected' m: N # ' argument' # {Plural N}) hint(l:'Found' m: M # ' argument' # {Plural M})]) elseof kernel(noElse File Line) then error(kind: 'Error: conditional failed' msg: 'Missing else clause' items: [pos(File Line unit)]) elseof kernel(noElse File Line A) then %% expected A: Oz term error(kind: 'Error: conditional failed' msg: 'Missing else clause' items: [hint(l:'Matching' m:oz(A)) pos(File Line unit)]) elseof kernel(boolCaseType File Line A) then error(kind: 'Error: boolean conditional failed' msg: 'Non-boolean value found' items: [hint(l:'Value found' m:oz(A)) pos(File Line unit)]) %% %% ARITHMETICS %% elseof kernel(div0 X) then error(kind: 'division by zero error' items: [hint(l:'In statement' m:oz(X) # ' div 0' # ' = _')]) elseof kernel(mod0 X) then error(kind: 'division by zero error' items: [hint(l:'In statement' m:oz(X) # ' mod 0' # ' = _')]) %% %% ARRAYS AND DICTIONARIES %% elseof kernel(dict D K) then %% expected D: dictionary, K: feature L={Dictionary.keys D} in error(kind: 'Error: Dictionary' msg: 'Key not found' items: hint(l:'Dictionary' m:oz(D)) | hint(l:'Key found' m:oz(K)) | hint(l:'Legal keys' m:oz(L)) %% we cannot use Dictionary.member because, due to concurrence, %% the answer could be incoherent with the list returned by %% Dictionary.keys | if {Member K L} then [line('it looks like the key concurrently appeared in the') line('dictionary after the exception was raised')] else nil end) elseof kernel(array A I) then %% expected A: array, I: int error(kind: 'Error: Array' msg: 'Index out of range' items: [hint(l:'Array' m:oz(A)) hint(l:'Index Found' m:I) hint(l:'Legal Range' m:{Array.low A} # ' - ' # {Array.high A})]) elseof kernel('BitArray.new' L H) then %% expected L: int, H: int error(kind: 'Error: BitArray' msg: 'Illegal boundaries to BitArray.new' items: [hint(l: 'Lower bound' m: L) hint(l: 'Upper bound' m: H)]) elseof kernel('BitArray.index' B I) then %% expected B: Bitarray, I: int error(kind: 'Error: BitArray' msg: 'Index out of range' items: [hint(l: 'Bit array' m: oz(B)) hint(l: 'Index found' m: I) hint(l: 'Legal Range' m: {BitArray.low B}#' - '#{BitArray.high B})]) elseof kernel('BitArray.binop' B1 B2) then %% expected B1: BitArray, B2: BitArray error(kind: 'Error: BitArray' msg: 'Incompatible bounds in binary operation on BitArrays' items: [hint(l: 'First bit array' m: oz(B1)) hint(l: 'First bounds' m: {BitArray.low B1}#' - '#{BitArray.high B1}) hint(l: 'Second bit array' m: oz(B2)) hint(l: 'Second bounds' m: {BitArray.low B2}#' - '#{BitArray.high B2})]) %% %% REPRESENTATION FAULT %% elseof kernel(stringNoFloat S) then %% expected S: string error(kind: 'Error: representation fault' msg: 'Conversion to float failed' items: [hint(l:'String' m:'\"' # S # '\"')]) elseof kernel(stringNoInt S) then %% expected S: string error(kind: 'Error: representation fault' msg: 'Conversion to integer failed' items: [hint(l:'String' m:'\"' # S # '\"')]) elseof kernel(stringNoAtom S) then %% expected S: string error(kind: 'Error: representation fault' msg: 'Conversion to atom failed' items: [hint(l:'String' m:'\"' # S # '\"')]) elseof kernel(stringNoValue S) then %% expected S: string error(kind: 'Error: representation fault' msg: 'Conversion to Oz value failed' items: [hint(l:'String' m:'\"' # S # '\"')]) elseof kernel(globalState What) then %% expected What: atom Msg = case What of array then 'Assignment to global array' elseof dict then 'Assignment to global dictionary' elseof cell then 'Assignment to global cell' elseof io then 'Input/Output' elseof object then 'Assignment to global object' elseof 'lock' then 'Request of global lock' else What end in error(kind: 'Error: space hierarchy' msg: Msg # ' from local space') elseof kernel(spaceMerged S) then %% expected S: space error(kind: 'Error: Space' msg: 'Space already merged' items: [hint(l:'Space' m:oz(S))]) elseof kernel(spaceDistributor) then %% expected S: space error(kind: 'Error: Space' msg: 'Space already contains distributable thread') elseof kernel(spaceAdmissible S) then %% expected S: space error(kind: 'Error: Space' msg: 'Space is not admissible for current space' items: [hint(l:'Space' m:oz(S))]) elseof kernel(spaceIllegalAlt S) then %% expected S: space error(kind: 'Error: Space' msg: 'Illegal alternative selection' items: [hint(l:'Space' m:oz(S))]) elseof kernel(spaceNoChoice S) then %% expected S: space error(kind: 'Error: Space' msg: 'No distributor left' items: [hint(l:'Space' m:oz(S))]) elseof kernel(spaceAltOrder S) then %% expected S: space error(kind: 'Error: Space' msg: 'Range of alternatives must be ordered' items: [hint(l:'Space' m:oz(S))]) elseof kernel(spaceAltRange S R N) then %% expected S: space error(kind: 'Error: Space' msg: 'Requested alternative(s) out of range' items: [hint(l:'Space' m:oz(S)) hint(l:'Requested alternative' m:R) hint(l:'Number of alternatives' m:N)]) elseof kernel(spaceSituatedness Cs) then %% expected S: space error(kind: 'Error: Space' msg: 'Situatedness violation' items: [hint(l:'Culprits' m:oz(Cs))]) elseof kernel(portClosed P) then %% expected P: port error(kind: 'Error: Port' msg: 'Port already closed' items: [hint(l:'Port' m:oz(P))]) elseof kernel(terminate) then error(kind: 'Thread' msg: 'Thread terminated') elseof kernel(block X) then %% expected X: variable error(kind: 'Error: Thread' msg: 'Purely sequential thread blocked' items: [hint(l: 'Thread' m:oz({Thread.this})) hint(l:'Variable' m:oz(X))]) elseof kernel(weakDictionary WeakDict Key) then error(kind: 'Error: WeakDictionary' msg: 'Key not found' items: [hint(l: 'Dictionary' m: oz(WeakDict)) hint(l: 'Key' m: oz(Key))]) else error(kind: 'Kernel' items: [line(oz(E))]) end end %% %% objects %% local fun {FormatConf FCs} case FCs of nil then nil [] F#Cs|FCr then hint(m:(oz(F)#' defined by: '# oz({Map Cs System.printName})))|{FormatConf FCr} end end in fun {ObjectFormatter E} T = 'Error: object system' in case E of object('<-' O A V) then error(kind: T msg: 'Assignment to undefined attribute' items: [hint(l:'In statement' m:oz(A) # ' <- ' # oz(V)) hint(l:'Expected one of' m:oz({OoExtensions.getAttrNames O}))]) elseof object('@' O A) then error(kind: T msg: 'Access of undefined attribute' items: [hint(l:'In statement' m:'_ = @' # oz(A)) hint(l:'Expected one of' m:oz({OoExtensions.getAttrNames O}))]) elseof object(ooExch O A V) then error(kind: T msg: 'Exchange of undefined attribute' items: [hint(l:'In statement' m:'_ = ' # oz(A) # ' <- ' # oz(V)) hint(l:'Attribute' m:oz(A)) hint(l:'Expected one of' m:oz({OoExtensions.getAttrNames O}))]) elseof object(conflicts N 'meth':Ms 'attr':As 'feat':Fs) then MMs = case {FormatConf Ms} of nil then nil [] M|Mr then {AdjoinAt M l 'Methods'}|Mr end MAs = case {FormatConf As} of nil then nil [] A|Ar then {AdjoinAt A l 'Attributes'}|Ar end MFs = case {FormatConf Fs} of nil then nil [] F|Fr then {AdjoinAt F l 'Features'}|Fr end in error(kind: T msg: 'Unresolved conflicts in class definition' items: (hint(l:'Class definition' m:N)| {Append MMs {Append MAs MFs}})) elseof object(lookup C R) then error(kind: T msg: 'Undefined method' items: [hint(l:'Class' m:oz(C)) hint(l:'Message' m:oz(R)) line('Method undefined and no otherwise method given')]) elseof object(final CParent CChild) then error(kind: T msg: 'Inheritance from final class' items: [hint(l:'Final class used as parent' m:oz(CParent)) hint(l:'Class to be created' m:oz(CChild)) line('remove prop final from parent class '# 'or change inheritance relation')]) elseof object(inheritanceFromNonClass CParent CChild) then error(kind: T msg: 'Inheritance from non-class' items: [hint(l:'Non-class used as parent' m:oz(CParent)) hint(l:'Class to be created' m:oz(CChild))]) elseof object(illegalProp Ps) then error(kind: T msg: 'Illegal property value in class definition' items: [hint(l:'Illegal values' m:oz(Ps)) hint(l:'Expected one of' m:oz([final locking sited]))]) elseof object(arityMismatch File Line M O) then error(kind: T msg: 'Arity mismatch in object or method application' items: [hint(l:'Message' m:oz(M)) hint(l:'Object' m:oz(O)) pos(File Line unit)]) elseof object(slaveNotFree) then error(kind: T msg: 'Method becomeSlave' items: [hint(l:'Slave is not free')]) elseof object(slaveAlreadyFree) then error(kind: T msg: 'Method free' items: [hint(l:'Slave is already free')]) elseof object(locking O) then error(kind: T msg: 'Attempt to lock unlockable object' items: [hint(l:'Object' m:oz(O))]) elseof object(nonLiteralMethod L) then error(kind: T msg: 'Method label is not a literal' items: [hint(l:'Method' m:oz(L))]) else error(kind: T items: [line(oz(E))]) end end end %% %% failure %% fun {FailureFormatter E} error(kind: 'failure') end %% %% record constraints %% fun {RecordCFormatter E} T = 'Error: records' in case E of record(width A Xs P S) then %% expected Xs: list, P: int, S: virtualString error(kind: T items: (hint(l:'At argument' m:P)| hint(l:'Statement' m:apply(A Xs))| {FormatHint S})) else error(kind: T items: [line(oz(E))]) end end %% %% system programming %% fun {SystemFormatter E} T = 'system error' in case E of system(limitInternal S) then %% expected S: virtualString error(kind: T items: [hint(l:'Internal System Limit' m:S)]) elseof system(limitExternal S) then %% expected S: virtualString error(kind: T items: [hint(l:'External system limit' m:S)]) elseof system(fallbackInstalledTwice A) then %% expected A: atom error(kind: T items: [hint(l:'Fallback procedure installed twice' m:A)]) elseof system(fallbackNotInstalled A) then %% expected A: atom error(kind: T items: [hint(l:'Fallback procedure not installed' m:A)]) elseof system(inconsistentFastcall) then error(kind: T msg: 'Internal inconsistency' items: [line('Inconsistency in optimized application') line('Maybe due to previous toplevel failure')]) elseof system(onceOnlyFunctor) then error(kind: T msg: ('Procedure definition with flag `once\' '# 'executed more than once')) elseof system(fatal S) then %% expected S: virtualString error(kind: T msg: 'Fatal exception' itms: [line(S) line(BugReport)]) elseof system(getProperty Feature) then error(kind: T msg: 'Undefined property or property not readable' items: [hint(l:'Property' m:Feature)]) elseof system(condGetProperty Feature) then error(kind: T msg: 'Property not readable' items: [hint(l:'Property' m:Feature)]) elseof system(putProperty Feature) then error(kind: T msg: 'Property not writable' items: [hint(l:'Property' m:Feature)]) elseof system(putProperty Feature Type) then error(kind: T msg: 'Type error in property record' items: [hint(l:'Record feature' m:Feature) hint(l:'Expected type' m:Type)]) else error(kind: T items: [line(oz(E))]) end end %% %% OS module %% fun {OSFormatter E} T = 'error in OS module' in case E of os(os SysCall N S) then %% expected SysCall: virtualString, N: int, S: virtualString error(kind: T msg: 'Operating system error' items: [hint(l:'System call' m:SysCall) hint(l:'Error number' m:N) hint(l:'Description' m:S)]) elseof os(host SysCall N S) then %% expected SysCall: virtualString, N: int, S: virtualString error(kind: T msg: 'Network Error' items: [hint(l:'System call' m:SysCall) hint(l:'Error number' m:N) hint(l:'Description' m:S)]) else error(kind: T items: [line(oz(E))]) end end %% %% application programming %% fun {APFormatter E} T = 'Error: application programming' in case E of ap(usage Msg) then error(kind: T msg: Msg) elseof ap(spec env Var) then error(kind: T msg: 'environment variable '#Var#' not set' items: [hint(l: 'Hint' m: ('Have you started a CGI script '# 'from the command line?'))]) else error(kind: T items: [line(oz(E))]) end end %% %% distributed programming %% fun {DPFormatter E} T = 'Error: distributed programming' in case E of dp(generic _ Msg Hints) then error(kind: T msg: Msg items: {Map Hints fun {$ L#M} hint(l:L m:oz(M)) end}) elseof dp(modelChoose) then error(kind: T msg: ('Cannot change distribution model: '# 'distribution layer already started')) else error(kind: T items: [line(oz(E))]) end end %% %% Foreign interface %% fun {ForeignFormatter E} T = 'Error: native code interface' in case E of foreign(cannotFindInterface F) then error(kind: T msg: 'Cannot find interface' items: [hint(l:'File name' m:F)]) elseof foreign(dlOpen F M) then error(kind: T msg: 'Cannot dynamically link object file' items: [hint(l:'File name' m:F) hint(l:'dlerror' m:M)]) else error(kind: T items: [line(oz(E))]) end end %% %% URL/Resolver library %% fun {URLFormatter E} T = 'error in URL support' in case E of url(O U) then error(kind: T msg: 'Cannot locate file' items: [hint(l:'File name' m:U) hint(l:'Operation' m:O)]) else error(kind: T items: [line(oz(E))]) end end %% %% module manager %% fun {ModuleFormatter E} T = 'Error: module manager' in case E of module(alreadyInstalled Url) then error(kind: T msg: 'Module already installed' items: [hint(l:'Module URL' m:Url)]) [] module(notFound Kind Url) then K in K = case Kind of system then 'Unknown system module' [] native then 'Could not load native functor at URL' [] load then 'Could not load functor at URL' [] localize then 'Could not load functor at URL' end error(kind: T msg: 'Could not link module' items: [hint(l:K m:Url)]) [] module(urlSyntax Url) then error(kind: T msg: 'Illegal URL syntax' items: [hint(l:'URL' m:Url)]) [] module(typeMismatch Url _ _) then error(kind: T msg: 'Type mismatch' items: [hint(l:'URL' m:Url)]) else error(kind: T items: [line(oz(E))]) end end end mozart-1.4.0.20080704/share/lib/sp/Timer.oz0000664000000000000000000000211006677726050016370 0ustar rootrootfunctor import Timer(setTimer mTime) at 'x-oz://boot/Timer' export Alarm Delay TimerHandler DelayHandler define TimerBox proc {TimerHandler _} {Send TimerBox tick} end proc {DelayHandler E} case E of delay(T V) then {Alarm T V} end end fun {Alarm T} Synch in {Send TimerBox task({Timer.mTime}+T Synch)} !!Synch end proc {Delay T} {Wait {Alarm T}} end proc {ProcessTask Msgs Tasks} case Tasks of nil then {ProcessMsg Msgs nil} [] task(T V)|Tail then if T=<{Timer.mTime} then V=unit {ProcessTask Msgs Tail} else {Timer.setTimer T} {ProcessMsg Msgs Tasks} end end end proc {ProcessMsg Msgs Tasks} case Msgs of M|Msgs then case M of tick then {ProcessTask Msgs Tasks} [] task(T _) then {ProcessTask Msgs {Insert Tasks T M}} end end end fun {Insert Tasks T Task} case Tasks of nil then [Task] [] (Head=task(T2 _))|Tail then if T %%% Leif Kornstaedt %%% %%% Copyright: %%% Christian Schulte, 1998 %%% Leif Kornstaedt, 2001 %%% %%% Last change: %%% $Date: 2001-01-29 16:52:12 +0100 (Mon, 29 Jan 2001) $ by $Author: kornstae $ %%% $Revision: 13581 $ %%% %%% This file is part of Mozart, an implementation of Oz 3: %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% local %% %% Filtering of URLs %% local fun {IsNativeUrl Url} {HasFeature {CondSelect Url info no} native} end fun {UrlToString Url} {VirtualString.toString {UrlToVs Url}} end in fun {NewUrlFilter RootUrl Args} {Debug 'Root: '#{UrlToVs RootUrl}} BaseUrl = {UrlToString {UrlResolve RootUrl nil}} {Debug 'Base: '#{UrlToVs BaseUrl}} AllSpecs= {Map {Append {Access IncludeSpecs} if Args.relative then [include(BaseUrl) exclude("x-oz://")] else [exclude("x-oz://")] end} fun {$ Spec} Lab = {Label Spec} Str = Spec.1 in Lab({UrlToString {UrlExpand {UrlMake Str}}}) end} if Args.debug then {Debug 'Include/Exclude Specs:'} {ForAll AllSpecs proc {$ S} {Debug ' '#{Label S}#' '#S.1} end} end in fun {$ Url} if {IsNativeUrl Url} then false else try Str={UrlToString Url} in {Debug ' '#Str} {ForAll AllSpecs proc {$ S} if {List.isPrefix S.1 Str} then {Debug ' matches '#{Label S}#'("'#S.1#'")'} raise {Label S} end end end} false catch include then true [] exclude then false end end end end end %% %% Determine functors for both exclusion and inclusion %% %% Result: o(include: Include exclude: Exclude functors: Functors) %% where %% Include: %% is a record mapping the URL of every included functor %% to a simplified representation of its import. %% This import is represented as a record mapping every %% imported module name to its resolved URL (as an atom key %% suitable for accessing Include, Exclude, and Functors). %% Exclude: %% is a record mapping the URL of every excluded functor %% to its expected type. %% Functors: %% is a record mapping the URL of every included functor %% to the functor itself (with its import stripped of its types). %% local %% %% Type checking procedures %% CheckExpImp = {Property.condGet 'ozl.checkExpImp' fun {$ ExpType ImpType _} %% Must return either: %% no(TypeConflictDescription) %% ok ok end} CheckImpImp = {Property.condGet 'ozl.checkImpImp' fun {$ ImpType1 ImpType2} %% Must return either: %% no(TypeConflictDescription) %% ok(IntersectionType) ok(ImpType1) end} proc {DoFind Url Importer ImpType ToInclude InclMap ExclMap FuncMap} UrlKey = {UrlToAtom Url} in try if {Dictionary.member InclMap UrlKey} then ExpType in %% Typecheck what the module manager would normally do ExpType = {Dictionary.get FuncMap UrlKey}.'export' case {CheckExpImp ExpType ImpType o(url: UrlKey)} of ok then skip [] no(Conflict) then raise ar(exportImport(Conflict UrlKey Importer)) end end elseif {Dictionary.member ExclMap UrlKey} then %% Check for import <-> import matches case {CheckImpImp ImpType {Dictionary.get ExclMap UrlKey}} of ok(IntersectionType) then {Dictionary.put ExclMap UrlKey IntersectionType} [] no(Conflict) then raise ar(importImport(Conflict UrlKey)) end end elseif {ToInclude Url} then Func Embed in %% Load the functor Func = try {Pickle.load UrlKey} catch _ then raise ar(load(nil)) end end case ImpType of top then skip elsecase {CheckExpImp Func.'export' ImpType o(url: UrlKey)} of ok then skip [] no(Conflict) then raise ar(exportImport(Conflict UrlKey Importer)) end end {Dictionary.put FuncMap UrlKey case ImpType of top then Func else %% Strip the functor of its import types %% (to make them subject to garbage collection) {Functor.new {Record.map Func.'import' fun {$ Info} {Record.subtract Info type} end} Func.'export' Func.apply} end} %% Not using Record.map produces garbage early: {Dictionary.put InclMap UrlKey Embed} Embed = {List.toRecord 'import' {Map {Record.toListInd Func.'import'} fun {$ ModName#Info} EmbedUrl = if {HasFeature Info 'from'} then {UrlMake Info.'from'} else {ModNameToUrl ModName} end FullUrl = {UrlResolve Url EmbedUrl} in {DoFind FullUrl UrlKey {CondSelect Info type nil} ToInclude InclMap ExclMap FuncMap} ModName#{UrlToAtom FullUrl} end}} else {Dictionary.put ExclMap UrlKey case ImpType of top then nil else ImpType end} end catch ar(load(Urls)) then raise ar(load(UrlKey|Urls)) end end end in fun {Find RootUrl UrlFilter} {Debug 'Acquiring functors ...'} InclMap = {Dictionary.new} ExclMap = {Dictionary.new} FuncMap = {Dictionary.new} {DoFind RootUrl unit top UrlFilter InclMap ExclMap FuncMap} Include = {Dictionary.toRecord incl InclMap} Exclude = {Dictionary.toRecord excl ExclMap} Functors = {Dictionary.toRecord func FuncMap} in if {IsAtom Include} then raise ar(nothingToLink) end end o(include: Include exclude: Exclude functors: Functors) end end %% %% Schedule functors for application %% %% Result: either acyclic(Urls) or cyclic(Urls) %% where Urls is a list of URLs specifying functor evaluation order. %% %% The order of URLs has the following properties: %% Exclude functors come first; %% then the included functors; %% root functor comes last. %% local fun {DepthFirst RootKey Map} CurrentId = {NewCell 0} Stack = {NewCell nil} Done = {NewDictionary} Sorted = {NewCell nil} fun {GetCycle Key1|Keys Key} if Key1 == Key then {Assign Stack Keys} [Key1] else Key1|{GetCycle Keys Key} end end proc {Visit Key ?MinId} Id in Id = {Access CurrentId} {Assign CurrentId Id + 1} {Dictionary.put Done Key Id} {Assign Stack Key|{Access Stack}} MinId = {Record.foldL Map.Key fun {$ MinId Key2} if {HasFeature Map Key2} then {Min case {Dictionary.condGet Done Key2 unit} of unit then {Visit Key2} elseof Id then Id end MinId} else MinId end end Id} if MinId == Id then {Dictionary.put Done Key {Width Map}} {Assign Sorted {GetCycle {Access Stack} Key}|{Access Sorted}} end end in _ = {Visit RootKey} {Reverse {Access Sorted}} end in fun {Schedule RootUrl Info Args} {Debug 'Scheduling ...'} RootKey = {UrlToAtom RootUrl} Sorted = {DepthFirst RootKey Info.include} Lab = if {All Sorted fun {$ Urls} Urls.2 == nil end} then acyclic else cyclic end AllUrls = {Append {Arity Info.exclude} {Append {List.subtract {Flatten Sorted} RootKey} [RootKey]}} in if Args.sequential then if Lab == cyclic then {Trace 'Executing functor bodies concurrently '# 'due to cyclic dependencies.'} {ForAll Sorted proc {$ Urls} case Urls of [_] then skip else {Trace 'Cyclic dependency:\n'#{CommaList Urls}} end end} else {Trace 'Executing functor bodies sequentially.'} end end Lab(AllUrls) end end %% %% Assemble new functor %% local fun {IntToVarName I} {StringToAtom &V|{IntToString I}} end %% rewrite URL prefixes fun {RewriteString S Rules} case Rules of From#To|Rest then if {List.isPrefix From S} then To#{List.drop S {Length From}} else {RewriteString S Rest} end [] nil then S end end proc {RewriteFrom Url Rules ?NewUrl} NewUrl = {VirtualString.toAtom {RewriteString {VirtualString.toString Url} Rules}} {Debug Url#'\n\t=> '#NewUrl#'\n'} end in fun {Assemble RootUrl Order Info Args} {Debug 'Assembling ...'} RootUrlKey = {UrlToAtom RootUrl} Rewrite = if Args.relative then {Append Args.rewrite [{VirtualString.toString {UrlToVs {UrlResolve RootUrl nil}}}#""]} else Args.rewrite end UrlToInt = {List.toRecord urlToInt {List.mapInd Order.1 fun {$ I A} A#I end}} IsSeq = Args.sequential andthen {Label Order}==acyclic in %% Assemble local IMPORT = {List.toRecord '' {Map {Arity Info.exclude} fun {$ UrlKey} NewModName = {IntToVarName UrlToInt.UrlKey} in NewModName # info(type: Info.exclude.UrlKey 'from': {RewriteFrom UrlKey Rewrite}) end}} EXPORT = Info.functors.RootUrlKey.'export' local NoExcl = {Width Info.exclude} NoIncl = {Width Info.include} NoExclIncl = NoIncl + NoExcl InclTab = {List.toRecord '' {Map {Record.toListInd Info.include} fun {$ UrlKey#Spec} (UrlToInt.UrlKey) # {Record.mapInd Spec fun {$ ModName EmbedKey} UrlToInt.EmbedKey end} end}} FuncTab = {List.toRecord '' {Map {Record.toListInd Info.functors} fun {$ UrlKey#Func} (UrlToInt.UrlKey) # Func.'apply' end}} proc {FOR I J P} if I>J then skip else {P I} {FOR I+1 J P} end end MAP = Record.map fun {MKAPPLY ModMap I} ImpMap = {MAP InclTab.I fun {$ J} ModMap.J end} in proc {$} ModMap.I = {FuncTab.I ImpMap} end end MAINAPPLY = if IsSeq then proc {$ ModMap} {FOR NoExcl+1 NoExclIncl-1 proc {$ I} {{MKAPPLY ModMap I}} end} end else proc {$ ModMap} {FOR NoExcl+1 NoExclIncl-1 proc {$ I} APPLY={MKAPPLY ModMap I} in thread {APPLY} end end} end end in fun {BODY IMPORT} ModMap = {MakeTuple modmap NoExclIncl} in %% Enter excluded modules {FOR 1 NoExcl proc {$ I} ModMap.I=IMPORT.{IntToVarName I} end} %% Enter included modules {MAINAPPLY ModMap} %% Fix export {{MKAPPLY ModMap NoExclIncl}} ModMap.NoExclIncl end end in {Functor.new IMPORT EXPORT BODY} end end end in fun {Link RootUrl Args} ToInclude = {NewUrlFilter RootUrl Args} Info = {Find RootUrl ToInclude} Order = {Schedule RootUrl Info Args} Includes = {Filter Order.1 fun {$ Url} {HasFeature Info.include Url} end} Linked = {Assemble RootUrl Order Info Args} in {Trace 'Include:\n'#{CommaList Includes}} {Trace 'Import:\n'#{CommaList {Map {Record.toList Linked.'import'} fun {$ Info} Info.'from' end}}} Linked end end mozart-1.4.0.20080704/share/lib/linker/Print.oz0000664000000000000000000000617207333736630017255 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% Leif Kornstaedt %%% %%% Copyright: %%% Christian Schulte, 1998 %%% Leif Kornstaedt, 2001 %%% %%% Last change: %%% $Date: 2001-08-07 12:06:16 +0200 (Tue, 07 Aug 2001) $ by $Author: duchier $ %%% $Revision: 14059 $ %%% %%% This file is part of Mozart, an implementation of Oz 3: %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% fun {Usage} 'Usage: ozl [options] URL [options]\n' # '\n' # 'Options:\n' # '--help, --usage, -h, -?\n' # ' Print this message.\n' # '--out=FILE, -o FILE\n' # ' Specify where to write the output functor.\n' # ' If omitted, do not produce any output.\n' # '--[no]verbose (default: false)\n' # ' Print messages on activities performed.\n' # '--[no]relative (default: true)\n' # ' Include functors referred to by relative paths.\n' # ' Import URLs in the resulting functor remain relative.\n' # '--include=URL,..,URL (default: none, see --relative)\n' # ' Include functors with these URL prefixes.\n' # '--exclude=URL,..,URL (default: "x-oz://")\n' # ' Exclude functors with these URL prefixes.\n' # '--[no]sequential (default: false)\n' # ' Assume that functor bodies can be executed sequentially.\n' # '--rewrite=RULE,...,RULE\n' # ' Specifies how to replace import URL prefixes in resulting functor,\n' # ' where a RULE is of the form FROM=TO.\n' # '--[no]executable, -x (default: false)\n' # ' Output the functor as executable.\n' # '--execheader=STR\n' # ' Use header STR for executables\n' # ' (Unix default: "#!/bin/sh\\nexec ozengine $0 "$@"\\n").\n' # '--execpath=STR\n' # ' Use above header, with ozengine replaced by STR.\n' # '--execfile=FILE\n' # ' Use contents of FILE as header\n' # ' (Windows default: /bin/ozwrapper.bin).\n' # '--execwrapper=FILE\n' # ' Use above header, with ozwrapper.bin replaced by STR.\n' # '--target=(unix|windows)\n' # ' When creating an executable functor,\n' # ' do it for this platform (default current).\n'# '--compress=N, -z N (N: 0..9, default 0)\n' # ' Use compression level N for created pickle.\n' end local Width = 80 Ident = 3 local fun {Space N} if N==0 then nil else & |{Space N-1} end end in Start = {VirtualString.toAtom {Space Ident}} end fun {Break V|Vr N} L = {VirtualString.length V} NewN = N + L + 2 in if NewN > Width - Ident then if N == 0 then % does not fit onto a single line at all V#if Vr == nil then "" else ',\n'#Start#{Break Vr 0} end else '\n'#Start#V#if Vr == nil then "" else ', '#{Break Vr L + 2} end end else V#if Vr == nil then "" else ', '#{Break Vr N + L + 2} end end end in fun {CommaList Vs} case Vs of nil then Start#'.' [] _|_ then Start#{Break Vs 0}#'.' end end end mozart-1.4.0.20080704/share/lib/linker/Main.oz0000664000000000000000000001723307333736630017045 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Contributor: %%% Leif Kornstaedt %%% %%% Copyright: %%% Christian Schulte, 1998 %%% Leif Kornstaedt, 1998-2001 %%% %%% Last change: %%% $Date: 2001-08-07 12:06:16 +0200 (Tue, 07 Aug 2001) $ by $Author: duchier $ %%% $Revision: 14059 $ %%% %%% This file is part of Mozart, an implementation of Oz 3: %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor require URL(make: UrlMake toVirtualStringExtended: UrlToVsExt resolve: UrlResolve) DefaultURL(nameToUrl: ModNameToUrl) prepare fun {UrlToVs U} {UrlToVsExt U o(full:true)} end local V2A = VirtualString.toAtom in fun {UrlToAtom U} {V2A {UrlToVs U}} end end \insert 'Print.oz' proc {Swallow _} skip end import Pickle(load saveWithCells) Application(exit getArgs) System(show printError showError) FD(record distinctD distribute sumC) Search(base) OS(system) Resolve(expand) Open(file) Property(get condGet) define fun {MakeExecHeader Path} '#!/bin/sh\nexec '#Path#' $0 "$@"\n' end fun {MakeExecFile File} {Property.get 'oz.home'}#'/bin/'#File end DefaultExecWindows = file({MakeExecFile 'ozwrapper.bin'}) DefaultExecUnix = string({MakeExecHeader 'ozengine'}) DefaultExec = case {Property.get 'platform.os'} of win32 then DefaultExecWindows else DefaultExecUnix end proc {ReadFile File ?VS} F in F = {New Open.file init(name: File flags: [read])} {F read(list: ?VS size: all)} {F close()} end IncludeSpecs = {NewCell nil} local fun {MakeInclude Key} include(Key) end fun {MakeExclude Key} exclude(Key) end in proc {AddInclude _ L} Old New in {Exchange IncludeSpecs Old New} {Append {Map L MakeInclude} Old New} end proc {AddExclude _ L} Old New in {Exchange IncludeSpecs Old New} {Append {Map L MakeExclude} Old New} end end fun {StringPair S} From in case {List.takeDropWhile S fun {$ C} C \= &= end ?From} of &=|To then From#To [] nil then {Exception.raiseError ap(usage 'expected rewrite rule of the form FROM=TO')} unit end end ArgSpec = record(include(accumulate(AddInclude) type: list(string)) exclude(accumulate(AddExclude) type: list(string)) relative(rightmost type: bool default: true) verbose(rightmost char: &v type: bool default: false) quiet(char: &q alias: [verbose#false debug#false]) sequential(rightmost type: bool default: false) out(single char: &o type: string optional: true) rewrite(multiple type: list(StringPair) default: nil) target(rightmost type:atom(unix windows) default:unit) unix(alias:target#unix) windows(alias:target#windows) executable(rightmost char: &x type: bool default: false) execheader(single type: string validate: alt(when(disj(execpath execfile execwrapper) false))) execpath(single type: string validate: alt(when(disj(execheader execfile execwrapper) false))) execfile(single type: string validate: alt(when(disj(execheader execpath execwrapper) false))) execwrapper(single type: string validate: alt(when(disj(execheader execpath execfile) false))) compress(rightmost char: &z type: int(min: 0 max: 9) default: 0) debug(rightmost type: bool default: false) usage(alias: help) help(rightmost char: [&h &?] default: false)) UrlExpand = Resolve.expand {Application.exit try Args = {Application.getArgs ArgSpec} if Args.help then {System.showError {Usage}} raise ar(exit) end end RootUrl = case Args.1 of [GetInFile] then {UrlExpand {UrlResolve './' GetInFile}} else raise ar(inputFile) end end Trace = if Args.verbose then System.showError else Swallow end Debug = if Args.debug then System.showError else Swallow end \insert 'Link.oz' OutFunctor = {Link RootUrl Args} in if {HasFeature Args out} then try {Pickle.saveWithCells OutFunctor Args.out if Args.executable then Exec = case {CondSelect Args execheader unit} of unit then case {CondSelect Args execpath unit} of unit then case {CondSelect Args execfile unit} of unit then case {CondSelect Args execwrapper unit} of unit then case Args.target of unix then DefaultExecUnix [] windows then DefaultExecWindows else DefaultExec end elseof S then file({MakeExecFile S}) end elseof S then file(S) end elseof S then string({MakeExecHeader S}) end elseof S then string(S) end in case Exec of file(S) then {ReadFile S} [] string(S) then S end else '' end Args.compress} if Args.executable then case {Property.get 'platform.os'} of win32 then skip elseif {OS.system 'chmod +x '#Args.out}\=0 then raise ar(saveExec) end end end catch _ then raise ar(save(Args.out)) end end end 0 catch ar(Ar) then case Ar of load(Us) then U|Ur={Reverse Us} in {System.showError 'ERROR: Could not load functor '#U} if Ur\=nil then {System.printError ' included from\n'} {ForAll Ur proc {$ A} {System.printError ' '#A#'\n'} end} end 1 [] save(Url) then {System.showError 'ERROR: Could not save functor to file: '#Url#'.'} 1 [] importImport(Conflict Url) then {System.showError 'ERROR: Conflicting types for import modules.'} {Swallow Conflict} {Swallow Url} 1 [] importExport(Conflict EmbedUrl Url) then {System.showError 'ERROR: Type mismatch between included modules.'} {Swallow Conflict} {Swallow Url} {Swallow EmbedUrl} 1 [] nothingToLink then {System.showError 'ERROR: Nothing to link; root functor has been excluded.'} 1 [] inputFile then {System.showError 'Illegal usage: No or multiple input file(s) given.\n'} 0 [] exit then 0 end [] error(ap(usage VS) ...) then {System.showError 'Illegal usage: '#VS#'.\n'#{Usage}} 2 end} end /* {ForAll ['F'#functor import FD System G H export e:E define E=f(fd:FD system:System g:G h:H) end 'G'#functor import FD System H export e:E define E=g(fd:FD system:System h:H) end 'H'#functor import FD Property U at 'down/U.ozf' export E define E=h(fd:FD porperty:Property u:U) end 'down/U'#functor import FD System V export E define E=u(fd:FD system:System v:V) end 'down/V'#functor import System Tk U export E define E=v(tk:Tk system:System u:U) end ] proc {$ URL#F} {Pickle.save F URL#'.ozf'} end} {ForAll ['A'#functor import FD B export e:E define E=a(fd:FD b:B) end 'B'#functor import System C export e:E define E=b(system:System c:C) end 'C'#functor import D export E define E=h(d:D) end ] proc {$ URL#F} {Pickle.save F URL#'.ozf'} end} declare NF={Archive spec('in': 'F.ozf' relative: true exclude: )} {Pickle.save NF 'NF.ozf'} {Show NF} */ mozart-1.4.0.20080704/share/lib/init/0000775000000000000000000000000011033101631015233 5ustar rootrootmozart-1.4.0.20080704/share/lib/init/ModuleAbstractions.oz0000664000000000000000000000210706651575416021441 0ustar rootroot%%% %%% Author: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 1999-01-21 11:01:50 +0100 (Thu, 21 Jan 1999) $ by $Author: schulte $ %%% $Revision: 10566 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% fun {Link Us} %% Takes list of urls, returns list of modules ModMan = {New Module.manager init} in %% Compute pairlist of module name and module {Map Us fun {$ U} {ModMan link(url:U $)} end} end fun {Apply UFs} %% Takes a list of functors or pairs of urls and functors, %% returns list of modules ModMan = {New Module.manager init} in %% Compute pairlist of module name and module {Map UFs fun {$ UF} case UF of U#F then {ModMan apply(url:U F $)} else {ModMan apply(UF $)} end end} end mozart-1.4.0.20080704/share/lib/init/UrlExpand.oz0000664000000000000000000000516607162110747017537 0ustar rootroot%%% %%% Authors: %%% Denys Duchier (duchier@ps.uni-sb.de) %%% %%% Copyright: %%% Denys Duchier, 1998 %%% %%% Last change: %%% $Date: 2000-09-20 12:31:03 +0200 (Wed, 20 Sep 2000) $ by $Author: duchier $ %%% $Revision: 13143 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% %% TILDE and DOT NORMALIZATION: when `~' or `.' or `..' appear at the %% front of a filename, they can be expanded expanded respectively %% relative to a user directory of the current directory. local %% Base is a url record where (at the moment) only the path field %% is of interest. DIR is a list of parsed path components, to be %% interpreted relative to Base. Rel is a url record whose path %% field must be replaced by the new interpreted DIR. If, for some %% reason the interpretation is not applicable, Rel is returned. fun {Expand Base DIR Rel} %% Base should contain an absolute path Path = {CondSelect Base path nil} in if {CondSelect Base absolute false} andthen Path\=unit then N = {List.length Path} D = {CondSelect Base device unit} RelB in %% if Rel does not have a device and one is specified %% in Base, then we use that. This special treatment %% is because when it is present the device is logically %% part of the path. if D\=unit andthen {CondSelect Rel device unit}==unit then RelB={AdjoinAt Rel device D} else RelB=Rel end %% this path should usually be non-empty if N==0 then %% if empty, then Base dir is just "/" {AdjoinAt RelB absolute true} else %% the last component of this path needs special treatment Front Last {List.takeDrop Path N-1 Front [Last]} PATH = {Append Front %% if Base ends with a slash: drop the empty component if Last==nil then DIR else Last|DIR end} in {Adjoin RelB url(absolute:true path:{URL.normalizePath PATH})} end else Rel end end in fun {URL_expand Url} U = {UrlMake Url} in if {CondSelect U scheme unit}\=unit orelse {CondSelect U authority unit}\=unit orelse {CondSelect U device unit}\=unit then U else case {CondSelect U path unit} of (&~|USER)|DIR then {Expand {UrlMake if USER==nil then {GET 'user.home'} else {OS.getpwnam USER}.dir end} DIR U} [] DIR=(H|_) andthen (H=="." orelse H=="..") then {Expand {UrlMake {OS.getCWD}} DIR U} else U end end end end mozart-1.4.0.20080704/share/lib/init/Prop.oz0000664000000000000000000000575610022342247016551 0ustar rootroot%%% -*-oz-*- %%% Authors: %%% Denys Duchier (duchier@ps.uni-sb.de) %%% %%% Copyright: %%% Denys Duchier, 1998 %%% %%% Last change: %%% $Date: 2004-03-06 13:31:35 +0100 (Sat, 06 Mar 2004) $ by $Author: duchier $ %%% $Revision: 15794 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% %%% Here we initialize all system properties %%% %%% oz.home OZHOME OZ_HOME %%% oz.search.path OZPATH OZ_PATH OZ_SEARCH_PATH %%% oz.search.load OZLOAD OZ_LOAD OZ_SEARCH_LOAD %%% os.name %%% os.cpu (os.arch) %%% path.separator OZ_PATH_SEPARATOR %%% path.escape OZ_PATH_ESCAPE (to escape a path separator) %%% user.home HOME PLATFORM_OS = {GET 'platform.os'} PATH_SEPARATOR = case {Getenv 'OZ_PATH_SEPARATOR'} of [C] then C elsecase PLATFORM_OS of win32 then &; else &: end PATH_ESCAPE = case {Getenv 'OZ_PATH_ESCAPE'} of [C] then C elsecase PLATFORM_OS of win32 then unit else &\\ end fun {SafePath P} case {Reverse {VirtualString.toString P}} of H|T then if H==&/ orelse H==&\\ then {Reverse T} else P end else P end end OZ_HOME = {SafePath case {Getenv 'OZ_HOME'} of false then case {Getenv 'OZHOME'} of false then {GET 'oz.configure.home'} elseof V then V end elseof V then V end} OZ_SEARCH_PATH = case {Getenv 'OZ_SEARCH_PATH'} of false then case {Getenv 'OZ_PATH'} of false then case {Getenv 'OZPATH'} of false then '.'#[PATH_SEPARATOR]#OZ_HOME#'/share' elseof V then V end elseof V then V end elseof V then V end OZ_DOTOZ = case {Getenv 'OZ_DOTOZ'} of false then case {Getenv 'OZDOTOZ'} of false then '~/.oz/'#{GET 'oz.version'} elseof V then {SafePath V} end elseof V then {SafePath V} end OZ_SEARCH_LOAD = case {Getenv 'OZ_SEARCH_LOAD'} of false then case {Getenv 'OZ_LOAD'} of false then case {Getenv 'OZLOAD'} of false then 'cache='#OZ_DOTOZ#'/cache'#[PATH_SEPARATOR]# 'cache='#OZ_HOME#'/cache' elseof V then V end elseof V then V end elseof V then V end USER_HOME = case PLATFORM_OS of win32 then HOMEDRIVE = {OS.getEnv "HOMEDRIVE"} HOMEPATH = {OS.getEnv "HOMEPATH"} in if HOMEDRIVE == false orelse HOMEPATH == false then case {Getenv 'HOME'} of false then {OS.getCWD} elseof V then V end else {VirtualString.toString HOMEDRIVE#HOMEPATH} end elsecase {Getenv 'HOME'} of false then {OS.getCWD} elseof V then V end OZ_TRACE_LOAD = case {Getenv 'OZ_TRACE_LOAD'} of false then false else true end {SET 'path.separator' PATH_SEPARATOR } {SET 'path.escape' PATH_ESCAPE } {SET 'oz.home' OZ_HOME } {SET 'oz.search.path' OZ_SEARCH_PATH } {SET 'oz.search.load' OZ_SEARCH_LOAD } {SET 'user.home' USER_HOME } {SET 'oz.trace.load' OZ_TRACE_LOAD } {SET 'oz.dotoz' OZ_DOTOZ } mozart-1.4.0.20080704/share/lib/init/Module.oz0000664000000000000000000002011607770342460017056 0ustar rootroot%%% %%% Author: %%% Christian Schulte %%% %%% Contributors: %%% Denys Duchier %%% Leif Kornstaedt %%% %%% Copyright: %%% Denys Duchier, 1998 %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 2003-12-18 16:18:08 +0100 (Thu, 18 Dec 2003) $ by $Author: raph $ %%% $Revision: 15709 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor NewModule import System OS Boot Property Resolve export root: RM manager: Manager trace: ApiTrace prepare fun {IsNative Url} {HasFeature {CondSelect Url info info} 'native'} end NONE = {NewName} LINK = {NewName} APPLY = {NewName} ENTER = {NewName} LOAD = {NewName} SYSTEM = {NewName} NOTYPE = {NewName} proc {TraceOFF _ _} skip end class UnsitedBaseManager prop locking feat ModuleMap TypeCheckProc meth init(TypeChecker <= unit) self.ModuleMap = {Dictionary.new} self.TypeCheckProc = TypeChecker end meth !LINK(Url ExpectedType ?Entry ?Module) %% Return module from "Url" lock Key={UrlToAtom Url} ModMap=self.ModuleMap in if {Dictionary.member ModMap Key} then {self trace('link [found]' Url)} else {self trace('link [lazy]' Url)} {Dictionary.put ModMap Key {ByNeedFuture fun {$} if {CondSelect Url scheme unit}==OzScheme then {self SYSTEM(Url $)} else {self LOAD( Url $)} end end}} end Entry = {Dictionary.get ModMap Key} Module = if self.TypeCheckProc==unit then %% avoid laziness if possible if {IsDet Entry} then Entry.1 else {ByNeedFuture fun {$} Entry.1 end} end else %% this could easily be improved to avoid %% unnecessary laziness {ByNeedFuture fun {$} case Entry of Module#ActualType then case ExpectedType of !NOTYPE then Module elsecase ActualType of !NOTYPE then Module elsecase {Procedure.arity self.TypeCheckProc} of 3 andthen {self.TypeCheckProc ActualType ExpectedType} then Module [] 4 andthen {self.TypeCheckProc ActualType ExpectedType o(url: Key)} == ok then Module else {Value.failed system(module(typeMismatch Key ActualType ExpectedType))} end end end} end end end meth !APPLY(Url Func $) {self trace('apply' Url)} %% Applies a functor and returns a module IM={Record.mapInd Func.'import' fun {$ ModName Info} EmbedUrl = if {HasFeature Info 'from'} then {UrlMake Info.'from'} else {ModNameToUrl ModName} end in UnsitedBaseManager,LINK({UrlResolve Url EmbedUrl} {CondSelect Info 'type' NOTYPE} _ $) end} in {Func.apply IM} end meth !ENTER(Url Module ActualType) {self trace('enter' Url)} %% Stores "Module" under "Url" lock Key={UrlToAtom Url} in if {Dictionary.member self.ModuleMap Key} then raise system(module(alreadyInstalled Key)) end else {Dictionary.put self.ModuleMap Key Module#ActualType} end end end end define fun {NameOrUrlToUrl ModName UrlV} {Resolve.expand if UrlV==NONE then {ModNameToUrl ModName} else {UrlMake UrlV} end} end class BaseManager from UnsitedBaseManager meth link(name: ModName <= NONE url: UrlV <= NONE type: ExpectedType <= NOTYPE ?Module <= _) = Message Url = {NameOrUrlToUrl ModName UrlV} in Module = UnsitedBaseManager,LINK(Url ExpectedType _ $) if {Not {HasFeature Message 1}} then thread try {Wait Module} catch _ then skip end end end end meth enter(name: ModName <= NONE url: UrlV <= NONE type: ActualType <= NOTYPE Module) Url = {NameOrUrlToUrl ModName UrlV} in UnsitedBaseManager,ENTER(Url Module ActualType) end meth apply(name: ModName <= NONE url: UrlV <= NONE Func ?Module <= _) = Message Url = if ModName==NONE andthen UrlV==NONE then {UrlMake {OS.getCWD}#'/'} else {NameOrUrlToUrl ModName UrlV} end in Module = UnsitedBaseManager,APPLY(Url Func $) if {Not {HasFeature Message 2}} then thread try {Wait Module} catch _ then skip end end end end end proc {TraceON X1 X2} {System.printError 'Module manager: '#X1#' '#{UrlToVs X2}#'\n'} end Trace = {NewCell if {OS.getEnv 'OZ_TRACE_MODULE'}==false then TraceOFF else TraceON end} ApiTrace = trace(set:proc {$ B} {Assign Trace if B then TraceON else TraceOFF end} end get:fun {$ B} {Access Trace}==TraceON end) PLATFORM = {Property.get 'platform.name'} class RootManager from BaseManager meth trace(M1 M2) {{Access Trace} M1 M2} end meth !LOAD(Url $) %% Takes a URL and returns a module %% check if URL is annotated as denoting a `native functor' if {IsNative Url} then %% if yes, use the Foreign loader {self Native(Url $)} else {self Pickle(Url Url $)} end end meth Native(Url $) {self trace('native module' Url)} %% note that this method will not attempt to %% localize. A derived class could redefine it %% to attempt localization. try {Resolve.native.native {UrlToVs Url}#'-'#PLATFORM}#NOTYPE catch system(foreign(dlOpen _) ...) then raise system(module(notFound native {UrlToAtom Url})) end [] error(url(_ _) ...) then raise system(module(notFound native {UrlToAtom Url})) end end end meth Pickle(Url ResUrl $) Func in try Func = {Resolve.pickle.load ResUrl} catch error(url(O _) ...) then raise system(module(notFound O {UrlToAtom Url})) end end {self APPLY(Url Func $)}#Func.'export' end meth SystemResolve(Auth Url $) if Auth==boot orelse {IsNative Url} then Url elsecase {Reverse {CondSelect Url path nil}} of H|T then if {Member &. H} then Url else {AdjoinAt Url path {Reverse {VirtualString.toString H#FunctorExt}|T}} end end end meth SystemApply(Auth Url $) U = {self SystemResolve(Auth Url $)} in if {IsNative U} then {self Native(U $)} else {self Pickle(U U $)} end end meth GetSystemName(Url IsBoot $) case {CondSelect Url path unit} of [Name] then %% drop the extension of any {String.token Name &. $ _} elseif IsBoot then raise error(module(urlSyntax {UrlToAtom Url})) end else unit end end meth GetSystemBoot(Name $) {self trace('boot module' Name)} {Boot.getInternal Name}#NOTYPE end meth !SYSTEM(Url0 $) Auth Url in try Auth = {StringToAtom {CondSelect Url0 authority ""}} Url = {self SystemResolve(Auth Url0 $)} catch _ then raise error(module(urlSyntax {UrlToAtom Url0})) end end {self trace('system method' Url)} if {IsNative Url} then {self Native(Url $)} elsecase {StringToAtom {CondSelect Url authority ""}} of boot then %% a boot module may either be provided internally %% (i.e. statically linked in) or as a DLL {self trace('boot module' Url)} try {self GetSystemBoot({self GetSystemName(Url true $)} $)} catch _ then {self Native({UrlMake {UrlToAtom Url}#'.so{native}'} $)} end [] system then Name={self GetSystemName(Url false $)} in {self trace('system module' Url)} if Name \= unit andthen {IsNatSystemName Name} then RootManager,SYSTEM({UrlMake OzScheme#'://boot/'#Name} $) else {self Pickle(Url Url $)} end [] contrib then {self trace('contrib module' Url)} {self Pickle(Url Url $)} else raise error(module(urlSyntax {UrlToAtom Url})) end end end end RM = {New RootManager init} class Manager from RootManager prop sited meth !SYSTEM(Url $) {RM LINK(Url NOTYPE $ _)} end end end mozart-1.4.0.20080704/share/lib/init/Init.oz0000664000000000000000000001504507437247406016545 0ustar rootroot%%% %%% Authors: %%% Denys Duchier %%% Christian Schulte %%% %%% Contributor: %%% Leif Kornstaedt %%% %%% Copyright: %%% Denys Duchier, 1998 %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 2002-02-27 22:26:30 +0100 (Wed, 27 Feb 2002) $ by $Author: duchier $ %%% $Revision: 14777 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor require URL(make: UrlMake is: UrlIs normalizePath: UrlNormalizePath resolve: UrlResolve toVirtualString: UrlToVs toAtom: UrlToAtom toBase: UrlToBase toString: UrlToString isRelative: UrlIsRelative toVirtualStringExtended: UrlToVsExtended) DefaultURL(ozScheme functorExt: FunctorExt nameToUrl: ModNameToUrl isNatLibName: IsNatSystemName) prepare DotUrl = {UrlMake './'} OzScheme = {VirtualString.toString DefaultURL.ozScheme} functor ErrorHandler import Debug(setRaiseOnBlock) at 'x-oz://boot/Debug' Property(put condGet) System(onToplevel showError show) Application(exit) at 'x-oz://boot/Application' Error(printException) define proc {ExitError} {Application.exit 1} end proc {ErrorHandler Exc} %% ignore thread termination exception case Exc of system(kernel(terminate) ...) then skip else try {Thread.setThisPriority high} {Debug.setRaiseOnBlock {Thread.this} true} {Error.printException Exc} {Debug.setRaiseOnBlock {Thread.this} false} catch _ then {System.showError '*** error while reporting error ***\noriginal exception:'} {System.show Exc} {Application.exit 1} end %% terminate local computation if {System.onToplevel} then {{Property.condGet 'errors.toplevel' ExitError}} elsecase Exc of failure(...) then fail else {{Property.condGet 'errors.subordinate' ExitError}} end end end {Property.put 'errors.handler' ErrorHandler} end \insert 'init/Module.oz' \ifdef DENYS_EVENTS functor Event import Event(getStream) at 'x-oz://boot/Event' Error(registerFormatter) EventSIGCHLD(handler) at 'x-oz://system/EventSIGCHLD' Timer(timerHandler delayHandler) OS(ioHandler) Perdio(handler) export put : PutEventHandler get : GetEventHandler condGet : CondGetEventHandler define Handlers = {Dictionary.new} proc {PutEventHandler Label P} {Dictionary.put Handlers Label P} end fun {GetEventHandler Label} {Dictionary.get Handlers Label} end fun {CondGetEventHandler Label Default} {Dictionary.condGet Handlers Label Default} end %% default handler raises an exception in a new thread proc {DefaultHandler E} thread {Exception.raiseError event(noHandler E)} end end %% to handle an event, look up the handler using the %% event label proc {HandleEvent E} if {IsDet E} andthen {IsRecord E} then try {{Dictionary.condGet Handlers {Label E} DefaultHandler} E} catch Exc then thread {Raise Exc} end end else thread {Exception.raiseError event(noEvent E)} end end end %% print out nice error messages {Error.registerFormatter event fun {$ E} T = 'error in Event module' in case E of event(noHandler E) then error(kind : T msg : 'no handler for event' items: [hint(l:'event: ' m:oz(E))]) [] event(noEvent E) then error(kind : T msg : 'not an event value' items: [hint(l:'event: ' m:oz(E))]) end end} %% register some handlers {PutEventHandler 'SIGCHLD' EventSIGCHLD.handler} {PutEventHandler 'timer' Timer .timerHandler} {PutEventHandler 'delay' Timer .delayHandler} {PutEventHandler 'io' OS .ioHandler} {PutEventHandler 'dp.init' Perdio .handler} %% start a high priority thread to process the event stream thread {Thread.setPriority {Thread.this} 'high'} {ForAll {Event.getStream} HandleEvent} end end \endif import Boot at 'x-oz://boot/Boot' define %% The mechanism with which builtin modules can be accessed GetInternal = Boot.getInternal GetNative = Boot.getNative %% Retrieve modules needed to get things started BURL = {GetInternal 'URL'} OS = {GetInternal 'OS'} Pickle = {GetInternal 'Pickle'} Property = {GetInternal 'Property'} System = {GetInternal 'System'} %% Shortcuts Getenv = OS.getEnv SET = Property.put GET = Property.get %% usual system initialization \insert 'init/Prop.oz' \insert 'init/Resolve.oz' {SET load Resolve.load} %% execute application local %% create module manager Module = {NewModule.apply 'import'('System': System 'OS': OS 'Boot': Boot 'Property': Property 'Resolve': Resolve)} %% The root module manager RM = Module.root %% The real Module module local \insert 'ModuleAbstractions.oz' in RealModule = 'export'(manager: Module.manager trace: Module.trace link: Link apply: Apply) end in %% Register boot modules {RM enter(url:'x-oz://boot/URL' BURL)} {RM enter(url:'x-oz://boot/Boot' Boot)} %% Register volatile system modules {RM enter(url:'x-oz://system/OS.ozf' OS)} {RM enter(url:'x-oz://system/Property.ozf' Property)} {RM enter(url:'x-oz://system/Pickle.ozf' Pickle)} {RM enter(url:'x-oz://system/System.ozf' System)} {RM enter(url:'x-oz://system/Resolve.ozf' Resolve)} {RM enter(url:'x-oz://system/Module.ozf' RealModule)} %% Install error handler {RM apply(ErrorHandler)} \ifdef DENYS_EVENTS %% Start event handling local M = {RM apply(name:'Event' Event $)} in {RM enter(name:'Event' M)} end \endif %% Link root functor (i.e. application) {Wait {RM link(url:{GET 'application.url'} $)}} end end mozart-1.4.0.20080704/share/lib/init/Resolve.oz0000664000000000000000000003247107365556515017267 0ustar rootroot%%% %%% Authors: %%% Denys Duchier (duchier@ps.uni-sb.de) %%% %%% Copyright: %%% Denys Duchier, 1998 %%% %%% Last change: %%% $Date: 2001-10-24 17:25:01 +0200 (Wed, 24 Oct 2001) $ by $Author: duchier $ %%% $Revision: 14423 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% %%% ================================================================== %%% A URL denotes a networked resource, typically a file of data. %%% Normally, one would retrieve the data from the networked location %%% represented by the URL itself. However, it is sometimes desirable %%% to retrieve the data from a different location instead. For %%% example: (1) to access a local cache (faster than downloading from %%% the net, (2) to override one implementation with another without %%% changing the URL, (3) to bootstrap a system. Also, we want this %%% capability for file paths, relative or not. This package %%% implements a mechanism that generalizes the concept of `search %%% path': instead of having several alternative directories, we have %%% several alternative `methods'. %%% %%% Each `method' or `handler' H is a procedure, called as follows: %%% %%% {H URL METH MSG} %%% %%% where URL is the parsed representation of a URL. METH is a %%% a procedure which takes as an argument the URL transformed by the %%% handler and either raises found(V), if it successfully retrieved %%% value V from the location, or returns if it failed. MSG is a %%% procedure that takes 5 arguments, each is either a virtual string %%% or a URL, which are printed as a 1 line message if tracing is %%% enabled. %%% ================================================================== local BURL_localize = BURL.localize BURL_open = BURL.open BURL_load = BURL.load \insert UrlExpand.oz %% here we assume that the url has already been expanded if it %% was relative fun {Meth_localize U} {BURL_localize {UrlToVs U}} end fun {Meth_open U} {BURL_open {UrlToVs U}} end fun {Meth_load U} {BURL_load {UrlToVs U}} end %fun {Meth_native_usual U} {GetNative {UrlToVs U}} end fun {Meth_native_win32 U} %% on windows we also try the non-encoded version since %% some filenames may contain spaces. we really need %% something more principled, but this will do for the %% time being. The general solution should not involve %% possible manipulations on the C++ side. In fact there %% should be no C++ side. It should all be done in Oz. %%-- {System.showError "Trying "#{UrlToVs U}} try {GetNative {UrlToVs U}} catch system(...) then %%-- {System.showError "Trying "#{UrlToVsExtended U o(raw:true)}} {GetNative {UrlToVsExtended U o(raw:true)}} end end Meth_native = /*if PLATFORM_OS==win32 then*/ Meth_native_win32 /*else Meth_native_usual end*/ %% the default way of applying a method to a parsed URL: all system %% exceptions are considered to indicate that the data was not %% available at this location and are ignored; all other exceptions %% are passed through. If a value V is obtained, exception %% found(V) is raised. proc {Do_Method M U} V OK in try {M if {UrlIsRelative U} then {URL_expand {UrlResolve DotUrl U}} else U end V} OK=true catch system(...) then OK=false [] error(dp(generic 'URLhandler' _ _) ...) then OK=false end if OK then raise found(V) end else skip end end Methods = m(localize : proc {$ U} {Do_Method Meth_localize U} end open : proc {$ U} {Do_Method Meth_open U} end load : proc {$ U} {Do_Method Meth_load U} end native : proc {$ U} {Do_Method Meth_native U} end) %% ---------------------------------------------------------------- %% Tracing %% ---------------------------------------------------------------- Trace = {NewCell {GET 'oz.trace.load'}} proc {GetTrace B} {Access Trace B} end proc {SetTrace B} {Assign Trace B} end Full_Url = o(full:true) fun {ToVS A} if {UrlIs A} then {UrlToVsExtended A Full_Url} else A end end proc {TraceMsg A B C D E F} %% the 1st arg is the resolver's title %% the other 5 args are the MSG procedure's arguments {System.printError '['#{ToVS A}#'] ' #{ToVS B}#{ToVS C}#{ToVS D}#{ToVS E}#{ToVS F}#'\n'} end %% ---------------------------------------------------------------- %% Handler Constructors %% ---------------------------------------------------------------- %% default proc {Default_Handler Url Meth Msg} NewUrl = {URL_expand Url} in {Msg '...[' NewUrl '] (default)' nil nil} {Meth NewUrl} end %% all fun {Make_All_Handler DIR} Base = {UrlToBase DIR} in proc {$ Url Meth Msg} Path = {CondSelect Url path unit} in if Path==unit orelse Path==nil then {Msg '...[not applicable] (all ' Base ')' nil nil} else Rel=url(path:[{List.last Path}]) NewUrl = {URL_expand {UrlResolve Base Rel}} in {Msg '...[' NewUrl '] (all)' nil nil} {Meth NewUrl} end end end %% root fun {Make_Root_Handler DIR} Base = {UrlToBase DIR} in proc {$ Url Meth Msg} if {UrlIsRelative Url} then NewUrl = {URL_expand {UrlResolve Base Url}} in {Msg '...[' NewUrl '] (root)' nil nil} {Meth NewUrl} else {Msg '...[not applicable] (root ' Base ')' nil nil} end end end %% cache fun {Make_Cache_Handler DIR} Base = {UrlToBase DIR} in proc {$ Url Meth Msg} if {CondSelect Url scheme unit}\=unit then Rel = {UrlMake {UrlToVsExtended Url x(cache:true)}} NewUrl = {URL_expand {UrlResolve Base Rel}} in {Msg '...[' NewUrl '] (cache)' nil nil} {Meth NewUrl} else {Msg '...[not applicable] (cache ' Base ')' nil nil} end end end %% pattern fun {Make_Pattern_Handler LSpec RSpec} LPat = {Pattern_Parse LSpec} RPat = {Pattern_Parse RSpec} in proc {$ Url Meth Msg} try Alist = {Pattern_Match LPat {UrlToString Url}} Arec = {List.toRecord alist Alist} NewPat = {Pattern_Instantiate RPat Arec} NewUrl = {URL_expand {UrlMake NewPat}} in {Msg '...[' NewUrl '] (pattern)' nil nil} {Meth NewUrl} catch no then {Msg '...[not applicable] (pattern ' LSpec ' -> ' RSpec ')'} end end end %% prefix fun {Make_Prefix_Handler Prefix Subst} {Make_Pattern_Handler {Append Prefix "?{x}"} {Append Subst "?{x}"}} end %% pattern utils %% returns true if S1 is a prefix of S2 and binds S3 to the %% remaining suffix fun {IsPrefix S1 S2 S3} case S1 of nil then S3=S2 true [] H1|T1 then case S2 of H2|T2 then H1==H2 andthen {IsPrefix T1 T2 S3} else false end end end %% Splits Input at the first occurrence of string Str %% binds Prefix to what occurred before and Suffix %% to what is left after proc {SplitAtString Str Input Prefix Suffix} if {IsPrefix Str Input Suffix} then Prefix=nil else case Input of H|T then PrefixTail in Prefix=H|PrefixTail {SplitAtString Str T PrefixTail Suffix} else raise no end end end end %% returns a list of element of the form str(S) or var(V S) where S %% is a string and V a symbol. str(S) can only occur at the front %% of the pattern: it is the string that precedes the 1st pattern %% variable. var(V S) represents a pattern variable that extends %% to the first occurrence of string S. fun {Pattern_Parse Input} Prefix Suffix in try if try {SplitAtString "?{" Input Prefix Suffix} true catch no then false end then str(Prefix)|{Pattern_Parse_aux Suffix} else [str(Input)] end catch badPattern then raise resolve(patternParse Input) end end end fun {Pattern_Parse_aux Input} Prefix1 Suffix1 Prefix2 Suffix2 in {SplitAtString "}" Input Prefix1 Suffix1} if try {SplitAtString "?{" Suffix1 Prefix2 Suffix2} true catch no then false end then var({String.toAtom Prefix1} Prefix2) | {Pattern_Parse_aux Suffix2} else [ var({String.toAtom Prefix1} Suffix1) ] end end fun {Pattern_Match Specs Input} case Specs of nil then case Input of nil then nil else raise no end end [] H|T then case H of var(V Sep) then case Sep of nil then (V#Input)|{Pattern_Match T nil} else Prefix Suffix in {SplitAtString Sep Input Prefix Suffix} (V#Prefix)|{Pattern_Match T Suffix} end [] str(Str) then Suffix in if {IsPrefix Str Input Suffix} then {Pattern_Match T Suffix} else raise no end end end end end fun {Pattern_Instantiate Pat Arec} case Pat of nil then nil [] H|T then case H of str(Str) then Str#{Pattern_Instantiate T Arec} [] var(V Sep) then Arec.V#Sep#{Pattern_Instantiate T Arec} end end end %% convert a string to a list of handlers fun {StringToHandlers L} SEP = {GET 'path.separator'} % usually `:' ESC = {GET 'path.escape' } % usually `\' fun {Parse L} case L of nil then [Default_Handler] elseof "=" then nil elseof &a|&l|&l|&=|T then DIR#Rest = {Gather T SEP ESC} in {Make_All_Handler DIR}|{Parse Rest} elseof &r|&o|&o|&t|&=|T then DIR#Rest = {Gather T SEP ESC} in {Make_Root_Handler DIR}|{Parse Rest} elseof &c|&a|&c|&h|&e|&=|T then DIR#Rest = {Gather T SEP ESC} in {Make_Cache_Handler DIR}|{Parse Rest} elseof &p|&r|&e|&f|&i|&x|&=|T then PREFIX#Tmp = {Gather T &= ESC} SUBST #Rest = {Gather Tmp SEP ESC} in {Make_Prefix_Handler PREFIX SUBST}|{Parse Rest} elseof &p|&a|&t|&t|&e|&r|&n|&=|T then LEFT #Tmp = {Gather T &= ESC} RIGHT#Rest = {Gather Tmp SEP ESC} in {Make_Pattern_Handler LEFT RIGHT}|{Parse Rest} else URL#Rest = {Gather L SEP ESC} in {Make_Root_Handler URL}|{Parse Rest} end end in {Parse L} end %% {Gather L SEP ESC} ==> PREFIX#SUFFIX %% Splits string L at the first non-escaped occurrence of character %% SEP. Any character can be escaped by preceding it with %% character ESC. The ESC character is stripped off. A pair is %% returned: PREFIX is what occurred before SEP, and SUFFIX is what %% is left after it. fun {Gather L SEP ESC} fun {Loop L Accu} case L of nil then {Reverse Accu}#nil [] H|T then if H==ESC then case T of nil then {Reverse H|Accu}#nil [] H|T then {Loop T H|Accu} end elseif H==SEP then {Reverse Accu}#T else {Loop T H|Accu} end end end in {Loop L nil} end %% creating a resolver proc {NoMSG _ _ _ _ _} skip end fun {MakeResolver TITLE Init} Title = {VirtualString.toAtom TITLE} proc {MSG S1 S2 S3 S4 S5} {TraceMsg Title S1 S2 S3 S4 S5} end Handlers = {NewCell [Default_Handler]} proc {GetHandlers L} {Access Handlers L} end proc {SetHandlers L} {Assign Handlers L} end proc {AddHandler H} case H of front(H) then L in {Exchange Handlers L H|L} [] back( H) then O N in {Exchange Handlers O N} {Append O [H] N} else L in {Exchange Handlers L H|L} end end proc {Get Loc Value MethodName} Msg = if {Access Trace} then MSG else NoMSG end Url = {UrlMake Loc} Meth = Methods.MethodName in {Msg MethodName ' request: ' Url nil nil} try {ForAll {Access Handlers} proc {$ H} {H Url Meth Msg} end} {Msg '...all handlers failed' nil nil nil nil} {Exception.raiseError url(MethodName {VirtualString.toAtom {UrlToVsExtended Url o(full:true)}})} catch found(V) then {Msg '...' MethodName ' succeeded' nil nil} Value=V end end proc {Localize Url Value} {Get Url Value localize} end proc {Open Url Value} {Get Url Value open } end proc {Load Url Value} {Get Url Value load } end proc {Native Url Value} {Get Url Value native } end in case Init of unit then skip [] init(L) then {SetHandlers L} [] env( L) then S={OS.getEnv L} in if S==false then skip else {SetHandlers {StringToHandlers S}} end [] env( L D) then S={OS.getEnv L} in {SetHandlers {StringToHandlers if S==false then {VirtualString.toString D} else S end}} [] vs( L) then {SetHandlers {StringToHandlers {VirtualString.toString L}}} end Title(getHandlers : GetHandlers setHandlers : SetHandlers addHandler : AddHandler localize : Localize open : Open load : Load native : Native) end %% create a resolver for loading LoadResolver = {MakeResolver load vs(OZ_SEARCH_LOAD)} NativeResolver = {MakeResolver native vs(OZ_SEARCH_LOAD)} in Resolve = {Adjoin LoadResolver resolve( trace : trace(set : SetTrace get : GetTrace) handler : handler( default : Default_Handler all : Make_All_Handler root : Make_Root_Handler cache : Make_Cache_Handler prefix : Make_Prefix_Handler pattern : Make_Pattern_Handler ) makeResolver : MakeResolver make : MakeResolver expand : URL_expand pickle : LoadResolver native : NativeResolver )} end mozart-1.4.0.20080704/share/lib/analyze0000775000000000000000000001227106500744462015706 0ustar rootroot#! /usr/local/bin/perl # Copyright © by Denys Duchier, Mar 1998, Universität des Saarlandes # # analyze the frequency of instruction sequences # instructions maybe normalized arbitrarily to allow the recognition # of more general sequences. to plug in your own normalizer, you # should write a perl file that contains a function (say foo) to be # called for normalizing an instruction. the instruction will be # available as $_ and foo should side-effect $_. the file must end # with `1;' so that `require' may succeed. the file should also install # foo as the normalizing function using `$normalize = \&foo;'. local $normalize; my ($option,$tmp,$cutoff,$width,$do_tables); # default values $tmp = $ENV{'TMPDIR'} || "/tmp"; # tmp directory $cutoff = 50; $width = 2; $normalize = \&normalize_much; $do_tables = 0; select(STDERR); $|=1; select(STDOUT); $|=1; while ($ARGV[0] =~ /^-/) { $option = shift; if ($option eq '--') { break; } elsif ($option eq '--help') { &help; } elsif ($option =~ /^--tmpdir=/) { $tmp = glob($'); } elsif ($option =~ /^--cutoff=/) { $cutoff = int($'); die "illegal cutoff value: $cutoff" unless $cutoff > 0; } elsif ($option =~ /^--width=/ ) { $width = int($'); die "illegal width value: $width" unless $width > 0; } elsif ($option =~ /^--load=/) { require $'; } elsif ($option eq '--tables') { $do_tables = 1; } else { die "unknown option: $option"; } } &do_tables if $do_tables; sub help { print STDOUT <= N times (default N=50) --width=N consider sequences of N instructions (default N=2) --load=FILE load FILE --tables just analyze frequency of tables in callBI and testBI EOF exit(0); } sub do_tables { my (%i,%o,%io); my ($i,$o,$io); my $n = 0; while (<>) { next if /\b[xy]\(\d\d\d/o; next unless /\b(call|test)BI\(\S+ (.*)\#(.*) /; $n++; $i=$2; $o=$3; $io="$2#$3"; $i{$i} = 1 + int($i{$i}); $o{$o} = 1 + int($o{$o}); $io{$io} = 1 + int($io{$io}); } print "TOTAL NUMBER OF TABLES: $n\n"; &pp_table(\%i,"IN"); &pp_table(\%o,"OUT"); &pp_table(\%io,"IN#OUT"); exit(0); } sub pp_table { my $table = shift; my $title = shift; print "\n$title TABLES\n"; my @l = (); my ($k,$v); while (($k,$v) = each %$table) { next if $v < $cutoff; push @l,{k=>$k,v=>$v}; } @l = sort { $b->{v} <=> $a->{v} } @l; my $x; foreach $x (@l) { print $x->{v},"\t",$x->{k},"\n"; } } my $n = $width; # how many consecutive instructions my $N = $n-2; my $M = $n-1; my $normalizer = $normalize; # 1. normalize the input sub normalize_much { s/\b(definition|endDefinition|putRecord|setConstant|callBI|testBI)\(.*\)/\1\(\)/; s/\bputConstant\(\S+\s/putConstant\(/; s/\b(switchOnTerm\(\S+).*\)/\1\)/; s/\bx\(\d+\)/x\(\)/g; s/\by\(\d+\)/y\(\)/g; s/\bg\(\d+\)/g\(\)/g; } print STDERR "Normalizing instructions..."; die "ouch: $!" unless open(O,">$tmp/$$.1"); my $label; while (<>) { next if /^\%/o; next if /^\d+ \% words$/o; $label = ''; chomp; if (/^lbl\(\d+\)\s+/) { $label = 'lbl:'; $_ = $'; } else { s/^\s+//; } &$normalizer; print O $label,$_,"\n"; } close(O); print STDERR "done\n"; # 2. produce all windows of width n print STDERR "Computing windows..."; open(I,"<$tmp/$$.1"); unlink("$tmp/$$.1"); open(O,">$tmp/$$.2"); my @l = (); my $i; my $K = 0; my $window; while($i = ) { chomp($i); @l = ($i,@l[0..$N]); $K++; next unless $K>$M; $window = join(' ',@l); next if $window =~ /.\blbl:/; # label in middle $window = $' if $window =~ /^lbl:/; # remove leading label print O $window,"\n"; } close(I); close(O); print STDERR "done\n"; # 3. split into smaller files to facilitate sorting print STDERR "Splitting..."; die "oops" if system("split $tmp/$$.2 $tmp/$$.3."); print STDERR "done\n"; unlink("$tmp/$$.2"); # 4. sort each one of the smaller files print STDERR "Sorting"; my @files = glob("$tmp/$$.3.*"); my ($fi,$fo); foreach $fi (@files) { print STDERR "."; die "weird" unless $fi =~ /\.3\./; $fo = "$`.4.$'"; die "oops: $fi" if system("sort -T $tmp $fi > $fo"); unlink($fi); } @files = (); print STDERR "done\n"; # 5. merge the smaller files print STDERR "Merging..."; @files = glob("$tmp/$$.4.*"); my $files = join(' ',@files); die "oops" if system("sort -T $tmp -m $files > $tmp/$$.5"); unlink @files; @files = (); print STDERR "done\n"; # 6. sort the windows and produce a count print STDERR "Counting..."; open(I,"<$tmp/$$.5"); unlink("$tmp/$$.5"); open(O,">$tmp/$$.6"); my $prev = ; my $curr; my $count = 1; while ($curr = ) { if ($curr eq $prev) { $count++; next; } goto loop if $count < $cutoff; print O "$count\t$curr"; loop: $prev = $curr; $count = 1; } if ($count >= $cutoff) { print O "$count\t$curr"; } close(I); close(O); print STDERR "done\n"; # 7. sort and print results print STDERR "Sorting results..."; die "oops" if system("sort -nr $tmp/$$.6 > $tmp/$$.7"); unlink("$tmp/$$.6"); print STDERR "done\n\n"; die "oops" if system("cat $tmp/$$.7"); unlink("$tmp/$$.7"); mozart-1.4.0.20080704/share/lib/dp/0000775000000000000000000000000011033101631014673 5ustar rootrootmozart-1.4.0.20080704/share/lib/dp/Discovery.oz0000664000000000000000000000764111030716023017230 0ustar rootroot%%% %%% Authors: %%% Andreas Sundstrom %%% %%% Copyright: %%% Andreas Sundstrom, 1999 %%% %%% Last change: %%% $Date: 2008-06-26 15:39:31 +0200 (Thu, 26 Jun 2008) $ by $Author: raph $ %%% $Revision: 17003 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Glue at 'x-oz://boot/Glue' Open(socket) Error(registerFormatter) Property(get) export Server Client DefaultServerPort define DatagramMaxSize = 65536 DefaultServerPort = 5555 class Server feat Socket ServerThread % Thread in which the server is running attr NotInitialized: true TheInfo % The answer to be sent on request from client meth init(info:Info port:PortNr <= DefaultServerPort) proc {Serv S} Data Host Port in {S receive(list:?Data size:DatagramMaxSize host:?Host port:?Port)} try case {String.toAtom Data} of get then {S send(vs:@TheInfo port:Port host:Host)} end catch _ then skip end {Serv S} end S in if @NotInitialized then % Create only one socket NotInitialized <- false TheInfo <- Info S = {New Open.socket init(type:datagram protocol:"udp")} self.Socket = S {S bind(takePort:PortNr)} thread self.ServerThread = {Thread.this} {Serv S} end end end meth replace(info:Info) TheInfo <- Info end meth close() {Thread.terminate self.ServerThread} {self.Socket close()} end end class Client feat Socket attr ReceiverThread % Thread waiting on request Closed % is the socket closed? Sync % enables close() to cause timeout meth init(port:ServerPort <= DefaultServerPort) BAs in self.Socket = {New Open.socket init(type:datagram protocol:"udp")} Closed <- false {Wait Glue} {Glue.sockoptBroadcast {self.Socket getDesc(_ $)}} BAs = {Glue.getBroadcastAddresses} {List.forAll BAs proc {$ H} {self.Socket send(vs:get port:ServerPort host:H)} end} end meth getOne(timeOut:TimeOut <= 1000 info:?Info) Alarm in Sync <- Alarm if @Closed then {Raise {Exception.system discovery(closed 'Client')}} else if TimeOut \= inf then thread {Delay TimeOut} Alarm = unit end end thread ReceiverThread <- {Thread.this} {self.Socket receive(list:?Info size:DatagramMaxSize)} end {Value.waitOr Info Alarm} if {Value.isFree Info} then Info = timeout end end end meth getAll(timeOut:TimeOut <= 1000 info:?List) fun {Reciever StartTime} TimeLeft in TimeLeft = TimeOut + StartTime - {Property.get 'time.user'} if TimeLeft < 0 then nil else X in Client, getOne(timeOut:TimeLeft info:?X) if X == timeout then nil else X|{Reciever StartTime} end end end fun {RecieverInf} X in Client, getOne(timeOut:inf info:?X) if X == timeout then % if client is closed nil else X|{RecieverInf} end end in if TimeOut == inf then List = {RecieverInf} else List = {Reciever {Property.get 'time.user'}} end end meth close() @Sync = unit {Thread.terminate @ReceiverThread} {self.Socket close()} Closed <- true end end %% %% Error formatting %% {Error.registerFormatter discovery fun {$ E} T = 'error in Directory module' in case E of dir(What Who) then %% expected What: atom, Who: atom error(kind: T msg: case What of closed then Who#' is closed' else 'Unknown' end) else error(kind: T items: [line(oz(E))]) end end} end mozart-1.4.0.20080704/share/lib/dp/DP.oz0000664000000000000000000000754211030716023015564 0ustar rootroot%%% %%% Authors: %%% Yves Jaradin (yves.jaradin@uclouvain.be) %%% Raphael Collet (raphael.collet@uclouvain.be) %%% %%% Copyright: %%% Yves Jaradin, 2008 %%% %%% Last change: %%% $Date: 2008-03-06 15:46:11 +0100 $ by $Author: yjaradin $ %%% $Revision: 16863 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Glue(setSiteState setConnection acceptConnection getThisSite initDP setRPC annotate getAnnotation kill break getFaultStream) at 'x-oz://boot/Glue' Property DPDefaults(listen:DefaultListenFunc init) Error DPErrorFormatters DPService export Init InitWith Prepare Initialized service:DPService Kill Break GetFaultStream Annotate GetAnnotation define {Error.registerFormatter dp DPErrorFormatters.dp} {DPDefaults.init} ListenFuncC={NewCell DefaultListenFunc} InitializedC={NewCell false} fun{Initialized} @InitializedC end proc{Prepare ListenFunc} ListenFuncC:=ListenFunc end proc{Init} N in if {Not InitializedC:=N} then InStream DistributedURIs={@ListenFuncC {NewPort InStream}} Info={ExtractDistributedInfo DistributedURIs} in {Glue.setRPC proc {$ P Args Ret} try {Procedure.apply P Args} Ret=unit catch E then Ret={Value.failed E} end end} {Glue.initDP {NewPort thread {ForAll $ ProcessDSS} end}} {Glue.getThisSite}.info := Info thread {ForAll InStream DoAccept} end end N=true end %% initialize DP with user settings (ip, portnum, etc) proc {InitWith Settings} {Property.put 'dp.listenerParams' {Adjoin {Property.get 'dp.listenerParams'} Settings}} {Init} end fun{ExtractDistributedInfo DistributedURIs} case DistributedURIs of [VH] andthen H={VirtualString.toString VH} in {List.isPrefix "oz-site://" H} then H [] URIs then {Exception.raiseError dp(dssLimit distributedURI URIs)} unit end end proc{ProcessDSS M} case M of connect(ToSite) then thread URI={VirtualString.toString ToSite.info} Connect={{Property.get 'dp.resolver'}.'oz-site' URI}.connect in if {Not {DoConnect ToSite Connect}} then {Exception.raiseError dp(connection noLuck ToSite [URI])} end end [] connection_received(_/*ToSite*/ _/*FD*/) then skip [] new_site(S) then {DPService.incoming S service(to:'oz:newSite' msg:hello(S))} [] deliver(src:S msg:M)then try case M of service(...) then {DPService.incoming S M} else {DPService.incoming S service(to:'oz:siteMessage' msg:M)} end catch E then {PrintError E} end [] M then {PrintError {Exception.error dp(dss unknownNotification M)}} end end fun{DoConnect ToSite Connect} try case {Connect default} of X=fd(_ _) then {Glue.setConnection ToSite X} true [] none then true [] ignore then false [] permFail then {Glue.setSiteState ToSite permFail} true end catch E then {PrintError E} false end end proc{DoAccept X} try case X of fd(_ _) then {Glue.acceptConnection X} end catch E then {PrintError E} end end PrintError=Error.printException %% make something available once the module has been initialized fun lazy {WhenInit X} {Init} X end proc {DoAnnotate E A} {Glue.annotate E if {IsList A} then A else [A] end} end Annotate = {WhenInit DoAnnotate} GetAnnotation = {WhenInit Glue.getAnnotation} Kill = {WhenInit Glue.kill} Break = {WhenInit Glue.break} GetFaultStream = {WhenInit Glue.getFaultStream} end mozart-1.4.0.20080704/share/lib/dp/DPStatistics.oz0000664000000000000000000000070411030716023017630 0ustar rootrootfunctor import Glue at 'x-oz://boot/Glue' export SiteStatistics GetTablesInfo GetNetInfo PerdioStatistics CreateLogFile MessageCounter define %% %% Force linking of base library %% {Wait Glue} SiteStatistics=Glue.siteStatistics GetTablesInfo=Glue.getTablesInfo GetNetInfo=Glue.getNetInfo PerdioStatistics=Glue.perdioStatistics CreateLogFile = Glue.createLogFile MessageCounter = Glue.getMsgCntr end mozart-1.4.0.20080704/share/lib/dp/URL.oz0000664000000000000000000004670410022050502015717 0ustar rootroot%%% ================================================================== %%% URL LIBRARY %%% ================================================================== %%% %%% This library provides facilities for the manipulation of URLs and %%% filenames. It supports both Unix and Windows syntax where they do %%% not conflict. There are no plans to ever support VMS's strange %%% filename syntax. %%% %%% HISTORY %%% %%% * 1ST IMPLEMENTATION %%% The 1st implementation of such a library was written by Christian %%% Schulte for his `Module Manager' facility. %%% * 2nd IMPLEMENTATION %%% It was entirely rewritten by Denys Duchier to add various %%% extensions such as support for Windows-style filenames. That 2nd %%% implementation also improved the theoretical complexity, although %%% not necessarily the performance. What was definitely improved was %%% the correctness: the library now conforms to URI syntax as defined %%% in the IETF draft (see below). %%% * 3rd IMPLEMENTATION %%% The 3rd implementation is a clean-up of the 2nd one. The %%% representation is rationalized and simplified. Minor problems are %%% fixed. The performance is improved measurably. %%% %%% The library fully conforms to URI syntax as defined in RFC 2396 %%% "Uniform Resource Identifiers (URI): Generic Syntax" by T. %%% Berners-Lee, R. Fielding, and L. Masinter, of August 1998, %%% available at: ftp://ftp.isi.edu/in-notes/rfc2396.txt %%% and passes all 5 test suites published by Roy Fielding (see %%% http://www.ics.uci.edu/~fielding/url/test{1,2,3,4,5}.html) %%% %%% The only derogations to said specification are made to accommodate %%% Windows-style filenames: (1) a prefix of the form "C:" where C is %%% a single character is interpreted as Windows-style device notation %%% rather than as a uri scheme - in practice, this is a compatible %%% extension since there are no legal single character schemes, (2) %%% path segments may indifferently be separated by "/" or "\" - this %%% too is compatible since non-separator forward and backward slashes %%% ought to be otherwise `escape encoded'. %%% %%% There is additionally a further expereimental extension: all urls %%% may be suffixed by a string of the form "{foo=a,bar=b}". This %%% adds an info record to the parsed representation or the url. This %%% record is here info(foo:a bar:b). Thus properties can be attached %%% to urls. For example, we may indicate that a url denotes a native %%% functor thus: file:/foo/bar/baz.so{native}. Here {native} is %%% equivalent to {native=}, i.e. the info record is info(native:''). %%% %%% API %%% %%% {URL.make LOC} %%% parses virtual string LOC according to the proposed URI syntax %%% modulo Windows-motivated derogations (see above). Local filename %%% syntax is a special case of schemeless uri. The parsed %%% representation of a url is a record whose features hold the %%% various parts of the url. We speak of url `records' and url %%% `vstrings': to former being the parsed representation of the %%% latter. A url record has label 'url' and must be non-empty to %%% distinguish it from the the url vstring consisting of the atom %%% 'url'. The empty url record can be written e.g. url(unit). LOC %%% may also be a url record, in which case it is simply returned. %%% %%% {URL.is X} %%% returns true iff X is a non-empty record with label 'url'. %%% %%% {URL.toVirtualString X} %%% X may be a url record or vstring. The corresponding %%% normalized vstring representation is returned. #FRAGMENT and %%% {INFO} sections are not included (see below). This is appropriate %%% for retrieval since fragment and info sections are meant for %%% client-side usage. %%% %%% {URL.toVirtualStringExtended X HOW} %%% Similar to the above, but HOW is a record with optional %%% features to parametrize the conversion process. %%% `full:true' %%% indicates that full information is desired, including %%% #FRAGMENT and {INFO} sections. %%% `cache:true' %%% indicates that a syntax appropriate for cache lookup is %%% desired. the `:' after the scheme and the '//' before the %%% authority are in both cases replaced by a single `/'. %%% `raw:true' %%% indicates that no encoding should take place, i.e. special %%% url characters are not escaped %%% %%% {URL.toString X} %%% transforms the result of URL.toVirtualString to a string %%% %%% {URL.toAtom X} %%% transforms the result of URL.toVirtualString to an atom %%% %%% {URL.resolve BASE REL} %%% BASE and REL are url records or vstrings. REL is resolved %%% relative to BASE and a new url record is returned with the %%% appropriate fields filled in. If REL is not a relative url, it %%% is simply returned unchanged. Otherwise, the full path is %%% computed by dropping the last component of BASE's path and %%% appending REL's path. %%% %%% BUGS AND LIMITATIONS %%% %%% Each path component may have the form `COMP;PARM': that is each %%% path component may have its own parameter section. Parameters %%% are currently not parsed and simply remain attached to the path %%% component. This has the problem that the distinction between %%% encoded occurrences of `;' in COMP and naked occurrences of `;' %%% in PARM is not preserved. %%% %%% CLARIFICATIONS %%% %%% The draft standard is ambiguous: in a relative uri, the leading %%% segment is allowed to contain occurrences of `;'. Is the %%% parameter parsing semantics as usual or not?. Roy Fielding %%% provided a clarification by email: it's business as usual. The %%% apparent difference was intended to emphacize that the parameter %%% is to be treated like the rest of the segment when resolving %%% relative uris. ... in my opiniion, this makes things less clear %%% rather than clearer. %%% %%% MISCELLANEOUS %%% %%% A URL string has at most the following fields: %%% %%% SCHEME://AUTHORITY/PATH?QUERY#FRAGMENT{INFO} %%% %%% A Windows-style pathname is similar: %%% %%% DEVICE:PATH?QUERY#FRAGMENT{INFO} %%% %%% ================================================================== functor export is : URL_is make : URL_make toVirtualString : URL_toVS toVirtualStringExtended : URL_vs toString : URL_toString toAtom : URL_toAtom resolve : URL_resolve normalizePath : NormalizePath isAbsolute : URL_isAbsolute isRelative : URL_isRelative toBase : URL_toBase prepare ToLower = Char.toLower ToRecord = List.toRecord Tokens = String.tokens Token = String.token ToAtom = VirtualString.toAtom ToString = VirtualString.toString ToTuple = List.toTuple fun {INFO_ELT S} Prop Value in {Token S &= Prop Value} {ToAtom Prop}#{ToAtom Value} end fun {URL_is X} %% a url record has label 'url' and must be non-empty to %% distinguish it from the url vstring consisting of the %% atom 'url'. an empty url record can be written e.g. %% url(unit) X\=url andthen {IsRecord X} andthen {Label X}==url end LEVEL_START = 4 LEVEL_AUTHORITY = 3 LEVEL_PATH = 3 LEVEL_QUERY = 2 LEVEL_FRAGMENT = 1 CharIsAlNum = Char.isAlNum define %% a url may contain occurrences of %XY escape sequences %% Here is how to decode them local D = x(&0:0 &1:1 &2:2 &3:3 &4:4 &5:5 &6:6 &7:7 &8:8 &9:9 &a:10 &b:11 &c:12 &d:13 &e:14 &f:15 &A:10 &B:11 &C:12 &D:13 &E:14 &F:15) in fun {Decode L} case L of nil then nil [] H|T then if H==&% then case T of X1|X2|T then (D.X1*16)+D.X2 | {Decode T} else H | {Decode T} end else H | {Decode T} end end end end proc {SPLIT S Level Prefix Sep Suffix} case S of nil then Prefix=Suffix=nil Sep=unit [] &{ |T then Prefix=nil Sep=&{ Suffix=T [] &# |T andthen Level>1 then Prefix=nil Sep=&# Suffix=T [] &? |T andthen Level>2 then Prefix=nil Sep=&? Suffix=T [] &\\|T andthen Level>2 then Prefix=nil Sep=&\\ Suffix=T [] &/ |T andthen Level>2 then Prefix=nil Sep=&/ Suffix=T [] &: |T andthen Level>3 then Prefix=nil Sep=&: Suffix=T [] H |T then More in Prefix=H|More {SPLIT T Level More Sep Suffix} end end fun {PARSE S} URL = {START {ToString S} url(scheme : unit authority : unit device : unit absolute : false path : nil query : unit fragment : unit info : unit)} in {AdjoinAt URL path {NormalizePath {Reverse URL.path}}} end fun {URL_make X} if {URL_is X} then X else {PARSE X} end end fun {START L URL} Prefix Sep Suffix in {SPLIT L LEVEL_START Prefix Sep Suffix} case Sep of unit then %% we hit then end without finding a separator {AdjoinAt URL path [{Decode Prefix}]} [] &: then %% we found the scheme or device separator case Prefix of [C] then %% this is a device (1 char) URL2 = {AdjoinAt URL device {ToLower C}} in %% does the path begin with a slash? case Suffix of H|T then if H==&/ orelse H==&\\ then {PATH T {AdjoinAt URL2 absolute true}} else {PATHDEV Suffix URL2} end else URL2 end else %% it is a scheme: downcase it URL2 = {AdjoinAt URL scheme {Map Prefix ToLower}} in %% check for authority case Suffix of &/|&/|T then {AUTHORITY T URL2} [] &/ |T then {PATH T {AdjoinAt URL2 absolute true}} else {PATHDEV Suffix URL2} end end [] &/ then %% unix path separator case Prefix of nil then %% slash at start: check for //authority case Suffix of &/|T then {AUTHORITY T URL} else {PATH Suffix {AdjoinAt URL absolute true}} end else %% Prefix is 1st relative component {PATH Suffix {AdjoinAt URL path [{Decode Prefix}]}} end [] &\\ then %% windows path separator case Prefix of nil then %% slash at front {PATH Suffix {AdjoinAt URL absolute true}} else %% Prefix is 1st relative component {PATH Suffix {AdjoinAt URL path [{Decode Prefix}]}} end [] &? then {QUERY Suffix if Prefix\=nil then {AdjoinAt URL path [{Decode Prefix}]} else URL end} [] &# then {FRAGMENT Suffix if Prefix==nil then URL else {AdjoinAt URL path {Decode Prefix}|URL.path} end} [] &{ then {INFO Suffix if Prefix\=nil then {AdjoinAt URL path [{Decode Prefix}]} else URL end} end end fun {AUTHORITY L URL} Prefix Sep Suffix {SPLIT L LEVEL_AUTHORITY Prefix Sep Suffix} URL2 = {AdjoinAt URL authority {Map Prefix ToLower}} in case Sep of unit then URL2 [] &/ then {PATH Suffix {AdjoinAt URL2 absolute true}} [] &\\ then {PATH Suffix {AdjoinAt URL2 absolute true}} [] &? then {QUERY Suffix URL2} [] &# then {FRAGMENT Suffix URL2} [] &{ then {INFO Suffix URL2} else raise urlbug end end end fun {PATHDEV L URL} case L of C|&:|T then {PATH T {AdjoinAt URL device {ToLower C}}} else {PATH L URL} end end fun {PATH L URL} Prefix Sep Suffix {SPLIT L LEVEL_PATH Prefix Sep Suffix} URL2 = {AdjoinAt URL path {Decode Prefix}|URL.path} in case Sep of unit then URL2 [] &/ then {PATH Suffix URL2} [] &\\ then {PATH Suffix URL2} [] &? then {QUERY Suffix URL2} [] &# then {FRAGMENT Suffix URL2} [] &{ then {INFO Suffix URL2} else raise urlbug end end end fun {QUERY L URL} Prefix Sep Suffix {SPLIT L LEVEL_QUERY Prefix Sep Suffix} URL2 = {AdjoinAt URL query Prefix} in case Sep of unit then URL2 [] &# then {FRAGMENT Suffix URL2} [] &{ then {INFO Suffix URL2} else raise urlbug end end end fun {FRAGMENT L URL} Prefix Sep Suffix {SPLIT L LEVEL_FRAGMENT Prefix Sep Suffix} URL2 = {AdjoinAt URL fragment Prefix} in if Sep\=unit then {INFO Suffix URL2} else URL2 end end fun {INFO L URL} case {Reverse L} of &}|L then {AdjoinAt URL info {ToRecord info {Map {Tokens {Reverse L} &,} INFO_ELT}}} else raise urlbad end end end %% a path is represented by a list of strings. normalizing a path %% is the process of eliminating occurrences of path components %% "." and ".." by interpreting them relative to the stack of path %% components. This algorithm is due to Christian Schulte. I %% modified it to not throw out a leading "." because ./foo and foo %% should be treated differently: ./foo is an absolute path, whereas %% foo is a relative path. fun {NormalizePath Path} case Path of nil then nil [] ("."=H)|T then H|{NormalizeStack T nil} else {NormalizeStack Path nil} end end fun {NormalizeStack Path Stack} case Path of nil then {Reverse Stack} [] H|T then if H=="." then if T==nil then if Stack==nil then nil else {Reverse nil|Stack} end else {NormalizeStack T Stack} end elseif H==".." then if T==nil then case Stack of nil then [H] [] [_] then [nil] [] _|Stack then {Reverse nil|Stack} end elsecase Stack of nil then H|{NormalizeStack T nil} [] _|Stack then {NormalizeStack T Stack} end else {NormalizeStack T H|Stack} end end end %% URL_vs converts a url to a virtual string. The 2nd argument is %% a record whose features parametrize the conversion process. %% `full:true' %% indicates that full information is desired, including #FRAGMENT %% and {INFO} sections. Normally, the #FRAGMENT indicator is %% intended only for client-side usage. Similarly, but even more %% so, the {INFO} section is a Mozart extension, where, for %% example, it is indicated whether the url denotes a native %% functor or not. Thus, neither should be included when %% constructing a url for retrieval. %% `cache:true' %% indicates that a syntax appropriate for cache lookup is desired. %% the `:' after the scheme and the '//' before the authority are %% in both cases replaced by a single `/'. %% `raw:true' %% indicates that no encoding should take place, i.e. special url %% characters are not escaped. fun {URL_vs Url How} U = {URL_make Url} Full = {CondSelect How full false} Cache = {CondSelect How cache false} Raw = {CondSelect How raw false} CompAdd = if Cache then if Raw then CompAdd_c_raw else CompAdd_c_enc end else if Raw then CompAdd_raw else CompAdd_enc end end Scheme = {CondSelect U scheme unit} Device = {CondSelect U device unit} Authority = {CondSelect U authority unit} Absolute = {CondSelect U absolute false} Path = {CondSelect U path nil} Query = {CondSelect U query unit} Fragment = if Full then {CondSelect U fragment unit} else unit end Info = if Full then {CondSelect U info unit} else unit end %% V1 = if Full andthen Info\=unit then {InfoPropsAdd {Record.toListInd Info} ['}'] true} else nil end V2 = if Full andthen Fragment\=unit then "#"|Fragment|V1 else V1 end V3 = if Query==unit then V2 else '?'|Query|V2 end V4 = {Append %% yes we want the nil here otherwise %%Slashit adds an erroneous slash {FoldR Path CompAdd nil} V3} V5 = if Absolute then {Slashit V4} else V4 end V6 = if Device==unit then V5 else [Device] |if Cache then {Slashit V5} else ':'|V5 end end V7 = if Authority==unit then V6 elseif Cache then if Authority==nil then V6 else Authority|{Slashit V6} end else '/'|'/'|Authority|{Slashit V6} end V8 = if Scheme==unit then V7 elseif Cache then Scheme|{Slashit V7} else Scheme|':'|V7 end in {ToTuple '#' V8} end fun {Slashit L} case L of nil then nil [] '/'|_ then L else '/'|L end end fun {InfoPropsAdd L Rest First} case L of nil then '{'|Rest [] (K#V)|T then {InfoPropsAdd T K|'='|V|if First then Rest else ','|Rest end false} end end fun {CompAdd_raw H L} H|{Slashit L} end fun {CompAdd_enc H L} {Encode H}|{Slashit L} end fun {CompAdd_c_raw H L} if H==nil then L else H|{Slashit L} end end fun {CompAdd_c_enc H L} if H==nil then L else {Encode H}|{Slashit L} end end fun {URL_toVS U} {URL_vs U true} end fun {URL_toString U} {ToString {URL_toVS U}} end fun {URL_toAtom U} {ToAtom {URL_toVS U}} end fun {URL_isAbsolute U} U2 = {URL_make U} in {CondSelect U2 scheme unit}\=unit orelse {CondSelect U2 device unit}\=unit orelse {CondSelect U2 absolute false} orelse case {CondSelect U2 path nil} of (&~|_)|_ then true [] "." |_ then true [] ".." |_ then true else false end end fun {URL_isRelative U} {Not {URL_isAbsolute U}} end %% resolving a relative url with respect to a base url fun {URL_resolve BASE REL} Rel = {URL_make REL} in if {CondSelect Rel scheme unit}\=unit then Rel else Base = {URL_make BASE} Scheme = {CondSelect Base scheme unit} Rel2 = if Scheme==unit then Rel else {AdjoinAt Rel scheme Scheme} end in if {CondSelect Rel2 authority unit}\=unit then Rel2 else Authority = {CondSelect Base authority unit} Rel3 = if Authority==unit then Rel2 else {AdjoinAt Rel2 authority Authority} end in if {CondSelect Rel3 device unit}\=unit then Rel3 else Device = {CondSelect Base device unit} Rel4 = if Device==unit then Rel3 else {AdjoinAt Rel3 device Device} end BPath = {CondSelect Base path unit} RAbs = {CondSelect Rel4 absolute false} in if RAbs orelse BPath==unit then Rel4 else Rel5 = if {CondSelect Base absolute false} then {AdjoinAt Rel4 absolute true} else Rel4 end RPath = {CondSelect Rel path nil} in {AdjoinAt Rel5 path {NormalizePath {AtLast BPath if RPath==unit orelse RPath==nil then [nil] else RPath end}}} end end end end end fun {AtLast L1 L2} case L1 of nil then L2 [] H|T then case T of nil then L2 else H|{AtLast T L2} end end end %% turn a url into one that can safely be used as a base without %% loosing its last component. we just add an empty component if % the last one is not already empty. fun {URL_toBase U} U2 = {URL_make U} in case {CondSelect U2 path nil} of unit then U2 [] nil then U2 [] L then case {Reverse L} of nil|_ then U2 else {AdjoinAt U2 path {Append L [nil]}} end end end %% for producing really normalized url vstrings, we need to encode %% its components. Encode performs the `escape encoding' of a %% string (e.g. a single path component). local D = x(0:&0 1:&1 2:&2 3:&3 4:&4 5:&5 6:&6 7:&7 8:&8 9:&9 10:&a 11:&b 12:&c 13:&d 14:&e 15:&f) in fun {Encode S} case S of nil then nil [] H|T then %% check that it is an `ascii' alphanum if H<128 andthen {CharIsAlNum H} orelse H==&; orelse H==&- orelse H==&_ orelse H==&. orelse H==&! orelse H==&~ orelse H==&* orelse H==&' orelse H==&( orelse H==&) orelse H==&: orelse H==&@ orelse H==&& orelse H==&= orelse H==&+ orelse H==&$ orelse H==&, then H|{Encode T} else X1 = H div 16 X2 = H mod 16 in &%|D.X1|D.X2|{Encode T} end end end end end mozart-1.4.0.20080704/share/lib/dp/Connection.oz0000664000000000000000000000637511030716023017363 0ustar rootroot%%% %%% Authors: %%% Yves Jaradin (yves.jaradin@uclouvain.be) %%% Raphael Collet (raphael.collet@uclouvain.be) %%% %%% Copyright: %%% Yves Jaradin, 2008 %%% %%% Last change: %%% $Date: 2008-03-06 15:46:11 +0100 $ by $Author: yjaradin $ %%% $Revision: 16863 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import DP Site DPService Error export offer: OfferOnce offerUnlimited: OfferMany OfferOnce OfferMany Retract Take Gate define %% initialize the ticket service {DP.init} Tickets={NewDictionary} {DPService.register {Site.this} 'oz:ticket' proc {$ 'oz:ticket' S M} case M of take(Id ?X) then case {Dictionary.condGet Tickets Id unit} of unit then X=bad [] ticket(Y Opts) then if{Value.condSelect Opts once false}then {Dictionary.remove Tickets Id} end X=ok(Y) end [] retract(Id) then if S=={Site.this} then {Dictionary.remove Tickets Id} else {Error.printException {Exception.error dp(service localOnly 'oz:ticket' M)}} end else {Error.printException {Exception.error dp(service unknownMessage 'oz:ticket' M)}} end end} %% obtain the value corresponding to a given ticket fun {Take Ticket} SiteURI#TicketId={ParseTicket Ticket} in case {DPService.send {Site.resolve SiteURI} 'oz:ticket' take(TicketId $)} of ok(X) then X else {Exception.raiseError dp(ticket bad Ticket)} unit end end %% retract a ticket proc{Retract Ticket} SiteURI#TicketId={ParseTicket Ticket} in {DPService.send {Site.resolve SiteURI} 'oz:ticket' retract(TicketId)} end %% offer a value fun {OfferOnce X} {DoOffer X opts(once:true)} end fun {OfferMany X} {DoOffer X opts()} end fun {DoOffer X Opts} T={NewTicketId} in Tickets.T:=ticket(X Opts) {MakeTicket T} end local C={NewCell 0} in fun {NewTicketId} I J in I=C:=J J=I+1 I end end %% utils: create and parse tickets fun {MakeTicket Key} URIs={Site.allURIs {Site.this}} in try for U in URIs return:Return do if {List.isPrefix "oz-site://" U} then {Return {VirtualString.toAtom 'oz-ticket'#{List.drop U {Length "oz-site"}}#"#"#Key}} end end catch _ then {Exception.raiseError dp(ticket make URIs)} unit end end fun {ParseTicket VS} T={VirtualString.toString VS} in if {List.isPrefix "oz-ticket://" T} then URI Key in %% assumption: the character '#' is not used in the URI {String.token {List.drop T {Length "oz-ticket://"}} &# URI Key} ('oz-site://'#URI)#{String.toInt Key} else {Exception.raiseError dp(ticket parse T)} unit end end %% Gates: an alternative class for managing tickets class Gate feat Ticket meth init(X ?AT<=_) AT = (self.Ticket = {OfferMany X}) end meth getTicket($) self.Ticket end meth close {Retract self.Ticket} end end end mozart-1.4.0.20080704/share/lib/dp/Site.oz0000664000000000000000000000310311030716023016152 0ustar rootroot%%% %%% Authors: %%% Yves Jaradin (yves.jaradin@uclouvain.be) %%% %%% Copyright: %%% Yves Jaradin, 2008 %%% %%% Last change: %%% $Date: 2008-03-19 15:03:37 +0100 (Wed, 19 Mar 2008) $ by $Author: raph $ %%% $Revision: 16898 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Glue at 'x-oz://boot/Glue' DP Property DPService Error export This Resolve DistributedURIs AllURIs AddURI define {DP.init} fun{This} {Glue.getThisSite} end {DPService.register {This} 'oz:URIs' proc{$ 'oz:URIs' S M} case M of getAll(?X) then X=@URIs [] add(Uri)then if S=={This} then O in O=URIs:=Uri|O else {Error.printException {Exception.error dp(service localOnly 'oz:URIs' M)}} end else {Error.printException {Exception.error dp(service unknownMessage 'oz:URIs' M)}} end end} fun{Resolve UriVS} Uri={VirtualString.toString UriVS} Scheme={String.toAtom {List.takeWhile Uri fun{$C}C\=&:end}} in {{Property.get 'dp.resolver'}.Scheme Uri}.site end fun{DistributedURIs S} [{VirtualString.toString S.info}] end fun{AllURIs S} {DPService.send S 'oz:URIs' getAll($)} end fun{AddURI S Uri} {DPService.send S 'oz:URIs' add(Uri)} end URIs={NewCell {DistributedURIs {This}}} endmozart-1.4.0.20080704/share/lib/dp/DPErrorFormatters.oz0000664000000000000000000000655011030716023020643 0ustar rootroot%%% %%% Authors: %%% Martin Mueller %%% Yves Jaradin %%% %%% Contributors: %%% Denys Duchier %%% Martin Henz %%% Leif Kornstaedt %%% Benjamin Lorenz %%% Christian Schulte %%% %%% Copyright: %%% Martin Mueller, 1997 %%% Yves Jaradin, 2008 %%% %%% Last change: %%% $Date: 2004-10-28 17:28:16 +0200 (jeu, 28 oct 2004) $ by $Author: duchier $ %%% $Revision: 16048 $ %%% %%% This file is part of Mozart, an implementation of Oz 3: %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% %This file should be merged in share/lib/sp/ErrorFormatters.oz functor import export dp:DP define fun {DP E} T = 'Error: distributed programming' in case E of dp(line badChar C) then error(kind:T msg:'The character '#[C]#' is not allowed in pre-DSS messages') [] dp(line dropped) then error(kind:T msg:'Connection dropped unexpectedly before passing it to the DSS') [] dp(line unknownConnMeth M) then error(kind:T msg:'Unknown connection method' items:[hint(l:'method' m:oz(M))]) [] dp(connection noLuck ToSite URIs) then error(kind:T msg:'Unable to open a connection to site with the given URIs' items: (hint(l:'site' m:oz(ToSite)) | {Map URIs fun {$ URI} hint(l:'URI' m:URI) end})) [] dp(dssLimit distributedURI URIs) then error(kind:T msg:'Site URIs expected format is: oz-site://:/' items:{Map URIs fun {$ URI} hint(l:'URI' m:URI) end}) [] dp(dss unknownNotification M) then error(kind:T msg:'Received an unexpected DSS notification' items:[hint(l:'notification' m:oz(M))]) [] dp(service unknownMessage S M) then error(kind:T msg:'The service '#oz(S)#' received an unexpected message' items:[hint(l:'message' m:oz(M))]) [] dp(service localOnly S M) then error(kind:T msg:'The service '#oz(S)#' rejected a remote message' items:[hint(l:'message' m:oz(M)) line('This message is only allowed locally.')]) [] dp(ticket bad Ticket) then error(kind:T msg:'Ticket is unknown or has been retracted' items:[hint(l:'ticket' m:Ticket)]) [] dp(ticket make URIs) then error(kind:T msg:'Unable to find a suitable URI to make a ticket' items:{Map URIs fun {$ URI} hint(l:'URI' m:URI) end}) [] dp(ticket parse Ticket) then error(kind:T msg:'Unable to parse ticket' items:[hint(l:'ticket' m:Ticket)]) [] dp(generic _ Msg Hints) then error(kind: T msg: Msg items: line('Old distribution system error!')| {Map Hints fun {$ L#M} hint(l:L m:oz(M)) end}) [] dp(modelChoose) then error(kind: T msg: ('Cannot change distribution model: '# 'distribution layer already started') items: [line('Old distribution system error!')]) [] dp('annotation format error' Annot) then error(kind:T msg('Invalid annotation') items:[hint(l:'annotation' m:oz(Annot))]) else error(kind: T items: [line(oz(E))]) end end endmozart-1.4.0.20080704/share/lib/dp/Remote.oz0000664000000000000000000001473611030716023016517 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% Konstantin Popov %%% %%% Contributors: %%% Andreas Franke %%% Raphael Collet (raphael.collet@uclouvain.be) %%% %%% Copyright: %%% Kostantin Popov, 1998 %%% Christian Schulte, 1997--2000 %%% %%% Last change: %%% $Date: 2008-06-26 15:39:31 +0200 (Thu, 26 Jun 2008) $ by $Author: raph $ %%% $Revision: 17003 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import OS(exec wait getEnv) Connection(offer) Property(get condGet put) Module(link) Error(registerFormatter) DP(getFaultStream) export manager: ManagerProxy prepare WaitDelay = 2000 define %% %% Force linking of base libraries %% {Wait Connection.offer} HasVirtualSite = {Property.get 'distribution.virtualsites'} [VirtualSite \ifdef DENYS_EVENTS VirtualSiteAux \endif ] = if HasVirtualSite then %% Now we know that there is in fact virtual site %% support in our emulator, go and get it. {Module.link ['x-oz://boot/VirtualSite' \ifdef DENYS_EVENTS 'x-oz://system/VirtualSite' \endif ]} else [unit \ifdef DENYS_EVENTS unit \endif ] end if {Property.condGet 'oz.engine' unit}==unit then {Property.put 'oz.engine' case {OS.getEnv 'OZ_ENGINE'} of false then case {OS.getEnv 'OZENGINE'} of false then 'ozengine' elseof X then X end elseof X then X end} else skip end if {Property.condGet 'oz.remote.fork' unit}==unit then {Property.put 'oz.remote.fork' case {OS.getEnv 'OZ_REMOTE_FORK'} of false then case {OS.getEnv 'OZREMOTEFORK'} of false then 'rsh' elseof X then X end elseof X then X end} else skip end fun {ForkProcess Fork Host Ports Detach PORT IP FW} Cmd = {Property.get 'oz.engine'} Func = 'x-oz://system/RemoteServer' TicketArg = '--ticket='#{Connection.offer Ports} DetachArg = '--'#if Detach then '' else 'no' end#'detached' PortArg = '--port='#if PORT==default then 0 else PORT end IPArg = '--ip='#if IP==default then default else {VirtualString.toAtom IP} end FWArg = if FW then '--firewall' else '' end in try CMD#ARGS = case Fork of sh then Cmd # [Func DetachArg TicketArg PortArg IPArg FWArg] [] virtual then Key={VirtualSite.newMailbox} in \ifdef DENYS_EVENTS %% start VS threads {Wait VirtualSiteAux} \endif Cmd # [Func TicketArg DetachArg PortArg IPArg FWArg '--shmkey='#Key] else Fork # [Host ('exec '#Cmd#' '#Func#' '# DetachArg#' '#TicketArg#' '# ' '#PortArg#' '#IPArg#' '#FWArg)] end in {OS.exec CMD ARGS {Not Detach}} catch E then {OS.wait _ _} raise E end end end %% returns X whenever entity P is permFail, _ otherwise fun {WhenFailed P X} if {Member permFail {DP.getFaultStream P}} then X else _ end end class ManagerProxy prop locking feat Run Ctrl ProxyFailed attr Run: nil Ctrl: nil Status: okay meth init(host: HostIn <= localhost fork: ForkIn <= automatic detach: Detach <= false timeout: Timeout <= {Property.get 'dp.probeTimeout'} pid: PID <= _ port: PORT <= default ip: IP <= default firewall:FW <= false) RunRet RunPort = {Port.new RunRet} CtrlRet CtrlPort = {Port.new CtrlRet} Host = {VirtualString.toAtom HostIn} Fork = {VirtualString.toAtom ForkIn} Cancel in PID={ForkProcess local OFork = case Fork of automatic then if Host==localhost then if HasVirtualSite then virtual else sh end else {Property.condGet 'oz.remote.fork' rsh} end [] sh then sh else Fork end in OFork end Host RunPort#CtrlPort Detach PORT IP FW} thread {Delay Timeout} Cancel = unit end case {Record.waitOr RunRet#Cancel} of 1 then case {Record.waitOr CtrlRet#Cancel} of 1 then Run <- RunRet.2 Ctrl <- CtrlRet.2 self.Run = RunRet.1 self.Ctrl = CtrlRet.1 %% bind self.ProxyFailed whenever self.Run or self.Ctrl fails thread self.ProxyFailed={WhenFailed self.Run failed} end thread self.ProxyFailed={WhenFailed self.Ctrl failed} end else {Exception.raiseError remote(cannotCreate self Host)} end else {Exception.raiseError remote(cannotCreate self Host)} end end meth SyncSend(Which What) OldS Answer NewS in lock if @Status==okay then OldS = (Which <- NewS) {Port.send self.Which What} else {Exception.raiseError remote(alreadyClosed self What)} end end %% The operation might fail if the proxy has failed case {Record.waitOr OldS#self.ProxyFailed} of 2 then {Exception.raiseError remote(crashed self What)} elseof 1 then Answer|NewS = OldS case Answer of okay then skip [] exception(E) then raise E end [] failed then raise error(dp('export' exceptionNogoods self)) end end end end %% Manager methods meth link(...) = Message ManagerProxy,SyncSend(Run Message) end meth apply(...) = Message ManagerProxy,SyncSend(Run Message) end meth enter(...) = Message ManagerProxy,SyncSend(Run Message) end %% Ctrl methods meth ping ManagerProxy,SyncSend(Ctrl ping) end meth close lock if @Status==okay then Status <- closed {Port.send self.Ctrl close} thread {Delay WaitDelay} {OS.wait _ _} end end end end end %% %% Register error formatter %% {Error.registerFormatter remote fun {$ E} T = 'Error: remote module manager' in case E of remote(alreadyClosed O M) then error(kind: T msg: 'Remote manager already closed' items: [hint(l:'Object application' m:'{' # oz(O) # ' ' # oz(M) # '}')]) else error(kind: T items: [line(oz(E))]) end end} end mozart-1.4.0.20080704/share/lib/dp/DPService.oz0000664000000000000000000000317611030716023017104 0ustar rootroot%%% %%% Authors: %%% Yves Jaradin (yves.jaradin@uclouvain.be) %%% %%% Copyright: %%% Yves Jaradin, 2008 %%% %%% Last change: %%% $Date: 2008-03-06 13:33:44 +0100 (Thu, 06 Mar 2008) $ by $Author: yjaradin $ %%% $Revision: 16860 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Glue at 'x-oz://boot/Glue' DP Property Site Error export Incoming Send Register GetServices define ServicesDic={NewDictionary} {Property.put 'dp.services' ServicesDic} proc{Incoming From service(to:Serv msg:M)} {{Dictionary.condGet ServicesDic Serv {Dictionary.condGet ServicesDic 'oz:default' proc{$ _ _ _}skip end}} Serv From M} end proc{Send To Serv M} {DP.init} {Glue.sendSite To service(to:Serv msg:M)} end proc{Register On Serv HandlerProc} {Send On 'oz:services' register(Serv HandlerProc)} end fun{GetServices On} {Send On 'oz:services' getAll($)} end ServicesDic.'oz:services':=proc{$ 'oz:services' From M} case M of getAll(?X) then X={Dictionary.keys ServicesDic} [] register(S H) then if From=={Site.this} then ServicesDic.S:=H else {Error.printException {Exception.error dp(service localOnly 'oz:services' M)}} end else {Error.printException {Exception.error dp(service unknownMessage 'oz:services' M)}} end end end mozart-1.4.0.20080704/share/lib/dp/DPDefaults.oz0000664000000000000000000002557011030716023017255 0ustar rootroot%%% %%% Authors: %%% Yves Jaradin (yves.jaradin@uclouvain.be) %%% %%% Contributors: %%% Raphael Collet (raphael.collet@uclouvain.be) %%% %%% Copyright: %%% Yves Jaradin, 2008 %%% %%% Last change: %%% $Date: 2008-03-06 13:33:44 +0100 (Thu, 06 Mar 2008) $ by $Author: yjaradin $ %%% $Revision: 16860 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Finalize Open OS Property Pickle Site export Init Listen define %% a small abstraction for caching sessions and resolutions fun {NewCache Generate} Cache={NewCell nil} proc {Take K L ?Lout ?Res} case L of X|T then if X.1==K then Lout=T Res=[X.2] else Lout=X|{Take K T $ Res} end else Lout=nil Res=nil end end in {Finalize.everyGC proc {$} Cache:=nil end} cache(get: fun {$ K} L T in L=Cache:=T case {Take K L T} of [X] then X else {Generate K} end end put: proc {$ K X} T in T=Cache:=(K#X)|T end) end %% format/parse messages in Session fun{BuildMsg M Tail} case M of nil then &<|&>|Tail [] _|_ then &<|{FoldL M fun {$ Acc X} {BuildMsg X $ Acc} end $ &>|Tail} [] &< then {Exception.raiseError dp(line badChar &<)} unit [] &> then {Exception.raiseError dp(line badChar &>)} unit else M|Tail end end proc{ParseMsg T S} case T of nil then S.1=nil S.2=nil [] &<|T then X Y in S.1=X|Y {ParseMsg T X|Y|S.2} [] &>|T then S.1=nil {ParseMsg T S.2} [] H|T then X in S.1=H|X {ParseMsg T X|S.2} end end %% A Session wraps a socket connection to communicate with a site class Session from Open.socket attr id owner: true % whether the session owns its file descriptors meth init(U) Ip#PortNum#Id={DecomposeURI U} in Open.socket,init() id:=Id {self connect(host:Ip port:{String.toInt PortNum})} {Finalize.register self proc {$ C} {C close} end} end meth dOpen(X Y) Open.socket,dOpen(X Y) {Finalize.register self proc {$ C} {C close} end} end meth close(...)=M %% don't close if the session has been unhooked if @owner then Open.socket,M end end meth unHook() owner:=false end meth getId($) @id end meth sendMsg(M) {self send(vs:{BuildMsg M nil})} end meth receiveMsg($) {self Receive("" $)} end meth Receive(I $) L Str={Append I Open.socket,read(list:$ len:L)} in try {ParseMsg Str [$]|nil} catch _ then if L>0 then {self Receive(Str $)} else {Exception.raiseError dp(line dropped)} unit end end end meth ReceiveN(N $) L T Str=Open.socket,read(list:$ tail:T size:N len:L) in if N case {Sess receiveMsg($)} of ["ok" !URI PSite Meths] then S in % successful reply {PutSession URI Sess} S={Pickle.unpack {Decode PSite}} s(site:S connect:{MakeConnect URI S Meths}) [] ["dead" !URI PSite] then % site is dead, cannot connect {PutSession URI Sess} s(site:{Pickle.unpack {Decode PSite}} connect:FailConnect) end catch system(os(os "connect" ...) ...) andthen {IsCritical URI} then s(site:{Value.failed siteIsDead} connect:FailConnect) [] _ then s(site:{Value.failed siteNotReachable} connect:NoConnect) end end %% make a connect function for the given site and connection methods fun {MakeConnect URI S Meths} fun {$ Preferences} %% currently ignore user preferences for M in Meths return:Return default:none do try case M of ["uri" OtherURI] then raise success({ConnectToURI OtherURI Preferences}) end [] ["direct"] then raise success({ConnectDirect URI}) end [] ["reverse"] then raise success({ConnectReverse URI}) end end catch success(X) then %% this turnaround is necessary because Return is %% implemented by raising an exception... {Return X} [] _ then skip % try next method end end end end %% "connects" to a failed site fun {FailConnect _} permFail end %% "connects" to an unreachable site fun {NoConnect _} none end %% connect with a given URI fun {ConnectToURI URI Preferences} Scheme={String.toAtom {String.token URI &: $ _}} Connect={{Property.get 'dp.resolver'}.Scheme URI}.connect in {Connect Preferences} end %% ask for a direct connection to the URI fun {ConnectDirect URI} Sess={GetSession URI} FD0 FD1 in {Sess sendMsg(["connect"])} % send request: {Sess receiveMsgForce("accept" true)} %% accepted: the session can be used as a connection {Sess unHook()} {Sess getDesc(FD0 FD1)} fd(FD0 FD1) end %% ask for a reverse connection fun {ConnectReverse URI} if {Property.get 'dp.firewalled'} then ignore else Sess={GetSession URI} in {Sess sendMsg(["reverseConnect" {Site.allURIs {Site.this}}])} none end end %% launch site connection server on the current site fun {Listen IncomingP} Server={New Open.socket init()} Params={Property.get 'dp.listenerParams'} IP={DoGetIp {Value.condSelect Params ip best}} PN={DoBind Server {Value.condSelect Params port 'from'(9000)}} ID={Value.condSelect Params id 0} Uri={ComposeURI IP PN ID} proc {Serve Sess} proc {Loop} case {Sess receiveMsg($)} of ["get" !Uri] then % receive request PSite={Encode {ByteString.toString {Pickle.pack {Site.this}}}} Meths=[["direct"] ["reverse"]] in {Sess sendMsg(["ok" Uri PSite Meths])} % reply with data {Loop} % ready for next request [] ["connect"] then FD0 FD1 in {Sess sendMsg("accept")} {Sess unHook()} {Sess getDesc(FD0 FD1)} {Send IncomingP fd(FD0 FD1)} [] ["reverseConnect" Uris] then for U in Uris break:Break do try S={Site.resolve U} in {Wait S} {Site.allURIs S _} % Force connect raise success end catch success then %% this turnaround is necessary because Break %% is implemented by raising an exception... {Break} [] _ then skip % try next Uri end end end end in thread try {Loop} catch _ then {Sess close} % protocol error: we simply drop the session end end end in {Server listen()} thread %% infinite loop; create a Session for every incoming connection for do {Serve {Server accept(accepted:$ acceptClass:Session)}} end end [Uri] end %% bind Socket S to a port, following the specification D fun{DoBind S D} case D of 'from'(X) then try {S bind(takePort:X)} X catch _ then {DoBind S 'from'(X+1)} end [] free then {S bind(port:$)} [] exact(X) then {S bind(takePort:X)} X end end %% extract an IP address, following specification D fun{DoGetIp D} if {String.is D} then D else case D of exact(Ip) then Ip [] dns(N) then {OS.getHostByName N}.addrList.1 [] best then {BestIp {OS.getHostByName {OS.uName}.nodename}.addrList} end end end %% return the best IP address to connect in the list fun {BestIp IPs} X|T={Map IPs CategorizeIP} in {FoldL T Best2 X}.2 end fun {Best2 (C1#_)=CIP1 (C2#_)=CIP2} if (C2=='global' andthen C1\='global') orelse (C2=='private' andthen C1\='global' andthen C1\='private') orelse (C2=='local' andthen C1\='global' andthen C1\='private' andthen C1\='local') orelse (C2=='loopback' andthen C1=='reserved') then CIP2 else CIP1 end end %% adjoin a category to the given IP address, following RFC3330 fun {CategorizeIP IP} (case IP of &1|&0|&.|_ then 'private' [] &1|&2|&7|&.|_ then 'loopback' [] &1|&6|&9|&.|&2|&5|&4|_ then 'local' [] &1|&7|&2|&.|T then case T of &1|&6|&.|_ then 'private' [] &1|&7|&.|_ then 'private' [] &1|&8|&.|_ then 'private' [] &1|&9|&.|_ then 'private' [] &2|_|&.|_ then 'private' [] &3|&0|&.|_ then 'private' [] &3|&1|&.|_ then 'private' end [] &1|&9|&2|&.|&1|&6|&8|&.|_ then 'private' [] &2|&2|&4|&.|_ then 'multicast' [] &2|&2|&5|&.|_ then 'multicast' [] &2|&2|&6|&.|_ then 'multicast' [] &2|&2|&7|&.|_ then 'multicast' [] &2|&2|&8|&.|_ then 'multicast' [] &2|&2|&9|&.|_ then 'multicast' [] &2|&3|_|&.|_ then 'multicast' [] &2|&4|_|&.|_ then 'reserved' [] &2|&5|_|&.|_ then 'reserved' else 'global' end)#IP end %% compose/decompose a site URI fun {ComposeURI IP PN ID} {VirtualString.toString 'oz-site://'#IP#':'#PN#'/'#ID} end fun {DecomposeURI URI} IP PN ID in {String.token {String.token {List.drop URI PrefixLen} &: IP} &/ PN ID} IP#PN#ID end PrefixLen={Length "oz-site://"} %% tell whether the Uri is critical to connect to the site fun {IsCritical URI} %% it is the case when the site id starts with letter 'h' case {DecomposeURI URI}.3 of &h|_ then true else false end end %% encode/decode a string of bytes fun{Encode Xs} case Xs of nil then nil [] H|T then &A+(H div 16)|&a+(H mod 16)|{Encode T} end end fun{Decode Xs} case Xs of nil then nil [] A|B|T then (A-&A)*16+(B-&a)|{Decode T} end end end mozart-1.4.0.20080704/share/lib/dp/Fault.oz0000664000000000000000000000410011030716023016317 0ustar rootroot%%% %%% Authors: %%% Per Brand (perbrand@sics.se) %%% Erik Klintskog (erik@sics.se) %%% %%% Contributor: %%% Raphael Collet (raphael.collet@uclouvain.be) %%% %%% Copyright: %%% Per Brand, 1998 %%% %%% Last change: %%% $Date: 2008-06-26 15:39:31 +0200 (Thu, 26 Jun 2008) $ by $Author: raph $ %%% $Revision: 17003 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import System(showError: ShowError) DP export getEntityCond: GetEntityCond enable: Enable disable: Disable install: Install deInstall: DeInstall installWatcher: InstallWatcher deInstallWatcher: DeInstallWatcher defaultEnable: DefaultEnable defaultDisable: DefaultDisable define proc {Defunct S} {ShowError '*** Warning: '#S#' disabled; check new module DP ***'} end proc {GetEntityCond _ _} {Defunct 'Fault.getEntityCond'} end fun {Enable _ _ _} {Defunct 'Fault.enable'} true end fun {Disable _ _} {Defunct 'Fault.disable'} true end fun {Install _ _ _ _} {Defunct 'Fault.install'} true end fun {DeInstall _ _} {Defunct 'Fault.deInstall'} true end fun {InstallWatcher Entity FStates WatcherProc} if {List.all FStates fun {$ S} {Member S [tempFail permFail]} end} then proc {Loop FS} case FS of F|Fr then if {Member F FStates} then thread {WatcherProc Entity F(info:state)} end else {Loop Fr} end else skip end end in {DP.getFaultStream Entity thread {Loop} end} true else false end end fun {DeInstallWatcher _ _ _} {Defunct 'Fault.deInstallWatcher'} true end fun {DefaultEnable _} {Defunct 'Fault.defaultEnable'} true end fun {DefaultDisable} {Defunct 'Fault.defaultDisable'} true end end mozart-1.4.0.20080704/share/lib/dp/RemoteServer.oz0000664000000000000000000001032011030716023017667 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% Konstantin Popov %%% %%% Contributors: %%% Andreas Franke %%% Raphael Collet (raphael.collet@uclouvain.be) %%% %%% Copyright: %%% Kostantin Popov, 1998 %%% Christian Schulte, 1997--2000 %%% %%% Last change: %%% $Date: 2008-06-26 15:39:31 +0200 (Thu, 26 Jun 2008) $ by $Author: raph $ %%% $Revision: 17003 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Connection % Do not request! Application(exit getCmdArgs) Module(manager) System(showError gcDo) DP(initWith getFaultStream) Property(get put) OS(signal) Error(printException) prepare ExitDone = 0 ExitErrorInit = 1 ExitErrorTicket = 2 ExitErrorClient = 3 ArgSpec = record(ticket(single type:atom) shmkey(single type:atom default:'NONE') detached(single type:bool default:false) test(single type:bool default:false) port(single type:int default:0) ip(single type:atom default:default) firewall(single type:bool default:false)) define %% Get the arguments Args = {Application.getCmdArgs ArgSpec} if Args.test then {System.showError 'Remote: Test succeeded...'} {Application.exit 0} end %% Initialize distribution with desired settings before Connection.take local S1 = if Args.ip\=default then [ip#exact(Args.ip)] else nil end S2 = if Args.port\=0 then [port#exact(Args.port)] else nil end S3 = [firewall#Args.firewall] Settings = {AdjoinList settings {Flatten [S1 S2 S3]}} in {DP.initWith Settings} end %% Module manager needed for ModMan = {New Module.manager init} if Args.shmkey\='NONE' then %% Link it via the module manager, since only now we know %% that the emulator has support for virtual sites indeed. VirtualSite = {ModMan link(name:'x-oz://boot/VirtualSite' $)} in try %% First initialize the virtual site, so that the %% ticket-based connection following it uses the %% virtual site communication mechanism. {VirtualSite.initServer Args.shmkey} \ifdef DENYS_EVENTS %% start VS threads {ModMan link(name:'x-oz://system/VirtualSite')} \endif catch _ then {System.showError 'Virtual Site: failed to initialize'} {Application.exit ExitErrorInit} end end RunRet = {NewCell _} CtrlRet = {NewCell _} RunStr CtrlStr try {Access RunRet} # {Access CtrlRet} = {Connection.take Args.ticket} {Port.send {Access RunRet} {Port.new RunStr}} {Port.send {Access CtrlRet} {Port.new CtrlStr}} catch Ex then {System.showError 'Remote Server: failed to take a ticket'} {Error.printException Ex} {Application.exit ExitErrorTicket} end %% If we are detached, terminate when our client runs into trouble. %% This is the case, if one of the ports is found to refer to a dead %% site if Args.detached then {OS.signal 'SIGHUP' ignore} {OS.signal 'SIGTERM' ignore} else thread if {Member permFail {DP.getFaultStream {Access RunRet}}} then {System.showError 'RemoteServer: client crashed.'} {Application.exit ExitErrorClient} end end end %% The module manager server thread {ForAll RunStr proc {$ What} try try {ModMan What} in {Port.send {Access RunRet} okay} catch E then {Port.send {Access RunRet} exception({Record.subtract E debug})} end catch _ then {Port.send {Access RunRet} failed} end end} end %% The server for control messages thread {ForAll CtrlStr proc {$ C} case C of ping then {Port.send {Access CtrlRet} okay} [] close then %% No more applies %% Can be used concurently by the %% module manager server {Assign RunRet {NewPort _}} {Assign CtrlRet unit} {System.gcDo} {Application.exit ExitDone} end end} end end mozart-1.4.0.20080704/share/lib/wp/0000775000000000000000000000000011033376117014733 5ustar rootrootmozart-1.4.0.20080704/share/lib/wp/Tk.oz0000664000000000000000000010052007654044217015670 0ustar rootroot%%% %%% Authors: %%% Michael Mehl (mehl@dfki.de) %%% Christian Schulte %%% %%% Copyright: %%% Michael Mehl, 1997 %%% Christian Schulte, 1997 %%% %%% Last change: %%% $Date: 2003-05-01 00:05:03 +0200 (Thu, 01 May 2003) $ by $Author: duchier $ %%% $Revision: 15472 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import TkBoot at 'x-oz://boot/Tk' Property(get) System(showError) Error(registerFormatter) Open(pipe text socket) OS(getEnv putEnv close exec pipe stat) Resolve(makeResolver pickle handler) export send: TkSend batch: TkBatch return: TkReturnString returnString: TkReturnString returnAtom: TkReturnAtom returnInt: TkReturnInt returnFloat: TkReturnFloat returnList: TkReturnListString returnListString: TkReturnListString returnListAtom: TkReturnListAtom returnListInt: TkReturnListInt returnListFloat: TkReturnListFloat getPrefix: TkGetPrefix getId: TkGetId getTclName: TkGetTclName invoke: InvokeAction button: TkButton canvas: TkCanvas checkbutton: TkCheckbutton entry: TkEntry frame: TkFrame label: TkLabel listbox: TkListbox menu: TkMenu menubutton: TkMenubutton message: TkMessage radiobutton: TkRadiobutton scale: TkScale scrollbar: TkScrollbar text: TkText toplevel: TkToplevel menuentry: TkMenuentries image: TkImage font: TkFont listener: TkListener textTag: TkTextTag textMark: TkTextMark canvasTag: TkCanvasTag action: TkAction variable: TkVariable string: TkString isColor: IsColor addYScrollbar: AddYScrollbar addXScrollbar: AddXScrollbar defineUserCmd: DefineUserCmd localize: TkFixedLocalize optionsManager: OptionsManager newWidgetClass: NewWidgetClass prepare class Counter prop locking final attr n:0 meth get(?N) lock N=@n n <- N+1 end end end Stok = String.token Stoks = String.tokens S2F = String.toFloat S2I = String.toInt SIF = String.isFloat SII = String.isInt V2S = VirtualString.toString %% %% Some Character/String stuff %% local fun {TkNum Is BI ?BO} case Is of nil then BO=BI nil [] I|Ir then case I of &- then &~|{TkNum Ir BI BO} [] &. then &.|{TkNum Ir true BO} [] &e then &e|{TkNum Ir true BO} [] &E then &E|{TkNum Ir true BO} else I|{TkNum Ir BI BO} end end end in fun {TkStringToString S} S end TkStringToAtom = StringToAtom fun {TkStringToInt S} %% Read a number and convert it to an integer OS IsAFloat in OS={TkNum S false ?IsAFloat} if IsAFloat andthen {SIF OS} then {FloatToInt {S2F OS}} elseif {Not IsAFloat} andthen {SII OS} then {S2I OS} else false end end fun {TkStringToFloat S} %% Read a number and convert it to a float OS IsAFloat in OS={TkNum S false ?IsAFloat} if IsAFloat andthen {SIF OS} then {S2F OS} elseif {Not IsAFloat} andthen {SII OS} then {IntToFloat {S2I OS}} else false end end fun {TkStringToListString S} {Stoks S & } end fun {TkStringToListAtom S} {Map {Stoks S & } TkStringToAtom} end fun {TkStringToListInt S} {Map {Stoks S & } TkStringToInt} end fun {TkStringToListFloat S} {Map {Stoks S & } TkStringToFloat} end end %% expand a quoted Tcl/Tk string %% \n -> newline %% \ -> fun {Expand Is} case Is of nil then nil [] I|Ir then if I==&\\ then case Ir of nil then nil [] II|Irr then if II==&n then &\n else II end|{Expand Irr} end else I|{Expand Ir} end end end local IsTkListener = {NewName} ListenToThat = {NewName} proc {EnterMessageArgs As I T} case As of nil then skip [] A|Ar then T.I=A {EnterMessageArgs Ar I+1 T} end end proc {EnterPrefixArgs I MP M} if I>0 then M.I=MP.I {EnterPrefixArgs I-1 MP M} end end fun {MaxInt As M} case As of nil then M [] A|Ar then {MaxInt Ar if {IsInt A} then {Max M A} else M end} end end fun {NumberArgs As I} case As of nil then nil [] A|Ar then J=I+1 in J#A|{NumberArgs Ar J} end end proc {Hear L Ms} case Ms of nil then skip [] M|Mr then {L M} {Hear L Mr} end end in class TkListener feat !IsTkListener:unit attr Tail meth tkInit Stream = @Tail in thread {Hear self Stream} end end meth !ListenToThat(M) NewTail in M|NewTail = (Tail <- NewTail) end meth tkServe(M) TkListener,ListenToThat(M) end meth tkClose Tail <- nil end end proc {InvokeAction Action Args NoArgs Thread} case Action of OP # M then SM in if NoArgs==0 then SM=M elseif {IsTuple M} then W={Width M} in SM = {MakeTuple {Label M} NoArgs + W} {EnterPrefixArgs W M SM} {EnterMessageArgs Args {Width M}+1 SM} else SM={AdjoinList M {NumberArgs Args {MaxInt {Arity M} 0}}} end if {IsPort OP} then {Send OP SM} elseif {IsObject OP} andthen {HasFeature OP IsTkListener} then {OP ListenToThat(SM)} elseif Thread then thread {OP SM} end else {OP SM} end else if NoArgs==0 then if Thread then thread {Action} end else {Action} end else if Thread then thread {Procedure.apply Action Args} end else {Procedure.apply Action Args} end end end end end fun {GetFields Ts} case Ts of nil then '' [] T|Tr then ' %' # case T of list(T) then case T of atom(A) then A [] int(I) then I [] float(F) then F [] string(S) then S else T end [] string(S) then S [] atom(A) then A [] int(I) then I [] float(F) then F else T end # {GetFields Tr} end end fun {GetCasts Ts} case Ts of nil then nil [] T|Tr then case {Label T} of list then case {Label T.1} of atom then TkStringToListAtom [] int then TkStringToListInt [] float then TkStringToListFloat else TkStringToString end [] atom then TkStringToAtom [] int then TkStringToInt [] float then TkStringToFloat else TkStringToString end | {GetCasts Tr} end end IdCharacters = i(&a &b &c &d &e &f &g &h &i &j &k &l &m &n &o &p &q &r &s &t &u &v &w &x &y &z &A &B &C &D &E &F &G &H &I &J &K &L &M &N &O &P &Q &R &S &T &U &V &W &X &Y &Z) IdNumber = {Width IdCharacters} fun {GenString N} if N>=IdNumber then IdCharacters.((N mod IdNumber) + 1)|{GenString N div IdNumber} else [IdCharacters.N] end end TkString = string(toInt: TkStringToInt toFloat: TkStringToFloat toListString: TkStringToListString toListAtom: TkStringToListAtom toListInt: TkStringToListInt toListFloat: TkStringToListFloat) define %% %% Error formatter %% {Error.registerFormatter tk fun {$ E} T = 'Error: Tk module' in case E of tk(wrongParent O M) then error(kind: T msg: 'Wrong Parent' items: [hint(l:'Object application' m:'{' # oz(O) # ' ' # oz(M) # '}')]) [] tk(alreadyInitialized O M) then error(kind: T msg: 'Object already initialized' items: [hint(l:'Object application' m:'{' # oz(O) # ' ' # oz(M) # '}')]) [] tk(alreadyClosed O M) then error(kind: T msg: 'Window already closed' items: [hint(l:'Object application' m:'{' # oz(O) # ' ' # oz(M) # '}')]) [] tk(alreadyClosed O) then error(kind: T msg: 'Window already closed' items: [hint(l:'Object' m:oz(O))]) [] tk(engineCrashed) then error(kind: T msg: ('Graphics engine (tk.exe) crashed '# 'or could not be started')) else error(kind: T items: [line(oz(E))]) end end} %% %% Sending tickles %% TkInit = TkBoot.init TkGetNames = TkBoot.getNames TkSend = TkBoot.send TkBatch = TkBoot.batch TkReturn = TkBoot.return TkReturnMess = TkBoot.returnMess TkSendTuple = TkBoot.sendTuple TkSendTagTuple = TkBoot.sendTagTuple TkSendFilter = TkBoot.sendFilter TkClose = TkBoot.close %% %% Generation of Identifiers %% GenTopName = TkBoot.genTopName GenWidgetName = TkBoot.genWidgetName GenTagName = TkBoot.genTagName GenVarName = TkBoot.genVarName GenImageName = TkBoot.genImageName GenFontName = TkBoot.genFontName %% %% Master slave mechanism for widgets %% AddSlave = TkBoot.addGroup DelSlave = TkBoot.delGroup %% %% Printing error messages %% proc {TkError S Tcl} P={Property.get errors} in {System.showError 'Tk Module: '#S# if Tcl==unit then '' else '\n'# {Value.toVirtualString Tcl P.depth P.width} end} end Stream = local Platform = {Property.get 'platform.name'} PLTFRM = ({Property.get 'oz.home'} # '/platform/'#Platform#'/') TKEXE = case {Property.get 'platform.arch'} of 'darwin' then 'OzWish.app/Contents/MacOS/OzWish' else 'tk.exe' end in {OS.putEnv 'TCL_LIBRARY' PLTFRM#'wish/tcl'} {OS.putEnv 'TK_LIBRARY' PLTFRM#'wish/tk'} % RS: on MS Windows we use a socket: before we used % pipes, but on NT this made problems when certain background % tasks where running: Tk could get stuck here if Platform == 'win32-i486' then Stream Port in thread Stream = {New class $ from Open.socket Open.text prop final end server(port: ?Port)} end {Wait Port} _ = {OS.exec PLTFRM#TKEXE [Port] true} {Wait Stream} Stream else {New class $ from Open.pipe Open.text prop final end init(cmd:PLTFRM#TKEXE)} end end ActionIdServer = {New Counter get(_)} TkDict = {Dictionary.new} local TkInitStr = \insert TkInit.oz in {Stream write(vs:TkInitStr)} {Stream flush(how:[send])} end local RealRetStream = {TkInit {Stream getDesc(_ $)} TkDict} in RetStream = {Cell.new RealRetStream} end local fun {GetArgs N Ps} %% Get the next N line lines expanded if N>0 then E={Expand {Stream getS($)}} in case Ps of nil then E | {GetArgs N-1 nil} [] P|Pr then {P E} | {GetArgs N-1 Pr} end else nil end end fun {ReadUntilDot} case {Stream getS($)} of "." then '' [] false then '' elseof S then S#'\n'#{ReadUntilDot} end end in %% Message formats %% call a procedure %% p %% %% ... %% %% compose a message %% p 0 %% %% %% %% ... %% %% stop %% s %% errors %% w %% %% . proc {TkReadLoop RS} Is={Stream getS($)} in case Is of I|Ir then Irr=Ir.2 in case I of &r then Rs Car Cdr in {Cell.exchange RS Rs Cdr} Car = Rs.1 Cdr = Rs.2 Car.1 = {Car.2 {Expand Irr}} {TkReadLoop RS} [] &p then Irr1 Id = {S2I {Stok Irr & $ ?Irr1}} NoArgs = {S2I {Stok Irr1 & $ _}} in case {Dictionary.condGet TkDict Id unit} of O # M # Ps then {InvokeAction O#M {GetArgs NoArgs Ps} NoArgs true} [] P # Ps then {InvokeAction P {GetArgs NoArgs Ps} NoArgs true} else _={GetArgs NoArgs nil} end {TkReadLoop RS} [] &s then {TkSend v('puts stdout {s end}; flush stdout; destroy .')} {Stream close} [] &w then {TkError Irr#'\n'#{ReadUntilDot} unit} {TkReadLoop RS} else {TkReadLoop RS} end [] false then {Stream close} end end %% Start reading wish's output thread try {Thread.setThisPriority high} {TkReadLoop RetStream} catch _ then raise system(tk(engineCrashed)) end end end end local IdBaseServer = {New Counter get(_)} in fun {TkGetPrefix} &o|&Z|{GenString {IdBaseServer get($)}} end end local IdBase = {StringToAtom {TkGetPrefix}} IdServer = {New Counter get(_)} in fun {TkGetId} IdBase#{IdServer get($)} end end fun {TkGetTclName W} {V2S W.TclName} end TkReturnMethod = {NewName} TkClass = {NewName} TkWidget = {NewName} TclSlaves TclSlaveEntry TclName {TkGetNames ?TclSlaves ?TclSlaveEntry ?TclName} proc {DefineEvent Action Args AddIt BreakIt ?ActionId ?Command} Fields = {GetFields Args} Casts = {GetCasts Args} in ActionId = {ActionIdServer get($)} {Dictionary.put TkDict ActionId case Action of O#M then O#M#Casts elseof P then P # Casts end} Command = '{'#if AddIt then '+' else '' end#'ozp '#ActionId# Fields # if BreakIt then '; break' else '' end#'}' end proc {DefineCommand Action Args ?ActionId ?Command} Casts = {GetCasts Args} in ActionId = {ActionIdServer get($)} {Dictionary.put TkDict ActionId case Action of O#M then O#M#Casts else Action#Casts end} Command = '{ozp '#ActionId#'}' end class TkAction prop sited feat ActionId !TclName !TclSlaveEntry meth tkInit(parent:Parent action:Action args:Args<=nil) = M ParentSlaves = {CondSelect Parent TclSlaves unit} ThisTclName = self.TclName ThisActionId = self.ActionId GetTclName in if ParentSlaves==unit then {Exception.raiseError tk(wrongParent self M)} elseif {IsDet ThisTclName} then {Exception.raiseError tk(alreadyInitialized self M)} else self.TclSlaveEntry = {AddSlave ParentSlaves self} {DefineCommand Action Args ?ThisActionId ?GetTclName} _ = {AddSlave ParentSlaves ThisActionId} ThisTclName = GetTclName end end meth tkAction(action:Action args:Args<=nil) Casts = {GetCasts Args} in {Dictionary.put TkDict self.ActionId case Action of O#M then O#M#Casts else Action#Casts end} end meth tkClose {Dictionary.remove TkDict self.ActionId} {DelSlave self.TclSlaveEntry} end end fun {TkReturnString M} {TkReturn M TkStringToString} end fun {TkReturnAtom M} {TkReturn M TkStringToAtom} end fun {TkReturnInt M} {TkReturn M TkStringToInt} end fun {TkReturnFloat M} {TkReturn M TkStringToFloat} end fun {TkReturnListString M} {TkReturn M TkStringToListString} end fun {TkReturnListAtom M} {TkReturn M TkStringToListAtom} end fun {TkReturnListInt M} {TkReturn M TkStringToListInt} end fun {TkReturnListFloat M} {TkReturn M TkStringToListFloat} end class ReturnClass prop sited meth tkReturn(...) = M {self TkReturnMethod(M TkStringToString)} end meth tkReturnString(...) = M {self TkReturnMethod(M TkStringToString)} end meth tkReturnAtom(...) = M {self TkReturnMethod(M TkStringToAtom)} end meth tkReturnInt(...) = M {self TkReturnMethod(M TkStringToInt)} end meth tkReturnFloat(...) = M {self TkReturnMethod(M TkStringToFloat)} end meth tkReturnList(...) = M {self TkReturnMethod(M TkStringToListString)} end meth tkReturnListString(...) = M {self TkReturnMethod(M TkStringToListString)} end meth tkReturnListAtom(...) = M {self TkReturnMethod(M TkStringToListAtom)} end meth tkReturnListInt(...) = M {self TkReturnMethod(M TkStringToListInt)} end meth tkReturnListFloat(...) = M {self TkReturnMethod(M TkStringToListFloat)} end end class Widget from ReturnClass feat !TclSlaves !TclSlaveEntry !TclName % widget name meth tkBind(event: Event action: Action <= unit args: Args <= nil append: AddIt <= false break: BreakIt <= false) = Message if {HasFeature Message action} then ActionId Command in {DefineEvent Action Args AddIt BreakIt ?ActionId ?Command} {AddSlave self.TclSlaves ActionId _} {TkSend bind(self Event v(Command))} else {TkSend bind(self Event '')} end end meth !TkReturnMethod(M Cast) {TkReturnMess self M unit Cast} end meth tk(...) = M {TkSendTuple self M} end meth tkClose {TkClose destroy(self) self} end end class CommandWidget from Widget meth tkInit(parent:Parent ...) = Message ThisTclName = self.TclName if {IsDet ThisTclName} then {Exception.raiseError tk(alreadyInitialized self Message)} end NewTkName = if {IsObject Parent} then ParentSlaves = {CondSelect Parent TclSlaves unit} in if ParentSlaves==unit then {Exception.raiseError tk(wrongParent self Message)} _ else self.TclSlaveEntry = {AddSlave ParentSlaves self} {GenWidgetName Parent.TclName} end elseif {IsVirtualString Parent} then self.TclSlaveEntry = nil {GenWidgetName Parent} else {Exception.raiseError tk(wrongParent self Message)} _ end in if {HasFeature Message action} then ActionId Command in {DefineCommand Message.action {CondSelect Message args nil} ?ActionId ?Command} self.TclSlaves = [nil ActionId] {TkSendFilter self.TkClass NewTkName Message [action args parent] v('-command '#Command)} else self.TclSlaves = [nil] {TkSendFilter self.TkClass NewTkName Message [parent] unit} end ThisTclName = NewTkName end meth tkAction(action:Action<=unit args:Args <= nil) = Message if {HasFeature Message action} then ActionId Command in {DefineCommand Action Args ?ActionId ?Command} {AddSlave self.TclSlaves ActionId _} {TkSend o(self configure command: v(Command))} else {TkSend o(self configure command:'')} end end end class NoCommandWidget from Widget meth tkInit(parent:Parent ...) = Message ThisTclName = self.TclName if {IsDet ThisTclName} then {Exception.raiseError tk(alreadyInitialized self Message)} end NewTkName = if {IsObject Parent} then ParentSlaves = {CondSelect Parent TclSlaves unit} in if ParentSlaves==unit then {Exception.raiseError tk(wrongParent self Message)} _ else self.TclSlaveEntry = {AddSlave ParentSlaves self} {GenWidgetName Parent.TclName} end elseif {IsVirtualString Parent} then self.TclSlaveEntry = nil {GenWidgetName Parent} else {Exception.raiseError tk(wrongParent self Message)} _ end in self.TclSlaves = [nil] {TkSendFilter self.TkClass NewTkName Message [parent] unit} ThisTclName = NewTkName end end class TkToplevel from Widget meth tkInit(...) = Message ThisTclName = self.TclName if {IsDet ThisTclName} then {Exception.raiseError tk(alreadyInitialized self Message)} end MyTitle = {CondSelect Message title 'Oz Window'} MyTkName = if {HasFeature Message parent} then Parent = Message.parent in if {IsObject Parent} then ParentSlaves = {CondSelect Parent TclSlaves unit} in if ParentSlaves==unit then {Exception.raiseError tk(wrongParent self Message)} _ else self.TclSlaveEntry = {AddSlave ParentSlaves self} {GenWidgetName Parent.TclName} end elseif {IsVirtualString Parent} then self.TclSlaveEntry = nil {GenWidgetName Parent} else {Exception.raiseError tk(wrongParent self Message)} _ end else self.TclSlaveEntry = nil {GenTopName} end CloseId CloseCommand in {DefineCommand {CondSelect Message delete self#tkClose} nil ?CloseId ?CloseCommand} self.TclSlaves = [nil CloseId] {TkSendFilter toplevel MyTkName Message [delete parent title withdraw] o(if {CondSelect Message withdraw false} then v('; wm withdraw '#MyTkName) else unit end v('; wm title '#MyTkName) MyTitle v('; wm protocol '#MyTkName#' WM_DELETE_WINDOW '# CloseCommand))} ThisTclName = MyTkName end meth tkWM(...) = M {TkSendTagTuple wm self M} end end class TkFrame from NoCommandWidget feat !TkClass:frame end class TkButton from CommandWidget feat !TkClass:button end class TkCheckbutton from CommandWidget feat !TkClass:checkbutton end class TkListbox from NoCommandWidget feat !TkClass:listbox end class TkRadiobutton from CommandWidget feat !TkClass:radiobutton end class TkScrollbar from CommandWidget feat !TkClass:scrollbar end class TkScale from CommandWidget feat !TkClass:scale end class TkEntry from NoCommandWidget feat !TkClass:entry end class TkLabel from NoCommandWidget feat !TkClass:label end class TkMessage from NoCommandWidget feat !TkClass:message end class TkMenubutton from NoCommandWidget feat !TkClass:menubutton end class TkText from NoCommandWidget feat !TkClass: text end class TkCanvas from NoCommandWidget feat !TkClass: canvas end local TkType = {NewName} EntryVar = {NewName} EntryLock = {NewName} AddEntry = {NewName} InsertEntry = {NewName} RemoveEntry = {NewName} fun {MkMove Es I} case Es of nil then nil [] E|Er then v(';')|set(E.EntryVar I)|{MkMove Er I+1} end end fun {Add Es EA I ?Tcl} case Es of nil then Tcl=[v(';') set(EA.EntryVar I)] [EA] [] E|Er then E|{Add Er EA I+1 ?Tcl} end end fun {Insert Es EA EB I ?Tcl} case Es of nil then Tcl=[v(';') set(EA.EntryVar I)] [EA] [] E|Er then if E==EB then Tcl={MkMove EA|Es I} EA|Es else E|{Insert Er EA EB I+1 ?Tcl} end end end fun {Remove Es EA I ?Tcl} case Es of nil then Tcl=[unit] nil [] E|Er then if E==EA then Tcl={MkMove Er I} Er else E|{Remove Er EA I+1 ?Tcl} end end end class TkMenuentry from ReturnClass prop sited feat !TclSlaves !TclSlaveEntry !TclName % widget name !EntryVar !TkWidget meth tkInit(parent: Parent before: Before <= unit action: Action <= unit args: Args <= nil ...) = Message ThisTclName = self.TclName if {IsDet ThisTclName} then {Exception.raiseError tk(alreadyInitialized self Message)} end ParentLock = {CondSelect Parent EntryLock unit} if ParentLock==unit then {Exception.raiseError tk(wrongParent self Message)} end in lock ParentLock then IsInsert = {HasFeature Message before} MoveTcl = if IsInsert then {Parent InsertEntry(self Before $)} else {Parent AddEntry(self $)} end VarName = {GenVarName} in case MoveTcl of unit then skip else self.TkWidget = Parent self.TclSlaveEntry = {AddSlave Parent.TclSlaves self} self.EntryVar = VarName if {HasFeature Message action} then ActionId Command in {DefineCommand Action Args ?ActionId ?Command} self.TclSlaves = [nil ActionId] {TkSendFilter o(Parent if IsInsert then insert(Before) else add end) self.TkType Message [action args before parent] o(v('-command '#Command) b(MoveTcl))} else self.TclSlaves = [nil] {TkSendFilter o(Parent if IsInsert then insert(Before) else add end) self.TkType Message [action args before parent] b(MoveTcl)} end ThisTclName = '[ozm $'#VarName#' '#Parent.TclName#']' end end end meth tk(...) = M Parent = self.TkWidget in lock Parent.EntryLock then {TkSendTagTuple Parent self M} end end meth !TkReturnMethod(M Cast) Parent = self.TkWidget in lock Parent.EntryLock then {TkReturnMess Parent M self Cast} end end meth tkClose Parent = self.TkWidget in lock Parent.EntryLock then case {Parent RemoveEntry(self $)} of unit then skip elseof MoveTcl then {TkClose o(Parent delete self v(';') unset self.EntryVar v(';') b(MoveTcl)) self} end end end end in class TkMenu from NoCommandWidget feat !TkClass: menu !EntryLock attr Entries: nil meth tkInit(...) = Message self.EntryLock = {NewLock} NoCommandWidget,Message end meth !AddEntry(E ?Tcl) case @Entries of unit then ?Tcl=unit else Entries <- {Add @Entries E 0 ?Tcl} end end meth !InsertEntry(E EB ?Tcl) case @Entries of unit then ?Tcl=unit else Entries <- {Insert @Entries E EB 0 ?Tcl} end end meth !RemoveEntry(E ?Tcl) case @Entries of unit then ?Tcl=unit else Entries <- {Remove @Entries E 0 ?Tcl} end end meth tkClose lock self.EntryLock then Entries <- unit end NoCommandWidget,tkClose end end TkMenuentries = menuentry(cascade: class $ from TkMenuentry feat !TkType:cascade end checkbutton: class $ from TkMenuentry feat !TkType:checkbutton end command: class $ from TkMenuentry feat !TkType:command end radiobutton: class $ from TkMenuentry feat !TkType:radiobutton end separator: class $ from TkMenuentry feat !TkType:separator end) end %% %% Tcl/Tk variables %% class TkVariable from ReturnClass prop sited feat !TclName meth tkInit(InitValue <= unit) MyTclName = {GenVarName} ThisTclName = self.TclName in if {IsDet ThisTclName} then {Exception.raiseError tk(alreadyInitialized self tkInit)} end if InitValue\=unit then {TkSend set(v(MyTclName) InitValue)} end ThisTclName = MyTclName end meth tkSet(X) {TkSend set(self X)} end meth !TkReturnMethod(M C) M.1={TkReturn set(self) C} end end %% %% Tags and Marks %% local TkQualify = {NewName} class TkTagAndMark from ReturnClass feat !TkWidget !TclSlaves !TclSlaveEntry !TclName meth tkInit(parent:Parent) ThisTclName = self.TclName ParentSlaves = {CondSelect Parent TclSlaves unit} in if ParentSlaves==unit then {Exception.raiseError tk(wrongParent self tkInit(parent:Parent))} end if {IsDet ThisTclName} then {Exception.raiseError tk(alreadyInitialized self tkInit(parent:Parent))} end self.TclSlaves = [nil] self.TclSlaveEntry = {AddSlave ParentSlaves self} self.TkWidget = Parent ThisTclName = {GenTagName} end meth tk(...) = M {TkSendTagTuple o(self.TkWidget self.TkQualify) self M} end meth !TkReturnMethod(M Cast) {TkReturnMess o(self.TkWidget self.TkQualify) M self Cast} end meth tkClose {TkClose o(self.TkWidget self.TkQualify delete self) self} end end class TkTag from TkTagAndMark meth tkBind(event: Event action: Action <= unit args: Args <= nil append: AddIt <= false break: BreakIt <= false) = Message if {HasFeature Message action} then ActionId Command in {DefineEvent Action Args AddIt BreakIt ?ActionId ?Command} {AddSlave self.TclSlaves ActionId _} {TkSend o(self.TkWidget self.TkQualify bind self Event v(Command))} else {TkSend o(self.TkWidget self.TkQualify bind self Event '')} end end end in class TkTextMark from TkTagAndMark feat !TkQualify: mark end class TkCanvasTag from TkTag feat !TkQualify: unit end class TkTextTag from TkTag feat !TkQualify: tag meth tkInit(parent:Parent ...) = M ParentSlaves = {CondSelect Parent TclSlaves unit} ThisTclName = {GenTagName} in if ParentSlaves==unit then {Exception.raiseError tk(wrongParent self M)} end if {IsDet self.TclName} then {Exception.raiseError tk(alreadyInitialized self M)} end self.TclSlaves = [nil] self.TclSlaveEntry = {AddSlave ParentSlaves self} self.TkWidget = Parent if {Width M}>1 then {TkSendFilter o(Parent tag configure) ThisTclName M [parent] unit} end self.TclName = ThisTclName end end end %% %% Images %% local %% use essentially the same resolver as for pickles %% this used to be all=.:root=$OZHOME which was completely %% bogus and could not be parametrized using env vars. I %% don't really see why we need a different resolver. ImRes = {Resolve.makeResolver image init({Resolve.pickle.getHandlers})} {ImRes.addHandler front({Resolve.handler.root '.'})} PathStore = {New class $ prop final locking attr ps:nil meth init ps <- nil end meth add(P) lock ps <- P|@ps end end meth get($) lock @ps end end end init} in fun {TkLocalize Res Url} case {Res.localize Url} of old(F) then F [] new(F) then {PathStore add(F)} F end end fun {TkFixedLocalize Url} {TkLocalize ImRes Url} end class TkImage from ReturnClass feat !TclName meth tkInit(type:Type resolver:Resolver<=!ImRes ...) = Message ThisTclName = self.TclName if {IsDet ThisTclName} then {Exception.raiseError tk(alreadyInitialized self Message)} end NewTkName = {GenImageName} MessUrl = if {HasFeature Message url} then {AdjoinAt Message file {TkLocalize Resolver Message.url}} else Message end MessAll = if {HasFeature MessUrl maskurl} then {AdjoinAt MessUrl maskfile {TkLocalize Resolver MessUrl.maskurl}} else MessUrl end in {TkSendFilter v('image create '#Type) NewTkName MessAll [maskurl type url] unit} ThisTclName = NewTkName end meth tk(...) = M {TkSendTuple self M} end meth !TkReturnMethod(M Cast) {TkReturnMess image M self Cast} end meth tkClose skip end end end %% %% Fonts %% class TkFont from ReturnClass feat !TclName meth tkInit(...) = Message ThisTclName = self.TclName if {IsDet ThisTclName} then {Exception.raiseError tk(alreadyInitialized self Message)} end NewTkName = {GenFontName} in {TkSendFilter v('font create') NewTkName Message nil unit} ThisTclName = NewTkName end meth tk(...) = M {TkSendTagTuple font self M} end meth !TkReturnMethod(M Cast) {TkReturnMess font M self Cast} end meth tkClose {TkSend o('font delete' self)} end end proc {AddYScrollbar T S} {TkBatch [o(T configure yscrollcommand: s(S set)) o(S configure command: s(T yview))]} end proc {AddXScrollbar T S} {TkBatch [o(T configure xscrollcommand: s(S set)) o(S configure command: s(T xview))]} end IsColor = thread {TkReturnInt winfo(depth '.')}>1 end fun {DefineUserCmd TclCmd Action Args} Casts = {GetCasts Args} ActionId = {ActionIdServer get($)} in {Dictionary.put TkDict ActionId case Action of O#M then O#M#Casts else Action#Casts end} {TkSend v('proc '#TclCmd#' args {\n' # ' eval ozp '#ActionId#' '#'$args\n' # '}')} proc {$} {TkSend v('rename '#TclCmd#' ""')} {Dictionary.remove TkDict ActionId} end end %% %% Define additional options %% \insert 'TkOptions.oz' fun {NewWidgetClass Mode Name} From = case Mode of widget then Widget [] command then CommandWidget [] noCommand then NoCommandWidget end in class $ from From feat !TkClass:Name end end end mozart-1.4.0.20080704/share/lib/wp/TkOptions.oz0000664000000000000000000000642410022342247017237 0ustar rootroot%%% %%% Author: %%% Benjamin Lorenz %%% %%% Copyright: %%% Benjamin Lorenz, 1998 %%% %%% Last change: %%% $Date: 2004-03-06 13:31:35 +0100 (Sat, 06 Mar 2004) $ by $Author: duchier $ %%% $Revision: 15794 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL WARRANTIES. %%% local BorderWidth = 1 BorderOptionsList = ['*OzTools*Label*borderWidth' '*OzTools*Button*borderWidth' '*OzTools*Checkbutton*borderWidth' '*OzTools*Radiobutton*borderWidth' '*OzTools*Menubutton*borderWidth' '*OzTools*Menu*borderWidth' '*OzTools*Entry*borderWidth' '*OzTools*Text*borderWidth' '*OzTools*Scrollbar*borderWidth' '*OzTools*Scale*borderWidth' '*OzTools*Listbox*borderWidth' '*OzTools*Button*highlightThickness' '*OzTools*Checkbutton*highlightThickness' '*OzTools*Radiobutton*highlightThickness' '*OzTools*Menubutton*highlightThickness' '*OzTools*Entry*highlightThickness' '*OzTools*Text*highlightThickness' '*OzTools*Canvas*highlightThickness' '*OzTools*Scrollbar*highlightThickness' '*OzTools*Scale*highlightThickness' '*OzTools*Listbox*highlightThickness' '*OzTools*activeBorderWidth' '*OzTools*selectBorderWidth' '*OzTools*MenuFrame*borderWidth' '*TkFDialog*borderWidth' '*TkFDialog*activeBorderWidth' '*TkFDialog*selectBorderWidth'] in {TkBatch {Map BorderOptionsList fun {$ Pattern} option(add Pattern BorderWidth widgetDefault) end}} end local BooleanOptionsList = [ '*OzTools*Menu*tearOff' # false ] in {TkBatch {Map BooleanOptionsList fun {$ Option} Pattern # Value = Option in option(add Pattern Value widgetDefault) end}} end local Select = if IsColor then 2 else 3 end ColorOptionsList = [ '*OzTools*NumberEntry*Entry*background' # wheat # white ] in {TkBatch {Map ColorOptionsList fun {$ Option} Pattern = Option.1 Value = Option.Select in option(add Pattern Value widgetDefault) end}} end class OptionsManager attr Resources Window meth tkInit(Res Class<='OzTools') Resources <- Res Window <- {New TkToplevel tkInit(withdraw: true 'class': Class)} end meth get(Name $) Return # Class # Default = @Resources.Name in case {case Return of return then TkReturnString [] returnAtom then TkReturnAtom [] returnInt then TkReturnInt end option(get @Window Name Class)} of nil then Default [] false then Default elseof Value then Value end end end %% change some class bindings {TkBatch [bind('Checkbutton' '' '') bind('Radiobutton' '' '') bind('Entry' '' '%W delete 0 end')]} %% Read user's config file local File = local UserHome = {OS.getEnv 'HOME'} in if UserHome \= false then F = {Property.get 'oz.dotoz'} # '/wishrc' in try {OS.stat F _} F catch system(...) then unit end else unit end end in if File \= unit then {TkSend option(readfile File widgetDefault)} end end mozart-1.4.0.20080704/share/lib/wp/Tix.oz0000664000000000000000000001000107141547102016040 0ustar rootroot%%% %%% Authors: %%% Martin Homik %%% %%% Copyright: %%% Martin Homik, 2000 %%% %%% Last change: %%% $Date: 2000-08-01 15:18:58 +0200 (Tue, 01 Aug 2000) $ by $Author: schulte $ %%% $Revision: 12978 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Tk(send:Send newWidgetClass:NWC) export balloon: TixBalloon btnBox: TixBtnBox cObjView: TixCObjView chkList: TixChkList comboBox: TixComboBox control: TixControl dialogS: TixDialogS dirBox: TixDirBox dirDlg: TixDirDlg dirList: TixDirList dirTree: TixDirTree dragDrop: TixDragDrop dtlList: TixDtlList eFileBox: TixEFileBox eFileDlg: TixEFileDlg fileBox: TixFileBox fileCbx: TixFileCbx fileDlg: TixFileDlg fileEnt: TixFileEnt floatEnt: TixFloatEnt iconView: TixIconView labEntry: TixLabEntry labFrame: TixLabFrame listNBk: TixListNBk meter: TixMeter multView: TixMultView noteBook: TixNoteBook optMenu: TixOptMenu panedWin: TixPanedWin popMenu: TixPopMenu primitiv: TixPrimitiv resizeH: TixResizeH sGrid: TixSGrid sHList: TixSHList sListBox: TixSListBox sTList: TixSTList sText: TixSText sWidget: TixSWidget sWindow: TixSWindow select: TixSelect shell: TixShell simpDlg: TixSimpDlg stackWin: TixStackWin statBar: TixStatBar stdBBox: TixStdBBox stdShell: TixStdShell tix: TixTix tree: TixTree vResize: TixVResize vStack: TixVStack vTree: TixVTree define {Send package('require' 'Tix')} TixBalloon = {NWC noCommand tixBalloon} TixBtnBox = {NWC noCommand tixBtnBox} TixCObjView = {NWC noCommand tixCObjView} TixChkList = {NWC noCommand tixChkList} TixComboBox = {NWC command tixComboBox} TixControl = {NWC command tixControl} TixDialogS = {NWC noCommand tixDialogS} TixDirBox = {NWC command tixDirBox} TixDirDlg = {NWC command tixDirDlg} TixDirList = {NWC command tixDirList} TixDirTree = {NWC command tixDirTree} TixDragDrop = {NWC command tixDragDrop} TixDtlList = {NWC noCommand tixDtlList} TixEFileBox = {NWC command tixEFileBox} TixEFileDlg = {NWC command tixEFileDlg} TixFileBox = {NWC command tixFileBox} TixFileCbx = {NWC command tixFileCbx} TixFileDlg = {NWC command tixFileDlg} TixFileEnt = {NWC command tixFileEnt} TixFloatEnt = {NWC command tixFloatEnt} TixIconView = {NWC noCommand tixIconView} TixLabEntry = {NWC noCommand tixLabEntry} TixLabFrame = {NWC noCommand tixLabFrame} TixListNBk = {NWC noCommand tixListNBk} TixMeter = {NWC noCommand tixMeter} TixMultView = {NWC command tixMultView} TixNoteBook = {NWC noCommand tixNoteBook} TixOptMenu = {NWC command tixOptMenu} TixPanedWin = {NWC command tixPanedWin} TixPopMenu = {NWC noCommand tixPopMenu} TixPrimitiv = {NWC noCommand tixPrimitiv} TixResizeH = {NWC command tixResizeH} TixSGrid = {NWC noCommand tixSGrid} TixSHList = {NWC noCommand tixSHList} TixSListBox = {NWC command tixSListBox} TixSTList = {NWC noCommand tixSTList} TixSText = {NWC noCommand tixSText} TixSWidget = {NWC noCommand tixSWidget} TixSWindow = {NWC noCommand tixSWindow} TixSelect = {NWC command tixSelect} TixShell = {NWC noCommand tixShell} TixSimpDlg = {NWC noCommand tixSimpDlg} TixStackWin = {NWC noCommand tixStackWin} TixStatBar = {NWC noCommand tixStatBar} TixStdBBox = {NWC noCommand tixStdBBox} TixStdShell = {NWC noCommand tixStdShell} TixTix = {NWC noCommand tixTix} TixTree = {NWC noCommand tixTree} TixVResize = {NWC noCommand tixVResize} TixVStack = {NWC noCommand tixVStack} TixVTree = {NWC noCommand tixVTree} end mozart-1.4.0.20080704/share/lib/wp/TkTools.oz0000664000000000000000000010533007242517213016707 0ustar rootroot%%% %%% Author: %%% Christian Schulte %%% %%% Contributor: %%% Martin Homik %%% Benjamin Lorenz %%% %%% Copyright: %%% Christian Schulte, 1997 %%% Martin Homik, 2001 %%% %%% Last change: %%% $Date: 2001-02-14 16:04:43 +0100 (Wed, 14 Feb 2001) $ by $Author: schulte $ %%% $Revision: 13631 $ %%% %%% This file is part of Mozart, an implementation of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL WARRANTIES. %%% functor require DefaultURL(homeUrl) URL(make resolve toAtom) prepare ImageDir = {URL.toAtom {URL.resolve DefaultURL.homeUrl {URL.make 'images/'}}} import Tk export error: Error dialog: Dialog menubar: MakeMenu popupmenu: PopupMenu textframe: Textframe notebook: Notebook note: Note scale: DiscreteScale numberentry: NumberEntry images: LoadImages resolveImages: NewLoadImages define DefaultFont = local T = {New Tk.toplevel tkInit(withdraw:true 'class':'OzTools')} L = {New Tk.label tkInit(parent:T)} F = {L tkReturnAtom(cget(font:unit) $)} in {T tkClose} F end local FontDict = {Dictionary.new} FontLock = {Lock.new} in fun {GetFontHeight F} if {IsObject F} then {F tkReturnInt(metrics linespace:unit $)} else lock FontLock then AF = if {IsAtom F} then F else {String.toAtom {VirtualString.toString F}} end in if {Dictionary.member FontDict AF} then skip else {Dictionary.put FontDict AF {Tk.returnInt font(metrics AF linespace:unit)}} end {Dictionary.get FontDict AF} end end end end Border = 1 BigBorder = 2 Pad = 2 BigPad = 4 NoArg = {NewName} EntryColor = if Tk.isColor then wheat else white end class Dialog from Tk.frame prop locking attr PackList:nil feat toplevel tkClosed meth tkInit(title: Title master: Master <= NoArg root: Root <= master buttons: Buttons pack: Pack <= true focus: Focus <= 0 bg: Background <= NoArg default: Return <= 0 delete: Delete <= NoArg) lock GeoX GeoY GeoXOffset GeoYOffset if Master\=NoArg then case Root of master then GeoX = {Tk.returnInt winfo(rootx Master)} GeoY = {Tk.returnInt winfo(rooty Master)} GeoXOffset = 0 GeoYOffset = 40 [] master # XOff # YOff then GeoX = {Tk.returnInt winfo(rootx Master)} GeoY = {Tk.returnInt winfo(rooty Master)} GeoXOffset = XOff GeoYOffset = YOff [] pointer then GeoX = {Tk.returnInt winfo(pointerx '.')} GeoY = {Tk.returnInt winfo(pointery '.')} GeoXOffset = ~7 GeoYOffset = ~7 [] X # Y then GeoX = X GeoY = Y GeoXOffset = 0 GeoYOffset = 0 end end Toplevel = {New Tk.toplevel if Master==NoArg then if Delete==NoArg then tkInit(title:Title withdraw:true) else tkInit(title:Title withdraw:true delete:Delete) end else if Delete==NoArg then tkInit(parent: Master title: Title withdraw: true) else tkInit(parent: Master title: Title withdraw: true delete: Delete) end end} {Toplevel tkWM(transient if Master==NoArg then v('') else Master end)} Top = {New Tk.frame tkInit(parent: Toplevel bd: Border relief: raised highlightthickness: 0)} if Background == NoArg then Tk.frame,tkInit(parent: Top bd: BigBorder highlightthickness: 0) else Tk.frame,tkInit(parent: Top bd: BigBorder bg: Background highlightthickness: 0) end Bottom = {New Tk.frame tkInit(parent: Toplevel bd: Border relief: raised highlightthickness: 0)} ReturnButton ReturnAction FocusButton TkButtons = {List.mapInd Buttons fun {$ Ind Text#Action} ButtonAction = case Action of tkClose(Do) then proc {$} {Tk.invoke Do nil 0 false} {self tkClose} end [] tkClose then self # tkClose else Action end Button = {New Tk.button tkInit(parent: Bottom relief: raised default: if Ind==Return then active else normal end text: Text action: ButtonAction)} in if Ind==Focus then FocusButton = Button end if Ind==Return then ReturnAction = ButtonAction ReturnButton = Button end Button end} in if Focus>0 then PackList <- [focus(FocusButton)] end PackList <- (wm(resizable Toplevel 0 0) | if Master\=NoArg andthen {IsInt GeoX} andthen {IsInt GeoY} then wm(geometry Toplevel '+' # GeoX+GeoXOffset # '+' # GeoY+GeoYOffset) | update(idletasks) | wm(deiconify Toplevel) | @PackList else update(idletasks) | wm(deiconify Toplevel) | @PackList end) PackList <- (pack(b(TkButtons) padx:BigPad pady:Pad side:left expand:1) | pack(Bottom side:bottom fill:both) | pack(Top side:top fill:both) | pack(self side:top fill:both) | @PackList) if Return>0 then {Toplevel tkBind(event: '' action: ReturnAction)} PackList <- pack(ReturnButton) | @PackList end self.toplevel = Toplevel if Pack then Dialog,tkPack end end end meth tkPack lock {Tk.batch @PackList} PackList <- nil end end meth tkClose lock {self.toplevel tkClose} self.tkClosed = unit end end end class Error from Dialog meth tkInit(title: Title <= 'Error' master: Master <= NoArg aspect: Aspect <= 250 text: Text) lock Dialog,tkInit(title: Title master: Master buttons: ['Okay'#tkClose] focus: 1 pack: false default: 1) Bitmap = {New Tk.label tkInit(parent: self bitmap: error)} Message = {New Tk.message tkInit(parent: self aspect: Aspect text: Text)} in {Tk.send pack(Bitmap Message side:left expand:1 padx:BigPad pady:BigPad)} Dialog,tkPack end end end local BarRelief = raised AccSpace = '' AccCtrl = 'C-' AccAlt = 'A-' AccMeta = 'M-' fun {MakeClass C Fs} case Fs of nil then C else {Class.new [C] 'attr' {List.toTuple 'feat' Fs} [final]} end end fun {GetFeatures Ms} case Ms of nil then nil [] M|Mr then if {HasFeature M feature} then M.feature|{GetFeatures Mr} else {GetFeatures Mr} end end end local local fun {DoMakeEvent R} case R of ctrl(S) then 'Control-' # {DoMakeEvent S} [] alt(S) then 'Alt-' # {DoMakeEvent S} [] meta(S) then 'Meta-' # {DoMakeEvent S} else R end end in fun {MakeEvent R} '<' # {DoMakeEvent R} # '>' end end in proc {MakeKey M Menu Item KeyBinder} if {HasFeature M key} then B={HasFeature M event} E={MakeEvent M.key} in {Tk.send bind(KeyBinder if B then M.event else E end v('{') Menu invoke Item v('}'))} end end end local fun {MakeAcc R} case R of ctrl(S) then AccCtrl # {MakeAcc S} [] alt(S) then AccAlt # {MakeAcc S} [] meta(S) then AccMeta # {MakeAcc S} [] less then '<' [] greater then '>' else R end end proc {ProcessMessage As M ?AMs} case As of nil then AMs=nil [] A|Ar then AMr in AMs = case A of key then acc#(AccSpace#{MakeAcc M.key})|AMr [] event then AMr [] feature then AMr [] menu then AMr else A#M.A|AMr end {ProcessMessage Ar M AMr} end end in fun {MakeMessage M P} {AdjoinList tkInit parent#P|{ProcessMessage {Arity M} M}} end end proc {MakeItems Ms Item Menu KeyBinder} case Ms of nil then skip [] M|Mr then HasMenu = {HasFeature M menu} BaseCl = Tk.menuentry.{Label M} UseCl = if HasMenu then FS={GetFeatures M.menu} in {MakeClass BaseCl menu|FS} else BaseCl end M1 = {MakeMessage M Menu} NewItem = {New UseCl M1} in {MakeKey M Menu NewItem KeyBinder} if HasMenu then NewMenu = {New Tk.menu tkInit(parent:Menu)} in NewItem.menu = NewMenu {MakeItems M.menu NewItem NewMenu KeyBinder} {NewItem tk(entryconf menu:NewMenu)} end if {HasFeature M feature} then Item.(M.feature)=NewItem end {MakeItems Mr Item Menu KeyBinder} end end fun {MakeButtons Ms Bar KeyBinder} case Ms of nil then nil [] M|Mr then MenuButton = {New {MakeClass Tk.menubutton menu|{GetFeatures M.menu}} {MakeMessage M Bar}} Menu = {New Tk.menu tkInit(parent:MenuButton)} in {MakeItems M.menu MenuButton Menu KeyBinder} {MenuButton tk(conf menu:Menu)} if {HasFeature M feature} then Bar.(M.feature)=MenuButton end MenuButton.menu = Menu MenuButton | {MakeButtons Mr Bar KeyBinder} end end in fun {MakeMenu Parent KeyBinder L R} MenuBar = {New {MakeClass Tk.frame {Append {GetFeatures L} {GetFeatures R}}} tkInit(parent: Parent 'class': 'MenuFrame' relief: BarRelief)} LeftButtons = {MakeButtons L MenuBar KeyBinder} RightButtons = {MakeButtons R MenuBar KeyBinder} in case {Append case LeftButtons of nil then nil else [pack(b(LeftButtons) side:left fill:x)] end case RightButtons of nil then nil else [pack(b(RightButtons) side:right fill:x)] end} of nil then skip elseof Tcls then {Tk.batch Tcls} end MenuBar end end %% Used for 3D effects DarkerColorBy = 60 BrighterColorBy = 140 SameColorBy = 100 TclDarkenBg = if Tk.isColor then fun {$ T P} l(tkDarken l(lindex l(T conf '-bg') 4) P) end else fun {$ _ P} if P>=100 then white else black end end end local RidgeBorder = 2 TextIndent = 20 in class Textframe from Tk.frame feat inner meth tkInit(parent: Parent 'class': ThisClass <= unit text: Text font: Font <= DefaultFont) if ThisClass == unit then Tk.frame,tkInit(parent: Parent highlightthickness: 0) else Tk.frame,tkInit(parent: Parent 'class': ThisClass highlightthickness: 0) end Upper = {New Tk.frame tkInit(parent: self height: {GetFontHeight Font} div 2+1)} Inner = {New Tk.frame tkInit(parent: self bd: RidgeBorder relief: ridge)} Lower = {New Tk.frame tkInit(parent: Inner height: {GetFontHeight Font} div 2+2)} Real = {New Tk.frame tkInit(parent: Inner)} Label = {New Tk.label tkInit(parent: self text: Text font: Font)} in self.inner = Real {Tk.batch [pack(Lower fill:x) pack(Real fill:both expand:true) pack(Upper fill:both) pack(Inner fill:both expand:true) place(Label x:TextIndent y:0)]} end end end local Home = ~10000 FreeMarkX = 0 NotebookFrameWidth = 2 NotebookOffset = 1 NotebookDelta = NotebookFrameWidth + NotebookOffset MarkOuterOffset = 3 MarkInnerOffset = 2 MarkFrameWidth = 2 MarkDelta = (MarkOuterOffset + MarkFrameWidth + MarkInnerOffset) MarkEdgeWidth = 2 NoteBorderTag = {NewName} % horizontal part of 3D-border MarkBorderTag = {NewName} % mark part of 3D-border HighlightTag = {NewName} % highlightframe TextTag = {NewName} % text MarkFont = {NewName} EventTag = {NewName} % both text and highlightframe NoteTag = {NewName} % note widget TextWidth = {NewName} % text width HorGlue = {NewName} VerGlue = {NewName} Reconfigure = {NewName} % Message send from note to book Store = {NewName} % Gemoentry information for note proc {GetBoundingBox Ns W H ?MW ?MH} case Ns of nil then MW=W MH=H [] N|Nr then NW NH in {N.Store get(?NW ?NH)} {GetBoundingBox Nr {Max W NW} {Max H NH} ?MW ?MH} end end in class Notebook from Tk.canvas prop locking feat TextHeight !MarkFont StaticTag attr Width: 0 Height: 0 NextX: FreeMarkX TopNote: unit Notes: nil meth tkInit(parent: Parent font: Font <= DefaultFont) lock Tk.canvas,tkInit(parent: Parent highlightthickness: 0) FontHeight = {GetFontHeight DefaultFont} MarkHeight = FontHeight + 2 * MarkDelta in Notebook,tk(configure yscrollincrement: 1 xscrollincrement: 1) Notebook,tk(yview scroll ~MarkHeight-2 units) Notebook,tk(xview scroll ~2 units) self.TextHeight = FontHeight self.MarkFont = Font self.StaticTag = {New Tk.canvasTag tkInit(parent:self)} end end meth ResizeStaticFrame(IntWidth IntHeight) lock ExtWidth = IntWidth + 2 * NotebookDelta MarkHeight = self.TextHeight + 2 * MarkDelta ExtHeight = IntHeight + 2 * NotebookDelta Static = self.StaticTag in {Static tk(delete)} Notebook,tk(configure height: ExtHeight + MarkHeight width: ExtWidth) Notebook,tk(crea polygon 0 0 (NotebookFrameWidth - 1) 0 (NotebookFrameWidth - 1) (ExtHeight - NotebookFrameWidth) 0 (ExtHeight - 1) 0 0 fill: {TclDarkenBg self BrighterColorBy} tags: Static) Notebook,tk(crea polygon 1 (ExtHeight - 1) (NotebookFrameWidth - 1) (ExtHeight - 1 - NotebookFrameWidth) (ExtWidth - NotebookFrameWidth - 1) (ExtHeight - NotebookFrameWidth - 1) (ExtWidth - NotebookFrameWidth - 1) (NotebookFrameWidth - 1) ExtWidth-1 1 ExtWidth-1 ExtHeight-1 1 ExtHeight-1 fill: {TclDarkenBg self DarkerColorBy} tags: Static) Width <- IntWidth Height <- IntHeight end end meth DrawNote(DoMark NotActive Note X W $) ThisNoteBorderTag = Note.NoteBorderTag ThisMarkBorderTag = Note.MarkBorderTag ThisHighlightTag = Note.HighlightTag ThisTextTag = Note.TextTag ThisEventTag = Note.EventTag ThisTextWidth = Note.TextWidth TotalMarkHeight = 2 * MarkDelta + self.TextHeight TotalMarkWidth = 2 * MarkDelta + ThisTextWidth %% X coordinates needed X0 = 0 X1 = X X2 = X1 + NotebookFrameWidth - 1 X3 = X2 + MarkEdgeWidth X6 = X2 + TotalMarkWidth X7 = X6 + NotebookFrameWidth - 1 X4 = X6 - MarkEdgeWidth X8 = NotebookFrameWidth + W X9 = X8 + NotebookFrameWidth - 1 %% Y coordinates needed Y0 = ~TotalMarkHeight - 1 Y1 = Y0 + NotebookFrameWidth Y2 = Y1 + MarkEdgeWidth Y3 = 0 Y4 = 0 Y5 = NotebookFrameWidth - 1 AO = if NotActive then Home else 0 end BrightColor = {TclDarkenBg self BrighterColorBy} DarkColor = {TclDarkenBg self DarkerColorBy} SameColor = {TclDarkenBg self SameColorBy} in {ThisNoteBorderTag tk(delete)} %% Draw note frame if X\=0 then Notebook,tk(crea polygon AO+X0 AO+Y4 AO+X2 AO+Y4 AO+X2 AO+Y5 AO+X0 AO+Y5 AO+X0 AO+Y4 fill: BrightColor tags: ThisNoteBorderTag) end Notebook,tk(crea polygon AO+X6 AO+Y4 AO+X7 AO+Y4 AO+X6 AO+Y5 AO+X6 AO+Y4 fill: DarkColor tags: ThisNoteBorderTag) Notebook,tk(crea polygon AO+X6 AO+Y5 AO+X8 AO+Y5 AO+X9 AO+Y4 AO+X7 AO+Y4 AO+X6 AO+Y5 fill: BrightColor tags: ThisNoteBorderTag) if DoMark then %% Make text visible {ThisTextTag tk(coords X+MarkDelta+NotebookFrameWidth 2-MarkDelta)} %% Draw mark frame Notebook,tk(crea polygon X1 Y3 X1 Y2 X3 Y0 X4 Y0 X4 Y1 X3 Y1 X2 Y2 X2 Y3 X1 Y3 fill: BrightColor tags: ThisMarkBorderTag) Notebook,tk(crea polygon X6 Y3 X7 Y3 X7 Y2 X4 Y0 X4 Y1 X6 Y2 X6 Y3 fill: DarkColor tags: ThisMarkBorderTag) %% Draw frame around text Notebook,tk(crea rectangle X2 + MarkOuterOffset MarkFrameWidth - MarkOuterOffset X6 - MarkOuterOffset Y1 + MarkOuterOffset fill: SameColor outline: if NotActive then SameColor else black end width: MarkFrameWidth tags: q(ThisHighlightTag ThisEventTag)) Notebook,tk('raise' ThisTextTag ThisHighlightTag) {ThisEventTag tkBind(event: '<1>' action: self # toTop(Note))} end %% The next X coordinate X7 + 1 end meth add(Note) lock NotFirstNote = {IsObject @TopNote} OldX = @NextX NewX = Notebook,DrawNote(true NotFirstNote Note OldX @Width $) in NextX <- NewX if NotFirstNote then skip else {Note.NoteTag tk(move ~Home ~Home)} TopNote <- Note end {Note.Store add(OldX NewX-OldX)} Notes <- Note|@Notes end end meth remove(Note) lock W in Notes <- {List.subtract @Notes Note} {Note.Store remove(_ ?W)} if @TopNote==Note then case @Notes of nil then TopNote <- unit elseof N|_ then TopNote <- N Notebook,UnhideNote(N) end end {Note.HighlightTag tk(dtag Note.EventTag)} {Note.NoteBorderTag tk(delete)} {Note.MarkBorderTag tk(delete)} {Note.HighlightTag tk(delete)} {Note.NoteTag tk(coords Home + NotebookDelta - 1 Home + NotebookDelta - 1)} {Note.TextTag tk(coords Home Home)} NextX <- @NextX - W end end meth HideNote(Note) {Note.NoteTag tk(move Home Home)} {Note.NoteBorderTag tk(move Home Home)} {Note.HighlightTag tk(itemconf outline:{TclDarkenBg self SameColorBy})} end meth UnhideNote(Note) {Note.NoteTag tk(move ~Home ~Home)} {Note.NoteBorderTag tk(move ~Home ~Home)} {Note.HighlightTag tk(itemconf outline:black)} end meth toTop(Note) lock Top = @TopNote in if Note\=Top then Notebook,HideNote(Top) Notebook,UnhideNote(Note) TopNote <- Note end {Note toTop} end end meth ReconfigureWidth(Ns W) case Ns of nil then skip [] N|Nr then Notebook,DrawNote(false N\=@TopNote N {N.Store getMarkX($)} W _) Notebook,ReconfigureWidth(Nr W) end end meth !Reconfigure lock CurNotes = @Notes MW MH in {GetBoundingBox CurNotes 0 0 ?MW ?MH} if MW\=@Width then Notebook,ReconfigureWidth(CurNotes MW) end {ForAll CurNotes proc {$ N} {N.VerGlue tk(conf width:MW)} {N.HorGlue tk(conf height:MH)} end} Notebook,ResizeStaticFrame(MW MH) end end meth getTop($) lock @TopNote end end end class NoteStore prop final feat Book attr MarkWidth:0 MarkX:0 Width:0 Height:0 IsAdded:false meth init(B) self.Book = B end meth add(X W) IsAdded <- true MarkX <- X MarkWidth <- W end meth remove(?X ?W) IsAdded <- false X = @MarkX W = @MarkWidth end meth get(?W ?H) W=@Width H=@Height end meth getMarkX($) @MarkX end meth configure(W H) if W\=@Width orelse H\=@Height then Width <- W Height <- H if @IsAdded then {self.Book Reconfigure} end end end end class Note from Tk.frame prop locking feat !NoteBorderTag % horizontal part of 3D-border !MarkBorderTag % mark part of 3D-border !HighlightTag % highlightframe !TextTag % text !EventTag % both text and highlightframe !NoteTag % note widget !TextWidth % width of text !VerGlue % vertical glue to fill page !HorGlue % horizontal glue to fill page !Store % Store of dimension meth tkInit(parent:Parent text:Text) lock ThisTextTag = {New Tk.canvasTag tkInit(parent:Parent)} ThisEventTag = {New Tk.canvasTag tkInit(parent:Parent)} ThisNoteTag = {New Tk.canvasTag tkInit(parent:Parent)} OuterFrame = {New Tk.frame tkInit(parent:Parent highlightthickness: 0)} ThisVerGlue = {New Tk.canvas tkInit(parent:OuterFrame highlightthickness: 0 height:0 width:0)} ThisHorGlue = {New Tk.canvas tkInit(parent:OuterFrame highlightthickness: 0 width:0 height:0)} ThisStore = {New NoteStore init(Parent)} in {Parent tk(crea text Home Home text: Text case Parent.MarkFont of !DefaultFont then unit elseof F then o(font:F) end anchor: sw tags: q(ThisTextTag ThisEventTag))} self.TextWidth = local X1|_|X2|_ = {Parent tkReturnListInt(bbox(ThisTextTag) $)} in X2 - X1 end Tk.frame,tkInit(parent: OuterFrame highlightthickness: 0) Note,tkBind(event: '' args: [int(w) int(h)] action: ThisStore # configure) self.NoteBorderTag = {New Tk.canvasTag tkInit(parent:Parent)} self.MarkBorderTag = {New Tk.canvasTag tkInit(parent:Parent)} self.HighlightTag = {New Tk.canvasTag tkInit(parent:Parent)} self.TextTag = ThisTextTag self.EventTag = ThisEventTag self.NoteTag = ThisNoteTag self.VerGlue = ThisVerGlue self.HorGlue = ThisHorGlue self.Store = ThisStore {Parent tk(crea window Home + NotebookDelta - 1 Home + NotebookDelta - 1 anchor: nw tags: ThisNoteTag window: OuterFrame)} {Tk.batch [grid(ThisVerGlue column:1 row:0) grid(ThisHorGlue column:0 row:1) grid(self column:1 row:1 sticky:new)]} end end meth toTop skip end end end local proc {Select Url ?Base ?Ext} S={Reverse {VirtualString.toString Url}} R in Ext = {String.toAtom {Reverse {String.token S &. $ ?R}}} Base = {String.toAtom {Reverse {String.token R &/ $ _}}} end fun {MkImg Url} Ext Base in {Select Url Base Ext} Base # if Ext==xbm then {New Tk.image tkInit(type:bitmap url:Url)} else {New Tk.image tkInit(type:photo format:Ext url:Url)} end end fun {NewMkImg Res} fun {$ Url} Ext Base in {Select Url Base Ext} Base # if Ext==xbm then {New Tk.image tkInit(type:bitmap resolver:Res url:Url)} else {New Tk.image tkInit(type:photo format:Ext resolver:Res url:Url)} end end end in fun {LoadImages Vs} {List.toRecord images {Map Vs MkImg}} end fun {NewLoadImages Res} ResMkImg = {NewMkImg Res} in fun {$ Vs} {List.toRecord images {Map Vs ResMkImg}} end end end local IncStep = 10 IncTime = 100 IncWait = 500 Border = 1 Images = {LoadImages [ImageDir#'mini-inc.xbm' ImageDir#'mini-dec.xbm']} fun {CoerceAdd X Y} FX={IsFloat X} FY={IsFloat Y} in if FX==FY then X+Y elseif FX then X + {IntToFloat Y} else Y + {IntToFloat X} end end proc {DummyAction _} skip end in class NumberEntry from Tk.frame prop locking feat entry inc dec MinVal MaxVal Parent ReturnAction attr Val:0 TimeStamp:0 Increment:1 Action:unit meth tkInit(parent: P min: Min <= unit max: Max <= unit val: N <= Min font: Font <= DefaultFont width: W <= 6 action: A <= DummyAction returnaction: RetA <= unit) Tk.frame, tkInit(parent:P highlightthickness:Border 'class':'NumberEntry' bd:Border relief:sunken) Entry = {New Tk.entry tkInit(if Font==DefaultFont then unit else o(font:Font) end parent: self width: W highlightthickness: 0 bd: 0)} IncButton = {New Tk.button tkInit(parent: self takefocus: false highlightthickness: 0 bd: 1 image: Images.'mini-inc')} DecButton = {New Tk.button tkInit(parent: self takefocus: false highlightthickness: 0 bd: 1 image: Images.'mini-dec')} in {Tk.batch [grid(Entry row:0 column:0 rowspan:2 sticky:ns) grid(IncButton row:0 column:1 sticky:ns) grid(DecButton row:1 column:1 sticky:ns)]} {Entry tkBind(event: '' action: self # enter)} {Entry tkBind(event: '' action: Entry # tk(selection range 0 'end'))} {Entry tkBind(event: '' action: self # enter(true))} {Entry tkBind(event: '' action: self # Inc(1))} {Entry tkBind(event: '' action: self # Inc(~1))} {Entry tkBind(event: '' action: self # Inc(10))} {Entry tkBind(event: '' action: self # Inc(~10))} {Entry tkBind(event: '' action: self # IncStop)} {Entry tkBind(event: '' action: self # IncStop)} {IncButton tkBind(event: '' action: self # Inc(1))} {DecButton tkBind(event: '' action: self # Inc(~1))} {IncButton tkBind(event: '' action: self # IncStop)} {DecButton tkBind(event: '' action: self # IncStop)} self.entry = Entry self.inc = IncButton self.dec = DecButton self.MinVal = Min self.MaxVal = Max self.Parent = P self.ReturnAction = RetA Action <- A NumberEntry, tkSet(if N==unit then 1 else N end) end meth tkAction(A <= unit) lock Action <- if A==unit then DummyAction else A end end end meth tkSet(I) lock E = self.entry in Val <- I try {E tk(delete 0 'end')} {E tk(insert 0 I)} catch system(...) %% window already closed? then skip end end end meth Update(I) lock NumberEntry, tkSet(I) {Tk.invoke @Action [I] 1 false} end end meth tkGet($) lock @Val end end meth enter(NoReturnAction<=false) lock S = {self.entry tkReturn(get $)} in if {String.isInt S} then I = {String.toInt S} NewVal = if self.MinVal \= unit andthen I < self.MinVal then self.MinVal elseif self.MaxVal \= unit andthen I > self.MaxVal then self.MaxVal else I end in NumberEntry,Update(NewVal) if NoReturnAction then skip else if self.ReturnAction == unit then {Tk.send focus(self.Parent)} else {self.ReturnAction} end end else NumberEntry,tkSet(@Val) end end end meth Inc(I) TS in lock TS = @TimeStamp TimeStamp <- TS+1 Increment <- I end NumberEntry, DoInc(TS+1 IncStep IncWait) end meth DoInc(TS S W) case lock if @TimeStamp==TS then NewS = if S==0 then Increment <- @Increment * IncStep IncStep else S-1 end NewVal = {CoerceAdd @Val @Increment} MinV = case self.MinVal of unit then NewVal elseof M then {Max NewVal M} end MaxV = case self.MaxVal of unit then MinV elseof M then {Min MinV M} end in NumberEntry, Update(MaxV) NewS else ~1 end end of ~1 then skip elseof N then {Delay W} NumberEntry, DoInc(TS N IncTime) end end meth IncStop TimeStamp <- @TimeStamp + 1 end end end local DarkColor = black BrightColor = white ValueHeight = 14 ValueBorder = 14 ScaleHeight = 8 ScaleBorder = 2 SliderWidth = 16 TickSize = 6 TitleFont = '-adobe-helvetica-bold-r-normal-*-10-*-*-*-*-*-*-*' class TickCanvas from Tk.canvas meth init(parent:P width:W ticks:N) = M TickCanvas,tkInit(parent: P width: W highlightthickness: 0 height: TickSize+1) end meth drawTicks(Xs) case Xs of nil then skip [] X|Xr then X0 = X - ScaleBorder - 2 X1 = X0 + 1 X2 = X1 + 1 X3 = X2 + 1 Y0 = 0 Y1 = Y0 + 1 Y2 = TickSize - 2 Y3 = Y2 + 1 in TickCanvas,tk(crea rectangle X0 Y0 X3 Y3 outline:BrightColor) TickCanvas,tk(crea rectangle X1 Y1 X2 Y2 outline:DarkColor) TickCanvas,drawTicks(Xr) end end end class TickScale from Tk.scale feat Ticks meth init(parent:P ticks:N width:W action: A) TickScale,tkInit(parent: P highlightthickness: 0 sliderlength: SliderWidth action: A 'from': 0 to: N length: W width: ScaleHeight resolution: 1 showvalue: false orient: horizontal) self.Ticks = N TickScale,tkBind(event: '' action: P # drawTicks) end meth getCoords($) TickScale,GetCoords(0 self.Ticks $) end meth GetCoords(I N $) if I>N then nil else {Tk.returnInt lindex(l(self coords I) 0)} | TickScale,GetCoords(I+1 N $) end end end in class DiscreteScale from Tk.frame feat Value Scale Ticks Coords Values attr CurValue: 0 meth init(parent: P width: Width values: Vs initpos: N) DiscreteScale,tkInit(parent:P highlightthickness:0) NoTicks = {Length Vs} - 1 in self.Value = {New Tk.canvas tkInit(parent: self width: Width + 2*ValueBorder height: ValueHeight)} self.Scale = {New TickScale init(parent: self width: Width action: self # Action ticks: NoTicks)} self.Ticks = {New TickCanvas init(parent: self width: Width ticks: NoTicks)} {Tk.batch [pack(self.Value self.Scale self.Ticks side:top) update(idletasks)]} self.Values = Vs {self.Scale tk(set N-1)} CurValue <- {Nth Vs N}.1 end meth Action(S) N = {Tk.string.toInt S}+1 V#L = {Nth self.Values N} X = {Nth self.Coords N} in {self.Value tk(delete all)} {self.Value tk(crea text X+ValueBorder 0 anchor:n text:L font:TitleFont)} CurValue <- V end meth drawTicks Cs = {self.Scale getCoords($)} in self.Coords = Cs thread {self.Ticks drawTicks(Cs)} end end meth get($) @CurValue end end end local local fun {DoWhere Xs Y N} X|Xr = Xs in if Y == X then N else {DoWhere Xr Y N+1} end end in fun {Where Xs Y} {DoWhere Xs Y 0} end end fun {Subtract R Fs} {FoldL Fs fun {$ A F} {Record.subtract A F} end R} end in class PopupMenu from Tk.menubutton feat Menu Action attr Current Entries Commands: nil meth tkInit(parent: P entries: E <= [empty] selected: X <= 1 font: F <= unit action: A <= proc {$ S} skip end ...)=M T#C = {Nth E X} in Tk.menubutton, {Record.adjoin {Subtract M if F == unit then [entries selected font action] else [entries selected action] end} if Tk.isColor then tkInit(text:T foreground:C activeforeground:C) else tkInit(text:T) end} Entries <- E self.Action = A self.Menu = if F == unit then {New Tk.menu tkInit(parent: P tearoff: false)} else {New Tk.menu tkInit(parent: P font: F tearoff: false)} end {ForAll E proc {$ S} case S of T#C then Cmd = {New Tk.menuentry.command tkInit(parent: self.Menu label: T foreground: C activeforeground: C action: self # Select(S))} in Commands <- {Append @Commands [T#Cmd]} end end} Tk.menubutton,tkBind(event: '<1>' action: self # Popup) Current <- T#C end meth Select(S) Current <- S case S of T#C then Tk.menubutton,tk(conf text:T foreground:C activeforeground:C) {self.Action T} end end meth Popup X = {Tk.returnInt winfo(rootx self)} XW = {Tk.returnInt winfo(reqwidth self)} Y = {Tk.returnInt winfo(rooty self)} YH = {Tk.returnInt winfo(reqheight self)} N = {Where @Entries @Current} in {Tk.send tk_popup(self.Menu X+(XW div 2) Y+(YH div 2)+1 N)} end meth getCurrent($) case @Current of T#_ then T end end meth add(S) case S of T#C then if {Not {Member S @Entries}} then Cmd = {New Tk.menuentry.command tkInit(parent: self.Menu label: T foreground: C activeforeground: C action: self # Select(S))} in Entries <- {Append @Entries [S]} Commands <- {Append @Commands [T#Cmd]} end end end meth rem(S) L1 L2 L3 in {List.partition @Commands fun {$ X#_} X==S end L1 L2} {ForAll L1 proc {$ _#Li} {Li tkClose} end} Commands <- L2 L3 = {List.filter @Entries fun {$ X#_} X\=S end} Entries <- L3 if @Entries\=nil then {self Select(@Entries.1)} end end end end end mozart-1.4.0.20080704/share/lib/wp/TkInit.oz0000664000000000000000000000361007654044217016516 0ustar rootroot%%% %%% Authors: %%% Michael Mehl (mehl@dfki.de) %%% Christian Schulte %%% %%% Copyright: %%% Michael Mehl, 1997 %%% Christian Schulte, 1997 %%% %%% Last change: %%% $Date: 2003-05-01 00:05:03 +0200 (Thu, 01 May 2003) $ by $Author: duchier $ %%% $Revision: 15472 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% % make sure ' fconfigure stdout -translation {auto lf} '# % send event to Oz % id : index into table % args: a list of args % output format: % p Id N % % ... % ' proc ozp {id args} { set len [llength $args] puts stdout "p $id $len" for {set i 0} {$i < $len} {incr i} { puts stdout "[ozq [lindex $args $i]]" } flush stdout }' # %% Sending a request for a return value ' proc ozr {v} { puts stdout "r [ozq $v]" flush stdout }' # %% quote arguments: %% \\ -> \\\\ %% newline -> \\n ' proc ozq {in} { regsub -all \\\\\\\\ $in \\\\\\\\\\\\\\\\ out regsub -all \\n $out \\\\n final return $final } ' # ' proc ozm {item menu} { return [expr $item + [$menu cget -tearoff]] } ' # ' proc bgerror err { puts stderr "w $err\\n." } ' # %% tkDarken was removed from native Tcl/Tk ' proc tkDarken {color percent} { foreach {red green blue} [winfo rgb . $color] { set red [expr {($red/256)*$percent/100}] set green [expr {($green/256)*$percent/100}] set blue [expr {($blue/256)*$percent/100}] break } if {$red > 255} { set red 255 } if {$green > 255} { set green 255 } if {$blue > 255} { set blue 255 } return [format "#%02x%02x%02x" $red $green $blue] } ' mozart-1.4.0.20080704/share/lib/ap/0000775000000000000000000000000011033101631014670 5ustar rootrootmozart-1.4.0.20080704/share/lib/ap/Custom.oz0000664000000000000000000000157506666004431016544 0ustar rootroot%%% %%% Authors: %%% Denys Duchier %%% %%% Copyright: %%% Denys Duchier, 1998 %%% %%% Last change: %%% $Date: 1999-02-27 16:02:49 +0100 (Sat, 27 Feb 1999) $ by $Author: schulte $ %%% $Revision: 10845 $ %%% %%% This file is part of Mozart, an implementation of Oz 3: %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import CustomGroup(register) CustomOption(register get) CustomEdit(editOption) export Register Get EditOption define proc {Register What} case {Label What} of group then {CustomGroup.register What} [] option then {CustomOption.register What} end end Get = CustomOption.get EditOption = CustomEdit.editOption end mozart-1.4.0.20080704/share/lib/ap/NOTES0000664000000000000000000001313406623006036015521 0ustar rootroot-*-outline-*- Design notes for the customization facility * registering a new group {Custom.register group(NAME [doc:DOC] [group:GROUP] [label:LABEL])} ** NAME is a symbol identifying the group. The recommended convention is to use 'foo.bar.baz' for subgroup baz of subgroup baz of group foo. ** DOC is a virtual string documenting the group ** GROUP is either a symbol or a list of symbols denoting all the parent groups for this group ** LABEL is a virtual string to use for displaying the group name. if it is omitted, NAME is used instead. * registering a new option {Custom.register option(NAME [doc:DOC] [group:GROUP] [label:LABEL] [type:TYPE] [default:DEFAULT] [set:SET] [init:INIT])} ** TYPE is the type of the option and determines which option editor widget to invoke for modifying this option ** DEFAULT is the default value ** SET is a procedure to be called whenever the option is changed it is called with 2 args: the option name and new value *** if the option corresponds to a property, SET would set it ** INIT is similar to SET, but is called on the initial value maybe delay, maybe do additional work * looking up the value of an option {Custom.get +NAME ?VALUE} * exclusive access to custom module some operations may need exclusive access to the custom module. lock Custom.lock then ... end * options are initialized from the user's custom database whose pathname is given by environment variable MOZART_CUSTOM_FILE or defaults to ~/.oz/CUSTOM Thus, if you want different customizations on different machines sharing the same file system, you should set MOZART_CUSTOM_FILE appropriately on each machine. * when the user changes an option, he should choose whether the setting is for the current session only or should be saved to the custom file. For example changing an option to enable tracing should probably not be saved. * overriding user/default settings using environment variables or command line options. ** --customfile=FILE ** --custom OPTION=VALUE this option can be repeated. To support overrides, an option declaration must declare an environment variable that should be consulted. It must also specify a conversion function from string to its type. [env:VAR] [fromString:FUN] * SET and INIT are not needed, instead the custom module should publish customization events. A module can install one or more listeners that react to relevant events. To facilitate filtering, each option should be assigned to an event category: this is an arbitrary term that listeners can match on to help them recognize relevant events. [category:CAT] option(NAME [doc : DOC] [group : GROUP] [label : LABEL] [type : TYPE] [default : DEFAULT] [category : CATEGORY] [env : VAR] [fromString : FROMSTRING]) In order for a customization event to take effect, appropriate listeners need to be installed. We can do this either (1) by making groups objects that must be obtained from other modules rather than just symbols, or (2) by specifying an init procedure for a group: to be called when an option is registered with that group (but what about nested groups?). some settings have to take effect immediately, e.g. setting properties that affect the behaviour of the emulator. However, graphical settings should not causes Tk to get loaded. Or settings for the browser, should not cause it to get loaded either. ** an optional can be given a setting before it is defined this happens when loading the user's custom file * options should be registered in bundles an agent registers a collection of option defs with the custom module and gets back a stream of customization events concerning these options. {Custom.register +OPTIONS ?EVENTS} This way, each agent has its own stream. What if an option belonging to one bundle is also of interest to another agent? * one must distinguish between bundles and groups the former manage customization events and the latter partition customization options in a meaningful user-oriented fashion. bundle == custom manager an application (agent) may need options from several bundles. Like any other values, bundles are obtained through imports from other modules. It may also be interested in customization events from these bundles. We cannot register the agent itself with the bundle because the agent maybe short-lived or there may be thousands of such agents. Instead, we must opt for a event stream based architecture. bundles however live as long as the oz process. For them, it makes sense to be registered with the custom module. However, if we directly invoke an operation on a bundle, e.g. to effect the setting of an option (1) we don't need a new thread (2) but we may block for a long time, (3) we must agree apriori on how to invoke the operation. A stream-based architecture gives us more freedom and robustness. A customization `set' event might have the form: set(OPTION VALUE SYNCH) where OPTION is the option to be set, VALUE is the new value, and SYNCH is a variable that the bundle manager should bind to true when the operation has successfully completed and to false or a term describing the problem when if has failed. Thus SYNCH can be used to synchronize on completion. * kinds of customization events ** for bundle managers *** user(OPTION VALUE) *** set(OPTION VALUE SYNCH) * performing a merge of N streams may be useful when interested in events from several bundles fun {Merge Streams} L P={NewPort L} proc {Forward V} {Send P V} end in {ForAll Streams proc {$ L} thread {ForAll L Forward} end end} L end mozart-1.4.0.20080704/share/lib/ap/CustomEdit.oz0000664000000000000000000001060706666004431017346 0ustar rootroot%%% %%% Authors: %%% Denys Duchier %%% %%% Copyright: %%% Denys Duchier, 1998 %%% %%% Last change: %%% $Date: 1999-02-27 16:02:49 +0100 (Sat, 27 Feb 1999) $ by $Author: schulte $ %%% $Revision: 10845 $ %%% %%% This file is part of Mozart, an implementation of Oz 3: %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import System(show) Tk TkTools(dialog error) CustomOption(get spec set) export Editor RegisterSimpleEditor EditOption prepare Bad = {NewName} fun {Identity V} V end define class Editor from TkTools.dialog feat validate GET SET meth init(title : Title <='Customizer' validate : Validate <=Identity doc : Doc <=unit label : Label set : Set value : Value ) self.validate = Validate self.SET = Set TkTools.dialog ,tkInit(title : Title buttons: ['Apply' # (self#Apply) 'Cancel' # (self#tkClose) ]) L={New Tk.label tkInit(parent:self text:Label)} E={New Tk.entry tkInit(parent:self)} in {System.show inserting(Value)} {E tk(insert 1 Value)} {System.show inserted} self.GET = fun {$} {E tkReturn(get $)} end if Doc\=unit then {Tk.send pack({New Tk.message tkInit(parent:self text:Doc aspect:400)} side:bottom)} end {Tk.batch [pack(L side:left) pack(E side:left fill:x expand:true padx:2#m) focus(E)]} end meth Apply V = try {self.validate {self.GET $}} catch _ then Bad end in if V==Bad then {New TkTools.error tkInit(master:self text: 'illegal value') _} else {self.SET V} {self tkClose} end end end %% StringToInt = String.toInt %% local CharToLower = Char.toLower fun {ToLowerAtom S} {String.toAtom {Map S CharToLower}} end R = o('true' : true 't' : true 'yes' : true 'y' : true 'on' : true 'false' : false 'f' : false 'no' : false 'n' : false 'off' : false) in fun {StringToBool S} R.{ToLowerAtom S} end fun {BoolToString B} case B of true then "true" [] false then "false" end end end %% Editors = {Dictionary.new} %% proc {RegisterSimpleEditor Type Decode Encode} proc {SimpleEditor Option Spec Value} {New Editor init(validate : Encode value : try {Decode Value} catch _ then '' end doc : {CondSelect Spec 'doc' unit} label : {CondSelect Spec 'label' Option} set : proc {$ V} {System.show set(Option V)} {CustomOption.set Option V} end) _} end in {Dictionary.put Editors Type SimpleEditor} end %% {RegisterSimpleEditor int IntToString StringToInt} %{RegisterSimpleEditor bool BoolToString StringToBool} {RegisterSimpleEditor string Identity Identity} %% proc {EditOption Option} Spec = {CustomOption.spec Option} Val = {CustomOption.get Option} Type = {CondSelect Spec 'type' string} Edit = {Dictionary.condGet Editors Type unit} in if Edit==unit then {Exception.raiseError custom(noEditor Spec)} else {Edit Option Spec Val} end end %% class BoolEditor from TkTools.dialog feat VAR SET meth init(title : Title <='Customizer' doc : Doc <=unit label : Label set : Set value : Value ) self.VAR = {New Tk.variable tkInit(Value)} self.SET = Set TkTools.dialog ,tkInit(title : Title buttons : ['Apply' # (self#Apply) 'Cancel' # (self#tkClose) ]) C={New Tk.checkbutton tkInit(parent:self variable:self.VAR text:Label anchor:w)} in if Doc\=unit then {Tk.send pack({New Tk.message tkInit(parent:self text:Doc aspect:400)} side:bottom)} end {Tk.batch [pack(C anchor:c) focus(C)]} end meth Apply {self.SET {self.VAR tkReturnInt($)}==1} {self tkClose} end end proc {EditBool Option Spec Val} {New BoolEditor init(doc : {CondSelect Spec 'doc' unit} label : {CondSelect Spec 'label' Option} set : proc {$ V} {System.show set(Option V)} {CustomOption.set Option V} end value : Val==true) _} end {Dictionary.put Editors bool EditBool} end mozart-1.4.0.20080704/share/lib/ap/Application.oz0000664000000000000000000005043107422775145017540 0ustar rootroot%%% %%% Authors: %%% Leif Kornstaedt %%% Christian Schulte %%% %%% Copyright: %%% Leif Kornstaedt, 1998 %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 2002-01-21 12:24:21 +0100 (Mon, 21 Jan 2002) $ by $Author: kornstae $ %%% $Revision: 14738 $ %%% %%% This file is part of Mozart, an implementation of Oz 3: %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% %% %% Specification Format: %% %% Spec ::= plain %% | list([mode: Mode] Option ... Option) %% | record([mode: Mode] Option ... Option) %% Mode ::= start | anywhere % default: anywhere %% Option ::= LongOpt(['char': Char] [type: Type] %% [1: Occ] [default: value] [optional: bool]) %% | LongOpt(['char': Char] alias: Alias) %% LongOpt ::= atom %% Occ ::= single | multiple | leftmost | rightmost %% | accumulate(procedure/2) %% Type ::= 'bool' %% | PrimType %% | list(PrimType) %% PrimType ::= 'int'([min: int] [max: int]) %% | 'float'([min: float] [max: float]) %% | 'atom'([atom ... atom]) %% | 'string' %% | procedure % transformation procedure {P +S X} %% Char ::= char | [char] %% Alias ::= LongOpt % specs copied from LongOpt's spec %% | LongOpt#value | [LongOpt#value] %% %% Parsing of CGI arguments: %% %% A boolean option `opt' may be given as `opt=yes' or `opt=no'. %% Option names may be abbreviated, as long as they match a single %% Option. The `mode' and `char' specifications are ignored. %% %% Parsing of Command Lines: %% %% A boolean option `opt' may be given as `--opt' (meaning `true') or %% `--noopt' (meaning `false'). Option names (LongOpt) may be abbreviated, %% as long as they match a single Option. Single-character options may be %% combined. The argument to a single-character option may be attached to %% the option character. A single hyphen `-' is returned in the RestArgs. %% Parsing stops at a double hyphen `--' not followed by an option name; %% the double hyphen does not appear in the RestArgs. %% %% General Information: %% %% If the input does not conform to the specification, an error exception %% of the form `ap(usage VS)' is raised (VS being a virtual string describing %% the error). %% %% When using `list', the `Occ', `default' and `optional' specifications %% are ignored. An OptionList are returned: %% %% OptionList ::= [ArgOrOption] %% ArgOrOption ::= string % unparsed argument %% | LongOpt#value % parsed option %% %% When using `record', an option record OptRec is returned. If Occ %% is given, the option will appear in the option record, else in the %% OptionList, which is stored under feature 1 of the option record. %% If the `optional' feature is not given, options are optional. %% Optional options only appear in the option record if they were %% actually given on the command line. If a default is given, the %% option will always appear in the option record. %% %% OptRec ::= optRec(1: OptionList %% LongOpt: value ... LongOpt: value) %% functor import BootApplication(exit: Exit) at 'x-oz://boot/Application' OS(getEnv) Open(file) Property(get condGet) Gui(getGuiCmdArgs:GetGuiArgs) at 'x-oz://contrib/ap/OptionSheet.ozf' export Exit GetCgiArgs GetCmdArgs GetGuiArgs GetArgs PostProcess ProcessCgiString ProcessArgv prepare %% %% Closure avoidance access %% AtomToString = Atom.toString %% %% Preprocessing of CGI arguments %% local fun {HexToInt D} if {Char.isUpper D} then D-&A+10 elseif {Char.isLower D} then D-&a+10 else D-&0 end end fun {Unquote Is} case Is of nil then nil [] I|Ir then case I of &% then case Ir of D1|I1r then case I1r of D2|I2r then {HexToInt D1}*16+{HexToInt D2}|{Unquote I2r} else Ir end else Ir end [] &+ then & |{Unquote Ir} else I|{Unquote Ir} end end end in fun {CgiPreProcessArgs S} %% Takes a string, tokenizes it, and decodes characters {Map {String.tokens S &&} fun {$ S} S1 S2 in {String.token S &= ?S1 ?S2} {Unquote S1}#{Unquote S2} end} end end %% %% Preprocessing the Specification %% %% The results are of the following formats: %% %% CgiSpecs ::= [LongOpt'#CgiOption] % sorted list %% LongOpt' ::= string %% CgiOption ::= LongOpt(type: Type) %% %% LongOptSpecs ::= [LongOpt'#CmdOption] % sorted list %% CharSpecRec ::= charSpecRec(char: CmdOption ... char: CmdOption) %% CmdOption ::= LongOpt(type: CmdType) %% | LongOpt(alias: Alias') %% CmdType ::= PrimType %% | list(PrimType) %% Alias' ::= LongOpt#value | [LongOpt#value] %% %% OptRecSpec ::= optRecSpec(LongOpt: OneOptRecSpec ...) %% OneOptRecSpec ::= x(occ: Occ' default: Default) %% | x(occ: Occ' required: bool) %% Occ' ::= Occ | multilist %% local proc {AddOpt Option Chars Os Or Ls Lr} Os = {Label Option}#Option|Or Ls = case Chars of nil then Lr [] _|_ then {FoldR Chars fun {$ C In} C#Option|In end Lr} [] Char then Char#Option|Lr end end proc {BuildMaps Spec I IsCgi ?LongOptSpecs ?CharSpecs} case {CondSelect Spec I unit} of unit then LongOptSpecs = nil CharSpecs = nil [] Option then LongOpt Chars Lr Cr in LongOpt = {Label Option} Chars = {CondSelect Option char nil} case {CondSelect Option alias unit} of unit then if IsCgi then case {CondSelect Option type unit} of unit then {AddOpt LongOpt(type: bool) Chars LongOptSpecs Lr CharSpecs Cr} [] Type then {AddOpt LongOpt(type: Type) Chars LongOptSpecs Lr CharSpecs Cr} end else case {CondSelect Option type unit} of unit then {AddOpt LongOpt(alias: LongOpt#true) Chars LongOptSpecs Lr CharSpecs Cr} [] bool then Li Ci NoLongOpt in {AddOpt LongOpt(alias: LongOpt#true) Chars LongOptSpecs Li CharSpecs Ci} NoLongOpt = {String.toAtom &n|&o|{AtomToString {Label Option}}} {AddOpt NoLongOpt(alias: LongOpt#false) nil Li Lr Ci Cr} [] Type then {AddOpt LongOpt(type: Type) Chars LongOptSpecs Lr CharSpecs Cr} end end [] A then {AddOpt LongOpt(alias: A) Chars LongOptSpecs Lr CharSpecs Cr} end {BuildMaps Spec I + 1 IsCgi ?Lr ?Cr} end end fun {DerefAliases Specs SpecRec} case Specs of Spec|Specr then LongOpt in LongOpt = {CondSelect Spec.2 alias unit} if {IsAtom LongOpt} then Spec.1#SpecRec.LongOpt else Spec end| {DerefAliases Specr SpecRec} [] nil then nil end end in fun {CgiPreProcess Spec} {Record.foldRInd {List.toRecord cgiSpecRec {BuildMaps Spec 1 true $ _}} fun {$ LongOpt Spec In} {Atom.toString LongOpt}#Spec|In end nil} end proc {CmdPreProcess Spec ?LongOptSpecs ?CharSpecRec} LongOptSpecs0 CharSpecs SpecRec0 SpecRec in {BuildMaps Spec 1 false ?LongOptSpecs0 ?CharSpecs} SpecRec0 = {List.toRecord specRec LongOptSpecs0} SpecRec = {List.toRecord specRec {DerefAliases LongOptSpecs0 SpecRec0}} LongOptSpecs = {Record.foldRInd SpecRec fun {$ LongOpt Spec In} {Atom.toString LongOpt}#Spec|In end nil} CharSpecRec = {List.toRecord charSpecRec {DerefAliases CharSpecs SpecRec}} end end local fun {GetOptRecSpecSub Spec I} case {CondSelect Spec I unit} of unit then nil [] OneSpec then case {CondSelect OneSpec 1 unit} of unit then {GetOptRecSpecSub Spec I + 1} [] Occ0 then Occ X in Occ = case Occ0 of multiple then case OneSpec.type of list(_) then multilist [] list(_)#_ then multilist else multiple end else Occ0 end X = if {HasFeature OneSpec validate} then if {HasFeature OneSpec default} then x(occ : Occ validate : OneSpec.validate default : OneSpec.default) else x(occ : Occ validate : OneSpec.validate) end elseif {HasFeature OneSpec default} then x(occ : Occ default : OneSpec.default) else x(occ : Occ required : {Not {CondSelect OneSpec optional true}}) end {Label OneSpec}#X|{GetOptRecSpecSub Spec I + 1} end end end in fun {GetOptRecSpec Spec} {List.toRecord optRecSpec {GetOptRecSpecSub Spec 1}} end end %% %% Parse the Arguments into an OptionList %% %% CgiParse, used for CGI: %% Takes a list of pairs atom#string %% CmdParse, used for command lines: %% Takes a list of strings %% local fun {SignConvert S} case S of C|Cr then case C of &- then &~ else C end|{SignConvert Cr} [] nil then nil end end proc {MinMax Value Type LongOpt} case {CondSelect Type min unit} of unit then skip [] X then if Value < X then {Exception.raiseError ap(usage 'argument to option `'#LongOpt#'\' out of range')} end end case {CondSelect Type max unit} of unit then skip [] X then if Value > X then {Exception.raiseError ap(usage 'argument to option `'#LongOpt#'\' out of range')} end end end proc {CheckTokens Type I Value LongOpt} case {CondSelect Type I unit} of unit then {Exception.raiseError ap(usage 'illegal argument to option `'#LongOpt#'\'')} [] T then if Value == T then skip else {CheckTokens Type I + 1 Value LongOpt} end end end proc {StringToArgPrimType Arg LongOpt Type ?Value} if {IsProcedure Type} then Value = {Type Arg} else case {Label Type} of int then S = {SignConvert Arg} in if {String.isInt S} then Value = {String.toInt S} else {Exception.raiseError ap(usage 'option `'#LongOpt#'\' expects an integer argument')} end {MinMax Value Type LongOpt} [] float then S = {SignConvert Arg} in if {String.isFloat S} then Value = {String.toFloat S} else {Exception.raiseError ap(usage 'option `'#LongOpt#'\' expects a float argument')} end {MinMax Value Type LongOpt} [] atom then Value = {String.toAtom Arg} if {IsLiteral Type} then skip else {CheckTokens Type 1 Value LongOpt} end [] string then Value = Arg [] bool then % (only used for CGI) case Arg of "yes" then Value = true [] "no" then Value = false else {Exception.raiseError ap(usage 'option `'#LongOpt#'\' expects a boolean argument')} end end end end proc {StringToArgType Arg LongOpt Type ?Value} case Type of list(PrimType) then Value = {Map {String.tokens Arg &,} fun {$ S} {StringToArgPrimType S LongOpt PrimType} end} else {StringToArgPrimType Arg LongOpt Type ?Value} end end proc {ParseOptArg Spec Args ?Opt ?Rest} case {CondSelect Spec alias unit} of unit then case Args of Arg1|Argr then Opt = {Label Spec}#{StringToArgType Arg1 {Label Spec} Spec.type} Rest = Argr [] nil then {Exception.raiseError ap(usage 'option `'#{Label Spec}#'\' expects an argument')} end [] A then Opt = A Rest = Args end end fun {CondAppend Opt Rest} case Opt of _|_ then {Append Opt Rest} [] _#_ then Opt|Rest end end in fun {CgiParse Args Spec} CgiSpecs proc {GetOptSpec LongOpt ?Spec} Rest in Rest = {List.dropWhile CgiSpecs fun {$ ThisLongOpt#_} {Not {List.isPrefix LongOpt ThisLongOpt}} end} case Rest of S|Sr then case Sr of S2|_ then if {List.isPrefix LongOpt S2.1} andthen LongOpt \= S.1 then {Exception.raiseError ap(usage 'ambiguous option prefix `'#LongOpt#'\'')} end [] nil then skip end Spec = S.2 [] nil then {Exception.raiseError ap(usage 'unknown option `'#LongOpt#'\'')} end end in CgiSpecs = {CgiPreProcess Spec} {Map Args fun {$ LongOpt#Arg} Spec = {GetOptSpec LongOpt} in {Label Spec}#{StringToArgType Arg LongOpt Spec.type} end} end fun {CmdParse Argv Spec} Mode LongOptSpecs CharSpecRec fun {GetOptSpec OptChar} case {CondSelect CharSpecRec OptChar unit} of unit then {Exception.raiseError ap(usage 'unknown option character `'#[OptChar]#'\'')} unit [] Spec then Spec end end proc {ParseOpt OptChar Arg1r Args ?Opt ?Rest} Spec in Spec = {GetOptSpec OptChar} case Arg1r of nil then {ParseOptArg Spec Args ?Opt ?Rest} else case {CondSelect Spec alias unit} of unit then {ParseOptArg Spec Arg1r|Args ?Opt ?Rest} [] A then Opt = A Rest = (&-|Arg1r)|Args end end end proc {GetLongOptSpec Arg ?Spec ?Value} LongOpt ArgRest Rest in LongOpt = {List.takeDropWhile Arg fun {$ C} C \= &= end $ ?ArgRest} Rest = {List.dropWhile LongOptSpecs fun {$ ThisLongOpt#_} {Not {List.isPrefix LongOpt ThisLongOpt}} end} case Rest of S|Sr then case Sr of S2|_ then if {List.isPrefix LongOpt S2.1} andthen LongOpt \= S.1 then {Exception.raiseError ap(usage 'ambiguous option prefix `'#LongOpt#'\'')} end [] nil then skip end Spec = S.2 Value = case ArgRest of &=|S then S [] nil then unit end [] nil then {Exception.raiseError ap(usage 'unknown option `'#LongOpt#'\'')} end end proc {ParseLongOpt LongOpt Args ?Opt ?Rest} Spec Value NewArgs in {GetLongOptSpec LongOpt ?Spec ?Value} case Value of unit then case Args of (&-|_)|_ andthen {HasFeature Spec type} then {Exception.raiseError ap(usage 'option `'#{Label Spec}#'\' expects an argument')} else skip end NewArgs = Args else if {HasFeature Spec alias} then {Exception.raiseError ap(usage ('option `'#{Label Spec}# '\' does not expect an argument'))} end NewArgs = Value|Args end {ParseOptArg Spec NewArgs ?Opt ?Rest} end fun {ParseOptions Argv} case Argv of Arg1|Argr then case Arg1 of &-|Opt then case Opt of &-|LongOpt then case LongOpt of nil then Argr else Opt1 NewArgr in {ParseLongOpt LongOpt Argr ?Opt1 ?NewArgr} {CondAppend Opt1 {ParseOptions NewArgr}} end [] OptChar|Arg1r then Opt1 NewArgr in {ParseOpt OptChar Arg1r Argr ?Opt1 ?NewArgr} {CondAppend Opt1 {ParseOptions NewArgr}} [] nil then Arg1|{ParseOptions Argr} end elsecase Mode of start then Argv [] anywhere then Arg1|{ParseOptions Argr} end [] nil then nil end end in Mode = {CondSelect Spec mode anywhere} {CmdPreProcess Spec ?LongOptSpecs ?CharSpecRec} {ParseOptions Argv} end end %% %% Postprocess the Parsed Option List %% %% Takes an OptionList, returns an OptRec (see above). %% fun {PostProcess Options Spec} OptRecSpec Dict in OptRecSpec = {GetOptRecSpec Spec} Dict = {NewDictionary} {Dictionary.put Dict 1 {Filter Options fun {$ O} case O of LongOpt#Value then case {CondSelect OptRecSpec LongOpt unit} of unit then true [] X then case X.occ of single then if {Dictionary.member Dict LongOpt} then {Exception.raiseError ap(usage 'option `'#LongOpt#'\' may be given at most once')} end {Dictionary.put Dict LongOpt Value} [] multiple then {Dictionary.put Dict LongOpt {Append {Dictionary.condGet Dict LongOpt nil} [Value]}} [] multilist then {Dictionary.put Dict LongOpt {Append {Dictionary.condGet Dict LongOpt nil} Value}} [] leftmost then if {Dictionary.member Dict LongOpt} then skip else {Dictionary.put Dict LongOpt Value} end [] rightmost then {Dictionary.put Dict LongOpt Value} [] accumulate(P) then {P LongOpt Value} end false end else true end end}} {Record.forAllInd OptRecSpec proc {$ LongOpt X} if {HasFeature X validate} then case {Validate X.validate Dict} of true then if {Dictionary.member Dict LongOpt} then skip elseif {HasFeature X default} then {Dictionary.put Dict LongOpt X.default} else {Exception.raiseError ap(usage 'option `'#LongOpt #'\' required in this context')} end [] false then if {Dictionary.member Dict LongOpt} then {Exception.raiseError ap(usage 'option `'#LongOpt #'\' illegal in this context')} end [] optional then if {HasFeature X default} andthen {Not {Dictionary.member Dict LongOpt}} then {Dictionary.put Dict LongOpt X.default} end end elseif {Dictionary.member Dict LongOpt} then skip elseif {HasFeature X default} then {Dictionary.put Dict LongOpt X.default} elseif X.required then {Exception.raiseError ap(usage 'required option `'#LongOpt#'\' not given')} end end} {Dictionary.toRecord optRec Dict} end %% %% E ::= true | false | optional | alt(A1 ... An) %% A ::= when(C E) %% C ::= true | false %% | conj(C1 ... Cn) %% | disj(C1 ... Cn) %% | nega(C) %% |

search gmp library and header in (default: yes)" # Initialize some variables set by options. # The variables have the same names as the options, with # dashes changed to underlines. build=NONE cache_file=./config.cache exec_prefix=NONE host=NONE no_create= nonopt=NONE no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= target=NONE verbose= x_includes=NONE x_libraries=NONE bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' # Initialize some other variables. subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. ac_max_here_lines=12 ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi case "$ac_option" in -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) ac_optarg= ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case "$ac_option" in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir="$ac_optarg" ;; -build | --build | --buil | --bui | --bu) ac_prev=build ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build="$ac_optarg" ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file="$ac_optarg" ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir="$ac_optarg" ;; -disable-* | --disable-*) ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } fi ac_feature=`echo $ac_feature| sed 's/-/_/g'` eval "enable_${ac_feature}=no" ;; -enable-* | --enable-*) ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } fi ac_feature=`echo $ac_feature| sed 's/-/_/g'` case "$ac_option" in *=*) ;; *) ac_optarg=yes ;; esac eval "enable_${ac_feature}='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix="$ac_optarg" ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he) # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat << EOF Usage: configure [options] [host] Options: [defaults in brackets after descriptions] Configuration: --cache-file=FILE cache test results in FILE --help print this message --no-create do not create output files --quiet, --silent do not print \`checking...' messages --version print the version of autoconf that created configure Directory and file names: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [same as prefix] --bindir=DIR user executables in DIR [EPREFIX/bin] --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] --libexecdir=DIR program executables in DIR [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data in DIR [PREFIX/share] --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data in DIR [PREFIX/com] --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] --libdir=DIR object code libraries in DIR [EPREFIX/lib] --includedir=DIR C header files in DIR [PREFIX/include] --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] --infodir=DIR info documentation in DIR [PREFIX/info] --mandir=DIR man documentation in DIR [PREFIX/man] --srcdir=DIR find the sources in DIR [configure dir or ..] --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names EOF cat << EOF Host type: --build=BUILD configure for building on BUILD [BUILD=HOST] --host=HOST configure for HOST [guessed] --target=TARGET configure for TARGET [TARGET=HOST] Features and packages: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR EOF if test -n "$ac_help"; then echo "--enable and --with options recognized:$ac_help" fi exit 0 ;; -host | --host | --hos | --ho) ac_prev=host ;; -host=* | --host=* | --hos=* | --ho=*) host="$ac_optarg" ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir="$ac_optarg" ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir="$ac_optarg" ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir="$ac_optarg" ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir="$ac_optarg" ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir="$ac_optarg" ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir="$ac_optarg" ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir="$ac_optarg" ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix="$ac_optarg" ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix="$ac_optarg" ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix="$ac_optarg" ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name="$ac_optarg" ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir="$ac_optarg" ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir="$ac_optarg" ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site="$ac_optarg" ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir="$ac_optarg" ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir="$ac_optarg" ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target="$ac_optarg" ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers) echo "configure generated by autoconf version 2.13" exit 0 ;; -with-* | --with-*) ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } fi ac_package=`echo $ac_package| sed 's/-/_/g'` case "$ac_option" in *=*) ;; *) ac_optarg=yes ;; esac eval "with_${ac_package}='$ac_optarg'" ;; -without-* | --without-*) ac_package=`echo $ac_option|sed -e 's/-*without-//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } fi ac_package=`echo $ac_package| sed 's/-/_/g'` eval "with_${ac_package}=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes="$ac_optarg" ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries="$ac_optarg" ;; -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } ;; *) if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then echo "configure: warning: $ac_option: invalid host type" 1>&2 fi if test "x$nonopt" != xNONE; then { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } fi nonopt="$ac_option" ;; esac done if test -n "$ac_prev"; then { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } fi trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 # File descriptor usage: # 0 standard input # 1 file creation # 2 errors and warnings # 3 some systems may open it to /dev/tty # 4 used on the Kubota Titan # 6 checking for... messages and results # 5 compiler messages saved in config.log if test "$silent" = yes; then exec 6>/dev/null else exec 6>&1 fi exec 5>./config.log echo "\ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. " 1>&5 # Strip out --no-create and --no-recursion so they do not pile up. # Also quote any args containing shell metacharacters. ac_configure_args= for ac_arg do case "$ac_arg" in -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) ac_configure_args="$ac_configure_args '$ac_arg'" ;; *) ac_configure_args="$ac_configure_args $ac_arg" ;; esac done # NLS nuisances. # Only set these to C if already set. These must not be set unconditionally # because not all systems understand e.g. LANG=C (notably SCO). # Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! # Non-C LC_CTYPE values break the ctype check. if test "${LANG+set}" = set; then LANG=C; export LANG; fi if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo > confdefs.h # A filename unique to this package, relative to the directory that # configure is in, which we can look for to find out if srcdir is correct. ac_unique_file=lib # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_prog=$0 ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } else { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } fi fi srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then echo "loading site script $ac_site_file" . "$ac_site_file" fi done if test -r "$cache_file"; then echo "loading cache $cache_file" . $cache_file else echo "creating cache $cache_file" > $cache_file fi ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross ac_exeext= ac_objext=o if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then ac_n= ac_c=' ' ac_t=' ' else ac_n=-n ac_c= ac_t= fi else ac_n= ac_c='\c' ac_t= fi srcdir=`cd $srcdir && pwd` SRCDIR="$srcdir" echo $ac_n "checking for SRCTOP""... $ac_c" 1>&6 echo "configure:569: checking for SRCTOP" >&5 if eval "test \"`echo '$''{'oz_cv_path_SRCTOP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else oz_tmp_dir=$srcdir oz_tmp_ok= oz_for="OZVERSION" for oz_tmp1 in $oz_for; do for oz_tmp2 in $oz_tmp_dir \ $oz_tmp_dir/.. \ $oz_tmp_dir/../.. \ $oz_tmp_dir/../../.. \ $oz_tmp_dir/../../../.. \ $oz_tmp_dir/../../../../..; do if test -r "$oz_tmp2/$oz_tmp1"; then oz_cv_path_SRCTOP=`cd $oz_tmp2 && pwd` oz_tmp_ok=yes break fi done test -n "$oz_tmp_ok" && break done if test -z "$oz_cv_path_SRCTOP"; then { echo "configure: error: cannot find SRCTOP" 1>&2; exit 1; } fi fi echo "$ac_t""$oz_cv_path_SRCTOP" 1>&6 SRCTOP=$oz_cv_path_SRCTOP echo $ac_n "checking for BUILDTOP""... $ac_c" 1>&6 echo "configure:603: checking for BUILDTOP" >&5 if eval "test \"`echo '$''{'oz_cv_path_BUILDTOP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else oz_tmp_dir=. oz_tmp_ok= oz_for="contrib config.cache" for oz_tmp1 in $oz_for; do for oz_tmp2 in $oz_tmp_dir \ $oz_tmp_dir/.. \ $oz_tmp_dir/../.. \ $oz_tmp_dir/../../.. \ $oz_tmp_dir/../../../.. \ $oz_tmp_dir/../../../../..; do if test -r "$oz_tmp2/$oz_tmp1"; then oz_cv_path_BUILDTOP=`cd $oz_tmp2 && pwd` oz_tmp_ok=yes break fi done test -n "$oz_tmp_ok" && break done if test -z "$oz_cv_path_BUILDTOP"; then { echo "configure: error: cannot find BUILDTOP" 1>&2; exit 1; } fi fi echo "$ac_t""$oz_cv_path_BUILDTOP" 1>&6 BUILDTOP=$oz_cv_path_BUILDTOP ac_aux_dir= for ac_dir in $SRCTOP $srcdir/$SRCTOP; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break fi done if test -z "$ac_aux_dir"; then { echo "configure: error: can not find install-sh or install.sh in $SRCTOP $srcdir/$SRCTOP" 1>&2; exit 1; } fi ac_config_guess=$ac_aux_dir/config.guess ac_config_sub=$ac_aux_dir/config.sub ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. if test "$host_os" = ""; then # Make sure we can run config.sub. if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 echo "configure:662: checking host system type" >&5 host_alias=$host case "$host_alias" in NONE) case $nonopt in NONE) if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } fi ;; *) host_alias=$nonopt ;; esac ;; esac host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 fi if test -z "$oz_cv_MAKE"; then for ac_prog in gmake make do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:690: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_MAKE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$MAKE"; then ac_cv_prog_MAKE="$MAKE" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_MAKE="$ac_prog" break fi done IFS="$ac_save_ifs" fi fi MAKE="$ac_cv_prog_MAKE" if test -n "$MAKE"; then echo "$ac_t""$MAKE" 1>&6 else echo "$ac_t""no" 1>&6 fi test -n "$MAKE" && break done test -n "$MAKE" || MAKE="NONE" if test "$MAKE" = NONE; then oz_tmp_ok=no else if oz_tmp=`$MAKE -n --version 2>/dev/null` && \ oz_tmp=`expr "$oz_tmp" : GNU`; then GNU_MAKE=yes else GNU_MAKE=no fi if test "$GNU_MAKE" = no; then oz_tmp_ok=no echo "configure: warning: $MAKE is not GNU make" 1>&2 else oz_tmp_ok=yes fi fi if test "$oz_tmp_ok" = yes; then oz_cv_MAKE=$MAKE else { echo "configure: error: GNU make is needed to build the system. It can be retrieved from: ftp://ftp.gnu.org/pub/gnu/make/ The latest version at this time is 3.80 and is available packaged as the following archive: make-3.80.tar.gz You may find a mirror archive closer to you by consulting: http://www.gnu.org/order/ftp.html " 1>&2; exit 1; } fi else echo $ac_n "checking for GNU make""... $ac_c" 1>&6 echo "configure:759: checking for GNU make" >&5 MAKE=$oz_cv_MAKE echo "$ac_t""(cached) $MAKE" 1>&6 fi echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 echo "configure:765: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftestmake <<\EOF all: @echo 'ac_maketemp="${MAKE}"' EOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftestmake fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$ac_t""yes" 1>&6 SET_MAKE= else echo "$ac_t""no" 1>&6 SET_MAKE="MAKE=${MAKE-make}" fi if test "${INSTALL+set}" = set; then echo $ac_n "checking whether to unset broken INSTALL""... $ac_c" 1>&6 echo "configure:794: checking whether to unset broken INSTALL" >&5 if eval "test \"`echo '$''{'oz_cv_unset_INSTALL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else echo >conftest.$$ if $INSTALL -c -m 644 conftest.$$ /tmp >/dev/null 2>&1; then rm -f /tmp/conftest.$$ 2>/dev/null oz_cv_unset_INSTALL=no oz_cv_given_INSTALL="$INSTALL" else oz_cv_unset_INSTALL=yes fi rm -f conftest.$$ 2>/dev/null fi echo "$ac_t""$oz_cv_unset_INSTALL" 1>&6 test "$oz_cv_unset_INSTALL" = yes && unset INSTALL fi # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 echo "configure:825: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" for ac_dir in $PATH; do # Account for people who put trailing slashes in PATH elements. case "$ac_dir/" in /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do if test -f $ac_dir/$ac_prog; then if test $ac_prog = install && grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : else ac_cv_path_install="$ac_dir/$ac_prog -c" break 2 fi fi done ;; esac done IFS="$ac_save_IFS" fi if test "${ac_cv_path_install+set}" = set; then INSTALL="$ac_cv_path_install" else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL="$ac_install_sh" fi fi echo "$ac_t""$INSTALL" 1>&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' if test "$INSTALL" = "$oz_cv_given_INSTALL"; then ac_given_INSTALL="$oz_cv_given_INSTALL" fi if test -z "$WITH_GLOBAL_OZ"; then echo $ac_n "checking for --with-global-oz""... $ac_c" 1>&6 echo "configure:884: checking for --with-global-oz" >&5 # Check whether --with-global-oz or --without-global-oz was given. if test "${with_global_oz+set}" = set; then withval="$with_global_oz" oz_cv_global_oz="$with_global_oz" else oz_cv_global_oz=no fi WITH_GLOBAL_OZ="$oz_cv_global_oz" echo "$ac_t""$WITH_GLOBAL_OZ" 1>&6 fi dummy_PATH="$PATH" if test "$WITH_GLOBAL_OZ" = no; then for oz_prog_tmp in mkinstalldirs; do case $oz_prog_tmp in oz|ozc|ozl|oztool|ozengine|ozplatform|ozdoc) dummy_PATH="$SRCTOP/share/bin:$SRCTOP" ;; esac done fi dummy_PWD=`pwd | sed 's/\//\\\\\//g'` dummy_PATH=`echo $dummy_PATH | sed -e 's/::/:/g' | sed -e 's/:$//g'` dummy_PATH=`echo $dummy_PATH | sed -e "s/^\.:/$dummy_PWD:/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/^\.\//$dummy_PWD\//g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:\.\$/:$dummy_PWD/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:\.:/:$dummy_PWD:/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:.\//:$dummy_PWD\//g"` oz_for="$dummy_PATH:$SRCTOP/share/bin:$SRCTOP" # Extract the first word of "mkinstalldirs", so it can be a program name with args. set dummy mkinstalldirs; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:918: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_INSTALL_DIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$INSTALL_DIR" in /*) ac_cv_path_INSTALL_DIR="$INSTALL_DIR" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_INSTALL_DIR="$INSTALL_DIR" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$oz_for" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_INSTALL_DIR="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" ;; esac fi INSTALL_DIR="$ac_cv_path_INSTALL_DIR" if test -n "$INSTALL_DIR"; then echo "$ac_t""$INSTALL_DIR" 1>&6 else echo "$ac_t""no" 1>&6 fi case "$host_os" in cygwin*) ;; *) INSTALL_DIR=`echo $INSTALL_DIR | sed -e "s|//|/|g"`;; esac if test ! -n "$INSTALL_DIR" then INSTALL_DIR=undefined fi echo $ac_n "checking for oz version""... $ac_c" 1>&6 echo "configure:962: checking for oz version" >&5 if eval "test \"`echo '$''{'oz_cv_ozversion'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else oz_cv_ozversion=`sh $SRCTOP/OZVERSION` fi echo "$ac_t""$oz_cv_ozversion" 1>&6 OZVERSION=$oz_cv_ozversion; HOMEURL="http://www.mozart-oz.org/home-$OZVERSION" HOMECACHE="http/www.mozart-oz.org/home-$OZVERSION" case "$target" in i386-mingw32|i386-mingw32msvc) PLATFORM=win32-i486 platform="win32-i486" ozplatform=$platform cross_compiling=yes CXX=${target}-gcc CC=${CXX} RANLIB=${target}-ranlib AR=${target}-ar STRIP=${target}-strip WINDRES=${target}-windres AS=${target}-as DLLTOOL=${target}-dlltool DLLWRAP=${target}-dllwrap OZTOOL="sh $BUILDTOP/platform/emulator/${target}-oztool" enable_contrib_psql=no enable_contrib_gdbm=yes enable_contrib_regex=yes enable_contrib_os=no ;; *) if test -z "$WITH_GLOBAL_OZ"; then echo $ac_n "checking for --with-global-oz""... $ac_c" 1>&6 echo "configure:1006: checking for --with-global-oz" >&5 # Check whether --with-global-oz or --without-global-oz was given. if test "${with_global_oz+set}" = set; then withval="$with_global_oz" oz_cv_global_oz="$with_global_oz" else oz_cv_global_oz=no fi WITH_GLOBAL_OZ="$oz_cv_global_oz" echo "$ac_t""$WITH_GLOBAL_OZ" 1>&6 fi dummy_PATH="$PATH" if test "$WITH_GLOBAL_OZ" = no; then for oz_prog_tmp in ozplatform; do case $oz_prog_tmp in oz|ozc|ozl|oztool|ozengine|ozplatform|ozdoc) dummy_PATH="$SRCTOP/share/bin:$SRCTOP" ;; esac done fi dummy_PWD=`pwd | sed 's/\//\\\\\//g'` dummy_PATH=`echo $dummy_PATH | sed -e 's/::/:/g' | sed -e 's/:$//g'` dummy_PATH=`echo $dummy_PATH | sed -e "s/^\.:/$dummy_PWD:/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/^\.\//$dummy_PWD\//g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:\.\$/:$dummy_PWD/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:\.:/:$dummy_PWD:/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:.\//:$dummy_PWD\//g"` oz_for="$dummy_PATH:$SRCTOP/share/bin:$SRCTOP" # Extract the first word of "ozplatform", so it can be a program name with args. set dummy ozplatform; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1040: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_OZPLATFORM'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$OZPLATFORM" in /*) ac_cv_path_OZPLATFORM="$OZPLATFORM" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_OZPLATFORM="$OZPLATFORM" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$oz_for" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_OZPLATFORM="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" ;; esac fi OZPLATFORM="$ac_cv_path_OZPLATFORM" if test -n "$OZPLATFORM"; then echo "$ac_t""$OZPLATFORM" 1>&6 else echo "$ac_t""no" 1>&6 fi case "$host_os" in cygwin*) ;; *) OZPLATFORM=`echo $OZPLATFORM | sed -e "s|//|/|g"`;; esac if test ! -n "$OZPLATFORM" then OZPLATFORM=undefined fi PLATFORM=`$OZPLATFORM || exit 1` if test -z "$WITH_GLOBAL_OZ"; then echo $ac_n "checking for --with-global-oz""... $ac_c" 1>&6 echo "configure:1087: checking for --with-global-oz" >&5 # Check whether --with-global-oz or --without-global-oz was given. if test "${with_global_oz+set}" = set; then withval="$with_global_oz" oz_cv_global_oz="$with_global_oz" else oz_cv_global_oz=no fi WITH_GLOBAL_OZ="$oz_cv_global_oz" echo "$ac_t""$WITH_GLOBAL_OZ" 1>&6 fi dummy_PATH="$PATH" if test "$WITH_GLOBAL_OZ" = no; then for oz_prog_tmp in oztool; do case $oz_prog_tmp in oz|ozc|ozl|oztool|ozengine|ozplatform|ozdoc) dummy_PATH="$SRCTOP/share/bin:$SRCTOP" ;; esac done fi dummy_PWD=`pwd | sed 's/\//\\\\\//g'` dummy_PATH=`echo $dummy_PATH | sed -e 's/::/:/g' | sed -e 's/:$//g'` dummy_PATH=`echo $dummy_PATH | sed -e "s/^\.:/$dummy_PWD:/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/^\.\//$dummy_PWD\//g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:\.\$/:$dummy_PWD/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:\.:/:$dummy_PWD:/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:.\//:$dummy_PWD\//g"` oz_for="$dummy_PATH:$SRCTOP/share/bin:$SRCTOP" # Extract the first word of "oztool", so it can be a program name with args. set dummy oztool; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1121: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_OZTOOL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$OZTOOL" in /*) ac_cv_path_OZTOOL="$OZTOOL" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_OZTOOL="$OZTOOL" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$oz_for" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_OZTOOL="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" ;; esac fi OZTOOL="$ac_cv_path_OZTOOL" if test -n "$OZTOOL"; then echo "$ac_t""$OZTOOL" 1>&6 else echo "$ac_t""no" 1>&6 fi case "$host_os" in cygwin*) ;; *) OZTOOL=`echo $OZTOOL | sed -e "s|//|/|g"`;; esac if test ! -n "$OZTOOL" then OZTOOL=undefined OZTOOL="sh $BUILDTOP/platform/emulator/oztool.sh" fi ;; esac echo $ac_n "checking for --with-inc-dir""... $ac_c" 1>&6 echo "configure:1167: checking for --with-inc-dir" >&5 # Check whether --with-inc-dir or --without-inc-dir was given. if test "${with_inc_dir+set}" = set; then withval="$with_inc_dir" oz_cv_with_inc_dirs=$with_inc_dir else : ${oz_cv_with_inc_dirs=$oz_with_inc_dir} fi echo "$ac_t""$with_inc_dir" 1>&6 oz_tmp_IFS="$IFS" IFS="," # reverse the list of dirs oz_tmp_dirs="" for oz_tmp in $oz_cv_with_inc_dirs DONE; do if test "$oz_tmp" != DONE; then oz_tmp_dirs="$oz_tmp${oz_tmp_dirs:+ }$oz_tmp_dirs" fi done # add them to CPPFLAGS and oz_inc_path IFS=$oz_tmp_IFS : ${oz_inc_path=""} for oz_tmp1 in $oz_tmp_dirs DONE; do if test "$oz_tmp1" != DONE; then if test "-I$oz_tmp1" != yes && test "-I$oz_tmp1" != no; then oz_tmp_ok=yes for oz_tmp in $CPPFLAGS NONE; do if test "$oz_tmp" = "-I$oz_tmp1"; then oz_tmp_ok=no break fi done test "$oz_tmp_ok" = yes && CPPFLAGS="$CPPFLAGS${CPPFLAGS:+ }-I$oz_tmp1" fi oz_inc_path="$oz_tmp1${oz_inc_path:+ }$oz_inc_path" fi done echo $ac_n "checking for --with-lib-dir""... $ac_c" 1>&6 echo "configure:1209: checking for --with-lib-dir" >&5 # Check whether --with-lib-dir or --without-lib-dir was given. if test "${with_lib_dir+set}" = set; then withval="$with_lib_dir" oz_cv_with_lib_dirs=$with_lib_dir else : ${oz_cv_with_lib_dirs=$oz_with_lib_dir} fi echo "$ac_t""$with_lib_dir" 1>&6 oz_tmp_IFS="$IFS" IFS="," # reverse the list of dirs oz_tmp_dirs="" for oz_tmp in $oz_cv_with_lib_dirs DONE; do if test "$oz_tmp" != DONE; then oz_tmp_dirs="$oz_tmp${oz_tmp_dirs:+ }$oz_tmp_dirs" fi done # add them to LDFLAGS and oz_lib_path IFS=$oz_tmp_IFS : ${oz_lib_path=""} for oz_tmp1 in $oz_tmp_dirs DONE; do if test "$oz_tmp1" != DONE; then if test "-L$oz_tmp1" != yes && test "-L$oz_tmp1" != no; then oz_tmp_ok=yes for oz_tmp in $LDFLAGS NONE; do if test "$oz_tmp" = "-L$oz_tmp1"; then oz_tmp_ok=no break fi done test "$oz_tmp_ok" = yes && LDFLAGS="-L$oz_tmp1${LDFLAGS:+ }$LDFLAGS" fi oz_lib_path="$oz_tmp1${oz_lib_path:+ }$oz_lib_path" fi done echo $ac_n "checking for build date""... $ac_c" 1>&6 echo "configure:1253: checking for build date" >&5 if eval "test \"`echo '$''{'oz_cv_build_date'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else oz_cv_build_date=`date +"%Y%m%d"` fi echo "$ac_t""$oz_cv_build_date" 1>&6 OZBUILDDATE=$oz_cv_build_date; echo $ac_n "checking for OZLOADSEP""... $ac_c" 1>&6 echo "configure:1267: checking for OZLOADSEP" >&5 if eval "test \"`echo '$''{'oz_cv_OZLOADSEP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case $PLATFORM in win32*) oz_cv_OZLOADSEP=';' ;; *) oz_cv_OZLOADSEP=':' ;; esac fi echo "$ac_t""$oz_cv_OZLOADSEP" 1>&6 OZLOADSEP="$oz_cv_OZLOADSEP"; echo $ac_n "checking for OZLOADWIN""... $ac_c" 1>&6 echo "configure:1287: checking for OZLOADWIN" >&5 if eval "test \"`echo '$''{'oz_cv_OZLOADWIN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case $PLATFORM in win32*) oztmp=`pwd` oztmp=`cygpath -a -w "$oztmp"` oztmp=`expr "$oztmp" : "\(.\):"` if test -n "$oztmp"; then oztmplo=`echo $oztmp | tr '[:upper:]' '[:lower:]'` oztmphi=`echo $oztmp | tr '[:lower:]' '[:upper:]'` oz_cv_OZLOADWIN="%prefix=${oztmplo}:/=${oztmplo}:/%prefix=${oztmphi}:/=${oztmphi}:/" fi oztmp=`cygpath -a -w "$srcdir"` oztmp=`expr "$oztmp" : "\(.\):"` if test -n "$oztmp"; then oztmplo=`echo $oztmp | tr '[:upper:]' '[:lower:]'` oztmphi=`echo $oztmp | tr '[:lower:]' '[:upper:]'` oz_cv_OZLOADWIN="${oz_cv_OZLOADWIN}%prefix=${oztmplo}:/=${oztmplo}:/%prefix=${oztmphi}:/=${oztmphi}:/" fi ;; *) oz_cv_OZLOADWIN= ;; esac fi echo "$ac_t""$oz_cv_OZLOADWIN" 1>&6 OZLOADWIN="$oz_cv_OZLOADWIN" echo $ac_n "checking for --enable-denys-events""... $ac_c" 1>&6 echo "configure:1325: checking for --enable-denys-events" >&5 # Check whether --enable-denys-events or --disable-denys-events was given. if test "${enable_denys_events+set}" = set; then enableval="$enable_denys_events" : fi : ${oz_enable_denys_events=no} if test -n "${enable_denys_events}"; then oz_enable_denys_events=$enable_denys_events fi if test "${oz_enable_denys_events}" != no; then DENYS_EVENTS=yes else DENYS_EVENTS=no fi echo "$ac_t""$DENYS_EVENTS" 1>&6 echo $ac_n "checking for --enable-site-property""... $ac_c" 1>&6 echo "configure:1346: checking for --enable-site-property" >&5 # Check whether --enable-site-property or --disable-site-property was given. if test "${enable_site_property+set}" = set; then enableval="$enable_site_property" : fi : ${oz_enable_site_property=yes} if test -n "${enable_site_property}"; then oz_enable_site_property=$enable_site_property fi if test "${oz_enable_site_property}" != no; then SITE_PROPERTY=yes else SITE_PROPERTY=no fi echo "$ac_t""$SITE_PROPERTY" 1>&6 echo $ac_n "checking for --enable-compile-elisp""... $ac_c" 1>&6 echo "configure:1367: checking for --enable-compile-elisp" >&5 # Check whether --enable-compile-elisp or --disable-compile-elisp was given. if test "${enable_compile_elisp+set}" = set; then enableval="$enable_compile_elisp" : fi : ${oz_enable_compile_elisp=yes} if test -n "${enable_compile_elisp}"; then oz_enable_compile_elisp=$enable_compile_elisp fi if test "${oz_enable_compile_elisp}" != no; then COMPILE_ELISP=yes else COMPILE_ELISP=no fi echo "$ac_t""$COMPILE_ELISP" 1>&6 srcdira=`(cd $srcdir; pwd)` # PLATFORM is defined by OZ_INIT : ${platform=$PLATFORM} case $platform in win32*) oztmp=`${SRCTOP}/share/lib/cygpath.sh "${SRCTOP}/platform/mswindows/ozwrapper.bin"` OZEXECFILE="--execfile=\"$oztmp\"" EMULATOR_EXE=emulator.dll BOOTOZTOOL='$(shell $(CYG_PATH) "$(BUILDTOP)/platform/mswindows/oztool.exe")' WINOZTOOLCXXFLAGS='$(BOOTOZTOOLINC)' WINOZTOOLLDFLAGS='-inc $(BUILDTOP)/platform/emulator' EXE_EXT='.exe' ;; *) EMULATOR_EXE=emulator.exe BOOTOZTOOL='"/bin/sh $(BUILDTOP)/platform/emulator/oztool.sh"' EXE_EXT='' ;; esac echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 echo "configure:1420: checking whether ln -s works" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else rm -f conftestdata if ln -s X conftestdata 2>/dev/null then rm -f conftestdata ac_cv_prog_LN_S="ln -s" else ac_cv_prog_LN_S=ln fi fi LN_S="$ac_cv_prog_LN_S" if test "$ac_cv_prog_LN_S" = "ln -s"; then echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi for ac_prog in gm4 m4 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1446: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_M4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$M4"; then ac_cv_prog_M4="$M4" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_M4="$ac_prog" break fi done IFS="$ac_save_ifs" fi fi M4="$ac_cv_prog_M4" if test -n "$M4"; then echo "$ac_t""$M4" 1>&6 else echo "$ac_t""no" 1>&6 fi test -n "$M4" && break done test -n "$M4" || M4="m4" for ac_prog in perl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1481: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_PERL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$PERL"; then ac_cv_prog_PERL="$PERL" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_PERL="$ac_prog" break fi done IFS="$ac_save_ifs" fi fi PERL="$ac_cv_prog_PERL" if test -n "$PERL"; then echo "$ac_t""$PERL" 1>&6 else echo "$ac_t""no" 1>&6 fi test -n "$PERL" && break done test -n "$PERL" || PERL="perl" for ac_prog in gzip do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1516: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_THEGZIP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$THEGZIP"; then ac_cv_prog_THEGZIP="$THEGZIP" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_THEGZIP="$ac_prog" break fi done IFS="$ac_save_ifs" fi fi THEGZIP="$ac_cv_prog_THEGZIP" if test -n "$THEGZIP"; then echo "$ac_t""$THEGZIP" 1>&6 else echo "$ac_t""no" 1>&6 fi test -n "$THEGZIP" && break done test -n "$THEGZIP" || THEGZIP="gzip" for ac_prog in emacs xemacs do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1551: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_THEEMACS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$THEEMACS"; then ac_cv_prog_THEEMACS="$THEEMACS" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_THEEMACS="$ac_prog" break fi done IFS="$ac_save_ifs" fi fi THEEMACS="$ac_cv_prog_THEEMACS" if test -n "$THEEMACS"; then echo "$ac_t""$THEEMACS" 1>&6 else echo "$ac_t""no" 1>&6 fi test -n "$THEEMACS" && break done test -n "$THEEMACS" || THEEMACS="emacs" if test -z "$WITH_GLOBAL_OZ"; then echo $ac_n "checking for --with-global-oz""... $ac_c" 1>&6 echo "configure:1586: checking for --with-global-oz" >&5 # Check whether --with-global-oz or --without-global-oz was given. if test "${with_global_oz+set}" = set; then withval="$with_global_oz" oz_cv_global_oz="$with_global_oz" else oz_cv_global_oz=no fi WITH_GLOBAL_OZ="$oz_cv_global_oz" echo "$ac_t""$WITH_GLOBAL_OZ" 1>&6 fi dummy_PATH="$PATH" if test "$WITH_GLOBAL_OZ" = no; then for oz_prog_tmp in ozplatform; do case $oz_prog_tmp in oz|ozc|ozl|oztool|ozengine|ozplatform|ozdoc) dummy_PATH="$SRCTOP/share/bin:$SRCTOP" ;; esac done fi dummy_PWD=`pwd | sed 's/\//\\\\\//g'` dummy_PATH=`echo $dummy_PATH | sed -e 's/::/:/g' | sed -e 's/:$//g'` dummy_PATH=`echo $dummy_PATH | sed -e "s/^\.:/$dummy_PWD:/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/^\.\//$dummy_PWD\//g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:\.\$/:$dummy_PWD/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:\.:/:$dummy_PWD:/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:.\//:$dummy_PWD\//g"` oz_for="$dummy_PATH:$SRCTOP/share/bin:$SRCTOP" # Extract the first word of "ozplatform", so it can be a program name with args. set dummy ozplatform; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1620: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_OZPLATFORM'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$OZPLATFORM" in /*) ac_cv_path_OZPLATFORM="$OZPLATFORM" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_OZPLATFORM="$OZPLATFORM" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$oz_for" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_OZPLATFORM="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" ;; esac fi OZPLATFORM="$ac_cv_path_OZPLATFORM" if test -n "$OZPLATFORM"; then echo "$ac_t""$OZPLATFORM" 1>&6 else echo "$ac_t""no" 1>&6 fi case "$host_os" in cygwin*) ;; *) OZPLATFORM=`echo $OZPLATFORM | sed -e "s|//|/|g"`;; esac if test ! -n "$OZPLATFORM" then OZPLATFORM=undefined fi if test -z "$WITH_GLOBAL_OZ"; then echo $ac_n "checking for --with-global-oz""... $ac_c" 1>&6 echo "configure:1666: checking for --with-global-oz" >&5 # Check whether --with-global-oz or --without-global-oz was given. if test "${with_global_oz+set}" = set; then withval="$with_global_oz" oz_cv_global_oz="$with_global_oz" else oz_cv_global_oz=no fi WITH_GLOBAL_OZ="$oz_cv_global_oz" echo "$ac_t""$WITH_GLOBAL_OZ" 1>&6 fi dummy_PATH="$PATH" if test "$WITH_GLOBAL_OZ" = no; then for oz_prog_tmp in ozc; do case $oz_prog_tmp in oz|ozc|ozl|oztool|ozengine|ozplatform|ozdoc) dummy_PATH="$SRCTOP/share/bin:$SRCTOP" ;; esac done fi dummy_PWD=`pwd | sed 's/\//\\\\\//g'` dummy_PATH=`echo $dummy_PATH | sed -e 's/::/:/g' | sed -e 's/:$//g'` dummy_PATH=`echo $dummy_PATH | sed -e "s/^\.:/$dummy_PWD:/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/^\.\//$dummy_PWD\//g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:\.\$/:$dummy_PWD/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:\.:/:$dummy_PWD:/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:.\//:$dummy_PWD\//g"` oz_for="$dummy_PATH:$SRCTOP/share/bin:$SRCTOP" # Extract the first word of "ozc", so it can be a program name with args. set dummy ozc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1700: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_OZC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$OZC" in /*) ac_cv_path_OZC="$OZC" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_OZC="$OZC" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$oz_for" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_OZC="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" ;; esac fi OZC="$ac_cv_path_OZC" if test -n "$OZC"; then echo "$ac_t""$OZC" 1>&6 else echo "$ac_t""no" 1>&6 fi case "$host_os" in cygwin*) ;; *) OZC=`echo $OZC | sed -e "s|//|/|g"`;; esac if test ! -n "$OZC" then OZC=undefined OZC=`pwd`/lib/ozc fi if test -z "$WITH_GLOBAL_OZ"; then echo $ac_n "checking for --with-global-oz""... $ac_c" 1>&6 echo "configure:1746: checking for --with-global-oz" >&5 # Check whether --with-global-oz or --without-global-oz was given. if test "${with_global_oz+set}" = set; then withval="$with_global_oz" oz_cv_global_oz="$with_global_oz" else oz_cv_global_oz=no fi WITH_GLOBAL_OZ="$oz_cv_global_oz" echo "$ac_t""$WITH_GLOBAL_OZ" 1>&6 fi dummy_PATH="$PATH" if test "$WITH_GLOBAL_OZ" = no; then for oz_prog_tmp in ozl; do case $oz_prog_tmp in oz|ozc|ozl|oztool|ozengine|ozplatform|ozdoc) dummy_PATH="$SRCTOP/share/bin:$SRCTOP" ;; esac done fi dummy_PWD=`pwd | sed 's/\//\\\\\//g'` dummy_PATH=`echo $dummy_PATH | sed -e 's/::/:/g' | sed -e 's/:$//g'` dummy_PATH=`echo $dummy_PATH | sed -e "s/^\.:/$dummy_PWD:/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/^\.\//$dummy_PWD\//g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:\.\$/:$dummy_PWD/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:\.:/:$dummy_PWD:/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:.\//:$dummy_PWD\//g"` oz_for="$dummy_PATH:$SRCTOP/share/bin:$SRCTOP" # Extract the first word of "ozl", so it can be a program name with args. set dummy ozl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1780: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_OZL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$OZL" in /*) ac_cv_path_OZL="$OZL" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_OZL="$OZL" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$oz_for" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_OZL="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" ;; esac fi OZL="$ac_cv_path_OZL" if test -n "$OZL"; then echo "$ac_t""$OZL" 1>&6 else echo "$ac_t""no" 1>&6 fi case "$host_os" in cygwin*) ;; *) OZL=`echo $OZL | sed -e "s|//|/|g"`;; esac if test ! -n "$OZL" then OZL=undefined OZL=`pwd`/lib/ozl fi if test -z "$WITH_GLOBAL_OZ"; then echo $ac_n "checking for --with-global-oz""... $ac_c" 1>&6 echo "configure:1826: checking for --with-global-oz" >&5 # Check whether --with-global-oz or --without-global-oz was given. if test "${with_global_oz+set}" = set; then withval="$with_global_oz" oz_cv_global_oz="$with_global_oz" else oz_cv_global_oz=no fi WITH_GLOBAL_OZ="$oz_cv_global_oz" echo "$ac_t""$WITH_GLOBAL_OZ" 1>&6 fi dummy_PATH="$PATH" if test "$WITH_GLOBAL_OZ" = no; then for oz_prog_tmp in ozengine; do case $oz_prog_tmp in oz|ozc|ozl|oztool|ozengine|ozplatform|ozdoc) dummy_PATH="$SRCTOP/share/bin:$SRCTOP" ;; esac done fi dummy_PWD=`pwd | sed 's/\//\\\\\//g'` dummy_PATH=`echo $dummy_PATH | sed -e 's/::/:/g' | sed -e 's/:$//g'` dummy_PATH=`echo $dummy_PATH | sed -e "s/^\.:/$dummy_PWD:/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/^\.\//$dummy_PWD\//g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:\.\$/:$dummy_PWD/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:\.:/:$dummy_PWD:/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:.\//:$dummy_PWD\//g"` oz_for="$dummy_PATH:$SRCTOP/share/bin:$SRCTOP" # Extract the first word of "ozengine", so it can be a program name with args. set dummy ozengine; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1860: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_OZENGINE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$OZENGINE" in /*) ac_cv_path_OZENGINE="$OZENGINE" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_OZENGINE="$OZENGINE" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$oz_for" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_OZENGINE="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" ;; esac fi OZENGINE="$ac_cv_path_OZENGINE" if test -n "$OZENGINE"; then echo "$ac_t""$OZENGINE" 1>&6 else echo "$ac_t""no" 1>&6 fi case "$host_os" in cygwin*) ;; *) OZENGINE=`echo $OZENGINE | sed -e "s|//|/|g"`;; esac if test ! -n "$OZENGINE" then OZENGINE=undefined OZENGINE=$srcdira/lib/oze.sh fi if test -z "$WITH_GLOBAL_OZ"; then echo $ac_n "checking for --with-global-oz""... $ac_c" 1>&6 echo "configure:1906: checking for --with-global-oz" >&5 # Check whether --with-global-oz or --without-global-oz was given. if test "${with_global_oz+set}" = set; then withval="$with_global_oz" oz_cv_global_oz="$with_global_oz" else oz_cv_global_oz=no fi WITH_GLOBAL_OZ="$oz_cv_global_oz" echo "$ac_t""$WITH_GLOBAL_OZ" 1>&6 fi dummy_PATH="$PATH" if test "$WITH_GLOBAL_OZ" = no; then for oz_prog_tmp in oztool; do case $oz_prog_tmp in oz|ozc|ozl|oztool|ozengine|ozplatform|ozdoc) dummy_PATH="$SRCTOP/share/bin:$SRCTOP" ;; esac done fi dummy_PWD=`pwd | sed 's/\//\\\\\//g'` dummy_PATH=`echo $dummy_PATH | sed -e 's/::/:/g' | sed -e 's/:$//g'` dummy_PATH=`echo $dummy_PATH | sed -e "s/^\.:/$dummy_PWD:/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/^\.\//$dummy_PWD\//g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:\.\$/:$dummy_PWD/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:\.:/:$dummy_PWD:/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:.\//:$dummy_PWD\//g"` oz_for="$dummy_PATH:$SRCTOP/share/bin:$SRCTOP" # Extract the first word of "oztool", so it can be a program name with args. set dummy oztool; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1940: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_OZTOOL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$OZTOOL" in /*) ac_cv_path_OZTOOL="$OZTOOL" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_OZTOOL="$OZTOOL" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$oz_for" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_OZTOOL="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" ;; esac fi OZTOOL="$ac_cv_path_OZTOOL" if test -n "$OZTOOL"; then echo "$ac_t""$OZTOOL" 1>&6 else echo "$ac_t""no" 1>&6 fi case "$host_os" in cygwin*) ;; *) OZTOOL=`echo $OZTOOL | sed -e "s|//|/|g"`;; esac if test ! -n "$OZTOOL" then OZTOOL=undefined OZTOOL="sh $BUILDTOP/platform/emulator/oztool.sh" fi if test -z "$WITH_GLOBAL_OZ"; then echo $ac_n "checking for --with-global-oz""... $ac_c" 1>&6 echo "configure:1986: checking for --with-global-oz" >&5 # Check whether --with-global-oz or --without-global-oz was given. if test "${with_global_oz+set}" = set; then withval="$with_global_oz" oz_cv_global_oz="$with_global_oz" else oz_cv_global_oz=no fi WITH_GLOBAL_OZ="$oz_cv_global_oz" echo "$ac_t""$WITH_GLOBAL_OZ" 1>&6 fi dummy_PATH="$PATH" if test "$WITH_GLOBAL_OZ" = no; then for oz_prog_tmp in ozplatform; do case $oz_prog_tmp in oz|ozc|ozl|oztool|ozengine|ozplatform|ozdoc) dummy_PATH="$SRCTOP/share/bin:$SRCTOP" ;; esac done fi dummy_PWD=`pwd | sed 's/\//\\\\\//g'` dummy_PATH=`echo $dummy_PATH | sed -e 's/::/:/g' | sed -e 's/:$//g'` dummy_PATH=`echo $dummy_PATH | sed -e "s/^\.:/$dummy_PWD:/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/^\.\//$dummy_PWD\//g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:\.\$/:$dummy_PWD/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:\.:/:$dummy_PWD:/g"` dummy_PATH=`echo $dummy_PATH | sed -e "s/:.\//:$dummy_PWD\//g"` oz_for="$dummy_PATH:$SRCTOP/share/bin:$SRCTOP" # Extract the first word of "ozplatform", so it can be a program name with args. set dummy ozplatform; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:2020: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_OZPLATFORM'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$OZPLATFORM" in /*) ac_cv_path_OZPLATFORM="$OZPLATFORM" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_OZPLATFORM="$OZPLATFORM" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$oz_for" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_OZPLATFORM="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" ;; esac fi OZPLATFORM="$ac_cv_path_OZPLATFORM" if test -n "$OZPLATFORM"; then echo "$ac_t""$OZPLATFORM" 1>&6 else echo "$ac_t""no" 1>&6 fi case "$host_os" in cygwin*) ;; *) OZPLATFORM=`echo $OZPLATFORM | sed -e "s|//|/|g"`;; esac if test ! -n "$OZPLATFORM" then OZPLATFORM=undefined OZPLATFORM=$SRCTOP/share/bin/ozplatform fi PLATFORM=`$OZPLATFORM` OZLOADCACHE=`expr "$OZC" : "\(.*\)/bin/ozc"` : ${oz_picklecompression=9} echo $ac_n "checking for --enable-picklecompression""... $ac_c" 1>&6 echo "configure:2073: checking for --enable-picklecompression" >&5 # Check whether --enable-picklecompression or --disable-picklecompression was given. if test "${enable_picklecompression+set}" = set; then enableval="$enable_picklecompression" : fi case $enable_picklecompression in 0|1|2|3|4|5|6|7|8|9) oz_picklecompression=${enable_picklecompression} ;; no) oz_picklecompression=0 ;; esac echo "$ac_t""$oz_picklecompression" 1>&6 SHAREDIRS="lib tools elisp test demo examples" case $platform in win32*) OZWSOCKLIB=-lwsock32 ;; *) SHAREDIRS="bin $SHAREDIRS" ;; esac echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 echo "configure:2109: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else # This must be in double quotes, not single quotes, because CPP may get # substituted into the Makefile and "${CC-cc}" will confuse make. CPP="${CC-cc} -E" # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:2130: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:2147: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:2164: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP=/lib/cpp fi rm -f conftest* fi rm -f conftest* fi rm -f conftest* ac_cv_prog_CPP="$CPP" fi CPP="$ac_cv_prog_CPP" else ac_cv_prog_CPP="$CPP" fi echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for --with-gmp""... $ac_c" 1>&6 echo "configure:2190: checking for --with-gmp" >&5 # Check whether --with-gmp or --without-gmp was given. if test "${with_gmp+set}" = set; then withval="$with_gmp" with_gmp=$withval else with_gmp=yes fi if test "$with_gmp" != no then echo "$ac_t""$with_gmp" 1>&6 if test "${with_gmp}" != yes then oz_gmp_lib_dir=$with_gmp oz_gmp_inc_dir=$with_gmp fi oz_inc_path="$oz_gmp_inc_dir $oz_inc_path" oz_lib_path="$oz_gmp_lib_dir $oz_lib_path" else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for gmp.h""... $ac_c" 1>&6 echo "configure:2219: checking for gmp.h" >&5 if eval "test \"`echo '$''{'oz_cv_header_gmp_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else oz_tmp_cppflags="$CPPFLAGS" oz_tmp_ok=no for oz_tmp in $oz_inc_path; do CPPFLAGS="$oz_tmp_cppflags -I$oz_tmp" cat > conftest.$ac_ext <&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* oz_tmp_ok="-I$oz_tmp" break else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* done CPPFLAGS="$oz_tmp_cppflags" if test "$oz_tmp_ok" = no; then cat > conftest.$ac_ext <&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* oz_tmp_ok=yes else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* fi oz_cv_header_gmp_h="$oz_tmp_ok" fi echo "$ac_t""$oz_cv_header_gmp_h" 1>&6 oz_tmp_val=$oz_cv_header_gmp_h if test "$oz_tmp_val" != no; then if test "$oz_tmp_val" != yes; then if test "$oz_tmp_val" != yes && test "$oz_tmp_val" != no; then oz_tmp_ok=yes for oz_tmp in $CPPFLAGS NONE; do if test "$oz_tmp" = "$oz_tmp_val"; then oz_tmp_ok=no break fi done test "$oz_tmp_ok" = yes && CPPFLAGS="$CPPFLAGS${CPPFLAGS:+ }$oz_tmp_val" fi fi oz_gmp_inc_found=yes else oz_inc_path_sav=$oz_inc_path oz_inc_path="$oz_inc_path /usr/include/gmp2" echo $ac_n "checking for gmp.h""... $ac_c" 1>&6 echo "configure:2300: checking for gmp.h" >&5 if eval "test \"`echo '$''{'oz_cv_header_gmp_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else oz_tmp_cppflags="$CPPFLAGS" oz_tmp_ok=no for oz_tmp in $oz_inc_path; do CPPFLAGS="$oz_tmp_cppflags -I$oz_tmp" cat > conftest.$ac_ext <&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* oz_tmp_ok="-I$oz_tmp" break else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* done CPPFLAGS="$oz_tmp_cppflags" if test "$oz_tmp_ok" = no; then cat > conftest.$ac_ext <&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* oz_tmp_ok=yes else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* fi oz_cv_header_gmp_h="$oz_tmp_ok" fi echo "$ac_t""$oz_cv_header_gmp_h" 1>&6 oz_tmp_val=$oz_cv_header_gmp_h if test "$oz_tmp_val" != no; then if test "$oz_tmp_val" != yes; then if test "$oz_tmp_val" != yes && test "$oz_tmp_val" != no; then oz_tmp_ok=yes for oz_tmp in $CPPFLAGS NONE; do if test "$oz_tmp" = "$oz_tmp_val"; then oz_tmp_ok=no break fi done test "$oz_tmp_ok" = yes && CPPFLAGS="$CPPFLAGS${CPPFLAGS:+ }$oz_tmp_val" fi fi oz_gmp_inc_found=yes else oz_gmp_inc_found=no oz_inc_path=$oz_inc_path_sav fi fi if test "$oz_gmp_inc_found" = yes; then if test -n "$oz_cv_lib_path_ldflags_gmp___gmpz_init"; then echo $ac_n "checking for library gmp""... $ac_c" 1>&6 echo "configure:2386: checking for library gmp" >&5 oz_add_ldflags=$oz_cv_lib_path_ldflags_gmp___gmpz_init oz_add_libs=$oz_cv_lib_path_libs_gmp___gmpz_init if test "$oz_add_ldflags" = no; then oz_tmp=no else if test -n "$oz_add_ldflags" && test "$oz_add_ldflags" != yes; then oz_tmp="$oz_add_ldflags (LDFLAGS)" else oz_tmp= fi if test -n "$oz_add_libs" && \ test "$oz_add_libs" != yes && \ test "$oz_add_libs" != no; then oz_tmp="$oz_tmp${oz_tmp:+ }$oz_add_libs (LIBS)" fi fi echo "$ac_t""(cached) $oz_tmp" 1>&6 else oz_tmp_ldflags=$LDFLAGS oz_tmp_libs=$LIBS oz_add_ldflags=no oz_add_libs=no echo $ac_n "checking for __gmpz_init in -lgmp (default)""... $ac_c" 1>&6 echo "configure:2410: checking for __gmpz_init in -lgmp (default)" >&5 oz_saved_LIBS=$LIBS cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* if test "${oz_enable_link_static}" = yes; then oz_add_libs="-Xlinker -Bstatic -lgmp -Xlinker -Bdynamic" LIBS="$oz_add_libs${oz_saved_LIBS:+ }$oz_saved_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS="-lgmp $oz_saved_LIBS" oz_add_libs="-lgmp" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS=$oz_saved_LIBS oz_add_libs=no echo "$ac_t""no" 1>&6 for p in $oz_lib_path; do LDFLAGS="-L$p $oz_tmp_ldflags" echo $ac_n "checking for __gmpz_init in -L$p -lgmp""... $ac_c" 1>&6 echo "configure:2490: checking for __gmpz_init in -L$p -lgmp" >&5 oz_saved_LIBS=$LIBS cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags="-L$p" break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* if test "${oz_enable_link_static}" = yes; then oz_add_libs="-Xlinker -Bstatic -lgmp -Xlinker -Bdynamic" LIBS="$oz_add_libs${oz_saved_LIBS:+ }$oz_saved_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags="-L$p" break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS="-lgmp $oz_saved_LIBS" oz_add_libs="-lgmp" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags="-L$p" break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS=$oz_saved_LIBS oz_add_libs=no echo "$ac_t""no" 1>&6 fi rm -f conftest* fi rm -f conftest* else LIBS="-lgmp $oz_saved_LIBS" oz_add_libs="-lgmp" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags="-L$p" break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS=$oz_saved_LIBS oz_add_libs=no echo "$ac_t""no" 1>&6 fi rm -f conftest* fi fi rm -f conftest* done fi rm -f conftest* fi rm -f conftest* else LIBS="-lgmp $oz_saved_LIBS" oz_add_libs="-lgmp" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS=$oz_saved_LIBS oz_add_libs=no echo "$ac_t""no" 1>&6 for p in $oz_lib_path; do LDFLAGS="-L$p $oz_tmp_ldflags" echo $ac_n "checking for __gmpz_init in -L$p -lgmp""... $ac_c" 1>&6 echo "configure:2640: checking for __gmpz_init in -L$p -lgmp" >&5 oz_saved_LIBS=$LIBS cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags="-L$p" break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* if test "${oz_enable_link_static}" = yes; then oz_add_libs="-Xlinker -Bstatic -lgmp -Xlinker -Bdynamic" LIBS="$oz_add_libs${oz_saved_LIBS:+ }$oz_saved_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags="-L$p" break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS="-lgmp $oz_saved_LIBS" oz_add_libs="-lgmp" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags="-L$p" break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS=$oz_saved_LIBS oz_add_libs=no echo "$ac_t""no" 1>&6 fi rm -f conftest* fi rm -f conftest* else LIBS="-lgmp $oz_saved_LIBS" oz_add_libs="-lgmp" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags="-L$p" break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS=$oz_saved_LIBS oz_add_libs=no echo "$ac_t""no" 1>&6 fi rm -f conftest* fi fi rm -f conftest* done fi rm -f conftest* fi fi rm -f conftest* LDFLAGS=$oz_tmp_ldflags LIBS=$oz_tmp_libs oz_cv_lib_path_ldflags_gmp___gmpz_init=$oz_add_ldflags oz_cv_lib_path_libs_gmp___gmpz_init=$oz_add_libs fi if test "$oz_add_ldflags" = no; then if test -n "$oz_cv_lib_path_ldflags_gmp_mpz_init"; then echo $ac_n "checking for library gmp""... $ac_c" 1>&6 echo "configure:2769: checking for library gmp" >&5 oz_add_ldflags=$oz_cv_lib_path_ldflags_gmp_mpz_init oz_add_libs=$oz_cv_lib_path_libs_gmp_mpz_init if test "$oz_add_ldflags" = no; then oz_tmp=no else if test -n "$oz_add_ldflags" && test "$oz_add_ldflags" != yes; then oz_tmp="$oz_add_ldflags (LDFLAGS)" else oz_tmp= fi if test -n "$oz_add_libs" && \ test "$oz_add_libs" != yes && \ test "$oz_add_libs" != no; then oz_tmp="$oz_tmp${oz_tmp:+ }$oz_add_libs (LIBS)" fi fi echo "$ac_t""(cached) $oz_tmp" 1>&6 else oz_tmp_ldflags=$LDFLAGS oz_tmp_libs=$LIBS oz_add_ldflags=no oz_add_libs=no echo $ac_n "checking for mpz_init in -lgmp (default)""... $ac_c" 1>&6 echo "configure:2793: checking for mpz_init in -lgmp (default)" >&5 oz_saved_LIBS=$LIBS cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* if test "${oz_enable_link_static}" = yes; then oz_add_libs="-Xlinker -Bstatic -lgmp -Xlinker -Bdynamic" LIBS="$oz_add_libs${oz_saved_LIBS:+ }$oz_saved_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS="-lgmp $oz_saved_LIBS" oz_add_libs="-lgmp" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS=$oz_saved_LIBS oz_add_libs=no echo "$ac_t""no" 1>&6 for p in $oz_lib_path; do LDFLAGS="-L$p $oz_tmp_ldflags" echo $ac_n "checking for mpz_init in -L$p -lgmp""... $ac_c" 1>&6 echo "configure:2873: checking for mpz_init in -L$p -lgmp" >&5 oz_saved_LIBS=$LIBS cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags="-L$p" break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* if test "${oz_enable_link_static}" = yes; then oz_add_libs="-Xlinker -Bstatic -lgmp -Xlinker -Bdynamic" LIBS="$oz_add_libs${oz_saved_LIBS:+ }$oz_saved_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags="-L$p" break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS="-lgmp $oz_saved_LIBS" oz_add_libs="-lgmp" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags="-L$p" break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS=$oz_saved_LIBS oz_add_libs=no echo "$ac_t""no" 1>&6 fi rm -f conftest* fi rm -f conftest* else LIBS="-lgmp $oz_saved_LIBS" oz_add_libs="-lgmp" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags="-L$p" break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS=$oz_saved_LIBS oz_add_libs=no echo "$ac_t""no" 1>&6 fi rm -f conftest* fi fi rm -f conftest* done fi rm -f conftest* fi rm -f conftest* else LIBS="-lgmp $oz_saved_LIBS" oz_add_libs="-lgmp" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS=$oz_saved_LIBS oz_add_libs=no echo "$ac_t""no" 1>&6 for p in $oz_lib_path; do LDFLAGS="-L$p $oz_tmp_ldflags" echo $ac_n "checking for mpz_init in -L$p -lgmp""... $ac_c" 1>&6 echo "configure:3023: checking for mpz_init in -L$p -lgmp" >&5 oz_saved_LIBS=$LIBS cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags="-L$p" break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* if test "${oz_enable_link_static}" = yes; then oz_add_libs="-Xlinker -Bstatic -lgmp -Xlinker -Bdynamic" LIBS="$oz_add_libs${oz_saved_LIBS:+ }$oz_saved_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags="-L$p" break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS="-lgmp $oz_saved_LIBS" oz_add_libs="-lgmp" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags="-L$p" break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS=$oz_saved_LIBS oz_add_libs=no echo "$ac_t""no" 1>&6 fi rm -f conftest* fi rm -f conftest* else LIBS="-lgmp $oz_saved_LIBS" oz_add_libs="-lgmp" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags="-L$p" break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS=$oz_saved_LIBS oz_add_libs=no echo "$ac_t""no" 1>&6 fi rm -f conftest* fi fi rm -f conftest* done fi rm -f conftest* fi fi rm -f conftest* LDFLAGS=$oz_tmp_ldflags LIBS=$oz_tmp_libs oz_cv_lib_path_ldflags_gmp_mpz_init=$oz_add_ldflags oz_cv_lib_path_libs_gmp_mpz_init=$oz_add_libs fi if test "$oz_add_ldflags" = no; then if test -n "$oz_cv_lib_path_ldflags_gmp2_mpz_init"; then echo $ac_n "checking for library gmp2""... $ac_c" 1>&6 echo "configure:3152: checking for library gmp2" >&5 oz_add_ldflags=$oz_cv_lib_path_ldflags_gmp2_mpz_init oz_add_libs=$oz_cv_lib_path_libs_gmp2_mpz_init if test "$oz_add_ldflags" = no; then oz_tmp=no else if test -n "$oz_add_ldflags" && test "$oz_add_ldflags" != yes; then oz_tmp="$oz_add_ldflags (LDFLAGS)" else oz_tmp= fi if test -n "$oz_add_libs" && \ test "$oz_add_libs" != yes && \ test "$oz_add_libs" != no; then oz_tmp="$oz_tmp${oz_tmp:+ }$oz_add_libs (LIBS)" fi fi echo "$ac_t""(cached) $oz_tmp" 1>&6 else oz_tmp_ldflags=$LDFLAGS oz_tmp_libs=$LIBS oz_add_ldflags=no oz_add_libs=no echo $ac_n "checking for mpz_init in -lgmp2 (default)""... $ac_c" 1>&6 echo "configure:3176: checking for mpz_init in -lgmp2 (default)" >&5 oz_saved_LIBS=$LIBS cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* if test "${oz_enable_link_static}" = yes; then oz_add_libs="-Xlinker -Bstatic -lgmp2 -Xlinker -Bdynamic" LIBS="$oz_add_libs${oz_saved_LIBS:+ }$oz_saved_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS="-lgmp2 $oz_saved_LIBS" oz_add_libs="-lgmp2" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS=$oz_saved_LIBS oz_add_libs=no echo "$ac_t""no" 1>&6 for p in $oz_lib_path; do LDFLAGS="-L$p $oz_tmp_ldflags" echo $ac_n "checking for mpz_init in -L$p -lgmp2""... $ac_c" 1>&6 echo "configure:3256: checking for mpz_init in -L$p -lgmp2" >&5 oz_saved_LIBS=$LIBS cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags="-L$p" break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* if test "${oz_enable_link_static}" = yes; then oz_add_libs="-Xlinker -Bstatic -lgmp2 -Xlinker -Bdynamic" LIBS="$oz_add_libs${oz_saved_LIBS:+ }$oz_saved_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags="-L$p" break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS="-lgmp2 $oz_saved_LIBS" oz_add_libs="-lgmp2" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags="-L$p" break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS=$oz_saved_LIBS oz_add_libs=no echo "$ac_t""no" 1>&6 fi rm -f conftest* fi rm -f conftest* else LIBS="-lgmp2 $oz_saved_LIBS" oz_add_libs="-lgmp2" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags="-L$p" break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS=$oz_saved_LIBS oz_add_libs=no echo "$ac_t""no" 1>&6 fi rm -f conftest* fi fi rm -f conftest* done fi rm -f conftest* fi rm -f conftest* else LIBS="-lgmp2 $oz_saved_LIBS" oz_add_libs="-lgmp2" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS=$oz_saved_LIBS oz_add_libs=no echo "$ac_t""no" 1>&6 for p in $oz_lib_path; do LDFLAGS="-L$p $oz_tmp_ldflags" echo $ac_n "checking for mpz_init in -L$p -lgmp2""... $ac_c" 1>&6 echo "configure:3406: checking for mpz_init in -L$p -lgmp2" >&5 oz_saved_LIBS=$LIBS cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags="-L$p" break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* if test "${oz_enable_link_static}" = yes; then oz_add_libs="-Xlinker -Bstatic -lgmp2 -Xlinker -Bdynamic" LIBS="$oz_add_libs${oz_saved_LIBS:+ }$oz_saved_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags="-L$p" break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS="-lgmp2 $oz_saved_LIBS" oz_add_libs="-lgmp2" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags="-L$p" break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS=$oz_saved_LIBS oz_add_libs=no echo "$ac_t""no" 1>&6 fi rm -f conftest* fi rm -f conftest* else LIBS="-lgmp2 $oz_saved_LIBS" oz_add_libs="-lgmp2" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 oz_add_ldflags="-L$p" break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* LIBS=$oz_saved_LIBS oz_add_libs=no echo "$ac_t""no" 1>&6 fi rm -f conftest* fi fi rm -f conftest* done fi rm -f conftest* fi fi rm -f conftest* LDFLAGS=$oz_tmp_ldflags LIBS=$oz_tmp_libs oz_cv_lib_path_ldflags_gmp2_mpz_init=$oz_add_ldflags oz_cv_lib_path_libs_gmp2_mpz_init=$oz_add_libs fi if test "$oz_add_ldflags" = no; then oz_gmp_lib_found=no else if test "$oz_add_ldflags" != yes && test "$oz_add_ldflags" != no; then oz_tmp_ok=yes for oz_tmp in $LDFLAGS NONE; do if test "$oz_tmp" = "$oz_add_ldflags"; then oz_tmp_ok=no break fi done test "$oz_tmp_ok" = yes && LDFLAGS="$oz_add_ldflags${LDFLAGS:+ }$LDFLAGS" fi if test -n "$oz_add_libs" && test "$oz_add_libs" != yes && test "$oz_add_libs" != no; then LIBS="$oz_add_libs${LIBS:+ }$LIBS" fi oz_gmp_lib_found=gmp2 fi else if test "$oz_add_ldflags" != yes && test "$oz_add_ldflags" != no; then oz_tmp_ok=yes for oz_tmp in $LDFLAGS NONE; do if test "$oz_tmp" = "$oz_add_ldflags"; then oz_tmp_ok=no break fi done test "$oz_tmp_ok" = yes && LDFLAGS="$oz_add_ldflags${LDFLAGS:+ }$LDFLAGS" fi if test -n "$oz_add_libs" && test "$oz_add_libs" != yes && test "$oz_add_libs" != no; then LIBS="$oz_add_libs${LIBS:+ }$LIBS" fi oz_gmp_lib_found=gmp fi else if test "$oz_add_ldflags" != yes && test "$oz_add_ldflags" != no; then oz_tmp_ok=yes for oz_tmp in $LDFLAGS NONE; do if test "$oz_tmp" = "$oz_add_ldflags"; then oz_tmp_ok=no break fi done test "$oz_tmp_ok" = yes && LDFLAGS="$oz_add_ldflags${LDFLAGS:+ }$LDFLAGS" fi if test -n "$oz_add_libs" && test "$oz_add_libs" != yes && test "$oz_add_libs" != no; then LIBS="$oz_add_libs${LIBS:+ }$LIBS" fi oz_gmp_lib_found=gmp fi fi if test "$oz_gmp_lib_found" != no; then echo $ac_n "checking gmp version is at least 2""... $ac_c" 1>&6 echo "configure:3594: checking gmp version is at least 2" >&5 if test -z "$oz_cv_gmp_version_ok"; then cat > conftest.$ac_ext < TheVersion __GNU_MP_VERSION __GNU_MP_VERSION_MINOR EOF oz_tmp=`$CXXCPP $CPPFLAGS conftest.$ac_ext | egrep TheVersion`; rm -f conftest.$ac_ext 2>/dev/null OZ_GMP_MAJOR=`expr "$oz_tmp" : 'TheVersion *\([0-9]*\) '` OZ_GMP_MINOR=`expr "$oz_tmp" : 'TheVersion *[0-9]* *\([0-9]*\) *$'` if oz_tmp=`expr "$oz_tmp" : 'TheVersion \(.*\)$'`; then oz_tmp_got="$oz_tmp" oz_tmp_want="2" oz_tmp="$oz_tmp_got" oz_tmp=`echo $oz_tmp | sed -e 's/[a-z]/.\0/'` oz_tmp=`echo $oz_tmp | sed -e 's/[._-]/ /g'` oz_tmp_got=$oz_tmp oz_tmp="$oz_tmp_want" oz_tmp=`echo $oz_tmp | sed -e 's/[a-z]/.\0/'` oz_tmp=`echo $oz_tmp | sed -e 's/[._-]/ /g'` oz_tmp_want=$oz_tmp set $oz_tmp_got DONE oz_tmp__ok=yes for oz_tmp_cur in $oz_tmp_want; do case $oz_tmp_cur in DONE) case $1 in a-z) oz_tmp__ok=no;; *);; esac break ;; a-z) case $1 in DONE) break;; a-z) if test `expr $oz_tmp_cur '<=' $1` -eq 0; then oz_tmp__ok=no break fi ;; *) break ;; esac ;; *) case $1 in DONE) oz_tmp__ok=no break ;; a-z) oz_tmp__ok=no break ;; *) if test "$oz_tmp_cur" -lt "$1"; then break elif test "$oz_tmp_cur" -gt "$1"; then oz_tmp__ok=no break fi ;; esac ;; esac shift done oz_tmp_ok=$oz_tmp__ok test "$oz_tmp_ok" = yes && oz_cv_gmp_version_ok=$oz_tmp_ok else oz_tmp_ok=no fi oz_cv_gmp_version_major=$OZ_GMP_MAJOR oz_cv_gmp_version_minor=$OZ_GMP_MINOR echo "$ac_t""$oz_tmp_ok" 1>&6 else oz_tmp_ok=$oz_cv_gmp_version_ok OZ_GMP_MAJOR=$oz_cv_gmp_version_major OZ_GMP_MINOR=$oz_cv_gmp_version_minor echo "$ac_t""(cached) $oz_tmp_ok" 1>&6 fi oz_gmp_version_ok=$oz_tmp_ok fi if test "$oz_gmp_inc_found" = no; then echo "configure: warning: required GNU MP include file not found" 1>&2 elif test "$oz_gmp_lib_found" = no; then echo "configure: warning: required GNU MP lib not found" 1>&2 elif test "$oz_gmp_version_ok" = no; then echo "configure: warning: GNU MP version too old" 1>&2 fi if test "$oz_gmp_inc_found" = no || \ test "$oz_gmp_lib_found" = no || \ test "$oz_gmp_version_ok" = no; then { echo "configure: error: The GNU Multiple Precision Arithmetic Library (gmp) version 2 or higher is required to build the system. It can be retrieved from: ftp://ftp.gnu.org/pub/gnu/gmp/ The latest version at this time is 4.1.2 and is available packaged as the following archive: ftp://ftp.gnu.org/pub/gnu/gmp/gmp-4.1.2.tar.gz You may find a mirror archive closer to you by consulting: http://www.gnu.org/order/ftp.html " 1>&2; exit 1; } fi trap '' 1 2 15 cat > confcache <<\EOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs. It is not useful on other systems. # If it contains results you don't want to keep, you may remove or edit it. # # By default, configure uses ./config.cache as the cache file, # creating it if it does not exist already. You can give configure # the --cache-file=FILE option to use a different cache file; that is # what configure does when it calls configure scripts in # subdirectories, so they share the cache. # Giving --cache-file=/dev/null disables caching, for debugging configure. # config.status only pays attention to the cache file if you give it the # --recheck option to rerun configure. # EOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote substitution # turns \\\\ into \\, and sed turns \\ into \). sed -n \ -e "s/'/'\\\\''/g" \ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' ;; esac >> confcache if cmp -s $cache_file confcache; then : else if test -w $cache_file; then echo "updating cache $cache_file" cat confcache > $cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Any assignment to VPATH causes Sun make to only execute # the first set of double-colon rules, so remove it if not needed. # If there is a colon in the path, we need to keep it. if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' fi trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. cat > conftest.defs <<\EOF s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g s%\[%\\&%g s%\]%\\&%g s%\$%$$%g EOF DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` rm -f conftest.defs # Without the "./", some shells look in PATH for config.status. : ${CONFIG_STATUS=./config.status} echo creating $CONFIG_STATUS rm -f $CONFIG_STATUS cat > $CONFIG_STATUS </dev/null | sed 1q`: # # $0 $ac_configure_args # # Compiler output produced by configure, useful for debugging # configure, is in ./config.log if it exists. ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" for ac_option do case "\$ac_option" in -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; -version | --version | --versio | --versi | --vers | --ver | --ve | --v) echo "$CONFIG_STATUS generated by autoconf version 2.13" exit 0 ;; -help | --help | --hel | --he | --h) echo "\$ac_cs_usage"; exit 0 ;; *) echo "\$ac_cs_usage"; exit 1 ;; esac done ac_given_srcdir=$srcdir ac_given_INSTALL="$INSTALL" trap 'rm -fr `echo "lib/Makefile lib/support/DefaultURL.oz \ tools/Makefile \ demo/Makefile test/Makefile test/dp-bench/Makefile \ examples/Makefile elisp/Makefile elisp/mozart.el \ bin/Makefile bin/oz \ Makefile Makefile.boot ozengine.sh" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF $ac_vpsub $extrasub s%@SHELL@%$SHELL%g s%@CFLAGS@%$CFLAGS%g s%@CPPFLAGS@%$CPPFLAGS%g s%@CXXFLAGS@%$CXXFLAGS%g s%@FFLAGS@%$FFLAGS%g s%@DEFS@%$DEFS%g s%@LDFLAGS@%$LDFLAGS%g s%@LIBS@%$LIBS%g s%@exec_prefix@%$exec_prefix%g s%@prefix@%$prefix%g s%@program_transform_name@%$program_transform_name%g s%@bindir@%$bindir%g s%@sbindir@%$sbindir%g s%@libexecdir@%$libexecdir%g s%@datadir@%$datadir%g s%@sysconfdir@%$sysconfdir%g s%@sharedstatedir@%$sharedstatedir%g s%@localstatedir@%$localstatedir%g s%@libdir@%$libdir%g s%@includedir@%$includedir%g s%@oldincludedir@%$oldincludedir%g s%@infodir@%$infodir%g s%@mandir@%$mandir%g s%@SRCDIR@%$SRCDIR%g s%@SRCTOP@%$SRCTOP%g s%@BUILDTOP@%$BUILDTOP%g s%@host@%$host%g s%@host_alias@%$host_alias%g s%@host_cpu@%$host_cpu%g s%@host_vendor@%$host_vendor%g s%@host_os@%$host_os%g s%@MAKE@%$MAKE%g s%@SET_MAKE@%$SET_MAKE%g s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g s%@INSTALL_DATA@%$INSTALL_DATA%g s%@INSTALL_DIR@%$INSTALL_DIR%g s%@OZVERSION@%$OZVERSION%g s%@HOMEURL@%$HOMEURL%g s%@HOMECACHE@%$HOMECACHE%g s%@OZPLATFORM@%$OZPLATFORM%g s%@OZTOOL@%$OZTOOL%g s%@OZBUILDDATE@%$OZBUILDDATE%g s%@PLATFORM@%$PLATFORM%g s%@OZLOADSEP@%$OZLOADSEP%g s%@OZLOADWIN@%$OZLOADWIN%g s%@DENYS_EVENTS@%$DENYS_EVENTS%g s%@SITE_PROPERTY@%$SITE_PROPERTY%g s%@COMPILE_ELISP@%$COMPILE_ELISP%g s%@srcdira@%$srcdira%g s%@OZEXECFILE@%$OZEXECFILE%g s%@EMULATOR_EXE@%$EMULATOR_EXE%g s%@BOOTOZTOOL@%$BOOTOZTOOL%g s%@WINOZTOOLCXXFLAGS@%$WINOZTOOLCXXFLAGS%g s%@WINOZTOOLLDFLAGS@%$WINOZTOOLLDFLAGS%g s%@EXE_EXT@%$EXE_EXT%g s%@LN_S@%$LN_S%g s%@M4@%$M4%g s%@PERL@%$PERL%g s%@THEGZIP@%$THEGZIP%g s%@THEEMACS@%$THEEMACS%g s%@OZC@%$OZC%g s%@OZL@%$OZL%g s%@OZENGINE@%$OZENGINE%g s%@OZLOADCACHE@%$OZLOADCACHE%g s%@oz_picklecompression@%$oz_picklecompression%g s%@SHAREDIRS@%$SHAREDIRS%g s%@OZWSOCKLIB@%$OZWSOCKLIB%g s%@CPP@%$CPP%g CEOF EOF cat >> $CONFIG_STATUS <<\EOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. ac_file=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_cmds # Line after last line for current file. ac_more_lines=: ac_sed_cmds="" while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file else sed "${ac_end}q" conftest.subs > conftest.s$ac_file fi if test ! -s conftest.s$ac_file; then ac_more_lines=false rm -f conftest.s$ac_file else if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f conftest.s$ac_file" else ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" fi ac_file=`expr $ac_file + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_cmds` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case "$ac_file" in *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; *) ac_file_in="${ac_file}.in" ;; esac # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. # Remove last slash and all that follows it. Not all systems have dirname. ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then # The file is in a subdirectory. test ! -d "$ac_dir" && mkdir "$ac_dir" ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" # A "../" for each directory in $ac_dir_suffix. ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` else ac_dir_suffix= ac_dots= fi case "$ac_given_srcdir" in .) srcdir=. if test -z "$ac_dots"; then top_srcdir=. else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; *) # Relative path. srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" top_srcdir="$ac_dots$ac_given_srcdir" ;; esac case "$ac_given_INSTALL" in [/$]*) INSTALL="$ac_given_INSTALL" ;; *) INSTALL="$ac_dots$ac_given_INSTALL" ;; esac echo creating "$ac_file" rm -f "$ac_file" configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." case "$ac_file" in *Makefile*) ac_comsub="1i\\ # $configure_input" ;; *) ac_comsub= ;; esac ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` sed -e "$ac_comsub s%@configure_input@%$configure_input%g s%@srcdir@%$srcdir%g s%@top_srcdir@%$top_srcdir%g s%@INSTALL@%$INSTALL%g " $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file fi; done rm -f conftest.s* EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF chmod +x ozengine.sh exit 0 EOF chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 mozart-1.4.0.20080704/share/demo/0000775000000000000000000000000011033376117014463 5ustar rootrootmozart-1.4.0.20080704/share/demo/LMF/0000775000000000000000000000000011033101630015063 5ustar rootrootmozart-1.4.0.20080704/share/demo/LMF/ProcessBook.oz0000664000000000000000000000244606721247655017726 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 1999-05-21 14:21:01 +0200 (Fri, 21 May 1999) $ by $Author: schulte $ %%% $Revision: 11374 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import HTML Abstractions Application prepare ArgSpec = record(journey(single type:string default:"0") firstname(single type:string) lastname(single type:string) email(single type:string) url(single type:string)) define Argv = {Application.getCgiArgs ArgSpec} SE = {Abstractions.connect Argv.url} WhoAmI = customer(firstname: Argv.firstname lastname: Argv.lastname email: Argv.email) Journey = {String.toInt Argv.journey} {HTML.out 'Flight Information' if {SE book(WhoAmI Journey $)} then font(size:'+2' color:green 'Flight Successfully Booked') else font(size:'+2' color:red 'Sorry, Could not Book Flight') end} {Application.exit 0} end mozart-1.4.0.20080704/share/demo/LMF/HTML.oz0000664000000000000000000000205106721247655016231 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 1999-05-21 14:21:01 +0200 (Fri, 21 May 1999) $ by $Author: schulte $ %%% $Revision: 11374 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Open export out: HtmlOut prepare fun {HtmlStd Title Body} '#'('' html(head(title(Title)) 'body'(h1(Title) br Body))) end define proc {HtmlOut Title Body} {New class $ from Open.html Open.file prop final meth tag(T) Open.file, init(name:stdout) Open.html, header Open.html, tag(T) Open.file, close end end tag({HtmlStd Title Body}) _} end end mozart-1.4.0.20080704/share/demo/LMF/Abstractions.oz0000664000000000000000000000177206721246575020132 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 1999-05-21 14:11:41 +0200 (Fri, 21 May 1999) $ by $Author: schulte $ %%% $Revision: 11372 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Connection Pickle export Connect NewServer define fun {NewServer C M} S P={Port.new S} PS O = {New {Class.new [C] nil f(server:PS) nil} M} in thread {ForAll S proc {$ M} try {O M} catch _ then skip end end} end proc {PS M} {Port.send P M} end PS end fun {Connect Url} Server = {Connection.take {Pickle.load Url}} in proc {$ M} {Server M} end end end mozart-1.4.0.20080704/share/demo/LMF/Makefile0000664000000000000000000000153506724566245016563 0ustar rootrootCGIHOME = /usr/lib/mozart/bin OZC = ozc OZCFLAGS = OZL = ozl OZLFLAGS = -z 9 --execpath=$(CGIHOME)/ozengine -x COMPILE = $(OZC) -c $(OZCFLAGS) LINK = $(OZL) $(OZLFLAGS) FUNCTORS = \ Abstractions.ozf Book.ozf HTML.ozf ProcessBook.ozf \ Server.ozf SERVLETS = \ lmf.cgi lmf-book.cgi lmfs all: $(FUNCTORS) $(SERVLETS) lmf.cgi: $(FUNCTORS) $(LINK) Book.ozf -o lmf.cgi lmf-book.cgi: $(FUNCTORS) $(LINK) ProcessBook.ozf -o lmf-book.cgi lmfs: $(FUNCTORS) $(LINK) Server.ozf -o lmfs %.ozf: %.oz $(COMPILE) $< -o $@ .PHONY: install WWW = /home/chris/public_html/demo/ INSTFILES = \ $(WWW)/lmf.cgi $(WWW)/lmf-book.cgi $(HOME)/berlin/lmfs install: $(INSTFILES) $(WWW)/%.cgi: %.cgi install $< $@ $(HOME)/berlin/lmfs: lmfs install $< $@ .PHONY: clean veryclean clean: -rm -f $(FUNCTORS) *~ veryclean: clean -rm -f $(SERVLETS) mozart-1.4.0.20080704/share/demo/LMF/Server.oz0000664000000000000000000001016106721246575016734 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 1999-05-21 14:11:41 +0200 (Fri, 21 May 1999) $ by $Author: schulte $ %%% $Revision: 11372 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Tk OS Pickle Connection Application Abstractions prepare BaseDir = '/tmp/' IDB = [t(fr:'Saarbrücken' to:'London' price:576) t(fr:'Saarbrücken' to:'Miami' price:345) t(fr:'Saarbrücken' to:'San Francisco' price:812) t(fr:'Saarbrücken' to:'Hong Kong' price:640) t(fr:'Saarbrücken' to:'Hamburg' price:245) t(fr:'Saarbrücken' to:'Pittsburgh' price:560) t(fr:'Saarbrücken' to:'Munich' price:135) t(fr:'Saarbrücken' to:'Stockholm' price:420)] LogWidth = 50 LogHeight = 8 LogFont = '-adobe-helvetica-medium-r-normal-*-*-140*' LogBg = '#fffff0' fun {FindJourney Js JID} case Js of nil then false [] J|Jr then J.id==JID orelse {FindJourney Jr JID} end end fun {RemoveJourney Js JID} case Js of nil then nil [] J|Jr then if J.id==JID then Jr else J|{RemoveJourney Jr JID} end end end ArgSpec = record(url(single type: string default: BaseDir # 'ticket.ozp') db(single type: string default: BaseDir # 'tdb.ozp') title(single type: string default: 'Last Minute Flights Server')) define class LogWindow from Tk.text meth init(title:Title delete:Delete) W = {New Tk.toplevel tkInit(title: Title delete: Delete)} S = {New Tk.scrollbar tkInit(parent:W width:10)} in LogWindow, tkInit(parent: W width: LogWidth height: LogHeight bg: LogBg font: LogFont highlightthickness: 0) {Tk.addYScrollbar self S} {Tk.send pack(self S side:left fill:y)} end meth print(V) LogWindow,tk(insert 'end' V) LogWindow,tk(yview pickplace:'end') end meth show(V) LogWindow,print(V#'\n') end meth clear LogWindow,tk(delete '1.0' 'end') end end class TravelServer feat DbFile Text attr Id: 0 meth init(ThisDbFile Delete) self.DbFile = ThisDbFile self.Text = {New LogWindow init(title: 'Travel Server' delete: Delete)} end meth request(From $) {self.Text show('Request: '#if From==false then anonymous else From end)} try {Pickle.load self.DbFile} catch _ then nil end end meth book(By JID $) try DB = {Pickle.load self.DbFile} in if {FindJourney DB JID} then NDB = {RemoveJourney DB JID} in {OS.unlink self.DbFile} {Pickle.save NDB self.DbFile} {self.Text show('Booked: '#JID#' by: '# By.firstname#' '# By.lastname#' <'#By.email#'>')} true else false end catch _ then false end end meth add(J $) try DB = {Pickle.load self.DbFile} I = @Id NewDB = {AdjoinAt J id I}|DB in Id <- I + 1 {Pickle.save NewDB self.DbFile} {self.Text show('Added: '#I)} true catch _ then false end end end Argv = {Application.getCmdArgs ArgSpec} %% Create empty data base {Pickle.save nil Argv.db} %% Start server Server = {Abstractions.newServer TravelServer init(Argv.db proc {$} {OS.unlink Argv.db} {OS.unlink Argv.url} {Application.exit 0} end)} %% Add initial flights {ForAll IDB proc {$ J} {Server add(J _)} end} Gate = {New Connection.gate init(Server)} Ticket = {Gate getTicket($)} %% Write ticket to url {Pickle.save Ticket Argv.url} end mozart-1.4.0.20080704/share/demo/LMF/Book.oz0000664000000000000000000000433406721247655016365 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 1999-05-21 14:21:01 +0200 (Fri, 21 May 1999) $ by $Author: schulte $ %%% $Revision: 11374 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Abstractions Application OS HTML System prepare Url = "/tmp/ticket.ozp" ArgSpec = record(url(single type:string default:"/tmp/ticket.ozp")) define Argv = {Application.getCgiArgs ArgSpec} % {System.show url(Argv)} {HTML.out 'Last Minute Flights' try form(action: 'lmf-book.cgi' method: 'GET' h2('Personal Data') table(tr(td(label(for:firstname 'First name: ')) td(input(type:text name:firstname))) tr(td(label(for:lastname 'Last name: ')) td(input(type:text name:lastname))) tr(td(label(for:email 'E-Mail: ')) td(input(type:text name:email)))) h2('Available Flights') local SE = {Abstractions.connect Url} Fs = {SE request({OS.getEnv 'REMOTE_HOST'} $)} N = {Length Fs} div 2 As = {List.drop Fs N} Bs = {List.take Fs N} fun {MkTable Fs} table(cellpadding:2 border:1 bgcolor:'#ffe0e0' tr(th th('From') th('To') th('Price')) {List.toTuple '#' {Map Fs fun {$ J} tr(td(input(type: radio name: journey value: J.id)) td(J.fr) td(J.to) td(J.price)) end}}) end in table(width:'70%' tr(valign:top td({MkTable As}) td({MkTable Bs}))) end h2('Process') table(tr(td(input(type:submit value:'Book')) td(input(type:reset value:'Reset')))) h2('Server') table(tr(th('URL') td(input(type:hidden name:url value:Argv.url) Argv.url)))) catch E then font(size:'+2' color:red {Value.toVirtualString E 100 100}) % 'Sorry, could not connect to server') end} {Application.exit 0} end mozart-1.4.0.20080704/share/demo/Cutting/0000775000000000000000000000000011033376117016100 5ustar rootrootmozart-1.4.0.20080704/share/demo/Cutting/Compute.oz0000664000000000000000000001741006651575416020106 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 1999-01-21 11:01:50 +0100 (Thu, 21 Jan 1999) $ by $Author: schulte $ %%% $Revision: 10566 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Tk TkTools Search Script(compile: Compile) Configure(colors: Colors delays: Delays fonts: Fonts) export page: ComputePage define BgColor = Colors.bg BadColor = Colors.bad OkayColor = Colors.okay GoodColor = Colors.good NeutralColor = Colors.neutral GlassColor = Colors.glass CutColor = Colors.cut SketchColor = Colors.sketch CanvasBd = 10 PlateWidth = 15 ButtonWidth = 10 PlateBd = 3 Pad = 3 CanvasWidth = 250 CanvasHeight = 200 AnimDelay = Delays.wait CutDelay = Delays.cut class PlateCanvas from Tk.canvas attr Sol: unit BreakAnim: unit meth init(parent:P) Tk.canvas,tkInit(parent: P bg: BgColor width: CanvasWidth height: CanvasHeight) end meth sketch(Spec) X0 = 1 + CanvasBd X1 = X0 + Spec.x*PlateWidth + 1 Y0 = 1 + CanvasBd Y1 = Y0 + Spec.y*PlateWidth + 1 in Tk.canvas,tk(create rectangle X0 Y0 X1 Y1 fill: SketchColor outline: SketchColor width: 0) Tk.canvas,tk(configure scrollregion:q(0 0 {Max Spec.x * PlateWidth + 2 * CanvasBd CanvasWidth} {Max Spec.y * PlateWidth + 2 * CanvasBd CanvasHeight})) end meth display(S) Sol <- S D = S.d X = S.x Y = S.y in {For 1 {Width X} 1 proc {$ I} X0 = X.I * PlateWidth + 1 + PlateBd + CanvasBd X1 = X0 + D.I*PlateWidth - 1 - PlateBd Y0 = Y.I * PlateWidth + 1 + PlateBd + CanvasBd Y1 = Y0 + D.I*PlateWidth - 1 - PlateBd in {self tk(create rectangle X0 Y0 X1 Y1 fill: GlassColor width: 1 outline: black)} end} end meth Animate(CutInfo x:X y:Y) if {IsFree @BreakAnim} then X0#X1=X Y0#Y1=Y in case CutInfo of nil then skip [] info(cut:Cut dir:Dir L R) then case Dir of y then Tk.canvas,tk(create line Cut*PlateWidth+CanvasBd+2 Y0*PlateWidth+CanvasBd+2 Cut*PlateWidth+CanvasBd+2 Y1*PlateWidth+CanvasBd+2 tags: animate width: 1 fill: CutColor) {WaitOr @BreakAnim {Alarm CutDelay}} PlateCanvas,Animate(L x:X0#Cut y:Y0#Y1) PlateCanvas,Animate(R x:Cut#X1 y:Y0#Y1) [] x then Tk.canvas,tk(create line X0*PlateWidth+CanvasBd+2 Cut*PlateWidth+CanvasBd+2 X1*PlateWidth+CanvasBd+2 Cut*PlateWidth+CanvasBd+2 tags: animate width: 1 fill: CutColor) {WaitOr @BreakAnim {Alarm CutDelay}} PlateCanvas,Animate(L x:X0#X1 y:Y0#Cut) PlateCanvas,Animate(R x:X0#X1 y:Cut#Y1) end end end end meth animate S = @Sol in BreakAnim <- _ PlateCanvas,Animate(S.cuts x:0#S.dx y:0#S.dy) {WaitOr @BreakAnim {Alarm AnimDelay}} Tk.canvas,tk(delete animate) end meth stopAnim @BreakAnim = unit end meth clear Sol <- unit Tk.canvas,tk(delete all) end end class ComputePage from TkTools.note feat start stop animate plate edit status attr script: unit stopper: false meth init(parent:P edit:E) TkTools.note,tkInit(parent:P text:'Compute') ButtonFrame = {New Tk.frame tkInit(parent:self)} Start = {New Tk.button tkInit(parent: ButtonFrame text: 'Start' width: ButtonWidth action: self # start font: Fonts.normal)} Stop = {New Tk.button tkInit(parent: ButtonFrame text: 'Stop' width: ButtonWidth action: self # stop state: disabled font: Fonts.normal)} Anim = {New Tk.button tkInit(parent: ButtonFrame text: 'Animate' width: ButtonWidth action: self # animate state: disabled font: Fonts.normal)} GlassFrame = {New Tk.frame tkInit(parent:self)} PC = {New PlateCanvas init(parent: GlassFrame)} H = {New Tk.scrollbar tkInit(parent:GlassFrame orient:horizontal width:13)} V = {New Tk.scrollbar tkInit(parent:GlassFrame orient:vertical width:13)} Status = {New Tk.label tkInit(parent: ButtonFrame font: Fonts.normal text: '' width: 13 bg: NeutralColor relief: sunken bd: 1)} in {Tk.addXScrollbar PC H} {Tk.addYScrollbar PC V} {Tk.batch [grid(columnconfigure GlassFrame 0 weight:1) grid(rowconfigure GlassFrame 0 weight:1) grid(PC row:0 column:0 sticky:nsew) grid(H row:1 column:0 sticky:we) grid(V row:0 column:1 sticky:ns) grid(columnconfigure self 2 weight:1) grid(rowconfigure self 1 weight:1) grid(row:1 column:1 padx:Pad pady:Pad Start) grid(row:2 column:1 padx:Pad pady:Pad Stop) grid(row:3 column:1 padx:Pad pady:Pad {New Tk.canvas tkInit(parent:ButtonFrame width:0 height:20)}) grid(row:4 column:1 padx:Pad pady:Pad Status) grid(row:5 column:1 padx:Pad pady:Pad {New Tk.canvas tkInit(parent:ButtonFrame width:0 height:20)}) grid(row:6 column:1 padx:Pad pady:Pad Anim) grid(row:1 column:1 ButtonFrame sticky:nw) grid(row:1 column:2 GlassFrame sticky:ne) ]} self.start = Start self.stop = Stop self.animate = Anim self.plate = PC self.edit = E self.status = Status end meth start Script Stopper in lock Script = @script stopper <- Stopper {self.start tk(configure state:disabled)} {self.stop tk(configure state:normal)} {self.status tk(configure bg:NeutralColor text:'Computing.')} end case {Search.one.depth Script 1 ?Stopper} of nil then {self.stop tk(configure state:disabled)} if @stopper==true then {self.status tk(configure bg:OkayColor text:'Stopped.')} {self.start tk(configure state:normal)} else {self.status tk(configure bg:BadColor text:'No solution.')} end [] [Sol] then {self.stop tk(configure state:disabled)} {self.plate display(Sol)} {self.status tk(configure bg:GoodColor text:'Okay.')} {self.animate tk(configure state:normal)} end end meth stop lock S=@stopper in if {Procedure.is S} then stopper <- true {S} end end end meth animate lock {self.animate tk(configure state:disabled)} {self.plate animate} {self.animate tk(configure state:normal)} end end meth toBottom {self.plate stopAnim} ComputePage,stop end meth toTop lock Spec = {self.edit getSpec($)} in {self.stop tk(configure state:disabled)} {self.animate tk(configure state:disabled)} {self.plate clear} if {Record.foldL Spec.squares Number.'+' 0}>0 then script <- {Compile Spec} stopper <- false {self.start tk(configure state:normal)} {self.plate sketch(Spec)} {self.status tk(configure bg:NeutralColor text:'')} else {self.start tk(configure state:disabled)} {self.status tk(configure bg:BadColor text:'What?')} end end end end end mozart-1.4.0.20080704/share/demo/Cutting/Edit.oz0000664000000000000000000001222706651575416017360 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 1999-01-21 11:01:50 +0100 (Thu, 21 Jan 1999) $ by $Author: schulte $ %%% $Revision: 10566 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Tk TkTools Configure(colors: Colors fonts: Fonts) export page: EditPage prepare NoPlates = 5 Quantity = 60 PlateWidth = 5 Pad = 3 define EntryColor = Colors.entry BadColor = Colors.bad GoodColor = Colors.good NeutralColor = Colors.neutral GlassColor = Colors.glass class PlateBar from Tk.canvas prop locking feat d attr Pos:0 meth init(parent:P size:S) lock D = S * PlateWidth N = Quantity div (S + 1) XH = ~ Quantity * PlateWidth in Tk.canvas,tkInit(parent: P width: (Quantity - 1) * PlateWidth height: D bg: ivory) {For 0 N-1 1 proc {$ I} X0 = XH + I*(D+PlateWidth) + 1 X1 = X0 + D - 1 Y0 = 1 Y1 = Y0 + D - 1 in {self tk(create rectangle X0 Y0 X1 Y1 fill: GlassColor outline: black)} end} self.d = D end end meth set(N) lock M = N - @Pos in Pos <- N Tk.canvas,tk(move all M*(self.d + PlateWidth) 0) end end end class EditPage from TkTools.note feat squares plateBars status compute attr x:10 y:10 meth init(parent:P compute:C) TkTools.note,tkInit(parent:P text:'Edit') PlateFrame = {New TkTools.textframe tkInit(parent: self font: Fonts.normal text: 'Glass Plates')} self.squares = {Dictionary.new} self.plateBars = {MakeTuple bars NoPlates} TicklePackPlates = {ForThread 1 NoPlates 1 fun {$ Tcls D} L = {New Tk.label tkInit(parent: PlateFrame.inner font: Fonts.normal text: D#'x'#D)} E = {New TkTools.numberentry tkInit(parent: PlateFrame.inner font: Fonts.bold min: 0 max: Quantity div (D + 1) width: 2 action: self # plate(D))} {E.entry tk(configure bg:EntryColor)} G = {New PlateBar init(parent:PlateFrame.inner size:D)} in self.plateBars.D = G (grid(row:D column:1 L padx:Pad pady:Pad sticky:n) | grid(row:D column:2 E padx:Pad pady:Pad sticky:n) | grid(row:D column:3 G padx:Pad pady:Pad sticky:n) | Tcls) end nil} TargetFrame = {New TkTools.textframe tkInit(parent: self font: Fonts.normal text: 'Target Plate')} XL = {New Tk.label tkInit(parent: TargetFrame.inner font: Fonts.normal text: 'X')} XE = {New TkTools.numberentry tkInit(parent: TargetFrame.inner min: 1 val: 10 max: 50 width: 2 font: Fonts.bold action: self # set(x))} {XE.entry tk(configure bg:EntryColor)} YL = {New Tk.label tkInit(parent: TargetFrame.inner font: Fonts.normal text: 'Y')} YE = {New TkTools.numberentry tkInit(parent: TargetFrame.inner min: 1 val: 10 max: 50 width: 2 font: Fonts.bold action: self # set(y))} {YE.entry tk(configure bg:EntryColor)} CL = {New Tk.label tkInit(parent: TargetFrame.inner font: Fonts.normal text: '' width: 26 bg: NeutralColor relief: sunken bd: 1)} in self.status = CL self.compute = C {Tk.batch {Append TicklePackPlates [grid(row:1 column:1 XL padx:Pad pady:Pad sticky:n) grid(row:1 column:2 XE padx:Pad pady:Pad sticky:n) grid(row:1 column:3 {New Tk.canvas tkInit(parent:TargetFrame.inner width:10 height:1)} sticky:w) grid(row:1 column:4 YL padx:Pad pady:Pad sticky:w) grid(row:1 column:5 YE padx:Pad pady:Pad sticky:w) grid(row:1 column:6 {New Tk.canvas tkInit(parent:TargetFrame.inner width:10 height:1)} sticky:w) grid(row:1 column:7 CL padx:Pad pady:Pad sticky:w) grid(row:1 column:1 padx:Pad pady:Pad PlateFrame) grid(row:2 column:1 padx:Pad pady:Pad TargetFrame sticky:ew)]}} end meth UpdateStatus Cap = @x * @y Use = {FoldL {Dictionary.entries self.squares} fun {$ Use D#N} D*D*N + Use end 0} Col#Txt = if Cap < Use then BadColor # 'Plate too small.' else GoodColor # 'Plate possibly large enough.' end in {self.status tk(configure text: Txt bg: Col)} end meth plate(D N) {self.plateBars.D set(N)} {Dictionary.put self.squares D N} EditPage,UpdateStatus end meth set(Attr X) Attr <- X EditPage,UpdateStatus end meth getSpec($) spec(x:@x y:@y squares:{Dictionary.toRecord spec self.squares}) end end end mozart-1.4.0.20080704/share/demo/Cutting/Configure.oz0000664000000000000000000000211206651575416020404 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 1999-01-21 11:01:50 +0100 (Thu, 21 Jan 1999) $ by $Author: schulte $ %%% $Revision: 10566 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Tk(font) export fonts: Fonts colors: Colors delays: Delays prepare Colors = colors(glass: steelblue1 cut: firebrick sketch: c(202 225 255) entry: wheat bad: c(238 44 44) okay: c(255 127 0) good: c(180 238 180) neutral: ivory bg: ivory) Delays = delays(cut: 400 wait: 1200) define Fonts = fonts(normal: {New Tk.font tkInit(family:helvetica size:~12)} bold: {New Tk.font tkInit(family:helvetica size:~12 weight:bold)} ) end mozart-1.4.0.20080704/share/demo/Cutting/Script.oz0000664000000000000000000001655606651575416017750 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 1999-01-21 11:01:50 +0100 (Thu, 21 Jan 1999) $ by $Author: schulte $ %%% $Revision: 10566 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import FD Schedule export compile: Compile prepare local fun {Expand N I Is} if N>0 then I|{Expand N-1 I+1 Is} else Is end end fun {Get J IN Is} if J>0 then I#N=IN.J in {Expand N I {Get J-1 IN Is}} else Is end end in fun {IN2Is IN} {Get {Width IN} IN nil} end end local fun {Get J IN} N=IN.J.2 in if N>0 then J else {Get J+1 IN} end end in fun {GetMinSizeIN IN} {Get 1 IN} end end local fun {Get J IN} I#N=IN.J in if N>0 then I else {Get J-1 IN} end end in fun {GetFirstIN IN} {Get {Width IN} IN} end end local fun {Get J IN A} if J>0 then {Get J-1 IN IN.J.2*J*J+A} else A end end in fun {GetAreaIN IN} {Get {Width IN} IN 0} end end define fun {Compile Spec} %% Specification is as follows: %% Spec.x, Spec.y: size of the target plate %% Spec.squares.D=N: N squares of size D %% Number of all squares N = {Record.foldL Spec.squares Number.'+' 0} %% Dimension of X and Y DX = Spec.x DY = Spec.y %% MaxSize = {List.last {Arity Spec.squares}} SizeToArea = {MakeTuple '#' MaxSize} {For 1 MaxSize 1 proc {$ I} SizeToArea.I=I*I end} %% Mapping: Sqs -> Size SqsSize = {MakeTuple '#' N} %% Mapping: Sqs -> Area SqsArea = {MakeTuple '#' N} %% Initialize area and size {Record.foldRInd Spec.squares fun {$ D M I} {For I I+M-1 1 proc {$ J} SqsSize.J=D SqsArea.J=D*D end} I+M end 1 _} in proc {$ Root} SqsX0 % left coordinates SqsX1 % right coordinates SqsY0 % upper coordinates SqsY1 % lower coordinates Cuts % cut information local local proc {Do J IN MN SqsXY0 SqsXY1 Cut} if J>0 then I#N=IN.J M=MN.J in {FD.distribute generic(value:mid) [M]} {For I I+M-1 1 proc {$ I} SqsXY1.I =<: Cut end} {For I+M I+N-1 1 proc {$ I} SqsXY0.I >=: Cut end} {Do J-1 IN MN SqsXY0 SqsXY1 Cut} end end in proc {Position IN MN SqsXY0 SqsXY1 Cut} {Do MaxSize IN MN SqsXY0 SqsXY1 Cut} end end local fun {Do J IN MN ?LIN ?RIN LN} if J>0 then I#N=IN.J M=MN.J in LIN.J = I #M RIN.J = (I+M)#N-M {Do J-1 IN MN LIN RIN LN+M} else LN end end in fun {MakeLRIN IN MN ?LIN ?RIN} LIN = {MakeTuple '#' MaxSize} RIN = {MakeTuple '#' MaxSize} {Do {Width IN} IN MN LIN RIN 0} end end proc {FindXY IN MN I MinSize Area XY0 XY1 DYX SqsXY0 SqsXY1 ?Cut} AreaL = {FD.decl} in Cut = {FD.decl} %% cut must be right of first square Cut >=: XY0 + SqsSize.I %% cut must be left of at least the smallest square Cut + MinSize =<: XY1 %% numbers of squares for left side %% they occupy AreaL {FD.sumC SizeToArea MN '=:' AreaL} %% which must fit the left of the cut AreaL =<: (Cut-XY0) * DYX %% not all squares must go to the left AreaL <: Area %% position the squares {FD.distribute mid [Cut]} {Position IN MN SqsXY0 SqsXY1 Cut} end fun {FindN N IN X0 X1 Y0 Y1} I = {GetFirstIN IN} Area = {GetAreaIN IN} MinSize = {GetMinSizeIN IN} MN = {Record.map IN fun {$ _#N} {FD.int 0#N} end} in %% place first square SqsX0.I=X0 SqsY0.I =Y0 %% mapping of sizes to number of squares on left side choice Cut={FindXY IN MN I MinSize Area X0 X1 Y1-Y0 SqsX0 SqsX1} LIN RIN LN={MakeLRIN IN MN ?LIN ?RIN} in info(cut:Cut dir:y {Find LN LIN X0 Cut Y0 Y1} {Find N-LN RIN Cut X1 Y0 Y1}) [] Cut={FindXY IN MN I MinSize Area Y0 Y1 X1-X0 SqsY0 SqsY1} LIN RIN LN={MakeLRIN IN MN ?LIN ?RIN} in info(cut:Cut dir:x {Find LN LIN X0 X1 Y0 Cut} {Find N-LN RIN X0 X1 Cut Y1}) end end fun {Find N IN X0 X1 Y0 Y1} case N of 0 then fail nil [] 1 then [I]={IN2Is IN} in SqsX0.I=X0 SqsY0.I=Y0 nil [] 2 then [I1 I2]={IN2Is IN} S1X0=SqsX0.I1 S1X1=SqsX1.I1 S1Y0=SqsY0.I1 S1Y1=SqsY1.I1 S2X0=SqsX0.I2 S2Y0=SqsY0.I2 in S1X0=X0 S1Y0=Y0 dis S2X0=X0 S2Y0=S1Y1 then info(cut:S1Y1 dir:x nil nil) [] S2X0=S1X1 S2Y0=Y0 then info(cut:S1X1 dir:y nil nil) end [] 3 then [I1 I2 I3]={IN2Is IN} S1X0=SqsX0.I1 S1X1=SqsX1.I1 S1Y0=SqsY0.I1 S1Y1=SqsY1.I1 S2X0=SqsX0.I2 S2X1=SqsX1.I2 S2Y0=SqsY0.I2 S2Y1=SqsY1.I2 S3X0=SqsX0.I3 S3Y0=SqsY0.I3 in S1X0=X0 S1Y0=Y0 dis S2X0=X0 S2Y0=S1Y1 S3X0=X0 S3Y0=S2Y1 then info(cut:S1Y1 dir:x nil info(cut:S2Y1 dir:x nil nil)) [] S2X0=X0 S2Y0=S1Y1 S3X0=S1X1 S3Y0=S1Y1 then info(cut:S1Y1 dir:x nil info(cut:S2X1 dir:y nil nil)) [] S2X0=S1X1 S2Y0=Y0 S3X0=S2X1 S3Y0=Y0 then info(cut:S1X1 dir:y nil info(cut:S2X1 dir:y nil nil)) [] S2X0=S1X1 S2Y0=Y0 S3X0=S2X0 S3Y0=S2Y1 then info(cut:S1X1 dir:y nil info(cut:S2Y1 dir:x nil nil)) end else {FindN N IN X0 X1 Y0 Y1} end end in fun {FindCuts} IN={MakeTuple '#' MaxSize} in {ForThread MaxSize 1 ~1 fun {$ I Size} N={CondSelect Spec.squares Size 0} in IN.Size = I#N I+N end 1 _} {Find N IN 0 DX 0 DY} end end proc {Fit SqsXY Cap} {Schedule.cumulative [{Arity SqsXY}] SqsXY SqsSize SqsSize [Cap]} end in SqsX0 = {MakeTuple '#' N} SqsX1 = {MakeTuple '#' N} SqsY0 = {MakeTuple '#' N} SqsY1 = {MakeTuple '#' N} Root = root(x:SqsX0 y:SqsY0 d:SqsSize dx:DX dy:DY cuts:Cuts) %% Set up problem variables {For 1 N 1 proc {$ I} Size = SqsSize.I X0 = {FD.int 0#{Max 0 DX-Size}} Y0 = {FD.int 0#{Max 0 DY-Size}} X1 = {FD.decl} Y1 = {FD.decl} in X1 =: X0 + Size Y1 =: Y0 + Size SqsX0.I = X0 SqsY0.I = Y0 SqsX1.I = X1 SqsY1.I = Y1 end} %% The squares must fit the target {FD.sum SqsArea '=<:' DX*DY} %% Fix some freedom for first square (wolg) SqsX0.1=0 SqsY0.1=0 %% Remove permutations of equally-sized squares by ordering them {For 1 N-1 1 proc {$ I} I1=I+1 in if SqsSize.I==SqsSize.I1 then %% This is respected by the no overlap SqsX0.I =<: SqsX0.I1 end end} %% No Overlaps allowed {FD.distinct2 SqsX0 SqsSize SqsY0 SqsSize} %% In any direction (be it x or y) the squares must %% fit into the height/width of the rectangle {Fit SqsX0 DY} {Fit SqsY0 DX} %% The diffuclt part: find the cuts Cuts = {FindCuts} end end end mozart-1.4.0.20080704/share/demo/Cutting/Main.oz0000664000000000000000000000210506651575416017351 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 1999-01-21 11:01:50 +0100 (Thu, 21 Jan 1999) $ by $Author: schulte $ %%% $Revision: 10566 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Tk TkTools Edit(page) Compute(page) Application(exit) define T = {New Tk.toplevel tkInit(title: 'Glass Plates' delete: Application.exit # 0 withdraw: true)} B = {New TkTools.notebook tkInit(parent: T)} E = {New Edit.page init(parent: B compute: C)} C = {New Compute.page init(parent: B edit: E)} in {B add(E)} {B add(C)} {Tk.batch [pack(B) update(idletasks) wm(deiconify T) wm(resizable T false false)]} end mozart-1.4.0.20080704/share/demo/DemoUrls.oz0000664000000000000000000000115207336171317016574 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 2001-08-14 11:43:43 +0200 (Tue, 14 Aug 2001) $ by $Author: schulte $ %%% $Revision: 14106 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor export Image prepare Image = 'x-oz://doc/demo/applets/images/' end mozart-1.4.0.20080704/share/demo/JobShop/0000775000000000000000000000000011033376117016027 5ustar rootrootmozart-1.4.0.20080704/share/demo/JobShop/Configure.oz0000664000000000000000000000240006651575416020333 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1997, 1998 %%% %%% Last change: %%% $Date: 1999-01-21 11:01:50 +0100 (Thu, 21 Jan 1999) $ by $Author: schulte $ %%% $Revision: 10566 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor prepare MaxRes = 10 MaxJobs = 10 MaxDur = 10 MaxSpan = 1000 ResColors = ('deep sky blue' # green3 # tomato2 # firebrick4 # wheat3 # palegoldenrod # pink2 # cyan4 # darkorange # darkorchid) DurUnit = 16 DurFrame = 4 JobDistance = DurUnit + 4 import Tk(font) define Text = {New Tk.font tkInit(family:helvetica size:~12)} TextBold = {New Tk.font tkInit(family:helvetica size:~12 weight:bold)} Type = {New Tk.font tkInit(family:courier size:~12)} TypeSmall = {New Tk.font tkInit(family:courier size:~10 weight:bold)} export MaxRes MaxJobs MaxDur MaxSpan ResColors DurUnit DurFrame JobDistance Text TextBold Type TypeSmall end mozart-1.4.0.20080704/share/demo/JobShop/Tools.oz0000664000000000000000000001630106651575416017517 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1997, 1998 %%% %%% Last change: %%% $Date: 1999-01-21 11:01:50 +0100 (Thu, 21 Jan 1999) $ by $Author: schulte $ %%% $Revision: 10566 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import TkTools Tk Explorer Configure(text: Helv typeSmall: SmallCourierBold resColors: ResColors maxDur: MaxDur maxRes: MaxRes) export 'class': Tools define local HideY = 1000 Rows = 2 Cols = MaxRes div Rows CellSize = 20 CellBorder = 1 CellFrame = 1 CellDelta = CellBorder + CellFrame in class ResourceTool from TkTools.textframe feat Canvas DisableTag Action attr Selected: unit Enabled: false Resource: 1 meth tkInit(parent:P action:A) TkTools.textframe, tkInit(parent:P font:Helv text:'Resource') CA = {New Tk.canvas tkInit(parent: self.inner width: CellSize * Cols + 2 height: CellSize * Rows + 2 xscrollinc: 1 yscrollinc: 1)} DT = {New Tk.canvasTag tkInit(parent:CA)} in {DT tkBind(event:'<1>' action:self#enable)} {CA tk(yview scroll ~2 units)} {CA tk(xview scroll ~2 units)} {For 1 Rows 1 proc {$ R} Y = (Rows - R) * CellSize in {For 1 Cols 1 proc {$ C} X = (Cols - C) * CellSize Res = (R-1)*Cols + C T = {New Tk.canvasTag tkInit(parent:CA)} in {CA tk(create rectangle X + CellDelta Y + CellDelta X + CellSize - CellDelta Y + CellSize - CellDelta fill: ResColors.Res width: 1 outline: white tags: T)} {CA tk(create rectangle X + CellDelta Y + CellDelta X + CellSize - CellDelta Y + CellSize - CellDelta fill: gray50 outline: '' stipple: gray50 tags: q(T DT))} {T tkBind(event: '<1>' action: self # Choose(Res T))} if Res==MaxRes then Selected <- T end end} end} self.DisableTag = DT self.Canvas = CA self.Action = A ResourceTool, Choose(MaxRes @Selected) {Tk.send pack(CA)} end meth Choose(Res Tag) {@Selected tk(itemconfigure width:1 outline:white)} {Tag tk(itemconfigure width:CellFrame+1 outline:black)} Selected <- Tag Resource <- Res end meth getRes($) @Resource end meth disable if @Enabled then {self.DisableTag tk(move 0 HideY)} Enabled <- false end end meth enable if @Enabled then skip else {self.DisableTag tk(move 0 ~HideY)} Enabled <- true {self.Action} end end end end local HideY = 1000 Rows = 2 Cols = MaxDur div Rows CellSize = 20 CellBorder = 1 CellFrame = 1 CellDelta = CellBorder + CellFrame in class DurationTool from TkTools.textframe feat Canvas DisableTag Action attr Selected: unit Enabled: false Duration: 1 meth tkInit(parent:P action:A) TkTools.textframe, tkInit(parent: P font: Helv text: 'Duration') CA = {New Tk.canvas tkInit(parent: self.inner width: CellSize * Cols + 2 height: CellSize * Rows + 2 xscrollinc: 1 yscrollinc: 1)} DT = {New Tk.canvasTag tkInit(parent:CA)} in {CA tk(yview scroll ~2 units)} {CA tk(xview scroll ~2 units)} {DT tkBind(event:'<1>' action:self#enable)} {For 1 Rows 1 proc {$ R} Y = (Rows - R) * CellSize in {For 1 Cols 1 proc {$ C} X = (Cols - C) * CellSize Dur = (Rows-R)*Cols + Cols-C+1 T1 = {New Tk.canvasTag tkInit(parent:CA)} T2 = {New Tk.canvasTag tkInit(parent:CA)} in if Dur=' action: self # Choose(Dur T1))} end if Dur==1 then Selected <- T1 end end} end} self.DisableTag = DT self.Canvas = CA self.Action = A DurationTool, Choose(1 @Selected) {Tk.send pack(CA)} end meth Choose(Dur Tag) {@Selected tk(itemconfigure width:1 outline:white)} {Tag tk(itemconfigure width:CellFrame+1 outline:black)} Selected <- Tag Duration <- Dur end meth getDur($) @Duration end meth disable if @Enabled then {self.DisableTag tk(move 0 HideY)} Enabled <- false end end meth enable if @Enabled then skip else {self.DisableTag tk(move 0 ~HideY)} Enabled <- true {self.Action} end end end end class Tools from TkTools.note feat Board attr Current:create(MaxRes 1) meth tkInit(parent:P board:B) TkTools.note,tkInit(parent:P text:'Edit') Var = {New Tk.variable tkInit(create)} proc {ResA} {DurT disable} {Var tkSet(none)} Current <- resource(fun {$} {ResT getRes($)} end) end ResT = {New ResourceTool tkInit(parent:self action:ResA)} proc {DurA} {ResT disable} {Var tkSet(none)} Current <- duration(fun {$} {DurT getDur($)} end) end DurT = {New DurationTool tkInit(parent:self action:DurA)} proc {CreA} {ResT disable} {DurT disable} Current <- create({ResT getRes($)} {DurT getDur($)}) end CreT = {New Tk.radiobutton tkInit(parent: self var: Var val: create text: 'Create Task' action: CreA font: Helv relief: ridge bd: 2 anchor: w)} proc {DelA} {ResT disable} {DurT disable} Current <- delete end DelT = {New Tk.radiobutton tkInit(parent: self var: Var val: delete text: 'Delete Task' action: DelA font: Helv relief: ridge bd: 2 anchor: w)} in {Tk.batch [pack(ResT DurT padx:2 fill:x) pack(CreT DelT pady:1 ipadx:2 fill:x)]} {DurT disable} {ResT disable} self.Board = B end meth getTool($) @Current end meth toTop {self.Board setEdit} {Explorer.object close} end end end mozart-1.4.0.20080704/share/demo/JobShop/Scheduler.oz0000664000000000000000000001066306771377036020343 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1997 %%% %%% Last change: %%% $Date: 1999-09-20 11:27:58 +0200 (Mon, 20 Sep 1999) $ by $Author: schulte $ %%% $Revision: 12069 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Search Tk TkTools Explorer Compiler(compile: Compile) at 'Compiler.ozf' Configure(text:Helv textBold:HelvBold) export 'class': Scheduler define class Scheduler from TkTools.note feat Span Reset Next Best Stop Exp Board Solver attr Stamp: 0 Problem: proc {$ _} skip end meth tkInit(parent:P board:B) TkTools.note,tkInit(parent:P text:'Schedule') SpanL = {New Tk.label tkInit(parent:self text:'Make span:' font:Helv)} ValL = {New Tk.label tkInit(parent:self text:0 font:HelvBold width:5 bg:wheat relief:sunken bd:1 anchor:e)} ResetB= {New Tk.button tkInit(parent:self text:'Reset' width:9 font:Helv action:self#reset)} NextB = {New Tk.button tkInit(parent:self text:'Next' width:9 font:Helv action:self#next state:disabled)} BestB = {New Tk.button tkInit(parent:self text:'Best' width:9 font:Helv action:self#best state:disabled)} StopB = {New Tk.button tkInit(parent:self text:'Stop' width:9 font:Helv action:self#stop state:disabled)} ExpB = {New Tk.button tkInit(parent:self text:'Search Tree' width:9 font:Helv action:self#explore)} in {Tk.batch [grid(SpanL column:0 row:0 pady:6 padx:4) grid(ValL column:1 row:0 pady:6 padx:4) grid({New Tk.frame tkInit(parent:self height:5)} column:0 row:1 columnspan:2) grid(ResetB column:0 row:2 columnspan:2) grid(NextB column:0 row:3 columnspan:2) grid(BestB column:0 row:4 columnspan:2) grid(StopB column:0 row:5 columnspan:2) grid({New Tk.frame tkInit(parent:self height:5)} column:0 row:6 columnspan:2) grid(ExpB column:0 row:7 columnspan:2 pady:3) ]} self.Board = B self.Solver = {New Search.object script(proc {$ _} skip end)} self.Span = ValL self.Reset = ResetB self.Next = NextB self.Best = BestB self.Stop = StopB self.Exp = ExpB end meth setSol(I S) if I==@Stamp then {self.Stop tk(configure state:disabled)} case S of nil then {self.Next tk(configure state:disabled)} {self.Best tk(configure state:disabled)} {self.Span tk(configure bg:cyan4)} [] [S] then {self.Next tk(configure state:normal)} {self.Best tk(configure state:normal)} {self.Board setSol(S)} {self.Span tk(configure text:S.pe)} else {self.Next tk(configure state:normal)} {self.Best tk(configure state:normal)} end end end meth reset NS = @Stamp+1 in Stamp <- NS {self.Solver stop} {self.Span tk(configure text:'' bg:wheat)} {self.Next tk(configure state:normal)} {self.Best tk(configure state:normal)} {self.Stop tk(configure state:disabled)} {self.Board setEdit} Problem <- {Compile {self.Board getSpec($)}} {self.Solver script(@Problem proc {$ O N} O.pe >: N.pe end)} end meth next {self.Next tk(configure state:disabled)} {self.Best tk(configure state:disabled)} {self.Stop tk(configure state:normal)} {self setSol(@Stamp {self.Solver next($)})} end meth SearchBest(S) case {self.Solver next($)} of [T] then {self.Span tk(configure text:T.pe)} {self.Board setSol(T)} {self SearchBest(S)} elseof T then {self setSol(S T)} end end meth best {self.Next tk(configure state:disabled)} {self.Best tk(configure state:disabled)} {self.Stop tk(configure state:normal)} {self SearchBest(@Stamp)} end meth stop {self.Solver stop} end meth explore {Explorer.object all(@Problem proc {$ O N} O.pe >: N.pe end)} end meth setSpan(S) {self.Span tk(configure text:S.pe)} end meth toTop Scheduler, reset end end end mozart-1.4.0.20080704/share/demo/JobShop/Examples.oz0000664000000000000000000000222006651575416020170 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1997 %%% %%% Last change: %%% $Date: 1999-01-21 11:01:50 +0100 (Thu, 21 Jan 1999) $ by $Author: schulte $ %%% $Revision: 10566 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor export Mt10 Small prepare Mt10 = [[2#1 7#2 1#3 3#4 4#5 1#6 6#7 5#8 4#9 2#10] [4#1 9#3 7#5 1#10 6#4 2#2 4#7 4#6 7#8 3#9] [9#2 8#1 3#4 7#3 9#9 1#6 1#8 8#7 4#10 3#5] [8#2 9#3 7#1 9#5 1#7 5#9 8#8 9#4 2#10 4#6] [1#3 1#1 2#2 6#6 2#4 6#5 2#9 4#8 7#10 5#7] [8#3 1#2 5#6 9#4 4#9 7#10 4#1 6#7 1#5 2#8] [4#2 3#1 6#4 1#3 3#7 2#6 3#10 8#9 3#8 5#5] [3#3 8#1 4#2 7#6 3#5 8#7 1#9 4#10 3#8 7#4] [7#1 6#2 7#4 5#6 8#3 1#10 4#7 8#8 2#5 7#9] [8#2 1#1 6#3 1#7 6#9 7#10 4#6 5#4 9#5 4#8]] Small = [[1#1 1#1 4#2 1#1 1#1 1#1 4#1 1#2] [1#2 1#1 1#1 1#2 1#1 4#2 4#1 1#1]] endmozart-1.4.0.20080704/share/demo/JobShop/Main.oz0000664000000000000000000000535706651575416017314 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1997 %%% %%% Last change: %%% $Date: 1999-01-21 11:01:50 +0100 (Thu, 21 Jan 1999) $ by $Author: schulte $ %%% $Revision: 10566 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Application(exit getCmdArgs) Explorer(object) Tk(frame toplevel batch addXScrollbar addYScrollbar scrollbar) TkTools(notebook) TaskBoard('class') Scheduler('class') Tools('class') Configure(text) require Examples prepare ArgSpec = record(example(single type:atom default:no)) {Wait Examples} define Args = {Application.getCmdArgs ArgSpec} class Frontend from Tk.frame feat Board Sched meth tkInit(parent:P spec:Spec) Tk.frame, tkInit(parent:P) NB = {New TkTools.notebook tkInit(parent:self font:Configure.text)} T = {New Tools.'class' tkInit(parent:NB board:B)} S = {New Scheduler.'class' tkInit(parent:NB board:B)} F = {New Tk.frame tkInit(parent:self)} B = {New TaskBoard.'class' tkInit(parent:F tools:T spec:Spec)} H = {New Tk.scrollbar tkInit(parent:F orient:horizontal width:13)} V = {New Tk.scrollbar tkInit(parent:F orient:vertical width:13)} in {Tk.addXScrollbar B H} {Tk.addYScrollbar B V} {Tk.batch [grid(columnconfigure F 0 weight:1) grid(rowconfigure F 0 weight:1) grid(B row:0 column:0 sticky:nsew) grid(H row:1 column:0 sticky:we) grid(V row:0 column:1 sticky:ns) grid(columnconfigure self 0 weight:1) grid(rowconfigure self 0 weight:1) grid(F row:0 column:1 sticky:nsew padx:4 pady:4) grid(NB row:0 column:0 sticky:n padx:4 pady:4)]} {NB add(T)} {NB add(S)} self.Board = B self.Sched = S end meth displaySol(Sol) if {Record.all Sol IsDet} then {self.Board displaySol(Sol)} {self.Sched setSpan(Sol)} end end end Top = {New Tk.toplevel tkInit(title: 'Job Shop Scheduler' delete: Application.exit # 0 withdraw: true)} JSS = {New Frontend tkInit(parent: Top spec: if {HasFeature Examples Args.example} then Examples.(Args.example) else nil end)} {Explorer.object add(information proc {$ N X} {JSS displaySol(X)} end label: 'Display Job Shop Schedule')} {Tk.batch [pack(JSS) update wm(deiconify Top) wm(resizable Top false false)]} end mozart-1.4.0.20080704/share/demo/JobShop/TaskBoard.oz0000664000000000000000000001627706651575416020305 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1997, 1998 %%% %%% Last change: %%% $Date: 1999-01-21 11:01:50 +0100 (Thu, 21 Jan 1999) $ by $Author: schulte $ %%% $Revision: 10566 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Tk Configure(maxJobs: MaxJobs maxSpan: MaxSpan durUnit: DurUnit durFrame: DurFrame jobDistance: JobDistance type: Courier resColors: ResColors) export 'class': TaskBoard prepare fun {GetTaskName J T} {VirtualString.toAtom j#J#t#T} end fun {GetResourceName R} {VirtualString.toAtom r#R} end proc {TaskNameTo TN ?J ?T} S = {Atom.toString TN}.2 in J = {String.toInt {List.takeWhile S Char.isDigit}} T = {String.toInt {List.dropWhile S Char.isDigit}.2} end define OffX = 20 OffY = JobDistance class Task from Tk.canvasTag attr X0:0 Y0:0 X1:0 Duration: 0 Resource: unit EditMode: true meth init(parent:P resource:R duration:D x:X y:Y) Task, tkInit(parent:P) X0 <- X Y0 <- Y Duration <- D Resource <- R {P tk(create rectangle X Y - DurUnit div 2 X + D*DurUnit - DurFrame Y + DurUnit div 2 fill:ResColors.R tags:self)} Task, tkBind(event: '<1>' args: [int(y)] action: P # action(self)) end meth setDuration(D) Duration <- D Task, tk(coords @X0 @Y0 - DurUnit div 2 @X0 + D*DurUnit-DurFrame @Y0 + DurUnit div 2) end meth getDuration($) @Duration end meth setResource(R) Resource <- R Task, tk(itemconfigure fill:ResColors.R) end meth getResource($) @Resource end meth move(ByX) X0 <- @X0 + ByX Task,tk(move ByX 0) end meth setSol(S) X = S * DurUnit in if @EditMode then Task,tk(move X-@X0 0) else Task,tk(move X-@X1 0) end EditMode <- false X1 <- X end meth setEdit if @EditMode then skip else EditMode <- true Task,tk(move @X0-@X1 0) end end end class Job feat Number Parent attr Tasks: nil NextX: 0 meth init(parent:P number:N) self.Parent = P self.Number = N Tasks <- nil NextX <- 0 end meth newTask(resource:R duration:D) Tasks <- {Append @Tasks [{New Task init(parent: self.Parent resource: R duration: D x: @NextX y: (self.Number - 1) * JobDistance)}]} NextX <- @NextX + DurUnit * D end meth DelTask(Ts D $) case Ts of nil then nil [] T|Tr then if T==D then {ForAll Tr proc {$ T} {T move(~{D getDuration($)} * DurUnit)} end} Tr else T|Job,DelTask(Tr D $) end end end meth deleteTask(D) {D tk(delete)} NextX <- @NextX - {D getDuration($)} * DurUnit Tasks <- Job,DelTask(@Tasks D $) end meth SetDur(Ts S D) case Ts of nil then skip [] T|Tr then if T==S then {ForAll Tr proc {$ T} {T move((D-{S getDuration($)}) * DurUnit)} end} else Job,SetDur(Tr S D) end end end meth setDuration(T D) NextX <- @NextX + (D - {T getDuration($)}) * DurUnit Job,SetDur(@Tasks T D) {T setDuration(D)} end meth setSol(S) {Record.forAllInd S proc {$ A S} if A\=pa andthen A\=pe then J T in {TaskNameTo A ?J ?T} if self.Number==J then {{Nth @Tasks T} setSol(S)} end end end} end meth setEdit {ForAll @Tasks proc {$ T} {T setEdit} end} end meth getLastSpec($) case @Tasks of nil then nil else [{GetTaskName self.Number {Length @Tasks}}] end end meth getSpec($) {List.mapInd @Tasks fun {$ I T} Task={GetTaskName self.Number I} Dur ={T getDuration($)} Res ={GetResourceName {T getResource($)}} Pre = if I==1 then [pa] else [{GetTaskName self.Number I-1}] end in Task(dur:Dur pre:Pre res:Res) end} end end class TaskBoard from Tk.canvas feat Jobs Tools BackTag attr EditMode: true meth tkInit(parent:P tools:T spec:Spec) self.Jobs = {NewArray 1 MaxJobs 1} {For 1 MaxJobs 1 proc {$ J} {Put self.Jobs J {New Job init(number:J parent:self)}} end} self.Tools = T Tk.canvas, tkInit(parent: P bg: ivory width: 400 height: 220 bd:2 relief:sunken scrollregion: q(~OffX ~OffY MaxSpan * DurUnit MaxJobs * JobDistance) xscrollincrement: 1 yscrollincrement: 1) TaskBoard, tk(xview scroll ~OffX-6 units) TaskBoard, tk(yview scroll ~OffY units) self.BackTag = {New Tk.canvasTag tkInit(parent:self)} {For 1 MaxJobs 1 proc {$ J} Y = (MaxJobs - J) * JobDistance in {self tk(create text ~5 Y font:Courier text: if J==1 then 10 else 0#(MaxJobs - J + 1) end anchor:e)} end} {For 1 MaxJobs 1 proc {$ J} Y = (MaxJobs - J) * JobDistance Y0 = Y - JobDistance div 2 + 1 Y1 = Y + JobDistance div 2 - 1 in {self tk(create rectangle 0 Y0 MaxSpan*DurUnit Y1 fill:ivory outline:'' tags:self.BackTag)} end} {For 1 MaxJobs+1 1 proc {$ J} Y = (MaxJobs - J) * JobDistance + JobDistance div 2 in {self tk(create line 0 Y MaxSpan*DurUnit Y fill:gray50)} end} {self.BackTag tkBind(event: '<1>' args: [int(y)] action: self # action(unit))} {List.forAllInd Spec proc {$ JN Ts} J={Get self.Jobs JN} in {ForAll Ts proc {$ D#R} {J newTask(resource:R duration:D)} end} end} end meth action(T SY) if @EditMode then Y = SY - OffY J = {Get self.Jobs {Min {Max 1 (Y + JobDistance div 2 ) div JobDistance + 1} MaxJobs}} in case {self.Tools getTool($)} of create(R D) then {J newTask(resource:R duration:D)} [] delete then if T\=unit then {J deleteTask(T)} end [] resource(GR) then if T\=unit then {T setResource({GR})} end [] duration(GD) then if T\=unit then {J setDuration(T {GD})} end end end end meth getSpec($) pa(dur:0) | pe(dur:0 pre:{ForThread 1 MaxJobs 1 fun {$ Js J} {Append {{Get self.Jobs J} getLastSpec($)} Js} end nil}) | {ForThread 1 MaxJobs 1 fun {$ Ss J} {Append {{Get self.Jobs J} getSpec($)} Ss} end nil} end meth setEdit EditMode <- true {For 1 MaxJobs 1 proc {$ J} {{Get self.Jobs J} setEdit} end} end meth setSol(Sol) EditMode <- false {For 1 MaxJobs 1 proc {$ J} {{Get self.Jobs J} setSol(Sol)} end} end meth displaySol(Sol) {For 1 MaxJobs 1 proc {$ J} {{Get self.Jobs J} setSol(Sol)} end} end end end mozart-1.4.0.20080704/share/demo/JobShop/Compiler.oz0000664000000000000000000000360506651575416020174 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 1999-01-21 11:01:50 +0100 (Thu, 21 Jan 1999) $ by $Author: schulte $ %%% $Revision: 10566 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% %%% %%% The compiler is taken from the document: %%% Christian Schulte, Gert Smolka, Finite Domain Constraint %%% Programming in Oz. A Tutorial. %%% functor import FD Schedule export Compile define local fun {GetDur TaskSpec} {List.toRecord dur {Map TaskSpec fun {$ T} {Label T}#T.dur end}} end fun {GetStart TaskSpec} MaxTime = {FoldL TaskSpec fun {$ Time T} Time+T.dur end 0} Tasks = {Map TaskSpec Label} in {FD.record start Tasks 0#MaxTime} end fun {GetTasksOnResource TaskSpec} D={Dictionary.new} in {ForAll TaskSpec proc {$ T} if {HasFeature T res} then R=T.res in {Dictionary.put D R {Label T}|{Dictionary.condGet D R nil}} end end} {Dictionary.toRecord tor D} end in fun {Compile TaskSpec} Dur = {GetDur TaskSpec} TasksOnRes = {GetTasksOnResource TaskSpec} in proc {$ Start} Start = {GetStart TaskSpec} {ForAll TaskSpec proc {$ T} {ForAll {CondSelect T pre nil} proc {$ P} Start.P + Dur.P =<: Start.{Label T} end} end} {Schedule.serialized TasksOnRes Start Dur} {Schedule.firstsLastsDist TasksOnRes Start Dur} choice skip end {Record.forAll Start proc {$ S} S={FD.reflect.min S} end} end end end end mozart-1.4.0.20080704/share/demo/Trucks.oz0000664000000000000000000000475706651575416016342 0ustar rootroot%%% %%% Authors: %%% Martin Mueller (mmueller@ps.uni-sb.de) %%% %%% Contributors: %%% Christian Schulte %%% %%% Copyright: %%% Martin Mueller, 1998 %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 1999-01-21 11:01:50 +0100 (Thu, 21 Jan 1999) $ by $Author: schulte $ %%% $Revision: 10566 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor require DemoUrls(image) prepare ImageNames = [DemoUrls.image#'trucks/truck-right.ppm' DemoUrls.image#'trucks/truck-left.ppm'] Width = 600 Height = 165 TruckHeight = 60 Free = 25 import Tk TkTools Application define Images = {TkTools.images ImageNames} class Truck prop final from Time.repeat Tk.canvasTag attr state:off step:1 meth init(c:Canvas x:X<=0 y:Y<=0) Truck, tkInit(parent:Canvas) {Canvas tk(crea image X Y image:Images.'truck-right' tag:self)} {self setRepAll(delay: 100 number: Width div @step action: moveTruck final: switch)} {self tkBind(event:'<1>' action:self#toggle)} {self tkBind(event:'<2>' action:self#change(~1))} {self tkBind(event:'<3>' action:self#change(1))} end meth moveTruck Truck, tk(move @step 0) end meth switch step <- ~1 * @step if @step>0 then {self tk(itemconf image:Images.'truck-right')} else {self tk(itemconf image:Images.'truck-left')} end {self go} end meth toggle try case @state of off then state<-on {self go} [] on then state<-off {self stop} end catch system(...) then skip end end meth change(S) N = {self getRep(delay:$)} in {self setRepDelay({Max 2 N+S*(N div 2)})} end meth close Time.repeat, stop Tk.canvasTag, tkClose end end T = {New Tk.toplevel tkInit(title: 'Truckrace' delete: Application.exit # 0)} C = {New Tk.canvas tkInit(parent: T bg: white width: Width height: Height)} {Tk.send pack(C fill:both)} thread {New Truck init(c:C y:Free) _} end thread {New Truck init(c:C y:Free+TruckHeight) _} end thread {New Truck init(c:C y:Free+TruckHeight*2) _} end end mozart-1.4.0.20080704/share/demo/Bounce.oz0000664000000000000000000000643106776422322016264 0ustar rootroot%%% %%% Authors: %%% Michael Mehl (mehl@dfki.de) %%% Gert Smolka (smolka@dfki.de) %%% Christian Schulte %%% Joerg Wuertz (wuertz@dfki.de) %%% %%% Copyright: %%% Michael Mehl, 1998 %%% Gert Smolka, 1998 %%% Christian Schulte, 1998 %%% Joerg Wuertz, 1998 %%% %%% Last change: %%% $Date: 1999-10-05 18:18:26 +0200 (Tue, 05 Oct 1999) $ by $Author: kornstae $ %%% $Revision: 12123 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Tk Application(exit) define CanvasWidth = 400.0 CanvasHeight = 400.0 BallRadius = 50.0 XDelta = 5.0 YDelta = 5.0 Gravity = 3.0 Fraction = 0.9 RepeatTime = 100 Mouth = 30 MouthDelta = 5 BackColor = '#fffff0' BallColors = if Tk.isColor then red | blue | yellow | green | plum | cyan | tan | bisque | BallColors else black | BallColors end class Ball from Time.repeat Tk.canvasTag prop final attr x: 0.0 xd: XDelta y: 0.0 yd: YDelta mouth: Mouth d: ~MouthDelta meth init(X Y Canvas Color) Tk.canvasTag,tkInit(parent:Canvas) {Canvas tk(crea arc X Y X+BallRadius Y+BallRadius fill:Color start:30 extent:300 tag:self)} x <- X y <- Y Time.repeat, setRepAll(action:bounce delay:RepeatTime) thread try {self go} catch _ then skip end end end meth bounce %% increment @x and @d x <- @x + @xd if @x =< 0.0 then x <- 0.0 xd <- ~@xd elseif @x>=CanvasWidth-BallRadius then x <- CanvasWidth-BallRadius xd <- ~@xd end %% increment @y and @yd y <- @y - @yd yd <- @yd - Gravity if @y>=CanvasHeight-BallRadius then y <- CanvasHeight-BallRadius yd <- Fraction * ~@yd end Tk.canvasTag,tk(coords @x @y @x+BallRadius @y+BallRadius) %% set the new mouth mouth <- @mouth+@d if @mouth>=Mouth then mouth <- Mouth d <- ~@d elseif @mouth=' args: [float(x) float(y)])} {self tkBind(action: self # KillBall event: '<3>')} end meth NewBall(X Y) lock C|Cr = @Colors in Balls <- {New Ball init(X Y self C)}|@Balls Colors <- Cr end end meth KillBall lock case @Balls of nil then skip [] B|Br then {B close} Balls <- Br end end end end Top = {New Tk.toplevel tkInit(title: 'Oz Bouncer' delete: Application.exit # 0)} {Tk.send pack({New Manager init(parent:Top)})} end mozart-1.4.0.20080704/share/demo/Makefile.in0000664000000000000000000001573407363003573016546 0ustar rootroot# # Authors: # Christian Schulte # # Copyright: # Christian Schulte, 1998 # # Last change: # $Date: 2001-10-16 12:10:03 +0200 (Tue, 16 Oct 2001) $ by $Author: kornstae $ # $Revision: 14332 $ # # This file is part of Mozart, an implementation # of Oz 3: # http://www.mozart-oz.org # # See the file "LICENSE" or # http://www.mozart-oz.org/LICENSE.html # for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL # WARRANTIES. BUILDTOP = @BUILDTOP@ BUILDDIR = $(BUILDTOP)/share/demo VPATH = @srcdir@ SRCDIR = @srcdir@ SRCTOP = @SRCTOP@ PLATFORM = @PLATFORM@ PREFIX = @prefix@ OZDEMOSUFFIX = doc/demo/applets OZDEMO = $(PREFIX)/$(OZDEMOSUFFIX) SYSTEMDOC = $(PREFIX)/doc/system SYSTEMOZF = $(PREFIX)/cache/x-oz/doc/system SHELL = /bin/sh LN_S = @LN_S@ INSTALL = @INSTALL@ INSTALL_FILE = $(INSTALL) -m 444 INSTALL_DIR = @INSTALL_DIR@ COMPRESSLEVEL = @oz_picklecompression@ OZCFLAGS = OZC = @OZC@ OZLFLAGS = OZL = @OZL@ CYGPATH = $(SRCTOP)/share/lib/cygpath.sh CYG_BUILDDIR = $(shell $(CYGPATH) "$(BUILDDIR)") COMPILE = $(OZC) $(OZCFLAGS) -b $(CYG_BUILDDIR)/ -c ZCOMPILE = $(COMPILE) -z $(COMPRESSLEVEL) LINK = $(OZL) $(OZLFLAGS) -z $(COMPRESSLEVEL) # # The list of demos # APPLETNAMES = \ JobShop Cutting AnimatedQueens \ Bounce Trucks Transport Lift \ Board College DictClient \ Flowers Flowers3d ChatServer ChatClient APPLETS = \ $(APPLETNAMES:%=%.oza) DEMOAPPLETS = \ $(APPLETS:%=$(OZDEMO)/%) DIRS = \ JobShop Cutting Transport DictClient LMF Chat College Flowers all: dirs $(APPLETS) MT10.ozf # # Applet installation # install:: $(OZDEMO) $(DEMOAPPLETS) \ $(SYSTEMDOC) $(SYSTEMOZF) $(SYSTEMOZF)/MT10.ozf $(SYSTEMDOC)/MT10.oz $(OZDEMO) $(SYSTEMDOC) $(SYSTEMOZF): $(INSTALL_DIR) $@ $(OZDEMO)/%.oza: %.oza $(INSTALL_FILE) $< $@ $(SYSTEMOZF)/%: % $(INSTALL_FILE) $< $@ $(SYSTEMDOC)/%: % $(INSTALL_FILE) $< $@ # # Applet compilation # MT10.ozf: MT10.oz $(COMPILE) -z 9 $(shell $(CYGPATH) "$<") -o $@ # Chat Application Chat/%.ozf: Chat/%.oz $(COMPILE) $(shell $(CYGPATH) "$<") -o $@ ChatServer.oza: Chat/chat-server.ozf $(LINK) $< -o $@ ChatClient.oza: Chat/chat-client.ozf Chat/chat-gui.ozf $(LINK) $< -o $@ # JobShop application JobShop/%.ozf: JobShop/%.oz $(COMPILE) -b $(CYG_BUILDDIR)/JobShop/ $(shell $(CYGPATH) "$<") -o $@ JOBSHOP1 = \ Examples JOBSHOP2 = \ Main Scheduler Compiler TaskBoard Tools Configure JOBSHOPFUN1 = $(JOBSHOP1:%=JobShop/%.ozf) JOBSHOPFUN2 = $(JOBSHOP2:%=JobShop/%.ozf) $(JOBSHOPFUN2): $(JOBSHOPFUN1) JobShop.oza: $(JOBSHOPFUN2) $(LINK) JobShop/Main.ozf -o $@ # JobShop application Cutting/%.ozf: Cutting/%.oz $(COMPILE) -b $(CYG_BUILDDIR)/Cutting/ $(shell $(CYGPATH) "$<") -o $@ CUTTING = \ Configure Script Edit Compute Main CUTTINGFUN = $(CUTTING:%=Cutting/%.ozf) Cutting.oza: $(CUTTINGFUN) $(LINK) Cutting/Main.ozf -o $@ # Transport application Transport/%.ozf: Transport/%.oz $(COMPILE) -b $(CYG_BUILDDIR)/Transport/ $(shell $(CYGPATH) "$<") -o $@ TRANSPORT = \ AgentAbstractions Agents Configure Country \ Dialogs Germany Main Plan \ Randomizer Widgets TRANSPORTFUN = $(TRANSPORT:%=Transport/%.ozf) Transport/Country.ozf: Transport/Germany.oz Transport.oza: $(TRANSPORTFUN) $(LINK) Transport/Main.ozf -o $@ # Dict Client application DictClient/%.ozf: DictClient/%.oz $(COMPILE) -b $(CYG_BUILDDIR)/DictClient/ $(shell $(CYGPATH) "$<") -o $@ DICTCLIENT = Main NetDictionary TkDictionary GtkDictionary DICTCLIENTFUN = $(DICTCLIENT:%=DictClient/%.ozf) DictClient.oza: $(DICTCLIENTFUN) $(LINK) DictClient/Main.ozf -o $@ # JobShop application College/%.ozf: College/%.oz $(COMPILE) -DALONEDEMO -b $(CYG_BUILDDIR)/College/ $(shell $(CYGPATH) "$<") -o $@ COLLEGE = \ Main Common Controller Graphics Latex Scheduler COLLEGEFUN = $(COLLEGE:%=College/%.ozf) College.oza: $(COLLEGEFUN) $(LINK) College/Main.ozf -o $@ # Flowers Flowers/%.ozf: Flowers/%.oz $(COMPILE) -DALONEDEMO -b $(CYG_BUILDDIR)/College/ $(shell $(CYGPATH) "$<") -o $@ COLLEGE = \ Main Common Controller Graphics Latex Scheduler COLLEGEFUN = $(COLLEGE:%=College/%.ozf) Flowers.oza: Flowers/Flowers.ozf $(LINK) Flowers/Flowers.ozf -o $@ Flowers3d.oza: Flowers/Flowers3d.ozf $(LINK) Flowers/Flowers3d.ozf -o $@ # DemoUrls.ozf: DemoUrls.oz $(ZCOMPILE) $(shell $(CYGPATH) "$<") -o $@ %.ozf: DemoUrls.ozf $(APPLETS) Transport/Configure.ozf DictClient/TkDictionary.ozf: DemoUrls.ozf %.oza: %.oz $(ZCOMPILE) $(shell $(CYGPATH) "$<") -o $@ %.ozf: %.oz $(COMPILE) $(shell $(CYGPATH) "$<") -o $@ # Last Minute Flights LMF/%.ozf: LMF/%.oz $(COMPILE) -b $(CYG_BUILDDIR)/LMF/ $(shell $(CYGPATH) "$<") -o $@ LMF1 = \ Abstractions HTML Server Book ProcessBook LMFFUN = $(LMF1:%=LMF/%.ozf) include $(BUILDTOP)/share/Makefile.boot lmf-server: $(LMFFUN) $(LINK) -x $(OZEXECFILE) LMF/Server.ozf -o $@ lmf-book.cgi: $(LMFFUN) $(LINK) -x $(OZEXECFILE) LMF/Book.ozf -o $@ lmf-process.cgi: $(LMFFUN) $(LINK) -x $(OZEXECFILE) LMF/ProcessBook.ozf -o $@ .PHONY: lmf lmf: lmf-server lmf-book.cgi lmf-process.cgi # # Images # OZIMG = $(PREFIX)/cache/x-oz/$(OZDEMOSUFFIX)/images IMGDIRS = \ animated-queens lift transport trucks college dict-client OZIMGDIRS = $(IMGDIRS:%=$(OZIMG)/%) QUEENSIMGS0 = \ large-cross large-gray large-queen large-solid \ micro-gray micro-queen micro-solid \ middle-cross middle-gray middle-queen middle-solid \ small-gray small-queen small-solid \ tiny-gray tiny-queen tiny-solid LIFTIMGS0 = \ downE downF lift liftDown liftUp upE upF TRANSPORTIMGS0 = \ down \ truck_fill_left truck_fill_right \ truck_frame_left truck_frame_right \ truck_win_left truck_win_right TRUCKSIMGS0 = \ truck-left truck-right COLLEGEIMGS0 = \ title DICTCLIENTIMGS0 = \ dict OZIMAGES = \ $(QUEENSIMGS0:%=$(OZIMG)/animated-queens/%.xbm) \ $(LIFTIMGS0:%=$(OZIMG)/lift/%.xbm) \ $(TRANSPORTIMGS0:%=$(OZIMG)/transport/%.xbm) \ $(TRUCKSIMGS0:%=$(OZIMG)/trucks/%.ppm) \ $(COLLEGEIMGS0:%=$(OZIMG)/college/%.xbm) \ $(DICTCLIENTIMGS0:%=$(OZIMG)/dict-client/%.gif) install:: $(OZIMGDIRS) $(OZIMAGES) $(OZIMGDIRS): $(INSTALL_DIR) $@ $(OZIMG)/animated-queens/%.xbm: images/animated-queens/%.xbm $(INSTALL_FILE) $< $@ $(OZIMG)/lift/%.xbm: images/lift/%.xbm $(INSTALL_FILE) $< $@ $(OZIMG)/transport/%.xbm: images/transport/%.xbm $(INSTALL_FILE) $< $@ $(OZIMG)/trucks/%.ppm: images/trucks/%.ppm $(INSTALL_FILE) $< $@ $(OZIMG)/college/%.xbm: images/college/%.xbm $(INSTALL_FILE) $< $@ $(OZIMG)/dict-client/%: images/dict-client/% $(INSTALL_FILE) $< $@ # # Generic # .PHONY: check depend bootstrap clean veryclean distclean clean:: -rm -f *~ ./*/*~ ./*/*/*~ *.ozf ./*/*.ozf veryclean:: clean -rm -f *.oza distclean: veryclean -rm -f Makefile config.cache config.status config.log Makefile: Makefile.in ../config.status cd .. && ./config.status ../config.status: ../configure cd .. && ./config.status --recheck dirs: dirs="$(DIRS)"; \ for d in $$dirs; \ do if test ! -d $$d; then mkdir $$d; fi; \ done bootstrap: dirs $(MAKE) boot-all check: depend: mozart-1.4.0.20080704/share/demo/Flowers/0000775000000000000000000000000011033376117016104 5ustar rootrootmozart-1.4.0.20080704/share/demo/Flowers/Flowers.oz0000664000000000000000000000556006651575416020122 0ustar rootroot%%% %%% Authors: %%% Tobias Mueller (tmueller@ps.uni-sb.de) %%% %%% Copyright: %%% Tobias Mueller, 1998 %%% %%% Last change: %%% $Date: 1999-01-21 11:01:50 +0100 (Thu, 21 Jan 1999) $ by $Author: schulte $ %%% $Revision: 10566 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Tk Application define Width = 800.0 Height = 700.0 FlowerA = flower(xPos : 200.0 yPos : 40.0 angle : 1.570796327 start : x grammar : grammar(x:[f [l x] f [r x] l x] f:[f f]) delta : 0.383972435 stepWidth: 4.0 recDepth : 6) FlowerB = flower(xPos : 520.0 yPos : 115.0 angle : 1.570796327 start : f grammar : grammar(f:[f f r [r f l f l f] l [l f r f r f]]) delta : 0.383972435 stepWidth: 10.0 recDepth : 4) proc {TkFlowers} W = {New Tk.toplevel tkInit(title: 'Flowers' delete: proc{$} {W tkClose} {Application.exit 0} end)} F = {New Tk.frame tkInit(parent: W)} B1 = {New Tk.button tkInit(parent:F action:DrawFlower#FlowerA text:'Start Flower A')} B2 = {New Tk.button tkInit(parent:F action:DrawFlower#FlowerB text:'Start Flower B')} B3 = {New Tk.button tkInit(parent:F action: proc {$} {DrawFlower FlowerA} {DrawFlower FlowerB} end text:'Start Both')} B4 = {New Tk.button tkInit(parent:F action: View#tk(delete all) text:'Clear')} View = {New Tk.canvas tkInit(parent:W width:Width height:Height)} {Tk.batch [wm(minsize W 10 10) pack(B1 B2 B3 B4 side:left) pack(F View)]} proc {DrawFlower flower(xPos:XPos yPos:YPos angle:Angle start:Start grammar:Grammar delta:Delta stepWidth:StepWidth recDepth: RecDepth)} fun {DrawStep State} state(Xi Yi Z) = !State Xo = Xi + StepWidth * {Cos Z} Yo = Yi + StepWidth * {Sin Z} in {View tk(crea line Xi Height-Yi Xo Height-Yo)} state(Xo Yo Z) end fun {Draw N State ComList} state(X Y Z) = !State in if N > 0 then case ComList of H|T then case H of l then {Draw N state(X Y Z+Delta) T} [] r then {Draw N state(X Y Z-Delta) T} [] _|_ then thread {Draw N state(X Y Z) H _} end {Draw N state(X Y Z) T} else {Draw N {Draw N-1 state(X Y Z) Grammar.H} T} end else state(X Y Z) end else {DrawStep state(X Y Z)} end end in thread {Draw RecDepth state(XPos YPos Angle) Grammar.Start _} end end % proc DrawFlower in skip end % proc TkFlowers {TkFlowers} end mozart-1.4.0.20080704/share/demo/Flowers/Flowers3d.oz0000664000000000000000000001724506651575416020354 0ustar rootroot%%% %%% Authors: %%% Tobias Mueller (tmueller@ps.uni-sb.de) %%% %%% Copyright: %%% Tobias Mueller, 1998 %%% %%% Last change: %%% $Date: 1999-01-21 11:01:50 +0100 (Thu, 21 Jan 1999) $ by $Author: schulte $ %%% $Revision: 10566 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Tk Application define class WindowClass from BaseObject feat width height win view frame button1 button2 attr color meth init(Width Height Title Draw) View in self.width = {IntToFloat Width} self.height = {IntToFloat Height} color <- black self.win = {New Tk.toplevel tkInit(title: '3D Flowers' delete: proc{$} {self.win tkClose} {Application.exit 0} end)} self.view = {New Tk.canvas tkInit(parent: self.win bg: black width: Width height: Height)} View = self.view {Tk.send wm(title self.win Title)} {Tk.send wm(minsize self.win 10 10)} self.frame = {New Tk.frame tkInit(parent: self.win bg: {TkColor blue})} self.button1 = {New Tk.button tkInit(parent: self.frame action: Draw bg: green text:"Start DrawingFlower")} self.button2 = {New Tk.button tkInit(parent: self.frame bg: {TkColor red} action: proc {$} {View tk(delete(all))} end text:"Clear")} {Tk.send pack(self.button1 self.button2 side:left)} {Tk.send pack(self.frame self.view)} end meth drawLine(X1 Y1 X2 Y2) {self.view tk(crea line X1 (self.height-Y1) X2 (self.height-Y2) fill: @color)} end meth ConvertPoints(In $) Height = self.height in b({FoldR In fun{$ X#Y In}X|(Height-Y)|In end nil}) end meth filledPolygon(Points) {self.view tk(crea polygon {self ConvertPoints(Points $)} fill: @color)} end meth setColor(Color) color <- Color end end % class WindowClass class TurtleObject from BaseObject feat sw a win attr x y pl tuX tuY tuZ tlX tlY tlZ thX thY thZ meth init(Win IState) x <- IState.istate.start.x y <- IState.istate.start.y pl <- nil tuX <- IState.istate.tu.x tuY <- IState.istate.tu.y tuZ <- IState.istate.tu.z tlX <- IState.istate.tl.x tlY <- IState.istate.tl.y tlZ <- IState.istate.tl.z thX <- IState.istate.th.x thY <- IState.istate.th.y thZ <- IState.istate.th.z self.sw = IState.stepWidth self.a = IState.arc self.win = Win end meth init1(X Y PL TuX TuY TuZ TlX TlY TlZ ThX ThY ThZ SW Arc Win) x <- X y <- Y pl <- PL tuX <- TuX tuY <- TuY tuZ <- TuZ tlX <- TlX tlY <- TlY tlZ <- TlZ thX <- ThX thY <- ThY thZ <- ThZ self.sw = SW self.a = Arc self.win = Win end meth duplicate($) {New TurtleObject init1(@x @y @pl @tuX @tuY @tuZ @tlX @tlY @tlZ @thX @thY @thZ self.sw self.a self.win)} end meth move x <- (@x + self.sw * @thX) y <- (@y - self.sw * @thY) pl <- (@x#@y)|@pl end meth openPoly pl <- (@x#@y)|@pl end meth closePoly(C) {self.win setColor(C)} {self.win filledPolygon(@pl)} pl <- nil end meth draw(C) X = @x Y = @y in x <- @x + self.sw * @thX y <- @y - self.sw * @thY {self.win setColor(C)} {self.win drawLine(X Y @x @y)} end meth VM(X1 Y1 Z1 X2 Y2 Z2 A B XR YR ZR) XR <- A * X1 + B * X2 YR <- A * Y1 + B * Y2 ZR <- A * Z1 + B * Z2 end meth turnU TurtleObject,VM(@thX @thY @thZ @tlX @tlY @tlZ ~1.0 0.0 thX thY thZ) TurtleObject,VM(@thX @thY @thZ @tlX @tlY @tlZ 0.0 ~1.0 tlX tlY tlZ) end meth rotUpos TurtleObject,VM(@thX @thY @thZ @tlX @tlY @tlZ {Cos self.a} ~{Sin self.a} thX thY thZ) TurtleObject,VM(@thX @thY @thZ @tlX @tlY @tlZ {Sin self.a} {Cos self.a} tlX tlY tlZ) end meth rotUneg TurtleObject,VM(@thX @thY @thZ @tlX @tlY @tlZ {Cos self.a} {Sin self.a} thX thY thZ) TurtleObject,VM(@thX @thY @thZ @tlX @tlY @tlZ ~{Sin self.a} {Cos self.a} tlX tlY tlZ) end meth rotLpos TurtleObject,VM(@thX @thY @thZ @tuX @tuY @tuZ {Cos self.a} {Sin self.a} thX thY thZ) TurtleObject,VM(@thX @thY @thZ @tuX @tuY @tuZ ~{Sin self.a} {Cos self.a} tuX tuY tuZ) end meth rotLneg TurtleObject,VM(@thX @thY @thZ @tlX @tlY @tlZ {Cos self.a} ~{Sin self.a} thX thY thZ) TurtleObject,VM(@thX @thY @thZ @tlX @tlY @tlZ {Sin self.a} {Cos self.a} tuX tuY tuZ) end meth rotHpos TurtleObject,VM(@tlX @tlY @tlZ @tuX @tuY @tuZ {Cos self.a} {Sin self.a} tlX tlY tlZ) TurtleObject,VM(@tlX @tlY @tlZ @tuX @tuY @tuZ ~{Sin self.a} {Cos self.a} tuX tuY tuZ) end meth rotHneg TurtleObject,VM(@tlX @tlY @tlZ @tuX @tuY @tuZ {Cos self.a} ~{Sin self.a} tlX tlY tlZ) TurtleObject,VM(@tlX @tlY @tlZ @tuX @tuY @tuZ {Sin self.a} {Cos self.a} tuX tuY tuZ) end end % class TurtleObject proc {Flower3D Turtle IState} Start = IState.start Grammar = IState.grammar Colors = IState.colors RecDepth = IState.recDepth proc {Interpret Color Turtle N ComList} if N > 0 then case ComList of H|T then case H of '+' then {Turtle rotUpos} [] '-' then {Turtle rotUneg} [] '|' then {Turtle turnU} [] '\&' then {Turtle rotLpos} [] '^' then {Turtle rotLneg} [] '\\' then {Turtle rotHpos} [] '/' then {Turtle rotHneg} [] _|_ then NewTurtle = {Turtle duplicate($)} in thread {Interpret Color NewTurtle N H} end [] 'F' then {Turtle draw(Color)} [] 'f' then {Turtle move} [] '{' then {Turtle openPoly} [] '}' then {Turtle closePoly(Color)} else {Interpret Colors.H Turtle N-1 Grammar.H} end {Interpret Color Turtle N T} else skip end else skip end end in {Interpret Colors.Start Turtle RecDepth Grammar.Start} end % proc Flower3D fun {TkColor C} if Tk.isColor then C else white end end Plant = plant(start : plant grammar: grammar( plant: [internode '+' [plant '+' flower]'-' '-' '/' '/' ['-' '-'leaf] internode ['+' '+'leaf]'-' [plant '-' '-' flower]'+' '+' plant flower] internode: ['F' seg ['/' '/' '&' '&' leaf] ['/'leaf '/' '^' '^'leaf] 'F' seg] seg: [seg 'F' seg] leaf: [['{' '+'f f'-'f f f'-'f f'+' '|' '+'f'-'f f'-'f'}']] flower: [['&' '&' '&'pedicel'/'wedge '/' '/' '/' '/' wedge'/' '/' '/' '/'wedge '/' '/' '/' '/' wedge'/' '/' '/' '/' wedge]] pedicel: ['F' 'F'] wedge: [stamen['{' '&' '&' '&' '&' '-'f f f f'+'f f f'|' '-'f f f'+'f f f f'}']] stamen: [['^' '{' '-' f f f '+'f f '|' '-' f f f '+'f f '}']] ) colors: colors(plant : {TkColor green} internode: {TkColor brown} seg : {TkColor brown} leaf : {TkColor darkgreen} flower : {TkColor brown} pedicel : {TkColor brown} wedge : {TkColor red} stamen : {TkColor yellow}) istate:state(start: start(x: 100.0 y: 20.0) tu: tu(x: ~10.0 y: ~2.0 z: 3.0) tl: tl(x: 6.0 y: 2.0 z: ~5.0) th: th(x: 1.0 y: ~10.0 z: 0.0)) arc : 0.31 stepWidth: 1.2 recDepth : 5 ) % Plant proc {TkFlowers3D} Win in Win = {New WindowClass init(450 750 'Lindenmayer Flower ' proc {$} {Flower3D {New TurtleObject init(Win Plant)} Plant} end)} end {TkFlowers3D} end mozart-1.4.0.20080704/share/demo/MT10.oz0000664000000000000000000001222107334772351015525 0ustar rootroot%%% %%% Authors: %%% Christian Schulte %%% %%% Copyright: %%% Christian Schulte, 1998 %%% %%% Last change: %%% $Date: 2001-08-10 16:51:21 +0200 (Fri, 10 Aug 2001) $ by $Author: schulte $ %%% $Revision: 14099 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org/ %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import FD Schedule export Script Order prepare MT10= mt10( tasks:[pa(dur:0) a1(dur:29 pre:[pa] res:m1) a2(dur:78 pre:[a1] res:m2) a3(dur: 9 pre:[a2] res:m3) a4(dur:36 pre:[a3] res:m4) a5(dur:49 pre:[a4] res:m5) a6(dur:11 pre:[a5] res:m6) a7(dur:62 pre:[a6] res:m7) a8(dur:56 pre:[a7] res:m8) a9(dur:44 pre:[a8] res:m9) a10(dur:21 pre:[a9] res:m10) b1(dur:43 pre:[pa] res:m1) b2(dur:90 pre:[b1] res:m3) b3(dur:75 pre:[b2] res:m5) b4(dur:11 pre:[b3] res:m10) b5(dur:69 pre:[b4] res:m4) b6(dur:28 pre:[b5] res:m2) b7(dur:46 pre:[b6] res:m7) b8(dur:46 pre:[b7] res:m6) b9(dur:72 pre:[b8] res:m8) b10(dur:30 pre:[b9] res:m9) c1(dur:91 pre:[pa] res:m2) c2(dur:85 pre:[c1] res:m1) c3(dur:39 pre:[c2] res:m4) c4(dur:74 pre:[c3] res:m3) c5(dur:90 pre:[c4] res:m9) c6(dur:10 pre:[c5] res:m6) c7(dur:12 pre:[c6] res:m8) c8(dur:89 pre:[c7] res:m7) c9(dur:45 pre:[c8] res:m10) c10(dur:33 pre:[c9] res:m5) d1(dur:81 pre:[pa] res:m2) d2(dur:95 pre:[d1] res:m3) d3(dur:71 pre:[d2] res:m1) d4(dur:99 pre:[d3] res:m5) d5(dur: 9 pre:[d4] res:m7) d6(dur:52 pre:[d5] res:m9) d7(dur:85 pre:[d6] res:m8) d8(dur:98 pre:[d7] res:m4) d9(dur:22 pre:[d8] res:m10) d10(dur:43 pre:[d9] res:m6) e1(dur:14 pre:[pa] res:m3) e2(dur: 6 pre:[e1] res:m1) e3(dur:22 pre:[e2] res:m2) e4(dur:61 pre:[e3] res:m6) e5(dur:26 pre:[e4] res:m4) e6(dur:69 pre:[e5] res:m5) e7(dur:21 pre:[e6] res:m9) e8(dur:49 pre:[e7] res:m8) e9(dur:72 pre:[e8] res:m10) e10(dur:53 pre:[e9] res:m7) f1(dur:84 pre:[pa] res:m3) f2(dur: 2 pre:[f1] res:m2) f3(dur:52 pre:[f2] res:m6) f4(dur:95 pre:[f3] res:m4) f5(dur:48 pre:[f4] res:m9) f6(dur:72 pre:[f5] res:m10) f7(dur:47 pre:[f6] res:m1) f8(dur:65 pre:[f7] res:m7) f9(dur: 6 pre:[f8] res:m5) f10(dur:25 pre:[f9] res:m8) g1(dur:46 pre:[pa] res:m2) g2(dur:37 pre:[g1] res:m1) g3(dur:61 pre:[g2] res:m4) g4(dur:13 pre:[g3] res:m3) g5(dur:32 pre:[g4] res:m7) g6(dur:21 pre:[g5] res:m6) g7(dur:32 pre:[g6] res:m10) g8(dur:89 pre:[g7] res:m9) g9(dur:30 pre:[g8] res:m8) g10(dur:55 pre:[g9] res:m5) h1(dur:31 pre:[pa] res:m3) h2(dur:86 pre:[h1] res:m1) h3(dur:46 pre:[h2] res:m2) h4(dur:74 pre:[h3] res:m6) h5(dur:32 pre:[h4] res:m5) h6(dur:88 pre:[h5] res:m7) h7(dur:19 pre:[h6] res:m9) h8(dur:48 pre:[h7] res:m10) h9(dur:36 pre:[h8] res:m8) h10(dur:79 pre:[h9] res:m4) i1(dur:76 pre:[pa] res:m1) i2(dur:69 pre:[i1] res:m2) i3(dur:76 pre:[i2] res:m4) i4(dur:51 pre:[i3] res:m6) i5(dur:85 pre:[i4] res:m3) i6(dur:11 pre:[i5] res:m10) i7(dur:40 pre:[i6] res:m7) i8(dur:89 pre:[i7] res:m8) i9(dur:26 pre:[i8] res:m5) i10(dur:74 pre:[i9] res:m9) j1(dur:85 pre:[pa] res:m2) j2(dur:13 pre:[j1] res:m1) j3(dur:61 pre:[j2] res:m3) j4(dur: 7 pre:[j3] res:m7) j5(dur:64 pre:[j4] res:m9) j6(dur:76 pre:[j5] res:m10) j7(dur:47 pre:[j6] res:m6) j8(dur:52 pre:[j7] res:m4) j9(dur:90 pre:[j8] res:m5) j10(dur:45 pre:[j9] res:m8) pe(dur:0 pre:[a10 b10 c10 d10 e10 f10 g10 h10 i10 j10])]) define fun {GetDur TaskSpec} {List.toRecord dur {Map TaskSpec fun {$ T} {Label T}#T.dur end}} end fun {GetStart TaskSpec} MaxTime = {FoldL TaskSpec fun {$ Time T} Time+T.dur end 0} Tasks = {Map TaskSpec Label} in {FD.record start Tasks 0#MaxTime} end fun {GetTasksOnResource TaskSpec} D={Dictionary.new} in {ForAll TaskSpec proc {$ T} if {HasFeature T res} then R=T.res in {Dictionary.put D R {Label T}|{Dictionary.condGet D R nil}} end end} {Dictionary.toRecord tor D} end fun {Compile Spec} TaskSpec = Spec.tasks Constraints = if {HasFeature Spec constraints} then Spec.constraints else proc {$ _ _} skip end end Dur = {GetDur TaskSpec} TasksOnRes = {GetTasksOnResource TaskSpec} in proc {$ Start} Start = {GetStart TaskSpec} {ForAll TaskSpec proc {$ T} {ForAll {CondSelect T pre nil} proc {$ P} Start.P + Dur.P =<: Start.{Label T} end} end} {Constraints Start Dur} {Schedule.serialized TasksOnRes Start Dur} {Schedule.firstsLastsDist TasksOnRes Start Dur} {FD.assign min Start} end end Script = {Compile MT10} proc {Order Old New} Old.pe >: New.pe end end mozart-1.4.0.20080704/share/demo/Board.oz0000664000000000000000000003473206651712164016103 0ustar rootroot%%% %%% Authors: %%% Michael Mehl (mehl@dfki.de) %%% Ralf Scheidhauer (scheidhr@dfki.de) %%% Christian Schulte %%% Gert Smolka (smolka@dfki.de) %%% %%% Copyright: %%% Michael Mehl, 1997 %%% Ralf Scheidhauer, 1997 %%% Christian Schulte, 1997, 1998 %%% Gert Smolka, 1997 %%% %%% Last change: %%% $Date: 1999-01-21 21:56:20 +0100 (Thu, 21 Jan 1999) $ by $Author: schulte $ %%% $Revision: 10589 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% local PickleCompressionLevel = 9 local InitServer = {NewName} in class Server attr port close serve meth !InitServer(?Port) proc {Serve X|Xs} {@serve X} {Serve Xs} end Stream CloseException = {NewName} in proc {@close} raise CloseException end end {NewPort Stream Port} @port = Port @serve = self thread try {Serve Stream} catch !CloseException then skip end end end end fun {NewServer Class Init} Port Object = {New Class InitServer(Port)} in {Object Init} Port end end proc {NewAgenda ?Port ?Connect} Stream in {NewPort Stream Port} proc {Connect P} thread {ForAll Stream proc {$ M} {Send P M} end} end end end fun {NewBoardFunctor IsMaster Ticket User} ArgSpec = record(master(single type:bool default:IsMaster) ticket(single type:atom default:Ticket) user(single type:atom default:User)) in functor import Tk TkTools Connection OS Application Pickle define Args = {Application.getCmdArgs ArgSpec} proc {SendApplet FileName Subject To} if {OS.system ('metasend -b -e base64 -f '#FileName# ' -m application/x-oz-application'# ' -s "'#Subject#'" -t '#To)}\=0 then raise failed(mail) end end end class Board from Server attr agenda connect meth init {NewAgenda @agenda @connect} end meth newWindow($) Connect = @connect % Don't pass reference to object in proc {$ Tk Desc} {NewServer Window init(Tk {AdjoinAt Desc agenda @agenda} Connect) _} end end meth newTool(Label BClass WClass) T = {NewServer Tool init(BClass @agenda)} in {Send @agenda newTool(Label T WClass)} end meth newUser(UserId Name) {Send @agenda newUser(UserId Name)} end meth deleteUser(UserId) {Send @agenda deleteUser(UserId)} end meth close {Send @agenda shutdown} {@close} end end class Tool from Server attr bClass agenda meth init(BClass Agenda) % invoked by Board @bClass = BClass @agenda = Agenda end meth newBObj(X Y) % invoked by Window {NewServer @bClass init(@agenda @port X Y) _} end end class BObject from Server %% virtual, needs attributes kind, props, dx, dy attr agenda updating: false meth init(Agenda Tool X Y) % invoked by Tool Message = create(@kind X Y X+@dx Y+@dy {List.toRecord o {self GetProps($)}}) in @agenda = Agenda {Send @agenda newWObj(@port Tool Message)} end meth requestUpdate(Window) % invoked by Window if @updating then {Send Window rejectRequest} else updating <- true {Send Window grantUpdate({self GetProps($)} @port)} end end meth requestClose(Window) % invoked by Window if @updating then {Send Window rejectRequest} else {Send @agenda closeWObj(@port Window)} {@close} end end meth update(NewProps) % invoked by Dialog {ForAll NewProps proc {$ A#V} A <- V end} {Send @agenda updateWObj(@port NewProps)} updating <- false end meth GetProps($) {Map @props fun {$ A} A#@A end} end end class Window from Server attr tk top bar radio canvas tool page1 page2 BObj2WObj: nil Tool2WClass: nil Name2Label: nil BGColor: ivory Busy: false MyDialog: nil meth init(Tk Desc ConnectToAgenda) % invoked by Board proc {ActionNewBObj X Y} {Send @port NewBObj(X Y)} end proc {ActionDelete} {Send Desc.agenda deleteUser(Desc.user)} {Send @port Close} if {HasFeature Desc close} then {Desc.close} end end Title = {CondSelect Desc title 'Drawing Board'} TkTools = Tk.tools in @tool = {NewPort _} @tk = Tk @top = {New Tk.toplevel tkInit(title:Title delete:ActionDelete withdraw:true)} @page1 = {New TkTools.textframe tkInit(parent:@top text:'Tools')} @radio = {New Tk.variable tkInit} @page2 = {New TkTools.textframe tkInit(parent:@top text:'Users')} @canvas = {New Tk.canvas tkInit(parent:@top bd:2 relief:sunken width:300 height:300 bg:@BGColor)} {@canvas tkBind(event: '<1>' args: [int(x) int(y)] action: ActionNewBObj)} {Tk.batch [grid(@page1 row:0 column:0 pady:4 sticky:ew) grid(@page2 row:1 column:0 pady:4 sticky:ew) grid(@canvas row:0 column:1 sticky:sn padx:2 pady:2 rowspan:4) grid({New Tk.button tkInit(parent: @top text: 'Mail Applet' action: Desc.mail)} sticky:ew pady:4 row:2 column:0) grid({New Tk.button tkInit(parent: @top text: 'Save Applet' action: Desc.save)} sticky:ew pady:4 row:3 column:0) update(idletasks) wm(deiconify @top)]} {ConnectToAgenda @port} end meth newTool(Label Tool WClass) % invoked by Board proc {ActionSelectTool} {Send @port SelectTool(Tool)} end C|S = {VirtualString.toString Label} Button = {New @tk.radiobutton tkInit(parent: @page1.inner text: {Char.toUpper C}|S anchor: w bg:'#b9b9b9' var: @radio value: Label relief: groove bd: 2 action: ActionSelectTool)} in {@tk.send grid(Button sticky:sew padx:2 pady:2)} {self Put(Tool2WClass Tool WClass)} end meth newUser(UserId Name) % invoked by Board Label = {New @tk.label tkInit(parent: @page2.inner text: Name anchor: w bg: white bd: 2)} in {@tk.send grid(Label sticky:sew padx:2 pady:2)} {self Put(Name2Label UserId Label)} end meth deleteUser(UserId) {{self Get(Name2Label UserId $)} tkClose} {self Delete(Name2Label UserId)} end meth shutdown % invoked by Board if @MyDialog \= nil then {Send @MyDialog close} end {@top tkClose} {@close} end meth NewBObj(X Y) % invoked by User <1> {Send @tool newBObj(X Y)} end meth updateBObj(BObj) % invoked by User <2> if @Busy then {self Flash(black)} else {self MkBusy} {Send BObj requestUpdate(@port)} end end meth closeBObj(BObj) % invoked by User <3> if @Busy then {self Flash(black)} else {self MkBusy} {Send BObj requestClose(@port)} end end meth SelectTool(Tool) % invoked by User <1> tool <- Tool end meth Close % invoked by User <1> if @Busy then {self Flash(black)} else {@top tkClose} {@close} end end meth newWObj(BObj Tool Message) % invoked by BObject through agenda WObj = {New {self Get(Tool2WClass Tool $)} init(@tk @port @canvas BObj Message)} in {self Put(BObj2WObj BObj WObj)} end meth updateWObj(BObj Props) % invoked by BObject through agenda {{self Get(BObj2WObj BObj $)} update(Props)} end meth closeWObj(BObj Window) % invoked by BObject through agenda if Window == @port then {self MkIdle} end {{self Get(BObj2WObj BObj $)} close} end meth grantUpdate(Old BObj) % invoked by BObject MyDialog <- {NewServer Dialog init(@tk @port Old BObj)} end meth rejectRequest % invoked by BObject {self Flash(red)} {self MkIdle} end meth dialogClosed % invoked by Dialog MyDialog <- nil {self MkIdle} end meth Put(A K V) A <- K#V | @A end meth Get(A K $) {LookUp @A K} end meth Delete(A K) A <- {Remove @A K} end meth MkBusy Busy <- true {self ChangeColor(thistle)} end meth MkIdle Busy <- false {self ChangeColor(ivory)} end meth ChangeColor(Color) {@canvas tk(configure(bg:Color))} BGColor <- Color end meth Flash(Color) OldColor = @BGColor in {self ChangeColor(Color)} {Delay 200} {self ChangeColor(OldColor)} end end fun {LookUp K#I|KIr GK} if K==GK then I else {LookUp KIr GK} end end fun {Remove KIs DK} case KIs of nil then nil [] KI|KIr then K#_=KI in if K==DK then KIr else KI|{Remove KIr DK} end end end fun {GetHostName} UTS = {OS.uName} in UTS.nodename end class WObject attr canvas tag meth init(Tk Window Canvas BObj Message) % invoked by Window proc {ActionUpdate} {Send Window updateBObj(BObj)} end proc {ActionClose} {Send Window closeBObj(BObj)} end in @canvas = Canvas @tag = {New Tk.canvasTag tkInit(parent:Canvas)} {Canvas tk(Message o(tag:@tag))} {@tag tkBind(event:'<2>' action: ActionUpdate)} {@tag tkBind(event:'<3>' action: ActionClose)} end meth update(Props) % invoked by Window on request of BObject {@canvas tk({List.toRecord itemconfigure (1#@tag|Props)})} end meth close % invoked by Window on request of BObject {@tag tk(delete)} end end class Dialog from Server attr top window entries oldProps bObj meth init(Tk Window OldProps BObj) % invoked by Window proc {ActionOk} {Send @port Ok} end proc {ActionCancel} {Send @port Cancel} end @window = Window @oldProps= OldProps @bObj = BObj @top = {New Tk.toplevel tkInit(title:'Object Attributes' delete:ActionCancel withdraw:true)} {@top tkWM(geometry '+'#{Tk.returnInt winfo(pointerx @top)}+5# '+'#{Tk.returnInt winfo(pointery @top)}+10)} @entries = {List.mapInd @oldProps fun {$ I A#V} L = {New Tk.label tkInit(parent:@top text:A#':' anchor:w)} E = {New Tk.entry tkInit(parent:@top width:10 bg:white)} in {E tk(insert 0 V)} {Tk.send grid(row:I L E sticky:w padx:4 pady:4)} A#E end} OkButton = {New Tk.button tkInit(parent:@top text:'Okay' action: ActionOk)} in {Tk.send grid(row:{Length @entries}+1 columnspan:2 pady:10 OkButton)} {@top tkWM(deiconify)} end meth close % invoked by Window {@top tkClose} {@close} end meth Ok % invoked by User <1> NewProps = {Map @entries fun {$ A#E} A # {E tkReturn(get $)} end} in {Send @bObj update(NewProps)} {Send @window dialogClosed} {self close} end meth Cancel % invoked by User <1> {Send @bObj update(@oldProps)} {Send @window dialogClosed} {self close} end end class Circle from BObject attr kind: oval props: [fill width] dx: 20 dy: 20 fill: red width: 1 end class Square from Circle attr kind: rectangle fill: blue end class HBar from Square attr dy: 4 fill: orange end class VBar from Square attr dx: 4 fill: green end class Arc from Circle attr kind: arc props: [fill start extent] fill: yellow start: 22.5 extent: 315 end proc {MailBoard} FN = {OS.tmpnam} To T = {New Tk.toplevel tkInit} L = {New Tk.label tkInit(parent:T text:'To: ')} E = {New Tk.entry tkInit(parent:T width:20)} B = {New Tk.button tkInit(parent:T text:'Send' action: proc {$} To = {E tkReturnAtom(get $)} {T tkClose} end)} {Tk.batch [pack(L E side:left pady:1#m padx:1#m) pack(B side:bottom pady:2#m) focus(E)]} in {Wait To} {Pickle.saveCompressed {NewBoardFunctor false Ticket To} FN PickleCompressionLevel} try {SendApplet FN 'Oz Drawing Board' To} catch _ then D={New TkTools.error tkInit(text: ('Could not send mail. Please check whether '# 'metamail package is installed properly.'))} in {Wait D.tkClosed} end {OS.unlink FN} end proc {SaveBoard} case {Tk.return tk_getSaveFile(filetypes: q(q('Oz Applications' '.oza') q('All files' '*')))} of nil then skip [] S then {Pickle.saveCompressed {NewBoardFunctor false Ticket 'Saved'} S PickleCompressionLevel} end end Ticket B UserId = {NewName} if Args.master then B = {NewServer Board init} Ticket = {New Connection.gate init(B $) _} else Ticket = Args.ticket B = {Connection.take Ticket} end {Wait Tk} {Wait TkTools} {{Send B newWindow($)} {AdjoinAt Tk tools TkTools} d(title: 'Drawing Board'#'@'#{GetHostName} close: proc {$} {Application.exit 0} end mail: MailBoard save: SaveBoard user: UserId)} {Send B newUser(UserId Args.user)} if Args.master then {Send B newTool(circle Circle WObject)} {Send B newTool(square Square WObject)} {Send B newTool(hbar HBar WObject)} {Send B newTool(vbar VBar WObject)} {Send B newTool(arc Arc WObject)} end end end in {NewBoardFunctor true '' master} end mozart-1.4.0.20080704/share/demo/DictClient/0000775000000000000000000000000011033376117016505 5ustar rootrootmozart-1.4.0.20080704/share/demo/DictClient/README.rfc22290000664000000000000000000000047610753600211020455 0ustar rootrootThe text for RFC 2229 has been removed from this directory since its copyright restricts modification. This is incompatible with some of the distributions that include Mozart/Oz (e.g., see the Debian Free Software Guidelines). It can be obtained from many places, including: http://www.ietf.org/rfc/rfc2229.txt mozart-1.4.0.20080704/share/demo/DictClient/TkDictionary.oz0000664000000000000000000006672207001617064021477 0ustar rootroot%%% %%% Author: %%% Leif Kornstaedt %%% %%% Copyright: %%% Leif Kornstaedt, 1998 %%% %%% Last change: %%% $Date: 1999-10-15 14:29:40 +0200 (Fri, 15 Oct 1999) $ by $Author: kornstae $ %%% $Revision: 12184 $ %%% %%% This file is part of Mozart, an implementation of Oz 3: %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% functor import Tk(toplevel action frame label entry listbox scrollbar addYScrollbar button text send batch return returnInt isColor) TkTools(images menubar error dialog) Open(file) NetDictionary('class' defaultServer: DEFAULT_SERVER defaultPort: DEFAULT_PORT) export 'class': TkDictionary require DemoUrls(image) at '../DemoUrls.ozf' prepare FixedFont = '8x13' BoldFixedFont = '8x13bold' BoldFont = '-*-helvetica-bold-r-normal--*-120-*-*-*-*-*-*' NormalFont = '-*-helvetica-medium-r-normal--*-120-*-*-*-*-*-*' ServerWidth = 20 IPad = 4 TextBackground = c(239 239 239) WordWidth = 42 ButtonPad = 10 ListHeight = 8 ScrollBorder = 1 ScrollWidth = 12 LogWidth = 40 LogHeight = 4 Pad = 0 %% The following databases and strategies are always available. DEFAULT_DATABASES = ['*'#'All' '!'#'First with matches'] DEFAULT_STRATEGIES = ['.'#'Default' 'exact'#'Match words exactly' 'prefix'#'Match prefixes'] fun {FormatDBs DBs DatabaseNames} {FoldR DBs fun {$ DB In} {CondSelect DatabaseNames DB DB}# case In of unit then "" else ', '#In end end unit} end fun {Clean S} {FoldR S fun {$ C In} if C =< & then case In of & |_ then In else & |In end else C|In end end nil} end define Images = {TkTools.images [DemoUrls.image#'dict-client/dict.gif']} proc {SetMinsize W} {Tk.send update(idletasks)} {Tk.send wm(minsize W {Tk.returnInt winfo(reqwidth W)} {Tk.returnInt winfo(reqheight W)})} end %% %% Dialog to Enter a Server Address and Port %% class ServerDialog meth init(Master Server Port Connect) proc {DoConnect} Server Port in {ServerEntry tkReturn(get ?Server)} {PortEntry tkReturn(get ?Port)} if {String.isInt Port} then {Toplevel tkClose()} {Connect Server {String.toInt Port}} else {New TkTools.error tkInit(master: Toplevel text: 'The port must be given as a number.') _} end end Toplevel = {New Tk.toplevel tkInit(parent: Master title: 'Choose Server' 'class': 'OzTools' highlightthickness: 0 withdraw: true)} {Toplevel tkBind(event: '' action: Toplevel#tkClose())} Frame1 = {New Tk.frame tkInit(parent: Toplevel highlightthickness: 0 borderwidth: 1 relief: raised)} ServerLabel = {New Tk.label tkInit(parent: Frame1 font: BoldFont text: 'Server: ')} ServerEntry = {New Tk.entry tkInit(parent: Frame1 font: FixedFont width: ServerWidth background: TextBackground borderwidth: 1)} {ServerEntry tkBind(event: '' action: DoConnect)} {ServerEntry tk(insert 'end' case Server of unit then DEFAULT_SERVER else Server end)} PortLabel = {New Tk.label tkInit(parent: Frame1 font: BoldFont text: 'Port: ')} PortEntry = {New Tk.entry tkInit(parent: Frame1 font: FixedFont width: ServerWidth background: TextBackground borderwidth: 1)} {PortEntry tkBind(event: '' action: DoConnect)} {PortEntry tk(insert 'end' case Port of unit then DEFAULT_PORT else Port end)} Frame2 = {New Tk.frame tkInit(parent: Toplevel highlightthickness: 0 borderwidth: 1 relief: raised)} ConnectButton = {New Tk.button tkInit(parent: Frame2 text: 'Connect' action: DoConnect)} CloseButton = {New Tk.button tkInit(parent: Frame2 text: 'Cancel' action: Toplevel#tkClose())} in {Tk.batch [pack(Frame1 side: top expand: true fill: both ipadx: IPad ipady: IPad) pack(Frame2 side: top expand: true fill: both ipadx: IPad ipady: IPad) grid(ServerLabel row: 0 column: 0 sticky: w) grid(ServerEntry row: 0 column: 1) grid(PortLabel row: 1 column: 0 sticky: w) grid(PortEntry row: 1 column: 1) pack(ConnectButton CloseButton side: left expand: true) focus(ServerEntry)]} {SetMinsize Toplevel} {Tk.send wm(deiconify Toplevel)} end end %% %% A Simple Information Display Window %% class InformationWindow feat toplevel text status attr Withdrawn: true meth init(Master Title cursor: Cursor <= xterm status: Status <= false) self.toplevel = {New Tk.toplevel tkInit(parent: Master title: Title 'class': 'OzTools' highlightthickness: 0 withdraw: true)} Menu = {TkTools.menubar self.toplevel self.toplevel [menubutton(text: 'File' feature: file menu: [command(label: 'Save as ...' action: self#SaveAs()) separator command(label: 'Close window' key: ctrl(x) action: self#close())]) menubutton(text: 'Edit' feature: edit menu: [command(label: 'Select all' action: self#SelectAll())])] nil} self.text = {New Tk.text tkInit(parent: self.toplevel cursor: Cursor font: FixedFont background: TextBackground state: disabled)} {self.text tk(tag configure titleTag font: BoldFixedFont)} Scrollbar = {New Tk.scrollbar tkInit(parent: self.toplevel borderwidth: ScrollBorder width: ScrollWidth)} {Tk.addYScrollbar self.text Scrollbar} if Status then self.status = {New Tk.text tkInit(parent: self.toplevel cursor: left_ptr border: 0 wrap: none font: NormalFont width: 0 height: 1 state: disabled)} else self.status = unit end in {Tk.batch grid(columnconfigure self.toplevel 0 weight: 1)| grid(rowconfigure self.toplevel 1 weight: 1)| grid(Menu row: 0 column: 0 columnspan: 2 sticky: nsew)| grid(self.text row: 1 column: 0 sticky: nsew)| grid(Scrollbar row: 1 column: 1 sticky: nsew)| if Status then [grid(self.status row: 2 column: 0 columnspan: 2 sticky: nsew)] else nil end} {SetMinsize self.toplevel} end meth append(VS Tag <= unit) try {Tk.batch [o(self.text configure state: normal) case Tag of unit then o(self.text insert 'end' VS) else o(self.text insert 'end' VS Tag) end o(self.text configure state: disabled)]} if @Withdrawn then {Tk.send wm(deiconify self.toplevel)} Withdrawn <- false end catch _ then skip % window already closed end end meth status(VS) if @Withdrawn then {Tk.send wm(deiconify self.toplevel)} Withdrawn <- false end {Tk.batch [o(self.status configure state: normal) o(self.status delete p(1 0) 'end') o(self.status insert 'end' VS) o(self.status configure state: disabled)]} end meth close() {self.toplevel tkClose()} end meth SaveAs() FileName in FileName = {Tk.return tk_getSaveFile(parent: self.toplevel title: 'Save Text' filetypes: q(q('All Files' '*')))} if FileName == "" then skip else File in File = {New Open.file init(name: FileName flags: [write create truncate])} {File write(vs: {self.text tkReturn(get p(1 0) 'end' $)})} {File close()} end end meth SelectAll() {self.text tk(tag add 'sel' p(1 0) 'end')} end end %% %% A Window to Display Definitions %% class DefinitionWindow from InformationWindow attr tagNumber inTag tagText feat action meth init(Master Action) self.action = Action tagNumber <- 0 inTag <- 0 tagText <- "" InformationWindow, init(Master 'Definitions' status: true) end meth append(Definition) case Definition of definition(word: Word db: _ dbname: DBName body: Body) then InformationWindow, append(Word#', '#DBName#'\n' titleTag) DefinitionWindow, AppendLines(nil#'\n'#Body) InformationWindow, append('\n\n') end end meth AppendLines(VS) case VS of V#'\n'#Rest then V2 in V2 = V#'\n' DefinitionWindow, AppendWithHyperLinks({VirtualString.toString V2}) DefinitionWindow, AppendLines(Rest) else DefinitionWindow, AppendWithHyperLinks({VirtualString.toString VS}) end end meth AppendWithHyperLinks(S) S1 S2 in {List.takeDropWhile S fun {$ C} C \= &{ andthen C \= &} end ?S1 ?S2} if @inTag > 0 then InformationWindow, append(S1 @tagNumber) tagText <- @tagText#S1 else InformationWindow, append(S1) end case S2 of C|Cr then case C of &{ then inTag <- @inTag + 1 {self.text tk(tag configure @tagNumber underline: true)} if Tk.isColor then {self.text tk(tag configure @tagNumber foreground: blue)} end [] &} then inTag <- {Max @inTag - 1 0} if @inTag == 0 then Text Action in Text = {Clean {VirtualString.toString (tagText <- "")}} Action = {New Tk.action tkInit(parent: self.text action: proc {$} {self.action Text} end)} {self.text tk(tag bind @tagNumber '<1>' Action)} tagText <- "" tagNumber <- @tagNumber + 1 end end DefinitionWindow, AppendWithHyperLinks(Cr) [] nil then skip end end end %% %% A Window to Display Matches %% class MatchWindow from InformationWindow feat action attr TagIndex: 0 meth init(Master Action) self.action = Action InformationWindow, init(Master 'Matches' cursor: left_ptr status: true) end meth append(Match Databases) case Match of DB#Word then N Action in N = @TagIndex + 1 TagIndex <- N InformationWindow, append(Word#', '#{CondSelect Databases {String.toAtom DB} DB}#'\n' N) Action = {New Tk.action tkInit(parent: self.text action: proc {$} DBs in DBs = [{String.toAtom DB}] {self.action Word DBs} end)} {self.text tk(tag bind N '<1>' Action)} end end end %% %% The Main Interaction Window %% class TkDictionary feat closed Toplevel WordEntry DatabasesList DatabaseIndices StrategiesList StrategyIndices StatusText LogText NetDict attr CurrentServer: unit CurrentPort: unit Databases: unit Strategies: unit meth init(Server <= DEFAULT_SERVER Port <= DEFAULT_PORT) NetMessages NetPort = {NewPort NetMessages} Messages P = {NewPort Messages} self.Toplevel = {New Tk.toplevel tkInit(title: 'Dictionary Client' 'class': 'OzTools' delete: P#close() withdraw: true)} %% Menubar Menu = {TkTools.menubar self.Toplevel self.Toplevel [menubutton(text: 'Server' menu: [command(label: 'Open ...' key: ctrl(o) action: P#ServerOpen(NetPort)) separator command(label: 'Status' key: ctrl(s) action: P#ServerStatus(NetPort)) command(label: 'Information ...' action: P#ServerInfo(NetPort)) separator command(label: 'Close' key: ctrl(x) action: P#close())]) menubutton(text: 'Database' menu: [command(label: 'Information ...' action: P#ShowInfo(NetPort))])] [menubutton(text: 'Help' menu: [command(label: 'About ...' action: P#About())])]} %% Frames Frame1 Frame2L Frame2R Frame3 Frame4 {ForAll [Frame1 Frame2L Frame2R Frame3 Frame4] fun {$} {New Tk.frame tkInit(parent: self.Toplevel highlightthickness: 0 borderwidth: 1 relief: raised)} end} %% Contents of Frame1 WordLabel = {New Tk.label tkInit(parent: Frame1 font: BoldFont text: 'Word')} self.WordEntry = {New Tk.entry tkInit(parent: Frame1 font: FixedFont width: WordWidth background: TextBackground borderwidth: 1)} {self.WordEntry tkBind(event: '' action: P#GetDefinitions(NetPort))} {self.WordEntry tkBind(event: '' action: P#GetMatches(NetPort))} WordButtonsFrame = {New Tk.frame tkInit(parent: Frame1 highlightthickness: 0)} DefineButton = {New Tk.button tkInit(parent: WordButtonsFrame text: 'Lookup' action: P#GetDefinitions(NetPort))} MatchButton = {New Tk.button tkInit(parent: WordButtonsFrame text: 'Match' action: P#GetMatches(NetPort))} %% Contents of Frame2L DatabasesLabel = {New Tk.label tkInit(parent: Frame2L font: BoldFont text: 'Databases')} DatabasesListFrame = {New Tk.frame tkInit(parent: Frame2L highlightthickness: 0)} self.DatabasesList = {New Tk.listbox tkInit(parent: DatabasesListFrame selectmode: extended exportselection: false background: TextBackground height: ListHeight borderwidth: 1)} self.DatabaseIndices = {NewDictionary} DatabasesScrollbar = {New Tk.scrollbar tkInit(parent: DatabasesListFrame borderwidth: ScrollBorder width: ScrollWidth)} {Tk.addYScrollbar self.DatabasesList DatabasesScrollbar} UpdateDatabasesButton = {New Tk.button tkInit(parent: Frame2L text: 'Update List' action: P#UpdateDatabases(NetPort))} %% Contents of Frame2R StrategiesLabel = {New Tk.label tkInit(parent: Frame2R font: BoldFont text: 'Strategies')} StrategiesListFrame = {New Tk.frame tkInit(parent: Frame2R highlightthicknes: 0)} self.StrategiesList = {New Tk.listbox tkInit(parent: StrategiesListFrame selectmode: browse exportselection: false background: TextBackground height: ListHeight borderwidth: 1)} self.StrategyIndices = {NewDictionary} StrategiesScrollbar = {New Tk.scrollbar tkInit(parent: StrategiesListFrame borderwidth: ScrollBorder width: ScrollWidth)} {Tk.addYScrollbar self.StrategiesList StrategiesScrollbar} UpdateStrategiesButton = {New Tk.button tkInit(parent: Frame2R text: 'Update List' action: P#UpdateStrategies(NetPort))} %% Contents of Frame3 LogLabel = {New Tk.label tkInit(parent: Frame3 font: BoldFont text: 'Log')} LogTextFrame = {New Tk.frame tkInit(parent: Frame3 highlightthicknes: 0)} self.LogText = {New Tk.text tkInit(parent: LogTextFrame wrap: word font: FixedFont background: TextBackground width: LogWidth height: LogHeight state: disabled)} LogScrollbar = {New Tk.scrollbar tkInit(parent: LogTextFrame borderwidth: ScrollBorder width: ScrollWidth)} {Tk.addYScrollbar self.LogText LogScrollbar} %% Contents of Frame4 self.StatusText = {New Tk.text tkInit(parent: Frame4 cursor: left_ptr border: 0 wrap: none font: NormalFont width: 0 height: 1 state: disabled)} in {Tk.batch [grid(columnconfigure self.Toplevel 0 weight: 1) grid(columnconfigure self.Toplevel 1 weight: 1) grid(rowconfigure self.Toplevel 2 weight: 1) grid(rowconfigure self.Toplevel 3 weight: 1) grid(Menu row: 0 column: 0 columnspan: 2 sticky: nsew) grid(Frame1 row: 1 column: 0 columnspan: 2 sticky: nsew) grid(Frame2L row: 2 column: 0 sticky: nsew) grid(Frame2R row: 2 column: 1 sticky: nsew) grid(Frame3 row: 3 column: 0 columnspan: 2 sticky: nsew) grid(Frame4 row: 4 column: 0 columnspan: 2 sticky: nsew) pack(WordLabel padx: Pad pady: Pad side: top) pack(self.WordEntry padx: Pad pady: Pad side: top fill: x) pack(WordButtonsFrame padx: Pad pady: Pad side: top) pack(DefineButton MatchButton side: left padx: ButtonPad) pack(DatabasesLabel padx: Pad pady: Pad side: top) pack(DatabasesListFrame padx: Pad pady: Pad side: top expand: true fill: both) pack(UpdateDatabasesButton padx: Pad pady: Pad side: top) pack(self.DatabasesList side: left expand: true fill: both) pack(DatabasesScrollbar side: left fill: y) pack(StrategiesLabel padx: Pad pady: Pad side: top) pack(StrategiesListFrame padx: Pad pady: Pad side: top expand: true fill: both) pack(UpdateStrategiesButton padx: Pad pady: Pad side: top) pack(self.StrategiesList side: left expand: true fill: both) pack(StrategiesScrollbar side: left fill: y) pack(LogLabel padx: Pad pady: Pad side: top) pack(LogTextFrame padx: Pad pady: Pad side: top expand: true fill: both) pack(self.LogText side: left expand: true fill: both) pack(LogScrollbar side: left fill: y) pack(self.StatusText padx: Pad pady: Pad fill: x) focus(self.WordEntry)]} {SetMinsize self.Toplevel} {Tk.send wm(deiconify self.Toplevel)} self.NetDict = {New NetDictionary.'class' init()} TkDictionary, Connect(NetPort Server Port) thread TkDictionary, NetServe(NetMessages) end thread TkDictionary, Serve(Messages) end end meth close() try {self.NetDict close()} catch E then TkDictionary, HandleException(E) end {self.Toplevel tkClose()} self.closed = unit end meth Serve(Ms) case Ms of M|Mr then TkDictionary, M TkDictionary, Serve(Mr) end end meth ServerOpen(NetPort) {New ServerDialog init(self.Toplevel @CurrentServer @CurrentPort proc {$ S P} TkDictionary, Connect(NetPort S P) end) _} end meth Connect(NetPort Server Port) TkDictionary, SetDatabases(DEFAULT_DATABASES) TkDictionary, SetStrategies(DEFAULT_STRATEGIES) TkDictionary, Log('Connect to '#Server#' on port '#Port) {Send NetPort connect(Server Port)} end meth ServerStatus(NetPort) TkDictionary, Log('Request server status') {Send NetPort serverStatus()} end meth ServerInfo(NetPort) TkDictionary, Log('Request server information') {Send NetPort serverInfo()} end meth ShowInfo(NetPort) DBs in DBs = {Filter TkDictionary, SelectedDatabases($) fun {$ DB} DB \= '!' andthen DB \= '*' end} if DBs \= nil then TkDictionary, Log('Request information on: '# {FormatDBs DBs @Databases}) {Send NetPort showInfo(DBs)} else {New TkTools.error tkInit(master: self.Toplevel text: 'Select a non-generic database first.') _} end end meth About() Dialog = {New TkTools.dialog tkInit(master: self.Toplevel root: pointer title: 'About Dictionary Client' buttons: ['Ok'#tkClose] default: 1 focus: 1 pack: false)} Icon = {New Tk.label tkInit(parent: Dialog image: Images.dict)} Title = {New Tk.label tkInit(parent: Dialog text: 'Dictionary Client')} Author = {New Tk.label tkInit(parent: Dialog text: ('Programming Systems Lab\n'# 'Universität des Saarlandes\n'# 'Contact: Leif Kornstaedt\n'# ''))} in {Tk.batch [grid(Icon row: 0 column: 0 padx: 4 pady: 4) grid(Title row: 0 column: 1 padx: 4 pady: 4) grid(Author row: 1 column: 0 columnspan: 2 padx: 8 pady: 8)]} {Dialog tkPack()} end meth GetDefinitions(NetPort) Word DBs in {self.WordEntry tkReturn(get ?Word)} TkDictionary, SelectedDatabases(?DBs) if Word \= "" andthen DBs \= nil then TkDictionary, Log('Look up `'#Word#'\' in: '# {FormatDBs DBs @Databases}) {Send NetPort getDefinitions(Word DBs NetPort)} end end meth GetMatches(NetPort) Word DBs Strategy in {self.WordEntry tkReturn(get ?Word)} TkDictionary, SelectedDatabases(?DBs) TkDictionary, SelectedStrategy(?Strategy) if Word \= "" andthen DBs \= nil then TkDictionary, Log('Match `'#Word#'\' in: '# {FormatDBs DBs @Databases}# ' using: '#@Strategies.Strategy) {Send NetPort getMatches(Word DBs Strategy NetPort)} end end meth Lookup(Word DB NetPort) {Send NetPort getDefinitions(Word [DB] NetPort)} end meth UpdateDatabases(NetPort) TkDictionary, Log('Update databases') {Send NetPort updateDatabases()} end meth UpdateStrategies(NetPort) TkDictionary, Log('Update strategies') {Send NetPort updateStrategies()} end meth Log(VS) {Tk.batch [o(self.LogText configure state: normal) o(self.LogText insert 'end' VS#'\n') o(self.LogText configure state: disabled) o(self.LogText see 'end')]} end meth NetServe(Ms) case Ms of M|Mr then case M of connect(Server Port) then VS in VS = 'Connecting to '#Server#' on port '#Port#' ...' TkDictionary, Status(VS) try {self.NetDict connect(Server Port)} CurrentServer <- Server CurrentPort <- Port TkDictionary, Status(VS#' done') catch E then TkDictionary, HandleException(E) end [] serverStatus() then TkDictionary, Status('Requesting server status ...') try TkDictionary, Status({self.NetDict status($)}) catch E then TkDictionary, HandleException(E) end [] serverInfo() then VS in VS = 'Requesting server information ...' TkDictionary, Status(VS) try W in W = {New InformationWindow init(self.Toplevel 'Server Information')} {W append({self.NetDict showServer($)})} TkDictionary, Status(VS#' done') catch E then TkDictionary, HandleException(E) end [] showInfo(DBs) then VS in VS = ('Request information on: '#{FormatDBs DBs @Databases}# ' ...') TkDictionary, Status(VS) try {ForAll DBs proc {$ DB} W in W = {New InformationWindow init(self.Toplevel 'Database Information')} {W append({self.NetDict showInfo(DB $)})} end} TkDictionary, Status(VS#' done') catch E then TkDictionary, HandleException(E) end [] getDefinitions(Word DBs NetPort) then VS in VS = ('Looking up `'#Word#'\' in: '#{FormatDBs DBs @Databases}# ' ...') TkDictionary, Status(VS) try T Action W TotalCount in T = {Thread.this} proc {Action Word} TkDictionary, Log('Look up `'#Word#'\' in: '# {FormatDBs DBs @Databases}) {Send NetPort getDefinitions(Word DBs NetPort)} end W = {New DefinitionWindow init(self.Toplevel Action)} TotalCount = {NewCell 0} {ForAll DBs proc {$ DB} Count Res in thread try {self.NetDict 'define'(Word db: DB count: ?Count ?Res)} catch E then {Thread.injectException T E} end end if Count > 0 then Got ToGet in Got = {Access TotalCount} ToGet = Got + Count {Assign TotalCount ToGet} {W status('Retrieved '#Got#'; found '#ToGet)} {List.forAllInd Res proc {$ I Definition} {W status('Retrieved '#Got + I#'; found '#ToGet)} {W append(Definition)} end} end end} {W status('Total: '#{Access TotalCount})} if {Access TotalCount} == 0 then {New TkTools.error tkInit(master: self.Toplevel text: 'No matches for `'#Word#'\' found.') _} {W close()} end TkDictionary, Status(VS#' done') catch E then TkDictionary, HandleException(E) end [] getMatches(Word DBs Strategy NetPort) then VS in VS = ('Matching `'#Word#'\' in: '#{FormatDBs DBs @Databases}# ' using: '#@Strategies.Strategy#' ...') TkDictionary, Status(VS) try Action W TotalCount in proc {Action Word DBs} TkDictionary, Log('Look up `'#Word#'\' in: '# {FormatDBs DBs @Databases}) {Send NetPort getDefinitions(Word DBs NetPort)} end W = {New MatchWindow init(self.Toplevel Action)} TotalCount = {NewCell 0} {ForAll DBs proc {$ DB} Count Res in {self.NetDict match(Word db: DB strategy: Strategy count: ?Count ?Res)} if Count > 0 then Got ToGet in Got = {Access TotalCount} ToGet = Got + Count {Assign TotalCount ToGet} {W status('Retrieving '#Got#'; found '#ToGet)} {List.forAllInd Res proc {$ I Match} {W status('Retrieved '#Got + I#'; found '#ToGet)} {W append(Match @Databases)} end} end end} {W status('Total: '#{Access TotalCount})} if {Access TotalCount} == 0 then {New TkTools.error tkInit(master: self.Toplevel text: 'No matches for `'#Word#'\' found.') _} {W close()} end TkDictionary, Status(VS#' done') catch E then TkDictionary, HandleException(E) end [] updateDatabases() then VS in VS = 'Requesting database information ...' TkDictionary, Status(VS) try TkDictionary, SetDatabases({Append DEFAULT_DATABASES {Map {self.NetDict showDatabases($)} fun {$ DB#DBName} {String.toAtom DB}#DBName end}}) TkDictionary, Status(VS#' done') catch E then TkDictionary, HandleException(E) end [] updateStrategies() then VS in VS = 'Requesting strategy information ...' TkDictionary, Status(VS) try TkDictionary, SetStrategies('.'#'Default'| {Map {self.NetDict showStrategies($)} fun {$ Strat#StrategyName} {String.toAtom Strat}#StrategyName end}) TkDictionary, Status(VS#' done') catch E then TkDictionary, HandleException(E) end end TkDictionary, NetServe(Mr) end end meth HandleException(E) case E of system(os(os _ 110 ...) ...) then TkDictionary, Status('Connection timed out') elseof system(os(os _ 111 ...) ...) then TkDictionary, Status('Connection refused') elseof error(netdict(unexpectedResponse _ N Response) ...) then if N == unit orelse N < 500 then {Raise E} else TkDictionary, Status('Server error: '#Response) end elseof error(netdict(serverClosed Reason) ...) then TkDictionary, Status('Connection closed'# case Reason of unit then "" else ': '#Reason end) elseof error(netdict(notConnected) ...) then TkDictionary, Status('Not connected') else {Raise E} end end meth Status(VS) {Tk.batch [o(self.StatusText configure state: normal) o(self.StatusText delete p(1 0) 'end') o(self.StatusText insert 'end' VS) o(self.StatusText configure state: disabled)]} end meth SetDatabases(Pairs) Databases <- {List.toRecord databases Pairs} {self.DatabasesList tk(delete 0 'end')} {Dictionary.removeAll self.DatabaseIndices} {List.forAllInd Pairs proc {$ I DB#DatabaseName} {self.DatabasesList tk(insert 'end' DatabaseName)} {Dictionary.put self.DatabaseIndices I - 1 DB} end} {self.DatabasesList tk(selection set 0)} end meth SelectedDatabases($) {Map {self.DatabasesList tkReturnListInt(curselection $)} fun {$ I} {Dictionary.get self.DatabaseIndices I} end} end meth SetStrategies(Pairs) Strategies <- {List.toRecord strategies Pairs} {self.StrategiesList tk(delete 0 'end')} {Dictionary.removeAll self.StrategyIndices} {List.forAllInd Pairs proc {$ I Strategy#StrategyName} {self.StrategiesList tk(insert 'end' StrategyName)} {Dictionary.put self.StrategyIndices I - 1 Strategy} end} {self.StrategiesList tk(selection set 0)} end meth SelectedStrategy($) {Dictionary.get self.StrategyIndices {self.StrategiesList tkReturnListInt(curselection $)}.1} end end end mozart-1.4.0.20080704/share/demo/DictClient/NetDictionary.oz0000664000000000000000000003610406651575416021654 0ustar rootroot%%% %%% Author: %%% Leif Kornstaedt %%% %%% Copyright: %%% Leif Kornstaedt, 1998 %%% %%% Last change: %%% $Date: 1999-01-21 11:01:50 +0100 (Thu, 21 Jan 1999) $ by $Author: schulte $ %%% $Revision: 10566 $ %%% %%% This file is part of Mozart, an implementation of Oz 3: %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% %% %% This functor defines a class encapsulating the whole of %% the DICT protocol. %% %% Not implemented yet: %% -- interpretation of the server banner %% -- authentication %% -- OPTION MIME %% functor import Error(registerFormatter) Open(socket text) export 'class': NetDictionary defaultServer: DEFAULT_SERVER defaultPort: DEFAULT_PORT prepare %% Name of default server to connect to DEFAULT_SERVER = 'dict.org' %% Default port to connect to DEFAULT_PORT = 2628 %% String sent by the client to identify itself CLIENT_TEXT = 'Mozart client, http://www.mozart-oz.org/' fun {DropCR S} %% Discard the final return character of a line. case S of "\r" then "" elseof C1|Cr then C1|{DropCR Cr} [] nil then "" end end fun {DropSpace S} %% Discard leading whitespace. {List.dropWhile S fun {$ C} C == & orelse C == &\t end} end %% %% Converting between UTF-8 and UCS-4 [RFC2044] %% %% UCS-4 range (hex.) UTF-8 octet sequence (binary) %% 0000 0000-0000 007F 0xxxxxxx %% 0000 0080-0000 07FF 110xxxxx 10xxxxxx %% 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx %% 0001 0000-001F FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx %% 0020 0000-03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx %% 0400 0000-7FFF FFFF 1111110x 10xxxxxx ... 10xxxxxx %% local SixBits = 0b1000000 fun {CharToSeq C Acc} case C of 0 then Acc else {CharToSeq (C div SixBits) (C mod SixBits)|Acc} end end fun {AppendSeq Seq N Rest} case Seq of I|Ir then (I + N)|{AppendSeq Ir 0b10000000 Rest} else Rest end end in fun {UCS4toUTF8 S} case S of C|Cr then if C =< 0x0000007F then C|{UCS4toUTF8 Cr} elseif C =< 0x000007FF then {AppendSeq {CharToSeq C nil} 0b11000000 {UCS4toUTF8 Cr}} elseif C =< 0x0000FFFF then {AppendSeq {CharToSeq C nil} 0b11100000 {UCS4toUTF8 Cr}} elseif C =< 0x001FFFFF then {AppendSeq {CharToSeq C nil} 0b11110000 {UCS4toUTF8 Cr}} elseif C =< 0x03FFFFFF then {AppendSeq {CharToSeq C nil} 0b11111000 {UCS4toUTF8 Cr}} elseif C =< 0x7FFFFFFF then {AppendSeq {CharToSeq C nil} 0b11111100 {UCS4toUTF8 Cr}} else {Exception.raiseError netdict(nonUCS4character C)} unit end [] nil then nil end end end local SixBits = 0b1000000 fun {SeqToChar N Seq Acc ?Rest} case N of 0 then Rest = Seq Acc elsecase Seq of I|Ir then if I < 0b1000000 orelse I >= 0b11000000 then {Exception.raiseError netdict(nonUTF8element I)} end {SeqToChar N - 1 Ir Acc * SixBits + (I - 0b10000000) ?Rest} [] nil then {Exception.raiseError netdict(tooShortUTF8character)} unit end end in fun {UTF8toUCS4 Seq} case Seq of I|Ir then if I >= 0b11111100 then Rest in {SeqToChar 5 Ir I - 0b11111100 ?Rest}|{UTF8toUCS4 Rest} elseif I >= 0b11111000 then Rest in {SeqToChar 4 Ir I - 0b11111000 ?Rest}|{UTF8toUCS4 Rest} elseif I >= 0b11110000 then Rest in {SeqToChar 3 Ir I - 0b11110000 ?Rest}|{UTF8toUCS4 Rest} elseif I >= 0b11100000 then Rest in {SeqToChar 2 Ir I - 0b11100000 ?Rest}|{UTF8toUCS4 Rest} elseif I >= 0b11000000 then Rest in {SeqToChar 1 Ir I - 0b11000000 ?Rest}|{UTF8toUCS4 Rest} elseif I >= 0b10000000 then {Exception.raiseError netdict(nonUTF8character Seq)} unit else I|{UTF8toUCS4 Ir} end [] nil then nil end end end define %% %% Extended Socket Class for Protocol Basics %% class TextSocket from Open.socket Open.text prop final feat crash % nullary procedure to invoke when server closes connection meth getS($) %% Override `Open.socket,getS' to discard the final return character. case Open.text, getS($) of false then false elseof S then {DropCR {UTF8toUCS4 S}} end end meth getTextLine($) %% Read a single line of a (multi-line) text response. %% A single period on a line has special meaning; return 'period'. %% Other periods at the beginning of the line are doubled. %% If the connection has been closed, return 'closed'. case TextSocket, getS($) of false then closed elseof "." then period elseof &.|(S=&.|_) then S elseof S then S end end meth getTextual($) %% Read a multi-line text response. case TextSocket, getTextLine($) of closed then {Exception.raiseError netdict(serverClosed unit)} {self.crash} unit [] period then "" elseof S then S#'\n'#TextSocket, getTextual($) end end meth expect(Ns ?N ?Rest) %% Read a status response from the server. %% A status response is a line starting with a three-digit %% response code. Ns is a list of the handled response codes; %% return the actual response code in N and the rest of the %% line in Rest. case TextSocket, getS($) of false then {Exception.raiseError netdict(serverClosed unit)} {self.crash} elseof S=(A|_) andthen {Char.isDigit A} then N = {String.toInt {List.takeDropWhile S Char.isDigit $ ?Rest}} if N == 420 orelse N == 421 then % general error codes {Exception.raiseError netdict(serverClosed 'Error '#N)} {self.crash} elseif {Member N Ns} then skip else {Exception.raiseError netdict(unexpectedResponse Ns N {DropSpace S})} end elseof S then {Exception.raiseError netdict(unexpectedResponse Ns unit S)} end end meth writeLine(S) V in %% Write a command S to the server. %% Append the required return/linefeed character sequence. %% Raise an exception if the connection has been closed. V = {UCS4toUTF8 {VirtualString.toString S#'\r\n'}} try TextSocket, write(vs: V) catch system(os(os 4: Text ...) ...) then {self.crash} {Exception.raiseError netdict(serverClosed Text)} end end end %% %% Parsing a Status Response %% local proc {GetArg S Quote ?Arg ?Rest} case S of C1|Cr then if C1 == &\\ then case Cr of C2|Crr then Argr in Arg = C2|Argr {GetArg Crr Quote ?Argr ?Rest} [] nil then {Raise error} end elseif C1 == &" orelse C1 == &' then if C1 == Quote then {GetArg Cr unit ?Arg ?Rest} elseif Quote == unit then {GetArg Cr C1 ?Arg ?Rest} else Argr in Arg = C1|Argr {GetArg Cr Quote ?Argr ?Rest} end elseif (C1 == & orelse C1 == &\t) andthen Quote == unit then Arg = nil Rest = Cr else Argr in Arg = C1|Argr {GetArg Cr Quote ?Argr ?Rest} end [] nil then Arg = nil Rest = nil end end fun {GetArgs S} T in T = {DropSpace S} case T of nil then nil else Arg Rest in {GetArg T unit ?Arg ?Rest} Arg|{GetArgs Rest} end end in fun {Argify S} try {GetArgs S} catch error then {Exception.raiseError netdict(illegalArgString S)} unit end end end %% %% Escaping Strings in Commands %% local fun {IsAtomChar C} case C of &" then false [] &' then false [] &\\ then false else & < C end end fun {EscapeSub S} case S of C|Cr then if C == &" orelse C == &\\ orelse C < & then &\\|C|{EscapeSub Cr} else C|{EscapeSub Cr} end [] nil then "\"" end end in fun {Escape VS} S in S = {VirtualString.toString VS} if S \= "" andthen {All S IsAtomChar} then S else &"|{EscapeSub S} end end end %% %% Main Class Encapsulating the DICT Protocol %% class NetDictionary prop locking attr socket serverBanner meth init(Server <= unit Port <= DEFAULT_PORT) %% If Server is non-unit, open a connection to it at Port. socket <- unit serverBanner <- "" if Server \= unit then NetDictionary, connect(Server Port) end end meth connect(Server <= DEFAULT_SERVER Port <= DEFAULT_PORT) Socket in %% Open a connection to Server at Port. %% If a connection is currently open, close it before. lock if @socket \= unit then NetDictionary, close() end Socket = {New TextSocket client(host: Server port: Port)} Socket.crash = proc {$} NetDictionary, Crash() end try serverBanner <- {Socket expect([220] _ $)} {Socket writeLine('CLIENT '#CLIENT_TEXT)} {Socket expect([250] _ _)} socket <- Socket catch E then {Socket close()} {Raise E} end end end meth getBanner($) %% Return the banner sent by the server upon connection. case @socket of unit then "" else @serverBanner end end meth close() %% Close the current connection (if any). %% Send a QUIT command and wait for the status response. lock case @socket of unit then skip elseof Socket then {Socket writeLine('QUIT')} try {Socket expect([221] _ _)} finally {Socket close()} socket <- unit end end end end meth Crash() socket <- unit end meth status($) %% Send a STATUS command and return the status response. lock case @socket of unit then {Exception.raiseError netdict(notConnected)} unit elseof Socket then {Socket writeLine('STATUS')} {DropSpace {Socket expect([210] _ $)}} end end end meth showServer(?Text) %% Send a SHOW SERVER command and return the text reponse. lock case @socket of unit then {Exception.raiseError netdict(notConnected)} elseof Socket then {Socket writeLine('SHOW SERVER')} {Socket expect([114] _ _)} {Socket getTextual(?Text)} {Socket expect([250] _ _)} end end end meth showInfo(DBName ?Text) %% Send a SHOW INFO command and return the text reponse. lock case @socket of unit then {Exception.raiseError netdict(notConnected)} elseof Socket then {Socket writeLine('SHOW INFO '#DBName)} {Socket expect([112] _ _)} {Socket getTextual(?Text)} {Socket expect([250] _ _)} end end end meth 'define'(Word db: DB <= '*' count: Count <= _ $) %% Query for definitions for Word in database DB. lock case @socket of unit then {Exception.raiseError netdict(notConnected)} unit elseof Socket then Rest in {Socket writeLine('DEFINE '#DB#' '#{Escape Word})} case {Socket expect([150 552] $ ?Rest)} of 150 then try Count = {String.toInt {Argify Rest}.1} catch error(...) then {Exception.raiseError netdict(malformedResponse 150 Rest)} end NetDictionary, GetDefinitions($) [] 552 then Count = 0 unit end end end end meth GetDefinitions(?Ds) Rest in case {@socket expect([151 250] $ ?Rest)} of 151 then case {Argify Rest} of [Word DB DBName] then Dr Body in Ds = definition(word: Word db: DB dbname: DBName body: Body)|Dr {@socket getTextual(?Body)} NetDictionary, GetDefinitions(?Dr) else Ds = nil {Exception.raiseError netdict(malformedDefinition Rest)} end [] 250 then Ds = nil end end meth match(Word db: DB <= '*' strategy: Strategy <= '.' count: Count <= _ $) %% Query for matches for Word in database DB using Strategy. lock case @socket of unit then {Exception.raiseError netdict(notConnected)} unit elseof Socket then Rest in {Socket writeLine('MATCH '#DB#' '#Strategy#' '#{Escape Word})} case {Socket expect([152 552] $ ?Rest)} of 152 then try Count = {String.toInt {Argify Rest}.1} catch error(...) then {Exception.raiseError netdict(malformedResponse 152 Rest)} end NetDictionary, GetPairList($) [] 552 then Count = 0 unit end end end end meth showDatabases($) %% Send a SHOW DATABASES command and return the text response. %% This consists of a list of pairs ID#Name. lock case @socket of unit then {Exception.raiseError netdict(notConnected)} unit elseof Socket then {Socket writeLine('SHOW DATABASES')} {Socket expect([110] _ _)} NetDictionary, GetPairList($) end end end meth showStrategies($) %% Send a SHOW STRATEGIES command and return the text response. %% This consists of a list of pairs ID#Name. lock case @socket of unit then {Exception.raiseError netdict(notConnected)} unit elseof Socket then {Socket writeLine('SHOW STRATEGIES')} {Socket expect([111] _ _)} NetDictionary, GetPairList($) end end end meth GetPairList($) case {@socket getTextLine($)} of closed then {Exception.raiseError netdict(serverClosed unit)} NetDictionary, Crash() unit [] period then {@socket expect([250] _ _)} nil elseof S then case {Argify S} of [A B] then A#B|NetDictionary, GetPairList($) else {Exception.raiseError netdict(malformedPair S)} unit end end end end %% %% Formatting Error Exceptions %% {Error.registerFormatter netdict fun {$ E} T in T = 'net dictionary error' case E of netdict(serverClosed Reason) then error(kind: T msg: 'Server closed connection' items: case Reason of unit then nil else [hint(l: 'Reason' m: Reason)] end) elseof netdict(illegalArgString ArgString) then error(kind: T msg: 'Illegal argument string received from server' items: [hint(l: 'Got' m: ArgString)]) elseof netdict(serverError Response) then error(kind: T msg: 'Server error' items: [hint(l: 'Response' m: Response)]) elseof netdict(notConnected) then error(kind: T msg: 'Not connected') elseof netdict(unexpectedResponse Expected N Response) then error(kind: T msg: 'Unexpected response from server' items: [case Expected of I1|Ir then hint(l: 'Expected one of' m: {FoldL Ir fun {$ In I} In#' or '#I end I1}) else hint(l: 'Expected' m: Expected) end hint(l: 'Response' m: case N of unit then Response else N#' '#Response end)]) elseof netdict(malformedResponse Code Rest) then error(kind: T msg: 'Malformed response' items: [hint(l: 'Response code' m: Code) hint(l: 'Response text' m: Rest)]) elseof netdict(malformedDefinition Rest) then error(kind: T msg: 'Malformed definition response' items: [hint(l: 'Response' m: Rest)]) elseof netdict(malformedPair String) then error(kind: T msg: 'Malformed pair' items: [hint(l: 'Got' m: String)]) else error(kind: T items: [line(oz(E))]) end end} end mozart-1.4.0.20080704/share/demo/DictClient/Main.oz0000664000000000000000000000361307363003573017752 0ustar rootroot%%% %%% Author: %%% Leif Kornstaedt %%% %%% Copyright: %%% Leif Kornstaedt, 1998 %%% %%% Last change: %%% $Date: 2001-10-16 12:10:03 +0200 (Tue, 16 Oct 2001) $ by $Author: kornstae $ %%% $Revision: 14332 $ %%% %%% This file is part of Mozart, an implementation of Oz 3: %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% %% %% The Main Application %% %% Parse the command line, initialize the connection, %% wait for the graphical front-end window to be closed %% and exit. %% functor import Application(getCmdArgs exit) System(printError) Property(get) TkDictionary('class') GtkDictionary('class') prepare ArgSpec = record(help(rightmost char: [&? &h] default: false) server(single char: &s type: string default: 'dict.org') host(alias: server) port(single char: &p type: int default: 2628) mode(single type: atom(tk gtk) default: tk)) UsageString = '--help, -?, -h Display this message.\n'# '--server=HOST, --host=HOST, -s HOST\n'# '--port=PORT, -p PORT\n'# ' Initially try to connect to HOST on PORT.\n'# '--mode=tk, --mode=gtk\n'# ' Widget toolkit to use (default: tk).\n' define proc {Usage VS N} {System.printError VS#'Usage: '#{Property.get 'application.url'}#'