From 340826984312ef22061875b1bc6dc70a64913b8d Mon Sep 17 00:00:00 2001 From: Khushboo Rajput <59671881+khushbr@users.noreply.github.com> Date: Thu, 11 May 2023 18:44:58 -0700 Subject: [PATCH] Gradle to 7.6.1 and Gradle test-retry to 1.5.2, Also moving the dockerBuild to use Maven repo for PA Artifact instead of git clone plugin (#358) Signed-off-by: Khushboo Rajput --- INSTALL.md | 4 +- build.gradle | 74 ++---- docker/Dockerfile | 7 +- gradle.properties | 3 +- gradle/wrapper/gradle-wrapper.jar | Bin 58702 -> 61574 bytes gradle/wrapper/gradle-wrapper.properties | 6 +- gradlew | 283 ++++++++++++++--------- gradlew.bat | 92 ++++++++ 8 files changed, 305 insertions(+), 164 deletions(-) create mode 100644 gradlew.bat diff --git a/INSTALL.md b/INSTALL.md index c0c79bc84..65293ad77 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -113,9 +113,9 @@ You can use the packaged Dockerfile and docker-compose.yml files [here](./docker 1. Make sure you're in the `rca-infra` folder. 2. Build and tag the Docker image with our RCA framework. - + `docker build -t opensearch/pa-rca:2.7 .` - + 3. Spin up a two node cluster as follows: `DATA_VOLUME1=opensearchdata1 DATA_VOLUME2=opensearchdata2 docker-compose -f docker-compose.yml -f docker-compose.hostports.yml -f docker-compose.cluster.yml up opensearch1 opensearch2` diff --git a/build.gradle b/build.gradle index 628cd5ae3..2ef75765e 100644 --- a/build.gradle +++ b/build.gradle @@ -34,8 +34,7 @@ buildscript { dependencies { classpath "org.opensearch.gradle:build-tools:${opensearch_version}" - classpath group: 'com.google.guava', name: 'guava', version: '30.1-jre' - classpath 'org.ajoberstar:gradle-git:0.2.3' + classpath group: 'com.google.guava', name: 'guava', version: '31.1-jre' } } @@ -49,7 +48,7 @@ plugins { id 'com.github.spotbugs' version '5.0.13' id "de.undercouch.download" version "4.0.4" id 'com.adarshr.test-logger' version '2.1.0' - id 'org.gradle.test-retry' version '1.3.1' + id 'org.gradle.test-retry' version '1.5.2' id 'com.diffplug.spotless' version '5.11.0' } @@ -255,6 +254,8 @@ tasks.withType(Test) { jvmArgs('--add-opens=java.base/java.util.stream=ALL-UNNAMED') jvmArgs('--add-opens=java.base/sun.nio.fs=ALL-UNNAMED') jvmArgs('--add-opens=java.base/java.nio.file=ALL-UNNAMED') + jvmArgs('--add-opens=java.base/java.lang=ALL-UNNAMED') + jvmArgs('--add-opens=java.base/java.util=ALL-UNNAMED') } task rcaTest(type: Test) { @@ -307,10 +308,12 @@ project.afterEvaluate { repositories { mavenCentral() + maven { url "https://aws.oss.sonatype.org/content/repositories/snapshots" } } configurations { includeJars + dockerBuild } tasks.withType(JavaCompile) { @@ -373,6 +376,9 @@ dependencies { testImplementation group: 'org.hamcrest', name: 'hamcrest-library', version: '2.1' testImplementation group: 'org.hamcrest', name: 'hamcrest', version: '2.1' testImplementation group: 'junit', name: 'junit', version: "${junitVersion}" + + // Required for Docker build + dockerBuild group: 'org.opensearch.plugin', name:'performance-analyzer', version: "${opensearch_build}" } configurations.each { @@ -412,65 +418,34 @@ idea { import groovy.json.JsonSlurper import java.nio.file.Paths -import org.ajoberstar.gradle.git.tasks.GitClone String paDir String dockerBuildDir String dockerArtifactsDir +String file_ext = "zip" -task clonePaGitRepo(type: GitClone) { +task pullPAPlugin(type: Copy) { dockerBuildDir = Paths.get(getProject().getBuildDir().toString(), "docker-build").toString() mkdir dockerBuildDir - if (localPaDir != null && !localPaDir.empty) { - // If you already have the performance Analyzer sources checked out then update the - // localPaDir in gradle.properties with the path. - paDir = localPaDir - } else { - paDir = Paths.get(dockerBuildDir, "pa").toString() - } - - def destination = file(paDir) - uri = gitPaRepo - branch = gitPaBranch - destinationPath = destination - bare = false - enabled = !destination.exists() //to clone only once -} + paDir = Paths.get(dockerBuildDir, "pa") + mkdir paDir -task removeLicenses(type: Delete) { - dependsOn(clonePaGitRepo) - def toDelete = Paths.get(paDir, 'licenses', "performanceanalyzer-rca-${version}.jar.sha1") - delete(toDelete) -} - -task regenerateLicenses(type: Exec) { - dependsOn(removeLicenses) - workingDir(paDir) - commandLine './gradlew', 'updateShas' -} - -task buildPa(type: Exec) { - dependsOn(assemble, publishToMavenLocal, regenerateLicenses) - workingDir paDir - println String.format('pa in dir: (%s) will be built.', paDir) println String.format('opensearch_version: (%s), plugin_version: (%s), snapshot: (%s), qualifier: (%s).', opensearch_version, version, isSnapshot, buildVersionQualifier) - if (buildVersionQualifier == null || buildVersionQualifier == '' || buildVersionQualifier == 'null') { - commandLine './gradlew', 'assemble', "-Dopensearch.version=${opensearch_version}", "-Dbuild.snapshot=${isSnapshot}" - } - else { - commandLine './gradlew', 'assemble', "-Dopensearch.version=${opensearch_version}", "-Dbuild.snapshot=${isSnapshot}", "-Dbuild.version_qualifier=${buildVersionQualifier}" - } - println "PA repo located at '" + paDir + "' will be used." + from(configurations.dockerBuild) + into(paDir) + println String.format('Pulled PA Plugin at: (%s), will be used for Docker Build', Paths.get(paDir, "performance-analyzer-${version}.${file_ext}")) } task copyAllArtifacts(type: Copy) { - dependsOn(buildPa) + dependsOn(assemble, publishToMavenLocal, pullPAPlugin) def projectPathStr = getProjectDir().toPath().toString() def dockerArtifacts = Paths.get(projectPathStr, 'docker').toString() - def rcaArtifacts = Paths.get(projectPathStr, 'build', 'distributions', "performance-analyzer-rca-${version}.zip") - def paArtifacts = Paths.get(paDir, 'build', 'distributions', "opensearch-performance-analyzer-${version}.zip") + def rcaArtifacts = Paths.get(projectPathStr, 'build', 'distributions', "performance-analyzer-rca-${version}.${file_ext}") + def paArtifacts = Paths.get(dockerBuildDir, 'pa', "performance-analyzer-${version}.${file_ext}") dockerArtifactsDir = Paths.get(dockerBuildDir, 'rca-docker') + mkdir dockerArtifactsDir + from(dockerArtifacts) from(rcaArtifacts) from(paArtifacts) @@ -478,9 +453,9 @@ task copyAllArtifacts(type: Copy) { } task copyReaderMetricsFiles(type: Copy) { - dependsOn(buildPa) - copy{ - from ('src/test/resources/reader'){ + dependsOn(pullPAPlugin) + copy { + from ('src/test/resources/reader') { } into 'build/private/test_resources' } @@ -488,7 +463,6 @@ task copyReaderMetricsFiles(type: Copy) { task buildDocker(type: Exec) { dependsOn(copyAllArtifacts) - workingDir(dockerArtifactsDir) commandLine 'docker', 'build', '-t', 'opensearch/pa-rca:2.7', '.', '--build-arg', "JDK_VER=${buildDockerJdkVersion}" } diff --git a/docker/Dockerfile b/docker/Dockerfile index 742937539..c4d84437e 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -52,11 +52,10 @@ COPY --chown=1000:0 opensearch.yml log4j2.properties config/ COPY --chown=1000:0 performance-analyzer-rca-2.7.0.0-SNAPSHOT.zip config/ -COPY --chown=1000:0 opensearch-performance-analyzer-2.7.0.0-SNAPSHOT.zip /tmp/ - -RUN opensearch-plugin install --batch file:///tmp/opensearch-performance-analyzer-2.7.0.0-SNAPSHOT.zip; \ - rm /tmp/opensearch-performance-analyzer-2.7.0.0-SNAPSHOT.zip +COPY --chown=1000:0 performance-analyzer-2.7.0.0-SNAPSHOT.zip /tmp/ +RUN opensearch-plugin install --batch file:///tmp/performance-analyzer-2.7.0.0-SNAPSHOT.zip; \ + rm /tmp/performance-analyzer-2.7.0.0-SNAPSHOT.zip USER 0 # Set gid to 0 for opensearch and make group permission similar to that of user diff --git a/gradle.properties b/gradle.properties index 9398d1449..755130d6c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,10 +3,9 @@ # SPDX-License-Identifier: Apache-2.0 # -localPaDir=../performance-analyzer # Below were added to fix build issue. Refer - https://github.com/diffplug/spotless/issues/834 org.gradle.jvmargs=--add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED \ --add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED \ --add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED \ --add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED \ - --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED \ No newline at end of file + --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index cc4fdc293d0e50b0ad9b65c16e7ddd1db2f6025b..943f0cbfa754578e88a3dae77fce6e3dea56edbf 100644 GIT binary patch delta 39261 zcmaI7Q*b6s7cHELZQHh;iEZ1qlL?;Kwrx94Y}=lAVmp~6XTJKc-oH+ri>~VG-hH=v zuU%`eJv#{&whz`o_X8p9bj_0r76ilq3j~BV*~u6)S&tSM;ET6H@MS>%ar7`EI;(;y zlQZ1J1`iWB3$dR2ZBdx3P?Qt+V{`F` zy>+1vQs+xv%CnDWQ;qYw1EBBd?DzNQi|-tgkoS!r2xs&YtU<+r%XW##Nc7RYNk_NX zfULTjloNyjplt6L*5UaO!@pYv)S&cW#VeMm{q;@T? zQP6J1fxK6<*#~Avw>qPvsx#DY#&pluI|ZTNr3VV#x}p6(=-rwFA8IuNAL{ITV6cJ} zMaoT`V4gJGCu2LbS$8BDM5B^NYm&!FiBmu#H2>{lKoRQ8D{pV%LH27}kYjbk9v^6Q*ZU?fX|5!a1m8!T$IJBv|E5ntU%6-BPhyu`e;voj zi;4X-K!yEC(hwi`pZ4sDlv=7Q(O>-b&>=G8e7ql9zesZlcm$ucQ>qc4-JVYhrr-)F z#4z|wCo+0u3+T7qr25w!5S4Z0$8GE)X##30Q0GI|01I72rN-6mk-EA}eo(sf5EYqLR zxycr6jznZK_?S8em#-A3O^EVYl#q-4Y?NENjzDQQQEOL$6w)}k;K7b>ZOM)d$-_?? zC3JEcuW*@{%cCTdZfMOQ{>5pI7YW9r>3AGMNx7 z5mFcqTS{Y;N43fdtPvneZTTW`rN`lVA_+`2FcToyaK-sO%N87V!3nWzj(RF8I&y6x zHuyV^MlO6Xce*BZpH$2FYuVg=5=#S*5g`09rVUv~)P(G*PH9Uf~fGa4wk)X7Ccv6g9iIwWFeJXU>MOM)i4i*l0Pj0n_VEow`8vED~*5I{>f`- zkfF^hhW`wGmcp!q0LLJ)%`1X`^`0lLf4q$IFTi>XRpMId z-moNcLQ=oFFZo%^RU2%P@I1aQwOBd$WF&z}J;uNE6xo< z(0vok$AR+=OCftBVSGlyXa_PN&@6BEj8$2dsTJ!t)oS>6I$o&e$Gu2u?PS9X-gAa^ z?xm$E^HQ7Zm^njBxMjw#QXFO2vqZvfV*ah%!%dvyX)l6%UIwePIFJ!1{wXK?I~j9D zlcQtwLv!Z%;G2!NQ@ChdSgQ?>o?e#U=P9160UQ+D$44@S1W_mP=jNWp}}Jfl)LS zJN1jLtJyE%u#0Eh8+4QJYJZZY@lZ0g#d(^&76p@qJtVLwls<72v@jFx<~H(W)lq_O zDT`R{wfT5`M?l4D9%25PmyzG5$uj#hF%_h0r&emW?qs1{D6NY5hb-B>09~fkp6!Fs zomD+3%F`6H^#cr;)tAa0WE&xFatD$M$WmN4MWc?c$q#TOO27Y1uE53) zUp$9& zgboP;sN>Y&j-6{TRB$R51@0AaMsk3W6OL^<*JO*4d55!EWj%`#VLI8D91gYgz^rJ+ zkE{n^tVcvQ!t4MOegGr#HiJypVZqY(;M?{$tVZP5BeNUf+KspzEMKn&3HhUX;xzMb zejzH3wJK;4?Jr$p3+P9N7d+S!QV5Jo{$@!5DE}shWD%>Wb|Rz5F=CG!7-W{frU8Q) zb|OHZjJYrKi6QC5A@Ied7{9`tR2(!baTqJb9-%3l*0&;dk4kJM*Z{T8dtgYFkHUUS zziSV4upwMW))GQ|cOxUX23bA%QAVJCm7o{Ms~5Qv!7UM{#~Js_saJtlVzT})F0slN zFlI60F!RR*Be-|s)3c76%;$l%Y4Q$x{J<_wTo==^aXHye=k^H`O0W$_3t^LYKgNQV&SRDWf%eEz-ci zo!$qaZ$S+YZ(y7AWk;Vk=+#Ss=$;-qpnCPUvs&7n;cV@9Eo>glilxO3$Z~?jLhS&pR#Wkd)w1Sjh_l zeu&>|18e0*A7~Y7PNo%-g-YszrOl8?+#4V@c8LF|-*E&~(zN4jVh^_R8N4n<&4GRj z?j3q$v?0Z}Y^P&!LP66CXILd_pHG0!LRUlXiJbJvKvel~T@#;xEneR}E!SvYss`&X zmXa(O_`hNj8X5!yL>Odil+l^#-;V9yA_Gaz+N4PS>w<>A9LPEqjS2^=673evh8nG+ z3XGC@kYROIweJ8)z-{JmokM{+eYNhB1p@);OGXHl2Q)A!RT2M2p%YtSE_#@vO%#W?hBDWsM#+TEMxMw{4O)bdDbCtRizCZ^*d*3I>)h>hmXz2|Lf}> z<0nxXIXkI_qG){x3iGDN!>9TsyuZ%SO;Fu80|Aeq2#QkcR7_#^1fvPp?FgG6Cj8*BES^CTm~}6O4ZwA?-$+4VYqhWH9Az1px2w0;EMbSa z5Z81O^=BA!X-bP_$PTMAM>|e(u>51bK0LsHr|s-)?)7-=HkBuZ5t>FjuJG~P77Lxw zUBY#8Y=5EZ#BaRLpHA--$KhZebs=AmePD8G3a#N9C#lSn`?tsdZ5 zTN0s>Y2*Q_Y>nXvQ47IRf(`jqIa(Dt@yy*uhbLn#mx}IZ$%H%UcS6t00b@rt$;Okb zasRfb#AI#_zzAKiPd|&R{9~e~UNk5J4p5ub9x*$mzs9b7LZGlG%wxcGrdQdeg}J(t z?)ig1*$6yS)9rRuf9kPW@aNujl>W+t)U$H>zAz!R6c*?EoXBw^ zzqcsvEyfB7|FbX;1r!`WdyB!v>Misjc_#=2yKQB*J{Pegdh&rvSVi2^hm*9rh$f`P zeWq^;lK2_WD9+wY(b8ZE-GmV>Gw$IcW{%!IFN{8X&RMI6?gTEpO_HOKv>Ny+l2E+L z#M}jIrdoo*y&aWDAZbWfur8NKr{#YXRh-?Q*$S(D7pzpWDJ$0bSol!;gZD)L4 zXHa&rH8=NVZscx#{e8NE3c%TBE-)SbiCerw9(zWOD`hg+Pfkyu%3FrRicxQHQl#S& zGQ+HOZ#GjUZQyQSeZad)#)#+P?z{%D%p-AMLWu)J8+)<;_N$pr(0i-`pQ9PNxA2=u zi+{_KO)I9TAKYP0k6RQqT?8DnV>h+0`RNM!9`fZWohKo;>A86q8zQ+E+R}EkiH8v?iXj7dEwF!O zyRgwRysHh_K)Hl#-HEp}uDtmef8i+7`y428WcIOYovP{jc3Y7Xq~oL^I*r|}pA{gr z)Y5P$tsxMY!38%S*iT0J%_;jW?EYb^q@5-WuEDJ{TR;#UQxEIVdPi#{>GmudT0yvM zFEN=u2d0g)0ToEM{v~>bq9h=$g2ldKX?8|(C1{O1gOhyqlP%gX zVVzQa2n9EuSeP%rIJzfbz<^Y;?W>IMo*NQ8X^{2(AGDxzOSQeNBjW)K8c}ve{Dbp4 z@Uiq%prarP;W1Dx!9`>*1QV9x4{WHkLv@Ni0T(|S=H2XnxRNMITS_fT2}VDV{35B@ zP+C6FESc7?D%4nqT%3+Av1u8XNY2p=HH7x|9G4tX%p4(TxDvn-j5W)!aaO^GkCT_i zVnH`!$G_|rgFQvGWab7m~{Vo2sm^HI#jv4i0xuFJ-X&V z8e7x$5ym^TU$k2pK@w}vU)%DVc}eSXA9AS6b>gK7xqnoVC(yO)zuCMg^!;{*1>)*O zen`JqZl#sN62dO25f(y$gQJIFg0se57d-mff-c-_KmJ!x7 z?PR;C`{|A#*}YVhp1Wz1uxi7{JA^~BZl@;O>2AoNE`>U~!rt0csuQ-(6`B+<#oSUQ zRHgkcKUB2^2$iU`P8RMk&FXB`P`+@_U0%#1F4jj-E)l*`YK7y;ZDfXDo(`(j@%W0g zUzUrD$AR2wy@*D%Z)z3D^r`VLE~Bl|R=}{EVxHPim`LGzMBEA)sMj$U)(;nW_u!Ds zmvX_n{$c-Mzok|mhXjw*rj+XV&dr#uM<9${xax5Os8Y;{pHenj_apN@CK#+q_UW}` zGs(ah!WV5x_knjQTy0>V#7RsTBH&#L@_{&EDKf%7;l5@gR~)Vc{{1-MvIjZ}Ud4oSAjzlII2l{zuz4}Z-jfN1l|@N5 zgDk7G#-0=9OFZJ!`Dnz&E5(Qbr}@2!ohQ;EaQ|0)7NG$c~tN^b4q4qRN)Y4AB_ zf8<4_JxR$@Pqos%40_nVlOssEE@bo!?Gx&jw*7|lO8@wd?i`k`Ar69+Wif))zEe|5$?vG9=gEdILaKuZXCC+q;%CC$)enM`9D zts@zzBb(BwWYF_0F!T^6_^HVfC>=x(&`@o;Cy^4W#6~r9MdwNwX6GoSp_1C&9e0t! z4{Rnu4s4!LdMKe=m?pShC-M9oWbQiPj_aU>isNbRKfxcvPse{AK4-1tHnjZR*ck9) zZ6F@dYZNy4KqB)1B!54GKUhYbgH|mB5zFs}T!652!Yaz2-6NX_pR@iFN&1FB`)`i8 zwZBD`P5z441~h+aRp?eiR24y!%Ji8PGL5!aFH=&=pG&F?ezXvr?=@{rJ46CTzUQ$F znePT(FC9rwb9dwsFl!@`a`{|Owq0*{azFj=j_Cq$ZE!NyXN`oJX!w_>$k6zB_1Tp< zm06U{rMODyf++`sIGp`=t z0kSOcrN+LFwM;dfk}FvC9c$hXN|zU5*{(d?6GP$awAVxJjgdG-uRUqurnFdudj&ss z0neyDaxjvW8b3KK>AwiT(c9Pf)5?25sY_~oGvyNod^}pAG#Gb@~jJ@M4kLo zKNpb=vGJ5OXpcblkH8pVyD*fdwBpGO^&1UkXuf0TWDm$0qkT*Vv^gF21s?h|ABE2w z!{N{TdHo=hHodnnwN!sgDa9{RQoPowKzyxu={yy76R7nSM0C=Aw^j6OfLOxjZm}5j(aTg3v5KGsuB@h{TLa83 zCgkG(!pJ+^-P^BtnU!0l2yF4apYn0M?)rF7GW>qK#{-#pRg++FNLLQ$Bj2Ve#>SI{ zDY|QlOy_2TF>sUE0nn4+2nj%81V!LZV@kA&ggy>i@Ntbuw2oVGbg} zVX;eYB=CHg5ny%b?}_m;1b<;W3S`}mfb#a18XWTdgfD>YbUd*10XHs8c~%{&0g89&x}MI zTCQKSlWfOQEa}rDzLZ7Qa)VXL4{Mk@IPB*q&x;ra7a^r_)|*+O;Fn$Qh24QiwxX}O z0Qc2!SCTE=n7of;*eqC0@rYGZ4c`a4X>Qt+%g@Mf4SU_CT%>+^%CIHN2ktOTJCqvZ zIz;#PZsPo^1vHey@>y7nu027AY}SBldqNhwm40xYJLPP z*v8dUZRKspA6v7IK4szP67o~{sdO!>bLCzx%IKWj?dyClEO0j?(vCF~rxc7ZNk-c} zY`_BDn|Uy^t~}1R^i;%+tgm9sXBEz`{}o#8CBU|8fW{nm5x&&fWhpAtF|{j0yJGtq zL}?Mc*Z#EcpAtodmf)I%+nkUSif-cDhi{=1SW~8l`zEU`6@#?9#px**0}Uqvg%;Bz>rSh`oziv`9PJuvp~f8{az=D_)FC;#Yz^1LTpxpn83(c8{q|~2{z(C$Jrv&{H58_?Q_X1 z3Ic%psepbRQkGC&vM>u_h}ei#wMpDb1sL4Qr2U$McL8&qHxF3543B)F+*RGOk;BeI zdV@9-ny0sx(! z^|%+Lx~XxJJspN68hZo3E=Me9!rp}V$r`bbN~+|{-g0&IxD0|%AQ2nDPEGF7YF`Sq zikD;IO6h#FnrXC34wAV3tB)h2wuPb`R(I4;Kf~I;=~L;#i>99qVnvRW(eQL-lMD=>?^UIt!c6RyVj3;AtWs>S>}M z-Hm3edzq`Xi@ejmpY^j#fIPGj&{78lCTrft#HHH#hz&h)G;q&=!*L zNM84L<2Kymqd$-0h&c!XfPH@*H*51t@NmR=dO+59Mq`jJXZ<^r9$R!S=S)6E-ZiOv zMP#`X5PyQ&rtu$6c!l8`nZw5Ho2NVD@}-D7gu3JNM+JC&MI|YEsQmU&$%($h@UDwy zO?`Oq+8e^;k9P+Ojt4Ke^E=qKc)@1iRAE_lThQ{OXZ7&>f6~$)Z zt|Y_qjHOD}brS>s+#__e`dDrHMP0>) zh4)h1Hb=$$#6hZ>Zzn+-oe2;_o{IaW}M_}!Q>aFtv(Q$ctGHoPnTym>=LfvD^_bV@e zgJ9|{k=3c{-YEy!PGWpXu>I4k6WKGg;+sY$7UosKfNS_;v7?(os4uQyz>g8t+S&H74GskjCpPVmW+MZsTIr zwD!KAznHHWw$zMi-_RVR30sObm`fGM-CZT(b`7lk>+h0F$_A3cGP02K;hUaQTCu+^ zqgukX8XwW_2sBLX5IN(U%fkil3suo9U+uWr$F$RsrC??M@`WctcVY{-npk52A{`m> zMqh-t?D1~{O_WI0K0X(sfB zqgLR(SQHr=Mzbv5*zX+-V{UL+4#ycoE6^N7rzlabz7KtVoi61}QVVM!mLXvzjBt5_ zt-3YjXq9{S<_}AcLNCt)~`=u(Fv>-&4cI#p5 z8U)KgHkO6{3*~SFP~&9yToq!V^8t`Ng;Q^`G^GTq+e ze=Y-{zX$t3%62|6v5O^^@DP`hxpLsA#z+bz1{gsrgh}Hy=C_RnY#xeX=>E z`AVg76U^DV6$f3J*C-vrJv@3Ytz$|@L&+6@45zUD1lmpU9 zF*si$j0qA)5J^A#Gj;C8#FuR-W}mN`_Fid9(eW@SbF9%@mvk!3Nr@A{kh|xM=EMQ~ za~7S^hG_q|Zx04Vi4(|bS!BRXn;nN*Msdgj4Jy^|hTwyHwpFe;haT^^UoONEmigo- zgqyhlgL$lSpR)Gq+veCvc@K|vK5@lqKJ&+k1q0=EcRE)Cc#5~IjxE!DavB}kRkFFb zv(@TL?n|!Tog;8@#XM$o z+@c@MIV9Cm5zMvHWLSu_F@vsB>y{Mq`)wzpX$fDziwrvG-R4&%8bV;CZaoB@3s17HMBWlrCK+##Fn(- z5RVRm44J}QvrL2uWF7VWx2aJUGK2F$v$4Y>i)zw}Y&D`@F-6WIIb23-B4lq`*TJCK=71zt~N z^e1Mp2tQ|nL|8_;3?yd5II|1p%Uj&x>ScdF8a)m$k_A#?V2!zKpGNddq#K9z8*rz| z)qZ8;HtCMevEUQ-xcXr7_ZRjZF{}{x0_KoX`V6MvV)DsM+0{yfLwf+CW|t-InHLi& zc6q*Glz%5|Y_f&4jz&zzEbtK_h>%tr&urvWE;~FTbLm5A=0I>gPmUnTnzmo9f<8_# z?PruVHs!Y$9Re8;R!Tm_SOqN<9k6JPcg0%R5-9!vwQTnnB+?Q41H%3gS=#tHF@M1s zd{{8OsT$_SD%;z{{i^hC9Q+WG<#2uRt-hV$E+#Q{QG?WqO^%!Uz9p zt{cCbi)sJ2=P$AV@tRX9V~KD^ECdLIW?r@FiQ~dB?+*FZ<%WX7f6at;eZFlYCD;)H z$ky{KZTKPgt=7CYB!DNwcgMOrHJi#y*5C$8FT zCo>K2`BPU}!)Z1(orDHY?ueU~fC?Tt z_cWyFEF!-{LM$PzvPfmHzY+hNh-=_S@gb67tAzmij*CX<{t7hcaIU^U`I9kZ=io-= zo!kK{(uLs=J6Yzg^&L3&8d-1K-yRa*$y~p!4nl?ciOl&Orzr8rrIMe0A9?1yXT7&} z0sdd0P627L>{Xns6&82H5(tV6ms%BQtV{xD;`Pv#zYar;Jc0^kwXS|G3Up(?=syWR z`pp7TItPBfQi*u;=8?~wPQ$@;m==m?K9Qn0vwj=MXuA8NgfaHnxr1@INXWqZt>L`p zEy0YMl7x4Ps%U1@I-h$<93c`$Gxg0%`9#1HDIm?Xy+NU6= zSeB~J89>nh9E^2!0=IIJeX9T^idjr3-6%`N)C9-$xA;_Iwa zTrOih@H<`Iq0)ByyX&${w(GyKm=Ee(q6 zx)z*-SGyi@?|RzelrT{Q89`(80qY4c=;Xr(%zxJzk)5u%Cr@U zVdO7UouP(9Y=L-ayF-*GFfaAX9ETY<*^_N$Das<+^C?JFp-k(z$&D6KQ>wofHGeI7 zh13FTP!EX?Ik)6XUS~KpOje7n4H<6c>DmR3RzbY@8X*f>LC=BFMdRWVJTPou;;|%?5%aK>6JELdCYaO|Z6C z!*J`xS5~vu9z*+`@1JC7krW;IX?o4`l5^vGq6;|T^E43rdNc-MJFdiUIRq%4-&sDr zM#uf~E!Y<&aPTcStbdg{x!q;|t3M>(XOVk!XC*q8A%;D?@0Wm}oGuW|k6X z{TjeGWhD>mhJFB6A7e~sx&koG(b-pxS49t2#n`<&XAz#TuFcMf9%79|!e1M%FIG`l zGHZ(4U=>fU%#vGT(NtJdrdYx-FQgRb#ax6{sVUZ(QImE<)QftcK zJ!OJ#shBnoC)3=@s*qf2pk1cMCpl*BQg{9@7}vbu!M)>W+Jy?8yMeZ_@hPfy`(?!zwpSYjw$njzv+6);j=qIihk?M#35xBzpyX)|XbE2U zdJObsNK+OE`#B9s-CCM+l^s;B;%6(lWcQ$j)p4EyD|&<74XF-JsKFVthIPA0u^Iov ztQtj}f?u}8HWrs%!U@?dPBdI{?P*5KQK{878q4-I)ph!9&H(eLD)lMGDzw+Mf1({> z#c2$bD28(L%C<%$D{{Hoen$`rithS|zBD1(VudXjLCHiVQd=0<-7GbSUK$VIoIe7@ zU@Zn`aK{wc!fMp2RRNEg2771_2Fy+x)KD42+lU+6ka(Pt-oy=>(gvAu02p-Cem{B>&)42KRb_ynr+qcZ4YpLg!4;uv4;% zj~9F10~LiaMhem`E>0|a#){SQQkg`?isciI7tmBh7*qeerV_mCEofWmC>E@0hmAK*qA?V2=Hf|EzW9_kuyh1Rx_4YmcY z`o6Wml2rbzdP;8Qn!D^Y2pC&wh7{t$U$tJWkWQuq_gO2GO8CK5&m6muBt>n;sr_RQ zeF>5HnDU&?v7Br@YE<5==yopoQ6__+Xlf}N?J^7efydBhvFyQc9x%rr z2>8IBrPD~$KCMa2!Y@+E=POmstc1$Sn%1&AufbshUxI~_3?wC7(B86mtj(#_$m2;# z1)Gc_kLHOA^(0K+DDN;JI*Z|K zVn^jT`bF`$9%zjM&ruzNa{eUVF_3_FOeyN15%!v7$907H)e zfs+a}UYkek&nFX0*kzgkPL-NuF(8mJbQ(TVr7zI%z+Ut^F&muu=)$GGV5Mqalm*Z| z^Y{RLC#mx{w#B2H9{ZU}Vb|rmBaPX=+AZqMG&h#TRh9~gjstbwZc&2;K>Q~@L{$IF zi+FX`Vfnm73)?0Ca^c7ytbPJ4%(pndpwe_8p@+6Xf5~KN5a-U`w3cKy1&~3qn*>$4 zz)puvXwp6U*T1zt!69|pG)GxI*^%x&T-&DvLsx8O^=HJ0&4~qV3T=tD*oMTjVm@Z} zHIho7(lR`|=UcXSRrt&w7m5+j6wyB0aWdMosxCe=PZob2s$;a#4l>VXm}6AP;g4So$mdpYA(aa3 z>qm|@#o<}>Pzw~>Q#PCmOyASX4MTFteqooIK`~5veYaIl1ezM*<1gp#l?EH52qWTQ z{3MEt6~Ph=(I4W$s0hE5^Vz7QlXo`4leA~Keho~|0g!NExATu|`vEnDh0g);V4~u2 zU-{7BrTHhM>?x)c4-X;}6K4b}Onpe$HB$-4FUB|+G*b@c=Ul zhcLsJ9o9HcN=4mtxLR#KH9@&_V;GpZH3tv5CBN0UA{uA0+-6&l3W;(5!g9a1KEvC# z{|!`WD1a@q6QmUFDFHAokJK#+({b<1VjkSQQQh z90y&#LYRA*u$h}($WF$PY_EU#)yxO&TexO-c6L>$#JX61yU{%1?Q5l(2I}atkNKXnh-Hnn}+IkcgpAPBHaMP6w-nn<3!)C&k^OLY`<2p7E zra+FzhFp;Dmw-LcPnO_LrTA{t!s;k^MhTSn&;FU1-m{LC;N@EdUlDve)2{E8uHeoV z^irWBZ6dNFR|E*y&JN8~i5AZN#4HO}fKc&#PsBO11&}B|>)4ED6%8C&wjn;T7`Fva zin0fl?_4$^dwcDg+5f~Dsy&Fcc+uJApvPruH?#*_-8R@thJW@H-9+VG?+b(Qd}fb& zl@DJq^c#$O-vf@&+= z{jN=0LP`yK)YG{#aX6dO*EXa7@H*AW-{U2Y%7501j9YP<4peO9be30w-yDUk4xhF# zZssR0Ap-FC*jtJT1Mtc#s?vMt-SNWrWHr7qzr0x5-`lG=9dkNG@BOf?y>w3=JbD>^ za{A;j3Iaehotd@~p!U3BwLfZ7J#Q@P;G??c7J5AH(GhRnU57&g}#* zbR8?_^Ys-#nR<}bW0~SDFFL#LxG;tL32>WpDUg)T$seftF!xR#K0F$M!qkxth(#A{ zpUh_O21}9h@H&{S7~~m%$!*z zmDV{;+Oa#IYstrOd}m`qlT;@#^36dGPY%E+UZTsGt-R*vE1``vOYOHEg^Z#2p*(pK ziX9%!92%(QQI79$=l_p|zSfl_>(+_G5z93{zpojw~m5z%dYWu26Zj24N6GXD0H#tx8b zIZwf~2kVWoHh$BnFW8Ux2E8^_4it_%EUTd}D~tM+WKMGNb`m1odr*)YRfhRycG>zLWQb>l|)KXz@uDt;DU>W_p>CevG zqN`Yq)Riab|Me0=-xS|>lousoC=7F2{^wFLa^}y;S zEbOKAH}+*TJxaU!_4hWX)EJ%SYVK1gUGJyq@dvfFwVIb^fPnT#WDA({Njv1h^(Jsg zby_pptAULjs^3i4(Z>^ys8(1^_N<9Ou3&o#KTi@}>^)L1oTQ7|vW5Liruh^>bRSSNS z%z4qhij@q>W&4!dQ{j8a8dN)Ud-$j)f=;iK39El$|icArWrwIC^zK)dOf$8-Q-PhYDiU zK{0QfxPz99a)(cMvQ#>D8tpwshWq~h>xy*1e=UMygT958V0-r)jN#iC5$MY!_=(Io zuJOp`TlY8U@9{HTv1l%5s|~^%IF4(eRf9hX05c|MXynh^vTQJrdDe~$P3TT%i5;CNxHsVx zw+A!q*3+ZLY$Ie~D_tUf2#zYEumLEGEhwH*SYF7ceRn3^x}tGhgAGY!*QoZB1bOr8$cN;C#mZ0yXj1Kw1 z!?AE&yU-X6$EyoYZB6hS-4+FBdI$t=?HK#%L@N!h)c;oKS`r; zPQ~sK?9KIX>tk4Y>R2pC=ec&8Q@)UF!-r-6^w(#?yDKiOkX;iNf632px=_c`8pPcJ zKm}XW$y+@TRO3efUB!6ar0!EuHeURwf$lS==@c-fA1!ey^>fQkO3+be^>iEpJQ3<16DmE{TG#{23sBu=DzkzVBr0Fnc_@~Ix z%l?R*N}5v78ZLUNIj7!g@~4RQ-BZMl6?$-cg9E_5AX#_xHBr9f>D+qijdWbx!d!WV zcz@9>oKP1(YfZuxFIeQVI?N(A-%I7PhO3rO?+?>7NB63|rSYq_9Ny|cO(?4||D+-q zNQvJU3=65Tl#l4cT+B zz5#uQv#cSxINp7V`k9#8YynJtJy0Zs@O2Krru_btzcWxM{-6wCHwxZv6Ni{x^rneU zw@8>1L<~R0DhdS0y zs&>{+|DO;RswV5XB!T`#*+e#?;RUTSSX_xqD2<+=LmWyDV22Q~vX=MC2%#*Aj%4E& zHJ?ZwEjcU8{)&7>avLggGj`cj?YxOUKO@)x$C?(7&g_Wq*!3hT27G-UQUpA_)&=kf zfyN!8q2=pvJ06Jqz+zDk2%LL7OA4L(mEXo({At0Uw{U-=lhJ$|8d|N>Yq8%M>J7(5 zPmk_|W{9{4pxa(7t7q^vEgGH&h)bxxdiSr1E^?Ow z2Zzk_q!>I?cv@*x!xmI>)PijWxkOOdQ{cgHXcEQv;Wf;A@F(BthXPZCFv%IkXg3Uw zI6D0;x*tP?j)ljIZIm=3W2&0b9IK(JCjaIdv<)-?4pMI%AAW@|8D}zzJDMUq4eFS4 z8$^!&bDR=#&C2cQn=o4BGet5E*Hm_f} zwZdi3p8*3gs)l4)T5Wg#MsR&?O(Ci|2?Of@VqwDO4Y<`+(B3#m{2s?0k6nnR8 zH`QH*)Cv~#YLOlJgH9=Sku4Hgejj9Za6j4Oo`p+RwhpTgJ&IH=Fb;q`C z=Z$UKwrx9kJL%ZAZCf3uW2j@uX=QS+t@!V)+Ak zvA@tpB9kUQLp~yRQ#|LsL65e#91o1ml%MAiJMH(_l(Ekv1w=Ago8!!TFTnd}|9Bb& zP^$d39=GkcF`0LT)S+f$KI0y~a7w?!A=t)Ar-Bkky0l88yHSmWv>1tb_A;!?pLi>-b{Rat7!Jx&!bl zAd7g`nGIz&9tjycHJc7|79JJvCK85C0}hRw6KFD_^plse9kBc5lSLwlrlk@K^1!BJ z9#w|oAgr)WvIN_;=^PS@YR)}Yu2ouU*yZX!PcErnnMciMm_lo|PgRx9;7k)XJJ0KT z+O1UUJ#SQwoS||8=jC zvz_RMT3W2QKXgpZGkoul8s+IC3UxUyAr_j3zK=|1>$KfNbEN|&>{h>wGjO7VME8U3 zm(R078SsbCAAn{>Mbhe-y@`%*F>hj1Zk62wv#AVQ94nL6gP#{M9U=}sI#%vziErXpYM;0{7i_Kcn?7b$YFfGciQeP__I}jUA@{<6Zc4vuc17-%aon}y6SjI(sFxrb^M zx65)}{g#f(hYKN}f$MnGKx%I#mc8^`F7z@}!Isy|<67CUc+7Rz$@D^+WQ_aTlL8Up zhxkSl<+aXOF4l*6`*iTzkf7ib?9MOLLTfAd@ZJJusV|3Ya^J`=z(S{pDN7SfD$a%w zF>5mjMUfrxi60^o&!`9oL=h)Q@uwLcfOaMvjhl+mNK1mzZTJ)5H3 zYJ;A`!oIfe_-2na?+v?ydysSVbwZ@s>lU z^tej;RXfQ=pw`j{_{K4Zx^nrqJX3{e2c8+ObkWgC#Yv$;cQ(SK`K4Ko-J?j;&G;xbT`=?XtA7FZ`8_RRvH5lx^%%825;n?z3jYa& z0H`D)L|&k}y{oD?dcYIq17#Z?u1SenwOT}av3(+G?<}d3iV~B5gQJp8;N_Hp&#jMR zcSpkm(kl*uys`zp;3+)tCk~X-DAE^*;7i2rh5cXYd4)$Hzd=z*n`0KSXanGSma?zlx)rW5C^@X;84)04ZE8XJ}wCMCBXm)eVnM1U(^Zn;`__r(7d5aKKBDvvK}&?}||tm^#U+SGU+~*?~AXrq=1D z=?8F$eQXm4QKQN~?lNqX$1ow+(Be%&tDDDwkd#UJJn z9D*kNJmXkXLO32w?o=oJQG{6Y4YL#5nGcnzM%np&t$td9)J^%EeOGg@sC|wrrlEBN z97M}?FNi}|A$BhCWwmC?QE76V#_u{J?AWW^*;eM+1nE#E8D*j}hs-3yC9{-hOb#Gj z0caq-G8d>0)G?faez8l)ImbUH*O10zUXmr^L{g@ zG_r-Oq*7T$Os{D$qor&9K^LDRH5>@G4XB259Jn8%^>kO|BT$aB(wJ*9x3=iQKW zWRDtM0+7;x%j?sg9jr+6ie^eQCE&b)=vcrNI7%-t37KLU{~Y!DB|-QHQeg*>Iat|* zNBBhnkaGp7O1|*ozd>S3>${%}Pd?8Q65k=u9RjdL-QB3T5Zs3XhKvz@=L0QmUNoaG z!J^s*N+knCHTV8Jh?1v9I`n~#~?AMC!rz~X*! z;oC4VNkfthYg$;r+5Jm+wTYr2l*!HGLB0z#k29Eb}OPZ0jGNNlx`dpIf6xUe8SVhbG*{{9eHESPXG&pS3| z^r!+cUEy+ykef7qGZSw4ZWLDyF^B!XjalXS+}4->9oQG372 zfijxzKG7)ef-uZmQly^2s9}!`>~VEq?ai#N9!)4MvszSv1bhpjPnP2I4XOccC@Z=_ z>0Jh)&h&&n`44){t6gUAvQUKZOnR??s^ulZ)aOuTWd=TWMI?at_dJ2tJotWC_AQcO2|WH>9pw4+{v$}luyKX8du zm!}wV47I%TFF9S$t5xfVjK?IBf#nbo)$8>T*E^07M)en#5JpQILFPck)r#8mc_E-2 zc{cPgj0Q@p|HI6mJ{TM6dhf$LRYewP!uJWy3o2{k$=!I;bE8;Zii>|*ZX@aKWT%z-fsz*irMWs zIVW1!uCf&x^9O_7rlaVyTCJwQI`@zXFcDV@ZM8}uBaVi3!S|a5;xIodWuXwVg|RrW zyd@ED{annTr<6}) z9MozNM#!29WVA(m9@}dvr79rdC^`k|VPV;<9Tyq|YHI*MhsLz-0c3{s&H= zKpJZB!#hSm*3-(3b2ERg$qib7-7J%gos9Gu*44%jYddCxJimbr`z<%}?%>D}xl3}_ zm%TUccmD0?$IlTY5#9&T7@G&tw}cU-+d-*s;28cQHEYFOUPeVcEGw(qQEIy(cKGk| z+oF$jiR*b^+|N*f;24O(rFlm7FI1x0mx&LInBTOaqpvVAc?V@|U${hSFV-=6yLGl7 z^xK(i8B$?675S!j6d@1SbEaSUQj2ph;noi;&}U)j3RZmMVeA3}Gt3DCrnrJLPSIGw zK#yafNTtMqLUiVc7ZbT@C%H6^(6w{(gy-BrKFo<%i zF09}oeJ%{LKX3XhNUE{&&H2x71)tL2M7@LvSK)BkxZkDmfqsm!!$C?Fg1MyF<-#v; zE(umQs9k;S07^EWynx!<=a+Zf-_wr7uW$vnV$>^a<97wO&H-ovsSL2t=`gRF!2Pxt z`*k4e41-h-bz`K6=MYPmJXI4L^+)W8;0}=pkbe`fM92Px^34Uu=(hULHQU4P z8z#!m8?^hC+0t2&<>kVrJwtYCO4i=jtYs@^N}kJuW%j0z*fa9s8+0^_?g2OQu^WCG zH!LYZO1y9lWk+=Puk3i_ak6O(G*7_gjnXJv^j_I1)zQ30Zt7@}V%Fh|Y~frmJ%G28ojq`ZexJ~g(gJtt$T zheH%6%Sz6$O|T%vigmiipyyZ=tSotf4arNKr-x8o$6w`3 zf;4Bha#=?_uukxIR|#T=RJBirKlGz3+?9}gnBEOer-hpLSPmJWY|v+)ez;O@WIRUS ziR3cu?{OLYYW;O3`|Wa)1bkKx+JEw|*skTCIB;#1+Nypo+Yz4yN@{#ejVnn#4a#=2 zI05kc8|@^KP9UWKWq&8F-dYKTKkTj_JP+RTW5A!DSgG<84-TU)g??Qb-Lgn+>=DAGCO&FnsP#9hJV z-Sbm)+5%!`ePP18Id(U|(R&1STtx?MM z`X%F5_FWVZi{nO+@%DNEcSdP4>PJ`D)vyc!qI{Ygs_&t?|>-&36NgO8s}LRczp=lc0iM+ z`g^v3=GdOeI%X`qE?fVFZ3#UBrjJ4s9B@LG`zP7qkJKV)MmK3`cD!$eKgW%0K01w$ z(NoK|Kk4=y4>5`kYRdV<7U(LG=AvQqfcMB#)i)i8D4NmA){f>&)KffSO>`EWNC`-P zT<5bH3;m)2`MroukMa2_7PF8;GZH#-_G+=`yRKzu5qn+kHnmVu4Ro{7(%q%EIx`e8v!!vAoydv)&AO@ez zJyMb&KqJ9yS1(f*gtmxqtXI5#!{XcdG}+q~PRi@Nyk?%zMT@dRW|jtq$6Yo=Y0LVw zyoo^oDRw^UbvgOiLie4CprPg&KW6vfJ`r0L`yMNC2;a8=<~D5Gwf)z*UP_p?a1iEl z$EcO^H8$W1Vz*J5_WGs+O-=b2SY7@=0-`qHr|up(b6WF615P0X9JHvi;X9mzNdYyV}o(%V1*q#D2z%VB+Ive@=F3s%&daK zRfy5sVKt{)OE5M!9kB^#t`sL1XQs_HJi^EL`ByyR$oNGP2kDg8f5F+|V063BnVQVB zuI-2Ugz@~wsqOi6I04Tgk?pgbmnRFeKoo*9B&(R0J3p&;FahxZfM+{afPx#zLja1O zJd_5}R1t_-B1xr4jJ6DrHzCD?#7Fez+4wB9q;(GZGCyiJMA>NAiZjEFVp!SsX`tzu z1d*|X>XgOn{P4m44gKW0EH9s>CvN{6&49jJb&)m34ybz8&Oszw6)!l3kv=GrxaaFA@UAt%^_1 z)=yw06So4yKCybaQiO;-EP>{Ue8`r{iG9dcLWXPjYJ?P#B(+?~FzR{pyfahX!H_5k zVOX?wmYHLNh^+(={jHx1Rn3_J{GCXNDO&VTTu}l_T;+>@U5+C|Sgtr?6=6}U!D6q+ z$ZTMq!iU|!OvlS9Zb@H%EA!duqeCrz2|&_3|9!67&GIm}>qkeHLP*wzV_JKRxF`=z}VOT+vhj$~Jvo9_kIueR|ReDg(FgNn^u7UPne& z-?~pqa0?92J5%nQjU*rsa}&s>Qhf%?eX#S5tnVD+-G~ zvNLqWyG-zjI_X(1Ujr`E;bsg;t!WJ!u!ce=8x4&qJ8Z+C{ z5-MYX{doq$GX5!IsM7BWsxrBhr`zxw<_|NCui0VbkHX`gO74P%kX7dcM~?Ar^m#N5 zzL~t_Rb5Hdtz(C|cEV4k;0Y7{W9B)kwT#j=`Y!&~HkVHZ8r3qA{Ugyrb$xj_Cm~%B zKAQrX`I@&KU_CbG`E9HEA;J}i_@xs_rI|l~beRTWZjMF)_)lJF$`6<_qw8)UsB)d! zorBAN*rdJ~=LhcNH@?+vig6)Mwu>b+7A)R8*XUb{Fy4_S_1Z1DKdCIPOj5q0zScSH z0KKH7C1Td08>sC}MN`gmjug9mZ$#W*jI`(^5Zt>1FJZE>w~+0y41!48Re=TlwuJ6r z$KN1LPDEp{Nz`m-2mr`x1O0!v%fx>+8R>s5viub!V2-A@AG#*Nckc!Bgc+zcbpf6g z9!;w(v9?GDDk2=ruoW~Lh)BLTW!IoZ;#!8gN2(Bid8>`C<9W*R`v5KNumxHq#}<^% zxqsAhkxkDz(Ua=%+xyf7Wmgsj#nJtk@BP;M=I`t4=dIlLYf&UHtq|a}FdRLh3SW0R zR8|-p5GgiV!;Bn10cD^*xQNBf%*#3Yw*$g11>f&vPlJ)c32(0HL3@@&uaIbm?!>V5 z;~m8A$lnHlefIVw>8nI%P6NDw^Yn*DlI}qB9_5j&8;dP(S&FNE-HaRiZa-fN6E8`M zJufOGGLnsn_2)4!tSvxMUX9cqKVP@zz`KYS5C}~Kz59#APf7w!U=oVR*qVymPi;hJ zgE1+LDCx!-hKj;ZB>yekhMv7T-R5FNmGdl=lBvyAiN8?7oo@Ub0W?JpZDm2B%K>h3 zrp~TMaQ`H=W0Zq3LvAYK>hy}ZbRwPJA|vckY(yhN!AQHzoT?B;HwI6~ZB;{+W-9gx z=;NwOLUS7?yYv8GUbS3(IYtg)!)G39Ls`f#W<(iIasq#HT0#ebnYJ)*TuQLSluP&LILa8~&-`ENQ;2_^ks=cVli6RFu zcEu+Lk14RQN01q2?~6R)8=HLg&xD79*%UsF+N;i|Yw{p3Ss=VGTrOi6fBaT|^)tos47guKy z*$*3~UXp`VQ3;7{spJ)9xd2Yy0_hGCo=-?N%**^`l8Wh-Ne$AQsi)u&kV@`DEUh&e z3e7P=f6m5N$)2@vcuT#7$B#=R#-Q2OC)15fU}SjNEc+s5Uz&rUm@AF&9MtMjve500 zcD>t$`!Vg*XG1+8))OeSLn_gM(Z*?g11jMTQzsI7O&HPp(LrHOsds)Q64 zU%69NxN`ocQ{ovwgUpOeq{UrN6Z}|g- zRApKSAht)5{*?3mkn-fG`zQz|qIqF<{R9_GxnYG69A!k$9%aP%fQ_R8zOV-r?X*>Y zdrBc&{ACw)P0zWJL}|M)B|mZgFc=_0|3FcsenI=H-eG*9LrDXnB&nPl$G-Jha5-Z= zs`07Jg)QG|utJpwEpU*R*R`ON{>0<`@ca<%PfABF&x$ng9C3Rn=AcP76=%3OAZE<1 z(31A0u>h~lMqvY8(Km?z9wp`4>MyoNO$266FG_?JDepI4_$BK_!4|4{I+q0hO|Pkl z)$IZWnDg4N5pvfEzLIW`SD|J$$(q;o@WfkfmQc3L(`I)fXthe)7c;ArUMj4Q_h(~^ z#vaZ`g%;0@wPpb0m$~Py3{OzKS7H|Oms3CDpTCl zDJ=XUFuItdrn6PoCv7w*i(Au^ddBW+O}6ej=x1~@CqT`f@nv~&^$!K6THzSO^$#*c zzpQN<`_9g_?@P698A69XSa_hNX$)|Jk0B1@MPLv|Itr9nuu_x--3_JvG%p+6J7dU( zk%G-j9E-YjtMb@^`G>9>))c4=T2XyDT}Bq5o-c(1)M%k8=`8jLS*^}brS1n{jk~1& z4zxxEF9*j<6ex6%h*TtEEsBr5>xF6N(%P6JZkJ72`U8BQx5)EUc!u`HH+YYwi>@uiw#C9tFf`g4y+(Q#SLsDBSw?X zA|u9L;V)o+7P-s&x!o4A{N+p!Jk#L|D!`G~;Ua@=&tPL91$4noQNcX=md}5X1G%5( zHRFp3h;!bd_k(Zr2*ifaPKs0mjh%^>)z| z6oU{o9Se{tx>3az0n$qRmJMHOYcd*qLD^7ACRX@Pr|$5b_sHV;JSZ1 z{JjkP_&;EiKpepb5Z|O4ex83|9yDR}&~58B{mxC1n(Y_$5-D9+UD!>y%xKx<&NV&eBI?l9`fe_ zqpdW?T2pyfPT6O-WeUIrYeCa=oS2H-fSKP_;q!$!al4-nl%XmkT5So>ZgUNGqbetl_IFsMdP@Y-Q& zS~);gIjJ+luN_c}B*YM-E1-aKqO2K7trpVD?4zgTQBUUy(WNRNf6fn@m4j=+;OYtm z0ZbCLVKWfS(no**p(*n0iVQmr5ka3j;|wgeao>tPO{?Dpwt4yDai=0~eYWO(wzS~? z>iF;p2d=5Pef*WUH`Vc2Wa|z41-VUN+1OXIh!I3aN73n%@PhSod-xWT;YC*gCLq==?+;_7(Dwhq?cn_XEO<*<^X*miA3uPAA3uoy zM<+uiWe8yaK|-gLVazBlCcq0wz+pmv2A2eOc9S!X{h@b0LLi_28@b%mQquxh-fVSi zs3|8ms`0$apncs=RC9esErr-Jxq_Ta*m1-v)($8?;;C2=C`2 ziN@uQB4Sb7tLnU7`EA)J`r*vWE9n-6qUHEm6nn4O{>&Q<4IZjr#YLwaTknSAbvPqW zv3FSA?2AlHoyq*UiS$Icm<`Wls{I+e1*HwC1dBCg1}L44riNqnw$pTE=Lo|2d8#9D zL#eHGH`{#)PlFj_G0)PDla@@Px~FkYCfM{+U2f2JPlVCJo`sZVVN{dVo9y<YiuxNQj~^q7*@rPUwd z^b-KHP(O*WTRhyns{Cup11YREWL*_z5O&m5ouYMN@K&ZFqP>v9Gq>WPU0N7eq*1RJ zoTYl#%Zy@-Yn&99p>a6!=&q%b-c{T%n9d3mHl-bB;~}lA`;)Qw;)-2M#5c)yovx9~ zVTQ$JJK!zOm4H!cXsOSrxr)lg%xkWzvOhBjNVk&~H`>AvRHPx4DjA~j!QOKr zs9(yqu|?B5ve%zJIAiK!A`AsOuA>ijQwNzv$`f0+7NZ(hb-5tS!dTTpw`EDgHS5`f z{u-cP>D00u2c=pFmuY7A9DENoXFB}V4FFjPCQ$)sCWaT`0gBAmaf?)U<@RmazJert z*}g~@+Al3gH#BNa`2q zkz|c6<(F(+{Zf;fs4I&v7ugOjxiO~Wj@OVNxbrl^&WIk(AGoszRbC1h=g zdX;mgM)TMXaX1>ZAVl-LyOxkz{& zevRAdJL1-Ou*mDw+$N_CSDEy%mSDD%Nd@FDtVN6Enohb$v=<*9RyYln2BW2n z!0QvU9{qIE%8L10S^d2f+lj43sglFwbCtNu5pT0MSB@h3ajFGGS1c}4*ta#FcXDy% z3N?lA?2MFc6{_)S>_^@?Y|BJZowpz87tkuFP(AYsO!m5OaTCf3hB1m;J4>e0``IN? z*Ed|T3Sn&JmuQ-O=+kF9QZ44W3^U%hsuMx4LC1OqE^$<^nu%y>wh%HTAG-B7+gUnM zgq@xkFHf|MBQ+A3xki7jg4!9v#i18Jmbo7Wo2XFdnk@~W;mtfj%{5$p;SuVg*jmd; zI!(8D(xv1C#yfWs@@b&x4nS9e_nVB=ZfK2Ary?rw{1-H4BEP>N$k@Q0{MF zJ;e(oK4N7v^Cdj`a%m@vvhVJlk-tGlsMH?EOY6?uAoMF1%-uRh3>UmP4eRb#ULj)~ zlmBJFwR?vk(5S$Z5};=Y;y~3G5hP{yoyGLeBG@KF{{lvs9DfF=4Opv4Ky*>Bd4z zcmIY88CMZCH`yvKXHvh`25jM8OSBWc)lg>xeIRh3n}OTOqMpNF1FFWW9)U`D_F|xc z@Dy=+y7oLbg0{r4y=CgySnK%HPw3dUL-CmCR$tDNKs}u8np|t>*IXQB;PmtDCoa+A zD@Z`R^iloP?lp|dG`G6(3k3)d(n;bG-R`UP1M1RI*9#7naLYeLstc2-KL*^Lmq6TR!< z$w-%!FvP!FjFu+1KB^<5P>ZQe2(hpi4gwgJDBd6^f*|8gtNP@$oCY}MVJ+?kW$Cw3 zr$@|~eMRX7c~lncT`n`x;Igqe$A;;YR91hm+&&WSpDH<*-Og@AeiHlpI25P z*1~6iB8Ii`m)$eIq=}qp&VTs)R9PEWKHd%&-!M^(Xxz3)MX3Ja9-xpa|9L~Iw14dW zMesZS-gqo$KkO*I8Air-uR^LS5bx zldvBP(fie5N&%Lo6y?f})7-alZ_(E&6O9JunGYmH^BrDe06JG{`xB`l&sAVv0vV(R zd--G7(AbZ#L$x+J(;OL$mKPuMfqZdpEKJiV zf;#G;(MH|{ZYr0YhlDE&SjdQ)-m1p4N5jRJ1_obw*D*^o{_RR|eD|K!1Iq+w2HqgL^8d1OnbwH~} z9-!sjI@W~X+cTFJr}xLQdw-HBed=SA>MCR0C?NRfTn8kCc9A(b{cWEV&HGu58vL-Z zNlRct#dI6*r*h(wrNY~~%k16$%CK#2T&I|eUc)cIp~z4#R6~=hyDJN!w07yxdp@A! z*2H5CN6?Vrx5i&hogyGeKZ#9n5*-UW!-aJ-sB#(M`xgqmgm5}88D?C8M9k`ZG@VDg zm-1XZx@=T?N9@^e^LY$5&)Uk5K!d3(Q z2mm(;IZ}sK5_$)vD_n+Z*RGmsgs~S7iuo24A>5Ny%7(u=EG6)f-B&L#v!f9X|FKh~ z)@bh%%y!&CZAqE;zD5@7PHrJC%3M7((O+bupVTuF53dP0Ii69jvQ{n73ue6;|B<$v z&^3|}#(1AVi36|{mJds?5(`e3TBgO_Kv5@0x9I1KSIFmDu?AyYlJLMDW4{g7#$ztJ zLDWKs%Fx$%a|hOEHF}HvTDrg++i=yJ(?pEML7_pwBXcq5q_u9&$Pk&^I*f5>a{LSS zSXOC!U!90bcU@ofQ_wpJ9kxxC2bl$F#Y_ z%HKh?VuFyib%j-P0f>%yAP}5y)+Ig3hJPi$N`s7xPUnCI^UrfP^Ns$+DXG_Fj@H8h zxDA@lFMNL^4#au!c7F9jm;t=tD)AeQKUm;%coIQm`J5iakGAybo*=Ye|BkVUDJ28(EbzPvc|T2#$DH*!QF{ik z(eL1}SA~_@BYK&YTisI_Y`Gp-8*_dtKy#yxXhVXeDYu;IkK1LHBVT%yw}8=gg5<#M z?BxL6Q2i4vX3NU68HRfGnU026TcT{{>Vi!1cK%K|*|OrV!?e4DIbng=Xc}GMKIWAp zPy+H#9}wOsqtSj$InEKLH=@mKhZeB^1x5CUYTD~OZ>;Tz?S&I1s}?%+bqh=URCyEl z{K3LGd-@=%{wet$9{I}FI03} zs~o>wbc(ywEjtL+-iQ_740Z@@4vE_f7PETg{@;8?^*RUfVK;b z_3)1-r)j0hP4fAVsYx;+wb|}GTB80!?O&Kig88pr&WpL-oYcG+bNDU6pb>|sl*a}oPmz4KidHf8}JB}t!uopSl(M-TC{V}zA=Hg~5T1#e)Wrn}aat@WLBPeI(X zmuP64CgFj>;b!q+#K`wmmgC$#%ng(Rf0m_T5^Q9N=hU2D#-C)d!Ixvh#lcdR4(7Se zF&1`Nb3ancrv-hI5}%IJ1|k%NJRs+ipDvoU)D?uOnhr@5C>U}I3+qsk+$!%5Mh{MLJU>6m&wr~zYn$jt6rN=%Pi zXHJhMi7(mx;$>-ye{*L=+_Y8V^P7Rrf-C}w*?mj>BhTvWx~L^bh+mkMpAemvqvXE} zysM%ySqT`!LwLAPvu0Trlze-BtBOR|1(Z0eq=c}0!Lx5xbkqTbJJp0dKwYEo+OX-< z0@r7eERo{s3G1S>I`Ol5yOx`uBi>QBtmD{iktrgHu`rB4Ep2Z)_B@gHx`KhI>xi*kORTV%r6%#_E|f%aJT z*ZeA-odHoG;;MnVGz0~Z0C|1|K)ewuJ>4FY?R zD{eit>sJzIJi-0^aftTIB#I7kd-CUO5Uhi@iYl7Yt z`BmhNl`I(2uCpz5G=gFjwI!L6WF5FU>!{++V`cTio3R@Fwg`ST zj#n8yaMt_ANX(r>w{j}+^}tYdi#Of${@j{|)P>RbN-zlZhEpp1!+kK&t5SXwiP}SJ zdq?}$#L|)O$BLcR{5@92!}azPB{(rMs!^SE<&}2e)E*LBwG=$QF#`22~v~h zA!X-wS+Glz=L7qKc*T9E?sSpLLTX3|`YP4wu+tr55>E#y29(K*0}H@<(=T82Fn3+@ zIlwRcHh%Iypv^9o!W7Szgj*AzSe0+NC{VvB0$h}FEEmit{rgiR!9&Y~arRaPHtDY>+z5Y-3EWm}U?lGMX*fe8QB-9=b(e zzf1Vk$<5-zV~m~|J~{oxHo}<$t>>&bWjaDxRy|x6K%ZBv#k@mkcNkV(58Qt`)1oSB zelwTZs4$Q-D(27O=a2E>9FC%Aj;OjK-WFDmh}VB10h33>q31Z4NF1=_8E^w#U;Wjk zHcQ-Qd=(>e{I8Wsp5ge%C5if6J?xfD(y|G4tZ`!P4S^LG>hv-x(89hjkaj3+_$aM& z?Cpf^L)1iFt2va~5e7$miB35%XHTG6#2mh>=k;s8ep&2&Q(O2lmc(_HW7(eTFr!&Z z!?x$3K%Up1)nEkA1XNO%*gFnnCIs*dPLKWVFZj-v?!{(6{MW{0zkIV58Ud}9T2()2 zBI!*Wsx4RnGB2~t86m18?xt5KD%dRi;2Y|p(qGK08Bfa5!rtKy)yK>)LdeBkH~sZ! zMDPJA;s@K0dwlzut{+Kr zt31FI<#m}sA!Pon;+UGbWv}0KFG^L|$lK_`=)%;r)Iq)W>m{4GNuBabGb&2pL?1r{ zWwJLh8)(BBSzRrTCbQT4eSzK(^|7z?D%dl9{lOeb45j*$OzrAxG7M%(#`TLkoP6=l z^^BqoYk*7X;rOk@1i4n6Be)*<9;?^r{xx7sRS=10Vgi?)VM++k;bA;W08Q=9O*CDF zGv_I}`{?2MkA!5ZG96mFMkZWLLhS^KPBBRFjm3uL4pAiNtv;;qr_9VSOLOkP0K z50b8yub;M7pg({~ZDtm~(Y-Oz3ITo(6)ai%WEL6;gmQjABjQ0M%7kcelO4ocUlxPN zcoT@In03&CbK;KM35FvPK(W3(<_Y*64~WL)4dwIpulz+bpYr;DdQ$njt-Rp>iqv$7 z|DhrLn;7Z;kUvv2PJwt!82qLHvWb0&Vd?q?v|*SA`Y}vtm}IVEvDOF-dfrEgoFCIt zxD!cItR|^LrwTB(aDaCendj82QVNwwIKS)d#k=z!R?{&Kmq13xD__@b{^MNF3JB_=gJ#3c8SFjORQW4%Z{J!ps2llpc7*{Xe!1KV1KrZw?YCzv|5~;(@eFf9oEgRBIxR=I| zD+wRb$d3T*fwVxtl5NU?zh5@&Q}8KIgi zY{*F^_M16{V@wrfOsBKH&`ok>#j-UJ1j=;1r)?$_6XIp`0aW}lTZP^HFT*jqsljv# zdg(+5!+7YptK*zwO=a>yU$O(bDnrvEyJ)Q%I+?pctHw+`wD}!dxTd9YL#u2HzHRHZ z@w2o@b-DO@{F}Stb2wz(g&81}kN@lt!PAhc`Txqg3aF^IH9QPmGSpB*cXxNk2ug>b zbfSTuXWa*fA8=7`#-bxnKiq< zj|ZioJRZq}l!g!A85pFj;F2LOEWKmQG0CScNN#lDe@Qu>Ov(VDUCe#cW}Z%yAFaiai#}@AcKR z%k*R#`}N3*6$N}wpX>+OI$Epr_*DB3kg>x2He@7YuiM32klD*t_#$^FumcRV=UiXr zP?OyoR%q`K)J{)E-r09YP_(D)(beCJ3&e(9{`G7`SnuIU7IJY_o)nRk)LRR>6L5}v zps0i1gTc2fc=8I_ZeykNy1V?ku%Sy`+8AG9|HOh*tp0hH%MaBK6o&&-&g&`}H@6fE zllqozy73(Y=914Qe$PrIN?a-D9yR%kc2z0n)DAQ}EJ4zGYM*cxBdqKiHa`{WW_db! zJ=1f%n?I&fQd% zo|pjWCW<~maA(3Yu+$}Y*KZ@4nUiU_-@U6e4(9xH1CX9pUzi0 zggmvIURR8oQySiM9nqs^cv~MzWZV(CvFNKx;T{`8p8Kms`qU&tqkV%tZic8|#ghgKLb)Q=T>9Q-0ln6N)KO3q{by!~Lm~d0V z>Dc{dA29f9t~nu@SbN~xFltgyKYPuFsWHQXz=<2qE!mFnwbgtlrxqM$RKvrRpuaf6 zc4aee$j+UMG34wsS&*vZDkBn1^1e#QMTkb&3CAy)5lyHB(AqJ)E5?Hed9$Kkblp*9 zqPsB($xI~SbVWdJe3yh+teBRGBPB=cjqa<}9P!AoWQiS~xV*@F6*H%YBN5Iz7k2D^ z;9qKQXXuSN50{TbSrdm&Z8d&l(OP9%r(~T}oxYKm_yp;uB_plZl({9n&>_Xam2c97 zQqW>~Jt{!wH1OBhg2-t$Q&wNUtSSK(S0d8a9(w?|;6k9F97AT~ol>NSi(PFzM^oNs zeymif7nSgKWy$L|mIT1^8>4Z}HeU{L=y{^-g!PL8Ws6`T{O2QkcrBV|L7%h=K0!lj zu!7$BJstfnG1|VyX@Ki0HSJ&UXfq@L6BGWV+s{N(!H0!0Z|*PVM^j0=7_=j!RtgCM zI^hvXB;*K*gXRo2ygU+7sT(IAY-3Zx@K6#!J~o&${D3}KAQKAot-TxGgYDXz8MSm)1KBRZ%NBE#Ns&+?9{gFm(TmxdWLl?lMmS8 zQ{fGC{~($DT;F4gL2`^gJ0KjYU2G;Xpy_+)rx=OgoC1Daz>SH-N00UUa$uOr*=jTa z`g){;xjq)H{y42c6pu+YK%rIJ6o48dmG8c^r3Ldj6)9+n4O<>Dy-|wGE-*R zu%CL0{z)d^=!AS#L%+Mkd zlC2EKl_+9HR9t4sHUm#7NGWD>)Rb>x#EnABOuQ{RXuQ&r`^enMIkX-67T2POr+xYe z5fO@m`|e~p^PWyE(oQv>T6Ps?#t%mp@3doBV;`wNVmQHa#2qzE@m(>X42oqJ}CH#!f;xe#Uvc6gM8sPVQ zM8)JytrJWh%FG?>RgK`W$-d@s8XTMrDg4036gDPc$=P%_RCB)v-hJ-(Lfkmtft*Pl ze8I0fwapjV>9>&d$s*wwfw@4$qRX01l$Q%nH!roo_ z*5B}@xY6l*BLM*;!+X0MnYoCGFZ_nN5hvG{n_NFNm$N<{uB0NXpDuE4YL2b$qv1Uc zCpQh452Sh>G&JDnB{(wMsx;X>Pwx~WTO{Q9jX(P4w`Eri=2r)uWepp*d&3{tI%KCa zClVJ^*M;!5`8{dVd0|`o&d~oxJ_0jiN!KC$b|fAkq;8!esvUBY=ORr>3Q3iKHO5Gm`Bc+em=7+Hi@J z_SvW)@zm6{-f#3?p4Tyd8S*A6`Sj%_ao}Dv(W)kY2gtwY1E?_YZr59F!D2*<+=fF> z2MkB0f?!ol!PqC;x{db-7E3SA+!A1WA%Qn6vs8NDz)$#n%<^vHTmE=p=}j7l5k;zU zi6>L+9Y`DQRLRnW@}_eXCNDr83E_HDCa}Hp>j2!v}#%DM27EAi|Lzu%5k!cxD=GO|edSsau^f zLj+h$utD&eY?B=VnIGvxAnSMz;-)qDV%8aY5`evZP0jG|UFWi16E~92+WbfLWfRa_ z?##JGIwX(ET6fRdcF&6HcEd%thdpuNm(!<-$8C$vi^n^_W$>X7hqu8+;w&5h0Y#zo=;A3M8)Q#Hsy0k2llIoT%LNB3j~R zac*ixQHYKCqkm2PEw>Tpnf;?=51N_%IalPU+I~)x`3GxieMht+eS!Z7T}qCU;h5ZSDJO(HvkxbHTbWaTifp$9S}+hl9oH z&T5Lp^Rc;OGmFIGI&Qxx?S)8%?slDyYzEd$e|YG7)5N1F6u=cx074VTReTI$Db#Qw;@h)HnO&_1uwEg$?IRx9Gi zWapY6j;h6@F(34?%HW$-*5IsZjM{Opc((6Cll^4h{O)CgXXppkdFNujJ+hUtOHR1G zRZztB8Jc0k5Bokh=}g z=;#z68Vp|?@C-U&$0b#+A*i6~n`QR+V+8k{8b4Z!zV_XOkzfXk!bcrad3s#DP7-DPFJjizAIXAT{ED-o`13zUWC>;TmoGt z;Vasz$k$cN7uC5%SUN-d4;fcEI1~o8M_3<{)zzW~m5x8E$@S4zcB9kbfgk(08)~>G0LZvy05D0(UuTa4^OD z;jXUvWZ;W46V20GtRixPDHB+(o3^M4_shPOopC+N6Uj=BcC=jR#s+UiNsRNU)qrIJ zB^7Nk_p`7GQzN^D$BkrB?2D5>J(U!!t%&1S8Wv@`P>6+qc>C3@>bRL<92a^DeuXvU-qN! zlF8`eYWa;ysI!Y3wGo~UZ&+|lsf91HzazcwbUmP_%Xe{hElq5HZpDiI?oJpZXN~*b zR_ndja-W~Qj`sIx^LlO`Gnls*`bG+o1++Cz-JFFxdW2_2BRA{Pip%Y?^9i0dq+Ku! z>M3Pu%%hJ*^QP+a+fR(+ z_29Ecnw0MK>ohoSLs|@YiT#dcRSIGBc%#EFr^UYD2MJ)@@rDss_4pv|_E(+b0g2c> zYdIhAf$f_IA_+y@VsS1(3M7UIGogeOZa%*wsB~zVtyfh|U~WwyX)u>abX?XD`|t*P zRMpT-^TbT^^=*FtqrBmTYL_IZmDs9E%?8KD)#p;pj;CTKnPEuxM@!5wW`MrfT^TdH zf{Ac$ljNJuyY6Re->#0Nf$mf*|$>~`*}*@rEEF{JME#Spf`h1>R}8?sx@qo*wJ3Z6&t znycHTW)P8V_tLGMXz88d6Le{MO zwz4HsOha36k^}2AQA)o(qDJo(XeW{MI7lDJ=wVQE?pjXdw)}>bY}Q~$YwDHVS;8!A zC7@WxXsatxM*+RVcL% z$>X=`H{G;N4E4W8Cs*f~^GBDV?2+7A8P1kkcD#`_45Ybpwvq?Ih`vahf?y%<8c8)> z7)#>gcq>@mbzS{=?eAl&Z^}lViBN?+IrpGz zxN)&wxkNr;&zSE=!OoDZKbpiN*Y}}=@mq}CEYcY1Y>ZCaySkCn%b7eIuGGQPDmv8I z+fW+vK8EeW8iJRtj}b5^mkg7#Ux;E8PN{E=IGXefgJ(^Lj_(FE<`J1{5NfkL9!(-# z8=X`_Uw~wM?|B2_#JazID)x#jEwCX?l1%bos&}P~voeylAKzWh03+-bZbLbqr72c9 z>k?H%$C=d8}eL* zV3_@#&{wvp76_p?mBZ(Gwe~mUIrVu09_m)JmaM@6oLOri{+>8zL8fX`}dhmVw{ z?B&gIHed3;FBz8Q!959@tnPAk=&of;A}7MZ5s-1O!+{n?+DyIh^aNmIetS`rX1d4A7sKfo-0+w8PN@zjpNh zSJ_{+=)53uiXIJM1qSDNU=9A(*?H*6Zw~a7>d#nzrGm&%<}1+02V}tONeB#=x1H?= z+M7S&fAwg813lRQp9MYGp2r>;9PMcr&2*{ps}`LXMD}uBdAe8-hy9jy2Z7}O0QvD= zfzU$lK;j|<_HX&yU)X}kJdrEl{30*xr?6-Vy2&0iGwz?>a>TDd3OP7{Vixqu<4?uM zW;D124VL`n?kc`QslUNc;QKNJ_EQG37`-NtkA7OIKY(?zS3tddswX2xU_1ORZ z?yBXlfD6k+z{6!I>`ICc4Gcm9|BSO#>2Dw(_J4)YNLDDpnW|TX+AGXhSMpb$D^T#h z`c>JZG6q0knUwB-)vx{tkyjhYt>gmeR(Zg~w}7)QF2D=@an26NSTzG*Is$yda#tNl zd5so4?)-FA_R1QWC1U^Ld6|{_P1DFqjqs zueM#8>C-USp9^BYZz_m<+=*Un(SiNB{_?*7-|nBQF@X7u5V&~|?N9`0oq@o9Pe1)T w(zhc(q@&=^-!Ir7!|dNa(UJ0vqd_qAs2f6ojegdjudXDBl^g`po&Rb52R{-ATL1t6 delta 36409 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℞Lh2}d9ppEgT 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%0A1Mh<&Q$iU5x&2mOq{qWJ3)hklW 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 \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -81,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -89,79 +140,105 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=`expr $i + 1` + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 000000000..6689b85be --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega