From 2d601a4194b8db74d1e85d5acc873470ca479877 Mon Sep 17 00:00:00 2001 From: Fabien Pinckaers Date: Mon, 21 Apr 2014 10:47:49 +0200 Subject: [PATCH] [IMP] Some improvements in code bzr revid: fp@tinyerp.com-20140421084749-uygi1h2vwpc1wk9x --- addons/website_doc/__init__.py | 4 - addons/website_doc/__openerp__.py | 50 ---------- addons/website_doc/controllers/__init__.py | 3 - addons/website_doc/controllers/main.py | 58 ----------- addons/website_doc/data/cron.xml | 15 --- addons/website_doc/data/doc_data.xml | 24 ----- addons/website_doc/data/doc_demo.xml | 67 ------------- addons/website_doc/models/__init__.py | 4 - addons/website_doc/models/doc.py | 39 -------- addons/website_doc/models/res_users.py | 18 ---- addons/website_doc/security/doc_security.xml | 17 ---- addons/website_doc/security/ir.model.access.csv | 3 - addons/website_doc/static/description/icon.png | Bin 29890 -> 0 bytes addons/website_doc/static/src/css/Makefile | 5 - addons/website_doc/static/src/css/website_doc.css | 21 ---- addons/website_doc/static/src/css/website_doc.sass | 19 ---- .../static/src/js/website_doc.editor.js | 31 ------ addons/website_doc/static/src/js/website_doc.js | 19 ---- addons/website_doc/static/src/xml/website_doc.xml | 7 -- addons/website_doc/views/doc.xml | 64 ------------ addons/website_doc/views/website_doc.xml | 100 ------------------- addons/website_forum_doc/__init__.py | 4 + addons/website_forum_doc/__openerp__.py | 47 +++++++++ addons/website_forum_doc/controllers/__init__.py | 3 + addons/website_forum_doc/controllers/main.py | 64 ++++++++++++ addons/website_forum_doc/data/cron.xml | 15 +++ addons/website_forum_doc/data/doc_data.xml | 24 +++++ addons/website_forum_doc/data/doc_demo.xml | 67 +++++++++++++ addons/website_forum_doc/models/__init__.py | 3 + addons/website_forum_doc/models/doc.py | 39 ++++++++ addons/website_forum_doc/models/documentation.py | 43 ++++++++ addons/website_forum_doc/models/res_users.py | 18 ++++ addons/website_forum_doc/security/doc_security.xml | 17 ++++ .../website_forum_doc/security/ir.model.access.csv | 3 + .../website_forum_doc/static/description/icon.png | Bin 0 -> 29890 bytes addons/website_forum_doc/static/src/css/Makefile | 5 + .../static/src/css/website_doc.css | 21 ++++ .../static/src/css/website_doc.sass | 19 ++++ .../static/src/js/website_doc.editor.js | 31 ++++++ .../website_forum_doc/static/src/js/website_doc.js | 19 ++++ .../static/src/xml/website_doc.xml | 7 ++ addons/website_forum_doc/views/doc.xml | 104 ++++++++++++++++++++ addons/website_forum_doc/views/website_doc.xml | 92 +++++++++++++++++ 43 files changed, 645 insertions(+), 568 deletions(-) delete mode 100644 addons/website_doc/__init__.py delete mode 100644 addons/website_doc/__openerp__.py delete mode 100644 addons/website_doc/controllers/__init__.py delete mode 100644 addons/website_doc/controllers/main.py delete mode 100644 addons/website_doc/data/cron.xml delete mode 100644 addons/website_doc/data/doc_data.xml delete mode 100644 addons/website_doc/data/doc_demo.xml delete mode 100644 addons/website_doc/models/__init__.py delete mode 100644 addons/website_doc/models/doc.py delete mode 100644 addons/website_doc/models/res_users.py delete mode 100644 addons/website_doc/security/doc_security.xml delete mode 100644 addons/website_doc/security/ir.model.access.csv delete mode 100644 addons/website_doc/static/description/icon.png delete mode 100644 addons/website_doc/static/src/css/Makefile delete mode 100644 addons/website_doc/static/src/css/website_doc.css delete mode 100644 addons/website_doc/static/src/css/website_doc.sass delete mode 100644 addons/website_doc/static/src/js/website_doc.editor.js delete mode 100644 addons/website_doc/static/src/js/website_doc.js delete mode 100644 addons/website_doc/static/src/xml/website_doc.xml delete mode 100644 addons/website_doc/views/doc.xml delete mode 100644 addons/website_doc/views/website_doc.xml create mode 100644 addons/website_forum_doc/__init__.py create mode 100644 addons/website_forum_doc/__openerp__.py create mode 100644 addons/website_forum_doc/controllers/__init__.py create mode 100644 addons/website_forum_doc/controllers/main.py create mode 100644 addons/website_forum_doc/data/cron.xml create mode 100644 addons/website_forum_doc/data/doc_data.xml create mode 100644 addons/website_forum_doc/data/doc_demo.xml create mode 100644 addons/website_forum_doc/models/__init__.py create mode 100644 addons/website_forum_doc/models/doc.py create mode 100644 addons/website_forum_doc/models/documentation.py create mode 100644 addons/website_forum_doc/models/res_users.py create mode 100644 addons/website_forum_doc/security/doc_security.xml create mode 100644 addons/website_forum_doc/security/ir.model.access.csv create mode 100644 addons/website_forum_doc/static/description/icon.png create mode 100644 addons/website_forum_doc/static/src/css/Makefile create mode 100644 addons/website_forum_doc/static/src/css/website_doc.css create mode 100644 addons/website_forum_doc/static/src/css/website_doc.sass create mode 100644 addons/website_forum_doc/static/src/js/website_doc.editor.js create mode 100644 addons/website_forum_doc/static/src/js/website_doc.js create mode 100644 addons/website_forum_doc/static/src/xml/website_doc.xml create mode 100644 addons/website_forum_doc/views/doc.xml create mode 100644 addons/website_forum_doc/views/website_doc.xml diff --git a/addons/website_doc/__init__.py b/addons/website_doc/__init__.py deleted file mode 100644 index bde83af..0000000 --- a/addons/website_doc/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# -*- coding: utf-8 -*- - -import controllers -import models diff --git a/addons/website_doc/__openerp__.py b/addons/website_doc/__openerp__.py deleted file mode 100644 index f66890c..0000000 --- a/addons/website_doc/__openerp__.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2014-Today OpenERP SA (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -{ - 'name': 'Documentation', - 'category': 'Website', - 'summary': 'Forum, Documentation', - 'version': '1.0', - 'description': """ -Documentation based on question and pertinent answers of Forum - """, - 'author': 'OpenERP SA', - 'depends': [ - 'website_forum' - ], - 'data': [ - 'data/doc_data.xml', - 'data/cron.xml', - 'security/ir.model.access.csv', - 'security/doc_security.xml', - 'views/doc.xml', - 'views/website_doc.xml', - ], - 'qweb': [ - 'static/src/xml/*.xml' - ], - 'demo': [ - 'data/doc_demo.xml', - ], - 'installable': True, - 'application': True, -} diff --git a/addons/website_doc/controllers/__init__.py b/addons/website_doc/controllers/__init__.py deleted file mode 100644 index bbd183e..0000000 --- a/addons/website_doc/controllers/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# -*- coding: utf-8 -*- - -import main diff --git a/addons/website_doc/controllers/main.py b/addons/website_doc/controllers/main.py deleted file mode 100644 index 0ce2377..0000000 --- a/addons/website_doc/controllers/main.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- - -from datetime import datetime -import werkzeug.urls -import simplejson - -from openerp import tools -from openerp import SUPERUSER_ID -from openerp.addons.web import http -from openerp.addons.web.controllers.main import login_redirect -from openerp.addons.web.http import request -from openerp.addons.website.controllers.main import Website as controllers -from openerp.addons.website.models.website import slug -from openerp.addons.website_forum.controllers.main import WebsiteForum - -controllers = controllers() - -class WebsiteDoc(http.Controller): - - @http.route(['/doc', '/doc/'], type='http', auth="public", website=True, multilang=True) - def documentation(self, toc='', **kwargs): - cr, uid, context, toc_id = request.cr, request.uid, request.context, False - TOC = request.registry['documentation.toc'] - obj_ids = TOC.search(cr, uid, [('parent_id', '=', False)], context=context) - toc_ids = TOC.browse(cr, uid, obj_ids, context=context) - value = { - 'documentaion_toc': toc_ids, - 'topic': toc or toc_ids[0], - } - return request.website.render("website_doc.documentation", value) - - @http.route('/doc/new', type='http', auth="user", multilang=True, website=True) - def create_table_of_content(self, toc_name="New Table Of Content", **kwargs): - toc_id = request.registry['documentation.toc'].create(request.cr, request.uid, { - 'name': toc_name, - }, context=request.context) - return request.redirect("/doc/%s" % toc_id) - - #--------------------- - # Forum Posts - # -------------------- - -class WebsiteForum(WebsiteForum): - - def prepare_question_values(self, forum, **kwargs): - cr, uid, context = request.cr, request.uid, request.context - TOC = request.registry['documentation.toc'] - obj_ids = TOC.search(cr, uid, [('child_ids', '=', False)], context=context) - toc = TOC.browse(cr, uid, obj_ids, context=context) - values = super(WebsiteForum, self).prepare_question_values(forum=forum, kwargs=kwargs) - values.update({'documentaion_toc': toc}) - return values - - @http.route('/forum//question//toc', type='http', auth="user", multilang=True, website=True) - def post_toc(self, forum, post, **kwargs): - toc_id = int(kwargs.get('content')) if kwargs.get('content') else False - request.registry['forum.post'].write(request.cr, request.uid, [post.id], {'toc_id': toc_id}, context=request.context) - return werkzeug.utils.redirect("/forum/%s/question/%s" % (slug(forum), slug(post))) \ No newline at end of file diff --git a/addons/website_doc/data/cron.xml b/addons/website_doc/data/cron.xml deleted file mode 100644 index 13afba8..0000000 --- a/addons/website_doc/data/cron.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - Run Moderator Checker - 1 - days - -1 - - res.users - _cron_moderator_access_update - () - - - \ No newline at end of file diff --git a/addons/website_doc/data/doc_data.xml b/addons/website_doc/data/doc_data.xml deleted file mode 100644 index 124fb68..0000000 --- a/addons/website_doc/data/doc_data.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - Documentation - - - 65 - - - - - Documentation - self - - - - - open - - - - diff --git a/addons/website_doc/data/doc_demo.xml b/addons/website_doc/data/doc_demo.xml deleted file mode 100644 index d2f1fb4..0000000 --- a/addons/website_doc/data/doc_demo.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - Functional Documentation - - - Sales Management - - - - Customers - - - - Sales orders - - - - Sales & Warehouse - - - - Customer Relationship Management - - - - Lead & Opportunity - - - - Claims - - - - After-sale communication - - - - Website - - - - CMS & eCommerce - - - - Human Resources Management - - - - Employee Contract - - - - - - - - - - - - - diff --git a/addons/website_doc/models/__init__.py b/addons/website_doc/models/__init__.py deleted file mode 100644 index 9abb82c..0000000 --- a/addons/website_doc/models/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# -*- coding: utf-8 -*- - -import doc -import res_users diff --git a/addons/website_doc/models/doc.py b/addons/website_doc/models/doc.py deleted file mode 100644 index 8aa665b..0000000 --- a/addons/website_doc/models/doc.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- - -import openerp -from openerp.osv import osv, fields -from openerp.tools.translate import _ - - -class Documentation(osv.Model): - _name = 'documentation.toc' - _description = 'Table Of Content For Documentation' - _inherit = ['website.seo.metadata'] - - _columns = { - 'name': fields.char('Name', required=True, translate=True), - 'parent_id': fields.many2one('documentation.toc', 'Parent Table Of Content'), - 'child_ids': fields.one2many('documentation.toc', 'parent_id', 'Children Table Of Content'), - 'post_ids': fields.one2many('forum.post', 'toc_id', 'Posts'), - } - -class Post(osv.Model): - _inherit = 'forum.post' - - def _get_pertinent_answer(self, cr, uid, ids, field_name=False, arg={}, context=None): - '''Set answer which have been accepted or have maximum votes''' - res = {} - for post in self.browse(cr, uid, ids, context=context): - pertinent_answer_ids = self.search(cr, uid, [('parent_id', '=', post.id)], order='is_correct, vote_count desc', context=context) - res[post.id] = pertinent_answer_ids[0] if pertinent_answer_ids else False - return res - - _columns = { - 'name': fields.char('Title', size=128), - 'toc_id': fields.many2one('documentation.toc', 'Table of Content'), - 'pertinent_answer_id':fields.function(_get_pertinent_answer, string="Pertinent Answer", type='many2one', relation="forum.post", - store={ - 'forum.post': (lambda self, cr, uid, ids, c={}: ids, [], 10), - } - ), - } diff --git a/addons/website_doc/models/res_users.py b/addons/website_doc/models/res_users.py deleted file mode 100644 index aefc3fb..0000000 --- a/addons/website_doc/models/res_users.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -from openerp.osv import osv, fields - - -class Users(osv.Model): - _inherit = 'res.users' - - def _cron_moderator_access_update(self, cr, uid, context=None, ids=False): - """Daily cron check. - - - apply Moderation group for users who have more than 1000 karma. - """ - modrator_group = self.pool['ir.model.data'].get_object(cr, uid, "website_doc", "group_documentaion_moderator", context=context) - applicable_user_ids = self.search(cr, uid, [ ('karma', '>=', 1000), ('groups_id', '!=', modrator_group.id)], context=context) - users = [(4, user) for user in applicable_user_ids] - self.pool['res.groups'].write(cr, uid, [modrator_group.id], {'users': users}, context=context) - return True diff --git a/addons/website_doc/security/doc_security.xml b/addons/website_doc/security/doc_security.xml deleted file mode 100644 index 7dde0d9..0000000 --- a/addons/website_doc/security/doc_security.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - Documentaion Moderator - - the user will have access to add Table of content on questions to manage documentation. - - - - - - - - - diff --git a/addons/website_doc/security/ir.model.access.csv b/addons/website_doc/security/ir.model.access.csv deleted file mode 100644 index 49767b2..0000000 --- a/addons/website_doc/security/ir.model.access.csv +++ /dev/null @@ -1,3 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_documentation_toc,documentation.toc,model_documentation_toc,,1,0,0,0 - diff --git a/addons/website_doc/static/description/icon.png b/addons/website_doc/static/description/icon.png deleted file mode 100644 index fdc99b0d11a0907b4a2dbaff7b250f2b8b59e424..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29890 zcmeFZ2UJwevM4-cl`KIrC?F!40cOY`83ZI}5Qa3Q0cMDj1O-KcfJ8}>Gm>)>BnQbk zNEDEqLEsJO7tTGN|GjhXdjDE)t+QuMO?Opwb#--jb=TfK`*Q4Z4nQC;Ehh~?K|uk? zB0qr3uQ*Xsu26FTKv5C!5C8z&0Ng~u1E3;P_mE$Al-mF_H13;kwU|gpGfOr(j zKhtR_4}S3=OQCRGm!(4T<)Lt2r-_m2c2uIjuP3df)2!xFpou!kl zu^pYGnXxGy@)u@rW=CfNgIOb)uXMfA;peZoDa^!-?ujJ~0fSq@?CB)bxaqW@cBU{F zIDngz6C}XJDZtH1$Hgze!!5wY4*+1jMShW`(K)%fIp3oHp%)5Y7|KsP3Mv{P`41j0 zPR?YMzw}K;{h7wi0|1iIex`3yBc&m)KWgLRq~k=^2^Qey0st^kesKXX|86yun7^!s zlKgk8p`!d@5tJ-c)IZXVO@UC+JQy-)R zl*>uL3jofI8#iv=z`1!7hYLKIwVY+O8C z0z5ndVmv%N;wykh{Idw*|A~OhMgZXrfHl&BDE9!UgeYi)D3{a7rrx@2K@ml2iGduG zSHtq>g$6)DMaRIzx^eRsHgfR&BM}9FiuMPQ0Dyvyf`*EYih+fB0|N~Qh$IrCq2ImD zg(0qDOmxrTIX5P8*oUG=^b91bO(sAdN8f%4EXHuP?XNo!I4@~RvEO~k2z67bPpJsL zI|CZ?X1gUXng^X0_N1BKrM)bTY#CbIPcQpCymX*x?(83xQQkVTd!Pe5FB?YX3Hn!Q`u>Z@7dS2?Wlw z!-#pM0M>opPXkCLQty~bY49P;=KoaTUu(ehmkO5?035XIItc-yfCKe#IYwrNa5;H7 zhH%wzIfi#>*N6cjRXGJ@k{OAXS4Dz%NLuFQmw)C@*W!4fxje$dAa`t^&#F|r(jTVL zc2YyR+UFOiuyAJUa*qCPlH3al;^CT$NIR>?Cfe}(EL}4j;psZOc4km2V|=oC(Jb7- zypF8qSM5L5QM>H_TXh;eYs6oRjo96WxN7q%oIJX^`5qY0fu^?hrZ+ADyo`b&&&U`z zacLMn`E-1k5+Vs2{g^NUuA1%&I^QiQo|yO|j%Qu}W?u3ffN=+mowHOM%@Oa<4>{^Kp!CI{yi2DayYoeb;-}44buiD! zK?X<5D}fK|5eFzULl3<7@3)c#*&i*U zj0WH+uP#ycs$2p<0ha*zXRen3&myzUqA%F-BR(VbZFl&;@NL5T>PKy*jcMa88tp}U zENU)3V9^8!*Z45{tqMu#oY&+{3@KL_FUXSGi4cR_E&&xA`)ii~F5!YzlQ>oUyRysz%n{_&~BM5+jJR# zPbs&&qknI(Vci_(;)!i7(k25r3)QJ2=ST~m;bmkLEN~)_c%@<6LLOt2lUl(<-g_pv zP>B=)9iB;u{C-M1s>4>nHGt}9SG#$}&Oqb%IN8bJA|WfW5E((tj|C){laq_z;i7-t52QlrL&%H-~)rum}Xi_b|{{O zNW$>wW)ZZ1_*>`GgFIX3q_i%IEhX={ExV0|NfUXE0y-b3?e7qznYh%bWwJE_j92@D z0^?bEDzUJgt<5OPdaVm{zf~7{=d_Frmiac_OD$Ob9GP^wl* zf4SNlH1(X68Nt|m_u=iYpys;{(Fdjnb%I%t0~`UkL-*h_iAgT{qnK~gTlq6>x!hGE z!I5X6-1s{Z_SGMp#_C?W(VuEQxR9FdQ@aG%7C9+CkQ^Iz_+XSo_TqU+pWLI;?*hc5ch(_!Zqp*~e^Y2d4^hQwcop1?_(Is>Nd# zwCc6^%$rBp5E&a11-5UUpc=!7W@q|&dX<_U%j_;-tUTgEpvUCPOzvAT?3wE zTmlBQH`n>&Q2I+Gw7<0SsBcq@yn;}k;-?Iwjg(vhc9VcVM)A)HURdI#C78OJWt;Vp zFD5)EdqnR?EIcJM*+v^BD%x`jk3MPBoMf%+DR4@2sQf0HBg!k*=Y!39koe&e@NV2l zxcL$wc~>y+0M_%Z!W+7I37A1_-d#A93m8v25Z&%JI@&DBY@ri!ZPMX8@XnJtDF`3& zHX3$0S5C>L$vh}cuzwJW8x?v^6-}^ncB?MiCG`0C60nsRkyhSjackXqgfx0$Fw5TZ z(A(M#R;S$ySuc9Ny|D%0aoNl{e_2uF6^QmkRjgL^$Pe9<%jf9E|NJHYg)0jyR%K+*@PS`W$;swB<@dPxmw?=yC98(K zWN*R2UGiZ7YOX%ys$&S5jsXR>bZW3U?rG)_U6 z084M4OTgY8k=cAI<=B|thmG~eLPUS3hd$kR(e$2;)C6w~HO^&^>fy?z4? zPX)rU$jOrXQk5gLkXTQzH5=NRns0(8v)`!o4l|X^C0e_qh?ESTNO#4i=lh+__VU`Z zo%Vm(r)Pp%$B7XY&*8htzgg?`kuz(P<2kV+7j4Gg`~)H_9t61X{+G z?mc=WVf47{5`AsGT12v~_nr>_zS?{E>xuWN+L!^&VNc1n8bVc&M5@%S)FA z6}=ofxEIrB#_%OPOrUDQWQw=s7%~J^C(^>@A!Teia?Wy(ozs!HbRT)*2!`}WPZE&Z zg^0B9q|5Qk4K(my`+FceCjk6NP7(boZUCTeP$4(Ir~p(dR1Cl^8#7}^J33pKqZt({ zIRF)Cdi8Sy8A-q#VNUStjIjwE;b;s&TxD({!vv@^)YQq?<|>P6Zw9lsxh{%v9erFO z(HzaLrC`8qjctCi{R~j9i0D@l$#vo?KDkO@*c;oMIbNgejV*r4g4jT9?XQV>6VV zG&DH$S_AZ}_~x2)t@?EeVP*`myh>rg5l*INcGrwp*Vvzuv236wj>e8|S3I|n%9uGC zBb$^Xh5hL-yYkP!r(8Mg-&3wV_`f1qnEjq|?c;w>x_0{if&@kUo^Z7+{GM{X zPW+y9y+r(;^lK&gJ@MDl@_XX1wdP+D|5$u}Pye|Z{hs#M^7MQ9^?LPt($59#_q3}O z?e~;lOWZ#Ye`bEonCr>)x9M~>0})WTD(nwJ?JtM1Xu?J|0#cPJTYlYske41aWcygxuGd zpAd+|^K$*<;bFZh1-gb{Rv?fEh{PZv62k-L<-CU6*O2!b@*&FtK}aeRBKeV!{|bVU zoJe?87Z8l(N5ZRGfMBFFBt(`)!t1j9e5^cNJV@#lL~4tKKQW-|H24bgBlSeWYaV`H zWE#YMg$Hr-UqK*Jb1r_Q%qw_RmLGgomLGh@!w%8lgZ zX5|L5a`Uiq^RjaDv2uf0k;(x%1v#boB&8+6(p;P%E=h5IkTf3`FFy~MUz%TAYIKs@K$XNzgm3c%bCndqh#m~pb#?8+4_tJmk`yW{W0X6>@ z^W}>2x3*tp1s*{W@F!-DYR0z6z~C=8pl0Uqk4r50HxvCAlMu)6B?(=lC1AGpj%IK; za`z&__lx!KxGQ5_GhT0_9-G-&AS^|=fk0$0{1f^gd9|RXNLC;(C+FW;e`5dS{Et7l zn&1DA_=D>X|A!v?vmaH>;4mAft39xW9TXwL{j1CW3;IuX?Y{^jAZ`xiM7x&#cl4jU zI=|=rJNkb#A(4^9?;X+~LCVkN3&|!Rf!r1$-O5!MA#(jt>-UfSggE{y^HpQ6aEi#- z#MBsJENP4|6S;a^$Hv9U#?7hz$HPGuPN2ZmeEBEd|4|F!2vxIx;dB0IBV66h-i+hQ z(oT*LGbB6xU-1i48AZkaZxh+t{)%9(c?BfR9FeQMsk9@^_Btf8H+F=ZUDY7W^hXuf zMx_(FR!u+>264KIh2$hfoSdMh0zl-d^oW;RN*oO0la%1%;+GHygQYknBsqEcz+fJv z@A;>4NDKcVP0sFW#|tt0ccuNU+*N;Fb%LVe-`jHKa<97a3j1F)<^+mMfTTd;;!^)g z<9{mmm$1K8eBFE=J}FLaATNmf5lH%~`H%R45|SV!LQ#9HguV4SE10=-(vp%XLSAbu*1v_`Gms-`6vT<98Lm&dVSdJ3Zh2m2PzRpv^_&!VUpXlNL>urRT%S^h0>eIyQr5+&$Z}3(0>)C&avqb(`x3 zk+{mud)&qj&p!}93M(R^2dbJlHih@!BE7?)<{ObRFi0T*ffs+;-XY_W{Cc0)??r0! zJW?tZ%FknV*AJ3@0(4}x$TM|VNUA9EjN6qGNYmWBIs=Nle(FSsb(c&0_B|Ejuzqd{ zhv(rDM8qV(M;}P<&`YZN77c7W!u`JP{Nn+&v*TBWMHJNEiZ;( zPEI;5#61bP=#x8`ld+aX;V^@?J#9U#`{5vzjz;!kUHr#TUhPMmJLgX*?@W9>%8pgR z?xm#b3)9`H!PDQ%Q8m=%=06g%eNZ;(TxcfL<6Hl@MMhB0y!mPAbj7fE#VaZ>5w>R~6EoiF4EOJKS*YlmshGAvp2xaV8rgYF z?WZ8YnlG|F7+P>A?m-#-8*z^+rfjBcF+|qZINCvyhPF{7th{PpAVTyYk;balJ;-sf z6Tb(gUM5=%mUqBV9hUa}I~%c;w8cH;oN!y&!ODm=pXvKUZ1zhldKI@0ENfL2OtT_@ zsy^R3*1q-5N>ntyY&IX-pqn?iVBz`{Y7xF#Bu#zODki98mOlL zBh3rLV|A!#%GEQ^&Yfa+VB)IVe`EH+U+*wmHI2%qCRjXhiug@7tRV$^PKn{a4&CKRv#?!op zn;dY1%8HDQZJ}t9J(R{>>#ETHbjMpg>e9;324`wyo+`2#oR%-%<1f(JhUXg>GxuZK$LA#5 zwEnz2MvgeXG068;P2vI&lUpkp{JQa+F!x}oO&6Naen!l@d0RoUt+Z$m)<E-FyVyAycx5+O!R9?#>cQ|^y>9s{=Ss16!kSKfp}h(+Q8_^#bHj_oXx5k zJ^K-laei+j+v@-EWNqL3Yig_KtXqDgbJB29w{MxXk~5^}-(j>oEh&ZJlvZ(8Z%@S5 zuipiupS_;?@mvg+6RBZKO(fV^9VIyns>JWH-;kS#+IZ3?W0?~2GT?5pMxt`!i5o3| zv`D02G;Z)0y;kYsm1Qppp--kj}lmsLc9^67z?-R&KSv{a{&`}2IaW}E_qS=$s%f8;aq zLPSp^8b;F##4^OM)r*Z0{(hsTp4H}uWCmf>?yFga2TY!?yYzuOw7x^Rh?moS;VJ&l zZ2NcKw#q38n%H}}o23`f;`S~2>`Mt7@amzLmJ~}T)wZFE1g7lqf(V`LLMo3)v>tZ4 zNMo8*w)KRHjsWpQHL9SSgOLP0-a(op^#mxqoN~S05O{Zg)WY%mJuzp5ZbsaK41O7p zq7(1ogZPaimNs_pnA@{0FH1l3sI@Zsi!FoA3ZU)uQ%{Kg^`_#*^I?GEUOzFOY~zC) z8JLbAe3~LT1Z%$#Wuf9fO6Oq8R*m-ICLobR%YMR+q5=ewGeW2I7uZ7mNqc3YhV++% z;&kuVn&LKwT|91YtNkuOg%UU7@wi_XGpT;~&Nt|cUX)q@Tz+Ts>FmnjOr;D#jk{F$ zsR$*sqP=_fA}o)N6Be|1n!42M+4W{eRNIgvQiGS|j&t=_!v#i-$CH(z1S3I-?{Pn3 zby$@P+VVmsd4(Aw9c8Mra^Ze=SHJL&t=4az(1E)8h{35XU9nEKo8|e*aQ@O=7YAv9 zxpsKyTa#Sdl1XO$lY%=t#NjBtZ2hl|2EiT$jeY)Zp-oSdqspto28Ks^w8t7OFwp5* z`*%cgy^A%yLeiud43-p0h(pLs^J%T#`fy8M^$ zO%m01TshJ8CW%kBEnebx8dx%b!#ST-QamgA>Z80!xvi@x{I&e#EbCi>27M??g4W$| z9d1ywG{wk|gvfB)wHlm^xC&g{E|bMYG#ZS`CTGtvF@zrR_F((B*bGbPBoRJhZ7tCe zUnRcssp~#AB)NW6vc20$*9$}y9rD$uu8NHR60li$E=v0V4C;`}W-G%_t~@1)UPI&YZvS(t7d&q60c?}gFEGEapMUz0AAI>>mdDpI1j9R zgdd0`*(s23%IS+b3Q$5w{o7@NDE3G3`lU^vy_l+Z#;b7 z{^JgK z=GeR8t;Y+3+p4VHgLG2aJiXo*WO@V(ZDmF$E#ec0HVee{+29a4iJ*GA!P{ZwHIWtKR1@Ac0p@dey6fXtG0(jKBl)WCVn z8#@3YQcwG`v$~v70LdK|^pWxI5Z3InN*|ddme z0wyp>au7K%*2tPPxRF_|F{Fldo1TbAkvP4fmaBWzPKf&Jj+luZDNFpGoQg$tliq`- zpux^>Rwpvg?RvpSdk;tOgm+l{%Qn)J>)I&>0|rJpOPH9po)*pC9{Hhx{Q}pOTWfqu zFq5i!oMVEXj9S5oC~{ zc=qPtXmKE&y&peR+(y0jGM^y;<*+?ePFK{GFaTwtLE`zq$%GOr zYN|muv3PsC`pJoNpSq2Y4FL%uN_)p+yh<@5I;RJ+l5k5f>UOzH%QBiB|pb~3pFp?!i+wB zi82R2iCW|4It7+GMpw?{ykC@$+xad0^W;c-%<18FC99FO7$9?Okcie;gvbe z=4=L(s$26prA6uE+eVaip!0^p^W@3|tf!lOBtU)32X;H+*}-K~ty|73r~;&fC8;kL z;jZNF8>AOXz`(&ztO-yy(<3S8uJFB0k>@4)FFi|zdT<0HzNrMRj%0TxJUCUg-5h0Z!&L2drJIblGBjOettO}S24yd?SrFNS4uPt<{Zng0Q3=dd zWjT)StEuzjiBGfH5|<2A(K5Scg+J#n)Atnl*keu#GR+lc!FcRmrfJIA$B-V`=DIkK z1l`sryU|Du5q$?Chrcy&@=8?DXC!FCpgnwO>?#`<^(OmgbhCwonVNugiu%>RQfxdIc~T z5QlsUxEcdXDv0dpyPL1)`6>?>2ZTSbbOAsa1e69Ce6K199rG(S^zm7$^pr4!l-R~j zdxbXFhk_8FrVt%9`tcLgj32&kE(m>+4^*S~a|eyY`>#+QG-4|bMmwtyzn8)Yd8D##L0HO_vN#QlV5vec`(N{=CB*geqq{^M?e z#6*97O#CNv%ezU1J(~TsLIYF4m(7=D zybfhAeA>w0HA-70UI<=CgiklGd2RZFOv=wxn-5(vU2t1>8#;ndqLO)O7#&{kN3wnR z5G9vm9ua2Q@V32-ngQ%xt=xhFH6^p@mTk3b!$HEgLnE$l1B1Tw zZQ7q7!&lk&YqH;T*7VLrbn#I21-~_rR+(q`b_R4}P%TiD^RnPXe zezQb{z*>FAhjI7|33fX?bO`NPL4$4f%a1`x=qTltKPdOrC>db%!x}F=fqd-Kl7`S! zFuXnsM`J z!`j;tO$=4D)W)8Ff>TMt5pyZ+xC?6n`d<2Yc`>Yj)pgnWqdVbZwMLu4q?I|siGq9L zn1(+|WlDiY4zR-Z%^l}L;gkN2dG(~UyXpDa4AB58`NNQe+F2H!pgXq&U+VY@IF24^ znBLgF32kzDK;F1JJLi+Hr;(DAN>F~QMzV+htvEfCP}3Ma-a)PV@yo)#v;yNjQAI;& zfqsvD2-uXcE0lJ)0f7ALrOUX!=Gw_R+5-;O^mzWIK2Jp!{X^1?4N39!g~gB2?mc%A zuLqutXnygGH@QnJg#I=S!H?L&n&Ub)?VM8~#CV!j~T!Mx(1BUIUj(T59{ zZS8TTCp+3*VIdUOa7va^c|Idi*I?A?S%m(bu44fyCGmlEaRyGTS(p zfsuh)(F0{XxVI}RH-6G9@KOF~sY`mHe_c4@AX;??{z9O*eA3l>eB5o&B+ANp$RF-v zXA@rZo!t`t{;l|uJ(k(ZIc_fW!4^cZL*dYFfB6nqTMc`wGkW;c5BriI+Fxm6Hkg`h zrN;MkDrIm-f~qIAx*}v$2YYaOj@sy;M-^;mpC#*qr}CK&piniXf?SP4$l*30PQDh$ zKsV_YRmO_tVx$x~xI=2w@s0jMo8sweCUD9#>G-Upaf>Cb(gd`;6T=sNoQ>5UlXcq^L=whBJ|Q~7%ERvO(vXW5+C(A zu`+jM!gz9?WPer)I%-<0;Hx7S8Jfimnu~0D%)nsr@N*=_%EqCR@-}rA&r*g7=x!OC#*r^!W?%A;K5L}=T80}ww8spQYb~^oO~}3-LJph zC&f@%@f|V0zr(v_@=vJzttaYBUhecs)DgQpW&8wOY%x#pTgiJE8u#OVumL zllyQuQ~G_j$|`XgtmyW4Rv4GygmctKc&@5ESK!Rj{e3z1L$|I$=2h}HMYEX5zt8pI z7P7$z4uW~YbRR2W9L6b*vpoy&D~XayEbOWvjGPyhoHadK?b16l-I1R$E6l$w@gX~> ziKDscwibE`xirkYd6t=NiZlm51nNYgHHPy_ zDJiy;`NIOfU?Y~Qb!=g`_`x{}JWP)c0LIIYgBmSk?3(#>%~++K>+y3z5u@n-AmceI zhnFF?X2nYyDsGt>kd;v8CPh@B6)#m}`_9ow-aLftXbv8eNwbgi@Pv(Pm1BqXPqprlAwM zRu)GE#;;!#OO*F=L^#afAUn>%T`&$!#?ut@@dz6 zn#0e1HGxKE?~VAOMA|0RJi}_$2CQ{RO(*cL7krV|I2G|~Y}7{RCg2AFxq&eBYkER& zN^S;Mj}W`dGl$Befwuxxd2imoTXgd)C;gCH7D~zHf+m-`UkiHU@zl}aUV#l=h+jhZ zZdA>5^|UpQ`O6}`SjGI~2J4FI2R?5*v~Wx-iPnubd-Y!7E~LG zrUlmb38u68busaQugUpEbVT&%cvg{ryrf-co@(3P=hjYHaXn{20k?WkxwJ02v9LHt zFGLeEaZYXV1q*$ed1}2jbHV_74bh%4^x4$M>`Ir)eI}$uDv=4^F%O<f(%nsc#=QOf9pQALOI)3lK4tgn`dZwn zbA#R6Hh%)qS2YFeyzu^mL)ljqQbemMuq8wOcxr?~JLF1l&o63-^6+@-mU5?15O_x{}{j8Cc$QE*0 z`Wc^1_zro%$eGv=jbJSzT>*96x^-XuQ8s+`?3W#^}-eCwekz#72@TD3~!1@_Aj zEwT%5=qxj=I8qGOpFg3|o5wP_V6``&beQLhpT~5w#48B z*Ik&G7Bes^HnK6`vJauA&%TkCyM${459@lci}m4{y-UU>5He*@W?R=^_hXPxmb!Z( z=$WJ+@2cW$$4~G|nlI!cSRQz}QiWfHkGv%;hwX=}=E4;Do!BIdg6p&v zVjzMX!p@!>&q+v#5LyH|)O7G?;U`T8lZ#v4buOK6dh4C)szbW$66=T6XWZqJ+tj6X z;^B^FW5SO1LLLNUEamTOSI=HJ7|>@2Zv^2%^;e{K@sJ({0&}Y_>YAam6keUMzr<%yafKW6C_deAS+@n-b(j?3P8OclGM_4p{l8z`6cJucbfjqH%lR)#Br)W5Q<<4hf z^bWGs5UqKo0AarMNT0~)X9f&=Dsoe=^hc$SKty$!c3RIE&bLHjrcqu*#ZBACmQi?} zP_9vOA?$~rV|S3Xu@q|~UkO1i-IWHd+4!VOp;sHGfUB;}EkiGBZ@(sbu&H}LrLfe> z-SuwVm&Y&o`|>{6heqSV_6tmS}E1+y!o$`GQh@d(|oqb`jxOF`333b%(B+^HTD&Hld(D$ z4PUzCbQGE7$mtbi`<_qD9aGU(-+3vByOX4L`oQz979QS?$QE6H^l4UpMO>9QVSTvF zohQ?P)u=nh7mA3Uwc(5z(T@&g&h^U;nx2D89NwaC13J#4`E^l4jZ7mgAJf(*F99S9 z-fePlJHcv}^P6@v zhX{r%s%k%({?_@CskMZ)E{BMY^yJ-$?~evH-b~dgtgh^bdIyp|4EZcX zH*~i`FCA!9XuX;~6B4`-`wkEi`p$U3wVYk^5->sq_m%>g@@>0_B@WigmiVu+i9eT^`)WD%`Lq7B+uDjHYcifX>|4zj@IzouIqZe@_XvhQ zOYI?|>YR91sKOgZT~8K+V5`9;T-{l4!eq&o#Rki`n(xRa_G$pPe1W)Hc7aEXr>$Be zd*3T+VWaAiqIwLS^&D>W92Y_E%+bkQ*3YA4=> z(qTq%_R`1C1l{36oBGN=JB-#*A(T6Mdg@18&!bN7_^#e};Np86Qh>!Cfz?MpQz1_b z)l&(6Xf6BMGTNa#CWFa4*n}6hWyL?7%fu|VV_Ro*;i&gU!7jEx?ip6<-qVsRWXq_}rYGaFKXv?XaN-FIJ_rz~!+mZ$kkSskbt`Jv))6ObX@h z6a!6yFu%M>owk=nF&Ym-3Cfmh-`5YHrYty+cbO#G$?9#J_t4UPtZNzTl7P@QPG16u zLfexC?`LdOnMl z!7+Y%N)mKVIvW01$yL~`SmtYqSD==P47Qsd3;hwF*lg+(vWIc9GYd~nb(R>;%z+Kv zC8v3w29$})F0dF69$1yBe6-~fPEHP4LJp7;T{D&_FR zzUOPa1hD$hGA_kU-j@pt#+!8E47y-z`k{HdJWwTyKVd<-kqT7=E3*ssTO zI+0y$p<_^M3A#~DokatO=E(6mk~C_po;_c2b2zrE>dmdbQMJh4c$~}?R%ZFqK^%zVS=v{CXu|I zi>!ZOxjY0?(&S4~+QS#to{m$l$wuqW%e)O^(y)3a!zh><5=CB9Ugn%8{=fId;lo0V_6l zN!3S2t@0bdbD^ZCQvzPw+`d*K4c#FZwPcL}05Bc7rZ`7ynx&=ue-;^@_iA zXl)mj-$_*+@sIXHJQGqbrkKTXa}EEve<(X8{G@$)!FMDn1r1kA#mK?I$^1ip7L%h{ z_Orc<6ZMU#^~mCNjQLTgMCLhf9woZ4q$HEA=KOL#IU2{0D7@)XVs)y)}_HeA6J~*uWBs zd9t1Jl&buk?zUP`E#8sK-1)5@@uxO2wYGG2UVHRQrypNnrG2L^Exlj(yp-zc*Js(& z_tDnbdbcQ(W|mx7+B!blQFtrZC%xKtLVNK;E;aT57baX?ilsmfZEw~`YwC+}+%;gU zw`^ktg3*T40?>93(6!;II+r$knDg(&DCNAtHQ@on-A);mr$+O2W>usZY`%gjYw~d+GB>1BC~=>k{go z5gL<8oa{J2A%az%pwmJ${MH4$Wtusk>AWM%8Me}+I6BJS#+^>jh;cgUD?M^a~CIHVrnvB zL5X4t4nfbr$82Yh1t?<8i`0ukL-NzO!hx~r$A_{zc$RGRZ2-?D?At}@uXU6rGH-HV zb)3bPn%0iKGL7%E4H_4zBfme&Eb}7eES*|w*?PwJVj6FQe0=Z6>-Cy8&)j2AboC6m zwC>2mlC?qQh?@9r7Y@;8a*>InI@Z`Jl9P+!f)Se6-m(TIuct&)6DCYjJ`9(i-WMFs zD}8(+pX(-!ox*PopKqs~uiv!KeJ!9IczUa+B^cK&KD z<~Y<~Ie|cYCt{D=_HGM>i9N+RNkNTym-t+M<>|f*C&WZVUaKaua_tH6%m6;02ERdA zSES(V+Szd4)=npCg5*?i!{Xrm1Kon1KB?6F+wn&S9yQ&E2b;#| z!WR}{35GQmcfi>xV6JB5;RDy#UV)QlMPE9!9P?u~h#!-KY28}B=37qp+M_u(h}5Nn zS6h|kLv6Cw^52z6P`4(3S$(En!0z8=ZOqOQL1_w#)6oaP`yTXVk(R`A#Tu7)2IC&& z*ad!HDvb6nN`j3=^*pe!G09+jBjQhPUhR~2#B5nDpIEnQEz*9-FWG&F^1UtR%OGk(z2)xs=IPChf_Qp`)YO>L_EN->do28yhRn>&@e#De=*` z{?F05Q=2c5w;Q5f9jV~E(7XTWY?0xh_wLE+I65+2*=bZ^FYx-D25A~7tMR~GpB7P< zpR@@pJqjfZrIQf5XwX0*si%*U$F5CK(q0SH9pHZYa>lFFXlghr zF8y=MZqqi^>`c)CiPGz(A0MfZuPr=E=29)!zUeXK2&DClZTx{9uvir7^tB}%J$WO+ zuOUkmCo(oWA3dB7?Km}pHs&H1+rgAX72L_Wa1_t4@8yZ#_W*~nl~jQL;az93!}2No zd!h&DcM8FGKfTHDpL>}x3N(C}v%ouS1MgV$sI-6DCpNMhUW&u#joz~)dvTw!?w68GQ)SHp_J=N$;l;+4l|lqV6-{p22zNQua4I%syr&NLk3Gp zzpTNt=bLaNP3Ba&pqXY;?YbKqF^DY3D*t0SOOi`vpoM!=5{R*4 z!2~X~s`;tU%Oo6n+D zV|Pe>C){Lqcaz$a>E)n& z*)I-@H-BiQsvN|DBf3eD^Io56^xlX1-MO8MJ-O3l7BpDI0ppLFv)e#g#kPKRry8`x z$d$|~XPK`J`|3K%oK$&*==e1(H)!7n^h}EYD^u~8muaIaIC+`kQWjQ9elN@Nf)5_r zb(&RPj^#C2BjU=KxjjWEkY8+wZ&i~oy!Cjry36V1kDiQds`$C@+Bb#LJn%bg2aq>L zHnL1Zp~y3W0V;lPWoij-9Qo89x33!Fv&45NzA*LVCUsG=t~1JL^z~nU$c%JL3j8Y; zT}*5z#F!QXjN`uS!*vPE5lVVv8w%Ddm8*kfO=l1a^dY}vb8`x;EeiOY=IaamBs+d% zCl?bXdISA7V11RPg@zy=nv2GhtuKDDaWf6&G$<~;cn;t~E_2UhH3^?c2Cf-X zT8OAZsjiI54qA_ID`VgqeyyUuZfAY9B4sOE`bo5s*2D$psKr-P*>3FbaJ>w~4QMEZ z`7gB2m_COX?-+!HiwB{WPw-|>sRZl7v^%Vl;QR}>n+rLE9_2?)Q9T@p2ueB5mijjO zIy|_I97EmuHTdBRRh)-;t|HjXH}cv@IKlkt6W?h9?H#!Zh`Hsm+(MRmE>-*)wM;8F3H=cj#cGcuH@y$7l6GxK9T|0 zf3x)tjndaCs5LhcB&xStZt;Qzx|$|1)Xdj-Oj|1%ACYsP_X3S~a|=6Z){<>SYogxY za`v9qUBN5nJaXR*qd3AFdPYCXw-6=lt-@RIlSk=V z{OT&&S#ry@(lSRNBin|Y)D~6^f2e8L>BU@Ry30;* z_@L!*-cFJ{ct4OF_j~-)(*36NR*Th^{cB^qQb}EFtYuXouA^;4LRK8L&W--7@a#JW zY=BDWcMnSk9V(@K@bOaF%=Z%KKTg8p;!a5fTUcNuD`WUi|n?9)hJ zEV4Dl&v7{}C(NDHqP6ZGu09-x``634y(#^pWc`O1t*!SBGf)2j0=AdZhuU&Mh`7%} z--ei_{;{pmW;-|P=kT1*EsJI-J@5Yng%WxaQ%X81$tl{DoiA8&~S*@R***aplJD+vhJM z>U*lB98hNYvtnw9JWsgZ{R=6Wq} zP-~tZ>6o1+rPum;+|kw5_qu36`18mxzBt{uU$1ooxvt|}R+G6kHu}jk{i0SW-I}ga zo_6R>O5#sn@oG|k64h0WQ+}>r3-U3&nBB*XpN;{{Si;%KENP zV}}~N{50&p@T=A@7wYBU{EQRX)x88^KE?KWyI3`s9V|90 zHU8gOEj87TtEZ!_j#ov<9Pe4JB(rw=m%Uj}{%!}8SII9y-(dbUT6nXuH8EVZ?9hKhHy1J;T%=f61t&R_(bQt*wr8x9oVXR{I zc2+m8m91~3f=jHHn){6xUQ~)pT&_C+(sH~t#w}|{U&Ohkeq1fH;q4Cg{aoOAddCae zyl1Oz4U%~zIBQ#%?~S}y=g(Aj@Z+4?=Tcp5oL+)zTaD(XYB;Oya7<}qbk8hn99j+o zNE_#16)W7+w@at4{>7=23c+u2iApy89Dx2NPYu(;)B-1~e8QaJK zA@dL@I+e;@UYst;4M0Ky5#48AfuK{lYlV7R?i*2M@O?sTzj{zy5P>n zJXUoS624Qz`>SJYEG~J?GsXZLlY({|sd9Z7ws=%&y49mkT{UTH_-}e1T$^3!J6Hbz zp6kmMAv>S8Un%4G?B|7A-Nrr$$tZ>nFzENYrz>?mAvySWtKRUX&ulIKppYtQ_eTL~`zjC_AeYe*Kdp}{X zj%@z`vvFGmHNLJW^DP{$ZhfaUzdthg>+6`S*7#|?~eHK5rY}XY02~pWrW1rp1oBm_%9Xo(<-0#zHuj$OKcGAB- zOXP)vweM{0KNyPF+P_f9&^8s-uvG)`@1t=masFCF3oo-~iZHX{&p)@hpv` z{wenU9nMd{yY)q#AE8b!*(7~QVGi|Q%H!nrXY&fYL6M$jwWHq0mi|O9n|7Z{Uu=33 z(OW^F?hXF{wXn$+f7w(uZB~yxEwjaRI53VyYIeneWEE6?=*0C1D`IQgE$ZN!7@Mm^xU zzuu~v?6)s(F!#xy%r7HTdR%xmUJX|V^`vBe>7{-@{y?%6zLs9kQ#%zp6I()jORbd7 z$Kg7?V>ny&sEs|E=gNF=`ko2@07iPGzK!@UqviLtqd)GDr(-FcLH%n;>5cyYy?K_C z(xKUgWBU3HSqc6-0~|;8Wmy_;N#A7Ic9Q$3AIlz8(fIA7^e=8c1ztFDbeO|+skKKv zWlXgEt)RI^e^pq+o!Q=;yBIu@&IlO`$26Xi{>W8CXNc9&6aJe{){n|E7RRK$BE6a{ zwzd~=zO$np+s9C1W4GoceR1?d_TG=SA7+X+>bt9C)_PC7wrYmC-n~PEe^FVF zDVW@o{*jUoC9LI(=vm#=!Y4H)9bGn>ddH5Q?mj(--8So$ZZj5Kvf3rRtf!6*wVsDt*v!slFK?AOA6HqkcQ z#C;`8b%BoNWOZ=1K-Xg#9KhiF!s*5{oPKJNh-aWcn@@4&>c2&&W3iVkdge=Gz0m#d|Tr)(=Knl|-ocRuA!5nhzLPbO4)Gy5&XNRNfoP5xG4 zSx@NQ?AacBz8q7Jfh*Rs+SvWv+$(u((PMUx!BlF`BG2gM?C>+)=op4NdhS*;dOLUm z2?Ikhzy7P2ub*Ry#QMKQZBwTsldNO#L90B0H>1OW7|S$h9`5Huo!O^qfu`MmP5$JbOQ2t`X$&*e3UXoH<%c*gu5;99XCLckW)pc9Db*Ll`4H zaHz|pVCF7tV0@4sH=D4J3W3MyiNXH>zADyk!hA3}4Yg0VLEe?@O05?eB#69xm8-OC z1M*@UdypPGpRlJ5hqG&+-}=R8H(_ob<06J|eeYh#n@9q1As>RZsnJoq9LK+w5FRtE z>^q?1_99eI`-<=DqVQ-bF*VS%2j+O?V~j%mzaMXq1?d}gPGzllTGf3$k4#qMieS2FrxiQ}JJg7aE6Jw2b#_Y|?Xv(l~dq z9~=YJDQ4{@bb+P{-XH21U(=QLr=QCq0g&wpY^R?})rOIWLf}E)Vlcc72cwU(wZWb9 z_;064amoJx@clnu?5|*JEo;OcCsVq~r?ef?CQs_gRa*yi#y7;^?n=7TycE0BQn9sA z9$+`wQ$)+7DMy3Q@w}dmZqF3Mnm!t7-MsYuKlN(#4`D9OItPP}y4!S4o3~rrU0TU1 zMFqY(aPr1-x0o@bBxLpTU0Sz;wa$cwz)8pMtx6d9fx(?f`^7evs;{@pj{TIa%h*TW z1IOTrBpl}@qi3UNG=(>F>*FfZUFZvKewM4FmKME}Q@xTj{pOHCAAwxn(c1?|!w8Py zM{}o;3>fFON(evMR~7xE=GD~hw`kofb*-9K^0nrP@y6WvmpBcTOHVA)_D-_ZO6Zw$ zpA30!4~7mfubJ4Q!(80URQC@actgK6>75nAyM$EDb;g$xymLI`#O_w!7E1^V{P;n^cbUXK>EHdF+6#c{<(lCn6Syw(bT_!S9#4ZH`eKdsTWFi(}1 zG5G+#hQXoW2b;S2;a}3|Sln_W82Bq)I&X?bXx?5!(WxcxerL_s`VqJRQ=VNbX>Yxh zE^p-Et>p9)@EWA;X{Kg+cW$U>{ux60aR!Kldr=R;S7wWgIBa7d1!K3M_`!H1JTZJ) zpQCX#{POcYTg~VQ;FV5$he;p()xxZPa+PZ*_&!`HlO~@~+~eQwUFrws;=Zoa=(yN0 zSTJ|!t{J2uC-#3uW3#k;X~)45p_y|PKSuJZ{{WI+XUQpl!Qs&I=j_}>y+S-WZf`&M znpL#l;ON^V-jj^lf;@RvFpsP&>=izdfQ{lA@Y!5Jq~aKFAjW)_H-}h0G^5~&aL!q_ zpQC?Q=1a`@+b8%qSBa1LmuO4eeq6#AesL-ie}i?zS8YSuQsC2#yV@9C`7|%JFzF~7 zHjI7>?wd=~1D-$+!C3H|G4Z1x0%SIWo$2~GjbDwQ5v2bB2Fs6s{SRrj4D|18jCbVl zr2hb;XWG~k`ZKicq~oW3VQ~DWUvi<-(KiRX8+(=IJ)SllnieTwcucs_kAXIp)V7C5 z(8Q|zN5X&lH{HEs7^3YZrXD;5wuy)3Azq{OO8O)_Z}uPUF+UafoyO}8%T874>Wh7K zn$=G;Us(6Kj)~9b^+1iyE*(xz2E?zZwD$Hfqac0??mBP?EgPy)!0?-T(W_39Qd}A@ z#CEB)9A6EoVS9*FsYasGQIkzI-?)VhJJ`mD`&ivx#}_W)NgG_z?5gqlzy}5EA3i5! zc^wq(^<9EgS&m$&a+faJc3$p9*Dhz-gD+|w|s6Vi_@mGEPHRX4XM z2n=|oZ-7#|l%1T_e(0Lr!2DDL8_IdQpfQi5Xvk>ls7Y^TbA^>`1;?V6XjtBe3_I=N z&A}P@DiT{77;w*`%=baw^(>U_-ve|80rs|*Wz6_&seX)L-<50znT}}%P?C|j*ld8n zPizO-W`0WD)^VO=8rd5~o`Fdv2REuh16FmVt$94ZMQt^muX#L+Y@XHweT8mqtveQk z2BPgg9#1rTd=-@XU_IwB>=yMUvtjD06I-#cVgo~$NI@VW(T%;z(tQm@CdQS&g6J-` zG@obUr8cO}!MQ+lx9AEehFMHMvY^csNJj91kKtVj_MZnc=&3r*7&tBJfamgQ3S4pu zaq+^nsL-^>B1%?}eA>D@tV}QFV-+f^Pplis^gwebaOTwM0sS2xy!T;NheT4u{#H^n zd0;M#%M?MLvo}(<#~(0pY6C~7(rjaa5e$!Vy^Bua^;9laUG?cyuf`B8tZH^h5^d2VYEib#>+I@Sa`=S z%DXL%zz!G)3@dFp##%70ptHm`#_KN10gPc!4G9h)w`2w_w#Ji!)m65r$AZeXk&HWq zS+s39!1^FDklLBltC+2ku=M&YfTU|k*;QpIaT|0%Sw}^-1463}2m}JJ`;gt55wMuI6dtmkVDS+?+0T0#@kkvG2 ze_2dPXaEh=0~|(50;_S2l*Okw!j>!nzeP|xnBk}hV;Bu6rg-JR2jUR{F=hr;JOK4j zhnUXlF4S;Q?v(cAbb)ns#TDtERUjB}>Vd^B^sqOxAAE zx};)rpSV|rq`wK=5_5zFl=S1f&No)Zko!#wD=ax~92FNp2(-qvH0y;e>1rMt8#9Sfe|2Z93`B_VD(htW$dyPF4job8Dac*dK zaF3&CH~|5RWxO<4os1{10D7OA<1u57ExgGa_q7(LBB;% zQ#89cKx5lXSaF3`Dsb(duLUqJ!3r&>0N|i4zRcsW8!D`)0k~-RtENWKG44hN0zv}a z)Qopg(L_aqfEB|bc_e_QWj_0a1tA!D00mdN4R5LyMlp=pp-y8sKv9Y}JnR)i6PQ%d zHSz4Ge>=|I5E62^-pZMcdv+>zG0ivuPFQi05E2ez^-}{G&guoE4s0poYaZWv0#>ok z+yyyd4a1bp4r#}NI62222m=`2RA3RmWdoLhx}TTT1pWvC^^Qs)XeT~F5ETYN&w`1@ zc2H0x=L5+BE3#dL4JTzd88}A*-0Xmq;2&42lo6fOLrajg-be{v3Fx5ajC!Nur{o|g zVF4%%BLPZdko4%L?%#sMwqa>a$yof{(=kK*UbUo1??F z3hBd@xgIK+Xgxv#gP77VM(RNTX~-B?CN`b$pkpUw1-pZBfxnuR#?1PI3hV5_qbJ2n z+yHZg1s27Qsx6Cdim`-&)2fV6ld(WrIzJ@=6M)%XOHM(+9~BPd^d$Eeax?xY!^qVu^rmH&X^MYzFG! z!qPAX>QM&$H$YJkxSv!hqlA}X!B;Hq+tETcyO@*X(E%WYX8RfaeX$sL)-}0Y|#uIOw8S@<9r-Sxd;Rdj}!$qv~(p!;4`9|m8ZcuT09UCAUy1)h zM@0b^*$SxHr9lBBm~a6KcE;BA9eM>9ZUHFLasmQFA2G+5f|;z_Wgom$!^^`630lHE zkfPSRs8bz*P;X42AO|t#Q)h0efs7&mSO->xDPhjTWip8B2fYCR)`sH>ZdQi!?4nvS jHt|5w&Cvk>7&iB)j!