The Sample Application
Let's look at a sample application that uses clean architecture.
We'll cover the following
To keep a single theme throughout the course, most of the code examples show code taken from a web application for transferring money online. We’ll call it “BuckPal”.
The BuckPal application allows a user to register an account, transfer money between accounts, and view the activities (deposits and withdrawals) on the account.
I’m not a banking specialist by any means, so please don’t judge the sample code based on legal or functional correctness. Rather, judge it on structure and maintainability.
The problem with sample applications used in software engineering books and online resources is that they’re too simple, and they often fail to highlight the real-world problems that we struggle with every day.
Sample applications must also not be too complex because unnecessary complexity may obscure the concepts being discussed and confuse a learner.
I hope to have found a balance between “too simple” and “too complex” with the BuckPal application in this course.
Application
PK A META-INF/ PK A m±>=@ ? META-INF/MANIFEST.MFóMÌËLK-.Ñ K-*ÎÌϳR0Ô3àåòÌ-ÈIÍMÍ+I, êdä¤Z)¸%¦ä¤*%¤ñrñr PK A org/ PK A org/gradle/ PK A org/gradle/wrapper/ PK A ªÙfØ ê - org/gradle/wrapper/BootstrapMainStarter.classV[WWþd`c@7.µÖV°´J½ -lDÛÉ!NfÒÉÄKï{ý¾ö¥O]«} ´®ÚÕ×þþ>i÷É@«,Ö3ûìÛ÷í}öäïg¿?p ?(âLÊxKÆE½¸¤à2®(ÂU±L+!£`³b¹ÖëBòvædde(è¼g±(ãÆNÄð\n wKb¹%ÛxWÁ{x_Þe±Í+8Î9gX;ÁJ$¤I»@Ò®añÙji;óú²IhÆÎëæ¢îâ½.ÜU£ÂÌØN1]tôÉÓ÷½\æNúm»^ftÃʺºãrg!\[c¥Ìý6u«ÎºaÇ}a§/&÷òÑ"EØÛFAñC^±KËîfcNÿôªîPöyÛrùwÒÔ+8 ã¾ ÅÝôÂ\¦áH(kOÄ°§!¶'¡ÅùwWíC_ÃWLwÓþiö6÷°ku{nhôwWù»3zÙS±BÁ.>Èó²kØVEFª³bX ^µò«Üñðõ'Z¨k%CZ1³Urµ«N9QЮJ)a«âª8×ömÃÚx¢ÂÀwU(É°TØ(«ø@,GàȨ¨pQUq÷)eê_¢YǺì½\T<ÀCÊ[ðL[¨Rñ!>bèÞ_[¾C´«øPÅô¦]áGâhoêyÓX¹}¦âs|¡âK|Ehý¤F¤FSC·Êÿ¯ñ Õ{3ì\Õrß(ÃÅI»j4Ëv5*ïrÍ]åL|jWÏÏiÕÀX® ÚàñÊ`JÅ·øN¤ö=Ãàÿ¼]û·ëCºAG Év-µ6Jصæ¦ÚD²ñzL7{ª®Ù¢!Írí+r7û°âòRóE<´Zx·»×u[43ÁÌ"mc%GCk̯:\' vå«p¼ÇÂúR| »mÆE_âá:MÚ×çÅñÄÖaµ`ZP7ÛØ,m±I¾hÐDë}ºúl£/ÿ^4ùª[ETÔ¼¸1G[JDjj\q.¦d"¹¥dB8«éÜÌõÆïnMIwéÇv<Þ$ +¶CJ-@ÛÖèFä¶Îé<@ßfñ#Öcô¦'£gxh ìWÚìÀqZ#p?NЪú DÔ"-2f¤'¬aÇìrÒr¡ÑÂ5D²ëkèXCç´%.Õ°3.EÕv ãáènÒîÊ ¢ÝÙöEâFh.4Lï{oÄ¥¿{,Ì~CHNò;NZû(øÂqÃôÑ?~\Âa,@ÃmÂZ ü?Ázòb7Ç(R$B¿Ò´ÅÄKå4§ð2>OãÒ:S§Â?{Î^#I?Øs &ËÑ-£×ûÉèé÷0æeÍ0NèSgýgÊ*BÏé'èÍ G÷a ñ§¡3RtèGéN jè¨áàcDâá_Iì§çÿ<Á¡\´?àj× ýéVÐÓK© 4=J°OÒþÁth¤£¡XhMo3íÑÁ<P»z7;ð/éÑ5ö:ãüPK A hQþ}¢ Ò # org/gradle/wrapper/Download$1.class}M Â0 ßh5µ*v/×½?àB\xØØT{7ÀC)âÖæ ¾÷^ïÇÀCÆ0 $g{sÜZÆ[ÛmE¾,Å]&;i룲¾Ú!!̬S\9kÉ'ªJ:þË-VÑÁé6Zx/=!m«¸FñÓ¥YMþiHç tðnX¡~~Ð8\j4þ PK A Çåî© L 4 org/gradle/wrapper/Download$ProxyAuthenticator.classS]OA=³-l]¶XWmEäC@Ü¢v_ÑÔjHPÃÓÐNÚ5ËN3ZúLÐD_hâðGï 4E÷agæÞsÎ=wnæ×ïï?ÜÇcuàbÖÆ\ ónb! ÅÌöeÜvocÅÆñgaêç ?¿Å,Ë`¸X cñº½»#Ô¾QÄ«È*¶¸ ͹LêFØ¢Ü{ݵ¶nXU®¥bp_ƱPå·Z0ÅTõ ®x-AGñfS¨à ìÄäµ¥³%©ºÐDïHUÈ 2fXôó÷üb¡á »þÈ«%ÓµµWd;ÈàlʶªõÐô>NiLÆ9&Z7MÓïÛP6î¹( Kü8æ2À$6V]îSä¡G ÿ»Lì±SM3dzÄÇõ`³ÛÒbaÂÌEIBê.ò_hÆõRþláÉà?R3§cdBËr«5¥8Húùí2CnHí²ðô61O¯Æ ù°Ì A/N4ÀúJú÷q f>= <\¥5,r}ò+\îï¼ä!ƼqÏ>Dê.Àùr"ç Ø'ÙOtþLûÒ¹#i¦1Õ~J«Õ÷ÅûÊú¾Ìî:¦{´=ü®ôJ[ÔzáàeR PK A 5¶<À ! org/gradle/wrapper/Download.classY |\ÇYÿÒÕÓáõ¹¾²NìXÖi;ËK¾dˬäÊvâ<IOÒÚ«]åí[ÛJJCJ ¥%£4ÍѤ@Û@)à´õÊÚ&ê@rS å(PÎPîhZ÷?³v¥Hë_4oæoæ»ÿ3³ùÜ·^úòÖ Öã×èÁg«Ø»¡×Tóëªù 5û9¿Äoá· |> ~'ßÅïñ~_5 xþP5Äü±/ø ãOáÏx_TÓ_RÍø Þ¿TÍ_ø²úþuÏáoø[|E5WEioâøGü6ñzñ/~¨õ¯ñ¯ø·jü;þ#gñ&þKQþ[íô5Eù¯+}þG5ÿ«ÿSÍ7Tój¾©o)nB³úEL©0¥Ò_ûñYSüüJ,b¨I7IU]4¥:kbRcH"ÕRoÊ2O ÊrYaÊJµë*CV²Æ°)k YgÊú d)M¹Eí¡&²É[M¹Íͦl1åvS¶Ò 6ØfH£!M«+pÜθJ9)A¨ÏM^9ö&µ½¤+¨ì9ÞÓ{ªçÜСþhWoÙºÏÛí¶¸hzn,1±OPÓL¤<;á Ùñ´cJ³ ¶¯¿÷Hÿ¡hô\çQn"®JåkAuÇàáÃúÏE»NªH ÄåëNºm®=wÚ.¹öô´ã¶uëI18ú½!ÇMÅ Aý´pTª;òÚ§¥Ü>ñ¤=Ö·;î%bÞ~AGÃ,6}1eÛÀ×£uݱÓqÜ{$î(ç%GíøíÆÔ8Gôy1úÃR*SÅä}7æ¾Y3Ö&ã±´ë,L íöÊÅTõìÑ'ìé5æXN¬àì¾ ÇkìïÊI%ÛÇâ`ØccJ5¦K)+³dÌIy±DNVméZ&À¡Ë£Î´äâú¼Ì®ç¸ ;NåÒn|Á®Ý\VN9î '©üHz|\eLÅêHOõ;J÷ÚNoyÝNbÂd,ó9ÖL+!Ìçcä"ÞÍWù¸Ú®)ËÚH8£JU*PL{UszÓÞtÚ£Ó{Ó1._YíJÌOÒbH«!ml7d!;©oÊwÝ`ã_o[èO:$fÈMwØ©ØèÂxn+®ÅF¨ÀGc\9µ+1$¦Ø)g÷®CQ]·7ɬr R?áxÙEî ÇLÒkø\g<NimÙ9ò[fÎóÙ¡[ O½#ç¹HE]ÑîìuÙn<¦¸Vq)ϸ§1 #ËÎê¢2»õ£²K°E=Û3XðÄåRj¶ö\B#9ÍM/%]Z*ÙNg«`ECÙ6ä$ÆZWg9X\6?U ©,V%SÅÄî(<M¦ÝQGs;Øjñ¨j³à"eÁÃyiÕ\Ä%ßÇè¾IÏnV`¡47äNKvã#Ö%àióâsrd!wY²WÚ-Ù'w[rì·ð.¼ÃÂOãg,¹Wî#@åë¤C±3V\M,ÃbÌ(RûPM%rÐÂða/a.P·h[rH[rDò\Z Kºä%Ç¥ÛôH¯%}JÛ'å$cSpᦧ=gÌ~K¢2 X^¨ðÞBþ Âù-#ìT¤ha«RËTýZ2$§y%ÃrÚ3rV KîKPa°Ïs³äAÕØJÏÕUÍîëXÈ`VàWÑKY2.+§ô÷tõ¦h£}RØ$/:nÄNPÛ3Ê£"2/É#s"G´#c<ÜØHZñ´Fúâ1C-KÅXQtA`´Y¨Ä%ÝØÃ9Z½°:Ò±¸®Ð@V=åI?XSVÄ ùP¯Ö¶Rl¼µCÃ% a©çÁ@¿ Î-r¹T¼vsaEm|Y rr!È×°ý[×i¹XÂ_º¼. "z¹õòT¼u$k=h{¶73íé}}-æ^Vµît~³~Z±)§hÏû󹦼]&0©È¥7¹Dàc©H"éERééé$u6Cü:¡óõ,[2¹QµÅ¨ØÃ=¸Ę̈*Ô@Öz1kVn«ºìpjb$SY ²WB¶5°ÛjÛ4lIíÓÿm+êZò°<B,)Sá]w K!ØVæö|Ýåð]î§ùåÕbLH±swILºÉKÙK׺âÎ$<ûrQ¨W=ºJóowCJ«f)i7£Ï°%ÍÖWy{¼)Ç;èÛé8]ÑqX§÷¨QbmĬëêóÝü /0ua,æ¦ôµó4ÉKj8çïxË_4à åo\j®æ&±vÁ%¸êwJóv:ï¨eî9åïÔµ´´$¾«L-¾îeïD¥·PÚÞÅ[¦«¯¨þ3jX_¹ÛkÚUÞÌK/Yªz¶ÅR]óLñųO¡IAåeȯ!«Ê]òÏ¿ãs ÑTÃEn/^Ü9i»QåÛĨSra: ¹U®S¦ïâCíò'ß)^:E eëò÷³cÇÎþKnÌcômW¢TòiJúh<R×&Æ$::é(¬1Ø?LyÙ^A0׳U¨LöN¦ ꨻öľÈM¿©\YLéúÞ)ô©O-Uîz¬ª©åMÝÓsGº·z ÃNÙ©QE¹tÛÂ[ò¾lÆÀNx1[î2MÿªHå¶Ûòÿ( bÜWfÍEkwYô´XóæèÇXâbòC¿·Ïqm¹ÇrXǧ~rYUÎBõm\:G È}¦7t.+}óÏÀxÒ²½&ñTr\ØõèÀ0b8Ïþ c-¦(OBH½Ø©þ¦s_>#ø ÷2fØ>ÌÑ üðñ[ÕØ$Í-³õ6hÆ ¶`âV¼½Æ,#¾oÓ?ëUiA¢{JT î)aZÄ£9ïäú!pcã,*®¡²±å|aß5ø¯!À c^îF l¦´-ÜïvÔb+V Ø ÔBé²+»cA]6j3+tÏÓº¨ÒÊG*Q9zµÀyU7P;à°Ì¢ú:,¥K¥Ö¥V¯o¡Z±Ûµl+».'ûíWøxEd½Z©Ö5gPAí©Æ¦æYÔÍÛÝ÷î»ý;õ¾ìMu¸Ô²êðCÚ?̾(ûïÊ«ÜþÙ¯£vÓuÔg°¬=0ÐðSðY¬ì 2XÕîkl ûf±._Ón}¡pØÈ`mØÁºvÿ²|Êl7ÕhÃî`Õêª=5aØÌ`ãðîªç1u·dy +?M¡[3¸mC[fqûË«jVV]±÷Ô¬ªÖßêUÕ+°uªê=Ï¡©ñ¨mË ñ&:{ªI Ü@H}V¯¬ªù$h +«2h~áæ»õZÃþ0ÃþÚZn í/à¶öºòó×½ü¢NºÏãuºìu|U³!}/Ó ØËù}ä¸îßϹÔûÐØÎt²=.FÐáG1Äѱú3ºÞ=K/ ÇÓ8¢%çÇ1Wq²Oã8/á,¾ð£§ñuÒÞÀY< ~*ØbaD§ÀRZ¼wãGÔx3q J¾Â¹'.²ÖUú6ü8{AÊ|?D5u¼÷°WCk^ÃOÑVJ|J±K)ö²)U!ÕxïC¥¨´Î®ð§h_'÷«¨ºÉk¬7°ÃÀ35ð~ÏxÞ@¿åÜd.Å%ëè¸IM Q7iMÉ]|à&®~ÑLþØܤ=e÷-*Sý¸«Òãô¢*¯MsØ1ÜÁNasÿvñïNþíæßYÜuµP·½àBlÂÏÒ¥ó">HÎáÃ9¿×ýM³ØÛÓò|/Ú(+}OÃÒI|7¸9tÏöÏâÞÐ}h$wðA'«s²Ø¤ÓtÕCtd «s¢Þ=ĽyÞ_ÀýÙ`: wáç46¾]cvŨfVØL&¾ï³P)q pæqºã`N4gp$t´òÓèÊàXOsè¸wû8®ØîkÎ÷dÐÛîûÂ~NöW6 ú28IÞWÐ+ÔÊÁÒaãn÷Íah8tJØ[^¦&à$ÚOKå7ë£Fz´Ùd¯a·Ò¬½ÄË,«~Ô$KéQÓc,$寳ôÀrüË·Ü·1j¥öúKøeFp>ÎÒcÔ¯âEöú cOaöã_?®ýÊ+å ÊÃM¨¸Iñ:7Y ×TJGoò\ñH$h*d0;¤æHsGhÔÐi¶=Í7pn]._xĨoÏàLK6_®2»Î^-dÌ*}R¾|º¿eôaî¢LÙQÐ~Îe^a¨ñu}¢[O2¥òM4k}û9ùærz~BTbÞºvÐÚSÚdÛîÙêã¨O 4Zoê 3ÿ}Ña?þè0Ó$:³gÑa³):\hfc´D¯cl¾ ³Uð<õü Ô¯!tºGX}[Y}ʶ£Y r¶ÈÒ±OkÛBÏhÛÂúõ !Â*z =?÷Ù_a/@ÎWµä_žFU`\ÿ_MêÿEN"ømPK A yL¢¡ Ê 1 org/gradle/wrapper/DownloadProgressListener.classuÁ @Eï+ÓjDËöEÐ@ÛEERûI¦#3cþ[> 4Úv»9×ûñ°ÂÀç¡OĪ.r%ãÐJ[ÍM Çñ,Èä]8ökß_ÃPU:â]3aºý©GÍÆ©±\°^¶&a¡t"-ãEeY²ÿÂè˼8\3¬K tÐBNûÐkØûPK A !9|¶ 3 org/gradle/wrapper/ExclusiveFileAccessManager.classWÛsWÿYÒÚ«u|iªVÍMNZ*;±JlB×NåKÆ[t-دvÅjÇÜSB[(·¶ÐP`x¡3íL«$xô©Ì0Ã}á 0¿³+9¾%L=öÙs¾óÝ¿ß÷íúOÿýý Á¯t<gZ ãYµÌjxNG_ÔpNGϨÃÔî¼Íx^mMESKA-EµH 1¯¶::`éÔvIÃb3lIÅDIGºquñåfxJ_¥~O¡ªcu,áJê§íÄññ _Õð5öñÉ¡±#ùñáSgGFòÏ t_2/YÛtæ³S¾g9óýC®SñMÇ1íªhñt«þDE@äv]ÛÎ;¾ô.¶"Æ,Çò Ä2ù|÷@tÈ-R°mÜrä©jiNzÓæ-=·`Ú3¦g©sõ,jÉ»Þ|vÞ3¶Ì.yf¹,½ìð]XåeËÁBAV*¦cÎKÆÍ 0 ã°Ü¬âëOUß²³×)T=O:~vÈ´me±¿{]ÔsdÁWÊä²å-3ÄQºd» EÝ!£C½ Óq¤] 0E(¹Þ;&f£*2³B5ûþ?ÍÊ^¨¤£±}Òòè«\j÷L§èÂøC¶ÖlÙtGuZÝÛ5Ó[" äMn,Ér¹QïíõÀôtÿ1)ß,,Nå@LÃ×5|CÃ75|K@gùdÙ·'ÂhÊwL¿êQ÷ÄÀtnk}¢2ts¥óÒ&J',ÛVXjÊt³%syNÙnE>]µ¤o3É;6ÄlK¡q¸oF3åV½B½ÖûîÌ>%l W Ä!½8$`¬ÍÀø¶À»ïDÕ²Ò3ð"®x ßèýD]AÌõÙ EßU úð²Wðªï©åûxÀ¹cóLÕQ½V$ÃCnÕ.¦×O<iú2]6UÒÓÅÓ]/ ¾HÛi¯ ~``§¼,"ÞâG~xg4¼nà ¼)gLÚ½Vÿó M ²^2-É L¯µ\:lþ´ïä(ö3¼eà:®jø¹·qZÃ/üWYÐ;A¯¶}3öÜrû»µS#»Û ^L/xîR¨X |:Èu¬öL÷æi¢åYâåÎL÷v;®ÐáÌÖëu°©ñã»!IàÀ¶=¸A½°Ñf§UñyLXuc«ÎU\»êËÓ¦¿ pÿvQNεv5¢»ÇÔÒ|o9LêÞ»rקtû¬KùUl)Ëį̀²¾;¿Wv¢ö椯½74OÚÒ¬È ¦+¾,1±é¸ ÚF[F ýfº >#&¤A7zx N5@¸ïT3Ï(ïúåz§Yò4©}Ï ] Ò³û4½?E¹vqÝÀ<Ì áÓøLø¥ÁNpÿ8>K.ü1´âDgÖ[A|ö4nkhéLp©Á¸ÖS½¼ÍESÑv\ÇcêÙöêÙ~]+èËvvRÜ÷5dwÞ¹ÈÅÊý=ï#rÍ<ª\KªåT´¤öúÛ8ºäloç7ð`.ÕÊÅSñ WÿßÄ®TU4]»Ýï¬~¨Tô®7½6övîãþà7ÝBZ §§Hè Ò«@'¼c ¥¿Klϸ3Ö1·ÿ¿ãcÑƶõDQDDwp>¨äPõzp}ÕÊ@8B gmγ*&_$WÔ ëö+ôkôrÖ}¿F¿A?~Ô(µAZÆÇ8ðÃñü:üÆ°qÁ¤Ð8 Ó"¼Ø Q±câ ï? z5)çqj sDP·hí hô F9Ò¸ë§uì>cÄÑ~êþiMÈvz5ÀHMü¾ ªøð$?b)n¬IPò$)SÐþã¢üݳhÑ Ç§B¢¤<£À¿q¢ÏÒ0¶Ê.Ò¶åÃx½dÐ(§øÇWW½§w@óMìߥß5S< a<õÀuõ.«Ëç3ôäGhí¹ GÞAtü=£dl¥Ù¦@]± ùßéçysýùü:õmO ²¼8x4ó?PK A ì,y - org/gradle/wrapper/GradleUserHomeLookup.classSÛNÛ@=$vÔK J)$´ÄÚÒE¢`@"\@¤<E&Y±#Ç¡¢_Õ¨H}ìC¿©ª:ëK äaföäìÌ9ëÝ?ÿ~þ0QIx&c\Áâ Bñ\¬_DÐ) I Ædè"¿1-òYþeceq7µ_M/.§ünÆHç׶6-u`ºm:%=ã{SúÀ0tßNomé\~ÝÈ1t,¹NÅ7?kÚUNýïðÍl·Ë_`h'²mKn6t¥,oVö¸·cîÙ\èp¦5=K¬ë`¿oU)×+é%Ï,Ú\ÿìå2÷ôÕ`¹[áÞ{ÄS®{X-ôÎRÎ'j-W_±lNo7Ìr0FÂ+y¾`× *·ê¸à2ÄI~*zÑÇ0qOi$¤ÆJV OîÓ^«x9õ¦@Ñø-Ño©wSñ Cßíö©jÙEî1D®Ú«x2+ëÉÚ`óøH}¯·níðß Õº5B'1´¸¿í¹dÐ?aß½8fw©§nBÚqç qhNaê^-ëN 3ß½û0Þd6ÐÃÒjELU1tS&>Õ-Þsc-ÂÄg¥ØONQM}(1á ìÁ#jR`ë¿Íiõm¹õßP/ÊQ«ðWM:Üâ;"¢¬+) Q¤g<Dº)`£W%L&| Ã[þ¢[¬_%Õâ7p%wvM%9§èÐ:)¢ë"»aâh`÷éPK A À!lá7 " * org/gradle/wrapper/GradleWrapperMain.classX\Wÿ,Ì2m"1*<Ë©`L0+(EI¢ã2ÂêîÎÎ ^˵\õJ¼j®×äº^ÙåäÔë%×{ï½z½ær÷3˲eüî÷·ó¾÷½ÿ׿÷=råR¥')Ø'+Pp"§ÊxA.ÁÓe<Cƽ^<Óg ³<Ïõây^ñ|ã"¼@,¾PÁp :ä+x ^*`_&á .â~¯ôâU^¼Z×Èx5xj¼^Ƭ ñFoòâÍ xð øz«Þ&·{ñ/Þ© ïów+¸Ë Þ÷*xÞ¯ IP°WL`Ê W½¸&ãºøüXü°Xü@á×Gñ11|\Á'ðI§e<¤ °¬½§¹5Øv¬¿·çXG÷Á¶cÝú:»»$ø§´³ZCD4ôZf86Ò$aa[ZÌ:¢Eºím}ÍÁ¶ÖNUåpg[_º2Z°©dO8¶öJ( Ôài1)"é]è ÝìÓNDt¡¤Ò"G43,æi¢Ç Ç%¬æHé GôqSÓÍv{:àÌjáòDù+ai`¨Ðd[ºf¯ÊeYF> Ê°Ñ°?ѹZ>f\´Âz\P$ȦaXaòif\çÇl=CpCj±aaì!@¥!#v@bÃü ½çâ=Ð2½²1f ?¶á¬}d¯çÁÒE} +i¡;¬~*ÛaDigIÄÊÞä ½È}iJÛJXù׺ñär ··MtÇep´áá|7HXÈ HîLÄVq$9JWç±×åsQZ¡l6oY)tËdDL·ú{:¹&QΪbï¹¥MdìUÖki¡Óµ1;¡e|NÂÖÀÜ!+Ðã¶ym->J¯0Cº»Kg³È»@´ã±¡ «èÆ!Gaª81wa}c®Wñy|Îͯ8&È|ª~&k¥Ã¶)AÀM£±/âK2¾¬â+ø*yÎH(>ëmÿGM©ø¾®âø¦o©ø6¾Ã©->Ê ªø.¾'ãû*~ª8s*¢©ÁãeüHÅñ +\Ìê½6aå:ãTypèOs=8ÍH³Fãq=ʬ1ßÏÄðs µ.ÌûØâ'Â_L8Ç _àÔì<¢IÎÎÍ3½LÀþJƯUü¿Uñ;Üßã?àkÿNæ ¹VBYÎ?âObßeüEÅ_ñ7WñüSÆ¿TüËøGð_æÓ,åAOÍäDO"f £zføÔ^T^HEö¶h±aÕë42ÊÖ"Z<>FÕ4Ì´OjØÄkNF´&Äóæ×kj×Åk7çäa÷SzÈR%T,Ĩ²äU¥RIaIe²¤ªÒBA,áfSó?j ¶¯ü,KÕl?ãý±Ó1ÖV÷t/_¨ÏRb¤Awºs³@tO·¥Y¶; ^6ªÅÍDTYs©ÁgÛÉðHÂd®+hY ƾ]lóµÆõxËÚf×:ûîne·öåÓ½ðÀÓç±}óh²Y(lMuys ÝÄ;BÂj ÀÈ ÖÌ}RÒæ÷@þ©åÔõöãn^Go®ÁyGFa0ÜïTòev÷¬Ànýqúq]Íé¶ Y· éCniã*ÂiÁ®knÔsëµ#ßõ.ù§N3("®QUL͹ï7 e§´f²fæLºéôνÑÊdéÒÄ}H5õ±&3Nþ]yE× ³v~[éjèÑé4Úb×e¿h5Ûúiå㩶Î5äóPlõì{ÄÛ¹æðYR:³J¼å¶ÆÎG¤`æÚ¹:Í;ØÛÌl`a7õ<NqE\í¬¾QÓ×@Û;"|½¡QݾbëgZZÍïOMuGÉÀÒjÜnï¹ìqܽv-ÙdíjóX>"\©í7ú5s¬'/çT<ýzu»µç<dq:Áûª'p´înø?À?:qý;8[2ÎYsóYó λ²æðò÷bIià¯Äßâú\¶Yz8ØÄÕèå¨:èC?Kqäâfé>*UFÚõI7LÂsCq×JS=~OÞ¿§ø*J|e½ÚÄÂ$ÊgÈ\)ÈSXľÆb±Ø[å÷Ô'±¸±dKe¿LjÉeYËðû¹²¢Ñë÷nÄMb²²±tã$V5*~¥~ ÕþÒ)H}«}5)Ü< 5~o ·¤°v ë´>Ú³ÀÇq=½\KC(G=aVa#¶c:è¯ÃØÇa+¢c&°÷`7îEÎãV\`®aíº1Ç=ä´c7ÅÇÈÝY$îä×J¸ÌgÉ(çAÜcä:Ñ5ºü8ç'b8tîæ(SÖí¼Ù 1ç±ùQ¢] nab8NÛr$DøÍ~:Ê!b-ào-9 À`½¯. úIl Ó¤ Y¤S1 UØO·´ÛF-u `P Ø_wÙF)â}¸#VeßFçߥ¼ä:\e¶_@3æ4ß2[á$6ño³¯Á·%Ǥ°5®+nYo¿4ܺNèÝéSØÄö$v$ñØ;ÀÂàv nHa÷uhô5%±ç~,Dß«Ø;XTß;ÛR¸ýzZæö]²EU0cvÒIBj ˤâc±T±TV2öFÿV*$¬!oÿâ°8«bì8K¤ CçßBõÈØù0JeLÔоÜÒvÚᥰz_Y-±Ø ('I´ Å&±_x§(+Ç(è8V0f¼Tm§#°Ò á³0-fWZLùÚ^AQ)tä;ýd\yNÂl®'þPK A úâæª Û "