From cfe5ca16747ed4636550932e9f78cb14bf6ab245 Mon Sep 17 00:00:00 2001 From: Shevchik Date: Tue, 3 Sep 2013 01:57:50 +0400 Subject: [PATCH] Refactor this all --- src/com/cnaude/chairs/EventListener.java | 197 +++++++++++++---------- target/Chairs.jar | Bin 25643 -> 25941 bytes 2 files changed, 112 insertions(+), 85 deletions(-) diff --git a/src/com/cnaude/chairs/EventListener.java b/src/com/cnaude/chairs/EventListener.java index 3115905..064dca9 100644 --- a/src/com/cnaude/chairs/EventListener.java +++ b/src/com/cnaude/chairs/EventListener.java @@ -32,28 +32,6 @@ public class EventListener implements Listener { this.plugin = plugin; this.ignoreList = ignoreList; } - - public boolean isValidChair(Block block) { - for (ChairBlock cb : plugin.allowedBlocks) { - if (cb.getMat().equals(block.getType())) { - return true; - } - } - return false; - } - - - private boolean isSitting(Player player) { - if (plugin.sit.containsKey(player.getName())) { - if (player.isInsideVehicle()) { - return true; - } else { - plugin.unSit(player); - } - } - return false; - } - @EventHandler(priority=EventPriority.LOWEST,ignoreCancelled=true) public void onJoin(PlayerJoinEvent e) @@ -96,6 +74,7 @@ public class EventListener implements Listener { plugin.ejectPlayer(player); } } + @EventHandler public void onPlayerInteract(PlayerInteractEvent event) { @@ -108,30 +87,32 @@ public class EventListener implements Listener { && plugin.ignoreIfBlockInHand) { return; } - if (event.hasBlock() && event.getAction() == Action.RIGHT_CLICK_BLOCK) { - sitPlayer(player, event.getClickedBlock()); - if (sit) { - event.setCancelled(true); - sit = false; + if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + Block block = event.getClickedBlock(); + if (sitAllowed(player, block)) + { + Location sitLocation = getSitLocation(block, player.getLocation().getYaw()); + sitPlayer(player, block, sitLocation); + event.setCancelled(true); } } } - private boolean sit = false; - protected void sitPlayer(Player player, Block block) + + + private boolean sitAllowed(Player player, Block block) { Stairs stairs = null; Step step = null; WoodenStep wStep = null; - double sh = plugin.sittingHeight; boolean blockOkay = false; if (ignoreList.isIgnored(player.getName())) { - return; + return false; } // Permissions Check if (plugin.permissions) { if (!player.hasPermission("chairs.sit")) { - return; + return false; } } if (plugin.perItemPerms) { @@ -161,13 +142,11 @@ public class EventListener implements Listener { if (cb.getMat().toString().contains("STAIRS")) { if (cb.getMat().equals(block.getType())) { blockOkay = true; - sh = cb.getSitHeight(); continue; } } else if (cb.getMat().equals(block.getType()) && cb.getDamage() == block.getData()) { blockOkay = true; - sh = cb.getSitHeight(); continue; } } @@ -183,41 +162,39 @@ public class EventListener implements Listener { step = (Step) block.getState().getData(); } else if (block.getState().getData() instanceof WoodenStep) { wStep = (WoodenStep) block.getState().getData(); - } else { - sh += plugin.sittingHeightAdj; } int chairwidth = 1; // Check if block beneath chair is solid. if (block.getRelative(BlockFace.DOWN).isLiquid()) { - return; + return false; } if (block.getRelative(BlockFace.DOWN).isEmpty()) { - return; + return false; } if (!block.getRelative(BlockFace.DOWN).getType().isSolid()) { - return; + return false; } // Check for distance distance between player and chair. if (plugin.distance > 0 && player.getLocation().distance(block.getLocation().add(0.5, 0, 0.5)) > plugin.distance) { - return; + return false; } if (stairs != null) { if (stairs.isInverted() && plugin.invertedStairCheck) { - return; + return false; } } if (step != null) { if (step.isInverted() && plugin.invertedStepCheck) { - return; + return false; } } if (wStep != null) { if (wStep.isInverted() && plugin.invertedStepCheck) { - return; + return false; } } @@ -235,7 +212,7 @@ public class EventListener implements Listener { } if (!(sign1 == true && sign2 == true)) { - return; + return false; } } @@ -250,7 +227,7 @@ public class EventListener implements Listener { } if (chairwidth > plugin.maxChairWidth) { - return; + return false; } } @@ -262,52 +239,80 @@ public class EventListener implements Listener { if (!plugin.msgOccupied.isEmpty()) { player.sendMessage(plugin.msgOccupied.replaceAll("%PLAYER%", plugin.sitblock.get(block))); } - return; + return false; } } } - - Location plocation = block.getLocation().clone(); - plocation.add(0.5D, (sh - 0.5D), 0.5D); - - // Rotate the player's view to the descending side of the block. - if (plugin.autoRotate && stairs != null) { - switch (stairs.getDescendingDirection()) { - case NORTH: - plocation.setYaw(180); - break; - case EAST: - plocation.setYaw(-90); - break; - case SOUTH: - plocation.setYaw(0); - break; - case WEST: - plocation.setYaw(90); - default: - ; - } - } else { - plocation.setYaw(player.getLocation().getYaw()); - } - - if (plugin.notifyplayer && !plugin.msgSitting.isEmpty()) { - player.sendMessage(plugin.msgSitting); - } - - plugin.sitstopteleportloc.put(player.getName(), player.getLocation()); - player.teleport(plocation); - Entity arrow = block.getWorld().spawnArrow(block.getLocation().add(0.5, 0 , 0.5), new Vector(0, 0, 0), 0, 0); - arrow.setPassenger(player); - plugin.sit.put(player.getName(), arrow); - plugin.sitblock.put(block, player.getName()); - plugin.sitblockbr.put(player.getName(), block); - startReSitTask(player); - sit = true; } + return true; } - protected void startReSitTask(final Player player) + private Location getSitLocation(Block block, Float playerYaw) + { + double sh = plugin.sittingHeight; + + for (ChairBlock cb : plugin.allowedBlocks) { + if (cb.getMat().toString().contains("STAIRS")) { + if (cb.getMat().equals(block.getType())) { + sh = cb.getSitHeight(); + continue; + } + } else if (cb.getMat().equals(block.getType()) + && cb.getDamage() == block.getData()) { + sh = cb.getSitHeight(); + continue; + } + } + + Stairs stairs = null; + if (block.getState().getData() instanceof Stairs) { + stairs = (Stairs) block.getState().getData(); + } else { + sh += plugin.sittingHeightAdj; + } + + Location plocation = block.getLocation().clone(); + plocation.add(0.5D, (sh - 0.5D), 0.5D); + + // Rotate the player's view to the descending side of the block. + if (plugin.autoRotate && stairs != null) { + switch (stairs.getDescendingDirection()) { + case NORTH: + plocation.setYaw(180); + break; + case EAST: + plocation.setYaw(-90); + break; + case SOUTH: + plocation.setYaw(0); + break; + case WEST: + plocation.setYaw(90); + default: + ; + } + } else { + plocation.setYaw(playerYaw); + } + return plocation; + } + + + private void sitPlayer(Player player, Block block, Location sitlocation) + { + if (plugin.notifyplayer && !plugin.msgSitting.isEmpty()) { + player.sendMessage(plugin.msgSitting); + } + plugin.sitstopteleportloc.put(player.getName(), player.getLocation()); + player.teleport(sitlocation); + Entity arrow = block.getWorld().spawnArrow(block.getLocation().add(0.5, 0 , 0.5), new Vector(0, 0, 0), 0, 0); + arrow.setPassenger(player); + plugin.sit.put(player.getName(), arrow); + plugin.sitblock.put(block, player.getName()); + plugin.sitblockbr.put(player.getName(), block); + startReSitTask(player); + } + private void startReSitTask(final Player player) { int task = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() @@ -319,6 +324,28 @@ public class EventListener implements Listener { },1000,1000); plugin.sittask.put(player.getName(), task); } + + + public boolean isValidChair(Block block) { + for (ChairBlock cb : plugin.allowedBlocks) { + if (cb.getMat().equals(block.getType())) { + return true; + } + } + return false; + } + + + private boolean isSitting(Player player) { + if (plugin.sit.containsKey(player.getName())) { + if (player.isInsideVehicle()) { + return true; + } else { + plugin.unSit(player); + } + } + return false; + } private int getChairWidth(Block block, BlockFace face) { int width = 0; diff --git a/target/Chairs.jar b/target/Chairs.jar index 62a88289d42169800e63c9c91fbbfd61a38f4b68..2fd29436fce7e80e6c7d10b2ebace3312dfd1a32 100644 GIT binary patch delta 8007 zcmY+JWmJ{lwucD;X{8&arMp8wq>*ORuxZ>#O2aGNplpzC*mQRY5}Rg|64G5#Qj%Wz zpL_1PXMK6z-&k|5^<|DV#yg&}0p#yP$T%7*s86tvke(tTao~T(d5OY~|5-SSkprJW z4(b1`Cx5>!ogBIUt9pwCg##aohs^aCbyCPwD33HoC3*5lcZ}(OvNF~+@?)0Aq4_6U z<86~ZW;JHupE?BFJsQE|b?aYE%x931kjzn$kXVqQr)ES@NiZJt4-Y1w`Ib=T*+XN6 zq%Vi#3$_S)I^uX#$&1nAlsR*-YaVj>dtQwnoINX>OIn)wBvsM8BV@^t?g-rbs!X%G{4^QaS z4s&rU#>JzV<&CTyz81J8xw9{}B4IaiYhZTf-V{D*RGL}az9Dh5aU}8!)6pV{TKHuRtA-9B>^AIq*_H&v;={LCtH2 z@$gY-$0&|P{M5h|Rp zc0Y?ady@@)$`x_jy?k33K{oW~sCU@g(IA_^&;0%-V^A-AWlOR+Kq~Cm@SsnP2(LnI^K~U+MAW7 z_RVU|N{n@{OuY-ETFm}?KF-j#8+XW%kU9jBkeL4cKHx&L!RSDRA*Q*p?)L{oy6~9| zGq;IWf)JDAR6^st9JZRuWN5v;y>ddMlIIt`RMm8Q7JdtxNi|IwolX5qPHT1@3V5D| zit?-6r+KgBpApNK(M9Fuf$q@kRsOgg`SPa@PU_u%Uv4>GbQ_agkQ|QX_PhHHMS{Ic z_I07%@~V!0Gt2|@$+ZZ~sMu4HkE>Do!I)=lVt7`vXy?Bhje8#u)0YK z#3PaoV(G?6nMu4#zK{&<(35k0`VKcO&1b4TlokGtJ%|om+a+3*$PBl$=2HoCCa=J7 z9ANW&MlX7Xa17ju5xQ%Uzh7snwLt{4)Z@HVCGzMu-?r>tar^3@<*sM0?f9YL2Z(XujHn_4w1+ zX{EQ*t9w8p$GV?+No!sYCgE!P}T})0ZJt32SwH#+(#4893R=W86=d z1%F-3r<$-c&okHkc^=o)vZwOv)_P*)14@VKT&IkU@X)pJ;7=QTk10-5m`7R1s&RDN z!ujzL#`*Q_R^6BPr0wEXy9pLWRBlBBI_Bdhrp8KuXY|G*G_Y;gRA!EeYKbMlrBkNu zYjaq~di`t9JKkWL9Lb>R!@{b`*^mYdcufb_`Q=bwxYh5l96xQ2U)9wlzpA-tpU+$l zo^X<14lgUCSN?e8qFnz4ppoW`Hyr4g5r3q1ermN0rRz zIKEyV_}$Zin0Xc2IZ7JS$3{||?GPl~%u5xCz8_p8l54Iw(#lA3>@tcM7JS+glGdH8 zl#N%Cr~AZTrah2W?-Mbqk!5m8j>KR z4*7f$B~{*m`j#^Fa7mU78kH3Uavaxwl5b&exfE5X7V;dEb2@Y*uy|~YKGUB~jZxz^ zWjF$D19PM9{j_&TEf9^jVhqzF#FB4B2MjU!vBEt%a;?}66~^y4?tkYVm4^0%x=^~w zFVg*t{D?D8&5QHYL6Hi*qZzy&DfZ=kA1?jG>R=HN+{V5IuiUt=>?EY6A?-RgKm1jh zcd>N^`VZ|2&JGWEJ)v6FDAca2Gd7`#(yWvFPs5?rvHP0qTuVO}DuW6$yKuw?0P=Vq zh$Y=}hC}2TcDPm&lg|L@GN^`?=(L7Bym^3T*y^3X5her1Pq13wYla3aUhm3q&Xy58 zdX)!MIlLj2?unZ?mz%taftjw2Y1xY&96U=E`3*H>y%8+4m?hUmB{Hp3@yhWLb4U_5 z5kxmYPQ*=7H)_^9h!;kSA10gy1W9e!)Fu&4eE%XoO7%lAxQF!mE^wdTL)KH^8CVyx z_FG-X#t)VI{A}Q1p?9I&Qu3kkBjCn=dj*W3VDqbLmf*fY4H#zLxoayRB2Pw9RZ%Uc z><=N8_dn#A{PicI6Phlw&{t%)U_IA`>bL=97}$l&ygfS|{fsD?f;stCc$Y!qM;h3WRsnpaJZ|P7}u>HdjmC z+g^$Oh@6%5bD{gL9O*PbBy5BEs~o_$JH~t;x-7U`#e5&T%)fW+-dk{W+N$&?=a1lS zHnaaL+O%_SSe*VTAyg_aADxbmk}^ zSoG0ERgYgl*uot++V(`3t02JSyYWa$Pg6K^=@KIRVd+olL(#$2xoY% zE=wigtj@z?%1S%Eij$|o&@s1!Ghu@(hg8k6W@LXZA825z-IA?Xo~D@Fs(<5HQo@;^ z4{J0gNvo&OerMw}qi4sCDf+UzRHr>kPKl9C$jI8EtU(agsApvBKzfSj_Yq(15PV4B zk)S<2j5Zb0T^QE5Jk2%b2b+C~*2bF3sxiTlJ&92BOVt ztFd6^0HlZh`Gj-G7t)~Ex;B}B>$~-hiHqZhE)jnNo+Dv$OVO(Mp%1s?Jkh5F4$oIF zzJ~`W%d65RZoT%Q5mYQy6INCRZE1*9TPa_i1<0h_hR7rbuVokC65uj zp&+lS)=L;G^EDy2LXq_t$wG z`zhUB@A5wsP3zYZT9kk%Ph*r{0;IQK$Hj791$5e#;)KfTMd>g6-2=#NjI|2gR5RT* z*r%hk$aoJI`XQ;~gge<>kum58v;0Eahb5rYeqwwi*t0PTYfZb9V0)^conPM3`aZZ@<%H8q@Deu* zB%}po9fRb3Ur*(@$6bBJ|LZ*|g{6AE{*>OSjxz7nV_aE$Xeng`9i{16?5G1usUi zG2ulpr{fa6`#vOejKB;bd6z_0GvM93QUVxJR#&q6jci?hNG`s+7Scm0B_T_Jfl>(T#M=jpvqMpwW$`F}w(DF)}zM;GBa%ya!Dh z8XDx1DCG(-486zVzPs4P_c3`{p&gd&(~~GhkG!bGC)=&Ipz&_5-4V^Zcr`NS@^MM1 zP@h)1V42VfEmkF6k7Ijf8z^Mo(l-M!aF@1TRHw}!EquB8#LGu=0#ClV&!p~pRp#&U z#us9V!pOZEOhmM7_mMDP`WrR1#f<$@y9_ooh75b|Sp+=M7nj0ji=waGGYuZN+9%`z zp7P;W@rzS5sx?^c}{{@_sX65O)58MIx|)oeDDjiP4}2o!ds6m|zC?(4Tj z@E1OhtlefRYXy6dOp5mN2ruI%80#r*Tj+Iv_HypI>^*2p)=l=)83K2JPZbsN2z26) z8$I9KwhKconzn(;?qw~RnJ)v7+yJ_km9$$*!2(xeYi@5N~4fuAY>L( zm}b(N!td1r@j8$oTnCxF_e>m|{IDNICHz!hIzQ`h8_??}y}&EJjQ`p5*-*2Dn?;g+ z!TF^ZqjGOhMWAkAV~*Je*331Vmsa6^3)-ITM~u%AZSu>~z*gudxu$$rWywmmua<-2 z+q^esP(HJCKHI6dLMSmSS-fBdlOCb21=vX( z$u!;FzoA+B?I|)w(>v?EIBfQgT<)Qjzx_8-ar3689lS8U`}AqBfJCn)i8~F;NeVtb zAx)UlZ*;j|K!xLPW*R-F`JoJCSDNPlPjEi@4ib&!&DZuUOocv|L<+CP zZ-nR_749;>@ff7YziD$!P92<>gh>S3I=*aL7|IyPvlas7;aR>6Bb=h02*p88x-_@S zCi>!I+Y>2D7VKR6RAWqeeOUnk#)ck9gl*1xE~#7ok}2n82(gbrY?-sJ z7pN)5c~|Dj*}tbOel=&1+k-iU&zL}wXVvJspm0OuUaXcBeJ**VgNeA|XQ5^#+s4b! zSE;${^!H+PL-awoc?BRXC0@PB_@spHmtQWrU2uBlYMJEDx3f zo8qg6O0hbH+DTKId*B*srpA7?!=R~}S*_O=q;C?fh%fR$JqRghrDPA7AiF<`^*j6= ziLyKl+d5MiX6T-zND=9d!%wAQs2%?dUTE4!eZ!Mflx+A}`I*=1g@3Ww$9>b08J^#{ z4*gWv^HQGh@f{fW&#Z!xtkq~k$MyvP4Y)5Upshar^OjWZblR07?fQ6LtdmqQgpFZ# z7tK@4q*=!XI|5bJF-d%ODLB+mXC{xvcs#UbUtGr1g>>jbS^p|>=O$PII|s4;j#L6` zuj7dD%Bsy{Jt<+T0jJHCl+RINIa2(_Ng@^f_VBCMi5!MprqCv@66A1x^Uw##c>YC^ zpzYI%z<%4OOcarbo4)rP>T>qGvg#Dda!JdvK>`_lTzIo3BC)#aUng0Y!VABGn31ho zKv7QKSjF~qiZ06;1bBKlZTB=pNyWtj80DK`BxPZzoiycpU51pAE?x@rZUbwKHI>ot zFwi;`KaYLSwmftF-7eDN9NDl6B%;~ka~(FBkIo*noiI-MEo$z0==h}kvc6sQMM|A1 zx5nQl&x?&$KOBQ4^^r0 zyrQuHI^w}UoCS#waLOj4JeJ7_-6adTzk~FUYV*bC=C;6 zXI#wo#Kq=9Uk^?MtBJb=7=Foq@9%gdW5Rt=Y^*4-o8(3`pNt^w;=R{I( zX;-m-u=yD*1Rm7CbNT84u)H5X>Wcm0-)tZrVboyjoPH_MO69p`+AlY^<%M-6YT9=n z*Hpc5iti^sJ5fRDr9m59bzph=$u!7m*V+qI)x~gwB2n5up6{8bzY^Df@$NL_fk~od zC8FqjNu*f%qwP7yY59Yr-&=rydsn(Q`es<9pff7@TzXYOoyF7xQ14<#u-(nIpjU}C zt=b~WPSVaC?uNVx@x-rIXAw?o!U)@wurtB-y*uiFgFEqnV~Mz?OqLVdWDLM%Yt=*_ z`C&UP?80qOG*7xmU*>$8}N49pjPsA2S;0(W+#w1#E zzi;T5i^@&<TSej;r|S4+BJQaqHR&H5;t&MWPnsUQB%x@8?2&ngukm0FwLnzU4w-}}) z`&F)X-h#CxFsJp9Q~HynxDwj~6|M5&nkLD|3YB<=MzAduRRm8M)*tmy4Tn5{FE?^P9j z`*C#0HxrBq0e-2rCrtk|xl4*YhPj;xxA#k!jdCV=l|qMS->w}SKQ%Hnh#1)zaA5_~ zi|!oRZWnk}EsoErdX(R{O3*Z^xbZjq{X2DKO6yuw6s{iAdSHPb4imFg$5x{*5VJ)Y zoV_&wwwxnP_5q&{kxR<1LAN8{1g@S`8Xq`|;H{R%#F+ZcM6yZh?~Ll7;fc2!K4I$j z_xV5{!0d4JWYdi#M@L4)$*-d-m33zqv-F#t7$uqj_4o2JGIF>ghq4g&95l$w<^wzT0pIQ@O<=;GX+o@cnEVq5#G80g3hp^&g>*=*d7; z0LSc^Y4$h4ccDGpS%L4afv>+40!6<(GiwYP@Wq*pr1FnP=?Os@m7(F>RJPYt?iZ6B zTz5~0OL(LKE{af$z_FY0Kz?d7H({AndP z4%9!nc7K6@`HbWg4ps_e>%*O>7lVk|I*BDmRcl42E{!IjFL9GYq%nQ(RxCx{*R{&~ z*Y(3v&8&4XX=ck>mGuo$ZigwgytGaDE55NB4wf2*p4Ovl@6yA~;^g@URdOpTO^JEx zPtmJ@k*kIEHGkM{0>{skGX4Ge*31V_z*0@gzHvF4lG=k#E!vSkiiv)ycV7BKWIk1R zNy5WNNuDZ?@$X_EvYP?pY#iwCzQ7r|e3F<=<1B>=)*>XXT-@du3(8`XLH^|HVL8sW z&1jAWLa8{V@TACv1inV5^(Q|R8Nw$I(BllkZ?lZ!dX(IW4y3>YX?M~P2pUxapu@iNQTRX`eLOr56DS9Kx%2ZHRQ%IQlrpr5qNi<9X z(Vj0VXqZ60*~qluC`}=FIi~6c+&1A^qeAq4(2fT$KwNH3KC$ygN(~QW%SoC*UCk(= zKZO(eZ8|@<5B5{A%u!s7IHT_nuxFCGB9Zs0C?v8(@h&U5$To)YTf~yW59e@ho!eU5 zzy7NDwMU&)x!GPesfh5@YaRZ{#c*Fl>PbRfEFE%uWC;aORR+)Z~R;kBo?Cn+R^Nhh2yFf^`Ujrfcb zlBS?t@ruj^i!xJ-b@lt|GI zq3srGnEx?;1YlLV$MoNR=RfYbAdp}1e{Jxi?IHN5IKDLzUi?=S8~*jytpBM+DhM=D zhfaWn9`D4oq(V{A`kNS_=9(CI8Y;*rM5vFd`_VT-&HnC2=>FZMhh|&;>(HlygZcV@ nP4^8Z64Kwg|62ut&IZs4OR~p95B|0tn?NzGsL&bA9xMI_mCFl$ delta 7738 zcmZXZWmFtpmxUn&LU3&y0t9#W#)3Npg1a@)xLe}{55e7Cf=iH~K^u2>clS(qzcusD zthu#n?YmE%UAKOmRezr8LD;f>SQKSBxVK0!Fo-ZPZHTcbbZ=S_V|l_qwjxrB!~C!H z_V3=r4$Sgz_usy4nm28TacHp2e?zrESmHOYstX5r`>M|GrvCA=NcXU>UIK;mA8&@X zgZJtcs3HIKjnF^CW4#_{hzrj#0}BIV2nPd00~4oWiW7&zffo0{_pfrlS8!@j*QXPUt#~ag?95OAqc-$ z-;tx1V-(22!*P2#drJnRzpe%6QqFrm78*K@aAE@O<0ti)I~zMcOYY42TIZA+&H=(t z+#E*9^JODtAd&$m2tgu%N!5)gE&{3^yYStf>83O)xe{#ORM@cwx5iI`)~W|9rqs>^ z3KEXlodZ+$4&!V|*`_?_McC_%3$}|k@>!rcdqrDXUu!?*OLft@wL8z~#-bRmk#WY} zs>beq7bL13+-uFRDJvZN2$wV`+>aF3e_JYl^X}%pIvKGP^aVl#N@NgvqCKW1a(C}K z$ARr5=9Pj2_6Y*`xG_EFHs&Nnj?=Ud#TTi*s^)}_>;KWDPNZ*gJjT;j5_WSzz!T?a z?3(lO$Ue&H??Yke{PU2#1Z8Ljqi zP(jghhBV#LT%!p~2EQyd<(}*5Hw022z66$r7hrjy59M25^$B(yUjSSXwl9hPdz=tq zUME1Mt$!Fh?vz~w^2S)A?gKIyQwvPNLWtc1{&+*_z#w?WnW4B)FjP6etnnvy)XF%L z?Fq&={(Qtr+e0KS#c4Dp#cOnHMEB{*7cD#56PBSVPKvb5!`LmMwJ5K=CpEwY{?^52 zZ_ap*Gvn5lF@))51f|P=o+w7r*5;;FByt!JiAYyEWNLsMB7Tx`rn?%I#gSiDPl<5+ zVQ+HBd-B@M%X=oyDCt&ETgwt5z)MQdIpL)?`8yfDMp}_~7gNk5Tp0WfxL5Csn z!$&khQVDir+7V*@HZ?lqkP8UXczyBx%;}Df%w@%|)T|79yK>p2vii84X_^v9itDbz zZGzRMaLm5woSV-H6}k*d+5DqoQccE)PC^CAqGDqcL^7*bBr6^LGwQkG*7B9%ucAYx)^e?Z(&x=jq-_>8bE-9v92R+S8r&ofsUSP^ zk0>F7VzcP+{Ra5;*ObmCjfwtX?Pt)QCA_KmoJvooKFPihVM-#Qk+BQ*o4Ny0Reaa4 zNIKZc_9WnxuGKDzd!{X7WZ@cYl+hGa@wCq8qY|+$(JE4Ft5ZCyyqy36`7=h&OxS!B z0X+Rzbo%^i+z4$w?9e=oSdBE!LU}usF>0$>y8KD=j0VJ&su+G+iU<`De*vFdbohXk zZU}rP6-y`NK`AKtTj5ZQ=K?*(;*({S*W$A#_|~=mVBYbJZz7!m>Om2HS#aNq!h+F+ zY<35~@1qjrlX%69RWo`qk+kJi-M=>!aE7Jz7>>>}R^YqxqF!N@sW38ICv^&6S8%(~ z{R4T)Y{FYSb!dCZ4hg$}UvIrH*tvlAxfI5AV)_l_jEQ`mQ02Uy-{sNa{ju|6>(3R$ zvBrIYH&=SXdQ!7PbS-b65J0x^!D&5$c7Ootdri|uMEFM8NlGYK?D?2~IcGAXrd6j3 zu;-kl=yrG|lyO4tXE^nV!n~ZGII<7Q+c`;avVaqg5nT$7a*eN-4A29cYgv1-;zT5= zYh^)@0)*@6u%c4xbKC>I2{W21AcfyHZIB}rUPo@;DSwRDlrLt)Cmo0-=C@`NEemf* z35u=H`Kq-#J#PGa=B-YbV4NNi7&T-T!GxSZAWl11s7F_kVB^Y62P!QV&80;u{{u7p z2Wp5o7@*NL4qrb$S6Gu+$)qC|R+DI7=OPE0R|PScv&og#2eW$crh<7xkhZaZ&)A~b zq9(dfiLKY91`!}r=LU>`No0~)i3!Ct)F|eD7BJ6&*zzVx16XkEkf^Y7`l-9}QIJwn zl#Qk45A5yV)lzcSSQW68k^rJ}a$^%z*!(tzH$U;4-MmMu^3xKly%J$u){<%sg!)5L zD7NxXF@mYY#-)Q5y<8rEuiAzT2em{B^SB?G%F*T zw1g%*h#uWAKU_Zqoi2pzm?>D#eYaVxM3U5o+RxcIor6Dehg$ZSZ)`DFZ+6Q{bvzVo zHhe&1$$8NONXlKxnV5e=&9g*|1l>T4M6W3YjSXjXBNT73u6~9*q;jD~1*ynrSW_5h zRmk5SbyugoJub@L5?<&m9DXsXH_5p~HyZ5L7sqr;PvGghA2Aa)TkZnqG<*`c)asVz z?~aaTQ)UH3*b+VPGu8r)0p~$WCS5(w#nB%oNs&T^Qn8|?rsnLN(Rdk92ah1}4DA&I zZw865iunek88`e&n=o{tZ*>^CZQh?$2{vN$^I?)l8crC8Nyd?Mq#Ak;84>$64F)aoxeH~rxM~3^zWuGS9DS2oO=Fw^7 ztj>M0#+oaMs!}XL>mAn6DeHs06iLmukEbTb9nBSXzhjAk7f3FM`@`^nb{swJ`a9QE z+KHQ|F5}Of`uIHma^GHBu3oirt zrHGDy_2Jo%GDuW7KNRHwQ)t+e@3S-e9;Rpfv!AGN;;9mfXC$eGu+10*+Z)C25{`Hjw= ziyeV?{-TgPH|K{I(LWfFnUw+v;T36w|4P#OuRXX7Am`rdRjer4<+wX$1v@()y zbHp3K^Y%)s`4$lzBKB@#H4SPMJ*2CB4(T2Tdo<`o?o#D?c$?}&IKSf!r-5h#GmV{+ zOUf9$=2OMgy|L zj^aaZb<^!ocB^=^`0CQwr#@ot`GllKDxtVU4suN4%=o9$Lpebg=M6c9WduuV!z%v6 zP^|ZOvT7d{s_EGvpG%09si8Ku_AupC63pVz*yd*UfsS`~W6FJl(H>U7mdyP!Ylc}S z>vY><$NCQCzLMY&?Vg(g`nNmoE&(}!T2L|7!6$L`(t?oE@4;4FtI9)j3sa6RSVp>p z5gL*WiO#f0?}%4MG`at_?zt(e4pxi0lj@JhadutB2JtF*t+5S6M_d(Mo- z{p9aewpOo|KKKmhRW;jTVHl?)ykk>5*)Jh6#?3`lv9ar%+M zE!1)9Xsh)BvToaDkNY;XBU@Ln7P`>AsRH6_R;!HcPdAD{E||mr!fL(uQQr>z_aXH7 zeZq2xeKLb@v3N6lZVG6o-?#+$q4M`1Veb$x%PS3&`TFVb zBSmTP3BqSTZRBt}Rm_uGB^a_(M_u7|x(m!=qvd)sKxWLatXqHx_(GORyj_+-%hDg) z2TkRi-6T>!a*e!qrCJaewvRvTpRr`bO|c*~a_A_5#g40s2urCU(5!rmU$?4@fXJ?{ zTt$sfa3Hc+Ept!M*!ys`V5DzX#H0(N+1i@Vk&>&BE@r`mq!C1A#&rqs%*C@ zR73he5Mmfzq2^{^X{p&&akSDM0Hon?Y|o+D>bHi1 ziDq0iq>$qG;QPf7^3Z(oH&w|*){5HI=HlvLh3QgMIcuU)4OA^MbY7SIDcE)8LqH$8 zV=uvOis>?gn^D`{czM%vS5+4Z*vi6RQRrzX@|x8MeG%cVFh5|v0}kYYnP+sLPa}o! z0}|e07M-MS5!$+#Z=pUThs&S`bm^3~k9+pRJUZf(SfdhOm}b?|3wBRU6=(9oR`Ciq z^TMaM$&<4%?_9U>-osHL{?c{$ff@UPO zxnX0!Nd`gz z;O(*B3BVK$A9Y3p;OD2tkZUFQzvWSWd*BtXt-1a1-0$ zQ+Du_DtQNFk-k?mlO8mN53i!2JwGHuK7MUFk*(x9{#wVKnqf0m&iv@latUUjyvRQ+ zs%F57H9(}-sEl|1gePoz3?W-arXVy+l1C1#QcCy1;+s=6X#ujuM?vMr6HCRYsGH zdwXm6Bk;6EaOSQh`%J&-B)A2gR7}r-%vp@5(6LX>9l!nIyZ&9o1ICA|uDuYQ#bu{6 zi6r9n8tK7?=#-H?h=n1yxiJul$q~r|81v;9x@5;NU=0WqeLsj3hFpby%OUEs#Iwfl z$4G*{1?f_jC0!v_{bd{Fk3>x=SDa=zDHza48Cq2yUF9TtyZz1Xe(4cjY}HxFi}Zx^x@oMi zMO9RsMFjitIQ43041(SLOXVnO+BxIM{CD&>i8DI!-VWz+bC;};c5{?AzT{OjDQ3#w=0q#6}AjY1!6?K_fbHP0V4hSi_)1&97X%zT5S;kly(8^fx-Kw!C9oPgq_nj;=J0!Y$v4 z^j9Ma9+js(;7qlF*!hEF|;}!fEeP z1CcMU8CVQf*{}L?L)wz}s^)MzK`X+;eF%_q7 zM`49))&fPDL9{HIw|&Zuk_NnCG&Osh%?FpCL$t{*LI?l}@p8kNUyCG9M=S~9^L3i! z2{pUqNHN^vo=TXIrS=SzV{%z}O_(bZKsZgRs~c8TIAfZ2_;GNw&XZ#uYIp#Ll4k}i ziif@XXc*m=Ub3W8Xnmm^sKAQ z?fS=C0F9al(%wuvYey44JOm$zdM~QmG_vh@+>Q6fALupWbK3sZ4Pv_0+YHOc zL|0^5r!e9@kV)HM&YRTKq%5aIx~CD;1mS-7yyw(U_k04$Ze zZUU}_u8IxTT(411lz(++Kn|3e7VF>L{v_@7sk9hB^u&GCC0qA}h62G9q*F*|-!y`x z>Nd}dUElcTPH(bRz$#f*xT{)sPcEq6HM?^87PxE@9HTvH|D9XV?V882%9F+;oBmj4 zPs9T9UEmFc{>)03L7m%K_zknZi?usc2=_-z*;z;nf!)uRv&2VPNb6=hDa7rx>+z)J zoaHv}uH#wGd+&wg<=B^u%)#Znng;ouVDsIS6AqmcuvySa`jU}6rYO-_DcL&{jc|Ql zky0p0wP9DAaML5%QBY}&cT|nD^Acs-GqWI1h-K{4C>f|`*Clo5-p_mw0XpSWqMW55 z@gPP&qf`88Rjl9va{sx|K(Y3k2o${{?sUD(IV!tQ*(;rR>{<45QO1-$BJ;d$veF(S z>i!;BXho{Oquu$V(U9sT;LAt7sZ-fP-=*3i^8MplRfB@n zfuBAJOg$B=A+u-v27n*F$SWObHk5hSr)x~D(1A70HX?`##73V%>xqIMP1dzylcWsG zL%(m;GO%;Eauv$N}-otilm7fIPX2>bD+4K&%%jzd4e@x>L#9DSBXR~pEgR~nKV$C|3aiq1t_ zkiZ+Lu`ZvvC>;e5j!0<_(~W*fOE_(y_lrqJK94!3BVEj>(f1_lX5Qs77Va*P9aCDT zUWmEQI>VHGxkZ+OQHmf5+nfd{5l*{e18{MbYUXErM|KLK^= z2BLHzi^mJl;cH@V!HSKn&U#>R3db+CScSvn+H2kr#XfI-IAlvWz{LVqjdi<6q+nWG zt9{=zFln7k>$3%5PUeK3Rwr3!V@vfywO`v^bl!6>7R4`X6V&{N*?6Lom-=ljzRdIv=Ewoa zxKpGat79vlR?87hMVX$lfFr~2g7@{Y;zYD)!c^bH^=x=_v^o~ql3WehGN1v#ch>v5 zx{|x=-27y>6T9cEdVWRwVy*H99SqKx`gsxO2zmjHcj<2XWr?cHCIgQ1a)dfx{O(gF zZBGbnUN#51+ZaQ5gDci?D@z+GjazIX?Otx*M#@NCp|i0`Ui>o~NEZ&H5yXPKOR{(? zGRuRvs^Jh8v&K_CR|cU+7jgMDUU&44UVvZ<)7^)>Tb+@6kBp{Ed`jQUuZ!yLVzu&<<&&4BMOd5p6$5P6kK1J+krGvIlBMqmhhby|jsuTo;D`YO+c z%CDkiB>yTI|B*u@*;mJ7tnw=1#-9=Yn_kB47%RO07i0;V$bb0%)Z$;Ln(xoa^$+H3 zH6eTbgk=-rHyjFoE0l4hrr7^Po01k;Zr{Mb6eGaE(Egi*$@eE$`P<0-8VfTeexv{S zucL??Fv0rgMW)2MlA5o;*47+k!R!IHQI>;!g9G=9c@h6&UP|%r(>%v0e_89%-}`U% ke^$PKuPzLXy^V_n$o4-u_`fH^z~KJ9i2v^H^