From b31f2939e447acf059d5b38323d90e7fe82b3c37 Mon Sep 17 00:00:00 2001 From: SiBorea Date: Wed, 4 Sep 2024 13:34:09 +0800 Subject: [PATCH 01/39] Add JMockit's MockUp to Mockito migration --- .../testing/jmockit/JMockitBlockType.java | 1 + .../jmockit/JMockitMockUpToMockito.java | 229 ++++++++++++++++ .../rewrite/classpath/mockito-core-5.12.0.jar | Bin 0 -> 703984 bytes .../resources/META-INF/rewrite/jmockit.yml | 1 + .../jmockit/JMockitMockUpToMockitoTest.java | 253 ++++++++++++++++++ 5 files changed, 484 insertions(+) create mode 100644 src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java create mode 100644 src/main/resources/META-INF/rewrite/classpath/mockito-core-5.12.0.jar create mode 100644 src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitBlockType.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitBlockType.java index b36c9240f..a33e66994 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitBlockType.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitBlockType.java @@ -20,6 +20,7 @@ @Getter enum JMockitBlockType { + MockUp, Expectations, Verifications, NonStrictExpectations; diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java new file mode 100644 index 000000000..f37a8c53f --- /dev/null +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -0,0 +1,229 @@ +/* + * Copyright 2024 the original author or authors. + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * https://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.openrewrite.java.testing.jmockit; + +import static java.util.stream.Collectors.toList; +import org.openrewrite.ExecutionContext; +import org.openrewrite.Preconditions; +import org.openrewrite.Recipe; +import org.openrewrite.TreeVisitor; +import org.openrewrite.java.JavaIsoVisitor; +import org.openrewrite.java.JavaParser; +import org.openrewrite.java.JavaTemplate; +import org.openrewrite.java.search.UsesType; +import static org.openrewrite.java.testing.jmockit.JMockitBlockType.MockUp; +import static org.openrewrite.java.tree.Flag.Static; +import org.openrewrite.java.tree.J; +import org.openrewrite.java.tree.JavaType; +import org.openrewrite.java.tree.Statement; +import org.openrewrite.java.tree.TypeUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +public class JMockitMockUpToMockito extends Recipe { + @Override + public String getDisplayName() { + return "Rewrite JMockit MockUp to Mockito statements"; + } + + @Override + public String getDescription() { + return "Rewrites JMockit `MockUp` blocks to Mockito statements."; + } + + @Override + public TreeVisitor getVisitor() { + return Preconditions.check(new UsesType<>(MockUp.getFqn(), false), new JMockitMockUpToMockitoVisitor()); + } + + private static class JMockitMockUpToMockitoVisitor extends JavaIsoVisitor { + private void appendMethod(StringBuilder sb, J.MethodDeclaration m) { + sb.append("("); + if (!m.getParameters().isEmpty()) { + for (int i = 0; i < m.getParameters().size(); i++) { + Statement s = m.getParameters().get(i); + if (s instanceof J.VariableDeclarations) { + J.VariableDeclarations param = (J.VariableDeclarations) s; + if (param.getType() instanceof JavaType.Primitive) { + switch (param.getType().toString()) { + case "int": + sb.append("anyInt()"); + break; + case "long": + sb.append("anyLong()"); + break; + case "double": + sb.append("anyDouble()"); + break; + case "float": + sb.append("anyFloat()"); + break; + case "short": + sb.append("anyShort()"); + break; + case "byte": + sb.append("anyByte()"); + break; + case "char": + sb.append("anyChar()"); + break; + case "boolean": + sb.append("anyBoolean()"); + break; + } + } else { + String paramType = param.getTypeAsFullyQualified().getClassName(); + sb.append("nullable(").append(paramType).append(".class").append(")"); + } + } + if (i < m.getParameters().size() - 1) { + sb.append(", "); + } + } + } + sb.append(")").append(")"); + sb.append(".thenAnswer(invocation -> {"); + for (Statement s : m.getBody().getStatements()) { + sb.append(s.printTrimmed()); + sb.append(";"); + } + sb.append("});"); + } + + @Override + public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDeclaration, ExecutionContext ctx) { + J.MethodDeclaration md = super.visitMethodDeclaration(methodDeclaration, ctx); + if (md.getBody() == null) { + return md; + } + + // Create the new statement + J.Block body = md.getBody(); + List shouldClose = new ArrayList<>(); + for (Statement statement : body.getStatements()) { + if (!(statement instanceof J.NewClass)) { + continue; + } + + J.NewClass newClass = (J.NewClass) statement; + if (newClass.getClazz() == null || newClass.getBody() == null) { + continue; + } + + JavaType mockType = ((J.ParameterizedType) newClass.getClazz()).getTypeParameters().get(0).getType(); + String className = TypeUtils.asFullyQualified(mockType).getClassName(); + String mockName = className.replace(".", "_"); + StringBuilder mockStatements = new StringBuilder(); + + List mockedMethods = newClass.getBody() + .getStatements() + .stream() + .filter(s -> s instanceof J.MethodDeclaration) + .filter(s -> ((J.MethodDeclaration) s).getLeadingAnnotations().stream() + .anyMatch(o -> TypeUtils.isOfClassType(o.getType(), "mockit.Mock"))) + // Ignore void methods + .filter(s -> !"void".equals(((J.MethodDeclaration) s).getReturnTypeExpression().toString())) + .collect(toList()); + + Set staticMethods = ((JavaType.Class) mockType) + .getMethods() + .stream() + .filter(m -> m.getFlags().contains(Static)) + .map(JavaType.Method::getName) + .collect(Collectors.toSet()); + + // Static + List methods = mockedMethods + .stream() + .filter(s -> staticMethods.contains(((J.MethodDeclaration) s).getSimpleName())) + .collect(toList()); + if (!methods.isEmpty()) { + mockStatements.append("MockedStatic<").append(className).append("> mockStatic").append(mockName).append(" = mockStatic(").append(className).append(".class);"); + for (Statement method : methods) { + J.MethodDeclaration m = (J.MethodDeclaration) method; + mockStatements.append("mockStatic").append(mockName).append(".when(() -> ").append(className).append(".").append(m.getSimpleName()); + appendMethod(mockStatements, m); + } + maybeAddImport("org.mockito.MockedStatic"); + shouldClose.add("mockStatic" + mockName); + } + + // Instance + methods = mockedMethods + .stream() + .filter(s -> !staticMethods.contains(((J.MethodDeclaration) s).getSimpleName())) + .collect(toList()); + if (!methods.isEmpty()) { + mockStatements.append("MockedConstruction<").append(className).append("> mockObj").append(mockName).append(" = mockConstruction(").append(className).append(".class, (mock, context) -> {"); + for (Statement method : methods) { + J.MethodDeclaration m = (J.MethodDeclaration) method; + mockStatements.append("when(mock.").append(m.getSimpleName()); + appendMethod(mockStatements, m); + } + mockStatements.append("});"); + + maybeAddImport("org.mockito.MockedConstruction", null, false); + shouldClose.add("mockObj" + mockName); + } + + StringBuilder otherStatements = new StringBuilder(); + newClass.getBody() + .getStatements() + .stream() + .filter(s -> { + if (s instanceof J.MethodDeclaration) { + return ((J.MethodDeclaration) s).getLeadingAnnotations().stream() + .noneMatch(o -> TypeUtils.isOfClassType(o.getType(), "mockit.Mock")); + } + return true; + }) + .forEach(s -> { + otherStatements.append(s.printTrimmed()); + otherStatements.append(";"); + }); + + JavaTemplate tpl = JavaTemplate + .builder(otherStatements.toString() + mockStatements) + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, "mockito-core-5.12")) + .imports("org.mockito.MockedStatic", "org.mockito.MockedConstruction") + .staticImports("org.mockito.Mockito.*") + .contextSensitive() + .build(); + md = maybeAutoFormat(md, tpl.apply(updateCursor(md), statement.getCoordinates().replace()), ctx); + } + + for (String o : shouldClose) { + JavaTemplate tpl = JavaTemplate + .builder(o + ".close();") + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, "mockito-core-5.12")) + .imports("org.mockito.MockedStatic", "org.mockito.MockedConstruction") + .staticImports("org.mockito.Mockito.*") + .contextSensitive() + .build(); + md = maybeAutoFormat(md, tpl.apply(updateCursor(md), md.getBody().getCoordinates().lastStatement()), ctx); + } + + maybeAddImport("org.mockito.Mockito", "*", false); + maybeRemoveImport("mockit.Mock"); + maybeRemoveImport("mockit.MockUp"); + + return md; + } + } +} diff --git a/src/main/resources/META-INF/rewrite/classpath/mockito-core-5.12.0.jar b/src/main/resources/META-INF/rewrite/classpath/mockito-core-5.12.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..e256989605e2e81118378c687bd92a9e0967ff52 GIT binary patch literal 703984 zcmb5U1CTDwvNb%j$F^TK&Pl%nS8vg6Fb?*s=2Q4%1EfNlMt{iDCZp(N#Zq;X=;C6P4;;Gy+Z&Ez&1eEeU@#f&sR{hRxNw( z=u~=sI&;VoRv@P$laI3jzjSDpu@oqZHvH~SV$clA zho)o?@6iE+@v4kuG64- zdSa2^dd28c*^aF5m`Nk#7_mElRjDt~qgDMRWQ*0CE_&j6To{D~W-Up%M)2>W;)pb} zMnE=|39P%5!|GqKx@vex*KHeqe>U^Xgq?GFLM#f2r@%pMS=N!#m)FAP$i*Mzuh{O> zzuKh3siPh!*9zp~dQ68X$UxQ&)|?_uk9a|iDqnw+p5XQ8!4&NtNBmD%!l9Svh)pE5 zSr)c<)M42{Yy4HSnw?=TIoY?qbx*PD9{l>)dIhF`*`0_39|TF3ti;2y@2cAte*p-4 z0Yt}0$~r&&UcL)+IW_HhX1aKT;Az+f(f5RV;SA^Tcm+#v1jyuAo@+I81I1oZZvZ>s z@t=;aanr?lwzoH*p>3PV6$ENH_0d)A?_8A*y$?mZ3&prWq|^i2(~6r*mOMj!H?s&! z^*j?f#V)WWMyGoRVdy;H&k_jx)sb8LSXPF#Q~@BnD-+x3_hOa1>mUaL zZhH-Fc1M%+#Er;c?@*fe{Hn4frzAAMP2l@|C=58lF;}|?Vm{-JfgAse8_YRMyc910 zoF`sSp4Z%%X>A{U)h)ycV(t7i_y)_bTegUDq9H8_$G(}?{w519QO(yN#zN)Qj< z{lN$|+c2GID*+vWN{rkW@1Y2&%dAMgcdr!f^qB%J6WKbltcPQxvkCtS>`}ZEJUPKK zNOf~D572e~>N$*e`7tOUJI5Ojr5EhfJiTtv#84pH2=@)}VSUXw^#^AIc@S1GvRZdjn z#*HS=P2MMPAv+(o@#i?RYx!75p0csyS?%KI`#B;4@^k=}qXU#_$ShWJUSj!YcrUQH zoCPmCqupwBBpjjtxUgrCO+gHQ%;@|u&bZC+^`=jH5f`y>0!@9)M4vGQOqbX4#)HIX zz*elFj^Gf`ZfL<9a(g#O~Wvz@FXl&U?CXk&s@X z$Y;=Jlx{Dl^8l-)w>9UfG>R2d$oyKuKr0nfEZdIw)%|G8;V+ofrp1pce1@@# zQ@yB$7d^iM?1D~5?FqhRO2u{vazUpfwUt8DTW2ZSj@9{9P}KYRnQnF|q_qmu#OZfH z(D?R+kXskcbkA3v7#D(jJ&L&vWfY?NBreqANQucsr?t)33_jF6CoGj}cWRlDIV*8z zTJf~1J?`0NW*f=zSTM|*c+jzJ{Y0;~0_XMp1l(VNd~rC>CHFE9@+Hc4yr%^|J`H)% zy7;Oq`eeuV{OMMeFm_G%KK|#}`)rT_nBGBF)JnKZci>%I(_?=AOj}}S=5Ye1I3_N= zT~P*Zxgvrth?|Q{#wC*a^AAo>%#N*Z)I<~G7vRR~M&O2_=IS!wG*zw z;Wo}gcWQG7vmAMr3F;9hXv}*V5gEb}&8XZwvvac*7F*Q#$AWl|?d zGAv8gRkN*V?SqzyGN~%LBN}S@wMA*lOX1>UM-+W&9gGJI8X;Q8Y7I9oz{(0 zPtuzwm%|`=g#=&$bZ?a&xq`!Ie;AK)0sKBao0^Q8A*iuOogjThZo@-N$pswIDmj;L zWhXkU*zg|LvYPQmS7fCe>=QBf>h5bqw-r2PJN}9QLid46jjVJJs2bMTcUWffE%=7f zMDNwcUy;@t1&p0BMK=S@%6rF@VS8=y&9PV+{^`U;1$1Hqq8(DtqBozLguk1f<6r_Yg-2{xYPrzevBO4@I*e<+)I zIAMYV1OUJ+FTh_4_wV=~*k8&fEg>W#t0bbMsAsoM5AX9*!hW|Xp`dnUGQYh!h-@W+ z%~2dV5{tf1Gf2)VZhzML2-oc^E$!STix=Bd^RNotdw(qvA%b%cu#mG4qh)Xi7zMH(Oj5B>Cepe>l zJ>wEzfS!mbtSwhxPz^b?;DkD{^xc=cd1=%TE_1=#DyvvH&YkQSmq;1nt}ZNV-;mI4 zv?rXpSH=jZW{gxUKX*Ht*4EVz$G|aA=vhRuU$)jEj$*jm>j7Nt9l!ccXn=zYPkbRp z&3=jPwDEjxa4es7VricuoocsUfkya+KX4+A-z~|(U((YX+n;(&zwg;*6I_sKns?Ta z%OA~u9Gno-)_%ERD$Gx(P9Kb$4(&8YDd*jF;eq<(nY-3cE9Bn>Fa%VYp8TwHOk9l? z#F#&s`oY@2x1M*Qyqluyo83SO>98?Ub`7P8^9pl!T7j~^SuB6>9TT0`054ivuxdla zvM6hIjY}KX?y_{FL0A`Rlr;fn&UP|u$xH1Xp?Z%qO7VY|HN&-7IwA<)&jPUe@uQm(i&MC zI64lcZYW`?V2}8a#r~pbme)#D&0W;|6%@>csz|JzuOFzXO1WH~VGJRaqO-Z>>sp~& zvE+`iljSh%!;gbk>Qd~(ulFc7OEzM*gEPaiMm@Hc&?U{3gi(JvcJuP)<&%=xu=m~5 zvkm0S@Y)V52tLfrgSN5AxMHjnF;-4-R$e*?&6FcMVM$9`J{(<$RVNjnwxU9mcXFQ* zZ%H}{j$djMNRQ2Lk55}s&k=@}|FA{nEFYskj+2qJJlJW7dL|*WgYZVhIx*o2^S1&)X!PL-bdB*!IT zo~7Fk>J^(!T)5!v^p=-J&`3+CBg8Ad6}WgHmV&2Am-pm$hWRWIj-c3sr{irN5XgF1 zWHkt85g04_b$T!4kv==^afbOMkd9y2il?*PDB)TRTRa*a%Rf74YYuLiZ#P%7!k8Zd2&%?v1wVQ(6XXrqZ8}-GedkYM$X_!P{=hAg(p5a zRX#0JTk`Qc%~Y<4fbTJav~uhfEZsS8Y7#O9S$aHyIXI}RSX9XHJE7mGvn!Ff$}Aea zqJn+HG_EPQC?$@8?mP*Ue{PT*zFlII{-27~VAX1|&X7=Tm#MUaeY;`d<5-d$hnRw; zf?o(iafMYn0^5Tac_5$kM4Bb086kf^zwjE>(twIn|Aw0I#*Umz@aa}e_{i8?;)Dw3 zzMFiy;u>JWpx+5mjfN6ZIkfOjZkR(=iHolAZ?L`{--z^gkJrQato9P+bo1ub61x1d*b_{kGy{Py)qy+rBnr+ z*Ch~d9+<;ZOunmbqCv;%1zRcE+|jWHwPD8p(hS8zI+dFz>)mh1Kov7!afx@HsC{c0 zZ|__R@OU2+6cyZP1Z(hyu7>=E>!a?$R-NYq{Y&s9C1bNvAG8cgs3b?XJFUcVWuMFE*x;4F!A zg@Bcnex*|aRrOQ7x))g=sbG1b?DT-vXq`sD7psJC1|2UwZ}Ye&n$Rh_KsAr3-hzfU z79)rYf!17!5m0G#Duxp7kz24Eh)C!|8UD@cfoQCKsYvz*RxPTexi!Yt_E#8GgI!>s zAy6}nYO!E1S+FYPo3gO2!6K%ZR%O6co9ZxCJkkSrh79fKS82eWWw0ugnsl%)m8hSw zK&{woi=(ELns~6S6NkJ<^jmONaj-s6RW?TYvQ6sv=vQ^Xo^7x`U{y9|`m&AcUeGT) zU@tvbpS{XmLIZI0>v|YgFJLdhSf7Q;T@nLuOzV8;SO30)80)i9`7<{d*RbJ_K`k53 zs+{#@iLy;*0FGI09(_R9QLneD5#LCUK{(NBYSdN$6raG_G3-)(lV(RKWh+is7ZG=BN!%yFFV+VObq+GG3qUfTeu#X|Mk zHJnXkTj;C%+%+E_2V>%(GC7X4wx6s86;nJGzV%IGw6C1m^zob@efRSt1JErskY7j} zGpVEn&1hU@Fd7Fpjnd{sACHN`Dt2JbIG_Fas)e-l+J)oC0YlNgsJ{RG3* zs&TPwRJ4HOtqzCfIon%hXHe_n#+jKj2#sz%+drflWYD+)oZ)3p)$#!zz%l_vxYlXF zpk5;qJ~c?LY2&xyRhy)>)wf%G^hSQ|o_?~CD-v;a$gXJ{!sT_VVB1zeJfY5;a@_WW zoN*`6ILH4YK-BW4E)jW$uxW^E)VV4i>GHZu3)|md)GHYwJwfAA{v>A z=f8Q31nr{ytVC~q1lobl%!!3um=YhiH5GMjP&>6o9zO>2mWRXHTF&(rhGrLTVrozK zD3JKy{mW z-qmlN3RFnTP}=L(7Y-M?R|wv0_PK{2eGwIMyn7QKsHOPD@q7UA^kh^esEs!Pju+8) zz*8O*ds2&6yt)zPISx(sLw*<&qNF}~F9h%vneSPSX;s7X5{zsldY^|Dk3v}a0t_hn zT|ahXSPD`>fF9kG(>YV%K{6>BcUTi=9Bz-bGR)+6ng2u}0pv!zy7%npGnQ%a%TcbH zvJ|xt)gGo~mFaK_^;Q_L?8-3HS*C$ZI(xn|>GLH4M^q1&0PqmBc~1JSnn*F79;teqI5>^*3{ zH=M;RT0B86q>C%&9URMfdNX$Ah4{fJ(&1YAgo5lsaSy6%`8TJOVY8?HcuX3Mm4wvX z2p|0#F}dek-I!C6C*#DI{Cu>z1cdE~P+fJoU^hBycLE-a{jS(k=Zi7h?F-Z{Kpu`> zkJmlcR~NS?KR_Ih?Y&42zmBn59i}+UNi@=qAq%%Ad2umps5=*R>1=_48uP}%9`%1Ir?%F(TYFt6VZ zcWxoBAiZSKbwwd58`wEIx1U+ZTv#3UV=f~nc-^8mBlMMVlfoD^mv@kE->%;C*wP}5 zpVQll-GymnFf^}=rT{-^ewyh1$gTS59$mY`BYeK^ExtImo=BS!yGAJvy)YJ^j|Yss zIa{2oAVjN>$f!b~(R(lEW8$biBeydk9D9T@Oq(JpPIbv0tDWFaAavJigX<=A1fJJW zXl@!2lMbK9l?SX7M9YxN(ITyFy_#MU20WpaA;`%T8c5388>j|Geky+y40ysTN05_A zG!m!|T{j>(q6w%Q=pttp-9q@q?A#loKkK*Vc3K!R5qn3W0ojmR#I&9udMjLhHhXQJ;X(f zQW8ZHl0lPqI>ujqiR1t5Me)yGD{)U|ij)nB%ISs5qpi017hZ~#j)}_t+LSbj%Dnt# zp6W%)$K++eMar6?_Gxgc4Jw8IYYbji3o~koU&JUTK|)?MFDM>lBetCNzotjAwPKef zB~7B^CFLcHf?^>%&@^7+6w?X{5fc>&4$eiE1r#YC5|uUEl-K|6M7&r>q#|jO9WPmt zD2at)3p&6f`oD)HNl2sVq(zK!5=APKMN#qN6vjLP|C)tNJ6IUy6#Bo`qQyQDQY5)a zQdTKa8f&M-I;SO$n~|4oP8HQ>#E)-~C*`P7B+c}n7`Ng~(5|;d@JP{y8-3BVzv_fV z%nYCjSLy|hOc-rV2)roPb%*3$NLH4N8+!FeKS}iuB^=cyx06RdfwsHqIXGwzzbmuk z!XZ4;fjpW(yi20stI;gBeL|jAAU-x(@?#-1N&tH4_;)M7n3MT4gFMPWysNV0>VU6T z`DQ2QGA;Q&6OrfpX2<24RREH}Ki2-@q~f3HYauxW@P4@HHbrQ!>HC7N?i29rQnW3# z0zcQG@UtYR4!P-l0LXvRv1S1L(sh=H%1eNB+6<1CI(?}K;EkSDf_%(`;UUZ8tIeaW z{6ncsb6U*=?j`D%&bm0r0PEGqpx9L3p(}Xm24cA;FD3eJ=zOLpa*74%G#)G~aSDgC zpk~!|p$7id^ed}5Z-MbEr99#>2K+1G7mtOI+_?D6L_DXs;8OniJCxv0IX~U%EEG5f zP1?k|qednb@;YAL0Z0i{JbwKf7w5NF5LEqcqD($F)(d6npOtUDdIxqaLaY~2r_Qqe zHEQ-Ua)oNbmSFiV|8UgIM_G~e=vfcSQ?I@=Q_^v};t%gYQL4>JkP^&z@*09`F?jb@ zK^P7Dau?-yBJe5YQWq#$=QMv=BBx?O9d8V8>ZZ*QFI7k$Ve>bMz--!g2F>|<^RdzU zf;G9ogd(!BuEK=+(Hs#nGZeBQu(6b@kfR^Oprti0T>%-1MF^}T#g_+og3lEMXAuDz zsl`AeWs~twko;{0`D9_7Kau6qF+F079gyRRrE29H6)*74Is#b8D@xsY~FXjdIrKsBu$7d!rdccLX>E$u{uT3IEi%Wj_{D~4U36$e#P_rLTS zrDUYL#UL1cdNydc@1o&vT(hUdyHyCZSkqRp_C{=Alm7a8x~- zlM8(`Dlup<+_t*y)oy2?95B4)uj|n8Xz@IzqFaLD+?!Dhy6jQ5d+k8^P%5@R;r^j) zf?!6827e{3X#D>~*)aYmW&6ML^emMxwGCrrZ$UoAb$Uw-_F>kO)OA#`p}tjXgG5F2 z>Y~-gCB~*=8}dHpy+Vo&@A;q6stm@X)3upz1>BntR?nz$gx|8icV60FcwY{_Mt6Qb z@6dcTtRqg5=#4d_)E6qhO4m%OEgG}SRV(m*Z6b2tLV_PJ1Q~kER8tqFBn(Llpwefa z?ID@T@HAXe)u`?_`{P9iTPevT$&uYE8C zTM>$qXpg`EW~bX?QX+&9rP-LMg`I`Zg&vh}SWb~{WW34`(m))v%9P<@6h^ru_+L@F zYfaferb6I7$eu}7pzwi?HWy(;z21RG`abwj?;!<(xFV(Jtvw|Ed2KwgEF27vluYd{ zNeo@yoLefkTn(>E3--MrleAg8vP{~{Og{jWCM4Zwf>3(Z?p?)bP7K+HKJF(IXE9o- zytA)c8Zek1jpy7haOQOto&*=qIjmKgkbf*Fb#_*=xNu=JrE1R4P!UzTe3D?AkH0Y88GY^$HBaM@tg{H;`X+0) z6r2YShBH~#kj&`delV5L^MW7D_0J~s1sLa=9U3ZC{)$TwVUMfKaX+J^iFsSqDacYr z-LQTe^68WdS^0SxjT@uRLxfo8=u(5*^Wu@2h3?&s{A@V9f70UO0ed7W)porAV&gg$RQn*_Yn{6?gO(U=-mArxnet|a;~}s-iiN= z)`bJ)V^V5w+TAzCBHo&0=X9`v!xOpr3?G$B?_l2|iO+rPA}8dhU|L7GH#^*UKwJw& zITJjhCl(41tc?W{h8KQ0Ql|cdGZy^;EXfWb#xTKu$BYZxaVUYiL2Y!P{=G~88vwGr zux4&mrXKgP0qMHYIc^0+IAEKPAW;XW^{~DJNP*UavvJ?V4h-nG#w9*^iWd&_Sjooq z0O>WCXAirA&pKK2tj-E=@q|ZfO9)ua?!J0|R}4o#?r-VCRev))iGD@w2S@9%ju>VG zDr~IXRU$?`l1qjWf9#3Z=QtATk-9uKb)TTPln{w+U-2CW?c(PUh5+E>x@eTevyaI5 z8^`voUeuKJo_`=~wPCl``mbgg{TH_Wy$b&q&;Co){9gj4z;82W8xvb6Ap?6SyWjt< zFea&3{Z$yzywJvep_-GGDy1Pr5RBW`5odD12XXMP>tZLA)s6 z8G7NpMq^yZcTG8*eO~gaIiP_s3?R+I^4J)ZAc+EN{X@f3av3AFTsTzf8in@M%PMuM z)tnZ_?#hkUpuf`l@c2wy)A_)rFgjJGs9O8!SI()V#ad)+3n@3}V4XUWrvQf$aI^ki0Vp4+TO^gy(Tm_>-MMpaC4S7Mbo3L zHt7jdhj28$-GZ&E7|^gan9F-E4_j0^13-e|EnE@=oUI~eCgcM-f4o5OO4SpWg>XI= z`Q~@Zm1z=yQSelpF$_hAbY?lgue6%&QXt2_BW8rt3AEu&5|m05&e3Ss;?oQnx`fe< zvI^5Qd`jrdt`KhJbyMHF+)dP4B0N`elhn8Ksgql24mb5K9bth%93BjZ3a+XXp?AFQ zfAs_}-cWWe?bD!c zMj4t~)nydas&7itIY&5W(NbE7z9U@v9{)TYBXMor{>&kVS4DUc4B)}q7Ykm&Lk;Nn z?XB;D*1UtXVxf;K3Tpn~O|7t96cbUpODqBdn#yp-YiG}Cdc>f-cFR7M0BI&r90SnLtJjkgdU#k*q1?Di`;)9V+BTX5gi z8WJ>*z$M%InMm|DLp@OPS(iV(YM4Qk>EVgn!a3!xx0|(_x2rQ-C~Rc z)%Z8`mT3&I%_p4{nI~({=B8$pF^6dB6-oO0i>y&T-Cu8jCRyJzy!ViM;u*IXf*ZPI+2u16|rix-~5N^bZ)ZkSJi5xYCMm)YzsW2K=@`WbNap4 zV6z0iw*;4Wl6tNPqWKzAJJ)a-P0(ISjKnN)f%ADCL2n9LSIz?bq33qHicxDGmW zM8hj8O%?TGWz#TU4fV4z!q^6xo~ON6hQTEU)6nZd>Mi)&^!C`HAJ(o1ajSZa+QlLa zI)!;+`g(CUggpX+a6d3%h1>h8YbuV1HWZ^AHk3m)0mJQ?Zes$Mmvfw^K2p^WToO0?%EQ0Mdwx9amZldOrNvZBYrkJf`Q{_Z1# zvOYg=jGyMc3hUr85;*O8u|$;QTvCQY5)y<6#1s!=#_tkD6vqd-_tCn3em)L=>wf*9 zzMAg-x#>!CV|s9T+9%`6CeA0>Z^m~Uy(kEWS5ZvLZI2o^E#jy)7n-X0U@KS9kyp`@ zjySvW?}Ul+0=!r173+gnQ4*is4m*^85GQP>C?-ocO0OnmA=&26KbM3Q(3p@>E944?{*}-YPp4hbUkLN1-XN#)Y0YPTw!!5oAt!MrJ19qR(<50r_zjD&H`d2+fYP5UMhOetd+V%1!exjwH`moDM`)c{DP7r>|bkf?dxH_ACNMEtFu6II*-# z83Zp^=|6>iHw*`KnCuZv5?-KZqYp7rG{Ej)0~L6j>nYk2VD zC}46N3aySSu-dO1Rnvz&hDuMh(MuN}R1tYt@J^j!6~W3_vTJVqFwe`?3^_`zez))u z5Lke2snwu1j~|$*jaSY;jmv>;gefo&*c0He?U=hFVC5Qg!D7%9eNHqd`%&L5I2LsZ2hiE-?vn^1;?Q?O(+-1ri0ijGoLB365Lz)-+g9 z^n|O(#!lzx@YXb0P!tvF$XNy_#H(uZFp##EqXsdq*@Ef@shh#&9w;VCQyzYmh+Uqm z;|^1ALV?-hwiq!;txrZksYLd_s!z7TiUES3NQl&LQh@3Cu_SOQv+K%lJcNJk> zu!!WsVVbRF2J`O(H9*Mfo0&mw6cZ|Wa3dWuSd=hpnB%xKOLo$J*gXd>%{EH zL=_$H*N4y<1x0f(YtI5*hV+x5(&;Bn`CUqtN!rPL`w8BjnWNXoOUS{6N@h!yL#GyW zYS}ItoAXE7@gXy@K`DJBAf_5=QPq<-Q2_*PZg3R5dHT5NJeTF}nOjGS?RIu2G)kB8 zab)aS3~!6tJZImQXmvZl2`LLRx5_Cah8HiNZuW}Aq+21}@~>fakcYQCT!Tk7Uf7xku>mnS%h6qwI;FANouN z;tcL-Hn8kn0PzB;hR~Y~ulp}C!#mr9&ZVT(VD2>mE)KbDCmIDYMbC!A-i$b)XXL9x zyczmCjYS&Nxz*Zuby2PK6>`oBnA;Yq;5Kb6aR)c}!V~k7m~N$d%dk^P#TH_^*=c$R zcMjp2*@{&81@M85V`wY-DvXQZ5aJ+Ch$n@)^RScW4g&YAZ2(0H*e6&jau_YiMD4c* zl(Bxf!p=2>33U8*t59DN6yRI)?Ulv^gXR6Y(Pu z1xoZbM24^UiZeY3%}#bIrC8r;Z!sSqANGs>~xt^#>?PHF1_{d4*7gXkxzxe#zCDS!b*2|@L< zQ-VmiF3mV322V+cLR-ro%2swcd-=g&TuRcv?~WR$c>T`u8U1G5Zc&Wr$5W-@)X8OduIxdM2k;L=VO-O7bWy zlW=RLi$0W=e?v{=moi&|Qa2Mi2TGq{vE=M?Q;-W2m#gULixkZV1TeTl7BhkXYl<;! zZ(1h7uDY8d^MomYqIuYoo#q9xj>c;`<^rv9FA?V?i0&zLCdU;5$oV;cPLh`&eiqus&9i3rhP?x5GLoWF$HeE;MM=kexjtpWwPy!*^_Hfh*>C%6 zIHdSKzh9!ZRvYcu3;@+Q`--z~3dHOPXw zyW(=4SrgF(iN2dR8BJw{R=VJA$b6-EZn?G~_pPm=vsXT;G4W#XeRU{~hL)>7GE`@Z zvfR?}zI$k_*5Y!&0#{A+9W3#EQb1)Vo=w|LtGO_DpGL4wd$bfPYLnb0a4fG+oG>dg zA9R1*_|FT}qIYE<)xvsX@rdZ6t&Jl!$^f~uxu&36YR(JnGDoE-Tb0UPbrFUSS+Dq# zLB)c?HhBS+iWfUW?0rN-U1$_tO@5bbrq*u3X)uJ!{wMxYIFz7a1p2_1i02;%@xmd~ zO&v_+l&}e}{c!jxcs0oK8A8ML<3ZA;@_nGyhUC*P`*|+q_~%`y8pYUq|2as=Xc3ZtATA z%BnjzinxGBaq_AVIm&Aoy0(;7c=i->zW2i9UxfH7xCqy@vopwvoQVSK3yQS0iAXR< z3VTV#jGgOAC;N!vbU}@pft7(;#u6py^92J4O7Fl`S~pv=BdvffK=vVNO8KC+rnWpjo5230t{hfbNsOmH?R*0*mlTu$u%Z1A;emQvlr8e#!hYXRGT#X2#xD@3guB zc&r9Vhn_{Q3qeMPvl1AMFlNr#-x9+h^?UT>)IaQezVNZgdoxWafghQP&Ja{ruO zqA8BRc%7&=EYDAsslo=TUAi%3(X1@~<)EXAPYY8S7{M}QIMssaJZmUpqM86<>7GqF#EPx0ra2-W z1XvYB;WnLXIg`db=a~G^`^y#Z2wUBJ4K8d;+7mo1Ox2dIP)Zo;S!Us-ZuxJcvcO8U zU3yDabqk#4NZZkxB*BbLaKl(}(@|s%YS@r{inEqgds8QlZ#Hh~+1aqQoZWu*wqk3E zfo@l}$LxZKh5rff>U4@*yOtBRt$tBYdNiG-Ly9gSmuO(WsRb6pZqj}WVL z4dMC5VB-r{|s9YH3nI| z2~g8S2VFf@a`MYuPR67i_N@$<;Y8_)vd>LFBM6fUCET4D;(e|hHa- zIFE>P>|MvxBO5rEx$KgUhqY}cCc$0f`ZdY5J!B?!j&&=CburVmEB-hLUG)qM(Wob> z+))f}#fPbt6SW_`yrS4zs2|R?JLF@!IRuAT$G^WhCaWZOGwr%gL%N8W6`H;c{G|8ezUKluqZ1iXvO19)Ux?^Ner4e zV3{N*@ZelxkgO45G=sVbMvm{Zjth`^;I2MM)ys|5Cd|qZe`Fan4Q12I@_A-@Qywvr?{poU`ot$j4!}h|c6Oxp z%)R)1#AZ{|uL2hvM@2UngrT#?NqXh?q~&b+%9!LReI!d1mrxVTh%()U%r-dsZ<~qc z7o46cp5S`LYuU3u%jI<6`=T5oeS`tpP0}Oanz&}Oe9~24ltmNOXYO^vB#gg$7KTtt z6k!Lt6}@-NEFW=#ARmPb$&_ona7xL2ExQEA41FH4W^9pPJ41fqESA!pGgN1IG6`n7%w5=Y&UnH%j28# zuAHcJE2K!_gs}&ZNkX?!gF&k5v2y4ru-t<>!;8t>5)hBdZ6~a5ktT}OD1L%lNDMJR z>00qJ+r9A(q6|3OP=fcEM)q`Hv0CM3CAv&7(BBDo({OhHjU}WC-|59Qy-OU?!yoOB z{T{^&#UxG`P|qB~XN(Bv6Y_j0=lMqYqSC}?;avr5{;M5qahEZE;IEwG1p1#mgy}ze$p7#U2^)LsfBA@-l;egnI?syi)v8LyFvPI} zB%t73K~!F0;&8P^I+%nd88ZWI6$L(5ziPQS4qy6NxWSMQfT_AupFaqFuamZEyZ%^= z;cGQ<#a~q>c|+uPP4~x^<2299na_{MCvYzbcJN*RUnm6N2)sVKGyXQ3Qh2GV64wz> z*}O5hv9XG+DaL1=D?^|}pg%YiJFMScr)o_xY}2?-TUk+cRrPVyIk(E6#d6Y$r7qJ7 z?c(1Lx7q#hERG+T7}Lk?ahRsuODQS5(Fv)L`-#35!sy3hXM^yz%f!waHrNu*!A+@5 zNpsoJF{H%Oypz9YboE0!@Sk78(AqxHKspDT@X#YUzDh!Ga zKuJax3}RGoC`iuuXCT|do?sAq&Qj&)UrOf3r=+vkMe;0 z&RC$#S46&G{9z4fv^@e9qCBy~%I~3oR+R z+uK^+DFU8jpa>nsD2z7Ju`r5Wr`=R@l?hhgSVbZw>$qO(KoZWOV2a7nrjW_8)wZ2w zvbvDxJaVk|iF=iEpq2A761Vz2uqge;J=g+^P^aRnPI}$}T6-QRgZOWp2=2W262!3W zAHzj5eRl2y6 z?kiiu#SG!>ENMDNvCuh2TU%U^g~HA<_^oBh%+@H%1fIrP$pjcsTUM^9lY{1E)WK6~ zmQ|=9ty{uNubtZi?o+1JCVu0EM@uN}?B1;S1r(lG_Nag%%l%7=_($;e&-?uX9nh@R zklatt2(ULlIN!d|dpPD=Ya|JOO_B4XwA=tL2^S=~`S5gB#Tyng1B8 z?CUK!Q;)_c;5p#u;t*DyE0Owe6Yh5C(8Pu+^|nfR70h82=RL0{Z0E(RE5OY}bSGcO zt*!n-(jOo#)Ej3{sZNfBm(b(%nf=HikLoBUZ?b(or+p5hEy8SuFgKbQ8~>?CW1YJC z=E_Q(amGPUK|@>p737Ds00_ru($90leq6|62>aA%2(otMfh`Lq$zrnm#T&+<)0IexI$1q#GV5MC`bVRmg&>?}gAk8e zDrOH+8@za3@2GO!W&7M2-x%07%xlFSC}m2&*`I&pd}XB5X2-vB{u2Cu!Zfn~h-v>7 z>`eYugDg_sko_y_^8`TpquqK7Eegvl32!qa2omNh1f+u7aieVVH@PGnFyxuH-y6mT65r%6#cEYYSEyr5=|ZIR(m$S`~Q{iV47MZ|clkCVf*U5C~I=F3fK= z(}0`xAez270&<8YN%ki)ifAO;MreR@Y0|f@99HSepzf(teSJa$s%XRTF9(xEP|7SN z({KewF3TN|JhfB&V#IlxpiFH)00vI>>b>ma#}SA*>#r$fEo?s7UH2sUUK^_9O!KcM z6=kal+KB%XSXX>U?CS0UCL2R1B5qPa_U$QKp~~d(c`vVOykQ&aIB*z&_=DMeq2XD!V0|Wrj3P(LJ}3qz)n4``15* z&3u}2oBB6^jr~3Fe_s!v`u}s-|0i%|sqQ!;sUUw}lM>6+7uw_(Q7+~q$0LX3`p3!_ zQLGwb=E9&<=4P0d=xmy%8B5*8@d;$z^?~7e-U{F?Duk3pe*=ChM4oJKStne^P-n?H z&SZN`zhvpXT=RN-zxV*q=EemEieoEaguol2d*pH}hPThJQ*WDd%d<%bt7}+U9AgU+ zr|3!P1BbE4Gb+Ynm_|OEI&7@IDl$dwfA;s+lVsyNENxmaFFwyd3uO`5Y^+KKms!@B zg;cQYH@-+w6f$6rq((Xzqep{cFbV%@SwtNe({`qRSKO}JU!@y!#Xy24k~xs9XqXV7 zJ?Rvxe}*8Z-z8o$iC?)z2|nNz*V*{Qgxh1m5Oatmm}9mKZW958UT7m=-n?_hSYW3$ z)Ki$sVm0xeW_rjIw;N~o!w7a=D79;f(g}WOd%`8oQ^st^1ieHCn_$SiiYm&d%92ID z`Sp@*QrgR+{Mt|zsR+geT~eM0D;%~rTl^dfXOoEKD6a;DLHeH7?Y?Rfv3Sv# zrM|?f1t|kyQ9S-6WgFUtjd2|0@LO%+>AG^JXSCA8R3MaLNR$f|TvQ3CQIB>qZfvR7 zw^gP!HJ@85c)(L*l~0YS&Hg%Hd`rmL;56?(AWp_ew@H7Ibif%d_bI?IrfG4+vsAKCqneIT;ki0b!@QfEW$JTY#e$Dt*{7J8b8K+`c)`1D| z?CcElN~)0*O0EyG!H3|Ri${W8tj9ta;F%@=5{r1X#WlnUDVb$^$ip|5owA_kVGti; zQj68J{FZFL!GoQ8kIg+2d=@>;-)jXZ`FF44W7-q%l^$_gfM&WBagwmSNj$C5ba7ii z>FvyCKwJl_ifX?SHiq#>cL>cvt;sDQ@1@Z}Iu+~&w?q<9?U%iNGl+K6h9aS`Ez|b@ zN7y@tSGq3U!m(|q<8*909a|mSwrzK8+qP}nw(U;xrPto?d(OA6z1R6Mb7lT~YSukQ z-8DwlW4P8=RxUyM5dBU*Ox10h79pq1YxjBv=PrIL@H#?vE;JKM_BA-5zey&U3M2Wb zpXo%Tj(pE3HATxNKxv%Z=z$v~mgXz5bVKjT!;d-!c+<6m`B}wtvt%PUZj8zbtmZmf zm*D-Zw~1w92umqVsVoHMm}Z$KjXlM7RxOuvi%8qrkqKmo+gdI)RIsK(v>YxitD3gF z`WE2u6T(^4nbjm!+Fg3C3vUjkr>NHqH!Ji3j|Ux7!l7xs58VM6#Z*Zz^z$#(_}e7# zIKda{P{95Z^88&j{=Y6)iYA6u|0k zn@g<7$=!!>Tt+KGDcRI%c1NI55$P+_-u94gh#@^R7|7AYjgOT|BLs0Hj}5%_tHV-OR<9E9 zX=|qs(&*^3`Sy#bxCE-4;~)TY`? zOqy?M+40{^#yX>-%L$}!bu<&cFRTptRvO}*s_`o=aP6+3;$XMP{9y!Y$;bt%3xMoq~iufA3Xw~5J-*wub1}I|EMAR~<($8TL~h7gbwZ-asxv2W$cm5+UTr zeDOKv%AE6djuY#X70S*JseK3&*o8ae^Z^T!Lc%b$0nL6OC_w~co0Au+4N*b*2WU`% zN=vxZSI0)S)?JebJ9RK6@@>}^I2oei$MQC~--E2W;)?{Y1vglDaOfjSj!+qTa!o6j z`>GKU!G@6DS!Q2+sSei}xRw#^(9;gOo zW_OgyTBDUn2N{geJv8`tlv*VA;w(? zP>X~!hj5izEAPF;O%vG)q8oTH9aN|V_+<>QuvUUah=s>*>}8in%KWK<IteD`MzG zfdEHABhzB0#j{Fbusxq^jR%Xd^&j?D^f&qdGf2w4{cD2R@FlPw@9VHdeCFurGzrnMT-D2vM(|RR@Ts16A4r^@Ph=)BtCjRA5;%HBC_Tb zfJhQbGC*wh1M=Pal!E<&oksJReZ%R%_GGqzGwKOW5JM-3PsPS~Gis`1i}h)P_3q7^ z)(f=Sr%xBA`yf!g_Zt@wdV?8(#-d%6k|uP~>CbLt1=|eMrLJAe*DY#D#R|qu1l$4{XFLQF^ggxJimc{KY66 zjDUJAyN~JGG4@=BK>d6-4{eswK`Pk;GIEkneWkYv^JpO@SA;|{y1FCk-1_q5EsHy; zcBI-#wkOO}^prS}LO`6THS**p6H&-+NTYtp>{$LfFYT`PKOS7(W@+mjtgM0_S9K&7 zx2te!tO9HwtFwk6<}kj>3}z+T;clm;i(lGJSdEcKZQlEqx48w)L{1Q(3aG6mVeS^w z3R(&7mh2+YYZ(w}!h-sqEe^@PWG+=G%6Y4EL%sBy|-;1ldAZEDt#{b)PEDwkU1`Rfl3f$0K50PpGKhK6W$mys-@mf;>8U+J4xtZ7iLwH6= z0RZedWhI7`N*IGn*66x;mfvyD}NseDdb?&IUiSHQ}TMbyiWXt_#H$t znPXPGF)XUE)KxLsa(>@*#?2bpbXFqh#78JVjo3pQpU=}{8S1HDq#yqrN{eHZP zc2Hs6oHeOy>@+T6pndlich;@-JJ&hJ*hO!}=r+E; zqQ}D5nMvmZMi7c9hj*_2k>_%Yr6HVkkF=RF4e2q2;VJz@1HA_iE!cbX>}SzlV3=aj zd)+Q@ue8p5QbxM*goMnAvT4BiDg(V5OuII{KKr9;2XoPON)gu-jAy{N%Qk{?N_`-F zOAV+iD!)fVq*S53$7RSsg%G7`72|~E=BdUOYe!i)0ABKys5$b8*=*WahR)L8+j9H; z!Iw0%ils*A{U)(9a;_8RVL{VN%CGSz(my+m1@F@g@&0QYnjhZongV~@kIzcl*DcRk z{2li@-_37upTfyrem;=sXwSS%JK(>MqXF@k4Z6FicZP+%xQT=p4f@xzW`Z*iPMdi0 zI0CBdh84Qt!{UOXIGABzW}>rTz(G+)e#yO|D872QOKJxjn#{AvSZd8S!GDy8ZyR5W zD1s=}Qmmv7iR2MYk0g%Zxp@4m8QM*oQ|SFw(P6;<6Odv24afxlFSl}Fq|6`t-@uk) z4G={L8T=qGJ(yb+}Ayh#89GF`EDEhS`gEjIYt7RH63Qx8;y*IOF$+`HTvvc3JZ5Vv|y$nN>jj@V3ANZci1oZ#ZO^RKgy=_9aShNl1?6- z|CtQ3LPRs+dsM!jz#HrJpj^OQGeyMsi)!V*#!aFcA`NN72t77UIu-(!c@72k>Zh?| zVS*$p+Vx)1n*moOgzTknI1Jbsx6u`!r6onk!f$!a~!uiMc`e-{wcwXrwzn_ze=#0 zug`yHguk2g1WgR}&E*Xp9PO-r>RLD&{)-m^e@%$@{i%&BEb}UOAFK(;!@_Aak`2)- z1Oe**~ zmvLl?5q{gDG>%J_QZ4o!mUxsUsUOs%`K?hLgAY5DjtTGBdvdEpUhoxLO5W#&0O8y* z!aeL1#+_^0*Vzf=U%T>{><7N-Bf67gFPJ;|O}9~sC`2sE0jul25JzS98|g*mlC3WK z*j7O^`muvDx>y4NuY#-{;gyhDybxFZYcx5jJWrPF>acZb>WPkM3m;^&OD*GQRz20| z#A0cDDs@d@&J@>P4!GEjS}IG`9f#1R5mFZHD^9h0`GJ~C2Isn;*ndJS9H739{1x7o ze+)79-*WYbwY0UvA93g3v5oonz2jPWfLE5zR=1cY#Oin!l#(bp833u6bZ|koazZDC z{vtj=*?tH3S$0qz-9d0y&u%K^<+6h;-dw*xN!Yy!`@3wY7-@=$h9;cz7LWDe?TT8~7NIkLT`vW+=#;x|CC!jMYC&3swCF$DdH+|$1or!El zSF9I!!A!TBjsjyprf|MHD|No?;i7SG^5;05^XfH2Wl32fKzAzW<8EEA}w|=tKScP?ngLjGe*%v=u89XRPMvP`I_`j4tHC zu(9*1>2rXzHWagyByR?$5^I_Kg2zz zCPrGw9vi$rUO#}l&2f~f1N$2s`As3DCzQMPh@QzTFK7RiVadY#Vm2NT5I1 zx!7}%Ued33?Jlk3UKd|!IaK{XV8mJe@R+r?D#948sK&o>DF^AB6nmSnoGjU}a);Z1 z!AC1TtZ5tOBWg3jJL%tA^Um@t>eES&A?_>17vA;YI)_>~+yFFO^uWC44=$74Go20L z4VwRn{oyzHO=gi!DLg0fBD(n`%fQ7^WC|wD8@ui0_t3giVZYdWJdZ~fw|;80{_MQB z+~~q@81*<$XPPwmP+=740br@@2lC}qS<{gksQxxtnILA(1pN&w$cO+A?CTlP2+3ub zH)jUZTi`hPdz7{Q&79>_BQqBk%C@xSYNKcN z9dwtJe)kc3d~h+LQ&BcHss!)9M7PV)hOvjQ+;RKb!|>nX@$Ut*n3cYxp030HDzJeO zZPLK>2trpNegs^xV8j&JVxbaH6vTXLp-G7%SIl_>J?0YFoJd{5J>b`JA*xV~kb1;X zB8*3wQ&ms!0A$JJFc9uF6^_UkWfF4eJ%^*j=w^XRy#_{T!tTgsp6V0Jq=C%6{9Vih z{lp$HujkIh5tsT_)Y=?V0k*We@_OQ8-(HOx z5;sW=qBYhKmC^r;MmE)tSvJ2A%;6s~4)<>uCuU`4sQ(wp{oCdp7}+7+M~4y^1wA19 z0R^qc2O9Ltz(A*TUNLMQ2+B8b1XejFTtBbBWL{Z+8_w{$m6Q{uaSM1VOCeU}viD zU}b3kKT%ZFl$p~(@oKHIs%vKFiI4hDI0`nJ4&`OBiy)yPACzNgbmJE9PkO9Ro3A()=ibIrSzF+B4347H7YC#C4Qc^nPMHA$Adz(fm~f1k=s`n@-Q;g;7o;Q` zi`bU-FAY8^)kCx7Na43%un zkn72b$`L0gB+!L^U*xXJ7dlF@c>4H0XKiKDvy#1t9A=o7;AFqy!0g$BEqxCidp}w{{mF0ALh?&ARsDc-^s8?#n4ZDMpFa|P zOj|{sSKw~uh6%b~o*+_KGm%K)>0BUuZ-BjTtmia2^a!Fj1DsX0?Ai?#)fhoqR5IyA z$)%+u&-X^H&`Dw#L_7*qd{zNJr>>({4AL*Mwq{`j+6(HRVFjp{`DH5tIS>}qng#31 zggB1nrkpSf;3vvyb)S&}tMa2;(bk8a@%+}C@pglTBe8X@`djD`cZ8<^8QeuLKg8(x zh`={V>J_wtaBDR#w7uhIYTwwvb_N#7S|L;NH5 zqWy;x@$Zr;PF-P+4`pcT5lu}t+pdN%QKG^}{9yzfcj%XtF~=MlshDdv{5T8VsX(i4 zEUXG|D!dl}Z~Wd0xn&Ope453_8|PB`SMskp1GoTJ!HUwUT>E<&Znqr?yd3DW z4br*}?A2=YHJ2t_9<#={3Df#R5+R{=!u zwjbo<`a2hBGaAZY;ZhHyZUgc;Z%7cA!92Wkp8|@GW|wwS4@E`z0Z2$qO3qk~f7n$-FVIJZtUPiWf?=3VLg6`D1I<+`>-bq)(qe z4+T_G=f2ht7WFyyxjw*$5lpS@pflJy)jWV;rLt89+&R5!`i*G;A*Xtxx?9}goGVCY z(QIAERp~rKhUIiC`MV9#BV<;u#>gDAootah<8B`RhEIn?;cNmDup3F8^_m&gl$mZ4 z(*jeLI)^lvwW zIVGf6B0#)TNT1waa zf44DN%8p3`@gtP)v=9zUAU=TigRo|DnMlT)2-N!6CLG&3WpsBl=s)V-*Kwt|Tm%0m z*N0E72B+0j*jPw7eR=(O2C<3gKw=n1i=iZn0ur!%%V4V z;@l&o3QB|{dlY!H$2526W81bz6ehla&-l2G&DkmUSZ9kjv+I>TF-0BF7|_Qf?iC2k zvC?RTuG>tYh!&^Yud)_?f=4rpCuR16dKjbhKiJf~Pq$xcm^Lse1d-c)0gNISt}MbI zDL#$fqEmGtY(LQYCP{U1r!y{S`mD`}E<-}yknvfSyG^1@mP1>aAET_CCumRnOE#Yu zq;|OnOI$~VERjFuSvX8NbV;F|zbfLzu~+JJIUs`0`x@@CG2TLsnko&qzBthvbXhnp zIwnW%;^V6f1BZC4>gnhFBFf2sBul*i01XO;4u9&he=}vIqN+7AKg?r%V*QEdw1488 zIJ5)5fB=)6oD!T;K1z)o{dClai{WPoW`E_tc;~O{ zSAs@IAvd-;v2=oCN%YA($Ap35sb-@RY~9NsoSd>!gdu8>L%+@?)kdxSn^+!|o<9;Z z_c6FzoOJ&2_z$HIWl@%!`siSaZDI12o|{gxp`S_aEFVaklJi20{j3_;<&FrRr(*SM zoHS{+(?6|5gvk^ahzF&Fa0}wP$;}{X7p6WJ6e)64&72SBW9YVyExtC$XxKS~`rv~47cbb=u`DrqI8L(;#cC;;Da7eLmLUVmoQq*3L5 z^hmo}JIR2#PzcYqo9zy({RN}tfF`KVoeSl2R!{=?{>;QWffQ+ecdSO`sL zWhCKeVbo4&xZCN6@>B=6&tD_?swJdmv0o6A`j1XOs{fGPh6aMxR`w2dj{1K#fD(Uw zaWHgo_%|I!PlyB4qXf#RWt>QsH7@K*BZSq{q!&OBO!%l2w;m&Zt*t4U1Bu1HScW(T9k0wP;XSm{NZO0{qrQ{p~cbg|3%W;qcJE?7U&%nNmO}7(Os`cNB;%3kP%xWr_ymC3fF3tyNtlev50F! zWvcNFNW@!&csd0mPeV)W3iXrxV}uH6TTwQPw5TZ(!ZD0qtzE`tjc?Q*J7dc=_@Qmg z3Vy@zLO07i?6ndPE_WaL4~WD>BrL;z0Z8{hf(X<9JIsH;UCioh>8h@UsoVdw3=+P^ zi-G77JcZUlfAGu3glk3gK!1%FGt>Vdgft@za95>7OG-t2f)Sr*KHnpW~M1*2A)F8E<-MV>#hmf)918 z+l$BGJW#_VTS@u@mMEMo*#13TR9M0O{tj_NrlGATXT#6AMEY}TtyYYay2aW;qoXAl zqq6eeWa6e{ajbL}-X&|Him`+KG!6Pz&9uYB&IAJPg@R|fqty?05*T5c1p%huTri*u zv<1S7`pfTY&ePjG$$j0`J}&fFH-tC_+w$=w+`&LKFo~kx#zItN&3;HZg3hA>WuZTN zuyg}4@;o<2^!;t-M!NnY-B5%S_&-9i`#-jDi2t8I)xS@IT+i1@K=4#J8?-E|P&%84 z3(;y7>7f=PhX|~|Tg6|t5)|7YjWrPZ&Gg44MlzWQH5-Q4+s-=f&Y1G@?BNb>6ZwlT z(8lPTOD*+W&J{V5ZFHsEXuw?awx#2{E*`zFd<;B!f(?6>8a(kk+nsP#eL}gLh<&E+(HgJ zt=H&Q`oOU0;?q%r7VkxigEw}pq+U8(==h@}@s5Fcezc59xoQ@w9uoc2B-!O<7cw$u zaTe}&p8W)30+!KFCFwR1lJmFIi(Y>c!m>UZLs@pvDb~V_%77=14GadeZ3xle1u7{H zIDs()8UMdpX4dXnWO!fk{_{$e|K9fayH)GYIWRO(aQNzc=o9}mv@X*1|O(S5-v|W04E>`Uou`$|sBXBzvDzTS^2QjvsFr1Y;@W3Lz=L*8RUtIpBz>=JX zKmmS5*7hGk=RZ|0{}b7N<#2_9x-}9%2Dd^Y&DUgIMaaW!X$JuF!ORa){n`EigBRZ~El+^ym(K8|C!Ki)`EZ zv~F?;468deZlibfH2KHEL+>r<5P~Rh#A>yWSTS!iF#Ce^9< z-!InV6X&kfJK8GGuj1XG#t4-_WhNE7c_A44`|2+h{Cj23Z$+J(SKJKp25p)bD@}$j z==M)Nc12=ds-#=RyEud0vpEa0tkwG?sKXk+uXe+^3UTGuN!sFLjsi-*_rHQY;yQt8 zf1li@&-mIrDEcl^9IdQ%zYFQ)yX+oj9B|L|s4DLcs1no{dV%+-|He>Lh4i+nq7qsP ztVjO{F=U&V6XsUl?ZTdJarpUHHM}SMY69_fQb+&sO7iVLpyO91{KL>e*VN*F>S6i6 zNGl_^+9#weJD0cHhv3l!<``6;smEnGt*MqJP0v!SNn%&~ZX5nu1heR%FVLh{i?r@; zGi@p5uWN~q1RG>F-?m~}K7ljJayk0sDfvJ_^5B+0!g(_syXEK&(D z(z2OzCM1dwmeeNXJhB!3yyDO}RE0cHg_H5|N(yQ$Tz$OgkbD#$2~wyY3uAis18?;Q zowXEI!ija`;g=SXMYeN`-pN^R1=?6_AY=1Fd%@A2Xw31HvoBK`VK&yu zc>ix{(RES%2RIs>&L05iaF>*Oswg=imt20XRDz&qO66!e;CEQ(GBuYVDjV%qDl)Ynlj_(vf9yY}!0NWa#=|Lders6)DFEI9IrtfgUc zQzzE6e_I2>R!_8m9>dnrk2ZuHOQhP1k&1vlbUhTqa%Unk%51MT)};?m;uHM_g8Yq` z7$HKk9juO70=d<|TwG#~NCrJiu-Ak zacb-3y@U~<8f6QL9}$I8Hdo+#Ji$DP!uy2($na!xjD?ld13dgGWS%-BA+Q@oq--Ns zVhAQBLKya;1r$GkA5?%MIXJ3ryQfLhOKA4xFHB(F4LZG0FL~J|x}q`aq!Z0SC`zSb zKeGU&L_QPCVVcf@udy8o^IztnABUM2ocAF$7QdQGaLjbtfzXTT0L>6d4HbfA5f|R- zcbaEXMXweWAd)z1<_51HFNjwx9%;vPA@rr?br~cH1d&#=f6;aI2vb|+i_#s|ZV;9PHYehNz@IWZ#X>lP3$vcs`w+o2t9Tv+ER^8=qjZ{!C6 zjj&1wPo=qO2T!WxILm2py+f;(#CgS5!9ehX1GiKgPnQ>LN$D1D_|REiE5CF_RDa-l zbqvn@t3Dz%-WDe>$eb=|@C*qA^6zp~Kt}aIuw;LP)1^q3#o4)Fx-x<(4Ja{0d?_4! zd&Ek!YX{?}LK&56|D&>Lm?ZfKr>FXgi}Q<>#l^au46Y+t6bTGBiktyPf{jGUlm2{A zG>U4`z=3Lz9G)$J0P&fOW9~HstsziIS}6AGhiFkUc*gtod&y)K0)_0{gc-pv&BUv(wB>Q4dF-fC8z>xZ za!X9jFHWJX*QPgD8!Fm5oE@i1>4+*6a=;ho9AJtb8i@f5f{27;(cJ62Ar8ltuoWQ$ zX-WF-r?mnk+7VBXoe7pfmcCyjqO#O=m1+nM`=3|tZ_6_9OEfrNMNf*VD=tH^PM7M^ z=n69GAqJQaHiE2cy3H#R1DQ*}T7t8dWcN4)$Xl9_OQUJZ@QfrF-{y<(OZV$-*%0SQ&Uc7gpgNTp{<-`~Jf`8)g=#ANcnX3+mTiXp^lC?ra4BjTqKI72mbEW0_fF z6&~nA=aOr=XAEjcB9`JJb|Oa(k*isS8lF`^&>N}7;7fz~buylu-VGc00$l>}u~RjC zasBC&G)1*-9@NL4_kN~=BFEGkwXJ~0P$7K99Ri+nC1LWDBDK96mdHux-av3gwqdnW zA!TDd<=G!-8Ci-ux|it&YPB>gQtIktR~%~nNU!lwQMJ>cm;_DT#)>X5ctwV^I8)#i zuR&CdNGv2KQ7%9{Mcr`}I6*}k!HP|E-+z(1gUgGBHIcyKhX`A`YfPa5I5ihxo?!-n zdZ}_>9n)SPA0e!^=QX8AcG8wybG?;wq*~5sQwLRstwtl z$xb6faR(*6@Fa@FOvfgV=f*QN=s=6raed&?@UHkr_M_42DVe&V^!c9ti7aL zJ)Qo;hoSIlhU#eca{8G{08_7$bL=_l>L8uirmLj4X?yL5CS&U{j`4lS-duZ7%|R*a zHYbHg(p(1NgUuR#$@Ne6MUJyfGFDOYI`QOR<&>uL+d6$xXL1j@6rcxtE7eZetS8)wSuO8aO#iNqZz z!v%p$7Bu8%CiU%{8^=WU2CxVW14R6L! zJmN5MtM>}!nHKc}`y<#Y(G^bUUgy}Ip(%c!P7sxK{KNohfFI-sX!tSSuYpRS;1sd% z!(cnXE$ z17?XOm=$34Rav+HWNoUHYzg7zsDUmtajCdcIG$rsU=&K{$fFd9 zsfQc%sh$ekP{&L%8biO8pN5g#JNEhSe`;-NhZ>+~VDF~YD@J4)>O)!*;RTPdsSGk| zsPG5p5*8?|pUT-)Od)W*vdx^pCFoWcG$p+j(Oz}*4rPN~W)KmRT4#%9gVcRb{53PY z2%_mZVUN)J;|*)>)uDGr-T_8fCBc1(dcOTY_4weYm2KBL86*mn<{qwiOiW}H`XC{q zsJdap_Z4e6lp6=|$n*2XpnVukt&odJitIpDno{`=vASjYN&Cs&Zkq<`B40`<#u-xU zUg`;_6k8*0eA=c+$O(~>Zg?z*dTIDjEQv_`@lmd(uUFPN6~#J!S@#vXvMb;?!Ya+D zw7Tw)DB`DXxg%bal@j9@O7!Th)X>m=S_B$c1h&j7lorTic{c8k60HbWYIQ;f=CSxs zb2m zuI(PG(P9?wkDYr)9Xtk2Kei(oTz6Im3l7L|bMn7#I& zvbMZ=4F7(HuYVN<5w<`Jc;&g}CfgZl4Yxg;y6i!y* zMiN^h6I9;hGz+yUgWW0PbF^JcF0$2&<4K)ay13%zB#ag^V?H(x3M!@fio@}F4 z4oMZ&e^6$VV`ImLI>V{Q1y~w!`ohHxfj-JXNNt@ZzRLtIu;zoeVp^Ci_4^hzN3lwh z6jrYgHl^#apv+cC36lrU55Vi^fWJ#I)|2uc_q|@{;GS+M8J~#%ewQ3SS_T1czlo?v=U51ZpGc3O?*-ur@1&nh${c1{z z!r4jgLC$p|MRF5Ar{}2Xi>t)q|*QaBnJWjCB2cby|-lO@`MOcICe+Wf{1%rf*P`KIcr&c8K>1_e5MhTjh{_)azZlY8 z%1ojQbdBtZTx=p(fl`d=%;YAUMtu4+RLwkBn#vEcnU3-`jpbg=?nT2_>x{q3F?-5B zPq5(!YqrX9srf4@Na`dPBx;fF>tSm6ufB*S2yZmkwixz!2)G1d*wH6~;@<#+l)R0$ zC4Dc;RL%3Q>Y3I1VJTC@|tbp>fLn`ooO6*|$KdM8TYBf6vozQ8!OBfBhLwy&5RT zOcI??FX(6}ZyDLK!cT`k-(<0+>f-FM6wwe53D*sU`JEU+O+;69gF(f%8}ZJU(w8`P zZ8wMR5@@haiK#3;*eMCDa3N<(&%8H>nc!477O-?Ao{txbVo)eGq*H>u&wwpD4FtJs zm+HnTIt^$?;u~Na2+|TP;A40g!=A)V+GhzGoOY5`Heop3b5|>@LK&Kj$QD@4w+$!@ z1mD}-4Va9;1`!7otRubcGZA%nP4So)iPWSaMUCS>;Il{E^z+ata6>9qeIq2h2&D_E zf-GlEu)xKE9^@CF*tTJ=O+T1+Fr_BJ2=!z1x(MC~aT7Um?o?>x91S}r@FAT%_sgywh&dLSFw44vWu^Uv zisj3$`gTsd}0RTcnC~u)Dv90I1GiftjP|JQP-gvP|A*n5YMH=R2S{ zr2{*0ub}mrlbowzo+w2Y>5%!8dhoAV0?HjghERZag8?EW0;DlcBF{Mh#ab<3*RfTh zvx*-@K2q1dvZ!L8I09V~AziAqI3}^iqAOU8Rb$IG0Vb;Z9AvIgIDdK3b#M|{Xa`E1Jw8+ zsU6rvpDfT?E$fbn>VwP8dtnHAhAfhuVeoVgOccCG;sbvor1-BKpF7W;5OQqj=hj7O z`z1OgvNhmibu=fhT9aHfxi-Z85~(|J>95!WIAJ?3+oR(maimJ%pa@Xskpj=3Li0T% z#;o1)qo~FQ@0Y|2GR`mK;1=hxrl<)XhD<^-zCB1xJ}ATW+q0K{k4)i~FD!^2DRO8MR=#7r;Ki!S#q7xspgX&2OmzKpEv z{KmjFvJX(rN8Tbk%sFQuxk_G2$8PPL$(>*d~3aY1Z?7QA=Ga^8Vz zaB%QGVO4+Hi<TsD9N7?nsv&CaC6xtS@hM|jMa^lTfHWIfdXKkGkAJY@ZZs2*kafn@< z7lE#8u*gIsS1-N4L$QsjfQ^y@UUIIsuiC)3u8x?!PFBZmrq*$?h(9j}xqtR2h9Tr) zk8q|H#r!@S+M(UBF~&h`L$^kZbD-QjRJx6ei0!had`ZYc^1@tmmU&iR%9N#t9;Gmv z^RfF$05*=4jB;1BW1JS%$2$%CiSavcY#oYcrwhC*S|4pph2}^zCGm*YHPLuL7<h&xLc7KxtlLx!cqwOXqU}Rumk!9r@~3{4+NHvyZyN|JW0tD{*!Xm*-ig={kIY zpz=hG6AtP?D3S(wzhq(@R%o{zY!fYKvt1^-s9dFK~A0&6c8%fTK9qfz&rIq;OnMmk0%=9wwODGj}@-ROa zacDbnR2#0nOs_S9INTib%lMwGuBJ&;GH#@CW*`<#Bva=1(8gr$-zJZVMycQGRwi?g zeYd%ap(cYzdW@1W+ffcd(fOb~X<%pq#{9ywxtph*;x7@D**~iKS~ndbE`@T#WT6I> zdPd@hculFtEg1sRWCWoDudkwd+Yz6)@@#e>5^;nKLHtGJaC=7c*sMT?@B^8N*mlUJ zu{68q_y~@;VRCBwWHleL<`X+$9Ywu>Zb_wtzT=emb@K%=57 zvU-NDA#X11pNZeC8$CD8+!xK>au*&A%Pxe>IN>yuCpzmkmvH*8hFgNtnjN+f0=K@HmZ}yz zzc33N0VWbzjKP>hGqF!Z=nd>J2jp<^=)jx_bK;`bMe(D+uJ*Qw3kj{Q0MxCh5>HsJ zafM2+ojkwNYRU=wMp4tz{rQ;p$1`-dWMB@P-cIp?7U>5VLQCX)SbREh#x zvR)d61!fOY@2fg^je+slQT=uMwC;pM98*Cp!yMSeVlk!*R9HB|m@j@1q?N^Ji+4q* z5#iTIjmdqz+j#c1=jht>JEnL+Ew|*VgiVekmg<-;))f|cYH|-%-%AhWy7i?5nci^Y zfvqoQ;rCO3XbkhXUTO?^jdMcQ@t1Cwag2-r5SZ%7*D%a3SgW=j#SH| zh+2Xmm0C}c$Yk%8fJ7@Xegh%Pm0g;Ybo*y9HgJtXSEwmg7o93$#-Rm0-4M$4Q*6dz zN$N=*d>n+a)Ilxy`n+~+wL3vHLZ49-#z8-iq%Q(*XJE*Kt+Tgd0kgB6~!Q(pt!2!qCmC1{|E(-_=ou^8@5HDvHQqNiCpy`H9I69R1#tJJ$? zu76E**UJW^E(>;@Pg-}rFkCD>4Uqw?_oe`%f+bPFor}6E`%w5V z228c!+F>qF?LoSw@@KqtQX)kn>4U*1wwWSTLW$`rM@uigTYpL8=hR&3ra1l>ya_x>t;sbkI@2Na^7g+cOu>q^dzlazbZrbRi&Cheg-TIHQdZ}g zqwNoF#v7-&D|Vg1mI}OTgwJ`ITI$;oT)CoiqLU-DK{$Up_h+k8&>gE-x$a2|r&du! za-WAIKvGy=k)G+=@JJS*A^!S7I7qN5QR09X2&QEL>LuUWls&PZuAt8s`pwf%ri0q{eHe)>0O$N~GFJX#-@ZDMEOZ~9> zNA=@B3R4c&3SWNa|J9C_qP~pbdBY}T+10&0!xu8IiA@14yFuT;x@BZEh1DA9; zurg|EdUYhB9nwSRHd0V1pb`mYyt4lpeKe>GU( zI)({AeN`2!6%oI?c~}PT#)34w|K(O+r&(@4!t-BZk@>C~_|8|-@_dEtzpL)}e@pAH zF(Dxr2SY1+Q$36S8N`a55EtZ!`Lg<~l{{=^P&&>P)H%!~=s^4ZZ234Z(kE9qlFrUh zzhC&v=##t_C`8T_y&t{L`SS7d8^|UU*dJ`?hY_-Rm^ZZQx#;aSw|#1`t${yv@6J4R zdL)h1`Mb*~4|Y9dQCW$ESnU{pY{zR{z-68y<5V9)ip}q-r`(_iTe$)paWBZR6R1q& zNvkCuausf~1+scHnxCf|Yc{Xn=%3+1C2zRgT3fIYCYOkocFW`mye^&~0t$_w9hr0z z8~iOVL`qv**L2VI;NQAw|2TGvyDYTkzaC%V9|QDv@1=siwT+>{A5HCF{4Vs18_tgp zA#f|KIVAU|8>nS|Jqs46Aith&6BRZPkoohC4H{mzAf|CsPI8I|` zX8OhD%MRsPW#iKPlTw*fxJp^uZ;^`PT}=MdWzT+ z`vamM@1F!@og`g-7{ug`za2-Lr2go2Ihzn(Nuic{vxW%>a&AmriWga+1-eJ>78 zf&41~1fN|RyX+uc1MSIaq(;QfJF*vlJBr~_P1HU#ZhSoH1@G>m;~m5%*xnZ{$9Rm3 z!s0O}J@T+jO($zwdo(hlp2_vTUd8SZ1P;P~LkUYi!(lY__yZoP)m}XTQzqU>V5n#V z40?yKBtikStF%GQWK(r9piEWYqW6~+ACZ7Nk>de!@TX{2#ZT1>SVC7<$s&0Ao!XVy zQ3m6q1l9?U@|Noq(~jM1Z-z)?{a(j97mGTI;ulXQVuVMJCd5+E8%|EPd-v^>%A;Qx zU$zlbAM0_e+4b=J9X&oS4dL-F-!i=4vHpr*3Msg_#Xq^*Q;&*y-&*XFPjC* z2iS4tI@Ex`$$(o4dUoWS31L7!i=`fLDg?oetxA!DS~5vrd6M>ios4kg;|9JVSKGQ7 zy#b^BZzx1Ai{AJ0ZoTCjhbc^#%L1m%Ii96W@DewXOsp5+ z98CFj$ARg9?hpcPGmYz~^%MIAdo5?$0Q1s=Uyh{}_RS`HLdr>`dC*QFlgLZLv zaUuiYeDo{0Er|wf+2#!!0qW$gp5W{`PK=CAFtH zX>`IKqe43~@}b zxNDHi{CdZrJA>}dd(tR`=b)xs0o*Sg*m=JB4a8bk6$9w{*HCg#zM9%kSSr7%VHWtx zR9>Af?&q-kg(QT6&3yXCo9V)sA28VaS3#mdhmHbu^!^EF(~5p7f+U1VlQdyBnlKy1P3iq`Om6;PSS57lp_Gyx6|LwFhT!CL=CJBjZBQJ z{?VfMU&o;Rea4S2Dv+rZ1la#=0OVz)K((GJpG&p1Yink7<+-nIZNj}Vk%GO;XMHqI z5@b4)8f4-uRlk`)Ks4WFcg2^yOdIkUO71rlT-yG;&-LEmK-e@BpE$6>A2E{;ZIt+x zZ-2BctI`AtCy8Yh7fIC>5;@Tfj9Y7-TV?*>gsLoPL{FjbNq*7!TQ8hhd1Habz;pg z5Aq(!(^0cDHPsZgcgc@NcOxI*{7>vpK480|hA>v58Fyh5(g|2Y6UNP6>n#b!Urndd zfmzsAm~V<8-ID_wZ4q0ZjA?K!X~hHR)-8Xl1z!9YE>^}s6GywJc<>*g!}Z&fgpG^= zjuua?ZlI78q+|ZiU-_Y`Qx&zPa0SqL&^}v)0A)&4HL0fq1Zi@?F-`?4V)Et1saa6R zYUgY};Vcft&AsV<*zoZ{rMd>c&F*SU7Mak?z1Uo;C*1xLUf*i%x%iiQ?>?0z_W9~G zLl~3Ly?P2P0Sww%^NPAeul&-KXd|tEMUP~!nBS_Bh0s#?W{?x(=bl&Q!d+P3V6?z|Hpzz?s(%&Q2mL~A)!TSZ9ONbeoUJz1h2oKI3ba?r6`pC*evqxmqs23f+S zT-tY?Qs%uXW3Y+Ta2Jb!3e7S;lZjHru&4L+^k8^qN7vHA$jB(i^s6PsMt=*2;wGW9 z_%owV{YjDHQF#$Ou*wUzX1Vjzb8S-LA?HNYeny6$JLIz`PsJy@Bito1DTc+vTN}ad zB*Ibi#N+I@nWrRXAYlw;qK#d`a0Uk22<;U!><}JSVA0}9uIGr{bK6F@IOzM>0&cQ` zu0+ttj`e*3wt<-r%k6`n{4E~HH&nHlM^A3;O9@85e9*HJ{jJEq{_TU1_*vuge|ZWX z@;q{a0?1#$H(~NK^D6v$sA*^z$hUCNPy@TOKP@=F8Sz=Ct4F%AMhDgOq1zI&_+r=2 z4GkShJ9%C8J%}7g`U?v~ajrM=-#) zJs(0Xq;bq=3+6tr(#}KP>PH_9%4(R}8t951NBULFM3&q>_k>fsxJsDS}M}_3?u}R^i_yq6jNE*m%J$zCvzf zY-lTIOo|AxdU-H73$J22EUlnBh!F%w*cQN4gU=%TW=O>Xr5=DZYT=H6smP5~7h$zLQ!YuI-P`D0wPhwRXQG@jZSNJzCKI_3*@O_FE`?xE z>UySM*&Dl{jQWm>9QdA~x5n8pY(~5@FtYI!L8v1ZVpN8Oi6QKV_55%Y^fJnI%FZbn zFJSwvO(s#~Amb$E;Z(ZFh2o%->ASoMKE$lhe3Pq0^y1qD4(JCw*mHU7cNrIOz^m%S zWPDMpBwhOqDzQ^v-0X^5L%!6Vj|H!gGrA1!Zy>L2_-rvOptE@6KgWDkY705bqQGOH z8B8m7S{|ANP*(-E?-5z^wprKA+h4Z=5R|Hp^`H_Dp|;BP}rhJS$B-|GyG!USMD7|?~c)hw&6E|9$)0XAgnwj|KrD_PC_@R`EqV8B9W z`_*UMG1wyV7xcW$4Auz?_jV8rB5Z>E*f^Ty*(gw(@Mx-bA47~K)xyk)=5EPS)<$Nb zWdyB9r#?AFsYaxne8X`bEn^%V0y}& zbIV}?*Z7D=q%Hll3MQ~FTAjnvmBnAOoN%92YC<=MH^Gfv7M?4fJ~gd3axo>;fd1ph z=7#?*T3El_iP7H=)&3ue!>`fSza66w@<;yBS#1CND?Od{Q)dd;+Z)+E$(Ehn-)NPn zSSq2ZVe?>#V@`;WZi-~0%3BEWtC{PLsTYek_TI-0(se!ljp=efXik=I%<5Ma{vYyUpnL?waEZ31Z`&?6G?S{Zc}a^x(eC2uuR^ z-wuXWWxp#d0td(7bYoJMrG3NK&oHk%?nJs@lFC05+vaY&>l$2m1zc3J+!O;b?Awuo69FMeYzj7fY4})S#ekGlapc zujjPsjk7a_0deDP61T|aO>O3zQt$a6D6hDuzgo}qh}98CWTU*s@c+~gPaZ6FoP%8V zt}hYuD)^}|Q!G@V^=>%z69P!X-|0^j4b0l`yu zsc2>13I!HNhGFHjOAee)2J<8ouMaffYHu5*ttmF{KZZwaRMpio3X<2zFPh+eUW{8@ym{^Dc1H zV6locYB`}in7GW>NA|&|DZaU;n;f$Ui@aT`!F~0@!1|^ImMSd=D-$B_;_FqES>`~% z{x^BvR}u`EE(?$@jF1dIM#cOqqTG!^O|Cc`1Zx_QwX;iGL$B$1@8%}Xh=dC+AZL!T z@4?qc5l;b@e&+?c2JhwOWZSVVU108FEOt&u|#&r(-S|M)9mRTN3Rn<1F&u}g8xq6yE5lu zOAA>Q{hn^+WlM1O%*p$EhE|@nhtIPcG`-`PEkX$KKc;BPJDDZvf?S?@sNbm-razP6 zU(8}j^r9820DA9((5tEi%XUo4EX#_oK6HJBY&v>P1!QJp!V6K@Wsumr^G2T!5cdp# zSy85Ik5g`#D;GXdB_-5>cFJ5~?h@8Cs5i~2)Ci8lzEmDNhDQMP9e2rI#JtvA@7aep*yM3~ zOf28@OvAr@4=gp=1z!XO-e84Mi`cw$eb``F@n~mIQyN28Rqo;NUklO7 zD&Lka)(-`^QW{3dmmKmw^lv+uFJq9b_RkP=V9CUkkH}-YDIn@c7+QQ!jp%muclxB- zOXAnb+pe zWMXmX#$hBBCKdBDBvCtS;+%G}4TSbtc6UU_A7CZq7{uty4X1I@81~UV9and%+?MT> zATTZYdeLf;6ud~x_Sfb~B~#BwlP-BtCz}SF{^8UzN`=#3C0)-I(<8aqxjb+%Nhi2? zbVpQLu0ZMqb0cG=AqxEiiXS~CUvkDoLA1N=fNrj$z!Zf3W{?u;1dHgau*lETuY-p5 z3~0ju<~Rwpycs7)@QLFCc|8e{0wI99%o3{~jl$(^764_CYta7N)(HMTd$a%Q@%z6! zb~4Q10?7W$afb28ghad@UUoz=JcWXrsLCRK;E{KRGGv{`Vuw%zt#*o=D^S;<{Qy=G z#G87xPR0#)hacTOE-&foJUh@Q3r8`uFrD5L0FK+{niGw6{bqA z95JRWiz>5f{CY-P*z1hzE}7Qn#p@JCL8CzZw#fs?Tb(MNejsZPj2q_;JI~=#zBt!e zrQuGM2xaQzl8DrO|x^KZUPgC`{x@cHD`6qR=fek>;dY z6vMQ93-<>%OB@y%dS88^#vv4GgT~__QEd!V#1{|Nw&{9ThSC!8`(He8ZAn$Pl1t7mn$MnE+5X@KD9adH1aGQ}sRk9fd_wv@xhxgzC$%1ZrA)Y~p+ZSi;`^@5yE*N;1}y z{Ky{r?vX1K$Wc|fGSF50YcaRJZ=u&vtHJu)h=9m8^XyU$B?cr5&$`OMU|ztGf`&=J zGMazv<{x-wJD2Lgb-r{kGE{q<-U>GB_vXF7G9nNk#}LO%?AvR$ToYa#0vN6Xzm}Eg z=Gqz;49QWWzNP3=_+w_}B-M>Q8&E5EvO{m`OvZb-zHRw2TNKVt?NP#Hv{Bx;Op{=x zxHh~q{)BM-CJOg{{F|_%q5uH~40u=x(y&V{2(jb z$XLpeV8GXubX*2(xWah;5m*9_kBv)#1T_{CYTRkE{vF5E#Qss6b6;?5s9vUS>v3|& zJnJm|Dp!5Xut81?ea*i1KqBEEf`27q1ZaUrDt)s;T!fohiry|b-~}s?mPlrwv)f`! zZ#utqf0j50rFWIw>RF^Cu8h8lDjcMUxf$jbr_T<&GJ=8sV7mN`ceM#~v8JVB(S2#& zr=^@(TIE390+schdJU8}d$p{#lOb8$pBb{5BN%zJ&c25*;d%`RiiYEFvA{bMm!&?n z{Yl-tjpqTq(CFXlp_l(#4_N~39qmE%^gr^aCH~+%A;4q(gA!!e$Hl+5`T#f8>?qR&DTL9q!6Dk{R&(J;Dk!eNXin8GxFrmWtNMa}!r z1OMG`Vqh5ilHxSg1-%KiVMXdQrM7f<)L*#paKY+~F~THUpMW z-dgds^dr;BEEt|CI+jp)26FEU+62D$U#1mJ?vZPdm<}=Ry$3pJmi;v*XK&NW&Y3t!z1+fV6uz7z8$vaUb=!sjPa|QBZqM?E#wFwc8ypqm` zt8r+!+daD5IN$z!2ld_n-r%AfnMl2xSkPZ+GNy^OJKN5GFkXDSrzC22I0u*RCpFL|vafk>m~ag2vuDT4uFvqQ%rAi=*YclA?lI zeQ5G6RVH}U$E)84UA?P_VM2nSaw2F=si)q`QLGWW%y)Bk{lLeo=lZ~hq#vj>$?Df6 zzhv!}HWHcMg-ASK!WTkk8NbG)Vvv;08Hp zXad#CwcdgwBco#=!s~g~sGPOsGg6nw72#bHssifV32hALTd5{}?(Qwk;OyNmMUdcN zvUo93nDNY%PDSI927q+wQa3v>R4FU7X`)#yE~CZK*43KCiAEJhI(zoK zSsj~9d6&&Ms80$tl^g3=Z;Mk+9>B!5Z&jHL>&-Un%wd66!V1w$eU7j83K#}HFY9j{ z#Tc>oKk%9LMX*e0C_r3)p}?L9I+A`>7L#7ZBgcNmGbvw=K;#i$R2(q{3^LMP;Yi6G! z7lkiOTv55N!M`c2k*Xl)U|lhA9iMIu9}V?xFL1pVDt1fgZ2BOHpu+BZKPCJw%KwT= z%HsxoAV4~I{?-7H>&dt&=V|I~UtBft*7wrMhJwJ45Dx#QbBGe((OHxZ6IzU!2F=KR zkkeByW-9vnMv`1oF6U-*xoUzEB|N7h#Ck*)+Cf(Rs8WF3ffd!3t|)YI zU3>zE*#gQmW4CiZ!;e)+E;(eIvso>7>x?57DR;teGpIajd1z0K&&dC>o=VxZeT*lN zVol+sfRc%qGL-6*X(paH2Np@z>+?*Tipf5Dn*4iW=AwyF+|uq z1370J^{oeV6YNetvjK8qHsO)uIDPa=Gh)&3CyipwATfc(h3A`NR@IvxqYnN zOlDn)o)i_U#K32)N`R;N>k|@?(Y$@cAS7;nD=b2PAS@DAP9TTWP{rOz&R7QEU|2j|W3L ztW%usIp8}~VW%=itZcT(#fX(h`z2@&$$e8c=_>${1ME{Dn(Vu0T#}<{O=IMF?1#$Ox+Xssv!2J?;(Amf)5twAo}#Y2(diLiiMhQ=Hz36^Ro7 zVSn7yNFESMJhSEPh+R?dhCp%$J`@-hP%dbp*#@l{X@B>`rE)}^ZoC1ZXz*K^68!@t zWq_c1CM%O49u^2z>mRc*eg*TV_S0MtHn23GhF#)@25CP6Dv@H?*eR*kSC$PqMg66Q zY~8J!5+{#M_(9Ri0?4N;1jbuDOD%J$u5O;L5H=w)NEkGA`7;VWoi_QEvvQ6O^d*O%{c z=M6pv;;g?ESC%ILPU?h`9<4A#7K6G*v_e2SyiRcYfRNjVCpL*(q|6XE$0AEa#iX=@ zYJRf`uNcsLF;98y!24vR!p4{dIYDUQ{}!!3k-Ps}dhS=KqNL<}9>-lz*IbvX?t_{} z=VtmQ{K`b8g_Rcb7v*eovS|&l(x&qb#~cT}Fa8V@Jd$6V*%Bibl)Zv$V7g=HbL&v7 zq@K69q54ssut_??9anC=6THC{i?^GH|5{>NMOw>&O=@u;ky9dVQFlWtqXLCB5H19; zb{4^X&7_>A5}&zxd!QH3AK(kPOcsBxpk1Y(DAIsJq%^%96;W2ePtbel4=-nlCzzSX zvjv@JyNJT9poG&Qd#L-04O&+71pjn23>k=OZo2>P*=(~ZI z_Or778JcHO<+>5QK5yUw31uW&Utf+w%@O*K8WdaDTYA*nZ9a2IcY$@6Z4{eL>}4+_ zSHdEfm+nb3Fbc+rd%Xz2&xm(!d!?pIxZ>`QQ3vGqqRp#uPMGwXn}&y~LD`Nvx>0*9 zjgp37=6wr-`uMj{|0bjGFJlKPpc8n6`xkg)BS%5g%#nLq3w}BxOHDW7kf$q|iV=kw zT{?x$*6XNh(Zz;rYvzxR2xwv!y99>sT076sh`amw!rWr`Xsz>KVzVdm?cN{E@L#k0 zdZdcH%j$$Os-{mDx-pHF4dufSy;WnrKM*5l@1;_4;@`1=0y%%z72+hG7R<4t_o+c2 zL^|3D`-Bs}l#dbu-4ruCZ8b%WCA-iPaZ0V}WMLd6)N$;xF$z)x+2daiVWJcYc~HX) z^XJ;dP$(s8e*g|ia*Yw$KcB4oj#+dmi_-x(IqtuG&KB7dm~S|$owyR}nC5q;g#qQb z{a14qgr?2SoU5IMJ`BO}pq7gKc1Upe%B-GIo5rfW)0K_@eeTEpaq4MEu4Gf&nbi97 zV5b{m#F=uPPnqf0koTfgfjknyz!cC(V6FjP|iP}Vo@Xc~|2!3#!Jt$W}C zx`gLgfE$Jl-F78Rx^OL{lCP#hnqB)P&Z|`5R(&T8JX8g%qIB7@UAQhJ0<98RM}_q3 z&$T|xVA`lNx5awG7Cpp6h7jjMzIJ?xl7fp$6?n$u!g*}^s7wCJ_z|qOQj>YfQ!0ChdWCv+kYI>tXGlL& zf!#ZLPK_OfJ%_kf4RRD+{vv?2l>i88m*-9{jxKvpEI$RSO7O%E<>*-polIaI6&3ZA zGMD+yD0^f|ayrQaLCTzDrQ7ajA7I++OREUcYOdCyZfHb^inK_V_NWN)hXjj}{o!b& z4$XQw8DHzD=nN8{IwmnCYD8lek~+{2r4nBlXcr_mNXItEeiOv*B9HEt)>xe4E8jn^ zCQ0djz-K4+&9#%=It=6^Bo+=Tu*@rUV77LS9F>?1;_+=-*h1D_qU%*D?UBYMz$0k( z(&5;DxrSYR5fzJ8Y+J*umKpGMhO7vQ;1SB4U zPlKUAn(O&)w>Gvhf$>s&V)*DB*L!AoebD6-?danWbp};Hlu2LaH?5wLMa${n9J)}Y zY<#wVcjJT85jimsj#Gme1$9c}^2(u|Vu?x{9_b^BD)tDLxaz=k*zI-6ka;THA=+ls z)WmltXgX;+oVP&}XL+THz++(zR2))rv`uC8>8WLgldA#7kf;YuM4T*1PKw}}jZsDT z)2=DjXthGyFPg;;^F#WCDB5+dA-szTYg8bX00AjHY`IP6)&9#o>{^EaPUi~IxyvRv z?c!Q0BGxhU>f6Jitsj$w^(eRDL2rKWw|YtJ5A+gfPchI6Xm9$Xo*4Aze^#mgVmop{ zvlhERbIj#>=FRZ&@lQzH7Hr%6B(wvk85YE#ButpK|I%<^d=51WJs9l z0>so9DH%=Z1QnA`$Vt-;RFoH{@&V-KVhym#9%Km^gfSQuu8RqE4M9ZBtX5hPtIM`r zXZ8%(LZIp4A&4J8RmK9oK(%zO^E`pS6xN1foSvPOQM3XCHH0R@YSXyIBUA6VmZ>}# zA3pif54HqLkB@)lw-5;YBMAQ1JHK9j=4Q>hxbRDj5U}OuIMK!qram)j?zJRlM3?0kbwByB!L$+v>hLNq$x-kj?`+ zrS9+>%?iLQZC%q{ospYeEOK=*Dg|TyodcKJHG#TFaY1K8rdZ$m#h_3T!3V5C^V_`VR}OF6*I5*<5RF<$H53=VPNCBanj|`;E*mctSq<&&RS7xWyJ(-L*$rekxUi zbZ^u<-|kMovTt}|sTnLn${uY4;%{w($Ug$<-{%1S7f?SKBJuBr-g_M2`dMb61$d#F=i?F;3w z045c*%@0~9v{FLMSVZY&VNmfV&l`w~FJ^lJXW>N>`eCbpjZkR&bz zEA-{;lJVX_JFQ=%#SJS1I|{BwoqyW#$XziGXj#5~MO{$$)!`+fQ$YQ*8a;cTYqi-f zR6Lz{4yw!nt^v&+`%sDaH>H)Am+1m>et9F6N@Fjm_f1bqdDH+H!&w@bAYaR+I+*Ja z>Cyjn^Mat{0Acmww^#}O5mr`42B2mefZY@4{AkI41u9|`q|QLD@FNM@(2#M}e1l{! zKif&y9GF%Zzqd5`!mLV$R6>MsFnXo^QJn$R1dy8_NzlQetH`I2l%a<~6bTN+8$^OK z9pGx7&7;>2;L;Jox^Bmghi!LAykp&_&`lspp(=6jD6dal3UqrSo?VL^IOY;T#B;)T z;y2Wv+4t7tH3kJaDGm&_lDR1^hl$x))uI3qRJ5bXobi`}8yJxQGgyUTUlq%H7;w)L zJfW!Xy$&77(}$XKbKkD9g;ElGFwc~$)3RHu5a)p*$m3}XojVhGujrIwkwLnw@d~8N z-XJk{*JTGxx%z^r&@Js9gK8z13V(r*)l0(`?oVMR?BI8oM|(03`uX2}F83eYy_%i1 zm5H*e4T#D6WUsp?u$c z&iBn9C&eRCa>2;71j6~7*BzrANvn0WboR*YST{@O2w_|hOCnL4XRgW%gtVTuZ(D-1 z(jSEgOuRDzzH!_Hu$JOBuI_DZve;X1b85J&Axgaa0q~n?4diclA_~|Cqaw$^d4pkq zkW{3EvR2BTUPf-z2%S17t=o>+Uxcwcv$NX6S85J}Gl z6THN(XjI6QUm4u!P|iT_qQ;%4gbrhsZ+k0!+`%vnO>ktPG?!CP5Uae#g@RM3Y0~h^ zyN7v{j+Gw4dv*{y55Gl-_-X z0R85vGZDlO0So~SfWN)yQ4qHWlDubM{5HeIL*!PT(H*t>K!uayiX$WK!^JSY!E(}^ z#9Xg@>P|FhjBr^oM!Gki*EQZse%kqjl+b00!ekj-HDjmCnR*tm!KP+rq_pq*g^Psr zqbszoAbXiQC2Q@ll(F!z+(DNrJ4&_?_HkFEICW<5g=?k3F0_yLViW32DUWnr+K8&B z{E>7)uvo{KQp-fq5c$ zbcD0i4w34(=No#9B(+&>+aAZj;Y^6~O&$8<`jw3rG=T6_qLJc|=u{Zj!?Tv5t$ZA% zM+eRK1&NkOv+g6Drq(4gk6X&JehVkZ|G&%sanpaN_@l9tNi{XVd?(Jv`JtUYoIE2U z^{x{Z7WTCHHo#_FOF;$`9^t^|MCziHXxv@*>W|_03nV z_a9xbGX&L_<3TItC7D0emPjKy*(K)37bH;|;GWnJy{AWBAqGTjR=T8-LCqUi+{WZ1 zshZ>k!o{0tFTDzWSD2&V`tbtZjzi5lCRPbZCNLCp`0*2E&jGm>LiYGBm7S$A&qr-6 zQ}$Id-qAU?xhb-`zNj`bETD~HhSJyGR$?2R;q{P6Rx@|@^!yZgglqsl4VeuBt@nc# zuB9$=n%{?shjkp$Mug%u(f6;t9KVoq^LFkdb8EvR0M?J0zV8arza?B@1#E5%E%diY z(yThNbEcP;L#j=V=6#9SjQ+R~86CqjtPt1dptd!C=*h*?_z|unx>9+JWC|6SmsFj& zH|@IUEx$a1crILD@UjXsilCltqaCNn+hjmHvh1b5ztE;Q)eoGD;u0%|?8a3 zIR#1~QWIl@D5jaY8RX*X3I4C_2?jM`l?#8AK>5798`b^UvGfxM=tG2F|-oMIIt?)Xu#d^C#Fh46K)uL z>gYWmC0Lv!jT|##9dXM8e&gq!?B;2}piB|CNNyZhOH<#;cro|`jLtP88539I0Pg;7 z?tuWtDWqwf)8x{jeQtc1`?zpa#d&ZHlmN8QGs)rw=Lv=bgzs)1Q~D&$>Tld;o;Na! z-ecu*)-sgddkWz0)B8+&O4f{fcS^_iTz@J#?@b zv=kA&SZ6m$zuq)D>(d0LNU2&w62=2i0ZDx)we!IrSNFT}39Ls^22}3HEaortS_`dD zWd!KloTJO2_nG+H_bK_mmE3>4B^hfwBV|*7m4JnXwX>0-fPsS}07R+%op$&+>!Rdu zlJk)%C_&g+^jRTfa5#DjU{ah9fG9akmmfQB680 zXBxDQcUCw}a6D-6&B|1^jrmLfa&GD%;a5Qeuh=H0m&b~>qmo2-J>dx%p2wEQVGY+2 z5*k7Gz6IDZMp<2c*L_DZ^2`m|^w|+ZLls!?zA{1(=Mf=(t9P^fjDR?!g=u;W3M=J; zrOJ+erR`~jpU!&q;>E=er4d4`t%d)nG=6J&{#3wajX)TwfruL;LqSJ}M>IeK(|-#1 ze=?eNuID5br-tzU!U|~8o8D`#ugtZ*O6M$tJO`tLpgiC64Y1QLO?_}nNWD7ySJs=v z!j)35U!)=g6|W~RhVo(el*ivGA68q4^{Q{Gu-zn4ItBP2eu{jNKmlK1QCmq zw-_VVcjc}~KJk#??8~FEZl=|1q~&^+Jsm${p?A7WO=z~ny(Ykk58H2vdwpNjD(Q2^ z^nBW@ahA=X?$C%wKvhNRW{D-EK|~4G=85w)%g~>bGa&(5b(s!G^NbOJLL!52GMLd& zMlgpf%k&m#UlKw2Z`W`_Q2rY{HA!Bluo$qf7VT3EzhL7^_zkYA94!1;MHC{2Bilj< zk9x=rw;Y-PBaGK0NpKi53Zoy_^}v(s)kw;KKU#`vb#=G+Ksdqt zHYEBDwfP?cBx@}J!U^Q0J&lI>0oqTfe%9f%J`xOLil!)_J>ijo3H<0Pf)F`bW4ZFi zY_HoRy82|Pbw0oZc|omYBFD!dsGrze-haE{y8Cu|bBVZuyiXvRV6RY`1r}hFA+tfj z>8_l3xoJbn}D(Mi)v?o zx-A$n&uiIS1!pRB*R3l@`r#ZDK!r0kI}X~OmQ0WfWvG$+Bp1mT8K7V=Dde>fiku-t zrGT%US~yuIX1?+zMZb8GIb(1l3mE>Va6Pt>Rsct%TAU5uw<~W;?__av5#^Zc@xQ#; z#?a6P;9@^7Tn`)Y@%ho#eZ%<%X`%m&VDv*uto$a%=5nWPqC~)((jRF8zr3Dt>K#~W z-2C&x*Gh~)^k&=g;OdT|Hz`1mCq>8D%)!eI!U^)XIQ=F|_a8VZSpw`F9`gnA*1$)= zevMs!CRCLcgv~9@t1-BtK@~iBJj(l-RFoCa(@V9sp+yp^tjYgY!BhBBTzcGxJRkWs2+|`!7nIueF!7CJ=Bgkyt zWsA&&H28ha7zyLcG+!L?%?elUn-PZok$Y>5H02k{eS!vs~u#J9b1={J;Fku0y) zlh4t>w2|X(E%Zh7#fS$CAtph&0^Mav!A`XxJi}9U5Kv(Wz#C3I!gi~W*8We;YOhvj zA3jqzK4*&qQgvjFrYj&93Z*9Urxi5q_DE;nH=!rnxYB;ZEjDLqXbs!BZ2FO&}z1x+YZQ6*m)U0vf-WBYTV7bFX>n*J_t zql3ZS^9?v(9Ccov+b%l}m;3AE?4^8r)Kjtzon!B1vj!8kN9$UyU%8lCYg<-R|mAo;W%o(Q(@U$02FMqxwVoEn0$qj+P9-%Ju&Rmryc4r6mY1arh@4h^?Vg2rDk~N=nL! z4OEV3X-I*={lD?rp8Z=4`VRiEb0w1gsaPR;N*u#EToB6~zL~564zST2;zDqvRMM-}jF`o;-Y-t; z&`&EA%_*7Y+o29tn+*r)G+fS+GZ|CFvLQiUNQq^T5C1h)&-A%sP_hLtn(=@MOr$D* zmPDUK=$fv&1R?3`U8sk8!}#`8ICEF6svBl#Nb4+Sv>@ult1r5F_DP`TRXPv&W(YU+ z0I@qr5$gQN-m@}dO^OMMxNVMJieo)%5m}#NwJ}a3)-lpDC1U_wiM}XeO@)$a^@pU9 zCkoF*)$l<81Q_aX0Tcd1z*PS&I{CT0SQNC`!O`yLOn}^vj{RV zDORRuUR<2r{>Ck@gDR;z<*~fv#0=y0q4lGHm2{__KhEaC{w-cSe~8z=+(1zM!GC&! zikfn0pw%vfF^dg!RWDz=2oMqZO09{4CKN?Ln|Z%#db#P^fIraY6fiWz`klt3 zi=7*X_OvcxA^2_@!s@$|N)@|6QpGwSuTS|&Fy{WC3rFSBnT?BAh^HHz)VE=hB&EEr zf}>wHLZ7uqD;P4#w|ZeZe?mejn7Al~s>fTY1@(m};)VP>#h!*5Dl))*sU&$OHk@zj zLlt+7XljwxH6<5XN^`Aly}=>kU}j4ck6`q6hVXb~57YL=3Ah(X43X52)W=Xn$V?b+ z1Le8Kc<4%3&ACepSKM17-{($Ry7~xu)37Wpm*2NQji4<>zh_P4 z7)6BUG+xC?3+NYC?}58~`5@Y(V=V|jRcnR((AH`F@FnYgt+x{AT1YB1J-GSi)7%eD zCj84sI%?^+kAdnBAA^}As7?PLaSFf5!u*GO^yB2;FbgHh`?6>P=-=~dX&q7WwTfO& z2V0`3qKI^vLQ765Kl~*V((3P|0eLBC?A&g00%Sp9OnNMK0Sz0|>kefczh`tC8FF8~ z88NzAxEj@cMg!mocpe3*NIucWfbJ}$2B|7#D~9*hY*gbs#iKOmxPD)2J`)u_5i074 z+fbeEv(wG9T8pEal2Cq$+U7GhuGqJPpLUodm~9csJ4xiKX?x8N`r9hIlKp3qa<*@0 zyyQQT;cB_5ip>?81%%mvd#VKWews!N#)IrcX&GI}p?h#^!V}@L*8j@~{@xPB;(1d= zZ2@TEfLuIvnWsPs9#4f|SY=l3mW);#L#NG7O%A^NkTHGlR5}iP2vhM@9;No0P5okW zQJJk*kHYX`-c;k4@BK9d5F>!+>kVpX@cnkVrS~7m=>So;6XQJ$OAGPC_?!4=mYT&o z3ou%&jG@FrtS6kCnN}dEAED(v&*$Unt|U<=bZFTU3?jxP4KCfnXHaU zZ^4=%PsgUrS{oB#opMIYHST&9NHPv47?k^^^e|oT4r_BN0fnV`!AIXg%}qn9Db_C+p? zy2Gd0)h?MY!Sm|DEaiO~FR4-9)b>lFj%3v9gg7i_a&tD&yxqUs-GjnDmIXJ-8t$hQ z4`5hC=&-@^VO+_qT+yd-xn(&M#7Ze4FxW#YP3a!JSgHJYox3yB{FI^0Rrjzi07;zf zZ+8OI|Dn`@=7NDD273nsrSylV z>$ZZs_~ydv2jYq+h!b}+Yz{VT657a}^3xu?p%!S%MQy1Cz{RV5&b=TL+6y}IeLGOD zPI){RP_sF&vpBD;=<;eQUB(B< z8KU?say(79ZI}MHl>$2D#5YO#({-c)?WQL$%lA`=?kFnYW1Gyfpqk+q9ZOkb4-c#* z7Bbh-{MHui11C!y_&lXPV2g3VO9>_Z;7e7uPKLq~Wa97%W<4lUTn z*mG@X3XfI%!sd^TEpP#=@Q{pIWfn0+I+Utap2J;^A>*4>b&MenIwLcs7vTr^@$~zX zj9(ZSy(Ijr&NSCEYhb(cGi8XZSK@+zUyS?2&aA0cYo09_GF^x-ogf7j!z;gWVM*DA z&J~U^*dc3&Stzl=k>6h!{fs>e*T9ejIozX!v0!;ds=;@u3-kT8Vle}$>OGb1{y4hs zYg{fZt6db}*K0)E@*tR-Lp{O6;P<8F?l>B`vPxo8h-Fa#u0r7CY+5Y67(ooT5SXXy zEw+FET-cO_@uc+tvZyRw)NTp^KDopLW0DIV2fF-op`a#g;d2h^DYEI~6^?Ejg;`_+{G>yV$Ny5c_%{h7{**H*$+!R~zss3ik{ z`w?qYXvC_b!UALC;$GG?RqIhs<(Tg8lfPk=Vrz7mW4M%TegE#+J(#2WK8Aov(y%+*307PufUg8A$2Ldn!vn`ChY1_s!`&j%UwP%YBDnJq4uLzuSe=0Y zs{W|R)-nyzPn5A|c})gnYDEZasmJh)N=vNL<|?1gMCJ_HUngyWBS9*2DV~NBIFJy( zq{@OK?#$4|7OExIJWr~s?6k3CNn46?%FQ9)m7K7W78(D*`;0>P!r=X?S+j&nt)WtU z75N^*n|PVm=^k~o^zTd)6_=RAf$|)tItva6At9_mw{zHCXkh-r+(93??KkHsH4Edk z*rub*3L2TnNHI5L3X0$0MybZ(j1ZJo#Vtggs|Lq!0(GJR{=y&nEw`qO@80-J1&k_` z#C(>?)r$J6L6*%P%1oTLEtP35I;~X+BOR+uUkR=GyN4I?jgJQrw z%CIT*g%!b%pR3{z*%pPKIfM|% zQsSmjo2JEFHALzM>p?aa@*sZ35+nsicP^2xpTLdiyDDu^@{P(4V-ifUiIN$fqRBiW z(}Sg@{iS$b6s@G{zTZyeI~>lfP_VfjsiFq=BCUabW7PrR6jKE2SyT;CBGtnY3vBMZ zEZ*7Ya<0AJ@$Zg3h<9NLpfJ6Xg(gY?L;KSJxrk0$zbuQ}iU*uY6HA*u_^i&WST zLrfQJBIh~Wmai9fvo*hpsi5tQV3Ad7bjO)|)^8_sZ4MWH4(NRJw76>mA!&9wg+-4?c>UXXz%HXQz7dt@r{q98cDA@-Wr z7(CP*;s_L1K7@T0f3L)QuT2I=bxWE<$ zX8!0b2vUH(@-6|uzC7I4j%hpPIrE_n5}X4Vls=Y4l%+oRtS|2HYIH9<{_gkkv({AQ z=gFK~;E3tRz4w$fB``JGgS7a2CCUXy$6N$$eTqH{xoQdFybsG>IB{@ z0<$&Q9`;3^m+8l~w2CfU`Hb_8rRTpVyCh;zMlM>}sGXV(Grt%i+ugl)iV%MxOi@ zFdXrVPHkcCn}B1KM%2EM#sjblBR5Odo1>fg&hL@4d=Q^7;jJy?n=VK|@^-w0RI zuj!a27`YYyCJ@NC&uTTaSXYr3ifhkiRSa0)t2qcHY21?5(1oBsG)OrzymQG#&{=KW z5x;AstL62^MW{cGvt+A~MbUIBiR)AdV!7!?a zC+g>|U7^q(sI?dw<#z=szpCLUy3`6_@sFGz@?U(be;x9ZbC9sKvG}2atJQBbaeHyz zK|O<;KyAb}@S*1*R~JVXPiC+1JJhqFsKV<(h9>2~tn#W3>u!YWky*Hqp2)jOthj8Y zFT^yJnLITzOG*7v4hJq9Ugd%~M?>rc>LPdn3U!_)c)y=-n^nC!m_?>Eri+AH znsSd5@0uJ(dQQ3wG}m#_XCd39GSUW4PwT0JC$MlmSvGlDQI9V^1Z&^ zjROS?G2|D?aYtg{d$~);3gdzJU|t(NS#66x&R~I5v#-hxgg)~QPS8pD-J3?;9%0tC zlJ-TJpB8Un8&j>vzKbpz408x0Y@A3sRH(qZdw#@p=JGr&MwJdpO_Kq(Jo_0QzkIs@ zhVwcy;CxY<-mF4h*E?Vmb%4YB9dl$xbP&#A!sR+a6*YS?u`i-mw)2buu?dr5&qd{Y zv4KWBgc%-5!2(!nrdJs30Z#lEct0v(WrwT}dky=-FTPF?k; zuBvYr%E|g=Du9WR9#pcKx*1lo&bMe)32*)FJa$pF)zTDfF~gx*K1zR-%R=YOr&q4B z9waF0cprSV4qi-~XMXp-$i^xNW%kX0$fRN~5k}`(@s&%zlTK@$sd|Hls?-Y@p-R#? zZ+kE#3)(FTT1$XHEqV&pj;EMrGtH&(yAXXX)sEihY49o$>}1H_7rbiffpK*#F1cJ2!Xs=-Z#&>9~WA zZQHhO+qRu_Y}>Z|iEZ1qZB5Si{_fnGTXjy&RLv9Ed;hieTkEwX*aFO9k*+9z9u6Tw zxyhqI?o!tWW`+$k74KrlM*d}$hfik0RTcxb{El4`;{Sot^P|aV!^zMcDFK3u`S4GQ zwGXADqBVWERSUXhDW?qJ1~+|)2x&~WrG%lRc#yd_E{;vOSq0kFQMsx3h7JTr#E*qzgoDI!o50H1?CaK6p z;83%naWp4`p;ug7SI#boryQ@8xw2H7-42PLLnyT_ty!OIqrhA9&eM=k!J4#cSlV-@`uy05TMpQ zUy@Pi+0RJ@p(SDt`TvL|v0f0Rd&7k`5p6tfsG3i(a8F)+Zr&IWNrKze_8H*@I2s%N zUZJRQsmB06qaW-09&u`1kK>S5_bZ15l~=2EVhU|V@)OlFRAV{nVDfHbV5;n-XWSi(*>Ra|^)`#W!I*4hKzuF+=mY`|>pF*R zDkV50lAo34pa6bXw=B?4T(dyWonW^>1Ijl~o!3&NJ8PyXt)W&dHJN?HFzGhDwt(=y zBn;EUIDCs`oxqW^^?e7BCV9d?!b~``YqlYG%$?x`$2%ZmHARjxT59F)Le>#&AGngAmM8bF|2BNdKi{0c24@}g^cw7n{3kySt z^_Ai~G2IYG$uG5{D|SD3s+cel1fc|#udm6atAp8G@5A;{HLpB>5zy$dXw`AqW8^Dj zRvQFJV`}vDGgV1x^Nm?aN;y^SK=>kg9wX~_OO021aO~O-5xNi_z>HQoTe0`HK|F6) z9+pJGZh~SKS`F3UbeIm=y}l5BJkVyxe4zH4WelN>@4_vC?KD8E;ZS;T$K)s9Kw4RC zTfN}D`+crmkJTL|>$E1MwKmr(@G;hyR3DYl#vUquKML%)1Z+7#z0n2Dv0~AR_2G~hu@BA9RFvie z!nOd15xdRLnHW&{RWmI`;#C$|rA*fsYi)D&H|$@}>W6U+H)@lFo^26NOq38%H>f=1 zq%EQTCcr^$_%!)Nucs7WZ_QWc%-HD=klZcmZunrPOMFQ)%;PPPU?X$l@!nGiH)7`% zrx%-Kg&$WQ7~UWZ$(OrM(M&88Z8X{J7tMN}TI54RTk5 z$L`nP-P|->F+cCxBv4)~Hhx|Qohd`07D~wnf}*X@TI?Wsmj1C1Jx{hjmG=ibF~Ag^ zOjkXy!CJDuvw^k&6xKlc6w&)sRt{}l6Mu##ef{Gakk+E);{pGsJARig|NhXH?%$Op z|LP2l4F5&+cC>f;XOI6s)k&t3l?sLsqBk+28n{GmZXvkW3bJ`Tuc$<&Dtu2GayY1L ze4eb%q%lL$cZZm<0U^@)U4^hb^G(Gjoyv8+<-5C^xFEp$E!^sv7+;NhWqDk!dmLpa zcYT5A{@fz|!5{9}9MZoczl~wQ9mbF%LX)8e6|GUU4j3}s6(VfB98;Vr41T|ok z_6YEx*+-X^);p5gv|UxH(SlyheC8BSD;|~md#+Z+QGoT5+ZT;`3B)8tyij6e)MIC* zN#6U13GKJ9Y(R|=%~+aHgWzX164n}m^<0d5d8Af&?iQpTYSkxAkpuapK?ENirUn3p zkJ9nvLS5>1rKPLsJpLJ87Hdh}W1?@5eGLW;x0S^RQATIA5Rky4=RB(wIFEI)iy)*{^mNjs(D8O6 z1wsLp%rW8-?yr|)xoD-us8!b6dqUqXTe_c2Djr^{pe*VhzfQx>M6U-hT=nc&DY0+H zcL<8p+DvRLZS$TC>Me2AmuEMTu$cxP?ya@1_}D<+d{6(;_^!oW*yY>l=ss;On8CLr?K_j`IGEzHaGMk zHBqeS?~ivNoGb_ra%~i+bR8lL;X@M;4fj4jHKbeZ(mm*|Yk)@?U&$KaaSn!#I>Ff& zDS7`x!FL5MXb*2}nl=2V;fYU`ziC6TX@gY53h^rBg>vBr406A7Ok7GjG9D*!A_Wuh3y-9sAC9B%+h)-|c;}n_)yK zW5J}HL%}{cD|EtqKwNl`m-1nVq&eaHclNB&V_Zu>r$wqnoV50XZ zJP~kQ|DikVz%wece0N)}5dTS)DE_l5eP4V#ni>3$9#yKE>0%n8d3S2oOA&K1Tj^=6 zQg_(1G$bSu=gQ6^LyCo2rp5X78oI4L^2i6Q(g^6=cAK1|ian zkhX$2=P~#30czHuAvZx+(eF-ms`~gRRLDxp!O<6lsqvyE80@1XRe&m<7EJ+BQi%?l z&sPW})ybAWS_l(6)H;Mj%J=UH!XH*|P0ph76yH=J@p*C9CLwqUhe@Id#zL`{3ibx8 z){bcdk|C?j*d+T|Hf14Ea=Wl3@sp-GGd8QD#90HRl*m2AaXC5_>Z9RUXdk_1YYeYJ z@Mn3dRK{S$01))L=wpsNcX?|urU!Gf4WgbGCxSW1!{3UL=yev|O-&XZMcPq;ss*~W zVdnGT6_h1Y1y&Dh?&L(#C+d`W4=2?Af?sT(kRTC9QVF+--j;Nd?DH$c%!+ZfbZz5G`$~ zXd4yQyshc`BErq@bL%GLID`jkUp-+!ymgt%jMgivYe@0pq!;gJjg)Suz4^htPv+}p znCi9XC1cGZAC)z2bqOA|Om=~49Iu)4{U7rLK`C*i*d(6ToJN{}gO>t1W}vhaAH@_O zp2`LC0G2KvIr3yJUyOPHato)H&&^fQRoBEgUC`ndxL73$8j-ZsmV)W&q5Q*E!cmcu zbtE6WRsQ!{1M-yUC1ckvkn&7>{jsdNBX{E^sjCUq|iLm!1pp!tX z^j=jp`L`Ygy3`tT@ERDD0&LrR@G-6)Rfau*oNCb8k69qnA?I^h+Jaqp&C&E^l+bqG zh0+1ElA|XY6Kwiq-K#-k^ zi3kNQIM2^Bc{s8aZgcx0i9~6wsJK@in#O6eT@L)3P02Tc zAb-@Y?!L{(>&+SnH}VsLwd9O>m=1XdQjt;0dxrQ1VFrmK-NRx zqDar0D*Z{s57%?C_%T&ueWovYN6@y9 z`S{wZs_H;~&E%=o!=lJZ@oS@$OtK%u+q4=ZU=MBfkLEl5KGFUwm^@StBu|y?Wq}7RC_1=&o?JGwbT*R# zL65G*s;Z;~s@X7vOLU7iwE8vIpDCbgZV()EH`*JQabZVVG34}ZOlvU)K6U+Qw8wM{ zfgeO&XvAfyEsCmNZwcswBKm@@N(f1l94BD_FJ2jd(F{O+E6I-8yg{SLQV)W$)>)hv zYuv24d0{PMlX0xV+($@ZtFwZ6zMze3YC1v1o>Zg}BXu=X9Cs*`|>Ai=GY5DO>xNJg( zet@Y_1ah;UOr(mf_Z51zs%1Xz3*B zpa4@t!rf=A04R??r)}(e5l&2enj+v0w%0^+qWuUwzsjt3J;viOJ~Myh1fi^>Y8$R` z{MNxYZUdbJEJ(z*I3I+e54s?T^z0+_z;u1R+bLrb6mb&OBT)n1UXVdS117F5Zjv~9N&f^ zsqU3b-{ui0JS68mK4ojm;7u(6<;CEm|0?I*CCvtjs6wD~>IKIZ@u)52%FM|F@AQ#x zC33X&b)&>RAb#LE*P|w23Y{AzAE+^9^zcL^BlQHUKl%ot`{Ne1E1~{zZhSQyO_pbG zY3k-TPHz`m9A?tOMGxIWUry0g;OvZTjR6j_BO_FPl2A8o61XEXcc{2GHNtXmJPb3p zBqY)K9EFsa$FDi@b-0&-UsVrj&?S zu%BBoMgKGVA$f_ywTKRm5Ag)o^Y85WU{@p~aNAF}(&*M9S*8eNvg@?TLA?yTX-#-? zG~wWGTKo!ur(6>TqyMCNhMsh7d8mKka~bux2)iS;pbx8e=<{q+sT3!HRPQQ` zXtf4Oyj^F-)S<9odIpRh_XHjn_O!dqdOevyH3y0VFWNU`1+o9av&_kz%!_57zF3_J zfT`doS+#{}eZJ%iI5H@hA2=eGKMnGo005!XOm%{T0d5&5`y8gV_O$OGLaQNM+N5R0Iopo=tEVk#TAn1H z=L-VN0op?cv=hdO??N+pDT!drhuoaNvOZ+w0 z`GNPvevPNKCs2lgQo!-JJ?W`vmbWVH%@JZAQbLVaHioL;Y@Ay*mXpQ!)Td z=}k}Njz-l;oA-4O)Ed3Zt#NXo3t-;lMt(BFB&3+WF6-(LH)j-Dlc>#Z8sR=1=w-za zCA;~Cd~@;!OD&>okhW}en|gxw^v13n{)w7&{|RZN=Qm!wR^_^wPh0rQX%^+_De9^D zA`?|mNe*x>R62#H6r(tEbDnU}2tAEB_XO$4%BY^F6778=Xcw9Px;CeaE#iTk+EyH+T;{Kmnhf>U<<#*w03MVoenG8}yU7%?4v7j6_qI^ki6+pcTC=RXJD zU8LjUc2GZlRO9@oPUhdPeE!eoUEtel^j|BV4h=V5O{Is=Nkca^?dEAK_0=LNGPQJS zM?A7XMk_pKF$tAb^&6+#IGD`w{!}puKA*q1dAm_{fc%g)MItG6D?SiJK12{W6wTNH z5S2f^pPe3C>8UIdabjAZBkfO@9Y`Ol5qkv7)Nm7K#qG_GuYZH>4)!Rk*@)QqOb(w3SP%HqFAlKPfs1P`8H4Ro5Yh$gKFB9)~e|M`gq2 zkjCqQ73`r`v_XG4NGj@A<(S&|(9RQ?mQB)E7j1+`ye?cfv_6yQ?gl8O*la@~{I)I1 zp+72fVue*Fkn^MEs+od0*TFc6=wG-?vSo!|q6cYQaGNX}FX5~7Wk+~0-5x#4Xy(Co zB;FeQ&6jE%U5O2zc9&Jo6<@{J3KtGV$y^I80YYIfy@?WeFLk8oaI#i&~#w~?3d%q_YsJ(byN6|x1Q$O0SiAiM#NtFB`IS zn|PFe4GNb$@276c<&u9I;Dq-NY{!T)ljcvg@T@!*avCA zKCA@XEi4;sGZ9k{S}+WApPKeqUUC-Z~7;Js(`-%0k*oHE}=J_bPu}}n_ z1^{0FsgNm^yC>10)6Ai!vq+Me;KH7+p!a#=fYlaL2|#SV5r6L)C=bD3fPx3S*L9&$#6Y@lcjjfU=n^Tv1@U zC~2F8g<%^Ov@?!;OP>?*reAYW@3cCHHHZKmlUmiE7_sJgaD7{@P3vte;>}PO2xF+N zL}?~ehv!L0hvZS|Au^>ci(Sz6=r(^ev2b%46_sgv^{fOid?mn4zZ4)9Pfjd)@C0U_ z-5M$whK>CIDse5*4TtuI&oe}qu2Ip8rlwa5uhIB-U0qOr8I$`fTwe5cJ}9^GuCga5 zh1n=mK!wwhIME=}!V7Wm0RTFi(Y7sAW@ipf&tzH7k1a!90NWAK{z<}v7P-04If0A3 ztfNz!>Cej4t^+8y&F=4K{3lE4-e7oqbcf+1{_EJf6&&T{VEcQx43$i_JJEvi*oKl0 z_vQZNYone5?Xzj^wOo}pCpB5OkMP-!iJ#H%X6i12t>;j$k?Tv{nNYTDc48PM^|$`Y z^OFfVj6C}Ke*_3iT|!KZhzl#BmJ)v7Az>bi1L6kqgQXy<9YqTl4$nusIZ_(ZS zz%J0it5*0_1c9JHRrXw?EvuHOQltmo|5LDwyyFeN#c=I~0862ioEe9h$Q*1*k!Bu6 zHuWHY5WOwOf8k1Pq!ZC*tYxE<(VwZ_!I8WtpY=e8z@yBk>+SsKIKr`p(o!K!js5Q+ z)VpAfr(>3TvP~sYb4JYvt9Q}xqXVDK0~vpcN6HXi5va4OT~UIZ)gjHb#IG*;8;f^g z+sEa5m3s}DH-Z@faz$f3d{s70y%b^w3@P|svG>Vt1>&qhhVgwFA#j4jpDduvu>R(0 zz~wY4jhwB|&s-GiGxYn?EU)hH`xMtA2tKo+l9$UFm38XTJn7HBKSy2Bq6#z|l(Te= zf4sPW?DM3gM>tjZqNH$Tpj%t*M9xqLry9A!ebHaXg(lyG=}wq(Ucdyg%_f$ViB5TI zSFfqsl}nF<)b*-IfxoraXw$&M-5-qssdzN@oJ;IY5DZG&K;}IvwGO&RbCH1*A&SS| zPP*@Cy#Vhix}AvIaweh{C6Hz@k@D64uK4x1IE?P$ShpaG7SBMYg5l(7!Y%3SoF2ho z)IO>`=2t5yU(%3fI!aiYV+T~K%iGSM3Xlf^<*QkYpQ@) zgpX7YPB^R653?BOaR4o$OdGRgQriY?AiU@->2&oXU(UeejHlI$$OeQ&OgqH_MFNE6q}FD_@b462G;?1tJk{jI%4 zlUcM4539(r>_R1WBQU&UD$Hp%w6rr_vPG78u7MWE5c`}2-peeuvdA+2VxHG`9r-e< zWC48ME&c=zN$H1#}=i=3l% zB_}`PqagK`VAy*uv{Px5MJ}CsxtEgQ%4=vcD)P+CR)}^MH=TtX^HFIVE z-QJ3n=}eUNEywG=UZl#IVvaGX|3VUp zh-e9{+y!6UzMA@D3hTgdNh9Q_j0%l)SJBC$pG_;dn+LH66D=TyoX<=wt6a2 zyERZ_D(tDeSs6pw%4$^E%4yM^4PHc*kxL=f+#zZlJM`C%XJpWvg#0F&H0NA9#chOXljJNGGhg-ct?eu%pORin|+QmQ{TkfthU5=$Qj7t z3p?*fNp5=f^4WGQCp5C=3lEpv6!vrlOqLc?JkntWoRaO9guC&`{V%uU@AS5?;zPd< zg3@MlMk)A4;f?Ec`Exa9;c)nh@DGs$jBp?M`YLuNS_E+(h9;>Oo#3y88l1>e2!r3S zbt%KoWq2l9jOTBN2e}Vt(aIEvqn;9MuM}=9TMpX0l*2Bgt?lgW!sxeZJ@1~czZYTa z9}yF9Fd;N)-k+px91bZYJr%{3SU}nQ=0w=-mqJ_LZuPynomf!Py<>$Gf|U!cTmggn z6;XGy6r{5cj20u910)w)6H!5!xiZ+s+6#OGNhe@IY@WL7GHS?U_iZmY9`dQw6xI;R zhjwvsXV*$-l0TARTpnrPA#g;brBjlvS2K1hq_N){BH#Imuky*Tx)_9NJ0Xgk#v~(d zk*D@Qw>Wd;9i>%llwdk**0Ll8?H@Uu5+Zbg-d5L1$hAkvE+~RM(lc3sc7!8{rYM(v z8Wf;~(4UYZHKeS<)wm3|36nf8lqoO0+`I;_jhc@lVoPNR=X|KKjCc-MndRE`_D%1s z$Bfj%>08;&nZ`0-bwZ;{Wq|DQvgR6}{TSQGY4Rn0l_tx9w3<^#IuH!L-Vdb;53>R3 zVzI2l7vaFm=J6OlTwc^2nh^Kjp+Hoj?zvFC7-PP4COJzGbflNxAxVo!*FBWi)v&}m z(M?uE2CUPlj5P_q=Ku8Yl1+?4;5zu=H-g2f3>Dl>uy|n8QSKMtSL-2K>wPSQG;S-G zS6Xj+RaYw4Ks%}8RG6f+2vr$;T1o7HTaedrBc0VjtC<&xPaNlg0dBK=AXP_WL!JEd zM*)8Kt-`gC`ZtPne;UNVt%#HN3yFd^URMUG&m!Lk50p*lyOOTkxwvs@{xU-DT`0M~ zqKCPx3!ysNHK}6huT%cj+b8;$U{0Ii-^A~?GOt634v2G4Yu0#2o^t6G-qyE=bk-s! zQW*)jgAI6fU0u~|ZDp9&Io!CTm)!4e^(q14^v%F~&J0qoDyi*+G#IyGWF%gqZv`tC z8&xdG#f_~9povfJSJ=;2>B&C%3Sd4ARKHH-h}W8H;?9px$7md`=nZgT@vT{N|Od-!v#ykZBc}& zO-6smgj_~YRq#U$x*=76V?mf`I z#F`wvpWi38%NE=OsawYp3#u#tGIjsC1MwEfzyw-fM=TkDrD~n#FMLzvW!Z+b8(=#I+Eel~5mknTqe!uw#L3cv=HRECQoCK}J4E z34P|_wTtu0o+1)s{I-QkcX)a-4!COJC+PX^{o?EY{xv50pB0oI*$p&L%J4B*hqcMmDU zL97HOE_O1=2NseY~7EXAa_sr-#2C%kup1&o>3n>(a!jtzg)KUKb?1KK+k|g-UwAUR!>4Y zU;R8|rz3`hT*KFUoGL})F_UQQCYdq>_|ybb8TQA{RnGBTo1MjAdL(uz+#nR7HLrS~ zkTe5Xw&jw6qV0eRyTy}%Tr40ptG>JyWS3TKJ>B$rZu7{56d-K|_JhcTB*0~Ea4*}6 zM6G#VEX_?O381<&6|Mh{v+}!ww$zD~-qTSYUO{?NjYPS_-%6*IGWU%ZoKP6?Mww=1 z99$EQz!ZNqT7UgSbBs*?xh00LZJ9F~gEtX}hX+KXn`Ut#r~YO;yP6GHWIi&wXh>*$ zg57Rg-7cnw?hHTOl=APA_V3~|y2`D4n*HlB9bn@IMJ^p}VOWjQjs zj!5XSj{rTJrYe?enze7v`+_xXY-*{>|9n36I|x*OG}#DadQgB&CcQoTxXVZI9$bG* z53~3XTBjYlewOy3OMEv&z{tMF`1O2oL289h=)-C!h4+)qI|X#y2=TJNzUr4HzLD=$ zOa|=qPwwHx;N!C{5nOCy1aDpgpAcovUb<+z`Ftor9{qmr7`(Haf_P0y|4wq9Jtc}< zR%#M}bvpRFmOV@M#DF{rGsRq-?WOa!qc6EThyo)!jb7bPo$l^>n!IC>s21_gPaU9R zHjwG9Ti|1p(=|b$dteP8vA^Czf4v3zd?fy66|8jarI@gulA(Vx{&e^I@$u;c6f?}S zpMIIt67@8iIVG*@05x@0QH{~hLw0INA~r*d+u4UUb0q`(z^49!viX&0{biHYP0LX_ zWqIll{is@hpxqMPo?T}3l7xXO*=)tzDV2%oy)~sBO_&s25(0z0cXlZxwsE5Y;FtHr zFPw1AMCO#Cc?OF0mb2IiNWT%I8uXAQ3#e}Rd%?0}>=LBX#voaakswcE4qpG1&bE;w zIh=NCG+3=Nj{=odT0~TwcF6i9NY9w4_#VZ%J$YY}Zt3W5$#x-#j%3lHm{1xPw!4I7 zl4bi`LiTh_m)a43s)QX2Qra$f6xe&t3rQzE3`bYPE1puGIP;cZ&=S!{&aFd$5J$G4 zIWBoy!eAy`3|1?Sn2g*G)Yn&V8xOU{JtV}Z^vmfs$6^ov`92MKNnUUQOSGJ5pHYTN zE~A3zv|tkp%XUuCN4=AO$V(F4c@ZmiFo8FdWR%f5*(+Ejxp$5a4Gi>HSsF)@_OD-WcAgG1x39Z^~;$%^8su#}Sx zsUNrDu($xT>_U7%(ePXaKKVz^YcQb;(iETX=6K`N~b97>LAy3412O zOAF^tnEI}@U!1{hTBgW;V`|*w!=Exju@c_6M2YzhKR4M5N&codp3S)SX*8Z%$;{i9 zy=*(Ii755k>hOO56*WD^g45X`yp?YY2Q#Zv>1ZYxVac;S4Y{I;&x{-dTgQ7~nV(GT zGTAKbEQaRj14lpkvAugPMGcgSJ`zGbGO~BNZDuk3YHm61ak-#TgMc?tSCQR;Y4TPL zHr4jCTPrqIK|<=SMv{xP7aK%p@_d(HI?W!GKuZBe$X2}AdRYT2smscn(K%~{o)mxZ z-HII-(^qEDJ(*it*PPoI%cHxn_Wr`v0qku?=U2E)g9ueGX!ewfs^%%hEn4U7uKfLN zXT;M%JI>J7O=oB)xl71!M}NoN+3Di(V+ue$jmP;a8#a2@7^;nm!p3S8D48y`-I`S7NM6((54(5< zG!&4YxJs^(0LIBg9kAwRKco0= zZC+pFX)qg_lc;mU>%4=&Qu zW?JUI>yougdF3tK@y=nQxec$<{SWp+-?EBx>-#v$^4mTC?~ghO{@wYMfz3CA+r-KK zpNz);Pu3Ow|96iR(6e>4vFH0&EZ#rw_{Q4*3y=HXNz;YO8VYN|h@Z$%Knt4u0N~lb zalEv;e{#*{^u_l8cw%$`iwOw@&5f!New7cRXPTd4#a}rLUZOfV@#77d+>b0y>|Cv= z7?!B)UNO#2kD8r#nfU}C4^!z|Kh}e$XZ)0*Ygt#PC#T;cc#e!?IY92@K2vKD1>WK= zmd#Uhndlk|^M7Tc-?MJ=W$2X@U50JopQKYXkzUf8g5)ymB!ct}^eZ+MC6U=rNthiQ zqsChIP>NY>DbGr_1&WKYlJ|{?x3at2@d@Z)qRdQ9JM?DRu4=E|o%{9O3Dxe7!VCE1 z;f>EDK>I_Dyz=fA5{-@~MVTD7kc>CVdRLP_GPENO(F*qxF1m?5PoBjOlPx(zmU8D^ zZ?IPBCZv$wc*Vv>4J;UFT+B==tjhsE2Q^R|}ed3nnq#Rl|2v;#sD`ikLx z;a6$XvXy7aPChGgtiG!GXgN`)R-3GyTerDsiZf;@P)`sA)sEY2p)^^rN01}_8Y-m| zwRay&)E}Sm7+KBbs)<;7tkqQ-Yw;k(O8c4Xkq+ zHy>797$x=3e`vT{?cPYe$fZTdbE)#%#5nG>o#}_)8ab(li{2#{4#emg#4iUN#|H%xV55<8( zPr>{NH*+`jFG?ng%&GjWc%&tGiYA%eOj^*4K3F7>9%xpbqp461#$U1fnt7h`tlX`9!jo+g5?%nP1|OhhlT>&cy1a%}TWIl9y(RdYOazAhyZ-Y^c3eh@_@( zR~=swmxb7a#X^7YX~W}$RxAp2;9Jm@8<|or^a+$jQ!xWH{VgK*!ZT=??E=|IJ{c)U zoLOb|0)PB%rG5>uvGz+3=W?10n;bW?t%2T$TV&8DFLA${|MthKyUx=2Pj_#@FAXTm zc*A38>R-XAZy!`uRyg_@h6v%cJImE6?pQx=2qI-Er<`>-Vpf25Fgm^`>7_gTx0c;eX!x?w)lm%T!$N!}| zl>c`w^#@yiBNgwae6S}muQrzk(F)yuhZ%n--|WHP!aptCTz6pBa5FgV-1$lF{f9@6 zPECJR!K+X^!6WRKp%!UskwE*IwW4pdbVskbZkKzmyZ%M2;W$NRD*3)tZG`+!Qv1L2 z5&v&X-~Ur;1uXR(9AxzzO(kvgzGM6TYvY@!Wc96vf4pHrgd#|Hhzc5fNy+e*@su%4 zU-g0TK;gl<3Q&(7Uwzs3>nm~3IA>FtzY4x`bmnLZ;-%L-FKtd8TjL~aA|*y$E85mP zoNb;~Hrl#A-R{8t($t`c;Jh+H9RmVT`w~&!L(*Yf%8hTf1HZ-4a>d!Iv3Hs$dwGs_ z*jC3~sh+x0KtpWKIq_QaG9}58!nyIp&PZZuoOS&v+d*keOdEL zJI;7D(C!#@@!B^EPE!w+&54R}GDoREW!tI8)`Q!nRYN}OLU}G!Gnrq#57mE$h)T4P zEZy2|Peg)IIx2J84k;cgUMY7m@W56kVT47;O-e#6TF>tDjp1+&_FixR?{S>D&=C_y zU%XF*oqNzJ=)_?LN}%c)Pr~9-9dRc!>R0}{W5zPPS&AO*8p3>PvL#Is6DrhF+wO?1 zP6vTdA5~EBh4H{hlFg!3*9pRbG0hrQ`{XGgl5G_82HnV7pWBYv$v`pvjvZcRN> zHi7Yc7%!bdPqU&Mnqr&Hs6t`~qlw=9T@-cw+D(WOwW@unqf9R|sh=FlrZZ(_^b+xj zVW8LeapdxGRk}%ad1`-Ayzrw}-P>R9+%f>FkEG$ku2`%B*3d9DC^q9FjKAI+w>=X# zgI7a+ePu5Tt3spqr&4|BRpI);Th=7Dlj$Oy%QScBI*3IACA3hD@>6t{884{t=H_Wq z_K7Xfq@zE3S>_KFk0g){@J!$i%ZwPt87n)s7I<16`E~a3JK^8RG$TbOp;8?4C;Ajf zDLE3)wFzN$lNfHf=5^<=_+!`GT@u43EM7*-4?zT{y-J`Az2}MmB6$Kj%Yj${Z2>&f zQvAO2(&8o$LRg`4**xmCeZJZb!{^ctHTCY{+~RdAj^6AEF}G#Qf~kvAn1R35*w;^* zR#XURm#jn@5c*0}tyS0jj{((s>Dqt44$6YCMn7I;-EZ(|H!#pUqJH!tUK+#>5~)Az z(0{01YtKG8#HBFOqtg)S_1qmw!GN!e;Y)8B^>X6R3#eDZ;|lg*(x~)8j4kj)$}6WG>)^~dixvnkgqZ0GLm&NC*e|4Xam)4YZSKvco0-;0 z&Gs#L+~EHJ#5RBU2Y3m86}w88vrcsKLA0g3{*$<(n#@&#@GU$&-{zfvU*mn3&p&MJ zO=zsXeL7~2HZ=c6cm$1%^_(mn|0kl=+Stb4;J+29P-*L5MxIYl{-mG-5d~7{BxWH} z2;7;lLU?f>UW0Ool3c}}vOZ(*HA)UU7r)01p5D&aU4NPf5Gq(M?l+XiEQ5zh;y_;c zZA=~G%gvX=NtZ4Tho@?lwyB?z23&r~4d~#hrUEIsM{rw*WWj9%^Rur6dSpS@6&I`K zQMpX9nxQ#Z#ZZEhj@^dGo552Y>rZH{Vf-8RTBU%xLW!syL3^q;*gX%6QZLokUs}h^ z(+0bYc~B_PJ#%z#p9e!mJ+{QL$|K75_I%XhiTTmspw~&hcf_D}JAe5XI-o9ksh(ji8^!S8BWvT!*#+18iJ;(O ztu7V&XF>Z8+%1(Z91+ar$meT9;WUkpw|0r>Xtcs9ys*_ecdKq;K|H){^T&Ae(oD*d zOv_$yEQuU}2pXK#8T(%#uXDvDfpXG}d z6#M$as93&1i)Z175%|OykXFrQ#YNb_=wj=2(o3sAmZ`G(y4p@wWtYWd%xZ(!&e_Tr zAI*eq&nlv_7>{4X{o@acCP#A+G`3b;rovOOEagu zp5I&>y#71qe0tz22*ppduFjTG*O_humGV)^zfycD`=)O;0(TTQsarLbI3Y7lrv-+r z$;Ak1C#Z|{m%n>wA;fVSiQ0r4;nlskjEz!`PgWJMeE+nr@R>M7D!srs)$e+#wJ80x7 z)CsNzdjrj?|Md?{wyM!1;q9B4?ff5==6?g4|FhEkSNyG+jkS=qiJA5PxovCwZ%!Jb z_?dVMazPk=$w4bQ`3yX~e_V{Bg?!)Fi8HDHm?cBz!ab8G!k6M6EKYYYeO78xkOWb` zY5XLc!z0I5szd6_%h?<3kM!knTwhf_9($hsvdiRh5qw%G0S$Sv`UzTD z)zv9o)DuK{?5Z9ESGbc_A50LOf>6)Wi0QCk??0u#)S{VK=;aNYIF&sFx;x^r`fLlF z3&AaNCr*?ppRx@SRmXLKR}h7{BJ?tH-=km9X0r>} z8kk3G+`0R{;-?CN$@Wo;BCRh3%gh`xQ$(}b6$`I@@TXh>dIU#gw;WhZ0nC+k&d`@X zsi?1ZiUy=G?UjBD70$SqDjGhIJh8zxUl79F3KLis(oS8!Lmqh%!MI|kX_qXOQ77t( zUJ5e7ufShy4h|{hZrz!SCf&#*UfX6{m_2D3%wme0E8mbKo#NDrraGA)q3c{mJ_~=r zby@B{op6)mnJZo?K#ylR6v$(_7+a2q6sS`1XHIl1u#Wh=P(Ce^ znNY#--#%(_4_N7|Ju?6>M)GEn)Ku2{)iv9JlW%l<+kHmp6G<0+mlK(DJ-?_cHDo|- zWXN*027niA>b7hRuw9NL8@hl~yok&?Bsj7O3D^MdNax{i?Yw6(3{iTq%GJNRxz?C5NVN`M~ zY0vV|S^)R{g5kRnP@2b=#xKjku0KaN#Xg(E{#P$l+7n7M_g!$r{>QP?{|@c>H$ov| zX``=a`Ry$JpHb9*^+TCT7BUzjh+GCx-Zj+Gynh3LO|_YGEq_4}Hin<3Y^N=!4ED>v z6=GGB7{^aoH$*Fr*qnly63rr)o)#;f(i}&hoL!zTIw2QBCSH$Eu5%o1I$W;rEb;if zLv*vFll9Za@M`wp2B9uew&im-HjuPhl(wEguI&evsT~q@?5(UXP$^JhD2HPdZgK^M z+BbSPtA5leZmpCh;Bb>(DxGpbDJ%@Vv#CH^JI{A`X7X0~B$ih+VI?~rR86h9eV*RkoZ4EO-%0&>-R&7HOqYCGjKnZ|s%x^$L zW==585l*UsD5Mz6GLDWR{lx4eKX4q~j=N_AIii!ej+(Nh_lQ%iO6?X3(y$TPLW~BO z06rkJuOX;uE7}E!BtTsA^R-?CvJd-KyAt=cKQH3ty z_v6>>ttTaIJ>#}PF!K%4eLUFb8z0!4nY|BJPE3eqi5vUOK!m2KO$ZQHhO zud=nuwr$(CZQDMz_wIB1-VF{Art4>lh+UQ~lE@uqJa?`O?uBqlX{SoHJONq_s6fAV|) zIxg^(25-@~p07H&wEIpY$#`$G+(88hRSB?C>(s3Uaw`x&x^xs%>tBPUMoZq16g!z? z+YD`bXNEhqzkO!`g{Q|ImfV`+?+J0rvE5m1urZTc$WveR9ylU&NK1=*W}UL&U#*TpqFAqs=|hsP&!W<+&qUs+i?LEoFAXGJ#iw2Md#{T206vbAeKNEN?z11r z|LPxpI2x+qxAd?w{|wVYjmvwbDKak>(q%O_VJhwh;S|_2HG(PFCW#W9V+inMqVPj) zk}FDmmDLEnL3V#{IvrF+1DEsR59UFMp>q#R6|936>#!d%&nUblIOGtO-4uX*ati%4 zuenD}Rrjy?v?^+Q?RxkQn(_KVL*?-eYCWSrGWYogOSX`#rf+ew`^>?-p^^usQT*1* z4Xj3(V9tw==RXEYp)>n?fovsdAihytog!s~b^$v<6r0PdP_<^P zsVCA#SN;v|xKAXNOFNO4uxm}nik?>x?ycwVsZJW^(tf7%7vb;6u-M+voQj@neyCA&&7Bg+S`ry7zr~bO z1GE7z`X z+kSn2tWoz-HV{#+O1so(Mo&zoj2ki;{S0-al{Sbq#h8<64Zf=yTClv%Y;qAtu&fZ& zU%ybA&y?W|a{kaeCU&vOrDb_vB>0{@1>(`btxNCd&Lxw`gWTVco9!St2ACeMnmL*` zCRfpX8tI^T{SsZ#o2Dl;R}^E|V6ps?cd*#16&<{PsPzEqR9|eU#>WIFc<&mc6Zd=akq1EHumzqS}l z_FbXXzMqQA$c)P6*PUA=M1Nr}%VcX;2YdJVqA*cT^|VtUZpRGIXY4CbVW7GD#&b{% zf;J7hoU~q$fLrfOW_*q-Iwcdzh~*3#LF?L)Y0Vm{T6SIvrBSjO=?zl3QG`8G)gA_% z`>EL{$E!KSyIhVqJZn)ywRsX$*otV~D0^FGXcba*)*Nw7@S_>GUwVu16U*x>d0jB) z!DiHlX9C-k#7gMUyBnV&gfW)@v%px1FmYXpnTHSHKfZ2FZNJHBe)NIuzXdT0{f{g3 zU-j9j7N(1I{9{%JL01bFggPk;Lz|_F2wzKB36fJy5Cc}iLz^vtX$PvHVocBMB{WYf zVm41t+cG!2Uh7|Y2(`{5C?)xMXzo#@>akX2?ePKh`M8|GvwhJ+bK&qHdfrygxc%&N z{n{~n)7MR_184{Ibrl544&k6o#h1l*iho(7f;k`gwWi$}@=!w^y9~#i=aSDC-QA|i z-_;`!Vzv@JWZ`PI#FvipEWj@V0P&OcpdcTK;3vX3tIKH=44U7hj>&Art#4MlR%8Ak z{2qdshRqzchC-M(?5qRDX@pjESz*KamLE(bmn%(mDU+hVSvLV}44%+XgtQ~j=^wPf zrLBeOi%f+8HpLGvjx~mKD2(pV(NHQdXg~$8mNfI8kD_jbkFv6FEB#tUUZk$#eU25# zD*C8K1o;!Vd0q%;e9D#9&|*!3M1^XW0(4E}t}>rQEUlTFhd>Du{x)|C3{!*|4J zhaYnN4GNh|r7Ly>Vt>TPB6dY3@aV=yR*q@nw3+kB*Ye8jj>OvdgE-wWJxk|K7Yu#$X0JMoXfOY%5cOnAxyKYLiYN(NS~0dapEvOHNRbk%XDr+R22q2U`*GLnshr z74@^~bv6pK&V^99KMV5Z3UQ4a28TdEhGJ2?^`cSJ>MTXPQ%pEaDv|JRVAX0HmFi?2 zgj20hQF|Ao)zD+;28|Hw6Ge;iAWvA$UIJ$U>4_mVLR`jkIoqH0ks%zh6j6;g0eXp0 zEJ$^ghV7Zshs7^*=K{ScCQ`WUAN@)K41KP5el^|-l*Nm5DF^Xbe#!K+NL(fJdrD?UsW!-alx_kt8q zDS)r?ZG82GE8({cJHWYv+QlHQfBYJhR?ti;r-}6KF=r}VK1(hiwsG9|Lc{a*%tx3r z4$D8(DOE|Y6mCsc=TQRu%%(|5aJKZoF^-|Uv z@x9AhWH{lO-@xbhTV#7bDYpDvWzq=#0vp+>ML?goznN4k(Tp=pk;0a^vC7bu2RHC{ zjxzP7b+TH(-b~do_cs+SfIk}@NvK3!4|y7adsg%5nUH8Rus3X_R45t4xphCBg92N8 zRK_D({>_-Fv1Sn;<|OTWfx}U_(MQJZ?Fam-DE*5P3&U+g(lSxRXhiZ*1u(f{d{Wvs zW3!g4Ho-*@?_`PcNJ=_m73Z>ZCy$I9Z%6L1Q#Za+1ZyrL)Jv*XR#&KU)T1&pT9>=p z55Bd{>n>uMvIc@_VN&TGb&rvQ0T^}ALuJlD*p`7_YVclD@mrgLV4_Kdv0|{TQAmlW zJ)-rAFQI0QVLOXtXL0VxKd~NToas`M1!B9QG0fShZVHQDtJASfV1wqYq45T9^Rfzt zIncj%_4DF**FDM++6d2E`!53BmMmitt{<`Yyo>|ulx0c6S1JUfYJKH5RUgA+zC-14kZPN5VfgCJ(Rnn)xdL!Te{ z2S(AoEFtKmDY93H;qZlE1|JzBV#4z_NEK5N^rJ`v#j|m-MSxfP$O&Iys4IcegMafp zmQ3K|QAq`8B4a|u<6p$jbs1OEe$vnOMJDTU8M9lKO&mHx6&@Xg5)zuy`B>#q^D&e5 zQYSARatiJDN3lcrr&9^}@Q%M+A5v3kysEd_9V5lboiD^bg*(f2t>3|55~*0sFzEqp z>-~Q}yVM~aq4pZ??b;x<`wA2|SBebUgo)Au`fsT&ecJ-+d`$4Sc^$R1P^2}emPWy= zvq(OtA}C)v{dr5=KzxZv7)mrVSL7>}SZ(BX<=*BazJ2eHx>AwY?^jc``YNpHp}2SP zw40GSC~7=pj>uoidzcyH8HVEr)Wo&i+2Xu2wi#YkNxyvlI_86B`}e(rjO;(oYlYz@ zyYk`L;SkV47;n2HaRJ!oR5&3Sd$pWljR6^V$y4q3FM6?^-@HOqBOd@&;D;zD*kLF2 z$5{Bt*egpr44U4uhh))OR1IW~?1GX(EM)XEGh2$!lrIX`R!RN+GmK9c&)o zf|z!L72kr%x*cSjyCp{A5;cZ&p9978Ycc|M_kb;V+94pHQZ9SmAgOS(gipSkIm$^) zNi&)PVK>1?)PgI2Xh)r6OH=&KAZ1d&wzwMvS3Dd;-{Ky7#|mAn>h2!6HlVUs#>%MC zrVyI9o#@@Fp8_xSTaKFpdmYN&{G#2btoqa~oaT!DD6nz3z8KhAZb?$wIoHw*7>jrxM3RW?3esyLQ-*P)2^NKK~70&?$o2I2L3Z09(0 zey>wTIZ>)OzIfNC=r(dpt;z}#0oX;*+RdqULFt2$Nh)7ArTT%yA!-)^>ghc=%@6x> zHx4l7<#}EKG{3xOc)9djQWNWjYoqv=dLE0K*|7cvK?wJO{U0q3JAYe1(-~ph zZ2?=CeFB@oXSXlnI}dcwOt;O^kxYGmZa+t%S@1wR98@_89&F$(VG?oBYtdUG<`utp zEGT682+9v{ErTc}z2NZkE&w>Z>X!_wZX=Mn$ZKr`eA* z(O1h#^mL^u?$BYQrIt`is^1eC7+sWQwDiGGB7D)3MXx8pTi8)F2Hrno zgMR$tby{ZG7mWsk1)>29-Bvh}y;1b}KB%%4x!caZMg4&8`u=BNrnv2v#oiC&=m_oK z?VSFLS2h2!Q?)VuKWCo*n0QppJrS4DxtCF(l7?5%=u&{idc=)JMTn@VSBTLf1}mY! z31t4v8O09W?c7FkU;vP8o^;tdNj^u-b>>3D?UUed@;r*-_>)+ zKVJLc4LDi5MGs90{M4$$!+vN&O1&+u5pC-ctxsBC#b|RVnf2oxkH@liFzG!=-iKw6 zJ}+MlklAvWAY)=`&OvSqX2GVMrJ-Ail>i@cxNC#}Q8|!WpTOh^fh{gqM!rBG4j)~k z2EtGQzp&}CD5BGr%^}3A5gFD9^Kq`#5$ormA#+Xg8kd1_&!W$43imG zqioVE55~cU-PQL?yiZOA5TRi;S_j;$EvxLWvL1J9nc}-92WKeCN4583PJ&pdxkQoP zudt4u>m69a)kF$U!=QMzagXU+D9*=SPjPFYt#QfyEapfZT6g9O9|le`K6LRDsz};Z zaB(q64&LO5*v$mwjv|WrgEHjTXa|d<+vA1g*{g-Ma7&X4amm~Uyq1EMs?hsTch`y> zW7r*xFP^g4W&_`d5q#_*OO4Z!!VHPf9UK6dP660V6x@#+I#woiUu5)Y{ONejQs+nxC!WJf ziax$l!Yi6Rglc|@UeRU2!?SnT9i4Fr96%LC*3VoWwURh3FeLA{t|<7idi?!Ut)Hfm z=}Q&q405^5c${4p1dV}4KQZ?7K9E#`2mDh4c)r_0$4Pm>Q^LkAJ~r-a$3t6SgJ4d`TB!7mcJv#34E%++MnvyNoQNaXx|LEwI1gc2zCRV$;XPOSLMjD5u z2Pu&*pj5khKMo_8Bu_{@yl>xMY}(K7j76X_Y0PArTF(XIq(4{b!bgI$tQi%3@}g>Z zX_=5vvrY>?6ca<9m(xBhKjy~Yp!@G+*(LJyEoL}kr%92Cu29_v^1E`{rm+~;h2QbD z78m_ApJV|WLpm9mSj-UkM-!c?X0bw+%EHtRb#=GkYr2|^N<8=_`iW2peTrc!OvWf& zjN|oz!_LpQfA=*Nk5ZHy%v`pZ3(FHbj-yv*(-Ut}9OGQ}K?b%Fu}NoA|bn zc0@l|C996Kjl(83Cs+o@sS{x4qcZ8Vr6+s0#Fq6W(To$S>mEJqpKG z+v>ui9lbvcj@I2>_G%-})>*oB%-Ea1Br~}cg|0qvL#_t5D%GpaxW6h$m7<>Z))T_HrKpy|Vemz8E5Y}``09hBrXFke#ES$)4>J_$|3zXlE3AAT^ECW!lb4Me1aj$h>qLze)z?x7W`DPSpO0>o0+ zP-8Wv!uC!`wFdr@Qrbgx`+D%J#j3G zK1Tdvq?Gd)-;R&FBp7-T3*s3DXC@Cu&^X=ZY|13~uI6@S^kP>saFw>R*4SDt3k=0~~WH2|BA$os@i%%I1ro{c$+Vc{K8pv}nEb zq8)QsLAaI4^rcGKBA&=|2ijrg@Rk}X^9JVP5Cw00bBhi_|!_mMJV5F%-Lmwg%|3b{6 z8oqvEq_Udy)5Lb#7Svtn)kTb1w4lIxd=ViILDxlEP zz(uhey~V1ILzxU!N0G|pq}(f(82Mgr7&1unn+z_u=A$!G+Kkvd>*MAIPpb@7!hyZn z1ciCg;yfcY6`}m9A|&V<<+Y%n2v1`zFhEcd5;qLM?;Hf)?`@oKoNdpSCnr|h^P9sp z1qEKbquu;NjxE$>SmT4^G3hn3eU8Q@Xhv#j)PL6bT}Ap=-z7km2`e9m&^3xcy6rmc zn$bW*=xoc=qdhS+VMbS`VHGFYT}u1YCOgmnMC$9Kb1%k;arD`MPqhYB*BTMMTE+el zvs@TT@dweZd8A34Vw3D*k9**Q59f>hK8%i9%LC%^P3sMha z<78QgZ#B95^1rxzsIW9p3ye!5E_!aWe8TMr>-i3F5c9v zr(b5{0{d+aYHLl7Ow`dKhBIpb597EHL)fC-M`_#piu*b-kyWICQ@wDRbrJc>dp^TC2{JFJ~h zgxL4l#MKBL-tx5xMG0}Kpx2FoHOy(;0r?yoHu`cYAHo2TZQdL*2R>GLfE?jqsTv(e zyfHqLP?_#RRz@r=6#}}Lz#?zJNixDuw?VtV=>`iT>W={G2d|vjnScOHRkq^jJPWMK z2chup>WjQ33m(-5Da={maBQvc(86F*nD|4%8$c4oT|ydGXbF}OvSSiuFOim@C>4Hu zF@rnQnh+26wve!YLgd7j5tr#%tZ*7+G~zBik&$5BL;oF3dU-}x`e`uEKZ#grNgpJ% zb{49(elZ+!qYsW7cPpP^pr%gH9)@_8i{Cm3AW7P-89xt#bc#>9-hzm>kA3T=gP;AY zE<5B&9UZqnAfdcdM7l-0w2P|ynQG4kma$n?76w)1N3+xpNcY9*eUX@7Y)@|d?UwCJu`GGB+91snvMQ)7fR{#ORY$vOmgK=uG` z?VO9!`9dotbryj~dMio60n4~UNnV+_>blY|!bap5_U^YYfgxIZKbixjEf z`r%&yS|xqe=v8;&$q2}D6nWqZO2ot(;LSM$)|C7OVNlfrr7*P=A4v@QsELfyQRFIG zt7F9EQcA>%`FVT-oqK{2jvw-&rG3}rkRIi08+nbbO$fdZ`?4?ff!!l7lwTs3_D8^N z?lTxmeVY~rbVUd-6x!U_<3%JbBypdQYE2Pt5n3x%Dw8R>g=GBd{ijCetP|=f*Nu$X zPR&%EO>j>h1BQ8|XQy}( zj9+QuKa_-+zps0;TNA}2+lrML=QItB7mkxm3O&QeBgaed$p}|JY#SjwRCE4j9iLD_ zb&<+r$^>xp1u$e3n-<~)-`IPM(E#!I$n3aG-he>ydm*WKWY4#-l-qZocu1yW4%;v@^7IudsjAW zv5K$O$Fe+ObJcel!HhAqMt}OfJgW-XPj1B)ycTPF$(AL4@XpnRGBpg&v^93}TMqFq z$`BMWa7tVtS<-EZD0i6n!en9lF|)@D-->nn=#74ZExLq~VT$}MbIZiOD|L4&B|guF zL>^yvo=pL(UvQsIYY2S65%SoV-kbTiZ98fNiTcuSTh1WW$lXQ!Z8ROAarM&D8JzSb$xTRU-PYA5O zL?=h>n0%+hZcxnAiAuHz7KQ~BFX;6f#ETvfjZeyp0mPF5VW-%|HZ|fZeT24EEdd++ zsN_6Vw6;O!3_99@6L_vMXzBdvU3vyO+{)qO*05B6+MS4k&*V_&EY@eRF0RpUb2hh(jMOL5vR$rdTtV-CcC2gsZa2_= z65WyK*lU{!=-093%wc%_ygTP(yMqJu3^Xt$?$A2FyCKFF*ifh!|8oK$WNFhIoiAl{ zFI^+Py#fjX??3T?i64x3AiQYk{XoU`Z~ALZS}FSMrN9sTeK_I8KH+|yYJuk?ctA#f zF!klAr1^*yTYP}F3lbg40K0>15zz{G{BE$}Ny!0_5%aI-MuPIOtSViA7F0@Z@=i-0csLXeDQX92d78S zv+w|7B93hb?p6;6d}`n{J^TXdC?a!f34H3%_(`Hv7smRF ziKiY&Wd7T}c4`6$3x4_DeCaWH*a4th9{JmWcR*xh%k%5bRmxRqj1SYJNzd)~sqN>^ z>r0=*gW8Z^8MJ2vU^xPUa-v{~fQ~Nco{>id`moHlSKG!UTz+Ga)a!Rk;7SWi)-iaI z6wvV4j5&}KG_kHk(96gvoJJn!lR|T1=|Gs&jO;zFjF#svF34o_M|yuV(ia^xf$Qls z`?0Vc;gQuY3qsOFGX`wN9n+}S8RwhgtYp}pa+njuF|!U=CQFS>M(Q??sK3@x*Q}!- z(odg+`kb^$sqJK}wN>e>H;QhZtTB$}BMtht7QVnN?1Fa6Ni)gPFu?~cC$*(wOpJf>7?(MzPxVG zo~}VGa$10Ns^}MX`eR^s>uBF&l(*)r;dnsuTM)#4gIFd;ygMYz~(_3O~B236v%GeXKpw z6rqC%XRUx_uoF*no9a_{rP1nEZA5@HP3w4?>*cs#k}Fi^G zqw31Dn&jBa{=y_{vs;Uco|8+^m)grtwku8M_is9W^+T7=ol?HMtPEOLI*gS}w@yYi zA!$%40U{))uabb4mc<($81GM~D>3K5{!RX0WejNP3@OKZ#vD4)ss40^VUB)mt%tq*HXjkwjTf~RYZ#)Pn_R}b?=TZYn zDLoulHP{k`^*i{7F>guwG>Tdo^`JFO)|BfwjP*SuqBU<+aP)DM&z+hJD!GGAo1PU* z;%+#s{b|!#7Yn;iD%RnL*3}JYk806a?^e-d(Viq|Y1XmF#Wa>vZxg0jZH&+zqcZlv zM~9qL#f7&^_qFSACJXX9m&7Q{#{f}+dH~e_!i>onr5Te%YC3m_a%i(KVO|K$*|+8; zMAuPZf$h5h{O#1;>EIznbPdUra=^1O3Km&$8|c($>>75c^r19&f8U?NGo@-)I|jQN z0A=!$8xFBk(;GY}&Z|!FrTOj3jxuj+{7RQpne005@wyAXHN9FDUF7NHr6fXkBw90E z>uHRH5VRs5;-xj*dG`@5Ht_0>J46ahLyg$hVo3UoDr&1$vj?@wQ`qipM2 zJL0?S7 zP)AaOdG_{g18vO(uV609at?T2)Pa-0FXuVr$f33OaNwYd$oOB{8X`&9qxNL=DR8((@IC_6nk>C(?5jw)c?^xSroGHvx#-34r!>%Sw zu92Wip+XB8Uf=$AKOF59tHz;%+Q34`8RgI)2DRN& zL&MU5gx{cIeBIdlfZEs>O%Khd{YbRNNH*{52Yq+it4Vs4+^2l#I~&*zsh3LG=cmS9E|zI^X3t=}wCncJTcNt=pFd?|Xj4-dvLD{cRPjAlxP+9qlvCd#|^2Hq-M zI6CJXjRmN7ME(J%n;$VmR@<4k=^1-4@p-O}2CJu1EhguVANJ_h9f#VMANbgiohCSu9LuR^ziRoG!tT$8?I6iUu*?<@O~3ZZ5d4+fFU>^S=DAPRzhB8O z$Yo;4{qZl%t+d1Ix0oME1ICrvx8_iwDY^?RN8O_a|dL<@cD?o zNlM)lL|t2)^6jM&$gwt_rxildj#9gDaD|cY=_pxK%E1=SiaQX5z@#74cCrp8UDdUZ zwgvt06vW0;z+)SqojCja^khE!44>wTHK;v|91?>iluZ;r%D2z!0(LAOoHl*a1rBAH zdwb!K0RgcTvm39@ENWk%e96WV4hl;^Q(skAO0R+r`FfCD{l}pz566};^H|Um73Ge- zhZeEkow8yG4#hBqu0d{ku~BS~AQEnbCBTuIe7+@`&lmY=$K+y=dL<-aC8qtBq3`_= zc+1%hX&JGp8b8Ap4@@`0)Gj||uwbP33&m=8<2tOsw1$trS>d-70Hy^I&_rIa;tT25 zU=Pi3{R^wBl3X$=+ZXKPCv*HM@Gho8O^oB@@jH^K*IO~$v0~;yhE&iX*e9wbGZexe zsa+|XpGJ;b%2X%h-E(@X8)e?a9Whj!lQ{Qj*@zZKKTC?GY`8?w zL*bZNEJLjJWa`;`wo+XZg`%SpX}x+i;Y{J~EMllcztR{(5aHc&NQF2Fd11n9gvf29 zV2ZFH3^yRP8(MF;=iRT{^Y2RGS61HgM66M{(7ZNA-tzJJvkWjHS`_tJ{qQbgS`S^7 zhdg13wnZ=R`yC?;q1WFwrg~eVpp2zS3&FT#ylax73Q<<9=+(oKs>G*JzI z3cfM)^Pfl&(|Ur%?;nmiE%v_~w5b1Ui+gh$3*&!=#r?P7B0B%wAOA6r{418u*5Uv0 zn-M9R|HS7S^E;S2TmPJgD;PW4TDkmhqidtGrsKL2+*h=1xHhpg_BydmjvqZyqhzO`m0|pOb*;9ncF%$2}=paPCFi zrWRE{9UYfgyT;|=yUVi}@8|74&!6%gdSEyuI0bl-K>Zs4-vP+qte8QZ>99hZ#-S4@ zMORY{z>QMW;XFdf14Y9mGaOysDlyZY_wF8nN7+vH0iTs3-s_0Qy5 zPc^;n*Il*HKN!j(un)q`Nu+8-&cKw4;f==H9BXbK*^H(-Vs+}@Nefb~sKo1QQQ{(G zv$pI@nT~B%rttX9y9xK!gfmUiL178RE|&6pSw`TOz7jH?Gdw9HSMO5EJ5s~eKTKLZ zl-+Y|$=S&aq79+H#mt(X%$H7Qq>aSRF^Hxqo~@Ag0yBZ2Bdbd>41Cf68>Dk0-?pAl zI%|s@C~NWgX_$H(1uo@-IB0Jv*@Gv8iwd^rRGVQ8d#yu9?m`qHX(`{bY~_->bQWvR zdpn9fr1ZD>n+G3er61YX4SMI->qEBDHAys7aj-tn26DR?9ez-vRF3W0jH5suN7JrG zX1`J8hFWU3r=Z5fwOMPW2Mzi!Y6Z&+uJR40E|=L^y) z4ny*8xvPJ4Ji(et$bh$JN)IKKFtMKd%gLHyegQnL=xNZ}uo}_zlj{Ok${bS{M!qvD zKwZajD0tR*eRRZW=5acaP!=aV6k4qhw=sMS#=e)+RP$=>aq7$?Q85^Ob{LOsEfA_4 zkE35ds@zw$B$p;zR#-G%w5iP;o&?_%> z#k(rUSF`FI*|1sdd{9DJ0=>LtT^{)f2N|k@*Y5rzWuanj-2ud@kl^c-LSz@h_CQBO1 zoBbtGqru~b#UhyEvO1Z%`R6g6xBq*F)(0SlTQo-ZQ<|H*lMz_VNFKmZ#^h>)(=ppK zyOojCxAWuD^;h$4VE~QOdQF`e{-hnRlCvx0L)HkJlQA45vfcJ$pPu$odiXE{l-Q@5 zn}|kE*x{!;z0uupXE56)wvxn(`F@LEM!YhmXYy$G>)l8Sig6Xm1>$){4vUh--j zxAB;Y#$q}d&Bwz1$z9GhdC5s^kVSfYJS)QBP|1$aTKt<^TtY~6K7G(wOW*FGmtn2u zW5xUz^x=3Od|As$4z8+oN0u%a&e> zSqKuZTVC#`@D)Z(AUVSv?}{oXT8|!z?cQ%eS?vMht;o>Oa-o6UqzbDNyY%YUJTt=- z{f`rq#DK~fM*C_zVVkv&7`>SxO{iqV4|X?9cT7X|jXpL(p16u8q$e@>aDB7R%sMkz z55cfYAfw>xyWwPI1&2(}Z`%oY)OaXIQ=SMY74i!BV^m58xQNL~=3EsgE~np=LS^5v zl%>Peg~+yIYgY;mxmm!iBX*^^00BV@gwOZ+F26-d8Dno8prAqB^fs0FXof=_uE9Fv-Wq}8wGhtO%v1`uE^ z>O`_b#ZYCAX=ZSoP^RXGd~P=`GB_L;zNx5rb)#CJjr>?O${Cc^Vcj;AhNung1-*-YHG#gzpu05gZ+GK z48RZ{P-ePm=sq!WT*5_Y9wXltDz$5LBUcMqtP|Wj1g%|c0k;M{7Z^KYV9kAnxVeP7#3vua^-P_?W1aJ;qK`4Wew7{Sa1zcT&29mPyD{dq~oXZQqAjp zgyJ@fmiw`h#4v{N!c*`m2iL{~C0$2B8Rv!{t{LXAuJSPp13DUy5a+n)(yFelp*nh; zE$D4m-V&^`(MuzzOPkFSqiDs>h%==dRLQzPG};rUI{s-KS|tF+YWT6XrTyD5OXdG= zqxi@5!+**e*`LU8a~sqD&%^(45~*maVk#qj!6d^3<|f$Hs{m^(5aE?tQzy!iK^Nu3 zHb4siG{TJHqobMZ837KyfA;F;boZz_ivy^)y;XdV94b7gg17bzNc0X8IMTddT(2kB zKfhj9XZwQCg;sNw2s8#_pf|D&&NSs!Q1)gNTJ+ZBnse!w24@+UOqY2`>?h?iYTZb$ zDx~EV`_~pCBS5?shlB2KK)C}dF%))a-%QM_f= zvj6Mk?%aiM6-hbH1xppF>D5sU(rAOu?XOY!XWYXMpc5f0{+3HeujTb%D@Lwh+R!OX;lVqPjC)bLt zLpubf*II4JS#FDUy(At*cN`@rL^9WWTq%j^3+=`~B@h#;(&o7vfE7N8j%Ht32n}O= zE~YBruT(VnOMRhgtsB>YZi!$_pm=aCAqcZnb3cP4_&6P;-@P87G(mTo!fkiNK+QWw)`McLYL7r zxrYK0hYy-GAth7eiCrAQOp3Zc9}_cIl$Escua9y-C^cle(&)Ck)??HC1W4fxf1~a| zWtg?$NVnp0^}=#Rnv*rXY0PQy#hdF}tnQ5C*!a_HLm%oQk>(0`3^Bm73Nc+fnWo1N zw9CHzEKYTEY*17c+YAn+WQ5zid|UF4;@}#)#`@fu@R{w9JigQ&WLLx-W@VHzMI9|A zH!|Q=6%qglbIt0*OT*oLYKJ7s4+1%d#gvwdBql5`ImB37^8ga?4l`I7-#bLSzc&-F zd`hecaO3QU8 z-mv%2#HR~RIx7?xVJ#(Csc=DRY+mFS%VKli@X4xGyXE@v7pfzxm~AOC=oYd!s$zH! zuJ?bztmuZhVCKXfU`!UtN&EgGooNPI>V`fAeea-II)Q}B#lc5oI&&e4>uvwT%@9Y- zZ9r60W;Mz12{Flg#4HN9ZU%MH%h?^ZMBM;V=G%LUov|sPst0=9yyM98>F4uq&Oeio0p5yY%LJG|r4u{fWEbKy+2L{6E#Tw#pnwtw zd63W^$E|~yx6n6q$r~aLIHa!}i}JqVdY0@>>E|bu?n=^ZRPk+c$v5afgrFl=3%&M_ zDO3&S-;Kt6|D*o?uU6ivq-}}#V_J@vWsNFY(x}{CD-lni;Q=Q(D3k*$h=K!uA&_dS zUoTxpU(E#TdO`i5d@Rk`fxQt8b0r~fo8|k|TFGp6oaTPcYGr(X9S@QHg_Ex?60M&T zKf=4vD{0<9n+PAaSBqAMC5Ksr&!-$yX{$+al7#d2d<8*9A5qnVG*9 zaT9UZ>(PIa9Ec?!;= zG-NvIeVNwuV942xO`aR$ zs=LL$&;%njItSD{}sKBS_53eft zuJJoK)r3R2-Qk*d2en2&H%uTeOcM2rY~Qd z5(U#o4i5(7K=WvxY%bDImswTY+&BWs&i%2OQu!v~XGm0+hcZyL=&Y_dLvkivVoY~r&PUg?yDx%7BddmaSTAmCebNnyb-ZCh%w#ybQ++7oQ zcXtYRcQ4#2+$lVP#NFN9-3oVi*TS{%f`Z}wy8BK{#Pk=pZ_NBU|MH2*ea@D(*R$3D z=os6xd41BvGhw_LdHH}c(*ZXUyESs5y;n(KwfrT;{;*v*dmD8KhV!JL?aFDRs@KX@ z+eK@=3)^~yLm$W5CNEGV-6Jw9pW2ewx45Nqteewip(I;;nlbIM<5Y(XnG4H*f=qSQ zi5@Ys9N`v7s%tNVY~Z!SaKVt7oR@#bHxC2s^Vb!hQI`o=@<3*uUJAWeD`9m-NWUvl zYXU7+(n$(gQ;2y%iU{l)A5%W-G$%&{!qG~JUc}KN|*16ckxzB ziELMULG@U{W&cS>Rswk=X47|_F}pYoa&)&GqWW)hRcaV&08iIo=WxR2WNZ2Ik^9lw zxAR8x=nHKrTp%CQzru0{Q{*9tHQ7W%BFcFqwz8ndg_&8C{2@F$Cm$3VlVtosTn*O_ zx*#);^cB2=y3IX7OT8fVHo7Fw82eHD^=2R;H$c=jLr4R#A8Yz0QB}^rP&7{>Pel~b zGz2T;4`%;8k#fq(bKs+Rwiy+_kW=^}5!tv11PXyP@MK9rFc50+Hp;?}>D3Ic%OaP; z;UFf9HUje$UM5K-rR_i=c5oW~A6O8M0$B{n`u9PN3_>qq9-H*`j7Z&_ zShkI_+4ww@E8V^_AA%tG7bf9h%%v9_@BIe zM_^}o`KcVy`)`${6#l25*eBuL(cIbfle1)|X71{0{(pnq|M{J1!~Mg6f2Ug8lHn3V z2N&TcfrRShB`JgD6rm80w?d{&f~DbG%cdajWOs6h2x=bEtm_KVXf7+gO;PMeifBV(i`F;Cs=i~YPc*2xf@R=nbnFmiC4W#kR z@rc6<=U|P(x~3ox@UK-+{$hXx5|Hql}hCHNqrl7*JS} z=cCJqr?^Rx{go`z8r7Tzxd0Ojd_%T^ASY$sOS^T^9$r*Jg4V*g1!RNd;usWkS33Ak zHbTUfby%ZGzivt)ll52>q;spE55I22`8QZypeP^O1#9uszVIQfeZ!Fx6$brWo*Y{P z6~#lp{CYOiq=R$z5ce-@&-a9DT{c74rwA8Dx0eTe#f7D{B8&Nk62U-81{Gx^?dx#DyL&~BxpVc(aW;4OL7)2{rrkNXhc!V%>2hTdft^XEk`F^!>tsO>7UM6mNwd?1nTia znIy=#V>!mdZsG!!p4CC@rF#WxFuLSm<#E6UjT|yyi|c$Q8^WZN_=HlWMrGxuWH{H z3aNd#S&#oBe9^4%Doz3V!@a4zEdVSh%m|h6M18I}A0LMn_Lx(60CGiM#SZ(?GAPbb z0)=mQy2%V`Bc_}$3ZEP8T}w3Pwi`^4j?2cAkPEE=yaBTeQv5#UqR3p1qdE|KFG!BV z4qHBm;*tX$&hM*9qsBmSThvc+*NKM21F*JfceV=SO3(66$?u5AvZGt+4dsoF?LhiG zde}9^MaL*t+5}0eWnOpvKHBz|EFCPq$q+qkGQ0v3qPyS8p`XrLyoN;cv_hfc8wrf9 z4srl!ma_guN6Hp@nq29h&)gEUa_fk-ynFK98{L0X*anTu>o^hj=&(oh(Y<|?m0ST@ z)W3WiC9G%Up9+O`#~HI`7o(CVtj$z7BfX9$Vl|QEIECUG zg~}HXJqWIWIVAIl>vN}S5Vw_Q;g_mQjoq;#>t%qNFgL45^9N(92xVjAbof1KroLva5 zMeEJ#1xrr%1_DIV6og{2k;@I7I|S@M`YADWrgBs0kT0+29O)fQ>sS-5R4+rmUJeL~Lz6*634GAH=I{8$9e*G>{{cD()jg^ySYWz2-4Z@?MO>O|@mK4gx<)n+G znGj5L-hILO2M@{!M={4PIi3)xGu>zVOW`*i&jxlcsZxllnU~*`;Yz!SbV9{@M7|kE z#A>lAYQVMv3ch>shLLk!4Y*GUCKD&-xDqeAV`yK^f$lb?Kq|aYLe4d4C~XGLOOegk zU^=2%mLM^LESCdjw}7wd1o`FM2Nau3(50`eC3_-HHG}f^;TGt7om~9mc4a3ljD@y5 z+fvOEg++vf7mxJ{9i|}5?+d8}92jan(3m}zj!hK=&KIy7#=~0&7v)iJyclFU8N99G z$|5mUkZXrq{EVk#`o%}kui(EbQ&pe0j7m{M%oLvNkO)X6U06em6cU2&s%7pH^wo zc4OrPBUodK$)}PMSJx&Vit-ed^z6&5#>N&+EJ*op_J@;({V)qXidchf0&GHF((lrw67YzcRH{eF@J&n|j)E%u1o8+Sq zLXYXr&@Sr32%RL0W`p{nT*|-oOY7Qh$g~Lfl`Tjkug{57K59bV;IMjrXbfE6=u_q# z3=0Q+as-O^ckteWKU9~T2;~irTksVKRXv>NUft%nJ!oknErkSg%G*3fu{v@@(Am)= z`RsgNZ79Q!y0w4bxYw=E?CZJ!xEe_ZjV{mSC0u^sW@9 zwZ5U#83GmYmO@dl@0#0S-Ma9&_f4{56tqL-ioEglu>>9l&mx}_)L#gE0YrVk^aIWU!0)IfbPS}|Bi6F8rTduz`TKA=>4`!wj5)65ITTB3o7EC?Dha7& zX~ibNAT}QGe}$F zz7D@MN=8`r)HOoaWjGNeVuL$u}oD?f+~nlqsj}7^X+JxE$fIc zi>CYyqW?kNUe6^@=+IVQmBDwdwVyd_a>V9zqesw0%yW6ky+;6tnmDqORDG9j@`%$N z3|No5A|1Wb*|o49dTT1Het1TmLp?CxIpqAn;de%!x|Tz&vHq&|7S$#|>Zg8j>p6dL z%OQArSC&JXd|qhz648Gn`UmkU)w!4ZkXWo2T+;a)VwUaGo_@Wv_}h0Y&2yB33eqCr zTeRFT3&Bs^8d4{jvO|@S3cnsf`jdeK)(cuPYNAe&zQDr5rJf7r-kkQ%RFcgA@6B+k z%@C|M0Atr!^FFqIfCu~P_aVtmDzJ{E3dV0YA6cknMOl$Xs43`IhT%s0T5KfV3pWq4 z0hsNweJh#3TCJd?M0&6cVWf`)Ri2MF7zA;ZVIL8ZiOv;{)sE3FHRuL1&ZCtM2_cW<9$?F{{h^+OpEAb ziJd_yPORs$*Q>_CQz|-Ft3I~UO5M?fmN5N|UYpt*R8sN-G8Zs({AgOziMNHadB_a_2w92FL@#O@~By$_|Mn^jFp>=kR3TE|DVKy4ZSYcO3&=?z>hK2ie0a+ z@KjW9z(0NN06rV5{ihECB>uk}CI82L?k6o@$>BdX9p+~L5>|DQHg+(x`!Ci;_2+^E zLksg=Q5qLEn8s5s5=4f_M7dwQ49SctVvX@NNVf@#I#CRlJw1XQBYxedx_f8a<|BaF z&su9jLTlscy{KlX=87FI?Q24@fk73^al_Nv&ikX#>xJ-#*BgI8;`1~L${B^H`Lps2 zi=FPN^0GR6hAEI^U@s;Agmj7HsL6F(m0*g)>IGYCOC<|(WZ42P?9t0RKL3X@JI67i zm_gkuh#1K#X*YEaGJWra9e4EfrO9G7f2=>%STBR$DM!KCR$8OoJ`;N&|C>kEeHCZ1 zbGtNoOP)l(CSYTB+;Ok{P3{nzIw~kwfV09$(A-EpDrtJ`M{oo3uieHk@pajI(h_%G zQVU|(xeJjN26AfpGENh*To;)2YeTcdQCq54G^7Ts^Z5})U$JO)Xo-|(V_^3;P~&dF z4U5999z6|Lw!-xj>%#JjG2vcLM}%CZSD6pK@B!R4cvJHg8p99=T=i?H7#&;&j8_do zj1}}Pgr_}JsIFr?Ap?kpk#A_uTbbE6h4_N#-sbmvlt73j8FV<0bm$r>lm5CwaQglc z)Pdz_{2z$BWg(_)F$a+Csx~x+&uq^jN{92)yASZx7}bAyXg}Qx3kdSMT(gTC#|h|J zNG2uB5cfHPyYhJN;I4Qw;;C*Qk=E#|YA+=-9I=ln5XW#OlZ-t$MSvFkrMHV|#{8iC z-{Z8Z1IpxJ1o5mO1jOpOd~F6+eoi*b%;;Eoqb#1>Z>wr0w)`(<37BGH!0w-nILB#G zTDN$lGPk^xwfv!sK()S%3eK+)@=+6?3hlw-kg@bSJ*-Y;%W+i*y9rUWsOq(Q8n_2KbkU{ zQGjbqicsQ~ys8kOzAA?d&9B9TGumhnlNma)J?*WTlbs2sBZt~|)zTchDYGsExg#siHPTWg7>x2bsbC@b9e4Eajd+6(Zx@WgP zV?R;%keNY+KUsXCrQsY0G3k3l_{weig`l%EY)<8!R6YYthE*n##_|Ie_80x4BMmw= zOp$UD!_$ZjUvc%hhma#jP_lr9vPrvn{04fD$%!{r8G4WLs-9kw;X@G1quR<*KD>CV z#JxSo@7Xjy^*^<93>VX2?UsNlOQ`u;tM{?w4vCMyH4gk;tC3N0bfcnDDLsa`EHXjU z#&}Z{x;{6M_UwM$6RT*C&|Pw?e<8BAmmeuF{KBKOd2k=0eCc6@#4De;?`IaFd?T<3 zyh1R*cF+wCMR<1gh5#r(hF>)F@AEw1>NVuO>w-=l{brc0t}YQ4YxmuliHto~pCGv{ zLncir0t3DST>KaRO7m>M6-VHQ$a%8KZU^%8Yy7ql?n&cJ zA&LB(={t&J*rC9c6_|&Ll+~3n+IO^JpYsb)cdPX^Azo|WD|bKoI>o2@Y@jh5cgukR zx4?D$=58^!pZbw9;eOuqipa1g6>3LMj&Hlu!3qJXS|2@RW@jt~s zEUfK5L683th46n|d;ar`f7a?^pEbwY>=PW9{MWhvfw2t5vnoQcqDqW_HBewGJ44P7 zQVvO4lR=R(%En`)8Psz2O-c_>bX(E#d@0?f2(Q-)l9r(m53amjd42rIc$!(^{?Z0) z1c!!q;Nkf@`T!xhEIkL!X1F5H*uj(*E>HH|F1r-F8}*Okb7(#^KE@@REffKL+iIF+ zVK-^1*3($wZda@C0=!{OMU)#_w_)AW-wpEzQ{)zf3d4d2h4xUbXUx{V_tb%9nTJ$w zdgrJ^hsNoAbr#)1a*R%r7vaa_+{@vNkB)^45}uFPjss4Qe8tSZR}K?OJME_tU1!^tH!yyU*RZu<#q? zE@BUCKSV8LE}}3vV!qxRQ>?8%^RQ*A1FcsgX`HIt5`pDSj5s#mT%aPH2*4l?z$V#_ z%M5tgsIVT?*is+oTiN##Gt!J)V&m2jD>XKjlAfrL#Jgo+rp4$gz?|1-E`xHQQ(J}% zR?@nPA305B;}`p*fSqV?A{iSJ7nOZtzG|LdnNfkQgr8wiOWlg~&||WfiHzQ3!1jmr zr(?i5@bi|CK_UC*WGxNWp7ghGX}Due4QZ2$+6?p)CLBV=bh@NEr8z3}7Hkcx5rVLC ztMsPCkL*Q8&@WYn9O~UX_R;u*g<9O204gKUFqNrH->5Ac@~#{77)KPKrj|8igCv## z{x2yY%rPy$wICcWlDok=(S1)sCX%CZInWN*P2zg6u;|W(och?NJX|DC#?kkkf`!d8|x2m@XXY8A_2@=%hKHYIM&nI zCm>TVq?7~aI=?=v?VBO1q9x{K{PjEQej=Y(~|J0BhNLd+RjJ;rQNJzoY# z$*^i1Wy}qo@wRz!SO|U~Pj?)aZHQRkY1K#9_6(CpshJT{deok6b+oc=dJW0oR6!p{ z+3+&2rxoDYt?Z11pb->_0b!!1!63g9NSv~qQ?JFwp5zp^(q=r(vg7)JV@LbJoU(R% z-LP(T?iIf(K3myS|M_`p|8sd5{dWK*TxHY`*Wo-~<2xnD6Br7U%vBNd8!UH8Qzc(B|1dnoV$3Uz_VF91&W_8sa!I9tsal(COVQf59Wp8&P`U zZVTQU1AfRle-#Z2ae$+Rb3qrN2;X3d-isO1O=sc*;}dWU+lU(&Sc&t6Tzs9Cz^Qv1 zI!i-pmlj1vN6WW64b6hps%G%+I6b%Nte%yCkr}zXzQ-(*e-B@crpBF0cr`_YGg@tp zNJKp6p(|>&8dch)9(ccYGRD9GaK+_EMS&>vZ+F*&OM9caEcbad7U7)T6W%eS_XHHl z6~c(nK4?LwsODo7z`y<7k!JH#V?~LH$XQ}b<1*17GBDYK9xHpjFx$Oo4bMc89}*z0 zeWjDLR%~<=Dv*A`ZC3PR|0AMWKX*rjEqG;sd7m&nh3X5ST%3e}1i8jPB6#m7v_qV) zDFpY*9KB(pajrzf&eKibg3;M;E^!sm_GxM3G;T>bJo6mf5nBy;u!NZtMx%pU%pU9& znoXbK^e>8I=LDB?j^jmZVI92zzuy|B)W@2ZH8p&U?$DHzsQl%4{J9DHmMQly|0@60 zqM8@gpXI;*-|{2m{tt`Ae-hvRV?O-u{J-|rD)ov3EU12pVhg~p`IxwIs1Rb2sAw1v z;l*^yv`r9YotYiwq|L>HzdFB(n(RV6(+u)X1@NsTTwir}dhose_|e+~roT5E77T*n z{s~=y$j|&19Y(7q!$Z&;zRIHhy(r-*C4c@ZN?;M!n@_I4J;vyhtD-Jx1}ZhKT2iNq zjKVL+n$xr|ESE1QBd8FUOTI@iv@A^}@&#Vu>9V#N2%;fIOVhDxPmYlJ933R3SrnP( z#CTFMGRdq=noTIiD)^JVQ$dgl;Ib#EuIL)ntc<*D&;F3 zEM#F9G%iCDcOY_A^b77$B|9$>n30IV@ND7%^4ZVj%T16s$*4%@=p0>OTog*fm{me~ zg)lbsHGJ8yiYqNPZNI z;9>Qym=DDYWy?5CmzU+x0MPH(D@Msm;U3x4oO>Ca(Eeb#59wn-zhBW+_^F>$#5}Qs3AYJTDI>*%mIK}6^&-!h>BGSj2xyuc_&=rey%lNL#|bXB*+J)u>WLw^n6OA zykLiyQy*sjCrWCPV7biyEc5?ul>Wz5)Bo&()y>*Bb$+3IFps47OnuYuTGh<|hnJzLo;pVwg@4y8}J9TJ6Y>SGmUYV$8z5mOaRn)70Q=Pk90% z#ln6eq`t;X%%;j7d$=Csy^S&5?ph=2NKLgoi|tr+f6ji%wm4xadsNk7g;g@=?BI@H^&mq6q}hPv;s;m z1f-TzEiFmz6AF*YiZE_nfuz8;Ub@39M3-kZ8{uWD7=-pGx&CThicTOtH`x)N&_4Nmj}4fERqlm$4S$hmUL?j1ODihTk+IOXj;x-DXHd6wrf|ZG3|Foal%-=ZrWi!Ed{MNoXAR z2|makfdw1>>S>o1z$%j67lL)YyScQ$7aC_Vw^Bn-dg?g|QSMCVe<^ZI$+AWZLN^B< z2CA@U9kdvrYACi=R2{klNc|(a0U9e7R;km}XbE(x%(Kd0Jg}xD?JFIJ$>NnRm1f+2 z$FCi@pZ)xj||+Y$e8?clk*7Z znNk>m>nVyEe$jT1cyb=-w9w2d+~)}vuqY|ThUkFXO(^s_yL;ObT@``0tBfFpjuCQ z1;0_TihX#~1n6v*B<~>~Nz2lHgyMGZ2HsAxTe;%@4L}fgV;2~Z0Y*HQp5)FZ)Y~-( zmJ5!Y|2&%E>6L-6|0zQZfHIC;=xiV!z|He8$I}8Yg<{)OLV1t9VGRU)<^G)(R+7aT zKy$`~4eofLJtzoXTm}xpEG$To=Ehdeopr!ZfyiYdQTe`qblb2$krWD>ie%&?d*JbEf!j(J~0)x=2k;X&MInGYRppD(BF`KpyT15^!Ez4)YV zSzca+cQlNHr@ANSa~>^h=2%S!5qkrzMY>ykh&cs@cNdch6`!fWX_3RwBxGqQA?sPx z5Uon9w_a_%xDsHFN)Rnt!fisE3I~%1V_5TQ^{r*HMfpe4P#g#j{s=Lb*4lNrT%%Q1 z=}Zus(j*mMWiJ+Gh(?7~X248dg~hE36i0?TY;G->qpGZnMTDeL=ADfqkyc@hSF#|P zYRoCg076(AHq+`Dk=9mctgJ93p6(VImGiZ@^@=8rHp(KE?h!`Snit{jbXF?TeHVR+Nx><$`_8`r=aZ@-Lyi|YYcm=~r(Owb zRVJd`*CZgNw!4h6q3cRNU!7NAMZeFmqfeGeH-=l560xd^=BW&zb3~)Y>4RX& z;VslPjuCQU2UL+J9CN_K*2?p^w5ERvrYL`3t^=osLnUHJ7^f`LC(Y`_F^$k!J#BplQ1 zpoFMHWOO$6Y7V~RM!LTXNo=YK9Pv}+z~iR z#USJyYs}<<`lMf>G2q0At`#Tqv(dN!4u%!8;RAQ4Z|K9G@>^_P{_@r1F&ZuwIbjM{2a}xgbiF!_AugoU z19+&?BL-(@BPT6`QLuBStW8ha zOW!u7ieB3CE?_i{3eOFayL)12hu}fKsJi4^1($Yr{BgSLDy>lyWs@D&pFW84J8dg}%dfsMgk=yjqm8*$??rlqWC9>`wzpQZ#vXT|&^N&~=vu?$KcB3aWuXFkhV^a3OOQwuH9jMUrV@I%w#_}5?@@c_}bX8?4o9x1ZA{*MX{>Q zc038^#Px`;>y9vp{ZcK^0wHh=S)?u?vFw(n`Q+@^NTJ|TkeD6ODAnLTzsfHolCLcX z*Z+$l^`eM;U`Y(JU*BYva*HH);@BrNu zNMBXk_5#`xy~~Gnp7Zv{YLO)|?@BJTwuox*QYPYrozT%z-fww}D9)UpfXO2?4=@C` z&U8h|L5-2H-@YEZ`g{0*jzJE_W$NzMp}LMKs|s8-s!!!(PxF^pRVRQ^E%W z=0_vyMVY_ZF>bWV7c@fgEq9+kL$=h|gxiE^a*6#w{{{an!f>$zjeR4Y@PX8lD{ zqQ-g(4qM4f4VM<{d)*yR{y{m9(0(;fD$RElJzOlrAPD#!Ty3pEBP_7#y6wG#x2{N~ ziMFfVR_+^`q_0!t%1?J=fl4ih=$HnHkWZQVwleMw4$&Y3T_-qaa~KN@?$1+X*ofrKjuw=q z&BB&^W$oHR71>8qLlWsd4|BMgB1bRc5~yEVtZw5&&@i`G-j?NeB1FTqq%!Ex->?JI zrwX<5AeSJif2yFC7N&e06%e^;hp^WX+|7X+>!3;Xqg?91qECLJ+lgZ^WJS``)Duqm zLVWTGst@tya9ayQf41y{HO;ka@BrQ6UYRiG-UT)zUvay1uiS;Dn65Zsa{GzOHl3g! zoez(Qew_JdIOCu0Sl;N2Zv{9DgwHr#Y0CE<(;lOP;lUrUd&0ir3bC%w#EZos?;;3T zgLQl2#-auW1Hf1L1^Al8gsYJp?MW9`RPqUq^9AWP=|I1fG7Ac%-wF0n9J8q4rK%D+ zu=)U5H9yPWFb92AVQ+ohr$n*_;+k)KoNO;yF=1?9og9QyxOx6g`}O&W)u+o~1~iNB zk`*+^gMUL?RFv)aIci(XqrIoZbGbV(6hUC{_$R?Bf3h%jaRr>2ks;*} zjyc?vQ5gu z_DtoRSXlxnmHY>nu?)eE9;?}(tLQV-IieER1(cY*; z>^0fWQ@jY%)eQqD_v+uGHbTO^)#KTXk6LPGcr z_db$XqNq=UJ)n#s|LhAFow#iw?gPjKk3vrzNuj>vA%E)nYUBt^e~eN|S$XpOi75E! zi6D5qE-|x5)rfd}45wELa}CKaO@u5?>)Pepr6H!dAVIIh;)Sgz!lrOpH8c@)IYHF} zzr<9&z+5pp{1%XRM6 zmeFSxQS*adFfI<%7#Es=Lh7;yj^Z5iZ0{JXBYZJV7c}e%@1y)=Xq|(uCJluMDco$? z^*5@Xp%c`>d~M?4)>}fr`M@*NCoi_}_*T%1kZAa+d@qT-FG6(v2d?mLMdY^nL0D7O zd~SJGcXSGjZJ7O&6rgkFU?i)N(?6j+XDW!0lFq$i^_~h(gU3#lLDO)=&Uu&|c7RxH z-l9~$6(%!aWjC!Zt@+rM?es|g*Nb(%*u7DD<`1lFY==&WX3nT*AWYbmSE}n7Hk|Iy z6ae@DAq0SB(^Dl$Lf8K^q`LK}zDGFhA=k31H*3IK!Jg@S;h)RX|8?$v0+gCYYM;cT4}*p=QEe#jKuJhUy)BBb zRCZM)3y_TKRyZ~EN5W*R+$=}QQOV?T?-qQAkixC*KFXrgzRB%xQngxU02 zz)so#EoNAs53OpDs;w~4l4g-3_C9?%(D^O);w>`ars^~%l<&p+I9i%jmsIVhIHV{4 z-slwP;R0e{PE8<)ruN zz-*JD4+-U}%b>B^k8vL}yIhH-(?rG~4!M%+|jAG>j&G}gB--oA{@rOReYu$_%s0XtN;#wwRP5>{l;$J3xB zW@uA}S2**(3D1TPsUG?By=MiB{r%7K&vL&uPCj<FwDMD$y_arJ_Oa{e5-$+LCswl z50m&KC`Zon6+75!0M%ixVr6OAo&jun^5LCz>g7as-mOc?Dy7dEiBU@|alhUm%PXP= zd((CoD!ZHBjM=BIh%Y4stBR<9KY`z^O6gRN*#_xc$%J;^^9kz@m!a~^@Qz!cON~^1&7L+LNgRaw2!kdnJx-b#OnE>gj&8b^m z^lSdCsBT4OTb26c$|;C9;eOx=8x2yt2?QI_CPgf%llB&w)&XdXy?&%1{znM$ZurBKmlK*z6d z)iHP~wdpmPUF{wEpH;vbWFuty=bgUIf2%t2ziFs!{l5ge{wpW`lMVkL$*@>cMh#yJ z^*yHrjMa|qTZld20E!V8U?TPvw-F#Vi5+5&Z;4+-&B}roKNp9Ybw_=}ieuzVqER1} z2#S@__@SuCJ9Ns;jx9<;S5CmOaDRSveQy5ec4SAm7lH+G0R?9hU4X6YhPBC#c8A7E zVb10DS2SY|7r@uFq9)@2@yd}xBbIMb?qhLMYJ@EqyraEDN8j&mWsXH8nMqY z^uSeQ!R|3)w1YU+NkUY5Si_ZFd`5oTSuS-8MCKjuyztVhxhq!dlFA@hAur~RfD4D~~jer4ypTkAAS)XI1 zWz?hh`us%&?CCrFm4;D))^X)ah?kb)n1VF};ZZ6SxO|KIMKw6`Lx<_*f_ICn`6gj%D? z4cUr9-^XGpo=$3=tWODB$}V|>ZsM)D`jn-XLRrqZCzZNkvz11VQ2CMT&?cw2TSaiJ z#7Mbq>-5Z6etdyU7Lyr`{2h4mr<8tgUo@w=SmUEIX|)yYkn+$@%)F^X#l5itzFmnk@0Jm}n@7ZI@+C z)mBLi@Bm?7LEAxf1d%DTf3Po^1Oz3Y^ekIx-FrjVjW<$M%pJ{Ww^>tW564d(KIK7- zV9u4s3u3lyuZ;Hi`inzPl&l!`)=hRgou1-Kw_JYtMBO+0KudM^<~{Ld%Zgm%i%a^= z<<*At%FVfy7rGHRMn3iY9HyxEjVTwBgg$3)N+Mez4EF} zvPE}E9Y0}UGw_8;WC)wnJd3VV;ezsags51KVnlhOHKA9|ARJ;~i^nnsu%I5ty4{O$tcY&I;P~~>|{ND^ARr31SQYiZGnhB@KE}jA|-a7yU0Vd;H zN)65%S~!?Ef!bZC4`qwp#sWsI$*-1x>V^Kg^W9+n-JEY`B2QVt4bT=|O+ztpzHq|b zs?DegSg`iyAzakNF!?ehEV!EHkstr!#O*D9bN&07aGO3E@c%t0j{bkI({;3Sv$S?_ z`5%!R|2K2_fBm$$xrMQto$Eh|+}icK@_!uoAB}CXwvOwkRpfh(JuWFE4}7KdH)+__ z;S_K<*43D3#)&)daFiWA8UL(B5yy0db;Q#6uN&snPTmq~JhS0;d#s6nZ)l7z(Lkwi6W z3{yZq1tGa?ONrFys+u`mQ-F+=pucccc0&Whv_q8wO*Ll2R5pj*&i-0jvz7g`A8hZ5 zUX39{cL&xX*du0YN>jInXYPIVY1n?~iIGeS@u-4Ls3enCS;Ocz9K~c>+6O7L+%L+y zGF;j=O=%4sAo^6Egw)(+6_%|mdarRup?>I&saSQRD)Vf zR)_dXeL1|#NFMVIFu%eKa0#ba#|Md#y5?sV2wLhoH0AmRc&=FY;Un$Q5|oe?X~#Nh zXffotT{Ov7*y|!Hwa##`EQ1=JvlROxmRaI=OK+n>3P}YbiGU-^MHZ`8H*#>)9CT|x z97Fq;Fqo=@i9~D5vamI1*U|p~h^pr`RM7_=5JOnPF)#}yB$#jSH-pc|5%h2oUnPi4 z$Uf!#vW4oa`{bwfjwsDFkCO=C3J?A4sZ;c7=8wR#OgzQyJR(i%J2=Hw5Qzrwco<0m zqVT4Ov9Iop8?+(W1yEw)s@n1N=*LM#LW;}k8#hU+S*4nYWQ>w3CC1DHmn2km ziio+VsMEU=Ku0=4em@~jS3V)9A2jK>%ymBC)Z z4SMi}WgUM3TPlZMcB*5J@$RKkr!K$*nU-`?v^ZalW^R`ENR0qRBN@!m<5^O`h0NTA zZ2Fm0j;v9RE0@u{Q7%3t@xnML3`$=nB!ob$HTRsuZZT9wPQ^?97}QtoG@-xPP!Puf zT<8ILwWERJ3%<2N`3y!5RDe@5u(&?2?LJmi(=K+KpOJ$d0)Q*-`ga*!RU1likcoKH zN|$lQX)WY54yZvej`8_BMyB>hwBux)>L1bQR+z2J97cU?%*;^ACOi!-)X2tW`ftlk zzbP|>Ip;yeIvSG`Us7%fUykhlo*htxh^vsrjZF5wK zEb?Mwq6f9vSg}1ynWC>H=^A=`-O{m3sk2uPFivr1Qgpa1OMs?h`SK-Eo+iJVo>+%e zvSefBDd|Ca)cb{Fo_1{UMD&HaCKf4?1Hs;IRTOM|w2GR>MdfsVnoO+0ALAGwyChiw zitoKzMh(?V?Z`_6m~I{w!#;7Tg1|g_JxsLhR3w2U4ojLgoaRezKDeRF>Gek+qyEhVqaA;J(rg=r&ey!p7=vh2( ziW3aFue%E7-1BvsRz!0y%Fm&mjfZi!u4L3Z!HLT~wCisWiPC**aX^wFn7N&Q@j9eWDuDmnj^3twZ9KV7|BqR~?h3&(MW0c1AY)LkCIs_*VonYO z)_d*3JGaeaE$Z78-ZS0YOjTa06=OUh;trX7QcqORIp6n!mkzPt_J0hnNj&!X@9~}C zZVY^5d(ki!Pc$%UZzkk!ixH9#qxKmzXBkGj=B;U4?uzoSUZ;+GZ?S3Cqwbv1t~=PzGL*jc7Sa&|=9=)VBXs(Rd#)o2)=xLZ$qX=3 z6U`gadb4Sd2)4z|>Klt`H}F{!Vh7%_q z8Z@m#j}>7iGSMLZ=h0iz98zL`k9Tz!dg&MmDLBA8tJ!K*PswrH}S1{pBOf>G%Fa6T+ z@Y;gw3csvey-rd=^{Gn+juK^bgq1(%4vCDvfQ>uCNR~$_E<8ceRa?`Q0{+k~F1vVw z{;-20d4f`J5e@rP@ZbbF2x3&+z02}q)b<`!n+Zl3?+<2hf9^Pee~^@a6kYeS1o@N4 ze0)pdJiy$Dg4_r_ruFG{bMBSj0>d*?cqY{GnRw||=%&cX-ixKUX1w@A{LjpNXzKcx z<8$8rzesz>?o6X>UASUBv28o4SQXp0Z9AzLPf)RKCl%YaZ6_5Qm7H|<-e-*W!|pS7 zzklHVaIZ1vy5?LL;?e&d1Qhw-LBRjQY5xLf%I=mf#uopD(!MCJpn^!gaFmoDk@-l{ zQnd~|^h^WbjcvIwp?!8-$;LM;;dr#BqOiEv+#{IYn zN1xTANX8a?P{S>#jFNU$=jxP`m@?l!wX6FT)JBV@M1}zm$)A5o!EkBu-PYV27L@Wa zBgjsHo?QzyVxeO_g^oluDowk)g!?h9DCrKTfbVH`O1a`CL=B?Il+(W_X5m(x^&Ur( zZ%we*O*&1%+!V;=DF?P9eT4WEXgTEtQuU^6=qhNxY)G>rMc>E139uK)D~?l{ zy9wF;wkd9hQ1ftIHC-vXsc})BS8a9^UK5>n?atGm<6QK_{Bk8VOthGhc4ebGKZfPIbkuGL8z0Xw-tR#XC zAvRndw_0SlbXZnvJ;ZU9=2#3JmrYtPZ~Dlj3*BnVOS#=(!3#|@*$P53tXOj3(1BH} zFH2q?pI9xH9NB34Etn}RA*3NFKmwSROTqHu1UawPHOG=7s3~mxt3nwm2qO$TWt>Xv z^avZIGMmL_y!;T{g@#QEE5TIm9EwROLc2ul)yyw4u>Q0+^ zWXAkS$VWEwE44RS!2AqBRpzfVioDY0O?IwXBKW9Wyv$tR%%muBXm3ms_A9$iXG?wg za!kYQ$gD6^wBS}P?n6E?r}Bp-NPRxRZ(x8LWVAs;-b2$RkuDv1 zFHY>`+n{6_C(zv{Hi4NPa7Q5p(p$~bD<+@xI&f!NkTf!_JzzMkajXqY?7N^k`*Vsy zM_dXDMV&<>WiZE%E6{Eme~WzF2XV61v0BZWnYx~_-Y?MqM?odk@PY1q6%+Lr;q8B( zf%*Qkg0lO+#gwIP`wt12pIwH@`u9XodaOb$3u<5TF==WTmE0x;32h50WCfE9oAshm zyOqs`-25HDKBjr5<8$uEx0guPk@KkMN$jERoht?L-s4LO%Q>?jX);dJ*~{M3&Qq%y z=F^0q00V(8=zPdVSRdkNWF(8WN`~^;D60ukN;3v)YH=b51r8T;h1{lk>ox+{QgtLi z9td&3-(oh*$@DUaP3D5OU5n&AvwZ6L)Wzf59&M)%$01aCl$-R(*fL>@J85lA&syH(DM{`?y;6L88Ot-dGga#Ky6(;?QZ!2KHq-X zFL}mE3&mRIU|ElXlOiF}A8G0rju++o1TP&8D|mewDPnw;V$p_0fWA)-n~5ah;VxLya+%mqp$iP(&;1&D0ehQ~#n<_DA{dJ@dKszc zCnq|(u&VK`*%xkP!39_(@0zZHxGd3$XPJvxo=QyxI5C}lnl~nkzp#61|EwSfT+&dO zW|n!5>(H3!_TCtU>a4_QBzw{4t;-<|E3E%akf6eXGsHs$jUM+>3hB%(RzK?U*ti4b z;nv^m)tOUybcrkgSI74?*pHCsttXQ(lxd)N0!A$aZd5ADNz;ORiXSUpT=qs@8xvoK&=Gwk0*&!K}#7MODE# zX0fef+iz1nmZ&?9KEI?V`e|VLQ*faLQeTHO{{lFm+AtN zxSwWDS2M1wl=H@Gl^%1UVPz-dd^Fjh8`jZNt(-hss>wqV#*ro3fhu-y6Js;!un`zL zp=HL7fou(?0lP<2P5rEakSg!7a(Hnvl;4_*?shntiOe>*j2Cv-d>BSg<%P>tjdL1h z)=VkmOq>JkcIi{W8Y8L9_uD;W{k>x(F=-O-6U6G8r`SJJDa1_m90hhHV5`~-A5g`p zewZ|*EEe3HhJ#?%)YviotDO8|nEE68Xdb#qiQtdlx7p1*)I`D;l_1Fvb|uUXoadQ9 zFB_3~d0akQnO(q+(p&`*TXcQmY{_!~hU>w`AJ1SmP~*k*WF(8rME)ghqy;OqBJM$+h zAoJWie8m_KvhM@Rh0Y|;la4-?V%Tp^yQhe zvIFRC6~>U6pH^MSa*SHna`RkM7~_m>gI$3yV(g|IBL4ks5MrxdpWMW?U;Oc1$;sex zhXL891<0CsnR^V;gaO#pK4_WR9O2B|FeeVf9x2BIhqPsvWGu}*ukf05^Fg6Rk>r)| zjy)A@dQL$OrCN_9roE@2#XIa7+IOXc8)CG3dFs@+pzt$>xs;dopE4lr+i)wJeu2i| zW-b%`4jnZ=cOSY)LYZ@j4EQ7RyTkMK^Rb|z$RhnPYs?uU15hFfp7d%=vPye3V*{Er zeh5*=(HdY=8Js@VcHHfW)dbfE2_>8gOnD`oi%zsw9Bl7(k?U8-GpeKNw^cwLlT~1^ zOrl;AJ9t|z#`1rNhu<|hV)efdobDp|0#K6$y|`oq`X{EK`S5$u5puMBJ|d^}@5FB4 z8x!nQC^DI(HNY0E+zjDox-a|A%p0QMD&&uvz|Sv0D_!qXLj(b4QhaXh-)bpYN2S{# z3g1aTNi$t$38=)|VFF0jC}}|ignK?k{_5ZF8fF`N>N--xu`hEEX&x*a){SLjv`oc! zMqGFQ+hHQtM zd52{N6RKJ5yAX2Q`G90et;7qYw#Jq@G<=5xp*p^aN*ufHy#U+2r$^fC?f3Pj(~#aEksW|%r~VW z;7@q0I^}i3LNx9ifCR&>i}*kvg_V$kPn}o084dHDcBA0NOMSK{7FyWiiXr zjz^q6Nci~6;bH8L;6vG!1uky8!NC z?!^)~zR_TNY9@_hlHX*mUgJHS8ghAsX^&UB(wgzXoeCT2nHB4hTMWwOs72sz+nrsP zO95>=SPsmjwZEYQ)f`D_A@hbb`s6Bvz2L$Y27I&4vlV#^dBeuIO&pZ=5(DNrNozY4 zQlT4@jPN&$HM%al=(3Rf338G+&3BwV1atEeLv*d?WDu`WW>Zd?$!|Qt^n0WMEd`?? ze|d5BT$|JZK8mVxMO;I06>clp4l)A!%$>NfHQm*7-`wikFP@RIicbh^2@dPLHkhS# z>za(=O^Rc+wb=UL10_Za9$Y%s7~?Qbr%>qSt}k$8{KMA9;1yj@veHl0l)H088G!eAZJP_ZNj z*-tLuC~`uTj-8s|;No1;nmQ7ite_Xm{@mA@MeK&~6?Ay7T5u;5`g>931uSY*7E}~z zm(-^6vgE&{+?dJBJ!G(Q7ol`(VZ}t+!tlic3?95<8^?kd~AYZ8vxyt?Z0F=uj0r#;z6U(8Kj49yKk z0Mymgm=z!u`LIM5g7OL0&;5EovI6oUtDpHnI^ByP$wz&6T*p78g8Jcb$lZ4wPel5h zZ6vwLTEi`*P|8OY81`(l=L~OEhcW&_f5)bjAAr>rqYl!kbQG*d9fbZ2xeQFaD+CvR zrm)=ZYYqYn_gAhb`@6@hHf1F1zb-(0d^7vew4^CwZ@|g~Ob(FNSVwM)uoc%nzBz&a z14)v{#rv@(>w<6F3d~V< zOu2;WA&-X##_)4_>R<_Xxi;xyJyts%1EZGZaSvrFgCAmwGwh<@ROj!(Sv_c(r)32w|O znZRcl@|Dh)j_@3od!AFxT+O1gkoSP9oEvNnk01=t(Hv!#9rgBZBDR>b_0klNo!Wt= zb&JI3L)!*vo7gR4dx`u|#U1ujqaJDt{pl7 zq$!sj*kx^Sax}LNx9rtN*UZ6U{OxH$l;N?R2W#?OB_p0cS1-t)i1$c)bsiJkf9@X; z>Gc>I8HH=&nJtN3V+iO}8zgGQGI35@WM-PiCH0S1EL1uu36CD)P&O`L?}*Heq4@!~ zd-&2}H#7lf?5B5GaEyvCorf+guLRnR_@Zb!fSXBBTPO!2JWHRL$g}v3-S14WRtHp<3WS0Vy)}|JYFdw`M*|)mC|349O263L*vt@SS*u z-3^zLO)6YS|Muv+<^GR6)t^h>v*ZNuABoYXxTjBL68z4lPqt5FQeEcK9=-iliYpR; zFr0-!d~=r<7nk++?ytv-^maSZk*kKJublX|xdPtv)feLTgh)W)FbHT`+6eWwXo*4lkLQi!WXz}Trf|v4> z%4~Vhp+h5fV73pt4jfOG$>mY3kJ~sq?T3pX*z)aD&Z63>i~k-^OYAw}6sw0Txz`Z5M&^1AhDo?bLcV##lV80@ z!66`GmeDeBy+Q_PE*Gbdm4a+x+~H*?B5#@4!M`fhZ)?C&4F&$?v&t<5e^2sIXR|#| z@!W_PVkKKdMI4KR;goY=;tkc&ZL|m<3ZlZO*nBLW!96ADH~9fFHmoCl+D181Bs{6W zV_BFKg5&xY$FyGFIK^fU$3h-v98FdD^2e%gL|i2U-v|c`hY*k6^r-4_{ziEYb+*>M z!RwW7(!R&6%QlO7q6<5`yvJ2SP#*rL3DqA&&%K{Z%3w6|TJVdDvUO-hz=$C7w&XKq zVT}D^6_{u>$nzbz&d$qptVl_^SrCnX#U z_Mkf8&UG=V%BfO@s}qxip+H}R3wSP8Y)G|mJzZ= zJT7;SVvkc)7SxSDkz0~F7?)L6h(gske*xg!v1gI79|AeEPpirXa;N-8#uj9AQs2|C z&=wIiuAOo?^$$7Q;R%Hsu9!5=X=Z6T5{Y8s0KMnrl-X(T!(T>`8^u!7;{}}Ix z2@u<&suhcr^-%pMz*GHc$K%eM^KkOu(P79tV061`65Z<<2ILt-y((;Bn(oLEzIG#g z^C=={1f&~-{=k3Q_1q*K4da^Gk=i93?{C0d4(DgV6W$ad+MshL$!$Cf=#9Bv?(Gxt z`xSjxO4{Xq$~6ps;~Tk8C@y;&itmWMVs>-H^z0UXY?O#0VXMgp~)UOaJ;(wbq_y4B}u>9*)Axl-;9#tIegTk#N zq8{lOGPG$2MHt^%GhI)~K?;P!a*jcgMqCA*QDzC%e8gjTElV~}{x9}l+$0=D#WLTk z*m5tkWfEfMyvU+eF4p6WyDYAh8-dTRSGXR~F2X@1r!RxCP(_25f`XXk#op@gYYBPC ziX%ywCl1 zfxD;Do(~lyiA9$y0&2qb&SP8_){$j1;1J=6u0i47m3e1gk-E`XD1){bp3(L zu1yhd7}iUigHqQu=}>h1#X&U0SXTri^}_{0#FatCSgPCw5$#P{>u@C$Z-0&uS0+mFK86Tz&^Hbx3OH=HeYB-a&gp zg^g!BDmNmFf-EkmMCB%F0Y6gi&+C-dIFyheo!c#%v;n-o!+i7uOAN8IirU>nX~R`i_=2C4dmKAQEpo#fp#%oOhI8|kqJ!^hgDG1Z@}TfzxB)@3)GDz zF_HLn0qGiZRfHO%LPY#iK1N<|DXd_uALMmDYN0pg`V%!_PwN|DE#Ey z(i$JAtO85^VRukd-F;BsMvWP7cDKbP5)vD-vpi+BhHQN@&&E@SDa)iyeIln%v~m(M zDK|m6+$bB}Fr!`Uk)N)KHZ=!?)5W11MG7LWEZ8L9gh%}NmudsxKL4qd@Tfm^bN#CD z6sUi9&HqQc^M76Q|Eljs^>d|lF|>~*EHpF_5YXU_++Z|)A_U8HxMDORI|}xh6>``4 z45q$t=+UG@q`8k18Nxio8FdHq^i=BkkBL}*<&ullBp>$#q~eKOKD?~+rz~B1|Bt`x zgx{+7y|MWlB(G^L#G(2lY#+*Sm{nMDH8r=FSP+DVEA7sv@PxIAT9zV=PZEh}IT1p3 z+f2<#dDM;~E;W!hUB0iYL`w{@a6H)bs^M?4ka89LTAcJTQLS{8-kh<4993rBh$JK# zv9(pE$CB%7bQ3-*=qR^?;N$Fd$W*VW2>r+`N#l|EdbX-OBTSkZX7XQnHMw_+g2FP3 zRf>)x&WvZO-1$djEp$0-jGYJueLqq4NX9j9@x?)AXQ9}_17zS$IeJ+>i`*XG@hflt z;tzbz2hW7|wuIG4_7=Vd=5wo}i~jJB}TWX9bNdj;x?|0K=^(vVI4mEm&{FENNJhmI)%< z?`L+SfMrlNE)00KoLF}1z)4ewwrZ;9Z|V{11dL4ytRAEG#~VOvSX(D2{uajZ@UmiP^(g#GOkuIuUN|VsF3MEI$<4P8L@OFGZ;?&Yp#78Xyre@V zrW3|-#(o*Z{-v4~(er@&b2M~3@CaLrwXnS=IW;Ek!BWw=>8X#3I*3a~4#u$ogkKFDy6(1v; z8{u-{;#9t%B3J^5z1~YmOiY?e%IHnG&|Co%LW(ikylQH&>cYFITP|weVtR zo1a+HneS-p67)hbE+;l{Z@AT5TgD5VaB6V>zP>~w&QP$6Wx=Je;2YGq?%*#>qrRS? zMOD!n*pakgwVI{QIj7?{=^fLnQ7`H%W4DmxvM`YloPLM&*YYt>tTwHRsA4Eb(o=1= zEnL-=*5!Q6+u62Pim6RcwcF~uC@_q)!B9I{TtrR_f~R0}(R01C@$Ce~J-2XNYfI9? zXIV*!+$=qve$UD?YL0SQ++CCK^*JlCklzovurbK*G#fN@T0-g$$WXTy42~RB}wj7d8{2d@{tuPdQn79y|9bIk_v84&NYPd-~_uD2ke8xIy$ zMES(5CsgYC`&$)pX5IsDA6sX%N_@1(XiK4yZX!yrs+Q*(xTbS78f<+^Doy+fMV~u# z%4zy*k(2}sw#|%pvo00jGG+Qn&h?4=MsI{FaI1)FI=CV1 zc&{pUCwti4DA1RzRe<*L_Ma{yu!MfEzrP+;2mh^y+J6N9luXSnzhcro{|o;8-?Y$} zo`xBP0V~T^GyoB}m3D4kgQWzzuy~@;1kr~o4!f`;1HHZMP(07cr(4J z=*x*K4MCQn>XbTcccIo0X9`-_v({Oz*BJnooP}VkQRdoTClq>m(o|+DL_MyXL4nmJkaPlOf^;50XwZmKCvGC6@>mv-eJvcy=EzRWl%RV62ewnGFft@rCc|(ONfuMtWr$mrf~6ToyYxrKVbljhppnIog-^sd^AZ!|EwG5-_p= zvN&buz1Bv!AK8Q2G|@1G&+Df(Lf|Zv925u1zq4-ed#0mSH(9fdBT2}J4P&Cj-K^XT zk?~_l4#fi+FYBCR;$X;KDJydu3$5d0Y*SCaA{5&L5zrY)M;zL~`*S(f2AbHo&6%Ee zEC_hWSs-))4}-YXB}_G|v>ljUSdg)^a44u9d_n+O7CLz;A?;;by$wHf^=lg8#i4-2 z-S`Dl5Q;M=*+Eym#32zn$1rnNoM`fdgpdXrtU?^=ixXVwHhjsVdz&Q`<_!hpA*TMc z=y>|j@!KC#4OG$JNBCF<3k!;t%x&n4#97=Ns^5^O+OCxnp;#BbTqa8`F~usy zQ5TwV2YCRtU5yM>aT(Nv#k*efUQ1&(r|eg2mgtfbObd7{@UprYjEmtf5vYRD`Dx0I zi1ru59tO$Ru6m{rPrg$8R=7j^w(=x_Z+o4*r44^;#q@}WHF*f z3<@_197|MdfJ2Z3J#ALyuq?6_F~_tOR!_wgVo4&qqK1h~Gu-#5 zuG&6Lw$j_(=g%&Ok;9ON%Vz{yVgK5@;5*qAtTY)s7E@qsgm87?t8;kR3irE1(Sq2$ zl!2yV>0e)&=cL+fI!~BjeKjXq@zT&@htCtygV_(lVSz%#Gr>RtOS@0d=jmQUG|_t` zXaYl2{uaGm=C=lJ%fpdl-JoVeUrYH1C!j^~DNR9%89L~@s)#;_Usz<)C3D@}B8eJ~ zU>(XVFo{#6a=_U@qu`3Aa^Btu))4u9Qi=!r=jtBZbGtQWXGf_T)Q_7d;cRppWem zn>%w~h$?uC0nsr}M!p|?7JXEF0P`7Gc-zErw~kl@UNOurA&xFF#4h4V``NIPli?bb zylqE#e*+|cBWV9!NSWW2ZCs%tve(^D2JJ86;c8v#lDnI))kwdz6D5#aet(`*osao0 z0s8@-6Q7L9dk*1G4bqz1xIYu7fU$hSUoY0!k9z?gV2X^qa^KW@vy>nA$XV!oWQ_*q=OIf+RwqhtQN) zdF+d93jStToaH;kW4^^_?)Ulf0@s6Prd%p$3+jq-HrvBg4LZ%QFx53PhN09RaL{!@ z)k@l-)YGUi$A2%K{Y%vQ!pBSkvYIlIo6~IM$ezBI0K$A;f+Xq3nh+^n=;^1L(aEij z?##yOHgwBA!!tvQT`fi_Y25`Rz&Nd!)>Cgp1s=w^-8v6u5`Ym=qi_Jb&0*B3Ixr@I zwPBS9e*vJUSm9f73i2Fw1d58nf-Ry|JLFCH!r^=L%m}iK|1ND^2(*5fUJb1XSIr+5 zo|J=&of-Tx(7jWl!S`w>qnV*TVpqCN}fcFgEe^ZW-r*k(|+fCUgL!@H}G5 z!WmXTV_L6l!i+RrKbE0INifD@IjnKYK@4nWM)@hutK!LK^uDn1A{7fv)GT)Y{IibN zV^|g6@~l}mKzK87jp8oj_TZ1zXkstq_N^tkDpK}A8`{j<0UL*tDt#9dGf#r4#Ju3x zrgr0NHI|5CmFJ;@e*#orAj6Zuvna{Zc9#~T)q`Ad&^Awfd#pIYkD-% z<@5HHgnnGpo%0E6K%h^CET|$VBZ>zGAa!qi(;A$akUP}6W3X=pfC1ae+NA-rLXO5r zFaR2fa!!yW!=>LmNwyWP^6piUc5NH%Yz1?_TaV6?H8po3uV!ZdEVQV^9kkE-BDmLBH;LtLbiF(v zxMTee*}LHXV;XczK7tvi?jSZO%{i{{aaGRNHif{k-bsa8U1k6F+n~WYq@Y)54~WuH zxre7`h_wb|VAA(2ms^@oc8e)l?YFqc6PV$Gymm)p#x$P$%PniiWY3oqp2XITYz6|o z#wdnZw3wr1y^$O?x{o+4s0UNEBZdPD($!qJzQS!d?#oHq#lGAF&Yrb2ShacW6+de| z+e@~Wq>-&qvn$O(U+IQ{VHWF}u|0hkkCmBa&YLD#v~VE#$cA3qHhX}Efwm=o&$ri( z^GB9pgBuM&@JZC^Ib*@WakF%nEz(NC*7fEB&iFD}PEx1zZ#S+iuTrAbV+y}8|)8I zY4*zM&Ak*?K~_u|Q#HG#3M)+X=!v6@KF31l?+%QH|_fR zn#@ab&ybuQ_!s(+cso+m4Z8(#Z(OplNFevWlvbQgJibOnDDPY=_e#W;DDYADls9+;i*zJT!q#O%{NQ=SJ1NfWd9M17@&tGjDxt6H3Z3MxsW%E zf>e+pyBNO~QVj|z4@08~kS|hu)=$J~LrxnYP$PIHe}x&_|MqLGB7(;HHciF<gJsufs|nvgA3EH7x&RxN?% z6|$oM$(E5}!KBxvcLmEpYa&@ngG1aZZ!0YqQQ{oF|EAo)UQFNL#L4sU)wMR}+pR2C z2CaE8LZP5d&EEq&LoXV$Zcgw}^W(lj<%6p>8lL?xtICE@>+h!k_G2re1VU4nswjq7CC{i{1dT$!N%G<>w#n$&C^;Ucy5V;-HwVz# z_}E-@gzlyy8;^dq(a?vKGL0DYN`x?vjy+J{>c~3>{$5f*W33U4vlCzK>e~01N~Jm+ zYv{w*A0p>=QKzF0GWX}>hw?qvsyg3d2J=$`HW3!nWoqYf6fnz5`@O{0svd%&3P#&f z{jxZ>I_S*q4-CvH3Coz9;fGgq^9AwDC6`9u?MN5c%T}VqlC_W`dtn+jgMgaix|MGx zMzyrq@(bi%u88R{>Ku>H?!!=jnPtx(Dfd4>+(7-K;?!QD^8b9McLRfZ2qnkNe#_rc zl63mM8$SJ1J6$gKu2_DCa;@SI;zD8))weRxJR4Ng$=^{zPsvN#nZ6==@YPzDV=r1G zXQayw7h6FYS@f;Wc2-Yr%lPAjevzLoxvDe11f`-AWgA?^utoKzUfQCR*^fzR(iQC> z=^1Y0uQ0e6=n1)r@gdEw%DJ{# z9kf_i+GWU97POVQiFV7>qLX@Sy@I?j&{t$Ix+S8PD1O!Cr2(r%^YNz%C(8W#N*2t# z&K&W$Ykfhch;oTFjx&>&BN%MRSryIWE_+iuoN6D1T91cfb~%}!4%OyVn>)@-kZ<28 zrHT(q&R&ZV?wW?ip&1w@Y)Y*aX1aS>i?+p-glSc=htKiO51dXYckgR11oTmm58cch zl+KS@tZuE_H9nflLBBqoDJ|cd%gW$nIkVuVo@Y?sK8P27^rwBe;MIsstsInq+O3dR za7)i?a=G?UggK0AjK6%Pd$}j}mkf5sUL?i6+6ji25^c6pyi~h)wUOcu;iz80Nhn7; zqNxP6;?@O?Q^;>r1j^T{=wU^c*N1@)NRJ^87z{a}Z*1uL!>CGK9)cU&x&%>2-U9M4>8pDGRE7k?`WKH{HnS^1I-ylO@ib8ICWY)vd>t=#-)W z@_deaL^5~aR<`1eEU)yn)L%;=un)$(#eoH8TkQrf`*>4#gTgILvo4L|b!p>=y;m%L zYd<-KlTyojOeAK=I5svzk(Eo)PpKPSANk%V)%R}#WE0KvDDdL(?eN=wq=vrN0p}KG z=2m9rhLV~rZ8S*T-y0*vOE2Q|xNt zAMKIbI|4Rh(_EMn;sPa?IK1z2gIDCgN|+F<9;Z}G|E5HK4iTpIqOr{am-q+-m6KM9 zZYk0I+2^E0x^>K7Y&R2ZK4T-BZ!o6-eZo^Ko=wJfV;l}$0q&k{qTFeL1R!$ zNHcP1RMHvj#=vgLBP9IEuvd$yzb7bg#m!w5t$r8JYo(bic+vE&!hX-RTor(7tm2Eo z8oMmMIPHV_rC$`{LLu%aa7^xIQyqdIXOgqKx0?zW1nRcOY;1_KS|G#WKxf7{fzD!kO$kf{bsT7lP$)@qw8{fo;;bPlsh(UN}gxBiKlDH9|3n(k%c z90zF0emF#fToK$UNvrfs{NvcNOSyDP1d3LT5})megxOKUizivVO8$%(gFN>13f|Hi zRz(VqMg2*qW0dCf%<&)%n`EYJnu{ZgfPPq}Qu9yZgXVS(L z?O-FUqd6<(G$vtl-fpiZN$ zt@Sc0z$O+LKoEmFKC(wcJ|8I56w#6z6_g-?bkZr~H{( z(%Ph*bq-EUy*~8QhtgBgqgt9Zd;`a=jRdDyDSmy5zpXZ*VJj9(GNJLKRNB=-nGq@x zqC6=%k2Ebm*iE*X7#zYc2gEteZNk@dK17jeDe+pV%_|+dy>Nspo%Wk1-O#=9F=h1X zb!+RK>;7mv+Z|36cksV0DW4U6IW-^(!pLGCV*dc*ky;YSdT_lJU1?HYu-NAxT#lX~ zOBJM1b9@iLCF~pYWDM8RwbvP1GMogDa}>vu-4050OG`1i)icstL4sY)&g7|PB0!hZ z#U4^SU~m<-UB|(kggD4Or*2jYb&%9^Z8+}!fvrt>+=Us%n){4ncmP*4ehTNB~%!c7vK}?#q8|WJn@KL_jgkH@);cS%o zeg1hI@HlCW__07wQv$06qA*?x+61|Oc zN&`QEypsSDfd#u%+GQSTaQSO(1FBz;>0}M==m;a)-y4F@A7=!;&ujDY1l(g>J>2<- z7P@iSn;#DD?jkL);(xLCU%dBVDB1b>2l`|8TW&&FbH4LnE;}bkTdYWv-X{uC9uVx- zv`CMx2z8mSm1&C3cWA9(B^QU`CU{?f7 z&#kb8`mtM?BBQ@G<6WJ*RF1Y;ZkU`ENZYQQ!r;5?fe?qhilww-TE*6 z$h%`4A86%r5*>uQS)hCo3$7-E{MdLJd0x5a=t!=&=J7rJaLj*0@?8;f556G%%?90u+0ut6I*dwL zYn;)MNw?;RmnBQQiW{Kz6T$NWYiJ5tC*yVChrF=^_%b>XDph^-{U_1+Um{e0Xy1HG+yVPjc%Qht$I9#vWtLBBr)IAf$=(&G=6iGhqg+NW=SnD_;74j_A!xuU=ddXvi&jxo`*^>q|=6kU*j zIt2Ez4HGV<+3sXRZIb41*BKiS*QovHfaQUk9X<~(4CeK5zb`6>qx zTj)I^;6BG8-vmPejwq|cj*ML`5q9i2Y@Y41K9e4ASeRLXE^r1t^TW#5F5a-&m$mO# zGH5ADU0|_7?ox1HqvKBd9{9VaV60I6{OT=gVE1IQ1S+K(yNks#3SMK)%~Sn;PyG$+7SA#IlLZPJ|@rWZs@KCeZeaKJ-*8_nZq(F zA6z|%SOy=UCi|ib$CWPy{^WY4#Un%*6EA4CR*NegcQ6TVtl7_x2@I>QOoh8up(-p0 zWrp}|7#|FA-Ls2Q*02vB(1%CosK+~(*pQ~payjz69j30sfj8?6OX;~b+BiaL)6;6Q zDxR$ZZ_nw%#++@0mU*vU$#eJ1hLf)Mh7*3Ms<(N`x>*`v5wBl|3xM(1?^nLEc{=2rJCXNK zlSzUINB&rS0=SIbSba6oDccCU0<YxCcJ zg67wyoJqq|mb?#YJ9KhpYz^NkMyBa+`&^Vv=R&8)y1l%95}2s*@zN6%GS>g7P!L1B z(K6&N!@0h9!1+K9<;Wv2q?+GGs0(K-7WJ8xO1|hNPH!Tdmz#;Q?KMn)Kywb-cUdYO z;SvIp^Q^F^6m$5$b@=jGR0BaZT;zwkkEDz8$t#b(nJGa7OXI~)aTexSzR$O^lQ!bU zf$dNJTEP(RFqd4mlQK8W>PvGrHyKFK2i4r;>l3800%ZQ^ZJKc`w=3fo9B&Q@J;^jU zbmaCAS94dXJHd2OQAJS9nv@aqDqh5swPp%iG9q3yV%9Zal_i?A=wXTO@C`vTYea){ zl0lVVC9IV(7BZE&qq^gdpwRBvwn#JUg|S*0l6=J+wp2#FYcmxX6IL$s3~rLrKM6N1 z-w$jgP%b05EA1^-Pat-DD!a#;zQR7{P&=teX6O33J;WQ5tRaJ+tu*W`Mdg$()%%hmOcwgo~a{r1Ws(bjvl9VJuZjSYy&g}0$*J5LhYHN*O zH1yUl!`}Z{-_890T=*-yIy;!!nf!nD^D45+IA3lSq$e~aG?As@>5Tnhzh`}*jEoeE zBVhy4!;|KM*!m#VQ*?g=sQC`UQiZEq4-6QF#(KxNx<{po+y%j^Q}9BwFHbL@wwOA* zKi_%5uCW+-PXeU_*MWBTOat)sBz7x?L@L0^h*DQclZ1_B@+epjX zer{p;(Ng@QZB`LdZCm(T9&ag0GS*q^Kop+=!*P(~UZha+=T59%s{WlMXUMYraJ-r| zlLFgA2*YwO@>L*n=&7%;MR_(AcCny{Yf-kv@>wq@1(}Q&a^FHoZW9HW#LLVMP96k_ z+}Z4;p3J-}k6>a@x>32RD5g$(ASVzP#m>tSu9*iZgAaze=&W4B%t16C7f@ewH)uoA z-1%zf`ygv(%cia~YFBdCYDDqmR+Kt=d~%z)hYbnc$k4*T-m;X-gJbz{N|%*;Z*|UB z`G0tO#~@3)ZQrvhZCjPLZQHhOu5@K)rES}&v~6dlZQHgw-@W%a9p`rMx8vN7b3d(! z6*JZoG1r{W(0}}fQ@m|FUidwb__cQbbFpwH0hsFwIdZRlQo$kCJnl)iEAs%MX+m>j zkIejymVn+l6x^(Z3C192-Ep-FqW!NT!_lOEzpcV|7G10Td(^qG36Z{n_xAX9mA$=9 z%Xxt?gD1{ZkK39r_`nec2DV-NNq?mzBYN#8L*m?&50fD&|V>gqOa^Cys?`iE~G9=P+mR4)O)manSQuEW;SvJ@4ej) zXDNznDaCqx8dE5(^pdaNzJt{8$JUr)6K@fn_M#ZC5iN<_v>T_JNf}?xo_yyLOWF37 zIU(R)Xet#s{#8Ctg~OF=hVlq5i|__xxAvoG9Fh1@tyyQ27SjD}4}m4ck_c&#=mpI$ zZ`aN6^i!;#({qJz27Zyl4{1<`j&6xNU*uN&HyUO|9PJb-2o>|E*Hm&;Q2n3VuC7@UJHb zIodfn30WIBIsH>rs$}B$k2cqTRPvOZ?d|Ox0mT1yk)gH8Un%i_rokIxc>Wrm9Jonb zolgB-VecCX%9MU+kRNR;v<0fO`j@6Wtt6G{ng2BhMKVrxTs2P_DU;GD^f^UPUqIz5Dr9xs_kn{ z^=cPqj+#1it79EKKV_is+=F?P&rFA=^-i9M%!ysqtZUq(1mu4#;R4zVN1dOML2Ap{-y#qqrk z$6*o5x&J~O^rE4cXy6}0V;>vj`b$*+W4X+A@wMwSU(lI<|Niv;KmWh{Rfd&!v~&BH z3T!~_*$GGNuU=(~z4@hDRH>fOXaR-tSxsal>vqw8BwiF%#o<4a0XyAi)>2p&EFEKG zD{(CZ0bFaO2(}Q9i0Gk-OT^n|r8!|xiTn!6-v>4YuJ0!XmFSY2bxx4MIa4aS zghI#C1nD|7Cz#W93VNVD<`Zy!3AJ@Ia#EWOP8S1t{H-yQRD5T6(aa|VwGQu#yGxas z%LG&N=__+H#+v{fu9{K)wot8Vt*u7JPSqOzQ_xLVlhmZBxEsn!$rnzUwbB-AM@Pz- zw5SPo+rD$KhqR^Ocjj_hhQO(Dl6o~W4n*_x+JY0$MCj(@=ZXKZOYN+-yu+oa= z)qWngcz!OGY;8y{Pw99jGp@MJRh0$3HHj64Iq$jtbccvn3bvh9)*M(I^d&9iS|eQ* z02xDh{%ZwH)y6VnW(*m~+owWaMctlmgr(F5sr{WtmI^@}3y7_~n%O8t2CMyGKgI>} zQXTJWDZs&w-FUR6$#Y#aiBZ65_BV?QR?3#Cnsgd>%g%7S%UJh2(4%rZ$!L|I@F1LV z-rfx-=b&FsH?#LQ3t%PE3Bxq4rXDucufa1V=MWy?2eqV#bwAHJHMq$hC1vH6SBV@5;&|Tl4qb23vXuXtfLi; zd-J+2*tnI3VFqG-jqt4m4P|p)2Tf>d*(j}RMD{&^cslCt|7hU;AgjqC8b>{<5|Wyi zG|7+WWJu{>2(n3&-=eNKD+%>xb8D zR0%_pdgWB#V^g2XORB@qBIl>BY`1#@g9gr>+KR6P)Vlz zxkIS<+Ehfivgk%)@^r1L6Y(R)_fKYV)?ma&`g?<}+9%ADt8#!7yG0&*)4?#jeWb0%G!!B&}yjg7ICv8YH8NcJ1y4@*QR$rD;jkhd3cR1I}V}F)dc6XgPO0nJCEK&0BQpC$$FNliv z&$J+3;P@)eYSH-YA#ZIFbZ;Rgy>5f{;fo6rR@bh9*U(NbM$jMK;J!O&LQnMLETJzD zypr);M=SYH7+urhz-}-19lksUp(a!BBMr2QI6JwTtLpDj^PyNW7vLlB?r4@vC^ z6T55w{jPI-s1ILm@KH$V`=AYSOG&TdJ58$p&A(nD`f!O`xE(e>@^N!EpYKZfSpLsYMCF?=`v ziF61z!z=o-OQqchobNyry~d&Q6Y_E$$0y8&TZ=n1+u@DFJG8jwknb;Z&%~dQE%epS zQ-$z%=HBgp%-sKr?fln=oS~(O5kSJ$-Wi|-_)<#Q{L2MXe|AM)ME%I3v9f09SEud) z?ZtpeGQmdG>?M?>2MPa1xO^Sa~LxDyDRiNKV@E9zG_QXOnp5AK&<|SW?4+ikNWgB2_c>6Zg+)-&Nd4gm#3GY69{37DBG{?Lyg1$-cp`1b@w>(kh-L8|V4Wm-7$ETd4rt^r} z7z&F#(Kw!w<=4A|VTz5_WfYt%Q!XFG@=ctX5tDXTY;EMA03HF#U0R-~lWtTMq1q6= zk%(M7J1$i>3k2(_oCI`)!8Xfn>5e|UIGbr7c&u+g^?|4k9c&s)5SUZ0R7>zX1F8J% z18H23lH|v8Bc^Y2$|52(A3_7wQUQFSkMmv1t*z#U(KGS&LF-c3sM#F2-QvL9k82v= zUz!0RE5j?2taW!LaRq+O-5-TTfmP;zHk)otNTFImU1-Mo67e=2kblp}7S$sPpf@^H zl7XBUWeUA@>I}fO3+Z#LbE?F0A1`qik2hS>?vZLt$)Y|QCG#f?!>JW-)TpambhvBC zEctgp#eEg2bx@KddEcZHM#FAeHYX$`FE-{zdZZ6xm0Q{3CEy?MIDaw{RdaM4sccq* zE93CfIS^zX-17d=0!nAIJ7)wC7VaRxL9gx3N=5w;Q`EPEUH-`#EmZ*&y0uOjl_#e^ znj-7!=E8z zCC716^9<%d{{mpVwjyiQwc(`AnxBZ=wHl^a0PL&6j0Xd4t&V^Rf(0ohsjH1yh8h`s zRqf|QIk6kdVHz7w;Rp1mz!q(PtE78Db1Jp6Gd4oeXmdhOg@6Y2qzU73FIssWX-`qn7Ki{9c9I3y@PA-35P53qg$S6n2aF26yJ}K6jl0n zbBKjyrV3&{Mr?^t9Aj^63sDfW6A({0`)q7J>2lW9NIdnn7v)AYJjj?LCrNhfybNvc z$${ohBTV$J5EO6u4$)IdchSIko+$qop*_Bfn8*Qmv1l{-A|GkaI`0vaOzPq|zbpry z0>lv%FM<80&CGW$rLm~z-ai46Zegvxn4YCtw}Zy=8k$4g>c=^~caTxI9`d8hs=>vP z$MG|pSSCT5;9_O@ZHU=uZcErq+L7LljtRva7P3k*(I~fL1GJo)N!{wRq5ZR@1-30F z3wV%owMGRr^R1PUe<*BNt3rbq09r)6RP-)u2_RBwMDFUdfbarD3=1V?RTEPYwS(5s zaJun%GAL5WhLkD`^nmc>rOA$MfW+L0B{7g#BJ!<&J0KJKW;+{uA-3$Gt;GRz`nI>pFUU1V0# zAJ_JB_kaRKCEPBlT-o&A-MshQgm#A(w#4vs7UWdh5rNA3B7w~-T`Lr-C{0?_7>kB* z;yU{}Lj&y6;F+=}&P%t_OSXobN_kS?tS>`!>K#!@ZM({9xQF=#IPE0qf{2BeN|FW2 zy(kbSkY~GJ-N&DZaayo%2n#N5iTE);Yb|&zYRbVjrJPSFJkKz+#6b>m2&J~)c&76=Qq zAwrJ1()dbzIfb9~(B{&*&boMHE@?uNHnRyR)99~J=XNz#+`}H8HqzV{S>}e?s`4l{ zoKVNFr(jgGS_H}N-J&L^zlCrzhj<7JLyYHrFB8F-oYmmo`c<`K^{eZJvr|CPZJ>4T znQ9>qZ}V=^xv;Ky)NFEUxygKdr9*z^p6hNQNXECwkfXOAsNC%**yDu$x>ErqMaT7x zv$Z#FX44eQPgtJoivT{zU7^uXY4HINqSZefQJ5 zsoU~*#-`1_Zfo5XzNhS-$d{mui?OGjLC{sPyfkjVI-#OtStB?&Jy}6OzS+%*)s36b*gzx`(JLqcEXp}K2mG< z!i!USN*0>&PiDOkoRgPW<;wjw>a6Rne+Keac3cdbkpUkamg3w3#z0`H!@uFZxx9Hr%oF6$h1Lv40h zaPOHYzhx!5<5O%95D@N(@XPZXLWOFPzv}m?e#!A8TOHMKtJ_=9o4N#B6XVjR1HK!) zwv6(Q%6JJp%nhI=Q2sP*k?*BeG4}HG6Skv0U5@x_w92fbg)PzY{)L6Cdt2BZrS~G| zt2Z4l^Tbo(bN=}?K1$G2VI_QORc|_=Yx~C&y5=YRUyfe_Sc{(07YJJYZ$Z%R|K}V( zIcLEC;`t4H<=c_J^6h+1O1 zHFO)eU+J#=RPf%ue~^!6jUxf~=W)y9xwM)Uy>?tQb-dm#KK}S-dPN<@8KkCY!{y1? zb!vIsoQ3vh7nH0DWU=xtLt7$TyShQe5p6_^c_S{avrBoavy1dONnRsYTi1Rw5OO(3 zJwZ~-oZkqC0o#F@;qLOv>!NvPWY0xd*9=Gp2B3;Of+u7>aj(rYImOng8d?^XlDSl` zpGyL_DoVA2@h0`#9ncYBE?vRtNi>)&iI*f;?p)~-XowLGMQ3lf3TbCbRw@h8ecxy% zgM7})8Dsp_>060rf);df@^(YOf-8pJ_px99vY4YSkn%xum%|oC#riTe8N)t{C)9RI z_te>To*H37B9UE*McHoKs}kfZ>2Ruolr(SE%K}E9>2B-9(zkly6?lhLbkw;8cSt%j9L{tsw}jE?4csH+2onl6G|$ znT2|kl8jI^2FMXDLH#B-HNWJ+md;)yL#y^kxAZ0I0^4>!}OR|a9Opws%YKKzq$ zYomZSYyhKNW0W;D%QNh~USEoWCXLgdhv{KBdePS`M-`6#N2|XINu0iw=JZ zLADZXW103uNg2HSXADSxZN0!Zyzw(3)LIpR#;q+{f(@cgQZ3$8-T`O6^4sq`cdwD0 z?#Rw@;x0&LkLdkzz+xjk`Sc?QO$y)je}q0ETR*gfaVrqWWe~{;@4@$hrQka7<&8@p z@eIaKF>;fn6HgNQBrV9+I@KI({&g4M5NU+>zjEwbf7_&@^*?nN|E2g=vv5UL!T5_< zyh0zS`KJ;CA-7%}MIfoxoJgORr1sLt`k}O6iNNlcV1%G)JLz4N8U?D*N>OSnagjDJ8kSI@>K+RL}4lXw~$6- z;+jD`8E3eh1Wuj&*2Na-AGW?PjrYKj=KT3V%~9@Cpl}=)_O)AkqB5HjX^nI`tJQHF zYFM4eOC!0EdT@z1&!NWXW;&Khj<}Oj8bODJxI}d8BK?aZZcXUV@Q> z(*YjNLFs_6tIJ<6f3x4*U3y22AX(>xhh|U{M8cUwnP;0Rq>FC|3Wi;+Jp{EzZC^)N zx>}Z1Bz1%1RcnsPkqUprlh?0y(yXGPUfSO`1WH+uAvhh^IYuR?daPa%U`WztXc`%{ zI=`@E;i0i<|GUs2v-`<8bTLgM5UzFNNf^hfMt5Jmtvj#r?vDCYn=i+}zq@zK_n5fN z^D*ksSmAi622ldm^`sd(9Yl4JTM!`x#ueUykls%H#d6*VrGURSsprlZhlP|1D)Y~d zDXx}%bhjS@1(jF!_6-PU6)p`bl9qxgl1-lrEEfP^NH+VHRu7VPB>X9?@W7S&)q>hs zk-aCx&z-pu$%Az<@9?Ab=&}Bg+QzQ{X0=8pNjWuTfr4FQv#>=L_7U1T^(?hKpjQeG zGYckT?<0ZS)l*kuum=8>g*zu78(!9e)WrI`%~-W$?PGKIN*eRTRZ*Y~Wd)Hxo-YZg zk#do`O_0yhofx~4Oz+`xW5f7dMvD@#ZbO$pC!XT8xjYC(B}$?O?t7S+h}VL0Vllau zZ}+d8gR6SrG1FXNf6gfK>SjsOWA{P&*b{n$p?o*#J_g+AJ_L2A`#DnWh;ombx(H7a6#g^ls_rv%NswXvArv%~dvuB{A-;X^|c<06g5F=cbNC<%` zho^UaKB)~iKS#ps#_x*Y0FRG&TuY0uS6ek>US8l250Ld^fTHhF-C>rGkW4h@1ekre ziL}w#jyHD(0xR_&7r}%7X3}N5-u(GO{ z*ZIqR`kiHyLc`U3d0^=v*Ay8vf(+XW6iWWc^PVQGWvrP|?#q0J4@5$xZ9Ixc@8=Rq z##cc`tZy};PFAGMUIqPf^|Cgr1SuIavKygG5@cm*C)wJ-?^}17r-g1Eb@&;*SYRmn zLL|Fk)xFy8dlx+%;7C#ugv{$CKaPC`=UM6Tf=`sJFS+dAH%?ZhF59fAk@Os3 z0RAnDp$AFs%)HxEdQVu8I%M0Qowr{Mi&s_V9!F~{QJeXk!AvtD2$|o#bOAP2Gyz^q_U{wq%7zOhle#l95X4=1Y7<+XSJ~qJ3y%Rx;*RE zmN+JbibTV^&J>O=xeiplPp#cr8`%h}6H%R`jl3$;#DLiCvV50IfzWRsV-VtybaTm> zy{92i(Anm8NDgd5Yi>NXzWisk`WsL;ywQo=2BN+Zn*H^F z?w}tn?dOaOa4y>Xt9NFpQQ^(`!9K2^VHH4!HCAGKjEep>oAPYxK0_jBI%q8c!2B-s zwcFetllhlOaKB9wMuX|L$q&)5hl8LoUW~*5P%pJdKZtW<6V7&c3{dH^ER|2$j+!*f z9MCtQ248;p6RD5+1S{gDxgVfq>`Yj_Szi5S7_9o`aFW?edg1KY360!7#XVxxtqNbv4ri?^|Y>Onyv=aXGi zFu?+_UM^v`CQ_iTUcmrjv3u%2{N{Yh-wk^Xz~dA0a~(nGz!j^u=DXzsGCHEzo>iRE zPE~L2c=snkKF$0;U9Tat>yZs;!uOO!Pf>;@4I}5Qx)1x^;&;*4K9TfxwWweJ;mqcA zi0w6h8P5dxzsq9s|L+*kzcQ0D23G%pNbXS6Q9~BP@D8dXF?dF(&_nGH!{U#$c?ao- z3dvK@%vHA1(qXkyhiyAH%{RRCXn!=jQ=P0?n$4Qscob{!GId$zXYJ{CY!`QNImmo; z-!R*7cRjfD@%}{a=6FjGMowd?KQb3d=bt3n4UL_^mZjxsx*KNn@@;fjt$By^J(!!y z3v%(5SR5@>)4r`aZ?jmvrkP~8v6!uc*>uUgn<=%UNvvI-zx!!1GKM{{L+nXvGASe5 zYQf#uPRz_qHuYUcs5pui03ES#%6cKI?^8pX)D1ZJWWt-R7Ru==pQLe>)RfhNH(QH~ z@7Qst?OO@e!Q!3yYBvEZ%i|!jk=Wn zC&2+diRbZmO+wRP5L#ixE8uKs2uK1oiUbmRP0j{NgLl@^m=eZ)+xRx(C%IB8su5DNoERS*6fw}&Gf*m86EYhdHY3He3olPGGxJT@C;@KvRyDtx zMnK@a-#|fW^3)*yd@p5}7yxI0AuPS_Ehee^S((Mu8HAVz?)dA%tK637?Sq%y=Y;jO zf|N2bCz6o?GKABRmPIHc>k~Bk&ojaTJ2}z>I}_?sE2ecZsJW_d8@oz@UX_Q;o-#;? zrNOg_$M8Fo9Rh4*CM!mgQl(p>E?Wc!Go~HT4nbVN0UXMA9dQ&L;02q?1UeI)!6ahK zMP|K&TwrX92_F?_qWuEPETfE8*zT|HxC|;Y>ln+RxcRk7uBq;$SG0$>N@Bc`^(KGD8O>Um8jaQ|E2uR#1Y<-xFe_!er?0G^@m!!jz!d3+HPFMWv_Y`_yCt*4qq_ch`jEBSb zhXl=cqMZ`nr=VtmUf2NFEvXs*BnGk8P*5Q`R+r0%mk6)wRNyiU6xCN7o36fdBvDN; z_Q~JZJkTsmk2y%!BvfwLd|Giv|$e#{WK)|Rl4vnVjM?q-rw^SNO>jxWI9N9zS-+mJ_1#6NmQ!oXHD(=RuX!I9O0LhVXy0{RhMy6#m6 zEM5LK8yC+$v37J*($M;!S6U(4d^zi0;r&(OAAZKBdu(@6Z}(|QG#Sg`cq_6~joCwz z6Z)6mAK>i^qS@BH&w2#Thz>}iE{Ya2g`a_vIrKE;48tZZK0K!G=*S>t9H*yd2Rl`@ zAu-48i;NSLBSeSySvJ#99MLhq1&4BnfJ6z4*TcP!CPl;-%eW&Rq})Bz9I{Yl+r{8; zbOv=)J)sHD7CpgI=mGoAgXu9fmk!1^2Wfb;O*G;?jBSBwVGdk;$@4yg+-NZy#Vdf@ zk*(O}AyZU;_4#UmEFpe(3HVj(4DFQR$ph6$6aY8axu?#*L-laIgB_Ow9VktXWQ9>u zVDI7Y9U3AC)Px%7SWsJxbIh&P4jNqMTmxi$rBbi{eK-&cA9{}rJ#=w%YMzZ@T5&&7 zjuIUCr*0{M_Lh8OXH-DEA!}W-+B#MqP8EttDcGjS%_{XD!VBTNHIwki^|Vo+QY6zx zQIzjvoR3B1h^%yg3~P!9I&Bi)j)K65-cj6po%yCnkbmmFIAy(6|<%TrWb@tSu<&a zd>nYtGzEAuY(4{@W)kC^cKBdYRg;`Pj@e9#J-x+PQxwQp41@~UA;#cgy5J&t>174< zIMw&)JeVR(QaCp2O=FC4PIf!|S;?cQxL5zn&SchftUBqnD1K z+H#P#SMUrvxrykk{Zs^jJDkcEV@w&GN2WieF+`=ArTh$N^l+I!IG@{zZNx%DUYrmX zgD4f&(l!$oCaRS-+!Wt`wAKT->u&}{Eq?!~)vop^z48`Jlo!=>_Nd^9zcgy89!0;>xz9$yxO2hZAa z6S<~DdfzCgB?U~jxhN^=I2XOMDl2BrRgm5q;`jMW`u32*9a{-I!{>N^Wv)}^d194k?a^O#dnsgDb4ek~ z?HIdxq;mmfTqDobRwk}D3m37lrk9=%f+}ciGp+!Gb{lHUj$HzttFP#I;Dt=apIZ6OUmUQX3}CJ zZj(JpK_c?)A1q4SYDaE@FBT=^-?AwG{UE#l=WYClVo>NG-+ysA{;S&;Dc>gBM~}io zJ2iEKz-0(du#NaTv{u+qav;W9TGmp-Hd2QJPSHEk7k(=rflU<@m7ZSxaf2v3c;a>F z6#JKF21yG2-UQXh*-9i_lofVCQ}5M+6k>f{JEouY%e>`QAfk?%@LDMeVv-?|m!D8j zc!L|_8bsNXQC*UaIK4^pirPk+?w7AeN7(1i9807KuQgKLO#4W&8}S*glOh>3-6m!C z$F2{9$|OZaQv=aMPEbyxgWShd^48~%nRDhr7fG@y(gu|KO%b39V0_fBDOCe=7t0_hU!?U$)oI_KV@>Z1k6o zPsqU9+R)%XM3xouZMMB%o12U_(>>GRGsUL};tUnsiiU!VK;pT}YUtWB z>67Y%Ct^OI2fC%;yhJ=NMm6RX^ zxOII~Y(cY*Q6*oHDjPM0p&GSqT`pN_Yj}kJi140wqJF49tlxaiU+H9Ov+gDJ?eDu5 zaxwi1MzRk(#@gfG4>$Qffb73_^~?LqgBXA|lo*+N=kO{c2U!*&GeN^QAJEUio)lfc zFa)%=9uk$9rPQAR43}q;07H^TMSV6(EJ$hNDq>Az{k>s*=#IbVBn|&C1LC6{{EJnB zqohc z=H%;^8N7XZ|D^tQSZy4h!d=4bp#`m28lO@@%HUgY6U{M0UUVO<#TBTx(U>%KW;zFs zzJ_5_TANeFcmR;xHamqk-izzdKk+}d+n?!z+AIxC>EDPcnJy^EL^9#fXcLCQ0m%FX zejuE}lba6-1li0`Xk&0U#Sx&s>zrngtpudt-e<6l;s#?>shtTzb_Ao~3?c@VnA*>y zL1Vf&qdM7Fu$OM7h>wX<@K|FQ3aE|&D2_xk2$Bwm?3)yAeV_R1nc1!c-4t1rz(g7& zjAY5bg!=USK$E8ANXr%dG~3Xw?+OJvYMAjBqHqxw<#&e9gtBypTB0cn?7@9h*%!$rt z8Km`X1$v42nUis^97=ykN!uq#;{#Cwy|XBV&rpPvl)(V=Q`yS;N-?&%CPq+$14$c= zjfG+=HnC`1yKbj=OpE{F0d>JW`mtCM=W+fky!a z+(>qq(Y=7hh56Dw>imeCZoLL9#uzh=P<{$e!#u1jNrqSzCK`8}LoU`lt;N*Q$TMAMA5bDaz zz0AZ6Iv6P}{)W8xG3U;UO;SO}tz|7gvL3}idm4R))}tpD`m^D-KNET1`U8*L99#y1 zODib>U}}kNT6j^G(4%R^X$y^$0j1O1qL0bI*s9>1WgQ83=*%=#RS+;_WfcSfs}%@m zdnT`5@{gt8e=2%k#uoCE;NP)+RL8~|CA@zvGC@G z$GPNagI*wK>B|>M$FDMy???)96*iR$k@!tQ826FXKZl`tjl`7P(C29CGNbjd!FbI- zv-{Z{e_jq+g*Z-^URr3iD`;c5B&UXMkp&qgn&2jCR0Ru}Bj^dx`$}koqMBTj0OgP& z>xmqt7Bra=D+t+Wy|Jjj$qCzbir%sHdy7yn-*Rbse0WR58E7v1nZ{+3F1xf|0JWI| z*dj0UQ+bwrJMI=lC*PYz>naMI!E?v9yfo!ruD@3*aY=QV&b^6+s|R4r~DM&M(5YW;cSBMhY5rF~mMfiv0^@$N$$aNh-avj%F@}f*-OmXZUM-1u_EYyYZ z&>ao16v@ttB70^99VpS-J?>FiSp)c$VeQc-LHg7TEx5y#9T1qH#v}fbHx7f zik~fiNgw65feH5uu$PG(kL*<88c%YG4*3N|)Ou?WhaUYTXL6Igp224Y3|Q z27IDJ>Y5xr#*bjy7=cPVhV_WWCwfX$N6xmX8DYtdB*n}cff(KI#3^O@+vZOE47O?~ z6F-tGZcsyQs(AWn);z%11abu;-h*JdE{0%-?I$pnm!RN>lHSI{ejV{)96;Q*eXSE4 z7VM|*L#C?X<~%-GHvF}CZOMQUch8}-!cT#7wK?y|VmHxq*Sink2ELisN$2T*lEQUx z8**d65^^}`e-|r-{cjn;{}M3~%NsZv*q8uJ9Mv4ZrkUBAsaiN$d__`fjt2JjUvoqL z*}wIli@t<~7WVf4$zA)`;(vx+Y0c5R`qtH$p&48b(6$Dm*{E<57JC4E<*-R&>UK4GJH||QtI3I3xDOcS-k5=6wSY0Y= zn`-UdoFw(q{5#aYT(>SdL+Fn$x2^gMtM%`DUw-}1pW6RCuL8!#Ux)P{k;#8Ks{?AM zb|@++pX)Adv+J2?=HGSPg{W51fl-B5DU*_h41b7QQQ6s<*{xF4)s2o>+aUfR@4O1M zV_?|E4uyoo0xb=_uG5=K3AsjP;obGo&vUytYqV|yZ6xSFBXv4hbDHFNboDvR;L84Z z-5&b3usi+@O1`AKI1j=*C^5;tp;JNauF$YXfo318XgkU>Q^FurJ$wY$EO?8-fQfuu z=lnIjNeok+Im8eI1wtz*a@hE3r1T_(t+*_Bb4aJsQf&b<5t zG6$s&WlWU;+yo{V>ERce+!46BIuo_p5*i!JI@%fwl4??0i3wKHlK7JvcH$kbl51!jFTrk&5pXqYW0%gFl(uoK#ejdssUb*qaH~ zLaP1Jm8rW0gH)JSp@f!y*=q&bI%@ULWZ{C*Fgjmbi#beEBa5YPH%CIDG0h!v5LrDN z2KcE5?L(=Sl<<@Eo&BaqSnuyaVWTK@kEM>`d<_b?U{yVbG9)2{Dpgj_56X3PL~*z{ z@$X$=O(mqIZsK{DoREYmCNbcs%$(uTEFW3Exl^KQETrb?^GhsIs)521iWLdSzqJe1 ze#g1JZW9&hxYJ@B&U9!;a)Gd_k?pCVEc~>Aab~(1l^>>os$q*$<7R^63IIbuOjBO_ zUJA>?v<08(&}GnC%j&Fc1W4!MYoA2HV=$3-{cS!d3YKkzgA^cGKuI}YLCI>sq#`8w zOLi2;Bt;5km_QvOyjn#BW%Y=87?9V95PWhg5g!Vf`fFvXGDk>+tWl3ar#O8=UN&Hf zIgS~2or<$Pv2AU2miE{^IE)s+go16`s>nF@V>7`TLX$banEh*1?-nmAmkEwZ3uypM z#XNziwndxP0A6U)Bw?VR7tHAmJP*~b&{FuTiv3+->?MBq?_skW(X>Hj2zM9C)J8Hx z(Jp~*aE4z3pg~~-IQr_bVyVXD_a}G4;z%iLB>5^lP&+VURZjkrL#zhGYI39_){0{S zDdNMO83~!JRi^UuOfuebtMO(lHw9*T(C4vO=GZnZM5vd@E=|(RhH_ehhoVKnn9#8!^V zFFN7c2W!=?{9%45F&XGbgrcQJXmaW&$=;&vhRInTr!OCPiV)StvMo>J;cL*x;urxX zJx91q6kw0i-d}zBa+73mJr9GX?Yjb{OQd@^O9@#frS|JjJ0*P5j8{iWCu2zM&7iE} z_jf^dajf)>Rt0gsocb4@>NF?$QY$|Gk+!T%qI<^#uOPz*4#_2Sdx<7y9$*R>;HTCgCa-+$-&$$8UA3bZB583|Cq-T6W-(R`Eamvf4KZSj3 z=KuCHlH&~fMg0j*YUvR$`u=_XOl+>sZo1!FFyUSL{SF<+s0%6CC*S`a*Dm&r^%aa@$hgM}+}}avW|}2=XVQwrZ<#Gt8=KGD{i@Qp%WYj00sscY&=nRZCT*)=niiL$bs~+`(4N4wH0VGE?$XRH+fQ9e zNWQEUsDjB`$1HHaT&D#W8;+r=Sd3ATslX6lbC~rIhPCTAKaIN^_~T}aHpM4e*RgiG z=6W92=)C&VrOK3I=Z(64=WVF$_`xTvM|Xv(7TC?CMy(RDUW6nrl3si2+h0B-GQn-2 zPCeTKF=wLi9HjyjPId1+OYr5m)^fWtg82A|^evdC9u z(W(X7J7#mti_F>dMISL6p<|7^=ls^~eWNik-OY_VzUM&M>d`z%XaY2ryH_ea<1r0{lzXUDQsP-JjO75=267lsW|3UuOXnRw1 zF+GY?sbhp;ZQ$eqS!qQXK(=xFWvMqX1F$Wnais_FJOwpk3z;)4bAQ!;fm=##?9YJMLuE0&!VbNt|!c$0Ur%vL>eHBP`rn>ba%U_#RKa zz9ihOtn^$CKqz>7G*`vmdqot*H~8Dm;RF(ljVycX?BGd`-sSp$c4w1-`OxYmj`S#{|{|<#J{-3r^ zxB8{3K7yrI0iIW&kx8(^3Vk8hV{NipAh|{2RIC02M{mp4Y|rj5uiGYCg+=Ad<8J)h z3D+Y3|6g-@@s>eq;>(gsT_o3cg~<)@FsPPTYyMo5CW z%UADu_sjMDzg+0i&o$4XLl@pRazxzyl|`X2Z7`G61Q`zLXDY8UFH{1(<_1HBTglNM zW`9yKVZe9mQnUw@lHG@8TEN_;|HK~*iR4wFo+Eyi>T@e1!VFcIFQJ!SiP7kBV?e4g zyAD4nHxeE1Kmp`jU|zvA`049BnP>3%EE+u~?J9m!40slvNDq^_;;R5^o#1q)oWV)kMqfd22u<= zBTf1CVCJF)IQphiZO#}t#$l@&Va^l_S&ue-PqAUi(BFpMD`pBZAka;$y3Ax4w=BWs z{L|doKdfd$k0+|E)EV0*Q``{cTBjdYp%b> zaKq7vd%eZFsE)+rO@~v6{20oUmWrqo=WuLh7?dG@AVqZ-QeSc%j`hFFIJ$E0O-pkw z*aHxjUA%;yt_f~;UHs&$*;=~_7xsxc379&e@ z#vb&^fob){mJBd^rqrEQblY-{6liJ=C#+^rn^NLb2MdI!m>S;=hPolpav(jBK-clsj_+FGBETLBQ1%=BbnB%4)(EFKNbVTrj1$&Q;f`2N= ze>Pcq7;HBaH9XfU_94iP8N*hD-~6#caJ8noHH+U&&Cp_6e?lI(LO22|y9<`*RYc3* zZ)ze}(Ndhb&uYN%eb~($H4w&_c}gqE*o>O$G5s>vke65j?BKgk%ujPFuy-gqb$Te>yY)({KR>1}V# zo=Op?sI();X38Vr`VRBi@EoVSC?(uwyVpwtIM`++kVToZQHhOTfaV-$$XfcWRjElvXkcz*lVw6?R8%l zwCDk(uDGNv`$TA*B2XcIkpB;_KixVY8#6ALcxGhPB7YLE%sf32bNIw?Yi>`R?v0)F`1 z`&*@3wF2+?BvQ-0F})pT-9VAu+L+5^)zVJ`+>l(DIDRRsSued9jUCn+NxjEfnjF^l zE8^1BgBzY#FczzEt8nDBBrFT_-#o(x@5>U>Tl6b(uJ{saJ)b!Y>j702qs5PFpKph9hNip7+UtQiAU^5q|NW`Amoe~gr6*ln&0+DvRS{n zhFOeuR$^^xg6i^Uk)l74!w72TZ-$I}`dH`^O*P0OAH@>CNg|U@Zu0bIwLJaOnWq@f z;9%b$bR;L9bCH<74dy!@@fIiun@G-~M>L7%TqM%TV2y+Ip?pP7__!{M;djr$(}Y37 z5m3Ip-)9SbXZf=f#T;X22zpR4FY`)BESiG!s$@Gu>AZ#Uu^+=Feu{s3kzp4R*7!rT zt%m;Db4iG$4d?5zJPFvn$BkaS_5I0yUFlI_jl<<+bo=>+glN%*H9becu7@)^+h#Qo zvNEU5N9;<$sO}b;MzvXfsfNZ4_S>aE5}Ghyao;``rRxV=Sh-KI_K7!#X7BNwl4nTU z!c+5t8-n%*cYhtL+Z#En>PcWX(#d1reF&<2sWmp6PSeWrRF#Id2KWSx=7AA@%D=(!c87>#orgBjvBmjqpeX^8Uzm`YFL)^LOPTBi$U z+$zTo+<25n(0>WJ7MXBk%&Jp>R|s9FB;vDt>O02v;~9Uc$#Fzwh}8-Bj+?#$`? z$nXNfPixNFp2dvRy0TNMg@f26-pI&AWO$->Xh<#7IiRPcL#Hi&0WX-%nU5+GxyLCi z7l+#PVt^@H91!6d+Z`j5+uL`_&bkV}R2QQNQvoD|Z=iln>;|N_vVH?{`CR4kU7H2dO39L7z_}H;i zPWvG=hoY66m9kY%o@jXG2#jTSZk+DUfXte;+L2>&oXkLr3V9Q0gc=)4Lj4Aez_&8W`8v@^6JDGj_Wh#!tK?% z`z({eEzOrKhn$J@`>_v6LVBI#YMS9q`Wg5(Z|hS2_b1wm<`+O*{J2EU;IZ

RGv@u;v#^!)Puu)nyGRypXwqgG9>_zvF&JbbX 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:`PTJ>iPY?~lwN7WnOMGli}* z6*kk8cOXuzkqlwA)DZ0P4w~o^?eU$yG0`vG>P>zISGJP0n;t@*AYKZ1{W)erw{E9L z4N6WZsmRtyb4{nrck>lej@rh+X_NV-#D7mW zhdoN?8!0#5E9>Fny1cMM{GPY`AZQcb)Kl0=75dR16BrYinJ#%?lRm~_s?lGg@o1pG zmEGNuUUsPfd^+vpb{sGoJBk@_d)lsGXcpSHkYnH-B^(4Dr{bWT;)p+?IRsZVOAxNs zVXxRhc4|)0e~K8~4ir2E6b#&hCp5cI+X2ZA0ok_fhad#J2Nc|!h>GYPq=hi#QLN%p z(*605;q8IfY|g>gxnt&UeMBVx^NynaHN!Qx`fGyw?;4AmjLU)~;>U;+aUo?r6e({y zD5PO__`oZXLm($8EHr}%e7oFvJr=Qza*`}sK$t*Z*x)79fRW7%YOj@z4=II{t+Dd= z5be{Cj^4|YyiA8rzjuf}IofPVqdvj)0YU&~gTphAz0an@>WunMl=Tp!YD!Pc5hl2^ zSMb$f9niu6BrUiE7+hz0g$=WE%RLFw(`He;N5wcvxo;=^dluyRYo5loG9bD>iKx07 z*23kI-6qrcT1|oTS#&L`*rJm;CI=~o$b`_wNMHnO#662@h7lUnff;wg?S)*s6B))L zr-I+o2sl}k0P2FH8${pXd5QDxIH*iYS`+cc2$#umaexWeg0o4+cKkbiwU;p@co-IqjATuq8uUHsEg`pN`13iZvs~inDJ=5fs69CzR4@UsI zB&h-l5JTg4)3l_E)=v{_is=D$N_R*2U`w+wha+{?y8FT3Jm^Th!dJo9IKfzE6~VG$ zleL+-|N3W&6~WagI*cnALBn+LSc!&k=)m3@?!=s-L*OE%2qfOSt6lqmrQ>(zny10X zCR6W#;doqH{&on8lNzzUp3eT+h4NICHJDmG<)0bX{69U#HbrJR8q|dazs_Wcy^E}k z&|zRv+PBN6YE1!kmixr`+K!5og_2RDe+M*X7hS&BVxf$G^gQd^MEdB9%|{Ly zrurFxlEsG?K*DvIayI_Bh3zT?DHBMEs{ob#u`br(c+Vo3RD;X7dT)_zN(up!-~Uk> zk7|Cxhf4E!z}#I88c5S7?VLgX-6nK?8ZK#_UF`|j1msH$=Jai~uK=}YHy$oWe$OE0 z9j)=S?m+U)Cy+h`3Rr$V)2A-P7<$Etqz8|OtyOY64y7}h?GIryi-Dy@9+mAb?jQu_ zNxUS2?>e!Jb;fVPpSuc^iCs7=$=KZzKZq`e>#t0D;AoO-LLodukBgb4?tsy{MiT#- z79+ezMXLO@j=TOgEr#+xSjTo>6g+1$^Zym%_)pw-|NFUrMLsK=nVUJA*_)XCb3kFI z$OAvX2CRnb}2FyBtX&K^FUbtDig7A(R(ttXXh zf9o?)3C#ClL*1hBYt(Awl8%TjQSew`JhURI+bM14-^CTP18Qm5@0Lksp~IE7Hyb#g z!ehN*tc0?1W@I%>Ht)YhKJLYcs!5|Ke|Ru8+--rFj@|p_mUTO` zxKNVyebh22>F~QLf1}piV*RLBp8LO{Aq$u zX8P>rGxFSS6Fn=*zFQ|44Y)VZ6>k$yU6#^Ypi&$bdkwx+RN_F7wum?bSWiV!c-B&p zUpk7zGt=ekg!u8pE=(P%S)*B%9xg% zf8>$rZ_FROfK9EY3feB{#RX!^o9OpoN3EP(h$)t`={ZFer9>Za|FWO8rp_mw;<|&K z+~f)~x6dKI6SLd=&J>RstA*_%nIxE2b4za45^T~IsS_9loD)MzDa`Xd2DG!~xO3b^ zrIo59q_ZHEPkZdn>5ir;xjiUUIt`We+mOib<@Oj*(1yp~odW3>6;V<_rY!l1uW`*D zNsfSlNGc|#u(1m7@!2vqu<^IyRCLD@#79C)3!si9BgP0U&((erHh~woze*SVT3kf- z>l*j3w2FUUy8j7p?q5q+!_4UaUh%oAIu2jqar`KqPR2RxZYUJ9GV(g~Ehx6alqGJc zN<`FR&X!A>;(K;o{Q3%w+j>*eO@@-fsU2%RoGcY4#4 znY|zH7ard{A!B(b1<4`SfOUhkfT9_GC06;&dz{U1GmJ3-o42OcPR0eww$D%Z=LBY3 z2xWQyxst-~`HpXOi#IL;e~W(32Q=~PNUTk~gbxA6kqu%6x(;#$j2F5|hX8cCfLTcI z8PLSQcZmxY$4Y&j%qG(~dcj4lK6D3c&#_bZBQXRA7(1P4jf4Ao3rYf}PB##_im^Z@ zC$YrYY+VyS>bi&RBPekG6Z5lRzNKAjy5A1S#$uu~Pon1jA(r+2A|5_WeFnD*>c*o| z!7|J!L2$P|W;V5hL{FGv*DtQX9!|#(&1ez9xHj6~u#RCc!B>?({$9}gH|51p$WKXk zls%_>j04GMdVtfY3Ov78&jjV5BG>#K0LL<8MbUKj#uRmrNa-i2l)7SmDVSUWs62Fv zKSpZ5;sVk$U^s~>%>tLBz}vwU+tV9+8_}=O-qeYX1pkgHZ;tE^MR!aSAFLu81RK;l z0)JFu6^50&IM(#l9P_s4d%EMrn8fjbWd=V`EslmX5A^8MW;E`>3Q^m+gHOWz;-EStAH>PMyX=!%@nw`ujF3eF#&0Xc@6)IUUeJTy)w@df4o2JIxlX4lXEav1L z1mlZY6|;63l{}j?_{-aDHW1*;JB_9*+E#*_5CISZ5y0ykugfP&o>Iau{JuY@P!Xp% zKk=&a``&65pE4;}6pudD?1PLN9777yz7G`5TcW5M;SrwL_5Fa=oJ2Vd__iG5uAg z9uPEO)3&DjxsbHQO}Whl^k(v|)=-&)4O%nH)i(IkCPpc@t|RMq+6fw+K~ql-EoQlD zi6J@h2|}7H4ihVY^U@D2KI!2m;IEEg)XQXA@`WqH{}xx^{5xD>?PhP~`oDq_|Mt@B zpO5+qVUx3Ru`~K|dHYu{mE6=F6&y9x(cT}Sw4uKwsNjZz;i`uPgN9qQ&5)v-S64~Z zMCJ;Yw@GC*JJzZ@aTc9&ZiY1sd@B&-Epih1Phr@&51tM~0sx<3+QTj!M5M^ncKGfJ z)9+uVD$kof4<8RR@d6;62qeKGmMVzKb8(CX4tlnbQ^@X0omn~@xBNuB7VD(~3YIc4 z3^cz9CpqnvXtDz{zPEtej4OqG$QJchO!PJCW zqww#M@6)7YeFn#1c3f@kmYQGym2{fw4VU-mAQVKT5>O_QieQ!>HhGOBNhwfR<*>@o@*lIxX;7y;-?H$+E2%3dDFL5yi zA^d!KXb z-umy^|E;PAUU-~y%|1r!{p+o%_H*)#LWKi6wF63GoF#VJ!VXBagP8L*XnpFa zoW~Hk3MMZXarlUPW#)8@<_%9ZT@rqc?T~_@E7NS6^i28o9J635Fuk=#YHaK=aZXb= z=j$uiK%?PkG&GmP#=3SH@u+4(2M20P7R|Lzj{Oj%VbR9_!J5vZoFs;84rK7 z479CqTM{Yi>c1avz4UNSXEC%)r$vXNpg~~)>dOaVv*~`=B6pzPn)t2 zBl@-*Uxk5CSzB8?pHI-V)SqGtu0!7_`4VQkE=RrCA30DDaeehIqreDN8o_kM=#2FW)&lIf ziBxj)Mv*q;*ri1?=E`wJB; z03JaN;oEn}m2UzsenQ_I(;@H32A{n3QQ!W`aO?vslwbZRLfrq@r1*~kT7OrLe`RO= z8JHV>j7FvH?5teur7fJCO>F<|LtLPCq=X`d^3F;VK|}n7NT5GHyLFUNSOgXUP?-%G zKKMnHgt6Ba1f-6+nOUk2!%-Q|X)rn2TsB_vkrdyMN>sd5@i9)4>YL)&Z_hh$-daW;~*mJ9ZJ2Hv1CNkrTr^Y%zC6zO0cMQXv`D&;c6fXs5sM*P1?ec&V~Q$ zb_pcnw}i4rQ!I&TRrbZS|8-DREL-Dknx!Q%j+6ReDRLNtN%fsRd#Hb5K* zOiOhA@`8ng`eY|rZWH&-$SkGcN^(L1BbEH#Etjzc=YG56FUmFJGS-#x3en)e5z6>O zBdgMNL|hniRpADqopjfGch$|VnJ4CP=>7OC=u{FO5+ih1<^*GUX7SW{%#>QQbYpC! z;RPBa`a8x1F-5wJT_w}GePMmJ-GN^7*eR+!*k}g#A0%jB@wb(F2&E)WNd;93wq=N1 zcr2q1d3vVqz7pZl41DIH$`Kk6P>^rjn-ew;DV`n{z?&Ck#rt6&l0$@yVH6h(#$)>s zs~6GBL6oC4pm1vpRoJet{t>NS8qbla5xkL+ToezPE!V?{IoL0eK#!I)i=kG*=ev$p zOKt)>J-Nwb?teckoZ7FDhcV#q&+|} zpH!q=)0DgQQ`$y1;J1@+*fO>shfcb1>M0KhF-`A9ivGhYp% z!aD$C`*N)nUF3O&`dN4aT5iteah!otPl$5x*)SFn?<_iv8h!dCfa+KNeP8}4-r`|` zrsu^y+|et(VsWfC*mw)(nnloj~lHM{f)sl)iA}45yid1O$QA&QJj+Eb< z`JJvf*Buwgw7J@pZ?6T1FJdhsU^6Cvrk=3f;=N%*)>IIb;a0GuroMVd-;u0puBspU zb|Sm@nW}3vu3h0Fpki+N=J19kQ-F_cQ-cQrcyL6O8H|1?m1JoqO`DYoHgPW!=N>Am zGa=h`)(Wy;)(U&{gZP>0^+ybwKDTzU0HRL5ZcfukGYj38N*89k=yIs6JFXpx^Ll{~ zohRJlxDo4K56=SALq`BhFvOSN8-}xL_G@8PuVJEC)^35W3}fAkiwx1Cz!Qr5pSDJF z-VFwD&vv;aZ%pt{D+F!MoVtxMS=mxpDg2ae#o1|#qAb~1GR6IPr~J%5cexq4_eNh` z*3gb8Ac|F7IS?Pk<(Sv+j>iufLCnmgzcyt{-Y=+cDMS zp_Wi-Y1gZukUB5o3E%Y_Zc*$f-yq+QxDNsHpL763eY!v^jJ$3rU>4)lw&q1@Z;2I0 z%{puJph%1ygLgEdo+Cr>mDN&)CTk!38kzSIp@g=WhL7ZK2~T><`{K6E;jJygW;MLG!$@am8)p>ie@!(qLm1%qM*u;Y}_|9zs# z(P3|!egI%I{|JEnNBi#oK~BBb=bv=ARK9yVof;O^d*djV8@Dc|mfzs#fYawQG~Rr&$n zIy>w1o2cGzX3aZN#wv6M%>L+U_-TSuPub;8%XigCI@%KtW_Wp=`?N2=)R!E$ zJF2yM<7zGE*h+*k)4x8ZMYUKQMKXXPsxrh)cp~eP#O`%TdX(xqK3L=uVdQThyalsb zzf9*x-rBX-a^k)J{9{Q`D{F=^(h5+M3Q1*%F=^bo*%6;z*Ic;;jN%+)Ch=OpL_*PH zN~4tm-ILKKIzmY%8@4-Yj^qZ+%B&-J3|87db|<*hCLqNXvoXKMzGhM%veGcnz#k5w zRxC~2p71fe26_MD1=_Ed%-F_@%%ZiP?RVIZTFNvGme^ZGw-%Q?zzq*tqV>&V4W@K z|Dp%`5v{om{V@2ZYWhrhy;>_-s4RKJ-AJqb4hka&;(_*Fq6|BUxep<9vk$0X3R21|A8GI*d#F`!|ou zoSW>^+-I45q48?}N7+l5Z)v5cM&?DyJpBNTQ07%o&!48P&2I^qJ*Cl1m){34Dk`S$ z5#%h;$WJgEDF?^w{)o@oT4?glk9JhsKdy0#{0qghkwDwncAThnklGkQ0qM)qO3CYdqG#7&wjZvgb zkFQx)c_>@M{&~)gEM%gQT|e@9v|UG$(^ky#m0nCd{*(!2rq?!<(>`NP$^k0(S6Bs1 zxJ8$Y-${X674(i7;d4ub>2JN11}sv;H!Afb+K>>P8daZqz@G?wdeBg&Iu>}k5LWaW zy2Y*X(n_&fRc@gEJW$xPGUc_8$L05rt!c*pcMtUMa#NrpqqZW7(ryG`YD5l^m?i( zWWI=8Z*|)6VV>D|$9sX=WL&5d&*>H9ik5YTx;-D_J#wGfa9m(>Qzk_@Om*~O_okX+ zWb2rY1hmi^-wYAbGn9<~P+I(;Fz2F9f=3=^oLp0-?a_S8i$xDDzbU8++T4MaFLPTp z-r|K452F7#hOJ8O6}eSE9N$5*_B)COGydSFjEg~aqY~jvD1rxmH-#N&V1BJ-K?WTW z)}q14lVJ?t^W)xCpMn)}6?iZ&nu^j$s4OaVFh*0epYLhld2-OnK0t7oh!;QzEgml| zkKaF}WQkS`K@MYk=0ON`R?_#ie%T3XvX|07Tw*KZ(w>v)T%H)xSJ&qlpq&FecFdSI zF%+G^TC5UK{$c~7cvAvRF90_qtn!_mhd``f z`Qkf>nH*-*zN+yqXYfbnnTn_%IliYK+t85)+ALxbrk~kCPJI27GMRANs3D)A7D3rf zc1F}}kX@a76e$e-wYq4i4iCx2lb5F&C#l9px#S4-O4d*9*W&yAVycS#eC){rz2C|V ziZh-~zc{o?-$^Sk*yn=Vr5ky;-ClNAIFCF`*p+#5A4xaV$oRU$$jdM4ql1Dj9x}Mp z=FxPa0hzcX&p$wolHYSsI<3Df=6yx1fO~ogaxe+Z?A5S8Pk(^jW{pG<<#g>2=ky+7 z%mUq{8{lv=!f~a31e*yo>Z7kFBfEI@gRyw=2IL_a0Z1K^yGRhU?#)A&TI8rjQiIq^ z*wgbKf(?JY?Ye2dZGB?@zLzznRvV1;?s{6JM)oFn{>kkV7jkEhr%W-*yL%FYcxpiT zw;1_6##o#|zK-^h@k+*hw7e%wmw@$8JGqBx!gxI(AL-iE5slMQiG0KbD1(zmu=tlh z!zY?R5zt~e039Omiq7T(Z(rx^xI9w^de!5_9{inB`O&XTK2ogsqOVZ1`aG8#O&`k{ zMxsWC^&6m2>ip$3R8;zq$rX(%TIDK4B}=4@;57?+LdnQLYuDMeP(0sfB%g@JqR4|Kr>9Ro z#hL3VI)wZr^wIme{<-werCqpYKH4 zC@2AbaWlmn)AjQE+OG8w^a^6kubHY_iKDhK$rC|0U)VMckNMmtWU3$zG671dA_8Gy z8b#l~=cM1a=xF)2(giH($lU3wSB0B9WDU#NoJ%$AsH%`yQ4y^6|NKn|FzV|m4p4fC zF=)ZhAh*$D;BY{v2Ik)D+13=_u$=3EDZ&Il5lr;P8wBh;a@x_G?8it?ZW6xetw-mfKG0z-rU3r1E5EtA(#wlRhHAJ zEnpNrg^rVz_-t=-*)l9Spbxxy>t&oXi`&Lf>A=j8Trxvs?T}Ftk%>6x=p9ANR=B5a zy~HwNFp-X+q7KFT71yU>6KU>XKlLZ0FEn>f5SQE^8Hn0Qgz>F3v5tY6vpf`r# zUBBiFE|&q%ipfS4lPrvzz(pdZl)NYbs3q}DaZ6VOR4i2*v5}@%8Ic!PeS#{JUuIrz z@z62b0N6w}9mYHf9+CUFs7D9q-7#2XhwvWNN8#?vFukI!F3#u|PTDILp?LfBo+_6J z!lBQ;DpVN&Gm(QefD)pX`v8LzO(|ODtTV@Q!f_mi(j@%snAvS?{+DBV*zs9F#gUZg zB)$1PNCm{%AW-<7|(nhhNnma3@|G;0CyowGTIUnwmkUeD{+;rX7d2ambGJ#HdNu zTc;h>1&4)4w?6+ER;n6#0D5EM8IneN^8Bj8Da{9P|DSbr6{SWJmL{%FlWHl6DTXA(HRel-* zbC1|!2}sa6RZu->NRiaBf?cGL~)#sqo zb9mb;&MYZ~m~TqTtximJw^dM!rg{(%-PP)DR(T_IG&lA+)eKjZ(?z+3;=3xX;4E+x z@Sfm)Wm-6{5PoBC7GPsZLT^5j6}^PwLUArV?9l-FMN1-pu)8dGj!z+kR|QT7I6+U8 zJ)pD$hCMk9!ieh2MFPo{v5Q7-SA$ZrRQUVhACM1dHm73Ek zR{(}j=!1_MmyngRG&uG9A%Byq*L^-)6x?lK!|6DeBwq*T+>0aOw_@rU>UQ&@!aRgcsbnh^T1@YevUp%MhON?g z@oLYX1QbwCHkblNx0YMFhZR3zqK2#ImJO5)xho^oE|almGD-JYQn0=+wzrvRc`4d4 zcMPyY*HZns`kr&J+sl-`Ofr*E0l%9bsiHy|XMnmvT9p92$vlw*lO3nAMmsq_GjLyCA$tHVdl$st#%6otQ+BLp2Tn=W zXsoX?2C}=-e#LC-ozk$!CwIl~|}_5-20NsNxl*ceX}G=dNFm+We~S2`|!p z>~%}24%3ZbK(dQvP%J$o4N4`Kr%%gs3%yZykh1G!!C&2>$_Ggq|6V8%F?$S4ksKrY zd$vPx1bT+1EcZcTEknF^4=wppcIhteLjGmi?K>DL4XOq=|>2}{i@TX_siSOEBW^#cSC}pP?{OC zN`hX7y1}oGqdOf&?PnKIT1>{7KRc+in5C6Vwc?w@hG_uEN(`7-0*C4WUF&Wp`ae5R zawd7L?8KoK2Dq`jh{9I8E`|wEK=;6+hy{TKcSn67c8ATr#xC0)S`ZD&B^JmYV+oSeaK&Ayd05azx^Ae6 zwM8EW0nSqgByrCMBA$soC3sI#h5A}tD0cI3Oyo8aAlz(;goqSWQ%Swc5Uoji^~0m% z@jaMnmx$1-C{VjpJKxwP+@PIlz%&vhK{pSGd2O?ZzP6Q3-y^erZ(cA3XMJvSHKlT6 z%t-5|v%S=|s*2Et3$5r(LLH!nDfHrSSIq?uhj?)#{=&VD4u%av=oXMchi{HM5u43T z>~RR`v5Mi#3qxMcS|o%;EK7GD{C$0&Gu3R@71YooCgtn_ddfYSN$s3xWFNJE>FImSHmCL zg%c?vof~N3ua%qVm<}{qg{UtWVYDd`4C@2oksh%o%5xaQPhP8JRXrYTzB5rK&bvWl zv89c|-byXbE`23?JjPlS2BB`@TT9LF@w%qalVFW4^AWjHdnxkS>;auW~KjRB{J zIz(;wt%*)IaFo|Wx(1GGkTD#_qMmw1TyDvU+0Gd~%v4{{+4<-AkGOWa`{U`5@{ipY zy8i}heWl*FsoX}p8udaJsFgn~T z+{kZ0@=y3pOyHd@@g| z+)Erg+s11G6PgU$;WSJnEG&YC_Qag=m1i35Xup8maOUX-nRFa)rwUD>*PTs0FgSeB z)qVJ^mct)8^^D2(+q%rMzv2fD{m16vq(-Omw!nViP;luU*LK%fcvnr3SaXVU4m?P6 zw!VBX0usQJ+s)OTLRUp+B0GpSlaa>soit9`*iF3`k`5`3V2YL=<%b!vB9j-F1174` z$LLzS*F@VOIYfFsHlXz2s!RJI2bTj?-~oUxsa?)((BA;(sG5QxcB>3yiqfezB0Sty zYJjwe0e<#f%l`n3*5q8FVAa!8D>4vejm~YnPmIclS}n zNWK>PXGP>HT(5E~bXmed8kTcD##}X+k&vBK6!MqfkXW}|rhd}fZ9o<@3~)g@&GvK) zJ3r4Z<78W_;H~lZ>}S1FCH;`EMUDs%wNZmk^Nz6)+^W-w!nZb~wCaAy8Q4hO z5sl7v`ytEgiEj#$T#)`bE2YY-AV4=#rG1kf2Ftcr3otk1|hLd3P(rvdbFDN=jGI&2|}2gPI>!#X9dcQ)QHOGrSQLUz-4LO-V=0 zb!v}NsCrFrc@w!NegE41QE5i*UHt>mef0PLGeq~_OsoG5xhR_0+c`Ra%&Y%=L;vfv zI#ESSX_g=5t&tX75~0uW2AXOL&HR&{Iid)t9p!|2-*i*Gjt~KfbZ!3?{^M~(S1~i+ z)25vx&ZI3&zCUjIgf$zvSH}f+67TEd^NHK1rkZqNfCDTPE-gp@RD-RJ7SPJ0@hZ1| zV$^?YuKeRuiu&+9DYrB?5ib!^*=hzJxns8(a^;8%3bnzWO|d#3azx4kF~3$v%5=7E zL2lUp^_fNfrrN>;BVVl-_BbQmxCYsBzk`Mk0^P=g$I#5z689gY(4e@E+m48`O((Ue zv|G8pRbd{f-&3_2gozY9TT>3cK06es0`lR$V(4So<;qBET0a+M>t77YJfPx{IKVml)Shv`3;?|LDWS|OhB6^> zj#Hw_%^=Pc1(tCzn<94@#VV6k9yW(r0nYl!dvzMwD65r)^hFS3?D#?vBP_*Fh6qL( z9y`62i`;zq>E{rR@-E3KbW9s?cao=KW(_`4Or4FC5xse_L9XKcB;$am!0-ky99DaF={; z5u(Bu34-23;YjF&yAVe8brcEjvw=D62|1>y9Hazs(Vi89}$qHzD5g(suaR!OW?Wj?s>{Tqq_HFuvuV^j87RIwbN-uo+JJ89v zg`p!n+!#C8^PA`*9gy^!;FVtPJKE+KD11Tm@ruu>;zAhx3^OR!suq~#H8|!e1H5A; z`sDWb@Zv{28oxnCg=%SH3Q$kc3t4z_>80GY)!J#^(e^w_Qk5h7FP|9jB~aa>W^9C; ze}mZK%3UVJ?4Dz0mgOdov|j!d{N*+ZQlk7Jdp-XVdHZid`dz^Nlw3q+B={U`^`3*- z2iecCcgX_w2su9(q`3q(ck$;kuoNf3QulGx!~g%89LUAt_7h@C&Rw9B$#4#v58z##$s_Ly zn21!jx-O!d$Lx;Eo*Tub36O~sLSQJ6EIU8Z4Q@#Q2v_FV{pF$akt(LEskdF1aP9MP z4k>V)d(<_*!kUg(NJ9p9f88%d=IMO{qfc55!|qY|&F<}$d-ozhp|o*=;MkMew)vhN z$XRi^J+2-&z-Ff$P?c2mZM%N?{kwQYWe}s{ZzOiHg~BtJj#z}k`1-i&XE8~^E6wO_ zacyz0jgiHjd28&`?5;_nU{`9&e6=tRP}?qEdFR~>29MGw{Fa_n%e=eWU)}z zuXt!mmo;UBZrKOlsdtQ_>s2wODmR#@DEm{=4k5zg@|N(($thH;kFNt+%UcWBa2#)N z|Gd;;^|(vdj~7b$@oWG8d{TWZCRi9b|G}!96kTjTSgQZ}hBK6{{`MsNK}QSYL!crM z8!WC>L*2pfBiTH$&v-hpg7vB2dZk8M!_~#@M_*RKGy=;N#6w<$+p;E%p}^PE(+sbJ z%oL~dvDdeqQT9((>QY4h#lYk!#6HX!8?Q+=oE00)$zz-Kn2+q{EohIAjYax7mI$WR z-!DIEPFP(7Zvk79=dF!K^+KAaJll4sQ?Wk)CoWr!(vvGt8>vJwt9!m*BqA)P{+cek zA{^+La|?E`(;S5Zojnj34pm)FBnqCEOZmQ;GmfS7B9BOzi&K+f0{dSi%3vBm$s9y` z6QXb?;11@;mFoQ~rby{j@P_o-FdVyU0x{21-lY6F86B!o}*0)H4{?3r-_PEl_eu&U!AB z7V)@!Z0G0z8(Cx3o8GQc5G(u(hoq1N4AEw$(6i10rU)pS~F*keQU}o^U~as>Uqe z7ByP|*lw$e`JWG;zkvSvA>St}to%ummitGk!uHQn<=lQC|7=^~vr^pj)AaM{T%NlcLcIHI>}o!9H!ZQ}9VZLoP7O%w$< zbfModEHq#)KQrt*VvpBnEGWf#)kZYZIv!trw_Lc^uijwl$!F$ z=UO4)*%q}1){Ting^7X2hDO3H#z3Nbg!ObE)5{*63+xoZf!$T{e3n^ASVnNa23X*% zyUsp@3^(4_$m?(G%otMP0x{o4H>jnhbwV}mw?@?Bp;;MdeVQl+ddpBwyX&hSE>Vai zsMITY+TBicM>Hlc!Q9)Jk&}6xYV?$^6jP;<72>lb_xydAw#;GKkZJNo9IE8@hUWqu zam%BHQuAxoTx0-AJ6EaD2oC7Y96B(clv@4>=65n^GI z6NNWWBJ&{a3ts9{$pG#dO+z@=G@^K6VZ=Ptg+!xT%Dor}CU7v4hZa&8tVv@>Y{~8q zdu4F^$^2A!7a4n(b^Irns5jA-t^fcI02PrmM^cne zERh6eW%lkTn!6@`cTYt_3}(iy(5j1tLkhd_jF285a-tJNzIiH*Ze^x(XM)m0tBo_3 zM9_#W%=^ZhRIFem4CT%f-J37c)h+q*XP9K+r@6B>^WHRxY5V1zL+Q=6P**WRFydbl zSj%>SHp|xmno)wx*3^V)moDsq8l0n3QIJW8>TSY83z2-3MwRR3pHRNq*p)wlf#&s- zg;D(4zGFHV=2u!$c!FgtE?{a)VX6$nP^1ybIYmX9RV2eo!aC%!&YmssAzY^B%PdYn zk)X}pb7K6dwN>3f+P^k(piuX#zyfHyn{QoZP14Y;8`)H~VP`!{guecJiu8aNv1-ei zRkro&Gile*TPy_r4)W&%Veha>j0G9F{h<6^{w10pxsm~j5paTBi`2}_8*k|;fxN?# zwPK1p78-VtR+>~)I+#D+ZSPeY4FEeUI?Avw;wSW=xw7aws{0o?qzMOZ{87iA@;#Ew+G_*y z;tA+$jDtt%?5Hgt4tiaI-mXGM>q9472TlB!h-+(uLyG%ExlOin*YxN{2Fdok-udk( zR1=UWlL;kRwy3k%&qZ!(#@VX}sa?FQCX=AW#G-ULNonUhg_jeLOIX!O;u^`k9 zp584Qk&C#|9S!45k1td=Yy$sk<^tr{2eb@x2NhW)Hh&o?dcYm5<1o4AjykyHxzY-l zy!xU`!sf#foOH=#!Z=(XbOmkDW?3ojF|SgNGSvlI{~G@KWj>;@6Y(L~9;37E*RpvL zdGuBd#kYj5mxLbe{iH5{i$~#{2)i7%L0P1HKjHvlr*z^@5mC$?CV>i?cth~L7Iyx) zG>pBT05G8vb@F~Z`C{Ni7(3|%bM^$b&0?exfFE~8+ZIqKjH0({XYB={qtWT2GR2fW z2!Hwdmp;KRCgltL=q=E}|I@9F_W$g#6Sw#`FBti+&a;qIQ{`Tnd^JG>l_AU!6*NUZ zeQAj1G9WOwFvxQNdwl$BFv+@O(H}#OSsl!XG1N(PQ~ZJi=O_XNTF^ zZHkDlv0IA7hkg~F>(Uq>6WcgSwUGQ^$`L_F5w2lg$r&Yb1feEiCZsIkguMb+ndnb& z21o*&G_3*8L`%{;OFp?5T>>HdalLJ^{0k%VS$MSdi^RkwHJOSkG37ks&^oLM5qmt4 z_sD#p(G**=3aXqc26%LTdgx3w1aWf+icHm*6cP2=7q!tsP2y3NRn>F8TA{SeoG4=x z1^HplSu~h=M_mp%kM-OPb6K?JhCbZc=Sn;9`BaJ1qg6(3S*RY#W=p>$pAqmcx6AK+ zqmxq^p6l6AQUGf`_cf8*9wd{k#noQ~KXObIt^_SI)n1TTBD~^uJMY{Iuv|s-5>$!^ zOl7JLquNm;Jh@(rHllCJutClpwcI>}!e_{p(T=YDQeh=x}*{%Jy+Dk;xR z1aG6op%LC%Y0t`|-)v7)f`!LK5(S)*Q2?1$2%UxnpUQ7{l2QGR*J5iho=5 z3TbqTJ zPc})FJ*L|6@HzsSa2ew*l+Ltnt{z?{{-ZB717ZZ&^9CUw5=@i~tJk{w4SKq+FRt;$ z`^(E=**fYJEH1COJTIlDn1nw$fkZN>$AJC37$&zOK)aViBAK8SOr{fYo?&>2erCuX zm;Lyd%)$h(Z}c72tkL1~L$#9kkQ>>Hb}UwPCgFEV{KRgS3WMvl!UMAN*(BKon*B@2 ztG^oKoZwO$WFL}AiI zd)`0aIvmZ-MeVYu;K@=!OPMs1cC-K(E<&O~a&E1C3|Sq9)Eoy+7;qTcHXIKYij$a5sf&M9*y=o8a7d zd{6nvK*;#y9_VEDvxK!W5jCZBxGfZA8i zo*KN?sr8jECnPSYHqxmYvvDGIlmd}!JBM3>IHlPuHXR!GW(wV5CeeY2C?`V(Sh&-k zD8X=kwFvjf&HT;m#{{R=>Z(DJ@N0TgO$fBm+vYFZtem$hrg6Xz8|^OWfP!0jMGe4D z(K@3oBq5ugqE%QA7RToiser3Sl&$KDh8Z%g`2myo@w=Bb+0k!%k6x3!dCi79r3&h6 zuAQ^z&u9x6R7Ksc;K+z1fPQiT3JY+#y7XsdHz`=KUPCp}+$=o!z`I8Rl3_@9fC{Sczq#U=I9@cp%!de)f6gMY!x z1jMeMseR(+3uQSXjqxS%&!lR96>VYElO+OAY%OGLvr1rL82WxCx-rh|OQJg$H2SNu0J?|=J4`&;I< zt3A45tD(MS(s z(s6cvZAFd6jIe+A=^Bkqu3N17ooDwNOE7Etzc5D1q&z`4 z;f^QoMy1W+CZ(;Knxn1Yegs%SNQS{sdMP^_(D!CacQ;yao-KP0u>KUPf0gK5J%COX z=&Kol8`jSXd*$Hg!cwIpC&91E)ntR_Tyr)onc<*h??=65NVmzJr^s4_2G5}!8$U9o zv(R|#anxu14@b4QzG35mz zZVISB^NIWvfFM$undCIgc|Vz3TKV;&%2FzoddKq0duam68Oc5r1JLKUc;N~|R2lSo z5m6{g@06_dAi{`)oAhj?|2ULQU$nksccW?pXTYF{uddP+Ak*Y#GNEtUA!^7_Oznz#u<3XRy8#c2|}St`>@Um%^oa$WpZoZh{|HkBVNOIQLHUVgvK z7}dk~F!-=qyfr>blkl&ysNTgj8T89PYa>Uv){(f@d(y)IL)s7$gG^oDxpM`zpKDT~nghf%oL~q}NVv`L_AAL{(k#HK27h`1s%3Ox9~H_#?Arvu*R*LT2od zJrsPhlnesY*=W%%A3Z`BIZ)dv!N7pAEvd%Vm7!k{oSILd$p?|vrI*tnyZcMS4jj^Q z77wb9O$7*AOSuBn306A4M^il{hoN6N0HcmgW~4?6y|?q?GnA`smQKsSWJMQ9f%N z)fvItEUh^53NaX%P;$7DyTr?({Mc{ir6h^QE}b#XV#C(!~Yo-C9UYkU38ovL2U)OWU5%b4pz zIkADSgB~Kq?b0Qk35OG>-VIMNb{wlDh;H1TXV?_aHCjzwaUeaO$ZK+!ak%foib(eD z>fPDegW$XCC`u0!DFjn`m0Ib`bw78b$Tl^50S>|_(e{N=&y;4RG9cO}o^;E}eIAuy z_W``sgtw=y*Z%khbBv$8fE7Tp?{ybF02d zhH9Gtsols}+Cu3sy>5rftTWs0EJ1ge6X>w*-TH2XN_BpAwQ`<&EQuoq)$m-X>me zsEvTir5V>R_I1gh8p{zzbAT_m&o~|YMSb6!U#1`Hq*k{MaS`riI15MPaFiCa-KdMT zx1?@gm?Cxg5oB)hLTtZ_u;;8Ubyd0q<_4S`M!;3%rIEp}hjau@z}{BwTw=$~s~!Fd zNAtuZ1Lq|4O{BHoS2kBr z1V`$zt1T4y3qN8&Zxxhm(GmRviv&t`D+WRy?plD5o4qCMU|xWbNShaIyA?-uC^_j1 zcgRMsh(1WtJ5>UtBxx?B1b>Bd*>boNhm=}=I7fg2k6)Ryg2Xi83ua$zzY<@;!w*HA zjh-ebY3dA`&VY+J#j2_D7SE@y$hgKYi z0qv}ID%BtO$!85WbPYFnvTFE6iXXGPK@#bGC>p*4W+#aBnf+=S0kO|47*`eu!kg+% zMLlvBzs(+gq8mG9Li-R62}jUO0$yQl5vhCj-L7IknNodTC%m7CL)^CyfxAGJ_R&&3 z>!rVx3eAS^>`4V2>&?1JtgEDC^_3*Zk{DHo$jwP67kQ86;KC^Oydm}f2!wkPErjj0 za$nfNjyK9qQSZ2IrFErsoQboRG_|-}Vt7%lgx+RGA~}l!U%XNTlNN{8B}`Sp4@Qd? zLLlX=+PQZWUQ~bSrY5(Wd5>-;?qwpVL(HgX4wrcW<9+{Yi(ItU1Z4SRrl*7aPuJA{ z7}xdhYpSh@(Fe_H;OO!1ezDWvGx~ook!PrGDXxejyunF>3W9zK1foI8X6s`UEl=f# zQd&4<7qI5{2cj&0?cqxY(YO{T*TgG`j!j`BF(HGW+VDx2E%b_GXmsF}_?8_%;q~nE ze0EOzt^M@|_WSdLh8P4FD+$1P3%a)}$Hh9OaW7$<{5iOd0<)3^N^HmkIPq&P3TO-5 znxcs5VY}(!+%9OlEP#W};5`h=$(ig@xn*8;Yp>OC2p1D|mK~SZLvw?rK*t5FXY$um;?P zE&_vPt4g)>nq5C=52JUQg9#@ZXGy95eI+y6mB=3Dvv7)Q9x4#_gDr2k!>$HXYPyNaZ7KRe#d9x%dp--17 z8G42a&qjS7!+0-l7kZCZ<-#dLlaea(ho-V4$kzroWjjBql3VCC(z(gfJ37uB(5D*G z-ZAbL<0%;1P1MI!c|`J+#C=?_P!gFjIC-2~_ToaaicywS?n}swTUn))Oud;2#|KzI zzFhZ=*_5l?^bN!SXx)7PH)NEpiW5ED& z;uS0*5N>xgCYDQL*IwzfprUV2e^K;3o^rN;4_Z{{AH#9~V~*9o%Z`haiShraIDgBP zNEI!$KT|1LCSwACTS%eg9uX1}fuu+*fg~aoD=4EsxR*m5z<}Vx-xe8krQ^3;{kN_p zzPScX#xqN`tY`G6nGFNAhUc-}FNBcr!|8RCd|uz4S2j2gs+v0AK5ue${O$p3f)o(M zNUW5>}NJ(E`jQ=asEeyKylzZTNYygxyJ51PvjNMakMKiW-%r;LB1A zFjCWD?e;B%+(kyyB)M$&;w4l@lTj$_v@pCCxTV$=>$Ws_(+XHhD@CxTBhU~lkd~(= zrZh%F1(e5so~1XK?PwrR4>LUAp%lEh4WElZc(+Y419be%3+9?lVx)}C6NN6N9zGpl z9IHT+XtfA@2N8lGphr0aZN|nAYbMAE2C@BmENIVe%v^Y?x!NQr_?3yPDQwc%DMu-J4R>PZR@%f+qP}nwr$(C-`K3! zww+X*itVIgRm=)c<~P^cYpv7v{N~yF{CL{??``dQ+8BL|-uvCJJJbk?1X&!(+_Gv& zkC2}kTB4D};_l}>H-p8l;ZdPPF}?;SwzyCB$ip=&fmC~x6QDH4n9h>NTiQL7QE(O^ zSzjAQV>2S}JOj~5WPp?ywuj=<(6U%`?zZ~#nU$;z(&0=FYN37jSE>t_n2dy)+^!lw zm-N*v^;2HrHIsS8aN1>aZzqY8>i3jM(6of_XGnT)y`(v|Ws)0!5z=<#tIs!!pV!k*DhOkycr~ta2wP zF$L7`gO1Y6^VZs}kW*nOjm`x$rD(}*cHVKtq@rtuzOM?2xvQImXPA`;#|;<^c1B(I zMJ$V`Z3m0Xh1oRBR9LOE>QM?Jeo%aRV5tl8IW{$ESc9IaR%fUh$Qr2}wa2k3%yqYK zIcjud4ty&*dp_#s9%8` zK@omE^el|yiD5!@j3xSjR$(fB1@iC-8Hfd)kMm zH-<^iH$v=!Tn$qg6tU45%Pm1lRV+0`*f<#fofwCUcJYNJ{gE&0UpNpdhI(Yx10uYj z^DOGhh_v--`~k3y+7*Z}vQAo(S@|N<)Mr8)*dryzd}%0m%f&t0dN~ zMFLuF(C`ZF8`sIda#o8^Lw?naOM7kN)cr00k;`7 z^@cm)g6-6+6M6MHOHM5B+9zZHvewsn`h4^kj*KwKIri!+mX;0pV|&kYCzHR;Pv84bNE>YKrj>bnOphyjZaorDjOf` z?xid_?r%cGEO-HD2ss~O7mJUt>_p>9j+y|k*X<|2zPzjV?FoXXt1sv|V=v4ANF8V% ztN<`R}Zpo-9erkqk6ZL^otptOw0u#2V@ftOaxB7PbXNaW;}+7U{OyCyYq-JQ34!j4m-t zK+dk__@+Ow3JQ0;`0Y@2&8c+u#vC`RaZ4yU7DB;yLEWx{Tr-Py?%{eSUHb23)K14J zc7=vDsSWVwSibCSlJ-^6eyld6co5U3p3)>;T&G)sv0onat1)!2=jcDkVZ_7(u2ErfC)y9-so2N~RVn+2p^&6oTj{Zul`j z?tc@BC8rLIG1NSFuI>}02#4RT4<%uaD@-ohpK|}{Co1VW?un}U!9PgE z5nlD;8EoX@<)jnFtafzH7J+{+%}KS-bkBray$&Tt<$;rPXvJc(5Q@Es&C%pt8GdZV zJ6unPtE23q`s{>TW_G{tWF5$4pPnh>sziFkUb-4f#vY{y3xW)82D=L@a^8px>sCyu zu4`wYD_327K)Z)LJX)}@{Qr-;2hBtKRTf#@OuN9=4%nGNo1X~3UMM_p|>KM}*hmK4VdrFHonMjRY zwW=tEe6r8XDyujnU*(;qa#!n->aJBJIa|S{;mpN*GGMLPRVrS^JhcGcDBozJ`!og|l9^P`{Am~H|W z@1R{xT759MD)pz6emEPe_jZm}9aUwYZfIt(=wqi)XIg_GXuzv*BD4djMxKruS}j_( z3vfBVebu;BFl7o_X{;h8%*U&!((a zET$D?eixG8{U6c@g`4l8GiJU)45z`ATGS~D&Sa(XWXjazl|_~9Z5AiZxzq;lT9?j3 zlyzs#*2S*&7ZKl&Oxf{jkPpPZ6e;h0Q{6vH%t%tZdMay2Pn84{Q(xgiEWF*88r#Ws z$+x^|oD~K*?q#(zQ{j(!S+tp?>a1>#!BDQOu*<&2OVa07cHAL;Yh-#F&SE-7*ci=I z9%ChpxZInK^%K(*y%GDupVV?mrmtHlWr=_c>Qw_dLwYerr{TJLJ0c|VSbh#G*>kr0 zV{G##HXPLl3p4byzbLbmawz26S6l2dMP+%Y7 zAY6J+$KCLNfV@F7V4unb4Z%AYe~22LNoY$TqFwRC$IxQj+{a(&nIgRjst1Zaz@GA} z!ttO;_<1O~^3{b6Ap=eE{+Yiec;II}5&iD>a0ZaPBXG-XK0!OSV{z_XU!i-R6Laka zc2iIWXv)d9wWVidQpVhW_fNFTTXNKo7f6v-a5e`*sxd9L!4y31TXY9&P!&Hs@ z2(#~y%{^tWy_(wd?-QV0fcQqlk15SMumkF-Qg(>%3H~7vJE=_aUi=b=QU5J(hxhM$ z=Kn<7n;88ACL-eSWx8zgHP8AFddPpasd7}MRQ}PX;-*CzAS9w}CzkA|?XQ=bC5#Fr zQwu7DMPtyMy^Re{SWYu@-f_+mTWJkD?Q$;B zZP-VFt@&s@93F)tT7eW*zkxir6bU8j9=&)be*zse3{;0nQyWE^C;44iAKN|Sr-UAt z7b_?c4zS_oMl!>Eb^vY2X&U37nN5*ICypr4`SQ8sm>p!?f(!u9@ySi_j|-^(?FVor z{<9+XM#4||t29n0%1=}AMvb^qb8F5?gR01U%Hs!BFFKmW3)1~=FTfuU#IrwvE8SVF zlZ=XYW_2|!7~{@Yrka|dtXaQ}(KSuMhFl&=0LBA4^kkH&*hq6!gcS0Z^jyotISo{R zl{-Bt||CJh&lh zV&@cjT=y#rLrN-u#e&PYMtd98ImBVTIPy?8c>|1|j%+1$s!{{X9H$U9Z)`q97ww}} zNB1}>9c&m$8-j`1L&J+qvd}24z$g65Y4Av1icjcCkIu*RPY)F}bb2ANR~xn5&Af72 zFHCYA6=|iz8k5~h5rNu7oeBO7rnYBEp|?GaQ{*}KzA-J-Op1CxWmY#RFxzS7^_xbm zM6#%Xl6-XQnLoli>#!?!b%CX7EOVfHW|g#v0R`;WtV?rwY3+RRe7IpnqKIWhouvRI zE`_BXSWyc>a`WS2NEss>XjxkSN5r(9=?f;@EhC%Y*>j$yhLB1HgQ3KUw@8lv5~^Xh-;XTB&LgYo@s6TTCKZEa`=X+PiVKW(Ax7~ z11|?Dserq$wp`2K_QU_LHy86iv)wNdvCY@!;!C#2m*Zf!Yw6v&KU^IZyc% zNmvIhEsm8brajG;i|=7?qBs{bqcFs#%gdl3b{So>FP)x!F?8n7yHJ~y?HdSvuVf+< zcvH<@Dd-wf^%JV`op7N;bF&MOqbdz@Od zbj{mSi!In|e^G}_4JumRHSs+BbRGXhEZB7MA!gm6E-o{^0u7p#V@N8Ru6x`4X%d3( z5AO=pA2ob(v+zkMwgW7m#3$B7*O*9QP!#}Ng-7&CG*UgEK}3FySZ1Y*SL6t85#*T` z_cSxdD_8F!rv1gZz$RIPs5chgg@LZK{&Fpm(DePxx=n^U9AG#ErZ#{+Ak+$HHc|kP?5fDE^3ao_U z_auR3p@5waRCv$(`+LsXcZZ{_wfFbqSA}mhp1;Fk>=}58U=0(D7L;3T7b<^CZ~T;A zK>v9l-a5xrl0yeY=3yGPG0(h0H;9O~p{z5N#^kYnD}SRdLkSS-qTg_dhMoB1AAAIS z{o_iEFqBXjb`E@JUn?Z5<@dRBNF35YW-+1y=H|Gn6b3V@FsKr^ff{Dvh~1BbQ=lE5 zuw@Xv`buI9QP@HKm{7(jCct8Vk1}=KJBkRsmwyZ2M>m;|G4C<^Oo_CIKN?m-doi9=` z^IX%gKHiGMopKRcb*p*-&}^fkM(!a%Zdm|4KMJu31r$;NVMZ-GOeT;j0n}Y!+h^(+ z)lu$ZQe|4O3Nz>TWUEW4xln>AI?ddb#QKu4oPI=FFzc!G*R7TtS?XEzUX~NAVcHy= zNJ6-9d4uH0u1|i1rZ1!SDBnbjUWAG`rsX;bm77bgo}>jl?&FJDAPi4QJQwaDAg_{t zhQZc|#Qgzz`$d}0q|n9GmqKcA|VSvd7Rj$TT&ze1Plls`@NTtgM z5kA+a)d4Pz%K=;a2k<{GOBr_}k_TV=OYU#uIrsnN{`!w-uKuoqBZleE4yDT($6iX; z9Dym5D)Y=K1WhMI3yNs{TyMyz-I8vK0#EPpeWJvF^11GrV-X9da`NQrLn-b`-#CKE zl<@ob<<@1>%xmw=>*eM9`wT$%jB2+=v9&t z)+KX@L2Rih=p2QR`YgjQmsXY8DEG%9N4u$d-Am2R3Oo(VptQZXM2^Nzn^pAzb~)mv zoEqbCQ$<|;qf6^yMwiV*#(u^fxVaE4ENFY^6%p8(B~uPkCkHjS16A5+9<#kMCzTBk zw{(n-!x6Dfqs=5ooga9x%(Trds?NWG#nhMK<8W(_A0K#k&@rp(HS&zwwQTXeD-~Vf zIn1^s44G{X^Fa+lZ;wDC>Dsu_ffRvV*4}jMGi{lhJ?e!U)4zGnRi(>O)@&tt3W(p- zhDHQGIp!IiY3nn=Dv33Fn5p-aQp~9mq@IF+UG0NVTU9AfI$Ch_72ueM#W2;=0V$%1 zBAFyGw+NfIr}Hud7?XUSu}LQ>7)uW{1H%y{HKqT;46fC~F>04XZr$5MHrHVu2^hOg zy6&qsyJxPW+Fz$RWcC=k?%ZFEi@}r)BieY50y@_)Odh*Obx%Fcx=b$=&m|cV z)drTtx{$?D8Pfrcf$FVmDjXAcaj_k{tYl^ey~OA9EIg3b-kY zPxGGfEB^8hPG?vTehn)1nrQQN`1e>X9KXukF@ZV*gE4>b_fWAh!e4_uz*6BZN3ugv zT;F1)xZ3Waa_F;Vc=xCw#Sn5^BI zCA5b#1v*^U90zGXo$L2xaASjQHi|`6|60E5*9im~#Xn z6|#n4R$`xrM%6@k`#3l-c?L~iP;ai4(I)Dc@bCIYG;O5aBb?Itl^!!SA#kb{C=DM4 zZc2@kGZw6gVo~X_VQHV8&hzSa9;}v^JQkYVm z*`@xxD2Or7kDZ`4=H~hz@Y2WeJ_va;%)%A-UswKAP-xll?O{MX!t4$B%crNsTr)4= z>k85Ox3xrqe--9z{{tQF@_%G+@Gqn0fBl`1o2!F}t(lSiKTOpA=g7C691k=w6KZzb znYdl^Bj|dDcs=^CbbWo(1bsZ2jV$3fwEolph$kfz&_%W}Cg4x^c05HOn>a9-(V;I% zU2X5lNpWjpkD53(9 z{wSKo$k#ci&Z`a%#XNu_-K&PQ7@C=q4_46}EU~@+`mYO_>H17<^4E9j{CfWNg-qz* zf64!BaQzd`F7M#_WhH0kO#0ubwk@h#@_#8oFCJ&a@*!`Fh=JGX1!y3VRY)_ziKTu- zV_&wJRf9~>ujP>4EK6LY`2xw=%64A^`BLtGw@aUG46VE|pZ@ML?J><^VLm-$uoLiQ z+U1Q8Mam+1I-6jQ$=x_jyU?0l`lr)>2q%fChYFXd4KrzYUI4ma4Z6YSi>nMKw^h~(Al22p*MDOd-#(`+Mg&;qjx00CcIKNV%O z;ks8on-RBxNf9coyRY1e6yF&|Wpz2HeB(LB1WjwfIIh@<>7%B@y*0KZy3kkG#1%diuwyTqYmDt+;7u$23A_f=QCvX}X z8#d(YW_q2jfqDJU`VWoxNdMPbk&h_5Kl~K6+RvSic}GIPuqcuR`Qij{Gr^f61;syv zd#UD8+C_Y@af)qB7aY@VpDdpei^ZMipTW&(n-iGObubyzv@zMqmFZ&qi5!p@sKKqY z)618cof(}_;wwg=)eOkU`?Yyc%&)&evJFRsW$vYX{ZeCDM=3xz6-y|Q46&>k@k+FM z@fNGyuu4^8PCZ9W9y1CmNr#V=8U1lbu2IP)CyrwJ6{PRTg{~VscRDL}?a1&f2HP$d z5M&#@SUmwN?vrdgN-Cusua+Xkr|t}){ezuzJMyi@h4>!@s~BYrG%V3E)l2r`ihBCi|TpT#DvhLXGGvoTGFuuL{PG;)Q3 z2pbohXzRb?yv!TSTHvq4UdU3+{K5Ex^PThpe;Ar6eRtl9m&9r&cj>ZiCs*%$?Ofm! zoH1MiYY34efiY1uit+f*`EskqPSVe&;;PWA^*FVsu$tmy?I1uy?~ZFQ3}S`aeb-8=Ic&)ROQt95k|snL0yF!$m)b3&6sJo17jw=BakLnj}J z3#7gMjw?7h5HXITu_dfsZ7AZ5m&mpV~xil~yNgbK(BN+RoCgx4yywFh(V% zxl%ZS%l-M0L~`0QPAKH|gYeXQ6eV_b-!VrZiN0uRvp8OEw(`45cFA+-u(}koJ<(6B z;zhx&Ca4^8F}ozf92N`4q8V0Z53CMGS{XsG_C}k6@)#Duc=%wL_6S0Me#8&N&wkwcPxpg)M{?~(q4lr{olwhYsA6xh?FzKoz}tBLg#D@2;#aXE zXU4r3xF&${M~Mn1bkgW&Xx1@d$Sjgl{lS+6Wnc{J4N-Q(sgP_Ym3{q?YKo%EogY znn!uak$z$#kIU+eib`D%yQOQc_?^$XG|sH3&t(>C5%5mfbZnGPv`YQKx@fYBDlXT? zwHW!BS$(7+ZKO^nu3|0cHJ7=D5W#C^tfVLfrtv1ZPh-nLR`X{oAXJg4GX8qrcL>V7 zF>-iAM1L{kPXoJ$TUy;bjKVgpq&9jJskeQV_GJ3-=H1~(dmeA`zJ+FK)jLz(IZO=^iPJrR9FXdtH= zCoI?f{rxZ_^{9=va0a{&T-bL57-3GyC<@m%{+9VF(qTW9Avb(Y`mbf)Vq7Hc9uN-` zzFh)W*QY?0NU0`#{3Y?||9)NV_N7Tb`&(YB_`g5@{(I>`#ns5!)y(vNcLHk0z_;e!&i`0x|$uSos57@SN3*4Z8 za=(z+m=Tp?a-HVPEi%ViM;I&mKg;r6rqT|u@NlNrj)KY~OAh86xG)AcJV*P>Bfp%f@7buTNC%gG za>bUROeK+hUI3$zCrK&+xP&hJDF<_h7$d1buu#}bv3{pntF=?7x&>3+=&p%fUPikK z=$f6BpHTpA(o!-HB31A7N^le%_-}URM0dZbC82lI5;^lC7+I zJ*dug_cB<#6{8fxbWW4aP8FYVr=ipnN9O`zA?N?5X872bjx+cT0eH8nyIK{h{vxUd zLruumT>HdT%6q&phzlS~@*>RsklB~oPRW)eMm^NMiKHqGHi}~NnrgS};8a*GqmtIH zbI@C~b3Wp(=1!RuHt=aD!F7iI!>J9^GF5P>rmw*yXZvi3Ow6QR*dqN=-K#}jpq1+B zJxSC3UZx7)MV7hf52NUcXui6sp!6fXWCify-I?_&bucBrS%!cW|FVZ!nQCix|7~$& zyIP&0%)-PFt&K=Zs0*RH{FgDfar5j#

J>_4lAc`nXZpqB3L7?VwGRhvK@W31$YW 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 TibfS2RdDT3>}egu!c_D>2zBYV literal 0 HcmV?d00001 diff --git a/src/main/resources/META-INF/rewrite/jmockit.yml b/src/main/resources/META-INF/rewrite/jmockit.yml index a15136715..d1ee335d7 100644 --- a/src/main/resources/META-INF/rewrite/jmockit.yml +++ b/src/main/resources/META-INF/rewrite/jmockit.yml @@ -23,6 +23,7 @@ tags: - jmockit recipeList: - org.openrewrite.java.testing.jmockit.JMockitBlockToMockito + - org.openrewrite.java.testing.jmockit.JMockitMockUpToMockito - org.openrewrite.java.testing.jmockit.JMockitAnnotatedArgumentToMockito - org.openrewrite.java.ChangeType: oldFullyQualifiedTypeName: mockit.Mocked diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java new file mode 100644 index 000000000..792f8538c --- /dev/null +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -0,0 +1,253 @@ +/* + * Copyright 2024 the original author or authors. + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * https://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.openrewrite.java.testing.jmockit; + +import org.junit.jupiter.api.Test; +import static org.openrewrite.java.Assertions.java; +import static org.openrewrite.java.testing.jmockit.JMockitTestUtils.setParserSettings; +import org.openrewrite.test.RecipeSpec; +import org.openrewrite.test.RewriteTest; + +public class JMockitMockUpToMockitoTest implements RewriteTest { + private static final String MOCKITO_CORE_DEPENDENCY = "mockito-core-5.12"; + private static final String JUNIT_4_DEPENDENCY = "junit-4.13.2"; + private static final String LEGACY_JMOCKIT_DEPENDENCY = "jmockit-1.22"; + + @Override + public void defaults(RecipeSpec spec) { + setParserSettings(spec, LEGACY_JMOCKIT_DEPENDENCY, JUNIT_4_DEPENDENCY, MOCKITO_CORE_DEPENDENCY); + } + + @Test + void mockUpStaticMethodTest() { + //language=java + rewriteRun( + java( + """ + import mockit.Mock; + import mockit.MockUp; + import org.junit.Test; + import static org.junit.Assert.assertEquals; + + public class MockUpTest { + @Test + public void test() { + new MockUp() { + + @Mock + public int staticMethod() { + return 1024; + } + + @Mock + public int staticMethod(int v) { + return 128; + } + }; + assertEquals(1024, MyClazz.staticMethod()); + assertEquals(128, MyClazz.staticMethod(0)); + } + + public static class MyClazz { + public static int staticMethod() { + return 0; + } + + public static int staticMethod(int v) { + return 1; + } + } + } + """, + """ + import org.junit.Test; + import org.mockito.MockedStatic; + + import static org.junit.Assert.assertEquals; + import static org.mockito.Mockito.*; + + public class MockUpTest { + @Test + public void test() { + MockedStatic mockStaticMockUpTest_MyClazz = mockStatic(MockUpTest.MyClazz.class); + mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod()).thenAnswer(invocation -> { + return 1024; + }); + mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> { + return 128; + }); + assertEquals(1024, MyClazz.staticMethod()); + assertEquals(128, MyClazz.staticMethod(0)); + mockStaticMockUpTest_MyClazz.close(); + } + + public static class MyClazz { + public static int staticMethod() { + return 0; + } + + public static int staticMethod(int v) { + return 1; + } + } + } + """ + ) + ); + } + + @Test + void mockUpInstanceMethodTest() { + //language=java + rewriteRun( + java( + """ + import mockit.Mock; + import mockit.MockUp; + import org.junit.Test; + import static org.junit.Assert.assertEquals; + + public class MockUpTest { + @Test + public void test() { + new MockUp() { + + @Mock + public String getMsg() { + return "mockMsg"; + } + + @Mock + public String getMsg(String echo) { + return "mockEchoMsg"; + } + }; + assertEquals("mockMsg", new MyClazz().getMsg()); + assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + + public String getMsg(String echo) { + return echo; + } + } + } + """, + """ + import org.junit.Test; + import org.mockito.MockedConstruction; + + import static org.junit.Assert.assertEquals; + import static org.mockito.Mockito.*; + + public class MockUpTest { + @Test + public void test() { + MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { + when(mock.getMsg()).thenAnswer(invocation -> { + return "mockMsg"; + }); + when(mock.getMsg(nullable(String.class))).thenAnswer(invocation -> { + return "mockEchoMsg"; + }); + }); + assertEquals("mockMsg", new MyClazz().getMsg()); + assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); + mockObjMockUpTest_MyClazz.close(); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + + public String getMsg(String echo) { + return echo; + } + } + } + """ + ) + ); + } + + @Test + void mockUpInnerVariableTest() { + //language=java + rewriteRun( + java( + """ + import mockit.Mock; + import mockit.MockUp; + import org.junit.Test; + import static org.junit.Assert.assertEquals; + + public class MockUpTest { + @Test + public void test() { + new MockUp() { + final String msg = "newMsg"; + + @Mock + public String getMsg() { + return msg; + } + }; + assertEquals("newMsg", new MyClazz().getMsg()); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + } + } + """, + """ + import org.junit.Test; + import org.mockito.MockedConstruction; + + import static org.junit.Assert.assertEquals; + import static org.mockito.Mockito.*; + + public class MockUpTest { + @Test + public void test() { + String msg = "newMsg"; + MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { + when(mock.getMsg()).thenAnswer(invocation -> { + return msg; + }); + }); + assertEquals("newMsg", new MyClazz().getMsg()); + mockObjMockUpTest_MyClazz.close(); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + } + } + """ + ) + ); + } +} From 1da49315f386304f2769320b0357b0c25cf687d6 Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Wed, 11 Sep 2024 09:40:59 +0200 Subject: [PATCH 02/39] Adopt mockito-core:5.+ through parserClasspath --- build.gradle.kts | 1 + .../jmockit/JMockitMockUpToMockito.java | 4 +- ...ore-5.12.0.jar => mockito-core-5.13.0.jar} | Bin 703984 -> 703990 bytes .../jmockit/JMockitMockUpToMockitoTest.java | 398 +++++++++--------- 4 files changed, 195 insertions(+), 208 deletions(-) rename src/main/resources/META-INF/rewrite/classpath/{mockito-core-5.12.0.jar => mockito-core-5.13.0.jar} (93%) diff --git a/build.gradle.kts b/build.gradle.kts index bce1547cf..d63512f52 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -19,6 +19,7 @@ recipeDependencies { parserClasspath("com.github.tomakehurst:wiremock-jre8:2.35.0") parserClasspath("org.mockito:mockito-all:1.10.19") parserClasspath("org.mockito:mockito-core:3.+") + parserClasspath("org.mockito:mockito-core:5.+") parserClasspath("org.jmockit:jmockit:1.49") parserClasspath("org.jmockit:jmockit:1.22") // last version with NonStrictExpectations parserClasspath("org.mockito:mockito-junit-jupiter:3.+") diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index f37a8c53f..fb0a4aa8f 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -200,7 +200,7 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl JavaTemplate tpl = JavaTemplate .builder(otherStatements.toString() + mockStatements) - .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, "mockito-core-5.12")) + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, "mockito-core-5")) .imports("org.mockito.MockedStatic", "org.mockito.MockedConstruction") .staticImports("org.mockito.Mockito.*") .contextSensitive() @@ -211,7 +211,7 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl for (String o : shouldClose) { JavaTemplate tpl = JavaTemplate .builder(o + ".close();") - .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, "mockito-core-5.12")) + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, "mockito-core-5")) .imports("org.mockito.MockedStatic", "org.mockito.MockedConstruction") .staticImports("org.mockito.Mockito.*") .contextSensitive() diff --git a/src/main/resources/META-INF/rewrite/classpath/mockito-core-5.12.0.jar b/src/main/resources/META-INF/rewrite/classpath/mockito-core-5.13.0.jar similarity index 93% rename from src/main/resources/META-INF/rewrite/classpath/mockito-core-5.12.0.jar rename to src/main/resources/META-INF/rewrite/classpath/mockito-core-5.13.0.jar index e256989605e2e81118378c687bd92a9e0967ff52..986e38d5ca55b779eb01f12c20fdf90991eb6a63 100644 GIT binary patch delta 14304 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 diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index 792f8538c..e78c47cd3 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -16,96 +16,90 @@ package org.openrewrite.java.testing.jmockit; import org.junit.jupiter.api.Test; -import static org.openrewrite.java.Assertions.java; -import static org.openrewrite.java.testing.jmockit.JMockitTestUtils.setParserSettings; import org.openrewrite.test.RecipeSpec; import org.openrewrite.test.RewriteTest; -public class JMockitMockUpToMockitoTest implements RewriteTest { - private static final String MOCKITO_CORE_DEPENDENCY = "mockito-core-5.12"; - private static final String JUNIT_4_DEPENDENCY = "junit-4.13.2"; - private static final String LEGACY_JMOCKIT_DEPENDENCY = "jmockit-1.22"; +import static org.openrewrite.java.Assertions.java; +import static org.openrewrite.java.testing.jmockit.JMockitTestUtils.setParserSettings; + +class JMockitMockUpToMockitoTest implements RewriteTest { @Override public void defaults(RecipeSpec spec) { - setParserSettings(spec, LEGACY_JMOCKIT_DEPENDENCY, JUNIT_4_DEPENDENCY, MOCKITO_CORE_DEPENDENCY); + setParserSettings(spec, "jmockit-1.22", "junit-4.13.2"); } @Test void mockUpStaticMethodTest() { //language=java rewriteRun( - java( - """ - import mockit.Mock; - import mockit.MockUp; - import org.junit.Test; - import static org.junit.Assert.assertEquals; - - public class MockUpTest { - @Test - public void test() { - new MockUp() { - - @Mock - public int staticMethod() { - return 1024; - } - - @Mock - public int staticMethod(int v) { - return 128; - } - }; - assertEquals(1024, MyClazz.staticMethod()); - assertEquals(128, MyClazz.staticMethod(0)); - } - - public static class MyClazz { - public static int staticMethod() { - return 0; - } - - public static int staticMethod(int v) { - return 1; - } - } - } - """, - """ - import org.junit.Test; - import org.mockito.MockedStatic; - - import static org.junit.Assert.assertEquals; - import static org.mockito.Mockito.*; - - public class MockUpTest { - @Test - public void test() { - MockedStatic mockStaticMockUpTest_MyClazz = mockStatic(MockUpTest.MyClazz.class); - mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod()).thenAnswer(invocation -> { - return 1024; - }); - mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> { - return 128; - }); - assertEquals(1024, MyClazz.staticMethod()); - assertEquals(128, MyClazz.staticMethod(0)); - mockStaticMockUpTest_MyClazz.close(); - } - - public static class MyClazz { - public static int staticMethod() { - return 0; - } - - public static int staticMethod(int v) { - return 1; - } - } - } - """ - ) + java( + """ + import mockit.Mock; + import mockit.MockUp; + import static org.junit.Assert.assertEquals; + + class MockUpTest { + void test() { + new MockUp() { + + @Mock + public int staticMethod() { + return 1024; + } + + @Mock + public int staticMethod(int v) { + return 128; + } + }; + assertEquals(1024, MyClazz.staticMethod()); + assertEquals(128, MyClazz.staticMethod(0)); + } + + public static class MyClazz { + public static int staticMethod() { + return 0; + } + + public static int staticMethod(int v) { + return 1; + } + } + } + """, + """ + import org.mockito.MockedStatic; + + import static org.junit.Assert.assertEquals; + import static org.mockito.Mockito.*; + + class MockUpTest { + void test() { + MockedStatic mockStaticMockUpTest_MyClazz = mockStatic(MockUpTest.MyClazz.class); + mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod()).thenAnswer(invocation -> { + return 1024; + }); + mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> { + return 128; + }); + assertEquals(1024, MyClazz.staticMethod()); + assertEquals(128, MyClazz.staticMethod(0)); + mockStaticMockUpTest_MyClazz.close(); + } + + public static class MyClazz { + public static int staticMethod() { + return 0; + } + + public static int staticMethod(int v) { + return 1; + } + } + } + """ + ) ); } @@ -113,78 +107,74 @@ public static int staticMethod(int v) { void mockUpInstanceMethodTest() { //language=java rewriteRun( - java( - """ - import mockit.Mock; - import mockit.MockUp; - import org.junit.Test; - import static org.junit.Assert.assertEquals; - - public class MockUpTest { - @Test - public void test() { - new MockUp() { - - @Mock - public String getMsg() { - return "mockMsg"; - } - - @Mock - public String getMsg(String echo) { - return "mockEchoMsg"; - } - }; - assertEquals("mockMsg", new MyClazz().getMsg()); - assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); - } - - public static class MyClazz { - public String getMsg() { - return "msg"; - } - - public String getMsg(String echo) { - return echo; - } - } - } - """, - """ - import org.junit.Test; - import org.mockito.MockedConstruction; - - import static org.junit.Assert.assertEquals; - import static org.mockito.Mockito.*; - - public class MockUpTest { - @Test - public void test() { - MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { - when(mock.getMsg()).thenAnswer(invocation -> { - return "mockMsg"; - }); - when(mock.getMsg(nullable(String.class))).thenAnswer(invocation -> { - return "mockEchoMsg"; - }); - }); - assertEquals("mockMsg", new MyClazz().getMsg()); - assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); - mockObjMockUpTest_MyClazz.close(); - } - - public static class MyClazz { - public String getMsg() { - return "msg"; - } - - public String getMsg(String echo) { - return echo; - } - } - } - """ - ) + java( + """ + import mockit.Mock; + import mockit.MockUp; + import static org.junit.Assert.assertEquals; + + class MockUpTest { + void test() { + new MockUp() { + + @Mock + public String getMsg() { + return "mockMsg"; + } + + @Mock + public String getMsg(String echo) { + return "mockEchoMsg"; + } + }; + assertEquals("mockMsg", new MyClazz().getMsg()); + assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + + public String getMsg(String echo) { + return echo; + } + } + } + """, + """ + import org.mockito.MockedConstruction; + + import static org.junit.Assert.assertEquals; + import static org.mockito.Mockito.*; + + class MockUpTest { + void test() { + MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { + when(mock.getMsg()).thenAnswer(invocation -> { + return "mockMsg"; + }); + when(mock.getMsg(nullable(String.class))).thenAnswer(invocation -> { + return "mockEchoMsg"; + }); + }); + assertEquals("mockMsg", new MyClazz().getMsg()); + assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); + mockObjMockUpTest_MyClazz.close(); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + + public String getMsg(String echo) { + return echo; + } + } + } + """ + ) ); } @@ -192,62 +182,58 @@ public String getMsg(String echo) { void mockUpInnerVariableTest() { //language=java rewriteRun( - java( - """ - import mockit.Mock; - import mockit.MockUp; - import org.junit.Test; - import static org.junit.Assert.assertEquals; - - public class MockUpTest { - @Test - public void test() { - new MockUp() { - final String msg = "newMsg"; - - @Mock - public String getMsg() { - return msg; - } - }; - assertEquals("newMsg", new MyClazz().getMsg()); - } - - public static class MyClazz { - public String getMsg() { - return "msg"; - } - } - } - """, - """ - import org.junit.Test; - import org.mockito.MockedConstruction; - - import static org.junit.Assert.assertEquals; - import static org.mockito.Mockito.*; - - public class MockUpTest { - @Test - public void test() { - String msg = "newMsg"; - MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { - when(mock.getMsg()).thenAnswer(invocation -> { - return msg; - }); - }); - assertEquals("newMsg", new MyClazz().getMsg()); - mockObjMockUpTest_MyClazz.close(); - } - - public static class MyClazz { - public String getMsg() { - return "msg"; - } - } - } - """ - ) + java( + """ + import mockit.Mock; + import mockit.MockUp; + import static org.junit.Assert.assertEquals; + + class MockUpTest { + void test() { + new MockUp() { + final String msg = "newMsg"; + + @Mock + public String getMsg() { + return msg; + } + }; + assertEquals("newMsg", new MyClazz().getMsg()); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + } + } + """, + """ + import org.mockito.MockedConstruction; + + import static org.junit.Assert.assertEquals; + import static org.mockito.Mockito.*; + + class MockUpTest { + void test() { + final String msg = "newMsg"; + MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { + when(mock.getMsg()).thenAnswer(invocation -> { + return msg; + }); + }); + assertEquals("newMsg", new MyClazz().getMsg()); + mockObjMockUpTest_MyClazz.close(); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + } + } + """ + ) ); } } From 4e42b592fa41afc16b7518d6632c8b091fa69bc3 Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Wed, 11 Sep 2024 09:46:42 +0200 Subject: [PATCH 03/39] Apply bot code suggestions --- .../java/testing/jmockit/JMockitMockUpToMockito.java | 7 ++++--- .../java/testing/jmockit/JMockitMockUpToMockitoTest.java | 2 ++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index fb0a4aa8f..b27b85377 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -15,7 +15,6 @@ */ package org.openrewrite.java.testing.jmockit; -import static java.util.stream.Collectors.toList; import org.openrewrite.ExecutionContext; import org.openrewrite.Preconditions; import org.openrewrite.Recipe; @@ -24,8 +23,6 @@ import org.openrewrite.java.JavaParser; import org.openrewrite.java.JavaTemplate; import org.openrewrite.java.search.UsesType; -import static org.openrewrite.java.testing.jmockit.JMockitBlockType.MockUp; -import static org.openrewrite.java.tree.Flag.Static; import org.openrewrite.java.tree.J; import org.openrewrite.java.tree.JavaType; import org.openrewrite.java.tree.Statement; @@ -36,6 +33,10 @@ import java.util.Set; import java.util.stream.Collectors; +import static java.util.stream.Collectors.toList; +import static org.openrewrite.java.testing.jmockit.JMockitBlockType.MockUp; +import static org.openrewrite.java.tree.Flag.Static; + public class JMockitMockUpToMockito extends Recipe { @Override public String getDisplayName() { diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index e78c47cd3..26d589241 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -16,6 +16,7 @@ package org.openrewrite.java.testing.jmockit; import org.junit.jupiter.api.Test; +import org.openrewrite.DocumentExample; import org.openrewrite.test.RecipeSpec; import org.openrewrite.test.RewriteTest; @@ -29,6 +30,7 @@ public void defaults(RecipeSpec spec) { setParserSettings(spec, "jmockit-1.22", "junit-4.13.2"); } + @DocumentExample @Test void mockUpStaticMethodTest() { //language=java From faa1bb1ef35cae93560e7276cfe6fe6411176b93 Mon Sep 17 00:00:00 2001 From: SiBorea Date: Wed, 11 Sep 2024 16:37:53 +0800 Subject: [PATCH 04/39] Add type check for new class statement --- .../jmockit/JMockitMockUpToMockito.java | 3 ++- .../jmockit/JMockitMockUpToMockitoTest.java | 19 ++++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index f37a8c53f..e61f13fbe 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -122,7 +122,8 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl } J.NewClass newClass = (J.NewClass) statement; - if (newClass.getClazz() == null || newClass.getBody() == null) { + if (newClass.getClazz() == null || newClass.getBody() == null || + !TypeUtils.isOfClassType(newClass.getClazz().getType(), "mockit.MockUp")) { continue; } diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index 792f8538c..6d3a92530 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -210,6 +210,14 @@ public String getMsg() { return msg; } }; + + // Should ignore the newClass statement + new Runnable() { + @Override + public void run() { + System.out.println("run"); + } + }; assertEquals("newMsg", new MyClazz().getMsg()); } @@ -230,12 +238,20 @@ public String getMsg() { public class MockUpTest { @Test public void test() { - String msg = "newMsg"; + final String msg = "newMsg"; MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { when(mock.getMsg()).thenAnswer(invocation -> { return msg; }); }); + + // Should ignore the newClass statement + new Runnable() { + @Override + public void run() { + System.out.println("run"); + } + }; assertEquals("newMsg", new MyClazz().getMsg()); mockObjMockUpTest_MyClazz.close(); } @@ -250,4 +266,5 @@ public String getMsg() { ) ); } + } From 96688de6eec45c03c8dba7bea2a25e8d830d06cc Mon Sep 17 00:00:00 2001 From: SiBorea Date: Wed, 11 Sep 2024 21:19:39 +0800 Subject: [PATCH 05/39] Fix statement construction --- .../jmockit/JMockitMockUpToMockito.java | 128 +++--- .../jmockit/JMockitMockUpToMockitoTest.java | 399 +++++++++++------- 2 files changed, 332 insertions(+), 195 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index ee768e96e..084b23008 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -15,6 +15,7 @@ */ package org.openrewrite.java.testing.jmockit; +import static java.util.stream.Collectors.toList; import org.openrewrite.ExecutionContext; import org.openrewrite.Preconditions; import org.openrewrite.Recipe; @@ -22,7 +23,10 @@ import org.openrewrite.java.JavaIsoVisitor; import org.openrewrite.java.JavaParser; import org.openrewrite.java.JavaTemplate; +import org.openrewrite.java.search.FindMissingTypes; import org.openrewrite.java.search.UsesType; +import static org.openrewrite.java.testing.jmockit.JMockitBlockType.MockUp; +import static org.openrewrite.java.tree.Flag.Static; import org.openrewrite.java.tree.J; import org.openrewrite.java.tree.JavaType; import org.openrewrite.java.tree.Statement; @@ -33,10 +37,6 @@ import java.util.Set; import java.util.stream.Collectors; -import static java.util.stream.Collectors.toList; -import static org.openrewrite.java.testing.jmockit.JMockitBlockType.MockUp; -import static org.openrewrite.java.tree.Flag.Static; - public class JMockitMockUpToMockito extends Recipe { @Override public String getDisplayName() { @@ -114,10 +114,10 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl return md; } - // Create the new statement - J.Block body = md.getBody(); - List shouldClose = new ArrayList<>(); - for (Statement statement : body.getStatements()) { + List closeVariables = new ArrayList<>(); + List aggregateOtherStatements = new ArrayList<>(); + List excludeMockUp = new ArrayList<>(); + for (Statement statement : md.getBody().getStatements()) { if (!(statement instanceof J.NewClass)) { continue; } @@ -128,10 +128,10 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl continue; } + excludeMockUp.add(statement); JavaType mockType = ((J.ParameterizedType) newClass.getClazz()).getTypeParameters().get(0).getType(); String className = TypeUtils.asFullyQualified(mockType).getClassName(); String mockName = className.replace(".", "_"); - StringBuilder mockStatements = new StringBuilder(); List mockedMethods = newClass.getBody() .getStatements() @@ -156,14 +156,24 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl .filter(s -> staticMethods.contains(((J.MethodDeclaration) s).getSimpleName())) .collect(toList()); if (!methods.isEmpty()) { - mockStatements.append("MockedStatic<").append(className).append("> mockStatic").append(mockName).append(" = mockStatic(").append(className).append(".class);"); + StringBuilder tpl = new StringBuilder(); + tpl.append("MockedStatic<").append(className).append("> mockStatic").append(mockName) + .append(" = mockStatic(").append(className).append(".class);"); for (Statement method : methods) { J.MethodDeclaration m = (J.MethodDeclaration) method; - mockStatements.append("mockStatic").append(mockName).append(".when(() -> ").append(className).append(".").append(m.getSimpleName()); - appendMethod(mockStatements, m); + tpl.append("mockStatic").append(mockName).append(".when(() -> ").append(className).append(".").append(m.getSimpleName()); + appendMethod(tpl, m); } + + md = JavaTemplate.builder(tpl.toString()) + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, "mockito-core-5")) + .imports("org.mockito.MockedStatic") + .staticImports("org.mockito.Mockito.*") + .contextSensitive() + .build() + .apply(updateCursor(md), statement.getCoordinates().after()); maybeAddImport("org.mockito.MockedStatic"); - shouldClose.add("mockStatic" + mockName); + closeVariables.add("mockStatic" + mockName); } // Instance @@ -172,60 +182,70 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl .filter(s -> !staticMethods.contains(((J.MethodDeclaration) s).getSimpleName())) .collect(toList()); if (!methods.isEmpty()) { - mockStatements.append("MockedConstruction<").append(className).append("> mockObj").append(mockName).append(" = mockConstruction(").append(className).append(".class, (mock, context) -> {"); + StringBuilder tpl = new StringBuilder(); + tpl.append("MockedConstruction<").append(className).append("> mockObj").append(mockName) + .append(" = mockConstruction(").append(className).append(".class, (mock, context) -> {"); for (Statement method : methods) { J.MethodDeclaration m = (J.MethodDeclaration) method; - mockStatements.append("when(mock.").append(m.getSimpleName()); - appendMethod(mockStatements, m); + tpl.append("when(mock.").append(m.getSimpleName()); + appendMethod(tpl, m); } - mockStatements.append("});"); - - maybeAddImport("org.mockito.MockedConstruction", null, false); - shouldClose.add("mockObj" + mockName); + tpl.append("});"); + + md = JavaTemplate.builder(tpl.toString()) + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, "mockito-core-5")) + .imports("org.mockito.MockedConstruction") + .staticImports("org.mockito.Mockito.*") + .contextSensitive() + .build() + .apply(updateCursor(md), statement.getCoordinates().after()); + maybeAddImport("org.mockito.MockedConstruction"); + closeVariables.add("mockObj" + mockName); } - StringBuilder otherStatements = new StringBuilder(); - newClass.getBody() - .getStatements() - .stream() - .filter(s -> { - if (s instanceof J.MethodDeclaration) { - return ((J.MethodDeclaration) s).getLeadingAnnotations().stream() - .noneMatch(o -> TypeUtils.isOfClassType(o.getType(), "mockit.Mock")); - } - return true; - }) - .forEach(s -> { - otherStatements.append(s.printTrimmed()); - otherStatements.append(";"); - }); - - JavaTemplate tpl = JavaTemplate - .builder(otherStatements.toString() + mockStatements) - .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, "mockito-core-5")) - .imports("org.mockito.MockedStatic", "org.mockito.MockedConstruction") - .staticImports("org.mockito.Mockito.*") - .contextSensitive() - .build(); - md = maybeAutoFormat(md, tpl.apply(updateCursor(md), statement.getCoordinates().replace()), ctx); + // Only discard @Mock method declarations + aggregateOtherStatements.addAll( + newClass + .getBody() + .getStatements() + .stream() + .filter(s -> { + if (s instanceof J.MethodDeclaration) { + return ((J.MethodDeclaration) s).getLeadingAnnotations().stream() + .noneMatch(o -> TypeUtils.isOfClassType(o.getType(), "mockit.Mock")); + } + return true; + }) + .collect(toList()) + ); + + maybeAddImport("org.mockito.Mockito", "*", false); + maybeRemoveImport("mockit.Mock"); + maybeRemoveImport("mockit.MockUp"); } - for (String o : shouldClose) { - JavaTemplate tpl = JavaTemplate - .builder(o + ".close();") + // Add other statements at the front + List newBodyStatements = md.getBody() + .getStatements() + .stream() + .filter(s -> !excludeMockUp.contains(s)) + .collect(toList()); + newBodyStatements.addAll(0, aggregateOtherStatements); + md = md.withBody(md.getBody().withStatements(newBodyStatements)); + + // Add close statement at the end + for (String v : closeVariables) { + md = JavaTemplate.builder(v + ".close();") .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, "mockito-core-5")) .imports("org.mockito.MockedStatic", "org.mockito.MockedConstruction") .staticImports("org.mockito.Mockito.*") .contextSensitive() - .build(); - md = maybeAutoFormat(md, tpl.apply(updateCursor(md), md.getBody().getCoordinates().lastStatement()), ctx); + .build() + .apply(updateCursor(md), md.getBody().getCoordinates().lastStatement()); } - maybeAddImport("org.mockito.Mockito", "*", false); - maybeRemoveImport("mockit.Mock"); - maybeRemoveImport("mockit.MockUp"); - - return md; + doAfterVisit(new FindMissingTypes().getVisitor()); + return maybeAutoFormat(methodDeclaration, md, ctx); } } } diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index 9ce91d320..b3fe06260 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -17,11 +17,10 @@ import org.junit.jupiter.api.Test; import org.openrewrite.DocumentExample; -import org.openrewrite.test.RecipeSpec; -import org.openrewrite.test.RewriteTest; - import static org.openrewrite.java.Assertions.java; import static org.openrewrite.java.testing.jmockit.JMockitTestUtils.setParserSettings; +import org.openrewrite.test.RecipeSpec; +import org.openrewrite.test.RewriteTest; class JMockitMockUpToMockitoTest implements RewriteTest { @@ -35,73 +34,73 @@ public void defaults(RecipeSpec spec) { void mockUpStaticMethodTest() { //language=java rewriteRun( - java( - """ - import mockit.Mock; - import mockit.MockUp; - import static org.junit.Assert.assertEquals; - - class MockUpTest { - void test() { - new MockUp() { - - @Mock - public int staticMethod() { - return 1024; - } - - @Mock - public int staticMethod(int v) { - return 128; - } - }; - assertEquals(1024, MyClazz.staticMethod()); - assertEquals(128, MyClazz.staticMethod(0)); - } - - public static class MyClazz { - public static int staticMethod() { - return 0; - } - - public static int staticMethod(int v) { - return 1; - } - } - } - """, - """ - import org.mockito.MockedStatic; - - import static org.junit.Assert.assertEquals; - import static org.mockito.Mockito.*; - - class MockUpTest { - void test() { - MockedStatic mockStaticMockUpTest_MyClazz = mockStatic(MockUpTest.MyClazz.class); - mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod()).thenAnswer(invocation -> { - return 1024; - }); - mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> { - return 128; - }); - assertEquals(1024, MyClazz.staticMethod()); - assertEquals(128, MyClazz.staticMethod(0)); - mockStaticMockUpTest_MyClazz.close(); - } - - public static class MyClazz { - public static int staticMethod() { - return 0; - } - - public static int staticMethod(int v) { - return 1; - } - } - } - """ - ) + java( + """ + import mockit.Mock; + import mockit.MockUp; + import static org.junit.Assert.assertEquals; + + class MockUpTest { + void test() { + new MockUp() { + + @Mock + public int staticMethod() { + return 1024; + } + + @Mock + public int staticMethod(int v) { + return 128; + } + }; + assertEquals(1024, MyClazz.staticMethod()); + assertEquals(128, MyClazz.staticMethod(0)); + } + + public static class MyClazz { + public static int staticMethod() { + return 0; + } + + public static int staticMethod(int v) { + return 1; + } + } + } + """, + """ + import org.mockito.MockedStatic; + + import static org.junit.Assert.assertEquals; + import static org.mockito.Mockito.*; + + class MockUpTest { + void test() { + MockedStatic mockStaticMockUpTest_MyClazz = mockStatic(MockUpTest.MyClazz.class); + mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod()).thenAnswer(invocation -> { + return 1024; + }); + mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> { + return 128; + }); + assertEquals(1024, MyClazz.staticMethod()); + assertEquals(128, MyClazz.staticMethod(0)); + mockStaticMockUpTest_MyClazz.close(); + } + + public static class MyClazz { + public static int staticMethod() { + return 0; + } + + public static int staticMethod(int v) { + return 1; + } + } + } + """ + ) ); } @@ -109,79 +108,158 @@ public static int staticMethod(int v) { void mockUpInstanceMethodTest() { //language=java rewriteRun( - java( - """ - import mockit.Mock; - import mockit.MockUp; - import static org.junit.Assert.assertEquals; - - class MockUpTest { - void test() { - new MockUp() { - - @Mock - public String getMsg() { - return "mockMsg"; - } - - @Mock - public String getMsg(String echo) { - return "mockEchoMsg"; - } - }; - assertEquals("mockMsg", new MyClazz().getMsg()); - assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); - } - - public static class MyClazz { - public String getMsg() { - return "msg"; - } - - public String getMsg(String echo) { - return echo; - } - } - } - """, - """ - import org.mockito.MockedConstruction; - - import static org.junit.Assert.assertEquals; - import static org.mockito.Mockito.*; - - class MockUpTest { - void test() { - MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { - when(mock.getMsg()).thenAnswer(invocation -> { - return "mockMsg"; - }); - when(mock.getMsg(nullable(String.class))).thenAnswer(invocation -> { - return "mockEchoMsg"; - }); - }); - assertEquals("mockMsg", new MyClazz().getMsg()); - assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); - mockObjMockUpTest_MyClazz.close(); - } - - public static class MyClazz { - public String getMsg() { - return "msg"; - } - - public String getMsg(String echo) { - return echo; - } - } - } - """ - ) + java( + """ + import mockit.Mock; + import mockit.MockUp; + import static org.junit.Assert.assertEquals; + + class MockUpTest { + void test() { + new MockUp() { + + @Mock + public String getMsg() { + return "mockMsg"; + } + + @Mock + public String getMsg(String echo) { + return "mockEchoMsg"; + } + }; + assertEquals("mockMsg", new MyClazz().getMsg()); + assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + + public String getMsg(String echo) { + return echo; + } + } + } + """, + """ + import org.mockito.MockedConstruction; + + import static org.junit.Assert.assertEquals; + import static org.mockito.Mockito.*; + + class MockUpTest { + void test() { + MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { + when(mock.getMsg()).thenAnswer(invocation -> { + return "mockMsg"; + }); + when(mock.getMsg(nullable(String.class))).thenAnswer(invocation -> { + return "mockEchoMsg"; + }); + }); + assertEquals("mockMsg", new MyClazz().getMsg()); + assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); + mockObjMockUpTest_MyClazz.close(); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + + public String getMsg(String echo) { + return echo; + } + } + } + """ + ) + ); + } + + @Test + void mockUpInnerStatementTest() { + //language=java + rewriteRun( + java( + """ + import mockit.Mock; + import mockit.MockUp; + import org.junit.Test; + import static org.junit.Assert.assertEquals; + + public class MockUpTest { + @Test + public void test() { + new MockUp() { + final String msg = "newMsg"; + + @Mock + public String getMsg() { + return msg; + } + }; + + // Should ignore the newClass statement + new Runnable() { + @Override + public void run() { + System.out.println("run"); + } + }; + assertEquals("newMsg", new MyClazz().getMsg()); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + } + } + """, + """ + import org.junit.Test; + import org.mockito.MockedConstruction; + + import static org.junit.Assert.assertEquals; + import static org.mockito.Mockito.*; + + public class MockUpTest { + @Test + public void test() { + String msg = "newMsg"; + MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { + when(mock.getMsg()).thenAnswer(invocation -> { + return msg; + }); + }); + + // Should ignore the newClass statement + new Runnable() { + @Override + public void run() { + System.out.println("run"); + } + }; + assertEquals("newMsg", new MyClazz().getMsg()); + mockObjMockUpTest_MyClazz.close(); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + } + } + """ + ) ); } @Test - void mockUpInnerVariableTest() { + void mockUpMixTest() { //language=java rewriteRun( java( @@ -201,8 +279,18 @@ public void test() { public String getMsg() { return msg; } + + @Mock + public int staticMethod() { + return 1024; + } + + @Mock + public int staticMethod(int v) { + return 128; + } }; - + // Should ignore the newClass statement new Runnable() { @Override @@ -211,18 +299,29 @@ public void run() { } }; assertEquals("newMsg", new MyClazz().getMsg()); + assertEquals(1024, MyClazz.staticMethod()); + assertEquals(128, MyClazz.staticMethod(0)); } public static class MyClazz { public String getMsg() { return "msg"; } + + public static int staticMethod() { + return 0; + } + + public static int staticMethod(int v) { + return 1; + } } } """, """ import org.junit.Test; import org.mockito.MockedConstruction; + import org.mockito.MockedStatic; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.*; @@ -236,7 +335,14 @@ public void test() { return msg; }); }); - + MockedStatic mockStaticMockUpTest_MyClazz = mockStatic(MockUpTest.MyClazz.class); + mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod()).thenAnswer(invocation -> { + return 1024; + }); + mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> { + return 128; + }); + // Should ignore the newClass statement new Runnable() { @Override @@ -245,6 +351,9 @@ public void run() { } }; assertEquals("newMsg", new MyClazz().getMsg()); + assertEquals(1024, MyClazz.staticMethod()); + assertEquals(128, MyClazz.staticMethod(0)); + mockStaticMockUpTest_MyClazz.close(); mockObjMockUpTest_MyClazz.close(); } @@ -252,6 +361,14 @@ public static class MyClazz { public String getMsg() { return "msg"; } + + public static int staticMethod() { + return 0; + } + + public static int staticMethod(int v) { + return 1; + } } } """ From f9d9fa17b3e31a6da63e2b80325ad76784aea276 Mon Sep 17 00:00:00 2001 From: SiBorea Date: Wed, 11 Sep 2024 21:23:36 +0800 Subject: [PATCH 06/39] Remove debug statement --- .../openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index 084b23008..37b1d8be8 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -244,7 +244,6 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl .apply(updateCursor(md), md.getBody().getCoordinates().lastStatement()); } - doAfterVisit(new FindMissingTypes().getVisitor()); return maybeAutoFormat(methodDeclaration, md, ctx); } } From 694f1f069d048604c1805c294f71f22cef7b079a Mon Sep 17 00:00:00 2001 From: SiBorea Date: Thu, 12 Sep 2024 09:12:22 +0800 Subject: [PATCH 07/39] Fix code format --- .../jmockit/JMockitMockUpToMockito.java | 1 - .../jmockit/JMockitMockUpToMockitoTest.java | 636 +++++++++--------- 2 files changed, 318 insertions(+), 319 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index 37b1d8be8..969e5b6c7 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -23,7 +23,6 @@ import org.openrewrite.java.JavaIsoVisitor; import org.openrewrite.java.JavaParser; import org.openrewrite.java.JavaTemplate; -import org.openrewrite.java.search.FindMissingTypes; import org.openrewrite.java.search.UsesType; import static org.openrewrite.java.testing.jmockit.JMockitBlockType.MockUp; import static org.openrewrite.java.tree.Flag.Static; diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index b3fe06260..14647e639 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -34,73 +34,73 @@ public void defaults(RecipeSpec spec) { void mockUpStaticMethodTest() { //language=java rewriteRun( - java( - """ - import mockit.Mock; - import mockit.MockUp; - import static org.junit.Assert.assertEquals; - - class MockUpTest { - void test() { - new MockUp() { - - @Mock - public int staticMethod() { - return 1024; - } - - @Mock - public int staticMethod(int v) { - return 128; - } - }; - assertEquals(1024, MyClazz.staticMethod()); - assertEquals(128, MyClazz.staticMethod(0)); - } - - public static class MyClazz { - public static int staticMethod() { - return 0; - } - - public static int staticMethod(int v) { - return 1; - } - } - } - """, - """ - import org.mockito.MockedStatic; - - import static org.junit.Assert.assertEquals; - import static org.mockito.Mockito.*; - - class MockUpTest { - void test() { - MockedStatic mockStaticMockUpTest_MyClazz = mockStatic(MockUpTest.MyClazz.class); - mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod()).thenAnswer(invocation -> { - return 1024; - }); - mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> { - return 128; - }); - assertEquals(1024, MyClazz.staticMethod()); - assertEquals(128, MyClazz.staticMethod(0)); - mockStaticMockUpTest_MyClazz.close(); - } - - public static class MyClazz { - public static int staticMethod() { - return 0; - } - - public static int staticMethod(int v) { - return 1; - } - } - } - """ - ) + java( + """ + import mockit.Mock; + import mockit.MockUp; + import static org.junit.Assert.assertEquals; + + class MockUpTest { + void test() { + new MockUp() { + + @Mock + public int staticMethod() { + return 1024; + } + + @Mock + public int staticMethod(int v) { + return 128; + } + }; + assertEquals(1024, MyClazz.staticMethod()); + assertEquals(128, MyClazz.staticMethod(0)); + } + + public static class MyClazz { + public static int staticMethod() { + return 0; + } + + public static int staticMethod(int v) { + return 1; + } + } + } + """, + """ + import org.mockito.MockedStatic; + + import static org.junit.Assert.assertEquals; + import static org.mockito.Mockito.*; + + class MockUpTest { + void test() { + MockedStatic mockStaticMockUpTest_MyClazz = mockStatic(MockUpTest.MyClazz.class); + mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod()).thenAnswer(invocation -> { + return 1024; + }); + mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> { + return 128; + }); + assertEquals(1024, MyClazz.staticMethod()); + assertEquals(128, MyClazz.staticMethod(0)); + mockStaticMockUpTest_MyClazz.close(); + } + + public static class MyClazz { + public static int staticMethod() { + return 0; + } + + public static int staticMethod(int v) { + return 1; + } + } + } + """ + ) ); } @@ -108,74 +108,74 @@ public static int staticMethod(int v) { void mockUpInstanceMethodTest() { //language=java rewriteRun( - java( - """ - import mockit.Mock; - import mockit.MockUp; - import static org.junit.Assert.assertEquals; - - class MockUpTest { - void test() { - new MockUp() { - - @Mock - public String getMsg() { - return "mockMsg"; - } - - @Mock - public String getMsg(String echo) { - return "mockEchoMsg"; - } - }; - assertEquals("mockMsg", new MyClazz().getMsg()); - assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); - } - - public static class MyClazz { - public String getMsg() { - return "msg"; - } - - public String getMsg(String echo) { - return echo; - } - } - } - """, - """ - import org.mockito.MockedConstruction; - - import static org.junit.Assert.assertEquals; - import static org.mockito.Mockito.*; - - class MockUpTest { - void test() { - MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { - when(mock.getMsg()).thenAnswer(invocation -> { - return "mockMsg"; - }); - when(mock.getMsg(nullable(String.class))).thenAnswer(invocation -> { - return "mockEchoMsg"; - }); - }); - assertEquals("mockMsg", new MyClazz().getMsg()); - assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); - mockObjMockUpTest_MyClazz.close(); - } - - public static class MyClazz { - public String getMsg() { - return "msg"; - } - - public String getMsg(String echo) { - return echo; - } - } - } - """ - ) + java( + """ + import mockit.Mock; + import mockit.MockUp; + import static org.junit.Assert.assertEquals; + + class MockUpTest { + void test() { + new MockUp() { + + @Mock + public String getMsg() { + return "mockMsg"; + } + + @Mock + public String getMsg(String echo) { + return "mockEchoMsg"; + } + }; + assertEquals("mockMsg", new MyClazz().getMsg()); + assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + + public String getMsg(String echo) { + return echo; + } + } + } + """, + """ + import org.mockito.MockedConstruction; + + import static org.junit.Assert.assertEquals; + import static org.mockito.Mockito.*; + + class MockUpTest { + void test() { + MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { + when(mock.getMsg()).thenAnswer(invocation -> { + return "mockMsg"; + }); + when(mock.getMsg(nullable(String.class))).thenAnswer(invocation -> { + return "mockEchoMsg"; + }); + }); + assertEquals("mockMsg", new MyClazz().getMsg()); + assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); + mockObjMockUpTest_MyClazz.close(); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + + public String getMsg(String echo) { + return echo; + } + } + } + """ + ) ); } @@ -183,78 +183,78 @@ public String getMsg(String echo) { void mockUpInnerStatementTest() { //language=java rewriteRun( - java( - """ - import mockit.Mock; - import mockit.MockUp; - import org.junit.Test; - import static org.junit.Assert.assertEquals; - - public class MockUpTest { - @Test - public void test() { - new MockUp() { - final String msg = "newMsg"; - - @Mock - public String getMsg() { - return msg; - } - }; - - // Should ignore the newClass statement - new Runnable() { - @Override - public void run() { - System.out.println("run"); - } - }; - assertEquals("newMsg", new MyClazz().getMsg()); - } - - public static class MyClazz { - public String getMsg() { - return "msg"; - } - } - } - """, - """ - import org.junit.Test; - import org.mockito.MockedConstruction; - - import static org.junit.Assert.assertEquals; - import static org.mockito.Mockito.*; - - public class MockUpTest { - @Test - public void test() { - String msg = "newMsg"; - MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { - when(mock.getMsg()).thenAnswer(invocation -> { - return msg; - }); - }); - - // Should ignore the newClass statement - new Runnable() { - @Override - public void run() { - System.out.println("run"); - } - }; - assertEquals("newMsg", new MyClazz().getMsg()); - mockObjMockUpTest_MyClazz.close(); - } - - public static class MyClazz { - public String getMsg() { - return "msg"; - } - } - } - """ - ) + java( + """ + import mockit.Mock; + import mockit.MockUp; + import org.junit.Test; + import static org.junit.Assert.assertEquals; + + public class MockUpTest { + @Test + public void test() { + new MockUp() { + final String msg = "newMsg"; + + @Mock + public String getMsg() { + return msg; + } + }; + + // Should ignore the newClass statement + new Runnable() { + @Override + public void run() { + System.out.println("run"); + } + }; + assertEquals("newMsg", new MyClazz().getMsg()); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + } + } + """, + """ + import org.junit.Test; + import org.mockito.MockedConstruction; + + import static org.junit.Assert.assertEquals; + import static org.mockito.Mockito.*; + + public class MockUpTest { + @Test + public void test() { + String msg = "newMsg"; + MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { + when(mock.getMsg()).thenAnswer(invocation -> { + return msg; + }); + }); + + // Should ignore the newClass statement + new Runnable() { + @Override + public void run() { + System.out.println("run"); + } + }; + assertEquals("newMsg", new MyClazz().getMsg()); + mockObjMockUpTest_MyClazz.close(); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + } + } + """ + ) ); } @@ -262,117 +262,117 @@ public String getMsg() { void mockUpMixTest() { //language=java rewriteRun( - java( - """ - import mockit.Mock; - import mockit.MockUp; - import org.junit.Test; - import static org.junit.Assert.assertEquals; - - public class MockUpTest { - @Test - public void test() { - new MockUp() { - final String msg = "newMsg"; - - @Mock - public String getMsg() { - return msg; - } - - @Mock - public int staticMethod() { - return 1024; - } - - @Mock - public int staticMethod(int v) { - return 128; - } - }; - - // Should ignore the newClass statement - new Runnable() { - @Override - public void run() { - System.out.println("run"); - } - }; - assertEquals("newMsg", new MyClazz().getMsg()); - assertEquals(1024, MyClazz.staticMethod()); - assertEquals(128, MyClazz.staticMethod(0)); - } - - public static class MyClazz { - public String getMsg() { - return "msg"; - } - - public static int staticMethod() { - return 0; - } - - public static int staticMethod(int v) { - return 1; - } - } - } - """, - """ - import org.junit.Test; - import org.mockito.MockedConstruction; - import org.mockito.MockedStatic; - - import static org.junit.Assert.assertEquals; - import static org.mockito.Mockito.*; - - public class MockUpTest { - @Test - public void test() { - final String msg = "newMsg"; - MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { - when(mock.getMsg()).thenAnswer(invocation -> { - return msg; - }); - }); - MockedStatic mockStaticMockUpTest_MyClazz = mockStatic(MockUpTest.MyClazz.class); - mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod()).thenAnswer(invocation -> { - return 1024; - }); - mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> { - return 128; - }); - - // Should ignore the newClass statement - new Runnable() { - @Override - public void run() { - System.out.println("run"); - } - }; - assertEquals("newMsg", new MyClazz().getMsg()); - assertEquals(1024, MyClazz.staticMethod()); - assertEquals(128, MyClazz.staticMethod(0)); - mockStaticMockUpTest_MyClazz.close(); - mockObjMockUpTest_MyClazz.close(); - } - - public static class MyClazz { - public String getMsg() { - return "msg"; - } - - public static int staticMethod() { - return 0; - } - - public static int staticMethod(int v) { - return 1; - } - } - } - """ - ) + java( + """ + import mockit.Mock; + import mockit.MockUp; + import org.junit.Test; + import static org.junit.Assert.assertEquals; + + public class MockUpTest { + @Test + public void test() { + new MockUp() { + final String msg = "newMsg"; + + @Mock + public String getMsg() { + return msg; + } + + @Mock + public int staticMethod() { + return 1024; + } + + @Mock + public int staticMethod(int v) { + return 128; + } + }; + + // Should ignore the newClass statement + new Runnable() { + @Override + public void run() { + System.out.println("run"); + } + }; + assertEquals("newMsg", new MyClazz().getMsg()); + assertEquals(1024, MyClazz.staticMethod()); + assertEquals(128, MyClazz.staticMethod(0)); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + + public static int staticMethod() { + return 0; + } + + public static int staticMethod(int v) { + return 1; + } + } + } + """, + """ + import org.junit.Test; + import org.mockito.MockedConstruction; + import org.mockito.MockedStatic; + + import static org.junit.Assert.assertEquals; + import static org.mockito.Mockito.*; + + public class MockUpTest { + @Test + public void test() { + final String msg = "newMsg"; + MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { + when(mock.getMsg()).thenAnswer(invocation -> { + return msg; + }); + }); + MockedStatic mockStaticMockUpTest_MyClazz = mockStatic(MockUpTest.MyClazz.class); + mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod()).thenAnswer(invocation -> { + return 1024; + }); + mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> { + return 128; + }); + + // Should ignore the newClass statement + new Runnable() { + @Override + public void run() { + System.out.println("run"); + } + }; + assertEquals("newMsg", new MyClazz().getMsg()); + assertEquals(1024, MyClazz.staticMethod()); + assertEquals(128, MyClazz.staticMethod(0)); + mockStaticMockUpTest_MyClazz.close(); + mockObjMockUpTest_MyClazz.close(); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + + public static int staticMethod() { + return 0; + } + + public static int staticMethod(int v) { + return 1; + } + } + } + """ + ) ); } From 78a4aae82c26dc1b8ceb523d55aeb0ac92034ce1 Mon Sep 17 00:00:00 2001 From: SiBorea Date: Fri, 13 Sep 2024 15:10:08 +0800 Subject: [PATCH 08/39] Use CallRealMethod for non mock methods --- .../jmockit/JMockitMockUpToMockito.java | 294 ++++++---- .../jmockit/JMockitMockUpToMockitoTest.java | 545 +++++++++--------- 2 files changed, 443 insertions(+), 396 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index 969e5b6c7..dddd38c54 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -16,6 +16,7 @@ package org.openrewrite.java.testing.jmockit; import static java.util.stream.Collectors.toList; +import static java.util.stream.Collectors.toMap; import org.openrewrite.ExecutionContext; import org.openrewrite.Preconditions; import org.openrewrite.Recipe; @@ -25,15 +26,19 @@ import org.openrewrite.java.JavaTemplate; import org.openrewrite.java.search.UsesType; import static org.openrewrite.java.testing.jmockit.JMockitBlockType.MockUp; +import static org.openrewrite.java.tree.Flag.Private; import static org.openrewrite.java.tree.Flag.Static; import org.openrewrite.java.tree.J; import org.openrewrite.java.tree.JavaType; import org.openrewrite.java.tree.Statement; import org.openrewrite.java.tree.TypeUtils; +import java.util.AbstractMap; import java.util.ArrayList; import java.util.List; -import java.util.Set; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; import java.util.stream.Collectors; public class JMockitMockUpToMockito extends Recipe { @@ -53,57 +58,128 @@ public TreeVisitor getVisitor() { } private static class JMockitMockUpToMockitoVisitor extends JavaIsoVisitor { - private void appendMethod(StringBuilder sb, J.MethodDeclaration m) { - sb.append("("); - if (!m.getParameters().isEmpty()) { - for (int i = 0; i < m.getParameters().size(); i++) { - Statement s = m.getParameters().get(i); - if (s instanceof J.VariableDeclarations) { - J.VariableDeclarations param = (J.VariableDeclarations) s; - if (param.getType() instanceof JavaType.Primitive) { - switch (param.getType().toString()) { - case "int": - sb.append("anyInt()"); - break; - case "long": - sb.append("anyLong()"); - break; - case "double": - sb.append("anyDouble()"); - break; - case "float": - sb.append("anyFloat()"); - break; - case "short": - sb.append("anyShort()"); - break; - case "byte": - sb.append("anyByte()"); - break; - case "char": - sb.append("anyChar()"); - break; - case "boolean": - sb.append("anyBoolean()"); - break; - } - } else { - String paramType = param.getTypeAsFullyQualified().getClassName(); - sb.append("nullable(").append(paramType).append(".class").append(")"); - } - } - if (i < m.getParameters().size() - 1) { - sb.append(", "); - } + private String getMatcher(JavaType s) { + if (s instanceof JavaType.Primitive) { + switch (s.toString()) { + case "int": + return "anyInt()"; + case "long": + return "anyLong()"; + case "double": + return "anyDouble()"; + case "float": + return "anyFloat()"; + case "short": + return "anyShort()"; + case "byte": + return "anyByte()"; + case "char": + return "anyChar()"; + case "boolean": + return "anyBoolean()"; } + } else if (s instanceof JavaType.Array) { + String elem = TypeUtils.asArray(s).getElemType().toString(); + return "nullable(" + elem + "[].class)"; } - sb.append(")").append(")"); - sb.append(".thenAnswer(invocation -> {"); - for (Statement s : m.getBody().getStatements()) { - sb.append(s.printTrimmed()); + return "nullable(" + TypeUtils.asFullyQualified(s).getClassName() + ".class)"; + } + + private void appendAnswer(StringBuilder sb, List statements) { + boolean hasReturn = false; + for (Statement s : statements) { + hasReturn = hasReturn || s instanceof J.Return; + sb.append(s.print()); sb.append(";"); } - sb.append("});"); + if (!hasReturn) { + sb.append("return null;"); + } + } + + private void appendDoAnswer(StringBuilder sb, J.MethodDeclaration m, String objName) { + sb.append("doAnswer(invocation -> {"); + appendAnswer(sb, m.getBody().getStatements()); + sb.append("}).when(").append(objName).append(").").append(m.getSimpleName()).append("("); + + sb.append(m.getParameters() + .stream() + .filter(p -> p instanceof J.VariableDeclarations) + .map(o -> getMatcher(((J.VariableDeclarations) o).getType())) + .collect(Collectors.joining(", "))); + sb.append(");"); + } + + private void appendCallRealMethod(StringBuilder sb, JavaType.Method m) { + sb.append("("); + for (int i = 0; i < m.getParameterTypes().size(); i++) { + JavaType s = m.getParameterTypes().get(i); + sb.append(getMatcher(s)); + if (i < m.getParameterTypes().size() - 1) { + sb.append(", "); + } + } + sb.append(")).thenCallRealMethod();"); + } + + private String addMockStaticMethods(JavaType.Class clazz, String className, String mockName, Map mockedMethods) { + StringBuilder tpl = new StringBuilder(); + + // Handle mocked static mockedMethods + tpl.append("MockedStatic<").append(className).append("> mockStatic").append(mockName) + .append(" = mockStatic(").append(className).append(".class);"); + for (J.MethodDeclaration m : mockedMethods.keySet()) { + tpl.append("mockStatic").append(mockName); + tpl.append(".when(() -> ").append(className).append(".").append(m.getSimpleName()).append("("); + tpl.append(m.getParameters() + .stream() + .filter(p -> p instanceof J.VariableDeclarations) + .map(o -> getMatcher(((J.VariableDeclarations) o).getType())) + .collect(Collectors.joining(", "))); + tpl.append(")).thenAnswer(invocation -> {"); + appendAnswer(tpl, m.getBody().getStatements()); + tpl.append("});"); + } + + // Call real method for non private, static methods + clazz.getMethods() + .stream() + .filter(m -> !m.isConstructor()) + .filter(m -> !m.getFlags().contains(Private)) + .filter(m -> m.getFlags().contains(Static)) + .filter(m -> !mockedMethods.containsValue(m)) + .forEach(m -> { + tpl.append("mockStatic").append(mockName).append(".when(() -> ") + .append(className).append(".").append(m.getName()); + appendCallRealMethod(tpl, m); + tpl.append(");"); + }); + + return tpl.toString(); + } + + private String addMockInstanceMethods(JavaType.Class clazz, String className, String mockName, Map mockedMethods) { + StringBuilder tpl = new StringBuilder(); + tpl.append("MockedConstruction<").append(className).append("> mockObj").append(mockName) + .append(" = mockConstruction(").append(className).append(".class, (mock, context) -> {"); + for (J.MethodDeclaration m : mockedMethods.keySet()) { + appendDoAnswer(tpl, m, "mock"); + } + + // Call real method for non private, non static methods + clazz.getMethods() + .stream() + .filter(m -> !m.isConstructor()) + .filter(m -> !m.getFlags().contains(Static)) + .filter(m -> !m.getFlags().contains(Private)) + .filter(m -> !mockedMethods.containsValue(m)) + .forEach(m -> { + tpl.append("when(mock.").append(m.getName()); + appendCallRealMethod(tpl, m); + }); + + tpl.append("});"); + return tpl.toString(); } @Override @@ -114,8 +190,6 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl } List closeVariables = new ArrayList<>(); - List aggregateOtherStatements = new ArrayList<>(); - List excludeMockUp = new ArrayList<>(); for (Statement statement : md.getBody().getStatements()) { if (!(statement instanceof J.NewClass)) { continue; @@ -127,44 +201,60 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl continue; } - excludeMockUp.add(statement); + // Only discard @Mock method declarations + List otherStatements = newClass + .getBody() + .getStatements() + .stream() + .filter(s -> { + if (s instanceof J.MethodDeclaration) { + return ((J.MethodDeclaration) s).getLeadingAnnotations().stream() + .noneMatch(o -> TypeUtils.isOfClassType(o.getType(), "mockit.Mock")); + } + return true; + }) + .collect(toList()); + List bodyStatements = md.getBody().getStatements(); + bodyStatements.addAll(bodyStatements.indexOf(statement), otherStatements); + md = md.withBody(md.getBody().withStatements(bodyStatements)); + JavaType mockType = ((J.ParameterizedType) newClass.getClazz()).getTypeParameters().get(0).getType(); String className = TypeUtils.asFullyQualified(mockType).getClassName(); String mockName = className.replace(".", "_"); - List mockedMethods = newClass.getBody() + Map mockedMethods = newClass.getBody() .getStatements() .stream() .filter(s -> s instanceof J.MethodDeclaration) .filter(s -> ((J.MethodDeclaration) s).getLeadingAnnotations().stream() .anyMatch(o -> TypeUtils.isOfClassType(o.getType(), "mockit.Mock"))) - // Ignore void methods - .filter(s -> !"void".equals(((J.MethodDeclaration) s).getReturnTypeExpression().toString())) - .collect(toList()); - - Set staticMethods = ((JavaType.Class) mockType) - .getMethods() - .stream() - .filter(m -> m.getFlags().contains(Static)) - .map(JavaType.Method::getName) - .collect(Collectors.toSet()); + .map(s -> { + J.MethodDeclaration method = (J.MethodDeclaration) s; + Optional found = TypeUtils.findDeclaredMethod( + TypeUtils.asFullyQualified(mockType), + method.getSimpleName(), + method.getMethodType().getParameterTypes() + ); + if (found.isPresent()) { + JavaType.Method m = found.get(); + if (!m.getFlags().contains(Private)) { + return new AbstractMap.SimpleEntry<>(method, found.get()); + } + } + return null; + }) + .filter(Objects::nonNull) + .collect(toMap(Map.Entry::getKey, Map.Entry::getValue)); // Static - List methods = mockedMethods + Map mockedPublicStaticMethods = mockedMethods + .entrySet() .stream() - .filter(s -> staticMethods.contains(((J.MethodDeclaration) s).getSimpleName())) - .collect(toList()); - if (!methods.isEmpty()) { - StringBuilder tpl = new StringBuilder(); - tpl.append("MockedStatic<").append(className).append("> mockStatic").append(mockName) - .append(" = mockStatic(").append(className).append(".class);"); - for (Statement method : methods) { - J.MethodDeclaration m = (J.MethodDeclaration) method; - tpl.append("mockStatic").append(mockName).append(".when(() -> ").append(className).append(".").append(m.getSimpleName()); - appendMethod(tpl, m); - } - - md = JavaTemplate.builder(tpl.toString()) + .filter(m -> m.getValue().getFlags().contains(Static)) + .collect(toMap(Map.Entry::getKey, Map.Entry::getValue)); + if (!mockedPublicStaticMethods.isEmpty()) { + String tpl = addMockStaticMethods((JavaType.Class) mockType, className, mockName, mockedPublicStaticMethods); + md = JavaTemplate.builder(tpl) .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, "mockito-core-5")) .imports("org.mockito.MockedStatic") .staticImports("org.mockito.Mockito.*") @@ -176,22 +266,14 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl } // Instance - methods = mockedMethods + Map mockedPublicMethods = mockedMethods + .entrySet() .stream() - .filter(s -> !staticMethods.contains(((J.MethodDeclaration) s).getSimpleName())) - .collect(toList()); - if (!methods.isEmpty()) { - StringBuilder tpl = new StringBuilder(); - tpl.append("MockedConstruction<").append(className).append("> mockObj").append(mockName) - .append(" = mockConstruction(").append(className).append(".class, (mock, context) -> {"); - for (Statement method : methods) { - J.MethodDeclaration m = (J.MethodDeclaration) method; - tpl.append("when(mock.").append(m.getSimpleName()); - appendMethod(tpl, m); - } - tpl.append("});"); - - md = JavaTemplate.builder(tpl.toString()) + .filter(m -> !m.getValue().getFlags().contains(Static)) + .collect(toMap(Map.Entry::getKey, Map.Entry::getValue)); + if (!mockedPublicMethods.isEmpty()) { + String tpl = addMockInstanceMethods((JavaType.Class) mockType, className, mockName, mockedPublicMethods); + md = JavaTemplate.builder(tpl) .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, "mockito-core-5")) .imports("org.mockito.MockedConstruction") .staticImports("org.mockito.Mockito.*") @@ -202,35 +284,15 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl closeVariables.add("mockObj" + mockName); } - // Only discard @Mock method declarations - aggregateOtherStatements.addAll( - newClass - .getBody() - .getStatements() - .stream() - .filter(s -> { - if (s instanceof J.MethodDeclaration) { - return ((J.MethodDeclaration) s).getLeadingAnnotations().stream() - .noneMatch(o -> TypeUtils.isOfClassType(o.getType(), "mockit.Mock")); - } - return true; - }) - .collect(toList()) - ); - maybeAddImport("org.mockito.Mockito", "*", false); maybeRemoveImport("mockit.Mock"); maybeRemoveImport("mockit.MockUp"); - } - // Add other statements at the front - List newBodyStatements = md.getBody() - .getStatements() - .stream() - .filter(s -> !excludeMockUp.contains(s)) - .collect(toList()); - newBodyStatements.addAll(0, aggregateOtherStatements); - md = md.withBody(md.getBody().withStatements(newBodyStatements)); + // Remove MockUp statement + bodyStatements = md.getBody().getStatements(); + bodyStatements.remove(statement); + md = md.withBody(md.getBody().withStatements(bodyStatements)); + } // Add close statement at the end for (String v : closeVariables) { diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index 14647e639..2930e9e57 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -34,346 +34,331 @@ public void defaults(RecipeSpec spec) { void mockUpStaticMethodTest() { //language=java rewriteRun( - java( - """ - import mockit.Mock; - import mockit.MockUp; - import static org.junit.Assert.assertEquals; - - class MockUpTest { - void test() { - new MockUp() { - - @Mock - public int staticMethod() { - return 1024; - } - - @Mock - public int staticMethod(int v) { - return 128; - } - }; - assertEquals(1024, MyClazz.staticMethod()); - assertEquals(128, MyClazz.staticMethod(0)); - } - - public static class MyClazz { - public static int staticMethod() { - return 0; - } - - public static int staticMethod(int v) { - return 1; - } - } - } - """, - """ - import org.mockito.MockedStatic; - - import static org.junit.Assert.assertEquals; - import static org.mockito.Mockito.*; - - class MockUpTest { - void test() { - MockedStatic mockStaticMockUpTest_MyClazz = mockStatic(MockUpTest.MyClazz.class); - mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod()).thenAnswer(invocation -> { - return 1024; - }); - mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> { - return 128; - }); - assertEquals(1024, MyClazz.staticMethod()); - assertEquals(128, MyClazz.staticMethod(0)); - mockStaticMockUpTest_MyClazz.close(); - } - - public static class MyClazz { - public static int staticMethod() { - return 0; - } - - public static int staticMethod(int v) { - return 1; - } - } - } - """ - ) - ); + java(""" + import mockit.Mock; + import mockit.MockUp; + import static org.junit.Assert.assertEquals; + + class MockUpTest { + void test() { + new MockUp() { + + @Mock + public int staticMethod() { + return 1024; + } + + @Mock + public int staticMethod(int v) { + return 128; + } + }; + assertEquals(1024, MyClazz.staticMethod()); + assertEquals(128, MyClazz.staticMethod(0)); + } + + public static class MyClazz { + public static int staticMethod() { + return 0; + } + + public static int staticMethod(int v) { + return 1; + } + } + } + """, """ + import org.mockito.MockedStatic; + + import static org.junit.Assert.assertEquals; + import static org.mockito.Mockito.*; + + class MockUpTest { + void test() { + MockedStatic mockStaticMockUpTest_MyClazz = mockStatic(MockUpTest.MyClazz.class); + mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod()).thenAnswer(invocation -> { + return 1024; + }); + mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> { + return 128; + }); + assertEquals(1024, MyClazz.staticMethod()); + assertEquals(128, MyClazz.staticMethod(0)); + mockStaticMockUpTest_MyClazz.close(); + } + + public static class MyClazz { + public static int staticMethod() { + return 0; + } + + public static int staticMethod(int v) { + return 1; + } + } + } + """)); } @Test void mockUpInstanceMethodTest() { //language=java rewriteRun( - java( - """ - import mockit.Mock; - import mockit.MockUp; - import static org.junit.Assert.assertEquals; - - class MockUpTest { - void test() { - new MockUp() { - - @Mock - public String getMsg() { - return "mockMsg"; - } - - @Mock - public String getMsg(String echo) { - return "mockEchoMsg"; - } - }; - assertEquals("mockMsg", new MyClazz().getMsg()); - assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); - } - - public static class MyClazz { - public String getMsg() { - return "msg"; - } - - public String getMsg(String echo) { - return echo; - } - } - } - """, - """ - import org.mockito.MockedConstruction; - - import static org.junit.Assert.assertEquals; - import static org.mockito.Mockito.*; - - class MockUpTest { - void test() { - MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { - when(mock.getMsg()).thenAnswer(invocation -> { - return "mockMsg"; - }); - when(mock.getMsg(nullable(String.class))).thenAnswer(invocation -> { - return "mockEchoMsg"; - }); - }); - assertEquals("mockMsg", new MyClazz().getMsg()); - assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); - mockObjMockUpTest_MyClazz.close(); - } - - public static class MyClazz { - public String getMsg() { - return "msg"; - } - - public String getMsg(String echo) { - return echo; - } - } - } - """ - ) - ); + java(""" + import org.junit.Test; + import mockit.Mock; + import mockit.MockUp; + import static org.junit.Assert.assertEquals; + + public class MockUpTest { + @Test + public void test() { + new MockUp() { + @Mock + public String getMsg() { + return "mockMsg"; + } + @Mock + public String getMsg(String echo) { + return "mockEchoMsg"; + } + }; + assertEquals("mockMsg", new MyClazz().getMsg()); + assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + + public String getMsg(String echo) { + return echo; + } + } + } + """, """ + import org.junit.Test; + import org.mockito.MockedConstruction; + import static org.junit.Assert.assertEquals; + import static org.mockito.Mockito.*; + + public class MockUpTest { + @Test + public void test() { + MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { + doAnswer(invocation -> { + return "mockEchoMsg"; + }).when(mock).getMsg(nullable(String.class)); + doAnswer(invocation -> { + return "mockMsg"; + }).when(mock).getMsg(); + }); + assertEquals("mockMsg", new MyClazz().getMsg()); + assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); + mockObjMockUpTest_MyClazz.close(); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + + public String getMsg(String echo) { + return echo; + } + } + } + """)); } @Test void mockUpInnerStatementTest() { //language=java rewriteRun( - java( - """ - import mockit.Mock; - import mockit.MockUp; - import org.junit.Test; - import static org.junit.Assert.assertEquals; - - public class MockUpTest { - @Test - public void test() { - new MockUp() { - final String msg = "newMsg"; - - @Mock - public String getMsg() { - return msg; - } - }; - - // Should ignore the newClass statement - new Runnable() { - @Override - public void run() { - System.out.println("run"); - } - }; - assertEquals("newMsg", new MyClazz().getMsg()); - } - - public static class MyClazz { - public String getMsg() { - return "msg"; - } - } - } - """, - """ - import org.junit.Test; - import org.mockito.MockedConstruction; - - import static org.junit.Assert.assertEquals; - import static org.mockito.Mockito.*; - - public class MockUpTest { - @Test - public void test() { - String msg = "newMsg"; - MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { - when(mock.getMsg()).thenAnswer(invocation -> { - return msg; - }); - }); - - // Should ignore the newClass statement - new Runnable() { - @Override - public void run() { - System.out.println("run"); - } - }; - assertEquals("newMsg", new MyClazz().getMsg()); - mockObjMockUpTest_MyClazz.close(); - } - - public static class MyClazz { - public String getMsg() { - return "msg"; - } - } - } - """ - ) - ); + java(""" + import mockit.Mock; + import mockit.MockUp; + + import org.junit.Test; + import static org.junit.Assert.assertEquals; + + public class MockUpTest { + @Test + public void test() { + new MockUp() { + final String msg = "newMsg"; + + @Mock + public String getMsg() { + return msg; + } + }; + + // Should ignore the newClass statement + new Runnable() { + @Override + public void run() { + System.out.println("run"); + } + }; + assertEquals("newMsg", new MyClazz().getMsg()); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + } + } + """, """ + import org.junit.Test; + import org.mockito.MockedConstruction; + + import static org.junit.Assert.assertEquals; + import static org.mockito.Mockito.*; + + public class MockUpTest { + @Test + public void test() { + final String msg = "newMsg"; + MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { + doAnswer(invocation -> { + return msg; + }).when(mock).getMsg(); + }); + + // Should ignore the newClass statement + new Runnable() { + @Override + public void run() { + System.out.println("run"); + } + }; + assertEquals("newMsg", new MyClazz().getMsg()); + mockObjMockUpTest_MyClazz.close(); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + } + } + """)); } @Test - void mockUpMixTest() { + void mockUpVoidTest() { //language=java rewriteRun( - java( - """ + java(""" import mockit.Mock; import mockit.MockUp; - import org.junit.Test; import static org.junit.Assert.assertEquals; + import org.junit.Test; public class MockUpTest { @Test public void test() { - new MockUp() { - final String msg = "newMsg"; - - @Mock - public String getMsg() { - return msg; - } - + new MockUp() { @Mock - public int staticMethod() { - return 1024; + public void changeMsg() { + MockUpClass.Save.msg = "mockMsg"; } @Mock - public int staticMethod(int v) { - return 128; + public void changeText(String text) { + MockUpClass.Save.text = "mockText"; } }; - // Should ignore the newClass statement - new Runnable() { - @Override - public void run() { - System.out.println("run"); - } - }; - assertEquals("newMsg", new MyClazz().getMsg()); - assertEquals(1024, MyClazz.staticMethod()); - assertEquals(128, MyClazz.staticMethod(0)); + assertEquals("mockMsg", new MockUpClass().getMsg()); + assertEquals("mockText", new MockUpClass().getText()); } - public static class MyClazz { - public String getMsg() { - return "msg"; + public static class MockUpClass { + public static class Save { + public static String msg = "msg"; + public static String text = "text"; + } + + public final String getMsg() { + changeMsg(); + return Save.msg; + } + + public void changeMsg() { + Save.msg = "newMsg"; } - public static int staticMethod() { - return 0; + public String getText() { + changeText("newText"); + return Save.text; } - public static int staticMethod(int v) { - return 1; + public static void changeText(String text) { + Save.text = text; } } } """, """ + import static org.junit.Assert.assertEquals; + import static org.mockito.Mockito.*; + import org.junit.Test; import org.mockito.MockedConstruction; import org.mockito.MockedStatic; - import static org.junit.Assert.assertEquals; - import static org.mockito.Mockito.*; - public class MockUpTest { @Test public void test() { - final String msg = "newMsg"; - MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { - when(mock.getMsg()).thenAnswer(invocation -> { - return msg; - }); + MockedConstruction mockObjMockUpTest_MockUpClass = mockConstruction(MockUpTest.MockUpClass.class, (mock, context) -> { + doAnswer(invocation -> { + MockUpClass.Save.msg = "mockMsg"; + return null; + }).when(mock).changeMsg(); + when(mock.getText()).thenCallRealMethod(); + when(mock.getMsg()).thenCallRealMethod(); }); - MockedStatic mockStaticMockUpTest_MyClazz = mockStatic(MockUpTest.MyClazz.class); - mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod()).thenAnswer(invocation -> { - return 1024; - }); - mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> { - return 128; + MockedStatic mockStaticMockUpTest_MockUpClass = mockStatic(MockUpTest.MockUpClass.class); + mockStaticMockUpTest_MockUpClass.when(() -> MockUpTest.MockUpClass.changeText(nullable(String.class))).thenAnswer(invocation -> { + MockUpClass.Save.text = "mockText"; + return null; }); - // Should ignore the newClass statement - new Runnable() { - @Override - public void run() { - System.out.println("run"); - } - }; - assertEquals("newMsg", new MyClazz().getMsg()); - assertEquals(1024, MyClazz.staticMethod()); - assertEquals(128, MyClazz.staticMethod(0)); - mockStaticMockUpTest_MyClazz.close(); - mockObjMockUpTest_MyClazz.close(); + assertEquals("mockMsg", new MockUpClass().getMsg()); + assertEquals("mockText", new MockUpClass().getText()); + mockStaticMockUpTest_MockUpClass.close(); + mockObjMockUpTest_MockUpClass.close(); } - public static class MyClazz { - public String getMsg() { - return "msg"; + public static class MockUpClass { + public static class Save { + public static String msg = "msg"; + public static String text = "text"; + } + + public final String getMsg() { + changeMsg(); + return Save.msg; + } + + public void changeMsg() { + Save.msg = "newMsg"; } - public static int staticMethod() { - return 0; + public String getText() { + changeText("newText"); + return Save.text; } - public static int staticMethod(int v) { - return 1; + public static void changeText(String text) { + Save.text = text; } } } - """ - ) - ); + """)); } - } From cda1e64948d1ba0f42d209909579d457c134e536 Mon Sep 17 00:00:00 2001 From: SiBorea <108953913+SiBorea@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:54:58 +0800 Subject: [PATCH 09/39] Update src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../java/testing/jmockit/JMockitMockUpToMockitoTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index 2930e9e57..9fff7f42e 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -252,7 +252,8 @@ public String getMsg() { void mockUpVoidTest() { //language=java rewriteRun( - java(""" + java( + """ import mockit.Mock; import mockit.MockUp; import static org.junit.Assert.assertEquals; From 4589bb3ff929bb0207c477ab2bdb71a50760eb7d Mon Sep 17 00:00:00 2001 From: SiBorea <108953913+SiBorea@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:55:10 +0800 Subject: [PATCH 10/39] Update src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../java/testing/jmockit/JMockitMockUpToMockitoTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index 9fff7f42e..64a8cc829 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -176,7 +176,8 @@ public String getMsg(String echo) { void mockUpInnerStatementTest() { //language=java rewriteRun( - java(""" + java( + """ import mockit.Mock; import mockit.MockUp; From c90fb67b91fd735e48b978ab70c868e65ae9d7dd Mon Sep 17 00:00:00 2001 From: SiBorea <108953913+SiBorea@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:55:24 +0800 Subject: [PATCH 11/39] Update src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../java/testing/jmockit/JMockitMockUpToMockitoTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index 64a8cc829..023777268 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -104,7 +104,8 @@ public static int staticMethod(int v) { void mockUpInstanceMethodTest() { //language=java rewriteRun( - java(""" + java( + """ import org.junit.Test; import mockit.Mock; import mockit.MockUp; From 7c7fecceb182bc6e2ff611be932e97df36b8e8b5 Mon Sep 17 00:00:00 2001 From: SiBorea <108953913+SiBorea@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:55:32 +0800 Subject: [PATCH 12/39] Update src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../java/testing/jmockit/JMockitMockUpToMockitoTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index 023777268..a57ffecec 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -34,7 +34,8 @@ public void defaults(RecipeSpec spec) { void mockUpStaticMethodTest() { //language=java rewriteRun( - java(""" + java( + """ import mockit.Mock; import mockit.MockUp; import static org.junit.Assert.assertEquals; From 8a71eb8971793d80f10fe2c638b3dfe02468ec6a Mon Sep 17 00:00:00 2001 From: SiBorea <108953913+SiBorea@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:55:39 +0800 Subject: [PATCH 13/39] Update src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../java/testing/jmockit/JMockitMockUpToMockitoTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index a57ffecec..aa7185160 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -19,6 +19,7 @@ import org.openrewrite.DocumentExample; import static org.openrewrite.java.Assertions.java; import static org.openrewrite.java.testing.jmockit.JMockitTestUtils.setParserSettings; + import org.openrewrite.test.RecipeSpec; import org.openrewrite.test.RewriteTest; From f9827b0f25f7906d501338dbc1a030bb352053ef Mon Sep 17 00:00:00 2001 From: SiBorea <108953913+SiBorea@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:55:46 +0800 Subject: [PATCH 14/39] Update src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../java/testing/jmockit/JMockitMockUpToMockito.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index dddd38c54..26165400d 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -41,6 +41,12 @@ import java.util.Optional; import java.util.stream.Collectors; +import static java.util.stream.Collectors.toList; +import static java.util.stream.Collectors.toMap; +import static org.openrewrite.java.testing.jmockit.JMockitBlockType.MockUp; +import static org.openrewrite.java.tree.Flag.Private; +import static org.openrewrite.java.tree.Flag.Static; + public class JMockitMockUpToMockito extends Recipe { @Override public String getDisplayName() { From 34589a0f092094cf5f687df412fa105ed9148086 Mon Sep 17 00:00:00 2001 From: SiBorea <108953913+SiBorea@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:55:55 +0800 Subject: [PATCH 15/39] Update src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../java/testing/jmockit/JMockitMockUpToMockito.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index 26165400d..d1cb0c439 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -15,8 +15,6 @@ */ package org.openrewrite.java.testing.jmockit; -import static java.util.stream.Collectors.toList; -import static java.util.stream.Collectors.toMap; import org.openrewrite.ExecutionContext; import org.openrewrite.Preconditions; import org.openrewrite.Recipe; From e03719a6e5bb8078c004103dd3b1ad21e3624335 Mon Sep 17 00:00:00 2001 From: SiBorea <108953913+SiBorea@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:56:05 +0800 Subject: [PATCH 16/39] Update src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../java/testing/jmockit/JMockitMockUpToMockito.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index d1cb0c439..00be0b4fb 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -23,9 +23,6 @@ import org.openrewrite.java.JavaParser; import org.openrewrite.java.JavaTemplate; import org.openrewrite.java.search.UsesType; -import static org.openrewrite.java.testing.jmockit.JMockitBlockType.MockUp; -import static org.openrewrite.java.tree.Flag.Private; -import static org.openrewrite.java.tree.Flag.Static; import org.openrewrite.java.tree.J; import org.openrewrite.java.tree.JavaType; import org.openrewrite.java.tree.Statement; From 6c9d15665fcbea877928251620535649c89b1fd8 Mon Sep 17 00:00:00 2001 From: SiBorea Date: Wed, 18 Sep 2024 15:31:11 +0800 Subject: [PATCH 17/39] Add description about private methods --- .../java/testing/jmockit/JMockitMockUpToMockito.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index 00be0b4fb..45da36a94 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -50,7 +50,7 @@ public String getDisplayName() { @Override public String getDescription() { - return "Rewrites JMockit `MockUp` blocks to Mockito statements."; + return "Rewrites JMockit `MockUp` blocks to Mockito statements. This recipe will not rewrite private methods in MockUp."; } @Override From 162352f1870753d4aec3f1d02b81f984e7b5ad3c Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Wed, 18 Sep 2024 11:08:07 +0200 Subject: [PATCH 18/39] Update JMockitMockUpToMockitoTest.java --- .../java/testing/jmockit/JMockitMockUpToMockitoTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index aa7185160..724f03550 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -17,12 +17,12 @@ import org.junit.jupiter.api.Test; import org.openrewrite.DocumentExample; -import static org.openrewrite.java.Assertions.java; -import static org.openrewrite.java.testing.jmockit.JMockitTestUtils.setParserSettings; - import org.openrewrite.test.RecipeSpec; import org.openrewrite.test.RewriteTest; +import static org.openrewrite.java.Assertions.java; +import static org.openrewrite.java.testing.jmockit.JMockitTestUtils.setParserSettings; + class JMockitMockUpToMockitoTest implements RewriteTest { @Override From a852a605480415bc3c82b3b039e2df53f814d673 Mon Sep 17 00:00:00 2001 From: SiBorea Date: Thu, 19 Sep 2024 09:08:55 +0800 Subject: [PATCH 19/39] Fix UT to match gralde build order --- .../testing/jmockit/JMockitMockUpToMockitoTest.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index 724f03550..36c56daba 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -78,12 +78,12 @@ public static int staticMethod(int v) { class MockUpTest { void test() { MockedStatic mockStaticMockUpTest_MyClazz = mockStatic(MockUpTest.MyClazz.class); - mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod()).thenAnswer(invocation -> { - return 1024; - }); mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> { return 128; }); + mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod()).thenAnswer(invocation -> { + return 1024; + }); assertEquals(1024, MyClazz.staticMethod()); assertEquals(128, MyClazz.staticMethod(0)); mockStaticMockUpTest_MyClazz.close(); @@ -150,12 +150,12 @@ public class MockUpTest { @Test public void test() { MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { - doAnswer(invocation -> { - return "mockEchoMsg"; - }).when(mock).getMsg(nullable(String.class)); doAnswer(invocation -> { return "mockMsg"; }).when(mock).getMsg(); + doAnswer(invocation -> { + return "mockEchoMsg"; + }).when(mock).getMsg(nullable(String.class)); }); assertEquals("mockMsg", new MyClazz().getMsg()); assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); From 4ef5811b1b7c235c0917ae59b6f71a2befa830f5 Mon Sep 17 00:00:00 2001 From: SiBorea <108953913+SiBorea@users.noreply.github.com> Date: Mon, 23 Sep 2024 01:32:49 +0800 Subject: [PATCH 20/39] Add setUp/tearDown support --- .../jmockit/JMockitMockUpToMockito.java | 415 +++++++++----- .../java/testing/mockito/MockitoUtils.java | 75 +++ .../PowerMockitoMockStaticToMockito.java | 232 ++++---- .../jmockit/JMockitMockUpToMockitoTest.java | 507 ++++++++++-------- 4 files changed, 733 insertions(+), 496 deletions(-) create mode 100644 src/main/java/org/openrewrite/java/testing/mockito/MockitoUtils.java diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index 45da36a94..08c9103f4 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -15,34 +15,34 @@ */ package org.openrewrite.java.testing.jmockit; -import org.openrewrite.ExecutionContext; -import org.openrewrite.Preconditions; -import org.openrewrite.Recipe; -import org.openrewrite.TreeVisitor; +import org.openrewrite.*; import org.openrewrite.java.JavaIsoVisitor; import org.openrewrite.java.JavaParser; import org.openrewrite.java.JavaTemplate; -import org.openrewrite.java.search.UsesType; -import org.openrewrite.java.tree.J; -import org.openrewrite.java.tree.JavaType; -import org.openrewrite.java.tree.Statement; -import org.openrewrite.java.tree.TypeUtils; - -import java.util.AbstractMap; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; +import org.openrewrite.java.search.*; +import org.openrewrite.java.tree.*; +import org.openrewrite.marker.SearchResult; + +import java.util.*; import java.util.stream.Collectors; import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toMap; import static org.openrewrite.java.testing.jmockit.JMockitBlockType.MockUp; +import static org.openrewrite.java.testing.mockito.MockitoUtils.maybeAddMethodWithAnnotation; import static org.openrewrite.java.tree.Flag.Private; import static org.openrewrite.java.tree.Flag.Static; public class JMockitMockUpToMockito extends Recipe { + private static final String MOCKITO_CLASSPATH = "mockito-core-5"; + private static final String MOCKITO_ALL_IMPORT = "org.mockito.Mockito.*"; + private static final String JMOCKIT_MOCKUP_IMPORT = "mockit.MockUp"; + private static final String JMOCKIT_MOCK_IMPORT = "mockit.Mock"; + private static final String MOCKITO_STATIC_PREFIX = "mockStatic"; + private static final String MOCKITO_STATIC_IMPORT = "org.mockito.MockedStatic"; + private static final String MOCKITO_CONSTRUCTION_PREFIX = "mockObj"; + private static final String MOCKITO_CONSTRUCTION_IMPORT = "org.mockito.MockedConstruction"; + @Override public String getDisplayName() { return "Rewrite JMockit MockUp to Mockito statements"; @@ -59,6 +59,8 @@ public TreeVisitor getVisitor() { } private static class JMockitMockUpToMockitoVisitor extends JavaIsoVisitor { + private List tearDownMocks = new ArrayList<>(); + private String getMatcher(JavaType s) { if (s instanceof JavaType.Primitive) { switch (s.toString()) { @@ -104,10 +106,10 @@ private void appendDoAnswer(StringBuilder sb, J.MethodDeclaration m, String objN sb.append("}).when(").append(objName).append(").").append(m.getSimpleName()).append("("); sb.append(m.getParameters() - .stream() - .filter(p -> p instanceof J.VariableDeclarations) - .map(o -> getMatcher(((J.VariableDeclarations) o).getType())) - .collect(Collectors.joining(", "))); + .stream() + .filter(J.VariableDeclarations.class::isInstance) + .map(o -> getMatcher(((J.VariableDeclarations) o).getType())) + .collect(Collectors.joining(", "))); sb.append(");"); } @@ -123,20 +125,27 @@ private void appendCallRealMethod(StringBuilder sb, JavaType.Method m) { sb.append(")).thenCallRealMethod();"); } - private String addMockStaticMethods(JavaType.Class clazz, String className, String mockName, Map mockedMethods) { + private String addMockStaticMethods(boolean isBeforeTest, JavaType.Class clazz, String className, String mockName, Map mockedMethods) { StringBuilder tpl = new StringBuilder(); // Handle mocked static mockedMethods - tpl.append("MockedStatic<").append(className).append("> mockStatic").append(mockName) - .append(" = mockStatic(").append(className).append(".class);"); - for (J.MethodDeclaration m : mockedMethods.keySet()) { + if (!isBeforeTest) { + tpl.append("MockedStatic<").append(className).append("> "); + } + tpl.append(MOCKITO_STATIC_PREFIX).append(mockName).append(" = mockStatic(").append(className).append(".class);"); + + // To generate predictable method order + List keys = mockedMethods.keySet().stream() + .sorted(Comparator.comparing((J.MethodDeclaration::print))) + .collect(toList()); + for (J.MethodDeclaration m : keys) { tpl.append("mockStatic").append(mockName); tpl.append(".when(() -> ").append(className).append(".").append(m.getSimpleName()).append("("); tpl.append(m.getParameters() - .stream() - .filter(p -> p instanceof J.VariableDeclarations) - .map(o -> getMatcher(((J.VariableDeclarations) o).getType())) - .collect(Collectors.joining(", "))); + .stream() + .filter(J.VariableDeclarations.class::isInstance) + .map(o -> getMatcher(((J.VariableDeclarations) o).getType())) + .collect(Collectors.joining(", "))); tpl.append(")).thenAnswer(invocation -> {"); appendAnswer(tpl, m.getBody().getStatements()); tpl.append("});"); @@ -144,77 +153,228 @@ private String addMockStaticMethods(JavaType.Class clazz, String className, Stri // Call real method for non private, static methods clazz.getMethods() - .stream() - .filter(m -> !m.isConstructor()) - .filter(m -> !m.getFlags().contains(Private)) - .filter(m -> m.getFlags().contains(Static)) - .filter(m -> !mockedMethods.containsValue(m)) - .forEach(m -> { - tpl.append("mockStatic").append(mockName).append(".when(() -> ") - .append(className).append(".").append(m.getName()); - appendCallRealMethod(tpl, m); - tpl.append(");"); - }); + .stream() + .filter(m -> !m.isConstructor()) + .filter(m -> !m.getFlags().contains(Private)) + .filter(m -> m.getFlags().contains(Static)) + .filter(m -> !mockedMethods.containsValue(m)) + .forEach(m -> { + tpl.append("mockStatic").append(mockName).append(".when(() -> ") + .append(className).append(".").append(m.getName()); + appendCallRealMethod(tpl, m); + tpl.append(");"); + }); return tpl.toString(); } - private String addMockInstanceMethods(JavaType.Class clazz, String className, String mockName, Map mockedMethods) { + private String addMockInstanceMethods(boolean isBeforeTest, JavaType.Class clazz, String className, String mockName, Map mockedMethods) { StringBuilder tpl = new StringBuilder(); - tpl.append("MockedConstruction<").append(className).append("> mockObj").append(mockName) - .append(" = mockConstruction(").append(className).append(".class, (mock, context) -> {"); - for (J.MethodDeclaration m : mockedMethods.keySet()) { + // Handle mocked static mockedMethods + if (!isBeforeTest) { + tpl.append("MockedConstruction<").append(className).append("> "); + } + tpl.append(MOCKITO_CONSTRUCTION_PREFIX).append(mockName) + .append(" = mockConstruction(").append(className).append(".class, (mock, context) -> {"); + + // To generate predictable method order + List keys = mockedMethods.keySet().stream() + .sorted(Comparator.comparing((J.MethodDeclaration::print))) + .collect(toList()); + for (J.MethodDeclaration m : keys) { appendDoAnswer(tpl, m, "mock"); } // Call real method for non private, non static methods clazz.getMethods() - .stream() - .filter(m -> !m.isConstructor()) - .filter(m -> !m.getFlags().contains(Static)) - .filter(m -> !m.getFlags().contains(Private)) - .filter(m -> !mockedMethods.containsValue(m)) - .forEach(m -> { - tpl.append("when(mock.").append(m.getName()); - appendCallRealMethod(tpl, m); - }); + .stream() + .filter(m -> !m.isConstructor()) + .filter(m -> !m.getFlags().contains(Static)) + .filter(m -> !m.getFlags().contains(Private)) + .filter(m -> !mockedMethods.containsValue(m)) + .forEach(m -> { + tpl.append("when(mock.").append(m.getName()); + appendCallRealMethod(tpl, m); + }); tpl.append("});"); return tpl.toString(); } + private boolean isMockUpStatement(Tree tree) { + return tree instanceof J.NewClass && + ((J.NewClass) tree).getClazz() != null && + TypeUtils.isOfClassType(((J.NewClass) tree).getClazz().getType(), JMOCKIT_MOCKUP_IMPORT); + } + + private boolean isSetUpMethod(J.MethodDeclaration md) { + return md.getLeadingAnnotations().stream() + .anyMatch(o -> + TypeUtils.isOfClassType(o.getType(), "org.junit.Before") || + TypeUtils.isOfClassType(o.getType(), "org.junit.jupiter.api.BeforeEach") + ); + } + + private boolean isTearDownMethod(J.MethodDeclaration md) { + return md.getLeadingAnnotations().stream() + .anyMatch(o -> + TypeUtils.isOfClassType(o.getType(), "org.junit.After") || + TypeUtils.isOfClassType(o.getType(), "org.junit.jupiter.api.AfterEach") + ); + } + + private Map getMockUpMethods(J.NewClass newClass) { + JavaType mockType = ((J.ParameterizedType) newClass.getClazz()).getTypeParameters().get(0).getType(); + return newClass.getBody() + .getStatements() + .stream() + .filter(J.MethodDeclaration.class::isInstance) + .map(J.MethodDeclaration.class::cast) + .filter(s -> s.getLeadingAnnotations().stream() + .anyMatch(o -> TypeUtils.isOfClassType(o.getType(), JMOCKIT_MOCK_IMPORT))) + .map(method -> { + Optional found = TypeUtils.findDeclaredMethod( + TypeUtils.asFullyQualified(mockType), + method.getSimpleName(), + method.getMethodType().getParameterTypes() + ); + if (found.isPresent()) { + JavaType.Method m = found.get(); + if (!m.getFlags().contains(Private)) { + return new AbstractMap.SimpleEntry<>(method, found.get()); + } + } + return null; + }) + .filter(Objects::nonNull) + .collect(toMap(Map.Entry::getKey, Map.Entry::getValue)); + } + + @Override + public J.ClassDeclaration visitClassDeclaration(J.ClassDeclaration classDecl, ExecutionContext ctx) { + // Handle @Before/@BeforeEach mockUp + Set mds = TreeVisitor.collect( + new JavaIsoVisitor() { + @Override + public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration md, ExecutionContext ctx) { + if (isSetUpMethod(md)) { + return SearchResult.found(md); + } + return super.visitMethodDeclaration(md, ctx); + } + }, + classDecl, + new HashSet<>() + ) + .stream() + .filter(J.MethodDeclaration.class::isInstance) + .map(J.MethodDeclaration.class::cast) + .collect(Collectors.toSet()); + if (mds.isEmpty()) { + return super.visitClassDeclaration(classDecl, ctx); + } + + final J.ClassDeclaration[] cd = {classDecl}; + mds.forEach(md -> md.getBody() + .getStatements() + .stream() + .filter(this::isMockUpStatement) + .map(J.NewClass.class::cast) + .forEach(newClass -> { + JavaType mockType = ((J.ParameterizedType) newClass.getClazz()).getTypeParameters().get(0).getType(); + String className = TypeUtils.asFullyQualified(mockType).getClassName(); + String mockName = className.replace(".", "_"); + Map mockedMethods = getMockUpMethods(newClass); + + // Add mockStatic field + if (mockedMethods.values().stream().anyMatch(m -> m.getFlags().contains(Static))) { + cd[0] = JavaTemplate.builder("private MockedStatic<#{}> " + MOCKITO_STATIC_PREFIX + "#{};") + .contextSensitive() + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) + .imports(MOCKITO_STATIC_IMPORT) + .staticImports(MOCKITO_ALL_IMPORT) + .build() + .apply( + new Cursor(getCursor().getParentOrThrow(), cd[0]), + cd[0].getBody().getCoordinates().firstStatement(), + className, + mockName + ); + tearDownMocks.add(MOCKITO_STATIC_PREFIX + mockName); + } + // Add mockConstruction field + if (mockedMethods.values().stream().anyMatch(m -> !m.getFlags().contains(Static))) { + cd[0] = JavaTemplate.builder("private MockedConstruction<" + className + "> " + MOCKITO_CONSTRUCTION_PREFIX + mockName + ";") + .contextSensitive() + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) + .imports(MOCKITO_CONSTRUCTION_IMPORT) + .staticImports(MOCKITO_ALL_IMPORT) + .doBeforeParseTemplate(System.out::println) + .build() + .apply( + updateCursor(cd[0]), + cd[0].getBody().getCoordinates().firstStatement() + ); + tearDownMocks.add(MOCKITO_CONSTRUCTION_PREFIX + mockName); + } + })); + + cd[0] = maybeAddMethodWithAnnotation(this, cd[0], ctx, "tearDownMocks", + "@org.junit.After", + "@After", + "junit-4.13", + "org.junit.After", + ""); + + maybeAutoFormat(cd[0], cd[0].withPrefix(cd[0].getPrefix(). + withWhitespace("")), cd[0].getName(), ctx, getCursor()); + return super.visitClassDeclaration(cd[0], ctx); + } + @Override - public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDeclaration, ExecutionContext ctx) { - J.MethodDeclaration md = super.visitMethodDeclaration(methodDeclaration, ctx); + public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration md, ExecutionContext ctx) { if (md.getBody() == null) { return md; } + if (isTearDownMethod(md)) { + for (String v : tearDownMocks) { + md = JavaTemplate.builder(v + ".closeOnDemand();") + .contextSensitive() + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) + .imports(MOCKITO_STATIC_IMPORT, MOCKITO_CONSTRUCTION_IMPORT) + .staticImports(MOCKITO_ALL_IMPORT) + .doBeforeParseTemplate(System.out::println) + .build() + .apply( + updateCursor(md), + md.getBody().getCoordinates().lastStatement() + ); + } + return super.visitMethodDeclaration(md, ctx); + } - List closeVariables = new ArrayList<>(); + List openedMocks = new ArrayList<>(); + boolean isBeforeTest = isSetUpMethod(md); for (Statement statement : md.getBody().getStatements()) { - if (!(statement instanceof J.NewClass)) { + if (!isMockUpStatement(statement)) { continue; } J.NewClass newClass = (J.NewClass) statement; - if (newClass.getClazz() == null || newClass.getBody() == null || - !TypeUtils.isOfClassType(newClass.getClazz().getType(), "mockit.MockUp")) { - continue; - } // Only discard @Mock method declarations List otherStatements = newClass - .getBody() - .getStatements() - .stream() - .filter(s -> { - if (s instanceof J.MethodDeclaration) { - return ((J.MethodDeclaration) s).getLeadingAnnotations().stream() - .noneMatch(o -> TypeUtils.isOfClassType(o.getType(), "mockit.Mock")); - } - return true; - }) - .collect(toList()); + .getBody() + .getStatements() + .stream() + .filter(s -> { + if (s instanceof J.MethodDeclaration) { + return ((J.MethodDeclaration) s).getLeadingAnnotations().stream() + .noneMatch(o -> TypeUtils.isOfClassType(o.getType(), JMOCKIT_MOCK_IMPORT)); + } + return true; + }) + .collect(toList()); List bodyStatements = md.getBody().getStatements(); bodyStatements.addAll(bodyStatements.indexOf(statement), otherStatements); md = md.withBody(md.getBody().withStatements(bodyStatements)); @@ -223,71 +383,52 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl String className = TypeUtils.asFullyQualified(mockType).getClassName(); String mockName = className.replace(".", "_"); - Map mockedMethods = newClass.getBody() - .getStatements() - .stream() - .filter(s -> s instanceof J.MethodDeclaration) - .filter(s -> ((J.MethodDeclaration) s).getLeadingAnnotations().stream() - .anyMatch(o -> TypeUtils.isOfClassType(o.getType(), "mockit.Mock"))) - .map(s -> { - J.MethodDeclaration method = (J.MethodDeclaration) s; - Optional found = TypeUtils.findDeclaredMethod( - TypeUtils.asFullyQualified(mockType), - method.getSimpleName(), - method.getMethodType().getParameterTypes() - ); - if (found.isPresent()) { - JavaType.Method m = found.get(); - if (!m.getFlags().contains(Private)) { - return new AbstractMap.SimpleEntry<>(method, found.get()); - } - } - return null; - }) - .filter(Objects::nonNull) - .collect(toMap(Map.Entry::getKey, Map.Entry::getValue)); - - // Static + Map mockedMethods = getMockUpMethods(newClass); + + // Add MockStatic Map mockedPublicStaticMethods = mockedMethods - .entrySet() - .stream() - .filter(m -> m.getValue().getFlags().contains(Static)) - .collect(toMap(Map.Entry::getKey, Map.Entry::getValue)); + .entrySet() + .stream() + .filter(m -> m.getValue().getFlags().contains(Static)) + .collect(toMap(Map.Entry::getKey, Map.Entry::getValue)); if (!mockedPublicStaticMethods.isEmpty()) { - String tpl = addMockStaticMethods((JavaType.Class) mockType, className, mockName, mockedPublicStaticMethods); - md = JavaTemplate.builder(tpl) - .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, "mockito-core-5")) - .imports("org.mockito.MockedStatic") - .staticImports("org.mockito.Mockito.*") - .contextSensitive() - .build() - .apply(updateCursor(md), statement.getCoordinates().after()); - maybeAddImport("org.mockito.MockedStatic"); - closeVariables.add("mockStatic" + mockName); + md = JavaTemplate.builder( + addMockStaticMethods(isBeforeTest, (JavaType.Class) mockType, className, mockName, mockedPublicStaticMethods) + ) + .contextSensitive() + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) + .imports(MOCKITO_STATIC_IMPORT) + .staticImports(MOCKITO_ALL_IMPORT) + .build() + .apply(updateCursor(md), statement.getCoordinates().after()); + maybeAddImport(MOCKITO_STATIC_IMPORT); + openedMocks.add(MOCKITO_STATIC_PREFIX + mockName); } - // Instance + // Add MockConstruction Map mockedPublicMethods = mockedMethods - .entrySet() - .stream() - .filter(m -> !m.getValue().getFlags().contains(Static)) - .collect(toMap(Map.Entry::getKey, Map.Entry::getValue)); + .entrySet() + .stream() + .filter(m -> !m.getValue().getFlags().contains(Static)) + .collect(toMap(Map.Entry::getKey, Map.Entry::getValue)); if (!mockedPublicMethods.isEmpty()) { - String tpl = addMockInstanceMethods((JavaType.Class) mockType, className, mockName, mockedPublicMethods); - md = JavaTemplate.builder(tpl) - .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, "mockito-core-5")) - .imports("org.mockito.MockedConstruction") - .staticImports("org.mockito.Mockito.*") - .contextSensitive() - .build() - .apply(updateCursor(md), statement.getCoordinates().after()); - maybeAddImport("org.mockito.MockedConstruction"); - closeVariables.add("mockObj" + mockName); + md = JavaTemplate.builder( + addMockInstanceMethods(isBeforeTest, (JavaType.Class) mockType, className, mockName, mockedPublicMethods) + ) + .contextSensitive() + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) + .doBeforeParseTemplate(System.out::println) + .imports(MOCKITO_CONSTRUCTION_IMPORT) + .staticImports(MOCKITO_ALL_IMPORT) + .build() + .apply(updateCursor(md), statement.getCoordinates().after()); + maybeAddImport(MOCKITO_CONSTRUCTION_IMPORT); + openedMocks.add(MOCKITO_CONSTRUCTION_PREFIX + mockName); } maybeAddImport("org.mockito.Mockito", "*", false); - maybeRemoveImport("mockit.Mock"); - maybeRemoveImport("mockit.MockUp"); + maybeRemoveImport(JMOCKIT_MOCK_IMPORT); + maybeRemoveImport(JMOCKIT_MOCKUP_IMPORT); // Remove MockUp statement bodyStatements = md.getBody().getStatements(); @@ -296,17 +437,19 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl } // Add close statement at the end - for (String v : closeVariables) { - md = JavaTemplate.builder(v + ".close();") - .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, "mockito-core-5")) - .imports("org.mockito.MockedStatic", "org.mockito.MockedConstruction") - .staticImports("org.mockito.Mockito.*") - .contextSensitive() - .build() - .apply(updateCursor(md), md.getBody().getCoordinates().lastStatement()); + if (!isBeforeTest) { + for (String v : openedMocks) { + md = JavaTemplate.builder(v + ".closeOnDemand();") + .contextSensitive() + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) + .imports(MOCKITO_STATIC_IMPORT, MOCKITO_CONSTRUCTION_IMPORT) + .staticImports(MOCKITO_ALL_IMPORT) + .build() + .apply(updateCursor(md), md.getBody().getCoordinates().lastStatement()); + } } - return maybeAutoFormat(methodDeclaration, md, ctx); + return super.visitMethodDeclaration(md, ctx); } } } diff --git a/src/main/java/org/openrewrite/java/testing/mockito/MockitoUtils.java b/src/main/java/org/openrewrite/java/testing/mockito/MockitoUtils.java new file mode 100644 index 000000000..41402b7a0 --- /dev/null +++ b/src/main/java/org/openrewrite/java/testing/mockito/MockitoUtils.java @@ -0,0 +1,75 @@ +package org.openrewrite.java.testing.mockito; + +import org.jspecify.annotations.Nullable; +import org.openrewrite.Cursor; +import org.openrewrite.ExecutionContext; +import org.openrewrite.java.AnnotationMatcher; +import org.openrewrite.java.JavaParser; +import org.openrewrite.java.JavaTemplate; +import org.openrewrite.java.JavaVisitor; +import org.openrewrite.java.tree.J; +import org.openrewrite.java.tree.Statement; + +import java.util.List; +import java.util.stream.Collectors; + +public class MockitoUtils { + public static J.ClassDeclaration maybeAddMethodWithAnnotation( + JavaVisitor visitor, + J.ClassDeclaration classDecl, + ExecutionContext ctx, + String methodName, + String methodAnnotationSignature, + String methodAnnotationToAdd, + String additionalClasspathResource, + String importToAdd, + String methodAnnotationParameters + ) { + if (hasMethodWithAnnotation(classDecl, new AnnotationMatcher(methodAnnotationSignature))) { + return classDecl; + } + + J.MethodDeclaration firstTestMethod = getFirstTestMethod( + classDecl.getBody().getStatements().stream().filter(J.MethodDeclaration.class::isInstance) + .map(J.MethodDeclaration.class::cast).collect(Collectors.toList())); + + visitor.maybeAddImport(importToAdd); + return JavaTemplate.builder(methodAnnotationToAdd + methodAnnotationParameters + " public void " + methodName + "() {}") + .contextSensitive() + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, additionalClasspathResource)) + .imports(importToAdd) + .build() + .apply( + new Cursor(visitor.getCursor().getParentOrThrow(), classDecl), + (firstTestMethod != null) ? + firstTestMethod.getCoordinates().before() : + classDecl.getBody().getCoordinates().lastStatement() + ); + } + + private static boolean hasMethodWithAnnotation(J.ClassDeclaration classDecl, AnnotationMatcher annotationMatcher) { + for (Statement statement : classDecl.getBody().getStatements()) { + if (statement instanceof J.MethodDeclaration) { + J.MethodDeclaration methodDeclaration = (J.MethodDeclaration) statement; + List allAnnotations = methodDeclaration.getAllAnnotations(); + for (J.Annotation annotation : allAnnotations) { + if (annotationMatcher.matches(annotation)) { + return true; + } + } + } + } + return false; + } + + private static J.@Nullable MethodDeclaration getFirstTestMethod(List methods) { + for (J.MethodDeclaration methodDeclaration : methods) { + for (J.Annotation annotation : methodDeclaration.getLeadingAnnotations()) { + if ("Test".equals(annotation.getSimpleName())) { + return methodDeclaration; + } + } + } + return null; + } +} diff --git a/src/main/java/org/openrewrite/java/testing/mockito/PowerMockitoMockStaticToMockito.java b/src/main/java/org/openrewrite/java/testing/mockito/PowerMockitoMockStaticToMockito.java index c1f7d2133..07a9dca80 100644 --- a/src/main/java/org/openrewrite/java/testing/mockito/PowerMockitoMockStaticToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/mockito/PowerMockitoMockStaticToMockito.java @@ -26,6 +26,8 @@ import java.util.*; import java.util.stream.Collectors; +import static org.openrewrite.java.testing.mockito.MockitoUtils.maybeAddMethodWithAnnotation; + public class PowerMockitoMockStaticToMockito extends Recipe { @Override @@ -36,17 +38,17 @@ public String getDisplayName() { @Override public String getDescription() { return "Replaces `PowerMockito.mockStatic()` by `Mockito.mockStatic()`. Removes " + - "the `@PrepareForTest` annotation."; + "the `@PrepareForTest` annotation."; } @Override public TreeVisitor getVisitor() { return Preconditions.check( - Preconditions.or( - new UsesType<>("org.powermock..*", false), - new UsesType<>("org.mockito..*", false) - ), - new PowerMockitoToMockitoVisitor() + Preconditions.or( + new UsesType<>("org.powermock..*", false), + new UsesType<>("org.mockito..*", false) + ), + new PowerMockitoToMockitoVisitor() ); } @@ -61,9 +63,9 @@ private static class PowerMockitoToMockitoVisitor extends JavaVisitor methods) { - for (J.MethodDeclaration methodDeclaration : methods) { - for (J.Annotation annotation : methodDeclaration.getLeadingAnnotations()) { - if ("Test".equals(annotation.getSimpleName())) { - return methodDeclaration; - } - } - } - return null; - } - - private static boolean hasMethodWithAnnotation(J.ClassDeclaration classDecl, AnnotationMatcher annotationMatcher) { - for (Statement statement : classDecl.getBody().getStatements()) { - if (statement instanceof J.MethodDeclaration) { - J.MethodDeclaration methodDeclaration = (J.MethodDeclaration) statement; - List allAnnotations = methodDeclaration.getAllAnnotations(); - for (J.Annotation annotation : allAnnotations) { - if (annotationMatcher.matches(annotation)) { - return true; - } - } - } - } - return false; - } - private static boolean isStaticMockAlreadyClosed(J.Identifier staticMock, J.Block methodBody) { for (Statement statement : methodBody.getStatements()) { if (statement instanceof J.MethodInvocation) { @@ -244,7 +220,7 @@ private static boolean isStaticMockAlreadyClosed(J.Identifier staticMock, J.Bloc if (MOCKED_STATIC_CLOSE_MATCHER.matches(methodInvocation)) { if (methodInvocation.getSelect() instanceof J.Identifier) { if (((J.Identifier) methodInvocation.getSelect()).getSimpleName() - .equals(staticMock.getSimpleName())) { + .equals(staticMock.getSimpleName())) { return true; } } @@ -261,7 +237,7 @@ private static boolean isStaticMockAlreadyOpened(J.Identifier staticMock, J.Bloc if (MOCKED_STATIC_MATCHER.matches(methodInvocation)) { if (methodInvocation.getSelect() instanceof J.Identifier) { if (((J.Identifier) methodInvocation.getSelect()).getSimpleName() - .equals(staticMock.getSimpleName())) { + .equals(staticMock.getSimpleName())) { return true; } } @@ -286,15 +262,15 @@ private J.MethodDeclaration moveMockStaticMethodToSetUp(J.MethodDeclaration m, E J.MethodInvocation methodInvocation = mockStaticInvocations.get(className); if (methodInvocation != null) { m = JavaTemplate.builder("mocked#{any(org.mockito.MockedStatic)} = #{any(org.mockito.Mockito)};") - .contextSensitive() - .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, "mockito-core-3.12")) - .build() - .apply( - new Cursor(getCursor().getParentOrThrow(), m), - methodBody.getCoordinates().firstStatement(), - mockedTypesFieldEntry.getKey(), - methodInvocation - ); + .contextSensitive() + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, "mockito-core-3.12")) + .build() + .apply( + new Cursor(getCursor().getParentOrThrow(), m), + methodBody.getCoordinates().firstStatement(), + mockedTypesFieldEntry.getKey(), + methodInvocation + ); } } } @@ -309,14 +285,14 @@ private J.MethodDeclaration addCloseStaticMocksOnDemandStatement(J.MethodDeclara continue; } m = JavaTemplate.builder("#{any(org.mockito.MockedStatic)}.closeOnDemand();") - .contextSensitive() - .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, "mockito-core-3.12")) - .build() - .apply( - new Cursor(getCursor().getParentOrThrow(), m), - methodBody.getCoordinates().lastStatement(), - mockedTypesField.getKey() - ); + .contextSensitive() + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, "mockito-core-3.12")) + .build() + .apply( + new Cursor(getCursor().getParentOrThrow(), m), + methodBody.getCoordinates().lastStatement(), + mockedTypesField.getKey() + ); } return m; } @@ -326,14 +302,14 @@ private void determineTestGroups() { J.MethodDeclaration methodDeclarationCursor = getCursor().firstEnclosing(J.MethodDeclaration.class); if (methodDeclarationCursor != null) { Optional testAnnotation = methodDeclarationCursor - .getLeadingAnnotations().stream() - .filter(annotation -> annotation.getSimpleName().equals("Test")).findFirst(); + .getLeadingAnnotations().stream() + .filter(annotation -> annotation.getSimpleName().equals("Test")).findFirst(); testAnnotation.ifPresent( - ta -> { - if (ta.getArguments() != null) { - getCursor().putMessageOnFirstEnclosing(J.ClassDeclaration.class, TEST_GROUP, ta.getArguments()); - } - }); + ta -> { + if (ta.getArguments() != null) { + getCursor().putMessageOnFirstEnclosing(J.ClassDeclaration.class, TEST_GROUP, ta.getArguments()); + } + }); } } } @@ -352,15 +328,15 @@ private J.MethodInvocation modifyDynamicWhenMethodInvocation(J.MethodInvocation arguments.remove(0); String stringOfArguments = arguments.stream().map(Object::toString).collect(Collectors.joining(",")); method = JavaTemplate.builder("() -> #{}.#{}(#{})") - .contextSensitive() - .build() - .apply( - new Cursor(getCursor().getParentOrThrow(), method), - method.getCoordinates().replaceArguments(), - declaringClassName, - Objects.requireNonNull(calledMethod.getValue()).toString(), - stringOfArguments - ); + .contextSensitive() + .build() + .apply( + new Cursor(getCursor().getParentOrThrow(), method), + method.getCoordinates().replaceArguments(), + declaringClassName, + Objects.requireNonNull(calledMethod.getValue()).toString(), + stringOfArguments + ); method = method.withSelect(mockedField); } return method; @@ -437,17 +413,17 @@ private J.ClassDeclaration addFieldDeclarationForMockedTypes(J.ClassDeclaration continue; } classDecl = JavaTemplate.builder("private MockedStatic<#{}> " + MOCK_PREFIX + "#{};") - .contextSensitive() - .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, "mockito-core-3.12")) - .staticImports("org.mockito.Mockito.mockStatic") - .imports(MOCKED_STATIC) - .build() - .apply( - new Cursor(getCursor().getParentOrThrow(), classDecl), - classDecl.getBody().getCoordinates().firstStatement(), - classlessTypeName, - classlessTypeName.replace(".", "_") - ); + .contextSensitive() + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, "mockito-core-3.12")) + .staticImports("org.mockito.Mockito.mockStatic") + .imports(MOCKED_STATIC) + .build() + .apply( + new Cursor(getCursor().getParentOrThrow(), classDecl), + classDecl.getBody().getCoordinates().firstStatement(), + classlessTypeName, + classlessTypeName.replace(".", "_") + ); J.VariableDeclarations mockField = (J.VariableDeclarations) classDecl.getBody().getStatements().get(0); mockedTypesIdentifiers.put(mockField.getVariables().get(0).getName(), mockedStaticClass); @@ -455,7 +431,7 @@ private J.ClassDeclaration addFieldDeclarationForMockedTypes(J.ClassDeclaration getCursor().putMessage(MOCKED_TYPES_FIELDS, mockedTypesIdentifiers); maybeAutoFormat(classDecl, classDecl.withPrefix(classDecl.getPrefix(). - withWhitespace("")), classDecl.getName(), ctx, getCursor()); + withWhitespace("")), classDecl.getName(), ctx, getCursor()); maybeAddImport(MOCKED_STATIC); maybeAddImport("org.mockito.Mockito", "mockStatic"); return classDecl; @@ -463,9 +439,9 @@ private J.ClassDeclaration addFieldDeclarationForMockedTypes(J.ClassDeclaration private J.ClassDeclaration maybeAddSetUpMethodBody(J.ClassDeclaration classDecl, ExecutionContext ctx) { String testGroupsAsString = getTestGroupsAsString(); - return maybeAddMethodWithAnnotation(classDecl, ctx, "setUpStaticMocks", - setUpMethodAnnotationSignature, setUpMethodAnnotation, - additionalClasspathResource, setUpImportToAdd, testGroupsAsString); + return maybeAddMethodWithAnnotation(this, classDecl, ctx, "setUpStaticMocks", + setUpMethodAnnotationSignature, setUpMethodAnnotation, + additionalClasspathResource, setUpImportToAdd, testGroupsAsString); } private String getTestGroupsAsString() { @@ -473,55 +449,29 @@ private String getTestGroupsAsString() { String testGroupsAsString = ""; if (testGroups != null) { testGroupsAsString = "(" + - testGroups.stream().map(Object::toString).collect(Collectors.joining(",")) + - ")"; + testGroups.stream().map(Object::toString).collect(Collectors.joining(",")) + + ")"; } return testGroupsAsString; } private J.ClassDeclaration maybeAddTearDownMethodBody(J.ClassDeclaration classDecl, ExecutionContext ctx) { String testGroupsAsString = (getTestGroupsAsString().isEmpty()) ? tearDownMethodAnnotationParameters : getTestGroupsAsString(); - return maybeAddMethodWithAnnotation(classDecl, ctx, "tearDownStaticMocks", - tearDownMethodAnnotationSignature, - tearDownMethodAnnotation, - additionalClasspathResource, tearDownImportToAdd, testGroupsAsString); + return maybeAddMethodWithAnnotation(this, classDecl, ctx, "tearDownStaticMocks", + tearDownMethodAnnotationSignature, + tearDownMethodAnnotation, + additionalClasspathResource, tearDownImportToAdd, testGroupsAsString); } - private J.ClassDeclaration maybeAddMethodWithAnnotation(J.ClassDeclaration classDecl, ExecutionContext ctx, - String methodName, String methodAnnotationSignature, - String methodAnnotationToAdd, - String additionalClasspathResource, String importToAdd, - String methodAnnotationParameters) { - if (hasMethodWithAnnotation(classDecl, new AnnotationMatcher(methodAnnotationSignature))) { - return classDecl; - } - - J.MethodDeclaration firstTestMethod = getFirstTestMethod( - classDecl.getBody().getStatements().stream().filter(J.MethodDeclaration.class::isInstance) - .map(J.MethodDeclaration.class::cast).collect(Collectors.toList())); - - maybeAddImport(importToAdd); - return JavaTemplate.builder(methodAnnotationToAdd + methodAnnotationParameters + " void " + methodName + "() {}") - .contextSensitive() - .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, additionalClasspathResource)) - .imports(importToAdd) - .build() - .apply( - new Cursor(getCursor().getParentOrThrow(), classDecl), - (firstTestMethod != null) ? - firstTestMethod.getCoordinates().before() : - classDecl.getBody().getCoordinates().lastStatement() - ); - } private J.MethodInvocation modifyWhenMethodInvocation(J.MethodInvocation whenMethod) { List methodArguments = whenMethod.getArguments(); List staticMethodInvocationsInArguments = methodArguments.stream() - .filter(J.MethodInvocation.class::isInstance).map(J.MethodInvocation.class::cast) - .filter(methodInvocation -> !MOCKITO_STATIC_METHOD_MATCHER.matches(methodInvocation)) - .filter(methodInvocation -> methodInvocation.getMethodType() != null) - .filter(methodInvocation -> methodInvocation.getMethodType().hasFlags(Flag.Static)) - .collect(Collectors.toList()); + .filter(J.MethodInvocation.class::isInstance).map(J.MethodInvocation.class::cast) + .filter(methodInvocation -> !MOCKITO_STATIC_METHOD_MATCHER.matches(methodInvocation)) + .filter(methodInvocation -> methodInvocation.getMethodType() != null) + .filter(methodInvocation -> methodInvocation.getMethodType().hasFlags(Flag.Static)) + .collect(Collectors.toList()); if (staticMethodInvocationsInArguments.size() == 1) { J.MethodInvocation staticMI = staticMethodInvocationsInArguments.get(0); Expression lambdaInvocation; @@ -533,19 +483,19 @@ private J.MethodInvocation modifyWhenMethodInvocation(J.MethodInvocation whenMet return whenMethod; } if (staticMI.getArguments().stream().map(Expression::getType) - .noneMatch(Objects::nonNull)) { + .noneMatch(Objects::nonNull)) { // If the method invocation has no arguments lambdaInvocation = JavaTemplate.builder(declaringClassName + "::" + staticMI.getSimpleName()) - .contextSensitive() - .build() - .apply(new Cursor(getCursor(), staticMI), staticMI.getCoordinates().replace()); + .contextSensitive() + .build() + .apply(new Cursor(getCursor(), staticMI), staticMI.getCoordinates().replace()); } else { JavaType.Method methodType = staticMI.getMethodType(); if (methodType != null) { lambdaInvocation = JavaTemplate.builder("() -> #{any()}") - .contextSensitive() - .build() - .apply(new Cursor(getCursor(), staticMI), staticMI.getCoordinates().replace(), staticMI); + .contextSensitive() + .build() + .apply(new Cursor(getCursor(), staticMI), staticMI.getCoordinates().replace(), staticMI); } else { // do nothing lambdaInvocation = staticMI; @@ -570,18 +520,18 @@ private J.MethodInvocation modifyWhenMethodInvocation(J.MethodInvocation whenMet private J.@Nullable Identifier getFieldIdentifier(String fieldName) { return getMockedTypesFields().keySet().stream() - .filter(identifier -> identifier.getSimpleName().equals(fieldName)).findFirst() - .orElseGet(() -> { - J.ClassDeclaration cd = getCursor().dropParentUntil(J.ClassDeclaration.class::isInstance).getValue(); - return cd.getBody().getStatements().stream() - .filter(J.VariableDeclarations.class::isInstance) - .map(variableDeclarations -> ((J.VariableDeclarations) variableDeclarations).getVariables()) - .flatMap(Collection::stream) - .filter(namedVariable -> namedVariable.getSimpleName().equals(fieldName)) - .map(J.VariableDeclarations.NamedVariable::getName) - .findFirst() - .orElse(null); - }); + .filter(identifier -> identifier.getSimpleName().equals(fieldName)).findFirst() + .orElseGet(() -> { + J.ClassDeclaration cd = getCursor().dropParentUntil(J.ClassDeclaration.class::isInstance).getValue(); + return cd.getBody().getStatements().stream() + .filter(J.VariableDeclarations.class::isInstance) + .map(variableDeclarations -> ((J.VariableDeclarations) variableDeclarations).getVariables()) + .flatMap(Collection::stream) + .filter(namedVariable -> namedVariable.getSimpleName().equals(fieldName)) + .map(J.VariableDeclarations.NamedVariable::getName) + .findFirst() + .orElse(null); + }); } } } diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index 36c56daba..ae3f1a2f5 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -36,70 +36,70 @@ void mockUpStaticMethodTest() { //language=java rewriteRun( java( - """ - import mockit.Mock; - import mockit.MockUp; - import static org.junit.Assert.assertEquals; - - class MockUpTest { - void test() { - new MockUp() { - - @Mock - public int staticMethod() { - return 1024; - } - - @Mock - public int staticMethod(int v) { - return 128; - } - }; - assertEquals(1024, MyClazz.staticMethod()); - assertEquals(128, MyClazz.staticMethod(0)); - } - - public static class MyClazz { - public static int staticMethod() { - return 0; - } - - public static int staticMethod(int v) { - return 1; - } - } - } - """, """ - import org.mockito.MockedStatic; - - import static org.junit.Assert.assertEquals; - import static org.mockito.Mockito.*; - - class MockUpTest { - void test() { - MockedStatic mockStaticMockUpTest_MyClazz = mockStatic(MockUpTest.MyClazz.class); - mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> { - return 128; - }); - mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod()).thenAnswer(invocation -> { - return 1024; - }); - assertEquals(1024, MyClazz.staticMethod()); - assertEquals(128, MyClazz.staticMethod(0)); - mockStaticMockUpTest_MyClazz.close(); - } - - public static class MyClazz { - public static int staticMethod() { - return 0; - } - - public static int staticMethod(int v) { - return 1; - } - } - } - """)); + """ + import mockit.Mock; + import mockit.MockUp; + import static org.junit.Assert.assertEquals; + + class MockUpTest { + void test() { + new MockUp() { + + @Mock + public int staticMethod() { + return 1024; + } + + @Mock + public int staticMethod(int v) { + return 128; + } + }; + assertEquals(1024, MyClazz.staticMethod()); + assertEquals(128, MyClazz.staticMethod(0)); + } + + public static class MyClazz { + public static int staticMethod() { + return 0; + } + + public static int staticMethod(int v) { + return 1; + } + } + } + """, """ + import org.mockito.MockedStatic; + + import static org.junit.Assert.assertEquals; + import static org.mockito.Mockito.*; + + class MockUpTest { + void test() { + MockedStatic mockStaticMockUpTest_MyClazz = mockStatic(MockUpTest.MyClazz.class); + mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod()).thenAnswer(invocation -> { + return 1024; + }); + mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> { + return 128; + }); + assertEquals(1024, MyClazz.staticMethod()); + assertEquals(128, MyClazz.staticMethod(0)); + mockStaticMockUpTest_MyClazz.closeOnDemand(); + } + + public static class MyClazz { + public static int staticMethod() { + return 0; + } + + public static int staticMethod(int v) { + return 1; + } + } + } + """)); } @Test @@ -107,72 +107,72 @@ void mockUpInstanceMethodTest() { //language=java rewriteRun( java( - """ - import org.junit.Test; - import mockit.Mock; - import mockit.MockUp; - import static org.junit.Assert.assertEquals; - - public class MockUpTest { - @Test - public void test() { - new MockUp() { - @Mock - public String getMsg() { - return "mockMsg"; - } - @Mock - public String getMsg(String echo) { - return "mockEchoMsg"; - } - }; - assertEquals("mockMsg", new MyClazz().getMsg()); - assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); - } - - public static class MyClazz { - public String getMsg() { - return "msg"; - } - - public String getMsg(String echo) { - return echo; - } - } - } - """, """ - import org.junit.Test; - import org.mockito.MockedConstruction; - import static org.junit.Assert.assertEquals; - import static org.mockito.Mockito.*; - - public class MockUpTest { - @Test - public void test() { - MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { - doAnswer(invocation -> { - return "mockMsg"; - }).when(mock).getMsg(); - doAnswer(invocation -> { - return "mockEchoMsg"; - }).when(mock).getMsg(nullable(String.class)); - }); - assertEquals("mockMsg", new MyClazz().getMsg()); - assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); - mockObjMockUpTest_MyClazz.close(); - } - - public static class MyClazz { - public String getMsg() { - return "msg"; - } - - public String getMsg(String echo) { - return echo; - } - } - } - """)); + """ + import org.junit.Test; + import mockit.Mock; + import mockit.MockUp; + import static org.junit.Assert.assertEquals; + + public class MockUpTest { + @Test + public void test() { + new MockUp() { + @Mock + public String getMsg() { + return "mockMsg"; + } + @Mock + public String getMsg(String echo) { + return "mockEchoMsg"; + } + }; + assertEquals("mockMsg", new MyClazz().getMsg()); + assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + + public String getMsg(String echo) { + return echo; + } + } + } + """, """ + import org.junit.Test; + import org.mockito.MockedConstruction; + import static org.junit.Assert.assertEquals; + import static org.mockito.Mockito.*; + + public class MockUpTest { + @Test + public void test() { + MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { + doAnswer(invocation -> { + return "mockMsg"; + }).when(mock).getMsg(); + doAnswer(invocation -> { + return "mockEchoMsg"; + }).when(mock).getMsg(nullable(String.class)); + }); + assertEquals("mockMsg", new MyClazz().getMsg()); + assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); + mockObjMockUpTest_MyClazz.closeOnDemand(); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + + public String getMsg(String echo) { + return echo; + } + } + } + """)); } @Test @@ -180,76 +180,76 @@ void mockUpInnerStatementTest() { //language=java rewriteRun( java( - """ - import mockit.Mock; - import mockit.MockUp; - - import org.junit.Test; - import static org.junit.Assert.assertEquals; - - public class MockUpTest { - @Test - public void test() { - new MockUp() { - final String msg = "newMsg"; - - @Mock - public String getMsg() { - return msg; - } - }; - - // Should ignore the newClass statement - new Runnable() { - @Override - public void run() { - System.out.println("run"); - } - }; - assertEquals("newMsg", new MyClazz().getMsg()); - } - - public static class MyClazz { - public String getMsg() { - return "msg"; - } - } - } - """, """ - import org.junit.Test; - import org.mockito.MockedConstruction; - - import static org.junit.Assert.assertEquals; - import static org.mockito.Mockito.*; - - public class MockUpTest { - @Test - public void test() { - final String msg = "newMsg"; - MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { - doAnswer(invocation -> { - return msg; - }).when(mock).getMsg(); - }); - - // Should ignore the newClass statement - new Runnable() { - @Override - public void run() { - System.out.println("run"); - } - }; - assertEquals("newMsg", new MyClazz().getMsg()); - mockObjMockUpTest_MyClazz.close(); - } - - public static class MyClazz { - public String getMsg() { - return "msg"; - } - } - } - """)); + """ + import mockit.Mock; + import mockit.MockUp; + + import org.junit.Test; + import static org.junit.Assert.assertEquals; + + public class MockUpTest { + @Test + public void test() { + new MockUp() { + final String msg = "newMsg"; + + @Mock + public String getMsg() { + return msg; + } + }; + + // Should ignore the newClass statement + new Runnable() { + @Override + public void run() { + System.out.println("run"); + } + }; + assertEquals("newMsg", new MyClazz().getMsg()); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + } + } + """, """ + import org.junit.Test; + import org.mockito.MockedConstruction; + + import static org.junit.Assert.assertEquals; + import static org.mockito.Mockito.*; + + public class MockUpTest { + @Test + public void test() { + final String msg = "newMsg"; + MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { + doAnswer(invocation -> { + return msg; + }).when(mock).getMsg(); + }); + + // Should ignore the newClass statement + new Runnable() { + @Override + public void run() { + System.out.println("run"); + } + }; + assertEquals("newMsg", new MyClazz().getMsg()); + mockObjMockUpTest_MyClazz.closeOnDemand(); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + } + } + """)); } @Test @@ -257,12 +257,12 @@ void mockUpVoidTest() { //language=java rewriteRun( java( - """ + """ import mockit.Mock; import mockit.MockUp; import static org.junit.Assert.assertEquals; import org.junit.Test; - + public class MockUpTest { @Test public void test() { @@ -271,37 +271,37 @@ public void test() { public void changeMsg() { MockUpClass.Save.msg = "mockMsg"; } - + @Mock public void changeText(String text) { MockUpClass.Save.text = "mockText"; } }; - + assertEquals("mockMsg", new MockUpClass().getMsg()); assertEquals("mockText", new MockUpClass().getText()); } - + public static class MockUpClass { public static class Save { public static String msg = "msg"; public static String text = "text"; } - + public final String getMsg() { changeMsg(); return Save.msg; } - + public void changeMsg() { Save.msg = "newMsg"; } - + public String getText() { changeText("newText"); return Save.text; } - + public static void changeText(String text) { Save.text = text; } @@ -311,11 +311,11 @@ public static void changeText(String text) { """ import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.*; - + import org.junit.Test; import org.mockito.MockedConstruction; import org.mockito.MockedStatic; - + public class MockUpTest { @Test public void test() { @@ -332,33 +332,33 @@ public void test() { MockUpClass.Save.text = "mockText"; return null; }); - + assertEquals("mockMsg", new MockUpClass().getMsg()); assertEquals("mockText", new MockUpClass().getText()); - mockStaticMockUpTest_MockUpClass.close(); - mockObjMockUpTest_MockUpClass.close(); + mockStaticMockUpTest_MockUpClass.closeOnDemand(); + mockObjMockUpTest_MockUpClass.closeOnDemand(); } - + public static class MockUpClass { public static class Save { public static String msg = "msg"; public static String text = "text"; } - + public final String getMsg() { changeMsg(); return Save.msg; } - + public void changeMsg() { Save.msg = "newMsg"; } - + public String getText() { changeText("newText"); return Save.text; } - + public static void changeText(String text) { Save.text = text; } @@ -366,4 +366,73 @@ public static void changeText(String text) { } """)); } + + @Test + public void mockUpAtSetUpWithoutTearDownTest() { + rewriteRun( + java( + """ + import org.junit.Before; + import org.junit.Test; + import mockit.Mock; + import mockit.MockUp; + import static org.junit.Assert.assertEquals; + + public class MockUpTest { + @Before + public void init() { + new MockUp() { + @Mock + public String getMsg() { + return "mockMsg"; + } + }; + } + + @Test + public void test() { + assertEquals("mockMsg", new MyClazz().getMsg()); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + } + } + """, + """ + import org.junit.After; + import org.junit.Before; + import org.junit.Test; + import org.mockito.MockedConstruction; + import static org.junit.Assert.assertEquals; + import static org.mockito.Mockito.*; + + public class MockUpTest { + private MockedConstruction mockObjMockUpTest_MyClazz; + @Before + public void init() { + } + + @After + public void tearDownMocks() { + mockObjMockUpTest_MyClazz.closeOnDemand(); + } + + @Test + public void test() { + assertEquals("mockMsg", new MyClazz().getMsg()); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + } + } + """ + ) + ); + } } From ac8386374c43db056e785033d089148db9581947 Mon Sep 17 00:00:00 2001 From: SiBorea <108953913+SiBorea@users.noreply.github.com> Date: Mon, 23 Sep 2024 02:32:31 +0800 Subject: [PATCH 21/39] Add MockUp params support --- .../jmockit/JMockitMockUpToMockito.java | 35 +++++--- .../resources/META-INF/rewrite/jmockit.yml | 1 + .../jmockit/JMockitMockUpToMockitoTest.java | 80 ++++++++++++++++++- 3 files changed, 103 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index 08c9103f4..71ec64188 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -22,6 +22,7 @@ import org.openrewrite.java.search.*; import org.openrewrite.java.tree.*; import org.openrewrite.marker.SearchResult; +import org.openrewrite.staticanalysis.RemoveUnusedLocalVariables; import java.util.*; import java.util.stream.Collectors; @@ -88,13 +89,31 @@ private String getMatcher(JavaType s) { return "nullable(" + TypeUtils.asFullyQualified(s).getClassName() + ".class)"; } - private void appendAnswer(StringBuilder sb, List statements) { + private void appendAnswer(StringBuilder sb, J.MethodDeclaration md) { + List parameters = md.getParameters(); + for (int i = 0; i < parameters.size(); i++) { + if (!(parameters.get(i) instanceof J.VariableDeclarations)) { + continue; + } + J.VariableDeclarations vd = (J.VariableDeclarations) parameters.get(i); + String className; + if (vd.getType() instanceof JavaType.Primitive) { + className = vd.getType().toString(); + } else { + className = vd.getTypeAsFullyQualified().getClassName(); + } + String varName = vd.getVariables().get(0).getName().getSimpleName(); + sb.append(className).append(" ").append(varName) + .append(" = (").append(className).append(") invocation.getArgument(").append(i).append(");"); + } + boolean hasReturn = false; - for (Statement s : statements) { + for (Statement s : md.getBody().getStatements()) { hasReturn = hasReturn || s instanceof J.Return; sb.append(s.print()); sb.append(";"); } + // Avoid syntax error if (!hasReturn) { sb.append("return null;"); } @@ -102,7 +121,7 @@ private void appendAnswer(StringBuilder sb, List statements) { private void appendDoAnswer(StringBuilder sb, J.MethodDeclaration m, String objName) { sb.append("doAnswer(invocation -> {"); - appendAnswer(sb, m.getBody().getStatements()); + appendAnswer(sb, m); sb.append("}).when(").append(objName).append(").").append(m.getSimpleName()).append("("); sb.append(m.getParameters() @@ -147,7 +166,7 @@ private String addMockStaticMethods(boolean isBeforeTest, JavaType.Class clazz, .map(o -> getMatcher(((J.VariableDeclarations) o).getType())) .collect(Collectors.joining(", "))); tpl.append(")).thenAnswer(invocation -> {"); - appendAnswer(tpl, m.getBody().getStatements()); + appendAnswer(tpl, m); tpl.append("});"); } @@ -309,7 +328,6 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration md, Execut .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) .imports(MOCKITO_CONSTRUCTION_IMPORT) .staticImports(MOCKITO_ALL_IMPORT) - .doBeforeParseTemplate(System.out::println) .build() .apply( updateCursor(cd[0]), @@ -332,7 +350,8 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration md, Execut } @Override - public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration md, ExecutionContext ctx) { + public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl, ExecutionContext ctx) { + J.MethodDeclaration md = methodDecl; if (md.getBody() == null) { return md; } @@ -343,7 +362,6 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration md, Execut .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) .imports(MOCKITO_STATIC_IMPORT, MOCKITO_CONSTRUCTION_IMPORT) .staticImports(MOCKITO_ALL_IMPORT) - .doBeforeParseTemplate(System.out::println) .build() .apply( updateCursor(md), @@ -417,7 +435,6 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration md, Execut ) .contextSensitive() .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) - .doBeforeParseTemplate(System.out::println) .imports(MOCKITO_CONSTRUCTION_IMPORT) .staticImports(MOCKITO_ALL_IMPORT) .build() @@ -449,7 +466,7 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration md, Execut } } - return super.visitMethodDeclaration(md, ctx); + return maybeAutoFormat(methodDecl, md, ctx); } } } diff --git a/src/main/resources/META-INF/rewrite/jmockit.yml b/src/main/resources/META-INF/rewrite/jmockit.yml index d1ee335d7..b0f7f5112 100644 --- a/src/main/resources/META-INF/rewrite/jmockit.yml +++ b/src/main/resources/META-INF/rewrite/jmockit.yml @@ -25,6 +25,7 @@ recipeList: - org.openrewrite.java.testing.jmockit.JMockitBlockToMockito - org.openrewrite.java.testing.jmockit.JMockitMockUpToMockito - org.openrewrite.java.testing.jmockit.JMockitAnnotatedArgumentToMockito + - org.openrewrite.staticanalysis.RemoveUnusedLocalVariables - org.openrewrite.java.ChangeType: oldFullyQualifiedTypeName: mockit.Mocked newFullyQualifiedTypeName: org.mockito.Mock diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index ae3f1a2f5..d12cbef7d 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -82,6 +82,7 @@ void test() { return 1024; }); mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> { + int v = (int) invocation.getArgument(0); return 128; }); assertEquals(1024, MyClazz.staticMethod()); @@ -154,6 +155,7 @@ public void test() { return "mockMsg"; }).when(mock).getMsg(); doAnswer(invocation -> { + String echo = (String) invocation.getArgument(0); return "mockEchoMsg"; }).when(mock).getMsg(nullable(String.class)); }); @@ -329,6 +331,7 @@ public void test() { }); MockedStatic mockStaticMockUpTest_MockUpClass = mockStatic(MockUpTest.MockUpClass.class); mockStaticMockUpTest_MockUpClass.when(() -> MockUpTest.MockUpClass.changeText(nullable(String.class))).thenAnswer(invocation -> { + String text = (String) invocation.getArgument(0); MockUpClass.Save.text = "mockText"; return null; }); @@ -408,23 +411,29 @@ public String getMsg() { import org.mockito.MockedConstruction; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.*; - + public class MockUpTest { private MockedConstruction mockObjMockUpTest_MyClazz; + @Before public void init() { + mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { + doAnswer(invocation -> { + return "mockMsg"; + }).when(mock).getMsg(); + }); } - + @After public void tearDownMocks() { mockObjMockUpTest_MyClazz.closeOnDemand(); } - + @Test public void test() { assertEquals("mockMsg", new MyClazz().getMsg()); } - + public static class MyClazz { public String getMsg() { return "msg"; @@ -435,4 +444,67 @@ public String getMsg() { ) ); } + + @Test + public void mockUpWithParamsTest() { + rewriteRun( + java( + """ + import mockit.Mock; + import mockit.MockUp; + import org.junit.Test; + + import static org.junit.Assert.assertEquals; + + public class MockUpTest { + @Test + public void init() { + new MockUp() { + @Mock + public String getMsg(String foo, String bar, String unused) { + return foo + bar; + } + }; + assertEquals("foobar", new MyClazz().getMsg("foo", "bar", "unused")); + } + + public static class MyClazz { + public String getMsg(String foo, String bar, String unused) { + return "msg"; + } + } + } + """, + """ + import org.junit.Test; + import org.mockito.MockedConstruction; + + import static org.junit.Assert.assertEquals; + import static org.mockito.Mockito.*; + + public class MockUpTest { + @Test + public void init() { + MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { + doAnswer(invocation -> { + String foo = (String) invocation.getArgument(0); + String bar = (String) invocation.getArgument(1); + String unused = (String) invocation.getArgument(2); + return foo + bar; + }).when(mock).getMsg(nullable(String.class), nullable(String.class), nullable(String.class)); + }); + assertEquals("foobar", new MyClazz().getMsg("foo", "bar", "unused")); + mockObjMockUpTest_MyClazz.closeOnDemand(); + } + + public static class MyClazz { + public String getMsg(String foo, String bar, String unused) { + return "msg"; + } + } + } + """ + ) + ); + } } From e41c20d5a8cac16bb804bdcb66c11714066151f2 Mon Sep 17 00:00:00 2001 From: SiBorea <108953913+SiBorea@users.noreply.github.com> Date: Mon, 23 Sep 2024 03:35:34 +0800 Subject: [PATCH 22/39] Remove useless --- .../jmockit/JMockitMockUpToMockito.java | 23 ++++++++----------- .../resources/META-INF/rewrite/jmockit.yml | 1 - .../jmockit/JMockitMockUpToMockitoTest.java | 2 +- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index 71ec64188..37953631a 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -227,19 +227,17 @@ private boolean isMockUpStatement(Tree tree) { } private boolean isSetUpMethod(J.MethodDeclaration md) { - return md.getLeadingAnnotations().stream() - .anyMatch(o -> - TypeUtils.isOfClassType(o.getType(), "org.junit.Before") || - TypeUtils.isOfClassType(o.getType(), "org.junit.jupiter.api.BeforeEach") - ); + return md + .getLeadingAnnotations() + .stream() + .anyMatch(o -> TypeUtils.isOfClassType(o.getType(), "org.junit.Before")); } private boolean isTearDownMethod(J.MethodDeclaration md) { - return md.getLeadingAnnotations().stream() - .anyMatch(o -> - TypeUtils.isOfClassType(o.getType(), "org.junit.After") || - TypeUtils.isOfClassType(o.getType(), "org.junit.jupiter.api.AfterEach") - ); + return md + .getLeadingAnnotations() + .stream() + .anyMatch(o -> TypeUtils.isOfClassType(o.getType(), "org.junit.After")); } private Map getMockUpMethods(J.NewClass newClass) { @@ -337,15 +335,13 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration md, Execut } })); - cd[0] = maybeAddMethodWithAnnotation(this, cd[0], ctx, "tearDownMocks", + cd[0] = maybeAddMethodWithAnnotation(this, cd[0], ctx, "tearDown", "@org.junit.After", "@After", "junit-4.13", "org.junit.After", ""); - maybeAutoFormat(cd[0], cd[0].withPrefix(cd[0].getPrefix(). - withWhitespace("")), cd[0].getName(), ctx, getCursor()); return super.visitClassDeclaration(cd[0], ctx); } @@ -466,6 +462,7 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl } } + doAfterVisit(new RemoveUnusedLocalVariables(new String[]{}).getVisitor()); return maybeAutoFormat(methodDecl, md, ctx); } } diff --git a/src/main/resources/META-INF/rewrite/jmockit.yml b/src/main/resources/META-INF/rewrite/jmockit.yml index b0f7f5112..d1ee335d7 100644 --- a/src/main/resources/META-INF/rewrite/jmockit.yml +++ b/src/main/resources/META-INF/rewrite/jmockit.yml @@ -25,7 +25,6 @@ recipeList: - org.openrewrite.java.testing.jmockit.JMockitBlockToMockito - org.openrewrite.java.testing.jmockit.JMockitMockUpToMockito - org.openrewrite.java.testing.jmockit.JMockitAnnotatedArgumentToMockito - - org.openrewrite.staticanalysis.RemoveUnusedLocalVariables - org.openrewrite.java.ChangeType: oldFullyQualifiedTypeName: mockit.Mocked newFullyQualifiedTypeName: org.mockito.Mock diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index d12cbef7d..888ecd148 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -425,7 +425,7 @@ public void init() { } @After - public void tearDownMocks() { + public void tearDown() { mockObjMockUpTest_MyClazz.closeOnDemand(); } From 08f3f6073a722a30fa4a1beff1449d372f25d363 Mon Sep 17 00:00:00 2001 From: SiBorea Date: Mon, 23 Sep 2024 18:16:11 +0800 Subject: [PATCH 23/39] Fix JavaTemplate type inference --- .../jmockit/JMockitMockUpToMockito.java | 123 ++++++--- .../jmockit/JMockitMockUpToMockitoTest.java | 234 +++++++++++++----- 2 files changed, 254 insertions(+), 103 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index 37953631a..c282d9cbd 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -15,24 +15,40 @@ */ package org.openrewrite.java.testing.jmockit; -import org.openrewrite.*; +import static java.util.stream.Collectors.toList; +import static java.util.stream.Collectors.toMap; +import org.openrewrite.Cursor; +import org.openrewrite.ExecutionContext; +import org.openrewrite.Preconditions; +import org.openrewrite.Recipe; +import org.openrewrite.Tree; +import org.openrewrite.TreeVisitor; import org.openrewrite.java.JavaIsoVisitor; import org.openrewrite.java.JavaParser; import org.openrewrite.java.JavaTemplate; -import org.openrewrite.java.search.*; -import org.openrewrite.java.tree.*; -import org.openrewrite.marker.SearchResult; -import org.openrewrite.staticanalysis.RemoveUnusedLocalVariables; - -import java.util.*; -import java.util.stream.Collectors; - -import static java.util.stream.Collectors.toList; -import static java.util.stream.Collectors.toMap; +import org.openrewrite.java.search.UsesType; import static org.openrewrite.java.testing.jmockit.JMockitBlockType.MockUp; import static org.openrewrite.java.testing.mockito.MockitoUtils.maybeAddMethodWithAnnotation; import static org.openrewrite.java.tree.Flag.Private; import static org.openrewrite.java.tree.Flag.Static; +import org.openrewrite.java.tree.J; +import org.openrewrite.java.tree.JavaType; +import org.openrewrite.java.tree.Statement; +import org.openrewrite.java.tree.TypeUtils; +import org.openrewrite.marker.SearchResult; +import org.openrewrite.staticanalysis.RemoveUnusedLocalVariables; + +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; public class JMockitMockUpToMockito extends Recipe { private static final String MOCKITO_CLASSPATH = "mockito-core-5"; @@ -60,7 +76,7 @@ public TreeVisitor getVisitor() { } private static class JMockitMockUpToMockitoVisitor extends JavaIsoVisitor { - private List tearDownMocks = new ArrayList<>(); + private final Map tearDownMocks = new HashMap<>(); private String getMatcher(JavaType s) { if (s instanceof JavaType.Primitive) { @@ -148,10 +164,12 @@ private String addMockStaticMethods(boolean isBeforeTest, JavaType.Class clazz, StringBuilder tpl = new StringBuilder(); // Handle mocked static mockedMethods - if (!isBeforeTest) { - tpl.append("MockedStatic<").append(className).append("> "); + if (isBeforeTest) { + tpl.append("#{any(").append(MOCKITO_STATIC_IMPORT).append(")}"); + } else { + tpl.append("MockedStatic ").append(MOCKITO_STATIC_PREFIX).append(mockName); } - tpl.append(MOCKITO_STATIC_PREFIX).append(mockName).append(" = mockStatic(").append(className).append(".class);"); + tpl.append(" = mockStatic(").append(className).append(".class);"); // To generate predictable method order List keys = mockedMethods.keySet().stream() @@ -189,12 +207,13 @@ private String addMockStaticMethods(boolean isBeforeTest, JavaType.Class clazz, private String addMockInstanceMethods(boolean isBeforeTest, JavaType.Class clazz, String className, String mockName, Map mockedMethods) { StringBuilder tpl = new StringBuilder(); - // Handle mocked static mockedMethods - if (!isBeforeTest) { - tpl.append("MockedConstruction<").append(className).append("> "); + // Handle mocked construction mockedMethods + if (isBeforeTest) { + tpl.append("#{any(").append(MOCKITO_CONSTRUCTION_IMPORT).append(")}"); + } else { + tpl.append("MockedConstruction ").append(MOCKITO_CONSTRUCTION_PREFIX).append(mockName); } - tpl.append(MOCKITO_CONSTRUCTION_PREFIX).append(mockName) - .append(" = mockConstruction(").append(className).append(".class, (mock, context) -> {"); + tpl.append(" = mockConstruction(").append(className).append(".class, (mock, context) -> {"); // To generate predictable method order List keys = mockedMethods.keySet().stream() @@ -305,7 +324,7 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration md, Execut // Add mockStatic field if (mockedMethods.values().stream().anyMatch(m -> m.getFlags().contains(Static))) { - cd[0] = JavaTemplate.builder("private MockedStatic<#{}> " + MOCKITO_STATIC_PREFIX + "#{};") + cd[0] = JavaTemplate.builder("private MockedStatic #{};") .contextSensitive() .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) .imports(MOCKITO_STATIC_IMPORT) @@ -314,14 +333,15 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration md, Execut .apply( new Cursor(getCursor().getParentOrThrow(), cd[0]), cd[0].getBody().getCoordinates().firstStatement(), - className, - mockName + MOCKITO_STATIC_PREFIX + mockName ); - tearDownMocks.add(MOCKITO_STATIC_PREFIX + mockName); + J.VariableDeclarations mockField = (J.VariableDeclarations) cd[0].getBody().getStatements().get(0); + J.Identifier mockFieldId = mockField.getVariables().get(0).getName(); + tearDownMocks.put(MOCKITO_STATIC_PREFIX + mockName, mockFieldId); } // Add mockConstruction field if (mockedMethods.values().stream().anyMatch(m -> !m.getFlags().contains(Static))) { - cd[0] = JavaTemplate.builder("private MockedConstruction<" + className + "> " + MOCKITO_CONSTRUCTION_PREFIX + mockName + ";") + cd[0] = JavaTemplate.builder("private MockedConstruction #{};") .contextSensitive() .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) .imports(MOCKITO_CONSTRUCTION_IMPORT) @@ -329,9 +349,12 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration md, Execut .build() .apply( updateCursor(cd[0]), - cd[0].getBody().getCoordinates().firstStatement() + cd[0].getBody().getCoordinates().firstStatement(), + MOCKITO_CONSTRUCTION_PREFIX + mockName ); - tearDownMocks.add(MOCKITO_CONSTRUCTION_PREFIX + mockName); + J.VariableDeclarations mockField = (J.VariableDeclarations) cd[0].getBody().getStatements().get(0); + J.Identifier mockFieldId = mockField.getVariables().get(0).getName(); + tearDownMocks.put(MOCKITO_CONSTRUCTION_PREFIX + mockName, mockFieldId); } })); @@ -352,8 +375,9 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl return md; } if (isTearDownMethod(md)) { - for (String v : tearDownMocks) { - md = JavaTemplate.builder(v + ".closeOnDemand();") + for (J.Identifier id : tearDownMocks.values()) { + String type = TypeUtils.asFullyQualified(id.getFieldType().getType()).getFullyQualifiedName(); + md = JavaTemplate.builder("#{any(" + type + ")}.closeOnDemand();") .contextSensitive() .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) .imports(MOCKITO_STATIC_IMPORT, MOCKITO_CONSTRUCTION_IMPORT) @@ -361,10 +385,11 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl .build() .apply( updateCursor(md), - md.getBody().getCoordinates().lastStatement() + md.getBody().getCoordinates().lastStatement(), + id ); } - return super.visitMethodDeclaration(md, ctx); + return md; } List openedMocks = new ArrayList<>(); @@ -406,15 +431,27 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl .filter(m -> m.getValue().getFlags().contains(Static)) .collect(toMap(Map.Entry::getKey, Map.Entry::getValue)); if (!mockedPublicStaticMethods.isEmpty()) { - md = JavaTemplate.builder( + JavaTemplate tpl = JavaTemplate.builder( addMockStaticMethods(isBeforeTest, (JavaType.Class) mockType, className, mockName, mockedPublicStaticMethods) ) .contextSensitive() .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) .imports(MOCKITO_STATIC_IMPORT) .staticImports(MOCKITO_ALL_IMPORT) - .build() - .apply(updateCursor(md), statement.getCoordinates().after()); + .build(); + if (isBeforeTest) { + md = tpl.apply( + updateCursor(md), + statement.getCoordinates().after(), + tearDownMocks.get(MOCKITO_STATIC_PREFIX + mockName) + ); + } else { + md = tpl.apply( + updateCursor(md), + statement.getCoordinates().after() + ); + } + maybeAddImport(MOCKITO_STATIC_IMPORT); openedMocks.add(MOCKITO_STATIC_PREFIX + mockName); } @@ -426,15 +463,27 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl .filter(m -> !m.getValue().getFlags().contains(Static)) .collect(toMap(Map.Entry::getKey, Map.Entry::getValue)); if (!mockedPublicMethods.isEmpty()) { - md = JavaTemplate.builder( + JavaTemplate tpl = JavaTemplate.builder( addMockInstanceMethods(isBeforeTest, (JavaType.Class) mockType, className, mockName, mockedPublicMethods) ) .contextSensitive() .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) .imports(MOCKITO_CONSTRUCTION_IMPORT) .staticImports(MOCKITO_ALL_IMPORT) - .build() - .apply(updateCursor(md), statement.getCoordinates().after()); + .build(); + if (isBeforeTest) { + md = tpl.apply( + updateCursor(md), + statement.getCoordinates().after(), + tearDownMocks.get(MOCKITO_CONSTRUCTION_PREFIX + mockName) + ); + } else { + md = tpl.apply( + updateCursor(md), + statement.getCoordinates().after() + ); + } + maybeAddImport(MOCKITO_CONSTRUCTION_IMPORT); openedMocks.add(MOCKITO_CONSTRUCTION_PREFIX + mockName); } diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index 888ecd148..f5e66a08d 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -17,11 +17,10 @@ import org.junit.jupiter.api.Test; import org.openrewrite.DocumentExample; -import org.openrewrite.test.RecipeSpec; -import org.openrewrite.test.RewriteTest; - import static org.openrewrite.java.Assertions.java; import static org.openrewrite.java.testing.jmockit.JMockitTestUtils.setParserSettings; +import org.openrewrite.test.RecipeSpec; +import org.openrewrite.test.RewriteTest; class JMockitMockUpToMockitoTest implements RewriteTest { @@ -40,16 +39,16 @@ void mockUpStaticMethodTest() { import mockit.Mock; import mockit.MockUp; import static org.junit.Assert.assertEquals; - + class MockUpTest { void test() { new MockUp() { - + @Mock public int staticMethod() { return 1024; } - + @Mock public int staticMethod(int v) { return 128; @@ -58,12 +57,12 @@ public int staticMethod(int v) { assertEquals(1024, MyClazz.staticMethod()); assertEquals(128, MyClazz.staticMethod(0)); } - + public static class MyClazz { public static int staticMethod() { return 0; } - + public static int staticMethod(int v) { return 1; } @@ -71,13 +70,13 @@ public static int staticMethod(int v) { } """, """ import org.mockito.MockedStatic; - + import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.*; - + class MockUpTest { void test() { - MockedStatic mockStaticMockUpTest_MyClazz = mockStatic(MockUpTest.MyClazz.class); + MockedStatic mockStaticMockUpTest_MyClazz = mockStatic(MockUpTest.MyClazz.class); mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod()).thenAnswer(invocation -> { return 1024; }); @@ -89,12 +88,12 @@ void test() { assertEquals(128, MyClazz.staticMethod(0)); mockStaticMockUpTest_MyClazz.closeOnDemand(); } - + public static class MyClazz { public static int staticMethod() { return 0; } - + public static int staticMethod(int v) { return 1; } @@ -113,7 +112,7 @@ void mockUpInstanceMethodTest() { import mockit.Mock; import mockit.MockUp; import static org.junit.Assert.assertEquals; - + public class MockUpTest { @Test public void test() { @@ -130,12 +129,12 @@ public String getMsg(String echo) { assertEquals("mockMsg", new MyClazz().getMsg()); assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); } - + public static class MyClazz { public String getMsg() { return "msg"; } - + public String getMsg(String echo) { return echo; } @@ -146,11 +145,11 @@ public String getMsg(String echo) { import org.mockito.MockedConstruction; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.*; - + public class MockUpTest { @Test public void test() { - MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { + MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { doAnswer(invocation -> { return "mockMsg"; }).when(mock).getMsg(); @@ -163,12 +162,12 @@ public void test() { assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); mockObjMockUpTest_MyClazz.closeOnDemand(); } - + public static class MyClazz { public String getMsg() { return "msg"; } - + public String getMsg(String echo) { return echo; } @@ -185,22 +184,22 @@ void mockUpInnerStatementTest() { """ import mockit.Mock; import mockit.MockUp; - + import org.junit.Test; import static org.junit.Assert.assertEquals; - + public class MockUpTest { @Test public void test() { new MockUp() { final String msg = "newMsg"; - + @Mock public String getMsg() { return msg; } }; - + // Should ignore the newClass statement new Runnable() { @Override @@ -210,7 +209,7 @@ public void run() { }; assertEquals("newMsg", new MyClazz().getMsg()); } - + public static class MyClazz { public String getMsg() { return "msg"; @@ -220,20 +219,20 @@ public String getMsg() { """, """ import org.junit.Test; import org.mockito.MockedConstruction; - + import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.*; - + public class MockUpTest { @Test public void test() { final String msg = "newMsg"; - MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { + MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { doAnswer(invocation -> { return msg; }).when(mock).getMsg(); }); - + // Should ignore the newClass statement new Runnable() { @Override @@ -244,7 +243,7 @@ public void run() { assertEquals("newMsg", new MyClazz().getMsg()); mockObjMockUpTest_MyClazz.closeOnDemand(); } - + public static class MyClazz { public String getMsg() { return "msg"; @@ -264,7 +263,7 @@ void mockUpVoidTest() { import mockit.MockUp; import static org.junit.Assert.assertEquals; import org.junit.Test; - + public class MockUpTest { @Test public void test() { @@ -273,37 +272,37 @@ public void test() { public void changeMsg() { MockUpClass.Save.msg = "mockMsg"; } - + @Mock public void changeText(String text) { MockUpClass.Save.text = "mockText"; } }; - + assertEquals("mockMsg", new MockUpClass().getMsg()); assertEquals("mockText", new MockUpClass().getText()); } - + public static class MockUpClass { public static class Save { public static String msg = "msg"; public static String text = "text"; } - + public final String getMsg() { changeMsg(); return Save.msg; } - + public void changeMsg() { Save.msg = "newMsg"; } - + public String getText() { changeText("newText"); return Save.text; } - + public static void changeText(String text) { Save.text = text; } @@ -313,15 +312,15 @@ public static void changeText(String text) { """ import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.*; - + import org.junit.Test; import org.mockito.MockedConstruction; import org.mockito.MockedStatic; - + public class MockUpTest { @Test public void test() { - MockedConstruction mockObjMockUpTest_MockUpClass = mockConstruction(MockUpTest.MockUpClass.class, (mock, context) -> { + MockedConstruction mockObjMockUpTest_MockUpClass = mockConstruction(MockUpTest.MockUpClass.class, (mock, context) -> { doAnswer(invocation -> { MockUpClass.Save.msg = "mockMsg"; return null; @@ -329,39 +328,39 @@ public void test() { when(mock.getText()).thenCallRealMethod(); when(mock.getMsg()).thenCallRealMethod(); }); - MockedStatic mockStaticMockUpTest_MockUpClass = mockStatic(MockUpTest.MockUpClass.class); + MockedStatic mockStaticMockUpTest_MockUpClass = mockStatic(MockUpTest.MockUpClass.class); mockStaticMockUpTest_MockUpClass.when(() -> MockUpTest.MockUpClass.changeText(nullable(String.class))).thenAnswer(invocation -> { String text = (String) invocation.getArgument(0); MockUpClass.Save.text = "mockText"; return null; }); - + assertEquals("mockMsg", new MockUpClass().getMsg()); assertEquals("mockText", new MockUpClass().getText()); mockStaticMockUpTest_MockUpClass.closeOnDemand(); mockObjMockUpTest_MockUpClass.closeOnDemand(); } - + public static class MockUpClass { public static class Save { public static String msg = "msg"; public static String text = "text"; } - + public final String getMsg() { changeMsg(); return Save.msg; } - + public void changeMsg() { Save.msg = "newMsg"; } - + public String getText() { changeText("newText"); return Save.text; } - + public static void changeText(String text) { Save.text = text; } @@ -380,10 +379,10 @@ public void mockUpAtSetUpWithoutTearDownTest() { import mockit.Mock; import mockit.MockUp; import static org.junit.Assert.assertEquals; - + public class MockUpTest { @Before - public void init() { + public void setUp() { new MockUp() { @Mock public String getMsg() { @@ -391,12 +390,12 @@ public String getMsg() { } }; } - + @Test public void test() { assertEquals("mockMsg", new MyClazz().getMsg()); } - + public static class MyClazz { public String getMsg() { return "msg"; @@ -411,33 +410,135 @@ public String getMsg() { import org.mockito.MockedConstruction; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.*; - + public class MockUpTest { - private MockedConstruction mockObjMockUpTest_MyClazz; - + private MockedConstruction mockObjMockUpTest_MyClazz; + @Before - public void init() { + public void setUp() { + mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { + doAnswer(invocation -> { + return "mockMsg"; + }).when(mock).getMsg(); + }); + } + + @After + public void tearDown() { + mockObjMockUpTest_MyClazz.closeOnDemand(); + } + + @Test + public void test() { + assertEquals("mockMsg", new MyClazz().getMsg()); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + } + } + """ + ) + ); + } + + @Test + public void mockUpAtSetUpWithTearDownTest() { + rewriteRun( + java( + """ + import org.junit.Before; + import org.junit.After; + import org.junit.Test; + import mockit.Mock; + import mockit.MockUp; + import static org.junit.Assert.assertEquals; + + public class MockUpTest { + @Before + public void setUp() { + new MockUp() { + @Mock + public String getMsg() { + return "mockMsg"; + } + + @Mock + public String getStaticMsg() { + return "mockStaticMsg"; + } + }; + } + + @After + public void tearDown() { + } + + @Test + public void test() { + assertEquals("mockMsg", new MyClazz().getMsg()); + assertEquals("mockStaticMsg", MyClazz.getStaticMsg()); + } + + public static class MyClazz { + public String getMsg() { + return "msg"; + } + + public static String getStaticMsg() { + return "staticMsg"; + } + } + } + """, + """ + import org.junit.Before; + import org.junit.After; + import org.junit.Test; + import org.mockito.MockedConstruction; + import org.mockito.MockedStatic; + import static org.junit.Assert.assertEquals; + import static org.mockito.Mockito.*; + + public class MockUpTest { + private MockedConstruction mockObjMockUpTest_MyClazz; + private MockedStatic mockStaticMockUpTest_MyClazz; + + @Before + public void setUp() { mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { doAnswer(invocation -> { return "mockMsg"; }).when(mock).getMsg(); }); + mockStaticMockUpTest_MyClazz = mockStatic(MockUpTest.MyClazz.class); + mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.getStaticMsg()).thenAnswer(invocation -> { + return "mockStaticMsg"; + }); } - + @After public void tearDown() { mockObjMockUpTest_MyClazz.closeOnDemand(); + mockStaticMockUpTest_MyClazz.closeOnDemand(); } - + @Test public void test() { assertEquals("mockMsg", new MyClazz().getMsg()); + assertEquals("mockStaticMsg", MyClazz.getStaticMsg()); } - + public static class MyClazz { public String getMsg() { return "msg"; } + + public static String getStaticMsg() { + return "staticMsg"; + } } } """ @@ -445,6 +546,7 @@ public String getMsg() { ); } + @Test public void mockUpWithParamsTest() { rewriteRun( @@ -453,9 +555,9 @@ public void mockUpWithParamsTest() { import mockit.Mock; import mockit.MockUp; import org.junit.Test; - + import static org.junit.Assert.assertEquals; - + public class MockUpTest { @Test public void init() { @@ -467,7 +569,7 @@ public String getMsg(String foo, String bar, String unused) { }; assertEquals("foobar", new MyClazz().getMsg("foo", "bar", "unused")); } - + public static class MyClazz { public String getMsg(String foo, String bar, String unused) { return "msg"; @@ -478,14 +580,14 @@ public String getMsg(String foo, String bar, String unused) { """ import org.junit.Test; import org.mockito.MockedConstruction; - + import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.*; - + public class MockUpTest { @Test public void init() { - MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { + MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { doAnswer(invocation -> { String foo = (String) invocation.getArgument(0); String bar = (String) invocation.getArgument(1); @@ -496,7 +598,7 @@ public void init() { assertEquals("foobar", new MyClazz().getMsg("foo", "bar", "unused")); mockObjMockUpTest_MyClazz.closeOnDemand(); } - + public static class MyClazz { public String getMsg(String foo, String bar, String unused) { return "msg"; From 8992a879e74fa555d898b8f00d0028a1cbacd63f Mon Sep 17 00:00:00 2001 From: SiBorea Date: Tue, 24 Sep 2024 12:02:51 +0800 Subject: [PATCH 24/39] Remove unused local variables --- .../jmockit/JMockitMockUpToMockito.java | 29 +++++++++++++++++-- .../jmockit/JMockitMockUpToMockitoTest.java | 3 -- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index c282d9cbd..632d9299b 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -17,6 +17,7 @@ import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toMap; +import lombok.SneakyThrows; import org.openrewrite.Cursor; import org.openrewrite.ExecutionContext; import org.openrewrite.Preconditions; @@ -32,12 +33,14 @@ import static org.openrewrite.java.tree.Flag.Private; import static org.openrewrite.java.tree.Flag.Static; import org.openrewrite.java.tree.J; +import org.openrewrite.java.tree.JavaSourceFile; import org.openrewrite.java.tree.JavaType; import org.openrewrite.java.tree.Statement; import org.openrewrite.java.tree.TypeUtils; import org.openrewrite.marker.SearchResult; import org.openrewrite.staticanalysis.RemoveUnusedLocalVariables; +import java.lang.reflect.Method; import java.util.AbstractMap; import java.util.ArrayList; import java.util.Comparator; @@ -105,7 +108,26 @@ private String getMatcher(JavaType s) { return "nullable(" + TypeUtils.asFullyQualified(s).getClassName() + ".class)"; } + @SneakyThrows private void appendAnswer(StringBuilder sb, J.MethodDeclaration md) { + Method findRefs = RemoveUnusedLocalVariables.class + .getDeclaredClasses()[0] + .getDeclaredMethod("findRhsReferences", J.class, J.Identifier.class); + findRefs.setAccessible(true); + + Set usedVariables = new HashSet<>(); + (new JavaIsoVisitor>() { + @SneakyThrows + public J.VariableDeclarations.NamedVariable visitVariable(J.VariableDeclarations.NamedVariable variable, Set ctx) { + Cursor scope = getCursor().dropParentUntil((is) -> is instanceof J.ClassDeclaration || is instanceof J.Block || is instanceof J.MethodDeclaration || is instanceof J.ForLoop || is instanceof J.ForEachLoop || is instanceof J.ForLoop.Control || is instanceof J.ForEachLoop.Control || is instanceof J.Case || is instanceof J.Try || is instanceof J.Try.Resource || is instanceof J.Try.Catch || is instanceof J.MultiCatch || is instanceof J.Lambda || is instanceof JavaSourceFile); + List refs = (List) findRefs.invoke(null, scope.getValue(), variable.getName()); + if (!refs.isEmpty()) { + ctx.add(variable.getSimpleName()); + } + return super.visitVariable(variable, ctx); + } + }).visit(md, usedVariables); + List parameters = md.getParameters(); for (int i = 0; i < parameters.size(); i++) { if (!(parameters.get(i) instanceof J.VariableDeclarations)) { @@ -119,8 +141,10 @@ private void appendAnswer(StringBuilder sb, J.MethodDeclaration md) { className = vd.getTypeAsFullyQualified().getClassName(); } String varName = vd.getVariables().get(0).getName().getSimpleName(); - sb.append(className).append(" ").append(varName) - .append(" = (").append(className).append(") invocation.getArgument(").append(i).append(");"); + if (usedVariables.contains(varName)) { + sb.append(className).append(" ").append(varName) + .append(" = (").append(className).append(") invocation.getArgument(").append(i).append(");"); + } } boolean hasReturn = false; @@ -511,7 +535,6 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl } } - doAfterVisit(new RemoveUnusedLocalVariables(new String[]{}).getVisitor()); return maybeAutoFormat(methodDecl, md, ctx); } } diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index f5e66a08d..53eb386dd 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -81,7 +81,6 @@ void test() { return 1024; }); mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> { - int v = (int) invocation.getArgument(0); return 128; }); assertEquals(1024, MyClazz.staticMethod()); @@ -154,7 +153,6 @@ public void test() { return "mockMsg"; }).when(mock).getMsg(); doAnswer(invocation -> { - String echo = (String) invocation.getArgument(0); return "mockEchoMsg"; }).when(mock).getMsg(nullable(String.class)); }); @@ -591,7 +589,6 @@ public void init() { doAnswer(invocation -> { String foo = (String) invocation.getArgument(0); String bar = (String) invocation.getArgument(1); - String unused = (String) invocation.getArgument(2); return foo + bar; }).when(mock).getMsg(nullable(String.class), nullable(String.class), nullable(String.class)); }); From dce23c8ac5e016479053bcf5bb7948cae668f2f8 Mon Sep 17 00:00:00 2001 From: SiBorea Date: Tue, 24 Sep 2024 23:58:19 +0800 Subject: [PATCH 25/39] MockUp to try-with-resource --- .../jmockit/JMockitMockUpToMockito.java | 292 +++++++++--------- .../jmockit/JMockitMockUpToMockitoTest.java | 179 ++++++----- 2 files changed, 245 insertions(+), 226 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index 632d9299b..5df1685df 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -27,6 +27,7 @@ import org.openrewrite.java.JavaIsoVisitor; import org.openrewrite.java.JavaParser; import org.openrewrite.java.JavaTemplate; +import org.openrewrite.java.search.FindMissingTypes; import org.openrewrite.java.search.UsesType; import static org.openrewrite.java.testing.jmockit.JMockitBlockType.MockUp; import static org.openrewrite.java.testing.mockito.MockitoUtils.maybeAddMethodWithAnnotation; @@ -43,6 +44,7 @@ import java.lang.reflect.Method; import java.util.AbstractMap; import java.util.ArrayList; +import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; @@ -56,11 +58,14 @@ public class JMockitMockUpToMockito extends Recipe { private static final String MOCKITO_CLASSPATH = "mockito-core-5"; private static final String MOCKITO_ALL_IMPORT = "org.mockito.Mockito.*"; + private static final String MOCKITO_MATCHER_IMPORT = "org.mockito.ArgumentMatchers.*"; + private static final String MOCKITO_DELEGATEANSWER_IMPORT = "org.mockito.AdditionalAnswers.delegatesTo"; private static final String JMOCKIT_MOCKUP_IMPORT = "mockit.MockUp"; private static final String JMOCKIT_MOCK_IMPORT = "mockit.Mock"; private static final String MOCKITO_STATIC_PREFIX = "mockStatic"; private static final String MOCKITO_STATIC_IMPORT = "org.mockito.MockedStatic"; - private static final String MOCKITO_CONSTRUCTION_PREFIX = "mockObj"; + private static final String MOCKITO_MOCK_PREFIX = "mockObj"; + private static final String MOCKITO_CONSTRUCTION_PREFIX = "mockCons"; private static final String MOCKITO_CONSTRUCTION_IMPORT = "org.mockito.MockedConstruction"; @Override @@ -82,6 +87,7 @@ private static class JMockitMockUpToMockitoVisitor extends JavaIsoVisitor tearDownMocks = new HashMap<>(); private String getMatcher(JavaType s) { + maybeAddImport(MOCKITO_MATCHER_IMPORT.replace(".*", ""), "*", false); if (s instanceof JavaType.Primitive) { switch (s.toString()) { case "int": @@ -109,7 +115,7 @@ private String getMatcher(JavaType s) { } @SneakyThrows - private void appendAnswer(StringBuilder sb, J.MethodDeclaration md) { + private String getAnswerBody(J.MethodDeclaration md) { Method findRefs = RemoveUnusedLocalVariables.class .getDeclaredClasses()[0] .getDeclaredMethod("findRhsReferences", J.class, J.Identifier.class); @@ -128,6 +134,7 @@ public J.VariableDeclarations.NamedVariable visitVariable(J.VariableDeclarations } }).visit(md, usedVariables); + StringBuilder sb = new StringBuilder(); List parameters = md.getParameters(); for (int i = 0; i < parameters.size(); i++) { if (!(parameters.get(i) instanceof J.VariableDeclarations)) { @@ -150,66 +157,55 @@ public J.VariableDeclarations.NamedVariable visitVariable(J.VariableDeclarations boolean hasReturn = false; for (Statement s : md.getBody().getStatements()) { hasReturn = hasReturn || s instanceof J.Return; - sb.append(s.print()); - sb.append(";"); + sb.append(s.print()).append(";"); } // Avoid syntax error if (!hasReturn) { sb.append("return null;"); } + return sb.toString(); } - private void appendDoAnswer(StringBuilder sb, J.MethodDeclaration m, String objName) { - sb.append("doAnswer(invocation -> {"); - appendAnswer(sb, m); - sb.append("}).when(").append(objName).append(").").append(m.getSimpleName()).append("("); + private String getCallRealMethod(JavaType.Method m) { + return "(" + + m.getParameterTypes() + .stream() + .map(this::getMatcher) + .collect(Collectors.joining(", ")) + + ")).thenCallRealMethod();"; + } - sb.append(m.getParameters() - .stream() - .filter(J.VariableDeclarations.class::isInstance) - .map(o -> getMatcher(((J.VariableDeclarations) o).getType())) - .collect(Collectors.joining(", "))); - sb.append(");"); + private String getMockStaticDeclarationInBefore(String className) { + return "#{any(" + MOCKITO_STATIC_IMPORT + ")}" + + " = mockStatic(" + className + ".class);"; } - private void appendCallRealMethod(StringBuilder sb, JavaType.Method m) { - sb.append("("); - for (int i = 0; i < m.getParameterTypes().size(); i++) { - JavaType s = m.getParameterTypes().get(i); - sb.append(getMatcher(s)); - if (i < m.getParameterTypes().size() - 1) { - sb.append(", "); - } - } - sb.append(")).thenCallRealMethod();"); + private String getMockStaticDeclarationInTry(String className, String mockName) { + return "MockedStatic " + MOCKITO_STATIC_PREFIX + mockName + + " = mockStatic(" + className + ".class)"; } - private String addMockStaticMethods(boolean isBeforeTest, JavaType.Class clazz, String className, String mockName, Map mockedMethods) { + private String getMockStaticMethods(JavaType.Class clazz, String className, String mockName, Map mockedMethods) { StringBuilder tpl = new StringBuilder(); - // Handle mocked static mockedMethods - if (isBeforeTest) { - tpl.append("#{any(").append(MOCKITO_STATIC_IMPORT).append(")}"); - } else { - tpl.append("MockedStatic ").append(MOCKITO_STATIC_PREFIX).append(mockName); - } - tpl.append(" = mockStatic(").append(className).append(".class);"); - // To generate predictable method order List keys = mockedMethods.keySet().stream() .sorted(Comparator.comparing((J.MethodDeclaration::print))) .collect(toList()); for (J.MethodDeclaration m : keys) { - tpl.append("mockStatic").append(mockName); - tpl.append(".when(() -> ").append(className).append(".").append(m.getSimpleName()).append("("); - tpl.append(m.getParameters() - .stream() - .filter(J.VariableDeclarations.class::isInstance) - .map(o -> getMatcher(((J.VariableDeclarations) o).getType())) - .collect(Collectors.joining(", "))); - tpl.append(")).thenAnswer(invocation -> {"); - appendAnswer(tpl, m); - tpl.append("});"); + tpl.append("mockStatic").append(mockName) + .append(".when(() -> ").append(className).append(".").append(m.getSimpleName()).append("(") + .append(m.getParameters() + .stream() + .filter(J.VariableDeclarations.class::isInstance) + .map(J.VariableDeclarations.class::cast) + .map(J.VariableDeclarations::getType) + .map(this::getMatcher) + .collect(Collectors.joining(", ")) + ) + .append(")).thenAnswer(invocation -> {") + .append(getAnswerBody(m)) + .append("});"); } // Call real method for non private, static methods @@ -219,47 +215,49 @@ private String addMockStaticMethods(boolean isBeforeTest, JavaType.Class clazz, .filter(m -> !m.getFlags().contains(Private)) .filter(m -> m.getFlags().contains(Static)) .filter(m -> !mockedMethods.containsValue(m)) - .forEach(m -> { - tpl.append("mockStatic").append(mockName).append(".when(() -> ") - .append(className).append(".").append(m.getName()); - appendCallRealMethod(tpl, m); - tpl.append(");"); - }); + .forEach(m -> tpl.append("mockStatic").append(mockName).append(".when(() -> ") + .append(className).append(".").append(m.getName()) + .append(getCallRealMethod(m)) + .append(");") + ); return tpl.toString(); } - private String addMockInstanceMethods(boolean isBeforeTest, JavaType.Class clazz, String className, String mockName, Map mockedMethods) { - StringBuilder tpl = new StringBuilder(); - // Handle mocked construction mockedMethods - if (isBeforeTest) { - tpl.append("#{any(").append(MOCKITO_CONSTRUCTION_IMPORT).append(")}"); - } else { - tpl.append("MockedConstruction ").append(MOCKITO_CONSTRUCTION_PREFIX).append(mockName); - } - tpl.append(" = mockConstruction(").append(className).append(".class, (mock, context) -> {"); + private String getMockConstructionDeclarationInBefore(String className, String mockName) { + return "#{any(" + MOCKITO_CONSTRUCTION_IMPORT + ")}" + + " = mockConstructionWithAnswer(" + className + ".class, delegatesTo(" + MOCKITO_MOCK_PREFIX + mockName + "));"; + } - // To generate predictable method order - List keys = mockedMethods.keySet().stream() - .sorted(Comparator.comparing((J.MethodDeclaration::print))) - .collect(toList()); - for (J.MethodDeclaration m : keys) { - appendDoAnswer(tpl, m, "mock"); - } + private String getMockConstructionDeclarationInTry(String className, String mockName) { + return "MockedConstruction " + MOCKITO_CONSTRUCTION_PREFIX + mockName + + " = mockConstructionWithAnswer(" + className + ".class, delegatesTo(" + MOCKITO_MOCK_PREFIX + mockName + "))"; + } - // Call real method for non private, non static methods - clazz.getMethods() + private String getMockConstructionMethods(String className, String mockName, Map mockedMethods) { + StringBuilder tpl = new StringBuilder() + .append(className) + .append(" ") + .append(MOCKITO_MOCK_PREFIX).append(mockName) + .append(" = mock(").append(className).append(".class, withSettings().defaultAnswer(CALLS_REAL_METHODS));"); + + mockedMethods + .keySet() .stream() - .filter(m -> !m.isConstructor()) - .filter(m -> !m.getFlags().contains(Static)) - .filter(m -> !m.getFlags().contains(Private)) - .filter(m -> !mockedMethods.containsValue(m)) - .forEach(m -> { - tpl.append("when(mock.").append(m.getName()); - appendCallRealMethod(tpl, m); - }); + .sorted(Comparator.comparing((J.MethodDeclaration::print))) + .forEach(m -> tpl.append("doAnswer(invocation -> {") + .append(getAnswerBody(m)) + .append("}).when(").append(MOCKITO_MOCK_PREFIX).append(mockName).append(").").append(m.getSimpleName()).append("(") + .append(m.getParameters() + .stream() + .filter(J.VariableDeclarations.class::isInstance) + .map(J.VariableDeclarations.class::cast) + .map(J.VariableDeclarations::getType) + .map(this::getMatcher) + .collect(Collectors.joining(", ")) + ) + .append(");")); - tpl.append("});"); return tpl.toString(); } @@ -416,17 +414,22 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl return md; } - List openedMocks = new ArrayList<>(); boolean isBeforeTest = isSetUpMethod(md); + List varDeclarationInTry = new ArrayList<>(); + List mockStaticMethodInTry = new ArrayList<>(); + List mockConstructionMethodInTry = new ArrayList<>(); + List encloseStatements = new ArrayList<>(); + List residualStatements = new ArrayList<>(); for (Statement statement : md.getBody().getStatements()) { if (!isMockUpStatement(statement)) { + encloseStatements.add(statement); continue; } J.NewClass newClass = (J.NewClass) statement; // Only discard @Mock method declarations - List otherStatements = newClass + residualStatements.addAll(newClass .getBody() .getStatements() .stream() @@ -437,10 +440,8 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl } return true; }) - .collect(toList()); - List bodyStatements = md.getBody().getStatements(); - bodyStatements.addAll(bodyStatements.indexOf(statement), otherStatements); - md = md.withBody(md.getBody().withStatements(bodyStatements)); + .collect(toList()) + ); JavaType mockType = ((J.ParameterizedType) newClass.getClazz()).getTypeParameters().get(0).getType(); String className = TypeUtils.asFullyQualified(mockType).getClassName(); @@ -455,29 +456,25 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl .filter(m -> m.getValue().getFlags().contains(Static)) .collect(toMap(Map.Entry::getKey, Map.Entry::getValue)); if (!mockedPublicStaticMethods.isEmpty()) { - JavaTemplate tpl = JavaTemplate.builder( - addMockStaticMethods(isBeforeTest, (JavaType.Class) mockType, className, mockName, mockedPublicStaticMethods) - ) - .contextSensitive() - .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) - .imports(MOCKITO_STATIC_IMPORT) - .staticImports(MOCKITO_ALL_IMPORT) - .build(); if (isBeforeTest) { - md = tpl.apply( - updateCursor(md), - statement.getCoordinates().after(), - tearDownMocks.get(MOCKITO_STATIC_PREFIX + mockName) - ); + String tpl = getMockStaticDeclarationInBefore(className) + + getMockStaticMethods((JavaType.Class) mockType, className, mockName, mockedPublicStaticMethods); + + md = JavaTemplate.builder(tpl) + .contextSensitive() + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) + .imports(MOCKITO_STATIC_IMPORT) + .staticImports(MOCKITO_ALL_IMPORT) + .build() + .apply( + updateCursor(md), + statement.getCoordinates().after(), + tearDownMocks.get(MOCKITO_STATIC_PREFIX + mockName) + ); } else { - md = tpl.apply( - updateCursor(md), - statement.getCoordinates().after() - ); + varDeclarationInTry.add(getMockStaticDeclarationInTry(className, mockName)); + mockStaticMethodInTry.add(getMockStaticMethods((JavaType.Class) mockType, className, mockName, mockedPublicStaticMethods)); } - - maybeAddImport(MOCKITO_STATIC_IMPORT); - openedMocks.add(MOCKITO_STATIC_PREFIX + mockName); } // Add MockConstruction @@ -487,54 +484,67 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl .filter(m -> !m.getValue().getFlags().contains(Static)) .collect(toMap(Map.Entry::getKey, Map.Entry::getValue)); if (!mockedPublicMethods.isEmpty()) { - JavaTemplate tpl = JavaTemplate.builder( - addMockInstanceMethods(isBeforeTest, (JavaType.Class) mockType, className, mockName, mockedPublicMethods) - ) - .contextSensitive() - .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) - .imports(MOCKITO_CONSTRUCTION_IMPORT) - .staticImports(MOCKITO_ALL_IMPORT) - .build(); if (isBeforeTest) { - md = tpl.apply( - updateCursor(md), - statement.getCoordinates().after(), - tearDownMocks.get(MOCKITO_CONSTRUCTION_PREFIX + mockName) - ); + String tpl = getMockConstructionMethods(className, mockName, mockedPublicMethods) + + getMockConstructionDeclarationInBefore(className, mockName); + + md = JavaTemplate.builder(tpl) + .contextSensitive() + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) + .imports(MOCKITO_STATIC_IMPORT) + .staticImports(MOCKITO_ALL_IMPORT, MOCKITO_DELEGATEANSWER_IMPORT) + .build() + .apply( + updateCursor(md), + statement.getCoordinates().after(), + tearDownMocks.get(MOCKITO_CONSTRUCTION_PREFIX + mockName) + ); } else { - md = tpl.apply( - updateCursor(md), - statement.getCoordinates().after() - ); + varDeclarationInTry.add(getMockConstructionDeclarationInTry(className, mockName)); + mockConstructionMethodInTry.add(getMockConstructionMethods(className, mockName, mockedPublicMethods)); } - - maybeAddImport(MOCKITO_CONSTRUCTION_IMPORT); - openedMocks.add(MOCKITO_CONSTRUCTION_PREFIX + mockName); } - maybeAddImport("org.mockito.Mockito", "*", false); - maybeRemoveImport(JMOCKIT_MOCK_IMPORT); - maybeRemoveImport(JMOCKIT_MOCKUP_IMPORT); - - // Remove MockUp statement - bodyStatements = md.getBody().getStatements(); - bodyStatements.remove(statement); - md = md.withBody(md.getBody().withStatements(bodyStatements)); + List statements = md.getBody().getStatements(); + statements.remove(statement); + md = md.withBody(md.getBody().withStatements(statements)); } - // Add close statement at the end - if (!isBeforeTest) { - for (String v : openedMocks) { - md = JavaTemplate.builder(v + ".closeOnDemand();") - .contextSensitive() - .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) - .imports(MOCKITO_STATIC_IMPORT, MOCKITO_CONSTRUCTION_IMPORT) - .staticImports(MOCKITO_ALL_IMPORT) - .build() - .apply(updateCursor(md), md.getBody().getCoordinates().lastStatement()); - } + if (!varDeclarationInTry.isEmpty()) { + String tpl = String.join(";", mockConstructionMethodInTry) + + "try (" + + String.join(";", varDeclarationInTry) + + ") {" + + String.join(";", mockStaticMethodInTry) + + "}"; + + J.MethodDeclaration residualMd = md.withBody(md.getBody().withStatements(residualStatements)); + residualMd = JavaTemplate.builder(tpl) + .contextSensitive() + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) + .imports(MOCKITO_STATIC_IMPORT, MOCKITO_CONSTRUCTION_IMPORT) + .staticImports(MOCKITO_ALL_IMPORT, MOCKITO_MATCHER_IMPORT, MOCKITO_MATCHER_IMPORT, MOCKITO_DELEGATEANSWER_IMPORT) + .build() + .apply(updateCursor(residualMd), residualMd.getBody().getCoordinates().lastStatement()); + + List mdStatements = residualMd.getBody().getStatements(); + J.Try try_ = (J.Try) mdStatements.get(mdStatements.size() - 1); + + List tryStatements = try_.getBody().getStatements(); + tryStatements.addAll(encloseStatements); + try_ = try_.withBody(try_.getBody().withStatements(tryStatements)); + + mdStatements.set(mdStatements.size() - 1, try_); + md = md.withBody(residualMd.getBody().withStatements(mdStatements)); } + maybeAddImport(MOCKITO_CONSTRUCTION_IMPORT); + maybeAddImport(MOCKITO_STATIC_IMPORT); + maybeAddImport("org.mockito.Answers", "CALLS_REAL_METHODS"); + maybeAddImport("org.mockito.AdditionalAnswers", "delegatesTo"); + maybeAddImport(MOCKITO_ALL_IMPORT.replace(".*", ""), "*", false); + maybeRemoveImport(JMOCKIT_MOCK_IMPORT); + maybeRemoveImport(JMOCKIT_MOCKUP_IMPORT); return maybeAutoFormat(methodDecl, md, ctx); } } diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index 53eb386dd..0f9aa2b80 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -39,9 +39,11 @@ void mockUpStaticMethodTest() { import mockit.Mock; import mockit.MockUp; import static org.junit.Assert.assertEquals; + import org.junit.Test; - class MockUpTest { - void test() { + public class MockUpTest { + @Test + public void test() { new MockUp() { @Mock @@ -54,8 +56,8 @@ public int staticMethod(int v) { return 128; } }; - assertEquals(1024, MyClazz.staticMethod()); - assertEquals(128, MyClazz.staticMethod(0)); + assertEquals(1024, MockUpTest.MyClazz.staticMethod()); + assertEquals(128, MockUpTest.MyClazz.staticMethod(0)); } public static class MyClazz { @@ -69,23 +71,26 @@ public static int staticMethod(int v) { } } """, """ - import org.mockito.MockedStatic; - import static org.junit.Assert.assertEquals; + import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; - class MockUpTest { - void test() { - MockedStatic mockStaticMockUpTest_MyClazz = mockStatic(MockUpTest.MyClazz.class); - mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod()).thenAnswer(invocation -> { - return 1024; - }); - mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> { - return 128; - }); - assertEquals(1024, MyClazz.staticMethod()); - assertEquals(128, MyClazz.staticMethod(0)); - mockStaticMockUpTest_MyClazz.closeOnDemand(); + import org.junit.Test; + import org.mockito.MockedStatic; + + public class MockUpTest { + @Test + public void test() { + try (MockedStatic mockStaticMockUpTest_MyClazz = mockStatic(MockUpTest.MyClazz.class)) { + mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod()).thenAnswer(invocation -> { + return 1024; + }); + mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> { + return 128; + }); + assertEquals(1024, MockUpTest.MyClazz.staticMethod()); + assertEquals(128, MockUpTest.MyClazz.staticMethod(0)); + } } public static class MyClazz { @@ -143,22 +148,24 @@ public String getMsg(String echo) { import org.junit.Test; import org.mockito.MockedConstruction; import static org.junit.Assert.assertEquals; + import static org.mockito.AdditionalAnswers.delegatesTo; + import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; public class MockUpTest { @Test public void test() { - MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { - doAnswer(invocation -> { - return "mockMsg"; - }).when(mock).getMsg(); - doAnswer(invocation -> { - return "mockEchoMsg"; - }).when(mock).getMsg(nullable(String.class)); - }); - assertEquals("mockMsg", new MyClazz().getMsg()); - assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); - mockObjMockUpTest_MyClazz.closeOnDemand(); + MockUpTest.MyClazz mockObjMockUpTest_MyClazz = mock(MockUpTest.MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); + doAnswer(invocation -> { + return "mockMsg"; + }).when(mockObjMockUpTest_MyClazz).getMsg(); + doAnswer(invocation -> { + return "mockEchoMsg"; + }).when(mockObjMockUpTest_MyClazz).getMsg(nullable(String.class)); + try (MockedConstruction mockConsMockUpTest_MyClazz = mockConstructionWithAnswer(MockUpTest.MyClazz.class, delegatesTo(mockObjMockUpTest_MyClazz))) { + assertEquals("mockMsg", new MyClazz().getMsg()); + assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); + } } public static class MyClazz { @@ -219,27 +226,28 @@ public String getMsg() { import org.mockito.MockedConstruction; import static org.junit.Assert.assertEquals; + import static org.mockito.AdditionalAnswers.delegatesTo; import static org.mockito.Mockito.*; public class MockUpTest { @Test public void test() { final String msg = "newMsg"; - MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { - doAnswer(invocation -> { - return msg; - }).when(mock).getMsg(); - }); - - // Should ignore the newClass statement - new Runnable() { - @Override - public void run() { - System.out.println("run"); - } - }; - assertEquals("newMsg", new MyClazz().getMsg()); - mockObjMockUpTest_MyClazz.closeOnDemand(); + MockUpTest.MyClazz mockObjMockUpTest_MyClazz = mock(MockUpTest.MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); + doAnswer(invocation -> { + return msg; + }).when(mockObjMockUpTest_MyClazz).getMsg(); + try (MockedConstruction mockConsMockUpTest_MyClazz = mockConstructionWithAnswer(MockUpTest.MyClazz.class, delegatesTo(mockObjMockUpTest_MyClazz))) { + + // Should ignore the newClass statement + new Runnable() { + @Override + public void run() { + System.out.println("run"); + } + }; + assertEquals("newMsg", new MyClazz().getMsg()); + } } public static class MyClazz { @@ -309,6 +317,8 @@ public static void changeText(String text) { """, """ import static org.junit.Assert.assertEquals; + import static org.mockito.AdditionalAnswers.delegatesTo; + import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import org.junit.Test; @@ -318,25 +328,21 @@ public static void changeText(String text) { public class MockUpTest { @Test public void test() { - MockedConstruction mockObjMockUpTest_MockUpClass = mockConstruction(MockUpTest.MockUpClass.class, (mock, context) -> { - doAnswer(invocation -> { - MockUpClass.Save.msg = "mockMsg"; - return null; - }).when(mock).changeMsg(); - when(mock.getText()).thenCallRealMethod(); - when(mock.getMsg()).thenCallRealMethod(); - }); - MockedStatic mockStaticMockUpTest_MockUpClass = mockStatic(MockUpTest.MockUpClass.class); - mockStaticMockUpTest_MockUpClass.when(() -> MockUpTest.MockUpClass.changeText(nullable(String.class))).thenAnswer(invocation -> { - String text = (String) invocation.getArgument(0); - MockUpClass.Save.text = "mockText"; + MockUpTest.MockUpClass mockObjMockUpTest_MockUpClass = mock(MockUpTest.MockUpClass.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); + doAnswer(invocation -> { + MockUpClass.Save.msg = "mockMsg"; return null; - }); + }).when(mockObjMockUpTest_MockUpClass).changeMsg(); + try (MockedStatic mockStaticMockUpTest_MockUpClass = mockStatic(MockUpTest.MockUpClass.class);MockedConstruction mockConsMockUpTest_MockUpClass = mockConstructionWithAnswer(MockUpTest.MockUpClass.class, delegatesTo(mockObjMockUpTest_MockUpClass))) { + mockStaticMockUpTest_MockUpClass.when(() -> MockUpTest.MockUpClass.changeText(nullable(String.class))).thenAnswer(invocation -> { + String text = (String) invocation.getArgument(0); + MockUpClass.Save.text = "mockText"; + return null; + }); - assertEquals("mockMsg", new MockUpClass().getMsg()); - assertEquals("mockText", new MockUpClass().getText()); - mockStaticMockUpTest_MockUpClass.closeOnDemand(); - mockObjMockUpTest_MockUpClass.closeOnDemand(); + assertEquals("mockMsg", new MockUpClass().getMsg()); + assertEquals("mockText", new MockUpClass().getText()); + } } public static class MockUpClass { @@ -407,23 +413,24 @@ public String getMsg() { import org.junit.Test; import org.mockito.MockedConstruction; import static org.junit.Assert.assertEquals; + import static org.mockito.AdditionalAnswers.delegatesTo; import static org.mockito.Mockito.*; public class MockUpTest { - private MockedConstruction mockObjMockUpTest_MyClazz; + private MockedConstruction mockConsMockUpTest_MyClazz; @Before public void setUp() { - mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { - doAnswer(invocation -> { - return "mockMsg"; - }).when(mock).getMsg(); - }); + MockUpTest.MyClazz mockObjMockUpTest_MyClazz = mock(MockUpTest.MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); + doAnswer(invocation -> { + return "mockMsg"; + }).when(mockObjMockUpTest_MyClazz).getMsg(); + mockConsMockUpTest_MyClazz = mockConstructionWithAnswer(MockUpTest.MyClazz.class, delegatesTo(mockObjMockUpTest_MyClazz)); } @After public void tearDown() { - mockObjMockUpTest_MyClazz.closeOnDemand(); + mockConsMockUpTest_MyClazz.closeOnDemand(); } @Test @@ -498,19 +505,20 @@ public static String getStaticMsg() { import org.mockito.MockedConstruction; import org.mockito.MockedStatic; import static org.junit.Assert.assertEquals; + import static org.mockito.AdditionalAnswers.delegatesTo; import static org.mockito.Mockito.*; public class MockUpTest { - private MockedConstruction mockObjMockUpTest_MyClazz; + private MockedConstruction mockConsMockUpTest_MyClazz; private MockedStatic mockStaticMockUpTest_MyClazz; @Before public void setUp() { - mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { - doAnswer(invocation -> { - return "mockMsg"; - }).when(mock).getMsg(); - }); + MockUpTest.MyClazz mockObjMockUpTest_MyClazz = mock(MockUpTest.MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); + doAnswer(invocation -> { + return "mockMsg"; + }).when(mockObjMockUpTest_MyClazz).getMsg(); + mockConsMockUpTest_MyClazz = mockConstructionWithAnswer(MockUpTest.MyClazz.class, delegatesTo(mockObjMockUpTest_MyClazz)); mockStaticMockUpTest_MyClazz = mockStatic(MockUpTest.MyClazz.class); mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.getStaticMsg()).thenAnswer(invocation -> { return "mockStaticMsg"; @@ -519,8 +527,8 @@ public void setUp() { @After public void tearDown() { - mockObjMockUpTest_MyClazz.closeOnDemand(); mockStaticMockUpTest_MyClazz.closeOnDemand(); + mockConsMockUpTest_MyClazz.closeOnDemand(); } @Test @@ -544,7 +552,6 @@ public static String getStaticMsg() { ); } - @Test public void mockUpWithParamsTest() { rewriteRun( @@ -580,20 +587,22 @@ public String getMsg(String foo, String bar, String unused) { import org.mockito.MockedConstruction; import static org.junit.Assert.assertEquals; + import static org.mockito.AdditionalAnswers.delegatesTo; + import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; public class MockUpTest { @Test public void init() { - MockedConstruction mockObjMockUpTest_MyClazz = mockConstruction(MockUpTest.MyClazz.class, (mock, context) -> { - doAnswer(invocation -> { - String foo = (String) invocation.getArgument(0); - String bar = (String) invocation.getArgument(1); - return foo + bar; - }).when(mock).getMsg(nullable(String.class), nullable(String.class), nullable(String.class)); - }); - assertEquals("foobar", new MyClazz().getMsg("foo", "bar", "unused")); - mockObjMockUpTest_MyClazz.closeOnDemand(); + MockUpTest.MyClazz mockObjMockUpTest_MyClazz = mock(MockUpTest.MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); + doAnswer(invocation -> { + String foo = (String) invocation.getArgument(0); + String bar = (String) invocation.getArgument(1); + return foo + bar; + }).when(mockObjMockUpTest_MyClazz).getMsg(nullable(String.class), nullable(String.class), nullable(String.class)); + try (MockedConstruction mockConsMockUpTest_MyClazz = mockConstructionWithAnswer(MockUpTest.MyClazz.class, delegatesTo(mockObjMockUpTest_MyClazz))) { + assertEquals("foobar", new MyClazz().getMsg("foo", "bar", "unused")); + } } public static class MyClazz { From 4eeae91b8d79fc69e995b124f5a6c548702295ca Mon Sep 17 00:00:00 2001 From: SiBorea Date: Thu, 26 Sep 2024 13:39:19 +0800 Subject: [PATCH 26/39] Add import class test --- .../jmockit/JMockitMockUpToMockito.java | 8 +-- .../jmockit/JMockitMockUpToMockitoTest.java | 51 ++++++++++--------- 2 files changed, 31 insertions(+), 28 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index 5df1685df..fe32abfff 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -475,6 +475,8 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl varDeclarationInTry.add(getMockStaticDeclarationInTry(className, mockName)); mockStaticMethodInTry.add(getMockStaticMethods((JavaType.Class) mockType, className, mockName, mockedPublicStaticMethods)); } + + maybeAddImport(MOCKITO_STATIC_IMPORT); } // Add MockConstruction @@ -503,6 +505,9 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl varDeclarationInTry.add(getMockConstructionDeclarationInTry(className, mockName)); mockConstructionMethodInTry.add(getMockConstructionMethods(className, mockName, mockedPublicMethods)); } + + maybeAddImport(MOCKITO_CONSTRUCTION_IMPORT); + maybeAddImport("org.mockito.AdditionalAnswers", "delegatesTo", false); } List statements = md.getBody().getStatements(); @@ -538,10 +543,7 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl md = md.withBody(residualMd.getBody().withStatements(mdStatements)); } - maybeAddImport(MOCKITO_CONSTRUCTION_IMPORT); - maybeAddImport(MOCKITO_STATIC_IMPORT); maybeAddImport("org.mockito.Answers", "CALLS_REAL_METHODS"); - maybeAddImport("org.mockito.AdditionalAnswers", "delegatesTo"); maybeAddImport(MOCKITO_ALL_IMPORT.replace(".*", ""), "*", false); maybeRemoveImport(JMOCKIT_MOCK_IMPORT); maybeRemoveImport(JMOCKIT_MOCKUP_IMPORT); diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index 0f9aa2b80..e9244277a 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -21,6 +21,8 @@ import static org.openrewrite.java.testing.jmockit.JMockitTestUtils.setParserSettings; import org.openrewrite.test.RecipeSpec; import org.openrewrite.test.RewriteTest; +import org.openrewrite.test.SourceSpec; +import org.openrewrite.test.TypeValidation; class JMockitMockUpToMockitoTest implements RewriteTest { @@ -110,8 +112,25 @@ public static int staticMethod(int v) { void mockUpInstanceMethodTest() { //language=java rewriteRun( + spec -> spec.afterTypeValidationOptions(TypeValidation.builder().identifiers(false).build()), java( """ + package com.foo; + public static class MyClazz { + public String getMsg() { + return "msg"; + } + + public String getMsg(String echo) { + return echo; + } + } + """, + SourceSpec::skip + ), + java( + """ + import com.foo.MyClazz; import org.junit.Test; import mockit.Mock; import mockit.MockUp; @@ -133,18 +152,9 @@ public String getMsg(String echo) { assertEquals("mockMsg", new MyClazz().getMsg()); assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); } - - public static class MyClazz { - public String getMsg() { - return "msg"; - } - - public String getMsg(String echo) { - return echo; - } - } } """, """ + import com.foo.MyClazz; import org.junit.Test; import org.mockito.MockedConstruction; import static org.junit.Assert.assertEquals; @@ -155,30 +165,21 @@ public String getMsg(String echo) { public class MockUpTest { @Test public void test() { - MockUpTest.MyClazz mockObjMockUpTest_MyClazz = mock(MockUpTest.MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); + MyClazz mockObjMyClazz = mock(MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); doAnswer(invocation -> { return "mockMsg"; - }).when(mockObjMockUpTest_MyClazz).getMsg(); + }).when(mockObjMyClazz).getMsg(); doAnswer(invocation -> { return "mockEchoMsg"; - }).when(mockObjMockUpTest_MyClazz).getMsg(nullable(String.class)); - try (MockedConstruction mockConsMockUpTest_MyClazz = mockConstructionWithAnswer(MockUpTest.MyClazz.class, delegatesTo(mockObjMockUpTest_MyClazz))) { + }).when(mockObjMyClazz).getMsg(nullable(String.class)); + try (MockedConstruction mockConsMyClazz = mockConstructionWithAnswer(MyClazz.class, delegatesTo(mockObjMyClazz))) { assertEquals("mockMsg", new MyClazz().getMsg()); assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); } } - - public static class MyClazz { - public String getMsg() { - return "msg"; - } - - public String getMsg(String echo) { - return echo; - } - } } - """)); + """) + ); } @Test From ee06b6ed9e751ffa200ecc8a5b9acc4d179d4b74 Mon Sep 17 00:00:00 2001 From: SiBorea Date: Thu, 26 Sep 2024 14:01:00 +0800 Subject: [PATCH 27/39] Add multiple mockUp test --- .../jmockit/JMockitMockUpToMockito.java | 4 +- .../jmockit/JMockitMockUpToMockitoTest.java | 86 ++++++++++++++----- 2 files changed, 68 insertions(+), 22 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index fe32abfff..87e073d3d 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -507,6 +507,7 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl } maybeAddImport(MOCKITO_CONSTRUCTION_IMPORT); + maybeAddImport("org.mockito.Answers", "CALLS_REAL_METHODS", false); maybeAddImport("org.mockito.AdditionalAnswers", "delegatesTo", false); } @@ -516,7 +517,7 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl } if (!varDeclarationInTry.isEmpty()) { - String tpl = String.join(";", mockConstructionMethodInTry) + + String tpl = String.join("", mockConstructionMethodInTry) + "try (" + String.join(";", varDeclarationInTry) + ") {" + @@ -543,7 +544,6 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl md = md.withBody(residualMd.getBody().withStatements(mdStatements)); } - maybeAddImport("org.mockito.Answers", "CALLS_REAL_METHODS"); maybeAddImport(MOCKITO_ALL_IMPORT.replace(".*", ""), "*", false); maybeRemoveImport(JMOCKIT_MOCK_IMPORT); maybeRemoveImport(JMOCKIT_MOCKUP_IMPORT); diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index e9244277a..aa5459908 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -109,20 +109,20 @@ public static int staticMethod(int v) { } @Test - void mockUpInstanceMethodTest() { + void mockUpMultipleTest() { //language=java rewriteRun( spec -> spec.afterTypeValidationOptions(TypeValidation.builder().identifiers(false).build()), java( """ - package com.foo; - public static class MyClazz { + package com.openrewrite; + public static class Foo { public String getMsg() { - return "msg"; + return "foo"; } public String getMsg(String echo) { - return echo; + return "foo" + echo; } } """, @@ -130,7 +130,23 @@ public String getMsg(String echo) { ), java( """ - import com.foo.MyClazz; + package com.openrewrite; + public static class Bar { + public String getMsg() { + return "bar"; + } + + public String getMsg(String echo) { + return "bar" + echo; + } + } + """, + SourceSpec::skip + ), + java( + """ + import com.openrewrite.Foo; + import com.openrewrite.Bar; import org.junit.Test; import mockit.Mock; import mockit.MockUp; @@ -139,42 +155,67 @@ public String getMsg(String echo) { public class MockUpTest { @Test public void test() { - new MockUp() { + new MockUp() { @Mock public String getMsg() { - return "mockMsg"; + return "FOO"; } @Mock public String getMsg(String echo) { - return "mockEchoMsg"; + return "FOO" + echo; } }; - assertEquals("mockMsg", new MyClazz().getMsg()); - assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); + new MockUp() { + @Mock + public String getMsg() { + return "BAR"; + } + @Mock + public String getMsg(String echo) { + return "BAR" + echo; + } + }; + assertEquals("FOO", new Foo().getMsg()); + assertEquals("FOOecho", new Foo().getMsg("echo")); + assertEquals("BAR", new Bar().getMsg()); + assertEquals("BARecho", new Bar().getMsg("echo")); } } """, """ - import com.foo.MyClazz; + import com.openrewrite.Foo; + import com.openrewrite.Bar; import org.junit.Test; import org.mockito.MockedConstruction; import static org.junit.Assert.assertEquals; import static org.mockito.AdditionalAnswers.delegatesTo; + import static org.mockito.Answers.CALLS_REAL_METHODS; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; public class MockUpTest { @Test public void test() { - MyClazz mockObjMyClazz = mock(MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); + Foo mockObjFoo = mock(Foo.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); doAnswer(invocation -> { - return "mockMsg"; - }).when(mockObjMyClazz).getMsg(); + return "FOO"; + }).when(mockObjFoo).getMsg(); + doAnswer(invocation -> { + String echo = (String) invocation.getArgument(0); + return "FOO" + echo; + }).when(mockObjFoo).getMsg(nullable(String.class)); + Bar mockObjBar = mock(Bar.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); + doAnswer(invocation -> { + return "BAR"; + }).when(mockObjBar).getMsg(); doAnswer(invocation -> { - return "mockEchoMsg"; - }).when(mockObjMyClazz).getMsg(nullable(String.class)); - try (MockedConstruction mockConsMyClazz = mockConstructionWithAnswer(MyClazz.class, delegatesTo(mockObjMyClazz))) { - assertEquals("mockMsg", new MyClazz().getMsg()); - assertEquals("mockEchoMsg", new MyClazz().getMsg("echo")); + String echo = (String) invocation.getArgument(0); + return "BAR" + echo; + }).when(mockObjBar).getMsg(nullable(String.class)); + try (MockedConstruction mockConsFoo = mockConstructionWithAnswer(Foo.class, delegatesTo(mockObjFoo));MockedConstruction mockConsBar = mockConstructionWithAnswer(Bar.class, delegatesTo(mockObjBar))) { + assertEquals("FOO", new Foo().getMsg()); + assertEquals("FOOecho", new Foo().getMsg("echo")); + assertEquals("BAR", new Bar().getMsg()); + assertEquals("BARecho", new Bar().getMsg("echo")); } } } @@ -228,6 +269,7 @@ public String getMsg() { import static org.junit.Assert.assertEquals; import static org.mockito.AdditionalAnswers.delegatesTo; + import static org.mockito.Answers.CALLS_REAL_METHODS; import static org.mockito.Mockito.*; public class MockUpTest { @@ -319,6 +361,7 @@ public static void changeText(String text) { """ import static org.junit.Assert.assertEquals; import static org.mockito.AdditionalAnswers.delegatesTo; + import static org.mockito.Answers.CALLS_REAL_METHODS; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; @@ -415,6 +458,7 @@ public String getMsg() { import org.mockito.MockedConstruction; import static org.junit.Assert.assertEquals; import static org.mockito.AdditionalAnswers.delegatesTo; + import static org.mockito.Answers.CALLS_REAL_METHODS; import static org.mockito.Mockito.*; public class MockUpTest { @@ -507,6 +551,7 @@ public static String getStaticMsg() { import org.mockito.MockedStatic; import static org.junit.Assert.assertEquals; import static org.mockito.AdditionalAnswers.delegatesTo; + import static org.mockito.Answers.CALLS_REAL_METHODS; import static org.mockito.Mockito.*; public class MockUpTest { @@ -589,6 +634,7 @@ public String getMsg(String foo, String bar, String unused) { import static org.junit.Assert.assertEquals; import static org.mockito.AdditionalAnswers.delegatesTo; + import static org.mockito.Answers.CALLS_REAL_METHODS; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; From a9fc1bc0c710423f0cc5c47523a3c0ead7f49b59 Mon Sep 17 00:00:00 2001 From: SiBorea <108953913+SiBorea@users.noreply.github.com> Date: Fri, 27 Sep 2024 10:41:42 +0800 Subject: [PATCH 28/39] Apply bot suggestions Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../testing/jmockit/JMockitMockUpToMockito.java | 14 ++++++++------ .../java/testing/mockito/MockitoUtils.java | 15 +++++++++++++++ .../jmockit/JMockitMockUpToMockitoTest.java | 7 ++++--- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index 87e073d3d..637bb6c76 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -15,8 +15,6 @@ */ package org.openrewrite.java.testing.jmockit; -import static java.util.stream.Collectors.toList; -import static java.util.stream.Collectors.toMap; import lombok.SneakyThrows; import org.openrewrite.Cursor; import org.openrewrite.ExecutionContext; @@ -29,10 +27,6 @@ import org.openrewrite.java.JavaTemplate; import org.openrewrite.java.search.FindMissingTypes; import org.openrewrite.java.search.UsesType; -import static org.openrewrite.java.testing.jmockit.JMockitBlockType.MockUp; -import static org.openrewrite.java.testing.mockito.MockitoUtils.maybeAddMethodWithAnnotation; -import static org.openrewrite.java.tree.Flag.Private; -import static org.openrewrite.java.tree.Flag.Static; import org.openrewrite.java.tree.J; import org.openrewrite.java.tree.JavaSourceFile; import org.openrewrite.java.tree.JavaType; @@ -55,6 +49,13 @@ import java.util.Set; import java.util.stream.Collectors; +import static java.util.stream.Collectors.toList; +import static java.util.stream.Collectors.toMap; +import static org.openrewrite.java.testing.jmockit.JMockitBlockType.MockUp; +import static org.openrewrite.java.testing.mockito.MockitoUtils.maybeAddMethodWithAnnotation; +import static org.openrewrite.java.tree.Flag.Private; +import static org.openrewrite.java.tree.Flag.Static; + public class JMockitMockUpToMockito extends Recipe { private static final String MOCKITO_CLASSPATH = "mockito-core-5"; private static final String MOCKITO_ALL_IMPORT = "org.mockito.Mockito.*"; @@ -123,6 +124,7 @@ private String getAnswerBody(J.MethodDeclaration md) { Set usedVariables = new HashSet<>(); (new JavaIsoVisitor>() { + @Override @SneakyThrows public J.VariableDeclarations.NamedVariable visitVariable(J.VariableDeclarations.NamedVariable variable, Set ctx) { Cursor scope = getCursor().dropParentUntil((is) -> is instanceof J.ClassDeclaration || is instanceof J.Block || is instanceof J.MethodDeclaration || is instanceof J.ForLoop || is instanceof J.ForEachLoop || is instanceof J.ForLoop.Control || is instanceof J.ForEachLoop.Control || is instanceof J.Case || is instanceof J.Try || is instanceof J.Try.Resource || is instanceof J.Try.Catch || is instanceof J.MultiCatch || is instanceof J.Lambda || is instanceof JavaSourceFile); diff --git a/src/main/java/org/openrewrite/java/testing/mockito/MockitoUtils.java b/src/main/java/org/openrewrite/java/testing/mockito/MockitoUtils.java index 41402b7a0..52b22fdfa 100644 --- a/src/main/java/org/openrewrite/java/testing/mockito/MockitoUtils.java +++ b/src/main/java/org/openrewrite/java/testing/mockito/MockitoUtils.java @@ -1,3 +1,18 @@ +/* + * Copyright 2024 the original author or authors. + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * https://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.openrewrite.java.testing.mockito; import org.jspecify.annotations.Nullable; diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index aa5459908..c31cc48f3 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -19,6 +19,7 @@ import org.openrewrite.DocumentExample; import static org.openrewrite.java.Assertions.java; import static org.openrewrite.java.testing.jmockit.JMockitTestUtils.setParserSettings; + import org.openrewrite.test.RecipeSpec; import org.openrewrite.test.RewriteTest; import org.openrewrite.test.SourceSpec; @@ -418,7 +419,7 @@ public static void changeText(String text) { } @Test - public void mockUpAtSetUpWithoutTearDownTest() { + void mockUpAtSetUpWithoutTearDownTest() { rewriteRun( java( """ @@ -495,7 +496,7 @@ public String getMsg() { } @Test - public void mockUpAtSetUpWithTearDownTest() { + void mockUpAtSetUpWithTearDownTest() { rewriteRun( java( """ @@ -599,7 +600,7 @@ public static String getStaticMsg() { } @Test - public void mockUpWithParamsTest() { + void mockUpWithParamsTest() { rewriteRun( java( """ From f1de48cf5d34d25f329a5c4cbb2e355371832805 Mon Sep 17 00:00:00 2001 From: SiBorea <108953913+SiBorea@users.noreply.github.com> Date: Sun, 6 Oct 2024 11:00:40 +0800 Subject: [PATCH 29/39] Remove useless type cast --- .../java/testing/jmockit/JMockitMockUpToMockito.java | 2 +- .../testing/jmockit/JMockitMockUpToMockitoTest.java | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index 637bb6c76..c867b9b7b 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -152,7 +152,7 @@ public J.VariableDeclarations.NamedVariable visitVariable(J.VariableDeclarations String varName = vd.getVariables().get(0).getName().getSimpleName(); if (usedVariables.contains(varName)) { sb.append(className).append(" ").append(varName) - .append(" = (").append(className).append(") invocation.getArgument(").append(i).append(");"); + .append(" = invocation.getArgument(").append(i).append(");"); } } diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index c31cc48f3..5dd6eb630 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -201,7 +201,7 @@ public void test() { return "FOO"; }).when(mockObjFoo).getMsg(); doAnswer(invocation -> { - String echo = (String) invocation.getArgument(0); + String echo = invocation.getArgument(0); return "FOO" + echo; }).when(mockObjFoo).getMsg(nullable(String.class)); Bar mockObjBar = mock(Bar.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); @@ -209,7 +209,7 @@ public void test() { return "BAR"; }).when(mockObjBar).getMsg(); doAnswer(invocation -> { - String echo = (String) invocation.getArgument(0); + String echo = invocation.getArgument(0); return "BAR" + echo; }).when(mockObjBar).getMsg(nullable(String.class)); try (MockedConstruction mockConsFoo = mockConstructionWithAnswer(Foo.class, delegatesTo(mockObjFoo));MockedConstruction mockConsBar = mockConstructionWithAnswer(Bar.class, delegatesTo(mockObjBar))) { @@ -380,7 +380,7 @@ public void test() { }).when(mockObjMockUpTest_MockUpClass).changeMsg(); try (MockedStatic mockStaticMockUpTest_MockUpClass = mockStatic(MockUpTest.MockUpClass.class);MockedConstruction mockConsMockUpTest_MockUpClass = mockConstructionWithAnswer(MockUpTest.MockUpClass.class, delegatesTo(mockObjMockUpTest_MockUpClass))) { mockStaticMockUpTest_MockUpClass.when(() -> MockUpTest.MockUpClass.changeText(nullable(String.class))).thenAnswer(invocation -> { - String text = (String) invocation.getArgument(0); + String text = invocation.getArgument(0); MockUpClass.Save.text = "mockText"; return null; }); @@ -644,8 +644,8 @@ public class MockUpTest { public void init() { MockUpTest.MyClazz mockObjMockUpTest_MyClazz = mock(MockUpTest.MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); doAnswer(invocation -> { - String foo = (String) invocation.getArgument(0); - String bar = (String) invocation.getArgument(1); + String foo = invocation.getArgument(0); + String bar = invocation.getArgument(1); return foo + bar; }).when(mockObjMockUpTest_MyClazz).getMsg(nullable(String.class), nullable(String.class), nullable(String.class)); try (MockedConstruction mockConsMockUpTest_MyClazz = mockConstructionWithAnswer(MockUpTest.MyClazz.class, delegatesTo(mockObjMockUpTest_MyClazz))) { From f987e593f87d423a94caef96e2ecc3f4446d7956 Mon Sep 17 00:00:00 2001 From: SiBorea <108953913+SiBorea@users.noreply.github.com> Date: Sun, 6 Oct 2024 11:08:07 +0800 Subject: [PATCH 30/39] Fix variable naming --- .../jmockit/JMockitMockUpToMockito.java | 4 +- .../jmockit/JMockitMockUpToMockitoTest.java | 54 +++++++++---------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index c867b9b7b..106e1604e 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -343,7 +343,7 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration md, Execut .forEach(newClass -> { JavaType mockType = ((J.ParameterizedType) newClass.getClazz()).getTypeParameters().get(0).getType(); String className = TypeUtils.asFullyQualified(mockType).getClassName(); - String mockName = className.replace(".", "_"); + String mockName = className.replace(".", ""); Map mockedMethods = getMockUpMethods(newClass); // Add mockStatic field @@ -447,7 +447,7 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl JavaType mockType = ((J.ParameterizedType) newClass.getClazz()).getTypeParameters().get(0).getType(); String className = TypeUtils.asFullyQualified(mockType).getClassName(); - String mockName = className.replace(".", "_"); + String mockName = className.replace(".", ""); Map mockedMethods = getMockUpMethods(newClass); diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index 5dd6eb630..c067a34ab 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -84,11 +84,11 @@ public static int staticMethod(int v) { public class MockUpTest { @Test public void test() { - try (MockedStatic mockStaticMockUpTest_MyClazz = mockStatic(MockUpTest.MyClazz.class)) { - mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod()).thenAnswer(invocation -> { + try (MockedStatic mockStaticMockUpTestMyClazz = mockStatic(MockUpTest.MyClazz.class)) { + mockStaticMockUpTestMyClazz.when(() -> MockUpTest.MyClazz.staticMethod()).thenAnswer(invocation -> { return 1024; }); - mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> { + mockStaticMockUpTestMyClazz.when(() -> MockUpTest.MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> { return 128; }); assertEquals(1024, MockUpTest.MyClazz.staticMethod()); @@ -277,11 +277,11 @@ public class MockUpTest { @Test public void test() { final String msg = "newMsg"; - MockUpTest.MyClazz mockObjMockUpTest_MyClazz = mock(MockUpTest.MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); + MockUpTest.MyClazz mockObjMockUpTestMyClazz = mock(MockUpTest.MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); doAnswer(invocation -> { return msg; - }).when(mockObjMockUpTest_MyClazz).getMsg(); - try (MockedConstruction mockConsMockUpTest_MyClazz = mockConstructionWithAnswer(MockUpTest.MyClazz.class, delegatesTo(mockObjMockUpTest_MyClazz))) { + }).when(mockObjMockUpTestMyClazz).getMsg(); + try (MockedConstruction mockConsMockUpTestMyClazz = mockConstructionWithAnswer(MockUpTest.MyClazz.class, delegatesTo(mockObjMockUpTestMyClazz))) { // Should ignore the newClass statement new Runnable() { @@ -373,13 +373,13 @@ public static void changeText(String text) { public class MockUpTest { @Test public void test() { - MockUpTest.MockUpClass mockObjMockUpTest_MockUpClass = mock(MockUpTest.MockUpClass.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); + MockUpTest.MockUpClass mockObjMockUpTestMockUpClass = mock(MockUpTest.MockUpClass.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); doAnswer(invocation -> { MockUpClass.Save.msg = "mockMsg"; return null; - }).when(mockObjMockUpTest_MockUpClass).changeMsg(); - try (MockedStatic mockStaticMockUpTest_MockUpClass = mockStatic(MockUpTest.MockUpClass.class);MockedConstruction mockConsMockUpTest_MockUpClass = mockConstructionWithAnswer(MockUpTest.MockUpClass.class, delegatesTo(mockObjMockUpTest_MockUpClass))) { - mockStaticMockUpTest_MockUpClass.when(() -> MockUpTest.MockUpClass.changeText(nullable(String.class))).thenAnswer(invocation -> { + }).when(mockObjMockUpTestMockUpClass).changeMsg(); + try (MockedStatic mockStaticMockUpTestMockUpClass = mockStatic(MockUpTest.MockUpClass.class);MockedConstruction mockConsMockUpTestMockUpClass = mockConstructionWithAnswer(MockUpTest.MockUpClass.class, delegatesTo(mockObjMockUpTestMockUpClass))) { + mockStaticMockUpTestMockUpClass.when(() -> MockUpTest.MockUpClass.changeText(nullable(String.class))).thenAnswer(invocation -> { String text = invocation.getArgument(0); MockUpClass.Save.text = "mockText"; return null; @@ -463,20 +463,20 @@ public String getMsg() { import static org.mockito.Mockito.*; public class MockUpTest { - private MockedConstruction mockConsMockUpTest_MyClazz; + private MockedConstruction mockConsMockUpTestMyClazz; @Before public void setUp() { - MockUpTest.MyClazz mockObjMockUpTest_MyClazz = mock(MockUpTest.MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); + MockUpTest.MyClazz mockObjMockUpTestMyClazz = mock(MockUpTest.MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); doAnswer(invocation -> { return "mockMsg"; - }).when(mockObjMockUpTest_MyClazz).getMsg(); - mockConsMockUpTest_MyClazz = mockConstructionWithAnswer(MockUpTest.MyClazz.class, delegatesTo(mockObjMockUpTest_MyClazz)); + }).when(mockObjMockUpTestMyClazz).getMsg(); + mockConsMockUpTestMyClazz = mockConstructionWithAnswer(MockUpTest.MyClazz.class, delegatesTo(mockObjMockUpTestMyClazz)); } @After public void tearDown() { - mockConsMockUpTest_MyClazz.closeOnDemand(); + mockConsMockUpTestMyClazz.closeOnDemand(); } @Test @@ -556,26 +556,26 @@ public static String getStaticMsg() { import static org.mockito.Mockito.*; public class MockUpTest { - private MockedConstruction mockConsMockUpTest_MyClazz; - private MockedStatic mockStaticMockUpTest_MyClazz; + private MockedConstruction mockConsMockUpTestMyClazz; + private MockedStatic mockStaticMockUpTestMyClazz; @Before public void setUp() { - MockUpTest.MyClazz mockObjMockUpTest_MyClazz = mock(MockUpTest.MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); + MockUpTest.MyClazz mockObjMockUpTestMyClazz = mock(MockUpTest.MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); doAnswer(invocation -> { return "mockMsg"; - }).when(mockObjMockUpTest_MyClazz).getMsg(); - mockConsMockUpTest_MyClazz = mockConstructionWithAnswer(MockUpTest.MyClazz.class, delegatesTo(mockObjMockUpTest_MyClazz)); - mockStaticMockUpTest_MyClazz = mockStatic(MockUpTest.MyClazz.class); - mockStaticMockUpTest_MyClazz.when(() -> MockUpTest.MyClazz.getStaticMsg()).thenAnswer(invocation -> { + }).when(mockObjMockUpTestMyClazz).getMsg(); + mockConsMockUpTestMyClazz = mockConstructionWithAnswer(MockUpTest.MyClazz.class, delegatesTo(mockObjMockUpTestMyClazz)); + mockStaticMockUpTestMyClazz = mockStatic(MockUpTest.MyClazz.class); + mockStaticMockUpTestMyClazz.when(() -> MockUpTest.MyClazz.getStaticMsg()).thenAnswer(invocation -> { return "mockStaticMsg"; }); } @After public void tearDown() { - mockStaticMockUpTest_MyClazz.closeOnDemand(); - mockConsMockUpTest_MyClazz.closeOnDemand(); + mockStaticMockUpTestMyClazz.closeOnDemand(); + mockConsMockUpTestMyClazz.closeOnDemand(); } @Test @@ -642,13 +642,13 @@ public String getMsg(String foo, String bar, String unused) { public class MockUpTest { @Test public void init() { - MockUpTest.MyClazz mockObjMockUpTest_MyClazz = mock(MockUpTest.MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); + MockUpTest.MyClazz mockObjMockUpTestMyClazz = mock(MockUpTest.MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); doAnswer(invocation -> { String foo = invocation.getArgument(0); String bar = invocation.getArgument(1); return foo + bar; - }).when(mockObjMockUpTest_MyClazz).getMsg(nullable(String.class), nullable(String.class), nullable(String.class)); - try (MockedConstruction mockConsMockUpTest_MyClazz = mockConstructionWithAnswer(MockUpTest.MyClazz.class, delegatesTo(mockObjMockUpTest_MyClazz))) { + }).when(mockObjMockUpTestMyClazz).getMsg(nullable(String.class), nullable(String.class), nullable(String.class)); + try (MockedConstruction mockConsMockUpTestMyClazz = mockConstructionWithAnswer(MockUpTest.MyClazz.class, delegatesTo(mockObjMockUpTestMyClazz))) { assertEquals("foobar", new MyClazz().getMsg("foo", "bar", "unused")); } } From 28485bbe9f1141ec0724b43d3898323e1785ea03 Mon Sep 17 00:00:00 2001 From: SiBorea <108953913+SiBorea@users.noreply.github.com> Date: Sun, 6 Oct 2024 13:25:04 +0800 Subject: [PATCH 31/39] Remove fqn from naming --- .../jmockit/JMockitMockUpToMockito.java | 59 +++++++++--------- .../jmockit/JMockitMockUpToMockitoTest.java | 62 +++++++++---------- 2 files changed, 60 insertions(+), 61 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index 106e1604e..2d9f7749e 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -182,12 +182,12 @@ private String getMockStaticDeclarationInBefore(String className) { " = mockStatic(" + className + ".class);"; } - private String getMockStaticDeclarationInTry(String className, String mockName) { - return "MockedStatic " + MOCKITO_STATIC_PREFIX + mockName + + private String getMockStaticDeclarationInTry(String className) { + return "MockedStatic " + MOCKITO_STATIC_PREFIX + className + " = mockStatic(" + className + ".class)"; } - private String getMockStaticMethods(JavaType.Class clazz, String className, String mockName, Map mockedMethods) { + private String getMockStaticMethods(JavaType.Class clazz, String className, Map mockedMethods) { StringBuilder tpl = new StringBuilder(); // To generate predictable method order @@ -195,7 +195,7 @@ private String getMockStaticMethods(JavaType.Class clazz, String className, Stri .sorted(Comparator.comparing((J.MethodDeclaration::print))) .collect(toList()); for (J.MethodDeclaration m : keys) { - tpl.append("mockStatic").append(mockName) + tpl.append("mockStatic").append(className) .append(".when(() -> ").append(className).append(".").append(m.getSimpleName()).append("(") .append(m.getParameters() .stream() @@ -217,7 +217,7 @@ private String getMockStaticMethods(JavaType.Class clazz, String className, Stri .filter(m -> !m.getFlags().contains(Private)) .filter(m -> m.getFlags().contains(Static)) .filter(m -> !mockedMethods.containsValue(m)) - .forEach(m -> tpl.append("mockStatic").append(mockName).append(".when(() -> ") + .forEach(m -> tpl.append("mockStatic").append(className).append(".when(() -> ") .append(className).append(".").append(m.getName()) .append(getCallRealMethod(m)) .append(");") @@ -226,21 +226,21 @@ private String getMockStaticMethods(JavaType.Class clazz, String className, Stri return tpl.toString(); } - private String getMockConstructionDeclarationInBefore(String className, String mockName) { + private String getMockConstructionDeclarationInBefore(String className) { return "#{any(" + MOCKITO_CONSTRUCTION_IMPORT + ")}" + - " = mockConstructionWithAnswer(" + className + ".class, delegatesTo(" + MOCKITO_MOCK_PREFIX + mockName + "));"; + " = mockConstructionWithAnswer(" + className + ".class, delegatesTo(" + MOCKITO_MOCK_PREFIX + className + "));"; } - private String getMockConstructionDeclarationInTry(String className, String mockName) { - return "MockedConstruction " + MOCKITO_CONSTRUCTION_PREFIX + mockName + - " = mockConstructionWithAnswer(" + className + ".class, delegatesTo(" + MOCKITO_MOCK_PREFIX + mockName + "))"; + private String getMockConstructionDeclarationInTry(String className) { + return "MockedConstruction " + MOCKITO_CONSTRUCTION_PREFIX + className + + " = mockConstructionWithAnswer(" + className + ".class, delegatesTo(" + MOCKITO_MOCK_PREFIX + className + "))"; } - private String getMockConstructionMethods(String className, String mockName, Map mockedMethods) { + private String getMockConstructionMethods(String className, Map mockedMethods) { StringBuilder tpl = new StringBuilder() .append(className) .append(" ") - .append(MOCKITO_MOCK_PREFIX).append(mockName) + .append(MOCKITO_MOCK_PREFIX).append(className) .append(" = mock(").append(className).append(".class, withSettings().defaultAnswer(CALLS_REAL_METHODS));"); mockedMethods @@ -249,7 +249,7 @@ private String getMockConstructionMethods(String className, String mockName, Map .sorted(Comparator.comparing((J.MethodDeclaration::print))) .forEach(m -> tpl.append("doAnswer(invocation -> {") .append(getAnswerBody(m)) - .append("}).when(").append(MOCKITO_MOCK_PREFIX).append(mockName).append(").").append(m.getSimpleName()).append("(") + .append("}).when(").append(MOCKITO_MOCK_PREFIX).append(className).append(").").append(m.getSimpleName()).append("(") .append(m.getParameters() .stream() .filter(J.VariableDeclarations.class::isInstance) @@ -342,8 +342,8 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration md, Execut .map(J.NewClass.class::cast) .forEach(newClass -> { JavaType mockType = ((J.ParameterizedType) newClass.getClazz()).getTypeParameters().get(0).getType(); - String className = TypeUtils.asFullyQualified(mockType).getClassName(); - String mockName = className.replace(".", ""); + String className = ((J.ParameterizedType) newClass.getClazz()).getTypeParameters().get(0).toString(); + Map mockedMethods = getMockUpMethods(newClass); // Add mockStatic field @@ -357,11 +357,11 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration md, Execut .apply( new Cursor(getCursor().getParentOrThrow(), cd[0]), cd[0].getBody().getCoordinates().firstStatement(), - MOCKITO_STATIC_PREFIX + mockName + MOCKITO_STATIC_PREFIX + className ); J.VariableDeclarations mockField = (J.VariableDeclarations) cd[0].getBody().getStatements().get(0); J.Identifier mockFieldId = mockField.getVariables().get(0).getName(); - tearDownMocks.put(MOCKITO_STATIC_PREFIX + mockName, mockFieldId); + tearDownMocks.put(MOCKITO_STATIC_PREFIX + className, mockFieldId); } // Add mockConstruction field if (mockedMethods.values().stream().anyMatch(m -> !m.getFlags().contains(Static))) { @@ -374,11 +374,11 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration md, Execut .apply( updateCursor(cd[0]), cd[0].getBody().getCoordinates().firstStatement(), - MOCKITO_CONSTRUCTION_PREFIX + mockName + MOCKITO_CONSTRUCTION_PREFIX + className ); J.VariableDeclarations mockField = (J.VariableDeclarations) cd[0].getBody().getStatements().get(0); J.Identifier mockFieldId = mockField.getVariables().get(0).getName(); - tearDownMocks.put(MOCKITO_CONSTRUCTION_PREFIX + mockName, mockFieldId); + tearDownMocks.put(MOCKITO_CONSTRUCTION_PREFIX + className, mockFieldId); } })); @@ -446,8 +446,7 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl ); JavaType mockType = ((J.ParameterizedType) newClass.getClazz()).getTypeParameters().get(0).getType(); - String className = TypeUtils.asFullyQualified(mockType).getClassName(); - String mockName = className.replace(".", ""); + String className = ((J.ParameterizedType) newClass.getClazz()).getTypeParameters().get(0).toString(); Map mockedMethods = getMockUpMethods(newClass); @@ -460,7 +459,7 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl if (!mockedPublicStaticMethods.isEmpty()) { if (isBeforeTest) { String tpl = getMockStaticDeclarationInBefore(className) + - getMockStaticMethods((JavaType.Class) mockType, className, mockName, mockedPublicStaticMethods); + getMockStaticMethods((JavaType.Class) mockType, className, mockedPublicStaticMethods); md = JavaTemplate.builder(tpl) .contextSensitive() @@ -471,11 +470,11 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl .apply( updateCursor(md), statement.getCoordinates().after(), - tearDownMocks.get(MOCKITO_STATIC_PREFIX + mockName) + tearDownMocks.get(MOCKITO_STATIC_PREFIX + className) ); } else { - varDeclarationInTry.add(getMockStaticDeclarationInTry(className, mockName)); - mockStaticMethodInTry.add(getMockStaticMethods((JavaType.Class) mockType, className, mockName, mockedPublicStaticMethods)); + varDeclarationInTry.add(getMockStaticDeclarationInTry(className)); + mockStaticMethodInTry.add(getMockStaticMethods((JavaType.Class) mockType, className, mockedPublicStaticMethods)); } maybeAddImport(MOCKITO_STATIC_IMPORT); @@ -489,8 +488,8 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl .collect(toMap(Map.Entry::getKey, Map.Entry::getValue)); if (!mockedPublicMethods.isEmpty()) { if (isBeforeTest) { - String tpl = getMockConstructionMethods(className, mockName, mockedPublicMethods) + - getMockConstructionDeclarationInBefore(className, mockName); + String tpl = getMockConstructionMethods(className, mockedPublicMethods) + + getMockConstructionDeclarationInBefore(className); md = JavaTemplate.builder(tpl) .contextSensitive() @@ -501,11 +500,11 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl .apply( updateCursor(md), statement.getCoordinates().after(), - tearDownMocks.get(MOCKITO_CONSTRUCTION_PREFIX + mockName) + tearDownMocks.get(MOCKITO_CONSTRUCTION_PREFIX + className) ); } else { - varDeclarationInTry.add(getMockConstructionDeclarationInTry(className, mockName)); - mockConstructionMethodInTry.add(getMockConstructionMethods(className, mockName, mockedPublicMethods)); + varDeclarationInTry.add(getMockConstructionDeclarationInTry(className)); + mockConstructionMethodInTry.add(getMockConstructionMethods(className, mockedPublicMethods)); } maybeAddImport(MOCKITO_CONSTRUCTION_IMPORT); diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index c067a34ab..d36713089 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -59,8 +59,8 @@ public int staticMethod(int v) { return 128; } }; - assertEquals(1024, MockUpTest.MyClazz.staticMethod()); - assertEquals(128, MockUpTest.MyClazz.staticMethod(0)); + assertEquals(1024, MyClazz.staticMethod()); + assertEquals(128, MyClazz.staticMethod(0)); } public static class MyClazz { @@ -84,15 +84,15 @@ public static int staticMethod(int v) { public class MockUpTest { @Test public void test() { - try (MockedStatic mockStaticMockUpTestMyClazz = mockStatic(MockUpTest.MyClazz.class)) { - mockStaticMockUpTestMyClazz.when(() -> MockUpTest.MyClazz.staticMethod()).thenAnswer(invocation -> { + try (MockedStatic mockStaticMyClazz = mockStatic(MyClazz.class)) { + mockStaticMyClazz.when(() -> MyClazz.staticMethod()).thenAnswer(invocation -> { return 1024; }); - mockStaticMockUpTestMyClazz.when(() -> MockUpTest.MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> { + mockStaticMyClazz.when(() -> MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> { return 128; }); - assertEquals(1024, MockUpTest.MyClazz.staticMethod()); - assertEquals(128, MockUpTest.MyClazz.staticMethod(0)); + assertEquals(1024, MyClazz.staticMethod()); + assertEquals(128, MyClazz.staticMethod(0)); } } @@ -277,11 +277,11 @@ public class MockUpTest { @Test public void test() { final String msg = "newMsg"; - MockUpTest.MyClazz mockObjMockUpTestMyClazz = mock(MockUpTest.MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); + MyClazz mockObjMyClazz = mock(MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); doAnswer(invocation -> { return msg; - }).when(mockObjMockUpTestMyClazz).getMsg(); - try (MockedConstruction mockConsMockUpTestMyClazz = mockConstructionWithAnswer(MockUpTest.MyClazz.class, delegatesTo(mockObjMockUpTestMyClazz))) { + }).when(mockObjMyClazz).getMsg(); + try (MockedConstruction mockConsMyClazz = mockConstructionWithAnswer(MyClazz.class, delegatesTo(mockObjMyClazz))) { // Should ignore the newClass statement new Runnable() { @@ -373,13 +373,13 @@ public static void changeText(String text) { public class MockUpTest { @Test public void test() { - MockUpTest.MockUpClass mockObjMockUpTestMockUpClass = mock(MockUpTest.MockUpClass.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); + MockUpClass mockObjMockUpClass = mock(MockUpClass.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); doAnswer(invocation -> { MockUpClass.Save.msg = "mockMsg"; return null; - }).when(mockObjMockUpTestMockUpClass).changeMsg(); - try (MockedStatic mockStaticMockUpTestMockUpClass = mockStatic(MockUpTest.MockUpClass.class);MockedConstruction mockConsMockUpTestMockUpClass = mockConstructionWithAnswer(MockUpTest.MockUpClass.class, delegatesTo(mockObjMockUpTestMockUpClass))) { - mockStaticMockUpTestMockUpClass.when(() -> MockUpTest.MockUpClass.changeText(nullable(String.class))).thenAnswer(invocation -> { + }).when(mockObjMockUpClass).changeMsg(); + try (MockedStatic mockStaticMockUpClass = mockStatic(MockUpClass.class);MockedConstruction mockConsMockUpClass = mockConstructionWithAnswer(MockUpClass.class, delegatesTo(mockObjMockUpClass))) { + mockStaticMockUpClass.when(() -> MockUpClass.changeText(nullable(String.class))).thenAnswer(invocation -> { String text = invocation.getArgument(0); MockUpClass.Save.text = "mockText"; return null; @@ -463,20 +463,20 @@ public String getMsg() { import static org.mockito.Mockito.*; public class MockUpTest { - private MockedConstruction mockConsMockUpTestMyClazz; + private MockedConstruction mockConsMyClazz; @Before public void setUp() { - MockUpTest.MyClazz mockObjMockUpTestMyClazz = mock(MockUpTest.MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); + MyClazz mockObjMyClazz = mock(MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); doAnswer(invocation -> { return "mockMsg"; - }).when(mockObjMockUpTestMyClazz).getMsg(); - mockConsMockUpTestMyClazz = mockConstructionWithAnswer(MockUpTest.MyClazz.class, delegatesTo(mockObjMockUpTestMyClazz)); + }).when(mockObjMyClazz).getMsg(); + mockConsMyClazz = mockConstructionWithAnswer(MyClazz.class, delegatesTo(mockObjMyClazz)); } @After public void tearDown() { - mockConsMockUpTestMyClazz.closeOnDemand(); + mockConsMyClazz.closeOnDemand(); } @Test @@ -556,26 +556,26 @@ public static String getStaticMsg() { import static org.mockito.Mockito.*; public class MockUpTest { - private MockedConstruction mockConsMockUpTestMyClazz; - private MockedStatic mockStaticMockUpTestMyClazz; + private MockedConstruction mockConsMyClazz; + private MockedStatic mockStaticMyClazz; @Before public void setUp() { - MockUpTest.MyClazz mockObjMockUpTestMyClazz = mock(MockUpTest.MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); + MyClazz mockObjMyClazz = mock(MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); doAnswer(invocation -> { return "mockMsg"; - }).when(mockObjMockUpTestMyClazz).getMsg(); - mockConsMockUpTestMyClazz = mockConstructionWithAnswer(MockUpTest.MyClazz.class, delegatesTo(mockObjMockUpTestMyClazz)); - mockStaticMockUpTestMyClazz = mockStatic(MockUpTest.MyClazz.class); - mockStaticMockUpTestMyClazz.when(() -> MockUpTest.MyClazz.getStaticMsg()).thenAnswer(invocation -> { + }).when(mockObjMyClazz).getMsg(); + mockConsMyClazz = mockConstructionWithAnswer(MyClazz.class, delegatesTo(mockObjMyClazz)); + mockStaticMyClazz = mockStatic(MyClazz.class); + mockStaticMyClazz.when(() -> MyClazz.getStaticMsg()).thenAnswer(invocation -> { return "mockStaticMsg"; }); } @After public void tearDown() { - mockStaticMockUpTestMyClazz.closeOnDemand(); - mockConsMockUpTestMyClazz.closeOnDemand(); + mockConsMyClazz.closeOnDemand(); + mockStaticMyClazz.closeOnDemand(); } @Test @@ -642,13 +642,13 @@ public String getMsg(String foo, String bar, String unused) { public class MockUpTest { @Test public void init() { - MockUpTest.MyClazz mockObjMockUpTestMyClazz = mock(MockUpTest.MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); + MyClazz mockObjMyClazz = mock(MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); doAnswer(invocation -> { String foo = invocation.getArgument(0); String bar = invocation.getArgument(1); return foo + bar; - }).when(mockObjMockUpTestMyClazz).getMsg(nullable(String.class), nullable(String.class), nullable(String.class)); - try (MockedConstruction mockConsMockUpTestMyClazz = mockConstructionWithAnswer(MockUpTest.MyClazz.class, delegatesTo(mockObjMockUpTestMyClazz))) { + }).when(mockObjMyClazz).getMsg(nullable(String.class), nullable(String.class), nullable(String.class)); + try (MockedConstruction mockConsMyClazz = mockConstructionWithAnswer(MyClazz.class, delegatesTo(mockObjMyClazz))) { assertEquals("foobar", new MyClazz().getMsg("foo", "bar", "unused")); } } From fc25bbd49d74ef64ca742a654febdbbe07b97084 Mon Sep 17 00:00:00 2001 From: SiBorea <108953913+SiBorea@users.noreply.github.com> Date: Sun, 6 Oct 2024 13:28:05 +0800 Subject: [PATCH 32/39] Remove unneeded method call --- .../testing/jmockit/JMockitMockUpToMockito.java | 2 +- .../jmockit/JMockitMockUpToMockitoTest.java | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index 2d9f7749e..23c392ace 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -241,7 +241,7 @@ private String getMockConstructionMethods(String className, Map { return "FOO"; }).when(mockObjFoo).getMsg(); @@ -204,7 +204,7 @@ public void test() { String echo = invocation.getArgument(0); return "FOO" + echo; }).when(mockObjFoo).getMsg(nullable(String.class)); - Bar mockObjBar = mock(Bar.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); + Bar mockObjBar = mock(Bar.class, CALLS_REAL_METHODS); doAnswer(invocation -> { return "BAR"; }).when(mockObjBar).getMsg(); @@ -277,7 +277,7 @@ public class MockUpTest { @Test public void test() { final String msg = "newMsg"; - MyClazz mockObjMyClazz = mock(MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); + MyClazz mockObjMyClazz = mock(MyClazz.class, CALLS_REAL_METHODS); doAnswer(invocation -> { return msg; }).when(mockObjMyClazz).getMsg(); @@ -373,7 +373,7 @@ public static void changeText(String text) { public class MockUpTest { @Test public void test() { - MockUpClass mockObjMockUpClass = mock(MockUpClass.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); + MockUpClass mockObjMockUpClass = mock(MockUpClass.class, CALLS_REAL_METHODS); doAnswer(invocation -> { MockUpClass.Save.msg = "mockMsg"; return null; @@ -467,7 +467,7 @@ public class MockUpTest { @Before public void setUp() { - MyClazz mockObjMyClazz = mock(MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); + MyClazz mockObjMyClazz = mock(MyClazz.class, CALLS_REAL_METHODS); doAnswer(invocation -> { return "mockMsg"; }).when(mockObjMyClazz).getMsg(); @@ -561,7 +561,7 @@ public class MockUpTest { @Before public void setUp() { - MyClazz mockObjMyClazz = mock(MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); + MyClazz mockObjMyClazz = mock(MyClazz.class, CALLS_REAL_METHODS); doAnswer(invocation -> { return "mockMsg"; }).when(mockObjMyClazz).getMsg(); @@ -642,7 +642,7 @@ public String getMsg(String foo, String bar, String unused) { public class MockUpTest { @Test public void init() { - MyClazz mockObjMyClazz = mock(MyClazz.class, withSettings().defaultAnswer(CALLS_REAL_METHODS)); + MyClazz mockObjMyClazz = mock(MyClazz.class, CALLS_REAL_METHODS); doAnswer(invocation -> { String foo = invocation.getArgument(0); String bar = invocation.getArgument(1); From 199f8f7524b88e67893df0bfc7656e9a6684fa44 Mon Sep 17 00:00:00 2001 From: SiBorea <108953913+SiBorea@users.noreply.github.com> Date: Sun, 6 Oct 2024 13:29:31 +0800 Subject: [PATCH 33/39] Shorter var naming --- .../jmockit/JMockitMockUpToMockito.java | 2 +- .../jmockit/JMockitMockUpToMockitoTest.java | 44 +++++++++---------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index 23c392ace..42bb2a06e 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -65,7 +65,7 @@ public class JMockitMockUpToMockito extends Recipe { private static final String JMOCKIT_MOCK_IMPORT = "mockit.Mock"; private static final String MOCKITO_STATIC_PREFIX = "mockStatic"; private static final String MOCKITO_STATIC_IMPORT = "org.mockito.MockedStatic"; - private static final String MOCKITO_MOCK_PREFIX = "mockObj"; + private static final String MOCKITO_MOCK_PREFIX = "mock"; private static final String MOCKITO_CONSTRUCTION_PREFIX = "mockCons"; private static final String MOCKITO_CONSTRUCTION_IMPORT = "org.mockito.MockedConstruction"; diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index c3dbe8915..93e6cab18 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -196,23 +196,23 @@ public String getMsg(String echo) { public class MockUpTest { @Test public void test() { - Foo mockObjFoo = mock(Foo.class, CALLS_REAL_METHODS); + Foo mockFoo = mock(Foo.class, CALLS_REAL_METHODS); doAnswer(invocation -> { return "FOO"; - }).when(mockObjFoo).getMsg(); + }).when(mockFoo).getMsg(); doAnswer(invocation -> { String echo = invocation.getArgument(0); return "FOO" + echo; - }).when(mockObjFoo).getMsg(nullable(String.class)); - Bar mockObjBar = mock(Bar.class, CALLS_REAL_METHODS); + }).when(mockFoo).getMsg(nullable(String.class)); + Bar mockBar = mock(Bar.class, CALLS_REAL_METHODS); doAnswer(invocation -> { return "BAR"; - }).when(mockObjBar).getMsg(); + }).when(mockBar).getMsg(); doAnswer(invocation -> { String echo = invocation.getArgument(0); return "BAR" + echo; - }).when(mockObjBar).getMsg(nullable(String.class)); - try (MockedConstruction mockConsFoo = mockConstructionWithAnswer(Foo.class, delegatesTo(mockObjFoo));MockedConstruction mockConsBar = mockConstructionWithAnswer(Bar.class, delegatesTo(mockObjBar))) { + }).when(mockBar).getMsg(nullable(String.class)); + try (MockedConstruction mockConsFoo = mockConstructionWithAnswer(Foo.class, delegatesTo(mockFoo));MockedConstruction mockConsBar = mockConstructionWithAnswer(Bar.class, delegatesTo(mockBar))) { assertEquals("FOO", new Foo().getMsg()); assertEquals("FOOecho", new Foo().getMsg("echo")); assertEquals("BAR", new Bar().getMsg()); @@ -277,11 +277,11 @@ public class MockUpTest { @Test public void test() { final String msg = "newMsg"; - MyClazz mockObjMyClazz = mock(MyClazz.class, CALLS_REAL_METHODS); + MyClazz mockMyClazz = mock(MyClazz.class, CALLS_REAL_METHODS); doAnswer(invocation -> { return msg; - }).when(mockObjMyClazz).getMsg(); - try (MockedConstruction mockConsMyClazz = mockConstructionWithAnswer(MyClazz.class, delegatesTo(mockObjMyClazz))) { + }).when(mockMyClazz).getMsg(); + try (MockedConstruction mockConsMyClazz = mockConstructionWithAnswer(MyClazz.class, delegatesTo(mockMyClazz))) { // Should ignore the newClass statement new Runnable() { @@ -373,12 +373,12 @@ public static void changeText(String text) { public class MockUpTest { @Test public void test() { - MockUpClass mockObjMockUpClass = mock(MockUpClass.class, CALLS_REAL_METHODS); + MockUpClass mockMockUpClass = mock(MockUpClass.class, CALLS_REAL_METHODS); doAnswer(invocation -> { MockUpClass.Save.msg = "mockMsg"; return null; - }).when(mockObjMockUpClass).changeMsg(); - try (MockedStatic mockStaticMockUpClass = mockStatic(MockUpClass.class);MockedConstruction mockConsMockUpClass = mockConstructionWithAnswer(MockUpClass.class, delegatesTo(mockObjMockUpClass))) { + }).when(mockMockUpClass).changeMsg(); + try (MockedStatic mockStaticMockUpClass = mockStatic(MockUpClass.class);MockedConstruction mockConsMockUpClass = mockConstructionWithAnswer(MockUpClass.class, delegatesTo(mockMockUpClass))) { mockStaticMockUpClass.when(() -> MockUpClass.changeText(nullable(String.class))).thenAnswer(invocation -> { String text = invocation.getArgument(0); MockUpClass.Save.text = "mockText"; @@ -467,11 +467,11 @@ public class MockUpTest { @Before public void setUp() { - MyClazz mockObjMyClazz = mock(MyClazz.class, CALLS_REAL_METHODS); + MyClazz mockMyClazz = mock(MyClazz.class, CALLS_REAL_METHODS); doAnswer(invocation -> { return "mockMsg"; - }).when(mockObjMyClazz).getMsg(); - mockConsMyClazz = mockConstructionWithAnswer(MyClazz.class, delegatesTo(mockObjMyClazz)); + }).when(mockMyClazz).getMsg(); + mockConsMyClazz = mockConstructionWithAnswer(MyClazz.class, delegatesTo(mockMyClazz)); } @After @@ -561,11 +561,11 @@ public class MockUpTest { @Before public void setUp() { - MyClazz mockObjMyClazz = mock(MyClazz.class, CALLS_REAL_METHODS); + MyClazz mockMyClazz = mock(MyClazz.class, CALLS_REAL_METHODS); doAnswer(invocation -> { return "mockMsg"; - }).when(mockObjMyClazz).getMsg(); - mockConsMyClazz = mockConstructionWithAnswer(MyClazz.class, delegatesTo(mockObjMyClazz)); + }).when(mockMyClazz).getMsg(); + mockConsMyClazz = mockConstructionWithAnswer(MyClazz.class, delegatesTo(mockMyClazz)); mockStaticMyClazz = mockStatic(MyClazz.class); mockStaticMyClazz.when(() -> MyClazz.getStaticMsg()).thenAnswer(invocation -> { return "mockStaticMsg"; @@ -642,13 +642,13 @@ public String getMsg(String foo, String bar, String unused) { public class MockUpTest { @Test public void init() { - MyClazz mockObjMyClazz = mock(MyClazz.class, CALLS_REAL_METHODS); + MyClazz mockMyClazz = mock(MyClazz.class, CALLS_REAL_METHODS); doAnswer(invocation -> { String foo = invocation.getArgument(0); String bar = invocation.getArgument(1); return foo + bar; - }).when(mockObjMyClazz).getMsg(nullable(String.class), nullable(String.class), nullable(String.class)); - try (MockedConstruction mockConsMyClazz = mockConstructionWithAnswer(MyClazz.class, delegatesTo(mockObjMyClazz))) { + }).when(mockMyClazz).getMsg(nullable(String.class), nullable(String.class), nullable(String.class)); + try (MockedConstruction mockConsMyClazz = mockConstructionWithAnswer(MyClazz.class, delegatesTo(mockMyClazz))) { assertEquals("foobar", new MyClazz().getMsg("foo", "bar", "unused")); } } From fa85adb6c4724e1965fb116b83dc13604f9b3368 Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Sun, 6 Oct 2024 14:00:09 +0200 Subject: [PATCH 34/39] Update JMockitMockUpToMockitoTest.java --- .../java/testing/jmockit/JMockitMockUpToMockitoTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index 93e6cab18..2aa8f3693 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -17,14 +17,15 @@ import org.junit.jupiter.api.Test; import org.openrewrite.DocumentExample; -import static org.openrewrite.java.Assertions.java; -import static org.openrewrite.java.testing.jmockit.JMockitTestUtils.setParserSettings; import org.openrewrite.test.RecipeSpec; import org.openrewrite.test.RewriteTest; import org.openrewrite.test.SourceSpec; import org.openrewrite.test.TypeValidation; +import static org.openrewrite.java.Assertions.java; +import static org.openrewrite.java.testing.jmockit.JMockitTestUtils.setParserSettings; + class JMockitMockUpToMockitoTest implements RewriteTest { @Override From b61496d3149bb0d5139e46107be20f01c58cdee4 Mon Sep 17 00:00:00 2001 From: Shivani Sharma Date: Sun, 13 Oct 2024 19:16:26 +1100 Subject: [PATCH 35/39] Refactor mockup migration to resuse existing code and cleanup --- .../jmockit/JMockitMockUpToMockito.java | 513 +++++++++--------- .../jmockit/JMockitMockUpToMockitoTest.java | 4 +- ...kitNonStrictExpectationsToMockitoTest.java | 5 +- .../testing/jmockit/JMockitTestUtils.java | 1 + 4 files changed, 252 insertions(+), 271 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index 42bb2a06e..96462c216 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -16,37 +16,17 @@ package org.openrewrite.java.testing.jmockit; import lombok.SneakyThrows; -import org.openrewrite.Cursor; -import org.openrewrite.ExecutionContext; -import org.openrewrite.Preconditions; -import org.openrewrite.Recipe; -import org.openrewrite.Tree; -import org.openrewrite.TreeVisitor; +import org.openrewrite.*; import org.openrewrite.java.JavaIsoVisitor; import org.openrewrite.java.JavaParser; import org.openrewrite.java.JavaTemplate; -import org.openrewrite.java.search.FindMissingTypes; import org.openrewrite.java.search.UsesType; -import org.openrewrite.java.tree.J; -import org.openrewrite.java.tree.JavaSourceFile; -import org.openrewrite.java.tree.JavaType; -import org.openrewrite.java.tree.Statement; -import org.openrewrite.java.tree.TypeUtils; +import org.openrewrite.java.tree.*; import org.openrewrite.marker.SearchResult; import org.openrewrite.staticanalysis.RemoveUnusedLocalVariables; import java.lang.reflect.Method; -import java.util.AbstractMap; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; import static java.util.stream.Collectors.toList; @@ -61,7 +41,7 @@ public class JMockitMockUpToMockito extends Recipe { private static final String MOCKITO_ALL_IMPORT = "org.mockito.Mockito.*"; private static final String MOCKITO_MATCHER_IMPORT = "org.mockito.ArgumentMatchers.*"; private static final String MOCKITO_DELEGATEANSWER_IMPORT = "org.mockito.AdditionalAnswers.delegatesTo"; - private static final String JMOCKIT_MOCKUP_IMPORT = "mockit.MockUp"; + private static final String JMOCKIT_MOCKUP_IMPORT = MockUp.getFqn(); private static final String JMOCKIT_MOCK_IMPORT = "mockit.Mock"; private static final String MOCKITO_STATIC_PREFIX = "mockStatic"; private static final String MOCKITO_STATIC_IMPORT = "org.mockito.MockedStatic"; @@ -87,6 +67,250 @@ public TreeVisitor getVisitor() { private static class JMockitMockUpToMockitoVisitor extends JavaIsoVisitor { private final Map tearDownMocks = new HashMap<>(); + /** + * Handle at class level because need to handle the case where when there is a MockUp in a setup method, and we + * need to close the migrated mockCons in the teardown, yet the teardown method comes before the setup method + */ + @Override + public J.ClassDeclaration visitClassDeclaration(J.ClassDeclaration classDecl, ExecutionContext ctx) { + // Handle @Before/@BeforeEach mockUp + Set mds = TreeVisitor.collect( + new JavaIsoVisitor() { + @Override + public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration md, ExecutionContext ctx) { + if (isSetUpMethod(md)) { + return SearchResult.found(md); + } + return super.visitMethodDeclaration(md, ctx); + } + }, + classDecl, + new HashSet<>() + ) + .stream() + .filter(J.MethodDeclaration.class::isInstance) + .map(J.MethodDeclaration.class::cast) + .collect(Collectors.toSet()); + if (mds.isEmpty()) { + return super.visitClassDeclaration(classDecl, ctx); + } + + final J.ClassDeclaration[] cd = {classDecl}; + mds.forEach(md -> md.getBody() + .getStatements() + .stream() + .filter(this::isMockUpStatement) + .map(J.NewClass.class::cast) + .forEach(newClass -> { + String className = ((J.ParameterizedType) newClass.getClazz()).getTypeParameters().get(0).toString(); + + Map mockedMethods = getMockUpMethods(newClass); + + // Add mockStatic field + if (mockedMethods.values().stream().anyMatch(m -> m.getFlags().contains(Static))) { + cd[0] = JavaTemplate.builder("private MockedStatic #{};") + .contextSensitive() + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) + .imports(MOCKITO_STATIC_IMPORT) + .staticImports(MOCKITO_ALL_IMPORT) + .build() + .apply( + new Cursor(getCursor().getParentOrThrow(), cd[0]), + cd[0].getBody().getCoordinates().firstStatement(), + MOCKITO_STATIC_PREFIX + className + ); + J.VariableDeclarations mockField = (J.VariableDeclarations) cd[0].getBody().getStatements().get(0); + J.Identifier mockFieldId = mockField.getVariables().get(0).getName(); + tearDownMocks.put(MOCKITO_STATIC_PREFIX + className, mockFieldId); + } + // Add mockConstruction field + if (mockedMethods.values().stream().anyMatch(m -> !m.getFlags().contains(Static))) { + cd[0] = JavaTemplate.builder("private MockedConstruction #{};") + .contextSensitive() + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) + .imports(MOCKITO_CONSTRUCTION_IMPORT) + .staticImports(MOCKITO_ALL_IMPORT) + .build() + .apply( + updateCursor(cd[0]), + cd[0].getBody().getCoordinates().firstStatement(), + MOCKITO_CONSTRUCTION_PREFIX + className + ); + J.VariableDeclarations mockField = (J.VariableDeclarations) cd[0].getBody().getStatements().get(0); + J.Identifier mockFieldId = mockField.getVariables().get(0).getName(); + tearDownMocks.put(MOCKITO_CONSTRUCTION_PREFIX + className, mockFieldId); + } + })); + + cd[0] = maybeAddMethodWithAnnotation(this, cd[0], ctx, "tearDown", + "@org.junit.After", + "@After", + "junit-4.13", + "org.junit.After", + ""); + + return super.visitClassDeclaration(cd[0], ctx); + } + + @Override + public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl, ExecutionContext ctx) { + J.MethodDeclaration md = methodDecl; + if (md.getBody() == null) { + return md; + } + if (isTearDownMethod(md)) { + for (J.Identifier id : tearDownMocks.values()) { + String type = TypeUtils.asFullyQualified(id.getFieldType().getType()).getFullyQualifiedName(); + md = JavaTemplate.builder("#{any(" + type + ")}.closeOnDemand();") + .contextSensitive() + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) + .imports(MOCKITO_STATIC_IMPORT, MOCKITO_CONSTRUCTION_IMPORT) + .staticImports(MOCKITO_ALL_IMPORT) + .build() + .apply( + updateCursor(md), + md.getBody().getCoordinates().lastStatement(), + id + ); + } + return md; + } + + boolean isBeforeTest = isSetUpMethod(md); + List varDeclarationInTry = new ArrayList<>(); + List mockStaticMethodInTry = new ArrayList<>(); + List mockConstructionMethodInTry = new ArrayList<>(); + List encloseStatements = new ArrayList<>(); + List residualStatements = new ArrayList<>(); + for (Statement statement : md.getBody().getStatements()) { + if (!isMockUpStatement(statement)) { + encloseStatements.add(statement); + continue; + } + + J.NewClass newClass = (J.NewClass) statement; + + // Only discard @Mock method declarations + residualStatements.addAll(newClass + .getBody() + .getStatements() + .stream() + .filter(s -> { + if (s instanceof J.MethodDeclaration) { + return ((J.MethodDeclaration) s).getLeadingAnnotations().stream() + .noneMatch(o -> TypeUtils.isOfClassType(o.getType(), JMOCKIT_MOCK_IMPORT)); + } + return true; + }) + .collect(toList()) + ); + + JavaType mockType = ((J.ParameterizedType) newClass.getClazz()).getTypeParameters().get(0).getType(); + String className = ((J.ParameterizedType) newClass.getClazz()).getTypeParameters().get(0).toString(); + + Map mockedMethods = getMockUpMethods(newClass); + + // Add MockStatic + Map mockedPublicStaticMethods = mockedMethods + .entrySet() + .stream() + .filter(m -> m.getValue().getFlags().contains(Static)) + .collect(toMap(Map.Entry::getKey, Map.Entry::getValue)); + if (!mockedPublicStaticMethods.isEmpty()) { + if (isBeforeTest) { + String tpl = getMockStaticDeclarationInBefore(className) + + getMockStaticMethods((JavaType.Class) mockType, className, mockedPublicStaticMethods); + + md = JavaTemplate.builder(tpl) + .contextSensitive() + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) + .imports(MOCKITO_STATIC_IMPORT) + .staticImports(MOCKITO_ALL_IMPORT) + .build() + .apply( + updateCursor(md), + statement.getCoordinates().after(), + tearDownMocks.get(MOCKITO_STATIC_PREFIX + className) + ); + } else { + varDeclarationInTry.add(getMockStaticDeclarationInTry(className)); + mockStaticMethodInTry.add(getMockStaticMethods((JavaType.Class) mockType, className, mockedPublicStaticMethods)); + } + + maybeAddImport(MOCKITO_STATIC_IMPORT); + } + + // Add MockConstruction + Map mockedPublicMethods = mockedMethods + .entrySet() + .stream() + .filter(m -> !m.getValue().getFlags().contains(Static)) + .collect(toMap(Map.Entry::getKey, Map.Entry::getValue)); + if (!mockedPublicMethods.isEmpty()) { + if (isBeforeTest) { + String tpl = getMockConstructionMethods(className, mockedPublicMethods) + + getMockConstructionDeclarationInBefore(className); + + md = JavaTemplate.builder(tpl) + .contextSensitive() + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) + .imports(MOCKITO_STATIC_IMPORT) + .staticImports(MOCKITO_ALL_IMPORT, MOCKITO_DELEGATEANSWER_IMPORT) + .build() + .apply( + updateCursor(md), + statement.getCoordinates().after(), + tearDownMocks.get(MOCKITO_CONSTRUCTION_PREFIX + className) + ); + } else { + varDeclarationInTry.add(getMockConstructionDeclarationInTry(className)); + mockConstructionMethodInTry.add(getMockConstructionMethods(className, mockedPublicMethods)); + } + + maybeAddImport(MOCKITO_CONSTRUCTION_IMPORT); + maybeAddImport("org.mockito.Answers", "CALLS_REAL_METHODS", false); + maybeAddImport("org.mockito.AdditionalAnswers", "delegatesTo", false); + } + + List statements = md.getBody().getStatements(); + statements.remove(statement); + md = md.withBody(md.getBody().withStatements(statements)); + } + + if (!varDeclarationInTry.isEmpty()) { + String tpl = String.join("", mockConstructionMethodInTry) + + "try (" + + String.join(";", varDeclarationInTry) + + ") {" + + String.join(";", mockStaticMethodInTry) + + "}"; + + J.MethodDeclaration residualMd = md.withBody(md.getBody().withStatements(residualStatements)); + residualMd = JavaTemplate.builder(tpl) + .contextSensitive() + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) + .imports(MOCKITO_STATIC_IMPORT, MOCKITO_CONSTRUCTION_IMPORT) + .staticImports(MOCKITO_ALL_IMPORT, MOCKITO_MATCHER_IMPORT, MOCKITO_MATCHER_IMPORT, MOCKITO_DELEGATEANSWER_IMPORT) + .build() + .apply(updateCursor(residualMd), residualMd.getBody().getCoordinates().lastStatement()); + + List mdStatements = residualMd.getBody().getStatements(); + J.Try try_ = (J.Try) mdStatements.get(mdStatements.size() - 1); + + List tryStatements = try_.getBody().getStatements(); + tryStatements.addAll(encloseStatements); + try_ = try_.withBody(try_.getBody().withStatements(tryStatements)); + + mdStatements.set(mdStatements.size() - 1, try_); + md = md.withBody(residualMd.getBody().withStatements(mdStatements)); + } + + maybeAddImport(MOCKITO_ALL_IMPORT.replace(".*", ""), "*", false); + maybeRemoveImport(JMOCKIT_MOCK_IMPORT); + maybeRemoveImport(JMOCKIT_MOCKUP_IMPORT); + return maybeAutoFormat(methodDecl, md, ctx); + } + private String getMatcher(JavaType s) { maybeAddImport(MOCKITO_MATCHER_IMPORT.replace(".*", ""), "*", false); if (s instanceof JavaType.Primitive) { @@ -309,246 +533,5 @@ private Map getMockUpMethods(J.NewClass ne .filter(Objects::nonNull) .collect(toMap(Map.Entry::getKey, Map.Entry::getValue)); } - - @Override - public J.ClassDeclaration visitClassDeclaration(J.ClassDeclaration classDecl, ExecutionContext ctx) { - // Handle @Before/@BeforeEach mockUp - Set mds = TreeVisitor.collect( - new JavaIsoVisitor() { - @Override - public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration md, ExecutionContext ctx) { - if (isSetUpMethod(md)) { - return SearchResult.found(md); - } - return super.visitMethodDeclaration(md, ctx); - } - }, - classDecl, - new HashSet<>() - ) - .stream() - .filter(J.MethodDeclaration.class::isInstance) - .map(J.MethodDeclaration.class::cast) - .collect(Collectors.toSet()); - if (mds.isEmpty()) { - return super.visitClassDeclaration(classDecl, ctx); - } - - final J.ClassDeclaration[] cd = {classDecl}; - mds.forEach(md -> md.getBody() - .getStatements() - .stream() - .filter(this::isMockUpStatement) - .map(J.NewClass.class::cast) - .forEach(newClass -> { - JavaType mockType = ((J.ParameterizedType) newClass.getClazz()).getTypeParameters().get(0).getType(); - String className = ((J.ParameterizedType) newClass.getClazz()).getTypeParameters().get(0).toString(); - - Map mockedMethods = getMockUpMethods(newClass); - - // Add mockStatic field - if (mockedMethods.values().stream().anyMatch(m -> m.getFlags().contains(Static))) { - cd[0] = JavaTemplate.builder("private MockedStatic #{};") - .contextSensitive() - .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) - .imports(MOCKITO_STATIC_IMPORT) - .staticImports(MOCKITO_ALL_IMPORT) - .build() - .apply( - new Cursor(getCursor().getParentOrThrow(), cd[0]), - cd[0].getBody().getCoordinates().firstStatement(), - MOCKITO_STATIC_PREFIX + className - ); - J.VariableDeclarations mockField = (J.VariableDeclarations) cd[0].getBody().getStatements().get(0); - J.Identifier mockFieldId = mockField.getVariables().get(0).getName(); - tearDownMocks.put(MOCKITO_STATIC_PREFIX + className, mockFieldId); - } - // Add mockConstruction field - if (mockedMethods.values().stream().anyMatch(m -> !m.getFlags().contains(Static))) { - cd[0] = JavaTemplate.builder("private MockedConstruction #{};") - .contextSensitive() - .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) - .imports(MOCKITO_CONSTRUCTION_IMPORT) - .staticImports(MOCKITO_ALL_IMPORT) - .build() - .apply( - updateCursor(cd[0]), - cd[0].getBody().getCoordinates().firstStatement(), - MOCKITO_CONSTRUCTION_PREFIX + className - ); - J.VariableDeclarations mockField = (J.VariableDeclarations) cd[0].getBody().getStatements().get(0); - J.Identifier mockFieldId = mockField.getVariables().get(0).getName(); - tearDownMocks.put(MOCKITO_CONSTRUCTION_PREFIX + className, mockFieldId); - } - })); - - cd[0] = maybeAddMethodWithAnnotation(this, cd[0], ctx, "tearDown", - "@org.junit.After", - "@After", - "junit-4.13", - "org.junit.After", - ""); - - return super.visitClassDeclaration(cd[0], ctx); - } - - @Override - public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl, ExecutionContext ctx) { - J.MethodDeclaration md = methodDecl; - if (md.getBody() == null) { - return md; - } - if (isTearDownMethod(md)) { - for (J.Identifier id : tearDownMocks.values()) { - String type = TypeUtils.asFullyQualified(id.getFieldType().getType()).getFullyQualifiedName(); - md = JavaTemplate.builder("#{any(" + type + ")}.closeOnDemand();") - .contextSensitive() - .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) - .imports(MOCKITO_STATIC_IMPORT, MOCKITO_CONSTRUCTION_IMPORT) - .staticImports(MOCKITO_ALL_IMPORT) - .build() - .apply( - updateCursor(md), - md.getBody().getCoordinates().lastStatement(), - id - ); - } - return md; - } - - boolean isBeforeTest = isSetUpMethod(md); - List varDeclarationInTry = new ArrayList<>(); - List mockStaticMethodInTry = new ArrayList<>(); - List mockConstructionMethodInTry = new ArrayList<>(); - List encloseStatements = new ArrayList<>(); - List residualStatements = new ArrayList<>(); - for (Statement statement : md.getBody().getStatements()) { - if (!isMockUpStatement(statement)) { - encloseStatements.add(statement); - continue; - } - - J.NewClass newClass = (J.NewClass) statement; - - // Only discard @Mock method declarations - residualStatements.addAll(newClass - .getBody() - .getStatements() - .stream() - .filter(s -> { - if (s instanceof J.MethodDeclaration) { - return ((J.MethodDeclaration) s).getLeadingAnnotations().stream() - .noneMatch(o -> TypeUtils.isOfClassType(o.getType(), JMOCKIT_MOCK_IMPORT)); - } - return true; - }) - .collect(toList()) - ); - - JavaType mockType = ((J.ParameterizedType) newClass.getClazz()).getTypeParameters().get(0).getType(); - String className = ((J.ParameterizedType) newClass.getClazz()).getTypeParameters().get(0).toString(); - - Map mockedMethods = getMockUpMethods(newClass); - - // Add MockStatic - Map mockedPublicStaticMethods = mockedMethods - .entrySet() - .stream() - .filter(m -> m.getValue().getFlags().contains(Static)) - .collect(toMap(Map.Entry::getKey, Map.Entry::getValue)); - if (!mockedPublicStaticMethods.isEmpty()) { - if (isBeforeTest) { - String tpl = getMockStaticDeclarationInBefore(className) + - getMockStaticMethods((JavaType.Class) mockType, className, mockedPublicStaticMethods); - - md = JavaTemplate.builder(tpl) - .contextSensitive() - .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) - .imports(MOCKITO_STATIC_IMPORT) - .staticImports(MOCKITO_ALL_IMPORT) - .build() - .apply( - updateCursor(md), - statement.getCoordinates().after(), - tearDownMocks.get(MOCKITO_STATIC_PREFIX + className) - ); - } else { - varDeclarationInTry.add(getMockStaticDeclarationInTry(className)); - mockStaticMethodInTry.add(getMockStaticMethods((JavaType.Class) mockType, className, mockedPublicStaticMethods)); - } - - maybeAddImport(MOCKITO_STATIC_IMPORT); - } - - // Add MockConstruction - Map mockedPublicMethods = mockedMethods - .entrySet() - .stream() - .filter(m -> !m.getValue().getFlags().contains(Static)) - .collect(toMap(Map.Entry::getKey, Map.Entry::getValue)); - if (!mockedPublicMethods.isEmpty()) { - if (isBeforeTest) { - String tpl = getMockConstructionMethods(className, mockedPublicMethods) + - getMockConstructionDeclarationInBefore(className); - - md = JavaTemplate.builder(tpl) - .contextSensitive() - .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) - .imports(MOCKITO_STATIC_IMPORT) - .staticImports(MOCKITO_ALL_IMPORT, MOCKITO_DELEGATEANSWER_IMPORT) - .build() - .apply( - updateCursor(md), - statement.getCoordinates().after(), - tearDownMocks.get(MOCKITO_CONSTRUCTION_PREFIX + className) - ); - } else { - varDeclarationInTry.add(getMockConstructionDeclarationInTry(className)); - mockConstructionMethodInTry.add(getMockConstructionMethods(className, mockedPublicMethods)); - } - - maybeAddImport(MOCKITO_CONSTRUCTION_IMPORT); - maybeAddImport("org.mockito.Answers", "CALLS_REAL_METHODS", false); - maybeAddImport("org.mockito.AdditionalAnswers", "delegatesTo", false); - } - - List statements = md.getBody().getStatements(); - statements.remove(statement); - md = md.withBody(md.getBody().withStatements(statements)); - } - - if (!varDeclarationInTry.isEmpty()) { - String tpl = String.join("", mockConstructionMethodInTry) + - "try (" + - String.join(";", varDeclarationInTry) + - ") {" + - String.join(";", mockStaticMethodInTry) + - "}"; - - J.MethodDeclaration residualMd = md.withBody(md.getBody().withStatements(residualStatements)); - residualMd = JavaTemplate.builder(tpl) - .contextSensitive() - .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) - .imports(MOCKITO_STATIC_IMPORT, MOCKITO_CONSTRUCTION_IMPORT) - .staticImports(MOCKITO_ALL_IMPORT, MOCKITO_MATCHER_IMPORT, MOCKITO_MATCHER_IMPORT, MOCKITO_DELEGATEANSWER_IMPORT) - .build() - .apply(updateCursor(residualMd), residualMd.getBody().getCoordinates().lastStatement()); - - List mdStatements = residualMd.getBody().getStatements(); - J.Try try_ = (J.Try) mdStatements.get(mdStatements.size() - 1); - - List tryStatements = try_.getBody().getStatements(); - tryStatements.addAll(encloseStatements); - try_ = try_.withBody(try_.getBody().withStatements(tryStatements)); - - mdStatements.set(mdStatements.size() - 1, try_); - md = md.withBody(residualMd.getBody().withStatements(mdStatements)); - } - - maybeAddImport(MOCKITO_ALL_IMPORT.replace(".*", ""), "*", false); - maybeRemoveImport(JMOCKIT_MOCK_IMPORT); - maybeRemoveImport(JMOCKIT_MOCKUP_IMPORT); - return maybeAutoFormat(methodDecl, md, ctx); - } } } diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index 2aa8f3693..c0f784dac 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -24,13 +24,13 @@ import org.openrewrite.test.TypeValidation; import static org.openrewrite.java.Assertions.java; -import static org.openrewrite.java.testing.jmockit.JMockitTestUtils.setParserSettings; +import static org.openrewrite.java.testing.jmockit.JMockitTestUtils.*; class JMockitMockUpToMockitoTest implements RewriteTest { @Override public void defaults(RecipeSpec spec) { - setParserSettings(spec, "jmockit-1.22", "junit-4.13.2"); + setParserSettings(spec, JMOCKIT_DEPENDENCY, JUNIT_4_DEPENDENCY); } @DocumentExample diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitNonStrictExpectationsToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitNonStrictExpectationsToMockitoTest.java index bc186bb48..75227e326 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitNonStrictExpectationsToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitNonStrictExpectationsToMockitoTest.java @@ -21,12 +21,9 @@ import org.openrewrite.test.RewriteTest; import static org.openrewrite.java.Assertions.java; -import static org.openrewrite.java.testing.jmockit.JMockitTestUtils.MOCKITO_CORE_DEPENDENCY; -import static org.openrewrite.java.testing.jmockit.JMockitTestUtils.setParserSettings; +import static org.openrewrite.java.testing.jmockit.JMockitTestUtils.*; class JMockitNonStrictExpectationsToMockitoTest implements RewriteTest { - - private static final String JUNIT_4_DEPENDENCY = "junit-4.13.2"; private static final String LEGACY_JMOCKIT_DEPENDENCY = "jmockit-1.22"; @Override diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitTestUtils.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitTestUtils.java index 0b21832ab..531dc1ccd 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitTestUtils.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitTestUtils.java @@ -23,6 +23,7 @@ public class JMockitTestUtils { static final String MOCKITO_CORE_DEPENDENCY = "mockito-core-3.12"; static final String JUNIT_5_JUPITER_DEPENDENCY = "junit-jupiter-api-5.9"; + static final String JUNIT_4_DEPENDENCY = "junit-4.13.2"; static final String JMOCKIT_DEPENDENCY = "jmockit-1.49"; static final String MOCKITO_JUPITER_DEPENDENCY = "mockito-junit-jupiter-3.12"; From 0dc4d1070d49adae20dbafeddd64136974fb1775 Mon Sep 17 00:00:00 2001 From: SiBorea Date: Tue, 15 Oct 2024 11:09:32 +0800 Subject: [PATCH 36/39] Resolve deprecated print() --- .../java/testing/jmockit/JMockitMockUpToMockito.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index 96462c216..7eae37d50 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -383,7 +383,7 @@ public J.VariableDeclarations.NamedVariable visitVariable(J.VariableDeclarations boolean hasReturn = false; for (Statement s : md.getBody().getStatements()) { hasReturn = hasReturn || s instanceof J.Return; - sb.append(s.print()).append(";"); + sb.append(s.print(getCursor())).append(";"); } // Avoid syntax error if (!hasReturn) { @@ -416,7 +416,7 @@ private String getMockStaticMethods(JavaType.Class clazz, String className, Map< // To generate predictable method order List keys = mockedMethods.keySet().stream() - .sorted(Comparator.comparing((J.MethodDeclaration::print))) + .sorted(Comparator.comparing(o -> o.print(getCursor()))) .collect(toList()); for (J.MethodDeclaration m : keys) { tpl.append("mockStatic").append(className) @@ -470,7 +470,7 @@ private String getMockConstructionMethods(String className, Map o.print(getCursor()))) .forEach(m -> tpl.append("doAnswer(invocation -> {") .append(getAnswerBody(m)) .append("}).when(").append(MOCKITO_MOCK_PREFIX).append(className).append(").").append(m.getSimpleName()).append("(") From 1e5b4654c76bf38d4cd3ee6938ef8af5a6d98b9d Mon Sep 17 00:00:00 2001 From: SiBorea Date: Tue, 15 Oct 2024 11:16:22 +0800 Subject: [PATCH 37/39] Utilize LambdaBlockToExpression --- .../jmockit/JMockitMockUpToMockito.java | 3 ++ .../jmockit/JMockitMockUpToMockitoTest.java | 32 +++++-------------- 2 files changed, 11 insertions(+), 24 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index 7eae37d50..6bcbc9616 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -23,6 +23,7 @@ import org.openrewrite.java.search.UsesType; import org.openrewrite.java.tree.*; import org.openrewrite.marker.SearchResult; +import org.openrewrite.staticanalysis.LambdaBlockToExpression; import org.openrewrite.staticanalysis.RemoveUnusedLocalVariables; import java.lang.reflect.Method; @@ -308,6 +309,8 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl maybeAddImport(MOCKITO_ALL_IMPORT.replace(".*", ""), "*", false); maybeRemoveImport(JMOCKIT_MOCK_IMPORT); maybeRemoveImport(JMOCKIT_MOCKUP_IMPORT); + + doAfterVisit(new LambdaBlockToExpression().getVisitor()); return maybeAutoFormat(methodDecl, md, ctx); } diff --git a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java index c0f784dac..474763541 100644 --- a/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java +++ b/src/test/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockitoTest.java @@ -86,12 +86,8 @@ public class MockUpTest { @Test public void test() { try (MockedStatic mockStaticMyClazz = mockStatic(MyClazz.class)) { - mockStaticMyClazz.when(() -> MyClazz.staticMethod()).thenAnswer(invocation -> { - return 1024; - }); - mockStaticMyClazz.when(() -> MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> { - return 128; - }); + mockStaticMyClazz.when(() -> MyClazz.staticMethod()).thenAnswer(invocation -> 1024); + mockStaticMyClazz.when(() -> MyClazz.staticMethod(anyInt())).thenAnswer(invocation -> 128); assertEquals(1024, MyClazz.staticMethod()); assertEquals(128, MyClazz.staticMethod(0)); } @@ -198,17 +194,13 @@ public class MockUpTest { @Test public void test() { Foo mockFoo = mock(Foo.class, CALLS_REAL_METHODS); - doAnswer(invocation -> { - return "FOO"; - }).when(mockFoo).getMsg(); + doAnswer(invocation -> "FOO").when(mockFoo).getMsg(); doAnswer(invocation -> { String echo = invocation.getArgument(0); return "FOO" + echo; }).when(mockFoo).getMsg(nullable(String.class)); Bar mockBar = mock(Bar.class, CALLS_REAL_METHODS); - doAnswer(invocation -> { - return "BAR"; - }).when(mockBar).getMsg(); + doAnswer(invocation -> "BAR").when(mockBar).getMsg(); doAnswer(invocation -> { String echo = invocation.getArgument(0); return "BAR" + echo; @@ -279,9 +271,7 @@ public class MockUpTest { public void test() { final String msg = "newMsg"; MyClazz mockMyClazz = mock(MyClazz.class, CALLS_REAL_METHODS); - doAnswer(invocation -> { - return msg; - }).when(mockMyClazz).getMsg(); + doAnswer(invocation -> msg).when(mockMyClazz).getMsg(); try (MockedConstruction mockConsMyClazz = mockConstructionWithAnswer(MyClazz.class, delegatesTo(mockMyClazz))) { // Should ignore the newClass statement @@ -469,9 +459,7 @@ public class MockUpTest { @Before public void setUp() { MyClazz mockMyClazz = mock(MyClazz.class, CALLS_REAL_METHODS); - doAnswer(invocation -> { - return "mockMsg"; - }).when(mockMyClazz).getMsg(); + doAnswer(invocation -> "mockMsg").when(mockMyClazz).getMsg(); mockConsMyClazz = mockConstructionWithAnswer(MyClazz.class, delegatesTo(mockMyClazz)); } @@ -563,14 +551,10 @@ public class MockUpTest { @Before public void setUp() { MyClazz mockMyClazz = mock(MyClazz.class, CALLS_REAL_METHODS); - doAnswer(invocation -> { - return "mockMsg"; - }).when(mockMyClazz).getMsg(); + doAnswer(invocation -> "mockMsg").when(mockMyClazz).getMsg(); mockConsMyClazz = mockConstructionWithAnswer(MyClazz.class, delegatesTo(mockMyClazz)); mockStaticMyClazz = mockStatic(MyClazz.class); - mockStaticMyClazz.when(() -> MyClazz.getStaticMsg()).thenAnswer(invocation -> { - return "mockStaticMsg"; - }); + mockStaticMyClazz.when(() -> MyClazz.getStaticMsg()).thenAnswer(invocation -> "mockStaticMsg"); } @After From b4f1e0ac2268bf15a18362b7289c251ce180625d Mon Sep 17 00:00:00 2001 From: SiBorea Date: Tue, 15 Oct 2024 11:26:42 +0800 Subject: [PATCH 38/39] Make constants --- .../jmockit/JMockitMockUpToMockito.java | 272 +++++++++--------- 1 file changed, 138 insertions(+), 134 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index 6bcbc9616..fcdfa8f2c 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -15,12 +15,18 @@ */ package org.openrewrite.java.testing.jmockit; +import static java.util.stream.Collectors.toList; +import static java.util.stream.Collectors.toMap; import lombok.SneakyThrows; import org.openrewrite.*; import org.openrewrite.java.JavaIsoVisitor; import org.openrewrite.java.JavaParser; import org.openrewrite.java.JavaTemplate; import org.openrewrite.java.search.UsesType; +import static org.openrewrite.java.testing.jmockit.JMockitBlockType.MockUp; +import static org.openrewrite.java.testing.mockito.MockitoUtils.maybeAddMethodWithAnnotation; +import static org.openrewrite.java.tree.Flag.Private; +import static org.openrewrite.java.tree.Flag.Static; import org.openrewrite.java.tree.*; import org.openrewrite.marker.SearchResult; import org.openrewrite.staticanalysis.LambdaBlockToExpression; @@ -30,13 +36,6 @@ import java.util.*; import java.util.stream.Collectors; -import static java.util.stream.Collectors.toList; -import static java.util.stream.Collectors.toMap; -import static org.openrewrite.java.testing.jmockit.JMockitBlockType.MockUp; -import static org.openrewrite.java.testing.mockito.MockitoUtils.maybeAddMethodWithAnnotation; -import static org.openrewrite.java.tree.Flag.Private; -import static org.openrewrite.java.tree.Flag.Static; - public class JMockitMockUpToMockito extends Recipe { private static final String MOCKITO_CLASSPATH = "mockito-core-5"; private static final String MOCKITO_ALL_IMPORT = "org.mockito.Mockito.*"; @@ -50,6 +49,11 @@ public class JMockitMockUpToMockito extends Recipe { private static final String MOCKITO_CONSTRUCTION_PREFIX = "mockCons"; private static final String MOCKITO_CONSTRUCTION_IMPORT = "org.mockito.MockedConstruction"; + private static final String TEARDOWN_METHOD_ANNOTATION_SIGNATURE = "@org.junit.After"; + private static final String TEARDOWN_METHOD_ANNOTATION_TO_ADD = "@After"; + private static final String TEARDOWN_CLASSPATH_RESOURCE = "junit-4.13"; + private static final String TEARDOWN_IMPORT_TO_ADD = "org.junit.After"; + @Override public String getDisplayName() { return "Rewrite JMockit MockUp to Mockito statements"; @@ -76,79 +80,79 @@ private static class JMockitMockUpToMockitoVisitor extends JavaIsoVisitor mds = TreeVisitor.collect( - new JavaIsoVisitor() { - @Override - public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration md, ExecutionContext ctx) { - if (isSetUpMethod(md)) { - return SearchResult.found(md); - } - return super.visitMethodDeclaration(md, ctx); - } - }, - classDecl, - new HashSet<>() - ) - .stream() - .filter(J.MethodDeclaration.class::isInstance) - .map(J.MethodDeclaration.class::cast) - .collect(Collectors.toSet()); + new JavaIsoVisitor() { + @Override + public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration md, ExecutionContext ctx) { + if (isSetUpMethod(md)) { + return SearchResult.found(md); + } + return super.visitMethodDeclaration(md, ctx); + } + }, + classDecl, + new HashSet<>() + ) + .stream() + .filter(J.MethodDeclaration.class::isInstance) + .map(J.MethodDeclaration.class::cast) + .collect(Collectors.toSet()); if (mds.isEmpty()) { return super.visitClassDeclaration(classDecl, ctx); } final J.ClassDeclaration[] cd = {classDecl}; mds.forEach(md -> md.getBody() - .getStatements() - .stream() - .filter(this::isMockUpStatement) - .map(J.NewClass.class::cast) - .forEach(newClass -> { - String className = ((J.ParameterizedType) newClass.getClazz()).getTypeParameters().get(0).toString(); - - Map mockedMethods = getMockUpMethods(newClass); - - // Add mockStatic field - if (mockedMethods.values().stream().anyMatch(m -> m.getFlags().contains(Static))) { - cd[0] = JavaTemplate.builder("private MockedStatic #{};") - .contextSensitive() - .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) - .imports(MOCKITO_STATIC_IMPORT) - .staticImports(MOCKITO_ALL_IMPORT) - .build() - .apply( - new Cursor(getCursor().getParentOrThrow(), cd[0]), - cd[0].getBody().getCoordinates().firstStatement(), - MOCKITO_STATIC_PREFIX + className - ); - J.VariableDeclarations mockField = (J.VariableDeclarations) cd[0].getBody().getStatements().get(0); - J.Identifier mockFieldId = mockField.getVariables().get(0).getName(); - tearDownMocks.put(MOCKITO_STATIC_PREFIX + className, mockFieldId); - } - // Add mockConstruction field - if (mockedMethods.values().stream().anyMatch(m -> !m.getFlags().contains(Static))) { - cd[0] = JavaTemplate.builder("private MockedConstruction #{};") - .contextSensitive() - .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) - .imports(MOCKITO_CONSTRUCTION_IMPORT) - .staticImports(MOCKITO_ALL_IMPORT) - .build() - .apply( - updateCursor(cd[0]), - cd[0].getBody().getCoordinates().firstStatement(), - MOCKITO_CONSTRUCTION_PREFIX + className - ); - J.VariableDeclarations mockField = (J.VariableDeclarations) cd[0].getBody().getStatements().get(0); - J.Identifier mockFieldId = mockField.getVariables().get(0).getName(); - tearDownMocks.put(MOCKITO_CONSTRUCTION_PREFIX + className, mockFieldId); - } - })); + .getStatements() + .stream() + .filter(this::isMockUpStatement) + .map(J.NewClass.class::cast) + .forEach(newClass -> { + String className = ((J.ParameterizedType) newClass.getClazz()).getTypeParameters().get(0).toString(); + + Map mockedMethods = getMockUpMethods(newClass); + + // Add mockStatic field + if (mockedMethods.values().stream().anyMatch(m -> m.getFlags().contains(Static))) { + cd[0] = JavaTemplate.builder("private MockedStatic #{};") + .contextSensitive() + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) + .imports(MOCKITO_STATIC_IMPORT) + .staticImports(MOCKITO_ALL_IMPORT) + .build() + .apply( + new Cursor(getCursor().getParentOrThrow(), cd[0]), + cd[0].getBody().getCoordinates().firstStatement(), + MOCKITO_STATIC_PREFIX + className + ); + J.VariableDeclarations mockField = (J.VariableDeclarations) cd[0].getBody().getStatements().get(0); + J.Identifier mockFieldId = mockField.getVariables().get(0).getName(); + tearDownMocks.put(MOCKITO_STATIC_PREFIX + className, mockFieldId); + } + // Add mockConstruction field + if (mockedMethods.values().stream().anyMatch(m -> !m.getFlags().contains(Static))) { + cd[0] = JavaTemplate.builder("private MockedConstruction #{};") + .contextSensitive() + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) + .imports(MOCKITO_CONSTRUCTION_IMPORT) + .staticImports(MOCKITO_ALL_IMPORT) + .build() + .apply( + updateCursor(cd[0]), + cd[0].getBody().getCoordinates().firstStatement(), + MOCKITO_CONSTRUCTION_PREFIX + className + ); + J.VariableDeclarations mockField = (J.VariableDeclarations) cd[0].getBody().getStatements().get(0); + J.Identifier mockFieldId = mockField.getVariables().get(0).getName(); + tearDownMocks.put(MOCKITO_CONSTRUCTION_PREFIX + className, mockFieldId); + } + })); cd[0] = maybeAddMethodWithAnnotation(this, cd[0], ctx, "tearDown", - "@org.junit.After", - "@After", - "junit-4.13", - "org.junit.After", - ""); + TEARDOWN_METHOD_ANNOTATION_SIGNATURE, + TEARDOWN_METHOD_ANNOTATION_TO_ADD, + TEARDOWN_CLASSPATH_RESOURCE, + TEARDOWN_IMPORT_TO_ADD, + ""); return super.visitClassDeclaration(cd[0], ctx); } @@ -163,16 +167,16 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl for (J.Identifier id : tearDownMocks.values()) { String type = TypeUtils.asFullyQualified(id.getFieldType().getType()).getFullyQualifiedName(); md = JavaTemplate.builder("#{any(" + type + ")}.closeOnDemand();") - .contextSensitive() - .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) - .imports(MOCKITO_STATIC_IMPORT, MOCKITO_CONSTRUCTION_IMPORT) - .staticImports(MOCKITO_ALL_IMPORT) - .build() - .apply( - updateCursor(md), - md.getBody().getCoordinates().lastStatement(), - id - ); + .contextSensitive() + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) + .imports(MOCKITO_STATIC_IMPORT, MOCKITO_CONSTRUCTION_IMPORT) + .staticImports(MOCKITO_ALL_IMPORT) + .build() + .apply( + updateCursor(md), + md.getBody().getCoordinates().lastStatement(), + id + ); } return md; } @@ -193,17 +197,17 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl // Only discard @Mock method declarations residualStatements.addAll(newClass - .getBody() - .getStatements() - .stream() - .filter(s -> { - if (s instanceof J.MethodDeclaration) { - return ((J.MethodDeclaration) s).getLeadingAnnotations().stream() - .noneMatch(o -> TypeUtils.isOfClassType(o.getType(), JMOCKIT_MOCK_IMPORT)); - } - return true; - }) - .collect(toList()) + .getBody() + .getStatements() + .stream() + .filter(s -> { + if (s instanceof J.MethodDeclaration) { + return ((J.MethodDeclaration) s).getLeadingAnnotations().stream() + .noneMatch(o -> TypeUtils.isOfClassType(o.getType(), JMOCKIT_MOCK_IMPORT)); + } + return true; + }) + .collect(toList()) ); JavaType mockType = ((J.ParameterizedType) newClass.getClazz()).getTypeParameters().get(0).getType(); @@ -213,26 +217,26 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl // Add MockStatic Map mockedPublicStaticMethods = mockedMethods - .entrySet() - .stream() - .filter(m -> m.getValue().getFlags().contains(Static)) - .collect(toMap(Map.Entry::getKey, Map.Entry::getValue)); + .entrySet() + .stream() + .filter(m -> m.getValue().getFlags().contains(Static)) + .collect(toMap(Map.Entry::getKey, Map.Entry::getValue)); if (!mockedPublicStaticMethods.isEmpty()) { if (isBeforeTest) { String tpl = getMockStaticDeclarationInBefore(className) + - getMockStaticMethods((JavaType.Class) mockType, className, mockedPublicStaticMethods); + getMockStaticMethods((JavaType.Class) mockType, className, mockedPublicStaticMethods); md = JavaTemplate.builder(tpl) - .contextSensitive() - .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) - .imports(MOCKITO_STATIC_IMPORT) - .staticImports(MOCKITO_ALL_IMPORT) - .build() - .apply( - updateCursor(md), - statement.getCoordinates().after(), - tearDownMocks.get(MOCKITO_STATIC_PREFIX + className) - ); + .contextSensitive() + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) + .imports(MOCKITO_STATIC_IMPORT) + .staticImports(MOCKITO_ALL_IMPORT) + .build() + .apply( + updateCursor(md), + statement.getCoordinates().after(), + tearDownMocks.get(MOCKITO_STATIC_PREFIX + className) + ); } else { varDeclarationInTry.add(getMockStaticDeclarationInTry(className)); mockStaticMethodInTry.add(getMockStaticMethods((JavaType.Class) mockType, className, mockedPublicStaticMethods)); @@ -243,26 +247,26 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl // Add MockConstruction Map mockedPublicMethods = mockedMethods - .entrySet() - .stream() - .filter(m -> !m.getValue().getFlags().contains(Static)) - .collect(toMap(Map.Entry::getKey, Map.Entry::getValue)); + .entrySet() + .stream() + .filter(m -> !m.getValue().getFlags().contains(Static)) + .collect(toMap(Map.Entry::getKey, Map.Entry::getValue)); if (!mockedPublicMethods.isEmpty()) { if (isBeforeTest) { String tpl = getMockConstructionMethods(className, mockedPublicMethods) + - getMockConstructionDeclarationInBefore(className); + getMockConstructionDeclarationInBefore(className); md = JavaTemplate.builder(tpl) - .contextSensitive() - .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) - .imports(MOCKITO_STATIC_IMPORT) - .staticImports(MOCKITO_ALL_IMPORT, MOCKITO_DELEGATEANSWER_IMPORT) - .build() - .apply( - updateCursor(md), - statement.getCoordinates().after(), - tearDownMocks.get(MOCKITO_CONSTRUCTION_PREFIX + className) - ); + .contextSensitive() + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) + .imports(MOCKITO_STATIC_IMPORT) + .staticImports(MOCKITO_ALL_IMPORT, MOCKITO_DELEGATEANSWER_IMPORT) + .build() + .apply( + updateCursor(md), + statement.getCoordinates().after(), + tearDownMocks.get(MOCKITO_CONSTRUCTION_PREFIX + className) + ); } else { varDeclarationInTry.add(getMockConstructionDeclarationInTry(className)); mockConstructionMethodInTry.add(getMockConstructionMethods(className, mockedPublicMethods)); @@ -280,20 +284,20 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDecl if (!varDeclarationInTry.isEmpty()) { String tpl = String.join("", mockConstructionMethodInTry) + - "try (" + - String.join(";", varDeclarationInTry) + - ") {" + - String.join(";", mockStaticMethodInTry) + - "}"; + "try (" + + String.join(";", varDeclarationInTry) + + ") {" + + String.join(";", mockStaticMethodInTry) + + "}"; J.MethodDeclaration residualMd = md.withBody(md.getBody().withStatements(residualStatements)); residualMd = JavaTemplate.builder(tpl) - .contextSensitive() - .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) - .imports(MOCKITO_STATIC_IMPORT, MOCKITO_CONSTRUCTION_IMPORT) - .staticImports(MOCKITO_ALL_IMPORT, MOCKITO_MATCHER_IMPORT, MOCKITO_MATCHER_IMPORT, MOCKITO_DELEGATEANSWER_IMPORT) - .build() - .apply(updateCursor(residualMd), residualMd.getBody().getCoordinates().lastStatement()); + .contextSensitive() + .javaParser(JavaParser.fromJavaVersion().classpathFromResources(ctx, MOCKITO_CLASSPATH)) + .imports(MOCKITO_STATIC_IMPORT, MOCKITO_CONSTRUCTION_IMPORT) + .staticImports(MOCKITO_ALL_IMPORT, MOCKITO_MATCHER_IMPORT, MOCKITO_MATCHER_IMPORT, MOCKITO_DELEGATEANSWER_IMPORT) + .build() + .apply(updateCursor(residualMd), residualMd.getBody().getCoordinates().lastStatement()); List mdStatements = residualMd.getBody().getStatements(); J.Try try_ = (J.Try) mdStatements.get(mdStatements.size() - 1); From 750a45b48c13c3bfa242b4ff07f021fb9beed5be Mon Sep 17 00:00:00 2001 From: SiBorea <108953913+SiBorea@users.noreply.github.com> Date: Thu, 24 Oct 2024 10:23:57 +0800 Subject: [PATCH 39/39] Apply bot suggestions Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../testing/jmockit/JMockitMockUpToMockito.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java index fcdfa8f2c..c96917adf 100644 --- a/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java +++ b/src/main/java/org/openrewrite/java/testing/jmockit/JMockitMockUpToMockito.java @@ -15,13 +15,7 @@ */ package org.openrewrite.java.testing.jmockit; -import static java.util.stream.Collectors.toList; -import static java.util.stream.Collectors.toMap; import lombok.SneakyThrows; -import org.openrewrite.*; -import org.openrewrite.java.JavaIsoVisitor; -import org.openrewrite.java.JavaParser; -import org.openrewrite.java.JavaTemplate; import org.openrewrite.java.search.UsesType; import static org.openrewrite.java.testing.jmockit.JMockitBlockType.MockUp; import static org.openrewrite.java.testing.mockito.MockitoUtils.maybeAddMethodWithAnnotation; @@ -36,6 +30,13 @@ import java.util.*; import java.util.stream.Collectors; +import static java.util.stream.Collectors.toList; +import static java.util.stream.Collectors.toMap; +import static org.openrewrite.java.testing.jmockit.JMockitBlockType.MockUp; +import static org.openrewrite.java.testing.mockito.MockitoUtils.maybeAddMethodWithAnnotation; +import static org.openrewrite.java.tree.Flag.Private; +import static org.openrewrite.java.tree.Flag.Static; + public class JMockitMockUpToMockito extends Recipe { private static final String MOCKITO_CLASSPATH = "mockito-core-5"; private static final String MOCKITO_ALL_IMPORT = "org.mockito.Mockito.*";