From cd4cbe7b7a4436464c0afaf2d0f74cb6bea45fea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20=C3=89vrard?= Date: Tue, 3 Feb 2015 17:20:11 +0100 Subject: [PATCH] Add asset depreciation report issue4184 review14501002 --- CHANGELOG | 2 + INSTALL | 2 + __init__.py | 5 + asset.py | 205 +++++++++++++++++++++++- asset.xml | 21 +++ asset_table.odt | Bin 0 -> 41772 bytes setup.py | 2 +- tests/scenario_account_asset.rst | 6 + view/print_depreciation_table_start.xml | 9 ++ 9 files changed, 249 insertions(+), 3 deletions(-) create mode 100644 asset_table.odt create mode 100644 view/print_depreciation_table_start.xml diff --git a/CHANGELOG b/CHANGELOG index 7405999c75..b71bb1f0de 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,5 @@ +* Add asset depreciation report + Version 3.4.0 - 2014-10-20 * Bug fixes (see mercurial logs for details) diff --git a/INSTALL b/INSTALL index 5220d7a5b1..600bd53ad7 100644 --- a/INSTALL +++ b/INSTALL @@ -5,6 +5,8 @@ Prerequisites ------------- * Python 2.7 or later (http://www.python.org/) + * python-dateutil (http://labix.org/python-dateutil) + * cached-property (https://github.com/pydanny/cached-property) * trytond (http://www.tryton.org/) * trytond_account (http://www.tryton.org/) * trytond_account_product (http://www.tryton.org/) diff --git a/__init__.py b/__init__.py index 8025921e83..37d58889e7 100644 --- a/__init__.py +++ b/__init__.py @@ -16,6 +16,7 @@ def register(): CreateMovesStart, UpdateAssetStart, UpdateAssetShowDepreciation, + PrintDepreciationTableStart, Category, Template, InvoiceLine, @@ -26,4 +27,8 @@ def register(): Pool.register( CreateMoves, UpdateAsset, + PrintDepreciationTable, module='account_asset', type_='wizard') + Pool.register( + AssetDepreciationTable, + module='account_asset', type_='report') diff --git a/asset.py b/asset.py index 01deb6e733..a7a96b05bf 100644 --- a/asset.py +++ b/asset.py @@ -5,17 +5,23 @@ import calendar from decimal import Decimal from dateutil import relativedelta from dateutil import rrule +from itertools import groupby +from cached_property import cached_property from trytond.model import Workflow, ModelSQL, ModelView, fields from trytond.pyson import Eval, Bool, If from trytond.pool import Pool from trytond.transaction import Transaction -from trytond.wizard import Wizard, StateView, StateTransition, Button +from trytond.wizard import (Wizard, StateView, StateTransition, StateAction, + Button) from trytond.tools import grouped_slice +from trytond.modules.company import CompanyReport __all__ = ['Asset', 'AssetLine', 'AssetUpdateMove', 'CreateMovesStart', 'CreateMoves', - 'UpdateAssetStart', 'UpdateAssetShowDepreciation', 'UpdateAsset'] + 'UpdateAssetStart', 'UpdateAssetShowDepreciation', 'UpdateAsset', + 'AssetDepreciationTable', + 'PrintDepreciationTableStart', 'PrintDepreciationTable'] def date2datetime(date): @@ -811,3 +817,198 @@ class UpdateAsset(Wizard): }) Asset.create_lines([asset]) return 'end' + + +class AssetDepreciationTable(CompanyReport): + 'Asset Depreciation Table' + __name__ = 'account.asset.depreciation_table' + + @classmethod + def get_context(cls, records, data): + context = super(AssetDepreciationTable, cls).get_context(records, data) + + AssetDepreciation = cls.get_asset_depreciation() + AssetDepreciation.start_date = data['start_date'] + AssetDepreciation.end_date = data['end_date'] + Grouper = cls.get_grouper() + grouped_assets = groupby(sorted(records, key=cls.group_assets), + cls.group_assets) + context['grouped_depreciations'] = grouped_depreciations = [] + for g_key, assets in grouped_assets: + depreciations = [AssetDepreciation(a) for a in assets] + grouped_depreciations.append(Grouper(g_key, depreciations)) + + return context + + @staticmethod + def group_assets(asset): + return asset.product + + @classmethod + def get_grouper(cls): + + class Grouper(object): + def __init__(self, key, depreciations): + self.product = key + self.depreciations = depreciations + for attr_name in self.grouped_attributes(): + setattr(self, attr_name, + cached_property(self.adder(attr_name))) + + def adder(self, attr_name): + def _sum(self): + return sum(getattr(d, attr_name) + for d in self.depreciations if getattr(d, attr_name)) + return _sum + + @staticmethod + def grouped_attributes(): + return { + 'start_fixed_value', + 'value_increase', + 'value_decrease', + 'end_fixed_value', + 'start_value', + 'amortization_increase', + 'amortization_decrease', + 'end_value', + 'actual_value', + 'closing_value', + } + + return Grouper + + @classmethod + def get_asset_depreciation(cls): + + class AssetDepreciation(object): + def __init__(self, asset): + self.asset = asset + + @cached_property + def asset_lines(self): + return filter( + lambda l: self.start_date < l.date <= self.end_date, + self.asset.lines) + + @cached_property + def update_lines(self): + filter_ = lambda l: (l.account.kind == 'other' + and self.start_date < l.move.date <= self.end_date) + return filter(filter_, + (l for m in self.asset.update_moves for l in m.lines)) + + @cached_property + def start_fixed_value(self): + if self.start_date < self.asset.start_date: + return 0 + value = self.asset_lines[0].acquired_value + date = self.asset_lines[0].date + for line in self.update_lines: + if line.move.date < date: + value += line.debit - line.credit + return value + + @cached_property + def value_increase(self): + value = sum(l.debit - l.credit for l in self.update_lines + if l.debit > l.credit) + if self.start_date < self.asset.start_date: + value += self.asset_lines[0].acquired_value + return value + + @cached_property + def value_decrease(self): + return sum(l.credit - l.debit for l in self.update_lines + if l.credit > l.debit) + + @cached_property + def end_fixed_value(self): + value = self.asset_lines[-1].acquired_value + date = self.asset_lines[-1].date + for line in self.update_lines: + if line.move.date > date: + value += line.debit - line.credit + return value + + @cached_property + def start_value(self): + return (self.asset_lines[0].actual_value + + self.asset_lines[0].depreciation) + + @cached_property + def amortization_increase(self): + return sum(l.depreciation for l in self.asset_lines + if l.depreciation > 0) + + @cached_property + def amortization_decrease(self): + return sum(l.depreciation for l in self.asset_lines + if l.depreciation < 0) + + @cached_property + def end_value(self): + return self.asset_lines[-1].actual_value + + @cached_property + def actual_value(self): + value = self.end_value + date = self.asset_lines[-1].date + value += sum(l.debit - l.credit for l in self.update_lines + if l.move.date > date) + return value + + @cached_property + def closing_value(self): + if not self.asset.move: + return None + revenue_lines = [l for l in self.asset.move.lines + if l.account == self.asset.product.account_revenue_used] + return sum(l.debit - l.credit for l in revenue_lines) + + return AssetDepreciation + + +class PrintDepreciationTableStart(ModelView): + 'Asset Depreciation Table Start' + __name__ = 'account.asset.print_depreciation_table.start' + + start_date = fields.Date('Start Date', required=True, + domain=[('start_date', '<', Eval('end_date'))], + depends=['end_date']) + end_date = fields.Date('End Date', required=True, + domain=[('end_date', '>', Eval('start_date'))], + depends=['start_date']) + + @staticmethod + def default_start_date(): + return datetime.date.today() - relativedelta.relativedelta(years=1) + + @staticmethod + def default_end_date(): + return datetime.date.today() + + +class PrintDepreciationTable(Wizard): + 'Asset Depreciation Table' + __name__ = 'account.asset.print_depreciation_table' + start = StateView('account.asset.print_depreciation_table.start', + 'account_asset.print_depreciation_table_start_view_form', [ + Button('Cancel', 'end', 'tryton-cancel'), + Button('Print', 'print_', 'tryton-print', default=True), + ]) + print_ = StateAction('account_asset.report_depreciation_table') + + def do_print_(self, action): + pool = Pool() + Asset = pool.get('account.asset') + assets = Asset.search([ + ('start_date', '<', self.start.end_date), + ('end_date', '>', self.start.start_date), + ('state', '=', 'running'), + ]) + return action, { + 'ids': [a.id for a in assets], + 'start_date': self.start.start_date, + 'end_date': self.start.end_date, + } diff --git a/asset.xml b/asset.xml index f9dfcd0a69..940a4092af 100644 --- a/asset.xml +++ b/asset.xml @@ -185,6 +185,27 @@ + + + Depreciation Table + account.asset + account.asset.depreciation_table + account_asset/asset_table.odt + + + account.asset.print_depreciation_table.start + form + print_depreciation_table_start + + + Print Depreciation Table + account.asset.print_depreciation_table + + diff --git a/asset_table.odt b/asset_table.odt new file mode 100644 index 0000000000000000000000000000000000000000..d09dfd438d910f7b1e1da6205465ad1b389d564d GIT binary patch literal 41772 zcmcGVRZyfo(5MIZ#bIz3Slr!Z7k69S-QC?;T$aTdZ1E3wcLsMK+}&OO{V&eNsdIfU z(v_s%>U2`oZ#wBG%5pHUH~;`50D$`|N5Wu;9hC+E0Q_(H*9EY*wl{b4b}~11aNiiV|Fw5a#Q}lls%{1qZ0W50RLNn|CFg) zx!apK7+c%9vbg=9DzlS=Wt6g_6dE!i^1n~eWTeGa0RX6fRlpD;^gmg*IKl`3c<;!F zi>Z5MpTB#~>q&XgAPQe@$~ktAPYLis!-`H(X#YnsCP!b^E~i@IOJy&|G$+7eDYVa0|Wz)eBf!`ZNmEXPy@tSkHf}Cj2A2U!gVVLKOqMeeM6$A#<7Q>ATxGK7jB8 zOB#z7CoxTsjNP#7k-|ZIji}pqcL;6t(cezq)JH4oMMl#|-tC_rRM_hb`N8Q|?xelN+T7DE{c_VE2 zm4FS)-GWm$?f8QjAz=G-OKL0TN)Z2}58E?lqW9=Bfd*aJsOm5rH#E63sINWGKzy1K zX6E8?3+m^ujiCH0s*u+iKzM~1`i@wxZz*Qp@Am*(qflq;fN#P3Tet|!eUNFQnl8Vc zZGm?q!1iUeiX>*xc6vSPgd3X#7P=x_XarLD21+}yE0j3Q^ijtbPJy6^XwNjgrLT1KIJ>7OGKov`a9>;$BRX^=@(GH`qfr&^ zy(29U+uy5d3GmFaicfcm!9AMn)7nn8OXnDz3{G~-l>JgyFvxUgF)+xa0=$31d9Zqc zHU0_EL!p}CIr8M^k?8JUF-!ZlA>S7W0)k^&L{gf?7_eHlmpNsUf@x#(C?&I?LQM2_ z|2PIRWM<$Hj5iQl(a|O6At_^W9ze=%oU(y&NX7e86O-x-%&ck)ZdTuuO>i>99#eev zbMvC3=cnD4q*l$jF(IWtW!rFf!wUu+?;Ef)+|kGIT#t3 z#>OX1Pd~oaztaSMgwudtl+AsA#8T1rr4`mLa8y6CdNieb`sG??FyJ%e;iq{cpL(c& z%V42OpZXjzWE8xy3Zoob@S!5ahhxsk9W62Sj8PDoFI-ORx;o_gEhxyd%Nx%av)?&8 zKHIlnZ>jYSG*%4x6TSahX4jRNi}9_h%9^BK-9D0PB$igMT;sP3)nGkq$~MiBa&`gP zL~+Hs!;*`5!~)arlClYn7|ZZyEwhT1Am%gzoo0J5cxM`eN?~^cWFwq91%hmv@&-R- zpM$uuf0k#qX8-D{Z6@31&A^ve154`|(_+NO8|(eI@Z~TjMrDPpFH9hRCeEmHX;J^g zOZd9`eLvTp$G5(oVtDwL% zw9{CX87J8Uu@A=HVY~+Y?0m%evY1mj@jj8`xVo7rk?(tLS7JFhClg#mbgvI#*IxVh zKsOx2DIwIEI%~4c^nSX!E>i05s1bDkkg87kDUcPbm8!Y9>3i@ycdSGS>Pzs<1C$2K zeBJg_WNW#tP6Dxj|MmDIy*@))G|$P&z*$PRG{4TF(&y1w1MyF*>b3sB%f}BCaIHuC z`h-Tku@(*@VCvJ!64HM);wAgFGhS|-mO?bO(Pp3FG)p-mblVyfs;y{Ns@U$@sH0== zo=b~2nfAb*PS(zxv^!q}1zbqv?x;qU9_om^d?Xa( zp^F5Zzz+SYAN;TA)Kv}J{)duGopnZzh5)@ZW50R+S3SG$IHH%f@i8MI`)$bJ>Lr`V zy20?2bymG#gr0U055Nkp_>{+xl6ZpZJBswoTKzIE6&li5`+Jgf1+H!Iet7i zF4+A12D-90b*#pbG21~lT!mC}`Cf}RuyReIbWla#OA2L5Uk7mto?YEstJfK=as#&A z_$%DAuFr7rjDp%#eunX|nmKg5&C;l4jEl1uWL1$P6v(bScwP!xlek)@{g~-VYgNIH=))v&4D}3vki`IbR2P-$} z|Gb;Kr#0lEZ^fvJ5nZcg1>bW%oxz;f2^eZ6%?#-^LOu(dCKYweh#6#AIKiTkm%=d< z++H@t#*U9ncZ>Ac_m{sG$I^6{MkxVf??k3o)LNzYU&{$qHpk$WJgguVnNtf|5Ipo6((#JWA zvF938{W8(b*^PLQkcC9lQgiW3ay~Dg?L?m_{C(pZofi=?+sJBfIu9`fxnT*7;MY+v z0=u&PlaUV@|1N8YH)k$cM-nQ_Y;a;2OUIPHC=6L5*$u~45$q(+S>_a@+be3TC@4LD z$!ZH7k*NngOl{8%nghR|IpxuVtKRk~;*Ov9w$ZgrAdVMc0J zJBph7WT8sR98PjCOtu6~bpEJGmgMtke!f++`+;ZE=lnS#(B}KnA|YCOHeK}7#n9q) zRFrD_eP18us$D?I{CG6978<^;jmBQS@xg8_&!nT|K5WbirkD)M*@)jmpwO)cxDIO1 zjpGP2V^$;M`|aUmfDb7uuE1~Evxdw=TMwP+@mjmh8MjEz z0({!HNZ|Kbm^`e@cA+2WS6uk)50lW*-M5;13BH#5Jd6(kzk_RpSskQG7X_|wpe6xd zQ~UhUMc@8XoxAzs#4{DuV~Ww=`)KN})3S()kSY|FM?lpb@q0je53n&8rZKe4wMF+Z z4Fri3VD2IPYBe)iLT=t-sp?{DHcy3gvbk$WSV_>9 zpis2xb4(aBb_o6xv3nE9ffpu6UBA3C#@By5f4?L4CYsuCEd2bS;XHi$aHHqR5pO$I zQEoIis=I@VpQKSW^1M%jPDCMdxK@&v$AXeaBL&OjGwLRPoAy-{yk3i<+2XD)BNFVF zr!4Q`DB+Sj(Ww`_HlOP2)XYL1e2`1AKPZ=w2-6~Pi@PA|! z?Hk<#-qFcpX(U>paf90JA*1jgCdokmzw0HEd+8UX;jYy3b1JF+X^<+znU3pIv72cZ z{N!BTDMMdDy+Zyg?zb0o9=!yYV3MQFCznsrnDL(oOnTz@m06M8+^?7 z=x^sNF5&PS_beS^1iL)`zyOjjN7E#}KmJ_71its0)C6|QZ=C+wVtZGg6Kmm*j&j+$ zWHNZ|GV~H~Y%wR1{LyC$1)Te#@c&9m$8z9cPx3Em|($44RJAX8S zlw7`7OF3S|7((q${4NIUGZb@7{PEWkOv@mn8hB?xt8nP&;A#jeD`Gkd-m~!;7VD_c z5}F5h7z1P2A>aF{LCY&tCmhQ6N#kkkVI`7_9#NEURwD#5F;XhDvZQ-o6Jv>TCQJ$E za%OW-L<0%X?M0S1*5v=vh=aaXZC>Jk8R>1pEr-w=wzPc?n9?Yt%C|iC-y*WNbp31Z zZo6j##UGka{^Y#VD_{yMPEAbBP<`xPc8Acl{+7b)x*6;idRwj!cjMIZBRGo#%Jrm6 z775@5*%}Lhu2}*Pmq4E-p9h}8k87i&ZRFAEhsa61F&XWD6#2{4E8?^mUxpsL^iP2u zIFQjHw0=dJ-69ur3x|V0-S6L9E61Wbs_vUS##-eI3@Tr#xCDe68ylZHHM^egHK#sb zL|*q5s~?9cr2_8OtGl}5-g`fTvd`B~Urxd_r+>l6em54Dnxp?a%I8J*%S$bK;Kk=lbs)YG?l_exCU9=p z?T|zC*RcJ4-{`|(z;Tv^#lLg&-YlJF-O z6>Ot(dDhxFSCaeQNA}U(eBzU7J=zh5()TcG&XL*G;x?Zwht zIBR*zX<7_KYN)Ttes6BjHPgqIhJK6<{@1qJ%&Dm=tI>ns zaL)Jx_vZU%ek0Vr)NZk?c^?g5f4oOdi=f0rM&>JzfyoSo;~ieFqzs3?3^+1PO%!aV z;r}30`BYe@HJCZQQS-~oLcZ9@0^bGC(PGfLZMRn`sr=ntMsOv+7eS@a>{WNtKU{74 z!`hCvIEBpBLIzie-Mf)=MM|;!b-!048IeaRUnudaiB(s!MmY%E7@1@*;Rc#!mK7ZV zb0Giq-TsfiXPIY@@d>(`6|AFh3$E?cDJv~oEb$OL+uc&+O+=Y|-_&w%THz?dCF0x} zD#Sj8nQ(6XFQz4+fhhJ$FQp_%_?P&XUr=}srzk>?2#!7QGQ$xo0n#_31`S)>AxDl- zU^?WX=2KJD@SAVjT8a9yC?P9Q0QNVoxs%f6|F_Q{mEW+~(%> zdFV!vQdjJo^-vKwbWEN@D0=gBD;LZRaIDwvuVqVqs3=3pAEdkbwlgzz@bVddWx*l* zi>6;lH&myPEUud=(4?zw*58yrX|HBUxA;SmHHD>eO>MVe7;dMey{YF4WPf365n{Po zY_IJD>Bl!!0Tq;8A9WjA5BxELDDyOV7-;d=xon@O+6DW=_*cfG~_)aQ)E`M``FFii|PX4~L>{EF+xIPpm zu71x7nH35dJuTi}&fK*sz8-qeStt_W&JfZpo1ecJ8F@}8XCB(?Zuc@~78&GwsetH` z7QWp|rFJ`A7f?xGZI$h~LG`ctT>4d}ZnbYhRs)=mrR#q>3OImW0xzcXf0XUDTA=f; zmTD>_AK$NPX0As`n|023SsQQr>YfU;z1NS)K`Mvpf2-vNo`Op((3i4sF}7`*b1?Q@ z7e@8y&5t@Yxtm2AoR*h#?GwCAOTsy3EiF*8Ank_=_LYV2{gjc`ez74JQiLi1BMlb$ z$#F$|fyPd&WP9$+_)~?6$!I~eRpJ!>wfgi?b#>DUa}rsqHX8(#=|OoxwxZ!p9bGoW zcuI*V3Px0sWSKwhCxbeL^K+D(E3QIOeHv&S3^VOHih80%=T4h+))w-6e#weAjDXmt zMVRvnr#?INU~ulZu6sr?d{1?WM}Hfv8Jb!=28e}5Ncd;V+B!(2ntNiQROA^vf!CGkGpoacQUyM%GAPv zPIWE{pF75#+xCfNEd`fUcmpalK6EaxeDW#~Ly3Vz)Dx^ zdJF3bkv94wue+?rsIfFbc5$HvJ4~+>{_yT~`{6G`Su6!ciZ*ouJA0FsEth4iTt!YZ z!L(tu>6j2a31aH?;+oU>-MkEwunboa0w<%U<;7Q!DZIQOSgGH;(!|&9{WGaL$qnK~ z<8!)pt?02(0KK7}VraYY$8NKhsyJxm;B|A*Sr zGD#cxie93c-;7N5WVn54%m~Lbh2UM?Ax5#h-%IqJl2_U`7OgLJ2;-=$P^Cju3!@_{ zi3+z3AN}d6Pyd}Y00upgjH+*_Z%uibiwskTx#d9juHyr`?_L+wDHh<tDHjXCsCB7wMoQ*$RhD4Upigp=*ovTMde%Qs#kjCE9;$%U1HrR(OLvr z%$M@rhi-!kksVsQxL^o=_eNlJUq@(4Xs~Wm?un7$%jFNk1r#%a(^Dc+NyVv2Csco@ z83dxR2h*iG6aCX?CkzbUd|hsZd|prh#bECMfX9ui@o<|@hS!S`fGLj)nec%O#TR31 zIdMX9%MWll-EN*$qjnpVrLslq#!9^f97x6@v(J#+<$f`{f$t#gB15VEx0u3faQRu1 z3vSf7Wrhx{x%ZxosD{oZm4d~-5|jtzyjO$m& zQdl>h9uK4=2aC3UBFym%kunDAqW!v5Gor-+b?W@<~lE>FD=4yt=G*Xkup3v4G0npL#P6j(qYK$HHpJW@nEJv-40 zQrp!~ml;!17*=7NV(vDz1YtAq;>X;OsT(k`2C9|*bk0?BTpAT?Kuepa9EnW591q()TucKQI7U$#f77?h2HdO`eh4k z#Zc*%e1A+vY?J-^BiYs?Igw$%2L+Q`92|O9pvC6dH5z+KfJ`^^HcyNjsvfD>+GZRq z&7Nf&)feUC2MqNM&9y#?%HA|Jmp(?0!PJzpQ}@z)e*bmU{ZyJ(gH$fUsU`eU(X?;& zHwoS?-mOLP%@Qg12t2Kwo5OroZS0t-SF|*7ojJmv%4PUlcdlq(vHs#*^surYK6bwv zrXHpO{A0GZ*wxTjBtDy)KK>s!q@1VQwkCQf<|Vb7`*2 zs~our87bdF_wA(ANTwL5+1XNsHOnzzaravo{>X~qQCoQwF1*Yb9D7kWFWTwEH)>Rj zc6gQZ!Yx7%8z`nO>aH`~Q(x-hkC~@?C=O7TFIHjO1(*EW&Vb-xD|6V7AHQd+Hco*< zMXL^Mcp|;C#gY3G!QV!7ng?A~8v`b21WWgVaIU+1H__ zC>CIfKVps5vAg zI7tv-{|F|cKD|$eVyf`4<9qrXvNr8264_9(D1VyOiH*x|JsQy>vrgr7oi7f!Ufzw3 zd>7H~a`QJBLj*JZWxu=`T@G&eL&muNX0Zb!YZCu{M}$S`>RjR(zozWT2#{{a9{Bk9 zNb7zxmr&{RL-XvI=Hs<;*%CSPmFdrY`6#@K_$m^Lp=ftxPPmqUwj&g<i_1k=J-Q zoEOpTe*6+icj6$;OaEgV;Ad9%~GwBwpvRGrVJrhk#5WKF{yppcqE~P z9->0*$ys!AD~uzYMyw1ij2ko%$NbnO`*ci{j`)9q=-u3tIIHpm*2HJt=6@OU#cjF9S;|$&1a8GlOUjmLp zcc8t`^)#a;yC45_GxNiK(^k&l*e(92{DFler@Hbv=(hnU?y( z)MMG-pmxl8EgYMf)EXqx;(fBU%@6>F`jL#--8OEUzflCzdAqq<#Tc0Q0wqi{ZJp+0js2Ygn$p zM7&!$YZLh`v~bI5C$#sJ3&zHMW(*-KR9}|g)U!`A$v#v zmfF}SSrxJl27NwZ{tO>E_6($%aE1n>-~?Nu41yJj*O_>D#s0D#vL!?#HW>TDeh`mc z$AQUmrRjwwSvmdt1uj!i%%axQINJaXkaLUr=YSfz{xLe05p!2#^032aK(VoGR(j?P zS7WiK)S`D=Rb+%_;Y<)ADW~e@ahZ|ns_z5#$xFXfLS`{23zQ+=mr#gDt|kFpp~-Nm zZA=R-cK)@^_fQ84|LtB6Hoh6M1I_1AUCo)UaqLEYRyMf5Z^V5o3bY$jr9Oa9ID2t=oG!JZnI&ni|a({S9fg=H33@q0{tmYF$%u4!*aK{JMnwA(nY|1oy9wa4YB zbo2|j@*F1~W9;GKQ3D_k5klLYKYg{0KtOuX=jz8Gf2!%Kg^E~h@8G^O550%}?3vf3 z|Fh-8oz-Yh6hQGRz_D35dU|@QEUs+Dy830FijmSu%Q!eVdVO31$m&Ic9}qZaksBk1 z*=%VIADeEvR}l=c~&h*>`pc9rLbVXVFjOl#m_waDgXoS z8FdQ9Oz6``8h`M^GdSY6I&|CW4Wn?7a`vmy!w}nnMkVp_MPZho>&W5R^d-~>h(7-K z?XRpjgr3;+^WR-Uh~{CZ6_lp*eoTiqMer){m&tHy((uh=|bh#QJ#{P#4QO z!HijbjAfEZ${yk*B)8Pn++4ypnPHJdSrbdVZu=8SgN}V;iQzn#>EN{Z+wZ5rs%w@n zOrn)9UdIN`P#o&(9>N0JPv~hZN>bRkjZC+rb;HDaJ6-GOJZ*q2gd>>$re8~p|A`jptyn4~ZZ>smG*TJA(OYnLUxLisGp)u2` zccJGAOw{fxPN5okf}I)BZC4hXEFS$ri&lVRVZJ~>=AQVqZ2i~z?88hU1pCGrJt@~< z{Ax2`R;Pgh#w;|tT3BEn+yxpwLHzpS47{k9-eaDz|5Q^mr<737;5(Q2m+4UA4lXSU z8euLzxKB{*SKe*o5sXp}UI*9`C!(sXZSRsmir)4Arh05(B^YMUN~mKv#RRiPppAGz z(#xPnGj{863trT(Q&Y8j8tI#ey{I=%g5E&zv5{P2=(kXPsVBMc5zuZ&;s^jAT0ytU zwfW~PQ>zzz%T?zlp9@aQ79H|`PKV_9ODwVED1J5h&;sdnmNkfR=%&!{2Phu?4O2CQ zm$`EYS^y`k+wQt{SHaY5GrEO)pHvBqzu$MtPa#!}j%_H>@)Ua~=jEBBHS_wyp8dD} zseidw<8b@mpTBn*XDaKBHDNPWta2;OL2Otiqp*oheUx=w4SATzcCUr;;ZkRznVmvn zzcLF#8a>@@Ra6kiUH!WM9=kXAUR)ICdeJcNK;e^z>DsV(2;nz*p7*$J-dd%?zSDRltcYcT`~p zp@lraMDM@HHrM8z9W_p*N7LYoLy70vtj)`l)4Od#?3wjQxHu;pkxTswL|x#|su>odW6abLz2q%a54BuRX|sQsQ-I z?TEL<4+lK+mO9f8!HGJ?1A`+QtP9I;bQ3cG6L*NLoJ(fW7!QfsM=-YR)h}!`xzCdT zt}*9t{eHq(GBxrt{SWRi>X2G-RC%2E9z0U(GxXL6<4 zAkehYdH>8$-X!2El+23zekKj{`GWsR&F*_fNfx+LU&SVxn6knAegwAsJQjJq7kLi- zye8UwDlcA@iYF@~K27-SCo8_iZd-jFKm2#fpiD{%%T^{;R80qjuE86dRiq^-IfqYpUo1tOBv!x5sbfPC zxY}wYJ&Q^Y52F)Jtpt)6e4gj%icCdI{X&8T+v}cf_%>+B>GpFW)<^=XAKrPnNlNhj zEhfUamhs07s)P}_89txf zojIFLD+pNoEU>H1dTU^GBcd0aP$SGRV32oA&F^;Rvrg~;NY5`g(n=-yFRjzF)%d_D z8FALc@G%TwLLt$-@%GhLSFPj9B)`RA-M7$|6YXA_{e5+E5nD~}v!uU1(7WhOb76x8 zU#l zk^vJv2m!Q9O#7mt|3^Z>^GZgBbw#bOb;a{e%v3s|PUrI-jmV;PbG4Am;oU!PxRGh+ zo*GgT??|;qEC%fk{7z@U+Nd6%st36WYGME*uJp184C&J5XnA9KOG)~Z#MPcEHa{dC zEWFv%8qObqLfgA}HNHY>ID;_9IuV{;LJ3dG^sTcO7uG(q$tC_LBkHOJh~_pH!lQxq zp6Hh0xmmH|z!TUJ?l%3@B0i00x`PlC+Z>0~^GGDZw%QuMyUXsI%I64HJOoWZh@>}X20#6n7&Bjk+>;e50@Vbpbe=VkYfkn`F!YrKf=O%h z8Y())E4JKL+uknH-Qx5^P(Ww)=1p5dJ6h6k^wp^Fmh;{$q9J7e7hnGoKeyB@Sw#QMAswPbpe5Z&0}X`@tqcnLQ0_%V-EMI`dD$D1W65HmRPQ8jzn=n;vA z792mwcskUn-us&5OCOsNRX46vaXn!}31%x+VjO$hywnJA_m-hxC27@G<__wm9?NxL z{-X2kXb%=Vf>%s!iI=Fd1rGrrg*D3ecVLdg8g5ZbCR$R|J`YNy;LbTCMZ?D0YEJ_u zeNjUm3lOvcHBJi=J#sdO5H2psQVp!9LfkV_A9bjb-liG1S2I;)fL$Jrb{P{ z9MkpBpKqa3r?*=}KRP&o#Y9k*GFwU3z5DHXM6iZt!=edF(rHwYKvXwPzWFP%qXh@) z527eLp+`HpKFkiuxt>u=E!!`>qib>d=l>?zSBwB`!-<>YwLlR2hDsp5@Cxji_>qLD zcez@HZ#Fx4;esL7ts%zB0e~T-q2Ro=$_}6PPM#+|w4^R6BbTbieY$@sQy~K|U(`E| zg#PnCQJ}Ut-@&Kf^UYtz1$)nA(*Ui?3&P26|F`QU&n4`nlwxitjTP%N$F{pmrm60! zkvk7W_&Dj`fz7o|#?N7vhg9Yz>-<#SIis*;{q73po8@hMjHV;Peiq1b4pod0Depm~j?3sX-xFKfY;FPS7#A=Y5 zy;`A=i5NgjW~P^2y4{L^Mo5hO8~P#$)LT=*+&*ekW0uUDfy*XN^GO+mJZD ztKTvROb{8@@SV$P_QN2{)`{%ypV-Fr`Z`wE=tH98V;k5Vq{4xPEbi=|mZzP4u?e#P z0<$GwHA?n}D^mQjsMlsrbBy#Xg#$ZJLu(}t-f;8e!-!!Pxex&Ez?4Z>LZDrFI^gs!$(m9-7^-4exV=Olf zV#_y`|9;_vEDq6{9Ft*ZL_!=A$5-I~h+?FkCX4-sjRb7%L1`nqoFimlh7z3_9TH=k z$@U`%NQ4@`(%g#Wizlwb3MW#r=`)%j{z)!i1H!RN9!Y;Tjp zx|63&YxK_Od1wE?fCF`oS5#^{l7^1xeTA!p*n)4T`~WY}1KAb4By0IBNs19*+Ig@H zf+$h>aKteKlmxE_Zf;!ACIGa9HRrEJVcu00U%O%9PJ$_<;nDop8qTAQ2jRXH#e9_} zZba$b(So>}aKh~3#tKAz-w+bOK&983PLfuA)MGfJdLj(Y$m!8dMPoXGwd91W_+F|_ zhe6BQ6q0vaY%c{I5*sThCHK<(!7-aWjLie)j6W93V=a5KKTz$?ki-FS;2yB~%&i|>493f}M93f~l$eSvuY`*=r%#eZI|Vvf_;;5m(#%pgq@l8a ze^;NWf1ZPdU%GR=&;1}T6LT~?qmb&0pYC8fT9>7!!`*+m)JDjhSRziUx1G;NxXD8W z{zlid)o~Mpv!B5pvwArz`UH&$`LeUv6=YJkvo&dIJasu!sP114xsj>rhMZzj*)z2_yb(D@r6Hz1Yh-QvM#n zBhn$F3ezfC1AYtl6a`PU(kVqpv|}b9SFc(Bl!F^+&ACRtsY|WN?sNm#PCq*j=b`JK zlM%~0n&;sL3Zi&x@APfn`W2)kC%JMYjvuN!)eX9}W-rh38@22IQL({#*txXXu0a22 z1AYPUop{qw)8wD?HxYe{sLUr06C;0Jm zMr#mL4+^83boogvn;&!VO~a{yYpwOLl@%Qj5uC3LJx#_7y#u=eS^ua#t;2y!ILpT+ zW``;Cm>LWrelu-c7FhSNz=2}u*Lj|vmwubz&$dnOmDQEA8OkO~5ad}*NWa35{ai{X$TlId&>4JLF?=-?b2))=Z6f={%UTZ87y4iAl5iMX z{XmZ=C+Ryn)w3A$US(yaFB2g5{cMVbi7DI?o{aUgx|RApOAn7HaM0m?D}BiA6^F1l zjm41k{QA)t7P2T=as9HWp}4)QKfVrr#i5?co$iC4O2O8W`@BV}~E8 z7>%>ikRwi2KwDe7!{dH_cNcrXi}gbnwzj(B+Nxviw2Zg6-j4fEA5z556X(=y@HML> zi)q`pce7Zdyb8_gHr}fA1MBo)pLHVv4tB8^*cqMnQKJ^=0tv^Uj~F1pKdUB`%L#Jk z0b$Lw&Q8yt{tmp*vZ#0uWw804nns6w%echJfn(pUX!>40!TJ-&1A<=GiQCeK=^F02 zK~F2pO4`@y_DF6MApaPaN8=6Z{s(11N-*I7VTvZ{4Yd3?Bvr7#dtY#Zu}S&O!6h(h zG1!cYeO`qjKd_-o5=F*EFW@S=hk2&3V@ARVh_8bd6JX|2Q8zF^uxt$&&}{wvbs^Yl ziOy$m4ATSTrF{~(JwTivWJ8iK8$Ex&;K#l)n3xj$1B##ll-4#r<*a<#Gt;#cI7n@4 zYQUiy6?h8}l}~TJgP`Ix)y(uAUJzNZCo~zY%Py=bwmDu8TX?~i>;$V>#87BxDW4lN zdU1PiFs+pg6r9*JE%Zj3^yt0b#3OFB9fUi4w>aj;xt(@OD^V2}?3G;L^q+MmP#ple zagOgH8DE+{ffi=C>37dSulowV!!DRcBz=a>{KukCxi4kii}=3k>EZYmJC|*Il$0pt ztZ3y-;AuSakm!uo>}iysz`Q(Xv{tRY-Kw_Q8%JV~4(f!Gvraq|7h<|CGynL>Sy^@r zA3+0j>0A)V%+*qEsjjk@|5hJ~dogC4#WW`?mwd`cN4K-0Gm$UM_51T>q0xUK53vIy z&b{%Xsa#3gMVJDtRb^UgKgVo+VkfR`?_ok*xVj<2`yd@XWB{=zl`AQ8HW~>1P7Xlr z4||@I^70dhB4?Ao|Hp84`t6m98fpH!KDIopFWAB>>9G=0&tB9M>Aj9w=@?)~0&Nyw zOIZa|JB9Bm;n1i|#~atth9Fu1lCg`tLo8UUcb6lPIfJ(a6#~7SG2PmRXJcCZ6jf+9 zPgmo2`5AM(#FBg?xYJmOB{OzLWF$_~B_R!coX8Y|zXU}Tk`l1O93bQps0U5N3B`12 zeH@tKMZ*F*sbq8S^7)v4)&2ST`sJG%YgAAiAKz(1pk3+nZURD+1~d{`?IlvCDAL)%iPg9iQQ z&Kh;EoP}$kw(NCE2C>BPF3A>=s(-?t+R7Ta_p}%CZmetBLiO`*P>vYmcsSJ<2XX^J z+AdD^%$%a|Z2!H(wK&DhH6os$PDBN}#l?7mDIy-j)=3O5$k~{wy2Om@XN|I!O4TV6TlR2SmwvuD;SlQhfUUA8Ph9!pwT{#o`9%Jbc z@HKRtX>phOmBxn6s=X*CMl=4BlYoL`?$%JDJ+K48o3Fj-Ag>*y(kP69MISK}4guEo z+8`(lQ<(Fv!7ccR-ARxL`XjNh+i)!-{8?g1u zzXzC|7t#}Q8SwdJ}k;>wTa*9O3_$Tc_2o{nxqd-qu5P*3&Wm~Q+Fl%I=ZB++`+7H`pKm~$F3EzpipS7_3sW!&ExRAm_9i@Qms56fA^R!iLR{kcEKXs zQlL0Pqu{v^Y;!)83+kp|#gUfQKR>(sZ&T9xRy5}jnxoP`Wzb|^uzw3*X~p3;UDqy4F<4)P zYd5c7r!O0#!NcEJZS!fZ6k_8eDXP&?YTqFW3^3n462FEOlaJ2c=G*k$l*nE&XrEX8 zm)Pv?aN{F+rlSv8&_8@VwM82XUxAx9*5^?ZtY5XEf%{4+1zdCV(5Z-nH$sm3{lz#8 zA2tE)NB5Tp-bK%p-37(hOJ)#@@mdM)HE0sRIi!IpSj| zOyK5de_*BVMx#>JGlp`{uX(kRbEjj}8u9i0fEeYuOC#K>F9kLzn_0of9?+CnP({Ea z-Wd+5Dhn!c6x%nUo^nW$23vn)7}0!a_KjyinWaffH6|vWyDHsfgLM`%#hvE1^a#@tK0NO(g6gDDt(& zPHqk{8dDhy|B+yfl5So*D6V-m2jAilYI=zGVKgC-cp!ayud+DkAG-`oKAgbJh*CGJ z*UqogFkZ?H5SuNwX`T;P-x)XXrpL1<@>y~zfS$rK6F1_5tk^UaV@2UerEyY@Dz}-U zpdwIgdvzi8tik*pC}ZWYGKk&X`beP-wsvdWFw)i-Vja7klcgF|H7D7MwQpfQ%0Jf_ zbL%YA8gF1yzRIe6kY`spZZK928uD_XcpaMDP-j%EkKH$gmbiv3)&a1K)rl4^>oUcm z%BRwT7Z*sS)it81_-wjMsyKC~W!O^b-1(`*tgF!aG)_F$dulL&iyn;qLzEqf7+zDZ z9zQ!5)zWrUXiX0NaiBPOoiZ_CA#6W?h9^COB<#3g=cdUq{)+)pj)d_ zoL8866e;y2=X3X`KP z1N8ZR1Em~A3&p{~YP*YXyc+I$gka*>^cV?w@W;c;>hVa1+lqifN+c3%diigCTl>su>IWF5g28_Pl#qeKknLVeDERNujelu5MUtYRJRoF8Se z;wtf`{;u{#rz);0NGIA0=YM;Gi!rrHA4La#HBd=d-PqJ;#Fr%V_9hQ#)EkD`W~C9m zQ>d$lsjDqyQ%Ldl*8O{7MygmO!3srk3bC!QPsomwKArGcufa_XFV-s4;O||PPB}D> zUbbpht2Hyx8hA#DWG7f+V_DLr(s}s>L)|)WM~A8zOV8fF(gYvm%D2L@qib71LQAn# zz(%`+jI-^f77bm<@g4iLQiDDsq^fF{f)+YuOq^4)b#YKq&Z2ds6dLZ>qT1p)Qq{W5 za6lGZ7!(sneWKiA&rIsFJ=OCrNQM*KGMt!lxvE?gZ8HH*xtA;~&XRTd+_x#Rd{t8^ z#R_axJgXoqZ7Q`O3GTWQ%%pl;osc8BUGb|s#+svWZPEkD6>D#Pv@;Nu$B@a0bL%i= znUGmNF@o0wplTQyG_y65RV49}J3>r1iyfenO8dD-Eh`f%t@20> z(}c58T~(H0=ee1I61+oic#@7=X%A?1 z@sz{quZ{5ti8z;$rs8C19{N@GjzQ)(kh?|g53+X=OpAPGisG*ERkl=CXOy5wizM?7BR94%glxDu-PG=+ zgep3JOG`$=?)f_Qp1G<9-LBCD_VpS5GXTzs6^U@nG|8; zk5Tn3Ha50UdbJSv-g)|TE(yqjcrqD(u{|X})r7%JLGywje zk~BpX>#5)_e|1t?YRJt53D}5bVN1jU*g&yE!DSJPufuDCQmRhxQGQ}60|!G9e5%7& zr5K3v@?uq30q)f|eQT)4e9#JMKIP-iLdp+aBG__HIBX;;RZTj|(U(vk+cai)^6m>w zsBWBfF#N(5!)hTo#=(!e?Hv&e8VH_gCJ3URy)kl8IIAI{Z=M6+TsDzZ75~DL0+`+0 zlfR8+I%rw+*CoN=Tlj!8VoP=!KF=#V3s;B%_@deX9Vdt}Z83Qa>%viSnJKUXw(VB7 zQuwz#KGnxWr+<3%$d+g{Y`>&7-T_a%g-fzgd%TS{P)rUMbGKG*VbzUYKjmr3^AV^G z)eCSIN>;4m(KR~nrJPgwaA`cKAy(MRG@U46M@oHLT$R*`3h7DFN1ryzHjas&tz%67 zdsDYI^AmXgn&Tm!(jy;&AT~>yJDjh^;Rnr#L2JT~wQ}wul#Rh_tcs-*;m{U<-@_vV zxPgaM*SM*7x z%2zmvK-%Ic9FDjD#{u$vL(U|np{vQt%7mvMa-!|2^;KVa)Svd`9~>qYsr<#IP+=1> z&dv&hgH^^Tr|Aa6TGKbp)p$y-7Jqcq$+7SA9S6q%;ObpHr*F@VTsMFAKdilFP~}V) zEsVRnyK`_E+;wnwcXxMpcRM%?!{9PF2OHeoZE&~2;qts+eLwHNo2sNz-Mf-XrK^)( zd#$zqQ7L*;VQxElfil5%l(~>5AFzDW2hmDd!b94O92X2%8HmS@=&N6cstJn{s4{EZ z`HaZ}yr+Hxn&{kut`Ar9iChAr$kCbeGuxe%1FV?a<`2CZ$n6N0eub(5~a{b`;x#FdL zKu)W={OU42Xn)iSQQ#))XgiVCwNjS-Pt$?nnbLIOQD1z+h7y2DN9s|&e696;mCp4r z(8})W8}LmzgtDin^#w~x4eGQ^wfg1=mw6ToId*5&^dn*O{n`9&VvA&Ca$5P#41Tv} zF0ik8X$`rhT7h0wFG`)FY$wSIml->Upy4u zUWkKVDf>cU((dt;3$X&iv$HhN+p~4arpK|9)KD9N(zdt9*GCREZ3sr(!?hHr4`hB{V;qaB^JiUj+k2F&W3eSd0u%F zkmUG+qC+V%j-{!f7wWOgB>8|$Gd&Nb-IrDUe@)eO;VWz;CRqB8l zk2la2S;aW_HW|DO?qTrxWL4yK6t5~qrYS1P2RCNeAOJL?WE+gb;oI#w>1Td{lp`&= zTbst+_QHSssw<|zVTYECg@oa`H0QB98%EpT2hVaD(zK^x-}eQ%c{!}e=&piAcRC_?)FYQ> zV$p66FS#e!l@t|)FZ^Jn@E%B{l!xa|#A5)~<%u={w=*i)wAHyEdvB()^WeAdFQrKk z0B^Ie8F>g=bY;8QRrUS|l@tM`r&62!5|$RD4d_RahdYy+LQ4Ynmw7P~Ocx>41?etW!5W1=IYN#}xcxyu)FQ3f6$8_Ps!J)4c>>prJupsZ9jND*mdt z*xXd2eDaXV-i{^rVQm#efze{%S30Zia8+LJgN1alFR3yygC$?UwXTJyx;vB;jnsYI z?zjm7sRhQ&O^{GwGHqF!MT8bC!#3iH14ky4*Qx5%OpIF}d(@7v19etjYs;iyBvUC5 zMJoVKOTvORI~H~%!UYC}Va?x*T2C?@oet9E!feBI#$fPgyLJf6c{O)&?bO*mb{FL# zEyxBLbi#zeBf;i}>hw4qYn>+G9v;~T+twmlpQhL|!y)&I;!@!!i&q+Q z1el0nu)wmzAft2?ZCr#nrdq?eg9lS=G_fq{u|=M)avReQxKIGJZ8?o4l{pY^Ry?&f z&zor}5q7*Y&5aHF_3g@6YwZMQ93fVCdB_C0S1uA*sMQ7>@V^}i+1N4|Z!)$_xw$o+ z)xaQ49hi?HYQ{MQw=^ZTY|ihAAu%8|sp&KoAufqNQR)1a$ApF~(%z}HU@D&rKjK7I z^8x@ZO5-7rTV_w?$8LudoybXiD!;O!h$3y|0i6b)yO)Nle}D5|yaS(O$|E@R?6PzP z>p>-0TTEJ-g6}MvzmqCbjq5eliD%5er=D)sp85)mnOXdnf6Ou6l31#3sV3lY+7_@W2NTIHs#^X!3t_?qSP1@ z#NA=Pv26bsS!m{GrPI}YOq$A18C-!;{xxsz+$xN?{9hI z%#Oo==7iP;o;%k(apmM-XzNZ>5^JgJlE@t}*SL^S%bPWQM#l%Xn?NQKHly%9&Zxyc zn;q`YW5CLx9eYafQvr1BMX72}j*h4bQxuF6N;Q3P@T%+iaFb4a*1Tf0i;klNNh-hh z3I!z^mn+uQ_^gCeIC13(KaNyERRn%)=wy4w#*|e&EaldSRb0cz+@akL_H?$oO1hbh zt=h-D7Sx_R7xKF>?AaLU7*w5FimJFa-XC6GN}~u;^r>&7+K?heiqyx5aLziSWq+}z z>YN-L+~dX5)Mk`7$gE3xqp@?l@f6dZG`nv<1$!H_Ly|atMv#OTWnGHh1t@=wsaiuKeLj01&CA5{cNBx!J%@?o|RZw8mKf? zCh>-!+X_uk1Mrd|C*i0xAUWbv17FQkDNPhXzT61IxYm&)mLju5-Y|!gnU2n!t~J4- zyz%00$rmx-3&HImWuI_g0yx1Aoa~h~!U)Z!rNw%Gt|M`$$ba?W=r9 zt!8M)sFbckK!8_n`aS|U!II!@774EjC0xWjCv*wKzwwxj!C7}^ncn`-KlJJ9zkb@9 zJ4^Wl^(q?cf#nMV3wd%`r0_awPaqT`bcl*O3A+`?n{QL`gdoh)%G#z$cp)m-<^_bB0}Wq>7&L-@r|X5;H*+z?dL#$E?yJ^`9B*6llm&-uhvP2{!st(o zZRKLCeacB;y&RIq5y)gGdBdqtNEW@B#g!aa>(nEX!ed-WNTp1ser%q29t-cEJI$tQ z-fP93oOBWdDyyjM1QZHfT1B@iy+rD>HXm^qGZ@DjZ|+n-lBV4fALsMN1QC)E#-jo% zKTyifFsrsh!ZRBV!kN^rBCd6eoEaaAknd{8N2yBCzSig*ywK(@D0ro-Y2&8V! zkIlreo3^@kL!uC7hGuSp+_jd84o6u|jnfC~Se@@uJC&gTeOvcp4*7Lc9U6K$lJRgZ zhU)H)idjxX-wsC|dRbZL^D>I8PJ{Z$QUC)5quesKNiGw}xCCrw>bBuPJyj}4z9GX? z31WW*99pRoYt?G}8`kVR7Z@u&Zz}F{*Do-~u8_FQt1!5NF{OLGGu=OlU|4%?wx@c; z8Pqqb()_$!?FP)eAvD6NqeMvEq6C5oVPi@o?9xvfn=r3X-*vEtn!r2f4;a^aA64KpFVWmB+rD~X-*v2*;VUv<|)YpaHCLR5&T;tD^ODY z8$xLw_3d>_M8Ln7RPyYR1En~+7>wQj{nU1oRWj45s=L*OxFCDOX_sF1ZEwhp;SXH6 zQZSG{@(`&o7Kf)p2ic3kOVv#I3~DpBEo>z^~5khv77}HQ$aH1T%BZG+n9-Ca#fAJ4V*u z2j3RQ4%QHsqgY7hDLXuIGe!OQ!7pHbC?>>j;GsWz8`LSdLUab3&G?4Uy6UL4NR(uC zRZO^WBM^d}sYcHSWKF)y_IIT~rEFNcE9qj*lNkUwt+e9qm;tAP1%K#rgP{ViO&c+2 z;cYC1&_$ofn`0fP;KR3{SORw{30Y7c@dsE2cLadSikAB~1Du48LYDNpray9j<|ICj z9+WCO09M+NUaVHs*M(w!I*8z?L5a&B(R!{f7Nv!sSS>cf)Xr#hBv7aWL>lscKVnj$ zHvQT2X5)c}ZT`lV`bkPJ9Cvbvajc>WEW`v5?Tjsa*zr?dyL*L&U0k?e_mo}Q=@#R6 zU~4h=$#InAxOCTpUX&$WYAmm!%KNN?X?SasyUSpdUPyN{~J2@{uoHg~7#Fg~L(!_;0(@jjme1Eq32Gu~+7Y=!tr#BKUCQ2CUW_ ze$tJMgy8EKKQ)62Q5&ZehWFGOBtAdLI1CC=iR$bGH~+~z6`e|#rqq0==Ye_uVA#ul zC3z}4@?7s{l6twa)rw9~J+pj;=5P$->mCjR=l?P5-( zQy3x7;hnYmwCkR&G2@XC5A5J&4!Mv3*dVs;IiU>&3S=)I`SR(!9B9Y329)9K!2sQ8 zen@X(?*U=~teBU9q+5hj)!xy1j@P*f`U#Iz=?S67ehmGi1E?EVge`MHU5zTSR{R3d_bZXu-I_lM`EpVP-uPFhWsZa!eB6CgzQPpli@)88Zr|668} zOR}-=(RNHe_vds+-p@)z02>shl;QR3C9-0VdX|LBIx{MU&WZzHp~Ob zOb}m1O}#+Os|nm?yRIPpSY*`&v<|I#CWky^X*TC{RiYqvjJte6@yu-+;S=zxi9%|S z)+@HrF%MD75-<4itf1ATojswBTbIn(u>Kb!D`0HKSSmESAB18rnP$S1UFRFQ)}Ws< z$h~HeQz25@QDN30q-zA_sLjVD%{%9Ga_Fd3UZ3JGg4zZKr8cAY`br?x-B4;+`%y|x=tAk2=i^~)ix;K=QQGna=U9mjf;j} zY;-tQOibWj0yLnA4-r5xgfn%LD$kD5N>c^UGLVN?j?=kg2aX_G?dZnq zkIaAMV`FmtdBKephe!J+R2Q}ydKdRvT??!GAEUb;1_=4-7;Pw|@E))jaOQ$y*?t=trh$25QEivg~+iTK~EDx=TqDHrx9YjD73SJ73v?KFFvY8a6fJZ6TsMs!l zDhoF(-aHu^-YJB{pD_0mlw5}%@{D75q*|s`(T#o<)I>Uudg#ld6Fn?&ACiV-1Fb+H z%*s_&>p)t%6QQ`j7?QGPy|`d}z1Y| z9MyH=#b2n84~G7mevyLOt=A7n`f7>O?xjUd)QX5Qs*?_>8T-(3w$v#^qOM^n?Lv5! zrFB34;KoLZ*R?4UQHT<9RRKNKMN=xv&VS(;TucF_HN?A6hbZmGx}K>=6??OFHToJn z9}|~~oBs;)M=l@Kb4)~aQOcV#JOjFq%!$rgE;hv|7wetENO771fRvEm-?6#&P4Ek~XCef^Z&vIHMpYkrbt z%T7^`46c)0jZT{pP3vg+#cy(k)vWeh2xeQSsQ z)V0zNiT3I@Mdq!VeGzcI17@JQ%1$c}EC;WiRyOsAdk4Ff0i8!IoldrzCRZ#b=%0CL zyKCp>66>w1Pn``fgrq7KGF`8Y?$0VMq*sf?I(NRzs7HHusxe}h8@Q0RV}iAEU%{yc zr;PEmn~99E55~?6@zJ)CdVHOpc#68J3|p_dN=8?GDemCFTGa=a60=pCOm#sb5v_Sn zkM&JhayR11);`t|$r|yTvfVa_091~F&Cl@Cnv6?#3UN#Y_yx#FL@aFc_I6Jir+H6`x=*SWptcdcQBo;vAxOg9Ppu6z#m{n|Aun0!%9Na%u1zMV` zY6?T6ZYW%AQJ)GCFd1)4*IX;QCuC?M7{WGV*Yj1JVOF=BaDZ&yrsr{;AJw-I&FL6{ zBt>FsqU9)Q&=!?w+&Z1wm_8@Oe4GSFUHfH$t4T*KNR~9OAWi#U#EDL<#OnvJ0EqbB ze|>(V4^EbC(W$J*8oj--eaLf?hA4*-M?;7DT!cmiDO)k?vH_)zK4kt1wBgNSF#gnL z_d}hAZTqBmx1htK9^6+)^L@T>EkN|l4W-V_umH{YNP?S>!dM-702n7k8j@u|O|^FK zi$mj{_3+?)WHhlDNPMX<^O!KuWERIsK#OrCk6vtWvz5p5-`~sOsT-G|9^|w5F3<{- zv#-3ZEnI0bR~#0J^W*&t{em0EI;hbMAup`lzi0;0WQz0{MYsgR5{mLOgU_~1Q%wQ` zyL9$9iS5R$U>q^53AsnQL4muj@~MQ~j{2#yrz|Yspeu-Q$`C|C3AhNKrt_k2ucAi4 zGsk9KE(1G0MMW&oQjlHH=V<$Zc3CO^6x{yb5bR)b@<|y}1%=J42avfs6BhC6LI?K1 zGu^NUlHeG-!aOf<^8O0-HXpy$;PL^96qVaKxc#JS(NU?wHGKF5YH^+`bwAScFhE^` z204i*v1!Y;Po`5H(&l78?MvC$4K9R^|KeXWrS>;M^A%l02TDw5ojBv6CUv*DIa2e*nkwV>$A9a_0sJaJryrX`6B3!QzpflT zJDl^N>tShW(%>gu_9-K<1OO0dkx&09GhtkO2Z;ZP|Muzq>}TU^TYN<6qKY2C2j2Jw z;e>2rl6@norc~dL@e*2Zk2nM-;$^rxCCpbw-hXZL;z($>hgq;bw%59%;3yK^BE- z+Hn~jrzhY+jQP}uNI~1p`DFq_htI=@mM0ZL-a!XJNp!1@UST1+sgr1zXcqFvJ=sx& zV1RK27UA!uA(5GOIb>pyU5eXo*7r)EiiK$SJ;x>&JS6K}0>7`=gs)gH$dS$N*{@-Y zfrNo2(m;X(Y=~Bs3`r61Y3aNxubDHYm|fJM$4JVvJ{o|tNPynyE1SKB_dF80teqnh z6%CTsd-^8ea_?;NGCPVt;6g8A2c<%658kUrfC$RI^*~P%As(1;$Md=e#Sj6h>>UC#2+yT+woD7>oPGF?MPhNfvX9- zKsb=Yi6Is!#zb%lB%3{L{+K`EBuMzWuN%5(qFsp%UZ%}=ynjs*5EY()ZI^{w+?cJY zJf|;7gK&3PH&vhSVtfBENmZZ40 z={PtJPiQ~J8&+`OWTTzkS(4Dp@kQ4&%$H!hsH?o3dfi19!(r{-Uzlh2hFNMf(MJB8 zT5?h0PFQz3I zSc#3ZQo{dw;&(jxi%-%x#rLv@V>o!zok7k3qr3G?Uik%{^pN6=bJDg;qtD%)?cIIY zP0M9qfL1`Ld^zhr+n9gQMa#DZSVS)=5%$E|RfWOn4GTL!2Sw1V$H|v{a zIqp~&F3dW2lI$Na@Yyn^L`{4|^}g=+3;ne*qpNN#3BtY-5eF$T^CdPG7Qr~uhGGg{ z?5MAK5qvrm`&v6Wp$Z+{`AoYMSvwi$hkFD+s`LRYO7zE$IR)wV#>U3p-URf^2OhGD zXts)AcWl}&y@40SSPz^7_E+a1LCohE7j!ROs5e|k>3^_^#K#tlcmliEZ31+m2m$es zbO)$&wlh>+!%@=46ZL>j--pvEpr2!Sioh*WFsX2$#M#4MdzHR^Kiv|W#(W>gNn0_Y zGSi}HgY0e!ES78xmdc`g#6Iz|rb84BJ&=lX*+o!z%=I|jd|V11(O$ZYZv5g4QVBYdv?yJR62Y}MTAp1BMlx>_#iy3LR zl;di-n^er-R}H=1yZ;3;{yb|(BxA)GHfwzzGqe%PdH!n-EIG!PZFV})L=14Kun1AL zabMeR>u9XXl?ArXS^p^?A&>Z6JM^T%D8Q0jbaA15Ew5&@7!PVyP8XP-X=$dFYjswRnG}<&Av&^z5jJ0-;lAO^ZsL96S z{dH}$xiKY$hRbRj6NtVt9}y}*x0l!k7q>Du0Vg+rRbP3k6SA(>@{2B*N;|O$FRr$g zz+fC(+k}9#+$4SR^27v-?0@ZH3yn> z9Nr#vn6r64J+Oj@UhOHv^HG8Z*8-nAZS+)AD%BLJW%XnM?p7QVQ&#fu6gm4aILnmN zmy_|_Yh4*Cni*PB9t$rvlESwluy{5Tk<~9X8oY2T-qW6Tk&O+ZXcI+e%iN8YpQ_*c5k06|twA|z zMSFV^jp16{@kOizloX_cDz>5#x|N21iVNkPf z{4; zkr1grDPonOg4y*cz*BTNGXq7W!HVJ6UbO{mcr^!_t+4TF^nYYu`e3Hs^YQHuMm@KK zc4qV{=WGZMriLj1pYFibt17_cgjC6KKFl^I^o?yNatlP4RxAM&cT zd-r1a*fu(@@E2vxWCtB6#`Eef)hrNRgH7{6H@@4Ww-k>{QwcZ24<DtrHaKp0Ymf#W+rJm6OEcgNOKc7CgZJSE!-WKhn*gNq`SSfW`8=BPhsfD4W2|J zIs3TLM)uOG;}LC?JsRLp=}&?FzPGkkIMB z@vru03=(5-5BafxQm>A~`xOcA%gYpv6#G%`qz>w*GL2*Qi&5P#^Nb%7FSvwXbWXR_ z;6$2e39sA)b-=rO{^v_zf%{~txPVkLg+k5JxY24Ak>a39rk;ZbYp6W5K0xB&n_NcH z#3Upxm^b_EO5=VxUhGhJox`tT>Y@7hOdD`0KA`Nk1(ax{W{m->kD-+3UTqz6I7{A) z$PY@F(80|*C;RMUbrGYo)dJ5r6YUAFrV{@KUELAIAS&trJ1dsiMVc*H{=y zX5!m5n=M#{hmQ=%AU34CEiR1fL!Q1JvOb})$GYCc&A+VOA;yUfYywHH(~nrdaozqD zbzL%6<(v^0n%GL{VhcR_5LmTWcW%a%w#yEcNI7R5=XA^nEEaQ-?KbWrmU)jrOB0vS zQjvg)U6WWCXaoW*ckGS%d4-%K6II=KT2a`{6e~P6ox=$2E(-$Ir&y}Z2Eah;jfl^9 zelo5P>pn;7$jo^-Rp=U|q4A2KFfV?k3d~(R#8}o4Au=o_h{$!5q+dPOpCZk|xz{nY z=T2Mbi?o*)nSt&dT%dGt3kbR0TocN~DvRHb1L!4}n{wimR{ab?afN!gYr1R7t(xZy zmOZT!16Fe(4`;~Oeov9fjcr&Eiyx6KG122=J@%uerI{1xT|X1cLlfd3zP(&T$t9%c zrgi3#4K8;9OqTPsVuuT8_k8Z%%a07r&+>pfK&K%^uHvy_tH`6m^8A^d5EDR$MnpR> zyVu}*DfafSS)BTgPT-TCJb=|6L11RY9=0I~*P4=!~;hM|P*90hUE!Jxv1@ zVTK5hDKyX`u4-#U&}C(TF+*cNaiGf;(~3xw%2G3cry-$3Y(Ey&p5YOOL1nrZ?kVyV zOv#n9C06`8B!37`{QTpO);nt3nUTi)sahq}jGG#uZca}T)JySVrlj_{nqacz9nQ2|#&*n)Y9=?5S5bu;9Y8Hxyzjfv}5AGFKX zRKzkedN5IS(B+2fN+2UbFP43xpSsgVv)Czdea9orOO#MYV)?DR&(U8?31&2LG! zefVqM58x>f>iqp++j93Naro-T&x9y)TPfE>gaKJq(DpR6qsNt#KJ=OQO{L3iZ)$6~T=oX=-5pLX zl>@gp-1Ey~Q=8X*WV!EG^-~=Y3jb;~%*}zlwp?A(T3!Zb8`7yx8P)z0FrZ84PxyAW zNv|`)&=Azc^LufPSIz0t?xku^9!I2fAFBG4>Ht5;`*Oow03O1JA}!F&>GgZ(ooDy6 zn9G{ieVwBt>6F69UcStZgxp!6g&QuJ(h#c!YmxJLiu$3vPo3$C$3V8`V1j3o*~&JL z?_b-})=Is**p*p7BYmSNXzFg#tw(DvCrWsR7rYv`5d@g zNK=s7y=Cch79s!V^~@|pSb&e6SNEnn{cgMb+i>~&7fZDle&dccoI3aEb}d7j%17p~ zr>)^VCSss4TSn9(O(N=b>9|=qzfH5W%6@XsDgtE z4YgtBKc;K-bx!c*8hDh91?Ss->LsONaityxd>Pi<$6k7mSH&kxK~ir4E~k`y zZ%Sj_*BfVb3TxrvQbSjTF;aBK#761ZSS5)_{Q!CM_gmjQ{iNscm2>#U(kA5TT<7aO zh7A&Fsb|bDGD-6R1!^V6bf3;%UM$Mtm=ISmG_PjQ{?nZF7*=o}+WE=DWSMHnz1{ zu>N~IfJuK_Pfaf{Vjm)WKodn+osq;h9%&>g2g!LF%+VG(+<_L=%?7Sv!{}kK+`JG@ z8s$ilwHpKEc2ibJ=2Wa}Erg937A1vAq$&%nQ7=tkK(4cMO&|cy9F znQhmC6K#L)$lDvBm_y=QI2MZcB7|ZR`zWh57~wBJLuEfRICtU*tDorBOvGylNhN^w zp5 zORS&_h5jd7#6pB%oB85>@$`=>Up3)RSk|!zR}3qkHd|Xg!82hci+&SG4y0o(_+wcnG+zfO^_c@R~HK#E+Yw^p( zL`*yk?yaR(A;1j9A(%aX!P0UrCrYXyVjsb)~J#&j2mBPeI=eINU_3ti)_CRuz~xUDoWVC)D%Y1R!yLU=#ud99_v+R0cnuX|lD(7!s!FmtZrHXOOm4 zr0LjM74$-csD_tEwPrkp5gz%SRub5$TLXicvfc12oz9Yq^H^az4Ns~J4HuM-%nfmf z4V?tV3Fz_O~K8q#z zHqvFX|GV zH>}cN=2~|cMi0x`?2lHGSL(A4&3P9#+@z0%aE}yGY1anW>hc0P0Ph8{PwWh#SfWWG zn}1ltDBiqSOjR+^yo-*D;P}HRtd#Yl^Z@-fOmI;5c(H4a>K~4kSXMc1i!a3!gTlE{ zk7RWRtD@-SLTqe%X&h?C>|*GJu*}Nn(TE^gbi`fEojtug!dFOUf{OO^u}L!KaF)87 zW>|d*JeYI!Z1~wwPHr9pn(Xc!BX+z}h?viz3`W7i8To)}t2Zkp!GrMiQV8ampDIre zV7Ph-w^^QJprPkvL~C=@4%F?7R-@{L+=`w$0=L-}#ZI3_)^fBSOTr^P18dxRd{E+; zB&CE_US8X8j$kU;6q)dfll6^5|7p67XeK%Kdj$a;t-s&dQ_7N6-ECr_3=roXF$a=x zDk05QS|F}j3rEw(UQ>x=bEQ&?aI|rxcGJ%!eG>cFvQ2cPo{#&*!fE_aPG^2#$c6+C zzIg+RM;7&PT##Z#;=agtSPjXenG9Z<5(G7gehBPdCxkeH$<&Z6-%j<$eF+ z>f+qqv48p9_1TiSzxm6zR{q*46a=PpY5X*FcSKBRoQ~SU6{ZEw5LUb-YGv{GjqsFA z0Q`z*+)&qOy60&RuJqum-VxE|s(t3svuc%lZ^8$89~GE_8dFwOUesG3`C@UND_%OM zd%wKAJZGN5IY=|FSm7MGL;&Sdd7lSwab=Skg8B05YI|d9c?;~i)JVuzAZvPCgBkR9 z>gX;(YCn_XvuMWdlIdxzhXZ#R!n&Vh^6di*lKJ$3kHmK?l8prt6hZm}J2Fw+v$SF5 zd;-byC;7ff4f@ zy=&iJopK7yT9_^tj&wfzlBMH}1C;&eo@|y5!kOt(xIV>^$F{2w?j)Dqoyn4vv~~)G z2yw&!?GM4u^4{y~Kje?J$$FlO*K`!5-rYb<|F+nmN+&`|FqC*Xb#DChfNNS)=Lj-K zwouqaIRD@Zl(&V#{#rqHl6SL?5J%OxE4%P`AxP^@%l6rF)=Dd1%=YGswrsObo(#o5 zT+z%sb^*z> z->HRcf`744;9I_O!RHw#rkDK@i0wH8!>E&6o%m!_a#xOyS2Lbx)!ROl6wZ-x7IzU! z{#G{bnN$_~RTpF2G!{Z!=+9olFKh~kz0Teym5YJDcp&#)zu|6e z&DS(j&G#_E#fGoK^i7TehDYVt4mQ7iB%bV2;bE8j;ymNeJc@(3;<@w_zC+=(H6$aA ztBBhh%a!_aiF)Hm&`iQE@0S3Ux+I6MdfQj4*sU9iX7W{>v`zUl$g#aSPJ6p}I#zD7 z5hwM(w^)jEO1E zOVTGLIZn9-w%eN|cqit4V2ojmcY`F$RN)p^MI^LxBwF&;O`>Sr#B<}_=cQk$Fj%|r z(3^)bi^+#4~K2 zaR^s!Q4MY15MfhJi2?3bNL=L?))U6%@C1+c>D`rd;%VKsICWRsZYUMFe#{|KU$FmY zq{jr~2cfC4*e!}al0ixB_V(ot=?30I?X%*a`+BvYmECVdC_z_bGyJn$eQ>>7f8Gb2 ze-b+WLEX3$)o_wG>&W@T*k|VZ!v+BM|NMCJiRv(3!1&o6ar zg^r{qhC#vwXHsd^lwFWvNW3x%dagGgO?4Q}G%a^QEW`Fec`itbii*No41Bv-^+>0U zj!EcJYgx4ZiExi(zP9zG{{GLooVdCd`ST84C({8G5)%)KAX!BEtMae1zgdtyxuw!J zxEmZ|kOmU9Eg9(tn~2c8SdFN@FWE~fb@){N#;F)jt->zHWc7pvW`}WluN67bGB;cH zp~hij{6bqt#4Up`rgRgU+2#XyOO~<#f9vDBdV%sOs(S!m0e3|KOut#ThpTHz+!|ax z`sg#bXL!2J@k~e;N6BvjCc$(Ma%i6$msK7r7H4U+qY4=1WCD#_&Z!G@rG4xLJj`IX z*GM!)6sO?{;Vxp1+A|0~9X6Wb7cEWtK>zo~Yv}XCi@0%`AMEuPN8D=Phab?z(A8_n zXnzE+J92k+_$SILEypS~D3B+{5ZVnP@8F^Dk4#b|jJCMb6!+0yR;28^QH&r&v@%yy znwZwwztq(kT_(W0_ld1+0e-EL6od3w!=A~0H8)q99aG9vn*MqNPfO6`@8>SAZSw87 zTT^zASKv@f?>jlRKW&Ps6kK(FQB;t)eL!(({EJ2ba8yMXyJ>6JEM8n_m*-5#i35ZR zkVu~;M?fUu_bt`(hFq^ktsH8A&~3vc5MAoLW^fdymTR>UV}c#UY2)!yWOF9T%G$$u z(emgez)Pm2BldW&EZz8 zof0fj&{8Ee3-OJOC$FAsihZ`heF{Cd_g`c(4HyYIqb(GP?YsjU60bcyy7BMGR?R6la&Iv51mBbQZxURQTGGJY~Gl(rJ2*`%hgEc|*0e82^&7 zJGoDA%;aF+q+_*RVy^8k%Mf!}8e#IPPHb#+2tf`~LSC0jM~1(B0TF1M9G44|p#p7J z^w;vilVT(A&~H=k|42sG+=9QMXyfe(M6X)c&q%O^y@SzkwODCMwRW3+zE@NS1S6g_CGq`)QUT8tcKd)qg$2qHC zywEAqDjK*qXb&X@-q(DngrLl4&Bc1GI0D_{ArwE7doDD74JcN^7pr_l*>!{x6Kp#2 zmx>1*K)?75!R0g^hdh=>Us*sxaD@Vv7~=rBaNOY`{ouWlEL3oB--5UHDgrx{Tg}%7 zy+HEf;2!pA>OFyjfvJ~?HF3410vxz%} zfw45yo>{ggeiYKzE{7fz@5T6@RtZ`BjFns?9WW2?C9{z6l{^_ zw{0Wr!=g5H8XMtW(s|T7pxOUv>?@$EY`V4y0qK(NlIGCe-AD>Z2!|9n)H$>up)^QJ zmvrYr8flPjL_%8WZusE)-se@H$H)KQXWeVvv)0+yo_pe&nLT^WlweA6dmEAPC7!)P zbcBx^WieCwf`8K4k87M0lzs@%icW9usT_~~qJdj@2w>Jx+$R-71fSXm3Aw|XuM*x0%z#CG0@v)Ka|@Fklu%~ElaDlS9TfnL74@tFOKF4UvxlkGgSL!H}-1%_}O*`HpWbMk$a!3`XGO+d>ediL!N)q;$ox6@9>(<~u2$O_JIA8CE`%!Hi{i9Mrh@=L9% zWs=nJ?_U{mjpR7G8$4P=N}MB&UEjC%3KLInsymjFT|le18dVi+il&p4%6p&Hc~}db zh~Vm6=rn0S*=#=Q1Y0}j*uMPC^=#FCl{sg#5Wiwm`^mBUkd}7ML|JV0reM^GzUlM; zG@C4rpxvl5wsDS2osI%st8Zd1&C+xxd7rh1$(0N2G|hhdN_(?xyM(A3bR|ZxG!aUF z{uOvuebthJaf^9B7c_eN4LF7j1M?X2r@7$$)Y91;47LVYI^RzQoAjSKe-^~@7Hgqy z_e7zkwM(ESlTuVtf``ve9OE+qWcU{!%R9aD@zLQNCS_;j*;siU3}_fNYQA<^osA6D zO=)^HO1f%Ta8aru2v20%vAR-v#BH1E!|<~4b`!rFNG^GIs&KeOk~4bOFwI4n(YyMz zxn|}Z#mOk^(#`13jLpZzKscvs{p;f~NFGZ=C6>Y9j-nh4qceB|NG-uX@8c%OxvU|ZoNZ|_WbE-C ztn;1zyk-lTVcRa1X4(Xhu8|bQ9n4?u3W;r;i^GzbYUnR;d=FI=JLma>IN z?C;pTcREE-W7_6J-6e%nL*}TdwZ`z|dpTWhZZLKDs*7p5q6fUAOJ)CjjZ)}qMD3f; zMR9&b_M5N|AEHaM$`GKih^#N!1kAX4BIuuEK8X@;EVdxf=tRT&CRR`;;>R&&8rnS< zUPf8!mGM?wkz3U#;x-Z$K;IHMUDH?YHh-+2uz^k6nXICv2hl3=m6H{x*Fpm7X zGVsXx0O=7nT=SCEE@H&Q9;0gifeJ2JCY3ynL>pc*L%ebe7mrP5NFvb^kT|ln^YU8_ z#!SA_RpPkHha<{cTvicc7M?jP_2@J96wR+nXJyq@r4_jzPi%K!wvPJJR)RJT!_?2` z&%Okv#f^2tt>+CLOY{d=RZ5?Vzt%EiFf1*5X}+?XqV7c^E%U$*&R~#F;^F4)SkX5d z@?-2;i72S7aD#rqBnr+MeI4c5!>{xVSJmuf&!Z?{tWnY)BnfiL93g2@N-^bOi7|sN)w8p4%XUWt&%<)|vQR!TR4O292qk1L)& zaensUn!)+R`QdjPT9`iK0dnNK3%sc2()3PZ)pFOR51(Yav?E9*H?>A?mFF`j!_{C? zPi0?a&Iz;kY2{`HJNCQ0;SC%rgLcd;z~(Zsh+=Q%c9Ca+88|u?NTsu1%G%=6)$q6E zD?QcN(D-s=A3sF&v|*=kvC$s#U_#T10hTek`6Grg{pwT=;yYzlOvj*Y*h3xNhC*#n zA%!Zt(qH>CNy1-$h)7CtU0a#S#NZYy5e7502F_XtjyQ#AQZyBC|`T ztNd5v;#<+sG|3Y#a*Oh`6d!uAI;344bq|OXlrkpQ&ew-eogDDysEOA+>Z(I_MDe0= zO`zmCi{u=dLnD%-cdfu5WL)tq$6ZqnPxnu|;r@(usML0j9(NG>AfiPeAOfVcHqbiAbvM~OI&Zl@m zRTY|J)68c{5fU*@C9yZoFa+zwC?*T1>J)Na@mQ96h~3}(P@0`oEQ_LWNc$8qkXbvh z-=GR{UoB|BHG>miF^P0x2jK8G0l?O;^Fem4RUAj?iNLQh(bt|>{j&?C{IH!) z^-|%~6rUWJ6Az^~1}Z5Z(o^+GHVQ2TWW}1|Y&(QuDJUehlSCLeT-bKf(#~M-GD>n& zVfQX!(kij{e)Ur+&|p{xh(1asn__BSR+GD;lQmX20S>yiH&!3CG)CJ+ML#_&R&!vi zIRXJgks#26*$*!hq$_-S=KM$Jj*o28(?)5hVe-0?7NUg`I`U;*DTK6x9eUl3oI-S4 z#wX8{N;HKDA>D&Q-ehPMw&*mvudC(izqAkA%v zV&98Hyq+5W_*6qRM}Ot{%LXNjs@jamEPKn9k|VmJ8?O8GP;cp78X+-hZmQUR{VqOs zvj0Fg77Kg)iSQeVt9{T1JZilN*@n5nc@^6(J{rpk-7wl3m@Pang)XVyRZkjXjT9C# z0Vr3WI}MY(u~(0cWJr~jjJy2^mISfB3I%Ty>ypVB6|udNoBizDe(ht`tDEnsXBG=V zL3V+vYwv5tV|^N5YJP@`ycm4lh^Ou@Ebjr(bWFY`0wQQ_WsqvMLAsZ}$zR(#>|#{z zx=}LlO*i>(ks~)rF0s78CEgRDSuEdxPqH2ya2!dcSqS4-AtXR}3%P|s7K$W|X#< zulWUq`;%eX-Wwb(lCijKSBIVODCk}orfSw;Aa!kYSPIAQUxLm;UVFdJm#yOEelx!q zlp;f0>OkweN2w)(MJ}H#fPGQ(_EwfpPyTEj;no`!_kuRt|DFAUD|MMeP3uiDC!OPG zrR-K$gy7r;N)>?bjRrExS2WS9(cs3uNvYg#qIlf(4`w2dFb{6G%Ei&sicE+hop^Jl zoa>|wYE!hR5Yg1gVh#|$0@RnU-~D(GKLMJl%) z7V&6R@L{{3(*e;an}Ecf-&pp zbnyI9Ow&ze{VZ9WSp|AXX|{HsbFnClEY+J3Yy~w`B(daBz9HmcqMv$0?Iz2dq3=(x z8%3M@k)Bdeqj4BN+ASsuoqI%=*RA{`Dn{IW?+Q5^1ta@eegC zzm5webLqtATMjcgeb4LePRZV1iB0HabzXL)&W`N11Q3$dnxFW6=Jb(>d8o*vLoJ!k zuDgw!ghaTAHLq#mxAmV<}CIm-2* zPanVsA#kX2)>Y(Htz;C1-EeHQ1W6>H$R2KJ^GT}G;B?@pH99MSNt6}hK{hM|ZlQvN zL?+zXxnu>zLm`e}jB4R&;nonz=xnRWcdE9I&>|HKRvx}E!xF0S* z$tY%(QS*A-oZ>yd%A3>Sy#}G1mz`JFR3c!6gCK{X%I7p#j%3|NEa2kNZRW=hbTlkZ zrX@lI`8_GI&xB}9?m~pZRM(^{`h(>^&|Dtrwr;Z{L)e8uxMb^Xn&C@lu*KwG!tHXg z(~FP-yNZ)GkKm=}t2POv#v-2`RHMJd_KsWxoDJ$qjMO@#BgmaH^^sY4gor`U(N-`N zjm#2Vjz(V5YA2UUNyX$f)(j#fEe}~f zozAO&v()S3yhcyCg_9li-61=}1%)xD4NTnu9})4te`Khh&b;l>z%D+;Pg6A+B_lN` zBWsJaxEPGnxMnsmnjm}WRsa5JAKOcVYffX?S*D3|($p$-r&7KZEIs0UR0P-ha(Y!p znF=*4lMnCT&*g>IiP(VG8O)_h5mUHO7PW=+3^>XOg|a=}0>SC~7y=@1^HbN$ zyoaicX8~Z=C-^Q@J}Qffur>O_nHR$!>{E4!{q*a0ax#`!eYL6XqEfvD&y2eQ`X@@= zHQtsjt48Mv)zb5ojM`?BMq6dZ1DGaGec4e=)o}S6Sryp9KJl6|L+_J>#0048j+f^Y zunUS#6S2P;LUD$4A-UITY%N#kDe;S>!Zo!xpX@BW`*dz>RA(kdLkZt)P~As_nc8nw2_KqQS&I{z)7bO!00W{bZi!Pyy;fzbxkd844O8}<6> zEfcB~)3#!h#5My8BUB&P}2!X|UVYPwbH$eSnbZAoHkx}odHpNPZ+ zN||~ekZ?(8POB_I%6q{jjg-2A%m!SK_tts8M3ll6AWdM>_A}`CY60gtYWkd1Bzdbx z<>Dgta_A!7`MmRI{vP?Z>+USr46^5NoDEY!0Ms+z51-DQ|?mQGD9dLSmU zA7NwKV*A?f+#J7?N4l^AS-IB6t5m2e+!LZIRn)cEpT~DAN@l%0s{206L>CD~rG{3N zs`M8wu+Lgr53ahW1=etXLmXKNe?y?38_<;+a2S|882GSVQ&cK z(8EU%!K`q2_Q)0P#qwg;0vkuOqWI@ zIF|)-IG^+P=KHtwx^dU>qYG(jvA|??85^(Wu4UqlZr&hy?_;O(buHMD3Q8ra&IU0@ z$1gd8wn*T8d%LS9niolG4;ix8T*y6JNN@fPRjA_Qk|1Fn z%J>D77jI(MY6Cticb$YgN+i$^y~5d&tOSy#4(aRm5Q`OCe`OB^vhAlnb zMG)#44O|wm1M3GqB{;A1geI;st|PGrRM{%)568HjoriXSh4W0W zo{s1oj=c4d1d%$h_wheoZTIApGpJmM48vYQ%GYL_0OO4fghR%sXZyA*pr~sDHMj4! zZ`AHrq>ai$NNRW9$tjgTEko|zmv$x~YYTH{Fq@N^#X!se$e$f6U|0CH`QWrT00F^? zp|9>mdMnQxT?D{E63%>cM2wDlcH#H*@#Ruku7!x|kSIkSSFr=iRgNo4yk{BzQo>Rmxh0><&LS^3axhpMs|+>#E3)f%ZkPVhU*qjgnB zJVYiBm$W`!@gf!&Ttc>Zst(@Fc2zu*;T<*@_wfQ)tSFVMt3 zPvP8A``#ere!G6dHgrpLcT1Lww5|Byd&`Tr>(vJo+Hz(0#aDf5HHvVziu3>PDh}pu z^^O;mDsxw2{}tl9Hz|9Ng|#Kb$pma|4|3)NID<{V5NA^pC&2$j5d2Q>&P(tQJrf|% z+}8XK#@-14yxVgBPjtb*gAo1(#KP9z1Z@5%(-gnavbHm^GMP2NRIF?H}?;`kN1QaI&{_GI#!e)XMKHI@miv9PTsw zAB(>WFS(BxQIXM-U{z3+1^l-+-T8QGw3I;Ylvs1?kML*vhAp%+`SrBEBagx>?@dei zee|OWu{WN5A*vn6q%$_>wcyzgQ#3Hru=I*!Mm)|fYA8#bGZQ+lvjn^}Y7QCjs5lUZ ze(bm~ySvsZr|MZSsREKbuQgnxLe)s7RH1(_dGPV6hX_Y%6Emz*h0!B|<}N{&z?*5~ z!sIQ38Q5LsOpvcZ8@UZC-6@$4T>YRPyl`v*{Dcz@OBqD5iw2cPuH7a5I-<2c`^>B_ z;xh?xaUlLgLVD*?24V}W>fIV}kl-C>IF1=~ z)PN>zh52|nS&uPrnw_a+JY3xSrhW)V_|KlIzw7hF%v+A!6 z<7d_T#_>Y{$^XRpSC;*E&|ljP_&1P6o{X;^3gYzqk|2xvJIqLi!(od}Ze>i`2^`9x| fp4WfK^&QS{S^kL<0^>> depreciation_account.credit Decimal('239.28') + +Generate the asset report:: + + >>> print_depreciation_table = Wizard( + ... 'account.asset.print_depreciation_table') + >>> print_depreciation_table.execute('print_') diff --git a/view/print_depreciation_table_start.xml b/view/print_depreciation_table_start.xml new file mode 100644 index 0000000000..11c0b79dd1 --- /dev/null +++ b/view/print_depreciation_table_start.xml @@ -0,0 +1,9 @@ + + +
+