From 3fce3c1a7a4ccc5abfa757432fa1567fb39078d4 Mon Sep 17 00:00:00 2001 From: c v t Date: Sat, 31 Aug 2019 22:34:31 +0200 Subject: [PATCH 1/7] New blog post about CiviCRM mailing --- .../2019-08-30-civicrm-mailing-validation.md | 107 ++++++++++++++++++ src/assets/images/civicrm_validation.png | Bin 0 -> 2787 bytes .../images/civicrm_validation_header.jpg | Bin 0 -> 99094 bytes 3 files changed, 107 insertions(+) create mode 100644 src/_posts/2019-08-30-civicrm-mailing-validation.md create mode 100644 src/assets/images/civicrm_validation.png create mode 100644 src/assets/images/civicrm_validation_header.jpg diff --git a/src/_posts/2019-08-30-civicrm-mailing-validation.md b/src/_posts/2019-08-30-civicrm-mailing-validation.md new file mode 100644 index 0000000..dc670a9 --- /dev/null +++ b/src/_posts/2019-08-30-civicrm-mailing-validation.md @@ -0,0 +1,107 @@ +--- +layout: post +title: CiviCRM AngularJS extension +description: Adding custom validation to the CiviCRM Mailing form +image: civicrm_validation_header.jpg +category: howto +date: 2019-08-30 +--- + +A couple of our clients use [CiviCRM](https://civicrm.org/); one of them uses +the "Mailing" features to send out emails to their supporters. Apparently, +they're facing a bug where if someone sends out a Mailing with the same name +(not subject line, just the internal identifier 🙄) as an existing one, it'll +freeze the CRM later. + +As an added challenge, the Mailings feature of CiviCRM [now uses +AngularJS](https://docs.civicrm.org/dev/en/latest/framework/angular/) following +a recent rebuild, and there aren't many tutorials or examples out there. +Luckily, the CiviCRM developer community was super-helpful, and we managed to +sort out some in-form validation to prevent duplicate Mailing +names for our client… and now for you, too! + +## Create a new extension + +Using [`civix`](https://github.com/totten/civix), we set up a new CiviCRM extension for our code: + + civix generate:module mailing + +(We called our extension `mailing`, because our creative director was occupied with an Art at the time) + +Our client sensibly keeps their custom CiviCRM extensions in `git`, at this stage we initialised a repository, added the boilerplate template code, and pushed. + +## Set up the AngularJS hook + +A function called `mailing_civicrm_alterAngular()` will get executed whenever an AngularJS page loads, and you can use a `ChangeSet` to edit an AngularJS template – and, because AngularJS templates specify form logic, also change the validation behaviour. Our hook function looks like this: + + function mailing_civicrm_alterAngular($angular) { + $changeSet = \Civi\Angular\ChangeSet::create('mailing_name_unique') + ->alterHtml('~/crmMailing/BlockSummary.html', function(phpQueryObject $doc) { + // name validation + $doc->find('.crm-group:has([crm-ui-id="subform.mailingName"])')->attr('ng-controller', 'NameValidateCtrl'); + $doc->find('[crm-ui-id="subform.mailingName"]')->attr('ng-blur', 'validateName(mailing, \'name\')'); + $doc->find('[crm-ui-id="subform.mailingName"]')->attr('crm-ui-validate', 'isValid'); + }); + + $angular->add($changeSet); + + CRM_Core_Resources::singleton()->addScriptFile('mailing', 'js/disallow-duplicate-names.js'); + } + + +Setting `crm-ui-validate` to `validateName` directly fired the event _way_ too many times, so instead `validateName` is only called when focus leaves the field, `ng-blur`, which then sets the `isValid` variable that's checked by `crm-ui-validate`. + +## Create the `validateName` function + +Then, the code which queries the CiviCRM API to check for mailings with duplicate names: + + var validating = false; + + (function(angular, $) { + var crmMailing = angular.module('crmMailing'); + + crmMailing.controller('NameValidateCtrl', function($scope) { + $scope.isValid = false; + + $scope.validateName = function(mailing, field) { + if (!validating) { + validating = true; + + CRM.api3('Mailing', 'get', { + "sequential": 1, + "name": mailing[field], + "id": {"!=": mailing.id} + }).then(function(result) { + // do something with result + if (result.count > 0 ) { + $scope.isValid = false; + CRM.alert(ts('There is already a mailing with this name; sending this one will crash CiviCRM!')); + } else { + $scope.isValid = true; + } + }, function(error) { + // oops + console.log(error); + }); + + validating = false; + } + }; + }); + })(angular, CRM.$); + +(saved as `js/disallow-duplicate-names.js`) + +## Conclusion + +Activate the extension, e.g. with `cv` + + $ cv en mailing + +Now, open a mailing and try to give it the same name as an existing one – you should see the field border turn red, and you'll be prevented from continuing or sending the mailing: + +![](/assets/images/civicrm_validation.png) + +(As a bonus, the extension also sends a notification to the user using `CRM.alert` to explain the error) + +It does seem like a red border sometimes hangs around the field label even after the value is valid again.. but apart from that, the feature is working great! diff --git a/src/assets/images/civicrm_validation.png b/src/assets/images/civicrm_validation.png new file mode 100644 index 0000000000000000000000000000000000000000..b2e952109abd28533fc1f0ffd8f6c32d710d1b69 GIT binary patch literal 2787 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/civicrm_validation_header.jpg b/src/assets/images/civicrm_validation_header.jpg new file mode 100644 index 0000000000000000000000000000000000000000..46b82e92974997e5488fbd97eb9acb5023311578 GIT binary patch literal 99094 zcmb@u2V7HGw?4cR2*gl~7*r52Q3PTK0s;aCkSZkx6)Px2h^QzaDhL{?iUN_M(j!$A zdjmTvO*$gj#)c9QY!n@^{nrjU&dfXS{qEe~cV+@7$vJ1Qz4j{4de+A8_rE_wR0kV- z8$^I(8etkj-=B|+vfj4V8zFo9DTs^^A|X`*2@&AT0bb*OoO9t^hae^SoCxQ-1R_#^ z-^<{o2j?{S&4*Vgyr#j;`2L^2ZS9>nbiEn6vu5b(!PT>LjZJ15nds}%_4G{i3{CWO z@wfzO$vyZ7;m3I{Jc9^hO2O|J@RIs5z6_kp{OMfz$2q=^KpcKfC!7<1oF^&58#u_4 z|GxiO3s_JX@%tlWg~&28vN9yHtgP&a5oC%yO+j8xPF_W6^hlbz>I4mSRW&ub<_vB6 z#A%b%)O2Pur_Iu3u~-wdjm?boOlRn`^zcInBSwsnmy;i-pfFC4p~ler*T?r8XcQUc z5@50u5pfhjY82u7Z8QPoB;hq9V7*EX0#QnuBqK{6L6L(C&Qr0bq=?c|B$Bi=Tpb4A zBk55jC5Enr%;*KHWheU6^uqTaCQq_FU8c-!datSP84xjoGG^>J71haF+B(cBECa*Y zM#d&q^Q>)b?d%;~7cN@twq)rtFWwq&AO2e3z|BEhwr&d!iHwSl*|mF5Y+_P!%7KH2 zQqyvB^YRM{j}#p}bN1Z%3l~dDFWtO#yS$>Zs`^gz-IjZ;ZTBBMeEy>S<*N>HXV>cw zy?y-yA3yy*IE3eg=lS#a$9au{c@d?hrKDx?ya>dt@RAxOO=9TEC|N9!UF|=5qFy+e zX1V|H>9P@%^ttbqJp-C3V>DUMCx5_Glg#XYH?fHS)6D*u*spm#MDkJuSUjmwXfEm- zn0hX7ercGm!VPV0sW#g5+dF(FZ;7{f7;LcO#j9x*O@jjC!N7Wxdym&XavA#Vx6<#Z zdolmOef1Z9E{pDOE2!S0Tv0)CXrIFuEAM?f?UdoU(szl*g)eSI_Bo7PrTa}eV@7Vp zY=N!Sxjv4;%k*Bu@962oXv2zjuT?X$j5g|_&KuFtAD^CEh0>xbl^~`1*Ns|N9TMDyR3As-OP4 zt>E2Rw5r5dob@!tYw+D0+pKRbfzffNHn;D;w5Ywv>^quLcy;HMDZAkF;JQv7vE0~C zGe7MT+v``b$=gRZTwTzY-pJi!FB@L2_T00=_PC11`Q`N+Eo?KMM8t0yGoxa4W&LvF zH_lp5O~;mV;MxV^*`nOc=)E^?jHq7EanvaGO@K=ijIWZ^dZu~QU0-oky6pbN_JyV$ z{WQsdt35yPbt_)$%Z#kO)qG?SWWZ0UzghlbRr>+axZvuIzPb3Bc+fd=W7R6ZNPlD1 zCM-Mt>%%ck!qJ!aNA3&xSZMp|j1gnsuJO8epBl`ETijSha=yAusR^^cMeto$dupld z+xOydZ`Oxl{mJ;d%F9;aA zb|w|=-=v&$Zt#jGL_2>P-JUw~)weLFdcmfxM5$GqyKQplIaw0}vr|f5erV(lj*Kf` zGSj<~CLbTmC4X6~g9>Nb47skYX}Xq-9_r)>DF5wsHE(B?^UU0xomxlky_xjQ(m!nc zcVxk8eP;9YwSqORZZuE-h}o8mg(ts>?yaeKez_nxk2G-Uf_%W;lzO(2xO+imAf=$S zPxkYV}34 zuOo$?b~U^OSDwjdnZ4#r|Ma!vQGeGwZ{%<(WAvw83x4P5=`y5ygU1!B94e^0ee!U= z|Co2lA0pe@lob%uI4>s_F|kG-2J~;tM~1OFBI190om@Micl6%Qr$Zx-8f>@wj)WN= z?`M9MzPmhp{LUl3#}=o5wOX`{Z9ezfl*%-FQ^i9^KN#6dDa#W&eeV-3drs|}b?3|D zguXg7uW#za4Ug5se*eO}=KXB`%g7d~eJzJ5^~>lB#mIoZt!z~j?^(1spYC|fdOmIc zRNX|gXYs}rOu56MJ%a(;8eTb)J3(xnAFpBYIom+|$+KAt*m7wW)-?I zJKyHIPP;TE&e?VP*+&o4imj9=FBRAB&i4Dg@1^ZUDa}p3`M0-Em^5zv{@BdIIpdQj zI4;y9KDSsi?wuWvw!nJUus!D0^O06cutI-9T0r*Ievx#!7QZ7t8C~V)vNAhS`E)H< zqWG4;G<~*=POj+!Hp+dnuZc}kC(*7RAxwF@|2tyXU4P~QtF#i{RTPe$@C47&phW6B zI%2>*Uj0q>k9B^W z)HmfB)vS|vk)`OnrgZ<3Q(j4J;dU1l^H!JC`^Tca`QwUOUkTMqUW$zhf*Tr46Ybku z1(V8Xi*{W;uu!M2Hz~t2RWtoYm6|+9dg+V!a}*tvdwyJ=h?Gl%Q{sVr%^X776Uzt7egE=>v6fPyhh@JCkGM*iZKy< zmMYSD=RjhJNO?KoY?4au#7MTBJ+^nESM1fiz@qZ57>T7D{Cyrj4C2EglV(CqYu>s& z;WzI*3z0d}cw}R`(Z{0Ds_P{oA&pYjw+~0kZn$;0PQjnKesJH&)?K>e%2qz=yL&-L zVGLSjTaw4p%{Vo z(@2;PDr_VS6f&QEWfmk;37^FzC8hpqR2ElE3Y(?I3rEDFN!Z5zWi-TS@x&7L;ZydeoJ_KW7c+Uk5<8yQE85W zZi=}j36I&jUt7v;K3UXnnfO(Qcs;~enNcDZiB@cO$y`3e=h7j_VJ-8eA8;1p|q5s8zzrzcB-P<`%iZD77i*2 z$#K`;B`uqJV#DT%znL%ot*!s~+}|DVA3bv3;+$gq&YS0=R(;d<)Mn0%UeWQbVJ2_m z=a)?%gI(Uw{@S}P&qYPg=c|%_QudXdH&ef(5mD)TddFsejPsa0v*Qa{T=eDop8Bs@ z9)lg<(WmNTX$xnhC0p+o3|>n3=(J&G+)B>O2h{d!ecx!uUPOjg`?YooB4*2I4mBsQ zN_p|Nrr?$K+GCSUyIQY?p8T@yJBqV1h&ywNXez&RTa)!>x2T0P_KR0fabC3k5wl^V zlDYCG-PgVonEH1Ia$=vGu}5iz>^S$1Irs8VlQp96f#1!+_SuqmI(u|K?ObM|v~w$5 ziahWw`MpW_K4gVI%=__X0e%DDe7=61#*qrmYj9~zzI{mY4o!3nd)k_G$Fct_KSwb3 z4t^K;Q%JfYeS&)EQB`r zZ4ThtTGF8yqsz8K5jz3O?J^Wv}O!Fe&9PYVD6;ru@S+;jN62cP>$&M|9% zXaNhkRxmeA7tnqFbnf}5b1#0t2DpX=*J$!K_`&muONP&R_#9IVnj6*!fozfkm&EdG z{1&;wZ%ufqAzNgRoDc`mktYg5YteeN8BK@Ze(*^k;==cq|K)yF$^9I-%M?)YZWCGPR23G$c(JC0S+*tDDK#5GLk4QpAc+|DRN`BW0` ze86ZvH#TJ!uR8x&47+D-@Nr8^6~ptvQS{Cb`I(ceWFpouDP%5Dn8)o=yIbcckc>!S zaA-s_hlWNVjssb=Xw-=fbPzBR)FMPqH4->F!hI;_%TUFLhRMy=(=3C}GFVTODeyKXfE@bbD^*ny{wi z>Q}{S?)%S{d&gDg+a9>%I^W_UYuozQSDkf9y9+0Gt#qQPx)3_!&x==R)e>#GZI|@5 z8NBv1*4WEb+A0Ed7YfmRUry$&f+C?{zh36m(_>fU60RNACS6NmZY1^eaIMC~M((t?qJUwFZh9|41KQ+uf&+pRO zQ0VBBa^+1|v#YKAit?ieoZFTd&+klqAin22wWLO^eev@4b;Vgx&zCB!TY7;6_I*?9i5dcn(N_1U9pO!6%gC%CyT`Y>t%8=iiKP_`NZ2^`F`)+W^{R`I4r%E6S z4?ell`G9|!n?q#5a_3!{i_YX|`8nS8-N;-zjhmIuc$I8-+V`#e$;l5~M z9o}6lw^9em8mZ$S!r9A2u!xGm1R;L*9|ys=OHcU6yFZ^WFLgI>=`wZqi#$7#7(wc| zI*|1+%Wtb(y@%iFN3Jn`cMpr*Q{MO_2e*2^tP2@1a9{uAV{mIC^G#`IX!YTVm99^V zojkJIGQ-x^-VT^vvhRje{<3lVZk%rxpulkaV-ImYM1G_^L!=@}cYh2%=0pvpb5Kf|qAA-yY94F)kb*w(pa^#;qFnD;?FZUDAV| zw_bZ{zOBJ!+MAj}vlU-60@{y>FIKhQeV~6PYmIp0=&p9~zB^CNu1^RvQ`(x;uyJyq zZxxbbTL4v0pyL>Oh`|C>KOWK_=>&A0F-9 z@~7uYPGv=9*p&Z251Elon;SZZ#P6T@?e0=nRCRoNGEK}(H{TcJVVXU!$McE&=SdxH z{9d=z;LO~$1EJYg;*Zbso)?GY)fXldY|D_0K?URc+d+8TB&PrEvwwO^INQHcf5^G? z%WP1>c%!!K35^Hm&fej^#k0Mq=An65R@H#U`N4f3jkJ%NZ#fzD>}s5LOYin?JN-0v zxBCx#dGf^P)~7FTZ6!lVBaz_mV{9=DuKN3D|MY(S*RhV@l1}WD>*!Jtg!Upi0!Kuv z&TR~?Vk1G}r#_+`R7Wn}e6E&bcc0?MBl`mI7C;crg)@ zA=3^9`Nu;&E<;}MkKg?DL)usEpW-VDb~Vt^DP;=5G0kulARY?8`mY!NdiTH8j%$CW zWRYg3iyFh9pIT`@Eshfv%fAzs7MIHM*Yl2PFS>a+SM%3{|8hpS|KNXT3ogx@8@f!y z@2~j@??-JLNMHWA!p|#+oVd(yR{mRG14>Wuq!iCHTN50&9aH}Qb+p$@YP~BRH+N+n zoOQd&NbH^|UT|W2d*-LQp#{X>yP2;OvfZsJJuJ=lg@*LDwIrkhF8s#>W_sg)V{U}M z%rw{_Wn-X9XJ671`?zSON`@cctF-514+Yr#hT@%XpqcRTo!UDIKA zyRs)+JL**iOnx`$_^i~^6E?XlvZL_O5ckXcIoZqRnyt*OE^JIVJM;G0=*-oErE$*@nxMKNr z{97A?XvpHb9h|Y~srf$rz1a)j^j&=QIpB@isQ$Lpq*qH{n&(|tsu#B<)T@s)%(gUd zx#sXPi$8F(q;EpDOL5qu@y@nWcTD8J4Q=_nV$i?!YM}WSpVW?fb=T&cT#+$mf~8kq z=A5v#+uCYRtokJ*Lh5l@0e^n~-_CzJ+Nh4sI926+C2g@+mv)z)9P>MejZ9SZ!pLe9 zr49(I-cXTxyWy-nhYdPKM!No zy4*^y@Mp)ZP5Wi@Y|{k&!m_GiDbC-25GkuaPmgeh+O6*vC$fwzPERttHRhS}#Fnn2 zL$x;NG7WUo$CgI!W`#H&niZ5_HY~=!_1+KWei62oZNlnE|0i>u0|0fOE$uoO7wD3{ zbXJ(o+iN9*Tecm0n%-%)tKw|K5)2vcX81Yp8LOSxeXb$cT-*7QOK!$%X8nZ?<~ElC z8R>x=_3vH@oAJ1`X7~GmuFlr&udOn!g|6%IaW8%vS(szC?zdT?M>|&8o*FziEbzZo zTiM`{pMko(TU7M4poGS8j1S$V{ay_#>W_WsdAq&$e9LMa^cVm5xts zwjSH#Q{8!bbmj5>q^B7)@5kdz)9&e6F0bth?0mA-`&eZ|*o=_Zu1fFguclsI^TCbZ zU+GZx?1ZuD_?ZF1uR^Co#a z`}k^DxA42v&xRd(YUYzwSl^XSubN{on7=B?uwQTf+Nz>;_D5^k{P3+a_E1lE9trM7 zErG>?VS)Z_JQ|x`5P!Pym50%IP1k(ixmGi4&)T>w7|Fu|*&a2?+;E$BbBk$VZGOPP zrH2&Q+3JTV|28m?I=XW6_~ihe5DPIKQ+1$=K_!+i5pcW(|1_0;#c@k78#{5f2fy1>8{;gyty|@;EOA2N zL2+Snms+h_e9&9-pkKQ9zpUIFRpYjLI#M6mXe%fTY`$7=d&jxJVp8MwhNP7)%lhU8 z&3WWf^B~EV^)X2NbldH=Y4=^H=AD0(;F3FYNpG7}cx}J!i7P(BKDXw$2@XbSrs91c z03ZR$_w)F_IMIDsSQT}}Xy#d)1YP+|#iobGnIpB5djj{U536U-RVUi*qfhc>{I||% zRnc40rQY4(?kQ!PGpABtc2ef{giQ9&@qwNFmoOJcI$NvMzN3iXFw*I|TbQ|@@!-pM z8c8YJ^9!TR_rE>(@=Ijfg)bkhwGgO(ddHi8K+igqPK17MX&i=`6&sAXrey1PcG_1WC~{ z0s=>IP`m*s0)#kRGEjNu%Dsrp+|+tA^uDE?ZnD2l@XZOm(Lpuk8{Z7Mk5zAG3O2_t`tkFKIUFmmC78<=n?Ef4SKG|ZpNe{`` z5kQk99Y&%mlg+S5(h5&vi$rh-%of&K8s*XHI*EvBM=LTNQ|2!o6CX;!pbQvd_CGT>O^a8UZ}DKkNQi>FdVkOON)eyBr8xx?{s3mmRw2 zZoa>0A91q4dxCb@m=A_w#Q`=h)7$ng8<-h$)jziqyy&k74t{z(SP(`IRaFP8ovtHe zkt3vm)gvZi$qVGubQl(FX^B%rF+gg#1iBh?Ev{hRWwaQ;!yk%S|5bxCSQv4&^8UfT z*08Rf`fHpM!-@l&`p#cBJdyXQV|!n`kNDEZ<+mRU`K>S*cQX6h_u#$Xuu>m5Xgwm;#fk+1rI@1TCp6qB`um^;lO5dBZP=e06AeHbBNS@ow-(E zu3g!;gNFcYDlUR#3T8dhajj;+McZJbwk024zjbb&qNKlJ*5>%V9mTB{PaLddrnh)r zkpHW4;GHa24VDVR5QrzB5|fE4NL2^(mN+zG3H10)LS8{ELZBNmEGShZrO9-Vn5{Wx z$6&=8#ltHmb-2iEY25`?A-{bCD{K1+@0SRVV}2Pp~z9 zzjCe7Z^Si$%M%RGnI5=5lwme^_VsiFp=7+j{h+GHX#}V+LG=_4xF)+=fhH1AAs&!n z@*-%u0upY5Npm>hSpor(hE17-sv$uPvs#cK&gQM}7K&#xIzJpX-RFA1`kdY=7Soj(Fl|i z#dM4iitV9ht1KD<8lPpiP%2_>+HWN$Hegyqbzv&-mp>0wR<;Q zu1N_vxqfrPvfq1NIi6n8?Nh)Cj^7m{_?s9}bf(4qrW*pV3<2ej?|4xxE|?D&;y6`+ zIF>|J2<(VjZQ(#6Bu!=#M3yv+Bo3a~snF5&aE{cTVIbk3ljh=>?jv`zJG0ch;OtG) z`_oBX#qa0ZX8M|n<4ZIE^C@pl@Ep8*a~uDUv4&6BR+=pSaAs!+xwL$+2`a`FIDA;D zGRfRzD$cXKCOb9-ntxP5p0rFXI2Ejt(6v8If5;uXY$3l#QCSi+6i=U#dYBm)Z#Woq zMaBH0bEtmkmCohqVapm)%#*L}ev`Q^!5~bzC$qi1@%DBX<2+aJt2QZN~#U&X=)MphYp+(hLxd7UM9CvI=&}iMtvf1NB@5mx4T& zSBu(=+BY6tUY7Kev|@@811Xj~^Esp9p5 zkA=U*@9p#$@#^GU_a&$AQi)z3bFw~XmHNkpov(g*qUc3@P*TkV$6mJ@5q|g|2a%{k zBI#hY#8`ldsv;T<^h8r(hyebO!OtN90}6rk59S0B7s)3B2*Qby%wGQkddj`(YBlQ? zJ8Rc9!*emNXBSNMDR5s@X0*;MVP)b9x7hlEcBN|1fdmV}LsNsu%#hsVZT)|gh!SB0 zL=~n58w*mM2)PgAJ~9MU3yeE0BWQUH1$bEq!DujEkp|rWRI&yHfug`{*qom(G&8+$ z{pA*8+aI!Q>#MXXy5&@P#;8s8pjm9tEdOIO@^892#OJZB>OIeGiTCelPGgY&&5L5_42(18q*}O);3lu)JI)_MWq|5B)0bGH_;n9f60#Fc-ilM~F zMhP-}|7}O+nU5!FFG7E#!{b@5#+yylHb36(743i0-TQU7foJWyl#JJpKgRjEhrCr# zpCn#rHaT8){^s-qg}@`f1OgKTKup(RG`{v{K$PcG1tJ=PwE*7%#efxC3gnY%q8KL{ zm6k_G(E!;MRKbnFv=CJleU$~TF4#Fr42!h4+<1ZnDKqWW6?aj(G}^;&UJdrGdmXq` zXEaUw4qFbEt?G{$WoKI8`%4fq_Gj2b63O1><)ehi1Pgfqg)88JD-Iq@zdSuqp5bBu6^RXC%@J1c(YY#T7~*T*1zf;;yqr^4X>Wcswyv@xXgw zh@-Hee%GPuvs%st?Rmk+GFP=+t}8!qX=&Av-j|wRQXoPSU6fCU?3xT>5aA1fAc{qS zfR+q72=WmoOhhpb91a32(V^>ru|j?TbwT8@uyB!d>U`cm*^%khy6X8b79eKZE+6Rj z&{pfocGe3STXkrThHtGu6mGe7D;ws8J{%nAj92>VGWS?{+d+lik4vAQ%$-?#>Q6FN z6DYVA<5CND2O0X)5e_VtQq};LVE)x2Y(0>kh*YYo48&VY6&6?;}*kBbhFdYLdlD>O)I^pdFdZj!;5jSOeRvB zlGxOOeVK~8l%QaM?30Ix$tn!Co&r@>8oFcvYC#m5iVoyR0O1H=M74zzLSQ!#ni0lp z`NMdvhgU6$bVw#vLH&hlG4huUEZ!WgsM~xk%tHM`v*y{nk`pPfN+*i2F2Lpxwn-X- zkWOK92zEiN;5(3X>Up8(oVt9EEk46NP2zTead;j*UC#>(~-UTwbK_mv`W`17U9fAqS8hlqjf? zLFN;QLRy|Q(-9*;#35tk2^g9FlVXKVncp1RPbW*B;OB98LP0`w;mhJz8?P@Ldib=q zKFqK$$#n4Rh@ECdo$-ZrCmVa)yOU((eFslm(-;cd7dTKoSf9D0K=dA`yXfWzK%6t?h<`1Yx>4FeeLOCO8hSk&QIqX4Q;EO*g8_?V*91fzl&d7 zEIxGc<-5Yx%DIl2FZ=EL22Pq?9~)*;Jv1Zq9LM|0fv=7}eP$u=FMVDjZgwopdK!1_ zx{uno1A$59$3xBfKW`Ivr9R&nxqQf|@>W-Cc3}2Q!}Fb~?^2(&Ub7hrdmDPq#re92 z+Lf_8=Nt9gcO^a0ADnUZ+K!8zCNmlskOU=&t7atsdpW0x$eQZZT*^86M8xA%+wQx)|UfzE; zVO};&#J(jlq$4!#>1Cq<`+C?|F?adnJq8;a>rHDqTCYB+Y-s&f;Qz#B*R_->;RJ56 z`8DIg4TEV<8g>Nsqz*1?GZ-qZtbFP;9_8tUod~_Q_)~rNZ~D(KRVQh?uDavDGWmx2 z6XVd815F=KHH-=y zCfvc2S|E_d2^z@@3mmMhVT3=5k&zu;B|Wau5~>)Ce#=E4s|OPdOuARRJmdK|HA%~5 zbHIsth!#a>IMG@n4PREDNq#IWzu;tVP<)8Rwco!%+Qh!pc%417s_xP(SMGw1_RREE zO!87@%SXpAZ#L4;Ea2Odrwi111sghe_Y+mm@$5^r&RY~Q(8YqKCk&uULJT&8LPjL8 zTfm@=OyHa742a^8<$q$VzY57OJn^LF_9wOWSNff!ZXOmY2&+#?pDR=15~B_1b*G|r zW^3wiNKCwMDNOW!$Q8Dv>H1pKKTg+k<;wZxDK$~#6CJjiX~#T{V)qB~N8(vGuM7-_ zXXaVk=8KKjjfSRnd(=Ab=oD+10R)hqwN*!@d0pJ?qBT(v-X%vhzyjbD*g#|elf)oA ze$b)E;YLtF2^J8!3wBc=YXS(CR4tNvj?9k+ILt_56O)0bX#xNOpfC>=Bn)qPf%e@2 zliS6^Tns9x)3_WmbF>fBwEAtlfBW4o+e6|dX75c~^em>Dyb7GMboFSMA{=B%4zxt@ zEL{Ik2omap422?#%&|;EQId7Bz|{dDVn|dRV2rr1MFwgHA`o#ZGP?;--2oYqi#aKc z)Gr>{1?^X+Hh2s}igZ@k)E)b-eQ7W}IX>(`!=%1|ZT(*rH=cTMX^{EEyjlaNJ-&$5HXt$u5=Rz8ymQmp{{T0lbpu%Ikqb0mUT*^Zt}!ZiVG z*%Ux=YY9K0ri849;8RS+z&Zl7##s%K$p|t&PnBuM$G~e>!OpSbt|R?6>*9uUs>1lV zim5@h)^Tg)56M*VtLO|g?Z~mb!s%=*fC^053I@aV2OAPPy)QTV6C%J~|M+BAijxBa_*3Q>HvJP&<#um(pZ7QGxe`%2hxRV$z35%yiP&#Kzt$pN2p$)da}$ z(ExP`fMsZi!X*mip_CMX+fa#8Fg_rGm{>Mfg>m)=|6rS5ko#b!+zDa=KYqso(ik;!OXF z^FD>!)Q#W88}t`kv9)Tx*509Aal-bf>3IQ214#>5Vt}}ov?f3%FfPG?!nOo-RfUPM zJjo>pRmlkOYEalXwgM=I;zf@GU=Uj`pcrWq(*<}J*rD`6!*6$grE1-e8a622YC(~2 z)aj$o(~mY4UtX+riuYOft%o4Xp}NboL-KI21;9fV;Po&(87dKLVE-V9HQk0NVgZ+6 zRY+n6ELXS)K^TEM1TZcE=>R&#tQ-_D5y|lA!L>pt0)a-s^UH^nE5K6+1jd%|)(ZHc1Tx&sg7^Wk>8}Q`q{k|5 z8+;3!=8iNSaf=*(Bu}0L{-odM1m#}#HV2vbXePeopQ>$;;p6&S*rw%dXg3k znnmGok$fsMCsi8z41%r)URVa(%}ip` z^7J?q=#gO#R7%SU(#4OK0Y>mWKUv4l^@Xhohi4?&uIW>A$kKo1_UPdK^@9h(j0QUr zET46RPInZ(WCOJ>@pv#Hh&2Flsg2MEgP~z5VCluu(ooR=)mw#akq5B`(-I`mbQRDT znC}9f0z-G)loQ7cOAeup}$zvoY=Yas00ya2%O!(tMU{@jRQvkcbuu$azjDjK)sw_H? zouVid4dU@7YXxj0304XW`0GeX5}5E;2{xN{kddt2>rICrcLcJm=!L5kHPH=*1B82U zC!na<5C!w-Umi6KoS@aN#O0I=pX%~hx*Hn4$;y0xQy58`^GWJgchk(LL!Zr3TY0~2(~Xa z8$ukLkYo-04jqVxEe~!)F&xu?LyUkn4a8wkK5k1w%*`i3Q3VDpX(9sphV=qe0YxEn z0|c}mWC$$5k$!5s2TK5J(9~&+0_kvq4{9{vLSW}0e3GG)An`kFX@YzV3J7+aSpm=( z1*Z};IRfn>%9n=mu(t6kvyq;ajR5i{FjELjlLP4&uNhQr(6a*%C?CA!S}gBYM~9JE zTV@ez1#kifqzEt~TB9_?8mwUm-Qa%|0{A~s-AT;?D-#$>I`-!X$Ub1(;A`OC5dTHd zkb)q-;v9|B9kn1FBp>FseLm~};9&uqTdB@g#f*P^thn592x{>s4y&( z!5FzfgfS$oa>djyJF^RN@2S;m*EfSWQl|$*tGZQ+H6p|Bn7AEz7JBKl*rV`P)6+S< z8#7&eW;{`RY-VQkWdj{RI1anOq_A9J^+h-@#b6``Y!^+1iGe(D?6Cgu6;9G14q}Kv zb37uj8e|}~^XW)b1*%5UfZH%YilVdllAbCArLp49_|r++4L@Y^>S)bfP~#AysJr_~ z_A=tu9IN~P{4qL!8*Y&FnoY(e8{z67h74uRrmv#IJ9>yfKrEru>`LH zW*4vn&|VllLQI5_s8q0OE+p(G2ZDqe3=x0G@=Hr_^en+_kLsMtGyyyc4gjN&_DN8a z4TmNC48X@f@CF19!H?zwoL1>Dq3INBr4P-w!n> z2V6(OUeCZ)On&@_STUaP`hm(A0UjA<3?!0vjutnkykP5;SBqIH2Pu?E9wB)r_X6Snkf50|5 z286^1ga{GrwLlC^=5ZsWG+FX#P)$HkgH;0DK?Gz0d_8PWQ;~_q{wV^aMS~kL@}?4r zn6#HfZvYAqC8Mz>po2i9NzfNAVuACR15wy?ysT??WreOKFvX%pVTzyuUXM*<|NcPwcFU=sCQt?A&A`HYA(JQY2#09YQx zhbRl>A~crZFC}mpPz2rRvQzwzw!*S{0UnwlpUR@RYRZJeIY&Ms4F?v;f8ckpaA3$7 z0N@UVfQTrT;8p;VT-gA!33$(jHN+ucd!uoZgr`YZGNO=3#YmkhC}#xKY;a&+5GfIk3%LA%Q1ENy^!W04<-R(Nv!#uLmHL_d{lck-lhEnL>e!~F z{Z1IXfu57B;g1O^7*3MeplQVBA_#C0jUgJUJ7ut;^Ma}!p!S6voeygY9hqn*q+1BR zh~a>(3)U$Iy1+C6Br!muxY3F?>xe(VUM-MdQD3|5sebDFjAJRAH9eKr9ZouApziE5 zMO5a%m0;v#i1a`Ta6lMnltIL@V*|gA5j>b5^kty%$N?L(28Bt0H|9v$5NJi%5UuDm zARuAo5Xy%&6F^f0{AJj=FX4Qc+)eA)aktva-zww23bKqy22a9U!7#_qk(fX=1qi%ZtH2iXLG5f%JjSbZ5($73-b#fx zXMpfv#qa?XDNr)v)dfG65N!!3b`oB7)z*=NVCY2-{v<}T=|HYGV3=nPWp?l|gaF?o zL4gykz)k@h2qal}EDy|EN>hhvhnQpqh(S1@frt`7g1rfLDL^j-`vAxe{*$N*#W@#v z3MkPeMjF!qe<_3iYD>dCqqcDuhs=L~CoV6=12sX-%7(|$qNJHQkd^2V^nrDd1{5v= z;|C`bkmZF}G8$&A z%uB!Rgjp|?5s;V`5fRi5E0Ht=IvnM|%-GBv5D|K=2si!!K?9yZkkhCFz|!y>7MK@s zEuc~aah3{1h$OhH$$UGP`gVRw|-agF(Tn3LuOE zM?%5Z!vQwUMHuenfH%QaRV-Ic63Y@o87&V%ml5`eAsN8l7Gw%s2MQMAYLP>LzYYeV zf&D*P57HCUj!apP>y5~Qog>6uRRYPgp*skaE>w-Uz~l-sy#?n;8b?~76(m_PA_63W zCJ}%F=%PVM2az1=LeMab0OAZA5@c|Q@fa%#VT}Ry;H8FKgpp%nI!OLv5b_-$m_wB2 z5aa@#mOBbyjliZNHA&Ktu|$kgyC0G7J(RRq>#5BCjui zU!9vdhG8upqBGjD~$R5FM0KSZok^WQAW-7J8YBM_B{#c0ZWJhfSbW? z1?g#1Co_+f&-)azZOaogGks~cReaE8lO>1imF_O$9!d^s4G`JIoNe|A-LdojP-f^; ztGh2g@APWl{yE@zoM<^K)4(iKx5ng)ZP{n{9V<=0gbX>`3I{S>)VCze3-0#0o1hR} zr^*V{3pBk~HCWKF!qRqGj9s9q_No3z*-6ccwv$p@9^9w)W-4Ub1h(6F83d$Su&pPWqSHQyyRuWbAM+qFZ#?{INoth-QnEcDyOV-06}J;ru# zdj6?y|H8<>xG7XZAQFzUG|t#4iwv9WsnlUi6!J01WDMy zgClJdL@I{E`pz8*Qx^3o`otNvU0CMYcftGG>3*-a@x~g9dbThd3mZ(ba$hYKKiRqA z)3=$IPfpnC=WZTmEOvJf>F=*}@+qr4Sy&LZGWZQE*!bP8hC;P>NBv;GLjBROlWyrs zeQEa^R8E+Fdeh;!j7r%3@YX~#QN~=F+tJWQ3P`~m( z-QqPG->w9lS-CVa%b@f5o2PSa>j&o^?(Q7yyVrYNxn@QExJD^AvrmVPyo$RS0b7|Q zEi6JRtxo9*~Ca2c^dTK7`863+&LX8M<-1HzQxUi(*K#im^T!zM{01`8_tRdBQi=8(|TEbc|+_`675I0dgS?=rG9Nu#pR*DbR`-AOWa`^bJuBwh=*5DiGw!2v9Wy zX%#>)(8z#*$%EYzFbfLdayI@G_=c*%Oa2f!agK(hi&+9XP;G)nK5K>G=S60Q!RlU>y)JR?<*7 zLT14)U~WMZ)lefLD#(pf9~MC#_!OX-C(DF`*}xj)GrqoufBnP|3U&CWVx>t^(nKlv z7g*s|{Ew=RmZmD{l4yGR%5=u8RV)k6n2D3vGMh9lt>#TOFob^?1-NI(e8jyQ!=yhZ z-MRK~yZtM_C!729iymFy`I;Vi$+dU>E0<2~k7FCgJQ*7CMmr_!+(#z&R=MZd8H-(0 zQWV{-94^+Z?yokjeZA$~)1mcyn&rmlQnxzna7bYpJu*DMaAASny-gj*!fu;?NB0~} zWAF8qU%VC>w(`!rfcZO6TG|A+ZQJXeM~@2kJS*JRGk(A4&Exfp8Jn8a z&e_J8xyT9M7fF}pt*x;MI4ys3UZFO*#Lj+}V_@hEt6Q3;hE_Lurc>sb>RF|%lbhzp zDN`$|wn)yLbZTU#TXfZ)>Jo3lJ5xOiSH~sZxvyU3s^2-Qzd^jL0Nv5QG9v5Q~Kc&yv7)QGpg^6mR4#XGlcb=YaCdF%~q$&{iPZVf3q`ha5i zx|)(#D-0DT7aT}lznMk9pKfdUaEa?d{~DtU(H9OpG}LNZy}@{^d`xt~-k3$kZfa-a zmsU=Dac7@*#_{v>ou;#Fa_vLjoby^RcJyVs+ry8|TK0|=UW)vV0?&&Q8G4T=?jKiE<*V@`$02zsrzGM^tB0jqZX>U%_37FmQi|LW zcX<0KZ{^ntuS53(U93NhtMz7{J$01)a!O2|0i#I4ZjpkWuN7DM#4_PgUTUC&7DH|2 zKJn%~dzb13K5XvszOeh_K~-bl^M`AhC*4={ih8`ym6XNCK5Xo0xnA5FVfS#I@8FCI zn~$Zoo+*3lTCP(QEAlH2s;*e;pWoSdeN+fz^1hO$lHFZ1CQcvwV&-j+-IrCi==H3r zkekHBzdLK1#(K@Du-Y9r>EI~U$|6eJqx&sbvW3bHDN_~}ar1|Nj z_gHeu;e~h>^mwaf_|pq%e|!Zq`gPsk-YmB@mQ4A-Trg#*<&RPE;BHly3%=D%+0k>% z@_EsnMT4^^|2B1HAmj7d6-Rr|tZ^GLsjd3tyjj-8Qwm7w{Ogy&i<+X)% zfi5O{#4DQMpUu7bd{fDa8Dr(5%RD@iPsjG&j(D5?S@-4T6AL!Ke0*@*<-{PTYx9## z+&uMWyndIw!B*dLV(_GH+O4;%hprE;dCU9xFpuBUv$Jz%XXb2jsu`Rb^jH$)az;1*pEDegO@Pb) zmmdEo^#2WvR`9X0t}IXQX8p!2j@cStK#q!wKcrx&-BP@5*v2E>|MgY4ybLX4`>>OS zCjQ&9c1vq}=}a;0Rl5)z2h_2XN0D2zH`cNv1A0_9cjghZ2rq)h&qufNN&9CbHuIb*5(=GLriU%cN%1C1(a#>=B7>yp{|O zR?wpe2Q!WVQ)qWv+t@=aY-yb^S{mqQSl2|9m^7tP3ACSyHY5c94o?do;RG{V&8Q?L z4_{Ir2%W^%kT6o}_y+TDb`Ns;OnK)VdwP?Jya+T{QWw21mmIB0QGg-(9R(l9TUzcb z%i}S;jyQaZOF~u|?q@w&$u?^2Z9H^Bb*7nCq7n+f-&a5?@y8J2Xc!~4Fnl@T1jc$W z-d<=m?pObCf@yzu4ow~HU9q;fQ6*|-*}*F~^rrP=cT!BYCaH}Ftv-*KDxjjpKZsx%EP=K#7@iG=~8(oEyh* zZShynUQa)>`e%)vjPSh}i9_Bzx=VC8=C^l^`7Ld0DUpkGYYQ2RlTp8fITdDgz_B`` zfX$xdT^YnU^cFAhNOwz+W|1~54OdD0Qq8qe;)!drA9@|oJqd&h&iZC|OctZ6njJLb ztN0h^y~enEQMDlk_X2!>56lbbFigoJV*MQ1R->+qjziO%$kQCYwC&ggq9O>kBie%4 zQoNyb5OJkHL}+E&Z;bEP4Pk`qlaTRC!rEY_bPyiBgy>hPLcziB5rniv?^jtJTnYFD zI@_z4my)4U#L|#KezT}R!ZGw2J*c4!5|)Qs#vUV-eOh9!IIAFE&ID3}!& zN`bm59g=Vl+@HFobPW_I!HcKfoCQX>*V5N%j0j1uNVRNr&@vAiV7o(;95DF<`QyY= z>`xiztcWiN)Z~rx2ds-eHOZ^Sy3mZT%{eOa=V3bQ_Nv1jBlDiGq}wM>syjqF4AeOu z^IuE9P9e*9ou3#-2Gvahy1$_#yVPmdL7!10t7G-4{BamBaY# zr^fJNZDXl>|COZJm-BsOk}ArPrp+kkR~535c%JMNEhZ*rwvUq2)HY1I8azB*+xr7j zG`WN>RJm#Sy@7VQ?8(}Q%SoZ8&}xWY?&kDi22Rg%`8Ny|rfl8s4?fjCZjvf{PTNJW#V(@EYwmQ8Go$3(Xp+Qw zlC_}FBK6S|*a{Q^=BHWH!5QkH9JTS>98mpuVRCF?9JnwjhtYsWwg6nOR<^eCPjFS5 zGsIsidGmcrbSgT}g~AVUEi&XZHkoL{Uq6yw3eN5)`lZ7FAE zp(^tN#+1JB*OisVbI6*Mb(3g!4pMG+)#UT6dz)(;>lr_HVC?7>N-Njk(m^jVmr|#k z;lGv84BwV~o2*H<6Vph@98*ST!w`6L^pB~`VCKrLSq4iR+_R^ysG+UI%48hjU_7g- zfKCw_&U7;p;q`p68DrvcAbeXasP+D3&>A^fOrl$s9Yt}_rT$boxS1U4WDovK9RI%k zVvJ_KGMSPzzwK*Keg1kg-psg+uAV~xgnQ5g)47ojg3r6vZWx-3QaE=+_&6DW9>|l;s+h^y6{Ef@KGpORIJ*57oEV+f?@TQA77U*mPxo~h?r+0(+RN!y6IsaO%!s*t zI3JO!Sl*x|(!b<7>q)`*j^aF5psE7S%>pOK78EF0S*wB(k!supB@&P_c&3nY!}4j-%>=y0>jMyanehH>039 z2X!!kFBwE4!=bGqM*+kiiN_U6dkjjgQ7g!3hlicl-L8huE){Y#AGy}5fLxLW?{99w z{6rYradT3|J}XM)IHSDZR1$-;;XZb^N}Nn20c%Pj=vahiaYj_^(I&%bfvWP=KD>r* zh1TX1dEMBK%B+veEhtH2$Tlrfm+bA(#q6bA2d(Y23jVzAJ5F#6o0WQ9Phyzw@2IctrdDP3HBt%GZC63gbQ{8(Q) z?Dj(XeRtXO;rsb{_@zDf)ALLdMWYwb&NAWh;+7=)=bmS)z(a7?g> zdySpAR#&2Zh$3vHyJ?Jwi<#Kvg|Xl=QSF?M5n_)5P09rykhx3Zbim%hGOOCV-~w)= zygtIW^CEAA0`qe9k=x13P*)8;rW-dF%r6XjWF5AgmK%Lim|rsIU(IX%sKSnRO86B2 zkmAj@V1DOO#0HzUR!eL5t^W3Rbr1@evfJzR{ycE#T!AoQ&~cNHq-wjB=u{UL*|sNF zubO7NxzjKSX~xHD6oRPUguOH9{CJ5p!mI;h90E4`S0HLbZ!B9pHQO6Hb&(Zn4( z@u7xYTWX+BIN%9&7Fz+;*u4puk$4=X9qmsK$-we76^_9a2qjmfEiNde>}c zh8ptvsy0aUqav&i(6zlHE*#jwqYR5w^9voW7*w!a^3RgjVmF!Q-%*54Vf+S9aeR9v zWp14kfG`-S)T&Bj^PhY_lW9B^ARL@#7AFCoyyQ3tTsVR$-X_ZMRj7V2O#FWRA)Qe0gLwx42f_FQQ zOD|HDy!@*J77tZ^S{_PVPR z3VIh>Y8Qva5R;~6UI+p`+z`6xS$tUeeOBlM zR$H#gQnT1nTPH$Q^pO=s-YG~;Jo9nCC>A%?Sj2)xmb6YJ(Rf5=Ye`Ef5Fenj;;R`U zj_AEMhzxVxITU_8-{C@1sS)|v|8qUd&DUGH^g}C3bGY9{i78i50`VvR1t1=U0nv~c z*OcuC@r7!t)yF5`{30l~X0wM4H*>);3o`=t}NeOcvq%l#uy3 zB|}$*4Hmg;{2V>ow(=ee7d1fLypTM$u!q%2^2-y98^P<+K$PI;``6O~V;;on3YbK} zn!ND_J)OXQ>)`VkIey#jL{{8QnK#5><5e8=+{Bn&|5-rdyv@3A%>9{j0p_bugc&n(s2!XE#!^Z)ifyzvxTtEkg5fz;F?As(Vs3( z$c6Jfuq-!z+!mktHTt{R2ZtPGL&NkyVX~-kT%`(&hDBE%YQrmHP~rmW2t6mYzBsP@ z>ACS%st8PaOPvjejILl}+|h!xN0`iYYHIzm$w=S|adj@f(G@WOCSQ4YMK&YHG6yo6 z8%#|4(!Ll%tggz8$;Ai2MPPCj*!F=ySg$FWxfpV~;(Cb-EdZ2(@-W~tM?#iZH)&H{ z0fg*n2_Rq1k)$_{s$BEZ=0ZY?<@gd~`Am+adHBn(8D>&+314H03iD#QQF+ z^08Bg^Gc(*kR!ba*tg>I=dm;lIHIUNDlB z@`YFn)AYcH81)C9mqhUAcSM*v`L?rAiu=e2a_PIfuTCcDGexSg9ae|0QT0Y@B)ruq z3O6{{)PDh$%;P2+U`y6$_5*%w+&!?vlATqC=5ySu4Assz;XCw~m zQcZovxg|V)zBOZQgL#K8k|z<0cI*z1i*h_i?<=a`J7Q^SI{el@#L`r^@*vchvV)(T zOK48C=q1oSd9I#&*V27;J&Y&k^jpVUasDI;NWC;^xDUm~amuF8r`d0F1dT{>OM~pu0_;ekmA`;6ln_^o z^wf)SXG+bv*1c6f%s9c}2K0M{@u$3URh9fQc#eW(W{!e{?COsYaeib*aRE5lha$%DwYnaS8x1Pqk2>p0z1Sa>9X%w3BSA{Z!M7+!1S@03+F5TS{`{@Z%qI;#0-k z_2-t4(1t+2`r7R>{&SE%=(YhX5tG6T!f|~KN@;CkBf%^V8~NzfOg`USUaapZ+ZamD z&m)X2apg4+N3h#EoO6AC#4Sh~L$_JBzp53`%I(oAcqVSrdN0@+I&c(tuk*5P%NK%* zVw=7tM$4<^J3?T6Ytox>bJY!JSz%#5AFa%nG*xoHwl|{-|2@7@x z?t*V;UhmMYQr$YIx4P+5j*?~xhk<*fM(C=;>0+;vA@9{M2M=dTZ+4>K0l+l(5pML& zI5gZr-pdj1SjL|g0l?PHNvB?j!Pe46_O3et&#s_X!Uf|Qv>Vui(C0g@1$KjCN#AB( zI@Id)qIIa!XUGs=32>J$!8Yog#<+ME&L)D$3)}eTDjo*Dh|Vf!`M`}s5+u+6`@@RP zzz8mCTXsH;u1;GCS*)dbD&1Iv0jb85U!hJht(HR8nr;hi8f{Ks;tKkuFatP)I!JDA zJS$FZJl~Mkm~xHk=~n%0c-lx-e9<}dFJExdWq0pIuYAH>fr^k)-J*I8;{z%2A>~bO zmWpaXc&zcP&wGMzX8=SCb{7gB0_+LCPH=I?q@Eo}|LvDO3&dN^)%*_)-0#i1Dv2&b ztMPgy$5lLf8 z{F@RwMbui8sj+Ja{sLUP^?BE;Dih=;f67i4INwt0q3odwxLYqEuGXIhZ+7Q-$+oX2 zef$411On&Nz(^HP<=@Pqe*M;^64uYvtTjqUpxV7iz=fK}l?(C)v>n6;~&xGd25xDF^ z3#DUq(`(^e>Rg4f$GS1!ewft&sPCQK&a8OZ2C1!H@4C~DQLgsc5!_yk@Qy5#H`_jx zuI%hsMpaDTsK=Btqb+i=!hNVhx;_hotWy-T(1o(2u)~Qsx~Y9zK>CcL`{0V znu>HdAi0=t28@*o-Cndpi-6hB>xws}HxuVLo9*a?xS8b*s|Q(iDE%I|N=p`yh*)E@ zl$T`Tj=}035ayMvH~btlaixS*GIT0c{=gB z%|TD47tFM^DjikOL!fI$6rQU1@XEJqnSB1EGMl2gXp-fVD>yiK?0nGqI|b+?Bqe$C zJ{UuyKb*JH_B4s{P%x*ej;<2xqDbo^14L{Gp_kHdMWVb~_CpGN4c<3SBAf8*DNYVq z2IqYzZtvl^9$%7s-F!#!r6hmN@g1cQm?X|rOj$3mIVDG!RcagP05=*{#8owOkXxAV zL@H9T%S_&M-g4{)&RX~#rJV0ar+M}7D7v@%)NUE1^-lvsVFx9l=SK`{c`^Q{4no1s zp4Qh#CoyXw*9(Age?s)}0H^XpxzwM_QNMLQy&L-cF239EOxGe|B1%TxzER6Fi;ojs zepln?$COls$F5T2+y|wG=g~b&WWYt3@-s+&F@>C|t(ci#0&V5gE1oS;)ix0rel% zf59Z<{%;q5=L`Hx1RslmIOveox(UXb7Ee10v6WZlr%ROJVD^UW*m3txOU7V6h` zI{AJu71?rh!?cf~{e>?J0QnPuJ*)iSAnk@pe=Qg;qPRRXR#$m+!gMVJAOZ>i_%7SN zyv&;qasfVcs zkjEUTp}H@IWV7J)nsm(f?1$8HRgacENkuktcigGA*uGwYPeLFHxf{XOVk1EA9yl)`9pYrUxid73uOO(kMU*YRWb%yc(L@1E=qa;P+mRa^=QJqgQWxNr~( z7a=iwin|h?X2(@G3Jglq#fveqVoUiQh0?^v_ng|!JgmwU&pHZQtTS08l)HE6-6zmz zZnsKBchoaD+kshFhl)C1DCJp^`0}7w=Zsss5|QPK!gIsS1D8TKIJWUfw}4;2dKi}N z4W-`-Ox+>BV2`yaOk({>vS&VZEb^oQaO9xj_Q*lo=FhVSZA-}e=mfw`>|du5kTpn{ zf7bj3e4CLRlsKSf=Zo#2ixVQ~Q0_2-yFf26QsnB#DVL=?4$R)NjLc~lx}}IOM*uT% zYZPC3B-W+FiYr?iT20VJEZ3p3YbS)Ym`^BmBSoS#eh_ve*$F5!3ZuLzHuH0I;`IEL z=kER@JzAXxhmsF(4=eP5j9D-Z>VRX#u!qD^K!MY6u_GDEo>!FG88FHpI;IhP%@J8xz<9BB`RJR^_+^Xo+Ro7bx&pAelPk3(24}8YK_}% zc@wqnqJ4#%J&0N$HW%f`iw{=mJmAVGrJ{3)X{LrN+VzY0y*0@!^~R-&S4x+)tV zlT1EM`pQaxnBc7VtqxIc8GgpzmW09|fch!*e)PyveDy>H?AH*VU`5u0q;LPz_G})6 z{G;XtA4~=BNsl=;2-_U%r8$JWJt&4zR=h4QhYSv}for8>XYBHJb+rbgmL=9Frbn5% zmzsKYr&H~AwT3-vkHOB-WSJz1kjd?8jQ)-y>duJz9YtIN>qJ2^*V?Sc+AO1f2$nxS zC_gTbs4ZNL&*yGR@mDDcE$G#fn)))##5H94_z~5tWQT_BSQ+dq$s@eX@LH!va-DC^wLD4V=ws-EE;h90jaGG*jzrtVn9T0WSAoYf3B zr3^KUzw&jJ_pY$S^IE(F?<^T^^e7HYO7SP6cnPi)N2me9etbIS!z{mN)Ncsa>H&zp zI?oVHwbW8X4!3kv=6o!L*RmjUE)gd*DOIn_<%vT`fDb|Wi_Z=;@GgfwDHXZ2Nmcpr zUc6*)Pb`g9-B4bu_2f#WGCy9!C-K{qSopR_qgLXXD)i$a)G2BgX4#{b#QrkbeyCJ` z#$q*=ScZvTSPsG!O1v4LD!J?AjaFbvaoj6$+|;Y|Hg;&`i8~sisq1VwOp(4YhtGKq zaa%0PpC+E$6;EV&hrxK_0O=y@@h;F_9~~7X7mmPH71Nb0fKAuV#J%+{jbyTpRDOYP zc+w=&Q}ot;I_IqNarM%T1bacRuGJSShwLmIS%2W+(He#)4dhrYf-x7dH{ll(2~+2B zkaK(`fePKgv)$qar^Ce}XS1mC^p{oN$VCEU4|~@t+>6tnZxTG;T6@0P`|YW8-diP* zyHDsv4?lJXd-E9uAmde%_7!=XCa}BW&zFGeE&~(OyW$+EL)DJ@OOS3y5GFIpcLjrl4{YSTxBEaTB(nZ%vh(%)$ciBnHwlJaGR&Ab$%;) ze&Hk>VghH#k=YshQW~3tHXuAnn`>op3OW=>S(B^8Lx<{jf0o(t)tRVBDQ5T*%-YmR*!`K>tkEy$qW356OhVdI*Uc4_A(hoYP4n+ z6(xL8#&rt=BkhqP(D@7j!1LP+`+xrkttfgLs>^BF&Xf8hv1;cj=0qm!9;rNE#zRsB z_rM}560{RRwpwOD!iP+>%tl^R4M!AV%)B4GP4X~i><5A5w)l7MXKN8g9&vJAhDOqR zW5S!{COmG_i0kkWE>1Bn&e{CoK_)LW5o%fb$~Xvhhx^C7pGwA|&;0H|7yR!8Z8EeM zY8do>N74C?GFRSO9{X+HU2`DoP}^|2ul{*aui3XEm$Y^Gpy{UXowx43bl2A3Q6Obw z4TW|JX=7c|&w~EQceWP_M)<_l4(P|_ad?_?ZB|Bw@|YuvMr%)OqIxS@X$P)S1P?`I zuTmHfZH9WTIepFgu2QHDZyPC(cD#XBo4wx3pMXHNLWH*G7W!xRM6OGx4~5IVJ!9Wd zdcO*RyK|^p9#|~C)NH?}L-@=O^}pT^N$N3I1vYg_g!-PpU45zqiK45QikZvm-Bm%H z(jU?mE|+}kKWDvkOMkGhK5?Tqg#HH5?TmnKzk_n`{yjip11H6Ab^9HxC)m&I@8SZg zor3KJpxrrMao!ibRqJ<$pg;cHZSnQBr-=Vs&ts~!^GM~+@5pdYbQ1Xl^IKkjqU8FD~Vuc z{GiY1ipD$-2||cLD7HUysl0T4Y-o2+2ID1gs%Q1iFfgcu zu>`J)gtcOLm&4F~5NA?1b5L-g8)c2(Q#9KwPTH9Wm@B#NlM}zE=pn&4XB1bjYJx~$ zw?ucCxT%P0a7*B742X4jSww;LoP-jBp{gLNoZ*3vNtG&qS=|-;b5Ix5jMI2+Pj<|1 zw(Gp2b=et0H`X*p3&SrhPCEF*?H`}(R8mnE*kU}#>9i&NkEFyT{S*85(B(B60fL(q&Bvu`=Av_op8*_x?Tp4|!WS+6S zx)HEnabotA#ryski9|_au&Z9c1$M&`mGhSAad|s$!9|VHZKFBGJd*}F6?xrzw|=}a z+41UTMqID2Q7XqLTJJsd86Sia=o+Xjmjla)o_D6@`k5l)Yi8(ZU)Os*G-CP;i;Rp{ z@sIE#a8-1CWIHoMKOO^*tj!g;+Dt zQwUhBxS7(AUuJ3OB;CEEV=S5zgTu2;C8e*?81O2e%t7tM1^b$dgRQDN67-6Kt)N}q z#JEho`0HLS{5Lk%L@!5%UQP`0_ z#{(8x>hZn)kHAV2U=xLic9W=yh`*#7voKsJw{Yvv5cjaf_>b;(;{SUE>J1m7gf#ET zs#`E)2fsc=-vOp76p|_yv;6pgFGM>oLgSOOhaRvZ{iJ>T4EU@t4p2JJ>OB} zP+wg{p{`&ym=-vX?k|5w5!(!2`HrH5Nsh?x1o6kQ$|AK}#-P~v8o>y8f2g{6D+e>T z)D9ifEMJ-+f6kHA;c^S6i-;62c~**n6jw{&xuq8=!Y9(w8~t$fjDPByblWHLwmsuU z&EVreSymDf3}`1Ey#V?fr{C?B#B6kcbp0xUw?Ls86j~UrG@3K`WuD1)#*3;`xj^@hJ&|S}@61;TqJ>lQw zhY*xY-g_l^&uL^#N&)?76%7=bEONA@T#;W$k($g#b%%{|9V1*hF@uI!k?OZMgji#e z_kf>63EMIX=zJK8gG);T6Jyjw6G23hQ1@~EK|}^d zC-l3n^qs2pk}9##EWxxcs`|NIN;^|Z-q@WMQ=++DK+6$Hhs8<|u~*jZ0u_5^UsdF- zRB(;!V~sD<3-E+Hi5SGel;K(QonX+^xXgIA1SJEObif`@=!IkE!mfh1(7MlS$NI(K zRu-26?6sUunjz)hPv9>Sl-NPed$#V}2<77!oY^7txDoR+(_SRqGI$^(4f&jkdGX9Q z(whkkIBW@XYK4p+Mp9duIc{0ev^h8kNL_kh8yIO!zHM9CQhqpyuPEdlk1{~P4{1JgD05_=v4*4+~ zxg1EX1nHZDbKGvzTaO(8+W!%wV7v}m4)fb(EOZsp#z*PHjzFxrNMT zWfvol#H5fo(13gg@b0U~r7H;80_xrZ8L@`}cJcp;0sPZp|93Qi?|*OlH{k!Nq&8zB zmGEFNmU@?0<{{p$5wDEed`=gqizAQ0wMFWH)aDQ(lsxZFg&Hrd?1^BLN>xu3%i|Pw zD(v!TV9Es{n1^RDp;ZQNdHXFR$^P;8RM_myGM_fbqXey3!60>j7wpW^&9ZOlk>gaK zAHp0ti`^N9h^sbbQa)2qc(U6TcU>IJ zNO}{5D_G(f$a!ZtY_vGk68QX3#U_^V#==lsv zt}T=@;8YE<-Ig!G&A$F64Hy$b779d|)YS2au)qxZF9e~E6{N-PcvLECFDnz5Wf2_N znkN;M$dHu;V<)>driNf&9A#@czKMHWh4MmIn#uMVCFRgZL3!xmawdIo3d@>8jIMph zYfM~3V!dXJZo0gJy}~0s@49q9B>3O}7UP9#*a77@NxKa?bEu21+tS6H`l+tW}R}$Ay0!v&4ha961 zS3JiSOH@Nv0xwbm>kTFWT9ZqrL5mA8HLJCe^gCqHQ84OmUyKp3gT7#0Ite-Vfs6!% zdb!S}Z1E*9;c7^X{UA)HKt6Ruxa-j3?IBq-+ytaaC{KeLE9;8Y-U!(iYsmSq7EYa< zOkJuW?W=EdMF&vLsLAj+a4HIpiCV!EKx8jrOjg!G0^kD_4xmXYn(&aCrAhsO<=;}9 zoVk6LT}N#&lzuP7UYEOnp$-x~ITq4i`{xNj@!+)A{sIfCL?^6$weO?#WP8&LlKv$Epo0 zp8;RM3>dK5N$S0&W8!y>gGe#_2>k1-bEaP7eFYaCQpVAJh>bcI!hfxJXw`&iCuUos zI1}Zf6Y(8IttI!U3uf>oq%MczBd(%c{boq*sfOL|2@H1*n)^9hB<}`+n{x`|4h2ps z(!f@~2mwOmSPG%tX&&+)MTpKOmK@bTYPd|Id!5UG}3Q3M&-J% zX*^g-Cn5d{SYnK!xOg2)nggLM-zr@M$Ad9=S+_Cut{&VnnZubaCbneO)FfM0Lspf| zms%UEUcSxn*~{i3`16VMyZs$VsjYV0P@Y+}fd#aDr44DA30t;_;x;?t=FKdFBH3!S zep+eGJL``#-aIX-k}&@f@A{0b70Z@`s&8T_m;%Chg&i1e+RdYue1M7MvF;gUm6u>R z*tPRkLfmmIVNdm?ko3cl=(fQo*cWdTRnI8FR^rj);({WZCM-msJG$BPc)~vC9+I>y z%@-)3j|svZpUtOT34U@EOzUKMz%JL;2+(@skfQpfZh9bCkb>+z%!GY*-{!{6N6M&N z`$@%qDKLC5Mv)rm4TAfE!1uka?F#3`ZK+51K#qO*_Io z(*u#BzGIHTDG8Vr4t8@Pb_QTa>SoF9GGePsy8|91#$q^dweWP`i%n{#ks*i)x(vpR zomzn^V#|ABAK>4L)wFIgTugBpFg4saRf(M|j&#F$hBJivqvSb>=bH&-v_1Ae1AxUE ztR_8fq+LCgloX%3jlXc zWs#PODALWAH>J4P^^S^rj!4f4pDCgbvf-nNb=vUW@DO}mnN3zB=oMWF7J{VpVRq6Fno zFBUsZEV&@2?G9P`TquW2Coh$S6rB7Vx*T}Qj%lLpW{f0raXXV7BYF};dzMDk#TD*c z-eW}|=IWue#m&FK=M%3W7|e=+B&&nMldw4Bg`SBv)_&6&L1#F0W=$mKTHJlAr{c$$ z`fa4430y`xX%hL(zP*pOJFgNyH?j1^>7pIza|n_w=)@$uwBF+CG+Gx+K*Mq_jtkGb z*SOy?5%p$P2@Tj?`Z{-%!|LdIL~(;TD5Cr>S<25;Z+U4II0&v-8VK$Fuz1Ug>mY=o z*W^+JQfKF~8snc6JMFk*t5GNhFxHqcn7XC-_UuJ3rC~_h1Dj*{G~OXEl}{4RUNh(< ziJpOxjy)!{K5D`^9o&73!m}h^;*b~(C5KR`nC z36Y{-*LK8KiC(eFaWnyK8(XK}27las4U+%*BYS-Y5W;tv7lb0P z_C{4t*D7f3>Y)_2s)5l4HytjNRH!8g=Qn~}N8`w+h-I0SQIed5z7DBo)|fFd$8rYw zHdb_iAN{k+S!@y+Ud;9?Q>8Vj7+Ju`cmuAuH34B|XKc+(v1RlFOl^G}sf5~r8~Vjr z$kKL3AYjN!f(Mu~`1x@w!jXN3o4FJf=a|}n<^iTGwr1uGzzBBH4F~!P()V#h_VK@z z1V*YjHYJNSMIS@<_=q34HG_NYkJLU-0=F}sm9JX&4aJz7Xb4hNJS8w6EH^a~8-iha zp}(0XK&wTZVSO{Mj#}$XC-1Eq2=-&7{Ir;Y_daZS^4mvD7qRGKasGWN^N$a2$gd6d zE+5=3swLQp)|qlVqGL{b+WwLghvM~?%`|m)(}38#kS3aj#yR112w?Xm)S9F)ntqbx zQGit$881RR)Zku(N%&Xd6Zbsy)@VI4n_K|}fP_p;@=OE%llG~nIf^|G2!rY8Likd| z&TDblIZ4<#ao9OjI=y;kvYuokjLc}&fAsRS>rVmNSRL`cqbNS)QR@H{j;xE3>2}b~ z8m+N8m|3Ql*JLW&H~9P)Gj@#2=XkqCeHWu!AwMq-8jLMj#|mnr3NeFn^CN;?1*BjG zu$rP&l+PSe9%vwCqOPfRn!3=V_#7{al945KfUZDxaH@c%d-J1vKurBvFp?(}=+l4v zk+$(6gkCL_j8CQ=OX)l`&W7C5Q zy8%gBV>6!D^w~GL-@+!2**Q+z!5iT=EtD-t!Ho;;++Ga7)gvdG1ZVxXOW^1lhOF70 zy3zy|n$?&>aeBbcs43!;U!cHL??4f#$HlR}^7WRFzd7x~A+92=V4nMnt`tylazgM4 zatkmEJ6kj8d?~}Pu5KLEvd{mEC1y`)`)`}?iWK{w@moH`e>K2-3AhlQx89^v- za%?YsOzW11Y{|nIb;c_^#^pyyemBF1P8_fMkrIm+mReEH+8U0e(Wu-pqrVF|WX<6X zc;adxOMi)FAc8<%itarO==RM#clAG>A)l1ksS5Ib~^l~KFSA~y;@{Hgk zdTey9iO?q2AZ_-GMl?+qR{WjFO_-iaN7w*;UEb>_fH?F|75BI+-gFQ_7|pw(NbdeH zEkhu=laVz*(bgTDaGU9qPQ7yfL2W4MmFJIK2#5ajAFG8x8WUOpEcfkWODX2T2fMe7 zWI=VLWpF!1t{%&Sxac+MKrydRDFQZ|74oqlJ1GTth|J8|DiscU2Vbn>S2~WeAI!#M zaS_}OI^dtPd3#u&CasuF%O$?=cXlNR|o z!i#g8WHlr47=Co#v8? z3yUvSfF#khiw5H7;MWXijyG$IrVqyI#Oh2#=&O;hisdkXbmS|Q!?)Z*IddF%O$PZZ zW>)Mv0kNXwRm$fPk>a`*QH%sQKM>7qX%-SM-gxTymgXuK+n3T$2H)*%qs zQ*jdB%Gb`ad7C#W!Jds~NHj(|iSfBNtQF=8TXIK6Wcdo1u;^)|W7CIpQ5b_Hi%fZfW; zXnaGWU?fa63qMbmSutEEjj&ok30ac-RRVxA$2Wx(WB!qBbpGt~PbkXqO^N&^Wj<4P zz;2B~%C1Gu5h+W!k7O7lAiEB}p{n13hw()+FJ3X&h)5lOM|t@j1+?184>mq(#=x?8 z6()9f7})QHFdmBmH5k4yW%B67cpP~>>3*a@n7P>i|i^~;fa z2ry!ft2ab0x8PKhZ56rTNjc2^A*iB06L0)f#u}}fjF+sSA(MO9X|8qw|VGM5Kl9SjC*J&$}Qs}m_%MVuAe7}>|wa*9hAgXKL=qp1%DlFIm zJNqkSEEGVbyMkk~pfaX$gioXQLP#PntU^M&RB7J6odGFKSHDS0QuY_aA|c_T8h@3M z^jgXM1@L9MKiMCxjaoBxp9Y^3O^#5=nf^AGtj!SPi8kO{9`X1lHtMweJBo$Ka7UG@ z%gcM8k34C{fFIimkBfpw2iqp@zHb;Y&tm$Ha`)-l{uvHV^q~Ny!c03W33l_RfDOe| z@84X9E1Z0_6dzoW@vBRd&uLhaM#t+a)`l1HHa`T(&~J1P;!+pb3*7xv04uMjhJtu1%4B?H4_eS=`!J|BiDK6MK?~a z!yFL&hfr+4<=iIfcCh?Q#SXJzvCW>ln3-uNpZ1HB>V#t({#?)@7Zv!95)gGmH<^Sl z7VB*>Q_xN<6A&3(6=S#WEsdzHili36kPWvFq}0gl9!=jL+msNSj_w_wq&TLYrZWuE z=iF2(5w3E8y}nbg(7&p0Sj$$0C#RRk!}*NET8HL$0@>PAh8-DoTPGP3|us(#vo zYTVEDmE1~rL+FrKcwZ_EkuaZr|89$hKRvQ|51Q(I_3v{5HQXm zn{w*@!|A~vEC9GM@Vxf-^_aj(-w`sD&y{l78_m5o3DVj1NMx9D88U`rWWNoQv7L4Q zf#in@vH-l<$Iv`6W9>M|ej9rn?$j;s6s$rf?u<2z{-;y>7oZXVK(|f$FB1NyN2X+X zf=nIwhT_9hx=a817A3zO4#Af3dAWAhN|J|yB{0?&kI#K#ttV)5^`_FU7#aNDk*9bf zkV87b94T#sha(uNlkdxUzN1)iG_Gefwm`{JPOEs97bBOqT{Xj%{Je0!q~ANE`zZWy zA1FN1iW*J$x}EIkB>b*PC#$fins;=`R#;~@XN&y6>ABUk-2Drkp=ez^Tth0aH=R$3 zte+FR;XY4$R9CxF*GM+uTUho1ydRX6D?9p0hW4c}=9>|m`GDqn91}ekIAWlQ>Lz zKb!Q%(8{;24b$R2@uKXh)1v7oNhomSqMy4IRk^<=?XQ;76!}cgI2%*xJ+bH1Ba@Lw zNi{~^575hb!vx=XT05Fzgq}xL&^W$s7TAM`F-tBDn!bi9(a~F&RXC}w9+KNT>o4oY zU8Z|@Z=MFvJ!(A>D1#7Ndndk40$)bC0PzXOoKsFY=4@Hl*QeLdZ;vqCCU*jRXU~CO z3;rMf?tjLdi-cSam!buGlexZsyTt!S_U$R{I-5;Z9d;fseKDQmR8p(~yNXSSU<%_P zT%gQQnV(wsq4+dTYU`A-@B0Y&E3=M1>T2*)o%g%6VhFx%TIxz_<}VTv%X~Rs_woC* zu43Ad_(Q;|X=pTuk1yY3Lozjth!vGL+3S>vBa&Q&kMtt2hxn;`n7-LKcvN{mgVUN; zQcSkZvBw9Q)o#g~y~zBu@nqDpq&=U^#NLl{3IWmHLlkuomdHcz;OBOVh%2WO1K+8K~n0>NM#-_7VH7XSFc8dq!Re#++dv7#}K;d=qW5 zlYcbG;vu-wxUqLe{Ijw-;2XP~W1WN3>8n1QT~hj8fpvFum|#jjL!#g(3DwM3-%*t1 zvV1>GhLOYF7L)N-yfC+05+*)x=`wzCuP*xPS`BXfV%-_l`~3AF+J33Pb9j&^@%85L z0lv*%;yVh3X&agMPA_`n%=|v65(O-lM`u)^$x)1m*_+mg5ku+_uA}PX12P*lC{28H zyb>ziE<4*i)rl8G7;!S39h?LyNrda-=eSU=*!UNX?L0WLIxTt&~Q)`mfo`cT^H%3M{!dXQNsC3*4l#zqoA>6)vy!KoVqy1SOh7P5-)F>MB zvv`|GIE$8De(oLB;BwTL36x*&Ws83?&}YJyk$z_}f?HoBjv3!gO0Fi~&pd&;juXM0 z;}q2XRJzwXqUYl7MtFV^d$8+*q!De$*uW;`CoCsw8Xbd7eI_576(0*tR42yr`4Oke zQ_la7wfBH)B3r}8hd62?s3CL^9bgDWiWC76F+oZ~6%-7JN-v6qqGAsbluk0B(xqcT zC4hysp#p-S0+vNZML`5b*TQ1g?;X^=ckkZ)eS81ke=-a+XU=)v=Y8JyoS8``6Qlk9 z(~c{>G+tZym|nJWIO`2PXWsR5THlaak2cL~v>LHoWYID>uQ5^~V&kIijR7}?hAmB$ zxa%yZM%kNd2N{~Q;m5Zn@9k%pWMIiVOT*}rcg8vMuI=mz3cg3H+bH`e zIy-*3&9q{@gnCQED7(VGJBB?w&KH&ETo{^nt%klnC3!pjnCu}>@#^vr?dEG*{^@D%)lW}W-{0s&e4bf-e$J(( zQX3wpFiwfe4CBgw)p#qN-F~2qcV=HsQ0M4^s3#9coW3U!t!J%FYkI)g`sw+ z9DlEz95dlpPn~t?iJf9Ymss%!t+WrtYx%djU$*J^M@t^}ygm8KT}RC(RsAV9?<|Q} z<$g82F@HK9Xo*JRO)!nx+ zTOqR}dJ|LUsAkLYCF(DkYx;flTUOygW!s4#T{2d8cw=x@weuakV_OZJ8KGNJzRuWu zzW4a;7;Zpz_1qxlng^1Vx~>b<3b$QRHo-;Od*sAvS5luXJGiQ3*|LE-f={;dUkLN& z8&`0-^#fIPj+u|suN-?Y;FVunSs3lVH73w3?Ug>EX?lG^>CS_;W*X7A_iI?K)KWc~ zY}xl#tv2kzKFR3odK*XfeeY$my32#5FFS>AlG!4Ym7-l#cDJZ?jdkfM+l}*k8go=s z(jQM^Y%<0(Iu8#pH+s`dCOojvztmfo=^dQN-Lt?k#L;+qWXIs)D`D%mPc&LN{TLoY zCv=-B+?AHv2fZR^cbpb+84<3*#RkbIC*4_)eWj0Wdfk?@BxbALwQRd_2QTEx2eso* zbJZVBkrI|&7g#!Ecjr!QnVy*c){$cqdMaDgR}73pQPn#H#_Yy2&k7^ z{z>Ivw6fetNQ?~Yh48H#_3VvJn%S#M8qxUZmRIGtMOlDj_&VJ7c8R&_tFxj-nqk@Jbr=Zu- zoOq_Kb-UWF>)0Pu_UZaIMa?pw9%yy(%GUBr7Y$>~K4mEHyYczH+tja%RST>R#iqWJ z+d)apzZ^BJoBm#M^US=y4b29PUo?LlG9r5FmN^yb$YmP#JfC;1w&yu|_QBJKs-b5! zkF+|s5vwn|zg%DV)cfU3`(>%ES#LE~Q@sVWTIN5;Bxavk2#XJ zcelCl#u9@a=|4s^ud8i#H|vLvHLm^1dcfYQ>uFM4UTQa!88Iwbv_Y!g&BL}eDV)(5 zJhj^)OI5Jop+?Q@dFh?^=7#!3#1Chsv1cDhVsbT zch9BJu(*K(@a}6(ziW#V``+9I9^JxTpH$-MuYZtu<@2^^@=Or#8^+k4E2A%^;57V za@lq(CjgwLUuY)3z$I8I=bZg-Y7In-aoLSF{E5bqutM8kvRtJyx%M8t+uW!TIg>+l zLh;&*N{%T#-fnF&%s2KnZFZSq%Kn+c$h=94U*F8TL$&EIlnCu=jv4Z>f2?!gqjhCd zg=>j)l=s8vs^wXGT)b)R(Lb{2y+Q2B z&eLa1jF&0Z9ZoO5`m4m5mO*YJDCELyi+jPicSFrJET;a(IqjD-JH4JgU?vzys^ZN3 zXdfKGCEK>G|1rcaHD|~+{gUk4n0wK-(a?x}<4vR|B~V>6X=SN(rERF$-g-rUUi&7O zOUj`)*IW0G626HiY}!l?z0*1`6tABA#_@5S?`}$x4A$)bV0`H$Z_aQz-b&z{J&pnH zzZUf*=}q)~o@9a(T=~oc>+LTFMuq$~@%bNKj6h%L+?C<~HE7USa*x%-s~RSO2j^wZ z3pa`x7|Cg^-{tTjbKd8+NreuL2e-a$R5|wRs-`qab?_Ta5&+@u?7lC z$c18dJVE|96~*JZV=GXzjNoc)nIXCw@ql>Zl)LhYj!jNT#h%4MA4*S+s4ulFzNvTM z{`!8?L1!5fd-_3G>At zrtQ5tWVpD#f@nS7opdlvtJv(}0#*;R64N*6E6PfK+PySBt$BM>%hJyFi|eWfH*rISRlXIE zx*d)^fAP54JmGevk$aet)P5&Zf$2c1o5wo4P!*d`Gelg_?suo$4Y#Ci&KlS}NKd|W z+4p4URB(?JMKf}Qgc0!W@Ol4vDp9QN}e4$Ms0 zbNQ*-a$Zt<7S$_uN5!Vi78i;7O%VSnCvFH5@zU;pFc1x%GQzN_nH%ljRFD*^~&Z;KzDz93c zS=4ygGE%UvNy#E;Ki5KoQsuP{L<+8rYTaCZ-Q_`WCiCFxcUI`8grZ+fmhHCadh$^G z^(#C9(qiW-qsrM1gjH>8`Of|sPd>TdJ-zL6jvKR3(`x0S^Kj|a!f96XOm%YAZ7Qqt zi_4Jp($SD9dw!KEu9VHyHJX>v5)YmmEUq7F)!V;%#rQ^rppsDc9!{!v@uu0KQm#~K z>iVMsC;!7t=5o4|X6y7fK{kvqAN%%w+?{1D3!=+fqCX`CI40RCIh~#mHSql7&JcZ@ zkw}5j38v9zUMZtY$_Y*NnUa~1S<#W;IXd6;dB_v!aD|6UGXz1=D_$myy8rqqb=+@r z%x^mrRl&1kq|e*-Yti<_1ldL`h`33A&?LsQW-6%^8%V-eiq9}zm`xRTEa?t|?w)C> zsd^dg-tFOgueNEZFwIWYKl?>9wjz33)(ai{MrwL#^^@02T%^2IQwLE-P5n~&7|wma zr|}{0wAA#P_r}cdPE@L}`i6Mt`s%r-rO49toL!Gd+YN@)rmy1^Xh}V9Qo=LSBh7Rn z5O!i6fsDZglg0JVPEXR#p?BoAI|#e;gEdlno?i~uQ0^CY967~VIxBCgkK z^LQ0?<2~w|cJ;R!J6=~wT6tT!_qqMR!j1=wy_(gWeKQXBsA&4o#r9g9t_Z?bU$JV? z#fMSmU!Wv!#_HHRr%CSBeAC0BLLX~g-&-Ml16H{y^A6mu8Gp34NMlFsD-D|uZq|jH zUVD1&*lYM@_lM0lTHQAV??1F$Us6RrHN1{3%Uh;3PCnj0_mGvzF6}0-CVNhyph*@$ zpT}I+4<6?nEL(qQcnuSMX&hkQe)UM`9v!F2HmR)|c)!kUV%kB2C^O}oZ*)`(ZMWt| zpE_H%CbqQx&YJcGMGNLkzMfQ7Aa|N|P4+Q(%~FyAbP~D{VJa zYUh{l%u~f|{nr;ztNh~hy^oPS)Jo9#+GF6b_?I;1qx2_+i=(@$L*ko9oGWU=*3L1= z(^1=J?7nGlW8r(%tOXmcnpuf|)!)y)@NtWUAuZE2-1;a@4!$Pf-4v-8>1D|&+$pDc zU`Qi0?nB8^t5WUYZCUk|y2=OIo#QVqUZWA`x+uU5Z*P&w^`CR~nXSA0F;ngGxNWW% zH|@LWe3a8&dGK!jsCIA6&HaJcMWt*5gQ<=^CLRXdLl*R!MKf31M17f^$}^NVT`E)7 z8SYjrSZA*dW7mWs<*T%S0(sojQ2e1{sa0Qt!EpKYg`D(eJBI|j&HFlA;``N__n03( zZZ(f#TR2y}C*eTb*#mdS?^89ab=m)Dz4Ejd@C7rK3zJpXz1p%k>8%_%mE18(HD zTJY*LZZziwbj9RL3+&v+y>&fdTON5aD?PsJ=>goqzu5he`*OI^H(+6<(QnZ!kKTMW z;-#5C{^`q>E1OEK7;#%XqvW1U&{$jTb~zJ`b*oX^?Ej6WF%(_u{IinT9oQUafJSbF3(m;fdXnk z^_@N``SQh0{u*9#!MxL>9agWme6H^w8km1WN9-{RhSt7-j#w>8Jza;20$QiQ$c0yz zC(}V6F!mra5zo$JW!K+B6sGhA-3WMA6s~n)?-lIo6JwviQ;C%q29if2T_4w) zFAh$2J+P~0N6|HlvP{A2fQ)fkQkfMA<#Neld3jn{YMfub6pxw8Q)YDJuXYbRFaDso zH$2yLtNg)e7hVn+9RnDS{*;(-iPu6JIJGf-+3-H)`)5HCyJF29ne(_iJ zp8mIXaVABsRkH%itXe-#A=dMn+kGy`2Kg80+{itlYv-5j5+JhkGTEkdLH%OWuJw4p z;Td;7->B+ReYB>C7|0FkdgpX8H}LW<&DHDdCMZeNg*dg`4AREq0*(qDbGq$ogH}j2 zc^8Im>0TTqFH=@6|0S%cq{+dqo%h>;Ml)A4HGg82T$oLjG*2$5 z!27UGRbZ-AbzzEPwU|6+oQ(JV{aDNy@6sbT&&(_yX0?2pu~2Vs+_JW3n;sUOw0+fT zN;vG2Y)aF)fUa~2sU5_8)?}7z$XjT193wl9v?)(JVNG9?RAepj^oYI(H`rj}!V>vy zXHxQCs_$HM%3*hlN~6v`n!>!w3sNilufGk=3A@kQvUpwiD=SB*yf_xH{A^^Emo>@|58@F6?iq3%NY zc@~GudIhGT(=vv)hu?mcQh5C3z7*5Y_nR}#1)(QacllR0Et$1tv2R#=%RYfOU9J42 zL)6E@jmL70q-<{`r%e*ay$wDx!6Y(}r=H0@91uH@(qXE}y`)^rxfzphVn6@*hmwd# zOXdaLbf1&sV``)joWQ-qy}G-_G*Hx}pf_kPd@7>YzP`05o1RCJ@p4|6cyL<8W?@X27$V?-Uyz0+GI%&YN?NukIX?uEY-v=d3Lv$^Va6mid@adcMQgdKXuw) zztew;iC{}X=0J=WAuxfRoSzY_|=kT+gL9OHG>?eyfu$n@p}oW-C3{4F~TdS z{2o*29hT*6(SM%XxrpP8PB?=SSHQirO&;Y zX3-&-%{$PF=h|7hUA25|*1N}-ms_JkJRLN9gJ$I(5k8{~9L^HfKPHA>JQ+7zOVfXE zNodttALbFINkgX6PhVG@pTO@I*aJ+i({mDmNHmU{`UUnaz zD_+``eS7$H;+ZP=Dq;UN);Hw943`zv%_~3C;1i30C3uw!yjAV5s;Z9q9ZdK_ z|4nIo<0u zmX)Yv@+I}R#|poXJFT$Z_V+o<;`7#J)jr>KxJLSl(;@4k!sbu>+lu=q)A4(F_e-UX z>f96DJ54Qt3p!HuTr-c!^7_1V6hBYBYW#Y@W7!?2+$)9BPXeHMAzl?k>r`cw0q0#dZyG_E-CRWvk> zk6iIBo?f0d?4OakW`5RMBds@6hsUpcdY!M*WktA6;a8;;9DHp}rB0W4yt7?1+DEDYA*u)bgvrcAi=s57zCsj@;~;y=Czs)SGq7 zr=C&1(9P%+WrW~U=y@I~^fiD~Dzg(I&+`5iiZV|Ha4b>&1 zUQuH(;A?kH<+}MZ?&z5XgH_z)C>NH#ddrcxkr}tWaSHHW(#mQH3o7WEhY}%^FVcD_luHZ z-((=?Yxd3CKH|i%3;nd;$An`bSh&Y{#e2r>cE`o8PezKe^SHm4;Cs1-qF$Y7ama-H z+kQ@F8iOrSUcOT%4stIjb|;l6wlu(b(A~v;?M=p2eH(Q)sEV z+}Wa(sR zOc>QTMQzRO->+_SCQ#3L;jCX)g)SMKuG10b6A=`6%BR%3FLjpPQh9khRhcez-nU5bc{(_w{mshJQghX-jT%9`%#9^gZS&Ah|73mc1?7z? zHt_Hi3oqIwbk)^ma)HxC-WMqHN?ih~dK%ToT5F(SbMoTA9M-*!2AkWb6`jNVPrP{> zkvuO^s%N7)JuQW?X2df)tK@EbKx~MZYfcwmtLl0kAg-j8Vm!raJ7$W_<(Wv@%xbP16nhL<+sv|4I2y1%Cb=n4_E7*Ya9m8XLs_7ldf~)@J+bwZ zW>O2oC)>aA9l3k_bpN&Zr#tJV@|8lBs0%EV^lv6z35{oRc0HCe+CMSg%=t=q2e&wE zlEafTN9(z#tD|)M&x$65PxNTMf9?`5zguLq5x1@E7IA(doHAIi#7U2GFDTa@T<4pW zx-z57Ra*m<7ErqiIPyw|wL0vl!pDlIe3LSAoC@=9Y@&aNDwWZ1jcV1uW5CP7%a7Vo zou!@>glNI{7B$byb5nA; zGI(qC=Q`DFHFjq29-Nrx-6;}>wOUl7{yg4LwEpH0HP4~uJo#k#(>6-y;xp4qX1#}x zGOsv^)+@|gm7VtNxhNz#{bT5X2a1Q4P_IZU89Vy~-mNpd(hC;ZjUyUeRql57#;c|i z+D&m?F}wuw!_>3vD8rJcRY$rP#D+7|4}5AQ3I+qp5?0O~+JA7f)Zz@s4=J)Sww(b1 zKGM$~X9{L2R!U{Y{lckJY^)1NhOiYx5&g^TuKNsV#4Z*WYRV1%RlK2bGMxnO$e zuaX}h&wXs2xXi-B(k<|L!d~eObVbp;^fRZJ2VKoJ3Q8d{kR)C9gI6-mS1)mw(8D3d%&r2H+#aK;iSw*grss% z<`Z|R=w$=k_o~?1JHxZp%B*)c>Kgb*?VWoyQY^{Zql9Ghb_}zw0ha0V|I4!le=`3Yg|(& ziM=mdWLG=cT(Z!z=W5Bwsi*qLcoxg@{F2#<{mFVRDUt!3-Muno-l!QYV%ogC;(H?^ zVZV>D-Py-`R9~yrYGiK;G1b&`*H~}Mk)CSy?76a3kIe;B9-iwu=dk<)HNRAa6xl$T zvPt6fa9Jm|zb6rH>PbX8l%y$^G<57yY#j0a`k>A!OJ4Gm4qUjMKDn&ztVwKlc4AtO;yceNc)%!c!F8D7clfX({Jhia3l9WklVfe%ww*TOU(y&xMF zSL|27Y}9jK0uQTM*{roI@_~$|l4*hVVf7=@f^gZi5UolJW>vm(09@8qJ+<>LmDf3J zJ6&ra{*;eq!x5{Y=o=?$s@GQMK3>%ARbZ79RFgMsv~blq=?90WnG7fRT_44JGb2vy zO>Yl0zbUYV18VZD3#d$7m-Z0zaZ~JZ`?pG_KEpx1snXn1nX1fP)Z0OR8EnN+nX=5? z4WBy{lFTWX9>;r2T5I$T?r%w#2mJdVPQ2KSWqF-wN%Xj=>)Gk8m*kMsH?CY_L8j1h zMmxo$jTx^lf17=|am{M#kloR{&e2*?qR9uNqx8e_+jb72?zndMra>2XZdoT>&DvBY z`b6?dsytIUsrpI#QpPE_3$*LBRFsq#@k+}c=SRo&rA8;O!f$2RkB5;f*(o7avandE z;YPbiG*eVNIcrbLheMA2S)Ch&d2X|JZ$9C?r&XhT`=#D3$!iNQxwK6}P4yK!lCPZ^ zGG5t{(iGR58WCIRoh-69@>s_@Xc3A^PJ7H7Na3bFoRRdQ#8=PH_e*3=SflvT0DD2GlLJ4xqK%ywaDm#`IQOq2|6x1HMi-T$JVO zI^9zXCVH222A0TY^`7C~4!ESqt1Dm**-Q*Ld zx~)^MTJ{nLxH57E0gK#g6xKN(8geMj{muJ=1@Ayp5xm*Rxr}2rMzt9)vYSY#K%@yh;`+X2VLmxo=0<;&ZDIr>0`h~OF&W>{#T zNrO!RsXntDDr3@Anv$;<3$&ZkBU^UyY%VE=h==Hh(ZJY(kaJql&)~Nhf(?RiEgA7v zxumGfXlUYAdG-Y~HV#>fGK*uy&){A1zQu8pc8RgsUl`5JT174J7G|lh)ul!S>x&a= z1F~J}nT?O%R_$IFY*x|5vC%%XfKz>NiSgv%Al%YIPqD5$QC%e9mPyAA8R_ekWhSMj zPEJ0OU8mb>5t4b(l&3hPE*I#MBHJ0pH4VDGewoH12#UevDFL2S>`bS1JzdPGtO?I} z`zG&3uypXk;fN!}_Z8AIvxiO9!jI6j&>9KBvzp-WB2D852#b_ChC7uie9iQ#F8>Vwp&WbfDXAM8yA$G4eWVs|PPGja%h>MHy(VvDwIoF@ z(7d5(Xdp#)rKO#QU9#9-&kY?qvs`N+Y2AXfi*z;b$>WAOZ~A5hPi7`@`lknH*BXV) z5s&VCIAYx%?m4$zFKt!(w&L;9(F?*H)0#z5wEmOE=d+esvpdvVnIUR9YIA1DCdmgR z>$yWl=`HfEl8#G3rISPnT@&;qwdP0_J8(5_+rg;bDd|XUXx25#EUEMJG0AB7+)3PA zI*0R-xO#eb?53;crPmVN2CN>WKe?YK6YGkooP+xAdx%Vwzh)6Kcwt^~8 zjI_Irvl;1(6I*gEGX;_2q#GAMKN=i-;WBthoT*|o=g$82wMH7JQuobSxwd^xW`UKA z`bWLqSj9aH4|N<=mf;)@xJ;2()N`e2*@U&0+z2$M?=lJq;O&LCio)%w4W0f*Nns~k z%u6ogogz2MxACPFHy@+}wYh`8d1;Nd3@Pf37`sl;GpcH~R~(Vz;rS-XMy(c)tAafJ zlUW_&=KR4r%}T}Y>T5G(-pt9ybMLu~)X&*jJv`Ut(bWQjopcpxpLG)kY7Y%5FSI|b zbe6uGdpox1K~(@bZkP3?I{QeM$_Ayu$>0e!ubBP44V0f#23MOE zP08z;RN!F2V^qTD3EHMbW4GQaw~Z?qZ?D_Xsi=57XvxK7qa;5=2h)Jql3Fi)Z7j?u zx~wCiq$A$aj$XY+Z%QUdo~pqpleVSNZLlyK9T7^O6)(*znfdix-Kt9`b{>zGE^ECm zOQ;2||0P{qQs8A|#qdp20vf3gy)$lb5(K8*jnzhy(>e~L9_w1_d>9RlJB}Su*0xzZ zxbaAs2V*npMl<01E{xfBnWemEXZcGrWN_kwo*i9Ngr=)sGCH}tblf?Cr7tb5`(UyC z(d$pCDTdKyXD`R@tM6Ri=Tu#|;p{cyouyOHpkd@|a^Ae^*^)&u_$KR1mXeg(h_Sun zB&{D2UpucKx6ZlIb<6XkQ%_iL!1c;yG3(0?9jfvw{Cen%9ldWXf4rfsXYf3w+48q&KxXeR*zNzJ^o}pt=kBaMa%M1*)Y>#Wcw4VLaK@^~Bs8O`hYCLVK z0IguCx>FwuL|dvmLY3Pc6%SfIev0=z%M*@n=%1=SPK|1|GZuR@v0?@#{k(Kw+w={k zdZPyPpf7!&7Qfbcvd}21SYh#sfTZlWFP9z%RNR?*%DVScvEAq0Z;Q6BjWjqd+7W3t zPwtxAIZM1hvf=zW>y}S(ZJ#fyD$MT6A5bZncq%vdJp9a+UrdNr>iJXChU%?9CT7*0 z-XCKb8B&RQ*=usko?Z1;zY#;MY~nISTzLgf`R+vgZpvxv-d(cN+ZukeYpMLYa!&g` z5`}#>r0h+2e{c5{b?H+9Tbjf(r2EjK#rv9bRU-rpWl@_VlF_@w3a zB`R{uurNm*`g_akk&~D^%cuf%a#9Fdw+MXf13j?h`wE#9BAF+?hQ^;^ayy9J4DgiBO(^z(7Q=6sr3oSM;~ zqQKv_Fv4T|rDqdw?Oww4o$w9mV|+vMBZB)fJ~liF-hKgF;lY?cV4Z3TcMD>34dZ@~ z{yN_JQ1Fgvsj-z^RM~Gx9sGuf)W;(Dr5UD?p@P`RVWq2f+4Ca7$^vsa6?x6gy~(V- z)KYUfPu16AzuY6V!}N}7*OW52_tMTUO}_DUq0CuN-X3PMXqPq-**xchrOwySiT3#9 zT(~nv`HpI7^{fIJrgMZA(^=T#4EKoJHukq>YS|Lz9$YAg!?C(;E5YQfX=PLdwaVbm zBK4qFLPiGeun~!W!E@7+;07Dcp2=xRHRLTeL4*tJsLm$B2yfWbSdZs2liYCvegTuA zW!uVt+kqIi?H3tL=QXZL1T3Aidt9COI30JY+mPOQcdqAzWuRd_(T(iv33Eo?m|1^l_#`ws>pX zOyz!s1D`gm2;P%2DzA0NF6{a@!CCB{C%h9B`tXUTvvJ3 z*kkPb4I`(S$vFDGPWQ%{5!5aO2(5WEu@B8chzbufJw7$cU zkbiwC-guN`{iouNpD2L%9rxex)LuF5a@ys#3%()oZ?tFp;p9A6YBdTu)CzD2=iD5qNJcYX%@FXfJcs4FP$qK%1K%f5& zfrsaQeYhzCp2<9a)JZ?{!;aC_Uw{2l^$q!kzz6rM`{7fCQF7zm-YbyRFsq$#3L~6W z6I^WXCI6bG_})%Ta7n-79=W%s6&L(>%yV52tKeC^{{+%W^9SUee}g0`kgxEqdsnQk z{=nS(Y3)7l^Cw;yp8W0ex$7@Z{@nkSa2%uQR4Q}1J*mw&YN_mrdBsJZeFddHg_1rS zoPJ;)ayfBt^=q>u@6}3=&6N#w;tHBq7Qk2F${wl&3scJLTvo&WyzS)j#6A1{l*D)y zM7n)Se2!gNgTRrpI+gC-!PSSo#J!-SA@^2SJlM{5_${i{_;`nX(VC72`%?b?-GT=5 zQ0tfLnM?m=Y)vapaPIy8W$f#M{qX(y?EF$2Q;&CVMD7!23>WuH-ix@mboAb;(R*uG zlewj`Bs2Tru-T#QaZ>&OMZF0PX%X@u`2>{O=nQSc=Z- zx7WMRgq+}%w~qz!XRt`dKW4$tl|M@U%L)gha&-AyzD5MTI{I)cW2}krpEUey9S%lt za3UNPuu-Cw`d@7QwaMR>Afm7_C@xBHrT!L*_Ah7uwhk8&Qh!3VYX5z;e*`6n@SK)( zN9cE^LlgObgd&_h=l%AgMDNN)eg6L|6#8+8N#4}sGiPm2_*mxV%-CzF0=Ko#|p{m6*Knl(Y4%KYo>axtDX#^EFO8oaaIPuT4QdXm@Q&Axz zyOWA^QHw-(;O8OH==5PJF3$Kz68&KmQC7n!98@5IOVdyx4PzwX!dZ>P483#-oMihy zpdpjgcmj?r!p5ap2tvb%B%D60KV4ccPy#2A{vS~P2on)t$fU+q6C|1=*EGH~){XE! ziCQATcwZ3;~ zpz4;uf_LG0h4{sZBE+e8+UtPq67QKp9N^>Dy9hX#QQ z|8?fGfC+d91mF*$01o*dA+r*}glr5!nBSphgrO{Rd~4Ew$02CIAEmHR0>Ky(0EmLK z6c$b{X(&YkBj9XK0{;#*E^IH0hOhY>N(AUb#puwMh9O*%9sy`DNuYEZ4oeC=JcNZU zLP;hfHA;&$cF`IYOlV~M7eF9G$}5x@qesOV2+9X2Dk|XMd;}G;ad2}{7zrg2giv=h zo}1rD-_gkbD-;K#lbRrO8YvN-jT3A@BV!5(5IzL50#RSYA)%7Y?yHQK|Ki>#d$w`- zuTbC`72`{w0xpVh5QK};Aqp(W3V=c=P@e^R8Q)on-ue1PP54hxQCJE9ib|FU z=l0y6d9*O5@h>>A_eWX+0%*eEAQTof#UMHqDn=nw7evD-66p725XM$kudmRtzRQy! zk^eM9_}B<^STc(cl#CiUD}h4@gj6WU84@T0KC)5oaI&E=!0nRNsQ308ttRN7Z~zvB zh323JLQW7nAq(Y0^f{P-gD_|)pN)an0t9u^8G{Nd=$x;y^UZbX(!W4)e@IONfiED7 z1kRTL?@$H|4iE?q2CRfE{0FNw)|4cY=A4z3Y21h^p(O)^VS5Q+|)9E1*{agd*^y1ItA$I8wq zZT&MVAkTvSOG?4#fJYb~!TFGBR0Kg#SSKVff(0E11E^)cldKBXK2seknx;K7Py5fT zsH8=b5;TWvzVGxPIVCXgODKUuRzQD5AQlLgf1iY!fhz<)Z3!o~$$j6uU86ZjGcpNmnzmITH?m<8*{w9->}RN?S=@l2Y!Q0FHO018>) z3(BBDO%R8iV4crGg;W%dUqS?80Xc?2AP^dbP$HoOhSJgNWTWG!9(;vq(EeaWDgaOd zPz*o-0YMqyBZqX50-KOgRE(S@P=ZbIppG@P?j<;=KreoO916%kXFvdV5P$;fLJmTT z459%b2SSO06chwxhs3}I$OPVZsBoJF-;il3QW|UK{Tmhs2NDF-rji;#13ne7P(FAI zL|NnvotaLBB@CnZAGGqhc(PvnjDM%a#tC4<#)L4MfJqMN5+5Q5$h5IUhkTVF^A(|i zElSsSS`!ct7D79MemY;i5rZ4~d(8I?09ChM5 z6jy#B6;(QpPpi7j7!!+JQpu1rxF8uy_CqQLy&3^GA#yN5W=Npq3@cO&V3U79wHfRn z&d*>L=(~-v0+n#6Kmkp;2*Sc3lfJ7=XQ6yh9{~`E93~vo4OaMUrjYYJU<{k7JCcLu z_Mht4+i|aYLc?$GckF2XhD?Sxt7m-ulzFai?X~*>CZDETd_y{bE$~DTP=L6P^K~r)CN%`;{YpO6d*nhrNN^H>U_YIUyCW>r7!gpM_(|d-5f^G{R zX*DV0BH3zBuE{mfSqOrVp+!JVa(zq@+8?x3+^caJIQin>3=T%&DiXAQBJz@8YQKPu zs3eY)NJkN_mVnwonJ|mw1I=k5C1+?5iZ;y>icaC8`X2rS zTqfzWVB+OomezKfii8+V<7>Qe?VUVo3_M6;5)exu24O(>P=uhl-=#;kgqcGIp!Zr# ziLrzbK=43c76$()up~PQnM`yEm@xsFsj!PoVzPs>aX4>E`VJ)_qi8-;^a?ru6N+F# z#-Pv^ge9Ok^kW3&)4+FB2;Bzw&_D_lGLMh|VsI3i@Pn1armBf^8%{LdYyUjP3R)q+ ziUD;Xy=WMpixLofE)M0S6&B7P>+Vnqx+3UCL6|ufV_K;>ZqZTL7LJ8!)R9melmbd} z0R(}LN8ym#j%79=AOZ;x3UU;O7$GoG5djPGVM5-iF{p_6Y*3Gi6I;hvv0-FFfeam1 zSO{s9MUJBsHp)jJ*Gb=D5G9~5Q4t}4gA^QQ4sQ%9=m(T=+t>h4MS(VGLg#>0oWa6K zcO-xhEZX z2(C1y6%oYG!+t;sN!nvB04$h;lp-r5d<20U5+XQc2BaOt1(Cq{Y>WvD?$Zu2nQ}?p%hX{Ou(L?l0(YQ2tD~Ctc~OLUcklp z-;2M(z;e*H=l#if%4nV;Q#%Cd8QNS21$`2?|EF2Zm5Q2jPVc@{0 zB0>ppjdT_Pskvm*f6pa=1$@{G(FBr^5|E+@hnZhbvLcUT+87-uu`oIZIFLA?Ck!hH zL?4hLE7%xl4grPSph%z$@C#;gBKJ}_6S5^pC<>cgk~56#kkT9+q!5q^g9;@uIu+;B zPznv0U=*-IMPMQ&g6t((VGJ5M?^GiZkbglzszCaoLK?}RV4=_o06|#r4nj#fMNTLI zB^(5@1;|sl7@fxaPgXR1EMYJN9Hhe7gi#QL&&2?WKyV=kV*o2y84Dkug9|t)C=W8i zxnCkivJ&`V7ZHuw?%f0%v;|`100$x9BN*rgIFQw_PH<6h2Ph$sR1i=aMoPy;`CLGw z_JnE(x1M7jPfJff65x!73G^3w9AwdW1<14L{$WMYxb^U=amOIve40fHp{s z(Mfz52ynqzDhSvhItn}i3Xwp-B7+O{kX&sh}2 zKal4`1u70Dpc|coC52%!I%BLLIcOMziwUS0g9CaZ6yN~sP?d}D**N&fXCVj+(C$3iJwgq%1yA3=dUpN2tn5JX+3 z^~CjkZLGP}YA6IKD5GHrLdFP~P{1e+0hb|;d=LaG05TK;Jqa?~fuWF!14#tIQbah) zY3W^u6oES|ln;WCl-FxV*UgNPHrmIEso=ue@dkYlhH+!s*x#l`s?gib>c77m{B*$5!O3>D}s(yow(GgycK zpr{Ca%p=f~!odU(4hfvXLKs|(&Y=Jfn4o}kWKEP$BR2sb`a2!e1M(bj0jz+Gkd0)L z@YyKD1%bW~3eZ4C5}!du(s06qje<&u1nfl^VD3AA1m}YZU=B1mqg%sh|@yLP+BfPgvpNumng@2tmN? zm`J2&Na(wJFU~*wa^l{Lb2c6vw*hTT;LN;8#ptv;h$lj$Lwz9?Wl(WG#2n~zffu-f z3RyUK2_YqQl|XGcl|8QC5OZ!!!hoN0?qVjs!#k^nr@41V|0kinx%W2&ZihLa`2y~X z`-TM738)z489|c5$?$Lyx&$JWz$ltf(Y#+`HQa%7qB8z`M_-)$h!VF~ z&5m%qT=Qsh)T3V>l&kJV!YCVsP645H3pr#!5eZB%9w*osct|=4>^R^g2H}HzfCva> zWK~$)9fckr8|o77$k?*pcvhuTI2Ng3nu|e338=_LHaG-sVL}&-fb8Nz@530d!a)UW zj1M}ppcA1&XIUW?r_+!K8ZI1!-y7()UFhAvQX0anh zEWd@td|}b6IPrzC-!>$FMxEaO4N)43U7p)^v90Uu#PZ-FpZ$mG4DWoH-@JLbLPgE1 znvp6OH^;WFvnkycI zeU>YJA9>`+dbcGmQ0yxOEF=Np8-!c^+1tWv=~8=clkD(bTR z#RrppnZdHNjrYJ0rfL@t>t7-N=c-X{=<#Y(CV6DOst9kTy3pg>)r?w|nz1??nWZ{Y zCPk6EXWInGye_Iv&vI9S$u=mMHv5`#&}NT-$^HSx#`7jrs7=0n%|%+2DJh*nx3MlU zhABQ@Yo;cRo|ulQ(^r7QdXGM)w6N8Tgddv z_>Ac8#KgqdVd+T+uO|K?Egdj+lX8H%LHshfi`lYC=g}`iN%>g+k?i=+i7kzdBVxC( z0FSj3eyxdE>3K5c+04kJ3-tRcYo}U2JvT#xAw8@o4mLA==6Umg`tj7_`D@=S*wJ_1 z{#Ciox^lye-y{tkyLR_&UhH*q^3s-dc}LSCvUPgme0yTMyX!akXr+)9UVjNZ!0xgs z^6A0|OeCMMOKp(1$@WS|o%ncvRnW|XJ&HFX@2->@o%zg*Ie4{>w_K)%n^#Efa^EW{ z>3E6$>Q&9FI(Q>Npv+e+#3Ek65teT9z7~o1Z%2x^_;@LtzbmaA0$>4Gi(s3~U zpg%|gDR&V!MzYWNs$Ev&Y4cIg%O4e4(bxqm_ejdg<6t;R08hSS15%X3@Ktk7-D6@S z&0s5>#qF%hHYaMUIPKFxs)ln&4Xx@2ierkTbu%pe6&$P0ec+UUOgO>i9P@yL<{s2{ z6IOEiRhS(#S98W;(k)?#@)LcA^Z{SsRm3tO7$LaNL0|Gr87*NQOR}FfQ2L0SOGv`^ zj#03ROpXa1m)&UTe$=GUjkd{#6wq^zH&_?HuH89j9N-kGYc~yyC2UfEfA5)fCX8 zHCB3cHtbR`s=mDMb}1)t10+aG8v-fFdOpq)&{P#lOH20xKfRKYlJZh@9lKYrUhO~s z$3s9sU=D#milcx{`!leMj;hspWhHGax9@(h9DkZ>;!Uvz*AUso=-B7ZQQz^{ z3Vt$ZMJubK;=~ieJT?q^=dTwPdErvoA z2zGAeXckNU{p^oNEB!UME(&T95H#{sQkx_pU-o&{8O<7A7I?q<24`F5| z%+kK4ik19oEy2FUF)Otzr`z!Zphw{|jNcec3Q_8iU&@^KQ-#v((a!8>WSA_~6mzqY z_Tra$IfVj@ybM9#zl3>^O!MJk>t*C{*U?aakzj&%>5(#s?$?tr1C&m%=2Or;(H|IC zvuK0vu~t=!N7By#kf8Xiahurx%a8Iw_?9~H%~+_Ei9~JXr;ILIC)#jOtUZWNf+DP3 z8KtF}Y+|{=GgJY`-%oPJOzjWMIT_%H;2==E&G|=K{-;pvfgl->$zWMMRKBwF>u&Iv4!97ga6Te%=9R zAM($ufna~bQZkHX&+gu}$7k-|iN+`GsvKPU=gN*;`mf3kJfA)9B&Zw`MX_p4T$}6r zucbzCfJKHK4l(>I6c)Jbzf~w@=RjXZDsyqY{)e_5rse{QBezHbJ0p}K|F1gc7&?_J zN@h$-R${=Za_>er`eeaU+iZbLs>C`FS}NVL?^^94`8&-z{xD0>dz~+LPD12&8Gz;n zyN9k!((V%{F546*tS`e|^w!v1M};|?C%la?>c?(K{oNn4#DKZF!ufT_Ut%95S_sAt z3C1iAzc&QAkrGV3_k|X+F)0@PURB(kc*b!?^n|!OcBDzW7wo_#o?i9k+T!-myTaQ?(+-hIRDe%zUeM zz3(Y@=aU!!dl{Z#FC6R(1lYgZKVdK6KL|j*Z^YFTTmje{RQnh4!aXD2@!w!ShF!6@ z=QZbTx@lo)y$@lrl)Gtlfg#se%vj9RKHmENrgg2U+#et&eVH$971TG9n+w^Iq8u^` z27B3nrR4xh8XAbZ@P-*{e6JB@ZQO$ac`it>WJxO+d2O1XKHzni%aZmdaja-p4fu*g zc{-IV(rkG=RU-oi6gp)QtL7t=@PJIplLO>CF?qWX3bM^oklhQIGtdShta|x+?-l7;QfDN#0AW?&VEgaygaq5{? z0kp5b#?rs-2ATge{ojJ=@BxC{TE`)XZA3_cOCky%9@#`|pKpw<2VieP>SqAX@w~%9 z(km2ZsvqiFdG$bT)5e&s*KE#)o!xZ_p)f8wh);r5EXOla?Ijg%WnC|pGAD60A0!k- z$luzr#pkq>eP)1V6{u!WairMgr_-v1jIhv4?H)$2VB$*x2;kH8D?0ysv z6a%!drloe>XsTLbe%UqS9G#k`j(2Ur+oxfB4Sg%{^E;bpAols{x6Q3pINPVJ$%~U6 z$DaPWpr}E{TT#FxZ*sm+uhm9)Z>qjU1uI6cx-`DNs<*-5hUnK=g>}E}#1spMy5v@( zj-|uXn@BcxMhPn#P?Gdot@qoS6kJ>$ItA)7Fwg}^p?H9_`vy(NGW^k}7&}d+1F-Bs zdG|?J*jdD4&vC=q*wK9~K}cZ{y)>?~Xeu$n{*+`yXQ!-K!9#OR9JX8W*jbbhl{plr zy}es81y(Fjt%f69RBJ0RYU7?ErAVPW{Zs-+jsv6Oi@Rd;Azk zI8@SrGm0@lK;!ILgl|FC5gnR4NtY|S^vV8&IO}J<7Zw{4Ya#$=PZ8=HXH5tF)#NA@ z7~xcVF@jO_2~!mZQJffEOPz6NlBX1-Sb$^%8K7cSVy#q zIn?#WXSK^YZv17w?sCyP9v};=S|CeGk5IoJh>9z`WDjq6E~>A9==yjY<$%JUlLyt` z;uQ?l=ZzJPDb0<%-ILTHu4&@ok7iMcY%)KsI>GWbzjoFWZgp^oy|wf2{h`NF>#YkU z&Eb3M<8MO!DK;`xQid)ytg~Pq9*0F0{cq{N?TfYsT!qQRovzt3;ev~*boA9)CF{Fa zh}rNx>BJ z@bsF)kI;dY#LQ|P>+?o9JBGtwil9|+zeGN z_L+wBdiw#&mA;+YT1C)W1>NWNbY&FF0=rE&Wuz7g*m=<*D(K#~qMVN$^?fVrApGYp zu{y!jCIBl&m}4Uit6NCe@hAsGNR$69a}o>PlF$?=>BU817PS$eiDFM8g$q-kHk;tj zuM2((WvE2fd0R{LsgRVaR^=<)*EeC22cC!nVK(Ws^;jThy6~$tQrGlK zi^Zr$CRprxdQER^1Y`3}vpSxO{BVX6VPtFFjph03{z36GyZFv#v{oR5Xu`sg@TC=F zD{K7?7TTD%uc&}C50sVFG@D?bEAY zPCx)6Ft2!yb@Q9lI+fZl{LUd(HkC!>Y?0JjiPg=so1$h!Hs9=`KE@A z+m*+X0OHr;0piPQ{!$zVw-W(OY6aL%3meoWPO{^avNlPKcU{0xdi@Y~TX~mDfJ;Q@ z1JbT=yN!{F35Y&oS6IZ2rIk%FdgBQJ@E7^PI`t*HWj(TbU2=PpJF1b!Y3L40q^dgP zom*(nB{kBNf=iY)qpAX4C^Z+#bMUl$Kh9rIL1wqs)@fmfsd_aRifLo2#h{dk_3Rvz zu)`m|%z|lOE?Lc7>8@$zv)AS3O#_MMx7PgtkQX@<^+Tx(J7fzv;tJ!5q-R$i=L!%P z6Htx!?a-O$C_CDmFiVG(zW|_ru1RTeEiEmSVwCeHjfq8UBslT90p-cAea6!2G?E_3 zG=FANzNRqKQwS+2ncx}cKsu}z~u7e#Oof=ocq!@k@#p`1Zse|Pg@0eIvyMAakK{*#buf_g{pKzNG{`^*SKIHze zmDoqUjuAjK`lgY*K7j*gfgyzr+=f<)r45vko<5dWWBpw&z92+F+t{2I>;_S$74r6c z?-1*>LqbZ>UYL0pTF-NSsSnQw8Fp969nMeNh&L;NObJB;2feTntbRYPO>~JJq|G+q za#xJ}@Vs|d-39XNwAHwN2n4A+Z3YHt9Qspsi?p~l(O3YJ!{4x;f~XDo$B)sNiVot# z)3e!GljyT|!-0v{?7f*{bPi`Izl?Jec?0FeET=> z2OzK@TyF8jlUVNF;~yB+&3m4wz}%sKBqJ8TJAHNkfqfDP+<*D|!#{(4kWn8UFEvTe zCd9hKz^(ra%<)!E%Od~43=a{MK4ZJ?E()CI>q#> zwpY>N^rZb;#Ol5Tcp@{@>8xgw#Qd$dFVVc7A2&HtD7(^!J5r86Fi98(9uj+JDr>(1 z0|FtJMWsvuZz?_?@7dZM9{xM%yNRqM=G)ON&gL=$`fG$DOW@&(M)->aSiA8FS=h}T zhfe(bbsXUtaV>o?ThS)4xU5Ka4q?W?z6n}?tM=C*goObN!m+0j&I_fn9@q0p%42h%-GGwyaOCxZ zeIsmmhC=(%vXx}X5P7SlekMtZX= z-JupnO-e4!Q$4QVEsS_nGRV1sb?j)%t>h-viSiTTtVX9jq=FWs!}(=sb5Sy* z1@vzvzbVW>OAU0QmaY6F=jHV?tXyVKqs;W=r<(8MTN|H5c8*2QD&GqStgY_c8RgYXJr#X5*bor((9BVc%_%9yevSou7FppF&n#J^Qf>j4j#Kdpnby&$G z*wkfru2pldB_kFqruo6-rj$PSqpfw)NPH{)(I*HqE$!!NPp$<4I|C2&KF5Ak@xKC! z2mPow+Aafk)w((&)|{!4J-@MHAtjqLVTY^H$4GM15{D6k2QdK-BX3SO@z}xmEk4QV+G=BIpCZ5i(%s zbE$@Hzbb4aq?ix6in&H$4T#CdIL67EBXfDzZ<*R85Y&Qj?vNLzaR?S_R55U-O#Hro zeR*_kJ<56gZTL=h0WMF|YQ>vUe=WewO8K^brev~x_^ybgoqGX9IC$@GqS>yz(S0_(-}L-Nx+i|3yTi1{>9OUfCFK4AMC&hsG}QLsbr zJQ<98RgqwWSi9!b1=i|+5sxV?dead5?+m~G6eeZmPxTcexbZrOc{!kXnB%symK|6$ z<}&J=`u2l3Y$`$SvtYN3%EYvUNJrv5gi+kILSvO1nI@g0_{c`Sr|m0V(cdRN$p?Pv z&@e4!pGw=8-o@C%Hdzo%w0Pk=8cACa6@}$<#_la$foHKIRE`!l*O;!nGR zPic0-EE9W7aj_on{mWD3Q}lovLpQ~lqO&(Z8ujk`)$A>WmCOiuP8WS~^6K4Sp2_Nx zt-CK?_hDKYMi`KAwKpW?+uBXY{?DKjQG^qgKFoNZ^f71PE~c&TMV2N4t^3;6N!n7K zF}KVh{_ZOXPMAol0;lZW(2Ew4E&Ro{?iGI}CsJ+h)xf$TDwfNOT%w!gM+S!YnA_P_ z4JOYMTtv9JrISX1vuYoAKeqlA+zP4w6@QDB7l&;-U2W@b#rY@f-+V%3aa*$f@n9eo7-{cT_Q=I4e`uA+@drZV; z#uH(nUXmM7xA2J?$5IWmXcj8E#u%DYBGsZfk|wgq6%|E zUt!Q0gg^3)asI3{UR&P!3K@aJDdQyFURB}^w0Ut?JS^SvIru?3hD5>Ou({|S`W=@M zzFKZw);hK$^vV80%;2%N-(E4K%m!u~vEdSX3Na*zv@r(~%rXbX*5@Z*b|#ANf^p2{ zd3_}qz>x~GJ^DG9ha|U6m_<%4hs4`u}SDIUCJU`Yx=?$UB;z%OPsc8n8?GBbOTV zfsXw#X`2>nK-7)*x9z#+ul(P??glPC@tv!F%B6lKm~H)|pK*2R?uS;u?&ifajq-|N zKs7O!9`z3l9ZA5z1h!;6BHPCB@OvRUtPMxIaZVLNwL~SdfNqEoEMa5C<=RoF(y_GZD&^AwUE`; zUP*(Vp&9CuREU~4hINQ30p(V3$021@ElE!txuc&$Os=_evv(I%Bc|JuX-ZqRt%ry#KGu|L2p+ zSO0HA{v+}KklIImVIo5-ia;)(g7OxRs89Aj=Lr?ejiLquvE43TH8*gZSk(t#PawQ~ zpUELz`5vshgq*x+dm4#KiVx=6iyn#57!&yDjG`zY5fTI+gI8;vzk@d~B=SM?!d}!F zs4ix1H)*_tIU zSw%ocg%8=6b}
  • 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 kOiYe5T)e4|Cm Date: Tue, 3 Sep 2019 18:39:44 +0100 Subject: [PATCH 2/7] Proofed original text and added some corrections --- .../2019-08-30-civicrm-mailing-validation.md | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/_posts/2019-08-30-civicrm-mailing-validation.md b/src/_posts/2019-08-30-civicrm-mailing-validation.md index dc670a9..3f930eb 100644 --- a/src/_posts/2019-08-30-civicrm-mailing-validation.md +++ b/src/_posts/2019-08-30-civicrm-mailing-validation.md @@ -7,18 +7,11 @@ category: howto date: 2019-08-30 --- -A couple of our clients use [CiviCRM](https://civicrm.org/); one of them uses -the "Mailing" features to send out emails to their supporters. Apparently, -they're facing a bug where if someone sends out a Mailing with the same name -(not subject line, just the internal identifier 🙄) as an existing one, it'll -freeze the CRM later. +Some of our clients use [CiviCRM](https://civicrm.org/) which is a popular open source "constituent relationship management" platform; +one of those clients uses the "Mailing" features to send out emails to their supporters. We found out they're experiancing a bug where a user sends out a mailing with the same name (not subject line, just the internal identifier 🙄) as an existing mailing, it'll cause the CRM to +freeze up at a later time. -As an added challenge, the Mailings feature of CiviCRM [now uses -AngularJS](https://docs.civicrm.org/dev/en/latest/framework/angular/) following -a recent rebuild, and there aren't many tutorials or examples out there. -Luckily, the CiviCRM developer community was super-helpful, and we managed to -sort out some in-form validation to prevent duplicate Mailing -names for our client… and now for you, too! +As an added challenge, the mailings feature of CiviCRM [now use AngularJS](https://docs.civicrm.org/dev/en/latest/framework/angular/) following a recent rebuild by the developers, and there aren't many tutorials or examples out there of workarounds to this issue. Luckily, the CiviCRM developer community was super-helpful, and we managed to sort out some in-form validation to prevent duplicate mailing names for our client and now for you, too! ## Create a new extension From 4aaeac1f0769eefa3766942c7433e3b77fe323b6 Mon Sep 17 00:00:00 2001 From: georgeowell Date: Tue, 3 Sep 2019 18:42:35 +0100 Subject: [PATCH 3/7] Additional proof tweaks --- src/_posts/2019-08-30-civicrm-mailing-validation.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/_posts/2019-08-30-civicrm-mailing-validation.md b/src/_posts/2019-08-30-civicrm-mailing-validation.md index 3f930eb..5db7dea 100644 --- a/src/_posts/2019-08-30-civicrm-mailing-validation.md +++ b/src/_posts/2019-08-30-civicrm-mailing-validation.md @@ -7,8 +7,7 @@ category: howto date: 2019-08-30 --- -Some of our clients use [CiviCRM](https://civicrm.org/) which is a popular open source "constituent relationship management" platform; -one of those clients uses the "Mailing" features to send out emails to their supporters. We found out they're experiancing a bug where a user sends out a mailing with the same name (not subject line, just the internal identifier 🙄) as an existing mailing, it'll cause the CRM to +Some of our clients use [CiviCRM](https://civicrm.org/) which is a popular open source "constituent relationship management" platform. One of those clients regularly uses the "Mailing" features to send out emails to their supporters and we found out they're experiancing a bug where a user sends out a mailing with the same name (not subject line, just the internal identifier 🙄) as an existing mailing, it'll cause the CRM to freeze up at a later time. As an added challenge, the mailings feature of CiviCRM [now use AngularJS](https://docs.civicrm.org/dev/en/latest/framework/angular/) following a recent rebuild by the developers, and there aren't many tutorials or examples out there of workarounds to this issue. Luckily, the CiviCRM developer community was super-helpful, and we managed to sort out some in-form validation to prevent duplicate mailing names for our client and now for you, too! From f1d93b17191249baa5b5c9461154577b9b619c55 Mon Sep 17 00:00:00 2001 From: c v t Date: Thu, 5 Sep 2019 09:26:01 +0200 Subject: [PATCH 4/7] Bump Ruby version --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index a1dda40..5f9e9b0 100644 --- a/Gemfile +++ b/Gemfile @@ -1,3 +1,3 @@ source "https://rubygems.org" -ruby '2.4.6' +ruby '2.4.7' gemspec From 1ad7a4368dd63a88821bc6b12f59d0bb5c48110e Mon Sep 17 00:00:00 2001 From: c v t Date: Thu, 5 Sep 2019 09:26:07 +0200 Subject: [PATCH 5/7] Further edits --- .../2019-08-30-civicrm-mailing-validation.md | 45 ++++++++++++++----- 1 file changed, 34 insertions(+), 11 deletions(-) diff --git a/src/_posts/2019-08-30-civicrm-mailing-validation.md b/src/_posts/2019-08-30-civicrm-mailing-validation.md index 5db7dea..853ab05 100644 --- a/src/_posts/2019-08-30-civicrm-mailing-validation.md +++ b/src/_posts/2019-08-30-civicrm-mailing-validation.md @@ -7,10 +7,19 @@ category: howto date: 2019-08-30 --- -Some of our clients use [CiviCRM](https://civicrm.org/) which is a popular open source "constituent relationship management" platform. One of those clients regularly uses the "Mailing" features to send out emails to their supporters and we found out they're experiancing a bug where a user sends out a mailing with the same name (not subject line, just the internal identifier 🙄) as an existing mailing, it'll cause the CRM to -freeze up at a later time. +Some of our clients use [CiviCRM](https://civicrm.org/), a popular open source +"constituent relationship management" platform. One of those clients regularly +uses the "Mailing" features to send out emails to their supporters, and told us +that they're experiancing a bug: if a user sends out a mailing with the same +name (not subject line, just the internal identifier 🙄) as an existing one, +it'll cause the CRM to freeze up elsewhere. -As an added challenge, the mailings feature of CiviCRM [now use AngularJS](https://docs.civicrm.org/dev/en/latest/framework/angular/) following a recent rebuild by the developers, and there aren't many tutorials or examples out there of workarounds to this issue. Luckily, the CiviCRM developer community was super-helpful, and we managed to sort out some in-form validation to prevent duplicate mailing names for our client and now for you, too! +As an added challenge, the mailing features of CiviCRM [now use +AngularJS](https://docs.civicrm.org/dev/en/latest/framework/angular/) following +a recent rebuild by the developers, and there aren't many tutorials or examples +out there to customise it. Luckily, the CiviCRM developer community was +super-helpful, and we managed to sort out some in-form validation to prevent +duplicate mailing names for our client… and now for you, too! ## Create a new extension @@ -18,13 +27,19 @@ Using [`civix`](https://github.com/totten/civix), we set up a new CiviCRM extens civix generate:module mailing -(We called our extension `mailing`, because our creative director was occupied with an Art at the time) +(We called our extension `mailing`, because our creative director was occupied +with an Art at the time) -Our client sensibly keeps their custom CiviCRM extensions in `git`, at this stage we initialised a repository, added the boilerplate template code, and pushed. +Our client sensibly keeps their custom CiviCRM extensions in `git`, so at this +stage we initialised a repository, added the boilerplate template code, and +pushed. ## Set up the AngularJS hook -A function called `mailing_civicrm_alterAngular()` will get executed whenever an AngularJS page loads, and you can use a `ChangeSet` to edit an AngularJS template – and, because AngularJS templates specify form logic, also change the validation behaviour. Our hook function looks like this: +A function called `mailing_civicrm_alterAngular()` will get executed whenever +an AngularJS page loads, and you can use a `ChangeSet` to edit an AngularJS +template. Because AngularJS templates specify form logic, this also lets you +change the validation behaviour. Our hook function looks like this: function mailing_civicrm_alterAngular($angular) { $changeSet = \Civi\Angular\ChangeSet::create('mailing_name_unique') @@ -41,11 +56,15 @@ A function called `mailing_civicrm_alterAngular()` will get executed whenever a } -Setting `crm-ui-validate` to `validateName` directly fired the event _way_ too many times, so instead `validateName` is only called when focus leaves the field, `ng-blur`, which then sets the `isValid` variable that's checked by `crm-ui-validate`. +Setting `crm-ui-validate` to `validateName` directly fired the event _way_ too +many times, so instead `validateName` is only called when focus leaves the +field, `ng-blur`, which then sets the `isValid` variable that's checked by +`crm-ui-validate`. ## Create the `validateName` function -Then, the code which queries the CiviCRM API to check for mailings with duplicate names: +Then, the code which queries the CiviCRM API to check for mailings with +duplicate names: var validating = false; @@ -90,10 +109,14 @@ Activate the extension, e.g. with `cv` $ cv en mailing -Now, open a mailing and try to give it the same name as an existing one – you should see the field border turn red, and you'll be prevented from continuing or sending the mailing: +Now, open a mailing and try to give it the same name as an existing one – you +should see the field border turn red, and you'll be prevented from continuing or +sending the mailing: ![](/assets/images/civicrm_validation.png) -(As a bonus, the extension also sends a notification to the user using `CRM.alert` to explain the error) +(As a bonus, the extension also sends a notification to the user using +`CRM.alert` to explain the error) -It does seem like a red border sometimes hangs around the field label even after the value is valid again.. but apart from that, the feature is working great! +It does seem like a red border sometimes hangs around the field label even after +the value is valid again… but apart from that, the feature is working great! From d97b124a79b8532884bb2b4b717faabd09e87c25 Mon Sep 17 00:00:00 2001 From: c v t Date: Fri, 6 Sep 2019 10:24:40 +0200 Subject: [PATCH 6/7] Rename images and add "alt" tag --- src/_posts/2019-08-30-civicrm-mailing-validation.md | 2 +- ...dation.png => 2019-08-30_civicrm_validation.png} | Bin ...jpg => 2019-08-30_civicrm_validation_header.jpg} | Bin 3 files changed, 1 insertion(+), 1 deletion(-) rename src/assets/images/{civicrm_validation.png => 2019-08-30_civicrm_validation.png} (100%) rename src/assets/images/{civicrm_validation_header.jpg => 2019-08-30_civicrm_validation_header.jpg} (100%) diff --git a/src/_posts/2019-08-30-civicrm-mailing-validation.md b/src/_posts/2019-08-30-civicrm-mailing-validation.md index 853ab05..e6d9753 100644 --- a/src/_posts/2019-08-30-civicrm-mailing-validation.md +++ b/src/_posts/2019-08-30-civicrm-mailing-validation.md @@ -113,7 +113,7 @@ Now, open a mailing and try to give it the same name as an existing one – you should see the field border turn red, and you'll be prevented from continuing or sending the mailing: -![](/assets/images/civicrm_validation.png) +!["Mailing name" field showing the field with a red border and red label](/assets/images/2019-08-30_civicrm_validation.png) (As a bonus, the extension also sends a notification to the user using `CRM.alert` to explain the error) diff --git a/src/assets/images/civicrm_validation.png b/src/assets/images/2019-08-30_civicrm_validation.png similarity index 100% rename from src/assets/images/civicrm_validation.png rename to src/assets/images/2019-08-30_civicrm_validation.png diff --git a/src/assets/images/civicrm_validation_header.jpg b/src/assets/images/2019-08-30_civicrm_validation_header.jpg similarity index 100% rename from src/assets/images/civicrm_validation_header.jpg rename to src/assets/images/2019-08-30_civicrm_validation_header.jpg From 04f2e8eb286d09ad5232ed9016b188ccd21a37ae Mon Sep 17 00:00:00 2001 From: c v t Date: Fri, 6 Sep 2019 11:17:12 +0200 Subject: [PATCH 7/7] Name CAAT as the client --- .../2019-08-30-civicrm-mailing-validation.md | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/_posts/2019-08-30-civicrm-mailing-validation.md b/src/_posts/2019-08-30-civicrm-mailing-validation.md index e6d9753..a14b6d4 100644 --- a/src/_posts/2019-08-30-civicrm-mailing-validation.md +++ b/src/_posts/2019-08-30-civicrm-mailing-validation.md @@ -7,12 +7,16 @@ category: howto date: 2019-08-30 --- -Some of our clients use [CiviCRM](https://civicrm.org/), a popular open source -"constituent relationship management" platform. One of those clients regularly -uses the "Mailing" features to send out emails to their supporters, and told us -that they're experiancing a bug: if a user sends out a mailing with the same -name (not subject line, just the internal identifier 🙄) as an existing one, -it'll cause the CRM to freeze up elsewhere. +We support [Campaign Against Arms Trade](https://caat.org.uk), a right-on group +that works to end the international arms trade, with their technology – +including CiviCRM](https://civicrm.org/), a popular open source +"constituent relationship management" platform. + +Among other things, CAAT uses CiviCRM's "Mailing" features to send out emails to +their supporters, and they told us that they're experiencing an annoying bug: if +a user sends out a mailing with the same name (not subject line, just the +internal identifier 🙄) as an existing one, it'll cause the CRM to freeze up +elsewhere. As an added challenge, the mailing features of CiviCRM [now use AngularJS](https://docs.civicrm.org/dev/en/latest/framework/angular/) following @@ -109,7 +113,7 @@ Activate the extension, e.g. with `cv` $ cv en mailing -Now, open a mailing and try to give it the same name as an existing one – you +Now, open a mailing and try to give it the same name as an existing one – you should see the field border turn red, and you'll be prevented from continuing or sending the mailing: @@ -120,3 +124,6 @@ sending the mailing: It does seem like a red border sometimes hangs around the field label even after the value is valid again… but apart from that, the feature is working great! + +Lastly, props to CAAT for being a great member of the CiviCRM community and +supporting us writing this post to share our work with y'all.