From 1a04314a1765ef15c8455b183f498daec4ade87d Mon Sep 17 00:00:00 2001
From: Giovanni La Mura <giovanni.lamura@inaf.it>
Date: Wed, 19 Feb 2025 15:53:43 +0100
Subject: [PATCH] Add unit tests for SphereOutputInfo

---
 .gitlab-ci.yml                      |  10 +++++
 build/Makefile                      |   7 ++-
 src/libnptm/outputs.cpp             |  48 ++++++++++----------
 src/testing/test_sphere_outputs.cpp |  65 ++++++++++++++++++++++++++++
 test_data/sphere/c_OSPH.hd5         | Bin 0 -> 35680 bytes
 5 files changed, 104 insertions(+), 26 deletions(-)
 create mode 100644 src/testing/test_sphere_outputs.cpp
 create mode 100644 test_data/sphere/c_OSPH.hd5

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 2e8242e2..a03f9900 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -200,6 +200,11 @@ sanity_stage:
       - chmod +x test_inclusion_outputs
       - valgrind --leak-check=full --log-file=valgrind_inclusion.log ./test_inclusion_outputs
       - grep "0 errors from 0 contexts" valgrind_inclusion.log
+      - rm -rf c_OINCLU
+      - chmod +x test_sphere_outputs
+      - valgrind --leak-check=full --log-file=valgrind_sphere.log ./test_sphere_outputs
+      - grep "0 errors from 0 contexts" valgrind_sphere.log
+      - rm -rf c_OSPH
       
 running_stage:
    stage: run
@@ -308,4 +313,9 @@ testing_stage:
       - export FFILE=../../test_data/inclusion/OINCLU
       - python3 ../../src/scripts/pycompare.py --no-progress --ffile $FFILE --cfile c_OINCLU
       - rm -rf c_OINCLU
+      - chmod u+x test_sphere_outputs
+      - ./test_sphere_outputs
+      - export FFILE=../../test_data/sphere/OSPH
+      - python3 ../../src/scripts/pycompare.py --no-progress --ffile $FFILE --cfile c_OSPH
+      - rm -rf c_OSPH
       
\ No newline at end of file
diff --git a/build/Makefile b/build/Makefile
index cba30075..5ae144d0 100644
--- a/build/Makefile
+++ b/build/Makefile
@@ -29,8 +29,8 @@ NP_SPHERE_BINS=sphere/np_sphere
 NP_TRAPPING_SRCS=../src/trapping/np_trapping.cpp ../src/trapping/cfrfme.cpp ../src/trapping/clffft.cpp
 NP_TRAPPING_OBJS=../src/trapping/np_trapping.o ../src/trapping/cfrfme.o ../src/trapping/clffft.o
 NP_TRAPPING_BINS=trapping/np_trapping
-NP_TESTING_OBJS=../src/testing/test_cluster_outputs.o ../src/testing/test_inclusion_outputs.o ../src/testing/test_ParticleDescriptor.o ../src/testing/test_TEDF.o ../src/testing/test_TTMS.o
-NP_TESTING_BINS=testing/test_cluster_outputs testing/test_inclusion_outputs testing/test_ParticleDescriptor testing/test_TEDF testing/test_TTMS
+NP_TESTING_OBJS=../src/testing/test_cluster_outputs.o ../src/testing/test_inclusion_outputs.o ../src/testing/test_sphere_outputs.o ../src/testing/test_ParticleDescriptor.o ../src/testing/test_TEDF.o ../src/testing/test_TTMS.o
+NP_TESTING_BINS=testing/test_cluster_outputs testing/test_inclusion_outputs testing/test_sphere_outputs testing/test_ParticleDescriptor testing/test_TEDF testing/test_TTMS
 
 all: $(NPTM_LIB) $(FORTRAN_BINS) $(NP_CLUSTER_BINS) $(NP_INCLUSION_BINS) $(NP_SPHERE_BINS) $(NP_TRAPPING_BINS) $(NP_TESTING_BINS)
 
@@ -89,6 +89,9 @@ testing/test_cluster_outputs: $(NPTM_LIB) ../src/testing/test_cluster_outputs.o
 testing/test_inclusion_outputs: $(NPTM_LIB) ../src/testing/test_inclusion_outputs.o
 	$(CXX) $(CXXFLAGS) ../src/testing/test_inclusion_outputs.o -o $@ $(CXXLDFLAGS)
 
+testing/test_sphere_outputs: $(NPTM_LIB) ../src/testing/test_sphere_outputs.o
+	$(CXX) $(CXXFLAGS) ../src/testing/test_sphere_outputs.o -o $@ $(CXXLDFLAGS)
+
 testing/test_TEDF: $(NPTM_LIB) ../src/testing/test_TEDF.o
 	$(CXX) $(CXXFLAGS) ../src/testing/test_TEDF.o -o $@ $(CXXLDFLAGS)
 
diff --git a/src/libnptm/outputs.cpp b/src/libnptm/outputs.cpp
index 71cf7b78..9cab3e09 100644
--- a/src/libnptm/outputs.cpp
+++ b/src/libnptm/outputs.cpp
@@ -4921,7 +4921,7 @@ SphereOutputInfo::SphereOutputInfo(const std::string &hdf5_name) {
     _num_phis = (phsstp == 0.0) ? 1 : 1 + int((phslst - phs) / phsstp);
     ndirs = _num_theta * _num_thetas * _num_phi * _num_phis;
     status = hdf_file->read("EXRI", "FLOAT64_(1)", &exri);
-    status = hdf_file->read("NUM_CONF", "FLOAT64_(1)", &configurations);
+    status = hdf_file->read("NUM_CONF", "INT32_(1)", &configurations);
     status = hdf_file->read("IDFC", "INT32_(1)", &idfc);
     status = hdf_file->read("XI1", "INT32_(1)", &_first_xi);
     status = hdf_file->read("NXI", "INT32_(1)", &xi_block_size);
@@ -4938,49 +4938,49 @@ SphereOutputInfo::SphereOutputInfo(const std::string &hdf5_name) {
     vec_vk = new double[xi_block_size];
     status = hdf_file->read("VEC_VK", str_type, vec_vk);
     vec_xi = new double[xi_block_size];
-    status = hdf_file->read("VEC_VK", str_type, vec_xi);
+    status = hdf_file->read("VEC_XI", str_type, vec_xi);
     str_type = "FLOAT64_(" + to_string(configurations * xi_block_size) + ")";
-    vec_sphere_sizes = new double[xi_block_size];
+    vec_sphere_sizes = new double[configurations * xi_block_size];
     status = hdf_file->read("VEC_SPH_SIZES", str_type, vec_sphere_sizes);
     str_type = "FLOAT64_(" + to_string(2 * configurations * xi_block_size) + ")";
-    vec_sphere_ref_indices = new dcomplex[xi_block_size];
+    vec_sphere_ref_indices = new dcomplex[configurations * xi_block_size];
     status = hdf_file->read("VEC_SPH_REFRI", str_type, vec_sphere_ref_indices);
     str_type = "FLOAT64_(" + to_string(configurations * xi_block_size) + ")";
-    vec_scs = new double[xi_block_size];
+    vec_scs = new double[configurations * xi_block_size];
     status = hdf_file->read("VEC_SCS", str_type, vec_scs);
-    vec_abs = new double[xi_block_size];
+    vec_abs = new double[configurations * xi_block_size];
     status = hdf_file->read("VEC_ABS", str_type, vec_abs);
-    vec_exs = new double[xi_block_size];
+    vec_exs = new double[configurations * xi_block_size];
     status = hdf_file->read("VEC_EXS", str_type, vec_exs);
-    vec_albeds = new double[xi_block_size];
+    vec_albeds = new double[configurations * xi_block_size];
     status = hdf_file->read("VEC_ALBEDS", str_type, vec_albeds);
-    vec_scsrt = new double[xi_block_size];
+    vec_scsrt = new double[configurations * xi_block_size];
     status = hdf_file->read("VEC_SCSRT", str_type, vec_scsrt);
-    vec_absrt = new double[xi_block_size];
+    vec_absrt = new double[configurations * xi_block_size];
     status = hdf_file->read("VEC_ABSRT", str_type, vec_absrt);
-    vec_exsrt = new double[xi_block_size];
+    vec_exsrt = new double[configurations * xi_block_size];
     status = hdf_file->read("VEC_EXSRT", str_type, vec_exsrt);
     str_type = "FLOAT64_(" + to_string(2 * configurations * xi_block_size) + ")";
-    vec_fsas = new dcomplex[xi_block_size];
+    vec_fsas = new dcomplex[configurations * xi_block_size];
     status = hdf_file->read("VEC_FSAS", str_type, vec_fsas);
     str_type = "FLOAT64_(" + to_string(configurations * xi_block_size) + ")";
-    vec_qschu = new double[xi_block_size];
+    vec_qschu = new double[configurations * xi_block_size];
     status = hdf_file->read("VEC_QSCHU", str_type, vec_qschu);
-    vec_pschu = new double[xi_block_size];
+    vec_pschu = new double[configurations * xi_block_size];
     status = hdf_file->read("VEC_PSCHU", str_type, vec_pschu);
-    vec_s0mag = new double[xi_block_size];
+    vec_s0mag = new double[configurations * xi_block_size];
     status = hdf_file->read("VEC_S0MAG", str_type, vec_s0mag);
-    vec_cosav = new double[xi_block_size];
+    vec_cosav = new double[configurations * xi_block_size];
     status = hdf_file->read("VEC_COSAV", str_type, vec_cosav);
-    vec_raprs = new double[xi_block_size];
+    vec_raprs = new double[configurations * xi_block_size];
     status = hdf_file->read("VEC_RAPRS", str_type, vec_raprs);
-    vec_tqek1 = new double[xi_block_size];
+    vec_tqek1 = new double[configurations * xi_block_size];
     status = hdf_file->read("VEC_TQEK1", str_type, vec_tqek1);
-    vec_tqek2 = new double[xi_block_size];
+    vec_tqek2 = new double[configurations * xi_block_size];
     status = hdf_file->read("VEC_TQEK2", str_type, vec_tqek2);
-    vec_tqsk1 = new double[xi_block_size];
+    vec_tqsk1 = new double[configurations * xi_block_size];
     status = hdf_file->read("VEC_TQSK1", str_type, vec_tqsk1);
-    vec_tqsk2 = new double[xi_block_size];
+    vec_tqsk2 = new double[configurations * xi_block_size];
     status = hdf_file->read("VEC_TQSK2", str_type, vec_tqsk2);
     if (nsph != 1) {
       str_type = "FLOAT64_(" + to_string(2 * xi_block_size) + ")";
@@ -5345,9 +5345,9 @@ int SphereOutputInfo::write_hdf5(const std::string &file_name) {
   rec_name_list->append("IDFC");
   rec_type_list->append("INT32_(1)");
   rec_ptr_list->append(&idfc);
-  rec_name_list->set(0, "NUM_CONF");
-  rec_type_list->set(0, "INT32_(1)");
-  rec_ptr_list->set(0, &configurations);
+  rec_name_list->append("NUM_CONF");
+  rec_type_list->append("INT32_(1)");
+  rec_ptr_list->append(&configurations);
   rec_name_list->append("XI1");
   rec_type_list->append("INT32_(1)");
   rec_ptr_list->append(&_first_xi);
diff --git a/src/testing/test_sphere_outputs.cpp b/src/testing/test_sphere_outputs.cpp
new file mode 100644
index 00000000..5acb13c1
--- /dev/null
+++ b/src/testing/test_sphere_outputs.cpp
@@ -0,0 +1,65 @@
+#include <string>
+
+#ifndef INCLUDE_TYPES_H_
+#include "../include/types.h"
+#endif
+
+#ifndef INCLUDE_ERRORS_H_
+#include "../include/errors.h"
+#endif
+
+#ifndef INCLUDE_CONFIGURATION_H_
+#include "../include/Configuration.h"
+#endif
+
+#ifndef INCLUDE_COMMONS_H_
+#include "../include/Commons.h"
+#endif
+
+#ifndef INCLUDE_OUTPUTS_H_
+#include "../include/outputs.h"
+#endif
+
+using namespace std;
+
+int test_sphere_hdf5_output();
+int test_sphere_devel();
+
+int main() {
+  int result = 0;
+  result += test_sphere_hdf5_output(); // 1 if failed
+  result += test_sphere_devel(); // 10 if failed
+  return result;
+}
+
+int test_sphere_hdf5_output() {
+  int result = 0;
+  try {
+    const string hdf5_file = "../../test_data/sphere/c_OSPH.hd5";
+    SphereOutputInfo *oi = new SphereOutputInfo(hdf5_file);
+    oi->write("c_OSPH", "LEGACY");
+    delete oi;
+  } catch (const exception& ex) {
+    result = 1;
+  }
+  return result;
+}
+
+int test_sphere_devel() {
+  int result = 0;
+  try {
+    const string geom_data_file = "../../test_data/sphere/DSPH";
+    const string scat_data_file = "../../test_data/sphere/DEDFB";
+    mixMPI *mpidata = new mixMPI();
+    GeometryConfiguration *gconf = GeometryConfiguration::from_legacy(geom_data_file);
+    ScattererConfiguration *sconf = ScattererConfiguration::from_dedfb(scat_data_file);
+    SphereOutputInfo *oi = new SphereOutputInfo(sconf, gconf, mpidata);
+    delete gconf;
+    delete sconf;
+    delete oi;
+    delete mpidata;
+  } catch (const exception& ex) {
+    result = 10;
+  }
+  return result;
+}
diff --git a/test_data/sphere/c_OSPH.hd5 b/test_data/sphere/c_OSPH.hd5
new file mode 100644
index 0000000000000000000000000000000000000000..efa38e592809ede0e0bd4867a0d476fdb3849f7e
GIT binary patch
literal 35680
zcmeD5aB<`1lHy_j0S*oZ76t(j3y%LoK|(h~2+I8r;W02IKpBisx&unDV1h6h89<PM
zK?1^M5QLhKt}Z0V)s=yPn*nA%jD~7sFkpeOV6I!i2jTyKPz)E8A&dnOia|me!hpHY
zKm@`MfKUt(nh?efsKY&sAbgm+XM{oc7EpgExIp+EQ1udK5WWGF|3DAI{{W#zNh*hc
zhpQtv>Ka%f23s&g=o>x|npPwu0~-T4iopZ}10ysgGcrO1AS6f};sRy{0kC=j4h9BD
zl2rgpurhFf#hI9xz*;z<<}fn~M1vJTRYTYe3_=VXU?xa${kyH{3=9om{y-DKe*P|?
zFu4GANP`@dfrGjM6`vpvW#FJ-<wFM>4h2wQ11P<N6Ux9rSwO{4KuR_!50iqGCl%0i
zg{guzBA_q?#Vt5dFo4nzBm}6Ju0)1Zx}tq}NQ{OD0|Nu1+>sd#50vmw7!41U@K6~I
z50voG80O(20j`P!73`rc4+jPlZU&S8&~_H?_KOZQTp;ZgSZ#^feyM;-jnYJf0O|E1
zx$$Q*B;pU!?qp?vw5AytX0YQAL=C9)3e;o?6-7`mX$5FHN64VE9zeMZU=D!t(J5Ge
z^nen&%;4bDFJ0LTiF8H3@NgLo50v`UXEZ!e!Xsozga@P?W??9R7H0xNPzDYv0xJH2
zAIiW%IY7m4a6=h5DDWT<0|UbhUK|RBh%o)iotPn!uILvYDWl<mQtspoi|~LB(=)(m
zW(IQG!v-;sA_O)v2;mL){tW%{U&)Y2Z?Jj}HcwR{3P}gJ$Qe+H4lyVL2L&6&R}jXb
z04fZdw_*^43Jg(-e(9=aNTe(Jg-6S1c%amCJ;O9SNS$w-0u2Yq>?EvM!K~k4B^6A?
zz|f@U7gEDx#%Oq;<dZq0;eiq!3x-s9z}hV*pxL!R7Rtaut$>PiNI@Ams2x!81Q{p;
z2L)SyGeaDQf*~SIsN8||Ghj67>pqr1(-mw48WJ!=wH$_p1B^xv4~Q6~KZSc9X$>?y
zhDW^w@iPMz`lB15;Q|RiNGid$K4@U)*GSJV<o3@G42kf7mBSw3MLrA+7j$7Uhn=o~
zs^c)lE)NrpfT~*oSuO+<#-L&A8aLQrNDV0g`lYK2Ln2)f3J+N638Tp$2YUbw57Y@y
z%=&4hlsgPVVqB0=`k-FDBrqhx15yriFepIF%>`Qci@zUGbr<aLtK)zM<O6&B>Lj4*
zKENipa46S+s$+1%p#Ul@0Ck^*I#d7$B>`3E0b2-xLmh0r`UXWD3ZTODOIHd*B3%&*
z4_I`=X!6V91u4)dfTa*Hcd(ViuzcnLb!CPt*qJzq2&lRWH=Ihq5-(utLcm;{#1E*t
zj!>LRz!DtLbv_Tm!Cah#1XSGz*aS8Xl^RfW3{f}~K!suZN=|q~1qPTRlzySXNrnE4
z!?4KD)C-S*ArT(1{0v?c%D})Np^87j?ts=e6Rhy7TLD$qV2NMd3#hsSw)oYZfT~+y
zjbEJuRNVm`{OU5G>V6pGR|nhowLu%dI{M|agdvfx2!#i%-vXn_uQv;z;W65O0i{r8
z#tG2y7#&A~gvWx>@Iaa8*f1I%DB*EnG(1qk<HBfopoGVR(eOYCj}N2aff61Jv7mZ}
z0eap6gguhyZ3Kozc)(guFq-`KsRA@SP}kWE)^VK-Xa~5%9hQ=@(-ly4Gd!@%!$dov
z>Q;EdM6lB{pz3ybVV8%A20;658n6QbU=nC_2UJ~xIhq6-cLr2l0qh_FG<g^ob{>d^
z8cYN`O{m`kOHVMG{B*ToNTe(Jg@-~MBt`~zKBHfFEEo+BlzLhremJBLSg{AADJVZ+
z;Q=iHA)zza>Lo(?1r`o4n*8ukNQ8ty!;lUS*gO=BCO<qDBtgOhJ~aU54z~0Gb`%2x
zgI{m}xFzD_3lZ`33-AXW8RZw?2cA&^(ILSM44%P`U=?2BAz(VhBR)99F$k;%q!Y|{
z4PXfIh<EjKVPFXH2u4u=;k&}NCxYcc3Iov00rOo07y_W?1fZD%;Umle@j>ReMg)Od
zN}eum&LH>rh5E)j`}@IX&muexLBb4v5nyEuVXn^cUJ;&P+S4@%Oow?hfN78tkbE%6
zF`iMb!3+>_5I@M(4Qvru-Z>bo-q8s{yGB50M;|9w7my~HKIdR~K!Nl*I-&AiBT)Hn
z!H!Vf5PJiIojqXFb|C!$X#8LUUq@K86D05KAM6M{o(=52Ajg0pn1LYqkU&>&NN7OJ
z2l1iDyMfh*1O}tY2YVySyLbl02Rl20q8Y3n#CLY{1;;JOd<Z`ng&&M2AMA!IAL<8=
z9=Lg-eh?SK%nNo5HUzmDiEo6)Hw3v6Sst112A!vb$-70O+UEwHpM=T#hWdaVfXw#^
z0-Zwz(FdEyh44nn(GVal1PIm7uzCnaQ&1nJL0tyzDMEOItv;e-cw|6AU~t#Zgu(;1
zDjr5tkUp{?;Q>o&5Z+KrAFyzM(d386gCP+fko5;F3@4zuIwA-XZ@9=EP<0ldN)wkN
z1_p*3P<0vL+7Guv*txF);MNvyb%R}oe)&ux8xj^nJD<TzO=vnHKc6K)!vl2!V5pTl
zR1A-5NctG;;Q=}$6XMdT3=9l9D7}6L28IK{&;+gmp&h~?G(-yn0|QhXPCG*7^&oVE
z2ZUx2L8Db1JRVkwtaJZr4?6oAWGx7Tk|B%+SrHl<8hWEG%n?R|#26Spz*ZqUgoRk$
zSFkx}525eD#39PCkUS+8PID*A*~p~rez|L5jSbfdX=(jV2OB*b?qF-iLYtm#Nrx9j
zyV$4(Cd*Y{Y_mCT)Z_by{e=DN2Y<7AgrC^^9_^Y_HAmE*tyDH_icN_9gKo~rALGsK
z+gN|GEaCL9H@4NW5;$&S|J2%7XR|_reZ#CJMi=LJSckkZxo2d3*{V<7uXWLv3hS#2
zg3|T-M6Eyc+RQvt>}h}e>8@Lj?K$?$Uu{0Mdmga2Xf40Cr1^rqiy5!oY>`;|@~44Q
zUe@&5Pf5HRtGThu{=wg>`4VSV*_T$=sz35`v5}ha{o5+RHtOttfyMcOU<di|a_4E2
z10BNccI$1c41~lXlKi5i;tx8%0v+<*RiY)YK;>a+#39UKn!Q)AnqY`SllPM2f4@W1
z5|X^x-kBZNr6CU5(Fdd10zx3>Gkn+&iMkK_6JJd!)xZCKe+HXR!I>BD;o>m)JKN^&
zJ-YY({@F_&%<?<=em^MfFfe?8)9h8RPw+o_zyEgqqWs6NF!eu~eC5r@L+|%*Z!%hW
z^z8fn$1E?GKl<}}|CIXw>keDL-T&e0_Pm@qulJW93_Nz=+nfCszDu87VR^n^eX*!%
z;=LF9-?=HzO7niUfBRi4l~kt}`%ggiPlM`bn$s}h_?_4LBX0ch@l$z=p<n6zdAsvx
zp6#DH{m1ImwJ)IlgZK_aP7pb%!}Mg^{!N?I4?J<$43#g~1CnE4DA*$#C9Q8~cVNGw
zjxWD|$6lyBL>5Hquh?98>h9M4L7v*Pf5vXYkY_t>S(sq7fB&yPYPs@$d-lIy@cykF
z`+fUMQf!Jp*>Bk!>^Qyrtj+^_Ct22<?WVWw1&SXSEU|iKzqiVxB}Ms({p@7h2Q$As
zv+rNOA;9(C6Z?-){a2v+<9}R#e6RApz512C%5ep^>;<9v_d)evbN@b7tmK*fS5d16
zKJicNh5rh+ym<0(|B`nr&Q`X+g6C&yiJQwT+%iS&#r`Y)7LED;p1{qgmN>QCiOU>n
zxf7Q;OpS+jT=U<yf03xfmdg*`!^5Yun7dBO>ezm9nZ};(W`y{tdQdK7V4zm`=wv5t
z{o$%$&BPR7_q1!J)rM0$4k!Lsur}NvV)tt8DyuKs=l0(XF|gK9$v9UzeWz7@Y=+zU
z4F=Ygs}$zVP~T-0t-txyh9gqepWlkH{$^ZiC9rovW&CRyYf-b}o$8yGSxLH0Ea^F;
zYkkmX>&(*;+pR9mD!rS1SI_!Z^LG6WdONHhI_}h4F#Uy9u=-Zn0|$z&64$+`zPSFS
zmBa%tw{r_itfnw6czQok$y%Xgf6(z8Ypi&#Srx4;R<geOEBu`9*ELofc2v!OX8FYG
z2IHqKKkW*v9v+Hw{D1SQm0rK>HG|$ls|c@mUSFh?tQY-xFVvB~#wz+iO-iJxl68-_
zMeVwYYpg0}U##896=3bRWl3jR_ZusoCWn^#g8|lCmQ8J%f8njw+FNH=ddMYMf8Ek<
zc)9zJRmlR=MOUg4td~V(WiQkHYt`av^3FQh%ldIx-*oP(=T>h{a_kgs^09W8oMpot
z`_f8a&h2IEqGPQ$Rk7zEVf$qj=Hp_xD>u%X=MRhWg>S#CQh&~o&YUA<&HwI}%e2hx
zRxjkXrq4PpZLPUun`c<b4y%f+-Eo;BLDp;S+PfU2K3IJfOpY_r46=T)*!Nko_6IAA
z-M$mvKN7XxY@VH8<G9)Ci{%zkgQeouduM1bo_BVO6~jB_8*>i^TJtHz7Cu=0-b%ST
zQ9AQMp!H#!qb57<y|?N)8n&T=OUPQ+dyB7f;2bNN0?l;=u6)+hlxo}eADnKro_~Gk
z0udo=w{I~HQ)1^>UE=&M=oZdr9cR5DYW<n%R{wm;|4q0lY0Z6{eMX7r605YW7bKOk
z#jQ)NZF_zsEV7!D#Jnu)sibw5T#er9fF)KB&j-vqUM6mxdnDdOBx8|P%fktm3!QIU
zefW0Qm+@JumEVW|i8c4HS@9Zw<+Y4YvSN>xpH=C9+sgddydL(~sa6xN8Sd77b<Juj
zlS9>|<Rq(<{i_$+c09Jq+uLa0n~-mH<9F`Yw;LZ?^@MlWvghVlO*iFIx!CvE>T$ub
z2}-H?R=>|aD4o3Hp;hg(LUw_o9IH7Grf{A*;b@)pA^eK$()(7wa!&rSx^8Qom8;U$
z)^p2B{n>-;ogW;nPn~49NZoheD$6jQKTg)p`Uv}Z(?g4HSxMS0&?u?)v_5QhF5v3w
zXI9E<J|x~3b+_If+9mg)^NCfnUx7H=Do^X_Wv-SbyPjDsRCh60?(A;;&yGPOX2uh%
z)We6T$29O-FXSzbn)zj=RqH-}EtLZt);{GD#uJV$wVK$N|5#!Zul2oq3<hfdS6Y3&
z?r0zOhQs<?&%Qvn3rnru^SGL9R1&qG-EUkFIb)O6F8&WO$5e%_Pwt80n{{J@Rh3;D
z+iP1<>pc5{?Z4)1vO4FzUChl<*qV|1^|TXrH&_YX2=&hCGvEEdM$B<{;h|kD_sjXc
z4;$}3$<Tar^QV2gUe65lvve@uZEQ5bIN#{dE)lJZ>x`O=cN?FuW>N0kx9k6}>XTs)
z9Cl|co3Obx_tdVZvvL-GnQXUPTgK2#=i~8RB8LpzCNFc?eZ=F4)DnSHyZjnno+#I`
z+kKFG>iNTSkMCM}_<h^VTJzntoZfnC(+=$tvsJsPyVZF2LQgXj^#}WQUA`ChO2)u^
zx3T={{>$ozcKzZ~U%H{hc(=%GHi^jceY-XWeF^Zq;;_3tQ)=<L*i*aCtQV1$tFznv
z(_mZQrANni9j}oTWt{D>`&9VUBk7E%cG-t-o6{<8w|k?sLebCu<GcPuOpf*YnYKI9
zeAlY(Dwf@OPjAgMa7*58{hBA-TaR&f{VA?<wO7)1n|(>Uz-q&?`y2BbLx0WW-Ton0
zHS2yc?B@8jSE#A9V7HyR3(L`P-rXBMFuYE_l)L-KVeNBPQ@M6O-m^W~FQj1i_4{&x
zdw=rmzVZIb{j0NbcYAKwd#=loYxk67y=9xWr|oW?lC}FqGRy93R<9SU@+a?3^gK4l
zSDJD6qs`Vk!>6Y0uBdzZSznE1_q&RpFC)Js?cT@i<fQk4VfU4d(<~a@3U>Fte{wL?
zoOgG4dE#-)+T7j7TVy(JlymKlyCb6bPpx3LaAf_}^jkc;9b9`EPI%<*);{&+p0+C2
zZsr3X&!^hETF>wd50qVe!Ro1#>9e(lZq|~YCe2)(aM3F8*T?9|KCaeBpGt`wUVXvp
zWpj?p8GAQt>3>lt*s?BKi7im+yI$#N{k_n^^?B@RtNuf(Ix!EOtnWnB-G4gatd$(A
zoxtTLN9*P{i3wU+r>!DW)4uP0?PT5It@`rSyt7utf_o$~4P32f8Y{M`%)DTAG>6aV
zilUo!^EW|5$FPf5Q!T<?-L!SJo+%R0DYoc>m6z_P<Xi(c>-qM9iEraCTIKwDQ4*8u
zXuV|GQ-ucK(^i>tE(Scf>}37y_eM|M`m<I}F2>8(mpNLSc5ctNh&pYxvnFWk;(Jck
z8s3X^xAdO1(z4qkEwZ!3I*Iepu4ffO)-sDX%+Oz2YHhG;ZAYxPu(ercf-%>d66<8|
zp3O(QgsdO2|DQPNPN{W)@&)m=al+R2A9<C`xeKk`b&k8PO5(F_R$2b~dS;Qeo7^*n
zhnWJ_cdPb1FV`!yp7&wfT>Tn8>!r;FyQfSlvW|W}X-ZCofc5mK$v>XfmRRrej_j{a
z5wf1V+0h_Az0~@pTER|EGhyqk5AN*>+*D%yT5aBeyJbSwb7ys#`z<K7KCqmN@rkFf
zb-w<${av>TtUEP6{}XoPvyPciZ{cKGWL?z$tZ7fUfc1Lozxr?g6<E&_G08}e=Cck?
z>-=RGUu3;J_o&v+Gy&`1=c3m=Y;&+N|D>_cT*J!7)Y<Y>=2Zuq+`kW6o0eGF+?}h}
zvHNSIP5E4RtE)LRHce+IT^90gvYGqq*r#WoYiy>~MKE`Go7o6QDRIe(+u69BN;p%o
z)y(F0;>&2sWp*|kmrtZ-TUFR>`N;64C9=V0SGWAp?zI&*%}rd*rpp^_y1boLKL3}4
z)3*9m&tI;4W(}iTja28e-$<~5(RzV7zS+w(Y+&?$r%g|+itky^J3iz73-3F-A+00m
zs<J9gi(jE{9>xDXyZh*kmz%CDU9j%+*;jH;_^|aZ4p}LNZ3nFuSw`~e|G#dX5I5uD
zu1hy}*97w?_Fvy_?K6x0dVtb4E9Hyl4!DcE?^xQIeAM@zw}q?Z7Sq&6M|S;7=z0CQ
z?wIvqsQrsj?FS#{Goe0p#}$V(Rr&XqcH2#~e8rY<#o8|~IdjkU1J+rVyN`Nt?YB}i
zS*q;De$~3v{DH!s1=n`xCM0eAEw#`3fp^0E`=54O<=w8yS-UlM2W!T?i&=+!E#@rS
z47Q&k5n_M4*p(iEf(O>#m(TtBu<Pb-lc{aY_6s*bc5Cf)us9xnCS&iUle?ADT*@3?
zU9t}Gh$?+ub;kO3=;{!Q%LlBCzQr%$K7Y+Rt~E8WyZYAdO_j_}2`Oi-WA6!ValE_9
z3LKuRc`WuV`h8HfX7;W<yDMW~{yMZv-&W?X#@ox*Ogf7u^E5rM-gsh1*`u8|cW<(v
zu%6FyJ=p#On?rV3bu4+NF!#dl&h=L`#SE@n@91+?X_|Gy+Vr04{J`$LR?Q_Hw>Pm}
zu{QqZ!KSNwefOH(l3h0zU$ACAmv_3aX$RQ;1A7~HoaKyiVc?j)OPDLPmHF49U9Tcc
z8>@q^Snr00|16a72fLb~p+3~2p&@be!<qfNKRi^@Kg}@Fnnlm?QepKm>qR=(i<Ivl
zvAXeNr%}E89qSKbGi<B#?(JsqxL46AUukWiqqpivP`TCe0_9Z`Hl^<H4!^4(u{ztL
zVkRW~e?#McAJl%-^w$7h)p)=sb%zog%Ypcg?YrO2u-)|_Xs7kb>^)M_jK{3iCmM%L
z$US0pG)wx)oVB;DFCTfl<<W_|yI&R8N@Z<bWUWxU{)d0uLMzRFhhM)riY;z$6KWMW
zRI#H>24X)f{T=XA`L;>>f%T)Pw+oz(-Q4}a>coWFi@U(#&md!L@!-elUCd89thel)
z=w`BDt+nwn4Oh;;7p=YiET21N@nNekQ5?MQ=iRcta==afZub4%O`q)V&aB#JEl|Ha
z^>R$nE>K9y%rCHLT4}QB!HLDYlCt(c+s%A<S5I(aZF1x#>yYQA4_jOwSj)t0P1teZ
z=I*UFbE^J2>;T*EurbVHi{-wVlNPSu9UZ0_XvcHNx@`NA+)$Z|)>jrD5smaYY!$D&
zw(y<CE$hpj6Es{`-P^s!_~~yG$0ODb&2ntBL#Kn|pU=P9Vp96+q?9KMcb#~9d0NH)
zL%R$n#7575f601H;;fg77I&?GuuZsbW_%Z#{~f^L->}-j;!*J)#nw;fcE`-+?cV+U
zoOKG1t>3%-J=O}Yoz43^4_Q^Z7e$00zG3~Il}obu_>J8YKXaY<_pQ--4*!`SUv6!)
zs$&wKpXxcog5%GXCu=-r?5Mi9W6GQfM|au1GX5I+d4ly8sQnD=nD#Tc=vaJ8j$(V-
zd3kre&C^Ex-pketZD+PN8FpF=-kGjDm+gSn!Z{N*YHhx1U0>N6duiL%-Ba|ub+y*F
zS#LhAWzBkLkJZfYo!#v+%@(z1q-U;>Zr*Y9F2sHZsQsNO-uau2?pZ7RxhI(+erI>&
zgDTTm8Jof3udt!o!egI~;Oo4zySMY)`kHs)g0*5#Tx%K2cI$}MI^Pmm4_RI4bh~Do
zb;EkqH}QL>b8hVBT)O+tk`IThFIs)fp0{%=IQ*ws%(htZHRAQLWpj2}^j_-~+;e2t
z^q-n5kG?r<-JVgj{+sJP>#thNZoXH$v-?udf@4=bHh}G4@G#io-1<Wq<$Ese{={Rh
zbm!(3YqfPnn<f`+wmz1>|E}DO{Z{8o1P%GpuUbEhig>6z@#^mB%+lU1>_@E6NUdq9
zU9lT%e*;szg~BV-Cx19+?6MKQnUZ$=$gbW$?q8U99>Ed*0pRkN!AEV!jumnxl716*
z|2U)8bR%GbwZQ5Rb{juTu(nNJwamWvsFkf!g2YO_yVk+41=1!P-`%}ncH>&fcTUy|
zCTX^Xh*nq~FOg1r{c6IF#@~!jHQ!9Ih=Rty4K(~WLgW80YWjoNzu}L$#q8g=_IT{r
zUC=D>^|H?n>zedUCz_^AuwGPkQsSrhQL9tii=N!+zhfQO@vCUflsmf{xZKZAGt9BB
zkbM5c=>0;g9__8sQy!G>n7}D@Y5CJ~i{LYm_=lyxP2O#Rhu++^e)co&eE5UgyJy>+
zliqt~H#qzmYAkjr>}O7J)U4Tk=gQN$nTHlzvsArb;mdZwdhVj!-hPv#Rxfn_PkXcT
zj&)w_QT8l`ySvY+i5f-~@3mgQ@M*)5lPTcvH#nQIL;vG)zslAnyG}LvbA6h8WS2Pm
z&Z`gi9k9MSV}fWC>pg230b%{V&$o9U=DoMZ*kC8v{)VTnJ0{3WXP?=!b+^qfA%)*>
z_FDhv<t=oI+-u!3wew2gkt0_6Z%+0oE8VeHOn%@RpLA!pbe5W<xa$Gydtq)?XIK}2
z?SJ6uv_oh4o&3|&7wxiebYOkI@W?Li!q0(Q-yXF7^=Fr9@LwC7%b!wr);_g@j#GXB
z=YIy7#TFB^YwemEb@ud4bNZXUQ_p6Pt-(`?2qhbx<qI1QFc|Ds&^zjCb>7ToNpZ@b
z#ZxWz>|QGT_sJVEn+X>VOuP4AdH3&~RT>@bCoRq{*dEK9cXG$C3PJ6&_l&In>2im5
zE>yMo54HaWiv1TL_ODuFv3c6+?_U26_lVVh`gk?f*d}4A9+#o8g3X@3Z?QkPb#{k3
z#2<V0$Jj<ZzotvB+jLLck=CiJKgrnK|IT>&zJuoO4RY<l#cxkqNZ714QsOwdW66Gq
z{r{o%XJ$L!-+j>D=B!80=crQ_d(uO;u=0KugpA8K9o``l!|gtQvBsW1TZ5n7^)Rwo
zbbZkl{}tLc?^iqTzTB$2+lixS-LaphHhO8x>^@Ag+_T8**qw+<9UHNY&4I6b6u{-_
zn?sj&G+feAkeB7KJ`}8d@%=Ib>;L*?XEH;LZMOOB)<6H!-iH16G!g5w7JG`Wtv`58
zk`H44|ECrPl4{jHECzeBW4C?@$T73&VYuS?{)M_tJG&F}tVf!=r>$YFt@1Or$q=$R
z^*P0C&)ajeB6XAvY}jv}QYxub1=-*5@*{&~*|Dv^j_a~m%T0Z1AGyH5I&p4ZrRy$Z
z8-~A-_(u)@50L!#;;_Yq8}jV4Ip6K(SeYZrWbnZ{CC2x#<~&uKQ#X|_+`etJ+w;%V
zkKPZhY@{!Ix_kDA&7OoQ;jY#iH>?}%ctpMlJ>6xLk=UrQ;rNd4^G@I5zjVQ3{!B>t
zGwMO&{~t8|uc5^M7jXPL+&pg)Q$OK>cbwRsBe%^Dzm}G;nWKGFt6f9Y#=|yvp-rjL
zZUfJI=h^(NY^EfH?NW=j*~2GLV&?Xj(dJf)M?P0F|L${!f7|wCKC+mT<LW9k|G|#R
zoe=w(p!S=oxQ3tCu($EjdvtO8QHwpAtERs0J0=MU|LUC<27kU>a(VOI`p)0wPl9*y
z*a+(jwEW33v@!m7aO;gA!`)lO?dE=;YH1_-%d(5t&2CRrUwy^3C|R2cx1tN?8a)8#
zzXfi)EP9rHl-ge`Xq~drIsL{_1M3xA4j$Zg#L(vLeQS=Q1bds9c`lc=k6G+-XV<b}
z3l)dhFSB^Z3RljEtGRr8)|kIb{#>YNvq1IqJdtSzHX%j}o~iyd*u7^}HfxTSrOmgq
z6(2uOwB7UlxAbSler21O{fmVTb+LfrpP}LDQ46~!>l+;n{MP&C=(bhtG_Xzycil5N
z(#Ynx$QtjNq1HCaPS-D7^S6fP|1Hq?Z?-sP^Rdw4lg=KlsH^J1KXhz*I9XroiodhY
z6Y%ypEoQhoEqP^WmZrH)O67*fK6>VRgm#PaSD$@k&F8{f9vQ8=JF>lJ=j9idEheA$
z66bt=dB;_s?@L#znOJYyHAQCI-jCL2p!RE^*na?Qf5W5=7BUyuWlG$P_N;imc$c4-
zk<Ge&Hw%5@URmGn{1oo;S$DS{|BtVqyiIJ@T&&$@6=1UGYXTSR|Gm$x%kxzd7Jt{;
zz4;TX$1Rn|7ReXq-w73dykoN;#Qv>N`+XX%>o2Ugv2hEWYIA0()t*<`Tl;M?g&^V2
zyWZmKFUE%DueJB2JMJ$r{-tj->BG7%4I43=O$)uJ=0q9n);gMM#;9p-bLK0@jN&-+
zJ-@C5O{|wvvN^EgobmH*%HZ%{aDI_Rk+I+Gum3r%--Y@%UA$mqoiOo$R+p->4cnWT
zZ?ea2Y`PcxcDcC2YLAg_&MxU!ko+%Tde6e3eu~`L6NY>I{pQPSUp2O=eGzn^_q>qJ
zx3gsx7Z>X6o_9?C%(eg%o4UHBOGj%>_T0GGpwz6VY*TP+ZQlw3O_2Q!D|RwjUfQK*
z$a<31x@xlJ<F!|etaEA$!{)zI#u5KJz~Rr}xnjqG522Id8{X}1*l1>duI-(5)Au*m
zKJNNx&0_UZvsKw-w`)yM@f2@s8)il`j<7)MJqO&|3}h}WwtjHOvQ?(>*{+xQ1>d7O
zw(V%2|NCw`-!=<%57h8K0gZnZl=xo&vHwQDMO#&P=iY5%d(v1lPqgnAv++>ZI#(9;
z(VFr7r{C|k8t+aO3H-sc-O7e@`gE)Hd#v{SGyeb6sOhZrhVPvz`iBH|=a{-5jE>!A
z!E#GQq}_7cjuux``+e^C@hyq8v1t?e!@DfOYLD=Pc?ObxQsDS+klbpaaPcbFlBKtH
zr?@jU?R?K<bH4f7bB!}{HqT-XwR=Pu@6O6|WbV+jw&_Y{N?1^7y{A^y?riW2X&Z*z
zH;#9{T>`iNJ^J2Q>@G?=*|$T;I#g*x^`WCi)(1WBzgaG(U^8j9*SC@i8=DBpm`vqL
zt34OL&j~ZU4bA^elXrwkY;k<oC$eWB7nAjYN*No+MzxO;PBJzzG6D^8FN}7_J8zP4
zT54ruKk-cXsh3uJZ1k)IZ+?)oxp(GehK4RLDE=7~+V5CweR=lFs<#5xo<Dex@t-uZ
zRtoicTy3dn<Kv!baxQw7^=!7+@^j{%w(bY_?>AdZ@PqpI8?Ab-##k*eYOwA&taVGP
z;u*C6zj=2w6Ig!Nb?;BkdoAYfW;|2z{mY9N*696z?ngmF5;DpbDY}w}PgO<kK=1#D
z$E5k6J2=NW$YS-Dzxjuu{re5pxxKrNdU36{dJ=Y&!{cn3wcPe!C6k(8So?$f{~LCv
zJq7ju*YEN*-EcX6_RQU<w>l{)UU_Pb-v7VmC(Zt0h3}3X?Ax*mz0-D}_y1WG@((Ka
z?6MBYI`gvV`6=u2lYP}kpB}QFk_PJEZ?N*W*mVA>OM~@{)D!+|CO@;@^>^B5Z>`O{
zm0ZE{yHYE4Ui?j7yZgl6M@`;KUs$8}|1+mR`u!ps!L${6|KBCI{CW7U-PWI8H1{6)
zaL797yvU0rlLOXi-Jt&cTB{0%+|{}-%B<z4&0T$F(F^O-b%_;rXEy9+F;tr$*u8dF
z6)#KJMdOvbqqn~J@P6h~YxMsA+80USe*asoKoD((-v596vL(3o%0z3)7xx%dBJV)^
z_uH%&hF>pIzQ4sv>x9t1MGGca+bHE6`k#6aCck?zBUpadi4Pyb9+)rO{e)f9;&0Sj
zYxMqq->m0ia*y3DekL>Iepy$s1HJ!0`=6ccr1Mj(eFE=Z(sa3QeG1&a-)8;A8q~kv
zV)ZI*V}^`(w{^#zZ9i)EKD0gok>4Hl3@pE^_<~cL-mL|@&rGjBW54^2HG2R5#5@n}
zpeJEFm=>?JZ+qHmf!_Z&+QR;1vcxuPO95HI#2L4(Utft@nX&PN^$pe)bEhocZ1pi>
zs_N7A6Rb5}NYuEu-n0Ie_x51$#BICxd;<0VH}7hm{xf5T@#fu6dex=USl?Qs_y6Zj
zH3IkhQ}>#IXsaZ&{y*DVwfveb+pP^^UIp)1e$9IEvFtNbbdFn_pFbiR>9g4??&XZL
z9%<dyUg@`=vs`>=Ju$#qPDf(f?xGT~{I0Wwy|<%SH|?HzTkh=4%s1BP{r~fmpMm@R
zVb&i&v=w^)|Lftsr==wItl1KdW?7V-woV22?`y12hl2X|o2*oJ=<~g<6S5Ax^Vn4`
z;+b_aM1FUP30QuY=Cz-3OzRDHZ&BN4k$d!oHG2OaGX8hm-1+}!M^4Wb7U=zd{-!i7
z>1+dQrxUL%TtW_8F9P@PE3K6tgZlRytmft`{YdBJvi59>3Ywkp!g>KjemBEau>7u~
zx6hWv+v@HX;O=h!x8<oddjB6X?zr0=QVvbFK=1#52tU9jd~t#Gxi34p%nzNiw%wK!
z+hMlV`eujjw?x)WRvbI8xjOa>Su1XS#@JBu%-T6lw*Jw*n%&pWYJ=o=P0!i(g85Iz
zZd(WaTb9i)tkL`bLVIn&{eC;W5)f^L-v7Uz#bmqg;{xkF*W~_9x^~FAW^U)6Eq6Cs
z`|Jnx@7G&}pJ%H(s>o%{KZT|BT*C|N*<2Ij-uqVWwpRel?_%aGR=&ZNy8Fg+6HdvR
zr`G8G{~te%!To-ZTjn6z3cdfo^Fi@y?idy8wH%KxY%#cF%@6M1H(0NV1@-T@TG{MR
zT;B3W$(kd<{lj9bd)9&w`P~;X!1B9fBUBEXtu)?!qRqly&hV`@djG#{b#}(P=a<b@
zcJwXndc9x=djDUZE!ZyUu)1~AhRJTfl&)J>gZuXl)*aQL{{2>~!^W(dF<SE0Vlm#f
z`b!>KL;C*>yZ2Ut<#$>7JIPzw8SfTZux+)=q&L>+{eK;Sipe*9ub4y1q4pi<{r?qT
z`ww~rEU;#<yYgAM=(csxjB93V-t4uGp9bpRZ?)RDZpJEqPG##E?1H*%(f6#k-*viC
z@xNjB?R8-JUC9r-4P)jP?q2Ph<gb1AjWv4zpQ&yoxZfX>vJ6C9q4)oL_rCS}SHHm8
zUh<8Bf5$cJhrM6<cDwAho>vd*-*2(1EfV;9(ox>}=JDH|2|FHIe`44pV7;Vacjjua
z{H~dM=DNP)E7-k4Jv7tN>5Vmd|3Bmdq~FgP2d1si`~TK|_uh4y_tSbGpX0@7S1p@;
z;Qqak&Ahpw{=LHPpHsZ%1=rlSHaBr-7EExp*#(i`vugub-Z~)SOXlpfKf51Y5K+wE
z<ZgrB|A*B3p3wULrUiQcKVZuJEzF;PTl3v&V%<=y1nu7o*a#JY`u8%sXImU`4A8u0
zopDgV>`$P(O+2{&FR&+VHCWzS`OPIqo5w$PZ@Zqmg5`*d4SN4yAh<?aWmOH_e)Rso
zY$#Xky*rXN1_9qZGCykCyl&Vh{W?I&=KD`j|6X?Y^i>o4v{)Zl^Sfz@Z#?O0lfU+a
z;mLJEd!EOF<*k$7FKYBT$+O48yr(Ssn7a*n|6jRE3*7I&r=<^~cOOFQ|6kTl*EHmm
zwo$xTb|uG6$wuRw{jZdKd7J6W9hhf5lH6UiZlTeaiPx;B<#WG%dD7kHJy*ue$|Qk3
z<>}5KdFx4fn=?;s=Gaqze}VG$n=Ur!{r`j=$H4vm-YZK$^ltS2f5-Z1+HN5qtsN(y
z_;v8Rl}!@3e=lnDYa^(CueAHar=2qeH9uI-h>7^Z_u9rL4I;m17Ng3A+qadhC(e78
z#J`7Ok5Sr@=R9w{ZP5Gwko>>d0um2*cA)qF1-ZU2e{K22x-Cb%Sy9Q%W<I!oFKRRG
zZ_q-UQl;Hj3^rTcXnSS7{2<G=@CObyvmo+&e%FBd|4P<syAK5aPhi;dC`9V0Sg5xR
zdjB6{?-~nJf5o)ymX8+b{eOOI`9P0iQJdhuQ!?Ybt!(Db{A#!0j=If`C!qel;_ix~
zO@iSmAFOplC+$~HwzU!L44t&`ljxpx;)k~02vW4J?R>vE{D9D&ryP4GGrjY+LGS-B
z=lcZi_ZQiG1kt<E`~Rt#x5~M=#cl4(xa|LO-qfaO`BmMpY&Dxl)}a2q!tO86L>?4<
zcxAoSK&~%D+tFsOd!ziaM$tXTG{ExK&w5NY$j=kp6KPZQTR+a*2EG43?ST!r-~UY6
z3PkTl@BjCA9O_*?f1-6g_X2;d4VpGx;QswR>yNyk{=MSv8S)BZ|5ub+PhAmNwf32d
zO+Q3__iG`rymiITaG4#QlXs`STeIf2wz~~_{~r?mG8T|@@Yn*q|34++%0nZo$<})F
zue+`lQL<SD?%&_C-j)IC-^=cnsNdLqxHivv-Qm-Fdd|ApY=X$|W>^iDw?6utQ=CbD
z;_loJR@cP*Tx`($|B!f3w1CwApDob)|KELtzi7BJ*rb>gIId69w6W7O>fID1Vxv6?
z)W28QZJLy3<MgT2+90N<S1HKV##Qyq_4w)cc3W%&%UiPs&bVl>^VII@So8E<&h9qo
z{r?Shkbb}M3tv$Ge>ZynKRIi|$yHelHbVPV{(gI?XwzMP<eaaPppD<1(u#`<Wp*##
zc{H8%b)I#LSn|C}cXu0w{$~>ZFW=fde}6eh-um(TXvOCCW4rs59R2OmU2M?%|5YWH
z;C{a*qX>xJjo$zNzclInf$QzoZz_I=&5pCOX$1H0A6jd=f%^9<yT4Z%Z5Op^v;KFt
z{pb}p8=Dr0{O$+3V0r7AzlHjO*{1JaVt2&0)X&=nz5nkdVG?_+ByI<!|8;B!djH>{
z@M?<Im2T_G*_<i)OH85t`-j$SuR;BL<=s2i?{{2d-(<b(u1!osgM*DHxc~of_n%K-
zdFxw~xTH8cr|sSzS|WLGr<V<S|Nqry-HBnZ94(;sTeP6{|MO1UGJj3_Zym7Wz3#mq
zmNp+ZTJb3M%GjK72leljcRN)?d~Yaivu^Z=ewTgF#^zJsy*qY49`62M2$r}0<!);r
ze(cijUoRFKiiCLEp!fe<Skl1#{!b6$K=f|({{ND1{80uM{#y%Avq{(%ZfeuH=b`da
zJ}Da;MNt1<X*X}3SdLXmlXVXN*8d;QIM^IiRm++;`{C|taj?9#YQ^MZd`cI0`)Ao(
awH^1eLGS;oZ#oa|_d6?|0nxkB`~Lur?UbGX

literal 0
HcmV?d00001

-- 
GitLab