From 5cca4a4dc65ad0348d2d103641c3afd5e814d432 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Thu, 2 Feb 2017 19:09:04 +0100 Subject: [PATCH] Revert some earlier stuff and fix icon sheet --- .../raoulvdberge/refinedstorage/RSUtils.java | 8 +++++++- .../network/grid/FluidGridHandler.java | 2 +- .../apiimpl/network/grid/ItemGridHandler.java | 2 +- .../apiimpl/network/node/NetworkNodeGrid.java | 4 ++-- .../network/node/NetworkNodeInterface.java | 2 +- .../NetworkNodeDiskManipulator.java | 4 ++-- .../externalstorage/StorageItemCyclops.java | 5 +++-- .../StorageItemItemHandler.java | 2 +- .../container/ContainerGrid.java | 4 ++-- .../network/MessageGridCraftingClear.java | 2 +- .../refinedstorage/tile/TileController.java | 4 ++-- .../assets/refinedstorage/textures/icons.png | Bin 5100 -> 6435 bytes 12 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java b/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java index a638e899e..1023a337e 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java @@ -50,6 +50,7 @@ import net.minecraftforge.items.wrapper.InvWrapper; import net.minecraftforge.items.wrapper.SidedInvWrapper; import org.apache.commons.lang3.tuple.Pair; +import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.math.RoundingMode; import java.text.DecimalFormat; @@ -116,10 +117,15 @@ public final class RSUtils { return Pair.of(buf.readInt(), new FluidStack(FluidRegistry.getFluid(ByteBufUtils.readUTF8String(buf)), buf.readInt(), ByteBufUtils.readTag(buf))); } - public static ItemStack getStack(@Nullable ItemStack stack) { + public static ItemStack transformNullToEmpty(@Nullable ItemStack stack) { return stack == null ? ItemStack.EMPTY : stack; } + @Nullable + public static ItemStack transformEmptyToNull(@Nonnull ItemStack stack) { + return stack.isEmpty() ? null : stack; + } + @SuppressWarnings("unchecked") public static void createStorages(ItemStack disk, int slot, IStorageDisk[] itemStorages, IStorageDisk[] fluidStorages, Function itemStorageWrapper, Function fluidStorageWrapper) { if (disk.isEmpty()) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/FluidGridHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/FluidGridHandler.java index cc5b10e47..1dc6c2c83 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/FluidGridHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/FluidGridHandler.java @@ -89,7 +89,7 @@ public class FluidGridHandler implements IFluidGridHandler { @Override public void onInsertHeldContainer(EntityPlayerMP player) { - player.inventory.setItemStack(RSUtils.getStack(onInsert(player, player.inventory.getItemStack()))); + player.inventory.setItemStack(RSUtils.transformNullToEmpty(onInsert(player, player.inventory.getItemStack()))); player.updateHeldItem(); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/ItemGridHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/ItemGridHandler.java index a136d4afa..f0975c4cf 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/ItemGridHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/ItemGridHandler.java @@ -137,7 +137,7 @@ public class ItemGridHandler implements IItemGridHandler { } } } else { - player.inventory.setItemStack(RSUtils.getStack(network.insertItem(stack, size, false))); + player.inventory.setItemStack(RSUtils.transformNullToEmpty(network.insertItem(stack, size, false))); } player.updateHeldItem(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java index 96625b729..7d1cfe30b 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java @@ -256,7 +256,7 @@ public class NetworkNodeGrid extends NetworkNode implements IGrid { ItemStack took = network.extractItem(possibility, 1, IComparer.COMPARE_NBT | IComparer.COMPARE_STRIP_NBT | (possibility.getItem().isDamageable() ? 0 : IComparer.COMPARE_DAMAGE), false); if (took != null) { - matrix.setInventorySlotContents(i, RSUtils.getStack(took)); + matrix.setInventorySlotContents(i, RSUtils.transformNullToEmpty(took)); found = true; @@ -322,7 +322,7 @@ public class NetworkNodeGrid extends NetworkNode implements IGrid { } } else if (!slot.isEmpty()) { if (slot.getCount() == 1 && network != null) { - matrix.setInventorySlotContents(i, RSUtils.getStack(network.extractItem(slot, 1, false))); + matrix.setInventorySlotContents(i, RSUtils.transformNullToEmpty(network.extractItem(slot, 1, false))); } else { matrix.decrStackSize(i, 1); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java index 6988ec205..b13b28482 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java @@ -77,7 +77,7 @@ public class NetworkNodeInterface extends NetworkNode implements IComparable { if (wanted.isEmpty()) { if (!got.isEmpty()) { - exportItems.setStackInSlot(i, RSUtils.getStack(network.insertItemTracked(got, got.getCount()))); + exportItems.setStackInSlot(i, RSUtils.transformNullToEmpty(network.insertItemTracked(got, got.getCount()))); } } else { int delta = got.isEmpty() ? wanted.getCount() : (wanted.getCount() - got.getCount()); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/NetworkNodeDiskManipulator.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/NetworkNodeDiskManipulator.java index fdaa5422e..02b9e80ad 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/NetworkNodeDiskManipulator.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/diskmanipulator/NetworkNodeDiskManipulator.java @@ -168,12 +168,12 @@ public class NetworkNodeDiskManipulator extends NetworkNode implements IComparab ItemStack stack = storage.getStacks().get(i); ItemStack extracted = storage.extract(stack, upgrades.getItemInteractCount(), compare, false); - if (extracted == null || extracted.isEmpty()) { + if (extracted == null) { continue; } ItemStack remainder = network.insertItem(extracted, extracted.getCount(), false); - if (remainder == null || remainder.isEmpty()) { + if (remainder == null) { break; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemCyclops.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemCyclops.java index 7064ea331..54b867a57 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemCyclops.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemCyclops.java @@ -42,6 +42,7 @@ public class StorageItemCyclops extends StorageItemExternal { if (inventoryHash != oldInventoryHash) { super.detectChanges(network); + oldInventoryHash = inventoryHash; } } @@ -75,7 +76,7 @@ public class StorageItemCyclops extends StorageItemExternal { InventoryTileEntityBase inv = cyclopsInv.get(); if (inv != null && IFilterable.canTake(externalStorage.getItemFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) { - return SlotlessItemHandlerHelper.insertItem(inv, opposite, stack, size, simulate); + return RSUtils.transformEmptyToNull(SlotlessItemHandlerHelper.insertItem(inv, opposite, stack, size, simulate)); } return ItemHandlerHelper.copyStackWithSize(stack, size); @@ -86,7 +87,7 @@ public class StorageItemCyclops extends StorageItemExternal { public ItemStack extract(@Nonnull ItemStack stack, int size, int flags, boolean simulate) { InventoryTileEntityBase inv = cyclopsInv.get(); - return inv != null ? SlotlessItemHandlerHelper.extractItem(inv, opposite, stack, size, flags, simulate) : null; + return inv != null ? RSUtils.transformEmptyToNull(SlotlessItemHandlerHelper.extractItem(inv, opposite, stack, size, flags, simulate)) : null; } private NonNullList getStacks(@Nullable InventoryTileEntityBase inv) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemItemHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemItemHandler.java index e11cc082d..1c5162486 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemItemHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemItemHandler.java @@ -55,7 +55,7 @@ public class StorageItemItemHandler extends StorageItemExternal { IItemHandler handler = handlerSupplier.get(); if (handler != null && IFilterable.canTake(externalStorage.getItemFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) { - return ItemHandlerHelper.insertItem(handler, ItemHandlerHelper.copyStackWithSize(stack, size), simulate); + return RSUtils.transformEmptyToNull(ItemHandlerHelper.insertItem(handler, ItemHandlerHelper.copyStackWithSize(stack, size), simulate)); } return ItemHandlerHelper.copyStackWithSize(stack, size); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerGrid.java index 03b5d33c6..6b37037fc 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerGrid.java @@ -140,9 +140,9 @@ public class ContainerGrid extends ContainerBase { IFluidGridHandler fluidHandler = grid.getNetwork().getFluidGridHandler(); if (grid.getType() != EnumGridType.FLUID && itemHandler != null) { - slot.putStack(RSUtils.getStack(itemHandler.onInsert((EntityPlayerMP) player, slot.getStack()))); + slot.putStack(RSUtils.transformNullToEmpty(itemHandler.onInsert((EntityPlayerMP) player, slot.getStack()))); } else if (grid.getType() == EnumGridType.FLUID && fluidHandler != null) { - slot.putStack(RSUtils.getStack(fluidHandler.onInsert((EntityPlayerMP) player, slot.getStack()))); + slot.putStack(RSUtils.transformNullToEmpty(fluidHandler.onInsert((EntityPlayerMP) player, slot.getStack()))); } detectAndSendChanges(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridCraftingClear.java b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridCraftingClear.java index 039f68de9..7c822ca83 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridCraftingClear.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridCraftingClear.java @@ -40,7 +40,7 @@ public class MessageGridCraftingClear extends MessageHandlerPlayerToServer;?s|`7fH=2LZs= zdd?4oiY@Q}7o~$u?1F8vp1~n*f#-mWZs+}jHT=&7E9hxxX=v*hZ}FW30IAzYj~JZ{ zb)Ndux&+bud*hU$?_NSIF%EK1T6izFJVhr8(ZVhEG$p$sY%c>M5{59XTdHu?<_f2p zxgN~4?s}{`KbTg7MpT-oAbNI}ZD&@=DWW>-EXP*27&P)87S$E1fhnGpl2J zRoON{%^8KgFGFT1LkG?;w?V7)m|_lDW5#VNUV*r^)s@{tRk(X2F{OREv!wc{CFayQ zp~IiOvsE0|daRMvd?eQ3O_y}ng32*Vo*-rJaCb=Os+ffCj%7o-vn(s>X_QLROf$)2 z0;>*Svc1YRUUB@jl0T)}7(d3l*^TA{3#Zv#EON;2lVzp(fFNbfWn{QQGCFE;Iz;oB z9P5yUr-N@-xaP>*Uu1#CTU`3-cbi@PJzT93z<^7gdwvWnznq-8mV9`@RmR}7B%!4w zuEiMoQCPOJ0X6Q1YroJB$2DY6#gcXfcdSQ52-uf=S5jrQ(&TcdWY z%vy~>rVINm5+BN*<*iXad#HrtIzo7AiRDyJoRRJ|DZP&ZNzoz7O80Mr5t!*uh+jUY zKD;!^3y*{+QMDWT)|N>vUhtLT;8}dUKD*;q#_3_>rB%be+)7dLn<`Krjs3UZRV<77 zc;C?!w9tdqYOXSM7vf))K|dl_KYdQGVUv(48rj%V)iwK@bd#Ct2BJa4(w^PhEd<^; z1**nWrbZi<0^U*l@flm?GZtr}R(o2g@RepOQ9DOqbz(RY$9@c7C2xAyo$+v=U$tm( zI+dUp^iKl15J1k_0AT-eK`+B9lk#vgA}Eu+uc@X7-BjM6Z5=K&#SE1UU3|Qhe(JN?b?|aq2$I)yuJxl zaEXN(mljdPe!XXRB6pxW$Q=@@CD3G_2QGar2keduiEsiM9r9Z8cf%DU zi>$tKIJva4jqu6D{jL)2gZ8uq>jK6YIUT|OM@jAm*w+`pZ)xuxjOi~hgMA(j6Vz(W z=s9svkDO#aNCM}q$eI5#phO6ThYU{svhSE0AWhV6=Q_Z>8B<=at^)Lty5TMff}{Xv z`DQ0us^k$c`M|qe-pC6ja8mRD+_>%W+OZND+#UqLOK2x-FHj0Td^Iyf_~U3sfg1CK z-h0Dw=gufVe1v7qjN6U=jG0t@7OLt)uHJ4HA{Y_9>V)`!jT8btO_U6O-;rckS2 zQ}g;PZV}sv4<8^`cIHN?FztbC-czyd)F)ho$oiVAB{i!roPo)DnHvFo@N0pi#434s zg*k@eUzU8|*H0xgta;2LXiS@v0>u_aP|8oCmk+zE2^T42Xf%oQgZ)L!)Zn6`Tx`S+ zQlwm;#0bqN;>0yhQo(0|Ly?1v^3re)Aaw%}Dh~Mh#u+&tX*K&{cBl;Kzosun6FJ%=;le<7M11@|`5d)hjMwyVVC}PHS-zc>(|?r0;y2)kXlQt_y}&e$DXt z$=3VcjhZU`9N1ydNZB6<;{;^G_*&Eb*mUUiG_^W~XeOIMPg2@sO2Uu9>x{%t-FKR$6!xOgV~%EN2qjtbl`+$F?F>-)2rS&geW zze|T3l=AViq|YiXoDP!f>||Y$7>YHxB$U{-CVC}VKSoYS>$`{RopPCb5h4dM_+qtT zin%POINUOe&Yg8x-}0T&G<>1-nD@UPp6YHFAiQQ`14P4%XW!WY)3Kl&XoRa|$!Fg@ zTjkX8Nub$D?-IU56W_vD$b;+k*tmajchgQY0@HMkBguWac{5P;y8=2i(cJ1({AMyn zu)nUfhHml3?u7pxz(WOHdB}ilGpB`qLM8kI>Rfrj>ecrHDu}~Mrnl$=8g8?g3z7?l zJK`pdGfzz!vki^K^B4gr<6)S?K5@3qWypYIqC-`J1?f>7TU{?|OM6AA9+G?0rDyy= zMffr$*$#gM>D0Rc)=xfD-m^Mm#4vlrD7rkR#x_L#0=c5a1O^D_dA*9phX0 z0fBed^rp%wnaiTYVQ!9uF$Q^!x?RE;;oR!#y<_`%8LZ{1pX;T|nCeY`*G}pszj`+RFCySTV4*9`A|pX5(#f?mH{{kQbHA1Mthz!_-?sp8 zv+I%~6%CTFeR-P$9_IN~--G}qyxB;KU!4raemyPf3Q^E6@W`|1N9(Pe_;JOqU+Y<8 zw?Cj@SLR>qpNl+yGjnlfl|hq^oa~6geWE3o(9*7f>MMr_B2GT78xiKgjsywnmt`Kj zLa_(Tg?8JIi=gg9zq#wA&5b%<=l^>oM?~L_HVE$EF#b{v=Kxit5@Y z0i1|ACh;P+h*;?ejzEg?w{Rt@(fSEylZRVz8j9P%JE(AFHfLwbPeQ;1nzm%j@^ucG zA3piCQ^jMGTuvxDMxKYbo*CQ{zJoXzs{Lwy?Kws$jpa?Ae_6{kPKrC0wxf!O%6t#A zZ|TKj>y(Yw(VxahZZi)GSLECN@(*lK>5iqd>ujpDY<0F&Xq$>Fd~nAl%Ya*6h|_OB zA&heSPm^?zk2y*&o?d zYSX;o(N9@|6x*0L*dOLm2pc6gX>Z9YjY0Ia*= zoc(@bZbT)zwF>%dFBmOomcB)YA<;Ro6TV)nE34eO*NH5?rdCIk?`{0L9_kF~LnJ;0 zT`Z)?YA)}VxF)JqYbB$7Q9eGN_^_;OUk+`_0-BpfTauT4ANO2iKhJLaS*`{_gM5aa zQ-fuZHW|C0-0`!--d|O2YqouW{q(wSJNyDf`^V!yIbjOzlrG18r!W-aepR*yhtRkp zKqxP(%T-sR-y@q*E-MyWBt>&lP)B4OXjg9>`p=kQ!+p5nK8fF3SP}mLvwJr%;2;PC z9&!X$Cy{13)%Cor)EDJB#KrmE$5}kxI;ieGr2LbBIF0{T2I!6>&FCqUNb z%hUAPK4ke#-R53byI(mq978V)e2X_+pY))#jRX~~!Y}Z{YyNmlpMb3El|us0c{+yD z?bJZs+dKI~#Ze3HTh7xZ#oo!-w%9Vh0~-=V;ABcf{E*bfY6Lu*?pLVO2Mur;lPd6Ngo)^y+b+(QefQ0kl6~BI$!JiLQ`T{@ z29fS(R1u4SJC|N6Ovi)O0bBYe5uN#dRmKMIC#3HJPCW401a_fTgVf{5iR34Py)qy! z=kfG!9r#ar{<~b=V7uqxfXM>O1Z>_l#MnL#x`?rPkRN8)*{rHkpEA&YMz4Kt?9z|+ zL8mKRO`)%HI()`%eH5*JYvk*0)oi%OD3ikC_wf9lwxLQ61qCur_L&u2 zx#KSi`1%j6%b^8MmU7bx@H^BlO$L5@Q7#Ta7C!+}WKKR^9*GzAG%adl2PjJbCVgfb z!}QiCVV49gsW-{EG`Hv z@7QB@*oNml&IF=SCYxBQ=QWrGh8g`_Gf?p4(^2SkX;0(}Gk5%!PoclK+Dv?`jGI?? zW8R~k4}wqijmHINxnm0q*spu>nR}pZRKESN zi=DQ*?Yg*mL-mdlw}^1RrU?krw8@?jW7?*tkH;qxZ85&b@$^rdcXW^GwTKRq(j5xnyg}TN2`MCi*Vl9Zm2l=L2D4nZ@B`q1 zCs74|JdsFhsKyo9>1memE=wtTLAJ_x61_8J4wFq=AI_Q|mt!^He#VH&ze&NVIu7g7 z8_DIO(r{EzY}MtDt_`wkF-0?8xHQ?N0aFh=&?Y)J5FHbn5(Mz_D}DyHilN&fayw)1 za_=+e+t2$zIc)u%mf2tTf`(6~5flKfkLi^^3Kqj2BMdY3PsSQ9i}E zuKU)u2rgSQt0L2~%QqY#sM701Gd>)deQIX7CPzH_OIzE*3)qyetO_HhSr%G5>SI3c zr=jR&w$my#^AZ+(m!_*l?(>6ajrv;O1N3g-VpDJs6#YZYX^7S~;i9B3#mmHU81$p6 zL}H#3y8Uy-hxLBH1l&OSFTP_MW)a&h?!4#*=YK_n1?0AlY-friI9V7us`HM-`T@wg@f(b4HLohVo{?g-Gg1zt9_ z-HHZ7_W{41O=!F+z#JsLr3faH4%K%Yyt=HlSA@a8|De+OVvbECSMEWnnvt@D8E;v4 z4ho>|5Urcui5?9S*O`$=NC5izK9j-+b-qlb>O);`79}>~(d|j*nU7O&tlU$8s=MgL zAPcDL>yU=ZkxQ++#wLH{oC&@S*}bEuH+c^X>Z-4ulS10eoUyIekJEW6>Yvhk<~fC2)WR?_gdFIOvw)Mc>;i~%3Zdq8V~voa^kBi&AM ztuJ{WM{?PmEJacTk)n3lZlyw3@l(`ac3MERdbWBG{t0zW!*USYyeXeXCEj;GiOxBQ9%VRHhqL^3&QX?xkj$4#TFdap))GIx>KX7A%b4Kx`)Vgh(^ku* zyJwa^e>eO#vnx{)&}I>4WW!{7&7ieZN}sZUcI zDW;6N9N@z7_p@bQnI!ET3-jb3b$NjRdXq4>&r?^stpVc+=X(6qk`p>?Y#xfTR@fe$ zS0qm8_nB-$xO7RO!zi+1VD8|S#j)N;!N(nU^nlt6Bbg5X+pzLi?o*n5Mfj?fgN@!?ee z+5_m<`{}zlc?qT2DpR)2A=>SLL&mlH$A>eOJh-Y>Fdd+$cOn{rz(R9>f3OT*{*-^J@n5>)&H4=F@?4y8rI+jeyV9o|7mOB6#^brG;mCzeUlJ1AzbV3}xLbi(iLc)9{d|=NL@8&}rguecKcfK!A zw)Y|5769BnfrnR!my0uA4 zL1A0EP+fwV`~ZPdgoM8}VzUP~B9KetQS8=2w&8TtfRG>J3xx}VL{fSCf0#S%VbX<}u}H8V4VtZ61@mNpjVmPU{{)y&eAN;5U18dJ^a zW>mU475aWr(A^|FKe{_>-S@rF6@wBG5)w=|H4O_3GYPXW5lj3{&1f{5Db?K6+}s$I zFqX_pBI%+Z7Fc{KS0V@w5r{?5j78tw;?NKV1@-i=5QM=lE`J*qNxvrwO_^!9 zZ?LJE3Ds06oQdn3v^2z>|G#ehtF+WZ7R)zw=S#(*5-y5|-=ZJNXzu>|Ml*t_H*{Bt z00qT2h$ZHR3i+at4J-x){l|nS;L&+}su`DOVQ%b4HRl>zTCDap_BG>jjr}ZW7Fohjk_hKMB|VsX$97Ptk7L&VYmaWKSWenTBv&K8Jx;xOro8JPZxn#Gq0 z_VIb^Bw``-EzfkpzxeQfi~lcu-v2j$rl?bZA@{SOE(yEiE_+~e(dnP)gX81lPjcin7c`LSY8TVo*Nu%k=x3}V$x8|Y0|P(7wh<%CA4Rqc zVCB%Uw)gTqnm8?MQS)hAHJ8pYGm$K-Mz+ks*<0#%vS_&PN|_mVy1AnEP4u3Sd*(y* z1izXr-7)KJ+m>2?989wlM-6Z6G_bW}jPoM&AZ(k#?4^U#w~o(yb`+B@-}N$0Wbk|x za416;!UoIiKC|uUU;nh<(yWqy+4XMNnfC=34amp}EZZ(7cf75*6)*RB-T63ey7Nuq z17fUU$)mA*+X|y58lIlW|JfR@A<1Omit^;d@m=_so(q%XXCKtW3>S_=IbXHzO+I+@ z{Bg{?iSr#aIE{?FAr;4XMD;bb&6%o=D^=W%`cvZH&($6pDN9@^J)jMrBqLqVf7|q+ zG&`DBaFm%amBlG=KX>jNe)@&5DgW2iCc&34mI!*N!)qK(Qcn<}L#~H^I(xu=SL;3b zPlbU;SwT%}FX`^Gn!NdB`0>d!d^^Ud6*oTCXRRf{y0F?`6i;6F%x=h&SC-l9gRXuI z=WFwcH=obuYq3hkn4IZHr;_c8#v_O9TJq!{sEVJJeI`?XB|;<5>-09oN{7{#6TGtq zrI@iz@7HMgh{f5j+S|lwvHTK+Pw%UgEs#o@1y9!FS-&Q z_V%u9ql_3EEf=*GZa4WE09d=Pudh_Nt1x_vt?UyXlcT{MD1O&be%e#n=k4oT{`URe zMG=-Vy}Fjdlb24evyM4CsuI8K?Z`5lLYn5hg9gX=ZZD)eZ3a{;rklO+9$(gauc_jI zAZy_T5wCK((F5;MW4b$GK9Fi6E182wm6aEXv@m<4bb1-UC|Pv_%<%J6a@A|v;p~KW zAY(!IWgwZA^Ct&ZMm{oQ@CuWd)D&yqDFc@VoSPvs8KW~RK1c#IB3v~-*MD`h7M8fWds)U5QJIH~RE&?-q}qWtEkcTL$d$KFQ|M2AyiJ7ZaeRV*@SR z4LPsU<)n(v8{TD+9k+WeIl|Lkgc}9&FZ+UIVy?5YjCM-H2$XqxLUd zuIY*o>fZi+*)zf(eOObiXLrvc?+IBJ7xB=3`Z!6lI=T!4gB=MV@0H!M&isOYKO0yX zY%&Hb1NHxdzcxI}-Aal5&f7p=Sx~ba@HDaUquzP@9tXderv_*U*{!>*!BcfE7GP5i zSN07?ny_c9BTLG1m7N|GTqG-L=^l$E*aLNx8vr1B@N(L+XKEx;%ArGZvTKTqij23h z*#(gRLp@~I@aM>*@e_MD*`Ho0lSSBahdwob3=jG`>37VvO*07(m9sX#_q;W6YzWl3 z?Z~>%dp<6#knfok=8x_Uq$V9cS7T6(%Q-RCxN&=K+UB|gNTxhPGxX*uHU)~5SF0xZ zmL~yLXK5TUW&2zso;PB2*3&Tdy8MyWw$af~!>)|jigldN({F7S%{}(^eh=2?uKii< zYpt#4TrX(sUa02GQV7aOxWseXuOcFcX-&hPt@{U5oWk1jNP?>AiI-L){AY@n#7CKe!Jjx7LeXWfX-j8Pqz-!$)NWb%CCf_<*YOVyz+2;3VU zm&cd9^p3!;TD5BX0VG2ul^M4Y-&<}}nM$m}Jki%tg zq#-3fPjzqiIL1#|Nmx2Ry}*!g=lAp*)uiL|kPnuu;Id;PuX|(M{w;`f%bt-lP1=ggq9btn;PsSI z)dE8uf(=*WG6)A6k#4uJ&$ns(o~>Rt^0g^C+IiLx*bxpwhbd9`Uk`yi%Pzf>%kJY! za8C8OA@!p>NQ&OjApl6wUXtPvrn0B>ZqN~8>Mulff-ORb1jA7=wx9%e`ZBS$9&8-~ z?pnUKz>WmfhnC@zR#7e;T9yNoz$%L({MiN=!j3g*udRI0=qVtTeDhW1=i}D^gav2bfz}wKbL+lz z8^}k;C-RTabUWTfp}I2LZ3CJ>Vw%17$0?x9}Z*F#oMJqsv5 zL8y9$tBrh>+PW?GXc}A=s01M%R*%nA((uxI*BZJat1 z3=s8phnZEX(w2PU;HCLC^*kt#=-QRQiyVp~C{)z}9++2Q0IWnqIFZ39Z2;nhg(_Q{ zj7DDPF+j*-FtKn-+YCN}FX80dvGD5ZXs$|f1;m8eIbB${eD0BKD_vk8%ol zV3QHZYHbX&vvW{J4iZZIt_iJ&%ZD)L>Yzz4s%8B3OD)BELu6q^VBlnu671@LjJ+r_bFuzlV4HsP#oI&J(UiB#2FQU+q3mMi9H9vX{93{aXbp}D-=Ce z8Gi>H8gV6WwCi>DDr?hWGF5-P`KJyMaQHSl6xlRnZ9(hr@z4xG(Mo|GusJ=luV(dz z)LrZKEm$hGFu1c?`=F-JJ&$_K>hlk}xjFavrG^&D{IeNS;VoUyxv6xNFaZL@OvTu+ zA`lGuYrh!hs{S0sU?h+}%-2D)~-TUmj~PIQs_? zA-L0Kr{Cd7x>RLBD5a&#H-C|)blN7ql7TS`~otfH+X7ZT$fa`7Rex{9$a^MfL)5-By72pugdG{H7H!)&ql`*)GyIFOo*o}N9f6QRe^p31ez&EWYY z3_O8VaQ0pF!>p_+d2wFrq(K=5;n;%pHtjEt-+ekPBmtFha9jge&Qg@cmWhqwj=A&E zQjud$n|YkU|6=E|fM7PeMNt$TNPNeRf+=`DUfFl2Ak;05It`!8=phs=H!85Pl zYAGTQA3jVsW8s0~{&;h9R^+omtv|?!GnS%PtJS%yYhTNGA!)#iY8MoU%Zg!4FF3!;QV7yZq9#`%UvjD}Rs6kVMa=ion;i-I_Zfe7Au zcXPi+cwW3-rVidgV1@SCehYNiOBa9_RYswc=e6x9Am_9mB5l3r8&$SMEwm_Xr)~E1 zc|B0Fp9x5Xb8bIu0}3t)9(CMk<~k1e`$I*oLTI7@xr1eL3U@ZdeRxw092zf667X$-*^6! zalN9C1^vnZbr!c6;pv%!FT7LQUJgE8@n9`FMfLX(FLh8_Kh(W)Jk^hB*ONyM8J@x^ j?3xRt{(cP?r&X!oWyWYUt*aCR&})O^W>%Ji&;I`b@G(S=