[Beignet] [PATCH 1/2 v2] Prepare to add uperformance test suite

Yi Sun yi.sun at intel.com
Mon Mar 31 20:15:55 PDT 2014


Take original utest as a sub test suite of the 'utests'. Then we can add some other test suite (e.g. uperformance)
Move utests to utests/utest.
Move kernels to utests/kernels

TO-DO:
  Add a respective performance folder in utests (e.g. uperform)
  Add a strict math function test suite which comes from bruteforce (a test case from ocl-conformance)
  Make utest all pass by decreasing the precision.

Signed-off-by: Yi Sun <yi.sun at intel.com>

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4ed27b5..23fdd63 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -145,7 +145,7 @@ Find_Package(PythonInterp)
 ADD_SUBDIRECTORY(include)
 ADD_SUBDIRECTORY(backend)
 ADD_SUBDIRECTORY(src)
-ADD_SUBDIRECTORY(utests)
+ADD_SUBDIRECTORY(utests/utest)
 
 SET(CPACK_PACKAGE_VERSION_MAJOR "${LIBCL_DRIVER_VERSION_MAJOR}")
 SET(CPACK_PACKAGE_VERSION_MINOR "${LIBCL_DRIVER_VERSION_MINOR}")
diff --git a/kernels/buildin_work_dim.cl b/kernels/buildin_work_dim.cl
deleted file mode 100644
index 27c0e18..0000000
--- a/kernels/buildin_work_dim.cl
+++ /dev/null
@@ -1,3 +0,0 @@
-kernel void buildin_work_dim( __global int *ret ) {
-  *ret = get_work_dim();
-}
diff --git a/kernels/builtin_acos_asin.cl b/kernels/builtin_acos_asin.cl
deleted file mode 100644
index bba2d21..0000000
--- a/kernels/builtin_acos_asin.cl
+++ /dev/null
@@ -1,10 +0,0 @@
-__kernel void builtin_acos_asin(__global float *dst, __global float *src, __global int *max_func) {
-  int i = get_global_id(0);
-  float x = src[i];
-
-  dst[i * (*max_func) + 0] = acos(x);
-  dst[i * (*max_func) + 1] = acosh(x);
-  dst[i * (*max_func) + 2] = asin(x);
-  dst[i * (*max_func) + 3] = asinh(x);
-  dst[i * (*max_func) + 4] = x;
-};
diff --git a/kernels/builtin_atan2.cl b/kernels/builtin_atan2.cl
deleted file mode 100644
index aba73be..0000000
--- a/kernels/builtin_atan2.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void builtin_atan2(global float *y, global float *x, global float *dst) {
-  int i = get_global_id(0);
-  dst[i] = atan2(y[i], x[i]);
-};
diff --git a/kernels/builtin_bitselect.cl b/kernels/builtin_bitselect.cl
deleted file mode 100644
index 9b60cbe..0000000
--- a/kernels/builtin_bitselect.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void builtin_bitselect(global float *src1, global float *src2, global float *src3, global float *dst) {
-  int i = get_global_id(0);
-  dst[i] = bitselect(src1[i], src2[i], src3[i]);
-}
diff --git a/kernels/builtin_convert_sat.cl b/kernels/builtin_convert_sat.cl
deleted file mode 100644
index 1485f1d..0000000
--- a/kernels/builtin_convert_sat.cl
+++ /dev/null
@@ -1,48 +0,0 @@
-#define DEF(DSTTYPE, SRCTYPE) \
-  kernel void builtin_convert_ ## SRCTYPE ## _to_ ## DSTTYPE ## _sat(global SRCTYPE *src, global DSTTYPE *dst) { \
-  int i = get_global_id(0); \
-  dst[i] = convert_ ## DSTTYPE ## _sat(src[i]); \
-}
-
-DEF(char, uchar);
-DEF(char, short);
-DEF(char, ushort);
-DEF(char, int);
-DEF(char, uint);
-DEF(char, long);
-DEF(char, ulong);
-DEF(char, float);
-DEF(uchar, char);
-DEF(uchar, short);
-DEF(uchar, ushort);
-DEF(uchar, int);
-DEF(uchar, uint);
-DEF(uchar, long);
-DEF(uchar, ulong);
-DEF(uchar, float);
-DEF(short, ushort);
-DEF(short, int);
-DEF(short, uint);
-DEF(short, long);
-DEF(short, ulong);
-DEF(short, float);
-DEF(ushort, short);
-DEF(ushort, int);
-DEF(ushort, uint);
-DEF(ushort, long);
-DEF(ushort, ulong);
-DEF(ushort, float);
-DEF(int, uint);
-DEF(int, long);
-DEF(int, ulong);
-DEF(int, float);
-DEF(uint, int);
-DEF(uint, long);
-DEF(uint, ulong);
-DEF(uint, float);
-DEF(long, ulong);
-DEF(long, float);
-DEF(ulong, long);
-DEF(ulong, float);
-#undef DEF
-
diff --git a/kernels/builtin_exp.cl b/kernels/builtin_exp.cl
deleted file mode 100644
index ecc1a3e..0000000
--- a/kernels/builtin_exp.cl
+++ /dev/null
@@ -1,10 +0,0 @@
-__kernel void builtin_exp(__global float *dst, __global float *src, __global int *max_func) {
-  int i = get_global_id(0);
-  float x = src[i];
-
-  dst[i * (*max_func) + 0] = exp(x);
-  dst[i * (*max_func) + 1] = exp2(x);
-  dst[i * (*max_func) + 2] = exp10(x);
-  dst[i * (*max_func) + 3] = expm1(x);
-  dst[i * (*max_func) + 4] = x;
-};
diff --git a/kernels/builtin_frexp.cl b/kernels/builtin_frexp.cl
deleted file mode 100644
index 766695a..0000000
--- a/kernels/builtin_frexp.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void builtin_frexp(global float *src, global float *dst, global int *e) {
-  int i = get_global_id(0);
-  dst[i] = frexp(src[i], &e[i]);
-}
diff --git a/kernels/builtin_global_id.cl b/kernels/builtin_global_id.cl
deleted file mode 100644
index 5b82f9f..0000000
--- a/kernels/builtin_global_id.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void builtin_global_id( __global int *ret) {
-  int id = get_global_id(0) + get_global_id(1)*3 + get_global_id(2)*3*4;
-  ret[id] = id;
-}
diff --git a/kernels/builtin_global_size.cl b/kernels/builtin_global_size.cl
deleted file mode 100644
index e6ddb2f..0000000
--- a/kernels/builtin_global_size.cl
+++ /dev/null
@@ -1,3 +0,0 @@
-kernel void builtin_global_size( __global int *ret, __global int *i_dim ) {
-  *ret = get_global_size( *i_dim);
-}
diff --git a/kernels/builtin_lgamma.cl b/kernels/builtin_lgamma.cl
deleted file mode 100644
index 85bf859..0000000
--- a/kernels/builtin_lgamma.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void builtin_lgamma(global float *src, global float *dst) {
-  int i = get_global_id(0);
-  dst[i] = lgamma(src[i]);
-};
diff --git a/kernels/builtin_lgamma_r.cl b/kernels/builtin_lgamma_r.cl
deleted file mode 100644
index 71fcc36..0000000
--- a/kernels/builtin_lgamma_r.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void builtin_lgamma_r(global float *src, global float *dst, global int *signp) {
-  int i = get_global_id(0);
-  dst[i] = lgamma_r(src[i], signp+i);
-};
diff --git a/kernels/builtin_local_id.cl b/kernels/builtin_local_id.cl
deleted file mode 100644
index 489833d..0000000
--- a/kernels/builtin_local_id.cl
+++ /dev/null
@@ -1,6 +0,0 @@
-kernel void builtin_local_id( __global int *ret) {
-  int id = get_local_id(0) +  get_group_id(0) * 2 + \
-           get_local_id(1) * 4 + get_group_id(1) * 12 +\
-           get_local_id(2) * 36 + get_group_id(2) * 144;
-  ret[id] = id;
-}
diff --git a/kernels/builtin_local_size.cl b/kernels/builtin_local_size.cl
deleted file mode 100644
index 979d907..0000000
--- a/kernels/builtin_local_size.cl
+++ /dev/null
@@ -1,3 +0,0 @@
-kernel void builtin_local_size( __global int *ret, __global int *i_dim ) {
-  *ret = get_local_size( *i_dim);
-}
diff --git a/kernels/builtin_mad_sat.cl b/kernels/builtin_mad_sat.cl
deleted file mode 100644
index 1739a4d..0000000
--- a/kernels/builtin_mad_sat.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void builtin_mad_sat(global short *src1, global short *src2, global short *src3, global short *dst) {
-  short i = get_global_id(0);
-  dst[i] = mad_sat(src1[i], src2[i], src3[i]);
-}
diff --git a/kernels/builtin_modf.cl b/kernels/builtin_modf.cl
deleted file mode 100644
index 43630ed..0000000
--- a/kernels/builtin_modf.cl
+++ /dev/null
@@ -1,6 +0,0 @@
-kernel void builtin_modf(global float *src, global float *dst, global float *it) {
-  int i = get_global_id(0);
-  float x;
-  dst[i] = modf(src[i], &x);
-  it[i] = x;
-}
diff --git a/kernels/builtin_nextafter.cl b/kernels/builtin_nextafter.cl
deleted file mode 100644
index 3945e34..0000000
--- a/kernels/builtin_nextafter.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void builtin_nextafter(global float *src1, global float *src2, global float *dst) {
-  int i = get_global_id(0);
-  dst[i] = nextafter(src1[i], src2[i]);
-}
diff --git a/kernels/builtin_num_groups.cl b/kernels/builtin_num_groups.cl
deleted file mode 100644
index 719d25d..0000000
--- a/kernels/builtin_num_groups.cl
+++ /dev/null
@@ -1,3 +0,0 @@
-kernel void builtin_num_groups( __global int *ret, __global int *i_dim ) {
-  *ret = get_num_groups( *i_dim);
-}
diff --git a/kernels/builtin_pow.cl b/kernels/builtin_pow.cl
deleted file mode 100644
index 17d753e..0000000
--- a/kernels/builtin_pow.cl
+++ /dev/null
@@ -1,7 +0,0 @@
-kernel void builtin_pow(global float *dst, global float *src1, global float *src2, global int *max_func) {
-
-  int i = get_global_id(0);
-  dst[i * (*max_func) + 0] = pow(src1[i], src2[i]);
-  dst[i * (*max_func) + 1] = src1[i];
-
-}
diff --git a/kernels/builtin_remquo.cl b/kernels/builtin_remquo.cl
deleted file mode 100644
index d66c164..0000000
--- a/kernels/builtin_remquo.cl
+++ /dev/null
@@ -1,6 +0,0 @@
-kernel void builtin_remquo(global float *x, global float *y, global float *dst, global int *quo) {
-  int i = get_global_id(0);
-  int q;
-  dst[i] = remquo(x[i], y[i], & q);
-  quo[i] = q;
-}
diff --git a/kernels/builtin_shuffle.cl b/kernels/builtin_shuffle.cl
deleted file mode 100644
index ad988b9..0000000
--- a/kernels/builtin_shuffle.cl
+++ /dev/null
@@ -1,8 +0,0 @@
-kernel void builtin_shuffle(global float *src1, global float *src2, global float *dst1, global float *dst2) {
-  int i = get_global_id(0);
-  float2 src = (float2)(src1[i], src2[i]);
-  uint2 mask = (uint2)(1, 0);
-  float2 dst = shuffle(src, mask);
-  dst1[i] = dst.s0;
-  dst2[i] = dst.s1;
-}
diff --git a/kernels/builtin_shuffle2.cl b/kernels/builtin_shuffle2.cl
deleted file mode 100644
index 1a122d4..0000000
--- a/kernels/builtin_shuffle2.cl
+++ /dev/null
@@ -1,13 +0,0 @@
-kernel void builtin_shuffle2(global float *src1, global float *src2, global float *dst1, global float *dst2) {
-  int i = get_global_id(0);
-  float2 x = (float2)(src1[i], src2[i]);
-  float2 y = (float2)(1234, 5678);
-  uint4 mask = (uint4)(1, 0, 0, 0);
-  float4 v1 = shuffle2(x, y, mask);
-  float16 x2 = 0;
-  float16 y2 = (float16)(src1[i], src2[i], 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
-  uint16 mask2 = (uint16)(17, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
-  float16 v2 = shuffle2(x2, y2, mask2);
-  dst1[i] = v1.s0 + v2.s0;
-  dst2[i] = v1.s1 + v2.s1;
-}
diff --git a/kernels/builtin_sign.cl b/kernels/builtin_sign.cl
deleted file mode 100644
index ff9a66b..0000000
--- a/kernels/builtin_sign.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void builtin_sign(global float *src, global float *dst) {
-  int i = get_global_id(0);
-  dst[i] = sign(src[i]);
-}
diff --git a/kernels/builtin_sinpi.cl b/kernels/builtin_sinpi.cl
deleted file mode 100644
index 134152d..0000000
--- a/kernels/builtin_sinpi.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void builtin_sinpi(global float *src, global float *dst) {
-  int i = get_global_id(0);
-  dst[i] = sinpi(src[i]);
-};
diff --git a/kernels/builtin_tgamma.cl b/kernels/builtin_tgamma.cl
deleted file mode 100644
index 1f7abc3..0000000
--- a/kernels/builtin_tgamma.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void builtin_tgamma(global float *src, global float *dst) {
-  int i = get_global_id(0);
-  dst[i] = tgamma(src[i]);
-};
diff --git a/kernels/compiler_abs.cl b/kernels/compiler_abs.cl
deleted file mode 100644
index 549575c..0000000
--- a/kernels/compiler_abs.cl
+++ /dev/null
@@ -1,28 +0,0 @@
-#define COMPILER_ABS_FUNC_1(TYPE, UTYPE) \
-    kernel void compiler_abs_##TYPE ( \
-           global TYPE* src, global UTYPE* dst) { \
-        int i = get_global_id(0); \
-        dst[i] = abs(src[i]);     \
-    }
-
-#define COMPILER_ABS_FUNC_N(TYPE, UTYPE, N) \
-    kernel void compiler_abs_##TYPE##N ( \
-           global TYPE##N* src, global UTYPE##N* dst) { \
-        int i = get_global_id(0); \
-        dst[i] = abs(src[i]);     \
-    }
-
-#define COMPILER_ABS(TYPE, UTYPE)  \
-    COMPILER_ABS_FUNC_1(TYPE, UTYPE) \
-    COMPILER_ABS_FUNC_N(TYPE, UTYPE, 2) \
-    COMPILER_ABS_FUNC_N(TYPE, UTYPE, 3) \
-    COMPILER_ABS_FUNC_N(TYPE, UTYPE, 4) \
-    COMPILER_ABS_FUNC_N(TYPE, UTYPE, 8) \
-    COMPILER_ABS_FUNC_N(TYPE, UTYPE, 16)
-
-COMPILER_ABS(int, uint)
-COMPILER_ABS(uint, uint)
-COMPILER_ABS(char, uchar)
-COMPILER_ABS(uchar, uchar)
-COMPILER_ABS(short, ushort)
-COMPILER_ABS(ushort, ushort)
diff --git a/kernels/compiler_abs_diff.cl b/kernels/compiler_abs_diff.cl
deleted file mode 100644
index 1f30df4..0000000
--- a/kernels/compiler_abs_diff.cl
+++ /dev/null
@@ -1,30 +0,0 @@
-#define COMPILER_ABS_FUNC_1(TYPE, UTYPE) \
-    kernel void compiler_abs_diff_##TYPE ( \
-           global TYPE* x, global TYPE* y, global UTYPE* diff) { \
-        int i = get_global_id(0); \
-        diff[i] = abs_diff(x[i], y[i]);     \
-    }
-
-#define COMPILER_ABS_FUNC_N(TYPE, UTYPE, N) \
-    kernel void compiler_abs_diff_##TYPE##N ( \
-           global TYPE##N* x, global TYPE##N* y, global UTYPE##N* diff) { \
-        int i = get_global_id(0); \
-        diff[i] = abs_diff(x[i], y[i]);     \
-    }
-
-#define COMPILER_ABS(TYPE, UTYPE)  \
-    COMPILER_ABS_FUNC_1(TYPE, UTYPE) \
-    COMPILER_ABS_FUNC_N(TYPE, UTYPE, 2) \
-    COMPILER_ABS_FUNC_N(TYPE, UTYPE, 3) \
-    COMPILER_ABS_FUNC_N(TYPE, UTYPE, 4) \
-    COMPILER_ABS_FUNC_N(TYPE, UTYPE, 8) \
-    COMPILER_ABS_FUNC_N(TYPE, UTYPE, 16)
-
-COMPILER_ABS(int, uint)
-COMPILER_ABS(uint, uint)
-COMPILER_ABS(char, uchar)
-COMPILER_ABS(uchar, uchar)
-COMPILER_ABS(short, ushort)
-COMPILER_ABS(ushort, ushort)
-COMPILER_ABS(long, ulong)
-COMPILER_ABS(ulong, ulong)
diff --git a/kernels/compiler_address_space.cl b/kernels/compiler_address_space.cl
deleted file mode 100644
index 68b7746..0000000
--- a/kernels/compiler_address_space.cl
+++ /dev/null
@@ -1,9 +0,0 @@
-/* test OpenCL 1.1 Address Space Qualifiers (section 6.5) */
-__constant float cf1[] = {1, 2, 3};
-constant float cf2[] = {4, 5, 6};
-__kernel void compiler_address_space(__global float *gf1, global float *gf2) {
-  __local float lf1[4];
-  local float lf2[4];
-  __private float pf1[4];
-  private float pf2[4];
-}
diff --git a/kernels/compiler_argument_structure.cl b/kernels/compiler_argument_structure.cl
deleted file mode 100644
index ab7896e..0000000
--- a/kernels/compiler_argument_structure.cl
+++ /dev/null
@@ -1,9 +0,0 @@
-struct hop { int x, y; };
-
-__kernel void
-compiler_argument_structure(__global int *dst, struct hop h)
-{
-  int id = (int)get_global_id(0);
-  dst[id] = h.x + h.y;
-}
-
diff --git a/kernels/compiler_argument_structure_indirect.cl b/kernels/compiler_argument_structure_indirect.cl
deleted file mode 100644
index c4b062f..0000000
--- a/kernels/compiler_argument_structure_indirect.cl
+++ /dev/null
@@ -1,9 +0,0 @@
-struct hop { int x[16]; };
-
-__kernel void
-compiler_argument_structure(__global int *dst, struct hop h)
-{
-  int id = (int)get_global_id(0);
-  dst[id] = h.x[get_local_id(0)];
-}
-
diff --git a/kernels/compiler_arith_shift_right.cl b/kernels/compiler_arith_shift_right.cl
deleted file mode 100644
index 03a4d8d..0000000
--- a/kernels/compiler_arith_shift_right.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void compiler_arith_shift_right(global int *src, global int *dst) {
-    int i = get_global_id(0);
-    dst[i] = src[i] >> 24;
-}
diff --git a/kernels/compiler_array.cl b/kernels/compiler_array.cl
deleted file mode 100644
index 5dce4d9..0000000
--- a/kernels/compiler_array.cl
+++ /dev/null
@@ -1,14 +0,0 @@
-__kernel void
-compiler_array(__global int *src, __global int *dst)
-{
-  int array[16];
-  int i;
-  for (i = 0; i < 16; ++i) {
-    if (src[0] > 10)
-      array[i] = get_local_id(0);
-    else
-      array[15 - i] = 3 + get_local_id(1);
-  }
-  dst[get_global_id(0)] = array[get_local_id(0)];
-}
-
diff --git a/kernels/compiler_array0.cl b/kernels/compiler_array0.cl
deleted file mode 100644
index 3ab0fb8..0000000
--- a/kernels/compiler_array0.cl
+++ /dev/null
@@ -1,16 +0,0 @@
-__kernel void
-compiler_array0(__global int *src, __global int *dst)
-{
-  int i;
-  int final[16];
-  for (i = 0; i < 16; ++i) {
-    int array[16], j;
-    for (j = 0; j < 16; ++j)
-      array[j] = get_global_id(0);
-    for (j = 0; j < src[0]; ++j)
-      array[j] = 1+src[j];
-    final[i] = array[i];
-  }
-  dst[get_global_id(0)] = final[get_global_id(0)];
-}
-
diff --git a/kernels/compiler_array1.cl b/kernels/compiler_array1.cl
deleted file mode 100644
index ad567c2..0000000
--- a/kernels/compiler_array1.cl
+++ /dev/null
@@ -1,15 +0,0 @@
-__kernel void
-compiler_array1(__global int *src, __global int *dst)
-{
-  int final[16];
-  for (int i = 0; i < 16; ++i) {
-    int array[16];
-    for (int j = 0; j < src[0]; ++j)
-      array[j] = 1+src[0];
-    for (int j = src[0]; j < 16; ++j)
-      array[j] = get_global_id(0);
-    final[i] = array[i];
-  }
-  dst[get_global_id(0)] = final[get_global_id(0)];
-}
-
diff --git a/kernels/compiler_array2.cl b/kernels/compiler_array2.cl
deleted file mode 100644
index ae73932..0000000
--- a/kernels/compiler_array2.cl
+++ /dev/null
@@ -1,13 +0,0 @@
-__kernel void
-compiler_array2(__global int *src, __global int *dst)
-{
-  int final[16];
-  int array[16];
-  for (int j = 0; j < 16; ++j) array[j] = j;
-  for (int j = 0; j < 16; ++j) final[j] = j+1;
-  if (get_global_id(0) == 15)
-    dst[get_global_id(0)] = final[get_global_id(0)];
-  else
-    dst[get_global_id(0)] = array[15 - get_global_id(0)];
-}
-
diff --git a/kernels/compiler_array3.cl b/kernels/compiler_array3.cl
deleted file mode 100644
index 152c22a..0000000
--- a/kernels/compiler_array3.cl
+++ /dev/null
@@ -1,14 +0,0 @@
-__kernel void
-compiler_array3(__global int *src, __global int *dst)
-{
-  int tmp[32];
-  for (int i = 0; i < 16; ++i) {
-    for (int j = 0; j < 16; ++j)
-      tmp[j] = get_global_id(0);
-    for (int j = 0; j < src[0]; ++j)
-      tmp[j] = 1+src[j];
-    tmp[16+i] = tmp[i];
-  }
-  dst[get_global_id(0)] = tmp[16+get_global_id(0)];
-}
-
diff --git a/kernels/compiler_async_copy.cl b/kernels/compiler_async_copy.cl
deleted file mode 100644
index 06ec8e7..0000000
--- a/kernels/compiler_async_copy.cl
+++ /dev/null
@@ -1,24 +0,0 @@
-#define DEF(TYPE) \
-kernel void \
-compiler_async_copy_##TYPE(__global TYPE *dst, __global TYPE *src, __local TYPE *localBuffer, int copiesPerWorkItem) \
-{ \
-  event_t event; \
-  int copiesPerWorkgroup = copiesPerWorkItem * get_local_size(0); \
-  int i; \
-  event = async_work_group_copy((__local TYPE*)localBuffer, (__global const TYPE*)(src+copiesPerWorkgroup*get_group_id(0)), (size_t)copiesPerWorkgroup, (event_t)0 ); \
-  wait_group_events( 1, &event ); \
-\
-  event = async_work_group_copy((__global TYPE*)(dst+copiesPerWorkgroup*get_group_id(0)), (__local const TYPE*)localBuffer, (size_t)copiesPerWorkgroup, (event_t)0 ); \
-  wait_group_events( 1, &event ); \
-}
-
-DEF(char2);
-DEF(uchar2);
-DEF(short2);
-DEF(ushort2);
-DEF(int2);
-DEF(uint2);
-DEF(long2);
-DEF(ulong2);
-DEF(float2);
-DEF(double2);
diff --git a/kernels/compiler_async_copy_and_prefetch.cl b/kernels/compiler_async_copy_and_prefetch.cl
deleted file mode 100644
index 7489bb0..0000000
--- a/kernels/compiler_async_copy_and_prefetch.cl
+++ /dev/null
@@ -1,9 +0,0 @@
-/* test OpenCL 1.1 Async Copies and Prefetch Functions (section 6.11.10) */
-kernel void compiler_async_copy_and_prefetch(__global float *p) {
-  prefetch(p, 10);
-  local float l[10];
-  event_t e[2];
-  async_work_group_copy(l, p, 10, 0);
-  async_work_group_copy(p, l, 10, 0);
-  wait_group_events(2, e);
-}
diff --git a/kernels/compiler_async_stride_copy.cl b/kernels/compiler_async_stride_copy.cl
deleted file mode 100644
index a926588..0000000
--- a/kernels/compiler_async_stride_copy.cl
+++ /dev/null
@@ -1,16 +0,0 @@
-__kernel void
-compiler_async_stride_copy(__global char4 *dst, __global char4 *src, __local char4 *localBuffer, int copiesPerWorkItem, int stride)
-{
-  event_t event;
-  int copiesPerWorkgroup = copiesPerWorkItem * get_local_size(0);
-  int i;
-  event = async_work_group_strided_copy( (__local char4*)localBuffer, (__global const char4*)(src+copiesPerWorkgroup*stride*get_group_id(0)), (size_t)copiesPerWorkgroup, (size_t)stride, (event_t)0 );
-  wait_group_events( 1, &event );
-
-  for(i=0; i<copiesPerWorkItem; i++)
-    localBuffer[ get_local_id( 0 )*copiesPerWorkItem+i ] = localBuffer[ get_local_id( 0 )*copiesPerWorkItem+i ] + (char4)(3);
-  barrier(CLK_LOCAL_MEM_FENCE);
-
-  event = async_work_group_strided_copy((__global char4*)(dst+copiesPerWorkgroup*stride*get_group_id(0)), (__local const char4*)localBuffer, (size_t)copiesPerWorkgroup, (size_t)stride, (event_t)0 );
-  wait_group_events( 1, &event );
-}
diff --git a/kernels/compiler_atomic_functions.cl b/kernels/compiler_atomic_functions.cl
deleted file mode 100644
index fbc16fb..0000000
--- a/kernels/compiler_atomic_functions.cl
+++ /dev/null
@@ -1,50 +0,0 @@
-__kernel void compiler_atomic_functions(__global int *dst, __local int *tmp, __global int *src) {
-  int lid = get_local_id(0);
-  int i = lid % 12;
-  if(lid == 0) {
-    for(int j=0; j<12; j=j+1) {
-      atomic_xchg(&tmp[j], 0);
-    }
-    atomic_xchg(&tmp[4], -1);
-  }
-  barrier(CLK_LOCAL_MEM_FENCE);
-
-  switch(i) {
-    case 0: atomic_inc(&tmp[i]); break;
-    case 1: atomic_dec(&tmp[i]); break;
-    case 2: atomic_add(&tmp[i], src[lid]); break;
-    case 3: atomic_sub(&tmp[i], src[lid]); break;
-    case 4: atomic_and(&tmp[i], ~(src[lid]<<(lid / 16))); break;
-    case 5: atomic_or (&tmp[i], src[lid]<<(lid / 16)); break;
-    case 6: atomic_xor(&tmp[i], src[lid]); break;
-    case 7: atomic_min(&tmp[i], -src[lid]); break;
-    case 8: atomic_max(&tmp[i], src[lid]); break;
-    case 9: atomic_min((__local unsigned int *)&tmp[i], -src[lid]); break;
-    case 10: atomic_max((__local unsigned int *)&tmp[i], src[lid]); break;
-    case 11: atomic_cmpxchg(&(tmp[i]), 0, src[10]); break;
-    default:  break;
-  }
-
-  switch(i) {
-    case 0: atomic_inc(&dst[i]); break;
-    case 1: atomic_dec(&dst[i]); break;
-    case 2: atomic_add(&dst[i], src[lid]); break;
-    case 3: atomic_sub(&dst[i], src[lid]); break;
-    case 4: atomic_and(&dst[i], ~(src[lid]<<(lid / 16))); break;
-    case 5: atomic_or (&dst[i], src[lid]<<(lid / 16)); break;
-    case 6: atomic_xor(&dst[i], src[lid]); break;
-    case 7: atomic_min(&dst[i], -src[lid]); break;
-    case 8: atomic_max(&dst[i], src[lid]); break;
-    case 9: atomic_min((__global unsigned int *)&dst[i], -src[lid]); break;
-    case 10: atomic_max((__global unsigned int *)&dst[i], src[lid]); break;
-    case 11: atomic_cmpxchg(&dst[i], 0, src[10]); break;
-    default:  break;
-  }
-
-  barrier(CLK_GLOBAL_MEM_FENCE);
-
-  if(get_global_id(0) == 0) {
-    for(i=0; i<12; i=i+1)
-      atomic_xchg(&dst[i+12], tmp[i]);
-  }
-}
diff --git a/kernels/compiler_basic_arithmetic.cl b/kernels/compiler_basic_arithmetic.cl
deleted file mode 100644
index 3e145d8..0000000
--- a/kernels/compiler_basic_arithmetic.cl
+++ /dev/null
@@ -1,53 +0,0 @@
-#define DECL_KERNEL_SUB(type)\
-__kernel void \
-compiler_sub_##type(__global type *src0, __global type *src1, __global type *dst) \
-{ \
-  int id = (int)get_global_id(0); \
-  dst[id] = src0[id] - src1[id]; \
-}
-
-#define DECL_KERNEL_ADD(type)\
-__kernel void \
-compiler_add_##type(__global type *src0, __global type *src1, __global type *dst) \
-{ \
-  int id = (int)get_global_id(0); \
-  dst[id] = src0[id] + src1[id]; \
-}
-
-#define DECL_KERNEL_MUL(type)\
-__kernel void \
-compiler_mul_##type(__global type *src0, __global type *src1, __global type *dst) \
-{ \
-  int id = (int)get_global_id(0); \
-  dst[id] = src0[id] * src1[id]; \
-}
-
-#define DECL_KERNEL_DIV(type)\
-__kernel void \
-compiler_div_##type(__global type *src0, __global type *src1, __global type *dst) \
-{ \
-  int id = (int)get_global_id(0); \
-  dst[id] = src0[id] / src1[id]; \
-}
-
-#define DECL_KERNEL_REM(type)\
-__kernel void \
-compiler_rem_##type(__global type *src0, __global type *src1, __global type *dst) \
-{ \
-  int id = (int)get_global_id(0); \
-  dst[id] = src0[id] % src1[id]; \
-}
-
-#define DECL_KERNEL_FOR_ALL_TYPE(op) \
-DECL_KERNEL_##op(char)               \
-DECL_KERNEL_##op(uchar)              \
-DECL_KERNEL_##op(short)              \
-DECL_KERNEL_##op(ushort)             \
-DECL_KERNEL_##op(int)                \
-DECL_KERNEL_##op(uint)
-
-DECL_KERNEL_FOR_ALL_TYPE(SUB)
-DECL_KERNEL_FOR_ALL_TYPE(ADD)
-DECL_KERNEL_FOR_ALL_TYPE(MUL)
-DECL_KERNEL_FOR_ALL_TYPE(DIV)
-DECL_KERNEL_FOR_ALL_TYPE(REM)
diff --git a/kernels/compiler_bool_cross_basic_block.cl b/kernels/compiler_bool_cross_basic_block.cl
deleted file mode 100644
index 9aeb16d..0000000
--- a/kernels/compiler_bool_cross_basic_block.cl
+++ /dev/null
@@ -1,21 +0,0 @@
-__kernel
-void compiler_bool_cross_basic_block(__global int *src,
-				     __global int *dst,
-				     int scale){
-  int id = (int)get_global_id(0);
-
-  bool isRedRow = false;
-  bool isRed;
-  int val = src[id];
-  for (unsigned int i=0; i<scale; i++, isRedRow = !isRedRow) {
-    if (isRedRow) {
-      isRed= false;
-      for (unsigned int j=0; j < scale; j++, isRed=!isRed) {
-        if (isRed) {
-	  val++;
-        }
-      }
-    }
-  }
-  dst[id] = val;
-}
diff --git a/kernels/compiler_box_blur.cl b/kernels/compiler_box_blur.cl
deleted file mode 100644
index 26936e0..0000000
--- a/kernels/compiler_box_blur.cl
+++ /dev/null
@@ -1,80 +0,0 @@
-inline float3 unpack_fp3(uint u) {
-  float3 u3;
-  u3.x = (float) (u & 0xff); u >>= 8;
-  u3.y = (float) (u & 0xff); u >>= 8;
-  u3.z = (float) (u & 0xff);
-  return u3;
-}
-
-inline uint pack_fp3(float3 u3) {
-  uint u;
-  u = (((uint) u3.x)) | (((uint) u3.y) << 8) | (((uint) u3.z) << 16);
-  return u;
-}
-
-#define HFILTER3(C0, C1, C2, C3, CURR, LEFT, RIGHT)\
-  float3 C0, C1, C2, C3;\
-  do {\
-    const uint4 from = vload4(CURR, src);\
-    const float3 from0 = unpack_fp3(from.x);\
-    const float3 from1 = unpack_fp3(from.y);\
-    const float3 from2 = unpack_fp3(from.z);\
-    const float3 from3 = unpack_fp3(from.w);\
-    const float3 l = unpack_fp3(src[LEFT]);\
-    const float3 r = unpack_fp3(src[RIGHT]);\
-    C0 = (l+from0+from1);\
-    C1 = (from0+from1+from2);\
-    C2 = (from1+from2+from3);\
-    C3 = (from2+from3+r);\
-  } while(0)
-
-__kernel void compiler_box_blur(__global const uint *src,
-                                __global uint *dst,
-                                int w,
-                                int h,
-                                int chunk)
-{
-  const int x = get_global_id(0);
-  int y = get_global_id(1)*chunk;
-  const int yend = min(y + chunk, h); /* we process a tile in the image */
-
-  /* Current line (left (1 pixel), center (4 pixels), right (1 pixel)) */
-  const int left = max(4*x-1, 0) + y*w;
-  const int right = min(4*x+4, w-1) + y*w;
-  int curr = x + y*(w>>2);
-  HFILTER3(curr0, curr1, curr2, curr3, curr, left, right);
-
-  /* Top line (left (1 pixel), center (4 pixels), right (1 pixel)) */
-  const int ytop = max(y-1,0);
-  const int topLeft = max(4*x-1, 0) + ytop*w;
-  const int topRight = min(4*x+4, w-1) + ytop*w;
-  const int top = x + ytop*(w>>2);
-  HFILTER3(top0, top1, top2, top3, top, topLeft, topRight);
-
-  /* To guard bottom line */
-  const int maxBottom = x + (h-1)*(w>>2);
-  const int maxBottomLeft = max(4*x-1,0) + (h-1)*w;
-  const int maxBottomRight = min(4*x+4,w-1) + (h-1)*w;
-
-  /* We use a short 3 pixel sliding window */
-  const int ybottom = min(y+1,h-1);
-  int bottomLeft = max(4*x-1, 0) + ybottom*w;
-  int bottomRight = min(4*x+4, w-1) + ybottom*w;
-  int bottom = x + ybottom*(w>>2);
-
-  /* Top down sliding window */
-  for (; y < yend; ++y, curr += (w>>2), bottom += (w>>2), bottomLeft += w, bottomRight += w) {
-    const int center = min(bottom, maxBottom);
-    const int left = min(bottomLeft, maxBottomLeft);
-    const int right = min(bottomRight, maxBottomRight);
-    HFILTER3(bottom0, bottom1, bottom2, bottom3, center, left, right);
-    const float3 to0 = (top0+curr0+bottom0)*(1.f/9.f);
-    const float3 to1 = (top1+curr1+bottom1)*(1.f/9.f);
-    const float3 to2 = (top2+curr2+bottom2)*(1.f/9.f);
-    const float3 to3 = (top3+curr3+bottom3)*(1.f/9.f);
-    const uint4 to = (uint4)(pack_fp3(to0),pack_fp3(to1),pack_fp3(to2),pack_fp3(to3));
-    vstore4(to, curr, dst);
-    top0 = curr0; top1 = curr1; top2 = curr2; top3 = curr3;
-    curr0 = bottom0; curr1 = bottom1; curr2 = bottom2; curr3 = bottom3;
-  }
-}
diff --git a/kernels/compiler_box_blur_float.cl b/kernels/compiler_box_blur_float.cl
deleted file mode 100644
index 6f4e1b9..0000000
--- a/kernels/compiler_box_blur_float.cl
+++ /dev/null
@@ -1,48 +0,0 @@
-__kernel void compiler_box_blur_float(__global const float4 *src,
-                                      __global float4 *dst,
-                                      int w,
-                                      int h,
-                                      int chunk)
-{
-  const int x = get_global_id(0);
-  int y = get_global_id(1)*chunk;
-  const int yend = min(y+chunk, h); /* we process a tile in the image */
-
-  /* Current line (left (1 pixel), center (4 pixels), right (1 pixel)) */
-  const int left = max(x-1,0) + y*w;
-  const int right = min(x+1,w-1) + y*w;
-  int curr = x + y*w;
-  float4 currPixel = src[left] + src[curr] + src[right];
-
-  /* Top line (left (1 pixel), center (4 pixels), right (1 pixel)) */
-  const int ytop = max(y-1,0);
-  const int topLeft = max(x-1,0) + ytop*w;
-  const int topRight = min(x+1,w-1) + ytop*w;
-  const int top = x + ytop*w;
-  float4 topPixel = src[topLeft] + src[top] + src[topRight];
-
-  /* To guard bottom line */
-  const int maxBottom = x + (h-1)*w;
-  const int maxBottomLeft = max(x-1,0) + (h-1)*w;
-  const int maxBottomRight = min(x+1,w-1) + (h-1)*w;
-
-  /* We use a short 4 pixel sliding window */
-  const int ybottom = min(y+1,h-1);
-  int bottomLeft = max(x-1 + ybottom*w, ybottom*w);
-  int bottomRight = min(x+1 + ybottom*w, ybottom*w+w-1);
-  int bottom = x + ybottom*w;
-
-
-  /* Top down sliding window */
-  for (; y < yend; ++y, curr += w, bottom += w, bottomLeft += w, bottomRight += w) {
-    const int center = min(bottom, maxBottom);
-    const int left = min(bottomLeft, maxBottomLeft);
-    const int right = min(bottomRight, maxBottomRight);
-    const float4 bottomPixel = src[left] + src[center] + src[right];
-    const float4 to = (bottomPixel + currPixel + topPixel) * (1.f/9.f);
-    dst[curr] = to;
-    topPixel = currPixel;
-    currPixel = bottomPixel;
-  }
-}
-
diff --git a/kernels/compiler_box_blur_float_ref.bmp b/kernels/compiler_box_blur_float_ref.bmp
deleted file mode 100644
index 149cbba1d8bae1fdd4e4803970e06ec1682a40fc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 49206
zcmZwQXWJ%KmA7%{Tg+Pn(kLhjf(Rlu2xc*%h!M;=D`LPL#w;qJB7%wt=GGQ4Ac_H6
zZAlWo%>1fO?ltAzvybDc*;ie=_Fn5;|F!n6>u!AZKI6C>AF#ILT=)2Y7vBH>{_6q%
zt*70%UjO6r%x6CHS<iabi(mZWcfIRfU;EnEzW at F2f9XqKdfVIH_WIYq{v#jx$alW;
zoolYS=ErNh`s%B{@P#kD^{sDx%2S^5xW_&2=%bH*)T18dTIbkfkA3u`AN`oeJm#^F
zeeB~O|M(M5IN_LMj`7ta9`T6o`^r<#d*1Ut^q~)Z{No at 0;0HgbfBNaCA9d7G#ytGt
z4?p6FBMv|Oa2?M+{pnAC=}TYwhBv&yayrjg+pAyw>JNP21FZ7+CqMbg&#di#4r!nM
z^rt`dsZSZ8W60+}|M|~-?sH%M@|VBzm9JcU at x|Z#<~Ogr@=Ct^<R?G*#V>ww{q@)X
z{`bHC%U}L-;J|^~ZoBRFwdojOm2=NM*P^d{<ty26)>&t<;?z at 5<p`Tu$dVuZ=tsZ&
z<u6Tg^UXK!- at o6wFMQz(pY)_B8Ft1QX8`-67rp4^FMqk4XP$ZHv!DHJ{nx(swXb^B
ztDgJZ=NiM)lTJDbE>U>PTi){ZuYWzrZ+`QetsDPque~<@Km6ejIU+O$Kk<oAL=`t}
zjlj|IKmPdR&3W?4CqvCnUp?}Xk2J<rIIPGc{9$~@JKn*h(@s0B8C)Osu!rs0vquz6
zB`#;5eKu3^cYXfzpU+=+-v0KtfB3^6jz7Fw_=Eh}&wdtg<ZJrw_=;@6r>;vcz4Wrn
zF2kRwe)hAU{rcCx{@w3>_s2i}@o#_o+u#5G_kaECU&!Bi=bd1F;~U=~NVpj63gdI0
z^PDF?`N>@47YiAG;e{7ob=6hP^QS-k>86`*`qsC;^`<wy33efP>QkSp^MV(=K<v&r
z=N#d~{3S1WiD;g8-g!JS1|?pT+!LPg1a5xyt6#;R*@S1z$3FHk`WIqS(b)XOFMjbo
z?|BanETMDIrZEX&@Xg6c-}(r<5LiO6++>ECktYC7J?&{v!{0E^8p(`8U{0zKWn(A-
zbK{9eWBmKy|9*yj;uD_$IsR0Eu&a-5`ic(w3V)5+7hQDGC6`=6{5<;J_r6C_`}Xbo
z&2N75hd=y*_;0=S)_?rtANZ61zyJO3U;XM=o_fVAUO~6W^A|2KB|d0-_wL13T*#nk
zLL`ndND6q6kp{D0jN~}4g#h_xGp!~Z at qh4xAN-JqJOsD+fA_oJB`}j4!%b3QYWyVv
zFD|&?f|tGQWehm+#1q2{7s!-<+;PX52fFkRtou?GSelW%V*0w*y-uxTp7aEt4GlJx
zkw+eRB>fw2Dk;En<LOY+d5Qv|c;`FcDKUdQ3P+gE<1Ym9heBL at Mf_45e7LT-;tDmE
zQ|bo(M4R~k`OkmifAHWz`j_d-BY>Jk!6)PBF at yVx^ZVZSzRH@)M)pD`h!V&AzA_B?
znrC}T2t?E4nvQ7l{Xq|UkPv{zQ+Q3~aRY>aBlxF(2D6HU;!gum$G-xOHfW+?DxuM6
z-hlQ9`Naz|W&`Hfszs7WAQTpN3ZlUt5e0#hN8D$L5+v!k%x06&iSjk#AIRxH^5UW{
zxg#ivKmOnT_O}U4j{p4UKi?J~;>W+@?<&(3N%WX!Me1d_%$14neeZh_AW=&QtH}l3
z)gyoY^Pi=FJ;kEZ7IPs3Ut>APA?1#wt|G|}9Ee|2&lN7)lL|?1gh&5;VQuwa6x2Er
z5*^=ygB577Yfx+P_m$9S!K8eB{8bw(GD+ at mO7uy~RI=5_;#Fw{UsIGM2;({a?svbN
z>{(9#3_Jh)^W{FrgUo$r23}+0CbM-k{DZIZPw^pstfu&YMz at r&-Eqeq;M1@%^#7XI
zyvB-TNdU0B^U;rfbdt;D_*<6^mIlW at B8b2J?QgAx62F9i!Cc^VmRDHBLUSL1!`4QD
za@?jP1fncn at u&aUe=TwO<(Ko_gJ_ezrUTj<gkyB*U#sIQA<&l*<_BB}5(3*08EA|l
zW(|L50F(4=krmuhz)654tP6;EX at F3m5`;F++*fBLLhxPnHTUCB{B)K0!Qbw at fBoxU
zXXm|ZZR!%45xEqA-6jirX$7_A%wP4hgmp#1<m!VhSosoA`wMx{GlogMD6m{WIqs$=
z1n$G{)TbKrk%gAVU%U*n5dE9^r$7CvE#L<~_<`bvgS~@3!B78W53**@U4?%F=^}~0
zW(@xF%MuEXXXP?csV5Xd+l*9ajDa0+9aYg(KDv6u0NMb=2~Eg|%CqglRUsUx5ge4d
zQ{^E}a7t=*mGLAbk(G$+uDj08i`Xr<+!BAvSNWZPNY3L938qCr5OuUAqdxN)OK9+F
z)-sZ4#ne_}ACW{#kdMa0NLq!UL_iyMU?&P9qWIhL6k$b`h4`yoC>drsnOOagzx_*?
zoI~0!u at wch!3P|@weX)v$%3-tU(&?QQ%*TWF%bpg2cK<9I{tQKOUsM0qwPSX3Wu3J
zLJYzr?v{?ftB>u%q{z;c2}nr+3+3Axo#^m~h~>0o3*(5r(uw`X8*fx<@UQqIF9g!T
zQ(_GQZ6|NnqF`DJ35t`61e6+<2JMC$ZUEmrCefUNR6G_+0X_;rnqN})oOATqF9c$t
z&OGpe547JYL?$$qRHZH-4YQoBiox_R3y4Q$BSn<3Ed=oDgHQP&D<ew1kEAOo#)yTu
zXa?A|8Kao1rNOME5Qg1BAgrtDn56Itgp#EMc}mDUE*vsfpTR`9<xiPHfC*eMI!<s0
zeBzhdgq=J1Bj)5YC(jN)&`AxY+bSRg-#kJIg|_Cwk_gsSloY5+gjAA5ijNu8FdKoj
z$U~iExe!QsSIi{>u=+wU{88c*%kj6IZ at FwR1Edo8P7CQ@SQP<srA#GA;G7k8sGU$#
zuMXx00BC?t{AGa at u)5S{Jn`64Sy(RcmpwAeBsL3!)gLogf;`nGsKZq85)Lzf&ukDd
z(R74>MDbUAI`ap=W4~PP<fB~7YZv$$boO7|5aXcIQ4r&=Un|k at hgS{ch{!tpgD-u|
zaL+yWh=o<ei&m4mG%p0zA0G<`A<;iiB?8MC=_x)^APwLzVeMA7Bope(Wpk2f<sDvc
zOsWvnv~6E at W<w8uE&e7K9eF|FzGc80-}pwgP6~5Dl5)XEi6H1IzjG<gSH5~yF4&*}
zkuo0F*8~xN at R=R|i2_hne#J+^;=?b+NB+uUCm$zIzd0yAPCkl8x>fuEBrqj{4eV(i
zQ{kY+zd(z7`j-OoOE#(e9 at p-^`)*hBTbf9~WHZ`ID2<_tIc>Y6353HZi5g~p)!x;3
z0uVTPCt>lIu*{YVHhQdBhzU5=e^(jgj+y0`&9t&(fR1k!BGI8+t(}Eoa+&d{$^!Kk
zPhmw~`c%7EC4%B87Ip`dOFc`QM4&z8aUAfkl?e2SRpJM;V~@NBpZ)ow_*3lg at 8pS_
zibU9UAIEZrnWs&}RYQh2MOjP#P$*W`5?1wp>W@(R2quL<-C+{^wgZk75lh$#oqyB^
z*&$m!VhP`37=LFT^#^=~k^Rc4(rrR|23CClInE%f9vY19_z0aefzh>-JpB{77 at -H3
zR06ZyWTzOh#LS*GgU8KZ6BN at D4CU+C#KofYmq(_m2?YLFIrf0h+AaTb+2+{K4i1VH
zZMeX{_uhNeSSGR7p$nM=53dQu0+~4lSxyLSKxkOh=5E?1Bz_Z$1<{&;?D6Dd{1rFu
zQ;|f_mt_iwbQ2o2#lh7hasegIDt+l6fAvRSuE{$QRG&Ra-atX5qj|AnxdQHH8g55+
zrKm#VYH9qL%}0afnyY829r+%tZyp`<TTc1n2>xutpTYR6U^onX%7ke6s{o3>;-jjk
ze_jCP6^Yaxbvm(tf8TxgQ7qq?=QPM#f;27WX48DN<<EGjXLbBFMF|<nWh1tg;4cdD
zOX+h?09+FSz%@!M1-ipQYB!8jyk42vxA7PH_!Ga$JO5kMY at YI4rNdA4A;l6fp{f<Q
zk+B00XwunkA}$Eytp32R?BhlfVolGyR{3!*Sri=8mO)h^K{1teJuY6x)0Om(e^qEL
z3=4l+rT at fFnH7J=dy$O4;^X8$Cq_TG*);8Oiis*JuL%;Rz?!XQ=0f0VEz#)|N(K_a
z9Y=SdgcW}qu|P;DWB90Gx&lt{B1?fjYKjaj)-pp!Ws5pph=@qhe>ux+B~EtuXmy1P
z7W}0EP~fN=?qJA%Q4k%K+<oN3E-3oykF^}Fd!46YA#ev(&lXKjsQ?q!V&RT?hCg`-
zqFqCQ6-SNxDvuT={H1f^xATIpc%s1(W#Q1`?<~YG$(05qthH#;O(MiWlLZ3djwLK-
zQPAu`%%B8KL<m at NfiDCORQ6?-AZccmmZz!;dZHi}_;<(NCxa|ua&?uuI)HhW{+VqH
zaB|~_t6`3UfYS+Lu+w?8U13z}MZuL9WM7j7<|G5FJI1iwRk1Y{{g8oSe6Rk*-^|kl
zMFe?47)Ht?E=ZzEkdg?9#tSWI!{4SB{5D at qI{AB1Rex;09oMPC5^X at TScz67F$bY0
z5b?K!DuF-v<jM^2MS(HkU`6>tpaglpAX*1(mZPe$1Y8OTgmNm%o{}SCDtr>qO=d`T
z$}}6}r7i4SkjSbi8yE&JIQT33Y<A}Kh}N^d1)LY|z(u;QL~e4x8O&M*q-5kcZ5VGt
zYKPjjzK)3K3vqSKLh_6LJ?ju<Dg;y^#^YZKxH8iIOaJrEOZj#&KRa~t>}LnNq*yo|
z at kkjY8=5h{Rj at KY0<de#9<c5LCI?>w4R&LA<Z&IGDZy+i8~B?2-C37yW<$od#Z!^>
zk@$58(mZBULe&IuAuu)|=9F$lJD22DcJSA?p>WM3NHWs--}@J0m3_}@=CqcM0i3d;
zrW1dfFJbW~du2p=dPL%oefkf(t5zWJ7gJ;mV;)D!BQ}E|o2ao65GO>oOUF5TBAbav
zSypzSP#jc#CHmG|Zv}_);R28Wt9+K-%0l*E4yr%+^Ve+jsRiFc6(7;}EF~zU;JdO%
z8TZSE6p&f2ma_+`DxEQ4kqGKA`0Bj85HeL%1f_;CG at y(Ch`*(2UJ3{SFLZ2b2Fp9p
z4DS7l{*hsMGqc=BeL?JXL%1!3za`W<{E1daxP?GySmlIc-Dr>a at oyu>A9nB!6Khim
zp9%(%oNX6aO3w;E{?Iv5;IDpy at 5~84;A#SW3V~dZAkv(jq{0Rs at j~B~ZH$yeVV7L6
zV^z&pG^{RjaiC<yq;wVq$zm<!C6}hkdEHRKgh_}6S1GU+2E<j=Od=MT^ASuTK(DFD
zL(Q=Z*ndUAiH=pgW;RtDY^wza7Sd(8CBSihP$GzmVJ3HFq*~|7X5=}-1wnU**PgPd
zhP-StRpd?HhUlZ{SjDl53zlX80^rlX*%CkUaH;<kt4RUcqnuuNl^REM4S8i5Qc1*S
zUSu{|>foUHN?Egsi0KHP%@nTG$YR_iuVKK_szeY1UqNk)fn9!yf+p7_ATb+>JUE)&
zuyRCx79}d_&rL9yBpjtuXCB3e7y9&2vRI3?Xn2JE0_Sm8^AHb2G;cY(yj4WGqZhM5
z!@pyLC71y$VT14Sjy-7}{F)_9ZWW;s0+Wj@{$v2YsnkRDv-%G^1rooe6i~S0>CCSt
zIGo!8WHg at C#VU)6ugRIgWz*__FC&08tq3YLuxpkh7%nI#8sPeT!Q5AxIf>IL)D~lB
zM_viC3pfZ#H at iREq?P&k0-ZzvA8>keV(<6|1?d`wGqn at H{a51!%k2onrtVpb2-y!v
zOu#Xx*|;MFN)3gOH>W5+YvE$B`*|TKW<XmAJgZfC*yAQLtkN-IDP{@g;V<+GmpLmw
zOu}EIRX$RnI!U at vbY@V3q_A87)6!*VURy$Z<1Yk~5qynpB5O8TKr<Sb87~BYBfuA5
zS=yW;rOz1E$)f!n2mA0B3$J6&0MZi~UXYe3NCXBr!+>um<-R+JNhougs>;KD`sWLc
zQ9}EUVZnDL`|1Oya1&X(fU-mUSn(^tc$`xnr(Ovn?-~zpja7hatTK;QMQR~qSZ*!z
z6N#|W2~#m)6#_zl7}2uaQC#s<|Cz0E95?oG5OC|7*>WvmLU!`VE>QmZjfI_N!$C)?
zx>}{ZUZ7RE?TN^+l2P0heDHe<Ue7_x at 1in72w-H1${@t_Mp2IO8vd?6$`0rR+M!7D
zs`)BE{;tk)3M}=~24Pc?icxc5Fq;r?4Lx#_9bDj!Ex1~3PR4UYEPTZP!sb2*IvTuN
z{R at Exl>4O8wN*p`Mw^rnC=_Onzrv!-Dw57=$U88onfjQJJ;Kc6qd6_7ud&ugUUx!c
zIbVcWbrLT{4CfRsxb%ab`X<E`H-T;dEXF84juyW1DviI_>VbdPU3a<DiOUNDdl+o{
zAVTD8Q1A{hc%>WuRD?hH9?`hNJC&bKz~@f86@#_(zk)no7K399y%}HTDi?~RnT0 at z
zxg22xZ~y at r{55w3#kYM0zRB@#30JKnmQ!5(r4<5X2}s9I<ZHtp;b>dJY?gDiG at EH&
zLa~-rW|nR~3M-f()48VK$BG+<z7h)o!e4aMB2?W$Oy$9!>@^)fF%<%Z$g78AnC(D@
zns5jIQT!EmM)C+KvF1qn2cQ1AV=ZDv9$QfWS-d2#Et at -uit+f<Kgg=I0}t{-K!H3e
z7b;CS#Cd^!?DF!3kLG4AI2E6wpkMuAgGr<k$w at 29XRvb7o-0*5Hru}>0!I`F!SZ<X
z7jAQAGyQNR{xXXWabPW&Xqyvlt-k!y^tb#Opae+)h-{an9)BsI5b5KuFAE$>)gn=_
zDLahu6nR?!{R=(6RMahh(X?^6#$VP1U+(Kb&3FZYBb;)zrAl6vIqaq~p(wzm<36<z
zs{5j5QA=ZjzsFfpW0jj?Dg=?o1bJ|P5?o0Nz7oM@!jr929FS2tsS9~qfR2NN0Uq(V
zGHXTiGd2BNh~sjZocLl4cW|H?vNxONRYEh5eu2;tm(f3`gn%*35PEDeM_xmI%U^0}
zLQvx%-+9fX(Z3R5LSEQ^xBT6d9kAO{6?PnyamicGE+St4(GH~nZd<fjs6VzFviG2m
zI-KGQ`(=miLkK*TEcLbEGps66p}<7Ez&E*fir}{)%Ki8YD+?)5A}E#MSgWg!(#LX9
zZoji)O*oiQ3BunhNr-+tMe2YfuPr&S>2pB=v5-wcLp~+QJ{1P`_$xuvF9q;dh~iIO
z$&A0&wE at 9GS0+?Bhrbdem#aU#ApTzc at W+JNTrdxnR`W&Bfq~k=hg~isrUVHJM_A}U
zOD!Vk5ln;t_QVg1kKj+u0bhu{ycloJCbUH2=Q#2j1-4hZ3W|@e?(+pnWr_yiHNOy8
z&MKOS6CVC*j>E0KrRkr+c9Zx=KKQCxx!|keFXC2d50ZEBPxhsNC}`>r_(~A|HEU^-
zk+a;ylfdvdp<^3L$g4l`XAg$Np9rClvko(=5c^eEl-faXrZ at Y$kt$DRpIj*<**J~k
z!$*k^2pV*VKN|5jn|+o^T70ZU8{nH<`BM39y9iT-hO-I`vNsp^U3~;ZM)0MBO1prF
zSAq(GMd^nbbfrUtq)0_<gIAFs_;pHz>d$Ne46u+i)KRFtYlq#nEudV`--=%#z(=05
ztg^HN0KE7U43&EG9sbH1FL<r;XoM|8ZL;_?8+o{NWRSQh^)wH at 0S#7&Jc|jN`DK3m
z<%pv!ydZ3u$O!hBP+FOpRh4~l1fTM~>=3^*KkO<1!e(>FeNmpcFnB2(ms~=tR>X&4
zG*-l2OFiO|T=BQA`&2|}D!kSVU11jmH}irc>RSe|K_=pF)A0&S>X at hbWZyOZ$ZPtF
z2L2XJW;_LrgJu>-Te*|c?7!CHpe-0uSA<;wENul*1i>VG)ye*)(>6`I!fI21h_%aR
zcIl-IHk-I`mI3&OB_`lAtO;2~kQOqhkdd)@q!RJVdh_VC(N~(Jo?*t&zi&0<1xxg~
zrid|BqP3#s;?E2n926ye>RRzH{2j$BJNRn at f3#!?<nga=dj(V8sXf6*JK&h>h((Q?
zd?z#9Z2b<C`16Hw)G_tP{;T!=WeHzVzLJ8xK6=2CsK-kIvk{U2`N|p9S%@!{sg9#6
z1BFN{`#Xm8Y_P<s@~8=#K*Zm)Dt3=cEA+_Q4C)N#sLFcHJdA0JF{aXlzhP-oni!A2
zC@>!9GR{J3Z~Lzj#0=~D%K0CEcu7taXr5pMBK}o=64ii`S(=d<BT`<${Okrb$Y{6K
zD){aclu|=>SenKHNX87K*z~XdJO6uS#vd;Ahja;ys#TTv)4B01*Qm5;c1rO>2l(<D
ze;s?D2i+7GaTHng4HiOGRTMFnr2hh8D!Iup<$_{8Xa<Ah4><T9hgU;YDv`Y_=00jV
z#^3{5#E8>iX-grcK>TT5l)-m(p8!N$H2G@@Y(2iF?4<&suaz43SAUF at 0{9zmq at v-6
zZot9c#a~2(0Qmwz^RU<S<4;Sbb#mVFcm81s{!~r#Xc&e+yny3RGo_M1xXDL*0sh8I
z8R+QWxx!6F7z#;^43d;4G&lpEEL8x-CuKt6K??~Syi|>CCk_7M>1wtb2rS1O8Iwyi
znd|reef#!NkxicqW-uYt>W}5Dg?Su=+oJfhQ?&%sTIMf^=|A#a-8Z2{U9DRQvM$m3
zwa2f}9dZhRzW1_{V$MQ>j=9Djs|y6NsR?FgJe8(@#t(l3LMly2*GK3ysA;&SjtL4c
z2wTW(=!&*FBSt(mQuyqcN)YdaMnr^w8B6uq`I~}ps6RrfVi*sIk>*MKoaH#|uB-)I
zgM~ON%e3nJynp|GzdYLzue<I#aso%lMBIkroKvphU- at M`{_b;-N%nCOH{P^nJCwf_
zQ$8DX7$f5>ftz2v{qf6tt|;Iie0{aZ$BMsL(CS(|mOs=YBOLJ;(DZLA at HPA`0fG&J
zwpC+^%t(Dtd6rNCG-2nciZ*WG3#g6<!8DS#MaNX&n^Q?qI!tAUr2(2m-oeby=%ab8
zrQF$k(Ww5k^LkbTA9HYOK*3c+yuvWspFjKw27kx7_I*JVZe>Rb2)E^sXBf*Zs`Rl$
zjF{~dB-}GUw)&bSX7kMq*ZBKNp#8Z`-2K8J1mMF?{D<;a4WQ6Of%uWc6IcPopYixh
zVf at v9H$fw5_1qRf*s!QYuzQxOYbMe0QlMxXK(y))y=fkFpT>BqUr7-lV}Ru>+6saJ
zy_J~C9r`x|8iv_h?Z5FS5(-2EbGx2`rXh?BQ!Cv9;VWl3H5q>yr%*^ej_|q^h&lf0
zUnx-TR9BkO1ReGX?uvimzvSC`kY<Kt1fQHFi`8vyie7*5^jie at g`f`EPh*3cz(>S5
zn~X`(JWRzr{z72R;g2N!V5^XNmcc?`9<#yQgvR*RuP%m}oRXzRs~~J4!xSjtlNVO(
ztZ3H*p~|c{2&)NAA_VlW;<W`h$?z9R&VmzvoHZXwQ5_H|@uDU1f{2zJrxjI?2#v2S
zEd~4nDdVJM{KY~oWive}m?T6M7HSm>>5TaC_m$<4(R75sS~ePocKWvq;O{I%{K}3t
z<m)I1HDqA4fg)*LNk>a;R{tG-hCc{sIP)08NPP?$EDCs<M2BBm+=NLpt)!-Tji>kr
zR?;cF%CGUZMJwWFX2Zbu_kG`*+;R$n(BKb?J<+fc|L`C26A$|dSXpcL5nRVPzVOI+
zu at gbsHn~^}fsDi7a`;mbJ+P-tSN$wEf%f>+A2;O}OOV%e$^u~$YkvsyA}j>{;;-^l
z^LrzhD1eWc#u5fp8EgS6q>S6eUzWumjSeJiGguLGwP#^&9#Ie!eY-Os(W{uRTkG;4
z1vvEy7TJ4BIQ%<0OLLh!8p3Lzntb at -htp@TB+8wN0V!4Ek1*|33S5~gTQwaz1mD(a
zuvXLnRFmxjWJ#P at xx*KBDnSf at 9ek;$!#0|?kP1nY^kX)LA#Z+cxBT4~0<Bzts9-^d
zzaN6|*JObbq#?g8N5}&OAU9i`8d)Vht)l*j<LF;<*_Fyl1zDd9D#NPxv)LJTbw=^w
zg#=OI at u%lxMrk^tOk?<aL?TFkcRZ_BNN4NfW)l1vV}LLjj6bXTZGp`As}2|pi<)n%
z1y%<E0W!?_zd-1iR{d8H?84qFJ!=LE=ZnI~Dk;f*Nh%z$OEhaSl5%`x4{cjZeG>vJ
zT6&t<d}|4zH?6%%eC?i&Ui9x2)U~sa5U536B}MzME8P+R4s5Vun@;>~zM{Zvs>72w
zA(ht at B26fq7gE*LSHusUm`aDv?ZBEDcFOlxW)5;$$c!g5!?;OxQb00toP*pkZKojo
z4W at reW)+xrPj2!T0Vps*USa35zWW9UfsvZxuhf{+Zvsvu{&7fKfEkRDp$wLf_!Eg_
zv?wpQX1iA&<t!mtT3D?m#Z);dFz^LM3RqMMFk1*vvcDLkXgl{x0cTMmuzGs|?D*Rh
z)FrFe=s*5ap5B0^rQz at 7z-)fuFFI)JFj8G5OC({mRZ*!>GFvo_0gb|K>td>&`_<RK
z?xrXU873|!v4cR}*6%81tZOYQ;y57ekxe3QA*G3=IfzF50f*h$K=TwnfcVzq;8Qq9
z at CVIl1O&$tV-UmNefi5B<`Dq>OE=32H`gr33%Tj4%vzVu&Es(viiK7bB2V+0rNM_q
zM at m{w2=LbgqT{IgV<VOY_+zDkZ`*~1zs!J<Y^<e-Re#dI%9j4I1<LNmI}%cY;_up4
zLbUv{O$Z8MV@^nXq5qb!ibXrsn8#E0XxS$P$P!6Z!I4VF%O?DlyEfnS&ubdvV}~^5
zT?jk{j;}zd_$WmBl2`G;- at Aa2;fB8fj=pA=k5T}6{Bdx{LR5jgw1veTsb^YwB-hMf
z>G%su;`gmq2 at +WXkPfVpamcGeuA1K^C|?L%r33g at u_)~^gA!bcmU!ad`Nx%a)gO?t
zrETODMun)#BWk`PY_pjp{s{YsA^i&hcVxO8r#JbIHkp|Le|IDZdvGrGNJs_azMD*H
zPh=SW+~htff-g5^x+}Hd>?XVhOcjFKFz_|I0D9 at 4N>OFJO?LQ8I(P7Qr4Tk_A_0{k
zb4o7ro1tBx&9~w&3Ysy at ZfPMf*iRqU9scdb_5$J;3(G0LLO^NE;H)dQ^zT{W;~JZ7
z0r(RV{l{P3z)g{KbrwQfGfDh0XR~?mcL#sug`i4H>UIGsK-lt#y7ZMMO~?F{Ny%QC
za9|#7;BPG-eI*TfDn|1QVJ8Ghin9la(}3!L at ydd?7zDJ=Kf_=CGM?E~!AQbT6`3S1
zs*sG3vxGqa(t-RuXkE&5wTeK~KiRwb%GFvz;GhD&__|~1Qh at jw&~-Tytqn9HBtLFi
zMcrVGx<O|6`~8G#Y<9)pv`&c(g9zC8JG9V-TwtM%18os>l at 8{iA|WPqj*vG8Ib{hE
zx14#vXMp<-ftnJ;7!`?kR(G|E0V*E-<IgX8CjNd~;GNtg5>3Y=YFGSOivUNA-^Cx6
zz9loXS<3)Lvcr!AbodbnY9Skz!@?1TQCKaF|D=G7Xcs6K3}_c75~f<kV77G at C3qnK
ze$B<3ltg}kW-U_0B>swa_5c6n-y_bSN{14SKU}UH!Q5`H_{dz5RXym|<oH)!XbgNa
zzz)6~;XBRq(dkHY6f{_fl~77%0FMB%16qz;r8Wnpzi$;B15_T3_+5Qef*>-6{t>`m
zLGZ1;PgDN|4u9YJ%7kPi;wrz;t2V5aXpUiQBN+C$`W7W_3MI~vYNdd+3PJjp3k;S8
zMru}Z$Cjan$buyU*Je`|5k~@ipa8_WP{?!uaT9C$=aC25Jo=|b<MB~{0Qb=rAjbuo
zFM>ktikLVmLHeQ~C>$)8Iiha{JY6j+S!hpb;;CkX7Aay7P`V;%r4LMjwj3;w`p9?1
zM}d-+ZPq>_?~W at V)qjJ<5fEO0Pk3g74j=bBWD+))2?KwEXE6Tsk3UsZHdQCS$bBWq
zY@*KqSBVz?$pSV5&cgW10wM5`k;(|{G_Qg0pQ($8)is5h8hK5(3X$3(b488&p7Ph6
z_?t at o$5Xrj)W at GJog$p{1Og&DQCLV?E(?J<&Bhm;xg*Ev-waBV`<!w*qB{I at RtW3@
zwmkEo$81Kb9yF}}2nu0vjhiX}g at 8cJ9MmYV;!t at pk}x=8uyY{z4uJw>7%T|0pNary
zCk+Szo2 at I>LZg!~7^aC4mqktNU?1 at he<3IeR at X9#EQPEMOWr9&-obf9`S@!Lpmrgk
z#zH`oQqm(7MJ>e7c>JMoGyVpnr?0U}pEmHPPggfNMez1nrP~GvIR3OmV>(>3u3_Tn
z<CNL5V9%aC{1rqx<WV*-21)bFGI0Tc%rxGC3=3`W8WytAVXBj-!M=rv*WmL-U-&#_
zE3s!WK-Fa`VF<ePl-kN2{=Q=W%6|FBQIx4Hn~)MjaKyihKZAX%u}ugnL24%RB#zW0
z08#L2EDHF8Z(2<uvNS=)-y`CsY^HyYsJ9#k4b1qr=k_3^0zo+`gx9cx&pTg%sUq=(
zgE}5D4?SDaX2ClRd;wB_=>M?84x>E;fO4eqqk&VL!s27EROW{lB{kVRf^J<IVT`0u
zeAIT|I>s0&C|-W~YrhagH+_X9Ygs}7)}nk at QQ)1VHh|gLMjo0NxkD0=!fQ^;Nd#@t
z{rWSASWI)LED$g7S*{g37P16VdZ2uzKvRPFt2mRcGD1IqZ}|%cA2DZ!CS(X}W?-|Z
zp^d6BYBJl*AR_9I?ABDIGD6>Y^VlqW%j at z&*_R!*VEiBY(1*H7a->K|c2$B=2Azkw
zK)MQ%BqbhZGk_VY4X1EsHXE>26``gXmY466$Q?^-!l&tgOc*M>#s-owGtO*t5?I+U
z7Xeb4ji*c|!A{I&!9ss+!Czyt1f?t>dx^m8YLO`D2n|F^3XELPD8cU at mVnVJLdFsM
zugW6 at Yy>{?g>3?)8Lx(@JbXt|1jWv`agb$fBSJAHuw;*CTf9Q&aY>~3lRf6;zG3=K
zp^hBg6e){RH8Zdk1v4iDrrJtGQ;L~Z7N|S~!#e_IlGH$$Tv_f}A;4c;fVCeX?2N}#
z!VqgAaJ4RJk&U>smS99g!(WCvobZ=}@h4+hz)jfEw#&E%-_=cbgg`41WM$=uN5rWw
zG!=jJ0I at WNqM(@jmbI{R+~I*=R5bkAkDh1Q!&)6PpbCQc@|RWC6?c`vgoMNwxXf=O
z6JkveJ9!ek#JByqa+9+<;zE!ffry>3gYVd2Gr}20{Kd=2VrO+o0cVe>(S{vX at v&2|
z$5W2nQl2EFs*o{Qj6CJ>rTne$=5~J&sL1 at 5jz2S)<m#iDdBiVl>0jHX0Omew6PF2%
z5QrK_Bm(#vg_DZpEd&z5<d{$_{lp)3HroN6K=7A(N)wy8u#0~?hzE_a7V{WM59Yza
z%yt$Yx#F)8p%6$7?h{_*)gR>uRgJ&y3krJ_ZL1T5ZPcE{9*&?S1Vz>`TMXmTGdT-I
zO)R*{82mlr?B{XH^tQ-a{0){q*0Ly(TTarcKdNZ_?Y~T7iR=&peZq6zgAPobrGPSm
zHqM&KgYRbd-O>8Cbf5<z(4>Pa0c)LtScR&Hkg?EkS^Z(T6wrx3zj(*fsXyu8vx=Ch
z%6gBRKmO7 at O=6CcC{&2V0{_mR+^0PpxLnm$3fz$e_G=|hG?jNLppw{*Z3IGql11g0
zv;tE=@u6)Y6CK+G{@k}8N#V}kYN^DODfoMe4QdyAM6gO|9{fR8ZHkN3C>a?kxO|aT
z>_HX(vOoy5Mf$7w-R!IGutBFlSY7NqE)c|74PS$>{EuSApI^QLob2g8{!~PV{33pC
zl63V49FvHe5U@>v6wgkH5OruYfK$d`1vuA4K`it&ex-Kg at h3>9Ag#T?#%D$QCV$x@
z1kOS*3I`v}FTbqlXe#?SVle*9P-=L}Y~t~V+T{pp7Z3{-OrCm*VdNwP at wX@o`Q<)i
zWTpGeOaClkIX9h-NEb;4m at 3rxBdqD9|59M$;wyq=k`{k?gjo8wqIFX>dEjqmG8_H-
zDDK9CuT_6M<&FnyV!?6Z!9 at C7$Zmx^+L)-f%2!)}JH*c&MU~8`osazGqgdF2p->Ps
z_iYmvf*MREkse%?BiaxJLb6t;P0FDV`<G*?)s1&{0$kS6zYu8pg%1#UD%qto8>E}%
z=wE8!(6&-_Vv;5h<Y9o*mu=4c*ivcyqwNZmb=}lY_9~ACzAH^?_^S^l;ny?_rL&J}
zi1?Zr|MX9Iatch}N^=Z{f8i4a at Zlvwy0S?L0gZviS~G(W5tSN4V`>rd_;Zs}sw<`G
z;GhqMCh^<&6kf?<ezP%yRkmYS7#&LWdE{*1Tm-waLno3&XfodBYu7-&668hL5AS}C
z5D3pIkC0lziUdI3e3aeDvqvihSi+u45RE|rAf9Lsf42GP+ at k4-PRwPBW+!5&r)p%Q
zQ|0MuT_plZCujT<4;M7fil#+DpcWyZ5LA26&9t5P at fSf&6~d(YK$FP0qmo!i2skJO
za+AoBm-4~^1s%$WksQZ;CFl~97mm%i5jOtbs^kJsC9K9l<XJw-F~+v5?D*BC-{Jcs
zpud3l3zVQh#2%2X$Q~{*RZ(J(CL)@wWCJ4^=GQGT;)~^^z?6C&ie;PaMq>l<hh3PA
zO!Jr{&rWw-hkWqcL%A9M>OcOpWPUKImu+h7 at CRSY*L<t^$Y?WYs)0lhO{Exl;bS(v
z86d}1e(yd6CImJ(*tzD85O5ZJUi(V%!9icXaGbU&ft#?a>hzDW3a`1D6v+>N1xn>H
zfX;FD!#mCUtA{^4A at AQI96WeXMyNu3X9k7yi*5MZXN!IzU>lPdsR;)Hyi>aXWDM+O
zfe!3iW>7-dX-21h<ky6_NL+9Ouo_PMs4_;yFu6Htj29aI7UKIZ{wd!i^k1Lx4tU6O
zM3W234)`jA;zRuUf?`E_cKi!(b-rA1<$FymL`0-IIN3zRcis(y&pdY86sSdBq(iT4
zZc>ghiVyKCJK+1<H~7R4zN^$ANM}xj at mEy&E(NSe?QFoGJ(#OJLZG>6zcxn2BWdA7
zTf;{hP9uJqmHu_aLh}*x`hA;jq3ZyHzl<oj=7hbSuKI&N&Pqr7uSmgI^OTRSn5#TE
z3xOsUa7k4GT~cEGX<bBMlmd2vwg3+DR1u(ao(5m1j8GOR)0XYH=-QleJo1cWo+3}}
zLXZgMf*+0~g&a|%@b|m>F8;UNa*NZ2d}Kx&jr1oNK3X at _>|vD<6d*y70yHC1eB>8x
z#~f8`HDEO#g+|j63#y=JG152Q)mMfguVJW|YZ6=^CD8EC1tH+0r|?G at eA2Z;30cg8
zUpVmhxSAh)#m8Ev5_+y_?n?wR6MA~)JB9O?o7CPm=c;j;ry4a%dGG}b7OQ)l<2=Hd
z)XCm&S@;vYzMD!=A&?hD-akK3`7u|2D*h^xF%0&KVOsSKdFCNtyK#pNG>~Bw;-fsZ
zO$!Pe$iM+Z3Pd}phaD at ZHQ4!{BwY2o=~@V^75^B<pMXVH9iuDo<L?m#-1zuIN5IC5
znn1YXZ>sns47DV6GVIqIhMCq`v;+|sDWIBpHn23t(|qKhbO1qIRAyupWXjj^kFpGt
zgF?(m?(-3C{A~nilZq8J2|_<|L<v&o>EECKgrF=C1$n_LW>@^ZxUr4pd=zy2D?!M!
zjXi9$M|&#~1u5x4wbU8XeoFS~9N`*m%yz&$%||!229yQW?GZ4f`qh8qck#E4`qtq`
zQ#0kDgauH;-&Z8v`GGd at hu0gZ@bR4iGTnVq(9p9Bln8<-1hN2dn&&lVp(cAb(bln3
z;17lO0u?}9tWK*obVmibO!@e$HkOM#<HbTn5)@m2!;dXMYZrDEGS3o{b)}x#Yqm7z
z4%9ef&LsRTO%?9oF9n##0GW<SzjB~Tv8A5Qp$*Sz2B&|5L`f7xQ^TKz at tN}{{b+<F
zUc`(u__8nlg}_sVfO3SuoV0Bt_K`dQ at z1?*u+xz}=B~lF5olf+Oe?L3obWgcZ}2J8
zM`Z_pS11q=0$7Ab7I at H9tc4nXyMRFG+kBTJ(b^RG{p)Xc?E)o&a2SKOLTYm-01$li
zilM^*tKclwl_317!pB0u5|xv)gydML7!sJ$2b9#C0yt4f|HEI-$`?<eM6u?fUcS(?
z)$x~8o&^nj0BI at yv<kkZ6=asvj7PLd0gsyye^D?ecRcIVVIBuCdlukq)&#;8J?Tct
zWFVS~0P=p20UQJ_3qkr98W3#Fbg20#B5dG-Rpd4DIIA``0<q9^7WJ%uMfIzZEU*z2
z1&2})EKUF3XqYNt9chTfO-jID>ovr>8s_mA7iL(U*H~GdYjA<D$-Y9cD;I)K`I=%L
zf2 at GgaASiB-9g4NRmkuMU!y4bLjML#{fDb9ApIADNdX;EP at h4N^~5IJ3TFHT!YUeP
z+pl%VKv)G=69@{&Srjx8Q6j_w2Ng+Ef$f{<k&QVSYzdHob+zXTM6qCi=8ms~z`K~&
z0l~6;Fj55RhX7=yY(>)9gXQp2KGZe>9hSK23xS~MC_!GFZ5fUwy$I017XLONR~Tz+
z?Y~UWHDbo!mQ8i>*I|qjgg<wfA$&U-e2uWCe*@GX*=lM0r338SD8wI0BgtE!X_D7w
zQzaJNpTGP!ESeAyKgZkkeAM?iHA*qS$sT7>Aaz%T$Q{h}1wxFd6nvGC2$c>FD)k`S
zZLKH at mR985L|ezlLf~6u*Z{sF#sxJHfBNSpp(5iWO9WlPL0iSshQBDtO+SFcWnUvR
zJa<ShM=$ehI#Ys7%R=xmv5GxQgMFIHud$>buRK0gR7~lgdgCtyBYwu$L_w28#nC*h
zvLVWM+7m%FO$Om?e!dF?{?O6Cj*mKufJ`*GcO0DUgTzm1a-Rb6SF43UT)^i(_!2=B
z1W|tRk<=Y*h&=uba0h?o$nJo at ukcqDsoh#^_Bd<VfIl}SJK^D`uqd!%Eek{ee`QAq
z^zrwRFqrB=(sBe+SPB8`(<(d2>lm=*FJ!_;s~Std*KtI#r}G8>>JMY^7p(XbC;k#&
z+A>e$f<##8um3B at V&p6O at d!_;P8<c at D;TNZZyrquDnUka!F?ZHePjc_5C&Wn at CTp2
z`c~HpgcMM(#K_y3d^Djfm=Hj1X(fpAZNajjcQM&v7jPdUrN(j;$Z<CG_X0DBj*uxP
zPWVEs=m~*?St+3YXrjO>#?TDcqzqMynrRp5?^K>N at 2kk;AjI0D{);bGd<H)LqQG~Q
z at HY=Lz!wGT^$6Xje_KFh6KAa|R0v!(H=z(Um7k}jk943Ylt7jUR?+WcS1I7Wa%v$?
znFn5ppcD%M%|q>@iUGJ9NCw>RXsTWbf$T$!%u;(PK=zs_xTb$0kd?0D0toDkv1qIN
zsQkiZ<Ac#hGgpY>k39ZTKrTo|OgQTiJjKo<iC-+FgFEcOzp|sV;=lhQ^eMl(Ar^{o
z`u8mU;0u9{2N`KCj`NyHAg_{N#IFR&Vok?=(@IH_bJ*jfMB at cA>?AXFhW at R>Wz01P
zZ+-I{AV!+Lk<!zgQp|GFK`rtYP{m#|Z}~SfvOs`Hv<<>|kMnv2uN-M&p~*+}r&Eyk
zUrlW!b;J}9t2+kRd}Sg7oQ0qxV3ME&HL%Jf7w`w)jw~*|l0>Sj7h!`J>968vgAll*
ziKeLv!InSGBaf=q*2w^7$fo#%PX-kbh at hrGF2~<TZQ*|I^8RHK9b_Q2Vy`^PFJYuH
z*v&7*ImkzIN{8T!h{jnbY7BLZmk6R at X0f&|&5N&_q+)3w`)Npmq)9c|0Q2xy77%=D
zhh1~>@ll%)$WZUaKGF#?mbR6oNgeYL5BqHmrloc%APQ=cy#Rk7r5<BAI3+0A!!86}
z8KWJ_f8oAD3m{KB&<dp>R{x!!@yAnof?(I9f5KxAwZ~rvf6Y8flL*?y{LDiCAh2Jh
zC310rj{dEp=D^ND)9SbihmWNIcZ5J+2n2{GEurq&chpSdWrt0Z4J=_2GEx8;O)NO&
zc*$&<$DA3&pyq@<{`&OqMHqiSN*H6XM<jyKw<3=$q_)7wLa|2P60Y>G>8py&V7XJM
zU>S-3F6EE at x8jEdE)7H8>4+nJT0Q>6FE=&y$AeJBzw;-Zd$8ud#|vfrZC-w3;VJ&?
zVHgPs0r7+1p6jEv+^0J5IT(K*9ZobMfLhc at 5el2K%4Vd>;OfoGP2q480mnt at z&5+H
zk)p;1s<sOY0on*x_F1Kg2>$f16$QV}`GH89a2!lCs1M45PQ_f>nq2)+{A-d<U9v8Z
zSjA0+S_rh!e6l}O{E+VOTmCPA@(v$NXh2D%f8yWu{>4Ep{r9-o=@dbMAW_hy9tTxd
z1f&wHqyWu}Zv|gp1Khqq?V_Mx)2CiLh^wazKwIMA%sk%;jTq4bQ`=TbE;B<!MV;b6
zpl1fyc~KPtCLyn*f$t;o_)7tuew`y5=^z(8P7<aPeJgUoihS=livN;q>wnSX3}8_v
z;YQWe9)BHAY2a`9cN2fm5Yy-fLvqS;=N}O#d+>?D0Y*mf(HKQo!{1XLueskx9sJp8
zIh!5dot^Yeh#NlmSNx$)^Qj$b0~8$hg#&yFq$sB*Tbn)tXlq8+3{x3+L1{eF;jd=A
z0cLQY7qWm0j$w9T at Z|#R5<wFMeR)xv5ct7FF0kL@*5$Y;Lkfbrq`twf_>=-_kvqIL
ztP;eS#P7Or-)St2d^hyrLO%YkQb1A*x_Jn=HxXGtz#>bo#(+-)iVX5ob5tHv`RJyv
z%wTEu3!iyV3O?gC6%}WGaSBhsb)a^NHq0Gg`6y)k&1Ry~*X(hw%+qlb6Sk>u6e3}v
zb_LD-im;Cw4M=21P$7^A$WI7#BtlIVNC6Fee<l+SkC>nRWMDZ{Np01p^H2Q6LJ9I>
zXg^XgnXL+u0UNYc5la?e?&_mXR~^J4)rta!wqQ$ekQZD2{Kek at tJ?>ShZ=URK)Cki
z>noCGHl;~_i!vTn+pZ+-6~hvkkEEGRt~EDx at aMIlr)ohQcYrlH)UJ%g#1(%ZEhlH0
z?IY&y^sT{e5>kg!A*lZE2!GiZ1VSN-e<4taxZn{hrdV=P54ntd?*ckvq3>)AqZH^M
z%4`Z`bBRzCT<2pGMjq9gkNDt>m_ at 5U%;rw~L3RevY`*&H6=MWZ(`mQT$B at 5#9R5V!
z9_o=^_T3RC<TbMA7yTp8evJY6x1Hq(UvOp>uy~r;5(sOeQ#kOUb0=O`+>{-S7hI^2
zI!pMfAA*8U^O}BzX!!SM8WC}VwU%{-(i^n3>_N^v9f61+e^>9q-c9UKQhQQh8-nqo
zSi~Pg<Xvmf(Z3+Z- at 2@2Iq#}J2E<>H at t}_$6t();YVN4a9+B)l2rR)fTY!W~7Knwt
zz)jW~EEkN?DlFClUsGzB9d_<RO$o3=3M{Hc!B_5E%XZ_q)ejD$py|7#`Kl0<1-_zf
z^*{KoP-{990#!(p8nAl`3bD{97!`o>JBxy^Nda%@-o>Oj{jj{uWq+;w)vx#z1pom7
zEg8Ey&Xq*G=3RmbBVstKKSE%;3H$KZ at pvT&Pprs{Y;1-0Syrk1<N>}dMl8(cT<0s|
zZ$HJK{!>2tHAYrj7+^wIjaAwz?d5{1kN9W-hY0X~ZLkM{rtfC4kQbbCbvE;Dl^=70
zuL(iT&CWvVl}QZt(Mt`mxH$!-d{<2 at w0;Z}Amu{x5;^QrW<n7BwgY{{rkPV9z;Sx1
z{_{xCS<7oQ-~u`R&Ob_!QZFJC2#;5S2;0&mhaO|VmsZHvgcyIPAR!QITZ7^Qd&NiP
zXS~gh%`AtV;1Q<zh5OZ41J0 at p(`Q~+ at L}%<H?%RI1CPU`JHB!gcJK{$rx2)<>W|%)
z{tE%}Lf{VlI}7O;;M;=-5BeVyW`k4W{2b91;3^BGfYk6Vz?Zzhffu4M$_IZMp0G#0
zD>(S0;VF&_0q^h^P5XjidCk${U)fnFST6PsoHcJ)R#&K126f)iy}WQWzeE`R=Cqs=
zBxeQPx?S;SxyMaH<O4bKg&-yS%1!+ULmlVzPr8~wK&|O0JH)IRDMLLa7CLGX!cZeG
z3dolfG_S7-#BH}N|HJ+sl(zmt<Or(l#J?=?qr~35d+AVJ-SRI4iJxEb=OchZpaC0y
z^e_=V at lsU9S_pLF51^mFH2gaPSxfV{D|y2!gItxA0Lld)O>T?;`4)fmUyP(cO%@0N
z_)M~p`p<Yq;&1hejBElb<^iX6C8er at IV`9WvqGWysOePa-A7n4ui0&V^pyEaF>x#k
z_*Z#W>dQq4z;`0W|L(i*mIaKI_4otss`B8kBI($O{Zz<JNv&w`2=++<Otko`W81AW
zL|73dHR7NAWC8xw9}K~_%e4PuUcu238vMg6i1=Gt{ZV9;eIYhLM=p2;)A08qfP5Q)
zj#CrtQq_ZO<0AvC9&May6>}jFi^5SoN!w6Es!&8&EHr}eU`gBepYqq=94Op<0Yyf*
zqhz;|S)w+TC+x0usy{-&FV3RvCpb+A+78^&{1Qu_Fggeog4ujm{QtpU2*3f~RXU`9
zMZhD<4)--2oJMHXm{tB~ZTS}hc$2r<C<@BBxbp~J_Y=R#eG7ZP|LDjLFKghNTwl~^
z!&4kYMo0aD8g}pt0hMaVyBUAl#yq?gY5?7&e8tBdAE%^~H%Yrm{QMGVh=3wF0$_kU
za>3(b1iOE{VbAr58C>tU<Bogpz1M at Zr1DU^rV3SmbTlD2{q)m0>qH^Agakz)s05Av
z)sUJf=-5(Civ}GcfV^E#lcDi9%>Ju6|A<AhN4}0gNFU{;?6V>}Q6-hc?_2!ApJpxm
zHAT<<uA>S`J&Q^@@HI3D743khYMK`gfzYY8?BXvMC|tv>hNq4)A{RUh1ve8vMEEl`
z at sO_QTS(=>pX^=NBsk!Izzu)GASxTKU06&1Qb0#V5(0m<^b<YrC|P{P)N<P<5hNYp
zek#=JP_=0(HvRK`mH$;@;SP!7 at 5cvC2@<bL7Wf+Y=^uY at SV)>*2o!c7g_RzvPL4wr
z|0)k>Ic~#pwXb<86Kn2UU2(PnsXs!XwaLc63h&w>C)z?l*c7gTtm$Bmyhgp0jHIjq
z+(Oi at Lyb(80#0Id;@4~ioWabHbaJQq-?Q|8&pr15VkFI at t^N?aSokO-!0+a1>wh_A
z6(JS^tKeT25E%Y~GT4zPX;lkGScuSIvL`~#Q|{o8`SR=A`iED~3P-g|dGTQNA7srA
z>k$HzgJeHj1A#gGXi~sJWDmPwIi_l&pf3u_7Yp%Md at A_(>(ecI69U+YzorCHJLXU$
z=88P#1V4>>1&C{usror)#J?)!wT0ylHW;emoaKTQJz^eN;P7+befK$n8c($Tfl$DW
zr+oeNzwQakf6h#(IEb=PLg6Xo3jrHAXp+c-FJClag+(%w1Q80fCU)-NZ-ZFnf2Li)
zv-p<+Q{G9v#t{bqS>r*>@fQVOxnF|Vf-RKh36Jl}uVm2|6j9J;qy)rYs{|?9Y7YJi
zJM3+>BmM-Byjp>nCJ+NZfOuL<suBSH6$j4hFql=UtAAT^#1Tg*?6A;}rR9;tL0<8(
ziW&Ui=D(Bb%@=UA!=C;-7x|fjq{Z4oLLd>4#2?sFV9URaRVCp*Zbl;CRwz<i{{H@@
z{?LEoZ|@d36$W9nYfk=*hf%?aKlnwVBParFGmJZ$kzK)epBWx!C*{*T?42j8Ij;Cm
z&BrIfyTXotMMFp3K%VlQTlD$j3`X0cKm0i>5qxBlw;ST8Z6VO%7jy)`04qu{^^g=#
zJ at r%r)O^5^7c%jhD7e#o!-$j2OfH*5nE{2sReY!6pZ at tCfADRft{zbk*jD|g5d0Ir
zc;PQEbmGrDNvFbaQ0h at No_&?_Cku#;BdU#`Ai%E?p^hxDFDOSsV0EtmHs2{bYCir_
zfbyk4vIji!T_X>;=G>liJ!pQi(QNn3OOuv}zoNu7*pFNrhJI|J1Ts*K9SAjL#4!3-
z_NN3Pznp~Dvyi8>Dw0GnlKXtbP$(^AwzaNYE<56{6MtnKf5VKa_zMAf2%kmChWI=G
zU at o#+`q!z*6F>Oax?&5yEAl0U&}d>*3fPDZut`yVQ2<=?Q3&wYVYWi#L_~q}G6lX6
zRC(HD at z+v*HAlq&zq+AryNR<L<S92%#ea6j_)As5{V5q(c<rIwBoZn at fF&9 at wklrx
zvx^cm#~zwTTSMNnn(Aaz at S}tkO~Nn2w$bB>s!*;af4Sh_Rbfp3TrT3SB2G5xpLv?%
z!+_wkP+y*UR-ieEe21LMJHqZn-hH9bFHB-e=SmRTnh@}mol*dKtxchPREV55V@~#}
zLHf5pI;G4}hyGX9FJ(vbpL!9$xLkYfwU$e1?6fYV)qg;AgoB;bMaJYGHwH69=|J89
zj{wLX*^L9*s*sZp!7D+P9n7^g0?VK2jp=teG|V7;wj25<Z#BgJi at c;0BQ5<~!X6<&
zwm<xthsp3)Au%^nQ+AddIB)so)5rKDOxT>&q&ZW0LGzgVN?+rtJFZ3=Lyf{D1ju6^
zc8jixTO>yhjze}&HKdx;Q4 at Lfr`A!k%0umx55D5#KKRnG^P7}c0|gyMD5xv`G)5Rs
zcZvy~e$S^U!!T!n9kAAUl7;p%?^#4%3gGWSAwWL<U4=kFb8a!d*-8QRA1);0F9bRm
z(trE~$RQkmz6%`w1`E0{3EV>eKl!t^?G;soWt at hstB>HTIqePw$W0xC&8!KN5R?K%
zf#VSI9U^*Af?#wCl?C=eTdjhFE#=qRe22U}_s%=-6dDhTubS`2Nydu;W5l|dO|GFT
z+>F7W^3 at h$q79b7&Wzyefa5UfY6cum+4=vu7<^6c#2<XE5+nuufsAgsuh^QzawdUV
zxo`?%m2dGU<M>OE^e+ndL&2EpKQBBonimC6Y51FsYw;(3<WY at 3X|)Sf`Hf+WX1qXX
zhRM+QOL>k1!qiUAWYCX+?Zt|J$8xkqLCw*0G{r~RY0q`FadVmF1O}<f$#TZHiGTWc
z)wd#J at Q1WbGr1~0%y6xvZ!rEoVuG7^wc)z91;ehXOLg$~M(oYP>K>6ho|W1<yk-yb
z=3yR~q+))0OaEK`9+yWdq>)qhgYViQ6W-wuevQ1XTiKWUus6m{&9?=sy_i+tXtufP
zt@=O@>W{M at o~n?uXs-b3581cXBCq&}2>xDFy)KE7ja62HPcx!Gv1%p*s22p}HN~IH
zg3fpc43)<=!6XrhcH~O|CY2FFz(O^|c!Z;^qfx$(-Eox>QbSmuvHt%sh_G5`5;M at 7
zMHv=<8m9mF)4$9e{wU#Z1_}``j at WkjGHv+dY_P~$sM^jKfpAm7v78W;ChqKnX!*bN
z4+{>i$~F11Q>rSJ^bdZ;$6J^Z<TxY?6e5tTMWUdAuktwU%Lw}ycL<EN>JNi8zb!CB
ze22dng at RScQ&+XR(~hr1K{H-+b3)*w`Hk<$6lz&e<?*o&{(@o`aG*kuJ)AX(L#D}j
z4IQLJLdIMD3&EWKF&zG*|2#6G#Nn6v6I-e_o^9bR96kz%uY^F80>-$bS=6`bAAhQF
z_ at plT4t?V9z^3?n74;V2b<8d-1icYB2nm5iuoqx13-Ff+UYZD)NsLS+ywe%}kgEKW
z%QgPWAQWuttYU!s3Lru1r+ at reg`SR^6e60a+IelnF^3)VijQkMf&r?KEbvc8>4D3%
zEd<J}b)|q1u+YKGiXD)s4uADuppnGiLQ0TR6FI@|TEm~^oMpW1208u5A7>xo1zD#U
zZPUasUseCX*GdHII<&KasTCj0>EBgz{siAkfhG|OfxXyG+k`qM#5`h{2D_^S*WoYy
zqZ)r9))y=`u!NnMSUT+S_YwcD_-kc{Z!M$>opHt)usgUGg_sM6rtcIaFQkcMlIFcw
z!BJ5WR{bP9!=xUmh>M_enfQGx5C~WrLnRb{6;dbc;%Fn#-|`Qv at xf2wuv-OTKEgsX
zAQTrXY89Ns4}}oW7)z{fGphdhK at xV#S9!GHyK4ArHU%4me33hr=sYIeH6OVt3e_KY
zk=K+s4#Ftu#NFyX1|M)D4?E!QYYeNoZ<xnDOM8XDyBp?Wq3NXm*`NhNIDC{2MB;?W
zJF`)2c?wtjeN_nL2pa$#{i{Fn1^M9PFRz7wgB5nORol%5xF)TFkGXFfF#HW`z_RbI
z|9hSw&=~L32k=P+*nSAYU;UwZ*j;6T2ENenh#)N_4Qa9}C)^|<E18#0 at P`^ngVEzJ
zwwAM~dV&UjH8=HxZ}9N%zH9vPk)Cv76(OL1A#kn!6bRVsbQPC9d-m8~?NA`ofVhhw
zZ4j-c1;zc&|K`WReax#rDwPx%@fSGKA~Viz at e(%pfYd-XkA7<R74pWoBkSE{M#ml%
zfP*Yyo8s^Asrb{sX6NnvL+$u`9dlKb4D*O3;3Wez7$eJEHT-k1`h&m0$a4+b>PfUw
z)qLAc-%fM0W~7d*8Ng?WJqSz$RCvEjXdox`YEj{EQwa2RJP5L<B&-#YVL2w2bBF5U
zug^&Lad!B3{#2>t0@=IMmHtO>_*Yv at xKx%+2u$K5+RipmgP`LkXgbI%JIGs3V-kJR
z6*K4`e<|SbDGTCX2_k#vA|g=)%wy?kS;8ss<pTXPQZqoT(X)yW^EdMPMa2DK?j}oo
z1YAUz=PFI=+d&xSy~E#S?Ec2!1HKdhne3f>Dn9K3>EBmA5=@YF$c*oCFiA&l0rC~s
z*g&XgdsA~v3Vw$QyRas&sf*;emj2b2w7o{){{I!4L9NJGt`L+C?f|H at _u*h;VuqcF
z_#J+nXKcZ)QUL#sK*B*n!elm+TTz|Vs%)-|!N2+=1Z at OrqtM5{K*QUL7B!nb=DgO5
zQEG=h^1(L)fW+ at b+fRI6_pm|<b{lb0kG~KAULbrMf3CsHev^~}3ZQ01s_O`3z+?yD
zl<)AP>|^d|p;h at 6F0M`1^BRiOUKFY at u9_(ON(ThoNKx_Wv=2TMyvBhIR#(z7r+n?l
z>)(Qx8nkbpKC=bLBW5tCW)jx|VO<Hh4FU5q5`QBxv`~T%z83-O+7Vo9ViA9+wZ!ki
z8qu<i?1|s&o=Rv2b=Wx{YW%fiFAA_11 at PT>9sWYVQ?pr%`wWP`n}vp*L<O~-m-vM^
z_++njsGxrWlj-!v>ybSg8Z41t0<aST_mS5C1Vk*Hf6 at SF5g;eFDLyKU6krUS34<h9
zYmAa*W~iGs{@r0fAt)V4!Y+`7_*+q~C3}#q1)XAIT5b9|Lc at I{wXy(w9h7XKn0wd8
z-#eg6&IKG$@(-~9pR*A1T2UDO94Q2C1Zcy~5 at tB__pPhGrD+Ls;;;DV!>-{^{5Cb!
zwGb#lyZ8e#E!sY=VY#3G8ieKdPdtU7t4vn}*aHZYLg5bVzB0H;aBgxTz#mw%xoQ4F
zfIr|=K^ye%>W<ViiK$Y)JgQl!4it58E(Dg=kWc)u*z~>bf$t}7r!ryUyZLcYD1?Cc
z9fVw+HvKf at TJfQO8^Q2Lp3FqS9gD`F#ze<Kh$R-qKm9xT*mJl1mmJu6|Ft@$anN}3
z8#1wS1qY>40H1UVTCMxg=@{v1FjgW0cn^9?YpTX{$5SSmJ66}2G5pmZ`nMOjPpIJI
z2`_&o8lEv9@)HrECxfEkDg2=(eurM<6F-JbvbmdIxUEI2&O!l4-cLZ at zeGVeN&$r7
z^`M6Tgus1`NnM$NKQFfY^+*5lmj&W3$BCcU8aJ6VB%>Nq*V-tyk*=DNn#V1=W$0t%
zJqxvG(Kg;q<Gbm8cih}QOaJj_p#h2y_>f`?c%BY_o%)5qRSt at j`dkY5*4BUEzya{p
zA4g*MiC=szls!HQfh<sYM4=Q=g7DYqKf*+=2?6mdur>V&fwfGI=hUALJb-JW;J$F^
z<8O7*=eQP=uq4a+^bFm!ly5*|;_q=Q3gtS}a+!ecdeEE}@{~@K%nY6qGL1=9hWHq-
z_<)Hj+4GbRUG+<ZeAk~S7%2tp6qK*yNanBqjy<+r9V0C&z811v_P8S#>;<x*$}a at V
zHn4_62uyB8sI?3z5uCS0gbfCCjX#|${$9KAhkeDr at Yj4L_0oU**^pM5fpBm_?Fy7D
zl6^IC5gK<qJLq)Gqt!9e7_DcEMHBj}W<{+ at W*$~izVav#hT#t;2RY7J1YGqsFsD(z
z>IA+tX(R9yN~*oe?^jm8xH<yKCaCcr!B9(PSkX^CetE0rkUjF!L9 at DrT2vsST?jJ9
zx5FO+ko(zz;K83?v<d<Kb~k2l(CXaRc<PEzZJ_zMMK>QCz;fI)^DO8uSjtOH;O0S{
z0?{gldBioxo1~lOu`96+4H at by{PE-+@?7Sx#CP>^;Ku~{;KyG?9DV)Pr}ERkS8oBL
zd6_k}w~P}D3o)B4y|?=P8Tocz9a#{6HV8p$xw3&hV~lUjZ`0u#&iK>6Y9kiOzK(D>
z{}2H0+JD2v00i*a3Lb5DV(vO$*<s`9jt7mIYmT`3YEl1A1=Hy%_l=LXr5oAf&4vm1
zS!kp^6xH~L-L;OJ$Y at Y&EB<Bwt>ct({q@(Ay~^XY*V)*Cnb+XwJM5ZtON3U}0mtu_
zC!KT>@=}2K at i#f(r9k}M5exj4pmt<>aMS+FHG&7<%UAkGzLx%dTXl`UcohOykXL5^
zS2Tj(&4KA=_sfELB(|Vw1^})Z<9 at l&488)KomT9t?zox$nOB8050B^y>S@&hS9j3h
zwE-IJ;McHHZEn8#X3D?)_S*$QQt%XfS<i9UwL0<7W+s&dC!c&W@}i&#ar~`lW_`=)
zlL7vkBbHdOgj)C|i1F|6L-Ub$P5)Kb_*>m08uxL4C}{eF*PTHZN!La$h}Sj)Jcz1~
z&Y~ShgY1sqE*j<zPpzoqX*apg27)9`1T^OP%I3?jah&h<<Bx`#U)dl2KGG!SD!=06
z4-GzA0({N<+YneW1u}*W>;Z&C{W at eXpnvZL@h=3W8~#4hyqUet;jhCm?_bp)`>zrd
z|LXrlq58uH0<hNTKNQixFk^Jw!41iwS7><Tt7(BPE(Z9h`L-asGdJC_*7)mwUIX6d
zn1u|pUD7R=aTWzlpPQj@^%08UzeM8V<v&UD8t!*a2TnirICBajf7P_M6$>q;XKhvy
zcVb8n^^u`fzaiTTRH0eU%)>vcq<}()zbFWYLzf9vn{EBaU$gBBflj4$R<~}bVSx*@
zfNc4%LcX8>%5?!N99oZbGx#xgr;o1F=_cAHZ{6`)*@p!mX9N5Rl^Kq6cm}zuE(BqB
zQ`2{+5Ez*((YWD;8~lA=<#FbO#fqj?);e`8rDtsx1)MR7L0_Xu%}5x%9or6uzm6re
zMG8A&xbn*7zdf|S=uiufJV^gaP-P!>4gWO`%O8JDo(3!z=K$iV!*Mse4;`NPdk?Lc
zG_so|h5j}WJ~n0rzmzH88rjW)oBq4<oxgaHD8qnap^qN%+LfDJuCVJw-gRZLToxib
zObF8N%qoB4_sfGFL|F6M5`<?t<hKeWTHIFr%m3b*uO>jgl5r(n;m)L1cjt;L?*E at 4
zlL(B&4eEaRguTkI!vOa+ozl<}EHNIFphXF{B<dP}05xNLG`O20Qky7*dK(UX-}<FU
zGlKz3T-P$&mDg5b2AAW{JR$JWafLh4hBy91p8M{{JlQV+SQ`lb?%=?q^7|(iWXT2)
bOly7%;i&~5YIigrQ@*d<3_jb$PR;pWU;lcu

diff --git a/kernels/compiler_box_blur_image.cl b/kernels/compiler_box_blur_image.cl
deleted file mode 100644
index 42f463b..0000000
--- a/kernels/compiler_box_blur_image.cl
+++ /dev/null
@@ -1,18 +0,0 @@
-__kernel void compiler_box_blur_image(__read_only image2d_t src,
-                                      __write_only image2d_t dst)
-{
-  const sampler_t sampler = CLK_NORMALIZED_COORDS_FALSE |
-                            CLK_ADDRESS_CLAMP_TO_EDGE |
-                            CLK_FILTER_NEAREST;
-  const int2 coord = (int2)(get_global_id(0), get_global_id(1));
-  int2 offset;
-  float4 sum = 0;
-
-  for (offset.y = -1; offset.y <= 1; offset.y++) {
-    for (offset.x = -1; offset.x <= 1; offset.x++) {
-      sum +=  read_imagef(src, sampler, coord + offset);
-    }
-  }
-
-  write_imagef(dst, coord, (1.0f/9.0f)*sum);
-}
diff --git a/kernels/compiler_box_blur_ref.bmp b/kernels/compiler_box_blur_ref.bmp
deleted file mode 100644
index 149cbba1d8bae1fdd4e4803970e06ec1682a40fc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 49206
zcmZwQXWJ%KmA7%{Tg+Pn(kLhjf(Rlu2xc*%h!M;=D`LPL#w;qJB7%wt=GGQ4Ac_H6
zZAlWo%>1fO?ltAzvybDc*;ie=_Fn5;|F!n6>u!AZKI6C>AF#ILT=)2Y7vBH>{_6q%
zt*70%UjO6r%x6CHS<iabi(mZWcfIRfU;EnEzW at F2f9XqKdfVIH_WIYq{v#jx$alW;
zoolYS=ErNh`s%B{@P#kD^{sDx%2S^5xW_&2=%bH*)T18dTIbkfkA3u`AN`oeJm#^F
zeeB~O|M(M5IN_LMj`7ta9`T6o`^r<#d*1Ut^q~)Z{No at 0;0HgbfBNaCA9d7G#ytGt
z4?p6FBMv|Oa2?M+{pnAC=}TYwhBv&yayrjg+pAyw>JNP21FZ7+CqMbg&#di#4r!nM
z^rt`dsZSZ8W60+}|M|~-?sH%M@|VBzm9JcU at x|Z#<~Ogr@=Ct^<R?G*#V>ww{q@)X
z{`bHC%U}L-;J|^~ZoBRFwdojOm2=NM*P^d{<ty26)>&t<;?z at 5<p`Tu$dVuZ=tsZ&
z<u6Tg^UXK!- at o6wFMQz(pY)_B8Ft1QX8`-67rp4^FMqk4XP$ZHv!DHJ{nx(swXb^B
ztDgJZ=NiM)lTJDbE>U>PTi){ZuYWzrZ+`QetsDPque~<@Km6ejIU+O$Kk<oAL=`t}
zjlj|IKmPdR&3W?4CqvCnUp?}Xk2J<rIIPGc{9$~@JKn*h(@s0B8C)Osu!rs0vquz6
zB`#;5eKu3^cYXfzpU+=+-v0KtfB3^6jz7Fw_=Eh}&wdtg<ZJrw_=;@6r>;vcz4Wrn
zF2kRwe)hAU{rcCx{@w3>_s2i}@o#_o+u#5G_kaECU&!Bi=bd1F;~U=~NVpj63gdI0
z^PDF?`N>@47YiAG;e{7ob=6hP^QS-k>86`*`qsC;^`<wy33efP>QkSp^MV(=K<v&r
z=N#d~{3S1WiD;g8-g!JS1|?pT+!LPg1a5xyt6#;R*@S1z$3FHk`WIqS(b)XOFMjbo
z?|BanETMDIrZEX&@Xg6c-}(r<5LiO6++>ECktYC7J?&{v!{0E^8p(`8U{0zKWn(A-
zbK{9eWBmKy|9*yj;uD_$IsR0Eu&a-5`ic(w3V)5+7hQDGC6`=6{5<;J_r6C_`}Xbo
z&2N75hd=y*_;0=S)_?rtANZ61zyJO3U;XM=o_fVAUO~6W^A|2KB|d0-_wL13T*#nk
zLL`ndND6q6kp{D0jN~}4g#h_xGp!~Z at qh4xAN-JqJOsD+fA_oJB`}j4!%b3QYWyVv
zFD|&?f|tGQWehm+#1q2{7s!-<+;PX52fFkRtou?GSelW%V*0w*y-uxTp7aEt4GlJx
zkw+eRB>fw2Dk;En<LOY+d5Qv|c;`FcDKUdQ3P+gE<1Ym9heBL at Mf_45e7LT-;tDmE
zQ|bo(M4R~k`OkmifAHWz`j_d-BY>Jk!6)PBF at yVx^ZVZSzRH@)M)pD`h!V&AzA_B?
znrC}T2t?E4nvQ7l{Xq|UkPv{zQ+Q3~aRY>aBlxF(2D6HU;!gum$G-xOHfW+?DxuM6
z-hlQ9`Naz|W&`Hfszs7WAQTpN3ZlUt5e0#hN8D$L5+v!k%x06&iSjk#AIRxH^5UW{
zxg#ivKmOnT_O}U4j{p4UKi?J~;>W+@?<&(3N%WX!Me1d_%$14neeZh_AW=&QtH}l3
z)gyoY^Pi=FJ;kEZ7IPs3Ut>APA?1#wt|G|}9Ee|2&lN7)lL|?1gh&5;VQuwa6x2Er
z5*^=ygB577Yfx+P_m$9S!K8eB{8bw(GD+ at mO7uy~RI=5_;#Fw{UsIGM2;({a?svbN
z>{(9#3_Jh)^W{FrgUo$r23}+0CbM-k{DZIZPw^pstfu&YMz at r&-Eqeq;M1@%^#7XI
zyvB-TNdU0B^U;rfbdt;D_*<6^mIlW at B8b2J?QgAx62F9i!Cc^VmRDHBLUSL1!`4QD
za@?jP1fncn at u&aUe=TwO<(Ko_gJ_ezrUTj<gkyB*U#sIQA<&l*<_BB}5(3*08EA|l
zW(|L50F(4=krmuhz)654tP6;EX at F3m5`;F++*fBLLhxPnHTUCB{B)K0!Qbw at fBoxU
zXXm|ZZR!%45xEqA-6jirX$7_A%wP4hgmp#1<m!VhSosoA`wMx{GlogMD6m{WIqs$=
z1n$G{)TbKrk%gAVU%U*n5dE9^r$7CvE#L<~_<`bvgS~@3!B78W53**@U4?%F=^}~0
zW(@xF%MuEXXXP?csV5Xd+l*9ajDa0+9aYg(KDv6u0NMb=2~Eg|%CqglRUsUx5ge4d
zQ{^E}a7t=*mGLAbk(G$+uDj08i`Xr<+!BAvSNWZPNY3L938qCr5OuUAqdxN)OK9+F
z)-sZ4#ne_}ACW{#kdMa0NLq!UL_iyMU?&P9qWIhL6k$b`h4`yoC>drsnOOagzx_*?
zoI~0!u at wch!3P|@weX)v$%3-tU(&?QQ%*TWF%bpg2cK<9I{tQKOUsM0qwPSX3Wu3J
zLJYzr?v{?ftB>u%q{z;c2}nr+3+3Axo#^m~h~>0o3*(5r(uw`X8*fx<@UQqIF9g!T
zQ(_GQZ6|NnqF`DJ35t`61e6+<2JMC$ZUEmrCefUNR6G_+0X_;rnqN})oOATqF9c$t
z&OGpe547JYL?$$qRHZH-4YQoBiox_R3y4Q$BSn<3Ed=oDgHQP&D<ew1kEAOo#)yTu
zXa?A|8Kao1rNOME5Qg1BAgrtDn56Itgp#EMc}mDUE*vsfpTR`9<xiPHfC*eMI!<s0
zeBzhdgq=J1Bj)5YC(jN)&`AxY+bSRg-#kJIg|_Cwk_gsSloY5+gjAA5ijNu8FdKoj
z$U~iExe!QsSIi{>u=+wU{88c*%kj6IZ at FwR1Edo8P7CQ@SQP<srA#GA;G7k8sGU$#
zuMXx00BC?t{AGa at u)5S{Jn`64Sy(RcmpwAeBsL3!)gLogf;`nGsKZq85)Lzf&ukDd
z(R74>MDbUAI`ap=W4~PP<fB~7YZv$$boO7|5aXcIQ4r&=Un|k at hgS{ch{!tpgD-u|
zaL+yWh=o<ei&m4mG%p0zA0G<`A<;iiB?8MC=_x)^APwLzVeMA7Bope(Wpk2f<sDvc
zOsWvnv~6E at W<w8uE&e7K9eF|FzGc80-}pwgP6~5Dl5)XEi6H1IzjG<gSH5~yF4&*}
zkuo0F*8~xN at R=R|i2_hne#J+^;=?b+NB+uUCm$zIzd0yAPCkl8x>fuEBrqj{4eV(i
zQ{kY+zd(z7`j-OoOE#(e9 at p-^`)*hBTbf9~WHZ`ID2<_tIc>Y6353HZi5g~p)!x;3
z0uVTPCt>lIu*{YVHhQdBhzU5=e^(jgj+y0`&9t&(fR1k!BGI8+t(}Eoa+&d{$^!Kk
zPhmw~`c%7EC4%B87Ip`dOFc`QM4&z8aUAfkl?e2SRpJM;V~@NBpZ)ow_*3lg at 8pS_
zibU9UAIEZrnWs&}RYQh2MOjP#P$*W`5?1wp>W@(R2quL<-C+{^wgZk75lh$#oqyB^
z*&$m!VhP`37=LFT^#^=~k^Rc4(rrR|23CClInE%f9vY19_z0aefzh>-JpB{77 at -H3
zR06ZyWTzOh#LS*GgU8KZ6BN at D4CU+C#KofYmq(_m2?YLFIrf0h+AaTb+2+{K4i1VH
zZMeX{_uhNeSSGR7p$nM=53dQu0+~4lSxyLSKxkOh=5E?1Bz_Z$1<{&;?D6Dd{1rFu
zQ;|f_mt_iwbQ2o2#lh7hasegIDt+l6fAvRSuE{$QRG&Ra-atX5qj|AnxdQHH8g55+
zrKm#VYH9qL%}0afnyY829r+%tZyp`<TTc1n2>xutpTYR6U^onX%7ke6s{o3>;-jjk
ze_jCP6^Yaxbvm(tf8TxgQ7qq?=QPM#f;27WX48DN<<EGjXLbBFMF|<nWh1tg;4cdD
zOX+h?09+FSz%@!M1-ipQYB!8jyk42vxA7PH_!Ga$JO5kMY at YI4rNdA4A;l6fp{f<Q
zk+B00XwunkA}$Eytp32R?BhlfVolGyR{3!*Sri=8mO)h^K{1teJuY6x)0Om(e^qEL
z3=4l+rT at fFnH7J=dy$O4;^X8$Cq_TG*);8Oiis*JuL%;Rz?!XQ=0f0VEz#)|N(K_a
z9Y=SdgcW}qu|P;DWB90Gx&lt{B1?fjYKjaj)-pp!Ws5pph=@qhe>ux+B~EtuXmy1P
z7W}0EP~fN=?qJA%Q4k%K+<oN3E-3oykF^}Fd!46YA#ev(&lXKjsQ?q!V&RT?hCg`-
zqFqCQ6-SNxDvuT={H1f^xATIpc%s1(W#Q1`?<~YG$(05qthH#;O(MiWlLZ3djwLK-
zQPAu`%%B8KL<m at NfiDCORQ6?-AZccmmZz!;dZHi}_;<(NCxa|ua&?uuI)HhW{+VqH
zaB|~_t6`3UfYS+Lu+w?8U13z}MZuL9WM7j7<|G5FJI1iwRk1Y{{g8oSe6Rk*-^|kl
zMFe?47)Ht?E=ZzEkdg?9#tSWI!{4SB{5D at qI{AB1Rex;09oMPC5^X at TScz67F$bY0
z5b?K!DuF-v<jM^2MS(HkU`6>tpaglpAX*1(mZPe$1Y8OTgmNm%o{}SCDtr>qO=d`T
z$}}6}r7i4SkjSbi8yE&JIQT33Y<A}Kh}N^d1)LY|z(u;QL~e4x8O&M*q-5kcZ5VGt
zYKPjjzK)3K3vqSKLh_6LJ?ju<Dg;y^#^YZKxH8iIOaJrEOZj#&KRa~t>}LnNq*yo|
z at kkjY8=5h{Rj at KY0<de#9<c5LCI?>w4R&LA<Z&IGDZy+i8~B?2-C37yW<$od#Z!^>
zk@$58(mZBULe&IuAuu)|=9F$lJD22DcJSA?p>WM3NHWs--}@J0m3_}@=CqcM0i3d;
zrW1dfFJbW~du2p=dPL%oefkf(t5zWJ7gJ;mV;)D!BQ}E|o2ao65GO>oOUF5TBAbav
zSypzSP#jc#CHmG|Zv}_);R28Wt9+K-%0l*E4yr%+^Ve+jsRiFc6(7;}EF~zU;JdO%
z8TZSE6p&f2ma_+`DxEQ4kqGKA`0Bj85HeL%1f_;CG at y(Ch`*(2UJ3{SFLZ2b2Fp9p
z4DS7l{*hsMGqc=BeL?JXL%1!3za`W<{E1daxP?GySmlIc-Dr>a at oyu>A9nB!6Khim
zp9%(%oNX6aO3w;E{?Iv5;IDpy at 5~84;A#SW3V~dZAkv(jq{0Rs at j~B~ZH$yeVV7L6
zV^z&pG^{RjaiC<yq;wVq$zm<!C6}hkdEHRKgh_}6S1GU+2E<j=Od=MT^ASuTK(DFD
zL(Q=Z*ndUAiH=pgW;RtDY^wza7Sd(8CBSihP$GzmVJ3HFq*~|7X5=}-1wnU**PgPd
zhP-StRpd?HhUlZ{SjDl53zlX80^rlX*%CkUaH;<kt4RUcqnuuNl^REM4S8i5Qc1*S
zUSu{|>foUHN?Egsi0KHP%@nTG$YR_iuVKK_szeY1UqNk)fn9!yf+p7_ATb+>JUE)&
zuyRCx79}d_&rL9yBpjtuXCB3e7y9&2vRI3?Xn2JE0_Sm8^AHb2G;cY(yj4WGqZhM5
z!@pyLC71y$VT14Sjy-7}{F)_9ZWW;s0+Wj@{$v2YsnkRDv-%G^1rooe6i~S0>CCSt
zIGo!8WHg at C#VU)6ugRIgWz*__FC&08tq3YLuxpkh7%nI#8sPeT!Q5AxIf>IL)D~lB
zM_viC3pfZ#H at iREq?P&k0-ZzvA8>keV(<6|1?d`wGqn at H{a51!%k2onrtVpb2-y!v
zOu#Xx*|;MFN)3gOH>W5+YvE$B`*|TKW<XmAJgZfC*yAQLtkN-IDP{@g;V<+GmpLmw
zOu}EIRX$RnI!U at vbY@V3q_A87)6!*VURy$Z<1Yk~5qynpB5O8TKr<Sb87~BYBfuA5
zS=yW;rOz1E$)f!n2mA0B3$J6&0MZi~UXYe3NCXBr!+>um<-R+JNhougs>;KD`sWLc
zQ9}EUVZnDL`|1Oya1&X(fU-mUSn(^tc$`xnr(Ovn?-~zpja7hatTK;QMQR~qSZ*!z
z6N#|W2~#m)6#_zl7}2uaQC#s<|Cz0E95?oG5OC|7*>WvmLU!`VE>QmZjfI_N!$C)?
zx>}{ZUZ7RE?TN^+l2P0heDHe<Ue7_x at 1in72w-H1${@t_Mp2IO8vd?6$`0rR+M!7D
zs`)BE{;tk)3M}=~24Pc?icxc5Fq;r?4Lx#_9bDj!Ex1~3PR4UYEPTZP!sb2*IvTuN
z{R at Exl>4O8wN*p`Mw^rnC=_Onzrv!-Dw57=$U88onfjQJJ;Kc6qd6_7ud&ugUUx!c
zIbVcWbrLT{4CfRsxb%ab`X<E`H-T;dEXF84juyW1DviI_>VbdPU3a<DiOUNDdl+o{
zAVTD8Q1A{hc%>WuRD?hH9?`hNJC&bKz~@f86@#_(zk)no7K399y%}HTDi?~RnT0 at z
zxg22xZ~y at r{55w3#kYM0zRB@#30JKnmQ!5(r4<5X2}s9I<ZHtp;b>dJY?gDiG at EH&
zLa~-rW|nR~3M-f()48VK$BG+<z7h)o!e4aMB2?W$Oy$9!>@^)fF%<%Z$g78AnC(D@
zns5jIQT!EmM)C+KvF1qn2cQ1AV=ZDv9$QfWS-d2#Et at -uit+f<Kgg=I0}t{-K!H3e
z7b;CS#Cd^!?DF!3kLG4AI2E6wpkMuAgGr<k$w at 29XRvb7o-0*5Hru}>0!I`F!SZ<X
z7jAQAGyQNR{xXXWabPW&Xqyvlt-k!y^tb#Opae+)h-{an9)BsI5b5KuFAE$>)gn=_
zDLahu6nR?!{R=(6RMahh(X?^6#$VP1U+(Kb&3FZYBb;)zrAl6vIqaq~p(wzm<36<z
zs{5j5QA=ZjzsFfpW0jj?Dg=?o1bJ|P5?o0Nz7oM@!jr929FS2tsS9~qfR2NN0Uq(V
zGHXTiGd2BNh~sjZocLl4cW|H?vNxONRYEh5eu2;tm(f3`gn%*35PEDeM_xmI%U^0}
zLQvx%-+9fX(Z3R5LSEQ^xBT6d9kAO{6?PnyamicGE+St4(GH~nZd<fjs6VzFviG2m
zI-KGQ`(=miLkK*TEcLbEGps66p}<7Ez&E*fir}{)%Ki8YD+?)5A}E#MSgWg!(#LX9
zZoji)O*oiQ3BunhNr-+tMe2YfuPr&S>2pB=v5-wcLp~+QJ{1P`_$xuvF9q;dh~iIO
z$&A0&wE at 9GS0+?Bhrbdem#aU#ApTzc at W+JNTrdxnR`W&Bfq~k=hg~isrUVHJM_A}U
zOD!Vk5ln;t_QVg1kKj+u0bhu{ycloJCbUH2=Q#2j1-4hZ3W|@e?(+pnWr_yiHNOy8
z&MKOS6CVC*j>E0KrRkr+c9Zx=KKQCxx!|keFXC2d50ZEBPxhsNC}`>r_(~A|HEU^-
zk+a;ylfdvdp<^3L$g4l`XAg$Np9rClvko(=5c^eEl-faXrZ at Y$kt$DRpIj*<**J~k
z!$*k^2pV*VKN|5jn|+o^T70ZU8{nH<`BM39y9iT-hO-I`vNsp^U3~;ZM)0MBO1prF
zSAq(GMd^nbbfrUtq)0_<gIAFs_;pHz>d$Ne46u+i)KRFtYlq#nEudV`--=%#z(=05
ztg^HN0KE7U43&EG9sbH1FL<r;XoM|8ZL;_?8+o{NWRSQh^)wH at 0S#7&Jc|jN`DK3m
z<%pv!ydZ3u$O!hBP+FOpRh4~l1fTM~>=3^*KkO<1!e(>FeNmpcFnB2(ms~=tR>X&4
zG*-l2OFiO|T=BQA`&2|}D!kSVU11jmH}irc>RSe|K_=pF)A0&S>X at hbWZyOZ$ZPtF
z2L2XJW;_LrgJu>-Te*|c?7!CHpe-0uSA<;wENul*1i>VG)ye*)(>6`I!fI21h_%aR
zcIl-IHk-I`mI3&OB_`lAtO;2~kQOqhkdd)@q!RJVdh_VC(N~(Jo?*t&zi&0<1xxg~
zrid|BqP3#s;?E2n926ye>RRzH{2j$BJNRn at f3#!?<nga=dj(V8sXf6*JK&h>h((Q?
zd?z#9Z2b<C`16Hw)G_tP{;T!=WeHzVzLJ8xK6=2CsK-kIvk{U2`N|p9S%@!{sg9#6
z1BFN{`#Xm8Y_P<s@~8=#K*Zm)Dt3=cEA+_Q4C)N#sLFcHJdA0JF{aXlzhP-oni!A2
zC@>!9GR{J3Z~Lzj#0=~D%K0CEcu7taXr5pMBK}o=64ii`S(=d<BT`<${Okrb$Y{6K
zD){aclu|=>SenKHNX87K*z~XdJO6uS#vd;Ahja;ys#TTv)4B01*Qm5;c1rO>2l(<D
ze;s?D2i+7GaTHng4HiOGRTMFnr2hh8D!Iup<$_{8Xa<Ah4><T9hgU;YDv`Y_=00jV
z#^3{5#E8>iX-grcK>TT5l)-m(p8!N$H2G@@Y(2iF?4<&suaz43SAUF at 0{9zmq at v-6
zZot9c#a~2(0Qmwz^RU<S<4;Sbb#mVFcm81s{!~r#Xc&e+yny3RGo_M1xXDL*0sh8I
z8R+QWxx!6F7z#;^43d;4G&lpEEL8x-CuKt6K??~Syi|>CCk_7M>1wtb2rS1O8Iwyi
znd|reef#!NkxicqW-uYt>W}5Dg?Su=+oJfhQ?&%sTIMf^=|A#a-8Z2{U9DRQvM$m3
zwa2f}9dZhRzW1_{V$MQ>j=9Djs|y6NsR?FgJe8(@#t(l3LMly2*GK3ysA;&SjtL4c
z2wTW(=!&*FBSt(mQuyqcN)YdaMnr^w8B6uq`I~}ps6RrfVi*sIk>*MKoaH#|uB-)I
zgM~ON%e3nJynp|GzdYLzue<I#aso%lMBIkroKvphU- at M`{_b;-N%nCOH{P^nJCwf_
zQ$8DX7$f5>ftz2v{qf6tt|;Iie0{aZ$BMsL(CS(|mOs=YBOLJ;(DZLA at HPA`0fG&J
zwpC+^%t(Dtd6rNCG-2nciZ*WG3#g6<!8DS#MaNX&n^Q?qI!tAUr2(2m-oeby=%ab8
zrQF$k(Ww5k^LkbTA9HYOK*3c+yuvWspFjKw27kx7_I*JVZe>Rb2)E^sXBf*Zs`Rl$
zjF{~dB-}GUw)&bSX7kMq*ZBKNp#8Z`-2K8J1mMF?{D<;a4WQ6Of%uWc6IcPopYixh
zVf at v9H$fw5_1qRf*s!QYuzQxOYbMe0QlMxXK(y))y=fkFpT>BqUr7-lV}Ru>+6saJ
zy_J~C9r`x|8iv_h?Z5FS5(-2EbGx2`rXh?BQ!Cv9;VWl3H5q>yr%*^ej_|q^h&lf0
zUnx-TR9BkO1ReGX?uvimzvSC`kY<Kt1fQHFi`8vyie7*5^jie at g`f`EPh*3cz(>S5
zn~X`(JWRzr{z72R;g2N!V5^XNmcc?`9<#yQgvR*RuP%m}oRXzRs~~J4!xSjtlNVO(
ztZ3H*p~|c{2&)NAA_VlW;<W`h$?z9R&VmzvoHZXwQ5_H|@uDU1f{2zJrxjI?2#v2S
zEd~4nDdVJM{KY~oWive}m?T6M7HSm>>5TaC_m$<4(R75sS~ePocKWvq;O{I%{K}3t
z<m)I1HDqA4fg)*LNk>a;R{tG-hCc{sIP)08NPP?$EDCs<M2BBm+=NLpt)!-Tji>kr
zR?;cF%CGUZMJwWFX2Zbu_kG`*+;R$n(BKb?J<+fc|L`C26A$|dSXpcL5nRVPzVOI+
zu at gbsHn~^}fsDi7a`;mbJ+P-tSN$wEf%f>+A2;O}OOV%e$^u~$YkvsyA}j>{;;-^l
z^LrzhD1eWc#u5fp8EgS6q>S6eUzWumjSeJiGguLGwP#^&9#Ie!eY-Os(W{uRTkG;4
z1vvEy7TJ4BIQ%<0OLLh!8p3Lzntb at -htp@TB+8wN0V!4Ek1*|33S5~gTQwaz1mD(a
zuvXLnRFmxjWJ#P at xx*KBDnSf at 9ek;$!#0|?kP1nY^kX)LA#Z+cxBT4~0<Bzts9-^d
zzaN6|*JObbq#?g8N5}&OAU9i`8d)Vht)l*j<LF;<*_Fyl1zDd9D#NPxv)LJTbw=^w
zg#=OI at u%lxMrk^tOk?<aL?TFkcRZ_BNN4NfW)l1vV}LLjj6bXTZGp`As}2|pi<)n%
z1y%<E0W!?_zd-1iR{d8H?84qFJ!=LE=ZnI~Dk;f*Nh%z$OEhaSl5%`x4{cjZeG>vJ
zT6&t<d}|4zH?6%%eC?i&Ui9x2)U~sa5U536B}MzME8P+R4s5Vun@;>~zM{Zvs>72w
zA(ht at B26fq7gE*LSHusUm`aDv?ZBEDcFOlxW)5;$$c!g5!?;OxQb00toP*pkZKojo
z4W at reW)+xrPj2!T0Vps*USa35zWW9UfsvZxuhf{+Zvsvu{&7fKfEkRDp$wLf_!Eg_
zv?wpQX1iA&<t!mtT3D?m#Z);dFz^LM3RqMMFk1*vvcDLkXgl{x0cTMmuzGs|?D*Rh
z)FrFe=s*5ap5B0^rQz at 7z-)fuFFI)JFj8G5OC({mRZ*!>GFvo_0gb|K>td>&`_<RK
z?xrXU873|!v4cR}*6%81tZOYQ;y57ekxe3QA*G3=IfzF50f*h$K=TwnfcVzq;8Qq9
z at CVIl1O&$tV-UmNefi5B<`Dq>OE=32H`gr33%Tj4%vzVu&Es(viiK7bB2V+0rNM_q
zM at m{w2=LbgqT{IgV<VOY_+zDkZ`*~1zs!J<Y^<e-Re#dI%9j4I1<LNmI}%cY;_up4
zLbUv{O$Z8MV@^nXq5qb!ibXrsn8#E0XxS$P$P!6Z!I4VF%O?DlyEfnS&ubdvV}~^5
zT?jk{j;}zd_$WmBl2`G;- at Aa2;fB8fj=pA=k5T}6{Bdx{LR5jgw1veTsb^YwB-hMf
z>G%su;`gmq2 at +WXkPfVpamcGeuA1K^C|?L%r33g at u_)~^gA!bcmU!ad`Nx%a)gO?t
zrETODMun)#BWk`PY_pjp{s{YsA^i&hcVxO8r#JbIHkp|Le|IDZdvGrGNJs_azMD*H
zPh=SW+~htff-g5^x+}Hd>?XVhOcjFKFz_|I0D9 at 4N>OFJO?LQ8I(P7Qr4Tk_A_0{k
zb4o7ro1tBx&9~w&3Ysy at ZfPMf*iRqU9scdb_5$J;3(G0LLO^NE;H)dQ^zT{W;~JZ7
z0r(RV{l{P3z)g{KbrwQfGfDh0XR~?mcL#sug`i4H>UIGsK-lt#y7ZMMO~?F{Ny%QC
za9|#7;BPG-eI*TfDn|1QVJ8Ghin9la(}3!L at ydd?7zDJ=Kf_=CGM?E~!AQbT6`3S1
zs*sG3vxGqa(t-RuXkE&5wTeK~KiRwb%GFvz;GhD&__|~1Qh at jw&~-Tytqn9HBtLFi
zMcrVGx<O|6`~8G#Y<9)pv`&c(g9zC8JG9V-TwtM%18os>l at 8{iA|WPqj*vG8Ib{hE
zx14#vXMp<-ftnJ;7!`?kR(G|E0V*E-<IgX8CjNd~;GNtg5>3Y=YFGSOivUNA-^Cx6
zz9loXS<3)Lvcr!AbodbnY9Skz!@?1TQCKaF|D=G7Xcs6K3}_c75~f<kV77G at C3qnK
ze$B<3ltg}kW-U_0B>swa_5c6n-y_bSN{14SKU}UH!Q5`H_{dz5RXym|<oH)!XbgNa
zzz)6~;XBRq(dkHY6f{_fl~77%0FMB%16qz;r8Wnpzi$;B15_T3_+5Qef*>-6{t>`m
zLGZ1;PgDN|4u9YJ%7kPi;wrz;t2V5aXpUiQBN+C$`W7W_3MI~vYNdd+3PJjp3k;S8
zMru}Z$Cjan$buyU*Je`|5k~@ipa8_WP{?!uaT9C$=aC25Jo=|b<MB~{0Qb=rAjbuo
zFM>ktikLVmLHeQ~C>$)8Iiha{JY6j+S!hpb;;CkX7Aay7P`V;%r4LMjwj3;w`p9?1
zM}d-+ZPq>_?~W at V)qjJ<5fEO0Pk3g74j=bBWD+))2?KwEXE6Tsk3UsZHdQCS$bBWq
zY@*KqSBVz?$pSV5&cgW10wM5`k;(|{G_Qg0pQ($8)is5h8hK5(3X$3(b488&p7Ph6
z_?t at o$5Xrj)W at GJog$p{1Og&DQCLV?E(?J<&Bhm;xg*Ev-waBV`<!w*qB{I at RtW3@
zwmkEo$81Kb9yF}}2nu0vjhiX}g at 8cJ9MmYV;!t at pk}x=8uyY{z4uJw>7%T|0pNary
zCk+Szo2 at I>LZg!~7^aC4mqktNU?1 at he<3IeR at X9#EQPEMOWr9&-obf9`S@!Lpmrgk
z#zH`oQqm(7MJ>e7c>JMoGyVpnr?0U}pEmHPPggfNMez1nrP~GvIR3OmV>(>3u3_Tn
z<CNL5V9%aC{1rqx<WV*-21)bFGI0Tc%rxGC3=3`W8WytAVXBj-!M=rv*WmL-U-&#_
zE3s!WK-Fa`VF<ePl-kN2{=Q=W%6|FBQIx4Hn~)MjaKyihKZAX%u}ugnL24%RB#zW0
z08#L2EDHF8Z(2<uvNS=)-y`CsY^HyYsJ9#k4b1qr=k_3^0zo+`gx9cx&pTg%sUq=(
zgE}5D4?SDaX2ClRd;wB_=>M?84x>E;fO4eqqk&VL!s27EROW{lB{kVRf^J<IVT`0u
zeAIT|I>s0&C|-W~YrhagH+_X9Ygs}7)}nk at QQ)1VHh|gLMjo0NxkD0=!fQ^;Nd#@t
z{rWSASWI)LED$g7S*{g37P16VdZ2uzKvRPFt2mRcGD1IqZ}|%cA2DZ!CS(X}W?-|Z
zp^d6BYBJl*AR_9I?ABDIGD6>Y^VlqW%j at z&*_R!*VEiBY(1*H7a->K|c2$B=2Azkw
zK)MQ%BqbhZGk_VY4X1EsHXE>26``gXmY466$Q?^-!l&tgOc*M>#s-owGtO*t5?I+U
z7Xeb4ji*c|!A{I&!9ss+!Czyt1f?t>dx^m8YLO`D2n|F^3XELPD8cU at mVnVJLdFsM
zugW6 at Yy>{?g>3?)8Lx(@JbXt|1jWv`agb$fBSJAHuw;*CTf9Q&aY>~3lRf6;zG3=K
zp^hBg6e){RH8Zdk1v4iDrrJtGQ;L~Z7N|S~!#e_IlGH$$Tv_f}A;4c;fVCeX?2N}#
z!VqgAaJ4RJk&U>smS99g!(WCvobZ=}@h4+hz)jfEw#&E%-_=cbgg`41WM$=uN5rWw
zG!=jJ0I at WNqM(@jmbI{R+~I*=R5bkAkDh1Q!&)6PpbCQc@|RWC6?c`vgoMNwxXf=O
z6JkveJ9!ek#JByqa+9+<;zE!ffry>3gYVd2Gr}20{Kd=2VrO+o0cVe>(S{vX at v&2|
z$5W2nQl2EFs*o{Qj6CJ>rTne$=5~J&sL1 at 5jz2S)<m#iDdBiVl>0jHX0Omew6PF2%
z5QrK_Bm(#vg_DZpEd&z5<d{$_{lp)3HroN6K=7A(N)wy8u#0~?hzE_a7V{WM59Yza
z%yt$Yx#F)8p%6$7?h{_*)gR>uRgJ&y3krJ_ZL1T5ZPcE{9*&?S1Vz>`TMXmTGdT-I
zO)R*{82mlr?B{XH^tQ-a{0){q*0Ly(TTarcKdNZ_?Y~T7iR=&peZq6zgAPobrGPSm
zHqM&KgYRbd-O>8Cbf5<z(4>Pa0c)LtScR&Hkg?EkS^Z(T6wrx3zj(*fsXyu8vx=Ch
z%6gBRKmO7 at O=6CcC{&2V0{_mR+^0PpxLnm$3fz$e_G=|hG?jNLppw{*Z3IGql11g0
zv;tE=@u6)Y6CK+G{@k}8N#V}kYN^DODfoMe4QdyAM6gO|9{fR8ZHkN3C>a?kxO|aT
z>_HX(vOoy5Mf$7w-R!IGutBFlSY7NqE)c|74PS$>{EuSApI^QLob2g8{!~PV{33pC
zl63V49FvHe5U@>v6wgkH5OruYfK$d`1vuA4K`it&ex-Kg at h3>9Ag#T?#%D$QCV$x@
z1kOS*3I`v}FTbqlXe#?SVle*9P-=L}Y~t~V+T{pp7Z3{-OrCm*VdNwP at wX@o`Q<)i
zWTpGeOaClkIX9h-NEb;4m at 3rxBdqD9|59M$;wyq=k`{k?gjo8wqIFX>dEjqmG8_H-
zDDK9CuT_6M<&FnyV!?6Z!9 at C7$Zmx^+L)-f%2!)}JH*c&MU~8`osazGqgdF2p->Ps
z_iYmvf*MREkse%?BiaxJLb6t;P0FDV`<G*?)s1&{0$kS6zYu8pg%1#UD%qto8>E}%
z=wE8!(6&-_Vv;5h<Y9o*mu=4c*ivcyqwNZmb=}lY_9~ACzAH^?_^S^l;ny?_rL&J}
zi1?Zr|MX9Iatch}N^=Z{f8i4a at Zlvwy0S?L0gZviS~G(W5tSN4V`>rd_;Zs}sw<`G
z;GhqMCh^<&6kf?<ezP%yRkmYS7#&LWdE{*1Tm-waLno3&XfodBYu7-&668hL5AS}C
z5D3pIkC0lziUdI3e3aeDvqvihSi+u45RE|rAf9Lsf42GP+ at k4-PRwPBW+!5&r)p%Q
zQ|0MuT_plZCujT<4;M7fil#+DpcWyZ5LA26&9t5P at fSf&6~d(YK$FP0qmo!i2skJO
za+AoBm-4~^1s%$WksQZ;CFl~97mm%i5jOtbs^kJsC9K9l<XJw-F~+v5?D*BC-{Jcs
zpud3l3zVQh#2%2X$Q~{*RZ(J(CL)@wWCJ4^=GQGT;)~^^z?6C&ie;PaMq>l<hh3PA
zO!Jr{&rWw-hkWqcL%A9M>OcOpWPUKImu+h7 at CRSY*L<t^$Y?WYs)0lhO{Exl;bS(v
z86d}1e(yd6CImJ(*tzD85O5ZJUi(V%!9icXaGbU&ft#?a>hzDW3a`1D6v+>N1xn>H
zfX;FD!#mCUtA{^4A at AQI96WeXMyNu3X9k7yi*5MZXN!IzU>lPdsR;)Hyi>aXWDM+O
zfe!3iW>7-dX-21h<ky6_NL+9Ouo_PMs4_;yFu6Htj29aI7UKIZ{wd!i^k1Lx4tU6O
zM3W234)`jA;zRuUf?`E_cKi!(b-rA1<$FymL`0-IIN3zRcis(y&pdY86sSdBq(iT4
zZc>ghiVyKCJK+1<H~7R4zN^$ANM}xj at mEy&E(NSe?QFoGJ(#OJLZG>6zcxn2BWdA7
zTf;{hP9uJqmHu_aLh}*x`hA;jq3ZyHzl<oj=7hbSuKI&N&Pqr7uSmgI^OTRSn5#TE
z3xOsUa7k4GT~cEGX<bBMlmd2vwg3+DR1u(ao(5m1j8GOR)0XYH=-QleJo1cWo+3}}
zLXZgMf*+0~g&a|%@b|m>F8;UNa*NZ2d}Kx&jr1oNK3X at _>|vD<6d*y70yHC1eB>8x
z#~f8`HDEO#g+|j63#y=JG152Q)mMfguVJW|YZ6=^CD8EC1tH+0r|?G at eA2Z;30cg8
zUpVmhxSAh)#m8Ev5_+y_?n?wR6MA~)JB9O?o7CPm=c;j;ry4a%dGG}b7OQ)l<2=Hd
z)XCm&S@;vYzMD!=A&?hD-akK3`7u|2D*h^xF%0&KVOsSKdFCNtyK#pNG>~Bw;-fsZ
zO$!Pe$iM+Z3Pd}phaD at ZHQ4!{BwY2o=~@V^75^B<pMXVH9iuDo<L?m#-1zuIN5IC5
znn1YXZ>sns47DV6GVIqIhMCq`v;+|sDWIBpHn23t(|qKhbO1qIRAyupWXjj^kFpGt
zgF?(m?(-3C{A~nilZq8J2|_<|L<v&o>EECKgrF=C1$n_LW>@^ZxUr4pd=zy2D?!M!
zjXi9$M|&#~1u5x4wbU8XeoFS~9N`*m%yz&$%||!229yQW?GZ4f`qh8qck#E4`qtq`
zQ#0kDgauH;-&Z8v`GGd at hu0gZ@bR4iGTnVq(9p9Bln8<-1hN2dn&&lVp(cAb(bln3
z;17lO0u?}9tWK*obVmibO!@e$HkOM#<HbTn5)@m2!;dXMYZrDEGS3o{b)}x#Yqm7z
z4%9ef&LsRTO%?9oF9n##0GW<SzjB~Tv8A5Qp$*Sz2B&|5L`f7xQ^TKz at tN}{{b+<F
zUc`(u__8nlg}_sVfO3SuoV0Bt_K`dQ at z1?*u+xz}=B~lF5olf+Oe?L3obWgcZ}2J8
zM`Z_pS11q=0$7Ab7I at H9tc4nXyMRFG+kBTJ(b^RG{p)Xc?E)o&a2SKOLTYm-01$li
zilM^*tKclwl_317!pB0u5|xv)gydML7!sJ$2b9#C0yt4f|HEI-$`?<eM6u?fUcS(?
z)$x~8o&^nj0BI at yv<kkZ6=asvj7PLd0gsyye^D?ecRcIVVIBuCdlukq)&#;8J?Tct
zWFVS~0P=p20UQJ_3qkr98W3#Fbg20#B5dG-Rpd4DIIA``0<q9^7WJ%uMfIzZEU*z2
z1&2})EKUF3XqYNt9chTfO-jID>ovr>8s_mA7iL(U*H~GdYjA<D$-Y9cD;I)K`I=%L
zf2 at GgaASiB-9g4NRmkuMU!y4bLjML#{fDb9ApIADNdX;EP at h4N^~5IJ3TFHT!YUeP
z+pl%VKv)G=69@{&Srjx8Q6j_w2Ng+Ef$f{<k&QVSYzdHob+zXTM6qCi=8ms~z`K~&
z0l~6;Fj55RhX7=yY(>)9gXQp2KGZe>9hSK23xS~MC_!GFZ5fUwy$I017XLONR~Tz+
z?Y~UWHDbo!mQ8i>*I|qjgg<wfA$&U-e2uWCe*@GX*=lM0r338SD8wI0BgtE!X_D7w
zQzaJNpTGP!ESeAyKgZkkeAM?iHA*qS$sT7>Aaz%T$Q{h}1wxFd6nvGC2$c>FD)k`S
zZLKH at mR985L|ezlLf~6u*Z{sF#sxJHfBNSpp(5iWO9WlPL0iSshQBDtO+SFcWnUvR
zJa<ShM=$ehI#Ys7%R=xmv5GxQgMFIHud$>buRK0gR7~lgdgCtyBYwu$L_w28#nC*h
zvLVWM+7m%FO$Om?e!dF?{?O6Cj*mKufJ`*GcO0DUgTzm1a-Rb6SF43UT)^i(_!2=B
z1W|tRk<=Y*h&=uba0h?o$nJo at ukcqDsoh#^_Bd<VfIl}SJK^D`uqd!%Eek{ee`QAq
z^zrwRFqrB=(sBe+SPB8`(<(d2>lm=*FJ!_;s~Std*KtI#r}G8>>JMY^7p(XbC;k#&
z+A>e$f<##8um3B at V&p6O at d!_;P8<c at D;TNZZyrquDnUka!F?ZHePjc_5C&Wn at CTp2
z`c~HpgcMM(#K_y3d^Djfm=Hj1X(fpAZNajjcQM&v7jPdUrN(j;$Z<CG_X0DBj*uxP
zPWVEs=m~*?St+3YXrjO>#?TDcqzqMynrRp5?^K>N at 2kk;AjI0D{);bGd<H)LqQG~Q
z at HY=Lz!wGT^$6Xje_KFh6KAa|R0v!(H=z(Um7k}jk943Ylt7jUR?+WcS1I7Wa%v$?
znFn5ppcD%M%|q>@iUGJ9NCw>RXsTWbf$T$!%u;(PK=zs_xTb$0kd?0D0toDkv1qIN
zsQkiZ<Ac#hGgpY>k39ZTKrTo|OgQTiJjKo<iC-+FgFEcOzp|sV;=lhQ^eMl(Ar^{o
z`u8mU;0u9{2N`KCj`NyHAg_{N#IFR&Vok?=(@IH_bJ*jfMB at cA>?AXFhW at R>Wz01P
zZ+-I{AV!+Lk<!zgQp|GFK`rtYP{m#|Z}~SfvOs`Hv<<>|kMnv2uN-M&p~*+}r&Eyk
zUrlW!b;J}9t2+kRd}Sg7oQ0qxV3ME&HL%Jf7w`w)jw~*|l0>Sj7h!`J>968vgAll*
ziKeLv!InSGBaf=q*2w^7$fo#%PX-kbh at hrGF2~<TZQ*|I^8RHK9b_Q2Vy`^PFJYuH
z*v&7*ImkzIN{8T!h{jnbY7BLZmk6R at X0f&|&5N&_q+)3w`)Npmq)9c|0Q2xy77%=D
zhh1~>@ll%)$WZUaKGF#?mbR6oNgeYL5BqHmrloc%APQ=cy#Rk7r5<BAI3+0A!!86}
z8KWJ_f8oAD3m{KB&<dp>R{x!!@yAnof?(I9f5KxAwZ~rvf6Y8flL*?y{LDiCAh2Jh
zC310rj{dEp=D^ND)9SbihmWNIcZ5J+2n2{GEurq&chpSdWrt0Z4J=_2GEx8;O)NO&
zc*$&<$DA3&pyq@<{`&OqMHqiSN*H6XM<jyKw<3=$q_)7wLa|2P60Y>G>8py&V7XJM
zU>S-3F6EE at x8jEdE)7H8>4+nJT0Q>6FE=&y$AeJBzw;-Zd$8ud#|vfrZC-w3;VJ&?
zVHgPs0r7+1p6jEv+^0J5IT(K*9ZobMfLhc at 5el2K%4Vd>;OfoGP2q480mnt at z&5+H
zk)p;1s<sOY0on*x_F1Kg2>$f16$QV}`GH89a2!lCs1M45PQ_f>nq2)+{A-d<U9v8Z
zSjA0+S_rh!e6l}O{E+VOTmCPA@(v$NXh2D%f8yWu{>4Ep{r9-o=@dbMAW_hy9tTxd
z1f&wHqyWu}Zv|gp1Khqq?V_Mx)2CiLh^wazKwIMA%sk%;jTq4bQ`=TbE;B<!MV;b6
zpl1fyc~KPtCLyn*f$t;o_)7tuew`y5=^z(8P7<aPeJgUoihS=livN;q>wnSX3}8_v
z;YQWe9)BHAY2a`9cN2fm5Yy-fLvqS;=N}O#d+>?D0Y*mf(HKQo!{1XLueskx9sJp8
zIh!5dot^Yeh#NlmSNx$)^Qj$b0~8$hg#&yFq$sB*Tbn)tXlq8+3{x3+L1{eF;jd=A
z0cLQY7qWm0j$w9T at Z|#R5<wFMeR)xv5ct7FF0kL@*5$Y;Lkfbrq`twf_>=-_kvqIL
ztP;eS#P7Or-)St2d^hyrLO%YkQb1A*x_Jn=HxXGtz#>bo#(+-)iVX5ob5tHv`RJyv
z%wTEu3!iyV3O?gC6%}WGaSBhsb)a^NHq0Gg`6y)k&1Ry~*X(hw%+qlb6Sk>u6e3}v
zb_LD-im;Cw4M=21P$7^A$WI7#BtlIVNC6Fee<l+SkC>nRWMDZ{Np01p^H2Q6LJ9I>
zXg^XgnXL+u0UNYc5la?e?&_mXR~^J4)rta!wqQ$ekQZD2{Kek at tJ?>ShZ=URK)Cki
z>noCGHl;~_i!vTn+pZ+-6~hvkkEEGRt~EDx at aMIlr)ohQcYrlH)UJ%g#1(%ZEhlH0
z?IY&y^sT{e5>kg!A*lZE2!GiZ1VSN-e<4taxZn{hrdV=P54ntd?*ckvq3>)AqZH^M
z%4`Z`bBRzCT<2pGMjq9gkNDt>m_ at 5U%;rw~L3RevY`*&H6=MWZ(`mQT$B at 5#9R5V!
z9_o=^_T3RC<TbMA7yTp8evJY6x1Hq(UvOp>uy~r;5(sOeQ#kOUb0=O`+>{-S7hI^2
zI!pMfAA*8U^O}BzX!!SM8WC}VwU%{-(i^n3>_N^v9f61+e^>9q-c9UKQhQQh8-nqo
zSi~Pg<Xvmf(Z3+Z- at 2@2Iq#}J2E<>H at t}_$6t();YVN4a9+B)l2rR)fTY!W~7Knwt
zz)jW~EEkN?DlFClUsGzB9d_<RO$o3=3M{Hc!B_5E%XZ_q)ejD$py|7#`Kl0<1-_zf
z^*{KoP-{990#!(p8nAl`3bD{97!`o>JBxy^Nda%@-o>Oj{jj{uWq+;w)vx#z1pom7
zEg8Ey&Xq*G=3RmbBVstKKSE%;3H$KZ at pvT&Pprs{Y;1-0Syrk1<N>}dMl8(cT<0s|
zZ$HJK{!>2tHAYrj7+^wIjaAwz?d5{1kN9W-hY0X~ZLkM{rtfC4kQbbCbvE;Dl^=70
zuL(iT&CWvVl}QZt(Mt`mxH$!-d{<2 at w0;Z}Amu{x5;^QrW<n7BwgY{{rkPV9z;Sx1
z{_{xCS<7oQ-~u`R&Ob_!QZFJC2#;5S2;0&mhaO|VmsZHvgcyIPAR!QITZ7^Qd&NiP
zXS~gh%`AtV;1Q<zh5OZ41J0 at p(`Q~+ at L}%<H?%RI1CPU`JHB!gcJK{$rx2)<>W|%)
z{tE%}Lf{VlI}7O;;M;=-5BeVyW`k4W{2b91;3^BGfYk6Vz?Zzhffu4M$_IZMp0G#0
zD>(S0;VF&_0q^h^P5XjidCk${U)fnFST6PsoHcJ)R#&K126f)iy}WQWzeE`R=Cqs=
zBxeQPx?S;SxyMaH<O4bKg&-yS%1!+ULmlVzPr8~wK&|O0JH)IRDMLLa7CLGX!cZeG
z3dolfG_S7-#BH}N|HJ+sl(zmt<Or(l#J?=?qr~35d+AVJ-SRI4iJxEb=OchZpaC0y
z^e_=V at lsU9S_pLF51^mFH2gaPSxfV{D|y2!gItxA0Lld)O>T?;`4)fmUyP(cO%@0N
z_)M~p`p<Yq;&1hejBElb<^iX6C8er at IV`9WvqGWysOePa-A7n4ui0&V^pyEaF>x#k
z_*Z#W>dQq4z;`0W|L(i*mIaKI_4otss`B8kBI($O{Zz<JNv&w`2=++<Otko`W81AW
zL|73dHR7NAWC8xw9}K~_%e4PuUcu238vMg6i1=Gt{ZV9;eIYhLM=p2;)A08qfP5Q)
zj#CrtQq_ZO<0AvC9&May6>}jFi^5SoN!w6Es!&8&EHr}eU`gBepYqq=94Op<0Yyf*
zqhz;|S)w+TC+x0usy{-&FV3RvCpb+A+78^&{1Qu_Fggeog4ujm{QtpU2*3f~RXU`9
zMZhD<4)--2oJMHXm{tB~ZTS}hc$2r<C<@BBxbp~J_Y=R#eG7ZP|LDjLFKghNTwl~^
z!&4kYMo0aD8g}pt0hMaVyBUAl#yq?gY5?7&e8tBdAE%^~H%Yrm{QMGVh=3wF0$_kU
za>3(b1iOE{VbAr58C>tU<Bogpz1M at Zr1DU^rV3SmbTlD2{q)m0>qH^Agakz)s05Av
z)sUJf=-5(Civ}GcfV^E#lcDi9%>Ju6|A<AhN4}0gNFU{;?6V>}Q6-hc?_2!ApJpxm
zHAT<<uA>S`J&Q^@@HI3D743khYMK`gfzYY8?BXvMC|tv>hNq4)A{RUh1ve8vMEEl`
z at sO_QTS(=>pX^=NBsk!Izzu)GASxTKU06&1Qb0#V5(0m<^b<YrC|P{P)N<P<5hNYp
zek#=JP_=0(HvRK`mH$;@;SP!7 at 5cvC2@<bL7Wf+Y=^uY at SV)>*2o!c7g_RzvPL4wr
z|0)k>Ic~#pwXb<86Kn2UU2(PnsXs!XwaLc63h&w>C)z?l*c7gTtm$Bmyhgp0jHIjq
z+(Oi at Lyb(80#0Id;@4~ioWabHbaJQq-?Q|8&pr15VkFI at t^N?aSokO-!0+a1>wh_A
z6(JS^tKeT25E%Y~GT4zPX;lkGScuSIvL`~#Q|{o8`SR=A`iED~3P-g|dGTQNA7srA
z>k$HzgJeHj1A#gGXi~sJWDmPwIi_l&pf3u_7Yp%Md at A_(>(ecI69U+YzorCHJLXU$
z=88P#1V4>>1&C{usror)#J?)!wT0ylHW;emoaKTQJz^eN;P7+befK$n8c($Tfl$DW
zr+oeNzwQakf6h#(IEb=PLg6Xo3jrHAXp+c-FJClag+(%w1Q80fCU)-NZ-ZFnf2Li)
zv-p<+Q{G9v#t{bqS>r*>@fQVOxnF|Vf-RKh36Jl}uVm2|6j9J;qy)rYs{|?9Y7YJi
zJM3+>BmM-Byjp>nCJ+NZfOuL<suBSH6$j4hFql=UtAAT^#1Tg*?6A;}rR9;tL0<8(
ziW&Ui=D(Bb%@=UA!=C;-7x|fjq{Z4oLLd>4#2?sFV9URaRVCp*Zbl;CRwz<i{{H@@
z{?LEoZ|@d36$W9nYfk=*hf%?aKlnwVBParFGmJZ$kzK)epBWx!C*{*T?42j8Ij;Cm
z&BrIfyTXotMMFp3K%VlQTlD$j3`X0cKm0i>5qxBlw;ST8Z6VO%7jy)`04qu{^^g=#
zJ at r%r)O^5^7c%jhD7e#o!-$j2OfH*5nE{2sReY!6pZ at tCfADRft{zbk*jD|g5d0Ir
zc;PQEbmGrDNvFbaQ0h at No_&?_Cku#;BdU#`Ai%E?p^hxDFDOSsV0EtmHs2{bYCir_
zfbyk4vIji!T_X>;=G>liJ!pQi(QNn3OOuv}zoNu7*pFNrhJI|J1Ts*K9SAjL#4!3-
z_NN3Pznp~Dvyi8>Dw0GnlKXtbP$(^AwzaNYE<56{6MtnKf5VKa_zMAf2%kmChWI=G
zU at o#+`q!z*6F>Oax?&5yEAl0U&}d>*3fPDZut`yVQ2<=?Q3&wYVYWi#L_~q}G6lX6
zRC(HD at z+v*HAlq&zq+AryNR<L<S92%#ea6j_)As5{V5q(c<rIwBoZn at fF&9 at wklrx
zvx^cm#~zwTTSMNnn(Aaz at S}tkO~Nn2w$bB>s!*;af4Sh_Rbfp3TrT3SB2G5xpLv?%
z!+_wkP+y*UR-ieEe21LMJHqZn-hH9bFHB-e=SmRTnh@}mol*dKtxchPREV55V@~#}
zLHf5pI;G4}hyGX9FJ(vbpL!9$xLkYfwU$e1?6fYV)qg;AgoB;bMaJYGHwH69=|J89
zj{wLX*^L9*s*sZp!7D+P9n7^g0?VK2jp=teG|V7;wj25<Z#BgJi at c;0BQ5<~!X6<&
zwm<xthsp3)Au%^nQ+AddIB)so)5rKDOxT>&q&ZW0LGzgVN?+rtJFZ3=Lyf{D1ju6^
zc8jixTO>yhjze}&HKdx;Q4 at Lfr`A!k%0umx55D5#KKRnG^P7}c0|gyMD5xv`G)5Rs
zcZvy~e$S^U!!T!n9kAAUl7;p%?^#4%3gGWSAwWL<U4=kFb8a!d*-8QRA1);0F9bRm
z(trE~$RQkmz6%`w1`E0{3EV>eKl!t^?G;soWt at hstB>HTIqePw$W0xC&8!KN5R?K%
zf#VSI9U^*Af?#wCl?C=eTdjhFE#=qRe22U}_s%=-6dDhTubS`2Nydu;W5l|dO|GFT
z+>F7W^3 at h$q79b7&Wzyefa5UfY6cum+4=vu7<^6c#2<XE5+nuufsAgsuh^QzawdUV
zxo`?%m2dGU<M>OE^e+ndL&2EpKQBBonimC6Y51FsYw;(3<WY at 3X|)Sf`Hf+WX1qXX
zhRM+QOL>k1!qiUAWYCX+?Zt|J$8xkqLCw*0G{r~RY0q`FadVmF1O}<f$#TZHiGTWc
z)wd#J at Q1WbGr1~0%y6xvZ!rEoVuG7^wc)z91;ehXOLg$~M(oYP>K>6ho|W1<yk-yb
z=3yR~q+))0OaEK`9+yWdq>)qhgYViQ6W-wuevQ1XTiKWUus6m{&9?=sy_i+tXtufP
zt@=O@>W{M at o~n?uXs-b3581cXBCq&}2>xDFy)KE7ja62HPcx!Gv1%p*s22p}HN~IH
zg3fpc43)<=!6XrhcH~O|CY2FFz(O^|c!Z;^qfx$(-Eox>QbSmuvHt%sh_G5`5;M at 7
zMHv=<8m9mF)4$9e{wU#Z1_}``j at WkjGHv+dY_P~$sM^jKfpAm7v78W;ChqKnX!*bN
z4+{>i$~F11Q>rSJ^bdZ;$6J^Z<TxY?6e5tTMWUdAuktwU%Lw}ycL<EN>JNi8zb!CB
ze22dng at RScQ&+XR(~hr1K{H-+b3)*w`Hk<$6lz&e<?*o&{(@o`aG*kuJ)AX(L#D}j
z4IQLJLdIMD3&EWKF&zG*|2#6G#Nn6v6I-e_o^9bR96kz%uY^F80>-$bS=6`bAAhQF
z_ at plT4t?V9z^3?n74;V2b<8d-1icYB2nm5iuoqx13-Ff+UYZD)NsLS+ywe%}kgEKW
z%QgPWAQWuttYU!s3Lru1r+ at reg`SR^6e60a+IelnF^3)VijQkMf&r?KEbvc8>4D3%
zEd<J}b)|q1u+YKGiXD)s4uADuppnGiLQ0TR6FI@|TEm~^oMpW1208u5A7>xo1zD#U
zZPUasUseCX*GdHII<&KasTCj0>EBgz{siAkfhG|OfxXyG+k`qM#5`h{2D_^S*WoYy
zqZ)r9))y=`u!NnMSUT+S_YwcD_-kc{Z!M$>opHt)usgUGg_sM6rtcIaFQkcMlIFcw
z!BJ5WR{bP9!=xUmh>M_enfQGx5C~WrLnRb{6;dbc;%Fn#-|`Qv at xf2wuv-OTKEgsX
zAQTrXY89Ns4}}oW7)z{fGphdhK at xV#S9!GHyK4ArHU%4me33hr=sYIeH6OVt3e_KY
zk=K+s4#Ftu#NFyX1|M)D4?E!QYYeNoZ<xnDOM8XDyBp?Wq3NXm*`NhNIDC{2MB;?W
zJF`)2c?wtjeN_nL2pa$#{i{Fn1^M9PFRz7wgB5nORol%5xF)TFkGXFfF#HW`z_RbI
z|9hSw&=~L32k=P+*nSAYU;UwZ*j;6T2ENenh#)N_4Qa9}C)^|<E18#0 at P`^ngVEzJ
zwwAM~dV&UjH8=HxZ}9N%zH9vPk)Cv76(OL1A#kn!6bRVsbQPC9d-m8~?NA`ofVhhw
zZ4j-c1;zc&|K`WReax#rDwPx%@fSGKA~Viz at e(%pfYd-XkA7<R74pWoBkSE{M#ml%
zfP*Yyo8s^Asrb{sX6NnvL+$u`9dlKb4D*O3;3Wez7$eJEHT-k1`h&m0$a4+b>PfUw
z)qLAc-%fM0W~7d*8Ng?WJqSz$RCvEjXdox`YEj{EQwa2RJP5L<B&-#YVL2w2bBF5U
zug^&Lad!B3{#2>t0@=IMmHtO>_*Yv at xKx%+2u$K5+RipmgP`LkXgbI%JIGs3V-kJR
z6*K4`e<|SbDGTCX2_k#vA|g=)%wy?kS;8ss<pTXPQZqoT(X)yW^EdMPMa2DK?j}oo
z1YAUz=PFI=+d&xSy~E#S?Ec2!1HKdhne3f>Dn9K3>EBmA5=@YF$c*oCFiA&l0rC~s
z*g&XgdsA~v3Vw$QyRas&sf*;emj2b2w7o{){{I!4L9NJGt`L+C?f|H at _u*h;VuqcF
z_#J+nXKcZ)QUL#sK*B*n!elm+TTz|Vs%)-|!N2+=1Z at OrqtM5{K*QUL7B!nb=DgO5
zQEG=h^1(L)fW+ at b+fRI6_pm|<b{lb0kG~KAULbrMf3CsHev^~}3ZQ01s_O`3z+?yD
zl<)AP>|^d|p;h at 6F0M`1^BRiOUKFY at u9_(ON(ThoNKx_Wv=2TMyvBhIR#(z7r+n?l
z>)(Qx8nkbpKC=bLBW5tCW)jx|VO<Hh4FU5q5`QBxv`~T%z83-O+7Vo9ViA9+wZ!ki
z8qu<i?1|s&o=Rv2b=Wx{YW%fiFAA_11 at PT>9sWYVQ?pr%`wWP`n}vp*L<O~-m-vM^
z_++njsGxrWlj-!v>ybSg8Z41t0<aST_mS5C1Vk*Hf6 at SF5g;eFDLyKU6krUS34<h9
zYmAa*W~iGs{@r0fAt)V4!Y+`7_*+q~C3}#q1)XAIT5b9|Lc at I{wXy(w9h7XKn0wd8
z-#eg6&IKG$@(-~9pR*A1T2UDO94Q2C1Zcy~5 at tB__pPhGrD+Ls;;;DV!>-{^{5Cb!
zwGb#lyZ8e#E!sY=VY#3G8ieKdPdtU7t4vn}*aHZYLg5bVzB0H;aBgxTz#mw%xoQ4F
zfIr|=K^ye%>W<ViiK$Y)JgQl!4it58E(Dg=kWc)u*z~>bf$t}7r!ryUyZLcYD1?Cc
z9fVw+HvKf at TJfQO8^Q2Lp3FqS9gD`F#ze<Kh$R-qKm9xT*mJl1mmJu6|Ft@$anN}3
z8#1wS1qY>40H1UVTCMxg=@{v1FjgW0cn^9?YpTX{$5SSmJ66}2G5pmZ`nMOjPpIJI
z2`_&o8lEv9@)HrECxfEkDg2=(eurM<6F-JbvbmdIxUEI2&O!l4-cLZ at zeGVeN&$r7
z^`M6Tgus1`NnM$NKQFfY^+*5lmj&W3$BCcU8aJ6VB%>Nq*V-tyk*=DNn#V1=W$0t%
zJqxvG(Kg;q<Gbm8cih}QOaJj_p#h2y_>f`?c%BY_o%)5qRSt at j`dkY5*4BUEzya{p
zA4g*MiC=szls!HQfh<sYM4=Q=g7DYqKf*+=2?6mdur>V&fwfGI=hUALJb-JW;J$F^
z<8O7*=eQP=uq4a+^bFm!ly5*|;_q=Q3gtS}a+!ecdeEE}@{~@K%nY6qGL1=9hWHq-
z_<)Hj+4GbRUG+<ZeAk~S7%2tp6qK*yNanBqjy<+r9V0C&z811v_P8S#>;<x*$}a at V
zHn4_62uyB8sI?3z5uCS0gbfCCjX#|${$9KAhkeDr at Yj4L_0oU**^pM5fpBm_?Fy7D
zl6^IC5gK<qJLq)Gqt!9e7_DcEMHBj}W<{+ at W*$~izVav#hT#t;2RY7J1YGqsFsD(z
z>IA+tX(R9yN~*oe?^jm8xH<yKCaCcr!B9(PSkX^CetE0rkUjF!L9 at DrT2vsST?jJ9
zx5FO+ko(zz;K83?v<d<Kb~k2l(CXaRc<PEzZJ_zMMK>QCz;fI)^DO8uSjtOH;O0S{
z0?{gldBioxo1~lOu`96+4H at by{PE-+@?7Sx#CP>^;Ku~{;KyG?9DV)Pr}ERkS8oBL
zd6_k}w~P}D3o)B4y|?=P8Tocz9a#{6HV8p$xw3&hV~lUjZ`0u#&iK>6Y9kiOzK(D>
z{}2H0+JD2v00i*a3Lb5DV(vO$*<s`9jt7mIYmT`3YEl1A1=Hy%_l=LXr5oAf&4vm1
zS!kp^6xH~L-L;OJ$Y at Y&EB<Bwt>ct({q@(Ay~^XY*V)*Cnb+XwJM5ZtON3U}0mtu_
zC!KT>@=}2K at i#f(r9k}M5exj4pmt<>aMS+FHG&7<%UAkGzLx%dTXl`UcohOykXL5^
zS2Tj(&4KA=_sfELB(|Vw1^})Z<9 at l&488)KomT9t?zox$nOB8050B^y>S@&hS9j3h
zwE-IJ;McHHZEn8#X3D?)_S*$QQt%XfS<i9UwL0<7W+s&dC!c&W@}i&#ar~`lW_`=)
zlL7vkBbHdOgj)C|i1F|6L-Ub$P5)Kb_*>m08uxL4C}{eF*PTHZN!La$h}Sj)Jcz1~
z&Y~ShgY1sqE*j<zPpzoqX*apg27)9`1T^OP%I3?jah&h<<Bx`#U)dl2KGG!SD!=06
z4-GzA0({N<+YneW1u}*W>;Z&C{W at eXpnvZL@h=3W8~#4hyqUet;jhCm?_bp)`>zrd
z|LXrlq58uH0<hNTKNQixFk^Jw!41iwS7><Tt7(BPE(Z9h`L-asGdJC_*7)mwUIX6d
zn1u|pUD7R=aTWzlpPQj@^%08UzeM8V<v&UD8t!*a2TnirICBajf7P_M6$>q;XKhvy
zcVb8n^^u`fzaiTTRH0eU%)>vcq<}()zbFWYLzf9vn{EBaU$gBBflj4$R<~}bVSx*@
zfNc4%LcX8>%5?!N99oZbGx#xgr;o1F=_cAHZ{6`)*@p!mX9N5Rl^Kq6cm}zuE(BqB
zQ`2{+5Ez*((YWD;8~lA=<#FbO#fqj?);e`8rDtsx1)MR7L0_Xu%}5x%9or6uzm6re
zMG8A&xbn*7zdf|S=uiufJV^gaP-P!>4gWO`%O8JDo(3!z=K$iV!*Mse4;`NPdk?Lc
zG_so|h5j}WJ~n0rzmzH88rjW)oBq4<oxgaHD8qnap^qN%+LfDJuCVJw-gRZLToxib
zObF8N%qoB4_sfGFL|F6M5`<?t<hKeWTHIFr%m3b*uO>jgl5r(n;m)L1cjt;L?*E at 4
zlL(B&4eEaRguTkI!vOa+ozl<}EHNIFphXF{B<dP}05xNLG`O20Qky7*dK(UX-}<FU
zGlKz3T-P$&mDg5b2AAW{JR$JWafLh4hBy91p8M{{JlQV+SQ`lb?%=?q^7|(iWXT2)
bOly7%;i&~5YIigrQ@*d<3_jb$PR;pWU;lcu

diff --git a/kernels/compiler_byte_scatter.cl b/kernels/compiler_byte_scatter.cl
deleted file mode 100644
index ab56ba8..0000000
--- a/kernels/compiler_byte_scatter.cl
+++ /dev/null
@@ -1,7 +0,0 @@
-__kernel void
-compiler_byte_scatter(__global char *dst)
-{
-  int id = (int) get_global_id(0);
-  dst[id] = (char) id;
-}
-
diff --git a/kernels/compiler_ceil.cl b/kernels/compiler_ceil.cl
deleted file mode 100644
index cf27483..0000000
--- a/kernels/compiler_ceil.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void compiler_ceil(global float *src, global float *dst) {
-  int i = get_global_id(0);
-  dst[i] = ceil(src[i]);
-}
diff --git a/kernels/compiler_chocolux.cl b/kernels/compiler_chocolux.cl
deleted file mode 100644
index 218f65d..0000000
--- a/kernels/compiler_chocolux.cl
+++ /dev/null
@@ -1,64 +0,0 @@
-typedef float2 vec2;
-typedef float3 vec3;
-typedef float4 vec4;
-
-#define sin native_sin
-#define cos native_cos
-#define tan native_tan
-#define normalize fast_normalize
-#define length fast_length
-#define mod fmod
-#define time 10.f
-
-inline vec3 reflect(vec3 I, vec3 N) {
-  return I - 2.0f * dot(N, I) * N;
-}
-
-inline uint pack_fp4(float4 u4) {
-  uint u;
-  u = (((uint) u4.x)) |
-      (((uint) u4.y) << 8) |
-      (((uint) u4.z) << 16);
-  return u;
-}
-
-#define OUTPUT do {\
-  const vec4 final = 255.f * max(min(gl_FragColor, (vec4)(1.f)), (vec4)(0.f)); \
-  dst[get_global_id(0) + get_global_id(1) * w] = pack_fp4(final); \
-} while (0)
-
-__kernel void compiler_chocolux(__global uint *dst, float resx, float resy, int w)
-{
-  vec2 gl_FragCoord = (vec2)(get_global_id(0), get_global_id(1));
-  vec3 s[4];
-  s[0]=(vec3)(0);
-  s[3]=(vec3)(sin(time),cos(time),0);
-  s[1]=s[3].zxy;
-  s[2]=s[3].zzx;
-
-  float t,b,c,h=0.0f;
-  vec3 m,n;
-  vec3 p=(vec3)(.2f);
-  vec3 d=normalize(.001f*(vec3)(gl_FragCoord,.0f)-p);
-
-  for(int i=0;i<4;i++)
-  {
-    t=2.0f;
-    for(int i=0;i<4;i++)
-    {
-      b=dot(d,n=s[i]-p);
-      c=b*b+.2f-dot(n,n);
-      if(b-c<t)
-      if(c>0.0f)
-      {
-        m=s[i];t=b-c;
-      }
-    }
-    p+=t*d;
-    d=reflect(d,n=normalize(p-m));
-    h+=pow(n.x*n.x,44.f)+n.x*n.x*.2f;
-  }
-  vec4 gl_FragColor=(vec4)(h,h*h,h*h*h*h,1.f);
-  OUTPUT;
-}
-
diff --git a/kernels/compiler_chocolux_ref.bmp b/kernels/compiler_chocolux_ref.bmp
deleted file mode 100644
index e51a4a7376607733bdbccdbc1b971651c6358433..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 196662
zcmb^43A}b?RX+X~=UK#g4iyE(2~h+ at K|ll*CkzB-6vPQloWKb|oXVVX$k|fMA=At<
zGt)9P%`#`rv7B-&(`>Te|9h=<@BQrOob$dypTD2&`8=HWInT5Ay|1;_wXU`9weNh7
z+ikn(w*2pQ{=a)(?9~6?Y1=jOU;fws-mk~cOWtf-9T&OU-7j*DdtT&P_rB<Lj=Jde
zj=tD09ec4GJn-T-I`QH+KIIa-pLWTcJ>*h1f7qpOb;f1(`jyMx_A!^+=kb@{@2o4_
z;YnA#(^Ic>=X0-om-DZ7x942zJ}<c839s1uF>gKk#eezgzy8Pn_y70*-u1cfKK^Z=
zy!Z3}eE%oD;}#Ep<Bd;w%?%#-@?SdcWxsUn%XWRhZ{F~PSKj17ui5jVZ`k|Hx7_h5
z at 4Wl3zW4Z7eAxS6^1-kE`Imq2Z~yr}|L4>B()WM*#=rgMDX;nK!=L at 9w|ngG?SATO
zuY2^1uXeXzb>Wxa at 9fL$edeWZd4~15#O|kFe7BP?e!~;2+r at T0?qb(J_M+E6#!6oF
zy1#tU>)g+(UgX;Mz4WagWdSd9n=>!F_hWWG at Tt2TeBPB0d&X4{f40 at T+TDNEXI}M)
zXJ6&6&)nsZr|*2=Iak>KiI=_I<NV1b_k8FjZt|dfvd_HE{VsCNdtc=0_t@#GhwpUd
zyX<tOgLm5bplw&Y)3z%du<Z(W*mi~ew_Se!{LE{|0o$&4$DOWtC-2ESz5gnQU*zg{
zzsNQ3<#XI(pXrlxb8mUZWp49mUw65EpK$s8pXknB;eaRQ=l)N;*bR=)73HEHaMA1E
zzmLEp$8mm{;|9n3sEhA*Qa<gbr(fz8kFYF0=gNnk4;42)`PKV8{%vmD<KFhkH+|w;
z-~Z`<UD$i^tsno#@BZC4&-(pO{qk at 8#Q{(HgPT3%x3721ODvi-yzD-YbMlwC>4SZH
z&hUE2WQneIpRCd~?-fY*;kDmf>pmB~_EEVV*FD;WxP)z&ys2ZStK4;`s~%xh^C#E7
zZ*G}?bzRd%`FwZ5b>$AaeYbn;<!+yay5b$5>`v`+$a(JCHI96)vvO{SocG6o_oW~F
z^uk`|j^F?H-~REl-t)!de)F#mdfK~g{irwXe(LL(+pdLwR&aykU%uPPufFN&zwMv)
zJNxa2J>yT9;Tga4x4-({e|X2Izw`AU{cOh{zJq`L?oa;n4?gqH4}asw at AbTx-pwBJ
zdS7>qd;a<^hdv!hEJYxC^M_qxj|X4;CZ}BdMkihDhR0{=e(AW2f~(uHFo8=4{EvnW
zK4j;EtlQJA+trSE&eiY!t5?6ruQ^!3RS$m_f3ovIPXj-GhQ07SF|He(=zh61d{p88
zh~RmbLk9k@*!aK04)K4e8y!bi_;-5l?<V}8HR1osWdcvk<!r?N1pa}4*0BZt+0MZK
zDX+Qx<KK3l=fD5)Z~N3+KJl#|{`-Z-|3Cf9&))FyZvfR%FZ#e8p7;)T`Fcmcn6Kb|
z+3clm`G_q3M*IW(1b!v}*w$^vznc>LAGhrid+fAJd4{VVzM~MZM~8ri?>Gcp`@TZJ
zD?0?d;=^Cx0jT~D{{)9G`>U^=`nr$8_H7^YR*P_>6JN>m|I)E9?GWHU8HLbryT|<=
z8v)k`z4oI|{lm|`?xX+o at o)U=|KS_^Pk#De|MT(>eeE%C{d>;mz^DG<Eg$haH$46o
z*SgR1uX5Nktv^2i(wDl$!!LQW(?<vZR6cW<!2OpdFr5EwAH!;{bkNhl1KMGp>tImV
zxaV_Y0(X0kPrlN@=khJ{hhJik(+dB`75?vYk*gocU+r||!?wVGod3H2-+A``OZ*=d
z0Nn8S9peAVY;eYZE at b%sb^OOVw!;4%7WjX{@89PI?|;JYf9kD&|LuSI*?(Wyd-2sD
z{`+rz?4R6%`@Z1)oZB7`{;lgC{Tt%u74P^IE6FX7_1X2fcpITM{(s^8XZ-W+=neNi
z;XlFgN_XCA7b|nvc0$1M9oH^s2srx1PVY`n{lka7;p2byrSD(ZE8W5S|L5ob%L#Dl
zxXtaK at U}f4`ug2YdKLU%|Java|Nbwn5b%l{pYm${d9Po2^Btb_2k6RiFZ-)UzvUAz
zc>kB*{rT_x^H2VB2OqwJfBN~)|JUN5{q|4$G@;Fh3pCfc-;4MkUb-m|w-A;Br9uEl
zG+2-*fCa5gV0QkzR`JGX_z;)}{%hXrc at 8hcf~(y1SwaKjy8OOpg<s|VPX6t>N9X2V
z<H((^c0_I&|L^wUKUcit#Cc}?BR|D|X8h+a-*u;}-3=uO4JiCOVV28<PW<OAemkE3
z0RDd+|L9!d9}SzxPw}6||BW{CpDV!sUC!qcG1c2Y;rBrof%&~pe*0hl<3i*AAHM(7
z*ZlQAKKjj{xcBq^eBZNvpO?GN{eHtLaS<XZ=YygT|F9+g1%mefEBxnL;{WkO<Zvwn
z9Ql9D0(i3{o_(!*KOZJ<dB*P?@$5f+;yXV5>F at m84xn{m|H<lc0v2KavnvHS`PI8V
z at a2X7m-y*>69P_q9T$yo9(?W}@j0ix?qg4T*XLgUH{bZXZ~gefeqF!+^WXi+ at BHmI
z#gP+U`QgK!nb0Ez5Pt#nN(Z0kE;j|jQc&N7fE%Bjd(pH(A~2i4b&qc5 at BLV-zvbt7
zd(Quw_kNy$;$Q+-Kk~VjQD{Ic8CUMF{387J<l?tSBd7oj#sM=(!~f0)uH%12{_Fl8
zIQahp|6#e;J0^bn#%uUzafSaUgVq%{;(s&wpYVUf<6W{d9Q>a(?S1Bq|C^lhntkE_
zh3`M>?f*yofA*h$f=)d0cmM95zy3Z{>Lw3*?RAcNk=0|Nm)ZL<m%2IppPKv#=S1wU
zy~+O%{NE>69rDlr9}_Fy^#PS4bqF|Qs}OKZQaM*wsm*!_kS=u=aJGd?7Em|z>UaM&
z=f*Q*K~kQl|MBOY{PuwNgP;D_KmN<l{^P%YzP&eW`2E{I{T(s%zAyZMBnZeYtQ45@
zmv=Z2A^$1cl7p;;fH!~Q`G5Z9Kl<Evzxl8KvEc(R$bWv}dp~{iC%$#=AARoRSN}Dm
zW?2H9FNND(4n5zs50-w5M<ffLLcqmuBoQ7gXf}an{#mzu9#`c5S&ZnK_xg3nzxI7!
z=<q at aU=&xr%QF&Oq`<d*Y=X;8PiIzmxEr^9{7)(HBKegXvyKJ+4{QHF;s1fbzl?SA
z|H1zq_<#6+3KI|rR{Up6@{{EEfk8;)fA>>IG}-$xxKsOox<ujs1C9S5UwHrjiEsV*
zr62sN6zuN5_FfW%fMTsIk*`R6lpo#XL5aDQA6=AxK=qgW$Lsk28UIHI|MGYECl at 3H
z960F%9Um(M2$4yXXCdfhR+g)~`NMdmq;h)`f*w~ZMhJQeLMtUiXz^I?k&!ahqh9y{
z$ob2!{%|wWApZkj`2kq|#aDhP!QcFb4Zr!X|M at xp|Ae=F%4gp3$?v??8NX{`3;!=6
z$T(sG$GuDf!ar}w0-pTN&%F90|M($k at CCND`P)DD-Jeh`&imuf%O+4S at t1w=dfadF
z)zq7$0Q)|{T^JPTrVpM%z>)>E9CUvx2G5aM_IZ4*RmjgZ?;Y?XR1Po10>6|OBS`MA
zH(&Zzk7QYZ+W3!u<It{l_xS%SFa7 at o!#|<p8b>bhfAUalO8;5M|5F%3;~!v}`~(lJ
z{H(;E9pL{N_)qYE*6+J(XTAN?|2O{g(SQ1v7k=O?5BcrC;eYs5-j%E*MDh=4TkB)a
zGlBzsU~Bv*`OQ@?#Gk_de&LPD0<fS%l2Q#Jh!%REyg8O~Tmof>fIV6Wk_bOCjPbTY
z04?-v3q_1-E%d5KJO?&-$URPb9mALSKkoNF`P+Z<4FV1w5{>8f|Mr{z`um^y&TszJ
z*Ldca{N-0I3z{)QZp#;J1dZt==zs<O!T!3x{2K_NpVvR;C0LO4x#@#{YbgXh{EdH0
zJL1Mab>aD#)24s2;>N%HOX|VyFg+A>W+_x4fw)5ecN8r&EU4wsAqOEdO at 1sI-)N!u
z3bzvSoqS!zixL7*pu?XPa+Tmx5-9xN1peLP`zOES&8~j;g#_CC=fdFM&82daxNkh+
zpR#?s$(s%TzXkpa{7eAzY4Nk9(f0p0ZVyRKeS|A5{}2B!+=%}RpZ|XFt3Ukp_kD@<
zao1<Q=QfXiGnUIs2%t&6_WBk0FXvE;)A--9_&FuN7u)rL+b(zeQp^sRLco+FUH!=D
zrR-(WLL>0 at 1>W>@a$iCKEtHg3qA}7aVwR at YwDwosN3skP*ynM-cf at o4^g*xrYZMyP
z<&v-c=s*3&Uwnl}WfzZn)8B!#*Akq+{>OjW68Zhhzxl?$`twKp&fgMtq_<KG{0G{v
zcg&09JdcVCjS1YpSkNhI0k5BH0S|onhkVQP-~Z)ze&(MqlrZ~~|NNhi{Nuk+kes{{
z0RIpFH-Fe0$gMmZ3F1n3ewu5KmnKx+@)7YxBLpN7UL*oBfyO^b7yh4t=O8~2;<R0b
z!wdh30!aaq0^ji|-Wh$hN&w~J;9m&<{+A_yUxa_ojsCw<ImGwE|E>>Ur;>{(_DlRD
z|KUHOK*Rr!<hPyw0{@l#GV}1C75>jy$Ny_5{~!MUf6#y4_oeSY`%k}k@~b~`==tyF
z*644R2;Ua1vN&^ajB~hO{D1Jj9r1G^{xJV-m)&RE<@c=+kVJUfWp1<WGJ9{k?CrK)
zu78gmwQ10Z4ykKA1;zD^d|g7o=5iPoRI)Z^%d;^7Y-F!TzxkkZB1lRhAM*OY;f=*I
zmqSrG=EZ+`?8`p*px6F2TOib+LtAR~U-{v`ix=m=`wN`#-GK0{x2FUq|2^(EF(2TE
z#vDflOLAdLgn%tr(EG4=@s|a?`wQRu+K>Ky2Zpx%C(84C|Ka=M6#eJKSAO_z&-qhd
z4gWqLP@$Ai$<ZYRxXq(cpk%>>&^=B|2#^TJ1WsrOiMBKOA#5i3MgH&oJn0g;$ZQ>L
z%c5se0LjIj;Qt9MYr_8t3Gu1#%q4(X0;T_~`~Q{rgWTSE;D3(q at PFN-ol=t4;Q!$R
z|6SIE{5#cg$EQsA at 8owY@*~Z;0Qi at +(SPWl7gqoO&;R-PAAkP45=jM3ng+ke=?Rg@
z2Id+3OO7HABsr?Z`Gw*qE{FVMHSmAi3IY3VyY#KLUHaDBF0)rmz%SXw<@Oz+VQ8e-
zQ3{Ajpss#*cVsGutrFoC3p(`ts~r9;JeCQ#tpvlHmn=^|r`|)+-JbK_!=Lq at yFBAh
zSTs at P$mjmq{a^Y)l4%D5_Wp(M{p5Q;{jY!h*?)ig-~JN=;kPkBKK$61e()~mzgtXc
z{gZu_&wPP!gOK>yCgArsI^mU~kL4o19rE-)roWx`x{p5j4?Y9TfAWRzedPzg*aRqb
zGOxFN>O0T-^Dq1A2mIz=-St`T!RUN- at PE_`p_CU2OHl=o0^ItMDFp2KkPZQth!z?a
z6lo&4 at B;_=+2`@W|6QM1>+}2=?ERCuIINZbbQQcuQs7Q5<`USH;)TjCCD08e;Ld+3
zqO0V0OZ at +G;s2!V;Qy&o8zBJxXY#*M`RwHP0^^@{q5gGY>%Zc~+duUk@%Px5{ndfz
z{2?G&C`(5lNN|)KtrdSai9c)N|0MoY^6RF=+h6LIIfDN-fjI=AMzRAM at +1(&do=#<
zk+SkN?>!~L>n!NNb8y%2+hGFF=idOPi&OZU`jpg|hM%90f7`xiy<NuwRMU%2deukH
ze9PZI^F3d9`G>y#roa0Zpa0fRejEKj|EwM#P61O~@F5t!R2N{-9#+O at _Q498QCOuL
zow!N_eE$7j^nnNe*2m<+FZ<xvbW?ohpa1RO|7*K_5mM#Pe)lJT`o- at fW>0_j=fx}q
zW!AdS<KCvk5dPEnZ<ey}St9<W_j*)OpeY1I3mqm<iNNve_<t5BCT59WtW`qcaL(4s
zFWq0sb&?Au0QI#|0v-}a;eVDul>pXTAg0cT9peAqnC-y-9$WhVt?-}BcR_w;@hATO
zBo|u>NxCV*e-5DkH2;5X^dI%Fw|$C|aA6BE)%@@+ at z?sx`z$_p!Sh(0(fpt|qU^rC
z;@3v;lcY1mAErIPzcPVaZ at csq0z!f2?08ut(<vl7SP4oSSx^#zr=_{&E@^IYD at h#k
z)Aq at -A<*SQu?Po>Ldk(=h5*=#R?4iHw!FY4pYyKIp7XBHsU!GLe90Of`t)~O%!r>4
zdM&^p3~=c45khdvp_X*-=LJ{4{2SnuT)3JdlnjKP`@QHdn1By_(FeYQi+<$mKO#f@
z_y24ZV9_o00?g-)AOGg_{`^Y<xBP{9-uY?os?zgs`D#`c|DQtDQ*=YYwsj~9ln@{&
zPb_Fo1Ws7u-^w^uCog{&(Ajd at Ih6B`d5K at T5CNj<YmNVsxYGg=i8~aR|7i)RN&uj~
z&VN$*8u$<Scl(O}mj_Fui$<^D|G3B+8}NU?lem4M$Klc{>2C370{>F^Y4H>OF}(@@
zm!9!|*p&ZP{Z|8nHl7Qj^(`r=e2oJXf8BlkC&0r+V4lv+dajDUEAfAW_}Rs;4dRdF
zJ+jpr{znvO7Svflrv`J4xYW^Z6G9+ID^XRGuXoHs3#z`jN(8#UOHqJx1{h}!lboj%
zez%ieO~?gfEQO+Yi%0y<ZO(j)?DEd%{t<$NF3Jw%3nBvIcg#!vlIQ1stpH>3e!%uo
z#TGdKfS;lD;dOo8nhEUns5k9 at _S^6BjCT{_fLXesHAp5d;~=l8Fn;^r{sT32eCOZ(
zliOEokg7{bL|)F{$>41KkII4)8=x|=;Q!Dn)GAc%^SGn{p+K@=AwVr4TIeDXI5Ap*
z<Tw21@$TR?@A>P3mk at S?<6j|{u^?7P^5U0FgSbRe?)q{{oZSM^UM>>oG6lZ#miXUk
zRDPTM9FqKZ#{V at 7|G%^u|D?RA+0;A-3WVKlR6d9DQ_BAk|7ZLsH{=9{|DW)Wg0>9E
zpGc{e at cxCbKl$w+>pvOAuO}$}zSjC!94F>ms`%T*uU{a34!F+ZPtN>=3IDg)cBwv^
z2r&U!fGoJwAq4^sgw(8iaBdS#bzmUB)+f$^Jz}<(- at oM0Y7ONcM~kB_mwTqrBi$46
z-E`=MqS(R-uaqFTE}`vKXZ#Ka%L*_(XqO|<jsyj`l|lPG8xb|){EvTyIOx+5o(8}E
zNr22z?PUFR9R)&!PA^6DthdVrRFF at 2#fL2^Y!ijJ7ewnlU-;hpzx)Hm2$cfW#uxv^
zSDy3Ue?XSJ?Zj7oL at 7C;=d9mv-AS#@wKV?uNkVi|U at 1T-kStgTc<2ZL3lmu4U)via
z9bxgrS8)O^N)%|L_D>})oog|D?7;u3#S8xD6u7%U4;=nK{hw3k=cs&5_|F{-gRMr#
z3I8|Z|4;MzQ~sNK2lm*7qf&r@|Lv3iE`F8&r;Y5{_<wBp&jSCVCm&7**Ua+^F~59+
z7#;Ed^?yV6sN&bFIZ~gzUi?~!|C_}hziD?}mESq}m6wI{hy2X=_ksyj2uNy-0#$*m
z at jsSs>JhD)NC at HV5D>y$AJ9Ftq%#XBNuNyMS at 7AOIf{1)HNwGc2%<k9$hD$IFm{_q
zzeSP at Z=5#R<2<*0>|1GHz%P#wJ{l*SFz3(hSM%_5U?#^A&xWq<D`Oq;vB$o&(_vf-
z(b649$rMvgeeFjz2(bcCC&}_Nul(@WL%RO(vrl@*XCC|3zn78&zr^A2XTL|1qWIEz
zH`0Q15%Bqcev$;rrE^C`ff52r2%1=sM4)ovHT)Al at 15kA6A%Yo*Ue5(Q1hRb#c4-e
z(qgT|Gg^R7!!ayxl>n;6H!1Ml;?mOvy&e1y<rDcKU##OlEzrkF&sX?Y&8$++jQ>!e
zJ5Km-=0B4k{9!46Hvb9!A6ou at f&c3Nr2fh5xEi5$3GW at h{@?%oUtMG(HQn#7&- at di
zpDVLCD(~?ORs331MketSIh>CW^-}Uj=i5a7m9%cOCH`+QCBj94qyQvP%Sil5X{@`0
zx-OOq^0Wv<usWy#H+W!|5kn(4n!s~lm1joLSplL8oTGHBjsJl!=Kx~`r at jstKmyN)
z*jqjFcfIhRm^>#5`~k^e{?B7mpbm=CZDA2 at uH#t at fq(XO;X+5f5U*}glz<?_=%5f&
z+!TV6wN+N&on#!Skp$uN-~JnoL#@!Foyv|(Mi6%<9JSB`x9ko?S+{G91iJ4Nk^+PR
zRS1X>^iX7gIx!~#@Q)^i|LpU4=PZJNx>Q0#g*)pS8A2sBFX`Zt5}4wG7MHmNP74H;
zyQ at 5_6hIfW5<uynEB{}e4 at 3EE@<YCB|37a5_(k|ff$sQ}IliatHRC_v4}~7$XUe0c
zjR*gaM25wY_Wv$Q)5yJk{e8dk=1<rdLRHu?=9m9U0DR|X|CuT%UJKmT-{Rwq5&!o)
zOSHAZbY^Fg-4>(szdJvV944^B|GM~7HM_X_RS3BGwo5rW1l(!}p;XW-C;`C#p}~Kb
z&QlaC at OR-)?$7+Ab*JJ}iuVa)gUr$d?(z)y1XSW)0zs^RV!6o*k_^6rC+zHiEeHzO
zk!qJ;!Z6Rz{W2UNVM^uv8~o3-;F9if9Omnu87m0&N|}|RF&tcraS0`zaZ8GieD3??
z#TY(?UzP#z`pl&XLiRm=?a#ac854;xf6kwIIsv at PC9t>||4bgd`RWk at ZYcx|6DT<}
z6 at dx=$pX4Q;zC>zlhoGUopt_GOdQEY_t&Kbu3JFe=;H<4(dE at CK)T?17eKXuuHk>q
ze7A at HV>kQ%>gIZ?Qf3YmXaoM|SU;S9bv}3V&rKf0(#!uZ at t^)rq5PiDeIF)?SW>f>
z2;cE*$pRVhNq_JeZpvMtmZ<o+;}QQ=Ms7{~Z1KN$zAVMhCH^-hzh$|uJ!;QJ{LdzU
z1?`;_;0kw0by)Tk{8#I&rU;&Y&iWa?Yfr`Jl&R<wE7*<+JTv^{ZrSlM=+M#%QVC5n
zCyWUPj2#}BgP$BD^!g`0v%tS(KG`-^;6EQBfyr?kdOll-6;zvX`1VoBH+`TuvggCz
z0Me{LR(tSyf20hdwsohcyi)?s)j0g}z;oWE*35l*XHl=$IumEenw-B+w)ZFg|9~gC
zSYAC8s6s%5pk_fM5lAi^{8tDN1^hXXOJM|bWDmdcMZ}G!cK9I!@!=v%vOM^wa&vV2
zEumu+dZYk00vw)OlM=v|_%G&@%=a!;zUhrlv;W_O|NYNy;!1kTG2y>t&sIKr!`DoH
zwuArMmH&_anf+fBZ=OVur97+S?-=vTf7Lume?~-kq}usK{Cp|!II(nw*!eX&!>jW@
zou9M#vlaf=lV9#SPJW9JP$s}GItva3x>KA?<6l#d-f68P-4P_eQ|_d7<T!1E;t at V+
zo8(#)IDfch<V2#{isikYhtwq&R3{jA(WD4GTyGyx2l at U9nc?|?d15}m|EvN2ApbnH
zfq%$x at VNpdTPQ1#fTY>j-}(^t1!=+xmoBOz_6&i0+3Q!{#18|!|MXMB1)MmTw|R5G
zdF;zrpKo^;)Np-%;s435G${ZI)FEJELCZwIzYY_)UEv=qJNBjE!TBHm@(&3#om?<;
zXUIUD`HcTmd9=VOfprQnQJ`!DfbEn3X8cQmyJ}ON?E!z||FE>og~V=&|3^a<Qr$Oe
zh5tK+{}lc=k)Kids^*7keujbJ|2N?OvA-wbl1xdmbRjMgzT?+gVwCJ{`aqwAVB`}p
zc(X0V&&a~Tf0O^hf5iXI$!|z|`gwMP|GgI`fcZ29>YtSeCkx)!+9t`8|MLIS*3sy_
z;+=LNESHxXbhmWxQThoT+GGOfsq90J0`VLOW-F+?Kmn@^p|S&D8^=*ED&)U_rQlBf
zWJUWAd!}+*eEvXw`L2%O2R)67$QIVDAWGCwN0WD-@)`_$wg_1USI-t4UhMgh*ZWuO
zO9t&d*5BWT{OHoZ%QM*8!2kYdCk5E&aU%qz7VyYuK}iH6hXQcnp9$n}{+v8(VpcLc
zg=sF%H#!-o#Mn_g3pL at tTcGW)g#QPI0&!*C2&W2=6qp3MhW~`@$o`e~4(Go^{ND!t
zA1~b=&Z^c81(FMg>uxT41^g at WFE)h(Y{I{_LO8h;>M;$6+V+7j|KI|4ynCAx%&+~~
zKgh^P;(U?2VA1%`h at VsEe|$o9K9A0yWWK=P_ at B1@Zjt=juy9gD&X at oebn8h7y7{(C
z?l}^H4gpjk6v$%QJ$j8J3;&fjX@~A!xLZ6tvEI*_ at s{)*I+UbfX##pgp9VAX_rXl?
z^U`X#yI8>#4q^z^&%j-e1MKgu$UCI|b?`qUw5Pz|QM<KkUZRdj*-%<mkixWhF~<VN
z1#CX8)tHoGQ=WJgw+xC7w~yP$zWfvLi%^`u$c6m-C?UotXRFBmPm}_L0wn~@EQkrr
ziNNUt|5~7L`xsa1s~Hq?)BB+ at M#e1?Np^gr- at ANElp7uX6a1&4Vr;Ioxwx`mjSw2)
zWVJiOKjs7ZeQe+VZ@|CXbZ2g41OB&1eu$sj$G^=WXTF7o0LH-lo-ck+ZGFdXzyDPs
zMioZ#OM)X-4DshamW5mB&gbs at ug=en$?t^!EybT{!$Ro&$^=>qh5y+ErVw!X{jyW?
z%6GBa>IlrujmTUGT|l?ADgKc}5AJS7db|45Jz$dJ8+I;`{qoV)_!i70w4?%oq`0j>
zQqViWCqv)^*N!f7WmLj*xZemq@%#mTwCB#}4$4}ME4~YOF!MUHo2fioe|rqj-}(@C
z=PR6yPxBh;ViA)t3x^H_tUA*)XQt7 at +t_T#|DosSON%6P)J1`wfJIP0!h%L3Fv+2N
zJ~aJrTA=G_{G&QT3}H~CsVooIQrZ*cS)9{gr%u~nP59SVJ#8zf5Kx8SBg1O0bTEz@
z<v;oF+_l&>-;#a2C&%H%e=_J`#PM1GEc~<L6u%CNujuu3zlQVQp!_uXN#{cxX~+Qo
zpE(KUggla^TYR^M at 4C@RNpQ4I(b;sN|KVr<`I{GDy9X1{60hT3v0jIy$~#q at YvKS=
zTuYs{z*XnxX7OhO{^ywwX?rWpDmI%AhuH*1E?g`~2<Rwq>05>%B?M4GQJ^DIO1S?0
z8~@0yyXi`0f9|+bO3+sTUA9412*8b#4rgy^o51kKBM_iNWd+5E)UbY)Lsm6TP?!&}
zAIOi+ at BI__F`td#5Ath#hk%aL_K|PTWRErkC-5|X$Oids#^QFnUu_XUK9Z56bXJFV
zL4J7Gs5L}xl5wz_75=5b9RiXC6bqUX0cl!TP_32aN_5!!Oh$*~%ke2uTJqd(Tb$&H
zRM1;I;*H^B$G(i2v)O at vZKeFl*jA98WeEYCp1qJsfe+aN|Glj>p1;A*`R@?_w|_jp
zIvmty{14 at 4mH8Hm7WkJ5!oN8=w_eBpiLay{$Zk%0^+&XEYCE|g&fj~Ge=DOvLyJ4$
z$$vnv;EUkFnwR)9cYbau{>=EF#Ggg-+vK0kmdDu21Udx71e61AosLi;0HwUjVMzhB
z&Ke!C`>Ad#%%HE-63AiolL<unOGZ3GK=#9iUhZ4tHM+w at g>eo9O^0Fy6w8DIpGGMS
zHR_UX9De)!XG<KsZK3u^c+W-h<A=-hH~53b{mu?2$?=5gIExuFhk2JDY6O$klWF*b
zSVYg{8Aart%ur#dqEA9ktZ!r-1OL at 0;4>2fd{<adCj#XYG(}WVxWIpAhla*KT7}mB
z-8Ul%a*PBh1#VU#)}vm`%_&*c`2QX;G*QYDLTenvHSf(SE%2{ptM~Nvh9=IxVGsFr
zq<wcg{y+Fn?@I2=gnuQliTrPe{FL|^{~td5U at mci|MNKwd6VW7)qEPhQlrg87X<&>
zvUH*7dwl5YKTe>Q{HF6~jQuI`=T=*aKQsAX;Xj=Z*G<K0i1w*`jhHnhO-mD)5`j4c
zq$0dmI--RD`IH5`_I=YjW$VzM4~2)m9HEUfPZWssk)0r+tepr?`@wMo at Bosmb9154
z^2!Kgud#yj!7tfy%2-v;g7!YTwuSJt$baZ6;a$?60)P2 at f+Q&3K4=UlaZK7{eslZB
z*O{D^jSRJsClRW$zlsZK+ek=?RJ*jnB3)&D&UTJFlig)t)WQTFD at O|p+AHKxSPb%u
z7x|?Wp8uz&5`TID|NdJ)wy#sMTbFxg96j=Py#WrL_Kg3e0ApLhiQVy at UQkuwT@Ic6
z|9+!npRoqLr at N7VL_7a#U*C-X%ztPn;98;>a4Ey9Y{vhT`Of4=R2ult_E_s#{3rW=
zrEJo9*K+WAf2 at HVnW1N15d3SC5GllqOdfmIdsP2*PKFa6ZtTO<`8JPzn74hclHbPv
zn)nk#j&9%hKUv|JORsf1Ad5DLP${Bmil{7Lu%OaHFSl=H0Tlx5o-;jZ_tQjYc}-uD
zD at _P!{IBLARMti-$OaG_0PTKa0uvXCG at 5El98R>#k}KN~x{?L$eT>4^`Bae-`G?NA
zL-0SoV2^bV;$7V1F<_Z9x$R@)vg~NS#bg4RYu9@@o1V=X%4CeJav0!r4r at tANLR(3
zv)b;gMgzXq<ct~oq9orgo3>)m-m7Q85teJjiej9MSQ$bZ4nmA~;J>!jR7j1mFmw;1
zw-lJdnHC8Af5LynpW4kQIxLSZ{D1BLy3Lu5f48GOQt&SYJ`n!bcRQ|>pPBpwOXdI9
z at qg&~n4}_(wk{TZ|CfAF+o2&&7X<%y$m&j1k!LkEcIHj#e6a0zx$S-TQ!N6oJ__Or
zf=m3*;^#{I>9)^0?Mm3A>dd<*c4PuG3)(+_QdvN<;N4E*<k1PW8-2 at 852&{7bmi%|
z%C?;xSKYSL)pA_q>Q*v)z|$tzTquDcguELLV+9p?CqqE61NHfcyk9y`>zt|4%xzjW
zs~XuidH!<yarnf>Q0`=-Ic(cs9PwHtT-(`twB6okhNN|PTIA^?FwK=^L8_xqY7GUF
zoJP8ZBLpo>pybf0B2YV~okJ+%tsey#@Gs9L3^pF at jP8~UeFA!rumu?()@Q8<3*kSd
zs)1RKG!#`kkQ6`_jKaAY|9*+{C=dt`i=+6DL6<cGG5K%d-?bxw2ZRK+FX}SN8vaxB
zb(HMc&VLYz5`Rh$T=V~p{|CNYbFZyW5aQCb)c!*J6NujTr5`93{K}g?q4`Q<yqpME
zv}gbTZ<Z0kSnK=|2iNewocXhs{LbW`CrOBu)oSnQ29h-sAP3F4a96}uEJ!0LTD5Jb
zD^15P+ji=s!9OFvz<-ge1OK**Tw~isu35*mwq3+=?QIvmP9LE|m6nElc3v=1&=H6`
z90zPemslddq at D@<*!~Ru=r9;aNil^wz$=}KRP{*r5riy4s}_7LWHOdAftqeQ%62n7
zD~6Wnv#K&TNa80qnn0x<b1qz3P#a*MgIh^u;?v0fGalH2e(zU&=<9#}r5`-+eP7};
z at dqhP@ZUR&Q)H||=+8um<Fg$=3QXbL8vjRNN9o#CCMXlg>)PDChX0z_gAnpXjsJ+r
zttTIN&U(+!M1Bms0{(7&Y4MXDXq3v#f9~)kjtk9;#`W+wqIMcfbdo>kPro={@Ah7N
z`3KqVicxFCLjG|=vY4LRk^HW<{m$DSyYjo4{CDRY@?QfFrSR4E=Ds&!i{B6>V+GR~
zrOhU=ltXDjE6mT}_hL)%^Z9Z66Y at 8}{<_;Pdc8WXzwM&e-*&NInvPv3(LTOCxQd_e
zqkfat+_5_e73^%ciFdNyHSm|)UmzdIBgo(45ut(`2K-_{8-`lUmFtnGhnuZ}(P*?7
zI9ZxNpAt8f)O%C}(ifE0AO=V-zSS9xe;rMBH#7|RfBkrd#P-A_eUcCO%@3)7`y40M
z`4oWVNHwi;s~eq21>*N2 at 2}zCmW_k+%dj1QzekQ(LD|9z|JDC5X&v}KYv4cX^m(J6
zvcmuD{HLCWcK%KNQ~VN1;Xh<j*yYo#l{8<+j=99r9KBVjGF9ilfBwJQL%!eJ at cXfU
z`q$Te?4O?U&d;3q%8w9ENd&5d!lhgcBrK@~Nkd3SK-liihbBL+ZZ3Wa3O(~=8hAC6
z|8(o^erm)4t|L}Zfgn*p8L at ML+g53~q5u;Z2w!4;e!T(weEwCpK>kJB;WzAO!0)>4
zVmGMchTAT7!)+IL+-N?)yKNx}<~VvTK{1UMIS1z{u&uy9ah`@;*CvAe6zTY=mI5ji
z*3^zJ<c+yTXW}i%j%T%Ym88!m&{1Fx1WknI0z_M7<-)gL7KMSoa^YJ(V&MPeS95U<
z1{-5Be*<A=Y{>qU;b3y$AM8h|{b3yrvhVwsj#c!}eVp+h{ipg>dfF}I!$V9UQ6NA4
zX9j&&|8p2D{GTBw;ypxCuBH;P>LjV^#^`Tv^3yfnCHdI_{ttP&G6x}-_a<#=fjH&W
zf35zz<NB8kVw4}`M_ELVx-Km8sm(!DXo|#0e$x;*%{&~*??nFB at n7Ok4SZWBzawCs
zTA9(|Wd#)oIE~RsHJiX*MdlmfGvJpmHiLhY+us8D4f{s>Zrd*IxN(k4++ at om9(8rp
zXzn5JpN+1U$Vuucoo7k-C-BGZj|z2=lm1CPEmI5MM1eN!=${gSVnKz9@`?!o;s24U
zDiN6S at uv^MAXIfl%n3&h5|Tz=&;<UJ1A_l!UTk0~O5A`qn at FK&DUaKyuN=VeSNK<O
zWWRMSF#&VWc6|T|D0ff^Ecvf~-Tfm|aA>_>qn+Vw0&Nbx|FQOe2_?N_(Wye$R`{Ql
z&yb%ujWC~*5JMzN{2BgVCbjVYhdf<PU-gi5sh^6Bqs_ at I)*WmC69mo7R1HUdD4$wz
z5vP!UGlx?UPeX`ojtAqtSIO at n|IECOzU1!w>EySjea>w^AwN!d_tVlZlu1g4sVb2O
z1h~+`1d_crp9k_K=I7U2f`3VP7Ct`=X9MgT at Vjrjgkz6wm&h>oejdT5pY>0dxM|cC
z^(>gran=I)CAlxa-)Sb~4DjpCAV~p#hI(zn|JHN8<}6 at Uvli0}`PF5;5~ik%c-4cE
z&iTrP*ZYFn5^p}^|26jYH~#I!l=Iq*Is1Pj?`%2%NQToV at 4lzto^VD`&8A5ARESTW
zs|2R)t?|F})UO+=Q`7$jHz*?1{@?!J8UM9o(ULl6;wR=4rZ-jh;wYB8UDogq{F2{r
ziAhOV;{QC1-OdXYZ5+l30um5nZ={}$E%RkAU+8%-EzmXr4N>Z45+Ylliu}J!C~;y=
z5{+~pw at Q8&_;2xNIq)sy-y<#Nt(rMud8oQT5-7=$H4GgJ7b?XDjcNQh$Y;ziU(ERT
z&N<cXJoj4L;`V2 at vqb(3`#mPWcgIm>*^yp*B!#-e^g6$hjE{VL2>aO1 at cB!fXOZm=
z at Q3hNv207f+36GhTMEu<#1(ABzlvBDtmhP9DpHi^uL{K|QbZB$N;JDjb}$vAL)gO5
z79rp^9+nXfrb(drkA^O74-Ejj&+NGQ#`=&_DKG^9{)2o6ovOwzC6%bAp!h)S*IuwI
z-(|vo^{cy&*gn{EgE`QHW<fQ(BlCZH|NF_-#Ajmc!M{0{=@rx;Qusgk+y(jBD)XJm
zPw at ZXQqpGpKT$wb#FyslHdoi9=&IxzCj7B){OgZ?w#8EbjN at P$@A~X_U-*G9BR at o7
zdrr0HBL6-lZO at r`QZs*URs&JT11~E1T^V at sf7d%Yf7;#kUag`0&jwpM%(cX_Dx)M2
zRIW;{oWalk1Njp3^XnahpSDxrA8x;?&V>Bo=c~R9+ZyfChTU854PdDmENRSJ9`*Y)
zX{`3_l)O19oGo%roF~mlgYXylL!M7hHdLEHNB+x|Y20=1RuA}CpX<27f1{$>_8R%A
zQ;(xcb;AmRoJl!J2uNRq)@ZxKvO6Z!rHpal|3NGK+jObc<8cE^e`w;LPn+=naIs8W
zi=10^#<)Q#a9Y2T0!;Yt{Yr<0>IVk*$-x8~A<Yd2{vVJcW_GL>{?q)EA(kV}=l_HM
z3r2pn#{aomR#frOJZ&Ci%%{Bbv+7^=S$|Cqu$~3`PquH`9s_yCpL{{Hs4esUL{A`<
z0QtAtPETr<w*Qg*PSY^@>Oy`5xK-tM?RL+VuZjFK*j6K@)kvUz+WOC{Uohu?LBQWh
z?hPuR-K~iI?!)2tMze<f7`kP<rMX)*dQK%S$G+=F|8k$a$2&*ocJ}W?S1fHm1bZZy
zYlOcA6EIk0LmdsLseL2=tq0s>sN-rQzcn9}ILxPO({qPLnl!3aBm0hH1yes>asi1z
zhX9-{LQpy)u=hlwn>}Rq|1<x2=<72R59e9pU)$t_|ImKg5#-0}SyRmg62B7Bu5-Wm
zuI4{IuR!t(4CMpCpiH1bzzY90|E=*K#pZFc6(<by at ZSZF3IC=1jBe+J>>1}jk^lA~
zsiaK)fBz>kCD2l|1z@!dMIw`AJdw)qrB8nQ-_-kN6JQLOkBLn0{o?m+!M6EY&nNOj
z`P3g6<$u`?I|lxrz=<s?UsH5j;D5vI7AuGHS=kCBnw3fUMa2TtrSaba{*Il0rv}A*
zqI1r)r#(OL7w3td({3Nz at wl-rC2;uDprIM_UArV-^aO)!;xNQ!KJ0Jp5r5U?i0H;f
zm_ysbUZpD*+h4i;$@6C#&x3=1P+29v(f?Dp>=GE^`c at m}T2IaJWBb5j+rnr}>Xy8k
zJ5h#^R*jfIdNbVpkqD30P`kq(+s at zH8vmMn=KPn|ar`SjwBhj(+Qxj2OM|O0|5PYa
zJxoBUePIxoMmQ?y)$h^xCj>>)uFV>8fD*v9N1{|laP4XSq50=_?85&(k3-d*aKs;$
zUNw$^|55YWUgkS;Njj2`n(;4FbLN}_*KJ!j80+D|YP9qiL~Nw(7r*yYm^W~S at Wu0g
z{(C<mjlSd4-$8yn>cVOuKiVGlIBl9XukEudUt{3;hPLMk|83wE_;T%iyOppvk$)#V
zK#QoTMx{8__ at Bv7JNcRL%rDlR{}B28InKWX|IB&X?ayqd=c}~0H)5p+EgC~Tjcm&E
z+G_7=YIDoOD327ZqxFr4o>b>X+d?&R2PdU)wwuLyTqcBv0L)TwNnu0$+=Bd9c{+^{
zqZy0`hKKO{v1ezDSXuR^)}y=lI=8!`z%zm$TVoD-n(#rnnkdj?`>edD`yUX4xqHMG
z4>x_ocmxChCOg|@o_xMIlEh!59VT$AM^+Uq{u#X~{O^|~B4w!2r^&g-)F4Q`H!2jU
z3Zs^y=RbS?3;gf(D at 1kKy6<w at UGHWE>-gvSx9|LWC)6|*Gug!cXN!QsqSjdsTn;M*
zwgnQm(b!<5r%Yd^!}WT?0_}_D|L0%+f!)4F-6B7fAJ>jGQGhWhYwOeGebb)zX&QV?
zyQtkDKPC3&8t2<RX&s~OZIr5$t=#nV06s;i>n!lUB>!9De;xeQ*f6TPYv6C%!}Bk|
zpA9wKeh=3w<j33BX1$#c%#DL~!rgMeUWBO)M-?n0RdvmxrvGL7fu|n|3j0jR at 9`rI
z{u<{#W)}5C_xb6T*~OF8GSs>zT1Wg(ds4)}_``GK4_EDQ{j9p)s#D#ewOb*!Fl|hz
z?$Bj-H2go&z3UXf*TH}Hf7<Gz$c6A|{<PQFU?Mx7X8wa7*f~OzPcGA$Z+9tpM1_eH
zl?h7T6UBBr2 at DGV`<L at i&qLx}&uH><83Opm;NSCK9_Y^{<FaWnCCv}SA04oz?oRk$
zlAn#TXQF3>#1emS$Ql2)4gP(aE2Ud1fpO!ST2KG&k7)t5rBMhV^8eM>e#GbF{2%<<
zk3R5~AJTgb2r_D(@?-APV$|>pd=5|2CT{^<uf!xe9=jgozoe~JcZol%<aZi)(rs^3
zse0gFa=M29Ur7FE at FPE%&s^T^eg+BelJjo`{*e56xNdxY;x*(C*!Ld2bgiUVIoB>j
z>gq^><EUzW+PY{~E!(n%X$)qSu(3OC->u0XZit4R3eCz-v(^p8-`c03sv9yqCRb#X
z1e_D%pcjEz9koyA>i2l=Fo9x0yeKZgf=UR5|Fdum?A?hmkb(b`Ud7RwviqcWe45m$
z)@ktRjDJ&qZ3F<MmT<#T;EGC9y&|FjzdhjRGOvB#;*EFUE^3MHQ6SH=PJ)x<$kicZ
zDGYz(3WEPU|Bme^tfcuT#jm>Fr1^FJ=duxRTgd)B>tn(Ew}=1z&UWpt)GFELtb0=?
ztN!IFkamH|f>k<5zA)bha}X4ShTia^qu#E`-j^y?M)@BD-?prLP2^|bKUx2R{HNBx
zBL8Kr?gDO*mV<$R07hUgIQ}=#{?_ at gS3L~d^ZYeg8e^X(OQ%d3s?*z)Ais8Jq(<5E
zb;st-+&E^wJfdk#JN=o4=9VsD5dD1Gs)V<%`#UtiCHZM8$QAS!&OJ+1 at 5dR8C)$+r
zFD2Z{yNPLp9y<bpd_GOH-*ja3v|oZW>+rT>L6rpz3RH!F8UK5nhD!DRFa2+ZU}L<5
zaaB$uK6E_J_%|?9 at dz`Ckk#bBvecyHHFS&Lc7fq|H+u*V-<{7T`=A8bsamN)J%)Ae
z5RNM-{2K$?n>cR%@Zf*nCq(?8?0pmdmo={e{;7&o{dh$u7XJS+>=gdRP0OOvCj~aZ
z&4U;o^`=kQ()gmk_zI|#dIW;E{QbA>b7TcZ at cE@4QPVF?8`Cu{KcakERi1<&(8|SH
z-L+Bq8b)1hKf^Ij$VskO+;6UYwemlgDyog-LgIgR{ssQ+G9R?R)gB3N at 1QB#b6K=!
z1^!H at 9B#k&XmI#5@~5`#q^rN26edp0{)HaITCe#uzmN2R0Z#hfsO9y85jz~*A^7h*
z?xV(P(1E9UO&gv6G{3RhAo)O8MPdW~npp(u2(3+FWQ{%+yTdY)g5r&=$`k at 2S#YNS
zNr58)>Bm!cyb4s*{$Kt7b~b5&&>nB|yCSJ}Aa4KX|NFm0LJb4HG#kCCrdo8GrN>Jr
zO9fZBZ3iwiSc=}Gl#8_{$bTwa8Cnu6X#BU+s5fLOs)Jp|Bq~+&Ly7+(Kj}G-|G#tj
z|5eR*JI;Ui3;>B4uJ{l9pT$mj59rNKhZ9~w%a!1ex!Cx#-}6N#pyctYkNhLdzvb`0
z^=JR^eH6&dRXv}ErAU^g%>F9MXFY1O$iK?h^eCtdyqd}XM1Gdy&r<7X^1o0%ktj}M
z9sf)5r?s61e5buL_?!9Y at R{qpUFVtwpBel&t9|sfeP+e^C&Dko4d<D_-+d`fRK|v#
z%3LyhpdPi;{U>7aI6RR&4<(NX=KgkwA8fD&1Iil6AiXjC^83e9yr;%?t+oBQW!b_!
zm_Hbx)^6PJgxL$0&GG?%ZHk0>9w{SP>ba|SB)PfSBWY`JjiF8m$R4qIgJh+^3;ZK3
z(B*AL8AuF8dAD0`s7XM&r%8YVBodkyW$p?#?)@$PG)pNjeQvwN!v86<U`8t33#^v3
zIe)C6$29d4x%M$0r+kam$R^ekP(+uX=ARV5B7TPaS6zF;Kk_qWzDYDD=ikhKB0ohZ
zi~$*ulr|NEy3<o65nKlh>jFh-)W6g?$UCwC9S*c0?a+1v!2d_S{x4>3zv1KG^qf1Y
zm&8Za*oH?Pu&&NkNBPgR|9Rk5T~WyYg8U5puae)4Egj1Lv`HB&F7k7M@!!aw at xP_>
z-yZV;{z>g2S5i1>o8kOLd*raKRPg+3EPc_i6y`Q<Seq9=gSL7n)bxxMMlo*mv=y4$
zUrh+lc%0y2=wM|3N%mZ8`|O9>*9P!<gn_gx;O`-d9#mBGt2rgn+~I}Wszs9txW)E*
zhXwUu7Uclbfk-HKJ{PXi2r>MBX5 at 0PKGP@(&#%|vbB8D8ajqCLkwg|?RGQMK$}cPP
zhe>{`?E%^gR8J+*kkjExM4*2XTYNRZ6NHifT%)Eqd-STuHPkm#quX0npe!BOzp9<_
z+megGRl0g$J~@0Z746yoH~#0$cN6m;$#06knl##(_`oJqBA^9ydfbI8(gKPCY3zCI
z?|ss2VX5vj|Ktm1(UU#D^!=YwLD3<Cn0K;$%1_9TwugBR()_6FOgpbf-Eo*p{0Bu-
z@|)bhl3#RpR{rNyJ)MLX(Erc)Ukd*1{O2ZzcK%D|Q_epXu37Mz9w at W(obYn~(*ref
z+Uq$BJP*xkvfR#GLNy~^IT*4#h*6*cu?Vt2Z8Td&{FN2dkjyI_5Nles{jZ#V>x$7p
zx(15*g!WJ1H>>LYFGbg7WUvZ;qH_&u$QX9FNnDT)H2yOkg%G+4|DFGeHGHi12pLe(
zZoh{58u|EYt- at k~(OZiCK7?e{C1WTJOWE(Nkm|cU17~1#J_`OxH~vY|1pj_QHOz~5
z<@Y>&sYYf6|CIuxK-PJ!`6tES6u+|ld8+Z{<ct5z<Y(dh(?7uTxASlEQ*>g+KbqGG
zHJ*k&S{6%$(o=Oj#zF{q#2YhkRqan85CZIW=~|dXfcT?X+9)vOP>5tce2DPG{I?+g
z?k}HTl1P5eUbMBo75Ue#x2Al?TK9bD1>-+U{9h>NU%SRKM6O3k&(0tIE9Z^#@0see
zL^Ic?ruuA7yW6V<!%UD(CyaXNbaZ=<9a79;-f_(D&Go@<aMI~rb3)?$ZPvj2`zdC5
z^k)jbL-TA6q;|nWDe(cl0djye9ZnHbN3M;E)VYl7Ikg|dk$I#=fyOi3x4{3D{{n4T
z!QE>9?J+Om<(PnIf(tpASY~Zyuix`oA`kCk!>b4WlT?Zwa%9vi`u}bx`#=}Y^W#6<
z{zwla?^oPxbLe3ats9U6X8ddZF|HxSuNFUB=}j+3;s0qxewNNZk#_<9D4(q*)_Sg#
zgu?%mKsRF7k<YbO9zi16*VSN4qgg1%!QpsJK&$iokZ3xvL98YKa0nWwLw-C5<iMx;
zG?(cse0!{WgtJ!uqX!PDaK`^!`I^1xtb9)7XNUNQbKZVNz86jV3;%=pFEvl4-c8Ow
zjXgC)G!@=W<R`mR*YQ6jn!(Zs?Fm*#Z&jsNRR+}n*{u$`eY)Xi>Z`8?gW4)s!g!K}
zwgR`lr)45tJ0Fx=wqX9{{HLA2IPjQ}m1h=kL8g>&N9Ir3!6Z7naT+ysCK&7Lu>#!G
zpg<mA-6_EA|5F9V|D*pz|E#73cxzVR=4K1<@z~U>A)ko}F-a(D{<(9=O|P9_eX8;Q
z5!KJ}Hu&dMkqzEn93RE6%iSI at d`p^wir$B=i;3gGsa*xDEg}8zyQ%ph#jgWQfO#6s
zhx}9{2P4fb2>I_;=dGAeoPW{j^8d}#+#08vf<oDpXoaeEcCQ6aQh&eS_zNt^)2vSa
zt&f at QDFv4Ax9UX^wINO(#35J*<VUQG@|ou#*ATo(`HvpBB0n?!*D7BV`JdVzmQ*eM
zko^CyJJdgC6Id{xjk3=s=ASm^N%mQhpC$e$|IZ<3gX);bk+{5t*#`erTaUXAy##(e
zU>bgO!qhf)s(2k^&x`esV9ss!CaD0R#)cyRRxC+D0)aPJQlC>D1;hE1Yk(65FdtqE
zMTbljopzy7!KNfKg$`Z{o;a>M#q_rA;Xe|J>FD$yU2u6oz%(HJR*yup1&BnJ8Ufef
zhkTF2K%#uF6HxYYfidTF?&YDn1OEq}<4d8%hr0yWwmz1woBwG7G?q}HdbW}J6cYgB
zY!Y|*Fw-Pcbl9~X{=Vl!BP-pW_}LSX!uq<4V=MfhG74UU`OMCL5`QNCAN<!e#pD#8
zihjhiIS`pX3S`c(EWlo1e%@wJEXaB``295PoEp$QKNdga=ivDv2-8Dwn*2xf^AH^5
zX99mGzg_v-O#WvU(Nt}Pf7=h$f49{C8}>8!m(E|YV3vI}_HR$~pUM9Q{CB}?DgI2B
zyF7EAr&RhR?0XhnQKjWx0@~U~pGhV?+h>~dGjF-w%L7RtS@;=S1 at U3-F&NM-oQ8RU
z;J~_5=_p9`r at CMGE0h(-07dC7s&DwJZCOA5kJZ#Z^jqDwC$d6sL3iRmBmXV^Gy1>!
zSNA{656C#fJtYvC$}Vg6w|2J1?dQplFW~XGUse<6FXFpR?OGT3$0a~TEMOP1T`n57
zTU&s9|CBMI$WMjN5QgQ1%yu#<ex>-!f-I)kl+NdRWSehyZs9+N at c%9Qm+U#Wx~+kK
zMSc>bX8hkKd+172dJ1FrnF6H(ho_mCcOi6IQhweVs&OnQLaPOs6eO_{;{>=OKj%0-
zMk={*!ez at f_zV6+{)_w!<$NT+qw=){`JZ&!BL9eV`G5GI`+qjnzc%21?(pBT)n~Kp
zxuM&kMl+3WhxM{ohX9we6za!r<yotlx)cWfAIrlK87y)(DrSyE9bWVts)fIe6^I2M
zq25TSK#(mD)YqL4f;68HU6J!Y^y$`|+p+j=fsNbhv!?LP4ys>}sm&#z(J9c-a611D
z|8M<={%<7pG#!*>IZ0<LD<uB#<jsoP#K7L4w}NE1I9EyYbU6&%JBjMeu4TdT|D{rz
z5$ZV|!WQm9)RoI9g+%<>`9SW1z#j0^c3LjL1DE)3k{R)TOfc(@m1_XJm<9aIzwy6L
zekSMdV{;VqAwIMgQHWaLUrH6PGKH0A;PWIMdA$&zv5g7X*skiQBYN%vwYGM?D2Rmo
z)C6qg$9+lLgHiuW@=wd1l~3Sb;lC=sOBT`MVUzzfDV0uD&YwYTfq%_xqxrv6fZ6#2
z{|3!ptJ?<hWA|b;d8WO&y81`APvyTU`%WqF=F0EZCQ#Fgwr*6YK at E$6a%4shJVy^j
z>FrlD>&_PPhXKsoI)VxC9>s<39NA}f{zp6;1F`<nQax!pQZ|6!e^TwZsVdOCl7 at q+
z%8^_Df$C{G=tBG)r%}VfZt-yLJtcs8{<RQ*1<5kx4*nMKoC%$?Gv8LX+_hAxTK~M`
zQ}QQAy$A{9+l4cRAfMIv#GH9Zwj<IdZWcKGCgEU~0w(;!w$)%_42}8w(zbozAIbY6
z=Z%Ip%FjmU-{7B||HLRJ{MQ}|l7fK})l(;v<tQu{kAXBQbE^d~0Z%{I3$a{Y|EcFw
z!eud0P$7voD_1c0{6B!P5AxsSX9NDVwpOjjCAR|Rj$5eq1|3WjRV!MBx9Hee`F|y_
zCH|Sfe9X?@dp66S-Q;W=V{KrZ at xRvOi~?<F_3S9Hp$fLpZ at DQ^U{)+UX`N>E at G$ZJ
z^Dgz(5Up&{%~9<)<$g!*SswKvt1#L-r)aRd9NeuhasH)DazRGcD9|kLPQNBrm`gyV
zB-9{CO<kh@&&luM&o1&`{hxPyiZc{qp!71KWM}Z<z$Q9~GV*IWkHF!l*X}qc%x8{T
zPt8268<)9)Au2VZ2T)y<Yk^@Lz*&X=6F;wUWNx%gk-I*?HRfJ-1|%I=;=k&`2 at rcc
zI6Hr9R)g5rSwHX({2vVebLLC)nOfaCtd#6CIsY*Oe@@Vvpyq6APYr#*diG;?hz8_M
zYs-O1RW`U6a*$y`meguA`4L2XnoqV4D?^^i&jA0TbD-3%QvT<j=Pi`aNVW0*W-n*~
z(zmAnSqd=sKX(iCmf&yZKRf at W@-w%3PX51(Un%}h-Oh6qShjs;QtK=SNry`g9db|?
zt-51j+NhXj7$U=BR?pa_QhPV%j-9*ZxnTIbn+q_Eg(pdNoF0;CdH^nz5waPf2>@=r
zmFKVQ*VC-K8T@{8-XDEVfyUiT<~u!)W+VAY^PB#E&CiR<S53wXD?m16h5c}3eRMU~
zJ<k8G&qR%2CLYfiVRCL{_EKv{mvSCa5q5ODv{G{pSe#SxQ~rw!#n&a_jc<>a>#3m&
z{5LmF)=;y{q)6C>#YyEiiBIZ%7ES$&?;ZG`oqsc*AU~defWMvp;6Fp45WHMMQsC;=
zYncnHrvjM;jRkp*EiH%;y5VscN(0!PfG9ZfU?D%oe^nk7uQdx<lH4wPZNUH5{JHSI
zPJR-qf`3y-mMw5|3&axt&3qQEo?~P0vek1Y|1JLXCYRDbI|QsuKnu_^5OnjiK(HYr
zu12QrR3X->Vy9_s$^}}w>_yJp&hgY9x6GpPz36v)*Jc-#mN=7x&WR3#hw~?eu0Tan
ztdeMiPE6oX&L6dKr?6A)=$rBXhL3-PKtT~A(Wmk?`X5sKWjHWg&U3rU4;sS^-PXzq
z6Kim-=?|Ie`O&)PXTD==Rp#dUAUQ&PHos)oGx8JKf4!rPuklZ*r|)uTvKt5T58J73
zq;N3YW(^4p_=_7iLCR<D^(Y^h^Eu=^)XT{?{;eU4sPR^0&!zL<4F2K#i%~2DI_lhL
zCVUb+3zR5O9&zhwJ7>N{r;~nfXgBR=xyU9U*(@WHat=<QEqy4T9{)5e7(@9i<{$FE
zp?_fN`7h?M75S+W68xLDvsnTi6sTaIT);7df6jdE8klRo%N<?|{I53lQh}yjy(188
zu!7$CvPg=DE;<E*Ze2rbDH36})6l|U0(j=McU1zLj<wOW1ON0HD?bKkluN;`b-ZL%
z=adSiG)P%Syvw2P6bChLOI+R^4T{oURWN<~-WIvOD!)5){&VL0D^yuwH^O+t_Azdq
z35=FG&L7<sr>1m|$18uH9r~C|m%w;_87l%TVEKt0@(hS26XuZ9>TvyIy+8gfPvS28
z_mE7ixba`&4^;S9uE1)vN*SkNUt5Y737Xq?{_Xjz1YfPEmeEI5U9vW5Mxd^Ks at _Jr
z-`Vbhkm^AI9E&U<Ch(ZIqCo0j%jNZ2YG76Q1O}KqsOIW(8t%CB5w_y2*2qs!^jcJY
zL;ly=9#-|!DNkwg6aQ~>V(`B?1?Vhb2LFuzx#l%zzE$?h4#%2dvf9{QAz+w5Z*OM>
zZ3r_R+GqvSUI27xT^fyQ*Vi?r1LYE}jNq71i)!}vrJ>$W9h;GHUXs3=$G?sKY!<h`
zit6L!fV37^uXi-{sZBs?#?NoKHFm8Y{o=o<$>at8h?djy$ac*9A=doEnpgrVQ?XUP
zNo>!EX?SC>asGW`rThSMvQ8ndMc_>7%*Fbsc7t*j%uSt(<=PXC;Y%EH>yiIGP7^F*
zZiRnAAq^n||Fw*x^S?SjYoki5zN*p{!V-yA_ at 9~o#C)Qn1WV=lfxqz|M$!0RY1C|)
zK}lu>N_0`iq<BG9<3m8*nA7DVoBC*Z#a}U~@}MF=HSHwiXR>0q$%RMxtf7vR__IMj
zpZW({`Jq-Vl%F_<I@`kk<`h_O5ByJu*Q-{~4Lcmy_qIp;sr<L6M)xN73 at t%~N)8%x
z9;R at Rj_7H_``G+D)1hfoKpG^>@el~AYdzaJn+r`|aW;V(U#W=6b%gwM$EJ4W3IVr!
z>{~S-D!a&Ag=5Q$nd3r;grz_dA}p&8OeSDE#`4zKmSS_3yQW<so_|v8C)uZ&58Axm
z^Cr;Lo)@@H>di^sG*3YaVUq$3y<NREPqE?rLwEOmLg-nY68aJM-swMk59>RF9R&<G
zcwiW#l`;Iv at bk;<3$FeZy at 3;e%%#=T#Bpg${73xE?CuhOGN=&KX!653G=(EPb}CWi
zr*?Raw0CO0+5r9*{~P~Zqp3L+E>=t-3)9oAn-HL5MCwEf#s4?Vg0}NfdsWH)&q^Ld
z`Qf8n#T=%!Jw*BJp10*h(}^w5Z9k*uvj}sYc^PcQsR902YZ~=O3f#LOrxZAVFZ>Vi
zPu*^#=GD%>GvAr~towf^kge{0^yr>4gk?lnO at 3%ASO}zRJ#u%=jb`sIytDi0LJx?8
z;+m#sE+idpYTZ4D^>lSE8b#rJFcu3=ZPsnb3dj*qSLxLXZ^Hyagpv+_ at 2CH1E`jHd
zYgRP73Fr4$EAS8I^FrAxTVrw2{72e*4jL29Uombx6ka_#m0X_LZ_>uO+H8_Ja_lkb
zNfO(I)*UjR?T5wsPRSkgD80IUu0635?a$bUwA3;R>5L`vleq~c1OJ^iR{vX(|7;5I
z=MjHybq4=j<p1evzAgdy72t#<>3Q%k0IfOyO*!viK0{7y|KCR1HF_6|$xCoJ3dAPO
z9`$^4Bi#(Uw&82(WXya(R-HrVK@<7uXCK#w$Dw?#oPPlW|1X|AN_%tv%(CsF16J at q
zJO9G}jW?yh7=C5JF at gE;o0<7<*yLEF3%3~HR!>lh70ky5bLfcBGk=N^jjdr*jbLjN
zs5a5&LXk$Nbf6wPo?>oFnNJl0z*2t7T^qgxw^p8S;lttCj1g0au~4Den<tkWg{@3L
zF3{=l!K(A3Mjk#w?KvTj-VW!Vp2WK5{Ar#xyo?Qxwc&Rzz-4+vQSs7qa*`8U<K-lt
z{)$2chmrkjMi6j<U%;PcW}&=#R;v%hf69U>fp+^c(scAu{&zXV`xUkE99IGSE^UGT
zZWzm6A>z4D at Mi3VnYi{AV_}~2Pcok8dgr<J>}cWqEA4ICGYdWo at K3m^j>HO5p=uQZ
zxCJ{yrAQo+jlj~|)B+y<MvXvvo|pJn6c8pV^F7ZVPu^n`K`5VH!XwsA<UdTcj#cuz
z5)7Lm)NrR%tG6aUh5wsuCk0rVzy$tZ==^syz|iEA`Itk42GL3lR-5AYnQ8=E5TPjw
zEKC44LJ#a@>?e<>Ntg+^r at R@gYCGBIac?t24|P$3=XT84=`}ZMOfAywF3F{%K$$=f
z6^{uVPNwrGgYz`<fxlvkJB3GKwwxQVi6-U4r*5BVxBJ9=re>rYpMu`-x}{lVe?6=^
zn4xf=%r|s5h5owZwRLOWvr|-7;L|w<=iI*T@$7lO?Cn(X7z<YHUxf*w3X51Vhu$jA
zX~b_#V}CmN-S2FS(aAUSCzM$bv4Ba&`A7K~+uNCB0?>BAKV_7Se?3}KfV62baLmg3
z*c at cJ+>x-L6JI3@)=anr|A)W+BW-U^JDD%Nx)Zb&`RQpVQ`xtefAG-6KswL^A6h4A
zkI{LP^N;d5iBuEwPpHCw%$scr)G6?&0(1xf`#$`qqj&i3!1*`%$N$$4Mv>W`ea!#F
z7WBwfjyz1D+N4(-BsXl0pVDDs*Q&?0?q+s*Ozts#Vp`f_0z4{YD!bF_)md~~*;<AC
zD=(TcKCirvbZZWWQxvEs6a8{@26cg}+*L#_pI<x*l`1xs5KxVp>bCwIc-%ECx?udI
z=u1ueB^TX^SIh^O;CNXC2kt%C4xjH&{Pfy6V+$*-uY30J7Dr5=SWp_<9>9XIL7c}K
zW=kpjlgqArDBs9xz+Un$r!Il3cS~hXTEO3Nb9DYZ+}HVDW*g^U&%tai#~dPlj?8gt
zbr?BsWxMO1e`aL?RhrW6)=Zw_N+DTTOgeVYU)Rs35TMyfEWY`}-$4AI?}8Twe(Hm@
zlFmmn(g=n9;QI|dpUHeD=O6KNN&aW$^B0kyYMzg16Z|i$06hq3Hh~8JT=3mK^B>NC
zLiif&r3TBRN8QdQP-TKu2pHRBHtmkDXV=cx+xFf!v^F|{me7x5OY7oenZUv4@;Lyn
z+uV-ASA6*E_Lk~D<o1_i#&!6V38cwfz!l2*Jut%-tSu#qs~^YFzXA57JWkBBIF;#{
zhTB?{wY*k63X>bBulgtm1c{>k^(a8BW9DhogJ#mURJ+44{|fhF(4_U*w8){&4S{mH
z62Qf~kbhepwY^nudGLRgyZTR{g&%NY(aE at bPGHG~0e`#4B)_L7`9=P-MHfE9d at O=0
zMp}*!d&V01scKib(DtIOc82rUF;bGjs|Wsv2}o+lTquo?rRuvK7LZF(2s`z)A6?>K
zQz+|*>B)T8r3u-}s9z8AGcw=u|4Z^e`@`Pw)n(r$`5CfL8EH&4ZaIU;y9zL?pxq1F
z$oI1~&*fmNO|s8Wel~- at VXrS}c~qtxdtm}o2!Q{wO(qk(Ik!m*U3Etc{uBRS at vd8W
zXLzJQR-#ZI=`~CM7?5_|%Q`lDwRPK?!fn#XvhCL50{}3jwAA}7l*VcoVMMlF4(&P`
z=kL>OQ4v;Xs*(abwrD|UL!vglI;{?K&YPia5F$f|x6lc_`jdH5Hkg|nIY&Jv19K~n
z-CH~=+`F_^>|^HfY*DC)0N1>iQ4a|LDv4RNbiQ$kP5!ZHS4#h}2ql}3CuBALNAi2q
z2jeF~9`ZwaWxrbQx)Y;qxtxFX%%sn)G at n`U8L*GwkM>N=r=b;5WeNc?0c+wGBn7CQ
zM6v*$L>8c{c3ECG4o*ctj9 at J2C~_!74*sTVag=>Gke`}yG*`Y><iFCT9h0BlIfeh=
zDxpBC0Fw$jW?{`Humu0o`FGk2)kSPJa-L>8a9*&Fi7k%&vP>ZOpLPn2ZDQRfUF3g5
zMR?`;Gr=QyP%c?PbJ{W%);F1eYSCl at G#P;vXP!4%fJcUGyx{$x{q9d at 7o;hX8(j6?
z*k|2OSD}b14PWVCzDw-(QDV0y7Hx|5f+=Onul*Cp#eBki^!dzce+19vmbBw}QSe}5
z(4PLKOfsy;7GOSFLv^`~4!vS5*|A>JYy0N9((4?>&y#%w$Mk%1{_ubKeQBYC{NL;$
zu1HbUIjnSDhQpM~h<aZDGxP=-2XKa*1Ahs{X}Pb)gEi*AWIkK^{FS1(!NESln$UHV
z0<<Ds-y(n#AIw6W7vF0d1sWC(dB=3BWYh`!T|DH)?T+n>$jFa7QqMIT<Y!6#Tlrk|
zylqf^+C1xL at PD&S6sUWFx*e#&Kh5?T1>d>Ve}-{;a$t5;2#8TE!QW4~n19aWK)t!~
z-+SbHo7nvL+Nlb*%5l=&8raWX(QS?YuK_6`$&*yl1=H%8M1(kJ?)v<9e|}zYFR0BM
zD5!0BV2q8xFnR!rk%RgHTUWWO=*;tTTnhJk*BR7_ul%rH2xT>N$h|}3ySakna__<o
zy8TQKLo4}JneuyGXQ&Rr))xr`O_q4eFr^fF)+bxW;g`L;c3C;_Uw(g?ZzP~DrhDMU
zmG9EzAF5rN=$0rZ^u&42;*TJrI+krOOau8xvt6&i7x0&77UlqzQB1ODJO8QF)!^TV
z_Sy3<UnINi93P*dXNCgZ{nvPSih+nJ)upZV?a)t1UgkqEG4Ud at f9U{izgv@^!v8Ay
zos`es at D;hZdxqDPpAEKI`7iphnF3{uA^g{oR-a}*8w$Q#f`2lB8UJzn4SQvRKI%U^
z1jJZo{8ueZgJ{(38V!_=xP|gR9Db452K>kkdnnNTbL~RFWd4BE&K4xNWg*!9i+6nH
zpO+>e3($fx|Hdp<1$uYijf)P+8$;tF5uhe1BAoWRkJ_^RwoiUr at 1iydX|<Y;_ at 3C&
zkAGc(-^Tpjm7h)MxW~v)gn%C7KTodKjG^W=w`b2SzR2D<YRc2q?jFHM=6mh?`h=P!
zxlgzv<@36~jI=|V%Mr*1mFfm3%atfu<Bz)S|CVQ9Uy$jY1^)D4)3x~ja>D1WWS`mj
zZvlP~T4H|V>omXB1C_e7nq|oXq}VF*?!}|b`uy>K(4u9&<RHAOD}ZGGp#vy;Z6H5%
zesmQ0ga7$iX5I5&);&0Yve(@6Hk6-ns?B_6{-Zd%q(Gw=P6&Yc`S71}x6kbSo4~Z^
zpA~*DDg<oAKjdqZaLgvK9F5rd at 7@{aoDBlT*C)BlgUJkW?Xp+*Kcx73%!KoTdZmPc
z7SEq!46C0#z{&*nJBuV@|B;!)GvK|@$^Ve)30(dYuq9|z3n4gCq+4LXxE=##R%?Ex
zgKa!nKBDM7U;G{m5)^n*fg at Ivu7grLrHy1vfw;?9lF;iN6Tb>k-M=^QV(v6~?9iE<
zKcBzsZ*Rq~hWw}1ZPy2s^KbHh5LATx-{e6O6HgGB$p3?9=h^sQkpD*!82MYwM-?OB
zuc1bqGe<FzpV|3Kc$byac+MjE^&&#z3i-(hTz(k~B&!2f3UHnf%(9wmSz-R)PU^RR
z>N~Ig$UoX-ff3<IT>(T0L*CN!vwFf^k)M>k2Kj0HFUfyfcS=HO70xB3?7MyP!vysI
zsK)ZZD;21FfuMah0WTbLtLJi)`vm?`<n8BWFYtfy5?6zH`So<<KZSq|_}39p_-8)(
zG!~KH#Kw8Q?gFg at FbG!_8vF82bbrSIW7R4kSIW_EsApR!^mH!39dR;v{u2LQBcIDg
zECUL>4Vg(P_Eu+DL!UOYAk*nL{5kiP-0jHciW<e?A6A>T8vMz5bHczM60SeFhA!qg
ziRn+nvhovVx>31>KF(jTbK%3+^#j~%(kZtf)ivZ~x0B2HBmevH6$Ak*BiFFI#K|B(
zJ`(^2m4b~X|6Tc_{O|o38@@PXgeQt_$&ylg&KXeGoPVdi at H{|1A%AwH!T&IU0{^TF
zJw({$6Xdg4y}-n>It%c1`X9_VGW<k2hWB8G>VT0w_dB~|Xvo{fhW}a+w14*h8<o%1
zhL^g8h4RxUKcDmP{}0Q226&5BIc34C5YWi?b9Vmiz-Q=!`lR769!^v_Me+YZek9iu
z_`TSS|NO>h*04mifF#1VOBHNP%Bm`Vo=|+yp!YDptjja=G|4}R$>;Yq at n9ImlmtQ7
zFoFG_NaZ7VZon`_XxZ?oe&l`;bJkdpY_znX4S)MwTb3U4R-O%`7#zMme+fRZN(@T-
zagh)wmb0z?)i}v&Q4aXi>U{D-=#c15Lrv}0pP$j0KIcQEKXLv&Qct+N@?qSgFM at dt
zjlY#&Byz1rg)Ei-Q at B>Aiso4gt{5Aq;?gAHA3rA-6nNI0X989rv<dtJNE7~>Bl)S#
zPpfwA|4It1%su*YQ)nOoAw1dt^^(7&Ma!O;MrvMUPZD&;&^+O2sr)Q5-zENgY*eg!
z>iH~qj76TxUh5}cj{$Y&{6Ez(6lj?R&mjQp``FU?H~71;XMReT{}cr}1gI>qDXzZp
zKRx6$ENJroL?{2s^y2n!S;(*Y?>r-pyUUD}X*B2ve}}JK-G*9BZJ3SgK)fNaEv2XZ
z)E06ciPJmbmE)<q4Q3A<RE{^AzW>u>N at TmjvD;B{XlX&EJw|E2(w&zkV2&R(L- at v8
zE$O6o&a}VA5J^=y;cIJ7t7`RJluSi6^Sffa*`+x5_u8Rf4<*zGYoC7gIh5>k$52H6
z0r(R!Z at -gV>8eK*`9Ddt;$R1PSSkPO<Ug&UkFp5ZNTkRI{AM57&T#C at q^Rtom_s|y
zC3$Y}SHKdp#!<g4|G#qn?nvW*+E at +S-1`Utc39lc4vXJXTc at FQ!<#RS^Cx?Xx#>up
zb+Bo-V;Vl^q2CDse9>y3RLGCieiQi-yo$L6|HJwBnU9#2HRN(bfw~Y-LTEyOTEKMp
z&pgRxgY&Pvb=AzKjlq+G>nU|UEjfh{uqFPB|KtOAE%5IilNn=z`e|RiQ(&H&wSUq9
z`i5Xf`EjL*=4k?qQ*u$uZo`a2 at xb>q8 at nBWqPWl<T)kzWrbtQ3_`NgMw|99oxk|BF
zOt5X#10n$-JW{kELL4qZNYQ_iirAq`{NqmAdfnpA7l!ExJsHAKvj>a$gn`J=$1a{}
zN1ou7(g5(Mu*-?Dk*ItEjod%ruV);Pg8R|T<LTt}Xyz!NdD?|ja`%0Rs}A#DYkSTU
zf|lgJkog!68P$P&u-Df_*V2<CEtMi|;rv&gzra(&s0VY46$~s5+F#(8cDWIld`Un(
zSffKgYQeN7YNsGel*5Hq&c8S4b=#^Nx9a(+-Cip;xK#eTE4Wg7+;~gnXN~-<@b82Z
zMni$-EVygIz&V+~06#}vemlC&`VM!0zB=k**&PA~{^>uP_|FRbH!ZhckF*O7Ym>o+
z`deBW>e<nyax;Xh9pP?P7GSW|ab63T<TC4=O&m4BKm_Ny(>>T4c(IWYGE#ocxJ&HU
zju at lnXC#}yZ93TjPkyJN#3}{U348!fkk}N3SBbE4z$yfIhz|*rLql9+CUymei52ZH
z<|E|{s%uzf#ptOzQ{81jz894vgd=5hhqU(|`HBJldfv@=*o}uW?>jmFVu at OSb~%*2
zSPI`8SJ1l*6feT2mdfX7`vKReVTV792Y~r*4m5g{ge4q+VlPyZ^o`E5vXvS9{bCLO
z#r)x4B7f5d2mf8;UOh=6A%GByccqMYl8EzCbSTU}yQK3(n+jga){FCRhp at _gGbBHW
z;UNDuhIp2NroMIGvgr9)ke>#B+ia5bNG|v`zr8U8lnDg<+jst>Z)a-eN2Ov2QwT^-
zfdaMuIr0A_!iZ3Lew at eqn}7j)|2|R1R!aMb_e?-Zh~FoT?s0&bVLQ}O5ucVq<KjHC
z-Sv2 at O2^~S>>gE?<z95=FoeO$ONaO72m;lCAjyJl_uUBA*#u5~?MLZy80mB0_a)M(
z#tF`fg5k|62dssFyYyel;G}Pa6lTaqhBF_|znT9uo0^1`FkR2x*040C at LX2HME0lG
zSc4wbi1o$ux7)u{G|zbc1^A2nL at 4&O3*=u*kCujt at -A@IL9wCjXZKT)AB3Fqw?uX$
zS}P{N55qsV>_TdlRt;klb7=5;q~`Ki`BHE5y;dNH2WnS!BW->ppv=?mk-`-M?)pqB
zD38J1Qa2x(zxJoGJ3E1U?f{v0d##-R0{;T#nD(&RB+jMOC5(|=oc!t%SZfOoMg9x_
zmb60v-riYohk!z9JL<6X4bFe=+gv`V)a&--OrWxW;D4e(`Gh)V at Ov}UgY#ixZE-h<
z^B0d8rkfl7pSGV++^+uH_ow`4d}u13NAjGmh||Cu?I+Swe(Xy>Xq>*v6ld=KO6aVA
z=+JBeW52+ocqd7j_rNePdm{7G|M>GrDMqTog&k>)6P>pR0X7I!2zc>de$^mQ*#zGe
z1DT!wQuFNEYbv?M@^>3U$rLc(hp3$x(bK#u?KO`=?PKOVGx)7Z(%#~SO at 5@q+8zYN
zdBZyp#(7Se<3xT07i-0(vt<eosxMQPw#Y-704jpQrTrk}e`5YgW~ZDt-ag0|J#!2z
z*b4vU{8`zE%aMSlCrRbu8bZKmhohJYH<owJ`Hv!?Nlj}yaBg~F&{9~DfBM+QvhS+w
zC98 at huBGi${HmB$*~&xWRWuN85dzv#&q- at bH1l|eR_qJ>ZbYi^^D{~FK++;ql~Vxo
ztOBuxxc3{z(0rpmVJ4jdha*+q&G`!oke}OnR0Xw&naF^+?9Rr?bZ5e~s}sPu?;AW2
z&m_O#v0(f!Kl^VbmH+tfpWDE7#_#^EoxC({TDN;gV at YtYE_xXjAI0Y=fa-8I+mNa+
zlhqxk1cn%h0$td0k66%p7Epb0c3oZZj^a43)dVSSr;~1cX7=jHkF23<_ua<eH==-e
ztyly3v1=)6J<1^yN{<Nh$y01R<FDdfd;S&p%Wqh{ke@?B{*8SgE48LnW}b3$vWcnZ
zGt)kg6D~0{*MfeCl4Mc=4)PtMo)o|uZr}L_^9BAqdVbvm!v9C|+vKNG?BIXnfSRWf
zLg!td7Pd6c42PecKVKawY^~w5GT#;WdtjzE;LORnK;$Qx?*#t#|4z7~RRU|G>ZTB|
zB<)^Du~{(xFrVo2`NMQ9*D;#_04EXdfHH at G(tO}wPyl}NCjak~*+Od2HyNX}{FUP7
z)$a}%I+oMlHOj#UM+ize;GR5KR5Ak)Og|GJiQzXqK@%6(ZJ3 at m@|n+g!ME#qMlyMO
zm+bx~9gYd44 at cnOx{(|l#@CsgMwH_iHE8Mi_lMjguSikcLI|op9PSIzt-F>!p9%l=
zEl#Ya at gF@u_bVy9D1esueU9qz4EQ7X$ICVInaLit#|;|brw>^6T6rs@>`NB#oR^Hc
zJu%-d-;a*k&U4CqTN^Bb<a&8{EYT1W+RMIYz1_A5;;k+whHMS<At+*)e+&KtIR*Yk
z{`|9v(9EUrALOSe(nn${{Er?#2<PN2qo(xi`t0ZH9g>Hmjg4}}{9Cr=qekXC$Pd|n
z&G`og%c^LU&(5kAWv|sGwDQyVch2((hpq9n6$0pKgwQz)SdtdtZ|A?vNxNOAr at GA#
zs-B<5dz<+1<kTGkDht5&TlVxV92)$K3+$*n7=49uv!9o_4W94naxzYdO?jsqjSTRL
zT at G#{asB%%*0Tloi*sY(dp_(9ubY}YmnNXjh};6Io8rw$Ig28?{BWne&m{7Q#h`Am
zITGasFwj3SWU&BKg&Ahzop8>4tTq at 2tGgV+fv}_8cflq2m;6Tg%pGi2Kl}E?>)8aV
zZ4WX#H1vk<q51SPYZjb8;BUdx!WRBRe)f$lhWuaa-h4&yU!g4qDEhRNl+Pc}!17Di
zs}+hlGjIei$^Mi6KnO66ivP#PL;jOCE|^2)wJ at LZ`GtJDTH^m58}MJ`U-Yq0zn`Zw
zrpjjoP~rc{@{X9mozK<hAP|U~#e8}=Sj}Zp^Q~R~mM+h_TFZRX;9dM at CO>PNVL2Sj
zUW>5l5{C2N;)LO9gn$U4RSQcNFz2le{z<Nnucpb2;%sgT^k(1sbgVp8v!KobO4SMe
zZyax5&AR#9OW!(o5Q`8FqP4>Rjq^JC5?zQW+WD_S*Z~XthxJ(*E))*o9EZn$bo25m
z%VwV01UzI7nQ`BxV=yrAS-G?SbRQW}Qo?)wx=c`A68}e!85iVpl~F|wduC<9T at LQ1
zIJ;wxWRe_+4~d2!{I?0LB%RP3_#cvH&-E%3s9vU!A}=IyqtsiPPcxr2&c6VE4^xU;
z*gtE+6XrQD$ANd-b(llI(+!{Vv>)Ur>L~YX&w at ay-}}ht{+S2t0>6$X-S|jR$bUBs
zwDTXdVFEwo_ssdp1S%s~bEmxyd{O*=57s6DZJtrNVL)X&|C;p9hs1tU2k9bsJ;Vq3
zkrU1MPus(VB|i=R;r}Dmx at +bp@nBnqfE90V at UN4fc;<5cL4H53{SF~2%~X?6v^7;g
zi9wZQ>N78WEABl;S3F0#Gx+z0-dX8w+?p1b=szlAw}?5gsZN9qf=JYxC<I*fF8JL}
zM%wu<#1e1!0EHR({lc at AZTnT?<c0X^xajCJ+1wp>M-H+LcAv)+ at Yx8!+nq!k)C><2
zBoT)~K=w$gg)N29DGN?k(q%09Z>1Q4qMNu>b!tO#m27IWQd&CeNLi=*945hYFrV=(
z<2BFEK{f3Z5o+@<qF7l{MnLDHfS>3JJPA5I?WYQ($j=_9F>^c+)AM{K&o8jA8S-rw
zFo#grP{{vA=ii>c at IR3Ms5KKv7QDoNkso6vg8v!;8VR&#R3-%QAsjwelcT4zP9p+*
zY{F<~?rWKEH~bX%8~=m+!2iaPIF^0lZ*#ZO%>0wQ#9+mOCjV~P%}%dWYjX%t4xXg=
zWUtlm&=`ivxaG=TA+y1s=eE}|Ou(iLE=#bU5 at F^LE_74LLaZ46vt{oH&110|NkI=3
z^%dRLo^RYEHsV8+c$kbp&q=2KRj^O1=iKdi0!YhVd2GJgR^PAw at ZXmv;0ep_we4Ck
zY!TYS1Tf_ at 6R$l0G`a9uLNkQWb9 at x=drhfh6!6b;isMazd>w)j?~Sn(1!`v!+FZrl
z(et@{^hRx^Om3UoS6lYja*nQP0)Gjf0YB!$lc4>*j5vSMo`ApP;&`6&38 at L@A*TSJ
zvNFasdM!q+xuPV+HSEYW5+PZ)2Th*#x{uj=qW7Rj@%xSDhbaHSe+s5(9yEr=MD3Z~
z{tW(l;rA2%TTAh`7Sr+u|LJb68TIhr+kD21?kC&W&JdV`_4H4yQl#)jBRgAWzHtt7
z6G%M+eJmgjutt8${I_cOT!pYD{!6MYuN6W?W8As3fQ1kgr#&_B^V at md<fk8LH1}#|
zmu~zsCgVeL?^>y at eM!PZ$^kczIY at GuKyurA1pi*tq at 6f4_}6G*i?MGhI*~-cmwJEj
z?}6r}a<m*YIl7>??|Ak5;f=_T3Z}#6l;vQJmwxc8+RITI<da_-+A^r*57Fk#6>+a&
z8_7pa)j)&%dXlfy*dZ}w8rhNElc{z;EsZ*|vxx!$%q)Ne0~KP at h8I=8=9Lk4<S$bM
zPwtSTTDkmkDs^oHKd4)QEaOyU^q(O=vro8Z;Xk{B6K>LIG?-6(MNfOES-3FfLS(x<
z|2gmaoCc3$U-m)62Fb;C at g&F5_OoLC?KT(S at 8|5SKW%4)|E3ecf8yzce;XV~KvLkM
zK(c@~fq6hZ!M}G&&(2?N<(~GVI+7EWAOND4C`Xk4#894aOXa7N_cGz7ayzV8WibA~
zq^i=X-1m4eo at dSiEV!jk>M8`Z2|&K1IQdNe<AN3&wL)p?819P+a9;}+<h9Sd)GdQ#
zk14#&Ui7_Oo$vKUzR^!1fEMZro>w`nMA6;Ci`;rDpZ>07c_FdEYL&COT&vwoBet;H
z$$le_qbqJSHP2IuKKbn*8}*~T)033(8E%JP%3p<?WNe_HWda@{EfJ{4z|F&;i~-N_
zERL~;!S*alDL_4f)7G$V2XbFr_2u_VV6EMbaf4lz%dWk8>PkA9vx%}ypdN5PZYbn$
z{qXvLd^7mt|I71O6XYKuH2)3HiJF=*DFyy8pTwp~Yh~uHj=$yn at AjPc8s7Vg4}IO>
zHBTTq{uLk62POFx<A(F62`rs|bN+(85b3}G2L&2%n&^bvk=R#5x at vbrmB0%B<1r0q
zarjyaIhlC=+VaVt_)M at Y=ReDy^^6i8exviB9~HD9Ki%_#`!)GlnedQ(mdaJLHQ(hP
z^<e=Ml<P?-#oj9fgtyG8D<V`!2>H~RJn+BRrJLv3sY&&-*E at nw#Y%ULIrz*=@5O}O
z9d|ZC=c<S2_XHnSfJddv`npN3N71d6Qh)1S_s;I!PI7CKRb|_txM at yQZE*_N at OcR!
z6FA+i<ijnj62BfELLY61o+F2qh*|0h|Ml$PbW`{2h|@Um41*m{!Wxgkg?yQX%sT!*
zlR4LS2Tz*<oFu!5dl|dk-O6P%=RM=?vqXmsE8y^REF0VA&}rS~I#+xC>aDUAgZ$Hk
zP5wDJ&XD+7)&C%$np)M~0)Ic`t43YjIODKbv5D5U|09a;`1E(q`=ig>$e_oA>Ps9$
z at RIrRiYXYaJO6@xgMZBgR`~DA?;t<r|LyKMBl!0e7#&%mK=q^&iST}BxeL^OD_P9P
z0}*PMG^f$de~y?NoqvfxVUHJv{IqfvD~@Ir{CAz2ndCS<`U65jb1qI2u`wZF(n3cR
zXy;$}$7e?JJ8#s|k=wHh-OawC=uMdbn%ao~Qj~jl8{x*C5*q4H4#{_2em_pbe+Kp_
z5a!>7Fh9K(HN<-Ozpkg8oN7tA4pdyL16PltTU%FD{x<z)48eVbRTs-5I6aAgA`26c
za8(U!ny!%KH039pAw)<nJUwHAap9;@s!gUk)T0ER?nQOyj)_ceF>gb3jj)pxAcZg&
zl@;zeSE=BP_M4#5trWy7 at h>ZALnwDKio6T(NA0ZM=0STJ{C-a4zXjnq5ct1m{JbJB
z<X5RTU+1364M}8q1f<OO!61kJ-RA}GfBnb5 at x|}|)Ld)NFH`b++PgkS1=9blEhqjE
z{)h9Qn2#~G!T+PVopH<|U<3Y}`~X!oB?kXP0^0DHD#NQM at Z0Yn=iftm%lUW1(ky#M
z_Cb3@%nF)2B0qEHyH>fV)0pxX`LDYJE#g!iOdzqcXPxmy3XU?b!CR)(l?mV>`B|<0
zNq$R~hi#sD=h~>)kv*Z@(JhN at 0$Ns*2!tWHr<c7g;{~>IhSk~P>#lG>PJs0#3%*9G
zY*<jYp8AdNl``*gsPhDJ&O{E2mZ;ZshO2fd5Co8P??~?9Gq8$zhDKiZX!c^@m^&Md
zG>x at oEcj1%9dMi3HJq{1NV~ULG2g;X)yBO^tiH2J{^yMD^zNz4P{D2o9V)0Rt-D#F
zJoumH_2IELEv~YpY-E at Y6<$fx<|1#^x#I9=@HhTv@~<=G(BMBZU^Rf1+B1QF`Gofq
z0Za%}?bYdIzoB*e;Mab1{=2_m`?G#;B><DD%J~O5)~DEeO|Jsr`0xq&^H$BKKm-3X
zolX~boN7l9j<@ii6d-$?AIIS*3ixR_Oh#Dud>9XCtG#l4`yzYxc;_YaZ~Pbej{rE4
zpYEjMyCVC;|0dagIR8fp>rN)wN)c2So1;u1B$mfW2q4QGoO^+j#A(k0es5`<y8VOy
zz6&MGOM8WNn2&{4Z-&ol6G$%L(_#YgkYxzIC_yKixY?S0j`D8Xmk!O_g8ysA)=~>o
z4yf(M%%REz9ShtG*tTC!iE37OB&x}3o7F>g`E%>c12Z%z^-j#hjeu=;C&8ldKR5&0
z&^oGIIP~>l*2)cHI5B}SpY0ryooM0?ItR<>oop>PE5goUxtz=I2Q3qoZ4tZ3e=*EB
z7D2GApfF!rL6CnyhP@<R;wUzIe(FITF@%}?cSCsNKh=;p{NeWRUH at 4Uv4_0Ke0M+9
zQqTmbJ#?^Mv=4mchr0WeMb3Wvr>&%XKe*k(`7gnL=4=SeJaB3{(J4=Iu_}KD|9MQI
zbqM~MPw<}*zyt*A{A}>ke3JHhz*#j7cG<$csLu8Pa-;Ka@;{RwGT=1iQ0!LwYw>D9
z;W`H8Z0m%Jou)`V at Lwj7Anqpi=zF*Y+Jt~oZ!CBgzjPbUe>JFQ9sdGx at E`MxWA{_6
z7YO`5CXig%FY~dbd0IDd83rO5iT=?K?~t?({@ESEL-`2>s;xKa4yymW<js9r`#N}Y
zAMgHa at AcE81BGuZjQJ0jn`AI6V__ at 1IUHQs2)M at l6>5nyGya=4q?AyLIapB54yvB&
zNY;1i5p6xvbHaZ{L!973V#`e4l``SW>>d2Op`rs3n{S!uW&SlLP*xDkJG?IB<1<<C
z4GFLKJAvPe;D2g+NZ36nYtH|-KV$+qrkX-W1Umw5cmgP at YUyxzQSEDJ{J-}fzW?S=
ze9IhE^JXQ*gZyl8{-HgM|1)8D92ElA at IPtk;1>{<9VLit_c66=&#2{X{7J~9*u8N6
z)$mZV4<N0PAI`tq2<M&$dEXlOsSwr%IG&SRCmix0^5Z<mktmRxhy!3;aZ}Mk<DKHP
zI}x5tAepaYUHp#&uZ`-?u)r^2PtG1Im`xylJ|=+S^aI*B>gs0;_%q=l)Xpd84Q&W)
zO{YXcKyAIGJ~0P{vnwCwY~wv{^Jrc|*FDwR_6-eeA}rJe|6Tg28UeIJpzy>T-1qYB
z8AUaiQr=lQd71>$mYH;5!Ghdz-kw;&?XUFe(V$+tlY)QKs75bnz<k-;#>BGmYU5*N
zqS$ltIbgnF?{y(Rgdg~qI)8(|_tr%>3;tJWmt}{4{$D|`#6T=)K3D<#*W=v*(sF5G
z^_bBg{p`OQ{C>Xw%Rl(^cm7R(pyHQIszDpUFq;2h{#$^b6|CXEYf07i6UnP;-!uNJ
z1dtGrKWX!U{1x~)=h6yVE5j9gt3vJlSvvnE{$uQGvcLOP<Y$BPZwfa(BwC>1|C5^4
zEV32;v%6p37ap5OKS+f8!O#)sD-oV+SR7H`iw!q|BU<5qx)+{DJZ;=g6sSH%mICCI
zd=Ka}0CTTLxnD7gGMuE4Or{AK6yaA`P_h8{zfNww&`{2h(*vzEjqH0C*QbwHGZlPV
zWVA~D8(S_WoS!zt8Im8I9N|W={Z1ls$tjX1J4m#}9A>F7Gu36#r|}{FL|BOlM73+l
zu8K8CPDT?DQGH!KFM#c%j*R!Rw`+dYUS%w)MJU^klg|P34f}4Fn)_zE$W??t7dwN$
z at sIp0!*1c<ighs*Fi7G#G8V5g-(y^(lOYAjl{~F=2EP}duc=?Q`FPSC<tLf%n)64P
zC+0Ief8llw|5f~gDC~VEKcjc9ljt6SyZ9(p(B{+JDQFxDw&kkZF+JF&{U>Z#y2d|u
zI+UNe^<}Z!CEq(Lcg|;6 at sxe|(!&2rnw$K81%i2_K_|j0GOI+mSx_eeeMgq~PiN)|
z|9vB}{&QKsD4Z}IQS`v at gvzf$)Gctm@&Db@(0>(?q=3XpqF(LxFM8elmDkeeOWxdv
zBs;6A-S|wz<eC-Zm!TZ0Kb<|r2c|RD!X^^!d=R4}0Q%}Uf8=NCkXg~@HUZp82HjN#
z<KyyhrSX*Ep<1jxJ}>45<n^!s_&0}npK|`ZSvIC6q at snLRmH<QxcWZ&KU?RSD_l#r
zKLy+vf at PoazaL5&|1bZA|5ey+6BxOn<#iQ8n1c9*ozAl%sE?3^sapUX{BL&t1^%#i
zD*bTX!SHaWQ#u(++2m)&|N5uJn(D|O4)FJIuqqTb7v0SK1AY>5=z+`RBxBv7cD>cT
zO5R(`{#|`e>XFmFO+9nA$xnh*9a9vT$ZFk6o)8G#GHT?C1yv^xC!D*m0sr)WLd4XW
z+`=rmLnuK<ooxrQG6Bxkg)kYv#8{k0!c7zmwY*B-e0!%M0D~C#I{N2DuMcAZe+7#$
z7H$8cz>V_U&oYM!YMqUC6!U at nVZ};dj`nhe11y>?PGBF7wCa$lmisnXCtN}z7Q{fB
zEFlAKcK|SQH`GfKUC$AgL>F}|{EtS^kj6{jI>x1UE7#J6l{+Q7ag+i!e)ey;^rgr-
z+<qf}{)uxo{(VBtN6KW>Oo0eCSodrKF1+bMWY5&RG+1)}=5)=NpI`jwXa9}-sFk$r
zS)6&@V=urznE>#gnMb(J$?r`5YyZAQiyyAW<4S at 111I^>U*!)c*2HS2D&fNU&$3U0
ze}Vr^<j49W14%lTnQvP$=ihmEZwBu~yQGhtWR774Nx;)|v|vHYiZC4VT5c2nlN78~
zh)%@Zi^6~OAD#Jy<U&z1in4;5S&>{IQGid*jl0spPC(BUVCR?aS}WMq&&Gj=3xzP;
zJ{;iUySWf=0Gk-5eoNWGW%dSsw at jlB<p<uffY&~X$K&4f3Go==#(p3C<6T#~n|qhM
zgCaCF35+vz0y!4UA!d??M~4OJV-dC6lMKC at h}0Qw@&EC>Bzcpa6v2Oz0v4TRq$iZ5
z4CI0O@(@)QwXG%cyHR8a4pYuGlHU#Z?}m!0r^r=QZdlI$WT#CiJLy&9VFxqv`^E46
z-8VS|j%dJjcK!taiLp2A=bu>w|FrPo)+he6%Dy19g5qFPolR6i(Jj*n8Pl*M1TtNM
z8H?9$Eyg=D|9Jj7!jOynjH}zQ)pv8|Th4!Yt;aff=N$6ib;$w#Hi1}ykmM>@P<9MS
z3FmTv at Y?q-(nNKk#02Wd-CX#hq_M3<)cR*KXJwSVr(;}HpzFTGS?!#`t!6($QBdc)
z;J+1^8y=5uTb88%S2`$gl5}5uHzFi=I=m<(Tyjt6X1Or)wDjESkx=a_Jf+3WMN}+l
z3{A^ig_y(+Mpv>AShBm&q=cLC7%9I at yl^rjb37Jt at _wEHEAaUp!4tkajp8wSE?=NN
z9+ouWf3JM9`^YEEV%ofPYcDoX{aI%twN1xLbLfU!Jtv!nqc%L^9;+5MJO2aE at hrJN
z`rO(BhGr``^|c>GjXLwSbYYcUv1;Z&InPM<Ihq13 at jtZmnf$EbKZL4y_?C_LoiB_Q
zscO}RIv%47zVULi^B)FYspUj|)?|OX`IfSOSzJ95G+L`;)nAdi&*sA$+|y)jk?gk5
zf`$o{*BbcO{NE*j;-byuC10UuYLSa_WK00ni3#}E1n#RIE);4$2lb#ds2ltDmACBS
zVzY??@FU`v38<L++XMyG0lbJDy2~Lh2bkSHAcR$aMX{Hwx|?!vk!yque|5z>hW3>I
z2ma_?Ef_*ClUz}V2|^NKRTbrc49<G^+(R;om9uUTp3_fC%0`&-|9b`eycYYF5&LSs
zBGj>?=ZyI|!!4fk|1tL_(AH%|m99F(daqQ95>!BVh$LXq3MxsHkcml`qDg`X2ue>0
zNK<OjBqEKJpdf;%yr&>#gNS8`AYun9*dj_NjXeqi!c%OpL2PQgZ^n!jJNDZ9oO}Nt
zv|f%q&e;FW+nlr4jEEUCV#O-JtIp^vOhEWI=Op=c&(*-c!fvQ%EB8n*D9m5ZpB7do
z^cLW!o10(yQo5u>e&nlxjoc=>1V1R|puxOcF`F0ZK1{&=KREnoB#TBGo{~Jd{Xe`S
zB%qN{(@GKD6ww^TN-gmsrWRPQOJ5YuN{>#SKYFDwgv#+jk$A#Ts-xYdMI5&+Mc*~=
z-yIjUSU6vEQGO5qcuPK4sMg*zy{iRL5sPLv^VP(EEC(sDoAZG&UR3QUG35qA0#}zI
z3{M*-00Y6zlDmN}w(BB3a3lQtrzqB6`vH%6$y-<~gu5_-3q-)e1lT6e;}Q%=hh+%Y
z(zA+TfHES*$Gh- at 0>C-?oqUgyM5q)$^2xW*)KKCAhos0=-kFE&zbm)HL&oi-oE|33
zH>)Y)0pgY}=x7}^F-#s$6|_ilRXWizNyL|de|q@{PYwL|{FRtvVaKp9pI at -A8{>bS
z{PL;G|1bEb3J|%W!f41o*L?`pI-LKj)<;;D2|VXD at 8IEQ=6lHbt70{-3IDEqHRXql
zDXBOZ^A4J<L&fX`{siBQvGBztOJkE-=ykZS;rvHKpz$B%2Qm<gJIVgrhBrBXNfvaR
z(qFV3sh|?GEM>aF9OBHWs_A&#s4HTZ2!7InSW52^CJ_jYT2>I*9Q*{WrZy+)eae42
zg-nelH1@^7uW*q-$ah}p5^7R^@PWT$n=LRC{xzCgtvJAp-RmqC-YNK!O at LfLtwD+c
zSj1(|d(LbA5Zs0|6d4K|XD)v`1{&}UvJ3tfum^ZJVG#I9Hw)MCWmtqBrufNi5r_yM
zwgvedyPEh2ST1iyiLlbEYz*@XiYsQlhVpLIP540<FL-18Eu1+jE)RzXCEWlF2ipC*
z(0dSGXs5%ZuJZr<R8M{#aD6OP^jy_ at MtMl)uNK*G{@- at Q`BOT~%y;GdL-S1LW8`PK
zcIE#^4hzFs$WP#3?n3wvDN^{Cth8Jc_?@-cJ at U*+mvAF?{&=m#e<(ji?Fihi)NeCi
zTk$vvT9Wn6FQw6fM<L%H^k&9?m;;Ui6%l<S69IX)`$hvcD;r%~D&x8 at C~A~4fl at QT
z|LB6?J(~jI%yk5z9zrNB%s0sCPhg&p$^QcC-0;RcfsN*To|}S2QoH-`hEXRN5zJTg
zSa<`<1#T#`fBZGDtTaiSp+ZB9*m9Wo_n*f;FCib;E2)gF2cQW2V`7*F{vVGWrY+LN
znQ`po1;CP1$YOGfnZDUtsJE1AP1P~T;_?`YS+Z_Eg{eNPX0}uK=M4}g1^#HGU2tB2
z=Vkz2edgoJFY<q*+e-L{GF8H*o~tOGTmOkStgvg^hV$3Szl`>xrTOQ6e|3IwIsf1I
zlfSyoSAIVoL6!N6-MLpmg{q=GOS^*bA3~y&UltA at C1AVLJ2t!VOoV?x1qG at Q0Oo!1
zo#FY3?|OPE!MWSP^S=79N8`W9k9s_!sL_X9O_{GcPC+}(9xhp80*Pw3SWM1;{8JOx
zJ#^Q{&151FwfoO-YpDBzTokS{z16%ru7WN&sh~xHcn-W1C?$kP9IvOGn839k7-+mJ
zUHV=Z(y=gsY{iiXe~!+H<4G#P1fMnmzyMS(b4{K<L0?7zPUx4w1Q3X at 6zbQ|9y+U)
zCdY6&egyb&T96XnJCR!@Xh}xc7{zRJ=|w70$pp9=QA{BqD#A--$GHjol+WTrX at jbI
z+hjPrJ&Y09`_Gy4h}Aco7vQ-O;74P5znSrG<<sOpqAis~2&dky$v@;r#E(xwz~b#8
zbFl;Be&dYGf_>ef2=NU|<~uQeiM@{!e|Do<^s0gX5YkKeFAYZmek at k(zRVOrAs|g4
z+w7y?ET3LX#;^pJY433UN_*WxJT^+;j=Jox37^rdYp2vR->3 at l&Vjv(^>GSYkpBbZ
zXW*X_DkVZ!R9hlI`94JKT3_P3io#=49t*7t{EtOJZ{f`kJ)ieUiI%Qoey2=;deCA5
z`n;q|p;+GkAus$*FAWo`h?rt29^}iuhUibmQWS|Kr<^a^Z-Vg&*XGkHn}Ep}duo$A
zU&cbOk?q3H-w0&8nHv>2CxTxn{&PEgxQvd%ga9mIHa@~S1Vn3SIJX$3tBnSHoS|A|
z@=O1-8u>ES<uBs5{dYUIckajDqWWLLe>nf at w&L at OZI-L?v1rkAsA%P!OGJ*qjZa1p
z!}(8#*BAJ?(WqWzPiMZCJ%{sG&I@^V^4NMc`FbY5Nq)-t2NgsvhLFU5YGg4i!Yl|A
zh|6Wxm<+?DN5G)sV{D7F1jkySKNR!93yJ at f@>4wzhcaLFtjhWO=;vE$$^`f)1xP%*
zH<-A?r93?@|MS`pp!bhZ$RTL at 5prQQH)@WVf>f77D-n<hxL+mkPhKn)$S1b65OCGI
zu at -D3XVeCdG)y43=E?mA-;?jX%3TSj-}}0Ed4brjLiQ?J4$~uXfH?6AT+wReW&>tY
zR2bM;14}hu5p%<DixjC~5yTtw<Xr(LLc{-YeXuReYgFvT;w>cOSGWU!;kohq6*bh4
z7o?(x0IO1LE!6tnSIjV$PjAxG3E0(0;_M1<e`E6SxOc<*G_NBT6#g;ZRDMuCz1y^&
zbAO+y9^01j($qxgYU_aS_iTk at tD~HA?(+)SXS50|;8*@gqki@(C;mhE7x}T4K4gFX
zbUvS=KsJF$Fl7q_O;9J-p~}0S9$Z)Qcu#xBm}?PH at IT4^qvji%l|;1owIwv+{Mo*J
z?xSf?r{u>aFrOP|XW!sq3+4;_?FJW(2tx;;_IJ?V>z`u!wEH5oeQ%QpfUz`zDB??$
z at S!cNi?aYlWXy*dFGO2r5)wd#97Vlh_%;D{5nko4fbeU6<V`HoyZ`zhnAIi&;mM$8
zU<mwm{}c3rG!>@VX<`#-!zDi9vqhFDeyJf-b!R2H9FnMsL)XM!<WH!bQGMpuDyNX<
z$uq=7 at K!U&H?L3>s}Ml7C8o*~c3C(sZY*u_#v+~3N;&!EnZWtMZ6g2LB4#oH-|W72
z)4&9V^B4Hd{72h^9x@%I(Qv3ZHBuGQ-e`3LUBHq>#Q7i6{CUFc0-z6M?fluOKDw0U
z`8kp at HY%c at XrqeSm4*Lmdw@<`1dCLN$R7CDwhJL#1Lq?I41yuTzXE@>9Zt+g&Odfe
z$@xbj##bcADY|LN4rjjM{2$3XB#q_c(+_4O^R`3S|ElBo2XAQtI(PC(+TvaN3f;tu
zLIMH>Ka#`?A)oTA-2_;7g#g!rqZSqv8t7v9Oxxg4E%up$w5<ssJM-N5{k+NRKKKV7
z|Ko3CA_q1Y7<NszcN0-TupTvZb;z~?!6Kv(*%iV#*8telHAfR2Xw(jRZPCI}%LZu*
z<@ZoB!#Ttr0R;}d|It at aA;7|{B9X at xdRAeCB-d+{aYUg|<bQ}iV4k33*ef^pMUoQN
zYz{Vo at c)bR at 3JR4vvmdsSu_8kHdAfny>X;hj5nd+d++D1&Nb-HpU1137r8t+X_q}m
zj|V<K`&}8%z%*v<Qlx|g`H!}r75P!OKWG<6m2(*5e1{1vsLSI>v^8l>gV)twBVVtB
z{D2~L)Toaua<OW7TW7w}ro~$Yy=>uUrz-d-3kdS_ at UX`qu09E3^Gb7Un!rWhj37+;
zi4V?4mhI3{tSaYJ5s22H#RNS3utI>_K~;FwJHP7P at hzS){_q#Q0c37X0Pz98p$zUb
z?#ka~f!K16gHoA*J at vHEpw)1RB4U8(`QBFJl0-CSSm%)y#D((&_MTjg6|m_Tn<Z+{
zHSuX*#B?D37Hmg3i1x7GUF-$>RR|jZlXrD%eK;SqpvX!@#<&^2OYaIxac0DCfTi<J
zVDBJ2@$WHWWdi-C!ok4*0{+2#QuYbi6Z at LYb1)w=6wY(J;ls(}aQ<xX?U?WP>;eep
z?=33XqMyz`MoM~6E&Mr#^L!nk$`UI07x@|cXH~!*I#}W#3KSv0Q9zh)2l1FRW)A3S
zV7ttx_D75Sut4I;c0ofJ1S*kVWX(67KjX`8_4OVr3Yo_ch+Nh)XZ$a3EZ<?wdg9c-
zhyoWekCbCLp6I4ZkO>ZD<M>P!dMNZ$5ulUDxiAv<XkRBf3qrL<3k$+Ku`XVP|MJ6c
zf~5=-7)=NwLU&{Zi2|Swbm>Fg=#lyg%mlwpiB0S!;v>2T*{*oL(~y!GhsI9Y=)GgS
zs%!fC32eYg7u;3v#!g<TL(+)!w{*|1T4k5P;#AJdvWw!cm{>G*P&mf(i(-*M4CjyG
zB>9P~#13D~M^e at LDii4V-(^10GL&y at oC%oBCv3BrPfT?tXkO(@zk|)}9q|30)189(
zhd3Yonb1zjp5gqV`mkTQP_{hhX6KkmOXFXXpV;uVl0EOAVKK>}%Iji5tBa9DF$dD%
zPud@&P)qQ~r^)RD{=h$LjiVd>N3!SW4bX2!V*2dS at TO0pol1CnXb&`=iZ=MyM(-p)
z4;^M$_BgDPI29KS_H2)3+*vaL9Y#R;%n^hvgYR5&VKqo&0=2iXnSg2mYZn^5J(v%(
zN4ysF+^S<ObAiPKuq@&!_|#`dqK6U1W8|~T=p=sXh;zv-0)LoZmZUASht!{^HF at LY
zIRd}abJd|3J#h!TpOON817Z=+oIxwR;Z#>j$RdP6u+2ZCDTwSF%=_XVgSBL_xB`;y
zm>WX?68Yi$f-x~b-5Pr)kSqurDdy7!f75<5pB|XdJWKP53I%;iG14E$#cZG5 at uz<B
z6jOAtU1h!@d)oP9J9vKF6we0;5r4I-A|w=mB=WOlzR|!ioWJl-p}ax>3<nb!S0F!z
z%vb;y_ at mD!5;PDVYh4H282>?j<oxY?Mz?bfIf>cDCEkK1-aH8};HRR;5wvg^IJ}@6
z<Tmi1P&eSGSN52&0~8&eEuxqJ<Ic#BR21M0?v#VP*MpIaquj|m7wMf$z#%}36#{iY
zC=vm{OmJlWfER*xbjXz|AQpj%EaK9d5JI?tB1-C!6mub1<q301)dZ``eAQqXIVPjz
zqASlNpABMlREK6~ai-D at L!qSv9GryA7u*uUc-!vZPy`{5#?9V1(|JPJV!t45>@LBI
z^|Rh%)wcHFjge%l)Vq)$hFYUxMh+|d*9=t~LWBU}e_}q)c_+cY-cm&+RlA}Xq}@GY
zKG**$;x*HH at BW>?)E$1mX96%R7fV at ZzTy1Q%$fSdLBL=1474L+1VDmCTMr!0-;ICM
ziQbxkG(v#00L at csm*s+xz72j7N%C2|hp6M&Cyuw_Npj(li1L~Fmh7qdbqLPL&VX6u
z$Mt2Lf6gxcdd!wdAoy550v|-=CkEq8P at n&aV0+GegDqT*eL&1QrgBQt)G&b<cf)q?
znwhZdlyqHqv_{w)ivkT6l=~vbzJORS0M8nEQ5e1oxe5~)b%9|5tfsnm;6h?PvC)H2
zXy2<5YTjucWLuRcs;gaT#Oua*UUz7?6a~yUN0o<6U4ZbRx>)G*%AMU>_IZ00D9gdD
zl!z#TlCHh2omh>XKj8*v4*4PbAS?GTpYdPdH~vSMNVR_#{F|&CKIZm}Yu*n$LjVZ+
zxOYx2?wGH84n&~fi(_18zG`ZfY{Jw>2A^L1Of~{@8V>tOu>yW!ih(No#zu9?o@?iy
z8ud8H02ZXnDw$_1_0tV}0>YsE=mspMn9l%z;=j63vZEvPx9x0mb-Mv_G86(I;3sY5
zZ4(7x?_`nERR+UZZUlH?zF)&_ekNrRT5&j!iQf|@@H9+G6F(^9GW0dZh7i%@jU at +p
zn~Yl{f{;iN3KQT4i%1g?$51S at 34GR9FuKH(2^qVAk}O|Q)!|_Rcm_Nb;YN-Eca5Xg
z#!2t^rbR at 3q$3Au^*CruULIZ)%0FlXio7warrfXi#+a{*y?|l9jlY!|W5_J5k+^8=
zF_C2I9oZ4G75*X(fuc+HtjsqK@=(!=(+xQ6WAgvt-^@RlPv*QE&!1J5%BNhI&b>mg
zL>?N8$WvmWp)Q=;&Y8u3_<_~b)51UAhE^-Sxo87V-ppU*;ru7^fAN0olwou#gP at T_
z(8HrEM&yUpCtky}Tf>76EaPophD!)gvC>D7yKsqTtD`*@@GH3MF%H2~o<9z^!VoYA
z(M}V*=;$~kdxrDJcu81z^RRc%>(-cV$WI7>g8d%gJNUT|sYHjoaP9*Hl0$IV6Nd at l
z5C|(W0ggU7cT8G~VmBXI4mlOktqFjC=fWXY2hEljg+iz`?w({8%v^fbFZ{uE9{l}~
zG^xj!fa_e%1c-)y$cmMKO>VZA8!$1C4ROJXO=<<gVBqi~^KdXP%4Fn+*A?o<;bOd1
zNkeU%wJDIx!CDbK5>^lw_k4vVQzqikF3}dNKoch&$oV6>erDtppWpDmWj>SVr^%;r
zelf8Iexag+e{4^<-b3+qEEB%#NpXZzVZLr&^!oQOC16Dxw4*`8+4x!f8-yRf$EgPl
ziewxp#{pnXq`<_5BtLAP+Bkn=xA1RSj54KYswWcbbs&GpWjIWgx<WLVX at 7u!a{epX
za~v0#&2?1nGys$LkA;$|@NUn!&+`dhoM;AbCy~cmCy?*`GxL;Kqd1f3GS|5HnLm#c
zU>Y934JCP)fa+pV6xb at FE(%O0Kp+7BG3Y=$RmTQ-nLu=^{9kvc&w+q-)5rc8oDHuM
zCJ_D7D`_!$(sbr^jG4l3XkVmzY&?~slz%7??)2KBw1c$na!YUF>oLVzwB$xnQ3Ydq
zd#eVs1$fM6iH-<K6Cq0TYG=idWDXv^{WdPqFy6p8#fdzHYw`aB|4I9gf*+HV4G!94
z at WZ~M!&7|QJCv{cV0<`A1>TRTp07Bt&*i3%c?k(!;D6M7$$S}3&amH`UkcAb{h<Hw
zQUCMJjKkvGG(rF=fFwjJp^Ni(!$WHRP;n(7l7)u}L?RGYpnOf<jL^XUWkDD4L;I(k
z*Wl;X<bN%D4(G3&y33w&{*S;XW278$c+LC2z=$Of(8-pW at 0#Qc{3B1T)AMWGXHqA=
z<lA1&p+6jY!YK(#g&YMa4XZ9TiUM^1u8IOt7b{e-e4waIAn8OYD#`0`ApAn?mlZ^m
z7`d>^;+YPMd*E-yG?){03!b at x4tU^i$q>9TbCkeDY^=8%Y-=mve*sa+i9#27tHLgA
z4~h=eVCfzk>n+h{qbR@?%fvl at SMS8b$!P-dph(QHP7jZ|17j<cTywyU`Og9HlP~07
zZ=U~T at Q=NjH+(q04#vyjWehX_lfU{<`TV;1&)@et(q3}p$b8#mHk|*tkETw9?ND$8
z`EPpf2RS#2ok#e8@?Vl)DL-QVE6ramH0oivH>gfcI8C6Ab29P`{!zP^=XcIKXumy4
zJzL0+GT)Ltx80s2^9|?E8v{1HPiPzJ4d<1h-Vg^7Lh%U$?dJJ``3>x)O=&;Wy|YXy
zzmyj;!c8Ch63zr<V1Ai^YHFB3)x}g47!7jKOQS?)#{?=D2)w}`lHEmJDGo4IY`uZ%
zbjgBvp3>MyqGS_r#R1>}su-e`b|F6;ya?uxA680Rg#c<{04y-(RJ1&*6b2~$MUgCT
z@$dI653GE7xnfoub|(Wj?J?t8GaqTNR|#%*ixG(&dV+dkq~`n!_^tDIsdMA`y{k^1
zU;Fn-V<7-II=uAN?(tlv_cP3m!z&B+zWMn-_yEKPCz<5O+tRhqQO=*34t|IZ9Qo((
zXU_$jQaM9PKnnF6EWwoEsKjV;2YwF<jF1y&A7lu~C=iE|%NF9|i!9>G^Vdiy=e)R-
z7y>EZV&^}4xiOYi%}e7A)mG>HC5~?<?Ioze>wIz_XZfMqz}2x?VF|Q1z*~<Ez(+A6
zU@!28RF(Olv%+}g80atmu3w=Qje|j{jzLr$1)2#k;;iao(E}_KSVsNGISV9}4wr(R
zB3`5eqp6!^jnbiFih4vtCFapdY4>?>F8g|*XtZ90^1reXya$g_F52TXosx$W*73o(
zmwLP*W?u2)P=U$=4-hKxj4YUsfVuTcA8MrAHaF$G1N_B&aQ>WSgJDA8#l%hofAw~b
zr^Kgl(v&qIHvp*hmxNB9JPxeE*FoJ`BWhj at bDO}=KX1YL^%s3}6pUg|mK)y4d}$TC
z>0 at 9%xHz|6)z2bL11c68x+~2;)83fR=}nH&z@{fprbY-53mTO{*9Y}#<S#QogfUya
z)Hyx#SgDTxmF%fsJJq~~>`9Lk#*1JDEJ at X2YcO^w5afrL#e1&mgIX?Em%M#mDbh-+
z8gC4}dbtRN^sOP$s5Ee&=gS1{^sTssFaf$F*fQKp!({?nB2=PiBNZz&V(gx16b+y7
zMjS|z#yA)&<7PL3P+joA*8iC|Li+4&L}<%pGO~y-h>Spziv%df0bTve!`^$FSxBJH
zJwdeyQka1Fo3j{CX$x~!0zO6o5NHzorv0AT%fPPB&_M>oj$`1r?uyZM at G~7WS(%*4
z4*2hj2c{{7hYvn+ccgx|c-+gFVg8yw{6JyYH#A&{`QSN|{KP)r*vn6kC_EYF^Ci!D
z%?JPCpXvwS_Wr-Q%~O7gL(mBHU<~KKoA#<eQw2erKw80F)91_WYwaT8a at 6Y&d?>@?
zBrF-bL<ZNqhV$2E!1aV5DtB>kId2b#jH1i29i;8Fe4yB1&KNan*g?z>haYY~MA~R*
z)FSFaNH<%^SDwa$zVCJCKjGzA8PzeQ``H9m-4WdcrgYdQfKyE_v{~ht;0JWerSJg9
zGgQh<aFJ*baxvjDSyp$&E&&Jg(P#0=9Z^?RUR+mIT5ak0qFRfPE3JZp at U#NAHeqO^
z-#hBa$+GlUQ2Ph?(R|E&KJLnyCfM`y4SEB1fcAb{@P}O7ceOA~Cbu+31M1j`iQ2D<
zf3O#7J>-3;c1$woyyJo~H=N2%;Fc$>f|1Bi40(tnj|m(ci#*K*qI__ at hrAFuU2>nC
ze{J#_X>TweVzg>l4gs-bTC7?!Azzb7LwwtQ_V&QVS9J`EsO)0z(<b-!5n>hx3<s#=
zlR3hV&rb4k{fE7Xx-ETcBn69yFIRs6_IQ4kD)5KGK)frW`TBa-Uww$pDYt&oD_~h9
z8py&QsR_ub5(up9dHC)4?5;7v{dl%|fHBRLe+vKO1T->Vi7;gX?t*AOS!XTrS-h#-
zAjk8d%*3lgupJTqD+6&>sbVdpg1T at fx9kl*czc%>#snmOzf3F?Cj=$Y9_PG4`|<oA
zccmx_-*PaY<KR!9fXPHY9ywqNWn;Vd3j98&jH1s|2+Hhm=k%f<dGo5_?Hzyd_pBGK
z4oU;nEwhjxAdT}UYe4g%9kH7X_h0($zliQlHNi8!B>20}Ic8h&+k_d4GPy>vOl1YY
zp8G_8vA+83J~^d>pGWPd9j)nPc_k0Rpwx4|kv)U;k at oVzNz&0O(P|hW!ik5U_JvPJ
z%i`0m=}lFl7jLhRAmqDLr`J$F#$X at 8V0C@q at Ba~P0W0HF(0vnt2xTr%ZK6#SRfVW>
z0lQPefvvz2-&l9BO<{|mzZ6@?7&nwpN&rjIL_A+<X^N1MjV3LrUZApq2nUVYjd)l1
zuSE$3o+5&}F2|*R@<8}sWm)0&ap?!ZuOkff-p(7*fAahhXxPu<3KtK at 60tbpA@JWv
z*&k<fM8y*a2nKNe6lyut_0cc+tqH~#Jn<)JgMkL at kRKIHFNG=tn>YXI2m23FCO}7$
z^GD at 7%zQNOw7Nm$sn!=WT_t%{%2TvI at +_+m>1sR*EH{!5vRAGCc_Kr`uh>hDJ<`~~
z2Zxh0`j|aFU;6E at A&Swo02RcpozJ${E$mmw4=cD=c)UKBY`*`{KmIce6On-;3yB7t
zvqb@&2Z!B-33O4^dsQGpqem#y;ouSr!R|?c)W~fAkPcQQ*BH(t at Q=wD6#`O<bQ`ME
z0iNeTtYTSML52eip<hMz_?|EUt&Vd6(C*6tF at DKHtA@m?Iu}FQ<D3EnpYZ$w|Hpm0
z$UnfAp0)*l6q*hGB at RY<zV(54eqaoNhx!73={D^0cpNCjQ3Hc7dCsd}J4X5&%p7z1
z8F%?MT$}`uiTp&j49*|J;pCSNe(pIRmO;>Jn{UiVnh$9&J;TL()C7WnU=5)Sod)@e
zgG2AtXUF+F+V1hp9$}SL-9*20?6%l-{?Hq?Q^9<g9Qfex{|y=`scS>dK_lWk4<~)Q
zJ^b|A9R6_rS)^V9eMS7diDGNKH?*~{`5$j$Aj1I at nCb$aiqLw51k at 1)l1s-gw;`Aj
z;mo}Q5qbl{U3eueA}-`rEznUhmlPi%K)-q90*V4#6DTV%FKSjGEut<Pf?wl{%8494
zU^^}@!1i%&#d$oTeFA?tf8Np|@bjth1_TJ{v4lT^f8Fk`?61HdCo0AyQXC-d3b1!n
z8nVA<yz2Kmj34|1zhP&H58NX^kCgws<1<K^ng8E^@W1`k at 6h=}7bW%;non)-jlouf
z`B2i*whp&K$pn^5t^oWmDZiOd at k~3Gkz^(K4KSxydX=Dr`hgzk&#s!6D;J#3`3TZp
zL{4N$4sU(pPrUtMFM2&b86rp9KeGHj_=DjOz!&F9<jcxF^PUliN1~UWd1R~>FyocS
z#n#cq1X?c8OJfKWa4 at AvBt#mY;%4dCFTjc`3h+t!;DcT3zVsG{0~-RTsk-pg`lEn~
z$iM4Q);al|h5rfx>UJLGfF1=l_+Lc?+l8|RUL#pB?D1w|JB9pm`yq99&;N0s7OX7n
z(Yc1~i`73=;p)O{mp&%&$0X{TJQ~rSHa5~doIj`6bqv$qk4!;m&~nF-KtuV7veykB
z=9&?GGSeOb<Ze_%3Xy8`$~mz)*e9x8OnUKw+Og{mb}E88tRQS5!Jp3G8{ekD7u?dh
zm6pD|pO-%Irh at W{`Mc)D`~NCv27*7SE(aMr{Z+q*;otuSuO$oMQP9GX&R=NXGMonc
zoTy;@N4Lh+?ip+xLhcK#Z}$RYw at 4E(5o+nM_RgOd)nT8;C=*bdoOEDyHJ1t4F?J!*
zsil+6$q+2RZx0L#*ejsK`6&thW>)h5BUcq^ANXIOzD9WBJaS~Ay{kqI_Rw0z_vo^g
z&Jza{p!0KJlQ|Ex=VL!j7jKCK=TzX&7E>W=Df*P>kF)7DeUZ)GI*EW35B7rdXLQ>|
z-~7tgykpTkY5qYALKq3=5YrgkFtD@=BbiD$!Eo3GS%&kr_x~-u6QBrMh312PNS1-b
zx at _-4KN)T6@@6DrB&xQ8c#Zza=KRfkmXF_dF_+t4+$;;%ubbNWXYyj_Pn*Z*Jd&<X
zLLRiAQZ>gmQL}@vaR4F>Z+xzehcC?graOH3d|z%-(t1H5dZ8!p0oZ);+ at OvZe#1|)
ztGA`YoDE$)LL5ly1Ll~J!+wD{Tu;s3>=Sf>*v$iNj*#5KDjOQ|<H(d{k}|;c)n)k+
zQ;vb(urIIPaZa%2g0dR$cJ<-ySFktLFXT(=8Q>4(f9$8~9cn?DN at T_3i02>R$CvJc
zpQO*DN7<qkC(%&fp)C{jgX;X#UztT)R^$mUe;bu7sxtwel1)|(12}fLJye;opWpIx
z$(nxUkN*<Q2l1SQn&{Bf{w(zt?H4U!>^%7Q6;^;DH1Jp2Tg->RcLe;Qfy~bKW@*3Y
zgmR^tm$H6 at eL9@a`?{BX{g1zmXvGfJ$G+q(xBB{*^C)=d+D^4g?^oWw`TT0nQ_tR)
zsfibNy1IJNU-#P2Lc>g4|MI{7*CSv2##=x6703mxE)d6~$M^`jksK&}Up|g1Qz&EE
zBT=P+!Pt#h>n)4$GR$F>iFA at Cx|m@!Ie+}fmi8op4?Z*b_66-7 at Mw3q`ttU6_(za$
zxBsah1Nepi5s6NqJqN)r*B7E?f<LCOBgn&kQ8 at tc^&a|z5B%QOF*nja98$^{bLzb6
zH`6|mAV0!SZ4%e~UXvdHL&4|?FMs<>-ts<b1b2S+FTkJiT at o>>!*fhEA%hmF1})mU
zqFtYE8YyW)xxe-t at ra!E7W3h0N6sr5A&6gk{zi1mr^)x0XA}2WDOcBh2>Cdqjww3y
z=KbvN{n_vT`QK6O<_LS91D~2Y-~j(<y*><keHOQ52l7Qxn1nzIwz{G!EspKhuhIPl
z at gCRT|KmSD>_u-tXM>Nm>TsBVh6qj5M47ihb&P)Lbw(^#SpyY|v0H46=O&?yYe<nx
zn5cNcO~{q`ow1+An$MiNM)tbz;XB~Xa0>Gc_ELDFu)FyDL3oV(4t`8hoZkm!_UR4P
z*faW|%JWCU8%r<6K3jZapday_ZX5^zt!_A+J3jrD-}S41Ot;%FzT+<*@ZW!()-Qn{
z|19RL2?-rPYWN?m@|X_?1yVMG|AQYq82w%BbClqzqqu_hEZ|SIpI at sW4)~F$^3oQJ
z2L6%u>hVUCp}}8SkH9~w>Y~{Z%@@95jxkzIKKT}zx!d{Q;NfJKB=t0A|Hzx(3-Fkb
zL+3ma5MQK<E$8oj2RpAzKepz1Zji5!rsLrjV2h&o(q;tr{qDa~7kJ1I{3iM{W(Xa{
zu}BoXC^k;!94%%_`(zF4qMX~Ju~#i4j&uOFAW!b50>B)?qe%PVD_MPgLsx7p*G%4i
zm(|$AH^8fa3*e3U!SGkGFShgPA48riwm;nd$6n!MxNOdjM*@HCDJZok8hfe<a0PzX
z`UCtFIvGw9jXHQ{L>n_7lxGrEbdTr%+B={5bH5J(ru0MJigQ-e6tanGMpix-<s^Cr
zvRjx6CW7I)kA4ZUn}R-aVt`*00>$|g{Mq5D*ge3H&My at X607SDQR%kxx8`ZVALbK+
z=MwwyT^;-#`5V at eWLttpX71O02p=E83e5-1|I@#y!S9Xl{UDV)bV%m5$@w3LeLDQu
zhSPk$ksq&jZ#bthkL at 15G%c!KB|^qcJcoDw<%b^hy|06n5r6R{HUX9cmjWw`211tx
z9ulI^ePX7r(gCt3c at pev>0~Gq2>&necT^wIZOrNoc&n6?t7mD7$#={XxVL~0ZV%?w
z!&Bbgun%E>7xokQlaG1niTEA-2h<)GF%%oM_Y98>V;Ai=^SSUF5a;0lU-T_M_s}1F
zJ<1Qkmwb at yPnw}*lQBBj%4aG68gi(@0oo4!|4Ns9D{hm{A4*^}3`95Y<oVa&A6-=q
z3AbzDue7%@p9FuH{{sH*_6zwF%?=VCvIfrqV<ak(@6(F^h!?-{{eSym^Su|n;XPmU
zj8`dV!TF>4k7Rbf**g4SJ01CYXdZo8GW#&_5$QY?U#-H2F52Wsso2TIa(L at B;TXae
zLsVjp(2e474Ud&(2!?mN)6&52#N3uS66QiCLW9XHG$s&^s(^=CR2oD5c=mc0n0I2^
zVSm8k8~J{<rU&?a<<bNG+QxMl{D3y)8f%rYKZUU*n&xWF=Na_#Q0u(tn|}6oPyHFT
z`r>W0Mg6?Tr)F;QvylIh{6;7NC%8(S5<h~;ut~}tZmWcMY46-jsY1sdjxmHUf+Nn~
z;E%Ld%%=p;sh>PN0GvmJC)K=2Bq!E=LCk0haqqIXbdM`U8bn?4te^kYKmJRD|L^|s
zpOJZKctZr^;T*vH+S}Xh2h|ziXRCscA6Lv9!5c3KuN;32o=VAUrFwM*3`v$Ya&4Jm
z*H}ysfT>~vF-of at t20C*PQ}&6nJAFOzz0QD=|V#qg$sckv3i at pRDmkMcdh17_B!Os
zBYs{^-hO@;^QVA)g5Syb0KZHiHrkNm>=e1Y186nVOog5p%SNsWTuJ)Oe3-&PCl61R
z7I(UR*q}-Y9x(*!qDUG;!xr+thyN-Z(=!j3Mg_taq)~W3ua0hXd)x5*t4YObL07yE
zGTgvFrM->zi@`efMdCyFYv3QqcWPP0+bO3kLN(10w|R${DpZX_S`B_)$$v=%ELag8
zg3 at n@eeoRK#QfL={43<^xiN2Nh`NietLnz8z at d_NR=t;!UoZdN<GH`Yt}$&xyVqg@
znncGy#q+*SJLx2^MLNJhIg06oCrP6*_+4CRZ1T#axO$8sLc;{o^M_EWYLsD5_Ie<J
zP1xhCOy;-TX2QG~PGElKIq>{o_`9!J(Tkc+Mu8AI_$<rbx2d;h1^%GBIyNzB|6o4A
z719D%fw7!(zweRS#&EnZ{AQl29=`FvCjUx)+4Su><cs*P3Ic3Om)je3ZX-vr<hiAM
zf3&wvo_~NJ2gTS`l{~n*^XJKLnNO?q3H%|gOI<`iteR%*d8uSmH(?7)W%HI)wGh}*
z8Vmf~Q0Bl1 at C0xUQg4o23+8PCJIEJr1cWQ77raMn2SabB9w+_Noqp5nCCpa6_5;5c
z^VHtqJAG?RmX5Ky43UUameeW4PNL*Op$jc#;=Mp1Ju|j+S;iFeDg2w&(~59};dsg5
z^PSRvlwdDgi2PUi`?#{QW2YB;pIKR~8ylx=gb(pK4o+9q*g4eBoJQW5k2IerP_d%d
zow`3IDhz?BN-nGp1afCqp_BheeuwxI{AY~E53_o>*pA9u(c6IASGF5743C2!V!$>E
zJ-`A#&L7REGoQU;M+1N8=cAgxNGp+Vrp#jDrHcEvBF4e<e>=|Uwh7SbM9R;65}v>T
z<WJuIF!J&I0e<0MT^xn>YUg8vkFPQJObxE%lwLP`@4aH4h!PapF#&c`z|&YkoS2TK
z(>#IbEmU>D=gzBBLhnI=V2l&o$q2mLoj~Bm{<R4#T79Lolg~dya+<?;>2}d`jyn88
zKHo3E`*IP#5<R%?bV@}Z=%f}GV^z7Hc6P)mdoh-QCLAIr&Yy-H3SQ(>s0tBGby82*
zk&mie;~(7{@u&NLcRpiTOuNl<h&YYq!Fh at eUWm=S^tNSt&ltqSva%eeJ%B%C at CE-w
z)s^7CW<F at t;(q4*>G>D8pU97q8Y^{W7=i<Vn|uGmt-j~AIThddfATASo5Y7QA5m;D
z`CY&_*f*YUwxid9eCcK$;%%4Sd$|X;wG*v&_bfjclQ0ke({qH_n~&gt2{`A%n`yFc
zY^)Rc#09aRl!vbx+1;aGNF(5+u<b}gdx4-RP&a{t0_I`2zXN^?n-k~p7yTOg=h7bq
z><jr$^Z>ur&f3Y<+I!@yo%0UbFToS%?`fPmzKz_L1Pa%|Mb8`m<cpA1WnPLSEAo#U
z(QYY={}jJKbu<r*qlh at U$*_;}o3M)-$PX7)kt?LmRC^luSqsp(a{gWO!4V;Nj#8J3
zn60lnvR#2++{Qb6jr>JNO+i)tjbr$~Ou+qJx9ZI2H{Si%%*;W*#RD7#fAE|I_OT5=
zc>Wss+N5c0%c~E^-q1b}UO%gwNSXQN%he6Aef_F;hrA)Rg$X>1o^8yQEgLMT(g6x&
zY_Id7tDGgrmTK?(B at n1m9MTXEM0?)XdGU%4Ap}(*C>B(us|o=}m=9Fnm&N=^((h=m
z`}iKR1AcJTF%?D3A#r55$BOwB(;Q=+sZ?{kQ|(uYYRu%}$>1V at ItvX4=HiB?eM-Q>
zk~T#y+vT)gtP5OMmEVs4*!D<d0qVNqtaINd^26;%Zx8QBzhM{rjNlXaO at 4Z{mjS2N
ze1iEbId2Wnkkpglm)j5IOI?g2+9I|@Tf4s4O+YM&rSJHs^MT3*L6H2V;lDx7m`qh?
z4SOEZ%2yBMhm)V(djh_oJ`kQWj(XCe)LY|E;~L3$|Au?4O+dq?iRr8<>q`m~-G&cS
z7N$TDXCzT6R{V_vp_~_&6~HISF7Yt3g361_3L+iY2?Vg#Siyarrzp@!do%Ox76ICQ
zmAzasi<nOC2JF`<p1YcBTa))V50xI4QvGSUEj`9E_#6t2B7Y2zNY_mtgE>H!0{n3d
zy2$_V|4M!b{*(WYb0`P_v_KFAu!6jN4g~{{@2AEdx;oX^=Jp29XB)ex!6!ah;Qx#P
z{z`kR)dA+yX}{}S9-vpP-D6LOYG<V}hQO$?_Csmp&vg?>7Nk)#Hi2LMqrbSr(|(2w
zhzHVq?*RXT`3>y1$Pc$KjO7*cbqn+9*aPz;xfZ;$$}sxqa5d1^gI9E7upGMdvuxHN
zoncdws$;kPMmFy&9S9-LZC8;L6A0o^MOMT$g51e&I+P=TR8Cr~pi<+q0z{$RSWt=Z
zHWw(JA6w|=P-y4I|I4pe8oh#1xKCxHi5q6QwV4aJ!d0 at fecsk5T7vV}@zV?>Z0E4}
z;N3WNj>jnQ;~~L`lIW5AYPU$?KZ?Js2((Hm02GL!$Ln(+^c79N)Fwf59+nvJDD1XT
z0}1}yNEu!+AE&+6d^+v7;8UJ|0>7u{X|Ruva_GvrlvNn7dg{6fc#G>20%*BJ{slI0
zh9n`!F+amT*iI6jLVj%0=Na;=1pAKp2KWwj9@=u%=E~ih_MKrSX#!vTEo5`#bjpa8
z4umwSQ3FweN0D$wfM4SMC^s=3qJz3wfi%)xE9g5DkA#CB5lZ~8>;QAvz4(T>vWQcH
zUTJ#n7%7UY6;G_ at wx+>+<ori{DrfQ}{t>-#2)Ym|+07jeMBs-<*?;cie>6V`|8Wk5
zO#mxE3k}T6BJlY}KHoMt579rsU-PMQCUbzl;eSbci}@7o?`KnP!Ed*(T2fOQLr%w#
zb+Ms<p6X!&5qF{qhb%x8=w)wxA43=zNK3&>!S49A;yDBM2aq4k|IR{MxccGe!*2&@
zwVNOT at 4+b=s1oiaJd7Ui;VZtA at 7FWeW0%iS6i5?zDpklz>!b at s^SQcE*ln#LOR?v|
zc`^P|NkQx*z`J at +C3RI<0m9={FLN(Mr3Sl(P>pRB7tC^5aR-R at Dh^;ITxBpEW4;8v
z+O6iyuB|vkrKY>YwkAGT=<{QmQ=UT<`2U<oLI`ys(ck#LupF$53P#Q&gny%G>;H{^
zyjH~JFoAgTTC7}xc>W66q`E9O9uKz<2O!}>{qy7HPbd$?^JD1^{8{Za^I6mWrN^mn
zWi7&A?>WjzU1?0oaTo%DAftd2ft+#x{%J7ytb0FCn&%<p&zN`W8iR>Ky%|(z3>9(0
zYk3nnI_XV={TlNbPs^D&uuieHj#c98d5uE{mWk837BT@&+`Ii#=@e3d%ty7N3o&hv
zflKsaWk#SDL at idPW}coJ!=EJ(nGw~VvQaWy)eAZ=>V|NrG+bG;?ZU76B7aU-_6oAT
zleaH^D~QV1Nu?QQx3NH at Ia3eQ%zudUF_r}UOP{Acq7WbMC_W$}(h5tOq}}<Cq`7f6
zlltEx3w9L9MGOySZ<fgSgeALu5q^;nu%`@Eli3FN3;(0fO?5`9UBP^^$!7>YNC6~4
zRq0l?>jyHX85sGJ8GG?4{wYJypo1hrvO%RD(G_s(=l=2^G2Tj==Z(K+ox=`&W(I%2
zJ{^9H;VP=1u(zHc+CJ>!N|%JwFrT-#Pgk$f%z}9{$(Br|uwZ#%ye_F0IoCL7RcB4M
zLuZCLqzUM#ohK<B;IuUjTy;{6I;t&5`awLH(zH5quFguXA>`JG`i24$<n at 5usvTeE
z+O2R*;jGur(2hbrQmkKH0YU at 5T>YT6rX}H-2kafzRY}BNf})SK*Uf3YI2+2m>QkJ<
zdxM833yr39#TwPl4&i@{OA`J`frG)?1e|$^xH<(>78X8#J&hTWAyK!?<V=p&oxhn+
zR=bM!dtZ-p-s*8`qdYQI38 at x@8}=&%1`Y#(QGUV%_NRQ%`=PXV#(Bs8!2E!{NL|5R
zG0vEukst5s62-*k at E31yKVKRGfX_p{LrjLavUbabyxbIKzEhgpY!@oH<k723m<Umb
zjQ9yud?*vcg)nwJ;Svax7q=~_d>kIByp|U(Vx{-OJ2g;4LfZ)MZc??<nHsewB2^H2
zA4RoN*fg#Y!ksC7?8ILwc-Aq7t2djKqsw|?SWVhXc;?obkE2j?f(9~^|3+lbEKHb>
zHW<<V1^?+zWn%LG)_>}V*p&%5e1seqTAVXGYy=1;+Yh&&Q^k_=@V6TH?fkpuGtvH@
z^Hz^jRJ!rr3I6du0Xa(+fRxzSIf;-dCu|NjBGK}ecnFLfln*&_jo&%L{v_o4?*{ng
z^H<0hp9ybo*pHP;Pt}4o at mg4o8Mbm_uop^=vI|*+itIWB+$VrHizw6Z&42pO5{1rx
z0#zQBiQz(?zsKa&3<U1Z>f4cmxY`PUr6Q)0Q}dZ=C|w(ZsZli)ZOs8qI|IbEvNVHx
z_r;p(TGN{i=B3<bl)of+d+FZ!v&u#}*N^WBNW`)RdPC5t(oZHD3;vz|7XJtT(f_dh
zB_(AD_90 at gke_T{DJLH%IgcDjWc|+Z4>2D)JP|yjz0-AG%70RTTbsuU{P8IK4#m^B
zy3^)<j0sH>C>GS*+T|_)2{M_&e?$Aqlny%lFfsj!Fto8c5p>k{piEP8K^M&y<jbpD
zppLo0Ay9lR(!FXl=RQU<wT=jvM$H$cT9CVGVzx%-HCs at t)z0Pc5!D~D-)MT23Eccr
z`rgHbloUTgQ^+tS>h)w6Nr#ja$lm!}84Cu3g)m3;gmsCHb>>B72xDt}ZZYtjleTN-
z-(4pXvGDB!?St4v5+}?rPQC*^kniVw=Lj4Q8JP}8M&Q(S3;w%>@n+o<B7Fe=);}Am
z;Ny1_Fc;#<81us0z?fFwOxtXKMYD(GwN87*e7v`-(SCeL=De2r0l#?~#lG(O(>w#Z
zHt<nDP3dyH$qY#w!^{-m0)xE0HUYC^UiY2n4A>t=enjev1N<T5EQBZOhB_$FLsO$P
z6Yc2Qi*$>xgR4N=X~CtW3wz<>K4^S!7;0M at 9j^hZ3Jo_<&sEw&cA-2JNRLo5j^Mn>
zqp1k6Yk(Rb2{OBrRQmDBo0>wLfj|N&bO at UrZMxc4W-HhP^dJ&_XnBta-a9$ATZTD^
zT5PYRG|6hpy at x+>i`33*D3&8B&UCoIAG}3AE&ZXv59WpZNF*2hukv37kzq&ieiTO*
zb^*sQPLlm%8eARui`$Rv$q_U4-f;e at bZwZA<~bmELi;1<g<-m at Ig^w%_%Srzm3s5y
zGh&Ptm6Y0t(oT4iA&8af-RgaASXsET{46unn-%zDu3pEAOg>*8z?VIkBF+KN-_8md
zz39|!A!DfbwDi#4NmC;2xU}Z#y8CyMr*HrbMJ{#wRKr`Ip%6#M!kVxJuB1<r`_Oza
z77`p(AbyJK04Kt*m4>}e>{PwvTYsMIe$RQ$JNQn1O3ccE0D4wkTY8dr(^KNZ^66$P
z7~#OsB3`p_>f0eA(6OvEL5o#kQM at 7o_wtpHECe%OlaqnjPG8ZtjdG_M%R!H=93g4j
z`B_um!GH8oIQ58-G at C$L0e{!;B;KdrzaB_WEsI)@$FdYVy7Tw;mfqoMwIA9a9X=`e
z^d2Y2rk<EgSxFU at M#p|KG)y3ZR4$*7$r$hRa<|^W{|f5;;d_BH1h+M11-Hl-_yhk{
zD_ql_*f$OEaKhSueXA$n=RrPGwQ299!wrbik4M`-n_svXM#Mka3#qv%_joQ+zqSMW
z1U+Z9$eUtEmbis{_!7j4Up~P9O;@_}vuU4Zng=63m`lU)B at Fst<OLg_T?*&b8Nmny
zQirmdV^7i_BNUgQ9J1a5Gv-}f_B_epVL18l?Si%scH?#kH!T+L>I{1RP8MdM%7T;$
z##@4Q3xpY at sAXW7qSFY8(L1XA7sWMnCv8d{(WINe4ijq&&H9obrOzLP2SKS4CDpZE
z?Cao<(~}qGQ?$Qw-cmc4?aYywkFE at dHq}*CT2k(>!h|(O+6Jsjtt2TPX@&rXB=`+S
zC4#p~C>(a(q2BM0z&<kT+2<$n1OHznkyA-oOL!yOg|v{{f>L-0_(ZE`Co)c+fe*}3
zVk0(t at bB_%ufF&5evPwb at zTs=WIHh9h#6AEcvUv3u@?YCpnaW?q3w{Na7y0cNKKIM
zBmzQp-q+C=$5=CdKV at Pz`tkeO^33mH(%sX3_IF?Q*7v{Xum7R&fBYunX;=Y6iZE4d
zmcLGvA at oR7Ej7typcPx5613z0jHE2mvGh?kAO1AHmuIdLKxiP`r;ENz6qu0NUEfiO
zUz|rB)Iq0>|LUA{#bJ>^w<b_2$(p$(?AJxr{G;Aub<5GzG4Nl^Ck4+^`$vbHa$Yw%
z)Q-+<@SDMJ!m}VB%vT|`>JeR)jS#@o({pn at Vo8Db@IL_Wh^z<hD+&q at e2c@!Ar#wL
zAwNpb;6Dmg;NQJc*5%xhsEtVB{Lg>l6>k4j=nXp@#Y`UeGMZ6AJ7XBxp7!#$y`M=+
zZ+y=OfAigc&6ztde&c(Xu*Aq*&J$$X3?O7c1kFn{|3o;T^XF3Xh{&BE%e@<Y2`*Fw
z*yRmk*++)?T=1k<U|&p`U^?XsfAifO$?@lZ_m8{a|Ik1E%NySF*FX6B_dMwpZ)Ys<
z?VtKHY(rqf6jTb+<M(530zU`YqrT=?n>wA-bTs70OwBBt)azc&eNcB%TzprBj{-l>
zd~v^V=$phAv+io~rE+o00G07i2nhdg{CmR`zS<#xd{A8wWde&BC5PEB0)(`k{ie!H
zF|wm+fIkKQiT00D7u|+S&Rc3{Yw+Wf%D{K~kpO&Flw6Wl?zR-89R;Rh^r*+BricGO
z1o&_ at 3HSnkMZgn~@8CG&-*riE$IvN(!ax3*8XU}rEqIU|P6_#n at BUT5|HE&3 at 9+J2
z4q}>+`Qd;5mtXp$zxejoyo0#FMxL8I`bU|tO1?lZG*HJOOXp!bDqX(kJsxt!6ef1c
z5CQ-#U8C?T`dy(_{4K^b-S_#gWh)$m&KUgo9l!XF at A{QL=Hiz#2k+9CzJ<w1oLL6!
z`F_p=(ovX~Jd58(SxrYdFqP5sxCH*u{Uz2U7vwgBp_#jRbtGsasLeV`PK>NAvey&A
zKcJX2EZu(W^^R0GcM2E&=^~J#xJW=*bawSEOh7~^tRPEo7{a(xt;Nu6YpUl4+qw1l
zi!qLVY3Bp~o%u|(zvaBV&&+wPb{+ at 636GIKq(#+IeMK8Unm~9V6H!wjB`neF!e<$p
z_Hgf8CtsNF4Bz-a=JS&lhSS*LKT>|;eC?ROgrf$ZI8s1GX39YT%-sc$U=MFU!G8PC
zzxjuMV%pf_Ui#L%e*0 at Uk&0t$II1s55&OcV`GZnj=Rc9;8q;9RDf$n#26uuB5et~I
zg+J%8RL)}}pl}!g7dQM9z~6Wz9h?NmJB%pfd8FRu9m0`MaDe6&{wevnD_|*-hB-vT
z>QX%Fdc_w1i{~Fp6U#SBnYevx?B({ewk3pXoEN!d?3CArsT%gUgn(3mW)rX#gt%&3
z5ZVLq1PCQN=2yk at b4Piq!7K0w{>6Og^yswTO+GE>U4j1#^jE;Ai*akuAC<n*hSx>)
z-W8)&$OddBVmxFbFIliDkgC!VG5ITzswlYZU)|NOVXyeR!*)9IEp#XTd3&wkC9Pf*
zNIQ~X>?o7ery$bElFWI4oHJ+s(wDyV$KLWjxW^XryI*1EHe1-(DGzQ*liA3rky#wE
z9bG_}m at Zj?lvPwv{+EQNi=PQ8A}<K7={o^A7n7j)Cju0Jm*R8>b{0H^pItSSrer#X
z8|e89|EeHV2zKE+4WUxAG=#+pDhdqAPR at S?e&<=mc}{ZsQV|RP9u_f$0B6CY5RfKN
zT*yPo4D|tc=)JuCaQJPO!l;AXY;gY3$h|oK4t~`Bp7TbN!y@>M?ac0Og=RO})4)H<
zNtstlS{c><T!=6MywJKI51hLz1N##Gkq9nm;16{UCo^Be+t08kEh0sVnbppTk|?r3
zzAh3ZDg{_fz~a9)<x$c?r6EfNsCZ_`2`K<Asf^M4#-IM3S8q;U+Xa7p at uz?1&!91+
z1{$38U|9isB!?9|kwD;0Ph{K?6rKR}l11G5$>a{>da`N_=f^jn$3PE?WusCMGO20}
zRMu2_j*7FIE=B{AL$FLBte_i0S%Ld!IyDmhTP?M7{v!Nv;Ot;I%J#KYs)jn236NKA
zL%?JLz3DWjB?#()cI61#Gd0wta`-hIo~fia9h=?u!0!%EHTk&IHRZe(d`6uM_SIXv
zQ2><i#`Hy=p?aLu<F`^&ROKJle+)s(5wRE+#E-ZcJLNm2z)EL?fA#<d{%5oo{*S=^
zMC6B$`qYcE?Sc0*z2~fd#lBRTz at t2l0|Jlxg~p)IGd=k6FMI2czwP}D#Vv%Nc=Km}
z_u&`5{@om?!TBBNoCFjxqB}iv6b|Tu(3l!F{Y9GWOj%WCio)=D-bso`D5w at x)qqix
z4LsH(h8ytM^|ak|6wf>!dzicf!8#V$1P1;yDcFF2WV?}kX=&{C+ddBExwz$Y#VPV2
zY^r_~10FE}?Urr$m$b5H0+|a$AaF*EF1oqmPc+!`x3ba^$cJC$PS4uQW9CyE8)^Kr
z+Fv<u4KKZ^!iRc0`*vo}tX>Z89G-vdKI at LOmHvlE3KK{cw6pv8F#a3hdF(sheg*s3
zSy19Y`TRtFu+ux>2}kG8)&%I$>O?4VVYHygg&7 at 8E{qC#{}=o^f)AV2PDFnHhFAXH
zpFj0yewPDhIa5Ppo$mKNSNYQKfXu|8gC{9F2LI};c+ at 9`UaERQl at F*0dzwdfS&XKm
z>^O3}k-)zWyK57uDBxTyGXltu_|F>r(LB~UkKBGCf32~LfsZ^_BqR#ZY8YmsW6Uf)
z6ath5bQ2im0KkkDEQWwBtS|pxeVYd<Q{W5O^V?kG+XugCzuTKfsjKR|v*5Ex{ZMED
z4^76K+E$+5TDnJ15Ae9VRdZK-vOqCXZ^I1yD+Q>A79>#oKN4v9|26DI>^rvy^S&0U
zvqFASog_RVj#(d5bC>0*VFEj~Fl57Q0pbXr2n5h<2nli}v>e=mUNFpov(S5v)O_y;
zPo>qr|8G7_;DA9f#F*0@&VBTcGRhe76O~mt?1hX>d4i%qahr7YZZ4vZ+<Gdu?RIXf
zI~o5&i`#<VoWBTvvHde8Jit<&1IB-tK!t$J0uDt1SH!{!QWpi`+iPH6b?t)vKt3t<
z0)9LH(tOrAZ|-LwO%A()kM{E4QQ+qxsJ&tAYe?GD!M|XJ6jF|hYwBZx1rY**0%Zy;
z35X(olmI&Z_tD-kKN$Why~T)*BHt~J)&HqLuq5nj{^m(y7KIiocpN;OSm3$<DJ>Gs
z7e4)!Y}onwm%r@=zy2=tPe9&%e%=4=hyR&DzCZHj_fp>Fd`Wl|k`6l^*yc(7mxLGN
zT2fjy0?|-J`Ph9F*;Ayxxa>7`f8FRcZB%pcpV+@(j<=)$1N;l^X>PxeUoB)T4cQrl
zN6Rrbt{zf&qRJc{*EC(zUl)yba|kFFR3=bzkOP55p)v$)VY&dkG4GC!278bXzd8th
zn9nxnJtX*`c9!51McxEI`x at fJ0q<)Ne_kCr5aJ2*tJ%vhD$64B6}56 at 6AN;*Te)Hz
zeo8>2p>c)(^6+)jUA at v<QKseEP#qOS7N2kAhiG>DkO5tu+jK!o6q<CQvTI30R0q@%
zN9)do*}4OI!7$Y;Mx!J9fBAR)3Z-Fk1aOXS|GZy&=ks6tPNaK|TE_Epb|<ytdwl0F
z;s0;>^*_!}kqc;!?p?o~M0=zI+9|(8f!0&k at E^U_OQUt{JFxQ?`LE<R^dIV9DFKaI
zWD=fHkyol~!c&E<<H#?nU*ju-e)|j{by>&BVhRCU7UWzQ{D%oFil|S6Dn<mnw^#gM
z^>{}k6CPWb57@(A2re`D-R-dM?ay6Zli-u>ZBz}ES(D31?TqcrcmQu_2Ch_iQI9=z
zYYTp;!nr!IEM)Dcxbzw2n3#u*G@<ER;6FN8atuXCpm-SY-0%<gOBtv6dC{;1 at B{o?
zhkqFP;#ZfyUF*$QtRP}RHHEHY0p69=*m;2m7w}1C2#<+Q28}EmWvu5?FC$Z?WI&q`
z`7%?xIXelm#D&ABO at dM~|BG?%^!!}&elO7ML{HFVi1cllp!*~Zz`41m-zW=UUyKwU
z`~PzO4gB`}3-V*W+2Zya at _kU+MD@2me_=bjKEIGZIvL<6aFv`;P5p=q{C5-ZT=z-@
zCON2E0kOd0pidU<_wfx2=K0xxy-x!X_+w5{T7kiT<uTGBN?j|#ryBcjqR~ctkOll}
z!3X&Z|Dg7UF>%P?=dr^RL=qk*&wuWtDej0KT=FbUKe+R=k*U%2 at R<<;+7U~TPf0+d
z1h9*Lp?xc39)<l$$PfJARv~QaP?9R1HS0}Y(856(Lfasq1VKkOJce!`2s~*515ap#
zBe7*1B2_KmO%VYFNnNA&crN#Rh3*I``Q8`Iyu at W+@Z%IWX(DAij0xnlv!D{*8TsY&
z!-~`4YY%>wy$bm!@O<Z4#ddmA!A9N@@~IrL^`47eW;oSd6PTiaO`t?k>q5g265e*~
z{grR<)i9r##SO>6qQZZHzjEF#`0T2kUGS;1SvNVaw)5YY2rH?<Bw5D|JOT{B3drMF
zXjL%3>IaGJEH^P7S%X9XGsz7dt5cR at 5{vL}{nPa?b%``?Gcdo54=T1(b?{DgV#(Be
z(yN47DEyeqoZ}|FFy}IanC&AgXold_fDbEo+ISHkoMclwyu2^+A?ocXIb993d6d*k
zW}4mnam0w!_EqhQOO>yX{TJCYWFI&GpC#<8)D?9`!9I|Gda5IBZQVbqXSk{4R$H}{
zbHHEtKaB}=MQG at v_TI1;WygD$|5tw7*uSuxiF1Q91pjr!$}k+PNjYz9=~~oI&#!aN
z8&iyw^G>wivvwbpItgcu-T12kIpLcc<qaPGLj-!5Fg*htIz!2l!VRe$iJS1BDRB4y
z%72IcDf~;?z3h1d{{{7aGhjbE{EmE4opBMhZwvB$ZRh`FH~=b646}J}6A at fBTWn#p
zPfz9$dtSzFmu1QUA#%R7mGY4~h%I*t428$r#16W8GyD*5PsnYz48N6ecd3pZX><;!
zs%f9U=J`5b#`}m5n1F_477^-P$bn$Xh-?cL7XZ1h`Z_nkpe(57Svi4x&oW&G)(y|E
z4!06~y4uNmIHUHqp#8yo#0?hOulen`K9&!ribMPKFMcM19tU>Nxb>8u`W<Fi-Qj6J
zOIsIxStP>X0iSsS{-ggV at xLPWfWKk>5bV?E7wpsLcks*qW6{t#UAYB&FCq+En1Vt{
zMj02D&=B1eVG#}xX%q?*y3kZxS)|?Tf93b&uHhw_Z8If`-egM4TCBPnWVxqT@~7^F
z(9M8-I(*zk*Yl%k(>z~31n~PhZUTE;XwikbA&j7q*zP#z-o{d|{9s(@OMP<V!u-L1
zb-0z_<IU`t<Po(qa^9uRyD4>b<}+rw5ckde$#!A3H at ozufd40d`~T&%N;Yvk;)mXV
z#0SfT)AF5x|J`lf!~f6tUt at j;_TAxELzM9^pC8w4%JZlH*KUQe7w>=}tl819g{7%`
zX>eWg1-atz$xc5rOeAp{HCb0?cVGRT1LyuFcJI6j?OVVf!u+D=EKNJ*?N>Y}9LtWw
zr?sF}R}mpc^o*NBCa~c`83;D9zyeWfqyy5a7w!EszdvLp-{%PHHl9~$ubux8d}=@M
zB=wVGP$}a>L9?fv*QKsS?LVUVj5_I!zZ!U>fv``69UL^Sm+1ZdzwswjOA+^=!MPX1
z9l1EwCI2n{(<c61_7;o7U&)vN-dFU*&I~^sz5;h5A3ydnO8L2x{BWbDJFeL11U!z}
z0;!_<A-S9>M4RhElYpO7hR7N+gT^$3RoO)bi|C9hBp<xVA4!~NqfR8SBJ+`<@G3s<
za&43DSG_uo;Yh$AO6Eb>uUZ#kbC!`mItny0Xnuwx1T-SFqyt+kAT>54>W0u{qAk3a
zulU>6uO0l{uLPeX;79N|<$lJcv0vPn$G+?Q$@`*P480D;1M)*-z`OqHLxq3t>3&4w
zLlh-FB+APTsstAJhkj81Vu5r{E<IEY|DSw|f%5|VaP at p!@|=ysUn5`O&xKp#U!A4i
zUoiHRZEa!ZNU^nTF^7#s$S5jI46H8JQD$=ZhHoyA>&7 at 2)a5H;HlQrg>P-Qj_{Cf8
z{b_2cU1NU9YP+{L?BO{ueD6u at 4xbw9%`^-_SB?gn+(<KlZUxSW{c2rk<i)9xc3UW;
znCzl|eRD7Hw<8IX`5f^4vPzg(t8-C1NVU^~&$_W6DaL&cnf9jUDOc8+e-p#WZE^1$
z{loT+NB!t;75IJg&=<ZQNu2Cp!oL<Y at n5qp58>b2A1vnhb<OY>*yHxyC>zK>uy86j
z^D(((2)>#*j191>(6E?8WDPxWFd#EbI9P;rEFq&}$Ke~nd-(JGRqL%N{6$kWp}he<
z_hC(bzAHHc^GR|#?A4sV<~gxhK4EY0uT9`sAm~<5dGTZjwun$l7jroEKhy2Evk6w<
zx71&ppNMbpdxlTn%-gqg4cec~XSJ&<oqtw)k$skGZ*<GEVfGQmKaK0ubVz$A{6FR;
zZy^On7!UkA|Mh&onsQnA&*mRk8QiQ_Y};msLOy#Uisvk_5By)axGbB%#DB7Ph{|$x
z867r<!Iaeg5nEpuzGNt722pzkqiq=fJYR+9^#&_{o8UbVzQTDxz1(}Eov<|kpSwOS
z+Lw9><_q?Yl72)X=7hIT*t==Los)9-o`}e62Y=o7K(Gp_>sYWhgv<1Zuxkz#CJx<%
zfh=x+IR7&MztzsZnRh$7Fs8MX^Jh6+ at H#+#EP4<8UrPJRjUM at 8ivAP+AOGWT3;g5%
zV=p%PC-hkJEj#`_*>8>iWrI&)exmmi>~lB74E~MF8p>+T at vAM>Yjc<aL{cUq#fmjK
zk65fD6AGslBg;;wZP#6|^*!qmc at 9AJR~D!fs=`hczXsq{ACLM-0^W6y!hAd;_spwX
zzGO^Igvd=IE7%wQeN)J<n_&X^R3|II<pTbG4UMSu(j9X+g at Jq&!LR9Uqp=@_oUka(
zXF6hLoUaY7g{v!%Q%k^7^Xdgq1}5B0{Qrgz{~>k=PWZp{$KC?}5&vg9b`JU;_^1D$
zRR(6+{IH1sFtj1v8~jJSeQg55x#9T_t<;kLs?j3VRQt&q at iz|q<!S81h{2jxb}{Ia
zDEE5L@&e#tFRQP#Z}!jXwfLBE&a0u`(LNfV40vf`kr}1C0Pqd-a`hY7FW$ap-cGQe
z{#lQ-ZkiQr+{=&}x)u0-YYY7=TPxrzpZzg2@^SukHqDUwb!f#Q+SBV?5`5I;pvHc8
zxa|#abGJj}dULnWQuE~q4~m|7giYu_Ph}%EJH#jaKm0{+;DlW1Ki7X))PJM@&9i6{
z|2yI*J$|A$D~7Z0?IV2?@>Munz|TsxHCpkXYl=-diB2gA{A?{Eje=lNZ5Yv#RQ-6q
z0htvw>ZZ_p<fguPLb!kJy75C$4?dG<-vj(=C*TJ2R`1;~ELCv#nqWWuv%uePriZ)@
z2X;GKTR377%@EEK{A_8d4u=~@k+-I|Ma~Oa at DhSSIDeSG7O^tlI$|b|7 at Lz{4+#wM
zM+0-vKhJ#(`?#5Y^VL86rV0P_L(=X-dyMM8Y)z_JG}xE+|L%#Oh(9S{ZZW^|_J+M0
z_Ga)O#lL^K?5i`Ytx<Hlz(7W@@Xe+ZPmSWEVd<os>gcGO{>#G{7u7f3Sh2x;GW8s4
zC!jOg(r|*|l&h!8zmNH?AxyBJ{@KA__st3p@}i2rySA_w2v%pao}Tj`2fu0mm at kJv
z(U$fiKW_3rj(_iy^$||;|FmhbTb9WN%r0OSO~?PA{>?v74rW6)-9hUA0spi3S;?=(
z9|)=jR+Nm>ZtUdi)f+<db?y1RE at M&F&L4J~Ap?gw#G<${bBLg`vI}e^M5hcH;WU=O
zfsOcrhg1+bd?QqwvD6Q8Gfb~Qt~W5=Prk{FaWZyM8hQAI&wI<2DE$!aVfFOMpBD2U
z6)RZ#oD&RTvVw+xYE?UKKk$EY!n+H8kLwTG&vQ%Xznw3Q@^iNM|NKYM<U_aHCC~bW
zKls4kmkIojH@%m69kjsF$4kXO#s91KBTm5oUh=zI^ujzhE7*r{ed|5&x3$>fKk>t(
zsPj$yYsVjwX-w9Ezb!!8Ms_Ww2b4qi<Hwg@$S)t4h at 3CKB}2WVJv_X08|SbEc=n0J
z#*nke{J*6Y9KgT8Z&yFPPMm*J<dW3cz^_)inA?dHAP5%iS8qSgAI&rT7@=JLKW5gE
ze9idZ75}v#MB=A9;luya`TTim{-oFU)=z!~m at oVzeo_=;&lF+8%|9w`miTid`CVYJ
z#XP_$Q~-Vl=!(U4bI|{*zbG#00Q1J`<u`AvqfD<LdUiMUdnSY@$m1>LI~@C78`^8f
zt2Rb`gid}7`0ZCF{xkivp7wMz9=@}%l?$3Og7W-_-Ts{L?t<U at S)#Es!Ed#*pVC#s
zMLkw7IBnryvWCPxsoY4==+dL%f5rb}Z*0SVO!NM{uciB)KA+G3umAH&Kk at dz_<K$5
z`|02PGv=5P6!>3i{?Ro1Dfun(@5xs_-%6*vZT$QS^F;s#_;*bpmSFYdhtHAcj0-P1
zZLHQm3wydzf5?uR>`Wxsn9||zS^bH=vwOTTGnphaQIjgPp8=EKg8A&eGGTuD=Y)L!
zv*BM$Fy+N#AxadT-M){Z-{t(r!9T{8Yq*5R^|Px*Ybwmh`8)Hiv5MPi)q#KX>J9!S
zevY=c8UK<%AIr`c_B638{0DyX-7kOp`yca?-(m(J!$a83k;!k7e|~v(KKPWwRppm=
z-tgZXa`KkM)f)UP%Cr!N at PDlslo5NVHF<Bly_&BS4%avP_R;~oy<h)^{LRxJjW?6I
zs<*p_WA{ear6yItJ3APk-A~mY-MyKf`7Zb?^W|n2`PI(=;EjA<x8QeIXSFofK^5is
zx8Tpois71!|KPEb{mp+O|CRm|#V=7HHHJlpaP$APY^}wA9pMN6(PVp_-!~+nr?8dv
zw*T#?AMxThe(jIEnJoZJWTh{ZP27Y0H}XT3hd;MR{^`vd9=^ao`_c{gy*hn4jQ at K0
ze)17*YXcqpL4I}jDoh@}k@>Vs06uhW{{(-!gS_7PF3fhncy at R`{ZH-w(f-AH&vi4o
z{d)KZkiSZG3;7-Vv~+Uyp at p7aV(_Ds4)D`Ez0e-iPSgH!{@|zle~3RRey%ByX1k3!
z53c{J_&d(8^qk}%{}cX00(umCSK0Q+p6)OF=2x=6n{qH){Ic`2j<{v`o0QL9`SRGe
z-1ee({)xu_jQJ?ppML=PUYGSktitXV|K2w}w$$~Vq|@e$r7wMSq02KLxN`Ta`xURV
zDnl$KiF%*AHyvXq-k%=Nr~J+n|03V8ecPu-KA6`v6}Aq6zbahN9z1{S;gzyfhtq}5
zFYvp)Cx+H4=MCCVv`z9e at GtS_cnF9TAo!1(f9U-2;jOjTFY)jCms4P;0RNRDFPmPk
zdH)w+0&D<hvJFK6_OTA~!<mLBwLRlMp>3adlNFclY<Y(a^!2KBnaEEAKb&)!8*pk9
z*xh{8`_-3z-Rq44sCjP##)5yoSa0>vP5)e{zdt3&>)THMn|I%5`*bUBbJ*c)r*H><
zNB-pb3;f%mZIkC8;P+Tv1#~mpUHpd$xcZ~|mqLK*HAR8oKjgn8zXJdL(QPdFXqZ)<
zW+nY6k8l+QVr;m&Krdw%0M#xE0Zh51BaX3AQhsU*eJMXle)<vT7l?K9&V~QaC+nQ@
zP#N;9>`iOe7pUi4YtD)D(U5@}ov~{I>_y$%g0~F>+MP7^YqTu}r!#@mSOFhu`k4Qg
z|Ll*n-=8h)p(`tGzk`2E_ at O-`+dYlv&z#rJe~bSkA)r)H at gMa!0{&~<n}iqSr^u=K
zdkmc1Gl5V+odQ6CXoP0IE8ypz$q%&2Ey~Xh`C;Z;Z~FoN=SsOv{I_&+2ERR62SY7T
ztj^+&n)7$?HU9Ta06OIH0w<b4Y|YDrt`ptu{qaC>N-OZE>!0_deqRr8_vSR1=TQ$m
zvv`giel>7bs at sv@-M%-o;Q6<E7?04NnAogQiUEE(|Bip_Kc>@>1(*dX1hg#J{vYRm
zwR<oX4X2Ik)?|-3>r>-6IOUT`RyBWY4goqg%L8LQ$A+E<x<i%uGWMq{KZn{Lc+b3l
zteB1YqHXQk2R|mzF;J_vb^hx`;ZN+Cz-}O at D8Nna#lB(FF)Fxlvqk>&l at kr&jBKGk
zZ{75#vAwTvJIzf)yZCm0r1hcdvyaES^me+F*^T|Nf#smv at 8GWujCAsw@K0TB{91k+
zn^}mtgY&D-#e#Z#obg}$C#1Xtl50H;|I{BP1O)}63P7tN;{VmY49)}2nLNy}4yK&Z
z*g$QIf3nY4_}6FxPRNbJ(8~lI0#HHE)kr830XpJ{2x9(mi0!KEwM%}Y?ZM<H at DFnv
z%Hcuq at 8Ule?uhfp9qDnM-ULP<D9^Ttcm;rdQ}8%)GZ3}P2-c9x|8*LyeuUq%_jgYK
zJfF8PUt3*_`Qhzr1jNb6|I{(JYD at T8;?g-O?;8AYPJ`b?-WZuB=kM8xmfAvyOL04}
zBr9kpuoME^|NO;bK3DrPI1fyo0d5qtu5#DsFujD777Y_TgMY{j{yaw+I1wfbkPzzW
zH;f1TS`9AaH1p5>8W{_d4HoA=DL>1=AF&<PdItIF^7}FHcl;Lyx~DQMW2JgHPW(3$
z_(Yt4U2V=%U*-9}WB$<n5fiBYHEh9<JJ}+(aIMeYZ?@mI_m#vs at 1fpLznMN)Vcr@}
z$T-etYcp4$e?_~_$>2ZG*su_O-j9154uikXkroB&QJ at o{hJR6@^#5vHyz-q<d%!k1
z?5AJ+Ohz2j%#VgcOD9%<j3Y9`x#aY)<;=-3`pF?6Y5}kvq<)Z(97?jFZ{D0>uH7P%
z{e9q3D|>bFQ#Gjt{8oJd{B%{6_tM7_A9VgBDCYplbrh&{AT1 at 9n1DXRzA(^lCY<d4
zv*YT-`?XP=ooOuCuHSb2?@n*Kf539`Ct=<?*r||D!dq;=Ml at F^KP$`I<}Jlv-0}Rl
zDVUGvCB|G(`F~#_O{W#Ca)DL|3;a_BW60-~E at 7kqxh-y=0v1PB(YL^PC3kq*&#<MD
zkyiMBxINz>@O#cSlWNomkt|4i!IpBEhE<CBXxfjN|GoMBv+R%V1pC4a*_70jACVv9
z|KqPFy|-T{fFBd^LVK0Hnz4x8`QxdGm6Hj`i3Q*fy~+?iinieQb{viWdjEIAd3#Wc
zvG=D@#HP3nRi|L}eblFinW$WK7H)q__yhb}4*#v#z;4>3I#+?;_{Wvm1iB$qAXq{`
z!@o~54e($6UTB!i>cr>Y^Z)r}_Hc2;Cr5BHx`9FWoKDC at R&wDWGaRolhMw(K1h9h8
zh_DWIJCA9%FsrfKed_sHmAz!qd^+;?4*R;tB334_>-<jwf8jp^cVFDP at 2kIee_C6x
z3*E)rDZhA1D>&tE+l4xBa{7$*92(%~0VZP<Ps+cHVml at B%k5XTYmw9Ctxot2ekzFt
zek2HkzvI75zyZAsq0)iCfAN2J0U`b{+aJ$=^)H9mb1oa>xWC~ifBS9k{~KD at -uE{j
z{+`#qix9vlW4d~n-uCaV7v1}s4bGLPT`Y-!l43Q5S{)MjSECM_^QXjIJrCp{my4da
zQTCEuBfJ;jw>LZZFVef~{JpYX(2yf=Tt!xonLuG+!p7b|&mcOiNyQ1N^ckW05VqHU
zaVNmlC+%qGS=qz$TC;bI`BCr4$!yG?1<9ub|HSs2$jMqu&0`TU`5^rA{1f=8b2a=s
zWh*H!Z^8<CIxH<zg|OlL&3x{_hA)Bt#$U}WVs@$g at Ee!DWlZ4Nzwn0)?q;N0Zru%M
zei<5pGzDeM|1=9)kM%Q03g%Oz{!euNk@<>&Bes0b>F|H1&cA7K3;z8 at zjhcLzuz-~
z9bB0*osu=JQM&MuGyQt}(cL$*W9<Fo7uvUgx84ZsNBf8CfUML$^6~Ip-gjYZ>-K9h
zxkb(*{D;9W=U at 1@Oi`*u+>{9z|E&usns^aE8~8u-UU+^Ko{OLP^V3mQ at A!+qf6({6
zj%H4je7;A{908w3AZ>)l1V#wZJn)!riNoh|YAnyMIscmTkPQ!`;U}H{7pm?+8-|_#
zlKDb at ZX{`I>-Os_i~rx?f0gzIY!U_rGi&W7zHamX9RS<=<5sZ!zo)i~eSCi8KfZlS
z_1ULSw~O|0woYKHs9jE8+`B3uH;PGv;r6BQR8`ARFYtHd at 20w)^AzFdJ=+FtasIn5
z#2EkeY7?l}G6A2g7b+0Bq&&a-p9}mKL&(u{=uf-jGhX#;@BGW!vErL&{@fqj?9v}Y
z0wwKL8fzp2W(@)wgRtf)uReM6feHRBc=@Q`yM^r2n19rKcQRi&e~zTDYs!B+|2O`-
z>@zWc!>Iv4DVsw%6sTVlHctHKA(;K|{rc|Pj*pqS>M;MA&-Ale%E^x*w2Ao!Kh4<O
zB|IJc4f!eZ at FOMfS8dCjrxbpc%-Jr>)WMJ4RUvY!&X0d)T(BZU3a~W)i}n=fzrr2Z
z>W&nHV#CCq3!e0fm%jCV6ZkpM?e<Uo8HRSE`Qz19y7J6PdO>p*$_N2v0v3hfNb>ys
zkS`x{F}gjI`FH1k-l+LT=1ZH|0)AUTGl65ye*(Ytx?S+I+}-=F?>{2D*hL^;JPW%x
z^s9Eiz6E(%y6wF=_I>vr6{TV|Tg*#u;b^T1`IFl(%-78!wqI`FoX3QJ5By8eDg67U
zMIxET;6>s;tDP?c{8oD|LU^aQ4VR9j$x)t9``O=}z|YX;i=X*(oK8#MGJ+2dU((Ih
zGzL~yP_wWi3jpof6cd+_PioB9#gy71zgM;MNAn+ZP7XSMlb>?_C*prN|6|N20F!_(
z7!)devo?Vv*1`W;8A$ze7nUE%7wb14e{a(V at jr($W2moYEEj=45%5K`gH#Cl6Zi|{
zyEh&A8 at HdSE^a?K&ywx(VR`c{2H_7E(p8w}i at y97;~xuk7f^Zr!Fj+NI=_ZoT}<OW
zDCMk*&${>Xm`w8KKmB0G|BK)F9$NRcWAWyfLguwmmtK91<J0ulF$?i4Mi!8VWDVpu
z at Qd~*^U*#p4LOM+SJwO&=5Oa84R4q*pA@!v$p0_m=Sj?Gq5Tv1fk!;vg#hg0=g=3A
zL-C{de-FKZ`uc=${}b5st3&+=+5<f0Kdq|^NI at jD@nnnq<8Hr at -w02(apLxSs*Brq
z8$a=JNIhw-?F~CBtzP}nf}zPeEDCk-_X%%f!qpWo28wuQ@>%vIa&RX{cK-2S=B#E0
zH6wl^fwG64Rv!{x&@SZD3);tF<v6%F0!fK*8+Xq??fDn*bG%nDpQYgIeZEZah$9t7
zw{yy#`i$2<jQ^_quJNDFztq2p_8XQ)j(yAZ!wPmGQ~>+mb+h}f`WHLG>;3 at L7xGYk
z(&S;vABTie;t3RDMm}J6o_hrRyU1 at MkKBI9`-{lQVgY{EhzCAar)S&=`~Cs>)b&qC
z2R=@Lzs_x6Pj$Z1B?AA|??uIyW;O<r-{vVl_1GVK%ZuLdo*#S5`=0Tt-$&}d-a}u=
z3`3gMKsDZ88LQ{@P1_-r1!%;*grI(rCTL{+ at ciuX1^n)I$m5No;9Hu1%06r7&qFxq
z|Be4$@P{X{W+>-hw0{r$JUu<?|G!;WW#M^yQ!CzYMv7{XtayTPKG42$@4*vR%DKx%
zQ9 at PMF+Ts0+dl;U3HgKY?6`fWx;U#6Id{R|KjwHEJRe^Qb9}=D{^<b6(bX1H-J+%c
zo)8t(ek4uyr*JgqouB<`D!g}m`YYM4#ikYPg6b6j7H$~?p>Yt5qg+h{DhiY)5Q?Z0
zWFOXmX_)o|YYGdB-=nm5jQ7vuy_T&mXY2gk>QiZN37!T1QWET2EMoh?jz_v83 at 3fD
zp8xjdjDFAj&3&!6_iK>PE<K|EqK$0HjJ3f%53eS`)-AA){O<O*;E#wvTu3>{OsRMB
z1mT(8e&;*|{;9+;)<TbZ<Ee~)r2sIW at ciif92h5^C)|F{vmKjxV>1_|o%S{=x!@nP
zGn1LxE`4qkzc{iJyC5%++ZR_K(^hQ)%S4ox1>@(50?U<04Jui7${^Ywvu$a0<J?BN
ztd;ggw-1$Q6 at 1<5Z`mi9|5-Z!!F+aTziCW7KtDA5jU|9?@m60MOEAN=zFyyX);Ak$
zXSla#Gim9s-K%$~SFXB?_TC=Qdjq09K(L>DJ}?IMf&7K at bnpl4rE2aX-<>?QW09y$
z$nL4G19W+(TAg~Z_Vb4QmWWm_guy?KF=Bf={hY{~>|~VBuQ5K6w{l|jwH|<br#~4#
zPd_I!*?6V43-W{Q-%IWq<d1XJ+fc-5B1)VAgsT at 30`@+&#3%9$@N0()r;rTIXO;H0
zR%aD_qv1j8&ZoX^9 at w`~pb$S-vgf4v4Des3Xn*CrhrrL at I%~up`oY6UE=bqSzNS$)
zpFlovo*ZU^`j*Uq_M?Dzdoavoh5U)|Y{5S;?`qc$@=xLRi}Q%^H_u<JX7Tm~dw*y9
zez~LJ`6=?^NGWe2 at 6$_(+t(hJ*ua?6`{U at MIK2Xuk`^8M++g@>QD!p>{hZf+phO<v
zdc`|wD!%pt`)WIa`$PzQyM$1iK%DsF(tr-=0sL`-LxJDc#4kjBLi6EGW~*mza?frz
z%RUNo*IDC#DF2E7iTNL9J}F at G49m9|w}Ddqxif+5 at o!!UafRU{H(Pl7E2ECH;QTPu
z74(hs<7f{LKlQ^4`4jlfTgvSp2ESmx_4$X8f57c$wmVj5rZ+}@0Dfsx8Tem;|E6qm
z)O0eSWw#$muCz)ZYUj+MUD>gKRvAreacH;{OI5Y*8B~8Llb}@FA*Z>BF%(WI at E8hb
z6Bvj4<f%P;aSQ&W{cGl<eJ-?T(}8T~Z{`!upU=B^e#HOo{7()3$+zf<t--&_6ORD(
zjQ-alRQIp%B76(-=F(SLY5~5btLk!T9NrtCR)CM4fa<4(kZh5^b^8PS;M}f0c}~He
zZz!JMk#E9N at +M*0oor5ZC(g44zhTcSg^#M6gf6Oof`9(k at cbZ$Pin#s=b?>LZvQSh
zv;pM%thz2vMp-KLNvryJY4MYoJuBqLz+t_%9g)ji&_RJnCBS)@fE>QrKL5n%7 at 1<u
z at 7y_exBz|*oN}LMF&|BMSTmo~JAa;PJ=l7-<MEyf{2h}YmHP&4y!Xn11MgjguZg;G
zK6~{}V=7lYg!bC;Gyv~C6oUPP{6lOXVEeL at uh;teF7m5&IsBC(^&z)kgx^p%z30{c
z><- at wM!ot6q5VO71b(vJTWUHh&|>QrZXf4Ned_98E^iOiM_E=I&$A}$R<!Cvt|J$X
z&l<Du9btrk7>csYMfXs+2mz{vwTpkMOi<vDgO!!@dV3?_59XsCjv8z(%SCz6iUXCA
z_VN(q{4E!>vhT^vXP5RLpgr>ZTflG7YYb1Xg7NNUBp-Sm!b>6CH!R|Ol~?yoId*Qm
zr^&B<XH(ng%7ZoF^?J*Ak{$UI;VHM at IZwy=_I~U04<LWn?Js`GXz#CE<a<qrPZOIp
z_<fSa&64n6;r2>VVf$CTn+Q2R--D{ECzH-hH{@h1np$yEkYBbR2J(?*e1TO|nj8w@
z6yRc=IYkQKgc_W40r<M~mAi)283`|`x52NRx6yty9|Zpu^NDT;r at cHMMEiyOnEAL|
zavJ8d$$9r_kHNnSV}J1wj1PVN0KDbNCyHKxpKyN2u}^5<xc3S0!aRNh2f}6KUnO{c
zA%E-kPXm6#o>xq!*v{#Z9|UGe$2#n}pO7E0Uy3+^{{%nh_6GRDkFwnhMff2n&~m%|
zbMC7q9L*<;4T&+LA^Y&Jd4D&s$!TlktoPm;oFPb(mew_GiqFx|Q3&u{(0*EUAzziU
zIJ*iOwgP_>JVpC+wpB8p#rd1^U3-K7so>R_&qnRngYx6;O7ci})9n}X58>HgKaA?`
z#%Bj!2%mUM0X{ZeE{uK8u_tx!XfHmq_V56n3$Kz+!^ki2o9Y+%jo$9|4eYI-_g4z`
zhmg-7+7g~oh0GG<<di!24<moUzilVfPL_|S4SoPWE;<N5U{;>%5pAFSAR#}uqQ{6T
zZB!5ckMsA`HCMIl`O`Dw_G`dwn~S0pV029^DS$$N{5(b%uf7kRv%numv!&o;@Uy+E
z)BcJ1jI>wI-;Xq&YF124CWB8Zs%~k&DPkv<CxZVJ2tVk$JHiivJpB1;FY1Kz=Gc#*
zUG9As at W#BAF`kt#gMXLsl-u8eA8dF0cgz>;w?2P^{2js*&^^d`+}ekA at NLcKFI(Z<
zyUVhUb9)o~A at vCScM{=8fr0Zt_5agXqGW0U;f=pKMpUu)Jf at Vy>;()YPMW@(Ty#HX
zU23EcT<}ncF&)knXu*FRjg*D3FafNfE>c|riZ~CR{}A|1`!&^ellDds^mE9i?D#*-
zd{(8da3*s8Yw)Mc-Z{?z|1sBXkeAawbmJZLou&J}bM+IUK79L(_BMdMPh2M(vL>e2
zE%GbREw|snzl;9~^Aqg(ai~tQokPe!<n}8fm*+3HZ^w1*F<Zk$oKecr;%>oTo?qbq
zc!B>uq__0*{QJ-S+RNYWsaL-9v;X6TPocc!5mnl>a;*m>^PvM7#HtBrX+n?`uNi}$
zv4#n_Su_p^$P}Q at 1&!13fVu$hD^BVJ`N4TqHB*N}qgC45RXJ}LJWc!Egfo~AQ7;#C
z(mbo$)z$uR8nPNIV}8!$ye=T3b|MtGgt`ZQk at G{S?q5HI at Lhkt3-yV{96@^re4Bd5
z1C*R%9$4V-$On^y?WeqXcHqZ4>H_x1kslFx3CGh`i*iQ=`|xrQRIS%=`{p_F`Ci$!
zzN{?YOa^D#LzEQlxiDx?dHw+Z^}mW5?p>b!>YsS~`@ihDzs!CXs#>rhF at H~;V&3Le
zBj?Qyv~@yS1J+~(5e1Y8#2&Gc0_W*SdBkU&=1Dp%*bn5V+joZpzrWKSIBL&%*R2lL
zeE6_>6xU2Xc>?q4v_BqZ(*837KOTNydnPK~pKm>ReI-N~)@30uhoPRny_1=Sc60dj
zLRtk~8V&8(w~Ku6Z^BdH4==qcY)ziu*q*$70p2%;{SoAwj;@9MowEB8x8K2UZ@&dU
z&W+y?#~9(Mr1K+nI^n%o+}oW0S`T2}4wI?=@<adR27daPnLP;eS%KezPY1u<vXIXz
z)V0|i->U!~4edk#Z|{qLa=BSTgn#I$yj5tG)-nD>=DeNulareE;}C)Y?l}KqK8I-k
z>A^oZkKFzs at Jd1p%!h6o$dBQCEkf=vnF;Md;3vQf^R)9h*!i>bYVe!t7vU-JZ{2?P
z{JZ#{0Kb8~*p7d#?Tf#K1jn^SKIkpCUu&^Net3R~dxd;+p5gZOsoN4K^MS|SP$CJ-
zq#_qOzopK*py5d5zvlhuWWd|MY;0Y;<I`Wo8C&7`W8_rqSd`~C?SYvn;T^+9BpvwB
zz?zXb;XgKuIR)?mc`|_*kZ#y>pU4l+<MNqw{!!=J2Y(5kxa-Dz_MLxcKK2#$z=QcL
zp5L^8LwlCOQ|LJbe#p-P{x!%?#(Co~Kz$$WrvkiO1fkymNaP=K`vv~V?FZrCp*{BG
zyJ)X3mbdQ?pI_LJpRpKAET50N?#Q1gXeT_rXO%nnBhZ`k<Oi=NUjJGj;Apk;COlrX
zbgIIuDOCvX*7=b-;rUD^WJJ}aFMZ2r-TS*WX8gJj)|3X+PI at w9>k8nPjH9m0U^OEA
zi1499;+B^yLUU3e4~Q7}AEyJTm^EG4MY{d?69T^y>WJW5&tFY$o%Rpr0}PbV+0WS3
zob=3h!7tiBDqQ>EAM_p>dAa(dnC=7N#(6 at 0qA?DjeBN<k_=|7P+$vd3Fw91GW9bEh
zUAJFs{|NX4|4Dl$=U?#N1-$<+KT_%KapafsW)}oSIT86=&u{Pt;aNU)SynVfv#g^1
zpQG|9zNkz6YHz^#-%FFpKl?#6Z8EFyQ!ac8lV;`iHFAVq=W)6g-3V8?t9iRX3zGqs
zqB^0&r~<|1pl{YX;eQ;EY6?^)Ai(>I206Z-Zl4MoI%@Q`;nRc!U}LEtyy1HT{3N9G
z;i%ck<3|8Lp)legPh%Bl3;gY|cb=Kx=Lt8 at e_HSd!(VLQfM4VM7}VFkoez65;LGX7
zhs|`);5YJl<s<tt=PB?z)h*6r=L}YTb=rRj|78eua|rfZw&SMd;q&_vz-N|Kh=tI~
z`a0tI`Bl>gH~#JXt@#A=Aupr1t(-r}W|q3{CE17ZQ!4T at V-1Dh^A^<Jpl+P2-YtTK
zT0o`GqxOHwZ36iLb-}(;yf6W|LF1pLY!VPb2mCt=7Sy@=!R4c0$eiaO_(zk^QtATy
z1jIr61%?3s5^8tBU(5#@StN58{Jo4 at gnzjG{Os(HZh)7}zU$RDP~S)UNLrQhSVp@*
zvUchld*IK|e<JwH^LP9g__>+zf5Zd=^DA%9j~CV1Lq2a(s}soFq51~-g#5xkYqX_3
zCVTx;8~pKCcw&?DSK1q0&6>;~_{aZ$<~`w!lKs`y$*wD4uSpAu{7<<JfLA+&n)C0a
zDDbHlDfr^>Ep&9<FLS`K3rB~Q1ms2tn}C}_;}wgLUASM!ZeK-&U{)1hqQeKiou0pS
zc<Qkf_`CDB-!u5zV_C6HgWvc+4*pK~4gR&&>+^1}!C at 4_;@a`;E3`Mj^P%E%DTDjh
z13!p8j{kx4g%p|L at LE4;*z*ePjr>zS{O<G1+fO&;{43!dv}fTw73^xE at oy9Jk5aGj
z&wOT`OaWh2BJ7+LZ~PxG6v=nXeQdMkD*}I<UJ+gW_mbcb^AY%6tmGA!*u0{`!504`
z1;Do}3OEo%U#MVj<VUKj+VLnN04F)sU{=}QX4(_rx8RdLp(z0QOm?6Da6Up5(BgU4
z^Dpo_=QZaq&%XhGx&2~&h46l}kM=`=w}100|Eq$(JO2s)BLqx=!2i^1Vcs`J{($`|
z;j&vUpKn6qCm#==wNr($IegZ%uGPL3p3HFm3WDL~M0 at -v3j7u5`3C+Fi_5Y?e(3Wd
z^G*DVGm{Gt3+Q&E`~;=B(j`hfFLyy}HU{SxU?%heF|h|Z^fKq%k7_UBLp<NQAFp_0
zT?LQzj5v@$y20<k%CI|C0l@$Ea;IF at j??W6{1AS?kFIX1^VHzqVLl*#0)JnEGXnqG
z?du(4 at 9Li2<Lz_0s?b at KCRg8)y}-Z0{}I}g)VGiT9t?)T`FF~@6Zp6IpAf$Nr!oK0
zLw;d?x>?Bo0Ds285#@#d4*tMD&jbUJi`(FzHNvbw?0+~P?NNPh*SI&YqV&OwP$09P
zf%Nn8w?pmW8_v1!^DlGGeJRn(^9zarc*u{tc~cc}2-w5FDNvaJR<OFFQ;z>TyZy*^
zPX>PzeA4st5LkUb7M>4Jqg+sN{<8po=RD5z9q9u6;ag<6c}2-7pxyzm&$z7V2<r-A
zN5H>jKDK3Eo%e0Q?<Wu at fGb!oduhLR44={j`j6DFnnX4`WIymD4rloM1iUvB_16dl
zdRFn2^7(9|yjQtmJ^vh=f;;}*=P7fzuIj&+y(NH$?c>!Mtq_#v0*-5e+pC#b3MUNz
zR%!>0(wOsKkz0_ at kMk<<SJOKr!4?sWNW{SWhXhdmKipk}fHZ*syutyP7wjAIVaT2H
z;Q1l^1Q*)r`Ey&^)4(q<*c;T-h_&e8?`lH^U!HL9a5zMJ0{kn^Gu(d3J{|4D!|S7I
zr<hlh3SBW<gP+&Q`J49eiu;P|Y at GjD;J>h4-oC!lZw|pefT!nwO61owH|G1+(Xs+R
zu6RU1cTVwaXzi1(3Toy5N4J}PoOIy&IB at 7Uz=rDcDiP*#x5fl8gipHJW1;$LIb$jL
zHi!!U_wu(BhQXm^a75IsphZ7Sd_ at +432gm;NkC-+g8J%8%uqon<TuXaY}eq2#YyUn
zBCi}~Jdl|R at -+NFrsW9c$u|p8YtMfi{K|2h<~Xil+V=dz=O_53{6w=;*s|WLueOw!
zfZqIs{{Vk}96r&O`JA2eZ>U(De^-8XLqNxQzc0*lGop#W#^ncYC~lEIJ#CO|o(cHZ
zus5`%X7}f|i~lY2 at jI#aQ#R=QH&P5e*myIn!Y7 at Zo4h{dLJRnid~AVO0Qk8V6b0re
zXyWGqys-z)0fULI-haGRz4HV3w*;CYKqj!cf-Q99XR6x?zxQ+Tw}#Gt5d3`b0>ANJ
zv?uVt1OB4 at Rpe?3?*e`k{*L?zZ~}kRJaZ8VQqwx}tS0||$oU_^KOe!@X~<8*|9sw4
z2Xozbv~yoyubT<>9r?k*vH(%f`8e_mIrg9H*Tn=j_%C<2BDx*_eq&=C7Awwg!{`$K
zyen#96oP}guqYgfj`K(1VGj$!4!Ny}4J&914VT3|U%?_^HKfc6=*@l;|DFGs6$dsT
zGrG2k;Sd9p?eNVZ@|f)dJaL}NcFzR-I4D^`If03S0<drh)*SMKoGJKS-WuR9o&R42
z|7ab)&Kmz!_8J)8fp_7&-_-Y44ZXwOPk8HL2J&~FbNI}9N(SNl8nz%4hyZaY-0$GO
z-eg;SPz3Xr2~Z(&ZL~N5T<CiGzfRm(M7~)*wp<gwF)YPCUosA}fG&&(9^Opv(8$^4
z|Mrl*24u{aLT=Al$S--{$e##*<U!jcC^`S|{Ep5E{#u&)$Ogahf7YJg;Ey+7$hVo-
z%4+$1#UkoKowffzBmDb00D$iQ!#x&nnQsmNKA&WFt^T$AiH{KZy?flzcDzbX@&9!U
zjpruDIEwrDb1R=){PTuaql`aGz)m^=b;k<KAIzLFQrqcph6)gI at wbHPn1Th@mBR=2
z*}4<f5e(LzQ~mI~;Vu3v1PmuBF4U-kX|t5WAQc21=+>^==MT+KU|0SfUT$8U0{@!!
z&z|2DuA-PZf6<=K_V<u43U|wR6eE=H;y*u&QvmxJo_}2R{GF!hHP(oP{bc{YtN(0F
z0J=Vdzj^rjUki#1e#4&E1IX`^f_%OaRqmynWQRS^*;mNsj`jJKjR|=5MSA0zBn2w1
zV|>gs*d+=`&kS`%*(>maS~wgm*2FLL<r+{pd~g^HKVYxPZ|ct>DPV!>qbX->pKC||
z4E$RaH`G_Jp_~Z$z<xr0x&1xPBlABBej<C~f6$)3I`#ff1Aa+8VVkQ at VenT73u<TZ
z at 8f^O at g)Qp{Nd9w)EfV#f7YVdM-~44!B0#9dI%WU$XvBMbKe(Qw*PAb`<1X0JikBN
z9ppy at G(DDww37 at E0}eB{vb+$lvVsWxk~<6oKRr9ZjpDHz0$LPMJ*!&i(c4Ks^&b4o
z>raIDP6tj=AV>}cS++xZN=fWV8KGe^?LnLKqYeEBNO$na$=78>#W%>|H=nOJ#+%s$
zJ{dlNsoQ>U`G_S>-?asQIsaz79|`zZglD8MRpG7JZ6dTA0uD()N$nhkZ31V6{~iJ+
z6EKpu2;Y9CFwc#>J+D)Gdm7|7-&oLEFz<EWeRbZ~2(X@^SrFmUNN7HAYXVO8BZR4q
zfgT1=AjFN+u_h9dg8YzT+`5cgySdd)9oi1&=?kS6aFs6|G>LUF_<0*6w9Ten_~)b9
z1j>bmt6#i*z`oc{A>YlMNfPSw8u`1QdJTR$uhK`^NuCIPxXMI(Vo|#BX4snC{s#H3
zc_seCijSGVzfuU8OkmdvI>LAFC)jsMbBp|~S2==w1HSu4JHx{+(NVxAuu6mvgW+JL
z(}z{pP4by&IhMAsHhy=HtMbcsfUDk(W7d;%W{v;?x1V%4|1&l4gndQ2ftJP6%?<Y4
zJ|f#<@*D7j|5=4Q^v=hdpCgw=ey>PVI2X5H$PeY#u+P`?N7UvMjSn>o+TqF$WdS=O
zAZ%Z(&nxa+*w)SKRtVjiz-g?YFz=i0 at J%C+B41>9&4&{b!DqyC${*H)?fI0m)J}=R
zJuX}*9_GnWpg!p~uK6oh2j1xXI){R->sP$fh;iG`8_#(c{K@<enE4Xp8m}v+r%z<q
zBWw<~bCB?CI8WC4{W0Sc7431)ZLjm at o3F5iO?i#lJ3j(`GNAJO6Znhm2=?oWh60&C
z*AWviTFhx32wEb%V**<iw3`S3)L2K;m4&@b*go{n at w5313-%N8*Z!oK0KRJ>1J)1*
z8OUJT0UyECdWfFw_@^JZs4`|UWra2YxX?NmkZ17ID92b<up8a#i}f4~{vPIzfPXNb
z{Jg;*WbEtICUI`GH_R)+FL>~?ksqa9+vmHDe?opZx^(;gbOnBEcdp%BWz*i)!9Tt8
zBeZ9|QdPeYZ!~qZ=U*Y8+)76;<p-?Kcqj^l2`Hc&|KqbOJtyip at bTvT97YJpwT{)v
zMd!)H!|8!wWd%lct at U&>FfY<r04U`9583*74;}f91JB4e_`~Nf$RCPvf0!j2EH|Ml
zU>7ok$qI(UG)d5-o9OYdf at BDMwCTfc|G7oJjlF2|;g3Awe`NwZf$8dAG2}sgipp!s
z2R6df?K(dZ at 88A?_^sNl!B11Jz)){K at FPU+E!IKLU*PYAKRC}qbr$4T!-G3I#s}}8
z_oxY+0THSwuuFs{D~MRIV+alKiTN$;2L={xCt#rLZ~HKZ+n=823i(w4I_Nz{7(Goh
zKm~$LGr-~>`qNl{WCzC`V;`TIUs8%_=ln~g3;wXeKX1t^?m)0BF$L at whaWUJy<azE
z9(6^u_!RqYAN(Hx|FUW)CM+ev73Xi at pE=LU=TES&cBX~hDa>^%@W-#d2tK|q2ZB>Z
zfp|Dtpl$;8dps*&ApcCS`dMzm=lf4AFlfkMU@(v`*LTS08~GJCa~E4YF84i7udNM|
zP^-AmVu5t>6T1Q&F?l}qi2A47-aE$GXKs-{>^(nq=g<E5URLnGd+jcItvIkR<k#Ew
z`{8|t2TSmm+pqG?2K;QwSk|tGtqtv2t=AN$!GBci68t-EKX}f%e at _*byaN9t!I`<x
z?$ZcAa0XGJn?Nn`WCC906Rn_w;W!MuQrjmvIHa~dIm3mw*E5XD$WR6n^R)Y_>6a at S
z;Ayb;mCf++zw%+$1}Ij+qZNV?9kPOahDKBo2_9E_VrkbSlCI1=FeAcgV>j~oZQ+{u
z<+|*$OkFzu$I4pqTj_o#Inye~n-tMC?Bg98y~So%ZXf*bA|KlCPF=vyYBuJx6RCNV
z5vLYsb$ak8;VD0V$b$_B)l;4x1$YDTtdjms52w-r<E at _3HXUedn$K+jIHN$v_L2Mg
zsS_Pw0pO_Hw`gGR5xLTE7q#`Nc0YLoVC?~nf3EfbR_T_9U%kO2FIZUtPdFazE~6IA
z`U3=VyVnH!fqZEu_1V|>Ulws##PSt?=N9&{rulwY#6!q;@^Tut5B_6o>Y0K6kTlVl
zs<PdM^Q;Na;_&79<<or8Iyh9Xu5^hTcPkj~A|IEZ)p*Xy2~W(3$J4VDTf%*Vv`k|H
z|MY(g_Uq8!ss2oO!i~&qf7k89b_kS({Mhk_*sfjPF$Nj!J+GK@=KIw)aBqgSA#^K%
z6m7C&J>l+NChXPoEZ?$wQ$&=Tu_BA-FH|4D89$gy=|2?qm8Lh=E`68Rs1qKix+U^V
zY`@(8S%Dv9T9ICIv>vh at wI}cw;TgzZ;<%%Ez6K2l?OK1L<S(lM-30ndRTMa~WPW<x
zkNFvnCs~pGpdobRcLGqq$6nEH&`VYr;Ef${`>JxT!7sPJMZUfLfW6uhI0NF2bRE-j
ztYWLKI2*Lay)H9wx)qFh2x3H$8f=x)G=z!>^>_=G6=yrz>wbJ&x_$ribb#ka_T87C
zZCk7b`KGB((ydUP+U?u(Gm${6&oAe%uzakY7j9a$LuuL}@Qd>_w|@fiO>0{_)3Ab7
zAixm173>Crv$g`BKnM1T_Y?9h7t{kRwm&__O{%+a9y^T<`0ew-Gaeq~8}`h4&A~fg
zewlObtD}X^xnE2akB)^rOTwdH$5asI2t|sD5!ng|2cuq4IdV4yXy+>07M^#}ekNbs
z5wSs_{Z$dIf&BDN<?y#YKdAl*Y=5}@oW*hFHTVPnj#<b};@cxlJC*0}oM-L!cYOY|
zi}}JV+~itd0=rhQONWX>dTC+_jy>BR3wX{2=6=&npnu)>wK^U7<vn-<f&4?B-_i33
z_?6h2?F90D?iCFN`1#mT%M|hd^K%|~+4H{c^0$BL6)%3~74P(|pL)?Z{fApUfnob`
zY_4`DYEL at 7mlzI|$=N|#!IT}B70^OI3_+eJBCmuv!oi5Si!D at WD08Tr117Lq5r+((
zm at kLUzAk>wu?maB2mImlt;A-L;*ifr=NYxFW#&fBqKV04x%7wCPW-@<^X^KWQFfUL
zzrkN_zw?|1`%*CCCffYq16<MNBK!{%NWU}|Wfcg<(xi{7bvaWjFr>Fo?_X)KPo8g|
zZ{*wU5AZu%Kjc785B?-P34XTOe!_LW@{@1=xX<{K=iKB`KYH)){?%{%>EHRzU;3kO
z_{rbC=l}i7pZhgG!pQwky6I!F0&T@*D!xcjoOLTJAdl#Qz<B{H7$&gF3*yO_6|5e(
zBX9Yfdf<EbKZbc8nq7Utz8>`f*e^wy<7}spzhV33_I=K>na?4?X9EAiSGTk$J^zp_
zB6rL5w!lA-FSKt*xX at l`fx_9 at M`#7>wOFmf*5~m2YY95Sckknyy>RKfI{5u}OW)f>
z&*d3fD?TsE;)iHY%=e4_d9nTIE`#kbW)_Ek-s6A#8L#?%cHQ>>e*Im4b?@i>>a`#E
z-!FH;lbFV=E$TX8rJF#EidwkPlp1^U_!J22cDCfROrV}NH^cewKl3f-dB{g#KOBA{
zzr%i)?HoXUv3=ox%$z(M at H3_GF!*&^NAvtCR)haQ{toOtxhr2YDf_p!g0UhAY1_iy
zYkfny3)_+7xEFl`{#CgIkGe^CBW|YCu&^)B5X`4Izp~w!@_nT{GhKu+o1ggkkGk?*
zp8W;i at RKii?YlboegFJld*>HC`4xNv-^So&_o|UN#Hh at e6SyA*dZnO>1r-Gjn82JD
zoKeg*><7<Gl2fu<&uuMfTG$z|pLzZ+@;7Y1z|RdiZ!Tr!YlHLeFWhOsADm}l`&;A>
z%qz1q#q|`s+l|RBj>R9vSWp4FTvO>4|6gy{^J-NUg(pQ}{ze;QiBHKu3?re$he%~)
z<s{IM*Yg>^i5L|XA!$Dlg_NK{(GMq$Y7_)b8#HX(AJDi#<0j4e*80|3XYGCVIrrR~
z28YAxdf)Bdy}$LXZ+&Z at vvENf=d)|k0`Q at 8;+_5>#&|>EAE|jk{>Ym{<R3L};9qvs
zy=Unh9<2<izqES$<jr3`|Mic*{{APT;K$$pT)q9<!Asxoc;Qp*x`OJs!+)oOm;x|0
zn5^Mipj{NR98d{VfWJb1j8dg=g6%8Vv#PDwzJmSy$ZyiVDWB=!ciBJ2{3Em<Qb&<r
zVqTsk>4&!LSxq1W?p_q+9PJn`+~%0O=0*CG0{QsZBzuHF%F=0o{0sauMT*HEWv{rM
zYWt}EM+(66_Lo+%krtk=zy0|eyU%`g at X`-QF8{QA^=F9x{TIH2G}?UZLoC7<@XOPv
zpnq5hM-?z9{yP`0tc3;tjCz8fBNKzh92y!jvAsDtLG=N9E<+924-tM?`kC`fsXu~z
z!#@cP-x*&%<_@)F%v#^-r(}(FDX#g4G*2gZh<xLDom|W>r#SjJCzT9!)r2i{9FGDz
z6<#2Ba}+jdIa!@?!6{1<2N)M(H6grnq{|mW<>t126ui0S#TTnPCa(O=G)Vk!_^<Vk
z;GYr*{txU;dFnoPm&Q}~Uq>LwHj7WZEqg2;dJ~!-&mNbjj^mkxuz=7S5b+<oLbx4@
z|IvIUK#Xd38+;6H^oab5 at DuFeFc(hFOxX7czlnT^oP31Clcau at J=jvstbTl9S3a}d
z&gtN<G*9T9jCsAcRGbavH=Q6bp&lAmz=j-}4kQ<NI<Q+o-6jI5W}B#rf`)4mR(5cg
zPhtmYhC^=0C`$-Y<Rjup%fJl&2KjpqZLIJ~_(!1>`oEt7A_`>RH}3xYirAsD`?GF<
zj)(97^Rnr4-uhE5P<F(Se8<GU4s!Djf^H;Z0P*uH+9&dxgdYt=>KtnOA+{ffedhcO
z`%3B$gCF=GlKoZ6rcG^Ac2rz40c6+SZB at GjKQ&Jv-+PzhV=LgX<)!XiBYjLT8+WnM
zJTfT?#HmX*Q9BAo&C)I%RDsY6hc at i_&J2ESmvrDy${#^m3}zn5jDOwe6A(3(=qWN-
z!Ujz?x{@2rZQm>1^o`dsn8x|KIzkj?)dHBN{Dn`*{Gfeh{;YWl(FnCe<R`+fb&kWn
zZDS_b+Y)`SeUtFB)L{r@&L2WPY#-frXEE at Dferl8sq~4nWh&wGl;Ag=6Ug^eF7xHv
z_DTC*o*w3FL8Y2Vfsk^6IMtpDswl8}4T at +$6m=x#vq{pnI!=*ndM3Di=z?$VgCC!q
zlz)hy2L59_`z3JB0zn<x|BXNpc!NVoBisOpXB}tR6$QeQwN=(Ui^(2EzA**{B;=wC
zo(A$s_+<OgIb5jFm-h+zc28o4eJ1>ck?-Ia@=vnIN;b|~<|{gNmEi;AkAgo7ektO7
z?sV2{$%^G}P2b(N#j;_y+N5k2uyIyJ0lW4sQB(!Oq;wF~flqED781yd81dIlG_oIr
z&*3n#fYQNi<3Ah7c}Velx!_HiM1%^Cu*kA{jG_rRC)DE=eH#Z~)J~MTI<WZsDTYr+
z`|kD_?T6r*i2SC98C7i)_8Iv=dp>$<rzmnqXn$Vtd$KMJA0=V>bz#{R^W|NwoV!i!
zq{UjmJhs0y)e7P2$F9 at f6jKGo-hs@QOqtJ`Hf!wWj_FQOGaWFkV}1t$f#G2H968__
z1qJLg_($<C{!jM*a}^w{BEPg91ri7m3*jX6FC6oT9j<opIv2~ath{1jWoeW$(w9Bh
zvO~XLvg3TxKI)(W<hP|xMfd<b4_%xo&zhjZ;Tb$1#|Z3I=g)!s9{4-M$KC!h+0Qf`
zvR}r~=BNSwm?IUg0Kb)NTCbrl1MC6#M_$FIfiNiKz(ZzayBxWed=Zpo)2I2mn?Yd1
zC()L*&z}zJr4$+nwKO7`6WilwzLRGvpFaQVy%L=SLh;TN5Frr58(K)CAdj$=#?CO7
z8kiu`nSDl5hj{y>4j-|?Pw+mkiAG&{PTDs at DC^u#>i2ZMA^*-6w#0u$_)X-G(>}o8
z!@pE>2<M65&oZ@~9UJGE7Y9EDKfw=?FHQxKe at 0-Bjl%b=$W~~3&*`xyd!^xeX*KE9
zejrTLMdQ^$X%^K>taBjbq>vFla;>Svm;@h%1H~iFPse|k0;&-3K~CO+^NeQ%0duG$
zjz&Hc?F4+EB{WxdgkN$#zbC%%Y~&OCUf~vIW>e}cM)&~#okD)Xe^d5X%r6tfsi`!o
zdXmQcN=*TNv+UfmFz~Zwqu}SGz=(W-{Tf_rS+cu-{ocpcWur_SxPJ74F4Llpjl#`c
z3t_wwUBs`qXqnu|2vsapGATy^|0%#9<nQ>O5dtX at n8TpCKmviHNH`}BT`9r*%ed(N
zN#8Rv4&j(35)kC;FP)A2(%V at 8`CVa~6 at FFQPDlO}+9&w^99DlYKYlf7iVd1zr%Lws
zYhGL4pn$YotkSdsKRY$Brm;)Z61Iq41MIO0AX+x}9k_^24f^<Y;QGKtZPRF{2DyVb
zG<6Qf%s}ugKV28~{h}@q!aD^#c!ah|fEU=L*9-FR<3F+h%PV&n#K=VyRDlq()5Ag3
z%gCV&F9sbmpj%{xOYF{A5Wc8B#xm6o%`P at RhID>5cBXOue?)#Q^@0351^yEMMRgYA
z at 1<E=_EUVaE~Dmm=GScjMe0NF>^(>13+x|%18qt)E3sGjhQsg5@#H&Lse%q>*9d^E
zNBg=F2vvR8D-fnM(JH at 40wJ-Yut7XXQ#Fi*K*Ykt3;wO1`I&Ym4p|OI6lmHl0s+;5
z76_tS#t*&|XN{u*^XYdLuqX0S+OV|O@>Yz^kqY<!M7~S?Hu&enKZ}<+WdCTZE0m9w
zV;TH$gOcotsXh7?q5b{q*cO~^dI0``r{2c`^-V`V*tC2_j-ywwZ`8)8FH1Y1YvP>J
z2HCuUKp8CBz%_$P0%J}kNy8E`6RH64Q$Tis;I2^}3;onE6b=dhoeI+6k`6^25ePXJ
zJRAhfksz2R{1y8ryfY5|g!tqLWPU?tE)c#}^k!*>u`?I)tJdvwoj*nJ%mn}Z_^-g<
zP(C__gUW|$GwQEa%^L-;GrufQ*>@g-2U6$$LvL+3{NBbRmp3n8-E#cnt<PNB_T2UD
zCvM=t#kOa!Z9V>pbnSU7EAM8NSdd2N-3f$X)Oi9y2)snKkt$y#%tqc2<uIcF=fG-Q
zXfk3jj-Mq|gWmb)0r>oVlE^VX6P%w3pUBUv7ox)Dik-5JRor_u-OTSJzp3_F`TG9g
zcDo8SPyg)NzF6K<zBohn>lDa1E8*A!d?+R-C?7h~F8c+p0I;pjS~2h+yaagz&fm0r
z6*pyI$>NTaHy=Fp8SmP|VntlwKX<-(OBb$4BTSCLKzMnwG at 57`@n&!r%!M?<n2=F3
z%mTU<*hXPrgh at XN@@GaM3|-_mSKlErQBZwmd%~WCUrHS;38;Fw3;Ox-q at 8g~pZ4Yi
z{157%91A7jb1W3#pJI3}tbBBhI(YjbS)ePLf8Uxgzk(myX3MdUwx77Z^QBt={I1hq
aVAbxPm2Z|_yNzSd%D21Ee*N&7FaHI%k}U`T

diff --git a/kernels/compiler_clod.cl b/kernels/compiler_clod.cl
deleted file mode 100644
index dba7d6f..0000000
--- a/kernels/compiler_clod.cl
+++ /dev/null
@@ -1,91 +0,0 @@
-typedef float2 vec2;
-typedef float3 vec3;
-typedef float4 vec4;
-
-#define sin native_sin
-#define cos native_cos
-#define tan native_tan
-#define normalize fast_normalize
-#define length fast_length
-#define mod fmod
-
-inline vec3 reflect(vec3 I, vec3 N) {
-  return I - 2.0f * dot(N, I) * N;
-}
-
-inline uint pack_fp4(float4 u4) {
-  uint u;
-  u = (((uint) u4.x)) |
-      (((uint) u4.y) << 8) |
-      (((uint) u4.z) << 16);
-  return u;
-}
-
-#define OUTPUT do {\
-  const vec4 final = 255.f * max(min(gl_FragColor, (vec4)(1.f)), (vec4)(0.f)); \
-  dst[get_global_id(0) + get_global_id(1) * w] = pack_fp4(final); \
-} while (0)
-
-#define time 1.f
-
-inline float f(vec3 o)
-{
-    float a=(sin(o.x)+o.y*.25f)*.35f;
-    o=(vec3)(cos(a)*o.x-sin(a)*o.y,sin(a)*o.x+cos(a)*o.y,o.z);
-    return dot(cos(o)*cos(o),(vec3)(1.f))-1.2f;
-}
-
-// XXX front end does not inline this function
-inline __attribute((always_inline)) vec3 s(vec3 o,vec3 d)
-{
-    float t=0.0f;
-    float dt = 0.2f;
-    float nh = 0.0f;
-    float lh = 0.0f;
-    for(int i=0;i<50;i++)
-    {
-        nh = f(o+d*t);
-        if(nh>0.0f) { lh=nh; t+=dt; }
-    }
-
-    if( nh>0.0f ) return (vec3)(.93f,.94f,.85f);
-
-    t = t - dt*nh/(nh-lh);
-
-    vec3 exyy=(vec3)(0.1f,0.0f,0.0f);
-    vec3 eyxy=(vec3)(0.0f,0.1f,0.0f);
-    vec3 eyyx=(vec3)(0.0f,0.0f,0.1f);
-    vec3 p=o+d*t;
-    vec3 n=-normalize((vec3)(f(p+exyy),f(p+eyxy),f(p+eyyx))+(vec3)((sin(p*75.f)))*.01f);
-
-    return (vec3)(mix( ((max(-dot(n,(vec3)(.577f)),0.f) + 0.125f*max(-dot(n,(vec3)(-.707f,-.707f,0.f)),0.f)))*(mod
-    (length(p.xy)*20.f,2.f)<1.0f?(vec3)(.71f,.85f,.25f):(vec3)(.79f,.93f,.4f))
-                           ,(vec3)(.93f,.94f,.85f), (vec3)(pow(t/9.f,5.f)) ) );
-}
-
-#if 0
-// XXX vector type in the function arguments not supported yet
-__kernel void compiler_clod(__global uint *dst, vec2 resolution, int w)
-{
-    vec2 gl_FragCoord = (vec2)(get_global_id(0), get_global_id(1));
-    //vec2 p = -1.0f + 2.0f * gl_FragCoord.xy / resolution.xy;
-    vec2 p;
-    p.x = -1.0f + 2.0f * gl_FragCoord.x / resolution.x;
-    p.y = -1.0f + 2.0f * gl_FragCoord.y / resolution.y;
-    vec4 gl_FragColor=(vec4)(s((vec3)(sin(time*1.5f)*.5f,cos(time)*.5f,time), normalize((vec3)(p.xy,1.0f))),1.0f);
-    OUTPUT;
-}
-#else
-__kernel void compiler_clod(__global uint *dst, float resx, float resy, int w)
-{
-    vec2 gl_FragCoord = (vec2)(get_global_id(0), get_global_id(1));
-    //vec2 p = -1.0f + 2.0f * gl_FragCoord.xy / resolution.xy;
-    vec2 p;
-    p.x = -1.0f + 2.0f * gl_FragCoord.x / resx;
-    p.y = -1.0f + 2.0f * gl_FragCoord.y / resy;
-    vec4 gl_FragColor=(vec4)(s((vec3)(sin(time*1.5f)*.5f,cos(time)*.5f,time), normalize((vec3)(p.xy,1.0f))),1.0f);
-    OUTPUT;
-}
-
-#endif
-
diff --git a/kernels/compiler_clod_function_call.cl b/kernels/compiler_clod_function_call.cl
deleted file mode 100644
index ecfac46..0000000
--- a/kernels/compiler_clod_function_call.cl
+++ /dev/null
@@ -1,91 +0,0 @@
-typedef float2 vec2;
-typedef float3 vec3;
-typedef float4 vec4;
-
-#define sin native_sin
-#define cos native_cos
-#define tan native_tan
-#define normalize fast_normalize
-#define length fast_length
-#define mod fmod
-
-vec3 reflect(vec3 I, vec3 N) {
-  return I - 2.0f * dot(N, I) * N;
-}
-
-uint pack_fp4(float4 u4) {
-  uint u;
-  u = (((uint) u4.x)) |
-      (((uint) u4.y) << 8) |
-      (((uint) u4.z) << 16);
-  return u;
-}
-
-#define OUTPUT do {\
-  const vec4 final = 255.f * max(min(gl_FragColor, (vec4)(1.f)), (vec4)(0.f)); \
-  dst[get_global_id(0) + get_global_id(1) * w] = pack_fp4(final); \
-} while (0)
-
-#define time 1.f
-
-float f(vec3 o)
-{
-    float a=(sin(o.x)+o.y*.25f)*.35f;
-    o=(vec3)(cos(a)*o.x-sin(a)*o.y,sin(a)*o.x+cos(a)*o.y,o.z);
-    return dot(cos(o)*cos(o),(vec3)(1.f))-1.2f;
-}
-
-// XXX front end does not inline this function
-vec3 s(vec3 o,vec3 d)
-{
-    float t=0.0f;
-    float dt = 0.2f;
-    float nh = 0.0f;
-    float lh = 0.0f;
-    for(int i=0;i<50;i++)
-    {
-        nh = f(o+d*t);
-        if(nh>0.0f) { lh=nh; t+=dt; }
-    }
-
-    if( nh>0.0f ) return (vec3)(.93f,.94f,.85f);
-
-    t = t - dt*nh/(nh-lh);
-
-    vec3 exyy=(vec3)(0.1f,0.0f,0.0f);
-    vec3 eyxy=(vec3)(0.0f,0.1f,0.0f);
-    vec3 eyyx=(vec3)(0.0f,0.0f,0.1f);
-    vec3 p=o+d*t;
-    vec3 n=-normalize((vec3)(f(p+exyy),f(p+eyxy),f(p+eyyx))+(vec3)((sin(p*75.f)))*.01f);
-
-    return (vec3)(mix( ((max(-dot(n,(vec3)(.577f)),0.f) + 0.125f*max(-dot(n,(vec3)(-.707f,-.707f,0.f)),0.f)))*(mod
-    (length(p.xy)*20.f,2.f)<1.0f?(vec3)(.71f,.85f,.25f):(vec3)(.79f,.93f,.4f))
-                           ,(vec3)(.93f,.94f,.85f), (vec3)(pow(t/9.f,5.f)) ) );
-}
-
-#if 0
-// XXX vector type in the function arguments not supported yet
-__kernel void compiler_clod(__global uint *dst, vec2 resolution, int w)
-{
-    vec2 gl_FragCoord = (vec2)(get_global_id(0), get_global_id(1));
-    //vec2 p = -1.0f + 2.0f * gl_FragCoord.xy / resolution.xy;
-    vec2 p;
-    p.x = -1.0f + 2.0f * gl_FragCoord.x / resolution.x;
-    p.y = -1.0f + 2.0f * gl_FragCoord.y / resolution.y;
-    vec4 gl_FragColor=(vec4)(s((vec3)(sin(time*1.5f)*.5f,cos(time)*.5f,time), normalize((vec3)(p.xy,1.0f))),1.0f);
-    OUTPUT;
-}
-#else
-__kernel void compiler_clod(__global uint *dst, float resx, float resy, int w)
-{
-    vec2 gl_FragCoord = (vec2)(get_global_id(0), get_global_id(1));
-    //vec2 p = -1.0f + 2.0f * gl_FragCoord.xy / resolution.xy;
-    vec2 p;
-    p.x = -1.0f + 2.0f * gl_FragCoord.x / resx;
-    p.y = -1.0f + 2.0f * gl_FragCoord.y / resy;
-    vec4 gl_FragColor=(vec4)(s((vec3)(sin(time*1.5f)*.5f,cos(time)*.5f,time), normalize((vec3)(p.xy,1.0f))),1.0f);
-    OUTPUT;
-}
-
-#endif
-
diff --git a/kernels/compiler_clod_ref.bmp b/kernels/compiler_clod_ref.bmp
deleted file mode 100644
index 71afda904fc4c775a358e4982ee6ba36bc303971..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 196662
zcma&P1$<X`w(fn3TkIcqcXxMpHzLG^2tfi#2=49<fsi1<-AgI7&;o5Kb#F&IGw0lU
z-usz3^PY3>d*}VGy^{c)PS51?n>{=K{F9QspY^O~J!}1T;xdE&W$eGmM-cyWk(1Zd
z|GoAvCh{2{>etnC^{A`S7+72Ao15wC>uXF+Or0G}9Bg&;^s;Xp47|2C=-S?Zi#z?#
zZSz0Bz3}15lK0M)eRQSbv+EUK+>rIz_3}@ymVJCB^v$E8_m76YH4ygjSok|9BA%Rz
zc>he~vvZLjo{#$QJjcin&Q^W*`i!q{&-ms})%S1I{N{e$k8jug;bGKA7vycv&T$g`
z>E-CpF7sl|Z{Do>{w~Mpk1s}jbTQ(+(_wEP<3Go at mw$Gx_{o{T%e#WE?_=fOIh=8R
zSLWrtzQ@*k>|7YVy*F;}GLCk0tL$da2wvLe-CAxwJ>7Cfj#E*pZAPp~MvQ)hpJi-_
zK}?XIzq at 5jut|WYw!4Fox2vALm5!T(uAQZ>r<1mmt%;wzmYt=sx2ukmt$DDIslTUb
zLYQ?-uvucbYhkKQaaz!v8t0bs_{|HwS9D|@-xAutuH at E{*js%w-Z_)}XsGFnJ84hO
zw*C68tml`rKfFBqcaP@%__*_T?{xkCapfnsdOo?k=>Em|NB3<!arE%@%U7N}did>E
zpa0K)`@{eF-~aiy7azRxlVxgaZD?(&Z)t8|WudXLG_<qUwK6xbw>B+I_MAE0x^=pB
zOKD*5%#alwcJr!jXV0*mGsAXvC9nI;s`P3r_n9 at rud~*_t0AD9)fl+2IcQ01$jXke
zHFF&nH97P)*>~65&aLA8Rt<%gHF*|QIV?^r>+&t at 3M}gj)x}q3H5OSl6<g0NQI}P7
zF)v!w<e8Ue^6xRqj4?<E)kOO126^iEyKDQo=>)jz1bOO)dh3Pz>P7hJh5PA+`RE3F
z at w&E;%QSa~sV=rt9IPhWT1>V!n`C7=*_vf0%SMiqEKMew8BQ?J8>c<(wF%={V<wIt
zGikz@$rHy;nLKvdl(AY<`O-KYme$CcCa<uxrt(#JkGiy`@X9#tsk~WNPmk+q=wPdF
zZDDM0W9jQ*<>$#oCIn<@G|Gvtj-IZ@%*4Rn#?aa#;KGi;E4zbl9|ZOw6U>LbJqZ3o
z?)8V<I}-Y4f9L}O;kW|zyVXCu at nZezUiGi;)%^NR!hr>_S)4>YzYzV&C06b4-{PzC
zp5NRjA|yKAKSMyV2%oBNUoU%px!|qifminMUne#}e%k46+1C&H4Q+DY(&e<YCE?(z
zxP8lQJ1T73${c$eeLJdL$}+9$3e1aBtrEhVOVW*!!t??>>~j+Ig1z(tJ*?tGr`cKZ
zii&@27drztM?D`G12+d_A6G3qD-%Btjkl{=khe*EsAagnWp=!Ma+F_lnPX!~;H)a2
z^_^Zz+k*Bj4?nfF at XCSsdjqu}UP*lOSnIDIWIVgn`rVryzkQhd>Gk|iZxnrgtK^fL
z<)7WI`Q&!pn`e4%3 at tr7u=2!_Jy$QBd*{KuFF*VEU;ps?|N75g#=n_^or#@|zJ-|q
zAz*E(M+n$k>)Kcv2YG=y-#JyFm){+1hpd=IAXqn-$Wr10aC*0u`_8Ej>}^&sKPPO>
zoY2*?LsuzlwVd-h5n<C_4z at u)Ka<6YRed3mWizXsXi{T}bDOp@>zSnjdjf%YAwZOn
zF)z<BElM%YiZw_I1OGaK9>816%b6pApc~??i3-q<3)YVhkrf-nrv!zLznhka<5VY`
z$+qS|eUiD+M02A_=Ej^)mRK<3$fpyG^~dRIjhQ$>!T*FYlK}suu~R3%0)AaB-lK$o
zihl+CS}(w_yjj4{d%(Z0fxeNgm4Su1zM1epA;3}3&;aD?nHcLC83KM5Z!>nV;mT`F
zj7(h}t%H0x>KYp8nVIC at 8}L28!SB at Opqu*%gs`^;Nea`ST`Yb7eCY=l%09YGIFJ+s
z_6plaK06Dr1^-WnL!joj_rW~i=UDsO2Q1#nw}d}B5&rH;-dX+q8<k()EO~Mk{0HAW
z5OU{G;H6#Z=XQesoSS`qCpWomUf{H3Ciss(xGHE-i_OeZ$Ayi7-HqVivNGGUI at cgB
z*giYnG*^&slM-c{7Oms$Vh|l@=<TBIYOm|<qUT_(3GmRew=@g&)pD>l4fL93ZLaU{
zK^8EI3;_J5iQx|Ev7`Y1)(ZQoypZ_~UMo8iw=D|Xv$W`XU)h_-<8B|W|M+_9le4Wq
z+;98gLH0*i=KSIDygxkY{PFREA0Kx^{?Bjpe*IwKlk2^&pItO`c-is8+b^9te*f<4
zpMCV~$KU?uKmYpY7xe$PpOC-$sfn$%fZxi(z{XO~+CrDyZD*xpZDE&_U{;#$GrLNV
z*<Nm0Ul7pKL?C##Ran;MTenOX=yp`{B~HM6<mT?E?Y&W3d%`!&4^?1Kybu~JzR`bv
zolnOMua+{48QFsWhC;s4uCvCzr@^7O(P3dDnSvB!(_SW#0_Rs|E5VXsR+eE_ng;$&
zaubZwqQJRss1M|?<>kcE_H`BfM+X`th8d<s8D&HprAHa2MDR9}g0`RQG*>(LU%+py
zKfy=?+9#SCPO>m29Za$`<z%9X!FWAwq5X*h{xOpk at K2kflDS}B1;2`aA^)kbkUvo{
z!u-mcwZXr}$PoPNn;5H{5BVF}SR#k`RNu<n(8*rk+7g`ey1A#TG3rQHS4X2~Xk$fm
zXzS{-bd8O8MLE~Wys|Ir%D#Y0yFy;?lU#7`2q(dJ4u!mNm}C+0^c3J%MA11(0Z&hn
zCJ;7oJK(SV-GkcSy+sHBcsO6w)Vn8%l<FVuRep7A`iB>b-#v}~kso;TfdA<&-iKGA
ze{yad%Dl7({5!8~ciS`{2^6w?mTh~v{rp<Hj!KWZLid^iLclmP#x66~u`tyzF2o=z
z0Q_4-25QIx0qzDKPCCdQS9 at a!%G1f%*9}Fa>+Wdi?x^eGi2kvR2r!E9w}}rkONwyH
zPOvG>2<)g1o>%9wusQYM>Y)8A^3Lvxxw=2;;mO9&Z>PR{I^)Aj9lw8P_K)x8e{rku
zi`&JY-J1UCt;)~u^nCrG?%hkh?_O)Wcy#WGgR6%6x1Aq4eCPVrXHVbz?XQ0Q*Z=s-
z2>yQ-{JaSMjjSx>9+8V3Z1wD{bZsp)c2;^e7S3gvCV7bfo&{Y4UEkSN0SlY_=GAfn
z?7^+$l9`Isk&~!x3!`@~irTs`Y~8$|#VvmG>&Oni^J at GT)Dr at M3nhGb(QjT2s)?V&
zRdrn4?6ka<B|oR9fm{Ip^B*!TPBqC-<iE}l at xwAHNHWfe2jq}EI!6^b1cGjemnJ3<
z%o}IN$+zUo+l<nqc^jcYj7+h&MCXjx*9GU}H980$Fh9}ENTR^ph=@?|KXF9)OhVEq
zVn&fYqu>|(|E%&+WRJ)sB1M}YrEg|xY-erm;f(lE at y}6LUzI(2dd5b^?oKA&Zf0&y
zfZsMO0NUqU)DTd?|LReP#6il?*3n^k?q62?_zb+wLb{U()bc at I`RZ2Xm$x{Ae*_Y0
zU*-R*@9qln-x>t`5s!x=-#Y{TXQ<$Raz at Q2;2-iQ<M<4$%euOsa7!K9;<jZ0;CI{D
z8MUPwLgQxHLr^5>+I+9(>8>+!O|s)mbK+4xHmOlY$q_KWMRXAQN5{*VDgexbe@&pL
zp{El^eHS~^Aa6<l^H4usHwU|vD1$&x+k|lQ^cdUtFx$$Upt-dUH3hNj=4Tw;5OR1;
z{)N3!7j`GSIoSNo8;GCm&#vcwaTD-&{_)9zKRiM9FZ}Uo)u*>>-n-iS(d)gBuC`t1
z?>%+6ci_OfQ-ggsuUvTY=+XDzeE%PR{_B5-e?q|6)*7*@v9s1AYuj7H{|KR}<|d}0
zz7hht@#q|nrV<-ud{YtnCuDg$gwF**=R2)vcUe2zd3A^5(iQ~2<DzDe9KL=&$_K#v
z&aI|K;26-;7`&{F at 8VlRSI^<Ae7mBW=0<E>K<<d#+!eNVp56Q!#1#ob5&W?bK1f!9
zEm1%gAPTbM43op*d=dd_pQGSEHPR$6!L%gRY<fCJ0>>~dQWG6OfJ}9?hVwz at SVge_
zV`5=~k-kKMsUb-L+zylfE6V33=2yvI at UN2psPd6dl^Q|btj3q2l?C{>@N%{AbQNGL
zvR@^CRrWwKR{maq-^|_FCdAh^Jix at +0k%gD=^7jU1pL~%0(;2?3jR52>F7Yt9=jJI
z(NXM0 at 0==p`ve+>xS)1M)uVjid;||QF9{;#jUz1Zuj(a91dom*rJ#M(6yL(4^7R|q
ztSYXYTYc$gcO>+!NjS9HbN6Dh0K62kv at JqO>sEF7RyBG4^J?9y^6awW%!*P>^AarM
zLLG7wjZz|Y{oQSnBSr1F*bxgFXFE-Zx3QnQiN6O~z`&hCz?BoTKrf at HKuQ49qzIe1
zP*Q+TV~Jf=o<n_6?1lw?Te`u2 at y#QMpOnXE(w|?>`uJ+@=Qrp5>1pR5pDy_0)9ydM
zxA2eeFZ%t{ML#@R_{rVHAK&f1d$#@Z;KHH46{nAGx-hio`lWM^-+t at cFTeZq|N7qw
z{{IpAtFIebnv;>G{&lhi{2E)!X%;40<|b2}ZR~Rs-D>j9E3#1L at OIFW7KDm@R~;aa
z-mwV56S<`a&4WeYw6Y!W17J!95jI_QEF=v at G2|b#XeJ!OHIy8oe&gou at OASfj#hRk
zaY4N>hZv!h_HM6qt0{0SNwdpMw4*+P(sL6`i&M}-h$4<s4k%Hes(sXsihq<6|5Wpe
zOhSM+P%l#~Qw78J at H2(2;C%8VKnqqU80rE3 at dmm?#0dFI*(;C+>cafmBWr~GwO>;H
zyzTG6Ph_c7Z)j<b=GV8fP=T#)V`%`r7#raZkryny-A$bAH73S}HkRfdE>yuf`Wh6G
z0T<uGObr1<sUm>{|1U4_uPp7v{&mTN8*r1<0vS1kh7Y~hAO7&TDs{v`qI_mO7~mDP
zI*^EXy^ml4{L~cXpI+m{|Lj)Z!F7}yRN@>{j&F+Hvo!JWn$%O<sDhz=%pW)^V*PxS
zfJH?XwXoOB>9*-HPQ_^!Wf=ys!K47rK|9MjDO}6hRukl at W&!<BA43l(vtS=B2P;wl
zrjSL1zkZMx`o}sp#3VMvEH%o#EZd>6IJmRkZGOGi@>%#lg_rkNK0Mw0&E465dNTJ<
zPYb`gQ~c$f(l74x0DhSN^E)*k-&*wT+Y6uHS@`%`?}Ll2r~BrfKD_iq-^TMN_usm5
z^3nY_zWns-|Ml<x_n*K&QD9_aW#nY1tAJnE+I$M~z{C)=pex*K3#7<h*aWI!@9_1V
z03Kxs;GuoM%#{Jj6u(mcuI#YutVYJ*m`Ru{ZYD3VoR+nS&RN;c`(t)5VaYdc>Y_$Q
zDWQwRK^oCWzH at 7+6o@;rk7H3P%XxaHTXjA;$g8#7yS;)V1p*NvQIHZrT at 3z_J*XzB
z8Y;4g5lI2b;V31HAf%4qACW(-^Ct+-6~^YsxhVg?BY)v at JwiZ91TTvpRr3#nUm`_i
zevw$<U-fyEDp)CXF?uwHj<z^{R+xS+j^>^&Xdd*BXda|K@&>i9$bNkrEAoPooi#~>
zs at cNVgSY_v>QN<s75rM-+APPyl-NDX04ma*T!4)eaDF=&hR;>bmsoftYuHnIv!BAD
z<mp+FJ%Im{tDNM&If&-*J+XmrB$~(qiAUDP?p{KCrJmXf|J!%g*v+oQ3xdA<=GK6J
z>!xBXAjg7ahrA^7k~HJ=Xi5OiA%DFfFa2;o(;zQhUsqfpPE135bbVZnecW{1>>+>C
zKu?XoyH#|sL68?Jh$wK#h_flr3TUgO3U+C)^jzGMIk>6hc7Ma?w=zGzdi&Gocb<Q6
z at 8johfBD&yAHJ>n<W|j>Z!G at J<3-;-Y<PB~@tw=PkFWRKIn#CF=;8~5-Nz5EKX-ih
zweu(5euHoP;@|%b`2RBb52pb5pR(81QoxT%Vrn?iP(!+(>R<(~KqE{JOC$9GGYUUq
z(}IXiU7~r!=WG;J1Cy_qg;Pot5Dr``r)2_om$h?TH+H&ip6|M8zUzj0F6-tHHN38B
ze!dI*Qy@@KP#|-pxRAnOUJb$tlJRILcBkN~EA(tCfqaNWzs@>&12NK8&g+B*WiM*S
zC?iJFL{SP7h(tgwKxp8LYI!<Q?TW||{3|-2EHH7xu*nJd$qOT%=gZ`;fM3Bs+Fq%A
zDRoEJaDn^+{5pbv1Kk%^=SUz(*=uQT9qelt8DtgUW$EW>8|H5n;H@!NWWN#uD*lNV
z at K20jN0@uN*@XI&IDozGi2ffXe--~6F(HxY$%7lwEl3)%F|Y3nyt*g&7H(?4$o{tm
zNeaQY5Ak}?js4^ZmG;X&zC!n*;Qle(&g|<40?uux3*dit8zr#&wx0L{E0YG+Cm-7w
zyK9L98Gk{o<D#apRkH&Y)MI^P-&s<l6(l*AX0VL8@;DDE5&UDU6T>y3J}^J}N7u)N
z5HJt-*LHKz1bJZxLHm at zHVI*R-Yy)Cq5{lAd at b{mJgf4(s`Bk?@*@_vC2n7wcW!t2
zgOk`kw?Fyt_D9cdfAHSj=g;2!^rQQqe=_^tnc9zT)jhwt_}jM|- at Ddu|6I at 8mlobV
z+k4|w at 7beEP99!<W^nVx(}(Zgy!pwqPyffC{z?231$y?@T2^LL%#5`xOs1KeOffb<
z223<IK!JcLa0szO(LkM80Q0I`f$%xE at 2PiK*dU>SyxHCxy>oHw-evIzS0?nWPB^?K
z{?IBZrnW2~1YFk5bzU{gap_FnZ at -|9oT6H+n4bb{z^^nEP)(|FL|z~|<V&3r7ye!K
zk}NQkx*8+|TFXfjPSZ2&^OE>?k_C)1V{wWge>F7-{=J<i+n57R1^h4YuV{WHBfKDg
zY at gw>_aBqLDtm at y|1k4whQUv9ZR%t{O#Av8#EhP)xIhZ9T?hflAH#>EiLbjM3D?Mw
zH;^3!=LCX*zL~p|sfz>WbPA}&$PPa%en#;xCvFZ%bZ!c~jd4mjz|rsY7XLF_11{|(
z7Fa=7_X_x5??dp=`GWazK6x8f4=eADqckAke^ij?-X$J8dr|(x6j4Bq4qrPD@(2H9
z0e_4OOpJN8X2q!}e~a==m+~xxkV#e?MyN$pAoZ_dd<ZQt&Ith>cSq`CQT_oQ^a3aZ
zK)xk5k*^!(k43m*0i{N}m1NjfWYYqRT-K3xXid?LzJ&Y7ZhZXg#s^PtJbirYy(fgg
zoe$r?{O-e~(!xbwK3MeS{l*V&^gO-Z at cOCVhnIWbIM;r at fA)!k3yvRLb7pY+<+BIx
zT)*_;Q(6H34Ed|?(Y7|%u`-*CJ!on;&CGa`Mt35-H+d2%08`PmD%Yhl2h$SyK^1_!
zLF7oOyKWu}F+-O`cz)A-_Z<s8b}yztBY^^bLIC{7?OzeIYYD=M>q(f1+e6~$Q9 at vT
zEyfzLASDBK=t5=nG!SU`NMUQ|hS5rp<kCTPK(bJMBuN=_tHHmdfbuMdf at IswSnJd%
zmUy8l5u%F{LvcaDKNb*DA6NgUA)saiJWr+JHLT|q<^Kx#k5s<$29Z6ZHLnOHJSCO+
z0Y3{?7d?XuYGz{W=49gIZszKUq`?tF(ugSp&h_;v2PlLI5Ri{FvX2hos}u#6{+<>-
z?n()uqZYrvfd6UQ+S(dDExHMImRuso-lp)ibHQ!K#oeltpK)P#?(0XWk%tA(r`O6q
zy-M**>pAz%5ttvVUqa^L$$|&RQ9dg8z4k5j?pq1 at M{irGR&B0p=MVxmEz at CsN;#I>
zj9g?7T1d))j93~0bj0Wan}zw>WyI15L-W`qMHmNo2=n{98+tkOijkKyg at Asbr+Jv4
zL9n+~bPz|UoJ8xAbk7-izKx~MZ57nN`4{%weE$B8k3P8Z?7f>GJiYn!@y++2Tzm4)
z{_|%NGtw8ld!_f|yY+9K?|pW=@$TvF*UvPc>1#c)zvI}x1w)6I4E1k5KXmZcm5cAa
z^Xw15`{(hmf`1y~$HYKxrM~V&kT7}DBr_vJUpK?#2tuAL08s;epa|82XY`Ew_8u?~
z`EbQjPHyI?ywc;ov)64~x667Vd?}O33sk<_7Gn6Ijxc=46fSFKi+!|493+mM^8;Ph
z&*Qt~^;NS_N_;PG=39sbBo-GR at Y9&^YAy3<D8h(yD$Srq<}O$zg<Hghn8yTL#0Kj{
z`a}MT1?o%}7^_Dq0pS0U6fg|_k%rf(=l`PeeM$K%&d;mhe?|7I;OD3sJ{+aJ<?aly
zkv(W0mfGP0{}KWQ`r<iQn6Y@>IW5*9J{<5{1$rZUG*;#Ue#QLxW&CS_e_dTI!p+SA
zDu70um$%{J=e^#~FatvuoM7@#|L_v6UZOydfBP^FCkx4h_!scMbv)<hA<unF-M4mm
z>{^5b^66hq7NFn_UfLSDaRDs=eymN4n4h!&f|s;<HWWMLB?1YAkV$5&U1l6Y$S5_E
z`j-^IAOs<xALeTw;cph^M=#7I(9_7vMbFoj6hNDR6YKaeJx^!b<Vf?(SVF+HFwL$y
z-?_cgXWcx^pIaY&fPlaC;rk%}#*=riKY923TW`)=voa+oyY|+J#&<6_ymh|&;ibkK
z#~0qeIP?6Gwo`}DKTFRXT{+ah_S}h`SI!MRy#L<se*I74f2xJ4wxy{kA2Xw=riO^0
z2^t;nKX%f at spiI7o{sRUSxFi_S$=nv52_xB(iuz|+>m&5oyz$F_{|HTdLjG+D`R#o
z2JmQpQ9kJZ4f9A4L<FfJ`S_-!!Hr2r*C!2Z;GC#QIkA}^MZQpEQm3Snjh!Nvu$9zg
zf&N at G7qdv}h52>E;veQOOhNqEX2sj2M_VOD0DjYOKjUC8;~-DE*fhxK0)zia7AA;u
zrPNh5&xrCFZFs$8<_y=o1OgdQt$c;^721DUAPMuoLjEfL^$h9oN+3Y{HX(j?5kYV}
zJ`dubbYNg>MLkQC*T}^I353ss;E^zi3g*Pv(azY*mDg4L>zWw-4E~kk7v%&0Pt%b_
zT`*?+IP=H=)Cis=W?fRh;^bf5FY`Q?_5gJP0gyA{F!~DOzwm8ge!iM^dOMjK{Cn+R
z>eIgl{>S;j(8H!CWm5&fKeWKC8;dy-0+ePnf?X at J%}Y{IKJ)@;gu(oz00a*fC?P;o
zj4IeFE(8ly$HUPq#0Mc{5a!DugkfX=?O+YoXhN8AOpsG<l2uVE`agV8tM8 at -1sC?-
z{`kY&A3p>3>bmmo!{fJaG<DBU%ge1C+*xyVpy7?vJr6H;zj=QCwc|6-_Vr#pvG~&Q
zrRN4$oIJAO?D0L<E)2bW at 10+N_fO(q+rkvXhc%HVse#@kN;zFE^v{?H<B0`E1ssdh
z&_8G%R0{Pk{um3it0+bM at M(-9`xU9*<+ioUeOIsNfn{lDx2K)mK|0R3w1-wE*Wdf-
z8t)^ky^pM7dG)P?c06|V0{&zr1mX{^CU7XOF`7WWl-RvZh+CPCXr0bKfTlAic%<%F
z5XEV>S#iXsRdR$?awJE~_)xRR0HXj8eJ^K?y92C93s|Ortj(m=tI=V+VMO_>Wv at Ez
z at DCckzYKm=`6y+t%KwBIrLF+m(ayla413eU+f8JToi#%aAm14M at 8OK{F{1w!9^jY|
z0q2`I+Tn=uPRazS0*s9iMT8F_Km?gM+p8g<u{0m9e_zJGmKOR)oBo=q at oTTWW}6v@
zhd|55yfhu%4j0J)o1#u}H9@}6{>?+g0^kSvh#ztUhCkIV8Jzb({w&Yki(J>uMf0#!
z)k at PRu&0p{fQA2q?4c3tQD5XdJp&<RR+!APPLdLsMgVG`5Fjb&`nl-^dQuB$a707A
z>4oWsc#{q+A_Me%-ONLM4I}*R(_>AOBU}nnJSuV+0ZKiz=GMp0Zha&R at els5J$`iY
z;e!L`&(_TCNH54Q-L|U!&QSf$<8_z%d)~azbm7Q?iv!&k20D)K?;PB}aPZ)&v&Xlb
z9~!)O`^|5 at _-F7>%{$o?!_xreKNbErF@*dlD2 at lL!qOll0zD`~v1p{p1tE9WM=7!d
zltR%EwebA5ZomxG(=W&jAs06L<{{sc8+``X`3$TD_Fi1r1Iu|&%E>J($sI at 5!ueDR
zWDo*J(#pEIO0lpQnS}V1UfXKvnqfgm54t*+9K`emZ8*!?JW>)3GGLGF0r~JhQDB)6
zMhY<ScF}dT(YCeFaj;UR;A9GDc-jHOXH at w!>hq%E`%=&M1 at kLyFQNUHN@I}!68M4r
z at X{CjoBDa$MFv|3dSm8T`gmCSxHJEt${q;;TEp(nBm(Eu7>~j<r<7<5Uw5(tZ`OnD
zN9P|D{8L0w4(OYk5(4`6Ho7Lp5&|#bpHFp|EHcp7HZ~kHZrp2Q$KpfU&6&Y`j!kPB
z80HFNL~u#Tun2xp`){29`FVGb at +lFKdU6YW1QtEt^z$+TMDgp2YNfNeY8F2MjY at Ih
zKfgYpt08nnheKDLbweRph7iCDa;?Zgd8)NA{7(+D&x$7n!2ApaS;d9o0)c!ZZU at WP
zl`H`A=?KIBs37!@VVIw7Qlw{9p6!er$C=X;wk^8z*++Li|M<?QA0ht1|JBEj&fb4x
z%fOL}_Lhvof|B)1s)zQ~T^VS+e!TPAaq!RZTkDAfv-<b+o;bAZ#Nl;kk8Qtr`rys0
zcfa`Lzs0{Qdtm;lrXU~XuRGaLgZQ7I)OsrZ&7%ShlfoG-Kzn0LQh~}~XGbNp9KEBL
zYfHNjuNcf{T|1znT>wuSJ-o{6;BppJpLtaTXYT9$xDCk8g11kgJk{PMwlhuzFY+bc
zAf?%jL;M`F17eB1On#9Rvu`=&1B#R}QPKg$IKvV&0*rIwn05g6;NOORdS;w;N~CFo
zKm0$<$`t*k%@nSajjp3LMkpa5g at 8Kk^NQy`0)9dMsO(W at 9)t at 19{h^(Q9OSEzj~td
zzhH9FGZBF>Kg&AMhnWY(2-2k^hP+|^f%hPITr(4#Q=%yiXb143k-L)^J`@MgzAAxq
zbQp at GQ>LbXSNNYmpg^F|Ffx=9*vLTJ)abP_W5!LLOg9Srv#5yCmg(nrrVecd-jILZ
z-F_CxPdl>%+Cjl`?<kqm&TP-TxQE62V|OoQ@{N`aQGg<HT{njom`^+APaR$aTm=8a
z_M{l=`a<{GLi_9l$AT2*qD``5E#pGS0 at le9xS;xx{)|Qw5o7_;KcT)Dp$6f8!~#bq
zLQz5V0t_Slo$`_`3zDsw0-9azy=Ly+&pu+^dH(F?dm{c3KSOtKuh_k#qHShoaZ%CY
z`JJ~<)n7hZcjjQ%ozsn{4t8BW)^@tD_x!+;a{~*9j$naqIeVh-)>Ry&U&jAbG{5<<
z=AXz&fRSd3G7mFePY3*Cn7lS_+yosh121QWop2OsIpM&2HkaZ85dy;eT%w)5z#F(`
zUfPS)Ng3M0)#e1j1OMl}fg^Xa=-pGe5Y$<D_Xb!va?+rA`xqlwjQBFO!i+AHDjexr
z(u)`8dCxMJ)g7k!iQ}eBQpD0~;)owk;-KQ7nidBY-><WVyg=Ja2Bee1u|TN^Xqlml
z%ovt-ww+>PNKvonY^&#LujgW?gBN71uX;f;>N(o*1 at ps#|7Gz1oaP^8{t?WNf}e6g
z%3dZM0=z*rCkPnW-qg=SWRIgQ;J1hha*U6#^z#7oRKA#^(hIgQ1N>$oz9zmNMy^1`
zkL*BRKoL<9=qdb92>cZPdb(l(8EB?aQkxn{3K%~g%A$fJ8ydui;LKxIU}FMut|yDS
zfNKl#;S+QbrW^?Z at z1@3zK8;n1!XUU at 4T#)`5*AlU9g)|h4Tac$;f;O|I?gays{C1
zD4_GpAT;Fw|2f0NFrp8^V;LK4m=MZnDE>d^(;TcAjbj{6&(94<i0L56AN`~8_pnI_
zrwVW_PWP at arUjO~cg4LgKYjD7&+dNm{Pz3ee_np)?SUItdp52so7n{Zi|4eq^zWQ~
z?r`Ikf%>8S-8WA)4eseVKd|V+VCTt0J;x6%J$`uI(7^61=g&WR^vn3C&nx&>JRkTU
z5jz>@hssw+Yl6<Sv6CmgHg4>gabwLQ{4r8!GZ6wT at Q?kD6~hIjdL?P9MD4z<n^*v)
zKF8Mk(@$Z$$Bq3!-Jh=dnXP1AI*<6z<)2*-x!Z>$0qhw{Df{GV<cH_z(a?@z?j7=H
z1ef%I&kW}<Z8DKT1-evY$A;8T_s&TXnY4Z`bq9HeD8MFiTG2)@QuHyf$`lYYLd-wl
z3pwN`^Dl?|2?37!h);?FHwVr^EJo0<?K#5jBluT2UoChQ{G)t+(&zd)<clKG=$N at W
z0c^G4)i*U^=0}WB4`<T=FMLk(hyeGz6wjh`+#XX`Cy<ZfFJlt)$gC~Q!+=UC;CD=n
z^eoQ66hizHL<ZynWeQ>#{}jBV5(xc|1!N!vwU(j&gsD^16kzD%D&rrRFfoCcHf&vy
zKKp|D;KeNn%b1;u=<re+kXz9|*re3RfS*{v^MvH79dPHszw7#W<O1d&nEpcfGYAya
z+YAS?5r$jC at Pi3$_q+rqLaBvm1b~0+Ae?`O$H)tmz>LF5QNYd at 4@YD_$kzmWbCi=n
zPo{tjLVaC|(%hzJ(gk*GDPsig!Pj5h|K^K(pM8Ai+54n`%a7hZbm{!uRm)488#4<F
zrgzQmINOKvsXueD;naZzmj+u-AL>5akN%lAxPRHHex^V-oEqGH>FnvZ-~0vq)91zT
z5!r8SAcl{D?i4CSU2PHnT2rO?Wh#E`SeBTI(Lvf?&KO*#1u};Q<w6~}H+VQ)LuRFr
z at em8Kpt@>^8IVk4otl?M49&-2WolPK;FGJ&qOjM4SYQ^B6u?j}uhX5$e`5gW0SSuB
zg!rVxZknH@<z_!wqdR8I7`LJfmQQ}VZ(&A2d7f8JG8Ko@@>WzC5kbDDmBwtgj0xdO
zSLeDn6p;%|LVdJs%(bk|s0fVwJ at 9g+D7G{ihv%=(`77`q_I$_!qIMLYU$y#Q0sjk~
zGs5{wA)uB6$`L*nt259Cw+9&mu$c(L&oK at 3#`<RZ(Iq1u*$=jP8`=ihLsFpN1^@8B
zRdSTlCiW%-91<b`KNgUIqpjKk{t5oY|IyOYHq_TPG14(M)HOBcmm0 at id+jx90Yo5$
zF!%?e^sQ9im=FkGGZ*sb#!>A8eujL~PHp3y`-p>q+ev@`exd{0hx%8>o at dWs3PKve
z^Qr+q^8jpw!G**81QO7`MP)X%F!;Ah45t?c^P2{HGY-KkY6;AzxImCU`k!-M6orqQ
z9<O*g+o#7c2w at x-LJFV-;JLj0!FOM=-u&WI+P=5me at gMY_w-Qvl0~JB^;t!QnWe=o
zecRgxcF#S3r0M+Od8hlpf6s-1Sp$370?;+Ef6>tct4{Q9yLkHe{n!5y{-;`)sI4yW
zPr-}$nPR9JCVytbz<}0NGO6Hy%oqTJ$AXc95z1Tv;74^(1>^s??_4;n&-bqY|DavQ
zNG|PSe;+MK&ShKETLaQ?e0mna56HtF9cQDTOlLh9sQCOkIf9Nn at 1!UL{M->}hn^av
zwqDJpdico+VdExF1plM}kFs2kiah7+B!`4Z at 7xsMqD-Q|BQ4%NEl&Dzi<_CsW^<X~
zzlus(PG}8a2T=%XJRD6zd`xg5n3|>*0Is9rM?C+R+<s-wL2>(4*+0_cg7#lX{huOV
z<$tPOY)l#Q3G}AO6^9cs at 9S<69gOlp7qRSPLhNHg!9Q<<?X8oetm4Btv5X6I%S{IV
z4307aVd|!o15~&M`l<x_3I0|6uWe*NjA+SwOtegmqzWGSU?u?p$-=aZ+_XSx=FW}U
z+^x*EZ6(jDutygGc*W4@#_fUGkW9n~lU*bZF+91p3mZuUL;=|ZsQY%z2<&NMFc|ZP
z5I_qN0wi3-KXai*N#RTZ5ewWqF at Hk5wLKge1fm2W3s4kjn6wP`W+<9MfG!w?04@*~
zkV8{R?D_={fB5F%_uoAD>T||^NC6k#zQ1j-zqzMN#eYsiP35k2HAi=LUO6`ROkeYv
zL-SAdwVgPy=;Gkq!Tk%4>|K7WZ{4YZZD&s&zI)>z;eWDBxEUZ6Rq&&HrWontd8*D2
z<gbW-A^+FLyf)cL18hvgeDTs5wq$=I${)i=ghy9BZCsjGSe;Dd0(&;Ms-6${S38dg
z8__~H4}f`~&cLB;^m}-$=-tyIgxJw}{Q%=z+z$GW7;*eS at K0|As?l<HV3P&NpJb#z
zW-R|d)+IC1IWxhvAl*49*(oEQ<(?YnniS=kndq67<QyBu4jLJOD at mg$U at HM9v<4u5
z%3*vV+);iPeGey`F7S`clWKPq{|fo5Lq3B4QSw)O{$Z0-6+bU=zKVSHh+;vsvxM{g
zJdizRf!?SZ+w26Ck8OA$bD_fm$<x))*`ADGm!INLmSvlr=$e)2o}cQN6v+?~RWO(r
z+E=<@ua*GA`iJH(&L{c at 3kdPAWo$Uj$N>H)1Zdn41Y;+R*JJ!LDIB?uszI+RW1OAn
zAIaK%t6_Mg4j at O^P}l-~5k-e&&lkBs27bC4;CWP&?9 at OA&8=bt8mMCd;RvCEoJ-Sj
z{;`AT|HAzCIf-^z at xWd`Du7J^KpnPcC<qlq at oN<yCYu6+z37FpL5ArF(g7AI6A^}?
zzQ$Ay`N<JW+aLe-hj)MT{iAQcdhppNuRniA=WG3;{Y_n+#SOJt#YF|PW>z2BUOTvZ
z_Q?bD&K+q!xxedNf7`Kr3r`=JcjC};c0ryxy5eO2hM~a&S1<f5{_%Vue;IO6LO{T8
zEZd+cdnclQl)Nt&P!T`U0;5c at GzCIbRp@^-27N}r at 3g#49r#C$vo%8upChX&ekoC@
zr>JwWcO(%EZNlN1{``{c+W6!uvsgushKiq at Wk9RotrOU!fS=sqwSO5N1>mRKPKm*U
zp<7ihq6<nHuRV=<JT(Ql6{Nf7rFxX*xR+)*#7E#Xk`A16Q|uEWZKFc$;=)-TjV0_C
zU~*431<2mvSoE8Lw=>8`%Mk*G>>#$aQ1Guc at x_p*B7R1O+>{Bo7foIj{2WF3jDla8
z5q&WQq|vePa>K3>*>8&McQIq;2UQ;zhUWJw$#hDN#?J)*^mz#l6J;kX$agHyw#`YT
zDBulLzI>H^!4$&MB(gL|{IgkrQu;*+JnDjK^iV;FA0&{Lv4M`6F}0E^fz%{`texg!
zOCjJ=kxfaZb`ODW$g*}BEMZ$K!&IGh3|xh;>!c_UDJw0QB~TFC9>G6vz=cLNIV`AS
z@)_i_Y}f|dP=xtI*~=^hL&9{yNCY&(sD;@PfbC<P7KIQ3`4()Ai3-$mmF)l`e!N}C
z0>~lu#p{RoFbl!H0OR;jy1*VY@&Y at m-uwM;p8ob%kAL{?(br$z`{en#2ltlm+FsW=
zr>L$bySON)y0T)+%BnpZ>QC$g|D9(Jx188d{o8(I*Wxq%%T6Ed9XPo5)WC*gM|Pe(
z_V at Uo!fe0N=SB8UH8v2>$4GyIMz%*G2~_1jj(U?V;e!7$EL{g{s$<?pIZ5LW at x#J?
zl$xls8q*%dj at r+;eVEA;%BZYs`;j_~+A at U*^CN+%c|kryR>T5Hfh at r5%-rG*5gMdp
zS}<M*mO(fe&L~wF2E&04y9^TsdrzTzr9Dl>KPkYgs=%W(+c_=HDK*wPE0N`tm1v(B
zX&Vs)_#HD7?31G0Y73Z)kSU<#aE|Pkp&e{YFD5>e9x)AK9MK8nJ7)Y|;9r!#LjEJ0
z-zj^6I&QEs+aust^$#zOB40gGBSK#n{SR*G0$}x1 at S=I>b20Gg5F3W(cS?+;BTRK5
z86hjdCL at l}K>yIcc1n&y4$%d0hzoN{ieglr at 3k*Zx6Mr=QtV?x`F4ilkU%;Zo=W`-
z@)>@h|10JyAz)@a&DfBjhW1Ak&}-wTOrGXsGnJ<?__;ZirZYy1dVyFtf!Mj!EaZ(t
zm$-S1lA?TIe$XDo_EjZbLRZe_QyRg%Uv>gE7TM0KpcaOpO!E>kfB1o3Gs~EN0PSio
z4B5}*13Mx~0eU>6z~9|0+|PtTpg>O at Z)fvxKP^XV`T|&>w8Nww9N}-pO at W%yqMhed
zfB2^#Km6nGKKSvsPk;UWgD*bC{O{eev2O0{;`&<fU)WUFw0py>V|yD;?yo<xW5I=^
zGY9tcoRj&tg~t!h at 83%cc<t$dRfqR)9yoIB_D>}ch7W5*_G^&+;(0>*+-2=)3i*rk
zBjSIYh<_gIp=D(%T_j_Djhj7#a5!MJy<ifi!Qlr~C514CCoKTQ4%&&;gW93yMGLW?
zf=~1BALAU6j}`*|j9T%84YC8hNYuVKNC%cPVaS!I&xN*R)QTr;aBcCB^>J)G9Muw7
z1d#F(P at 2PX$x3u9$#gA9vx^D={7xAOPT7eh0-J~+oA5x6jK;|nT$nHZ6<a1L1R#G>
z07WrH4Z2Rn|3p0<Q9(-8^RoCECUye_|JYEY<o^%APjr}gxtcP`#xcOlDj^(@yJp4{
z6c9Muz6b>Ne3=FL*rdfcRpmR^71<Z0S|vro`5>IafpG`|gt)LtW1KJAsVdL8q1Yue
z-ZmnT!r9!*l at vgOSZmY*qWNo}(V=l>sIQBaXJR;>{KbqD+%@vS)su&2__$c7M7h`G
zdp4HHW{UbEiemgsRE_j`m$l+^(&}Q)hdLL8V{*d$Fp at faMVL_b((|POWY6XfZ0CkT
zDr<^g$ltrA%(XH{ls`pxcD&3&Cx&B$lDnl55bi5m0Q}t1MT~|r9nBQbG+PVW#PkAa
z0jP~&$Ls`;%3QmeeCC!}pZwb&pa0=^?|%FBnR|D;H>|CmGpne!I=iG8{I?v~+S<2$
z*1(>o6Z<+(9TNRBu&4Lj(Rs%XEIHA)<jB6oeS4Sh+qLOv-<}i4UrqtcIf(2r)~D6Q
zmT)LtA%9`B7xf^OFB+20 at 3?X5Gi?Y8{1eP`@WXyjNPrd?7la%dxkZYploOk<l$D`~
zWwdu8c6c5SlXO5o3!NWyW1lL7vacN=J1}QXwTtaW1)XtW7qSQNlYAL6v8>7oS=Ppp
ztH;fv{?&7`74>Lk2LG!@C=n1+RTNxR7(AoUH$PoX1dd73)B+R*cCld)tX)i)qmmS4
zW-mRODNu?R_5$!L!2cA&8h1x at 9U+h8BL#3A#s6^St9qU)`2&8#UnGB}G$ufxeHHx3
z9-Gt{@A6z^k3(Fz?1=PoWwwpivBa%YqMa&pUFwTrcv at f(KJdo#LHVG9C<h!Xa)=8;
zz`iIABM9-sjsPQ1mlqO9Ndc4q(lw?9Y;34wVyK0cK@>w at FX4Z@juvX1Ws?@I!XDyM
z`<PBkT4V%~9T^PeE^MT?i^8XI49U}B=bT=EZ1-5-iFWdAEar~T^F<d0FK$Ku&;=s|
z7y-fv#s73FN`tkKJqEEsk_$4TnT12}&<;lVuqljkfJDFv<8TzelmG}kLr-V;Uv|n6
z7xAIqbwywQKmSu*U;g|5`0)3?J$3iaywxjb%xWvFo&o;z>Z&U?ENj`fdG4u04M%r1
zAKSa&^x;`24|Wai?;Pq|I&`G_(C!sS4=&reZPkwL+xicW;vd6PJRcJShTK%cN1bz{
z=4Ie#nEYW6CS-URj^JN;ywhv))Ti-Nr$Cs at 7~`wER^>4Z<X&IIHG#2F`{*ATU^}{=
zMgW`X0x!!jIn6JIZ^1dQcpY5fv1f7C)qVJ)fo!!txl!Ifuz?0K-^E4dE)YJ<lf(RQ
z4qLYz@{^zxQm3Jp3mKddU(r8&3}=9`K^6JlnMna9+5W{@K6z<m0q{>Eu!{+GNRD<$
zjp1k;6KWOY%iaP0<x?E3cpM7b!B9agaX~Fi<hRz*V$u&S^mn$WV*5b;3iyAC{71k)
z!H}VS8|EL(L;Nr^Q8H4}<|d=+LB8yEPl~k5O+xSkY}?FuDqpvpB$~wzv7w&DnE?%@
zeziporI{{Gr7n#nqz~qZ at QaucQpe$5Z3Kw;Ve(Vb0a0LPLKc`x6O-MY4E4R_0+9!%
z*jZ at 85M3dt6lfo{kC-8ML-n#vNilY~@&bDnPhn~<!S=!VbW+M*lt1rB`r^o8N^svr
z3$>I<7fc#q8CXm-fBE6;3uafEg)#-l?s$wKMxfC`L?0w3+hHR7jo2FRVyEwFZxZOG
z?QBa4j2+6p80MleLj79HfBTm|E9)=6{p)}H at YlZ#y?%T4iltQ at ZACRzIVHtKvs-6u
zUsKz+ZSK&)j{e;(LkDLb*|qTeK*!*|-s6YZ0<dDJf9at;i??oCv2E+d{rmQwI;n<$
z>iJAF74XCVC?C0}dfE&;NW)7Rc%XYOvoRCKi-rVi6DPopY8IGmqz{U)yu4bbQ%o^x
zNcoRABm`tX<Mv+K<y6548+yTH0Wt!iA+FB8rN|q`ZfOM53-H{tm at iQ#@FFG>QVQ^+
zf~dk6DdCRzv{x7=hEi2QBho;O2;g51|4-1<c^UuQ;=t0Jpz^$s+7d#*GcDdbC)q1A
z(Je9BDLtNwz%DwJL|_ZLQezm{hW(g-U{kZk)!u-O*iN?KU+R4w2?1q^>#LN#BMq-n
z^8ZK5U#f$V0)gvkq>+7&2 at xW15+kjHeChBq=K#VHFc7<aL5d4{rlDA5PeKH?C(O^6
z at I1ZCb0WH%BNw$g*B3ig7dY1x+GNHvN=LEGSCK}90ONB;9?l~vKwHcoieCeL760fT
zN?`QQI9hvj0mh6OQ9w9BV|We#eSCSQL1_jz4lr}I(eU6LwFBmPs+(GNQRKq>fFIb4
z`OjmZnEa&RZ7P=iFE~Q;YSBUzzho1{0D~4}0i$Gb{?S4J1D!+9ms)^aKnBP5g!Z8_
z4MNn%#mL8%S^zet5FiS8Mv%UXy{?B7rVxq1JS*;B|N8&_+h6|r=l}XY|M6e{=g)un
z&*Qgl%v!prqOGN<dItC}Xla<SWo7lwb#;ffQvA+4exU8-fvyt==L{WU{%8Kc{-uKl
z7au*aXv at ZBTQ;rPwPVXsDTIL#LvFNs1^hI;APQ<az|XX&W_a3%vR9-ddjmO+9}nz_
z0-9n>AgC$8$j_a5Kc?;x6$Ao#5XC~fgkCUL3@=FC{{ooR#yScIsZThdi0F$^<nkqU
z2heSV|H-+S4A4G-V?VzJ*mEPWCiqXVtCZV>aOELOR*7MlKlrqGP^2N at f5KDw7&mU5
zS9zX)VJ3;duOI_0<X4o*(LE{JEg{N1HP(%j<Y<qK1h?cE=IGcLz{B6BI$3MmS!mms
zGa59U_{ajvdPVsNwqL4zRomxf<^Ol!=dlvV8#KQ|Nrq=(I<Th^jHF=}2+yCISMc9h
z;@UhNl2>IvrYP+&j=og|;NN3T4Y~;ZZ(o?odq^MD#r_SYA+u|!f8|?h3k at 7>2mwP|
zEBt>cged{k762XvF{m|-nimNK{`nXU0rqiBu`%bjCik&dju8=QT`{`JSUXSTqnXQ7
zt&p89rC^@HAxCCQ=2QWDdFDf1KH!%|01r2qQ$-43uL0Q^{G+2l0&Pl^KSMGYp|pdk
zd>MXYQw)2-ct9fLkNI!t?Mgcs^OFa}@u?oui98_4&z*44a<tKRvZWVb4{ziqDSOuc
z_P77<Z-4v0vU|7x+U1r-Jr%7p3uaX0l$I1W)Yh$EHgop|#7|@Y&iSVfwGQq@|8yTa
zF#puy#m5eIp??MrQZg^uxMAgvZR-x~l_58CV}<!OGTyI(U!yZwUvDz|Tqyk%@>ger
z0Y3yXEPnpwUsPR$s{jHSAutW2UlYmTF|(k6KW^`GpiVE0_N&{LE-0Oaq)~Pu?eRUa
z(VLwVyB9HbBBP#tYjF4(FXs(BOb^YE+kgd)|DY5UEnH;LSCu*N5(U&WXItqlMh6kR
z(yG9%(&&KyQ3*r}7&m^rM?tz<PD-GX2z+u<Jd$I)vXVU06Wmi`nU|n1;1V0|93ASK
z7!|y%o#q!$gdpX~buiYKVLzUTqBV6G|A=Ru7oI2eEGbg5q}V=6!)p}(uYg}3B?0)E
zEW+(a<e>R6JcZlC{D}hQ+^{!^3%UUI3_p}++T|s?q{X>qC!u-5yP8<RZ8Mx}i=3+S
zQAY$3rV!PEygsWcYH?fA_QmcURn}=Slm<5GvEZLtnCGPk{&_wGC4i9u<S&AjyE%$~
z9E_0<+1BT5qit=bV{5 at pBpdSF27PR?jA&%1Regb?`HN}wN~>#eGqnJ*K#njkO{0y%
zt>HFN_A>mBHHYkRtIiV|Y%OOm3@#{U1yO(yBCHIQ?eNqBBm(>&`42_-8}Q^4x?S<1
z=zkuNf~|r75ArDx7*Jsxh+5bz*xQsxNwigrigr%+o*8QC?XDF3SAze_g`F*XH+3A{
z&1yKft##;N=dt}Ar}`G2?34M2vjg3Idlv88xn%eDMeEls- at bL_?wyL^sg}J8__<kt
zpJ^Z2<fV<fE=eEd1M^RuFpkaON)KI?JsioNTv(7}9vw&*OerCQkU)Tz?g=(Bn*!(s
zK<vPq%`ehGJh+naW?rGTVjCAVGD3*<E^na2!gtY6VYZ4<Lwp8^1&0ku346GdXOo)g
zCz|qjp8yZ>kbPXy|5%_5w*XYSU|@Bm2#^Tynx5lXoaIrR<(ie`lbcE|AO!@J<q`!h
zF=6h>F&^m&Zi!LgpEfbvMHI_+0BT-69q=!k9nj252q+CNwc9J?FR)kFPssmgz%LJ%
zV at W?NBG6HUO(acTw2d>x2$H_B#6 at v?sC-$jSqU!baWH at A?Ao}s^I4&D>v$W9gMt@?
z6ED$AXQl345x;&x=)Ah9CGBprW>_Ug;HHutjO?Wspl at fb;GZE;V{J at PW9ffQ;)YJ0
zED~s(RB$8ke~sp*<Wo;)9eXQde-A857 at HX(QUJ`4l`RkXRE$md9~X{KY4rkrNf0tk
zJstc5egc6sA<3dTm%QLfsY110n8J~CK-Ut^*RTaCJzAXzg6cKlzOom_&rMpu%zyg2
zQTa}_GGhb?J7}7{m4T}Rb`XzAk$v&;Vb;?#UdI2{fg?@b3mASYsI15>Eh(AbQMF}N
z&CYeRkM6<znc2S!^S}GV!MUgU&_7+r4lW%$)U$6#&-%5!>((sUyb<!J;1$nDrBKDk
zL-R~F(BKRJevT*~RWx!0{}jIhex>qNqhON09z_i`DZD`xFl_9^p3UazY(kVaYh||W
zta5qU$&#7!U at Lr~&0Po^+03|h4zuMM7iGK(or6XqYea98*($!oPDZGnL_iCY(h2-S
zDQHN!DYV6T;4O-gN7C^aNmo0`O5lFnIBJ1W{7V3g8|R*t<d&7>QItUlc$8!XRTg-2
zk`n8Y8pk3Fc;}|NCPX<!g%Abw1=trRf?s<Y;FlD at MF9U4!g>nHgZ7^+0M8n=`jxLr
zYT#lD^ACfcE3DSDQtgHZ5(wZQk?&ZR?bcf1)>7^`JquIFIyHs_;X5PWzrF<6M=$FD
z>Mji>XdcJ%9C+SqVY63vQ^JPsl-<i?SI^_k2qcsb(ZS|HEF<rVT%1xK)+Fr!1AX{k
zasm1l{BuuL{9|I^0=+DOObj6tMqznGCxdFZ_q401TOoM`|CLe#OM9ybmXPOF^8AfD
z9`%qzw+rM;nZVO2dBRL-nq^fk11h|quQK*PkDe4jb&M`z7XWvS%2(}(QFPP%l3kGg
z?zq|10_=r>^R?(o*qC!dAn<fho({n at GDAUB!8F2N#{b#_dm9&Y3jQm~bElUUwlr3(
z?5)|cu89$#!MzI at exUL_KQOz0&$0{07Y`onKC*Agf!$qeR`sk|O}9(&d>HRnn4fzM
z?JEn<AK4=zfB;|^Op*QQMzwST_TWtgzno8=1R=B2&^}L|Nrglw at j=~`KcqsQ*v8YL
z<w>4B4Ir747Gc9qQl6pB-Yz=ANk`X#d~z$ApSev!L!DdWBBT5v9K1DnhQvx%#XW|a
zFj~o^S}wM1%;&l>1vgP!OOdo==wG~qe<cFOkN2*~^D52uEX_s>v0O3}9228la*~;p
z^UO#f5l{;d3ls$&>G8Axn0yw^qpJn}$pwOcT`g$g1?`W9fC~Q6Bd?Ek1h}4x@|gm+
zC=1zxjY-YR-Yyv4Eh`Z+2iQ3IEaCQyIIq$yQ8i22fj#&SYN>FpDR7#RM;F+&xy+B=
z)9$5d`&aW-DuS at i2H)xe@`d~C>VT~aJ-ZrQTguZ8tPX6cpv8bA%65ASVR?3()W3$p
z|BC)m2O(a at Ke+(Or)6nEB_+8vgXcEHs!dy|g&FKY$&_dD*d?B-Aye)xW!zuPQv4!n
zJuxVF>{4DLPd<VCrEuoKuvNLpenu=9gn<9KeLOP_ at 0yz^xtqs9#D&0_;2a;1LV!dt
zm04VOM{*F%PYFOF0QqwPb!{y4gT0stB?Y{U|K+=OG%lD|-rT6-zj|qR%kGVJ`!?6_
z+uVF)XZN}O*8bhIA^)MnoyQI?KR4L5f5);T`{%D%*1dX_vaw6KH8{gO`cehIp$6~^
z^9%VaJuk&EfcamL|0wj86DS4ufclX=<_vfc=3Eon;#gsnNNj{b<UsEnnIS;}QQq<t
z2-zLEX0|#~OZLQSQwK{(uar?@BQI&ClSn>A^Gi#;xkS~a at Dh3w83{#bT<oc#IH7)_
z3?T$2YE64l0w@`Q6c9S2Fr>1;6@=%dx>FG_BT<s&mY?cOQ!F_KDZ<E{OKu9yV%x}I
z_?bszsmgy6mqi)*Lke;}jBQQ?|9>~+_A>ZY=BI}Ow<zG}NR?_I9SrjWeo9(M8%gg_
zoUYoQc%JV0QtIOKByL`qu(3O=vz|miUO*su%&YZT+7_^-CurA_lwHdJKSe?8%DJFD
z9l&qvjXJ+8{KRJ0rs<(`YRL=i8j~lg>FZ;J;(yZrr39Ev3Y$6wtqA^A6K_-ksVC#7
zOoG{XvJD}i9}@&u%ZyNB7;+sMgT=>wE=lf<#cZVn^D+X#L;SjV`1uS{Grj~dB8sSG
zIw`=SGD{vf!)^<<Ko(2O5_;rui1KLk)JT#2lo+XzvK at ejKZHpwtnKbNje-{!j>qJB
zIZrawpnS- at Vv6#}L^cH{g};pdMO!y9{4l+#0sQApFRfkCJ9FpywtbuD9NjbX=<Wq4
z52 at zolJkR|#}0I#IJ9)&VE4|g3s$Y9Y*fo$8FG_8uYnZ2P!?3CAYXiMQUK`^<SS*b
zdc|JFKKg$wkBTLAqWrOQEn<S5%d({T%cEfC)=(w!AYAq>vgifNc4>A8?_DP2QamZB
zs}6e~%_AMgb#u@~d>7eP9dctFm-K<`A)62gTtHM7yaE2%J<8QX_8=N at 3HUej#}p=;
z8$;A%*_H4j0f-_}KY~khLn;eHDhk4COFfD*UGYNmQeE&ulcE_Jk_JI4k6DPYj}2pS
z>s8r9O|5Dnr5uoIS5%FPf0gse4(iFM9Xd?=QuC_dA3YLibbIk#Y3btRxbZB<)(TV&
zRV~G at cUg{KO%bRD|7iZ$m2<#9jbI!hpXIXxw=ZIG;@vw_ih?zr at oVR2_HQVCePH_C
zLGbUhY*xUgZqNDkG!#NQYDgT)eo5JMBV91|vBGcQpIkO=>bMEw<NbvH2?13UVR5sq
zTgTUxMQ4zU3~4j55BMn!z(3+g1wTgufxQ^g|E({g1;&y4#Vh0pZW(1SejORatS|-I
z$N6CoCWJ;bQSHKA=vXp1DL{D~gfE=WlhUbzsl+k=(I=CQ4bZext<9JV<x1+=Sz6>I
zjD|qZ#`X21_%EAYI<LKQ_2Q1hJ3EIC%{{t@$<J<VpNq%l4(wZT=|tDjeanvZ_3qkA
zs~7Nte6f81zmdKwdzf=jW&b2dPXWK+AN_;vuMRxFB>UAspi_)shA<h$VG52Too)sp
zNOlAQ0A at F$Jj`kiPj8c;V3#OM-5^OiAQqUd1 at K56B$I3+X7AXFcFJdd0<wo$6uy!C
z3uBO6 at DO;60D-_oqkE2k)Uh$ggVng$p%Ureac5t}|40aoA0JYlA6i`;Sd#6RlS*sM
zJwJ^}A@`yTCM8_5lbzDy?4v{J6uac7F*U~{(1D7&2mz^y0QP9N3(UXb_KZwH{A2Lr
zV at NZX(fzn^Tp*Rzv2oDt;GZMBjjD-RJ{w~P0Ecu`yUr{_ at cS%j3);CP<lw5nZ3{g+
z>qBSPByQ at -JH4~`#$g_YP;hZy{<+<OTNiruG$W1T?jDW4yf=B<V*Wx(*5GDrRU(cQ
zps_T=(3ng|16`-^Kb$7`e_?`327v$3NO*l*NyZDw0 at _RlGOn*Y!xMT3{H`-{a5ZuJ
z{h0P|E at fUqMkX4V^O=rKO(LKR%v}TIycy*W_{j*w0(TJ08u==7p#>>~5<ix^$$y1~
z5hU9o?XA#4l*0gC9*t#h#c(glSF!-DYG*qwdn;U^QT)$eySiph$MlAJ;s3Jf70Y{S
zwymk(yQyLSmIY at Hw+-&?VEFmm0L@>_pOxp2b?@J~V(^eU<fDLJk0=2AGU3BLCCe-A
zej4Q<pC#Ks)PWzS-IQ|aC;Sgl at P{YRcx;4casXta@#LvHJa_~RnG=tDEVe+kGF7#p
zo&g~;0)Tg3IZMXKH+8`wyn(@K at K1q2F2G4+(-8R-&94#*s#1nYYVtX1dpf}ta_QoN
zDTHx8!6z9LBMZ8q#rX>UM<ftgz^5eJyC^fXsz?$+WkGmjIZ@!3m*!uTi8V?TxaOz1
zWG4{_PCRlaA#xb}$`pju!g!cU2#D=7ihoW<nSVs{3^TupA($Uo2J}kYvJ<__vi+(H
zsd>@!95FnF{4?XJb}4m}wk<~aM07RrX<&01hQHtHxzK*l&c!gi|GG}!<+GBu_U518
zQ~Br&ixad^_OZ=~pO|Y0BG2rIy?H3{?GurwwnZ&!%O2R2duj(0N9-5F0+syE5HELj
zv;+|RzY+i-jVA+4wlKz0Q!y#+s`yauDR)F2kmJ6H{>R&FET$ZQ&k;5>ynsD69dSVv
zsKcLv|MKByLC82nW-RF&`+`7#_Nj&0#6)$BY~Y at 9H;Dz6$8dpgLABlNnOOp*qyWUH
zq<BLO5kWg(6#t!TRx<p<@IUxx1fpU6@|oM$)$Ls0e0b-Ap+ntgj&z(nxcK}an}55{
z9$h}v&r{IB$;h08M!H?xQ|_R`{FC%_81*60P>E9Z0{$uDd=3+Za=Ctje;yu17Z0yY
zKU#*z>~j;Sk0=57-PvG;|AU at k92A736)Aq1Gk0FmCKKaJTZjb+9|IY!$nGJmA!(M)
z=9L_N0^i7Y!8x>J=$l|HfPblW-5q3rDkX~SNowZTnaTzhXIuWk^z0<RbHXNt(GMox
zRSh(Ld_Y5)Uu}tZNp{GL!hoX8fZ}YxPn$TjemWy_7^HrM8Q$5+sxKrzN*m`#ra-y=
zFYwQ`8YO>y`KtjhtR7-SSuevL<g3diE!MxT7*=OFR~KMu+83tL?e(e5L-xS at 5Ifoi
zZ67kL3h?`HSP;B#dGMZPzAI-Vd%!<gp!j-U>7Ap<o}w!U^3U!rx_Xf3Vb*?pE#a->
zF<1759a+oYhDiC~LdtvRVlM9sJ+LbB#O6oeef`e&-%K&opTdLtRQz*i*$%8)Kre*=
z5_g)THNp~Cnf5vlna9>6p(9sRVZ(qN{Lh0OaO7l+JTrzdPGfd8mS=LaxMj#8;)1Wj
z{~Wnx9I-_B351CmyY>o_Xa~cVbnvCDU?Xan*q+oH+*}C+4=2hx=8AbD#1x*+I$;9H
z=N8ZuW`u(~IY~!*6#ooARClzO*4Kjn{PMDzC0)&1*UUY(uldNXnTL1wUOKk$3{%kk
zOV1DXoEzvpb!52PWoE3lO<#bYK`+Q(_55k|QU|HzFWoL>(-2olxm-WNKX)Jdg#lXm
zdn>_SU=_y3`9!^dVN3wgHsTmpf^DP at 9bu|n>H;RI*eJ)Fsg<PR)!RgXpc}<NuE-MS
zzoXKuB$b+rbjcVMi)+YD;X-joXx1YXF$%B?aL;%=FU7Ag+oXy7QaHM!@CW>(RRA3^
z-?BVO1jSjt)kT;>VYMaU4P^{V5D32cX><nyEAr`=;ftaGQ47>TQ~{z7@$lga5&t9N
zM<xGPeNG{Nq5WaZ%Zbu^;)vT1=cDIc8%u@!3)2w)RIHJ`Es%fI;`WH{nc?#rBf6UT
z)Nk#)ko_w{53NSqcrR)J{~-rfmft_YqrZ!<9m*cug!rj`|5Ec0_Zz=@oe(I0^LYJd
zH(P%5R at 1j{R6o5?{p5Vj`<K$5o>RcD;NQq#ioPE5MtUVvr*KW=&MKUy7QgBd8)T}3
z^%PqRc!q8!%s(po0W+uu?ZgFDt$3u$<E_N=nURD4DSwoWC(N_Sx*!SZD;^QUpEGjt
z>rgw~K2X6T3jlT4o)d}!wg8aO$uh!bF18G#%1ooBDLI{TfP0E^n_{5Bu2k<M`x9*w
zBh(P+Shl!oR$FOZjqrbMb=BIXwcFRu?%O$UU~l`-q4vSOORk)pH`Ld4eqhy=A?gS%
z=D;!hWyr at 6oXDJmzAoYx*(2o7tnV}#as&K=f0U1m`YS1tqs%<Zz#AWu6sR;OO~B%#
zbuNE1&cc|UELV(_$088;O(6u(j<#W6jQnAjo<_1HThVa_ at N;nZd2W*YrI^LcT-75Z
z2^k*ULsB4<BALjQkOs^nc5zAs*N}@w8l{I0;X_m4-z3PJLO^WK@#BCiv__(rlhKcH
zBP9UbF at Aj9tlG$i^1$W_-x-BIWx1XOOe17?QV!&$h18UUH&q0d<tc%XCQ?~!f1w33
zufqRIw|7+hsLDr`JxYg*CYMyZD)>iWKZ<{>PUq@;T3xcG1=*7k=Twn{=1<zXC}~SC
z_$Lb>`+3Emrwi^~9=vy1;P&2tja`9TdP4iwAnYsOISca_UfKuk69^4o-f8^$_1foG
z8@{*=`0GBp#)HAz|L|`6kMCrBa&`6}AG1#i{J;CF at 80?08>&3;j|7rkFe?A6U9gw<
ze>4OLa~P7gEYG(=mV-=6E!-RK2zHP>K7#28Hg at 4})8Y|@pJ!E@$2oV(I6Vs8iybPm
zmd61Vr{Y)O-J$u31+c;J1M*ddBKTW8(E+;tZt}yiiFlTRgJd5FjWk3-r(<nCL022E
zh8su4s^Wj*)G0a^rYip17WY=Qx0KY?6joN0v^G_*UtY6mW#hihIR9NkeRIzC&pCcz
z<;}A^{B!NC^U9o$p$dL}JCG0l1^f(oa!=XN$EbsHafZRKY?l-K!>x+1qJm$=|JcbB
zsTa`y3=qo0qeveX#*_d&X@^*5Qx%s>{_4bZo&yjEX^3x3_N<aph$}<Ei`r+W04L-E
zzDlB0Ck#oTxXrSgJ};33f%3!|qaDv>ME`Sz)j|oD5d5=m!p8-pjN}MKP_1Kuj$(iK
z<kb`qSyLKTSs2w=5n5U3TUp>&U+P_v?^9LCybzsYafh;#aECl+6i7}~CSZs0KkEFb
zwvWtzzUXlM9QgGy)s-b#fY~<Ko|+f at Gvr{GlNiuAJ!Zumk^P%`Q0!qeyq3-a at Gw8h
zM-luTgh0fJ&8QmW4a{G7abLyTr&Pcb0yEw{+xokQv;Or-%da0ae|InK`6ZA)3*>+Q
zjVgOkKI%F6pK73y5&-{)M2S(rWf?D{jIv((kQpkdkByT2QA+mVdOGVlb954+%ir^g
z58=p-0Q at qG!UNB%a}lwCpNNp`z*aBnKIS6G2sL?V9`XfH=W+A`{@g?+|DiIJE%#S6
zkB6gZt&~V=4FeBH{)>ozT43~l!9SRXw<l_JM{lKw+4195{I at RZscdg4uC4<AjDR+*
zS=zpLGkacU_U%}B{^+8M$2!j)U3Tfj+B+9y!kNby8tY5htGNB(AFAa3l3#}VyvnGL
zfM4<axen^6vxI;|!7%xcMge_uMhB<4+E2DL#Ry_2k#3L|jR0jYIr})G$&YM`WMY{=
z(df}Ab8*yA%#&b#(%2HiXI3Rwi3<qH<MW`G&^!<Y7m6_9b($<VZ|u?IicxBD8AWh1
zrL0U0Dq7JF{m*YCdtqpV at vHrJ_#Z!hd~kDRTt{7OdreGRO+-UkIHqV`8p9IaGYY)Q
za=dGbSo8=`K9IkNf8l at mi!kE+!xgV6ADL~CHL84s`33e!reW|a8G$yg+RRe3098O_
zZ!110ArQ5w71<B?sb>-Sp at -K7?O5cyqQh^^yzs$|vDXhud3$Obng{SVeRmI$Q}gUH
ztLdA&Gk^5}*^}|<HISeA#m%-~zYX$P{Gr=-e)#qg>-%qr0v>@iMX^A!2yo00ieyaH
z)BXwm2?g-akpN*!2!Mo^QAF6GV&Ei4uyCOPJm4n;ROD0Pit?camYaavDM?{Q4(2C)
zG-0iRB#SZ$5bmRSRDkFN<r$&War{^r1X9`!uo>mBC?B*6Q9x&(F=MT16vE=!@*(IS
zH(~N5?g$~!+_RvfwYj85 at IQT4OYP=Wv-WM7b7WWB@%<e`hj{GgvMVQhuAEdKV+it9
zw;zy*=cy<ksTq}SuQ0!&c)2*j04$|TB2|*|F$(+96QV<eqK5-fz(W7CosdMv2n4^N
z%xc03JOq{By(%YQK?7C~E*V#hf)`(iF(Jj|k?|_j5nGB#n$Qb<WL}3-Xdogug%)Ci
zsg-O}qa_j0C=c@$|A)D8J4-GUyER!{I^^PH69cw`4Rgil|Gmur3VV#7Fd?w2IABI$
zL~UuTqKKl~s-xR$BAY8C8q0$#^4UZaR#&QmU%|hGz>Bumu;(+};r)B?gM4)jiyy(i
zA#Gecp5c(4i23g^yE<V*7qSN at KcZ(Qom}`I-xApa{)6`{MfL~nSR8(A6X0h>p56}r
zVS98AB1e$__1(4~AEiFK$jbQq2KaCP{X5xT+<f%CAYVBD2W2UV;PJ1&7sZQ<OQEOi
zf{~2?++wO=mH%H&0q~&=y-%9RRIvQfQuYTavcxbc4COCRJY$}-Fd5`CjwN0PE>Mv?
zSV^Az*+BX(V%rO7mnJeghh)K|5Dy$+1PH5;nIGkbvOC@;C6b;Ie;0{6tK;J;xq!W>
z{H1Ijxo>L$v!Q=T?o4is-b^(F)D!^z8Gb9SngRaHyXJ!bx~*&GGw^x(@a)rv=bbyc
z;@T;ha}XbC*zFhab9WTxS3OS}UVvX}J<I`$Utm98z%LY`jQY#8&)+%!Y81%*r9*8e
zQ2=!D=eZi>II<g6Fm3>54u5q^MK~mnp2s)9*e6ADj*Z6X2t5LtWk?+^6jzu+fIlP1
z)#Ilr10->@Q8>YfW|t^ekFjUkh>!*&i#W#Eo>MGMWmcA<eSSMbja(~!1^7+<_&fY_
z^-_Chg)~=&&Z-TXSsBza!@ss9vZ;bakBktAA{JV!hLt}mQCSN9ho>NZ;`zL!`G=AJ
z3i&HtVCMGGJnUX{EX#^s(w?+!5z0Si#cT at Rm}MO)JD1{Qh8$Q0^8MG&!}E+dxh3}c
z0b%~3t(?cd-k<#VOyXN7;%@aNKRJ{B`SrAqE~h=anEAyGXuso6Pcolh2K++)-+uLw
zqssh0e2e}E|Brw8R^%KN%_#oSw at l3bEdI5pfqbfdaL8rHb07tyQb^_8IJr%Uq4?Xt
zp8JAFL9XWnrAmsI=2ugR*gmBh*hdt<h$8ML4xY?HGx?AhCPpYfBq0>=(+Hy?pr&K;
zAI`_tV3Eynfv8n!Xv%JM>zBv6hO+>9yn*3|nN7p^pViv3b#3#Z?aVxPv)k+15aLH3
z-EU^Z&k@<9w7QgTmj>Er&j`T<_%S>uDx(g7UmfxpCV$cYV~4>nAuvk(FHR^A*)@Rv
zXa5wnj2L36kz(3R&%h<-I!I2;PlP4d7e)h%hj4NMc}y0sLlktx&^&lPTsqi;{h<&A
zK|yNZ;-Gej5p*N at 6wHfD7VZmCKo@98d?zju>2jLAC37Rt1t}8Kk}MCo5%MtD%lIGW
z4dH(gkbET0Zis8Cj-OQ*)L0(aSROK`KB%oKsJ+I&vD~k&)VH=oRX!^CIST%NI^LtE
z0L_Tc^Yh at B`5!YQ^baY(sWOjgx46~wm|;WwAbTPgwh#z8C%1(iT~Eym_)-4h0~-K8
z%pY}jhYJ3b_s{c3ZzT!<|HoI;o?p)R>^iic{?X-GKfc8L-+iSpKgvf+00IARzJDws
z at Ev*{@G~og{^t_GZ-D;={$DNv#*6{~z=m-kT40(8e+D7sk#Rh_Bqb6KN99t5k(xoi
zx-j!)3vhb{w~uNL at XNhpBBCslrS`nU at S!@$j0F-XDAbe~dg1bSF%(@CDBHd~of!UM
zu^pcIAO3kf;)z5sd at Dx?O=OUQ|BB{D at X!92`sKYH`?qx**w#9*XZE>%{^r-p+vj9s
z3mY3z2&hvkAZ5;hM>+t0^)coGenuVCh8MDs!Ux!+{1x$!@c9M&qm*QJPWhu4WC2~s
zIVwOe)Ej}P4vN4J{EiauS+VkWSZH~m3 at fu_OGQ-<`y&`8Bs8D`W}7j8$ftY>@q at f!
z2mvL at rQ<RZ2wZKr0vCwOh51PdfJJ~1!a5)|^9)J+ZP<)oL at Yi`GybXtiEQL at 0sa^G
zS1z4|z=R2Di#jq^bS8B+C(dh%Yp;!;+ZfO=J)o&PsJ)t_$bOP9<gZi#;9qh3X#^{4
zxZ(8z{4Z&Kl)qwuD#Jg3p9T1-f0^WoU#}>iwewZkPb~cZyuAf at TvxKLeeYxv$1%hV
zF<Z>c%#23Kl39{vvCPcO%#N92W at g4XPU6^MI}9^%CUed`_nv$6zqM9(t3{5TGw1JT
zJ?-6Ft+smaud2TKs at 7VGZ_nzoXBlcIZXf0!uxU1KKkWEAz#sI^qKMNQqOb45^GBZD
z1lvjY;7Ht^y*wv9K9Tg%v9h0UCqFzUghx4lqvsdRQ{289H@^Jr=2u^e*1`3mz61VM
z3Lxm02%u8n$`lAmP`(a6vr`-N?M9vsAd>^c4V;f|cjp+NhUaGx_f;Xd2f82X9~^))
zNT!G$I5(&c2<Nt<if}^-1mGWF2%%MjQYKmxYvgjHQGTR92mWu<iEa(?W=$J&b1OYm
z7Qju+8YKA77(A%o)NwhBXAWV)<Nhs_y at nsz&KjP8A5SQ1KevO at j6%L>p11;qd}5+5
zcuCGndq1>LbvuYS{K{X<z+aUD at ism4oq0pd7KHz^iUNxXP&Wshl&DAqWU*hW!z?w{
zH3o!JE+i;OVT)eb>?8nho1Mz`F)UP$<^%uHe3ENL`oQ&htB3Sl3DuAAWuYX_qpczP
zP$DPu#s71X%Y`8@)cn@^(gmc%Z7E)x9t!+5;9o4 at wV?9c;E at FZL-OJ$l*dmjj~QJQ
z$Md+7sL at 4L@NWP=u-Euk&jyBXNOdbEylA1?^K1N5 at Umx<%JGFTADlmFFC%K+n8bB6
z({?TvwR8Sx0soe{s6AoF*9Pxig7U*&w*vl)Td{(;d;6jK@%IlTJU9&Pf%7nuKUCl+
z;r;ZnqWzNd0{$CMz`XYSU)=io%UfSRkuDBJfw(xh2q>=bA2kdrkXZ<z?+esPO4zg!
zH at Bga75a94_Nw-Wf6D4@U=`1ghX?SaX at qG#q_-h46tshXz)v`!987fJ%{V|95%&?t
zNadG7IAAml at +1qU?Sa*SphL1Fl0|#=2o~j&e!QlQ$?~e;ALMgGUwxevrJnfzKD`Hw
zADOpe9;;oIY+D2JsURr9M^^G-K#ch!5Pk-kui`unuyG;(BK0fqlldAnf7Kk$3MZBP
ze<cdUCoo&K1#9-wr)u4)A#1q at x)UWEGJn?FNxmt&Ub5<Gv_CKwg-29PSsV}XQ+z&c
zoIMk86c9pkWb$J84`Bkyh?D#X;S{&evQ%<G6yfLcqJjc at QeBxS;c83wI9fry4sE1v
zLOZCMJ%n>J0pD<d!$&=kkZF7vDG&ybG`>7}%COiG1tDXL1BT>c2!6%=14iUy1qS@%
zE|mXQoFAP><6o71n at cifHdM7s>;IL(U$0FIluxG-xioe%Z$)|j!32WjjdN&YNZ-8_
zkssRQw{}{{!IgOakbTRbJ&Nk@!Se(D*ju~f9~>4Fcz6uLU;OR0(w}anJU(gQ{G`43
zf5rKsJ+K|Xe at o$?XTX0O|BvFQOTgeCFCi(CRDng at t`-9L5&U20hIkbTvbLSL*Q5h1
zABq;OZ?UWwlqWY-@`40odjtEd#YmGsDv<O=ca28G!yn at LWi5yv@%T5QIi3w$;3erW
znm>b54in*VZY15 at Wz;ABFrgXnA68v3zprSwb?PvP_%uk=Z`rJ9=^UK@(2Xk^wr#~g
z3DJw02>9_-G&b<{MewK2MYUJ;_6zu>+AD5fKU3I}IxpgvK^CrT0u{_3!$f{zsRYC^
z)<0qLPSY?SwH<~N3#$r->30>aK;}@uc7Qitf)tqK7huDANRfz`k{M+tfNib at 7Y$W`
z^F&N^W6~}vFI;ChCn*x{f~FKwVB&9U7VUAiK`zGa)BlWa(A3Tn_DIl_;Lg`Ee^mGX
z*ukr>3I$RuC}!Tc$Y~?G%%6}pcU=0yiAmE(B+VEZFf^}jb7UVyeqjE150Ec9C-_&r
zpsFZr%yW%|M at c<ZJU`%P0Dc<yW0p*S at C1w)1oMwsJb at M+R80hb@5SSMS5FPuznmVP
z;Jr(OB>7z%eQl=!{CD?3cw%qwWz%y!KNT*aJs%wx%zyEz5_|x^2tH_ at 2F{NOJo#LZ
z|IL#-jIW>I&!q)IIvd{*|IZa*^;8`KO!zko0hm8-laeUnHf{%BM=gLX6;CdlhZ!Gf
zQ3#&gP!QgN+ZW|0^gcNpTaYZTOEiLyA?Iaz!1!R2JHSB5Ac7FMu>yhxpF=dkmC+8(
z;8vn$G_bSa4M?xxp9lT7hQHHvTe+v?!LPjv-30^SpBkvF;X}WWaGqvJrkuwF_zIK{
z$O@$~fFdtBFGEl4)zvO8g#y0_KE{HG{_iUDf1L|dm;l^KE)jo#+6a$ahA7t1*%~W=
z=HdL|hoD!g0LfwW2nqMgkY%wk3NSB?f_Xi-fY<`yC!WH2xIS14=`&XnZ$KEuML-eh
ztYe`0FndS}VKhxKOSDrvNFA<;zH!1OD`^uk0Y8OKiI1cM=w_<^i}SDK|10Ak7Swa;
zwAi`hFoc)|6QbsfiCQqe`^p)H%vU>q0;oafS6vY727-pnF!+Dn at F3m(HG-c@<T}0(
z at RRD&x{L{Mki2<b`mQBB1AcmSfIZ+3Ij|yd+q}?&D?xtL<!uos-;TNQPQt^Z)V757
ze003z`y0?6Jb&6p$908Qid=9WoWC*Q70>?^|No_c|LZ4rzj=D^`>&bSC-pDg*NTg%
z19}wx6~>GdsKNk920^~$iIi7ZBG|_T6KLV#plQFbcMu!qqdAPKi}^5R7|aWg%}Br~
zR8R;(${-DtB#!yQYF%`Gi{C{W0{>V6UJkV5;y8l}N&_AVT_ZPpWDWQ~pjG@|*0<3^
zAz%J@{zB0$;qcO<)r3F*_~HDBy|{gHUjA}?KFH^p*eCP3 at cdfvrwB+KRNjEk5%8;;
zpsseo|M|b3kAG7~1YD6^pq at oLO2BnlM3EgmSmTi$ja}_1YV+O60-#3N0!`6c|D*~=
zZ3|a`m_SyGOTjuY3c>+zBdfyabDsQ{AOh7P)g?v35O5=E#sn&v4djPG+^mNH%VsX^
zTJtUN{~VL$fnKN))f4e`wcy_r0umQYOkOoJVab%<n-^zon4i6QQRce2Cj1ixg!60s
zQwUInFe+l;U&xP<@Ki;<N_#c=7yM5s0`^FqJX7aN-M+Bvz7;&jubKw!hw9_-De?wx
zUqBQ<>WRLxJ^aLao<V*b{vXf(_=NWS==|kB-=V8P)J~B)rO3-mJU^Ici09Yf|K{o4
zZ@*%}z;})Km;9HTuI{+tpBrs_R5t<XhX*k1q}RC}$mfQlOj33yG;>42Dz}DX at GK)j
zc`!tbzG+5A6av2$17Xe=RWMZ@<0Tbjp5H<nOpD~6qFpnE5VwX2a3G~ja&2cD&<hBG
zF&snwMl<|N9DvonQTGkHgGkbwH^K8a;DR at AD)j>G_CY?4Lkj#zouYOM?UAoT6Nm&s
zvKuZ1&R><fR6#^wuZOC7nd?8MW9I)#6fn#MR%@Y%#o>E#FO-;RUIm;iTf{29EO10=
zkF^Rzyg<9=KSWGi1Wul1_qZ}#76?BzU(#eQBRD6p5(^kqRUnFFMrfWyNm((2NfXYt
zEVshac`|Pzz=NNPx`lx^ev_+$D<Bji^r3xG_2w4SF<2A+D^Va4fgx89WFC4u<M7)(
zk8J3+d*z at bn>6jm3S>FN7ESnSVggDCmDHdz_$Ae)!dMye<}Y=VPr&e8=4~aep9Srw
zbw7F2Tr?l*T;#kV2UlPPL;<#Vj=s86WS`61H2C9g?@j#ZSkX6EOMkiz_{)C0EwHD;
z%QMKQ!-s at dL>`0SL&AIeo2NK`JU at Hg>VZVYB_ahz=ob7V0g1$26aI}s03?X9pr<u&
z0vq9mGDjXq$Ni;m2d=^v+vt9x^5Mr+U0Bms?lle#KL!)#&NAS`gaF<qmO?m4)GMMy
z(FiKc-`52nNUn!1upA05j)(wn2laSq!n(r0nF$#AkNAJJUV*_`!SJ=)hwO2K6!VwW
zT){t at CptgiXMlWaUfTI9+GEiC4Kt%P_T{-U|2Mt-AJYE=-jwa|A2ntdEoPuVbS>J6
z5X6o)Y-AST&X!vg1(1MvhShU%DDPtXTnfG~v<HU|=h4 at P3rLd*0g<aGg_7t1_z$#)
z07|1Q`k3%5C+UxcE;bMIp>>wl!G?C7F?l2cLLNp9=HWkL2yi@|_A0HwnED$3RVlE+
z|EnxOx0IMai(m-&fx1RM&vZekT)>EbDeOMq?VC&h*$3o at O)1Cur|noI%xBZwqz$wE
zH_pcGOObciLWAIQWe4DoJhvH<pCVV>-Tly>;_q$<_#dB4m7G^v8UR0>M-DXjAv|Ay
zN#?6PKkFpp`Ay)z|Kqpy4fxlyAl1w!b!7xv#zzeyKzU32Nkb;#+FKH8QAD{5&|T;#
zx+oQSGGE}Wt6h>BNMpaKe}r;b{6Q at Tjf*3ctD7FeZKZ-KrDRq_3>Pj0n}XT$nJ}NG
z4weW(DBE;C<G#cInbx5nM(2!S;?uBVfK8i<4DIce!`Eyd;YhoE1%B!9)D9nDU;;n|
zyB5J8+Jg=N^6>`D^Q!i!(FCO7O_t1R!u at 5<e9`1Rok-iI3xf1N%3n#K5md79>L{F~
z0H7K at 6BrZnG`4XLfFH&P at newx5<}%mrbjiV>=@{dfpDz|5JX18E|o#9JkB5GlZ(&#
zkerlqN#}O5fs|E;H`=vg#x$2jE)Vtn+Q`4~e}n%wQ6NHqIrupi!BF{mGx8%<u&Us%
z-RB#?ue2a&f5fa2aVsXHc9Qd^Zd;hRc1G&91<YO%wG*jd2|kkWo?Op}yR(n-E}ox$
zHl!YrIv<@#`RGLXx7W4j7vwA2&$FmK;NQUcpR&KR=KSyeAkP22AHRF>)AxD`u<##3
zzpiysB3HVK5&p(PfTY6)97vy7Gcw19RNI;8O(KjCN+E!b9U=B%K0<3{s#h|ZEYc9_
z1b0mz0C)r+f<8<3 at l$RkcbS;ZKoO$(2as?pK?~u4xxi2<KA(gRl>`0f&5mvHX=Hh@
z3)5d{;wSn5Aqxpq(gd<mo#*2Jn at Y~B!LRy!B<&U0s}3J=jL1H?eLX4)UaA}L1 at TYD
z!D6A5NLZV~(}{*plwmsGnud9k1mW=EHhg6?e_nExq+*^F-d64U2hK@>iI3o)xh-5q
zd<A(fY!J>PMxpjpY8L860Og9wLQEmvC=Uq51j at GpJdm4^ePp_vi!I_m6o^28{)sKH
zRtCryzrnXtw7&-OQyu>*1ds at un}7(0isV!%Kbrig-2jF51MKI6A4a4yV%|x68-1Q+
zyMQ0TlLN?q&*N`1QALWpwE7%b9erg-<b^HaC)UMW--X+cz5Y(&S64`Qi at v@p;D2-?
z?a at hb`{cPA`O5igwy&7~7eaef!YiKN4E*o^`~xc|!<H$5spv25J>nv?3R(d#g9&g#
z1Azhut9+B@&<i1xBAIOg`SEg6pbY`x;9u%r-QzeWHP&?j?a%}Osszj%FbW3FO(w-K
zDIg_MzZrYMF8C0BN+{v}GUx)L_$AqE(?+;8iu)CRAY!dC3gF+Qmd#v6$P6q<wKVfA
z?G3VI$D3FL&j4Nu-x$8`aHh#erT?ntMZrr}^??V9@>$cPX8(^hsjg`u{IudD+ftcw
zwPi(dNq7U?h-Ekd96n!@3Bp?c;X49*nL3mlCXOOj76fMfRW2Q66chu^i-0$uAjhH$
zsVUNaZtx<`;38Nk2G0+ at M<{OT?ttcrXv_x6%x<7j1p0?hARB_Z5a6Wz&74*v>#6v+
zivL&muMz_I1YO<|{EO@<<j3Ir{}BAj=bOL}{v&6POjtVu!4u}g)OE-Y{mk at phC=(d
z&ZXK#kqg0xoHyp$PM8mZf5Dd*HTXsF`S at h{Pq(js_Q?&v|GBVzF#%QN733 at D5AwzH
z>xB1*Z|)mCzXtzDfB&f-^td5zP!d4MzqklYfY5LDsGvZ~1Vm4uzDX6Sb#t6E60~m7
zAv%LwZX&J;-rh-WRtPy7XFxkTHUn?QEragLYKN?FLWfv-6pf$+1=MVuKc9e&aLk9m
zW_ebqV08$0k_&FJOu<lAVD<-se}f62*hns;ygKwA7KG0iky9iiiXBSoSFk7N)wK-i
z{T8)TIe%65Qj=T^`&rZke>ta30J5Zyxnh_V#X)|ToPt>ZjV#+!1;$R1$Ow)N94t|R
zpzfmdhImP9P;xjTKm89pqX`3hK#pm^{iqj+mry-F5>I7`Na+&c(xLMsjv<7S1#_W@
z6v$%WpDYRelgkDE@%asywTfqZvjK%a(PLXQWesf_|HuX806A1~#R~At>&pDch<|ev
z0P4E2NBEDD{ZW2YM0l>}SI7tORYt<<X*4+q^Vzz9nlDz6bzyt<<(;&*1+%;8nGKQW
zH-{fx6Ln!r{QZNFpMozgmi&0jB=s|&MPLv3!TgiYHU8;pQ=CVbkJ9;JK2JpL0sKFF
zt7(r3{EvV6nM=V{GT~p8F$n<`DX at l_nF+|<$HC%1fekAqN+FCj_d2!_(#xi4tlpz0
z;z>P=RpTOjVYamQhy+TZCn-#mVR?@9lLT4S1-P@&CsZI_k^qtm0Df2mX&v|{f`ARe
zJtm-=+pGVDCKG_`Vxh0`7ozwH_=N?D+b7!v^W+W+`3n5?05G0k;spZ*fT0uszORlc
z^2KX^@LSXh`8nwWIWJwK1P<25ClLVrNUSWNBovW9n}uYZtfdi}c at 3mC6nRxC1Yw7%
z at mvksgs=``f#_qgfl3Dsq{9kFL9HAILUJT(r-vg~gR%(ETp1DETx{_+QZ5OW{wrjE
zW{GOqAJ~I=)PP2v+Olr209A>iH8_94ztq3<0Q-gq{=`Uuq`JW;klr%IUhAK#?4<=y
zQG04+KGk4vvVxQ?^O?GZ<^$(Xe`iU?sZH6Jb~2y0`=K?|d800g)DP{Cy}3L8({qD9
zJ_GV8^3vOu{NYj2e7?DU^Yc${e(@Rj7x1ePpgE6Jc$L~IoS&Tchi};=1^mPL&A|V+
zkAL}_Zh;p5!zvK33v%E;a_cKU%<ykW1TYisJK*6`Gdo_j#<fBYYK|hx+KDV+?&rd7
z71f#&7`-b at 2S|$)wMVV_Ah1_!%IOYCyd2>Jiy-2+QA<Mz?eSxw6>)tiCrV{?5To#L
z;Qm(Rzvh3ZM1j8u(IpG6S6B0YkWUB@%+ole!H?#zD4$^d4Gn&k`4andhd+?!qbP#w
z38A&)-$aDKKPd?ohyDZqVde`{An6#S5KIan{@=+8B}bD(W`v30lN83cCix{IpooHP
z{JHczpbjbiPX^7ekOy&|5J0{F)seQJE-|e3gVaevM4tmEX%|Ev1OJ>vB7i93CD8n#
zLnH-|7FG$6854D0BQ2^K{LjU|HUWaE684)b at GJdacRM_X`P2e_F_zZNS+s-!?IH7p
z_T%|8nap@#l}z3J;8_2A2m9XGllS=a;Lp$JesCP-gW6gA&9$Ttj-vUbJUDXe%g=9q
z@#!r(Imvd_;8>i$lKP=N3<3Z5LVIci|7XvB!T)0divJ4+g#V~10DoWtARm$}OzAb+
zeTnrneUT1O4(6^A1xO0SS*dwm+)XeK at -YW-^5lc6+{t_~ay{Wf!~!OfQ8=TU8kJiC
zgWD?RAQN4K at SJFgw7Br$m>69UurCbO9Q*p1KVH5CN)G&=xTcX0>^1mRL?Chj1Ag7$
z_SJzd^-Ao6`>9fwJe#eFTAL9Vh|ueG at b+{~Q%z7)V5B*U)gy^nP#TomH`N89`G<s;
ziiV^E{%(9POdB_ at 97Q06hw>Hyf=fsKD^)Gk8IFzc333g!7L*pnQUH81p_V+ClhB?w
zovo!&#L1dk0DeQ}Lb^L(4wTL*0=~(LxT at xbd#@S)X5@$WR6Lab2mh?IP4cS?TdM6%
zE#|4|5S5PV&fhH0RrB8~$d3ZQ)CGV#o<9lYfA_Lp=e9C>99f%rdh>vH4-L3~SmyIS
zJX!GcGM*ps<NS-hz9Ptfd=ln!=joTXpL}r(wgd9<{{#XBezw69&o8uJOZ{Jie4+h#
z{-3 at l;f3=*`sHUlKj8o3mtSy?m;m at kGXXX_{{{Tj2}b1*@E7TyA)jJR$hI;g2Di_}
z2l?DSa0`i*Ns%g)<E*3;m^3idi`$Ce$>uLQ=f$(}lAtdVkm#i`cu0u_{%#CRgBSrB
z;4T9dZYvrfsRw=x&IZ4&j(`4g;V^1QBA~t$ZeJ2!JpjJ|9=!{VNUdrD1yZ&wIWOQ>
z_$Tw_qn=NG%q;?A;Tj4dq)QeL?4YKAS$D)>;eoAuoT-mcA0+K%Q)z;uAt*Rn0c^fL
z`VXcdS0gT%?0{pU0GC2m#t3ld+R|RmbwCh?8IlU&UI>fC0=ABoYek<M<pwud7P}q0
zHwJmIX&_riNm5Lj)~+ at 4Mk)L1D`4RKP#yD!k at -~PKhhGa2Q^<!ex&DL at qZl-;4 at Y0
zTol^0=Z7rmp<bGhubGlmd$%ow_T%>P`P~k#hWX(00e_!syIHPb at aGruKRY-0v-2fC
zD8c99F?u`8e!Nxw?Tx#DT<}i_!1)sbKBu2eJpYr=P2g8WUW3{R_}L`uVI}bY{pl~y
zbPEvSTe={G{QOlofT*CbpsM%+4?>T at 2JeCjqAj#;P9c~;Oj#3m#53UMPT}W~ZZHA7
zlQgKSzH~|e=-3EB+-OXIXA}&)AN-cSF9xI+!owL+L8<jf-CsyADK>XmN&{iuwBGRt
z0ASpB)xS@@#)SDJRjilyFfbN_&sUfirbn{R&~;wEuNFM<jryP#*~c94RgSrIf`58b
z8#UyD)U#|~w_PjBB9zE!dw>wqzr?p-NOI)mL{Nb5L2uY^3rSN<!`qoz6_^9rfiS~V
zSrdTE$a!)fE*cjW4?q!wGpv=$1!Rj at SR&h{fq$HT6DG>JJ4pSD43|AvX$R`i2E~Av
zP1rzzHVmtdtd+slkamb>O at Kd32T%ajnJ<4i(f at h)N91HSC3_!(f0AG6b1-=IO87T%
zp6cK?PY~L)V0st+UzpF8U66mpe6~Y-`dr`5fcfNqayIwF6NO)0F8b;UlNp)M1^!b%
zIC}rvukL>J<j#{XZh!gttuG`57?4lS`_-4ie2jvp5`2XA3;6%`)1$wO=l}HC-#`E5
z?@ymS`{}oT)~8{KN~p%a%Ki*0sBnN9 at MVeu_*j^~STuV*uu+}2GyH at p>f9ZWFRfqh
z_ENiy4ir2``XlKebfEJ9azq{}d!hEr#MnR`4nzW?944KOQV|emsOCa)_X#V!Q|HK(
zQ>C!gzBP+h)$sRWp^E>L0tomu^2IYtVT-~s5do=R4Vl$06b}3==5KKR6uh37@>T#}
z|2nUQ^Q)c;A`UDF{Novz0#>*ETe$A#ZgzCZ;`Sjt_<z0*R?oLX8Q?-;@A!7!MkN<l
z&oLJP at PmA44-N#{BOU|JgU;+~*DlnD-{Mk`5kPO~dB6nVKP{sC@&9B=3{ffHLg%rN
z)s3t>HKrw-HB at anzbV@|%AyBMf+PHaf9d|>0J>AB4*Gxwzq~X(kh4twUy|Qu2J)lo
zzotyq;MmPM4_08bj;aAdnm=1IU_RRUvtlQ!SM at r(g{4by``MRv<h*~3oHzI32|_^O
z)5`^4T%fm8a^CN6zW>8_Z1i>yh6CEczY=_e_HeB6Zw7wSUdefX5~-g;2Ajkw at c;7U
z*|Q&h{q48k{{8oV|9^siHiCf_kPLzoRRyRKTAVcDp97Esg(gxU{ZV<*;ec{5T!n$h
z!zchh{*4e1w*lb{6c3rN7ZXT0fZ;Hh6fFCH(e|%+FSRoo19;|lArA;0YRE(Y?l|H<
z$sLS{&#&Q+Bs8dRAu5pIT)`gX)7n8^pt1lC4DJ0Y+tv0Wo?jFG7k2&<F2#aglY*cu
z_|S~&pmSb4KeaHT0H|)^;mAUu()I at 6Rp$>^14t9m at DhAAf+NKODS6Y<!<B*mvj~QZ
z4L>6JrHxju7~6uo%9_~N3-OdUKyPS)Ye_)?0+|#}^2<iCB)s&$q4~i7QAB|~(Sddd
zgdi{vfd})_CC)82Jt{N*O5n!|s^Firi?&ZXe^kzE!oNaz1;ej$zCsr=B46X5vTx55
z8}R%Pq3#D)_r1Aq;Cn~<To?W`_=^jJl>dkJga71*#~G;o<=@?SpB--v_=f at s;W7As
zD3DhBzeeyR?fv at Q@4iOxG%+8*|H&_Z`~2B2Pkw#&{jdM{74ZMte_|9W{}ugT26z_z
zvy%Q_1!m?Zph+ at spvHtlCMjTQA*mk~d3+j-2qzEnx!sT%?jwE=9Yf!1L{ZTIX$B at u
zpwLg-19PKf&bUZGoRpX0z9{4nB>X?0Mt+T<VFCb#rk5&zn0~2qSiXW7vL09gY)96x
zGL*SB=0)(VV_eKxs at _J;Q~UVmDxVc$;D7#4J{&w?1yBguKFQD<S#^N_NO8nVR)OYH
zh~^KOAuM`0;N&p}L{UkKgFJYNHz4sR(}(}?BSI&x9#pG~!1P{rf0M#GUINa;kB9{b
zp&*|(5E1w(4&hBF>-Gr6Y!OcX75lcMyE0A5&H^Vd(U2N<^+z at E*M@&$iin at 8+YRPp
zz<*_iV-9<LEOEiad6duB$k)$Eow)jp6C1kiU)k%-=DxS~^||^E{6C*HOjy$7 at o5Af
zm=B&G&8Ot+t7#vdc>L_|@BjGy{qOMqPgM&1x%T|z0vrhW`Rd8tub=29AA{!elcN2K
z`F!@P<h)<~^2^`<@y~xe`!`+MCLqFp2mz!3q7q2*`#k&uGm{BO3JHp6DMa*Bai2l}
zw}yzUZ>9KuI)9>NZ)@m~=s!xwAitv{S~ow7{)1AABp4_2Wpo!1zK${|EfDlbzeRZ{
z#0&CFp+~i~bfm6SbN<U8C!H>;xgGGUSYSwXi3qARpp63W%}ewvgXW{M-AbD03*%oX
z5F5dum%jQ}*r2X_$(o`zov4o^fwF%(4uNC6Gz8{=A&WrdD-tnOP?~uXL&*rRaTvaM
zcr|4hFyr>Qda`z|S}v6c2;tHCKQyv28&$j7BmOt0QUFs*iDU~%ND&u`Nuw}-ntvet
z%!Z(J1^l_cgnMlV%#||{9 at Bw|_!th1{$Jx?%l?2LV5`JdH~AZS-c0ycbf|JtTn+q~
z0BJ9rr~9GRXg>Y!9O!#vZ`Qf31MVF{@PYY=;Q7^+_&fWO-ai8EFa7R at 5SZ%t*ZyDS
zzu^Dw*H0zwl_5<&Ce6pde4hRC^w(d1{_UU7e)*>czxaQ8V~`4!Fak*yeM~}t^!?IK
zP_vI!i$#-T67K0UBo~I05bLEK(OE4=94q at -V*<LlOB6Xe!QAcf{Gww3b(){M$kITR
zz_18lPb{E72KB`alHUOUMk|^^=?#bv<`YB_QsR<S+}Mt}e!ZIiHax%1fARK^It_bq
z^|FA8()<Pa&?L?%&ZAnM_ at -j`s_nttxxeHwESkHI3M6VF+a{8&U<j%ZfP_nF0G3Eb
zfCPj^kj|6U;wz-=8{~mkhx4cqiBRmtc`2j#IAa~8LPSQC9~OtiKX45(leR&gv^tRR
zc8m#Z%DxN{zU-1o6_{KYA&4cin|L|m|6%@+r3Nh7L`6WYq0Jp95w72{Eun$vUmt4J
z$Uy#|gMV at UBKw$}zX|*m_%|Tm<nuYG%z4cHKd{I1llFpq(R{AH)BnzaJeDqG-9pmd
zr<Yl-6Y!Jv!hBNSJFM{kx2pU{QUHkpkRP6L{@@?kUpxOQnh&)9>tCMz^SA%?`+vx8
ziF$Aa2;5Qv&`BaVQC?BdRjm-FAtyvy-dqPY5|taZLGVw)>&-%Bjv{)8v4y2C-b~Uu
z8u-=f^!PWBFN8-ebpn- at eu<bMgbsQ^X^LZ^1IQ95;Y*tKQ0pNCU<hCXrziFj9l%W|
z{{=|=8P!dIKVCdMxrxEUi#g~FSEs;Y<684kHg1qTjhesAc6rH%d|KT){1O>7^jHdE
zY9g3;`;KkEKMi}N0A!}D3xq!h*jyQ at Whl%`Y0uLMi5TfXe{mFJj9p?VJ0Qz02|>d5
zxQu}!1hr0$ME2ALFV2t}V+fERR5;eh-~e0TSjq>ip+r$0UC!4Pv||G78~bLv*0}D5
zY;VmB9Tw1LW2{c?SU`*rfE-i}{|50>a%wo9l6{~wO8GRK+pAJt0lzu&p9_92i-Gx^
z-9paW_xc_No?p`555 at V%)8zc&F;;RY{r*Pk!(%46s{Hq>d+0x4-st?b3EcVWOOUVq
z|9d}tTgmyue4hRC)w5^Me*3rI|Ly;pK8*wLPvVAS6mO|a0RHob6bRtKf`FDxEl~|-
z0FwMm`rhe6WC9B_Qf28L7E5u*$%A|b?p^vq)1q`gvkv{_1!TLV#>hU}C^%-PNT$b1
z;(%Bb8-!!TOe~NJ*$$YknLD>5^pgV1qCHiFP{n^B^NQFgEf<UC{u+m*x_m)&erO)B
zH)#Hb8SXEReGG>;bH(JQv$_ZY6p(aO>vSOts}+Np`9cUl1tkuO=8r@}Tw|LXwXZrx
zO|K>ngcMi at IKC{fmsB^zOXOc9g4iGcjDbLJ at BnartOGxTXAnjd7bKy<(V9FLkmGz>
zP)Vc^%({!gUhEi-pKr$Mc{FCzp~3PO%m`osJ=Mver%NmS(>U|D3i^%Y2MGxJBvV~*
z{#y1V|CLn at jUhlv0F}XCyW0o(df at pn0aj*aedg?o+Xvo1lK<Ix{J&JYzPXmbN>(2n
zrPZPIyX&OA8nI}Y4}SRe-EYu8zclEdB7Rcy75*=>C;tDNr^ucUg#4g+{-`z2&z}7q
z=JV4({`u>(3g)9f6Y$Gkes9#J5tL_A;O8)(D*hG|kT<JU(Xb!_J%dgdOhB4KStdns
z9 at sunn>a2)khHgjqws6DPv<ASURVS_6{xesbZR7lfR!RJ3RzRDOSGO0!mS4z)Hhj!
z2$h5TOCS(bBf`}5;IHCGpk2a&(dUb=2KGwohx`lvi2|Z|zO>udmO=(Z5ae4+?$6f;
za?A!|A36t_A1bS4uuz`26G?7MFPRREW0xrs4p#6V at J~k*;KvWZ`3ayXy_69-z*k7#
z6cYsIi2{hCNIe(=)4ND-34*u?ETVasw<w}Gd{)??pEf3_MWnxM4y9<1;GE)bJ1PD`
zae*t~7e7x2Ac?=R=2ZpthL>jGm$qjmc!GZ=`y0VuZAl+-1vOE9(@7KfIiT!I*$eRZ
zzOt+D&AlYN(EhxKCrq?I;m*F2Z?2_&XmI|2`~CM1fBx~k at 4qo6zpD6){%@!P7$)|9
z`_+3te*55u?=<<L$?a3^{9!)-{10=_ua6BSfClxL7N^;=Kw1i*HKD57If(+y86j6t
z=>Y0C_{2X;(TXZRWgR*hqWs0Pp=rw`cUck>wA0^?&I#=S=g?r at 124i%AUV=3L~8^s
z6On#I0T;GN$WBEA1pmNZyqvoTAWY_}_UFh6QW*IP+U;|rIS|;(>ZT(2sFz|m1Oip(
z<=No&b!z|OF+jajv~(Ir5ew<BZr_?aD;@wf(#e{b$Qgtnn7m9|z%*ptn2t=H6Q2()
z^moIqxj2$KIa(1HD5JoO_~Ot=l3CIJlOwo9a30QpaOQcnN|2dxjZuMO0xgol-{Oj;
zMnZTxMh7-wBD{4+VgYJDo8z!cGMt|ha3e=6;XEyyHSW|7B1AaA7V2UMH9pM1kMmdL
zr at 8k370jnP_+J?LVg)UmWt`lI+SB{;&aCs>;QWIgoz8h6vVR=Y+wbm6dT^MWxAdE9
zW#3%WK>hkZ|Mv$!eUJD_ at k=*9(D|TR;G_!<Ar$<h|A_ym)$Pacbhm?Ub-?-m?Kgwq
zQ{4p61n>!56I`Wk0TK!2`6`eCJYbXAh_W=C?4Kpeq0ps?{?EG2 at YN76@DF#T=mYZk
z5xf*7lM<M9j|3L?L)c-E`~rRiK&C#m%T6XQW_|}bFVq*e);3etRM&H1cpJfjQW_rx
zx+pf)fPaur{!SJT&hh{9MdZ848A>@SUT72Gyk6MEgnv2svw=WNfoq~#K+%Hu+v>6X
z7NRSTMG+*tF`fbNV+EK4*Fmli>-j|bb8%>yAl0QZf{lZJi4=Ag{D_MnVKFYaiH|c;
z5<?&&bchUq;ZXAe`JG~e2 at TE22<V7TiG=f8u&i8qbW_A7>IG4OY!us=rVG>q<|8;-
zw+--k)7F9%ps_^<c29fljW?wDWo`(S!LP{=j$NF;Dgm1 at A2ZtXJn*+Lcl!$b!lMv8
zrP_6IN57l<X!Qa7gC3nqxPLJI)*ir*=P&>9cFO%j=5STy2jx>be?Y!8Kdb(KZ3RMs
zzIuZAV at iJcT?$@b{Q69o|3CiS{G-f|nFS*fkWnqsut5c?0bSx=<ut}3f<K1StTFx1
z!u+i|LQc4q1ZY$sf;-NQUN2_vvJj1-lEuRQNouDIR(n%@aok^^-b&=qc(!$G*E>b&
zpCK%FgF4DdngK8nZn`u*vLr%A0zwD&CCLR<HflW`+d{W0{i!N#H<&QyfXb~hdSEa3
z*Repzzbxz{A%J+HJU?IUC4GOTxATD{+H&eIe?bUhK(XjGg%{x*un4F=&VkEC{30XJ
z$FO}81T2~?3C<7Okum{0V5+tU+z8hYZ%;I|@107p;8IwoM#^QxV+46g^FJ$Mh56WJ
zrMyME6be#m6kR}#QCXRQhRS4T(S*g6XrQv}KvP6RH8p^~mqs1hyaDf}eEFtKkub!8
zYTyU|C_jMK0DhvIVMxKtknq+3{)(CJmB7zO83(Hu;{OqUU_OkP%iH1n36l06MfO4P
zhxwFze$fQf4}bbWod44=4dDOmlk1;;tOr&=3#d*3r04V7uPOWD{~`Zq{$D<O_T4{z
zGks3=14;lI|0Wd(RPcB{1(K!0RnwQKK&*Jy{w-!i66 at u*vIHM#o!Y}48VqTH at Q~hu
zWCpHYR2 at _fc6evm2ciJ8V_5g8r%3%|cC<mVYA$OaGY1Oi#+wNQVkXo>X@~QWDNba0
zoJZ@!3h29#XjP4{$w~Y_;Xw7ZN)*tXpRcB*P6d8xXZq7_pXLV;F8 at oN*PuOhnm5Mh
zvmch^ziO5owP1WZd+4xf0;{*d?Wqe(i#S(_C52g=i!M-4N6Z0-fGET<{+~3ND at Jb1
zHzgtv0`T at cV+a%nVT1HM!~aPKY<eWL=^A5|7KP83RtJ<H+98meC=&#@x1{vu=Y}Bw
zd&<Gh9jwS?3Gq_&r`_HBQ4{jT`HRn2<VX77H295eKg6{f3BNwi)Ei@}t9(A3rvm)&
zALh1%9#|1|VGC1wW0~Q_k|y`|Yv*6gB*(9=(&2By>c_wS^5FY#X?uX}<Mx65wND;j
z`{a=tkFS6BvCM+`{8N!Y!T)y(|3Cjot0x8Dr~ml%KmOPMF at 03^16=};X|ps!h=(+;
zf~6d3CD&TZ3;IZfKGl6)7H6gq)?OCk78Q<p>nso|O+K>nl~5fu?FH!4<p}t>o3afG
zeG#h5g)UICUBn;vvcAxMX$nn`b{x>nr63FD10O&Lq5vecieg!OFz}EzB-s~31bi_8
zlNI2NarJ;-hLP$E>;>?g6#Ykj<<Em3PtUY>WFJTlxI*D4{Sk$vqhKBa!x@<(>ghlh
z4Cg at tLbIY-f(0Z=0kpe-0wM1JdwHj22b>0hfEXwFey|t*AG*i^Uzw7MO^^7tnbH{o
z7s6LK^i6lp>)Biwkw36+;_YOOfE*V>6ljwk1vTmr;m`h<>=h34At`9#Xe}L&%wT1M
zY}2C_<O6=~{Lywq`PALcs=cj3?Wykhp9g+}@}un{?9j?^X82y(#)!GH1Lq%i{T)nT
z at W*E)?R|K>^vPutRzLXhd(vJSesJ|5|LVsdU3tuSsK!TEKYk=8 at YyFcKTF&HH%}>k
z;r}Unefit3U;p~6>2qp45d0GX;Xm}u=xk8|!+ at w-FmHYu8HD*J5GS<I`j+DSCB>t^
zkv3h`$}a8wOny<jT8N`dk0h~Wu|)D;Nr7SYYB at w%AhaNhg`@eYEh~t!h;H9>7Rlr!
zhQLShP6sxQPl<pk3vEVtY1Dw_4nzg5{5K2#(NssJ0P@!Yb}+95AF&86`}|i3Ka`*U
zLRACFf|>ILRbUDLJ>fWcVf$@cu_7XbhZF$QK=zT!bvy0zonS#Chq59NtGnA-5H$HM
zJUl09a^Qe$7dD8ir-0QmR(uFn-<&;Fk%ri3q(?mJ8M$z)xFDyT9&aUwx9t{di<b!X
zY02U<C{9WgZRBVT;7NO%T6Izr;@)h4d9wUFiXZi_7R at xyt31C(n~(wj%_Q^H&R^@C
z=BxTt!M_Ro23Ie6t_<@)U_1^xyej&_mYAzMqt0!Py}C2*+AahiJby8B+aDY at X`UeV
z!=Hb6_uH at V{J4FPfBDhFOCNoB>EQ=5K4N@$<>N=P{?8|mH4B0Q>HHV`Kl#V6Km1lz
z^Q>Y8ED}X_CgKm#T=&c<Z3GAjsA_-6LOL`~*L_`-PuAQ<nODteAQLGASBCRP_CX7U
zuG7yTkv-6ZGClqOz#hs9o^k#h at QlM}mvh&mZ0+{Bxz2-nVhfl6RRbzwyoX(ed4rnq
z<O?5w8}PrNkiehm-=NXUXax%Ipq+<G0pvVw5jrA>MTqmSMBjzCS3U7kuZb!8{W7QW
zO-K<@<~2krVgxn<2r&UHg8UbTFMX{PwdwX at j=WVz{6D;o!8gKQ2ov~!q5!^vN+OXC
zWdOI&830c}gzC473wFuRY at eOdDYv_Qb}E>ED<z!N7$LNEVpvnEkip)~StE#~!?FWe
zFuSCY=fYSTwrTZx{d&}W8gyz)@wZ;n#%O at l#h4>d#R_-{=aI}8{F~Um5#*I?yA_0A
z?8StCBigH*K*aHNG1qqC`2j!GuDGi^i=JKv|7AbiO1^i1RZWa2{fUNWz<=%2#~}aW
z!w)We_~60^56-J`@!|UyK79Y;M<4JbA_5a3=>lciBRxXspYWfjzx~7bIX~BS0Bo2A
zkMpl1EpUdO0V9xVz`uY8STWbCoo4>6CDud5={9t*<j%rUB#yh=)4>8=LCs*Aw#@uW
z48e^P&;|LKNhEP(d=MU%JI0~0J6?wzS at ixb<_l*gvMUg0aDecEHr->}_e*QvH<eA4
z2>L{SEW&fxKrt3Jn(38{I?8ef<iZqmjDNWxU*liryaw8%n>y5wp#Ay{FNO0zezVw`
zVc{Sg3+6zTjkyxE21&7i5}}7ZaY2$MrUqNKhZ+&uC=_xHF=V1AApp&XpVG{Ob;Ehc
zc5(ad`=s*SNs(G7g~``1%t8X<g4lGA at 0iogogGy3dUnq5*|u8@>3{=95$WGNz}+e(
zvJ)*>Bn8YQMUf^z)24_eLeaVDZ at kfvOV_rQ$>*D_K!IPTx^rMibxq*sz)<9>KtAu$
z;8*ys+3nY9-Hct58PFbRfAqzzLi_LR1N=o#E-{ktA42nF#u;#Z^vmDy{K%Uy9K5~2
z{{8pPJ-C1N!MlueGVY&y|2=Hs(&LAhAALv^AUi-EB?K_lm;9IHw>H?D&PxecPmiJt
z4mBH{q)r``{~AfP#!0nj;;9z=C67a4cCu#bE2|I#e*C|zTdsC;*M1CPAHg5oLiMTn
zauYeAh{;As9rJqvZ`MB~3znVo*b<BFgY$bL2T|@v1?pUs#Y-9>F^Bej(>mt$=v0_#
zIkaDg0bTHlxJu~|?$j1X3aK{YUs8B^p#P}+S7irAbJqC+-$)(&F{EpGM}^OSy$+#}
zckzL2E5OV+s1ceEe-*O>7{Hzsn5iOU2htb8vJB)(7VT)0Kq7$c$OeDTHiS;VFG7Kb
zBbQWnI755L{oRUtgLdm~u^vPEcO2N&p<kEQ2_Y86SzaS at EsC-%OZ(VmCOPy;dn+ld
zLxi7IYE+9*pC)eh%>zB!6G2?;IBpT*)z;s=xq~&jP-FV>nm5%@CmiSl8X*W+b(lb{
z9>gro{3{5*IsU61KM(vy*lY0f%*1xck7T~L_6+*y6rR8E^9#jKuQ0c_{G00<|CD;c
zGrk?<3+&%}_sso!r{BG68oXriqw^{#U<EAu&s<1q0kl9c+wsW at _<!Mnx(kk;F*OTJ
zTHtVErcn*~rW2AcC{g8gyabcJ*<gh|!pQZ!or&zEZ_?_PE;xtPKwx-Az$XfzWa7+O
z8k9{TInadwPIfBD1nP*NI6Z#Eai^kQ;9m at +TTI8??l$8GTMi!}v49=-)GuNt40<3b
zH!}^2c_{iXmlQw`vR&oyO at FpQ|KYVdUkkeb_%w`BJ^_az>tQxSMk57igvQub)`FuO
zgk>=(2g3|$+Y|CnBXQf7!~*b-M9_c*^g6Yr9h6u=CkcN)9pjWa5IGTzu>ukKnNpn^
z!KEW1A`bdbDeb^T%TD$hkz-lj*K_Cq{D0?yOqW3!Uc&}jmSnfjOmr{q<5rL*89~<=
zqCkgmKP1p*%rbMd#?LqD+`cs(M<ga~S~cp}mT(|F!0JJE+<<K{S>hWhLspWPo`;&9
ze=Xn_k*5mhQQqDJd(#2n$NAIbmiNK&{70urdj<R-9xM9f9HrieKmSNG1B4%jgNHx!
z-n(G_)V<p$@7_Ln=aymIy~WE at _wMi`tbmAc;n9beKYe`llSh=sr~;4z{~`V-ESmp1
z4S`$%m^}3_T7XoYR5N4^qzX}`0zg%d5PxWd;}&zfnTV&TKC82Oi0 at LnmZ07c%AxVr
z-K5o1JUsgz_D%uSyoB~}4B<ifq5lC^g9_w3q0nc10b6FkbG*mq`%f(koH^8b?4XW=
zBs5r!%&{Jw2Op+3%1i;)I$)7EmcCR at Ur~K+zhGP`{PGv;jD{dU7Oa&YQU3oJ=YRMP
zR8U#}hn@@8n{C%x#NmeZfI9JrGx&c at 0F4NM5u}jF at ca-(q9mbHO2e(2Q%0m>&Pi#S
zQmZ<^d2k at 4v?!beIP#;;Y>iji*P^sH*TE^LyVcPC{*z1Wr<ZjeoZ*t!v(vz?IDZGW
z73kNcCDVoCg6*?XEE2*xvAqJbDw4z7__z`XaQ>vg$o>enC_)VQkLW_I70gOd#)mk6
zRyb+dw5s!$d0v$`kMJmywrLLjT9B_zAnNpnn2THU5&u6r1??&L>^y02>DSlN9vq>`
zlioJ?{P_>w!{>u=aDL+U&EvOj9J_V>*iGZOb%Qg<Z{Iv|=hmsax3L1=3>P9tAQ8Cx
z-B*0h7ytMJ{xfX)RPYaN7V#hduku;Rg3a0kw3Dogc=Z}Hkrl at 1e&J%Ob(?9?Cx}b;
z0+WAzUFcDykA><y5;r0bS*`Z%02s_u-eOSsV!Ka|p#x;E=Yidw2W6oDdyUNV9+S at j
zoYr?@QTXzS!ShCP#&1eV*s=-Y2K#q`^tSJvLM*Tx*1vUfcq12EW`FY)v<VoEw<3^<
z?5P8RcKfRA^{2)E+KfUhOFdNGK at tH{04B&#8lWi56kw^6uqZmS*KImeMnwOiV at GPf
z%;&XePY*NxUm7^ooEJzw#SXWUKJCbfa=Qo47=qjPpH%F!Y at FYOB8KhQ{Gge`B3Dkf
zD(@ROtvqDTh|am)JLmPVDClL&K2uQvt=KYE(f;Q4R_#N4n$ed_QVdhIwIC_3+n_$M
zCl)YXV~rHUAYoU_JA;37S8tGjDz*1lb at -UTbCIuq8hvgvJrB7Ljuw6a?YT^!Thi@)
zB~LDs?Xs#HS?$>e_fNfh2W%g^b>ryGYe%kMJ$(Jj;cJx!Cy(B^hDBfqC+^(D3eMcW
z3mv-hxvT|EFDMd_iRV{87&&KV>BR8{{zEYr6VQ#&@E at v0+J73JtHPg+^MDg6fK<EC
z?mD&+!9UbTIzO3w$0QCCI(oYNWOrKO{3#Jc at OHhE@%HHdRI)%m$7r6Ex at 0q4wM`_O
zgo14VkL=0t88<j^*07KTqXEC)<dUE{BO+E!=GkjxZqV%Ev76 at vOfQEObS}&!FOW9)
z5HH!~K`oOmR-hUogay$B!E-G|?SHum7)-+`t}+vch(Mb(<d9l9K3^{#K=UDPALd31
zfGETqUM9066tJF&%#=s=VO{hd@#H%$>=c&Q9dB<nd_e4`*>;nQV&0w^^Y#q8 at q+`W
zmq)FdVl#YT*rKt4Q_DK`O|!`F>5|i<V}w7W4ciN{&OoRyDRAf5;3lep5bzTVT6;L*
z`6+~v`Bop0AAns+_A$<Fmxy2t0e=qsm_R-Yn|yXY|M8i^FD at 2*dM^3B!=$~b_YUIr
zAv~w=-_yt!*k8MH at XDnFmoLh=bYcIc3p^jV%(%#T#-Xd14{JjZE4W3xIQRa2bWtV+
zeDKo`)nTvCOjxvF*z_qyV at 3)8(G%hIY!R|Wg&dwLyU<D|AU{<PS|GTIFk8e8%9?mH
znGWD=t=iOOr#57Kk at T}usQiL?nd`?=KZ&8v`5EY$Qvd2LJASguEiXYn9^P|!4#(Ex
z@*U<4x1CxH;l~6(JDBGU9K>#!8#rrd<mxHO`<KUTn(ef36oX`t#IRjvLL*mOmVuIQ
zp}vB~Ki`FeO5cGO>J5T_BUTO2eaU}t7y36O*Jjrw65&_>N?4SaEXs)F*izboz&}@s
z|BLFIR1E99CfAB7ja14UEO8gia3pR*kVxu<H^v4 at jO&x?KeZIv6S;b-<D8*MdzVG7
zn$q?3Mwi87QuZx(nmasp!z_mFs9f98c?{=)-EF(Zb)rxL!|WE at IVK3?TPB9LWKNB@
z3$frWFXzS`+rsnf)~`oz2HPT3!9TMd$$ZIZD#(u!{9+MCEwn25t0lS52?Q+fFzDgQ
z!Y?n9_9oKyaC<NKzwq#Vs6K25pO3dcc=Zx!-*@r+-V5jUo<F;Xaqf(a^Nh2c;XFST
zi%_<Jr5qs~+`7Rh5I#tU(L!s)|I9Tjhs~H)JbujJk;Ch^VD2^>A*ud1A~h+1nnk6-
zQ^^FXqQ~&s<X5?v+)%i#1o1GLk%vmJTN<SJ%TzD5?GaG`@DtPF_PPqdF~El2Ac1x&
z$bj41PARsZHN<X4neC)Phq=QX7mnf#<`BPgA^7Jx<<P3cy-PFi?h81(!9O!SsCRdt
ztgapj(O!{Z-eDnLL4mEkUBm!*m<kz2o0TtRd>FtlCh(G=H@=<VLfjP0t3+64no|md
z?YC<!OC-^3W6_>;SojaK!<sbWowSZfUkz>fQ1O;cdA|rmUNUtQD<E&8MAFpX4Jrte
z44E&c9kphv$JW_Cdl#qdU(P)}`tbhl+gCSSJiYPa=?#}ouR3<nWzKNB(RmIN3vEZ{
z+6)_DgG`i_?9eO44aZWL-Ij%h=&$y4Bo?3okp<UdSyZwBauWzJ(qCQnIIOD;ft*)6
ze}(pnMVonPiU<|p7udfL=P@@2(%zhR4-fw2Y{IQQDKz{%xtwx$|H*rIVE7;(JOgZ?
zzWeOycg~z*>^gn2%FyR|!)~z%u?1}igae|+@!L1Z2rvO=4OB6KS?gAhoHe6-@`Qp>
zBl3m~(e+<x0#qenZ3x^EtN`p(!hZ#7jObDS(lSBrfH%XrA>tu~GNghT8^kgNXhEdI
zS_P$W1HvITID8tqaQ<#3y*-Byguq)2?MH}b*i0;Nm_Nd9S_$bbfOlCn$!=<i-Lz8o
zt+QR%O?6s2*7xYDuID!QxVkgo!Y0q0Opoj?o>^T&bF%!qr+CLld&Wn(dV6{J`gjKh
zphq#wi7&#pFl01J at T?LD{_7 at SGzD1>MTZiZ9Nn-!=lOpLjsyiF0{kD&Lz^g7ax@<#
zP`D5i^AV1Ky=?PD>o`jXBuNh^<Oj9ia%g|A;W-YohInk5UFAONmnS~`@WA_bcHO(a
z_1cB)cdxF!aB}UX)6TPoT9@{*F7Dl))dRZ4wWVK<Rh2Rlo%(iZPg_Oj_RZ}qo3n5<
zONy~4IQ+k9<EC_kc4%t|1bUGN&40{1zrh at IZ_mqP-W>lhf5;EYPvV_ at X#U{;*lqFo
z`!8R_v4iSeXHM-rb%L?u<niq%j>$NF)G+kR6UX=wgZGGOC^Nwp_;m~cUW64uhe)EU
zT({A4W(}D-sbKWT{NclLhn6G$$OLCnVCr8o1xD=!30qc=%J|0|Dv*!*hvz5sv)d-j
zhm{#<$U(b+%2L6km0ecsWI8IvuTXEQTB at ->iWHa*E)*UPyhi2uPb;%1>y6Gye24JZ
zO)s^dJ;ZK$8Q$J$@o3z>{p_JGYbLv{o#L`;qR*k_j9&Nl_kMWHXGl&+LErGQobb|t
zemzq?dZc*c|C3_fLxSA=d^~~!J^lTBgM$LY!$j1j4!|?t$shrleGT=6{)HxBvW4mg
zFd`xaApmbrti=D<ZPP-e19u1XG5TrAh$Rc~cINuD?HNx%<gz#|8eQcMKL6#(FCQKI
z<b(YmKiKo$t$^``{$mSVb9&gMMqAJ<?P%S`%lWOCptqQm$EqxzPEDMwn^|`v5w1 at g
zBr|2|NU0jxM_j$azxMh1Su-E;{4bE<*8U!e7x;f<pTv6ylHWU2`0-g}p95De;>O=O
zdwS>TlRHic=C>U`y7kzREk_S;IdX`x**NseEk_RXqpgf%N47Dr4rLMiI_6*s3J0!S
zI&t at wzGAc2uNk{w?$GH|i^h$~A2BSqtW+$T`Y$cey7^5t$paD%ex9r0zrq9z%bqAH
zo8(va-(-p_WiPhFaI_+W6U~#w4Tu8iQSGvl>1u}7qJkn>BWsZMb}sGR8PcBDy>m%6
zRL61ADDaOJfP9zL;`SXEjP%?!-*x>|_bsz<`+g_Z1YX?iJGRh!Xs+L=0`?_$%S`hg
zl#Txn?$<LYtD9$ZxLZVsXH0~v7a_pcE5P3`G$bS`UQCsTi3n8~amCU94<-QZ5u^Bv
zC_?(bBQHQVro#>Oj9xy<c`RTK^WnO6%I`^SD`Drt=cD~aerh?eTc at n#wh5ta;zHV`
zMz&Bys2OV$S$Aq~Ytb&iv$eaUOaoy9<=15wdm%sOGh8(1SG51X0RBo9VVpmnKk5FV
z!q3hZe|ah8);@9gr%!-k!8}kud~nmD0~-(SXKY{`*k?9)Dd!F2(1A_7`S3w85R3(j
zIDTZyu_JuW))U7zA3L(~$ibDncLM%#3+4@*F|~BUIGlgp at S!=SCA1Bo|7hng%Og<7
z)Ln4K6yW(L at M;5DhY(x|(`eP4`%5m2f-RHv0zIU6F*6a*5BaBvqg&b#_I<_<M%(X@
z(-qMM<U at GuXO_eE@%iYSF&k$`u9+ISc3Sem6^VP6B<)*<!}s31*!RfF;2S#<=Z_03
z&yAZpEI7Y+^w{FyyzGebT+i&TZYgozSzSES6Fee9+=BvKJU!igygmJVeS(96;$uRR
z6POPxr42P(tpfCwkIYQq&n5##rw at VDhq7brn+-UYNoV!y%1NDWtN$7wLdzU(pA}u`
z<)(F{p}hsgKAJhvd|Xyed=YrR;CpORqdL$j5$elmAK=--&a#cCb1PT-2F;to5*w=8
z4GdOm{tEw!?Hi>Y(fME6^Q+WAWfStdW+Rbq{~Nm#Z|*7n;$qtSM at t@^!GQx^V7&3r
z0igc&{=Mt>?a^c1-ra_=XZJciOlS7)Ue7z#o8LaL&v2~Htlht7&EDP1cWqy^W#i1%
zD=Br2m^Hm@;&^i2LBodRl$Q=DDwKL3OIzzH0BUng=>k>cAL1%Lv*r*`5d}1Yr~=DG
zc(u<U$cOpMq;<OY>EmKWT;_izhau*Bj>v`Wqh3<g?KC(8VMpb*Bk}nGGls-&nG?Hp
zZs?*h$UCXW)&l-6XE*h{zANbJwxH`fLWkx?O(^v$8{jj1kl*M6?~?vrd08R(y at UE^
zM3&_QW_Jt9?&cOB<r3)c5fkC!?L`*g?(0Jc at Qn)hjfwJ&i>`0cj#Pz(F%3bDKiw=5
z)?dT~PC0nV2iHxDKhQ!rzm(hl`U(m^Dlwmg3aUQ50{`@lvmpzV5(B|D;r~<*NqBMo
z9do-yt(o?Mz<%+!wNHt3>E9JPWDyhGG2BnK$!pS>XBJ4ugEe-rf)5D!F*$!T@&ARv
zUn}O#@t?pRj(7GIesZqpvkS<cxbBUI4`=`b^|gE6S+jfBns;`tX6)L*SXFJ9e#8Mk
z)z9*_cXqDWwH??m+p!Jg&so1_`l{vQ7tSN+Et at o<aLg!}Pfl6sz>?zrg$3gOS-5~z
zpm9^Ilcv at W(c- at bzkaU5f=n!$W&_djSX!PIUsqeWE3KYrp2$8F?pcT!6%_tM-wvrR
zY#;Db<f3oKYIH6RA8v0usR)H9YTdNx4YR_QjEmVgEA7O(gm)IF99f-tXJ7X#J2GzV
z3BJC=v!uVzm;(3QOu+A5p5r+v3;yphpr;?leY<-P$nfZv<k2NDxOaE2m<adaKxYqk
zS1(UDZ*MVy&|sg4FyH71q#=)pP;Rurs5Rm-0^KQUd|Al^DjNaU;U#UN+S`@$m(Tgj
zU+A8y*Rm;PGIUYds(?V;q!G$6fzqNR`^8cH;_v+F_unDI&V9SI4)bm1V%OZ$shOL7
zBdbnLS*ny`9JK&d_R`M3QsoQhUu(jv0IyXbGY at Z$_UgxRmv<!HJ5WN;!`%Z#ADzZ;
zYs?GOcWz&~gRyPJ_N_9uZC$=?%W}iB`2oi=mTld#jOXq8dFzs`n-~i=y*=;kbu-tl
zn!0 at H_yu!^&zuJMi^h)5A2|%o2k;LlE at Wj4HnXGu4e;y5A9V8r&*tDaprxijfcQ_V
zKQ(>2J!w|KcQI3y`Y*lf=s)OqkRRF=NN*|QN at 2Gsn>sH&3<x_&I{1Iv$wjeS=S8ib
z9=3Es;_fA>N7p1DSdnpach_^9dcAv~-=}9ByCu5iWIFXscF*e-Il3rz@{q8yfjq;1
z!b%1P4eS+O)ITIQE23zCM|z at 1N}Nkbpi6+CtG};{rw3VpyPvOjc&JZgm`_x=S6GNg
zNRWF-pq94S7t#p%s{d9tfyy>e4bd-gf=@CdKSIWM{Ph*42B1T-TQ^w%liF|~FAnLK
zeJ9nWgI6zG&?z16*MWUhSvVrhuVKsPZ`7}^Wq(O~)go_#e`AM#t<L|20bj)g5^wD(
z`1owmr{_}NJ(PB14}Mz#ew*M~Aia6%mQ8vr*}Ty(Hf>xYW5Z(ev3aAs+`MtorVWe*
z8`dw_xPH#MHM7^QnznM;<Ry#7&Yv at U#?-RO6N|}thY!syFB at 1|+`p)xU%_DJK|ucD
ze$4zr|CA+AWEMbO-32F6fU>E2RPq0&mn06{GM1XB1dM!5zY1y(EfDlJBVW+upmSUI
zvVQcdP|~7|i_f<nlc#8ZA!264%E{>43A+}h9bXr}V?p}q4H>uh_Wtl__WOtJ{JiX<
zLhKVFU9!6b7xn}E!3BMT at _R>(D)h|l<vqB!Pf<Vbyeyym-sHdN|AARu{kkRv_Dl!-
z_<v^)@bBs7;|=CL!-74+g55%cT!Q?a1AHBPy!3nlzO at 1RiU`TP7_)~7tLoq-U|#cE
z&A`tGnm;HO at Dlz*w?D-}sv$3n>KA`MQ>BjHyuSPV+0L0stpYsS`?<Grv}s{$S)VpY
znd&7CZ=#A+1wT$+`j#t=KMQ_rp at fFdkIyE-|35vyV#hWxzjW*7C0jND^~IYuF539^
zq797o3mI=S)-e|7v7UqVhT{$E=dWKo|LwK&)~}trZq1yvt7orSHFMSS=^%gUqKS*<
zkC{7r_>5^orcA=~YuZ1sv}8a at 5#VPYgnZLxP0)Yv|9~Gz!1*DuWWiPZf0Yn`U9cez
z?<9PKe?kB=$dE6jW!J-zd8t%;q4zRPDI<ZxF7;f$NyYRn1kWEuZHpp439r-QG4?ac
zqSj7>>frOiKZFNizvqp227Ga at qlE?FcSwkI%}Ng#m>HPc%dK};uYx{4LvtZN9s at D}
zzgtGCZ*hN*tS<hg13fd+{BpBg!h=0i;v8LFJ;Ou5KUpv);6X+Z7(i0&9vt8r=+AKU
z at v`@HhoOOgzPmXTMW{D>R5pP>Un3KXFnWG{VD_IF4n;bkjU+zg#lie1-pNGTQ}5p0
zcj^3&QztspTt|ZtP0=hU9Th;$7x9M)zg58x&a0B2O37>$-~I<L6;mpBd`6i6dxul5
z?^c-K0OmEw1=8!*Fy^ggtez(atM!<>X7${)GUlvaHD}GLIjdLBR%7PM<ug~Un6YB%
zwB<{uEL}Wd;rwy)=R)|0O`A-eOM^deNV(2=`xOrETae%2trn0Up`EyWCHvs~A at -62
zsLEFr6EOLF4oD;k)2RJ2cge%CCDXc@{BGTmB9~oOvJ|#*deFU0XAY$tq|Tr@!)fE8
zx0Ci}XutEaanK&*O=`Hno;<hbjosZYZ0Y^M(SDzvwy?JDY-QES($d1op|gXXOKiAn
zT!dS87x#WWJo9?_W_1ZG9f<57R at g6USbjw5z>vJ`u>3v&ndzYeGX1+H2lwjg84>C(
z_;-f_xp;Yke7B$g*8o44KtCs6Z%1D*doK at L4>xN!mnPPo_|~9K*ELujy*ezb;8tG#
ziN|xCzi}@c3ISYm=CJ<>RKL`(2nD)!W!KqLh=gw++)oH-YG<jsotuc~ukQS-;{Q*9
zUndC02r}sX<H@)7LVmj3JG216uU`wo1=|YM0&jr5YK6d?=anmXp0#rMtQE_7p1ER~
z9y69Nov~usv}H at CFJC%!>0;OpJ|B^D?7Z0{W=^NQr(7kxgGUU9^XHVp`HT7$765*k
z1gF}bWvg^1zc7IpD^SX(P#_FJKg<dNoG_UHZN`XoxP8)I8h%)juL%>rBK??=$Gjva
z=+WoEWDWd3<r~sokWWnan^+_{@62*)yU6<<+vX(hS=#md=APHzp`O+IgCo}V_ExsG
z7B)7Wl?mARc{_y#`DJx+PK(F+dv{L`%FPNH+y~n4+9MhNPv+~B+sm(@uTM at d|NK7Q
z8EM`<Qrsd#y{G~R1;YPJ2ypZDab@`Vx&`{V`1?5f`Ph57*}1vcxHwxmIaoN@;{=F<
zG%8dFzv)a3R`B9>P#OGuRE-Z=Nwq~&ngb&f6J83>FZ<?epMHGw78K~r)|1CJ96qpi
z-)_4uu`nOpehtjWL~^QUxV2C3tq1{?VQ->OOma-QccAdYliHupUL`o6wQ7X{+sl^;
zwwLL#WI70EEM2S*rY&6z=BF-MESO)skOAx`ESNWb{#*#ps97^0{6nWsDw!}2&Odn6
z2-MEpA!UHSe^FuIg2DCPYKh*ZcLRa9&@joguS)oT{SWYuA&5q*+KJJB8o4`2@*5+&
z6H>UO?FanR=U_c%kVRP^%mMsItegbZf&5V0^?YZ6=gxU4hgYNRbicga|MdFMclX&j
zIodclSlQWGnoPjjia=oF>uKZf?b9R0uUD7Q!hUW&Q at jRd`V{u{E$rvjzh~^|B9zbQ
zA$b8kQX>lbd38zj>)qWuJ<&ZZSo0sDKz at RM7hi8@A8$u5PX{j#J9jr*cUK!1Co2bg
z3p?A6mX-tputyKP*tppPS73TolL@>4BNFicG5OK|3sXudi-*O=Mkgh`EUI7p{VXI%
zr_G)V=eD0ZzVXPRwfpz3+PzDWAGN2Ck@;6(*kl6c2hRt;z`k;_Q28aY4<qgF0jLX5
zHz9o5lEu at OEMiPuylARCFO;!l(Ue6CWq|gD^CvG_FlpiZi3{d2Cd`{Ne*T=Xb7qa1
zGi&6`=_96t{K at 4L$Cr#BOK&F$FW at KPHG2NReFx+GMe~$h6lr*9sJ4XDGhdkYNSiR^
zr?T5O!~*q?;K3LO_;ucia6!Ei=a1US3|uN-vO5)Xl$hR?m4x8KycIh3Ll%yqw(GWG
zI`v%ljWhgCuk${z3}HXy&TdyYiHEzri;Jz3lY{`H30S*0*@p!>#YK3fC;0YEbxMkM
z?Ve1xPef@>Kz6sV!F?mka>EDrjUF;6x;!r|H#@3mfL}^{cutmkkiUOwf_DD!e+mII
zBn0?4`FIKbU2*<S)=mzV;NRZ1la*CROAGqt*ea2%AJaBrzWPC}R#0O&s0sYF`G5Jp
zUU?-bG9olOIwC&q#qs<n-bs7p{wo)EoIbhf=%ID{_X_xdy^tTnsy=@Jese=GKd!~w
zSGR?v>${5{pH07ezyxyOJ$c~*u+8(N1 at l4pqy_UP&7a5f#QAe4&YR2ggt>D7ykLIL
z>~V8vYuJyTHDmPb86bc7^r=H8PlWT}_6tXi$R9b}!1?j~iuM403SLY^Vg at ut8Dt;r
z{1JRm@})q at YA`I4Sxx^mnShBJaRB+J$$@SM7UgJ01)mw#b{05)s19jwGgfR%jR>AQ
zGGfIfdOJfGkMr8S5YO+iV;+ at URnpq-8xiJ7yN<uFli=UkR)qj-dpj#TTT5G8OB)*-
zh>EAXTTHlfQVhrsE9e)Tn-!dsMZwFzWPn$n?g6C(efszG9gyiaFw?J3kHA5_{rmRx
z at 7=?%dx}bay^uhWfOw`N=Irh1<mut)<zescCMMwQWNB|_VQWLKLAu?cbLaM*I${3Q
zL|83fqp>>vIa7-Xs90bCymt5o&u{t_vJCyZHGZs|RQL~xjtYy7iA?x!WI?PJP71K|
z%qiLf)*aX<HD43?QU2e6f1JEIylXptVc44tA^G+`@L&AV8G-r&<;>^J)z}8)<LAzn
zF~=~*&7L(5z|WaAcJ at rc{Op-}jG8%p<cw(}rcD_(b at I^36RGXe+dzd&^|lSAw=Jiv
zM0tL3`+WuvBDI%-7cH-P+ZPtAq3Z+jU-kx)l}xn$W2*c<ClFu}Y^*GME3jUNRR=0x
z2>#4%MC7N#p-s0~LI8~oXq)(d>bc!6Y=!XqpMBfs;Ig1ATO-m_f)e8VBEvm`0$qK)
z!M}r>o1L?>ts^YRUYUR$xqxeAsB=hwYg)W>e56m;B(Ib>&+IO6e((N0z5DhED9?>5
z&50_ at jUQDMHZUt;R8eq7m)NqrfV4#4*eDOuUT-foyz&1oKEi*TygVE|J?vbZZHP6F
z4&dL?&JO=?ZUW4sL5ktKn{y##f$E^uU`7q&o#NGHm0k5Vt`6i-?Vv5iHD(9!Q?z8`
z1RT?W`F|mwukjxh85$EE9v2stl=vrn`wRZck(<|do;|hs_z|jIQuD3e+bj&H+I-&X
zCQzB!m=ON_17y#%I|mfV!S*ac`0SaCv9r{WgBfEOKz-&6hB)~d(?-vnK5E9ak<+G*
z#M at 7qtYMGOFPkt<6P`lp>Kr;~=#boURpBivMCugq=MQ29coF=mv#>fP3;xuToL4kY
zn7qz;wc2mg{7pW;wgXHF!lQqR{=>v}+ss62H&nrxvF<Qu7<1JFrk0^?cDuBV=dAY*
zQP1l8_#`(dvTJ%^T#PTh`k}#+tKyd3-0Yp5?VOx!9UYVj*jw4#Irw<mdU?3SM|vj3
zgyv;?_v`7Cm*v^3OH_GY%&@`X`F*2G21b|W`t|D>Ql1-_*E?)zerQRKe`c51f&sXF
zT7cYrd^o at gFaiD-42=-r;N~j+-^mfKh5zqtZPm%j5(;F90-Zatgc{ceU{_UyjL882
z77RlLc at K>uVk~;o0R?qAFRR2T*sE=21l-anrA<a!BlN?RZs>zo{t_G&84?u*{s{pQ
z@$u2g|6Pf|vD-Iyojbkx*kL at pcK$l~t#J4<tM|G7|Bp!ib4;M<(V4WHdj;VDd**aC
z1mUBmPa8dBI?tn~O&v9Tsz80}6rM*+oy-_Mb at H&ulLYpYCJvc20iF-?OUI8bf$)qO
zrNBRI5RGl+rF1xu?TXr?!B2ySVm>&0>2^T(ZcraXAbZ8_)A<GkGBE#|#Lwy`fO3xV
zkNBfoE0KfPsE+xMqKL)@fqc66(fN}Pt?YhjTl%TDyI<Nq;K>D(Yl`XK1^*BK at d^$^
zpFyRR5a8ls at 9ab(tW3ZGh}!#lIfexIq$SYR at 0On65*Hbon-yNrFR~=Zr%(6b5rYHr
z`vjHdgpMc(D(Dw6t~4koE37ovzeieNX4il&$pPuf9)7;e1;7y8{Cp+QU}&Bm_O32=
z&Q3Otl5UF$*jQIG0gKLXp^jEote?+?GIdR>f}mkpV8Oq}u+gh)|F3<%a`kG_MKEvL
zPe)D06qDg<itQ)^(CZNyj6wbL$}8|6jsNhtSXfX at O0wy?{R<C{-MP8r%qeO>2IsH0
zanVg~+R2;1Ux9NobEr7^ygauy6G*+exA at Un-1vy8Q#7_mOqtBUs}G+tY53$x@;qhI
zut^h#@jQ7FfQR7>nK;1!`|;z%=Z_s-Ja%;9sFBQMQK>HF-BK;`YpF+rAGgm^fzW=`
zPKy30pWIf!FXF%Ie4zPR+CGizBy(r01HQ@`45umjr$u`<S%&|h{ICuci;r2RMKhU2
z=ChRcrfDDWcRjy_s at 8xn&zs*n at E-#IiHe{(#{*>^WV*Xiw;~GwnaTtl?eNlWu5OgH
z;-lQt;(hvOknPgv;FXykSUezLa9{u2teCRggwZ82B{^N^O-L9vxa+Jji9-jcjx9@{
zG%U1xT4bLLC>9d|=!K>cNJ0R0VdeiZ0n!bXZj)=+m`p&3kO~By>}@+*Su!C-GGcvY
z)MQ43+ZKl}2-f+sm<ASsZcH#$JHtv_6f+L$vM+)xEI?U}Ad6x^w3TDLjrufB>Nq0L
zDnMWtfZv3F65*)Cgt)X+^Q-qSIX-m#3i_uof8FY@%DxrO-^6pO(i>B^&!2(4$sE#d
z?JN8A!q7<*hEALy*ydRdWDJ=wUgLbogmL8)#xu&sjV%N4<HnYb9gV9m9zCjf%;=&~
zBS~@#Mh at 2^4~-45{edMSa+){~v<J244K)o4*n at eQ?FIP}!M}lFsuznrs?66M;o41A
zc{YE8KIUGdAYlb`u(u2KX4VoSKh7W76NSIq#jW)7P~jT*w8Hc2dl%KcOK4KOe`Gil
z6+Qg@@XXHc?v8G*4)}Z*XB7pUBujO1_M)XTD%3qC)+afR_6Fbn8A$y|J&}d|Q>TxN
z9g-h8afpmD#ZhBRB8TS3&lnXwydZVOjEF&fqY4KEr6hU>2GaZ{R-peQLVy^W;2*`+
zm~I<PKuT{`mIf=Zw6OE_WL<sn*n0Uy-6^N#Un7#~`WBGmNg$KB5pdo>dY<Wa*2hAn
z)JmZm_FOc9y;_WsD=!Cx21F<R3yg^W;+0n*KMeeTczj%BLOh8;e0tiy1ooy6*>(QR
z+eZ$H^T+c`&rkCj*nU;;gZb*U;6Gyssn>Uxd~nJHY&jS=Mn9L19b+7$IVc%3N{!LQ
zqem8x8C5hI*yHd=4jwT~S{jB9p|)jk`+&c=0{p!P<+1TSL7WaB$$6VJ62c=(oe1q$
zYaZ66A6WPgcR~65DuA#4Qh>k`F=|GY9J3KTTO3LsV>32c2LCiJqI}v+80>vuDgNJk
z|I(0K at 0hN+=^(O8T5w`~Kx~wENHEO_P$1-b2>}KZfCxF`q8X&XE at 8pJ+1*0=W%%c1
z`($?u&&?*`4K5xKTrv>kM~p6xo;alIj4?eIPVTjAM!$`VG8atlwr*a+=+d4W7bOfU
z3`tG$3kmiP2!IRG5sDBb|B<_!gn){4TSoyKsXnW^gQb%LhG6UE-r3I9#@9=fF_kFs
zmGxG_cy(DW3BWVe5dw*r4E`0KMNi<ENjLlovnntIjelhkTyq^7 at cHWf8u==T5Wb|+
zidS9{@XLrJ1W*yf1pc*AU<=M)EpM*yFKy3Noqx>?=MRK^lZSuqL9^0N&KKP~B9N{a
zqYTGmI2eU{*J$UUX!Iytec{Lv at SMTJhf&W3_Jf9&i_b4Dk(QpK!pd$x5Ad_7DMc=k
zI+@|fE=~gehA<z%PjuEd3%4WUrxE`W$8}^^G_^YZIm1n-R0RL$E~68omXPy8`&qIK
z<&(uako}psVLz?Z at A&GFyL(KSH$RA0{NFD^`G1;oRJ$hR#ApJp<N^#QdiY}_Jfp(=
zyC%EGMELdT9$hpLohJzKe`0y`v=M2Ohi5FEmOgoSpA8E$7fs3CwJLw_x{{OIhhE&r
z8hYlBpy)_u1QP}52&FXO<mN`KfomxfFhv0oUExB?3d9g75OlV-wsLi*Ujl^V;R&7M
z at PWPRl@gcE1!RR2?ek$cYQHVnSdBQ#`_<Z#L<c6qur97#d78$#dSW104d>s$Ot`8H
zx&A5~Z~*KpMnXI$5UorgtyiY`mHczZJI<b3wQsjM^B3@&0B?R=DFm3kr_%X93<3HV
zE7FJJk4|^LeV|~(@PZM;0Jgwej)x1#)k*a{eDLt00{G#>@`nz|A2xK*kn+4CWei|1
z3Quv7wDHr-Df0ec6ix^a$nTw(OXsRoc-fQz*t0%WqlO?B at QZ6wlYGVVAoa-hDAnh=
zSF}1*Hv!Fj^fQ}~Hg<Pl!B3n&%QE{<Dd}9;i^d+Le)r9 at +}2GEyu78x8x++oJv1fJ
zFFL}T=1lMpIrs7;1i*rn3Am9C!%|#>0{}l&E&qNQ0XbQ*<%7ZpW`&O~iX2y(G^Vuc
ztg-1+M<y<qn6zMGx1GzozCAx<$MQbMx0u7;{5T{o#s|73QNT+~z}*cKGcy4xy%|am
zwl-Fd4s>EzyE;=NrV?l8?``kxAr4>FO2i6;&)1Vn%3$J;ETPs!t^8J>XWd&RKWfwf
zL%=$u&q}?M-xB<jAgHLJGKJT<9oU6{UzrtIGxsGTAzntjfL~ZpauOyGo0giA(WAzz
z`hq9-TsprR at Iwg{=STK2FrNxY*W%=BwTmkFuZs4nk)>6$w5z-G%FDnrBY!AkNY$ax
zj+3W=t1u7p%bBrDdP_Z5O1iL}!UD;2McWsJQ;<I>H#;vEsZ(f=0sM{F;RyW8T~PZR
zi60a9CEH`6`EZ at 9gZw#XxbNIDjekBw^#8X+EvKE5MLXN|N at Tva!|b8(ABtSH-4Vba
zk{Ad72meSw_+%+jc`6f7Q2=n_qCFF1{F38*d#3qxO9|`K6U>K?EDRr-5A1s^m=rsC
zSnBFoQ2j3J=ViRJvj641|6vaIT8 at 1~L$nECZiuduaZq<47cl6qq6itSK$YRB#M#<X
zEZ`(9Lm*!^e!`_F0YNa&tajEpVHy!tl}6&&!8!98MP%j}*o)7XwZ#PgZ^|(jP~)E)
zA^5Ln$dn}z<Bn7=Ahz)8UxB at 8L?tI;2r;S2C_;(dy4H4W|M2{Z-8&a-*{CyLl3xS!
zsQ`Z!FdJW1WW?rCzzB6>hv^M3aM0z(UR*bBT#wwc63hWU1Hu^qo-^X)0X%3gQGhQl
z(mV&)YlpAp9gTcoFC#Zcz>nIgX at Ap3SV3L6K@A~4Txwyh1Y*TViQuokuC~NdoJUds
zRmyn|`1z5{RPE3PZ-xo5_X?Yju;4BF68 at icx!d-LW3dja5d$6P4);5`w#IuApOqo?
zuf#abf5iW5iQdZ-6TmYg(J)ubJv1n=TZ&ggG^%E7X>Q`kA`T))7Iv97DrIb0%8D6@
zbH?>}XJx^W%|kBl8~^^<|NZ;#|5*#>tDN=?31(_AbpaC*65UBk4=N*;0-Ui1XJ=>a
zAaQ{*G?}t%XpqEHlr;FH+BZ!!G%(LTUo7T^w#H5(Tx4_x>MY6xxbnQ at JVPvn-Igi4
zFxx_JAf*;RF(k`sGM$7NQU<-Y1}5;@tK$5X|Bp;cR8b%?Dlrigi0{@lrB_CcSNJ(6
z7j54%bNw3g8D5o`Pt8{Fa at c+mLm>GD!^(jdfNB}QyXsKq6}Q)z?^h%|M-6fK=E%>=
z&0)wk$1JkcT)O%d^AXw);HA|8*sI=tVLk|Y3hkoo{So1>ZVuw3)Pp`EX8W?*1N&@3
z`)PY%y&C7G<5-Q2Cg<AjLR?1ou$08Wgjn={AJ(c02@;1)mjYEPOu%RbfRjqDPf}cH
zR=2?Pq=;dIBZdr0n=mA6#mwZzQ at U<llCyn9!NCn9?;HpA|L6DL|8EtPKli17SSY!G
z!2}G_t8gJLy`l?A4bET)+8pdT!+B~GEVQfVD&pb6xlDY9?W;W>bvWRd1+O^9D0nA}
zf5MJf_5=grrQn}IbkGz?rDM=4StgMf!2v0 at w4+d$G;CoE^T7n7Q<E`)=+qP;LTRZn
zsVT8t(h at Uzr1#FM?NXbcU$cMD%yp|LuUIl}@d87`k4f#X1p6xF=U)$g45Z}2i9Q7e
z4CBV>Nk+6}C^9bxKwXA9DINQ~N0A&O&&e}6e2x69oPp?^6uHQDQDX%Buuz`4q#&Px
z&SO$A0I(uIMzsOmq57yf3y`QmyjBmw2c47rFAS#oviz(?NpHI;#jdL-q5PO%eDmY5
z^pxPF_`tYmpO9cLa?${Q_`eDPs!;3Y#Y9E-06+hvIIrjk|E?*C!wSNR21b<S^_V*$
zd-a^uWz*7E%_=&!W%PTepNsK|AM(Ffyf7Y7fZ%`EsfUx9`f9QQDZ>dVG7d+;?+8=U
z3r(|b8%rp|AL!fHfS0ud6&;e7!~#~;V~ZR#2W21<0&xBc_TXPKvc?TrH5!g2>{QhY
zfIV(X at Xua6JnLKlPxabsQ~{8HbQXXuM5QKU1u^NVF=;7rUDJ~@d#3lv&K^9-{5qQ-
zPhPQf?812?=FS{8Yx<BGQ~0x`;mxq5gBjp8buoyX|1HSZ(V^R|{k?JqW<l2n36d3c
z&(kiw`m_G2JZqAZmutX$?m%GA=P(+!ZLNEI#Pf6I0YC8<!l^PZu>$2-4DN*s%Thm5
ztYPnFDdk9&Q<EQE;4zeWv{6(T0=fiA#2d(}>~G7=kq&K`?bWDLJM!OVf$nTUD0@=$
zO|u-*&wbNO^XqRqPRPm#PfZF^`1cJD^$Ldn2PypPMg>g3Fvtsh;-aGlW`$*RjTu{-
zwQNSOrPI5to0qwFP5JrV5FR6tpZBln|J4W8-|810MuC{@!yv%Aiu7bG!>Mo}^=N at T
z1CE4suxJl+b!F)u;w;bqA9wHlW!F{Z`!>#2&Y_e_IaQTZQmLX!s;J62=cJq^E6Wj#
z12|x8z!)$XV{BuB$ruwFxX?{#x}p1axZ~b2-W%_Y at y2_<y*KV3 at IK!;_ueN|mgI2z
zjIFJ8*4Zc2Io~<wcZM~Wb-)Jj4AAf#j(^wrTqC~3yiq1mAeaxEv)h%hBb)*xMa0Qu
zK_Y_)K!H$MNP(LJ%=Ddi9B2^c%Q at H8I{wSC1r10+6H)*js_*G)?CWVA8t6T7bol(4
z<JYeozyIo~hweY|;B}5uw7Y!p+VKajjjQ~pz}u(7ZKiTf%dg%z^7zC3XHE{BIn{k|
zM6zH6rtiohiNmo_y(1lRX%9i{Bg{MCb>@i&M|k?2Rm)Y|V=fpOUcOa$slabvW6;|w
zru?1!SjrO22T+#?#A81;mT8EIfQ04FJKO~D>*My)zGe;^-qF~$Jb%-*!?dYqM~3Z>
zpHIS`-z{#cm-4SXkXu%gQ?w8AzlW8H(*H66;gLfR&!R(p`AxNr*Ur{Hd4KIE?jQNu
z3kSdULg%ZW9{$_6M#Ff_nK3`W=qqUx7o-NVvdj?R6bDkEk|aoxc#)km(wRZwqx?a&
z at K5m!nIp8lCsH|Md{IG$c`kryYj=zg|77814zQS{BV{8*ha>`+2~2<oS6x}*qw(`$
z1+cadS96U6{38V*zp)+`#JQrS=|FR1Ra;9%YjaI!drenILvMG}U|-w8;m#w6x{e*`
zKYgO_%*nxXrw7iR9z1_0ruhSHZyxS=;8zupAGgvRoc-sYw)FP2_4l<84s;F;b`B49
zjSP2l7^Hg+Ng@&tLEX{LHNjy|LGxRXU-1W&zZ@=)c3PZA`X8Sc at H_s=T1Itl5%^<R
zA7?a51mLR(0!D-i0X9=0jzRnVc^R8QJ{$CGx^gJ<OCK8zzlyH5lID7te|}jhJxNG@
zLBd1+<06oQEHFb}IIp^*^4L(<GmlhWIo12zqo?2b`p_ at leC+@D(`W#XIWzj*qnXjy
zmvpx&HIU;q60uC2+X72Tla;n(M}}$$DW)<LK<g3~!AT;(4|IsI0|PSwY>g`X8#{8f
zj|pJL at Glb(sC|nCq5tIt8~!B`1n6c6`SJq%hchmu%Az~(6cNHBzzQ_fmDbA^9B67N
z<J{cHQQ6vD+166i(N^2t+1TIH*x%baGQ`nw<Y33qLt5u$MgFR7<KWXy5V|qsySz+(
z){bC0rlSAP{q>!Z#~<oGb?opH4|ij&u3zdpG-84<*o7>ZI3N*zAQ#a%X`l`jm}9<w
z{4c(03v%kqwC at n`Gq}su2$s|biY+V79FTt?Fa8r6f^j53(`@YKTSMM;C$ML86ByUh
zUE5i>M+{^x8?tX$qxPOX^)!D-d-`&OHy>1VcN97Esjg5%9*Q4K|7W59rTp#4&4G=e
zjdMzh%FiEde&|BO(+|~s{3>k!{(t at DXxxrDlk~o0-W~Ia1r0U4dzc-d9wQTTK!8+P
z=}eVO*gBmI6;p8l`=tv3Kl(q^`PyAqhbey<2xCVgNEl at U{|xgQ6a^ANl?iY<#0=6Q
zr+DrxL_;jd=#U%)G7g?N#spZ^kVHVt$6()32lC6C8cG}L%9|S*l(#ft5h~gw1(hAG
zHC^pB-5m}6J at tLv4TF7=@>kf?@gHe^W}>kTCc=Dx_N7sel+lB*SYnJAY1_|V8~n<r
zyB at emI<IYLptY}8wqT&2qhoM at L$VMZ!$TN|qyrh5$$o<D<;Qlee7B-Ks_HanYPNrA
z3RVMq6bLzYENSrVX(tFB5$2&c<B^{vaR`YJs|MKZ2zQ$*P at 3(NZeSJ6!rYxKb!1a2
zRsn3fd at vq(^@F`dFdt%`73KM~qO!2R+A;upbABWI)2N5wWYJJ}`MD#l4__=lHr)BO
z=P&>6dt)LtX)^vDCmkm}*Y7GcYV{a|hLnsW4VSso4{QNd6P#zUVGzon#%`q74gdTE
zxC7{a-KCt&#?S_N#4M|HI%Kv$cRgjG9GMIRXF0|5=co%S+b9Egvk2gygS*mNrn>?b
zWTqVTRc4wW{V(J<)@uOxF$Bm$Q~iOKCJ91Y%Yn9*s*bkm&NjksO8BbI$9DBiLc6K@
zc>IqI{;(s^XtYl-GrAU{>kn`De&x9%pZP at pvyXONK8MfJerTlozBBDZ1Kr0CyC6V~
zTo!a5;uz$JgktWh6xQs6e{wOX4$&TuDlou-lG2!=G`(Zq5{u}KfXREzGYQ*Myc>#u
zv>dSuZ2iLd7?4?OS5gtmepT#I#qMk+FFY8Jz_PX`eBS)(3JNl5NJZH{;FsnH{1%5a
z<}X=5`Df+jm7W+OLD2HReO=#p@!;>?=B37jYcv`EUQ-`OPmdqu5gIMX&)P>H>D(Q*
zc9<peJ92Z<3C!l at uzU=wN1sgT|K*DrfO%LD_{SU|6!0Gbo&!WJo)6&<@jsufAwj!z
zzD0zj^DRx_c`;>*-3vejNRuH2L_zIP><$sIq=5gRI^TJxXb-R_FIHbyT3b_MWA2tT
zNGOnk5;F=&1m=K4khX*uf)J#=B88tQ4r74-hL9gG6!B8f@#{AS-+le$*FJmrxyRej
zo#?#pbW?X%*NG!I1=s>N2Ur9E at 3PQ&a9AQ>5&>Ug9tt{>tt$ebSD8m5Go-rY_Cg~q
z$tdP;YCll^R^B82k03<Ke~PfT%Z&esFY&Uty_EeB3!?rFQ!;aP%7Trlt4ng(h?6bY
zXao`Au(+iWFtgw#r at RzmlU1}2<^$|^7vyVw7E4sLP|KX(+#E6jIb|gWE*x*VdbaM7
zOYL8LYGUw5?{dR~c<}o;o2V37iGqCfk;4#xf7T9XXYF9APR<@h8>p?q1jq`gb0#7n
zhu2^)4e$70vLJ8)WDev48~!B at 7zh^u7Y7^xOn}6}Jz{=AECMWu+99(AsvWYLI`$U;
z`JNqPz>iqw{73q~4zvsQ!oLj~>&UZ|HPx3jH!$P9tsMCRe<I)$G(X%1N%2EGXCjg#
z4=CwaxpY?2VHf!8xD=fK>rYR=`$peaK7I7Xr_a9r($VLiJoxxSeV5MlUq0W`)7^e}
zr1Qj4 at E;w4MSvh70wY5P{)KYHC_CYc<r_2Q&o?Hnh{aSSS>X4261h>B03yjsd#SOT
z41wQVpHD{$ELm_nZFAW6OKq>Vu15 at M2Sf=pSzvamrNeFZmBS85l{!;_Sy at iCKb#-%
zi}uimia4j0{b-3gt8^s at YS$_KpPyGu^?p}t<CFJyz5MKW_`hMmkAC845ujw6gRXJ3
z586pXX?myR<zy7(W#nc{=cDl9Kkfpf|G~exz={HS^FT-`QV<4+<P@`=BFYN)69W;C
ze^DR`hm;x?{v$8I3+J2yVG*R$WDZzmApD1^F(X2CvI6M;x|$NswbjLSHAS`6+%2lF
zEn>2vj)Cet$#aDp+r<Muemnu%1Dq#ed+K-N#N_;6elqZzZ(jV>xBI{JDOgbFxswAA
zUT)~@XdUct?(S;t>Fzvr%xwXTs14ZT5g$H?6krITJ-E8$xm at 83{FXX*R~NN_wwJjC
z at Pay2UxOIHBjm@XraxlaTQm~;o8P630Ph7CVhQ}x%x$>9J5ThmSsO4bZEvOmKd<UQ
ze$|0JMEg<uRQo`9tQ4QJe_N%lE^Q_PTCS+R{rd__yW1*<dt09W_>o_IYcx1V1Ni1=
zlHNsKqsvQn7w^y9w-+hcLGL(vCvxQHp!`k$FG-+4&>=w1Pvcz_pxLqr3Xr-NEEm`g
zL_kqcPYtsoX~_ca!vEnv@&c?Qle_>NVOS7e0Bja10RN-|h=l at vQjm6Ll_lRlUq1XF
zLm>WBSBnS;|20*`HP!oTtM^w|A`4#aCY^8OKOXS0@$yCEfnUfU1Lw=wM}D$n%qK2A
z`^O*j{P30jZ+&6tTVEV_`BQ^0Jw5dKr at J4x)brqF+<}f$$9f;Q+;v=ZsPp8}j-!X$
zhX*?kjkFK;<8mt6z&B|@e$}54;c?~99$sRJszn#=G1v?INv>|F_@@v0gl7<Lh5SIY
zQ2rnR=>z}sH>_D#Q^dg*<kkJ%MEi+$X0y(>w0Jk*-<zLltGzOODb_B!bgEG&r4AAS
zGXXdSI0&UZ?S+lCHCIk2!P4*EJle;6h4}X>tgpdl at yRpy3;!8=^T2<4K`!0G=dhpk
z%4HnJe-_~m<L4?0A=;xBg2KEhe`W;!m<u3AB+d{1`33O;2wa#rp!VGhb`zlLAa{x_
zly?U#Xs%@kA{KP7N~UGpZD%F)n`n>lFDnq>-wXk1Zk8I6^GYWCUh@#~e?InDJSPtM
zlR|yG3&s$E-amY||JUCf`2H)W-uhzqvyb+@@MPx$7dx+CXghgC?(o5(-t(v04-LbG
zz<<}N<Lx6u-N%n8&VWhfyQO8Bm=Cny++K3)Vm>nh=3{Pe5ahHtr$RlbeXIGIYN#gx
z>|@*^tP1Se0t5e-wztrsm4#XA|I=EzyrC2?Ap6=;V)&p4J}<Qoi|{^F*;!hOZbkU2
z^E4 at N5il=66li}_UH*Zx>hs6rG5MZ?-z6e?yM2vyIehYp(oA~imhR6$|L@<MR*=h|
zO#Bm6%%+E)Q6T64PJvLc3>5Z3N13u!6x2A6?#6ip$cQ$WCMj&<0PJNEI2LKfJOY^m
z_X6Y#lO03R8LbryvedB50U|(CCVaZP?m`5F|5_>k{Z*AkX#VP|eU%3oi}^%QXAl+q
z_ at se9rr|@n{vLs!H|qMu>%BjHZQ#eR-uKfthTeGb(09Jv|CuL8zVdwU$L}9{;mN at V
zuM9nWb>Qj+f<ir)&vTHu5coaF&zD9d0qr5?qX at seBs71(e8Q4WeJ8<sx&Xd6K=sD}
ze%w@;7sDmw2So&E0YpTUeR$cKI`dRtUS%1rXlcJp*IC*R;z*+T38bV^Z(|kygchlD
z4n;sLNG?EbZpGn&qMr7)2QNf`j0R(>?prwNZ-md1T~U@@UP9MsDpA2d;HP~wk$>?Y
z^#7{m(*H*Og%d2G#eX~mga|0QZdL$U&|Qr!3*bfp9ui_6z{7&vBM!U(EuT at bbg+ED
zOg#7(3&Ocmc8sL3t)sm6ZuXsYUl=Q(Ku~>cu|%M{xV9SRv#*-ohT|xINr4CF7stTw
zJjX;JoE%TFPi1}#<<HCZ{PtV at fBTKWcV0X9!>^rw>x%<ley;oR2l_w#c<0sgy^lT6
zd+}`d*^@ozPT~%9ojcWi>1<5%8|<k!BhK$Wk=OR12W}_GuTa00bXq-+X#W%g`*EP2
z*3c~rc%T;q+zk9<p(q4G1eVtnL3`lOIFAHU1p91|pSj(-U6EHJmhRc5Pz0=Fxoujp
zx21k>Lru-mp$PWzgIkF9(J$q11pmpdD$hPpva>{u(|7I{{#E#7$WP=y at _z$_Tc{@l
zJe5E5IYfah5f<_PAPeSEP at _O%K_miD_?8HO4yhu at JOXCO3*3z?7z<Kf%pKuS<MGoY
z0y^_sn{!tT`LC`*`R}i)K>riTk at Ao7ypi&czz^Ev>AizLHaQiXkG>}EHKP{{2j_nO
z{r<mwbLf}fxbpWuxbo|_4}Ry%gD*dK at b%C4f9m6>UjFpqrym`D<Qfs7-t(t>AG}Po
z$E&SWY8%pieH*ssPFWJzK8Ke}IpMJ{MC9L at kI2uIlU!2}07a1OruV()Zt%boc&&oW
zN~aeP;9p#vv$VW`<?xyN3KT!g&!zDoA;fJYQg><Xtp*txk^&N}I|D0VENBn80EkmT
zU3J6x<HOHC9*=w<j|S~6obk8VTUV83TgL1xF3ez0jl%rxd-FW)3;*Ho1 at q{C*ZB$+
zy23Y-V=i#u|DyJJNPxG86bLm&1mMMgFaZRGEGdi?xYH?+B*OAyCJs!xQ>@?~UI4Zr
zOpV=csWHrfY=Nmh^&K*er&v&34bHCzJY(QbB0uKyjt&0l;Xe-TiJ~;7TXFtRKkWbI
zo9O at he)f&?KYZ=f*I(>??y-T-eX{$}>wtggk!wBoogTP;vHjSg0Q{CKw7MxVp9uV_
zZ9 at +b-Xt<?!C~h-I at 62H<D9S*fj=(hIR%7I;}W#a9d}R>0V*J7xC2x~Pzyx=^W|*&
zwKq>{ALIjjTAEmglc1I|UFBp{*90Q4E7O{mXR#cN5 at _n5D+arpKk?uPg8%%QirwYK
zv{D!IDa<4Cvn?<C-j%9+aOKb0{NKe+ek2Y+OPoJ&0R(m3wTzhXZ;u-6fp;Jd<_HHa
z0AutU$0BozJr|H*0%n^dJX_Hr903ao5e`KKL5gnk0wFg9Msx{;7FAV_QvMP7SMiU7
zQ-4Bu#KSc~F5*!=mGM~KboAmE|MJr-e|>lO*WbMM5AR(6!;dcf<n`gNf9~L$FAcu<
z)Tyt$aQw4RjXd_?(N8^2T>*502*1<?Az~Gct58;P9zp>Y=ZP^N<pcviSI9R#;0?#d
zJWm7R6JCm=%_2&o90Y$5I;sK?N!sCJ1(uZNvDu1)pJqN=SZ_}6K?>=u$rW|QURN22
z0KR}k!1gW5$)Px(O3||ZuF?2s<`yda_?PncDr#-atEt$<eqn0BxYzKXC-P&JKQMpL
zBK+h368S;-FV|UUH_UTa at J`H#3IFhL1GxylNrd#ju^@8+f-)f#K3vGkr{^j)4AI2|
zSYE(PfL0s>erG|}aYYett(wH+GZqBzRX?uVZVQyZJGp)q=P}wZ at J}JPH7V3X!HFb@
zL4@=11{ePP;|st40silWpTBkCoi|Rs at lyYbPZ0&}{p2G at o_qY@laKUYz0X&25$aS`
zCzerFvMOu~!EYt~VBQ4ZDx+c<F4z1K?D;C9 at t6bqwr=ob&iH)JkblA>v;!g+tmQEK
zvQipL*B$TPp0%5mvue4|auVx0<qNEAITa$1MuBmh2(WL3wyq;(aA3H%q_^Y!$A4aJ
zr6NBt|KdWx5A#VY$Z_(6&IkF#JULYJ5M;a5IoSjLNP*Us<Lx2~?*Gc+)g%|hxd4_0
zbNsst;68$t#>oq|xRBza6h(xoVeoGzKrBcL1l$p@>Nv%M+!u~S;P%_3{E at _X{Kt(&
z+opikcwonmr}EtKt{M2__pbieUkv~1o7eyR&h<b3_~N^7j=cHOp|`#;^u=e-y!zRb
zU-%S7CR)seqCkxp_yJhx^IBD>t&afqV&F!?jq_Mxo4Ei%hBuD+kBR*F$r}^^=oQ~N
z42vunzt^mp;D6?7Q6LrtEUPTsvUA6#wCx-l>Fuoc&N^$2ZLp#+UIgR_m<eD5-y9am
z5CyHhbZWE+#4GJvIQBPU-Ay)|XdC{w at 6FwopQFfUSoZ1s2P8QE0r}E+APuyGE{pb<
zJAepC3W$txm$L*!M!^~{$SF1#052fkM>cbSQ7{9cOqn~yfeDZ=Ed8&zsMUxP8ifww
z2*~@x5eVv~WecSIkwF8zg8vwxB=AoS|Knl!X6Ac;^^FUE_q~B1yaNBf at a~&~U;E6!
z7oHh<`MJJl9vyh at F<bz^kLDNiK}FDBz?TS_$g89u^JnhA<6jiWN_v9Y9%DfcY(d((
z6UXCx;_(egfxK*cBN!UeN?inkFn9X~VxbFjcC2i#+?bI at Baw~Uw$X2S!`3bIQa}n=
zQH~TuRzU7BHI~MLaD=IdAP|~gQ(4m0HX8rT+(Ov<OZmGLHq@|#JbhO(iuMxom-64M
zw3q9D&a+l1`6d0Y`XBON7XL9{*khgoJa<j`8~!aLW at vY#;Nc*1fh7*$|6a=iYsNg{
zzy*lBV52~m8nY$#PKp#15)o2%7(AE=+|IfTz+jYs&mh=ahfg0w_?PDQV+#8JW^g{<
za|izJ?W=$N8B3Y2{qe`}|3g1~b>xlDAO7~s=>LPSJntD^{$7+n!j9VK at T$&;_AAcG
zVf at EvzrohE{bX!sV*JMhXDms8?T?;T{Ml|$0``KWDaxE}8>kB+Bg}5Lc)=U!w7+Q+
z&6d?&YV&4VZf at 8TNkJq6a)&J<Do2=PF(v>WUee#$aA}N0 at Oy;+oazI+%C%E)`u+mk
z-mQ7r+w*hC`9kdkc&I)iVBW4AUcx&pC$XHbYkQ|Uh=7N8Q20)V(BxoS6evu1IsOBW
z!0JM6#)3lb0@!2_7li|m_c5n9WI?m#4p?a%c>z+N#suyrHAXm;YPTTlKdRs-4*XN%
zKjUHeX6Ad}eXakU*9Lz0Rq|gW-~ICNH(nZe>FMFGzCbxN;CI?1 at GImi{7cNu=LP at L
z{Dk@){NSGkK4E&--ChAWx+RQ#M}}ZuhDoJhG|nfVx&1cbge3Kv6h5KW1#jDslDl&~
z_}{$Qn~iG_N<nA{;zU5<puiD!6OdC}RNC73UYh`a{i5djJ(Xp9r2Jw2`5F82>3qdX
zAK`yRLcxzKe-ys^zf$-pTW32GhsEIE*p3yv;R1x_K=?<oD+CmJ#Fq2r0%inSOaNYh
zxd563$*@YF at d7y(&Kod{1*rfaumVVdkzs;DBzzG8K9X2aBKe8K|KyJ9&47G@=U)EH
zPwCfm?H}K{^1JUJe)o+d at 4P<p`in>2{>nW|7U1><>shR0n|xk1Q?)*ms)h<mnx*+;
z3xcew6G5=>uK}Brn2*TMc(-wO=Sh-_$uXaJg?<isXR6o2TPIaVUvyXyO=Z<ucH>5R
z%+gv==D-X=f(V!|9I_xe!k7S-0~9sZc3eF-S_E#P3Gf#$sH at sd*;`ql{Gt6 at a`#xx
zPYQC)A?9Nd568d!Ux)-h8MeUj5BRYN&{t7?AyE3?QebW%z`t>OZ8L4;NBk$6kqEd`
zOcXSHZan_w7n>BwFCZ?2O(8I7UI0SjL`Xu!F&6pxFn}Mqxb)|ru$q<R*U;Nv9{%PR
z$$z2$wVnvEwJznV=Qr9fH-`#9;AG&JfX6W(kMjU>F>td2<AHsmc?rTq0ir~Jk9*I(
z06r&8(K)js2FtZLV+;7-&`|2zY{jG?Q3T`*;0~v4Cma;dg1jPvbZ~iR>uCHlb4x_P
zU%9lc3FV(zx}WXyr2LKisM?Kce*?dwoq%5j|4W5-ReJ(;D{tVgxwr1>0$p$}wh!7p
z{sXY1_>YN$u5q?6iI6)SX#2ngaG^-h|AAlZ$zq%W%MN&UEHD9c<QqoJKafgyd%e7K
z%Cz6be9ZF%ihYU?4gLPRBfoq5fq(hMp`X7A`9J!zHvvD)haf++2jr{vl?6c%JS+B)
z{&$DhN?w)Qvc81 at s)3~MEj1C!Cwpu{DHs>@V?BU4B9fQ@{uU$}z^F7Xd&ipf>)2z3
z2Kz1rNmc+6pvM$lcSs6YI8-di9N}!O2rk at P*4p$QiGaVXl>dQ}tg_;Cb9<@w+>+<Y
zKg54P{#E=B_@(@f`Ah#hy|IFSM>5EFz=!w;?VjGUiU_ZQR<?`yk1T>KcDV_P2#Ezn
zGmxd=xnaE=Y9H|5VFf~Ws<V*w8Z!NF%70YMlTXM;mA4z?{EqD;#A<TVnE&Vt%qAwi
z)C6~je)pYg|Mb&Czy8+2pS%Y77l%ZF5cQ(=&su~*`&HFuPQ6?k2fwnq)*_gABS9Wh
z+5+IjJZCcCCp<pB6pV%R@#m~Gj=DGq8`~t&CJQfMbzePOtGE=55&@40g^oZ*dLj$T
zrXxy0S;>2We}Bz=4K;fzr2IYRpI(?J=3~rX`k!cLM1F$IS6uMlgP-z+#r#p`()=b7
z27VccNcr<nyhqHuW*q+}2;6lq0G`9)ui#I2!lQX(K_K5*(7lUo;f!^VNKpQP=8wQ1
z5dLI at 8+zlAKf0JFer7@e89$&DZ%T%K{mtut{n_E)eEaCHzl||faM;0*n`4^a13rMq
zTzjqhf%fQt_RHs`*vV79>c-<~UvU_}87j5y><!;;UJBUc2lBssF?DguWh`Apr>qtE
zyH>ATJ0%eqiv{f|C at 8EbzvUv}FG$!2<!{ViG0*h9DF1Ajzv?{k=q>oeFJ;kAk)Kfc
zYr}LW_M9F3hJX3OPV9{l$sKl8&t;B(fNkK{mBPQ%B#_{t8w0t(Z&t=70{$Zk<gY-8
z2`gavGMNB#3L at GcEBG<Z58xwhY~UXc&++rq9mmN<Bv9j6lPiCI=OD`e-Pf=G{zn1l
zN1|B=iqA_0ARdjgeNXT?=eLzU#5~1(?ywC9UGv{C?VngWrYi#2pv0TfF}6W4bVzL|
z?!1$JaSL{DXPePP5ioan^Cp6#8x<6lBM`743x|49gvWyD;lJ;eihzSZi22iW7v at i$
zwv>MspVslOh?Yk_73w$UZ;q`of0g%Goo7sq17?vQb7Nh53+kde^GqU?9Y%p`(m4|T
zFOU}g<rLdwSQlqA at sq(Tgv-kAv;;9y5XeOs^AGSJR6D4=+3`OL{0?%UJ6*JocYT}`
zB+#UU>#zLj#|MA;*45vBk8cmoPpV5*ZGa!AMzqI*oM6Vvyrtf4>57LsV|pF{M>>CE
zFyHW_<48dw(#OANEC~M{5nxFgu~0V4SiLqiCIaRQSVV|$kcq(7EukZz>L45eRfmR-
z0IgAQ1S<P(O;J!}N>u7xQ5uDPr2M0>kB2=$eyG#D>><eW#zH;hc at w&w#PA=Z`eOT{
zE`EsB2dltb93&S^hLVCHm|Y0hiy2d55=)_1ki3`#g)bt(LG+Nv#8PLlJ-+f!faR@|
zf=OQX!T<R6;orW^-wW*l{OW^83J>Hfv1^Tbh;7>Hb at 3c8=2v)AoF|5558A};zc-_s
z5dn9E at 41JtA-a^L_VVnEm4$oaL?Cd7LlN-2SX^E>&Jj>7C?}idBy{PCpqn(9dN?S0
zVlLG_tkbcCuZ4Z`wi at _jVIR4@VV at Jwl~nd4s;^SdG09I9*b)DcwzpKT5gy%j=z6FV
zRUeZSzt}PbPJ{q9Xu)I{=W)M4?uNM at SQZ=snF+@~AJPv#xfJ`v%6}59z86Aq=<mME
z*F~u?`1c4u%HK4<njLw}2cEBW4dEJR$bW!;cYA>r6`t|p at ZP{*uX-~gfN{9}c9v at L
z`Q_Bydk_1OEwA1$5inoCB0@?HcsPh1h%7a1B4CxGVK{UrNnw@=vp|fDKwe2v1mMww
zNu?lqN?u)6UiE=J<t00d_oeU4XPqx~&RcS_%=1;uKV<$Ya^MgM4T=C;fHxAZ$frTt
zIZQx)a9tJE6sm=Dr#gVyuXLWnyptmMj3|v1I~Th^LFQc|n3tD<wl|-G3z(swgQuRO
z$r$+$!B5O50zW2T9P;x4;Gb`jZZM)fR at egtlG{s=-xfH_=k*2t3iyO>Z%F&$JPP<Y
z_(A6TbGvB~V1+U)h}+D?3zzLlUzKVsXyb;sa8R5h5Mx0W4vnjeur?{VZUt!W5g~c>
zU_2>^uFS8mroJefn19KB>YP>WQ;;j=Z_M8d-eO at N>v<A*zKZz^{|<G|0;D*Jsq`Su
zX=VIO21;I(UZI;Hq+>#1{;Vjy at p&kXi38GPs@`7~K|{}*mkq)LTVq8RwsoD=8kzX$
z(Ma<%NCf{__>Z{y`z-<_x%kqcJ&Jb1`K^8l&98uus`ymG5pn)8X#e|z`J{KbIT4`0
zG!b1qVnkpry+c<lT{W&F5L5 at 5BcQJPVMbtwRfq0E1lY`!9=W;2MdL+;B9M<a*w<KF
zP+Q3&FTlUMWWT_lmyPmwx7VxPJn|#vPvmDs5cUCMAV0*U0n%MpJB#Ole_O*M?G5<N
zIh6^()>{pa^M5aLz;%^Ha7rIZiUo_Jh>&pZ=`$l*`T!|Qd{R~btE6g&ko<=t5OMw}
z=C3~_!6%Ks`@V_*UxmW^c6e-`z@{3!xZ1ztj*pPfl9In8ne!)M^8LT-PDkQ-d<Qu0
z5%YzyT-s><_S;#x#>UxGVnNz<C0HZi>*Z-5fiFORHmm?mqzlSR#{>Cz^8xtFOLmnO
zQR+sM69WF!xusF+wq^y3e1n9qnEz5}hM12taPfSx8dv@(F=IX=IhX*(hJV;jT$0Ne
zj^;z~bFqtq$8EsBB*IKX;QU&_50f%0 at qR&we+-1?`55Myi-tw`4_$x&|DzJV`itU@
zIH7p|L_pv-!XJR&I#vn%3hdtw_{DG(*q0SZ4)TD#5B8P_eto<+n2$R&!lu8ASdcAN
zrG-ntf;=fURxHR at 3aCcfOM|ptcqhG65P{76T=tHql_;C&<(HST(0e?zC(T29i1zQP
zD9vVH?6Tq=MSIg(q+F1jt~$>YEpoJVj)*`|?L(<EO4XRZIKN at inU7#>O+JOy5Y=E<
z;t;8H$3O4}<aQaa;Q05abJs;cuMj!KQJkOt-cF+A7g$M~qzut8UIdci(h>MW7dQd@
zh(H|RM~~w~;C-?PvVG*QEzU`ufJgh~@EYKSe9!YnoZkTt(!7}egT+7ZK1u|}g?-Wk
zx8H{BBLdto1T-wg1f*`=OhzE)2ycw4<5VN<;n2<I3vadc!gMC*Km^##nw^q%7Z%W2
zF1M_h=DPdqs>gE*idq`->#DW3tNH)|AHcu6WFK4FrPJGRZ+?1S_Ka0(@8HY_ at Ea<E
zb?%7;55~sbQ8g9qz>ZY9D2+iqTD>K$Zfh8&<awggev5NTOkDpv_#^z|CK$_-YY-S0
zz^}Rsp`Aig`-GgW)RO>|#eDn>K{C1E(cp+Hdl-#>pV8mz$G98`=@`>SOj~MTK2$YO
z-au^JHmB1j$m0A&I1zy{!5^XS0|&o<fSV8jZMVb*WMuU2x|15|q;!C4M5&G=9S|Q2
z@}!vUz_Q&oaL=G2Gh61dcVs~xiv_%`F1 at yL%8GN#OIg6q3QC$t6wq{?aa~nz^#La7
zERn;$!v{)eY(>mRy-ir*o}UBrH~h20eF=vn0p=4#`(624Z*wsp?pk at Xb0HuNL<5W9
zB{~l2h04!5&qo%bBU;iWNwK`G`~u_r2+^GjRs76A$TzMfi-Q3Y_=SHRth)iFuKbaR
zkn_0z8z4Lazx4kkCSXjVh)Kjmjzc{7qw$zx5}U-sRh*N64-RkO?TQ#U;WyethWA4P
z^zlE&)J1?l&2Q*^<8}P+R)DPp$crV%LSrUib3%c%6^Pn;;T`Nr;Y4Vsbt%tcEA9P-
z^iD(sXx$0;^D4?XtLb`GxsYE~4)U`Ol<d;N#(ns_^k$)}VH$34c2=PLy~BfbxYDmr
z{8PXau at 9I}9L at z%uiJqI84<$m1;#E833}d{zcGBU9jn`M at M9XRl3B@I5d(DrlBIAV
z!jzc84>Z3#j)i2n1pW~Jf_<3t8Uy^v_;+!*X^HR;5S{~JNw6I;z$Y0FG{3+v!hfe+
z-AJPvD#i!ghwqW8i$F+(R3@!IGbr0*K^gl<(&8zkK&lS4bXdFz5DN+xOUe<*0Q|!L
zp5643qbIp+fk^?jU{CQr2|`)%9$L?F(8i(I&NTBZDx?|RE_$1z`S<Njrz;nwKDpBT
z*4s+Ex{&tbrwmp&vIHA#?{&^mSBH?IDBx+#96URv0lm`X5zamG6VB*jBR^8__K*-B
z=>H%QY|;_pUk}Zvut(2w5p&`sFE|K_O7mkBROA!nyvD$Pvhp`llsuW>6pv{RrZ_p4
zAh=zKi32)cu5Ntx3Lq)w6UxGe59#B6qUnl&$+)Be8{i2Jxx;s}r(|+2AX+2ibwR#H
zAPfg#1?VQn;rPc2>|n=={9M|V at 1(`_zP&p3 at 1>+?H>QCz2ly{lsB=dl4sYHLJLp#A
z${*xA`1K1~z{i!pLj6|ffVP+JMH`1Pe6e?s>992L2PDT@`nx9gD7Vh8-ovg|E)I@=
zy@(xd0(ilo$icv`ynuy|Bsjd6nFHRM7;ISZ5VZG<K{O&ip?;1%q?sF0{)w+Jxx9=o
z2ul^@0XEzW_M$yH6!{qgW`5-u4}55*rYr)A|9d$T15$goeiJ!>@{u4W{kLxOrl2%h
zUVs$^1ztc at Agvl{z^|1u+LkMWhKfi5{T0<#nm*EOT9KQbsg9#+H@$oRURsYr^3}#4
zz!&CYDb&oL&0Mmxwuj8eOWhp*RJ)<`Vg8)Oy%p{BH10fTKR^Y#>S3iIPgt(wK;>*l
zz;L{uA at yDKZBUiI1wH8DW_9~6DZW#)JOY;vuCa_jfPeEW9Poh&un?%lf5L^0QvQa2
zkJdWi9sgs4e{$$f7wVH<AIO6H*DIDv^P>g{2?7S(UiW<C&B2ET+Ee`?QxO4J59Hqh
zp%Mfsf7^x({NoNQ1ETVeR9h(-QJ`R%WMl%=GD0iGND8QrA_a20cS!{3ub7ifi$!(W
zg%KeI9FQUapP!pqSddw${aon8%Vc`Kjx;uNu~cu+(%hJja$ag|rR^=G_62 at 5a0uY%
z2)C{4q_myMgl?>ZUk)#6O?!wL?eiF~{HfBPJBz%h<`E5F<wP)?MNfA4#ep5+?c(D?
zINe5gkO+l+7>oG_%3l}@OMNB<<Oh3!`?(7Bm at -sU^FP6DDk2bi0Rj0T7iNN>b)6j6
z&PY;l&)ot3Lkbk%FTxuKc|?@F03yKVjL3onfw*YS9{I)C0=6zPzaWFHi*mEm=|m?P
z*^@@=_3SKs2c>#h;X*Rn`#Fp43;B>7HL^g33i)1p;LU8M^8?-jCl}7e)j0%O*YMoc
z@;!k$z%cXSLKVpc^UM$qGUktIxFZBV14P4&h4;MGj$rZ#Fb!c)C}`|}-SM!GDx8h^
zTeU+H{#_z;{?Hf#m%IN|u#cDADT{y;9_yWW7p2i!>1I9=j(`_IAqDXZB;)Y!j<Bs1
z^KIF|KST(RSoq(WMx$v*xI;ZRTd<cn(0YA08yF!Sv}%um-}iHo+E;rMdAlBXx5TS5
zykTTA0>5aF(|&hjBP9=3iQZV3S~YF9*3Eb6F8jHtX%%Nysq>JOzePk%=LbT>1(GAP
z7uNIH at b4nVa}g_-1y+b#!Z#`GGdB36fXpZnxM`t?;z-l>CgLIUpKUyW2zUzEJYVk`
z3LPQ^ApA#bd_qG2{z(hoGiSE*pCtUpOh8&1M93TJVgm3B$PP#fcFQAh?>H at M7YZM_
zP~u>Z7Pfeik2rr^se>_}U_U!tOK87=KS)<e?HkUu^MY|3)BM(}Gr)h)r9?nw`Kp-%
zU>s}C;Olc)*(4DVw$b)#+ThE0-7XkYl4wvN7Fms$p^?SmiRKX`Eb>LK#^YH!U&xO_
zE`HZCT#-aXgHfXKUb7=G59gOJzi2+Cp8r`zKtWCu2mJ^5IsE3nkBy!AYiXwm0^1p=
z4%WK)(ejk`DddY2`(;W08~%N<a8Mnj8acziJH?EV0(r-_X)j|PJ9fmtzb0sDLd?@?
zPe6FA+6Tff at W-M(#(acxAyD<Y0=d(8(Hn3s4ez=d at JE__{#+s4%U!}P?T~A2nr7ml
zT3-$m3M_ at og`8sc0=5?fB#~>ZxDa;7;y(fT=W}|tHxa{$;CCqqMPN+1a9KzcqW4Y;
z9Pn at e>^@xRhVjoUup)Adr-Ql=@Wz`@U<H7^2mc-awta~@dfjt3$fqujGn?xH`+Har
zXDM=|V8+7vVIph{{G0w)jT{HacaH$%`=;&cDYq*#K)%Y`sPM50H*4u>J)BK>dPSL6
zHQTx*Pw4_V3-!bmbAn0J!_N7IRT`9u<Ou4hcWHQ&f&k>ke_Tuia(l?Rke+BFpc-JL
zzy(1qJ!jm`Jc5H{xmbBz2)_f57{N5;i>)cWl at QVyrTpXZA6bN?LA-RBnRqW{VN%S4
zYQ80U*-e6CU^ZsRbdsmN_YaQ}0l<z>=%y%8u$GPQfxlFTNr8}$^1t^U at DKQ93ufFa
zK`<-8@)=T2EFZ8$n3TU<U<(8V_)i!9B?6QQS*4Kl|BfBxwsa8Z_wpWKZ~c5I^$}FO
z&Q0E~)zTAGac&Rn;XFn~q;;L!!)H9&;|{L`!J?Yd at TzI#R}+RQYYEjmJvr%5E1}>a
z&W3Pt9`kmQ8V)@x6dVR1U;8|A;1-!=AqdbOcu|7#S1c$F|Dhm^ga0JJk9Rjw5U>mH
zfgq6l{hN<`gd?~CjW{a+_2o at xu3t4{O$y>4US$7+AJPQ>OWfi_fM}0GUPgb!`2jqE
zFNOUL|2{SmP<M;F?{fVQiVy*mKL_H#S|Qev>F&aLYK~1LeBPXp{A-Os68L8r&K>-|
zm_=%T`4Sx==B=5P%A4_dJ?taSLzq#u4T|{-|3>(wgaNq;qvX+`F3uD0)iMt|Vkwhx
z9w~nzS%qFS>IC_=vd at 7H=MnRfIG9A}S!NpCWJm;PX>QcW*pUQE*Thx(FgE3H`ky~x
zBK(8u at c=*Ge4-#EnwTVuGu^wun-~H}mI&N-8{hN%O>5_GUQ7PP!vg#*_d-xtE#nJM
z2KxugZIVCD`1k#Dy4ts#uahGFYB;}H0&N`Qf)Ip5t+k610YC+?Q6CE(vW-9F3)p7g
zU=JxEEDti#&&pC!BmhvURnvK~ppN&-H|*Npi<wo`Cbdt5$MU?(gnXy^#C+75*4lL%
z@|E7=AoFEDue at Cs0pl&^nVMJY;53k<(5Pc{p#aaKG%f=CA?n&~=tZ%sOTX=2ZMt1i
zFLgPvVle(#o)rRK_}7cfM8?$v5Cg$MB+6s{3FId%@=V5mB7moj|41(4Ugs7`!6JI&
z=VdP5xs~67Z=3VN^i4~4Z(q25Bch=%(2_x at j?t+B^?08-19h5&Jb9NNQZAIxTv4`w
ze20h-^$%LzDJy{Tx5y95pMi>_`1MhnMjKolSSu}A0EEDm1EXMpdR53QTP$oN6zC1Z
zzXlwLgW=yvj^g}wNa0(yQ~^)yh`YLmcBl at 5<_EoK<maN&Ei4HXkv<R3 at WD{a;ygxa
zB&w#&LxdZ3vA;sf-<P$TT!;>d5lQpwZv_7y@^ZP**$?%1l}8|<vxARegePGBur&eR
z4hDXN_%#1F4!1$5CxY}148m7)(ipzcbTz+Uzl>&R<@u}23zlT1%}HH>@twUUWx<wp
z^Ea>K4*~o!Y$s}az)!u?y{nf){NgWT%&)^&8hhf0YGhU*;QyBL6ZollAmL>t5GsDK
z#uqAw0}mhsxo|_kzTPefq84fqBe;Tp;^g2Tx<Xino(vq6lL2^Z%TMb$pbpMOUpX7$
zVaC at j-ectrN_83Ahx2&AGtm6XZAsRQ+lbgp3G>!QRK$7ka{;sAUthb40Qz5(=xsx?
z!QPS@{x>qoAH|u!*92Vn=Rj~U3eNWJiMLS+Z(W|09Ot=SC+r-_mH$MgZh<4LzdHW7
z1^7o~LJ=5q5chVI3dPdwjOBSdSM1N`JbzQFc;=${vsW#fw_(j3+Q!ZgIsa|9p?@Ur
zOBafNLjNeQUA=tfhSi*t(C+y8P at z8fFsAB5@*`DmzJM)o^QIOsBCiD^oOS0N;2#f2
z5m7~iX5tIT9i}80XA`6WMKc82Xu~Kv-=6e2Nh^}J{0dgIAk3rTZMz~91mOYLBRdZM
zK<!&ZkylV9voyaNtRYZNcn|?gNLhpv{97a90OX3$DnkMIWvyT`PF;+*3;eG9`9loP
zg1rNqztKZpzGb0HgwY|{4if~W0xc#WYp9&KcKI>oZ`oeMe+*-zlz;4 at P)qA;5om8f
z?Z-c5Li{HQg^9!HPvSF6_oPF0AUxoI$*yg4*RCX^2mTjq+psuu+k&m at iAA6p_^R*W
zWw)-Iy?w)sbt{nq{Vu3JB47*VCQ&0iXuhk__!m=3G$Ny~c~58D?bTbrgF^D-{D;r%
zGvHqc0T`-+Gl!91oN%a6XZU9y1egFl74d?tODb at sX{tK~d|hJfYPahZJBwIfZz3QH
zBp+dk!QSkJ^1N2hCfJMf*xFmxsz|Y`|DI`njm38SAoxSL#&y0kAN00sW&j@{9Q1}{
z#zjDQHsqU8u+C0i^<>t~>%Kn1mw--?T?lux(u+u5M2$>Lcr;-CVYN>TS^@J(j)KN6
zFerxFJ08zBFrJPGxI~0982@>e=kHp$eFI*=io&c_W%<hsxVsVm7x1sxw}%6FKq(l4
z%=q{lRwDx7ALR2jN_p~)vBzKH4Ml`c4PfG at Q6T(qJS%?kgB-^Pg`oWeLUCId*l!)E
zJ9&kIjp9FZNC7A)s at _2;Tk-<oh9Dpl5nvt>Fn3ttO7IV=P03pVOS;0yk~k7oJ>p9)
zBceL$*lC5GXcdJwRkY)@2SL+;I2gBaoevE|$@`?McRrE`PY7~h)uh;{%Uz-|#$-6_
z59Co-?55S3(WAuu2<Uk=py_=3arOJ!i`Xs?Go<{5e^vXa+6^oT&kil{KUqC<sQ)AM
z-T?Ba{*>rl!oet8u(q}skT1*KvHHN?jqOz%+bUNU=O7M90j6PjekNlWDLRC27!jC(
zfmpi|wU3Grdhs3kKKb%VpP^5bESQDk0C(aqO|k-9`N8V{cyV)Wuiy^_pTK}$+?-!N
zq>hmBvX{LWkyPKk`b*KYXkBXpk2w3-eF1rh&WM06H3Lu=d}JS}N`Z=H;oqPxg5+ib
zk%8DS*7aOwPvLb?{xSzpAS3)Zo&oaBQPn4bo0)lX{S2k&ClLPcwc=HiT)zJR`60X|
z;HLJ4ZC77+qwquN2)+SiM0pStf_^U!q8TU$W(Wv-!poIEi@&5=wG&6YQWeNYA<Zw)
zyldm+^VCs2-76E{G4X?KKiIalzcIC at Xie2V@V}|6X7zyr(H>iWgdyPIGrRJU%f_Z!
z+c(VIl#1*d>}OyLZ~+hss#YLH1SL at ZaA34zJl@6|Td*iOj{rEwyZ)BUJM8r?!oMwk
z5&uz9v<reJ5ek%~&;tGgL*V`|npSAH5Re=J!!6<<w4=a5ueB8OyQqCZ-L at 1F>@lOX
zZh-A9uo41Z#N<WV-u%!2 at E8|MY at z&li$K<l_MnL5l^Fg(yHS^*7rkRUFkT_}5f&lb
zU>|{Bl+`VubiN(Rj9>xvQnDQ`GF%pSDCZUD`I_<<8YA#0!#hzfbiE(R;E#vs#PFW_
zmGQ3=|E$nj*=Nf<H^>3(QTrTgD)y!nX5svTUO3O3)RpM}MLV|4+n7pp2wA{iUa)u9
z{QR9r0o+w)+VD?~jGPWBNPdyvOXhn^yfM$OkT~}dv)cD2O}-y at BTobo5E!KBtOPpP
zyci6)BhMKSDjh7EO{hfr-?hDvDg1}wP)`JyJ{J)RwLRc>wXcE6f;~m<v*g92`mp_o
z>X2)|+QRcKh9l`i?MvGS4LbBmOySEa0aS^q#jnKTjLSKhA<ZWxF9PFahKmi at cM9_k
zYz3<&3x8ubR|t_r*uYut9e4-e9}W<OJp<(*miim`lTjCmMgaZ@`O_1GL;y!GG7UdE
z?iJ!pz^dWq9jE#>_td4ZPxOv0z&mB{?!`N|LSV=REK1+Jsx%LdM1T|r8AgP3z?2s5
z%bJtE3C$++O0^gXaf|h#rXqKMZ&hDxcmqyoHgp=_e>kWA<FARIfB(jYe^~_20vP#`
z^DB&rMKholNZ~;nnEH+Lh-b|tA_P{E5vg<_?Flk>jmebx02$%1f=n3>t0GnmK~)Vr
zODxEFKAOja`FxpJSh=fKgNMTB!}ysmS^C_lnkjY*&bZQ+lF^SM=<-JaZ*OAeUnswb
zBi~q!357&P;_o-p0}NdpI0r9c;Ez at N1kB&iZi;ji_+1bTbz?%^CppK!d}HHyiJM at Y
z_~M~qTHaE=b)ac;cP%(4{sYM2LhI^FxJzCPi?E at k0)n)uqk45&KKREk=FCB`lwZfc
zGgK4gXU5tU_pDfoEQp2jlg*tC5kd!|*5J>82QLyt1>f_B=0DSr7W^^JW9rdJvcXA=
z$V9+=gdhsajC^5)f<MX}VT8h6WAlzxCM1N*BTyJ8FcUTt84kq67>>MY*%x~?Sr&`x
z+`)Ghgm=`7QbH#Iw2B4zjI(z{fZ&56R)2+n4ObV3(IMn3wISutLw>W1|0YDY=7Jfk
zfnn at M;kMf%{7VFM*+(W({^P3RMBt4^dn5?aVA5+wUoh^w$BAL|EPEq2OiOC_FKaB_
zHq^4Yryf1ev30O1<3tZL>l(|}R2HspEQ1|wXssYeKv0xrdUMyVf(XrBzZz_V1hfz~
zarU<L^Rl+j*|7yj07j%=9Ifc9GiWmvS5u at f^Mk&j7bA@)<hY%Zwlox(+JyG|Ls3K&
z(U9khYYF!TkaC3Y)c{ABGYJAKMRtT6{<U>lfPcj^=OP_SA6WIW;zimmYmUOp_OiUb
z99ws^P3TBK=uK_x+TJ`|HD&dA&IWryJ^G6r(!qCZ5)nMaU+rwiD!z~cuHj!i)D7!#
zlU!lnl}bJ1n2*Se!O2k+5}^syZ~Q}}BqBooSOb5H`16ELMEn~u9`#<##Ni+Pzr3wt
z=b3 at smk;eY*$eE`k9F<3FoFnxc{v69vylS4<CKEk@`YC}WtrZ>w2e!%(idfHnY(Tk
zck!3!?MYiuxO;w11~F2c0;v%X4H1+`Bs at vj=ZE|7NC$#oqM;%{KDL6Qq=qe!uDft-
z3%|&m8S at Vv0mHv(d(ES+jprZ;pk2g90eof64F47^#kaK}k4TPr6DWMB4zFzdO1UbG
z3unn7+TL}z7 at FyG<Cf0qrSR=Lln5AHCC-3${F^ZEj|$s~_)ic9yJJ_zgFgy;Mwq;z
zd{!bdr-uCK9T^zoN_>$q(H=h;hkSpj)rZ?xjkILnf4tzy3po#;%sAdH5jfJheWYz&
zLn-l3aE|6rt=^9mP%J^RfQ$e>LTc4MB1I4(z|XN{7a6q7IT at QELNPpJe!&Ap=|o4p
zObDScY7MCL^SR<3|Cf3{AK}AT7C`1eY)79^aZzw6N5J&3D`)-$Sph^Fb?qh~jtCK!
zbax;ap!t0ffh7)*AYtC*2muLRMC5RWV?Mw?vcT(GM>2^XcGf6OfO-F3;)|@}0YBb2
z?%Q+`h&v1FJU$x!%n1CE at +XC7<Uaw5lhBVOog9BR5x{X$5dZq)jRQl#v*JNM<~V%i
zq?g+Gz|nQ*2eKbLQSb!#Kb3Z*1GT at gqk2nk{f6cPt4eb5i`P^X;vnEAtZypE{{{1;
z3<CUTrC|c_l;>?&jZr{4Pz7?n?1mwjK}``g5-XQ7=695)3ZRu72#Wi0-q&HIEiL#X
zk+eW)sAjDlgt(CDULYz)&2l00MnR+bHMGt%HyNk{?@{<iYDAFa2dT_buy<l({<Q~P
zkuSZqB_pKCu|wzwqxY7W2+5cQ9Hidu;)(VARKCYJ5x^*n34g;sInbnPpU{OgJsc0|
z8yF`7c$Ah-0&UXWm=uH{A3c-wl<4l3C(m!VdT7^$VffGPONX|Pw4(OG`L^Mfw8I_1
zp1T`cE7K0O!-x<HYytXzQTnE3IXh7JL`R8>@^-ibM2(hZXAm+X-7h6ZJY>}}{DRrr
zH;^De<4xt~_yDenv?Y)W$0h}UP%s4KAdnf^0yA40p!N{~Un6gRJ;+Dxt1^d&!qk`|
zIU&RG0c^)Ev&A(QQ<XL0r97W*=~qWJ?-+x3_`wpspZLl6al%DYx|1jc31Sci{Da;m
zG36grJ2-T20P~}t5+?<ra793Uj|Q7RerDZ;A>h6JQ2Wla0|I$p0|!Zg><5l>mLX`Z
zWCmV at MOd1ZHk-xTs}&l>G(eDmy()-yZ9_CjA7C2hZ&`<n$FHnXM#~rD5rd`po5FgD
z>0l{RG~|TNLi{Vdr(@YESHb`i`XN<(hw<~E9Ms5(l0>f30}R`aAtFUaZ-Rl9<#^~G
zkRvsUgGqJ*A(AtTSs{}Zq+c;Hh at 0e2pTTc82k)tWSBZikb0GYa?M<roi7R!RlKx*c
z8tvoFgi`Rnh`{<wBdMo*w+**$8*Ih|<UVp*j_~QeJ=c!ref-?6izAylYbcOjSd_iE
zV(+4ooH;u-LwM$GN(KCchKP>h7eI>ejv-5H4(vrDun6!3zH=ar2;d--_lY?LMABHe
zXPfv$5mYWl-SLZ0{g=AsS4#VvKjJ!{56oR*63W5Yqod}K$|8VR;nSqUc%4t`N}hrU
zAT`FF+=rDb;m-{jj^0j`UaKecM(!Um4l&Q;xBPFM`U|=s#Ht;f{7?Yku#78pGyDVE
z@$kHC7T})-{&^h}f%gUfYmRrVJ=?$QzG0Mq{^RG1Klkw7r!Eu!LGx!_IlOA9X>mot
z+}+#f5&1umzqG!1QCZ%+?DTor8O*12R<G!)UQ)e}+PNjW(=ZLV2G{}$y4-N1=qM;%
zn6`<)5h5S}z#=Fiqc+|a4&Vz+@{16X^g^RauDb;f3xpx$K%<X2n;}pbP?MG_(qCbi
z_koWc;qnfweT48I#EzuT`P&f+lMcy_1}5(e?3E4whIfD8Tk!YXikC=G{!v%MIOXr+
zkm!DnF9;LJNb*DPlL(}q=-T+;v3<{81^oLyb*=PEA1{3NDj8u2&x+o<6+N}UdwzcA
z!lFGX9aRL2R`xeAgE?4Ixp#T%0m7#;3e?E0U#-%hZR_DhD14<v=go#G!HcjIM2GN^
z!GL}f96QoI3+KfvfB&tRfmg);ZXygHtmA+SARexdEk6|8YM`K~6h4kH{;WF%d{o?9
z7?FjH1bACYW at xu?Jq+KZgBcz|lyDz3fa=)11c950n7bbKzVYA3`#M&_OKz{Vbhd&|
za4x`)!atLN%NfL8#utHU*n;;?1Y&in>o1RNed^+YS3j};`3DM~ya at R79zBZ}OkQk7
zcg>ok9jk_#mp7M#^VNr1i4?6q+$M?0+p(Y^6N|8<s!+8M8JlOZWH at c({M;Q>2hGjg
zO4x@$D0M_jGPmIr6CfoF9{qS=Lj_=#K8q&F6Y&&QzeWTgdgucfM20{?QClM{b#0D-
z>1|bADiEYKG9pMe=>um<G8WvN;V>{N1;PdL0O5MvXKwC{Y)<JL;?qv)y6~bH`7tSw
zl20H%2{oSqFLFVU6x=!yu=jQOir!`VgT&>Tp$KpO_}T5BzE<(|r}sT~J?rX`?E8=9
zJa~ePKuTv7)M(SgCpKI^vYNXcRVxP?5eF;+%3of<?(K`q^T-`9t=+$H{~j`5l8Ewr
zgaWdpMPXL)tN7=}HM$!XOYmD$0Ll7F7TPm#qX0Yzk5B_Vr7%$l&hUr2)&C2kf#b;_
z23IFVf~{Q;fZ0=KNt0Gl!yK?DO7B;CJjW()4)9}0jZBZn6YPT|zJBue;~q-#Y~uZd
zYKK7ihjpHSXF_srbZC71Paqm&JY-fNFe~ABdI8e0k?&S)+p||nUVNnV3y-4waRIWf
z9tQIpA2_!5OdoO4txw*!>5-Fo0qFdtbwv<<lEsTkb3r>&z!*tc*;l``W<SYa at V{_>
z7H4b$IWNK*G!5_&=&UX4(Cvzu+<g~nALRSuGMs|gw~n&pf<zY>s-Tyers9gd=FN=6
zdHfgyZ=ftdH9}zs_w)giVBS3f4UHo)8GDpj<NSW5zev)VOK$$gXJC~Lxdy$IIo<v)
z`iAx4C;4jPOWmMArq9P#_ at iZEa*ucnoKHnwLj1cpOjQcPCHbMwkMXyZCEK67y7!Zp
zpgjejxVY!~vHZvHOMBt|w9nj+2&}(+aMMG_*Iyi7-d+j+UtGBtsINZMwr!}Hun%z|
zlEpaAB#YP9mCW0{or=)8JGWpOD1=kam+U{mpNvfl3U<MZ5DKE8%KlIu35{Gwed#h-
zbo4Xudm#=;N4yBAzIx$2{a)|$Z7lEuY=;m7aS6kyNRjaw<M4NB&bSc&>jKP2r2j*a
z at fY!@>-q_Av{>PBk}0z`to9{iOLuKwxNU>hR5G)CG2fvtF@}k0-906Uv<6zTa8cSO
zE~8#ci;m&&tXZZoL&=DH{S8TK6Qd5TTf+C7p!@^!13ssV{|Q-8Bm&d$2qGDY6NCvZ
zk=CP)1^Z|c@=weY5h(uLBe(!tKY3xt%a3Nf^vH&5hu0iwUwgVY^<>YAuA24D<-nda
zF>W%^A-v<wUA3&8p;(9<*~+3EYNyGCsbqA2Hc=ogpI at _L)|Ry(A4|cRL;&$~eara2
z#6MRqyC-FF<N{+C*x8wyQha9;NzsoXE}du*qKDqAK_c=UDvnr at B1bi|akAi(Q#t#q
zP3s)N)t?1`=cH|99r3(%s}O|6>6 at 2U6|Na+8E=dEXnq0x4fdqbss%sG*B#7Sznb)1
z at L}9rG0Ei*336T_U*MMu91s3Ly-x_d&;&S8Bi!EdK`030ewaz{zvc0B#QBR}c(Cft
zPgT73G;}Ea#fP?k>I(da_z(Ecf8su>gUE{k`@NsIM0AwU=!TX9Yio-(wpUXW;ib`p
z{Z|%cQ#j2-Bm!`FgY`05Y08o9*aFp8QQSv9LZU~cX#0lQTh}q*CxGP0SS(wFP#_vf
zz{V~l&2W9v%&obbi2SMGc`DaT3++i4qp|02Ohti%^O+RZ&Yw$$1%n&Ek8p(Wi3gXT
zeC+V$3%#dLv>iFvG(6Ba*jL-rc at Jw7DD0dylefTqz=H4rV&M0h9|J#lcAjJ0K1AJw
z7U9Dp0u$>0El=K8{Mm;OeD%q?@4uMw#g8HmR77wl)RTFBh`8v1SDxJe>H8^-0ROok
zJ%e{lX#^EP99w$okqb(OST#&J(Av6U1|-GM|NQNQKsgiqXK^v{PqJp}*ED~wf})w*
zs281+z7ZlsL9e4%MU|r(jdDF(pYQ|S8ibGeDz^^yfX5{Q&NKBJb)kMSXb%STT3k4v
zF*TylDs=wJp4wgK2IFBLKb{!*{^-TWA3b>KzWy^OJC7Z19vQ43=&kAPs_be%(B4wk
z+B9q3ss)?Yg8vx!(fn5GCgq<1{&*c8Mufr(#`gsfnfNE(^0A5J*dJpe69C(<{^qAq
z{<YuzY}#iZ*m(a at 9NuluURF5t6Bo<B@<jDp&+UKi{vD@!sgY2b5H&)>trQ5s|M8dC
zog08A5d~UQoCD9nHD0kV3-{Jnc2E at Lm7;W(kO;6SK4qzA#Hb)bBFGU$kQ8g>J72sY
zN&%qfwPt)V?HQ*RxQkwMqQR|$eSrC?Bi^ngVl&<|$d!P3y2h>Qt=oNJBp&Kxj;DhE
z^B at 1{!OIu=PM_#Hex&WtaMMtKU0-)icSjW>(AHAk+Em(DU(`?=SLf+l8rcTchAY$O
zNw^j2Mq at r{#-13NjHFk%g?Dd61a`dgSmQfis{H!Xgg}8kxiCC}onL*t@{MN at fwGq$
zD}UvQ+>f1s=TIQA?p*)I>qk;gbg$^HB at qTYB6qy9uZ|ShysR_ at h4$|u{!b!+ez`L#
zlORS)jkE<w$%|17!Ez5gTucDqM<Jm4(Cvgq at qC$)tzW$yL5Ogx8pu)n|EBm)0Q*2u
zPldote9d?mp6)!lciEnFngy|rW<gFyO6vhf^_YMkJvpfeoc-9tN3LA#J9`TK-*RZU
zVX&{hzo(|Bv#PVLqP?ZGwW+wNK2ZK%>JX6su;77U%h*x<2~Zak4T(VT3gf-bEfItX
zKFruwAoKO78s7O5 at y~6~T;Bft^=(gI%J{-Zn|}UE)i<7_BD(OIt3 at w7u>Qgj!GB=C
z<?*vP$m`Azf`77OWW-oLytKB6bQs`YT$V?sY*|BzL;!lvim>c-L}O7=_S~IYMfF(~
zf|B<p61Hjp%%kfN1Y$u at P#PVx3@`#e1HvruA|WumVIA-hre_guDdwjO>`AYe%TF6s
zh&O9wmMvc1SUPa_RNtAC{hUvq96Wn!=-g?}17}YUoj-H%!Z~Qn;VT!9UA=t#`jvAZ
zedx-Qk0B0I!T+Hv7YEOs?m2m^{qRVm>Hn&(j*8B<a`4~MSkl}OWP2U?oR`OxKPr8E
z0^^Vlum{eQ^nY~seG`G`9TNv*h``RTJz4Xe&lG*;L9$>wUwtCuOCPI!`?FYtvM+s{
zbQs?5_UEo`dF<@E`v###c*nQ~z<x>1zNPggEBotL4m7AJs3ezi2(kmK1{%o}6YW9y
zV*-!@<bs3Hs5en37e=yp?yhZ`(Yk<T7+f-CK}kH?o at 6UALvHLxG;4;p!K8RHguniu
z68Jxqm?u&?S{&#Otr+IUH86Y#PtU1isOZk)N4icNWdK}toH*)(zEdX#5RKD151&6f
za^KlQ7w<cM?edBHuip3QBNIr$nMWQ3{{!bv^RgXB4z`R8HVpLE^>$TvwO4ku9%yS0
zm48_0Y+;`WKjSF>B&8h+!o(sFGXzObza at 7AF^oR>s6j$HEd8ZNU_S7i9bb7Y>+R=v
zzVdk0o6q7ANbO%9!8^!&?Gxk(He5Lf{<l1Fo=Ff+ at CQajrRc8nLlj8M9q6d0YJwVR
zR*K>CBI)paDj%qbR#9|emQn*CKXWU#fLs9SFw{6{0>b;+)(sKx<=z(Xhx03aOcgzg
zVMp;F#U7JxZXj+Q=0~ISme0(gljN%9GwCXmmA1BO- at 21Mz>=fw at JQ>y;nqVV9PNij
zd=ib_e)JII?qf%~k00$icDVb*(Y{m1`%fP4KYeoO>}h1- at TCjKuU$Fy!1YUyKbj;6
z*Pi+0$%pSha_tfpr2FJCLO|{UgMVCr%Fea}t<7PnkKtc6KROIN%JxnT{|?|u5tzh<
zruE`ek&($iKqM4pFGKa8-TCU1yTA3RJ>UCG)f>;E`K#ahw7Aey7XkmSZ#)C%Nj=p=
z<frhd%M?g}d^$ql2<LwEG=4FQ0(_Y~;UF)TCcLB70r|U#2q79oifAjrG6ABX9Mpo+
z>kpoT^DBe6DHSt;EdcXcB&EJm>U&9;GzsH=7o$MK5VB6Xdy4>n%dtJd3(C^5s|dA%
zTh_6;>LU8=RqoBX|9I=+k(Pr)It~p3PFz%u)`LTwx$6(L9UMXskPaq0j~?nea)@*H
z at guz_j`f>e7&!+)IuA8+b8zJok0S`zpMC1W6OW#F=zjG7 at O@|H0v|ifE1>^td%NWS
zwznje`ozE=mO6}2e#Qjk<OtMH??+N?!>tJu=>tR{pI|`2XZ;U8zvug(-Tm$78h`q7
z`IjFj7Rq?%D~}Nl%6$Ek*aa%$cAn|S9VmV2V<Zd6d6D_ubNwjFpO$efcp>t?v9*E#
z5us54zp5mUh4Vy2*VUDf3jp);Hm)Hk!~l!HnbZJOAHq+uG&6MH#q9+%j&Lm%!8G6n
z2U`6$IKQlesw2F8Q&3$qv1dBoqZ5Gh);@$^Kl%k>I~X;RgDY7mv?o3Hp_9!AhX}|w
zjSLc#;eeSm4-M!{l%5&I>UCzOWq1II;L+ycL1du~F*!JljX)59bkFgleJ78}9Gp9S
z_~QAaS1+A<@cOBT?mzvpht7QLp_30?KXmot;Q2GXr;bCbBv!)%xWHrq5CMfcrSOAn
zR}%iGqx>Urm|O(nVJTUN2}1NDH$0f?yF-3je)YBNAAcTIU-!MwRlN38{g1wo^V2T?
zduUJ1x1Ogolms!6e`2AChT{K2&7{Wg0x14pRGhsaKa=VpYJ}Dt>!d(}icr-8?cGIP
zsLCE#3$|(*$zNy>jxYgIBLBDsM1Cj%B|u7!e%|`kk=sia27eH_U_mkbM>^i>f>4{H
z{Yb>91M(aQ%czG&!|wx}VFx{u<Ea&e^Ea+pT%5DDr#|O_6N3E+cs9Tb*gBd9`xKuU
z=tV_04D>Y)^hz|C9Oxx)#a#)AF6&1ST1N)ku?sMzLnGZsB?Xv+!P6&E^+zsWIEtJ6
z;5Eq4i3hJAxq4~%!a1C4 at Q=As2(-Vay1O$}{=x3mcc&yUA5eNj_y at XE1z{uzaZ+%@
z$oD6P(lov&;%{32!<X8A`v%OP<QMwC{zotE`Tl1R2i#%m;*bbZ1BFjtDgMku>7RcX
zM|fp#9ffcNKU0r)5%~n|fIqC1ZlVxwK6!Qvgc1&-77lKMt%vy|4#Ywi7VhRQU<Sqn
zcJP0p0nE?|oCY8ie^Sb#e$?rkFt|o<tcr$aocIDP4G0nLwa0#!aH!XGeSp}W=&f(R
zZE?ot)g^h*LbgU)QkF+$&i-ewL1~(Y`Z>U%5N^P391!e@%-gxg0pHNy1MKVidQjKQ
zH}>n|rhz~lng{!l1tg+vcmNUTI4mi^5a1mQojo;j;r!8Smyg|l_1OJa4qm-DV)*Yp
zc??$qQ^Kp!?mozKDd4kM;E&;76e7grjR7(c0bV2m`NV_p?Resiy<;N&kwN<t#(UG&
z-+aC0Z(oJy)P3*8jz7G$`<wCt;QYleK7tp3X#oG5KY9vZfB-20f1KY{gN++5A7tSq
z at gLX@{GZgoc9>6N8C-~iDu}HtBJQc9YoZAMrd05Z3qW-cik<kUI>e&?*QBUqE^{l9
zQfvgAAN=!>ZK1M|b>b1)X*aFXpw%g{5?^(>93z(EIK(30BTt0M_v|r5o6etld6rIU
zIn3SUa2M{~b?>r8bGEKuQ(mz1RG&0F$hRT{5Gbhk_tYsG(_P!wUCX(rv%aspuBWTM
zx0|D;yAz`BXXfjByO0PTMNAqIjlLel2cc*g>~F;!m=ts#IfNA89TO%Rx$hkD(nD7-
zja<Gkbm1&v)$S9=I*uNKJ0V923EwgCAJCE;M&ndfaRkv at Ap+r>hBnBhfOGUNK4|~@
zZ at 80-73lt_?=s%~t>>EF{c`2&&ouw?t6AUqG|n$e064Q!9)^>7b^vz(i@@qgsvT$n
z1nkuyv9ks*n68Q3l{k#FF at V?uTHX}&qWwq#FV5J42%rFQhnZnaH#zcRB*oM!N-d%0
z(lt(rVB1*(VuLTB{j=zxLLa%f8v+6&ikk?As{5Tkcl7*wI)f*RZ0ao#JJtN_n6que
z!n~ann~~UBUsp17bxPXPmm7xqo!bcZfZUGSo-SZdG)A!J=oPk+0`gNF)!iMOYr8v{
z*QDL$?6Tm`LJF`5vLge1ZFmPGL!F04dXC98h6 at edcXs&V`9oJOj9ffV3IG=vuNnP6
zgS{sCs{IJSzXU4~fn-XYeDbxuAsR=)FM6Y-!A*-m_>O__hIieZ#hu%J`#My=^N-)^
z`p37SJ;eVz|MYFtKIITu-+h6*8?GGM{OFmAS3l{Prv#K at Q9J@bzP6 at _W<lvk<qqQr
zFD%T0-oS_`hhQNLiXCDzYjY|C907bi)<O~&!Xhl)od)>TWg0(s<_y{Z5-i0=P(g|>
zpso=#NnWa+$w&lv_Tu>%+F4CY3#QZ+te2S<s(~mZd|FS5E}o!V0nD>m7^)u3^HC{O
zo4sW%+J1J*QvMLg&%%OTTRwV93SSTvN*nsR(cx%vVHm)hG6&m^aANXcp3E$sX;o)?
zO;-otujy*%0`BTjW;hUyu66{0N9%jKcukB&Q-4qMU|;h<U;FT2=i!66#(hMG&YT4H
zB+lSJ$O2VxBov at PG4PKfKZyto@iV3^m>mCZJM2YnL<D%^bgfU)2Ojrs)6c&`3b^mz
zf70=XZxRA+{>3Z(|M3&@Uz9-Xdi^QXJ|%DjMTraLJam$P4?VI}8hx}QrM(i`pL)D=
z?Wvv>oz*zJl=@QzK?wv at pTWG{+o-u+T$;P2qCkscHl+eu$Pa^gyS8zN_S>FutPvwS
zFh4te_SW_2e}^0`mkAJ&9Y&c8x8%aK&5$-5rCaPhY(_ at ydfZJ7z%7faxkU0KIyC7m
z at hOvD?s^^>B!*A7!x^hnIPgj+*Qbz7>jP%ov!cCnd40*omWqJe<G}X2OWP~h!(q_#
z94P<pjyS-#Ir6JPKJy^lKwjA)aUfSkxLzXADbc9vXk}1~Xqb#}Zs_giz#Oy=4RCZE
z9PT-G7%MPf9`WFPXGnpe|H-D!WVLBb`7er?|5!Rd2|v?CV|2Z}&U-EbNuPG2yF`1k
zfAnJCzx^0(kLTO_FF(xt)hm=hD;)Iw7gZYi%9C&*%6_2zsVBQPJ#>O~VXF_e-~vO3
z at CfjT!MvKn6=u;scU at gE%K?_>?xZ6MnJ;_+8b?ETd}A!~!g$9PHQEW<AvT2lS+XHZ
zfjM9`#|&+&Bo<A`C}R`eairuak7OLrg5(9;0uv+xVVOynmFe85v<XPd#Lp6?iLn}<
zMYSYO3Y4DUm28vU(DR5h=8Sw+3fynUR(K8$Y{2kQ@&p at 2V7kO=x;o(VK-ZKxNN%eN
z6~5?=0lwOB&O>0nf}_2KvjM)Xs-vy4y;ZW%-l7*lG&<V2zP7Wy9wXA-*(gKM+uYaN
zh6q at IRK5Up6z9(n0vbGf8t*s&e^}(4i2n$&K1hO4(xcP5D~B|R?M!f2W{4w3V<vvD
z_$#L}UPjC(_ZMGA`4jW(_~SPVe)siVZ$3i_Q0s4AqbQDb0qLK6aPy<5Spp2&H$QR`
z{O>&7zooZ<Y%fUxmcW2;a4s)+potV1&4QpYB)MSwt4s4zD+>v98}r!&=OHPEn9x&{
zEmq|ku*=MfW$GzSvE2IAoFPKoB?QWWbdU>+Xb+|VeT%S=2mr8vpN$uh2(3CFb%W<%
zDFPokQMZHEQI|Wy1CX<0DTW4MTi?#vPUfLEYyr=hLbVwS=R4-%_VZZUKmiZU?v^Z^
zw|3=<y;)nk>pY}G&_<4`QF^$F`>+9}4;YR#yp+6=oDkcsRqdd?wW3Xcci0>91O1Og
zkg?Kydka^Be6B<m7}rP&+Bw(5h`PHPd%9b22Zjba4-R`!Xz<J_Qozt5DgVSeH;?&q
z9*b-kmSQ*@AB2;0q2Q$^!2IZkMoGa`usz;22_GK+x9iW}+4F<X_W!q^cKrUW++Vz0
z^X(T}fBjm+Prk?!$nDQwArMO0C+i$(kjon3w8QPGmHR+Dt1!|I%E at KHJ2h{ti(k=E
zMR=dIKBYdaQNkBkT$<-g<5eA+osJ7Id)o%-d=>(*ALy2~3JTFvck6oX7Pn{tvfxqx
z)q(cACyQdAo4R7o>gCcKwyjcxUTQ~q7D+Lmf#)D2(&}_k#+8oz<v at W4@MaAZ at zMa*
z6d at xH#8=tF)L?waop;K8wn@&qv4;2d+o?<=b!GQ&XP;{o?N~cR?Rl|a-pazPtcwSs
zHx`OfKqg at LM(;&+LWVCvkp4GrBiM_{pujnUXQ_Gze~5fEyzBW&K;EuGWomUeGZyUI
zTDW_lwMpaF=Bl<9KQIIw4Lw~=eLZdk at CAC6AUlpDVBk;me3kstVVX7pAtnw<SQ>r7
zv}W{bqd`9D%;Zww#v<8dO!VRNe*INMAorJFh63gO>`U!`_a?~S^MlU;{;f}(ul~k!
zdp~)3_r-(6d<s|^e5f7Ac6n17<^bA5Jbyv{P7uDVu9&Jt-7Ux at 9R}xLTD_0+yv%Lt
z3$$VN+#Oq(hxx!~P~aT1*;#ClN~XndSO8+J(hv>A#|vZBIe+dfW at c|ng*7SvWj7cL
zP9^$z2JV1us)diNN7$cj<_zZV3Lza~n3?$-)-2qzo+ok*q5*XMQ6vS%;;43<`*;T5
zA>4TOEM5?W?~}X^;&$)+xx5tgX8!s$3-dGQZe3sBr$9Yt#plK9iQ$k}C8QIEYeK4n
zuGRsi5vuJBjS=7t`Juwc5O6s11?=|L^48{ZU at zo1OGet7rT>|1Z7Of!XhaYyTAG;Q
zKm;%WHSMkST^$&L#_q1xfxeEBp>7iaOaMp|+MWDcotuN- at INM!;~_NW1=E_eSDOwC
z8dEe}942^37sQBDG*0-a`Tyl>J^%89-hcZMnD6`dACv#W9iR#t=2QEf7f69+T|Tt_
z(lAXSQjc}w=aT1Ld$NZ!b#BY{WWZ-Aav%_ at J(5cEM1-ssj^YPGo$kOA at L5%yix-eW
zzg&93ZCrzrC-?&<#dcPwa4^G?NkTx%{30^T7Q^#FCTbZG;6SlcHp8kAC=hYQnQK-=
z80IqOb!Kq^7cX6eA%GpRxNm0aN_2Gq at 3{Z?U at QqIXn8lg7qQ05Zrnwne0&G3u6**|
zd*(ssc5k0c7>Cqe=C&D#WXjT%`VwOA4aDAYX)Tzevuk at pKJ;Ex#~fJmZ56bU$7)d>
zsdPz!IJ_i6G^Vw(tyx+f3<GbV-eRgAc$>oKj4Yt-dFVh(6N|RWnj6a)G&gb=6Hsmg
zqyR%8ThQ8E+tF6r(caMAi4|xY=<ggJ>N$FN0_8tG{=tmnCjmTTF{LS95Tfy>rC?0_
zN0VcTK*A@?`PrBD{pCBve|rA<eUyLJw?AF?-OsTWzV<tx+4jsOYW|6TZu$6`tjmWX
z{5wwc?7nm`<5(B8M^JC6*gn)ks*4IYC_N+}s;|E2+AJ&+ollTQ%dS=byixva>Po7B
zmh9ZB4hCD-&xQ7<uE2$)1Za8Ajs=_7DcX70UF<Hca478ySVU}8oK<7U2%v>{Tkyv+
z1pt1g^2Lh at oThDxadIHdI!Z?`?Ix%owVQCeF?F;!Fe87K9k>?GpG7<edNzM9(aW`!
z`&RDF!V6f$C#)=7Ub9~u#)9w~aG>WyR%4;~ZjWcyc^H$Vl^rk~g?BpJjOw%*)dBD=
zz#gRy@}=iZ$%A2*Vo{1IN at J>CXS6z#hH#w$d`n{~$Y;e?a|0Kn{59F!P}bBS5ol^a
z1P(McR<<-%V+h(>>pMFz0nI(#?Lz}SM-G9F81oNlk5&GR$@~-0aua|b{W>ub0HqOP
zZ~0)92qb(Gw0+M%e?RXxulD`xk1}6<l3Z}fOCQ_u#gCEjrNSZqvGc5XhxU-?#ph*%
z7*@Wp;Dtl$Uxu6Miv`bz?UTs`>Z<w4&OlXC?E^KU;D<?KI|O-fR2guWm68jn3nCo4
zbP at eJOrNiZ1rbQ(GFsLU2%1NkG<{TTQ8q*c^-i+_ai^3e5FuHC)yrW}x`2u}ZiI}0
zy4->JG)9=u-b~bpGJV%wtf-p9WkiY~`K+?1%hs$Jh~BFG*&GWtrsA|p%2q80`7Ae>
zvt`{fQW(3o&s)0+7EwoBk)R5&hf5g#39v9=Mhu78yUv2T6n-qKV=){HT{^c1=Zeyx
z=MD4XDgmlt at 6zYOJV*`zZ%SUQUJvPvw&!S(!e^}t$OrZg__D_O(x&>7hB_87mLme;
z8T at lpwKUhZx7ByFHyH~`aC;;02Sn(7#y>a=MZgEf+iyAkdBH>xNWg#Zzy7H3AKvQz
zi!#6Mzk6fbCog7v{$Z+pGS3d?ee5irFHmO<*NV<6IREmN1HPV%Necc^_4M{s!9!gM
zch}dK;><#9(DNu{;-8dzF at wVQoEJ)-%$GF(+Es1~sQyL&qxp%MGtXTHunRag0A?Uw
zWRHSsp_F_9n}o6(`@(tD(hzS{D^Vjwb14~GyV7wEV+YUNML-Z7Agw_C at +Gs^uSS{Q
zyI?Nf#@y8 at YmAa19q{?(wMEjFptP-}+Rlolw6)e)IEA=611WYp(DN7qKbtLZ{40#(
zVSJ*R;yD4;k5Qc<ssrJN<g~|BeZYJ|p{T$RAQ7TB0=bbK&Vqe_{N_gCzqx@$TP2P4
zcCM2NKo%P7IU at y_fCG&Ul}(M+5TW+ghRzNWi!)b*G5-ks9tDbavYvLPDFIG5WFV5I
z;FgPk at Sord#6I)he|U?`FOeUTzm&ICz41)pGgmCme|+7UK9XDneCUPFDr^u=F*7uN
zeM8yW>isE{eeT*0{*?u$$iKWmTLWxf3ppnMF51J^FzK5x4S2yUXjQ at snqeBA%VY>x
z6tiOs`WZYEtE5H(UW5pU=TI8DCI!J+MjmbLDyTl%8{8sR%XX)kdY6Fk5YQ!R1Q8Nz
zTC;+uFQF6B_Kms*VWFC6;d}}YX48*o^SXIyo96M6XuY^|Yf3{2IEN%lA-6OG`{?Xa
zfZCTAX~7vuL3A+LB|d`)Sk{U3tF*n&A~||Uf&l)JBhI|CxV at 1ayi~}!`KnO#isnWc
z0)x6RFH}S0(e3WlHsRh%1dQ9q6h1g-xnffTD|Sno>Wk6*O%0_w*B95<VhGAO>UA!!
zud8TksA_JiX>F-%Z<F#5Rej{}Ml+_3W5Bo}B;VxILqT{C3_&9Pd86Q?LjDK-`@4XD
z-?P`KcBZNgozFTK>U^kkCe#n|sd=NeVKI9lwO7)JV_ALi!o9oM?U4Y^f}9-y8)gEe
z87wZzp#+q$ClrVv5Bk|x!Gm at +h$GIqVGZ#dT~AcUBK(T9pxd{uLvWZxX~S)pyqBUN
za!kvYfL at Uwp0#m};{R+ktle_wq1)$f+b}n6BiKgUOW~6^SfMP~oR!O$WNcZUy<-WR
zcW+(4G;`aE{9TLp?#{V-6m<<m!M5x9D)$zfn-B!C1+d!MY?|L~fg<XDxHtr{N`jUa
zu at t=hz>Nj=K1oj20yrV^n?>>kd%2~coq>=KbqDZ%z*|}x#a>|YPUGQ1@@IXL%Ni`y
z)2M~IO$~y5V;#unC}|Y(OB!k!7uD5B1nO!^>uNd5>T59p6^#v5O^vjX3GnX$A1m^d
z6oeA-A;3SF3`Ky!G at Jrk(m2`mV~Rk*- at l&o&P%lYC(nhd&wcn5fDagcN7a&wy`Y-7
z{kq!XO>I at EeK^b#l&7nGyx{TzqCj+Kipy=KL1`c}OLlG};KM;6h)@qqX3_QyT*k$?
zy|b1rMqP6kmzitO<YG0mX2QmoyF0vTE!RMSQ07Z_Z|4>8jyV=?S+}YvXGMM{YX44J
zCN7%4bmunc`Ybw5tXxJmYEi*1<YM;Pm5a%{rEgweU9`HpmWp?;x+EdxA$PzjLf+c!
zRzUc4S at 3fhOXpFE1LqhKYI8b-9EBvOok$L2kLPe!aFR1PH<BZ&k9vpaJJmPjd&I_7
zy{rHvAE7WW!1#~hzqt`UBidtUQ5{Eq6P#aMh=UpCi|T8N>T8Q?t4r!@i)*Wk>uQjK
zGKoN4d0lN~V?%=S4~v{b at GlCnF}?zyJh3(Yb3<htY2C>Np%hF8Y3Q5|?{MYg37-=F
znc?fNTt at JpMZW0y_4f^Jympwj8`LdxS51Bz%ADA5rna-ZfOc)DU(Occ&%?JxE)?XU
zbcgM*v(n~lTh9eVCeh at gH#CLLO5^U`G~8P-Z`S%%;zhYTxSqz9TKc*sg#p at II-h2V
zqzPP~V;U%@;g8~bqh%1vf5YlI>^O{<jSFl&B6xKEu5AP)=io0aUxJcPEiYJIoD02Q
zQ<6taesN(|>ae;3o__cNYJgchOOd?d^VC%ur4isA^DTyaU~dO3C=dihz};1pxj2lN
zj5NG?vO3#<NRH$vBss#oaBgTvfjiX2YD|ZR at fq=RX2jAPID)$ka$v<?I78z(Lv at Vp
zfOhd8CPP_3=S%H3*3q<Qe|?P~z#jd-zorU7D6Xk4sjVrktuCvrafAr%DE|ojash$`
zUm-BY!7$+WW7<d_=LIK!oe-iE;yDKXsL7k8V4`SJ_?HH+zx9c8v^N3m1R<d=%bUx9
zuK3B8bubpeb=Nk?%>1nF0DePbITC?Oi}#A+g}RdlT2-7w<lpr?RSgR^uSG at U#-g$5
z=Of0hG(jfZo*6}BR;MVUNC_yiL(K!Ly|%1dz9$3AA|=mOxpU|6A_QkJ4ZIG%FtN==
zTQ at 9Y$6*osHJq^#OWAj9(^|OAlKt6Y^_x<cRqRbI%indXe`Qno|M;K(-~Vl0a!x#O
zt>@Hn7L~JpP}P-0X$- at nBF#-Yni|DMnj2jlKyqb^oC2pqk_E;{3LJ((a1I6`^210b
z7uXSz{6MQ4w>LgRWU>L at w!E={yK+<kw&7pM=dMjkG`K9HM&{T`5Sr at c4m6ATOWT9|
zx|;ol|6=$LCZJBo{_0AJKviXNO;vGqm4iRl-XQ`1VcIw59*#n61pW`B2!zT%!asxQ
zhyY=HkWZyC`6K8$?&=~IYL(=&WCP at ribdhW+u`TvXEZi(80ZaH1@?q@;6mUTcNJhS
z+O{zzZzoWv5)3{Ay at 3S*REb9VW-b86T#O)y^W^R%utV7cX;v=gxu6;)kA at d}*|3Ii
z4FzUIY~~|4ncHTsTZLaRkF^8jk#}r?>XVjQSG9k6Ryv}zjm_&16fQeZu&$zT_m?00
z!~ga_{``Ob at BjS&{9ph5fBwJ6u3w>}2+PJ<Atmxd%`o~O#SW5T9q4LvLc_4Rg6Bwt
z0FP4um_w()Z9xEU69lRHxJZsCr%?Eo!;;hlq01IIxzhjO+%XT5aZX*;qta3P4Kf7f
z4Ryl2nFbdVWw_uup?iyOYYuNM<R9=CHPr!rW{mvQ?60lbUt3*RUAeESLLyLAQB*A{
z5dKm1zQWhR&p8(V3ECURDaJ$*_`vYb$1p8Dkv_i>{6`T{z66%K?|$M!_NT7rzx=od
z4{<qB?}kh$dWuIT!79pGp>-M;(4~!y;Ma at 8;Eh5>X02N}cl(BUJGWvf=4 at GOd?rPd
z2KEBgr^(f(RANCe7S1 at T7M7U@wim#N_N2pMfI4e27!a931bEH4t5VSIt0^VTN+(uH
zloFh;+P8<hDLFgVl;+Q)x%b9Y(o&>iA^BP7hclkJ^7Fs^<1hc^ufO`YfBDUS{M&!|
zZ~y-5fB&yEJ at bx#T6F^XfwYr&GI}qauT+sRAD}M89y5{)z-(6nW-%OK?{}HE7>@Y7
zNRGi9Uo`>bMpvB4SWHsHh5?ZoI|qQr5Cq}Mm{7!tMx6pX7S&YF3&DZ#Tc{_H1=v2a
zP+x=oFRZQFS10^S5QKk;z!a6gbB3`+APN86ot(Yg!fU240#k4V_<LOgP~NudV`sCU
zyMOPipKN*Sh4!~U-}dd#1vS0wPem&d%E|5~jWkO*S8ygpG0b^$sDy#NfXNjFyNObw
z?eSjky!-B%toTUZL_OGwf?e>O*(e`^nQ)%8O%NWWi7-9~d<M=VQnY^cEP6qtEX7#x
zYG8gbtHbPAKwyU;&z5ydin5oM<;|hp{k%EEFqf4VK=Rku7H{usTv at Pt-I0#Pd6}ip
zKltN6{{2t>;g9e9`A_fu)1Tk{%b(x*$3K1jXYU-oe1TRutaSqaDm;U$qqLztAe`8U
zg5*ZR83TCkg6GkPi34coS&n=uc^{LdVxDtkO%MksInH66;Y1|IG{00mqJeV?_@)0D
zG!U+ojcBOnlknN}G5opCf7}Xqgr6vo#eZNs`|4|eJ?FxjN{N7xpM8}F3M(swYAJsU
zd!q2iQvSfe!JjAsaR45Tf1i1uq+n9~!}h1=1^Zv>_&@NqPgZ^Ak>+na-}aps8(w*;
z^;@6a`{gGJU-?AW55I&tAWwuW+(U6Mb(MGDts*u0&l8X|HbUh9Ek3;T7iuII6`c&L
zAxcT1CWZY=7b#KePA&~Uai1+4g@%_Lk;5Y2x-oTO?hb-BJY9BS-kiDH)-T?dwJ<wl
z4z?zBB{3WhBm!Hosih(%XXm`tE1)_nTPjvGlxCe9Li2CAa`=0{`_1?N?zcbq{qO$&
z?#}x=ifdidYh54PD7U&>>Q>GO0YU`j99tP75hWpV4kj358~Ye+<AAYA27}2W=NygG
zv3>8k=bUxdteHDM&HOPl&$o9~b#<$iu+Pk_Vb$7ecXf4j1JC>I_xtv)s>gr->yv-{
z?eRbU{ocR*cKGrImb=5h+(l%G-0ns%LLiLm2`1qUN<(cT2Q35zv(Tt)jE?rYHOLnU
z$c&Y);mcd<BXV*X5o9)sP1ocbI@;+pw6{^5kv=6FwTT2eJA7zCwd_O=`XiDED;Fd&
zAMA<wU7d#W at 9L;lkstCa+nUAyv^H0_w^aBVE1R2i at HdM*CjZ*`*tB5hpMG#5^yT^2
zr?Og`rpBk8u}HvF!D!~+4nGp8KJ;G4sn5Ev9-4FcVA=7HsxEz5{_V%}ZXE4 at K8OVB
zt{>JafPDVE9v#I at 6CIX{Vdkk%65GRAb;e!IlRUU1;(WN%@mkmf))-KPCzw-sC+t(A
zk)09Yj`U=Ld_qw^6&r>OHut0~*d~*W%_IwuL4jgsY-XxHk}Md{AI)u2it-8jZf29K
zi&A?#5 at t<Jtty(iX&`ge{8^iq6zt!5_m`jV{r1cKfBohDzx^iLUw^y))A##Mf6H?B
z1>Eu8H2<=+QrQ at I7B_B|Tr{7CCxP2JDhOkZbb^4 at ryy_m96d!P^&IWb4L%{<3emGW
z8Ys)t;#FutUD|ee3G)~s at aC&$)5<KBZ1S>`urDn?KxG7$FgZ*<#YRPx%8#f(GGD^J
zuK%c9xUEL~Pjf|Ub4635{6`b~^_-W*ywzd9Y_i~a6#ilLWh7u>Z|}UE1jfjJ at Lwe8
z?`6Hzkzco&Z>^|5`BC|)PuR+if7o;7P|xLqy^qe+UOQAh_{HMqgME+A3_Krfy7P?)
zL5&DX3PvOIP^?36#me#<p1;E-Dk%i~G}2YMu|`y+%*--To1P5h6pI9VG=gw&K{@Go
z8wQ1lB(LNG)H9huX2mA!8OWx~XLy^+ozwHE<U>1#C$YF7qq%BwZ)aS^%=Ce-taXcW
zW;a&s-duEH->sj1xb^c7xBv3fonL;s^Xp&k{QC3lUw*pu{OR7~M_KL;|J+E5^~nT(
z3OFiI_dqxjV1 at _@K&G_xRZePVsYWU)N2+-!88ZB1fpX&<uL_dV0;id%3hmVDE&k<O
zI%Psi at ej-r|Jg~496H*Y*iZzKANW=LH(F7IStI4UkeEL090mfJ3#jdEljN6N7%kv}
zI$A4QeHAS}t1zf)o&njeazPsY5d51dzz|T!Ede|BR)5H8$21U_A0H_Zei`_Y08e=5
z7H}2kJ}*7|e&?yr=HLEi-p!-c7r(5zu)pu|ncjz|d+(oYx_ at He+4+ITXJ37dM>{JO
z at KA=Z35Fu*Pnf{kc-9QFi9t$90C*rr4!|GD@@7^wPtC#1zZMoIlU51wlyqDr1 at O<M
zE-XunN%nfUJKW4E%-ibuELTnjDKOdYq=jwSo%K-+7G%3ERo=SN{N;0twy!8ywIKhq
z?bCQ{+4;||fB)T$A70%2@%x)U{c!W=A8!8TM}q(P#}7U{dYJf6 at sr6fb@`RL*Cml3
zo(ZtFIt*S#_{Uuvtt!GRq$TRgh at c9R+R`u^t2?UYQ<h|;uS7&gKFEgKQ4_ND?X3j=
z`qmcOhPKv5MAxpc7v?*g`8_OGAPrHA7I-OzSq30d623*PXAt=?`75Q)4ykkE{MowN
zt2)~%+gsQw)K=c=(~)0-zYh5JR-8`&|1fXG#&PqHE<!VGLTjJW4SnQrXR!90r?UM{
z>j#gkGxT4BhrDFJzc%;Nt?kD@?zwun>ioWn6Cc%FKG6H{)WSO_YA=1&aO>#6v%!I<
z=X^Jh`mTSy?Af5GKnVdYye`<Y)c$o at T}D!n=pp7qI94Zu>$$`rxxy&vM at P|dP!Y||
zU<g1R5v*b0nQk68o`=BhDaeENXi87HnV1|GizS#En3PGVcg>pW$jhR_L$>Q>>bYoI
z at y^w$3tA_?x2|~mik?R&=YMzZ>UYnseg9lk at Z*c?KfJj1<BO}`KR^56-ku`|xz?3?
zqj4!>`#>+1PyCOtsxnGKwD4)QDoU#n!L%;=T at C<gy%Fc>nEWg9jTtLbIO2Kq3IwK~
z>O0zm`Sw=nx3!88wDWIoBigIT-yxwM=4a1_`4%=7t(lvsfKBprNzWOHkga@?Ec at xe
z?Hidd{Nw*S+bY_c%iD~ak4V6*a`^w>1K^kV&s!G%Cj9Vbv1jWHHw1*1fC+5?|HGU)
z<k$Ikny31G>w^6M2)1ZI{Aa5^@_y-|_bX0(TzT at 7sxzPUJvlq?+L79eU)5hb-2dpz
z;-}}DZXIj9bYS`Smzu90ZoPGE#djAC6_`Rm1VMjT(uSFlT$p=1t3M0}QKZ1^A?CAI
z8AY&CqIep3llCH|=*$%CJ<P}DWyfZu#7~{*VK|sJDYLm6+v8 at TMcIt(4ZU&2)AE;e
zSL}Hs|I=-?`*u#+y7bEPCs)6FDk^yK{Mz^50sp1vPtHELyZgw&rCT<0ugf{h2UwZO
zY6Pj<%<q9)38eUw*_|>;N=LU^0w(sPu0l9|o50IQRBMzU`3Tdmw91f3TH4vpThhu3
zgm$&Hu at phbXDXKc@K3+BRf4~AK2040zXW`Ree0Y#EYxZ1?r!T*TX#20*JPX91OJj5
zsM?YI3?wE?-Bcn>wX?I0T%e+})gJi`_!Z&)|9XGqSMY28)nXeP{KHT>0{<Z-U_$!`
z@~?j9xB|X)u>W7c20uH~Hue_0F~FmaO7_1~adPhh{LhWA7u-Hxede?JYljxyIS%}d
zH@<GXd~nH=b4#BM!vFH;7us(f>$rV<<&(kJ^jPqk1bnRsNREtmz4rR+et~dF3l|bP
z9nn1DF(ZXdR;jt23<2cDvFXXKob)(ugp2u^GBMKa40puDPtDElsE at BI<jNPaY;Rpj
zQb%24bJet!^V4cdG8)RK?%kT$Sl)U4aP1dw7oGh0($mM6*`7TSA-s5Y<-4aBo<2H#
z at 6Lx`ALbDf6hGzO3;m0D)`NI>me32gow7mzglN^88TztjM&+#{5LBSZ7gvw{psxZi
zZ2;|>dDTi~My)`QR&TNhp{=g91^DY)q&48j`3U?H_FKBT4Dwm1Ik%^M?%a-f#zvn#
z$N^o*Qa!2AQZ+S1$07%+K-vgZwX5QPXPe=Cq>SU$;objVKQ#E8>IhhP<`2BK;IDU%
zAc5dd4afg5;tKw_{i|)KdMOL!{}%{^pZ%$87w`-VZsyFBf5Cq4)x&cyAHw!jpZ;{w
z-EaFIoNByzw0`i*rOyW!KRDfd^XO7k at aSyEy>C}MIyd|F at iosba$f{!w}fEFo<4D&
zQ6Oeg7D}|<q9RS?cd(PioJ=LeyYco8ilW}QFh@)@k-uVAT<LUf{u7m)km;++o!jD_
zJ~_Rvv|#nZq?YRRzRr|6O*7Z`*K%#no=r8Myjl7F#*2?1qJm4$9$$X`gze(fN2l)I
z{`lC}JTL<O^<5X_S#MM$DWNF-g-nxt3DhubwR*o=ODS3q@>Pbb^IUtjYv#EUkk#?B
z{EQ9YS%lEiOsBTF8S=&Xx3_8jNq7zT)#6MDhjXy+<Z>-_xe8aT$hLrOK0A4fE4fgC
zny`@al&&V}3EwJJ{I8zfCM*1v?J?jt at iqVm2>$-~&%2=wPe>+*lR$`rZQKTo0(Q1X
z?FXJ@{1#{g_<1XB!=j`mv$=;G4|xRs%5OieKEIFPKljqX{wL?^@&8v2_TN86^4oOj
zV9V`q2JW3|yZz0Ir-Pk$PIO-TdfgA#=H5Ly|K2G>1xg5Lfj{9fVrg_=TK(393G%2f
zrh~K7D4fbprp)5qiG}$Tc_{4jsi=5Y+ at vgTL0(eH^vss(w3_0um}u at 4ow=+hrMt;J
zW6I18iwoaaI%92bYF9)1h5b_&c1&H=0spc+c?9_vpFO_t_~Gfhw?F&#IQM;`_>cK#
z+Sj*mo?JyDPF}*hwh-b>NGDk;Lo5Ya+V(bCPNTKJyQa6{Fr%tt6=48gpJyofEWd$#
z_~*<mCjZL$DEP5GV)a4VAYWlWhiesk7jdmtkJ{*T_by^**TMxX;Fr;X;w>3*mnsD5
zUyk{2Yr+4A1Ha;57x2dv{AENiwy{cJ9Q?y}Aic)RQJJ?62>iH$Uwqn_M}d*y=iS0x
zYg1OvP3&tg+_jFo9af$Cr0Uzf^R6CQc<Y<`D+g=O?W6M3d+T`9wZpz^hnGA&(|Y4*
z>(wKxzrWIP?d#RgFLvKPvGJ$t3+|uZ{N2^pCvZKv8ViPLCFkX7cjmic(NQr;UMHpg
z)TBsPY*=I at tve?JEyS|o2&cp%YHpc3Z4!3`ienA7uPR~s<h=Q<HJ|N>FUn7w+g$SI
z%4th_ayKoWG^c6e%J~-_J-GM;2|PpsgO4Aaxp!y(nUnC(%^BL%UGBNMkOjkf{z&j9
z$b&jY1w?hwW+(j1xFEhlR3NPs+pX30?3a>bN1N0hY0VFE2EFi7R^70_tp!cNzeu3D
zS<H_(e<^s9`QrJ3AFB`267v@>0CH%b+ut{jn^r9uU|X<s2^$^uupc3a3KlL9J2bZk
z2{0-twTk~|*@N)!5B^4O>jxlY at HgStDhQMS>{%QJc0x*ExPt at s2l6a(2t2d#a_C{|
z0xlc>S_LDt{=fJT&trd!>)B_#xq|!oPusMZEMU&ree<pyUU>U>&FN1G{(bjOvNfFF
zkMrrjeWLZ|v6d@`mOmNnynTGt(+jh&AD#Q)^t?MKH~)OI|MB_lf4RN$*SlH;A%*aI
zSQs;9e*R-)`0F!Y#=-nyD$T`W&Wc%(FDIEWA-;5aZnw`fbz)d}xGN(C+n?E3kvgwA
zwa3SOM9bgbm|8w7uctYG&*o_Z-MMQPW_J6mQDE at VgERN<9=dRz8=bN8p_OOd68wAS
z)X$wG05gBu)`Adf;1h0Jn>9$H2o+RSYj}7KxqK>kLjtTiQ*FDfJ<|&>)xxuunr0v5
z*Z7)hn|%`hF+WD|4~8GAyL)@*F76lRmn~hid|B^`<$Wtx^sQPc+sYNZT)2E0THqKo
zf+OORUgSeb78k_NW6oCve<}EAqQ)Hjk%@h?8=>LgRKyOIKxmT3jCbgfLJ46k*av>x
zPWZ at uu;;11Q&vkBQ2gf&S?{i1aPwI8$-OmaK41L!?856u8!jE7^0WB<DT05?)x*mk
zon8Lqyzu{Iu<PbG>%P0Z;L*9wKVIMR<BjD%USIR`t-b&4Cr$6`G8)Jq0=w=EZC%`!
zCo4^y(u4^Su?}pHdtyd}BZimG^puo}S at C(<;n7i!Brn;nr(%{PE6rP7l+iyst*R)k
zqA+PzekKoH;!a$>vom^{OSi4anBAyGfk%u2=N{ZWcI`4xP9*tlW#+4Q0d-534NKXu
ztwq)euvD_eXYntJP>Y8p_%kACQ$#DnfzcA-rPyL?t5siC-Edm9 at Uq(1gsiHY8X+J4
zf#2l6O`H#rzpD!~Pi~8)A?$N!1|s~zWlQ0_f7Qx?HLI7bTf21qx at 8;I>y7 at v+BN;F
zS8)I;;P|fIMGPEd#8iZESxmL);BPvgp~2r?^H=Xm<hPTr`*!|AqHFF9;(r|Q>obIk
z at PQ25W4l$x5rGG7L7z%C7PgIyz4b0PFr at x7ZBxIeyCH2;AGf!~|J0oMY|)()i*6mS
zJG-y(%AwvH$Cf at h@4I+l>BBR?-*)Bj>hCWT{7HT>{~KRi?R$1{`>%I*{`KK|e}Bp)
zCt(p06T-qw6-Xo>x=n}(k52G7Gg9z8*1MEFJ^8uO@$L!y2 at 9k0!<F)m>~t)Ub8-#>
zab>3F56qd`-xVGi>CDN<=<D=W%$hvEEx&Je`kbaT?mk*mn%CK=5`l+<kM5tmeRIuQ
zZ+0x{_w~+~`zOrrmgT{-+bexdtQM0N6(}KqG#xCB(V`1DXIx;J0a{>!wS%@(v|#kr
zWhUr_PqFF@)X`K^BQJ&g))uV-GyWUFU#gv5v$f|ZjB|fljE&r=dHFKPU&dXUH>_W=
zdDE&bZ>-+BWzDv&YqxKuU9)uydsb}T$h(WztVRXg%!f1q`A`vhE#7H&KE(e}!QW21
zHvB{3e_08P8-64Zihmo}cHoEh{Sp{*9t-R-b`lo0PTSZI|C3kF^K{jheY%~ex-YnX
zbivgl^%uUZKler7?c at D-Px`JL@?H39+2eDqmk+IcdST_`^If-3tbTkR{x|>S<{LlW
zSn}-B$`@BZ`p=*AlLy1X!vJ^!Ykr2nkL at S(4cd<!q#_#UQlFB~QZJ3olSd;(#<?P$
zv9ZYsak-g^Gp1xVRwfio4(BNo#RbW&HSUa*yq=cn%jdC<D5bF?tFA1mqA+!4es)(A
zDe&2QcXl5-(7Je0!@_y26P9^W*2c8@%9|QkBv9ViATL=e*4E5wu}WDpDO*juETI=I
z;NjulYFTVapH{!Cyi-+k69TF7HCp@|Drju1X=<wVndXNHuMWw1HT*2b17IFPv0&Mf
zzSXOiDz;ZC=GX7ozH#SUo8EbQ^Skf7u}iki at 4mh1?VTIm+Oc-~HiV#5u!`}bXK_Ed
zgU$JfV;Kg1&AinP2S5Ae7;U2d$*oNSiu|FRkFdv(Kp_8PWZr&Q!u;l>C0)3nscRQb
z8t6(~)Jh>Vb=|_c^ZV=1f3e`oValG3gZq7#4lcQWy5-`5_M69+-9O!R_uEyE&iC9s
zx$fDeMUT#H`}NMwzdhRZw<j9 at KnaKn_!9)Y^-|tLEc~Gn$q at G=qdjpk37#<SWW~$y
zaFSvSk1IWek;Rdj>fw6f)TD@*XwRf<EYQS``sAjH$e5Vq#tP5G%!$p_ETYS8uE}kx
zy72hHH`lJT_ALPZ%GqsYzD8z<N*n6Rnwz9;YAA1Rw6vggQOWulw9wkDH`daNw^3S<
z7KcN!DH>@-GQ3sU)W}X+_&53u^+=#v^RLXmIDhSY=5%o%A>uX{qj6{EK5ovxdBd`e
z>sP(GjX1yQy>~ai^Y)hac5VOQ{Wte~u;atsZ+*Dut&jH5?%4Ce_7DEN_5EEOuztsz
zs9@=ab)*Igeo1?U2Nj0{_zz5PHQTBkf&ZZrFwXo(%OQaO5l|2LRuKPoq{r3w&TXRj
zGj-h}_~+ at 3la|a$T{E8t`_`S?x8U+2DnE at EzG^)8#ga#7`)?j^z4rC8hi5ykADw;U
z*xK(dcV9oY@%yX2PX_xRo_qUmkJtTj$Id@}a}*G&)utgA*cI(oYaO8Y59h&P#-8w~
zNN0Molbf7);t+ypfh7=irNn<W at 05vob6XOp<;8fJM at wPJP-;;@(zLt`vgVx3?7FhF
z#)^!_N|-OMuPya8&=%KLmp0ay)Yq2OR+sx4${OmR9U+u8)|b=ar5+tvMTrV%TYS1@
zT_t9zs?|p;BZV3=gnuO#)?2c(qM;rMRMyv3HPl=D>#{#JAGz+Vr(2%YwQR}aEgO4R
ztysNl=ZdXwtlqYj=Q9HK&V8Tk*t2`*#~;4)$=+R`efr+#pS{12?Q`1qKL2#rr=PsD
z_haOM5Z>7JE-J9#hY$mPtJX1;eEpWOe{}w}j?`&2sHXFO8MiasXVsa<T+9p-f+c}*
z0UvZQo`)fTu%EZATORDoql;EANZZ)Q-Od-?{HFfQ=Z)w0FTQtj at vRdrmk%zze|p8^
z^Bq^eUj6LCoLk4&J-;;X)`_jZ-g)z1 at 4fqvfZ%Tl0b(tfhwG64GUq$=T at qnRrr}Xh
zntWPjhvTx-p<VNzG;?Zpb9H2_BQiRgJ8OCKa$*xa=@o_UiJ7j<G$fERGe4!OII&=I
zc4cu^;q)oRh11JR3!58eRFu!EsVc0hEUKw4X{alyt1b66A_1gPhA5iqk&KKEt<4M>
zvZ%&tQ3rzv-id*uxk)zOqQy|LzqY2LuC at aHb^P}=NyVwPRj#${>E_09JngafjSY*|
ztQ>fA3-GVrxnteV9b5M9A+SUK+j~C(`#*oNZ}*q`_Z;~0!-HRac<{hS2M^HFXV31h
z_Pf(l-I;0enQ1KSw9R$}^6!US86Ha%bmXm(;n(l_KWKXO;TZls`+qP0K`_6>%edxB
zGGFgppJz at z4>QVH)W#^lq%e+X(&yXYpUO|)^<&LUev$v)JJoUX*z$X)G5=Kl*FGNH
z^y7`bN9U+~uKxL^#k{=}f!iO01cKnl{9DZHPNX9y${8CL5w6MCZB(2qCea%a6%`Q~
z$vO&#gQ%DoBoH?_CnnCtI?~j_g1GDq&y?K6yqu&NQ`5?3O>L<wXs9k|s+(R_KC`-V
zMs-DDV_jiQRdIcdF*MZHC<!!_GAJ}RO55TSU0|FTBXrxM)X^dX2SSkHqoKa6uC}bE
zx*Y!NYAYM+8|HWG;tzEv7Txh=qIp|4 at O-+yZJSqp@b1c8Z>`?3ZS%*ww|%sG$KDU$
z{`eyz{0Cow{Z}6yI=J`9p-;X(?8!=x%Sd&nrNpJD#AT+rRZAx}HR&~O?dz}h>-a3K
z0N{t;a54c at jEjE`HnpQGOXILWV=55+F8;0G_Io<c+M at W58gEadXLg;tsa&4q-s9s&
zKp9)**%s9NDgHDKe%XBSz`(5&ZP&hTzj{QH-|NTL|8RBgtrHu+yR!A?TU0)G|L2c(
z?5%!OtVMEw$q549{u0-uHgP*an*~2rBk4y*Kz@`f){&eb9Y>7A8z1eAjdnVnY00rk
zUT<!eGr@}@5{swDr6grl7AH*3O)Hp^K5a_Qtm%0bC6kM0&8(|tP$(!Xomo>k6FH!T
zhT5W<suE?B;J>t~UR2;~EN!eSZ)qyUN;Nm)ph|TT!G8J-BGpx;)xtkpWxe<x>YuI4
z2biepeS2%i{CUgvyxYHH%QDD+_pS9G?ArY2T|19_g}2`Y`TM`nkUKL{!8?{8&z6#i
zsgn+S=%gko38V(v9ut0Rsb>J;et-=~0^S{YAn*?X`m^JcKoI}D3~ijoF_~-kKfi~0
z`)8ACix~popF|+8wTkDqC)E^jw_A!rnLCzeY#ji8-{6=1H@;c=;7sd<1FN20=(u=r
z?TagGpI+SX{PLp5=ePcNgUY7`d{8Ia8;?JMRg+{A+R#FfH-;x)J{}nSE&e6=Ckg+N
zteuE;IO5}?Vv#_sBhecZ=Z=k!bEhS{Qj?vDURQD=DoD=H^G?d~rl%(6O-z|OX>xU0
zPC@?E(xUw8ih}ae=@n(PGin$bDrZzx6xG*=A{y(8>S{_F>tvXyuPJFzc|=ovQEhce
zQ+=^AQN@)NrL{F8f!dndo-V4O9b4A5FJ9EKd|=>%o%1)ZU-7{^16wz*egB<JyWhjW
zpis)cOmhG>li==*R99NEw5dt{PI`(XE!mNrC~ayI9j+>}MScyHtlq~A%YSPy-huqf
zyKEz4Z at sGz4m^Xb6w-<tj%T%hDExX)2nop9>|l at D*SD&+GyHq{Nj1f3t<{nRENDRj
zZeK-W<*dZ2LcCDQ>UoR;6F+{V at 7mEN_fEA8ezpAJ*%c4Y&c1eZ&65lB?w?-&^kVO$
z^8?Q=t at -V45cc+$F{G|M<k2qyqPm5;y%QYmP01Mh0iHsrU at wtBl9mz>*o*&Bo8})0
zutmF^F)XW#bGeA3o;ct~BMbx#2XU#%vZW*ep(iaRAv4{Zm62XBCA(-w=G4hK)2HPX
z&de*CIi;j%T6sx9S;>s5@&ZIrQHCg{SC-GLt(sL`Sy)$%E()tFk-#iuQdd*oKOg=}
zsw!Kyts at 0)-LSH2{mSm0Z+J4(T^XtI%FGbnC7q|uG-%h@$8l35$WKpk^GppAc{=I<
z>2NUQt1aB);x<0kA_twEYG6Xaul$c`V1_xsqCI3sNx*&vTYn at W{4xBitJ-bX^O_ej
ztLJpve#!6QKba>}G*x8IY4pzXB`j+7_B7#w603`n>q~Qafc5J6l!FHDeA|3(f9s_~
zR6berw(`N*o;%;JdwOx<!?Rm{zV+sB_cr|fu^srJz9YdC!9A>0A`pc1*k6X*gFiQ;
zKnr99u at 1-wdz}Ip{5u?E3eltn at orIp+a=g1CZGa_22|ioNkR_dH_}q#(^C-weYD`s
zNb_c<gDY}K%+5^8$x51-m6A6xBY#Tn%;^(F7c&qAmPtvYbXsY#2&BBUxVZrdcyls6
zoFpgHN>TCZY!c_Q(g^i98R1;pcqa7}?V58^S{8Un*r#LgpT<iq1o)>D7Vngt*IePF
z?SvIA72ZJ%2Z!$Q1b=<1&_jTox6r0&IR4omY6!6Y7J(g$e{~^`zE7#Xg`M2CZph#6
zrS{-|cxW|4Kvqu^@F&dkF%}?!l*aOm&N?Q=QdZ4PTHMhx_$BbST{uAHbLG9$J at -y+
zcyV>X-BbNf2H*J)ne!cP;~s2esQ at XVTS)+P$Bw;mq#b at 8|BX=~0tpEJi~{%{r3i`t
zE at yO{JKF6c5pWRvRpgKL#5)r_SfE(Of&{NKIT0baaYSj!@foS2g|rj^#w at uR9Wv6$
zJ=t{J=B0EH3oVdmrEA(f*%`!V*|Ow#Ifmj)RyvD1Fg9Z5u{T`%tPjhSk87lLoTt^m
z%S(y>$$GyMLaGP{31mwAx8S$x`~s3$IaKfuH8w*C8Hf3?q%_hH5CEZl)@+>oTYr&Y
z{t-KF%_86Gn73^V_yI4)e?sLf48N8 at W>*8baC~Pii2xEvZ?B~sl)s at bd3iTA(j~V}
zbX+;I;@;^wH^0IE%)fhT%P+UL|90=s|2=f(iz3tw2>%x|SwbmUKvbmgJYN0<{(!QN
z_#d?~=N08}X!t2Kp)!Hr;9o=+<915$=dpSOe<cJWKRGh9$-pl{Nc2LNj0nmODIp{?
z7Rb1O9J12c6Q7X==XAuPu)(DAD&lIgGXUO`lcCAS)ez)qr9+(0PS@%HdqX3757=uV
z2>;3m(UJ=&+7XD83q?5zry}xas2jPf$R7Z|%{C7c*#8jz5yIFcU?dlY42QjCM2I0E
zbP5~-dyD at +ZWQ3Ty$L+Sf>EGRia%*>)vo#yR~=iitDzKM#H0YV(4>LcNMPyB<Ex)u
z=(=)b{fjH}@1Df`?D+SGAN|kYMhN~$z?qyNLx9UEwNOa}M)CPUql3V&+`fgq?nH1+
zndy8a_=7#8j6;M*<d-3U6gb{3&OgCJhgO2Wl7p01k`hReHThzSPyxI#C at 9w<;3*#>
zFBR?1v=q&xs6&}~&AbHsoD9ii1^YB9*Ps-Y&kFwxC=3lb8M22@`E3tAN4XuvIcFCB
z`BGkzASmqlYJMl4Uu+N6PIHpWZu|AlVN%*a{tZ5 at z&`fQ%kV$UPm(VUvOs|`+&v2R
zmIVHwA%JJ~dbmYrRbg^NS!#175}=JOpYABmca#;lYKtg`GBw8RFw?||{T({_?YVwT
z);vGIw0xMdzZLx9KQ_ at 574MeK8H)sf)*J`~>>%2MUk-`<at7u9CG1B>=@O_of0tAE
zkBJr`;C$fU<&;oQz*o*67bIHnddP?|Il#{-Af-jz5pU^wBLe~XrZyhBg9`91%G<<e
zOF^EPugM4dIO4n_U$9qw<#rVIn1A74StGFL9;ZZm8~>s#!Je;^ATMEGu$NH)>~$xc
zn|6BLlJf?@?{_}f?_q;Kz}qcBV0<2d&mnJ(jeovtd|xr#Y5$K(fCp8_&B$X2fPb<8
zJP!|cO!ZYbN(-W=Pl_p=;;b%20_4KEi)XV~j-rqhe{O%f>HDkOe!aWvzrGkb_`^TN
zc~FE&$OL|AbuO$tOfc}O<`31fe~9yuJQw+J?L41V{A(4ET);p6pNU|?J~^*sz7#(b
zJOEDzAxIYB_2B%az?hOK{9}Qrt0Z})0tt1<0rGL|DT(6V$xoSkQaLP1t72XWL3tQ5
zS&8<<YQbJ?kMK{qQry0BJBok6miTY+ugW`O@`J)YDo}+`!JelCsvjUXPznjZ>3nqV
zIRsZ7*oV+HJ~)F$hd?RWWo7S=?<<D<LgQ5Gmh4uXAG!0pM*(iR;F_A_EiItnlipr~
z;b9~5CGs;0M9<8NDV&NIq8!T89^;xTm?=)*G9Z=DXBU_JaP`CgF^c&S{<*P<G9)_k
zOG^qc#0AMt1wRRbJ|Nik>wvF<KL at CxB!-qOK=eiMSAA-pnt!SGBzSZcR9k(m0{BM@
z8hf<qKo`)<K!EuHLh at fJ)Tp^vuvamkI8WHe!-Ku<sA!)`S>C{2b%5Vt*?ydlg}oK_
zB`>yYj|%(Lg>=|AvDfjR$gl6)sUkl`a;tJ;E`XOhJgYr}K($`lqw&zbb=Vj?W8;4u
zLxA~{?DFyV$2<g}j^8JNsI<gbZZJD*3R$pJfx4SOJ!`HnqqCl=VI&Y!G!-Kh*HSsL
zuLEhsR?P6sX(-;kiR5?b57$Nw{+fTL0N9An5z*1C>QR1Pxq6)ulifx|8K%e|_RXA^
zx3vE!>|5|N+pAJtF+6H%1S&ua68z)ir1Il-IXv-fbdZ2i0#fD&=1IwECHUixND5?*
zDS at a<0B5F5mnfwWq<}Xnmbe$#CYWcYaU&xu+S7q~HtBF4`j{E*cBHDKY)`1LZ(?r^
zH%8b;AYm9Db<<i|*r_--`PXw#emM-!zXsdH%paNco-tx?9i~3z=W}>D_`k^dY{-uJ
z!-hTQON;_9Qxu($?1{-vb>&a=mK0!t(mU#KJ0gMZCcKcdYL=s98WM=*X?LBqEDb^$
zyrf_J!Nzy~%k#1D4^iU4S($)EAxiT=I`URxHF8j60l{2 at t+Qhl_6_*O at L=-Qh#)cF
z6oQ|5>i??jsf8fHAO11_ at b8V+Qvh^W3!&Fk3;fIr!#@^C`gF7lQlkK#oMi at JugWso
z{NT)`fTLI7XiJabQFkaM;9J-m9WK~W&pr^hud%13Kg8{z3&p=E#V-T~CaLoSzdV*J
zsMN27p!qk)f|L>BzeSx%nx9PeSnrOpGiLtz<^C at k;pFCF!}5>B%-BA%1=8<Y2aj~Z
z5VD<+;*HKoc1%ns5!Nn<Q6OV>JsXKYN at E%PN6*M37jTs1$G6w8I&@-hJJ~^eXC2F=
z$HG5hQx>Xu;>4n>P4h1;vE6U-VO}<2-iq^9 at CSYhJ`5j95hM|mdi0Sp5J=@m7RYJ0
zBOPw8<%yT1*zJtrwsHya!auYpN$^+LCyEfr0vH8YV4z$O)2zZjNh<>ZE(qqCmQrC~
z3YZyYNfWEDqdoMR9l}220`M~g#BfgTYos!0mE at YWP5&O1_NuavpZ}CZ>imK5TLItd
z_!k(A8DkSRKbh<q0nVXssWXfnE&mq{Jr#Rwzi0Gwnks<sk%i!wz&Hki38 at K&1b8?#
z4-cI+MRMV~63Ay#fYlM+vKdhYxsj8zBBx{{1abk&L8QafOIa^5ecQ6362S9Vf2fUP
zB!vGsx30_sr}!Cx*&o>b#wJRZ at mTyD&PTFcneb&({EO#73%n}{FOYL9EmS~9&$a0i
z5EUl|0#-rr_;^Mi;a`B)9SQ!70we;dN!*4){ExVxM8*a9S97n%Y^-3fBe~ciJ%J at D
ztwB4$L%R)o$mbrv(xxSIQ^!F5&Dy at ocBN`c;y|`bn<kT7#=ZIp{%T2&E#})Izd5@!
zW`=FN`PmCe=5RaBGmMU_in0E0(I2#*);yIyW{fAavpo(Kj4lM=pTL7klj5Uz#tH*L
zPP%hScHHzlZZP60nMP?ee%4fX!K8>u84(lHB68EC at +XoGFc4(VZ%Or4QW4_v;UEcE
z at YA7M?n+4lKVARCmH?`X<hqihmhtGKD54ODPa@#gg$O}advxNUnHLG@%0K2uVK25y
zm^Z3Sk=$zz_|byf8O=q+2_Bf|H^8~>$1n=e_r`-gz#|H=Lm~u`g9rf?n2T^E^7FTl
z#R;k-39PY4Ie$&NRDLAvix5<YQ9$v}!*tjm&9`t1UwM#Cf_}+O at Yu<{f_e4_&p{B|
zLrm7yesf|M6`1)i{QD!no?ZHXmw%`ZmcTH3#>&5CUCiNNWEJqPT{1 at BI*F~rzq$Dv
z<X at Qoj`SpMHs#=k{CQbufk8pq$=MM+mXYW4=4CP*;D6kWWh4kxjhGh;l0X3eS?PFh
zV1q#If+P!2UWI``s0My}BA`{E4Zq at Ch6X*=C6!OD7Zv}JKuiqTgxD%IG)VmCsRT+0
z`s?^ciTrG=1%iJS{OM at tFY({V0=yE#K~(WCLO>Ui|B?<%I>2V|Z*<hWty->t76Pyr
z^Dl}pu}=Vd;oQPL*~<e&WDox)sssE|?MaN+kEqkk+gpDMY({?gA2a+q_J+jI9+pS#
zn`ba-v9KAoGpYo}eyZRjO}s}{fj%IF7K}4+_W;|I0T~4ns0bke#sW&C2!R{5ksVMY
zLIMIm4<VgFE-;OG0k==q2qp5oytZoQi1jF7hhO4<cDhWtCMODzKu8=WN)w- at RnuYS
zjF^$+3jYE*t)UAU0>ms4_Vs?DU8WMG75MeE0-B=FK)~WR^+f_d9p(JB5G43xhw%T(
z{OGW+#sUfZ!oR{^_(vCv0&1t&A!~7(ny8Y*c1TCUJ7*x;Yubacw+Vr_)Ibm|3wvCw
z=ht<9$$0}KzZv|4BYz<OkQqpCQs7H@*Q7U~GxV?#_Snu4OrtHF4t*=&8(;P$Lr-fV
zJw^!(bJ(jq;fuR5d)>I8u+)UGj3j6$_|rl@{A(59i(>OKDHBCa%VkoGa*(UG*zGH4
zrBHl(bxKn?FS%X at 2?X&^3JGrv0nC2^VN{$OTot#HvEprXR;x{paITYL4ZN6qgL#90
zb%1s|94V(#nXmMj0&@%hs6bSP+^B+53&MJldc+C#dLRIM8IMScvHcSBy at I`p`7wH>
zJ at B(p%vb#Dj#{oDv$Xb(F6`jmb*jq*u0Psq{!_p{S;cw9zxF?dG`u?Ohk{>LJPQ2Q
zw687l2bv#El#N^955YeN*x2*;Z66F0QHYneGlT$gL=|wn{?eED;IJPV=O_?L0<T1d
ziv&C_5`l1T;GdfwIVFo3VKyp4I3Fd1)ELHs>{Lbp7f*Pckw*%^?11J!uC0oBvGk5w
zrq9R=g80WdNNNdt%A5nI5YD<aH47~KM=LX<YChEP5rr_X`Iih==E8{l67%_Bv|QoB
zz at ZNF_t_~6o>}t={8WB)<x`bFS$$1WNR>bn=(8~xG1V*lGYYUJ%5Y!`L1h8#l=zPe
zO4I{^1a>tdfV!ex@>a7WbH at h%_D*K1viI2jWW)am_6gedi09$q2r#B*cxf>?!n|7X
zD6QfA?U6qLcRD8c|5^M8ifC9YM-##y`N7{Sfqw~m{ZBEGTu&<eXQxu<k!26Frg(Y$
z5D(iboQeuqBY_<fYee|s5vX}tQPU=h1*$1xnJDnPo64Lug)E}uY65R}qa^{B0n17o
z3heMNm3g-+{)=y6Q|4bWZ1!cpF*_#Ai{VjMII<JMMIGu2FRdM9f)HfWSG!Q&QT)?V
zYejBsU{4iP_-70Pa$2?KO|ALSD?eEXCmkgOuRyLx1Ul>_P1YS0K}kmxAsy_HEZQ+E
zoXl7m{2Lvu2r2Bd$(%AXYr4q8*^(1<krTqnb}jQ60Kc)wU*)_;<k#@q`8Ok~6{vOO
zw_0nz(Xo!Vcg7X}^})7}|B)oWv}%+DLdABX%Bb7FOn6;}0G9&~8J?Mp!;dat+0Rt)
zW>H)M(_TgS*dB}!|3O48d1zz2i$H`}@IoZQBm$V9*vgssA{jNN=P`GzCBRxT(ng4q
z+*411sZ~HS3xN42)DzX64(VX;^^BNd^3}Cns at gBi^AIJa5zW6$^{NrUsC;7hWs+Ah
zuP^(;_FDr1x?mv$b$;9qj~kHdU(_W4dd(+eQ&Ivy5(yv>IuhzR66d2tAsqvII_h1D
z{Hh~fNUdIja8ZO>L?pDQCQ4teXE3lwdVG=k3YptgctgIxFFsa1fz*opqrtDtzXhQQ
zu!X(V3FbdAdcULv`u|M=#Q#?!!v5rlk|7}36P}eKLx4zNN=$J+{8Iv@{)r31i at xrR
z`BOyLtFndj*i-)dI9^mBi$z%}kuTLzo`RZ{Lb9B`WwG#|nk;6U2yF5%&?=)YMo4F}
z%J5M3lo3G{JjE2LfUiZNg1@|F at UOfOkzcB*Y6zgi_#%DbAK>NU7f~GMht?zWzx1^W
zG6n+0Kl?TIB8uchkQQ`_(mI)iTRK_ at W=HZ|oQw<v@)jNOLVER%l7K{et7C?Jb`m<|
z>RrKGN<9jG!8k<Z*S0 at 6@*BZlE&KVu%YUGh{u!fyU!Ll3I{H_P9_mAm1qA<BBEnyZ
zia-Ldx*fzKvS2Ynm>ja*g50>7leGoH{P5hOR~anWq9XM6nj?zDnNb7F#8 at Dc#nUHI
zCdDQ>a?;R_ at Xz%xl8U+^QzMEqF=D>t0<s)h8Gh;OfxyrOFI5Rt_A at R}1yzMpW`4!<
zs6{?>j6SlGolbxk3&fgF<@S{d6#sZ3SqPCJE24ErJ0bukGP584AsJ$sv{H-k=?LU9
zA}HEb(Nb!gy2F0e5m&D|dI$*MUk?QQ(_#4a9ZOW5a|HO2gDOPpr;b{-$An)hpF`j$
z)LUWS>Wnr1b2f7j8DGcz8Kc8FPH*G?3z}b{_l)vIFC&3JMMWqHguN0TCIdlqgrvjq
zPG-cy(h~{q5jkmWM0JoRM+=LK74k&|x($CVCW?Q+$Vr*FCR~s#8Di~p!6cTIl0JKi
z@>x@)`Ii!qR4i4+UZallQD#Q4S9VB-0KG<<mzsHw)I!jMf=YfF9gIOljUYzlQ+B#!
zqD^W|Qt)T;ONy>^r1B|6AviY%0_A+ at 6aV2{3=-=<wGedBCQUY at H%Y6YPS!kJ#}GoI
zlzJHNcqyeGSzIBGk%3af&vTH~442f*b>!#zZp-;tIqz_hpZ)p{pTdI;T8nvm$9{mn
zA4pU%X|{9vKQh8j^K7G#IUfFlf0FqXqf6jr5&<IrE8!E!0%Qx*+k}4!o5228oiY4p
zVT!`i62mf*RXH?;=a5Pwz_r-O1hMe^_n0VNl0M5Qz)HEQndHR?0aFxRkc)RBiROX=
zZY~P3+O%MSq at JULImRBmwGlEB0eOicWKbaf)0efK>KNeXcy%zTwDd`eu|1>}yoIuW
zU-)-w?4 at r`f$2Rm1*T at i2<beJOkDyd0bjCUXjlBpMPV#RP`Z$g8WC_f9AHdiAq3 at r
zbl4Xcr1)oO&>d-05~Gs5{LA2Z^c{Qn#~cE`S at 2PJIWVf7BfxL)KLkiS_EtYMz=1do
i3)_&d2z at pVQzsmSe_f>+n+k^gN#-vf>AS`~1pIHHha`9a

diff --git a/kernels/compiler_clz_int.cl b/kernels/compiler_clz_int.cl
deleted file mode 100644
index 0f17f86..0000000
--- a/kernels/compiler_clz_int.cl
+++ /dev/null
@@ -1,5 +0,0 @@
-kernel void compiler_clz_int(global int *src, global int *dst) {
-  int i = get_global_id(0);
-  dst[i] = clz(src[i]);
-}
-
diff --git a/kernels/compiler_clz_short.cl b/kernels/compiler_clz_short.cl
deleted file mode 100644
index 1ecf7a9..0000000
--- a/kernels/compiler_clz_short.cl
+++ /dev/null
@@ -1,5 +0,0 @@
-kernel void compiler_clz_short(global short *src, global short *dst) {
-  int i = get_global_id(0);
-  dst[i] = clz(src[i]);
-}
-
diff --git a/kernels/compiler_convert_uchar_sat.cl b/kernels/compiler_convert_uchar_sat.cl
deleted file mode 100644
index 0c81ecc..0000000
--- a/kernels/compiler_convert_uchar_sat.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void compiler_convert_uchar_sat(global float *src, global uint *dst) {
-  int i = get_global_id(0);
-  dst[i] = convert_uchar_sat(src[i]);
-}
diff --git a/kernels/compiler_data_types.cl b/kernels/compiler_data_types.cl
deleted file mode 100644
index 79b06f3..0000000
--- a/kernels/compiler_data_types.cl
+++ /dev/null
@@ -1,80 +0,0 @@
-/* OpenCL 1.1 Supported Data Types */
-__kernel void compiler_data_types()
-{
-  // built-in scalar data types (section 6.1.1)
-  bool b;
-  b = true;
-  b = false;
-  char c;
-  unsigned char uc;
-  uchar uc_2;
-  short s;
-  unsigned short us;
-  ushort us_2;
-  int i;
-  unsigned int ui;
-  uint ui_2;
-  long l;
-  unsigned long ul;
-  ulong ul_2;
-  float f;
-  half h;
-  size_t sz;
-  ptrdiff_t pt;
-  intptr_t it;
-  uintptr_t uit;
-  
-  // built-in vector data types (section 6.1.2)
-  // supported values of $n$ are 2, 3, 4, 8, 16 for all vector data types
-#define VEC(sz) char##sz c##sz;   \
-                uchar##sz uc##sz; \
-                short##sz s##sz;  \
-                ushort##sz us##sz;\
-                int##sz i##sz;    \
-                uint##sz ui##sz;  \
-                long##sz l##sz;   \
-                ulong##sz ul##sz; \
-                float##sz f##sz;
-#if 1
-   VEC(2);
-   VEC(3);
-   VEC(4);
-   VEC(8);
-   VEC(16);
-#endif
-   float16 f_16 = (float16)(1.0f);
-   f_16.s0 += 1;
-   f_16.s1 += 1;
-   f_16.s2 += 1;
-   f_16.s3 += 1;
-   f_16.s4 += 1;
-   f_16.s5 += 1;
-   f_16.s6 += 1;
-   f_16.s7 += 1;
-   f_16.s8 += 1;
-   f_16.s9 += 1;
-   f_16.sa += 1;
-   f_16.sb += 1;
-   f_16.sc += 1;
-   f_16.sd += 1;
-   f_16.se += 1;
-   f_16.sf += 1;
-   f_16.sA += 1;
-   f_16.sB += 1;
-   f_16.sC += 1;
-   f_16.sD += 1;
-   f_16.sE += 1;
-   f_16.sF += 1;
-   float8 f_8;
-   f_8 = f_16.lo;
-   f_8 = f_16.hi;
-   f_8 = f_16.odd;
-   f_8 = f_16.even;
-   uint4 u_4 = (uint4)(1);
-
-   // Other built-in data types (section 6.1.3)
-   image2d_t i2dt;
-   image3d_t i3dt;
-   sampler_t st;
-   event_t et;
-}
diff --git a/kernels/compiler_degrees.cl b/kernels/compiler_degrees.cl
deleted file mode 100644
index 5fad995..0000000
--- a/kernels/compiler_degrees.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void compiler_degrees(global float *src, global float *dst) {
-  int i = get_global_id(0);
-  dst[i] = degrees(src[i]);
-}
diff --git a/kernels/compiler_displacement_map_element.cl b/kernels/compiler_displacement_map_element.cl
deleted file mode 100644
index ee40ad5..0000000
--- a/kernels/compiler_displacement_map_element.cl
+++ /dev/null
@@ -1,11 +0,0 @@
-kernel void compiler_displacement_map_element(const global uint *in, const global uint *offset, int w, int h, global uint *out) {
-    const int cx = get_global_id(0);
-    const int cy = get_global_id(1);
-    uint c = offset[cy * w + cx];
-    int x_pos = cx + c;
-    int y_pos = cy + c;
-    if(0 <= x_pos && x_pos < w && 0 <= y_pos && y_pos < h)
-        out[cy * w + cx] = in[y_pos * w + x_pos];
-    else
-        out[cy * w + cx] = 0;
-}
diff --git a/kernels/compiler_double.cl b/kernels/compiler_double.cl
deleted file mode 100644
index a84f142..0000000
--- a/kernels/compiler_double.cl
+++ /dev/null
@@ -1,9 +0,0 @@
-#pragma OPENCL EXTENSION cl_khr_fp64 : enable
-kernel void compiler_double(global double *src, global double *dst) {
-  int i = get_global_id(0);
-  double d = 1.234567890123456789;
-  if (i < 14)
-    dst[i] = d * (src[i] + d);
-  else
-    dst[i] = 14;
-}
diff --git a/kernels/compiler_double_2.cl b/kernels/compiler_double_2.cl
deleted file mode 100644
index 20ee614..0000000
--- a/kernels/compiler_double_2.cl
+++ /dev/null
@@ -1,9 +0,0 @@
-#pragma OPENCL EXTENSION cl_khr_fp64 : enable
-kernel void compiler_double_2(global float *src, global double *dst) {
-  int i = get_global_id(0);
-  float d = 1.234567890123456789f;
-  if (i < 14)
-    dst[i] = d * (d + src[i]);
-  else
-    dst[i] = 14;
-}
diff --git a/kernels/compiler_double_3.cl b/kernels/compiler_double_3.cl
deleted file mode 100644
index 8b32404..0000000
--- a/kernels/compiler_double_3.cl
+++ /dev/null
@@ -1,6 +0,0 @@
-#pragma OPENCL EXTENSION cl_khr_fp64 : enable
-kernel void compiler_double_3(global float *src, global double *dst) {
-  int i = get_global_id(0);
-  float d = 1.234567890123456789f;
-  dst[i] = i < 14 ? d : 14;
-}
diff --git a/kernels/compiler_double_4.cl b/kernels/compiler_double_4.cl
deleted file mode 100644
index e5e46f9..0000000
--- a/kernels/compiler_double_4.cl
+++ /dev/null
@@ -1,5 +0,0 @@
-#pragma OPENCL EXTENSION cl_khr_fp64 : enable
-kernel void compiler_double_4(global double *src1, global double *src2, global double *dst) {
-  int i = get_global_id(0);
-  dst[i] = src1[i] + src2[i];
-}
diff --git a/kernels/compiler_event.cl b/kernels/compiler_event.cl
deleted file mode 100644
index a901b05..0000000
--- a/kernels/compiler_event.cl
+++ /dev/null
@@ -1,6 +0,0 @@
-__kernel void
-compiler_event(__global int *dst, int value)
-{
-  int id = (int)get_global_id(0);
-  dst[id] += value;
-}
diff --git a/kernels/compiler_fabs.cl b/kernels/compiler_fabs.cl
deleted file mode 100644
index 016deb8..0000000
--- a/kernels/compiler_fabs.cl
+++ /dev/null
@@ -1,5 +0,0 @@
-kernel void compiler_fabs(global float *src, global float *dst) {
-  int i = get_global_id(0);
-  dst[i] = fabs(src[i]);
-}
-
diff --git a/kernels/compiler_function_argument.cl b/kernels/compiler_function_argument.cl
deleted file mode 100644
index fe6de28..0000000
--- a/kernels/compiler_function_argument.cl
+++ /dev/null
@@ -1,7 +0,0 @@
-__kernel void
-compiler_function_argument(__global int *dst, int value)
-{
-  int id = (int)get_global_id(0);
-  dst[id] = value;
-}
-
diff --git a/kernels/compiler_function_argument0.cl b/kernels/compiler_function_argument0.cl
deleted file mode 100644
index 6bc2e92..0000000
--- a/kernels/compiler_function_argument0.cl
+++ /dev/null
@@ -1,7 +0,0 @@
-__kernel void
-compiler_function_argument0(__global int *dst, short value)
-{
-  int id = (int)get_global_id(0);
-  dst[id] = value;
-}
-
diff --git a/kernels/compiler_function_argument1.cl b/kernels/compiler_function_argument1.cl
deleted file mode 100644
index 8842b0b..0000000
--- a/kernels/compiler_function_argument1.cl
+++ /dev/null
@@ -1,7 +0,0 @@
-__kernel void
-compiler_function_argument1(__global int *dst, char value, short value0, int value1)
-{
-  int id = (int)get_global_id(0);
-  dst[id] = value + value0 + value1;
-}
-
diff --git a/kernels/compiler_function_argument2.cl b/kernels/compiler_function_argument2.cl
deleted file mode 100644
index 24e5795..0000000
--- a/kernels/compiler_function_argument2.cl
+++ /dev/null
@@ -1,12 +0,0 @@
-__kernel void compiler_function_argument2(
-char8 c, uchar8 uc, short8 s, ushort8 us, int8 i, uint8 ui, float8 f,
-__global float8 *result)
-{
-  result[0] = convert_float8(c);
-  result[1] = convert_float8(uc);
-  result[2] = convert_float8(s);
-  result[3] = convert_float8(us);
-  result[4] = convert_float8(i);
-  result[5] = convert_float8(ui);
-  result[6] = f;
-}
diff --git a/kernels/compiler_function_argument3.cl b/kernels/compiler_function_argument3.cl
deleted file mode 100644
index 9395cd7..0000000
--- a/kernels/compiler_function_argument3.cl
+++ /dev/null
@@ -1,71 +0,0 @@
-struct sfloat8 {
-    float a;
-    float b;
-    float c;
-    float d;
-    float e;
-    float f;
-    float g;
-    float h;
-};
-
-
-__kernel void compiler_function_argument3(
-struct sfloat8 f, __global struct sfloat8 *result)
-{
-  result[0].a = f.a;
-  result[0].b = 12.0f;
-  result[0].c = 12.0f;
-  result[0].d = 12.0f;
-  result[0].e = 12.0f;
-  result[0].f = 12.0f;
-  result[0].g = 12.0f;
-  result[0].h = f.a + f.h;
-
-  result[1].a = f.a;
-  result[1].b = 12.0f;
-  result[1].c = 12.0f;
-  result[1].d = 12.0f;
-  result[1].e = 12.0f;
-  result[1].f = 12.0f;
-  result[1].g = 12.0f;
-  result[1].h = f.a + f.h;
-
-  result[2].a = f.a;
-  result[2].b = 12.0f;
-  result[2].c = 12.0f;
-  result[2].d = 12.0f;
-  result[2].e = 12.0f;
-  result[2].f = 12.0f;
-  result[2].g = 12.0f;
-  result[2].h = f.a + f.h;
-
-  result[3].a = f.a;
-  result[3].b = 12.0f;
-  result[3].c = 12.0f;
-  result[3].d = 12.0f;
-  result[3].e = 12.0f;
-  result[3].f = 12.0f;
-  result[3].g = 12.0f;
-  result[3].h = f.a + f.h;
-
-  result[4].a = f.a;
-  result[4].b = 12.0f;
-  result[4].c = 12.0f;
-  result[4].d = 12.0f;
-  result[4].e = 12.0f;
-  result[4].f = 12.0f;
-  result[4].g = 12.0f;
-  result[4].h = f.a + f.h;
-
-  result[5].a = f.a;
-  result[5].b = 12.0f;
-  result[5].c = 12.0f;
-  result[5].d = 12.0f;
-  result[5].e = 12.0f;
-  result[5].f = 12.0f;
-  result[5].g = 12.0f;
-  result[5].h = f.a + f.h;
-
-  result[6] = result[0];
-}
diff --git a/kernels/compiler_function_constant.cl b/kernels/compiler_function_constant.cl
deleted file mode 100644
index ca7e874..0000000
--- a/kernels/compiler_function_constant.cl
+++ /dev/null
@@ -1,6 +0,0 @@
-__kernel void
-compiler_function_constant(__constant short *c, __global int *dst, int value)
-{
-  int id = (int)get_global_id(0);
-  dst[id] = value + c[id%69];
-}
diff --git a/kernels/compiler_function_constant0.cl b/kernels/compiler_function_constant0.cl
deleted file mode 100644
index 5340352..0000000
--- a/kernels/compiler_function_constant0.cl
+++ /dev/null
@@ -1,6 +0,0 @@
-__kernel void
-compiler_function_constant0(__constant int *c0, __constant char *c1, __global int *dst, int value)
-{
-  int id = (int)get_global_id(0);
-  dst[id] = value + c0[id%69] + c1[0];
-}
diff --git a/kernels/compiler_function_qualifiers.cl b/kernels/compiler_function_qualifiers.cl
deleted file mode 100644
index c904c84..0000000
--- a/kernels/compiler_function_qualifiers.cl
+++ /dev/null
@@ -1,9 +0,0 @@
-/* test OpenCL 1.1 Function Qualifiers (section 6.7) */
-kernel void compiler_function_qualifiers()
-__attribute__((vec_type_hint(float)))
-__attribute__((work_group_size_hint(4,1,1)))
-__attribute__((reqd_work_group_size(4,1,1)));
-
-kernel void compiler_function_qualifiers()
-{
-}
diff --git a/kernels/compiler_gather_register_file.cl b/kernels/compiler_gather_register_file.cl
deleted file mode 100644
index 773797d..0000000
--- a/kernels/compiler_gather_register_file.cl
+++ /dev/null
@@ -1,10 +0,0 @@
-__kernel void
-compiler_gather_register_file(__global uint *src, __global uint *dst)
-{
-  __gen_ocl_force_simd16();
-  int id = (int)get_global_id(0);
-  const int x0 = src[id];
-  const unsigned short index = get_global_id(0);
-  dst[id] = __gen_ocl_rgather(index, x0);
-}
-
diff --git a/kernels/compiler_gather_register_file0.cl b/kernels/compiler_gather_register_file0.cl
deleted file mode 100644
index 0e6d487..0000000
--- a/kernels/compiler_gather_register_file0.cl
+++ /dev/null
@@ -1,10 +0,0 @@
-__kernel void
-compiler_gather_register_file0(__global uint *src, __global uint *dst)
-{
-  __gen_ocl_force_simd16();
-  int id = (int)get_global_id(0);
-  const int x0 = src[id];
-  const unsigned short index = 15 - get_global_id(0);
-  dst[id] = __gen_ocl_rgather(index, x0);
-}
-
diff --git a/kernels/compiler_gather_register_file1.cl b/kernels/compiler_gather_register_file1.cl
deleted file mode 100644
index 184202c..0000000
--- a/kernels/compiler_gather_register_file1.cl
+++ /dev/null
@@ -1,11 +0,0 @@
-__kernel void
-compiler_gather_register_file1(__global uint *src, __global uint *dst)
-{
-  __gen_ocl_force_simd16();
-  int id = (int)get_global_id(0);
-  const int x0 = src[id];
-  const int x1 = src[id+16];
-  const unsigned short index = 2*get_global_id(0);
-  dst[id] = __gen_ocl_rgather(index, x0, x1);
-}
-
diff --git a/kernels/compiler_geometric_builtin.cl b/kernels/compiler_geometric_builtin.cl
deleted file mode 100644
index 34ff761..0000000
--- a/kernels/compiler_geometric_builtin.cl
+++ /dev/null
@@ -1,11 +0,0 @@
-kernel void compiler_geometric_builtin() {
-  float x = 1, y = 2, z = 3;
-  z = dot(x, y);
-  z = cross(x, y);
-  z = distance(x, y);
-  z = length(x);
-  z = normalize(x);
-  z = fast_distance(x, y);
-  z = fast_length(x, y);
-  z = fast_normalize(x);
-}
diff --git a/kernels/compiler_getelementptr_bitcast.cl b/kernels/compiler_getelementptr_bitcast.cl
deleted file mode 100644
index 0320abf..0000000
--- a/kernels/compiler_getelementptr_bitcast.cl
+++ /dev/null
@@ -1,18 +0,0 @@
-__kernel void compiler_getelementptr_bitcast(global float *src, global float *dst)
-{
-  int i = get_global_id(0);
-
-  __local  float ldata[256];
-  ldata[get_local_id(0)] = src[i];
-
-  //if use get_local_id(0) to index ldata, the issue is not reproduced
-  //so, just set the work group as 1 in the application
-  __local uchar *  pldata = (__local uchar *)&ldata[0];
-  uchar data;
-  for(int k = 0; k < 3; k++){
-    data = *pldata;
-    pldata++;
-  }
-
-  dst[i] = data;
-}
diff --git a/kernels/compiler_global_constant.cl b/kernels/compiler_global_constant.cl
deleted file mode 100644
index c0e23d1..0000000
--- a/kernels/compiler_global_constant.cl
+++ /dev/null
@@ -1,76 +0,0 @@
-constant int m[3] = {71,72,73};
-const constant int n = 1;
-constant int o[3] = {3, 2, 1};
-
-constant int4 a= {1, 2, 3, 4};
-constant int4 b = {0, -1, -2, -3};
-
-struct Person {
-  char name[7];
-  int3 idNumber;
-};
-
-struct Test1 {
-  int a0;
-  char a1;
-};
-
-struct Test2 {
-  char a0;
-  int a1;
-};
-struct Test3 {
-  int a0;
-  int a1;
-};
-struct Test4 {
-  float a0;
-  float a1;
-};
-
-constant struct Person james= {{"james"}, (int3)(1, 2, 3)};
-constant struct Test1 t0 = {1, 2};
-constant struct Test2 t1 = {1, 2};
-
-constant int3 c[3] = {(int3)(0, 1, 2), (int3)(3, 4, 5), (int3)(6,7,8) };
-constant char4 d[3] = {(char4)(0, 1, 2, 3), (char4)(4, 5, 6, 7), (char4)(8, 9, 10, 11)};
-
-constant struct Person members[3] = {{{"abc"}, (int3)(1, 2, 3)}, { {"defg"}, (int3)(4,5,6)}, { {"hijk"}, (int3)(7,8,9)} };
-constant struct Test3 zero_struct = {0, 0};
-constant int3 zero_vec = {0,0,0};
-constant int zero_arr[3] = {0,0,0};
-constant float zero_flt[3] = {0.0f, 0.0f, 0.0f};
-
-__kernel void
-compiler_global_constant(__global int *dst, int e, int r)
-{
-  int id = (int)get_global_id(0);
-
-  int4 x = a + b;
-  dst[id] = m[id%3] * n * o[2] + e + r *x.y * a.x + zero_struct.a0 + zero_vec.x + zero_arr[1] + (int)zero_flt[2];
-}
-// array of vectors
-__kernel void
-compiler_global_constant1(__global int *dst)
-{
-  int id = (int)get_global_id(0);
-  dst[id] = c[id%3].y + d[id%3].w;
-}
-
-// structure
-__kernel void
-compiler_global_constant2(__global int *dst)
-{
-  int id = (int)get_global_id(0);
-
-  dst[id] = james.idNumber.y + t0.a1 + t1.a1;
-}
-
-//array of structure
-__kernel void
-compiler_global_constant3(__global int *dst)
-{
-  int id = (int)get_global_id(0);
-
-  dst[id] = members[id%3].idNumber.z + members[id%3].name[2];
-}
diff --git a/kernels/compiler_global_constant_2.cl b/kernels/compiler_global_constant_2.cl
deleted file mode 100644
index 04536c7..0000000
--- a/kernels/compiler_global_constant_2.cl
+++ /dev/null
@@ -1,20 +0,0 @@
-constant int m[3] = {0x15b,0x25b,0x35b};
-constant short t[5] = {0x45b,0x55b,0x65b,0x75b,0x85b};
-constant long n[3] = {0x15b,0x25b,0xFFFFFFFFF};
-constant long p[3] = {1,1,1};
-constant long s = 1;
-
-
-__kernel void
-compiler_global_constant_2(__global int *dst, int e, int r)
-{
-  int id = (int)get_global_id(0);
-  dst[id] = m[id%3] + t[id%5] + e + r;
-}
-
-__kernel void
-compiler_global_constant_2_long(__global long *dst, int e, int r)
-{
-  int id = (int)get_global_id(0);
-  dst[id] = n[id%3]*p[1] + e*s + r;
-}
diff --git a/kernels/compiler_global_memory_barrier.cl b/kernels/compiler_global_memory_barrier.cl
deleted file mode 100644
index 99bb940..0000000
--- a/kernels/compiler_global_memory_barrier.cl
+++ /dev/null
@@ -1,7 +0,0 @@
-__kernel void compiler_global_memory_barrier(__global int *dst, __global int *src) {
-  src[get_local_size(0) * (2 * get_group_id(0)) + get_local_id(0)] = get_local_id(0);
-  src[get_local_size(0) * (2 * get_group_id(0) + 1) + get_local_id(0)] = get_local_id(0);
-  barrier(CLK_GLOBAL_MEM_FENCE);
-  dst[get_local_size(0) * (2 * get_group_id(0)) + get_local_id(0)] = src[get_local_size(0) * 2 * get_group_id(0) + get_local_size(0) - (get_local_id(0) + 1)];
-  dst[get_local_size(0) * (2 * get_group_id(0) + 1) + get_local_id(0)] = src[get_local_size(0) * (2 * get_group_id(0) + 1) + get_local_size(0) - (get_local_id(0) + 1)];
-}
diff --git a/kernels/compiler_group_size.cl b/kernels/compiler_group_size.cl
deleted file mode 100644
index 4e2c333..0000000
--- a/kernels/compiler_group_size.cl
+++ /dev/null
@@ -1,29 +0,0 @@
-__kernel void
-compiler_group_size(__global unsigned int *dst)
-{
-  uint idx = (uint)get_global_id(0);
-  uint idy = (uint)get_global_id(1);
-  uint idz = (uint)get_global_id(2);
-  uint size_x = (uint)get_global_size(0);
-  uint size_y = (uint)get_global_size(1);
-
-  dst[idz*size_x*size_y + idy*size_x + idx] = idz*size_x*size_y + idy*size_x +idx;
-}
-
-struct xyz{
-  unsigned short b;
-  unsigned short e;
-  unsigned int o;
-};
-
-__kernel void
-compiler_group_size4(__global struct xyz *src, __global unsigned int *dst, unsigned int num, unsigned int c)
-{
-  uint idx = (uint)get_global_id(0);
-  if(idx>=num)
-    return;
-  struct xyz td = src[idx];
-  for(unsigned x = td.b;x<=td.e;x++)
-    dst[td.o+x] = c;
-}
-
diff --git a/kernels/compiler_hadd.cl b/kernels/compiler_hadd.cl
deleted file mode 100644
index fe50195..0000000
--- a/kernels/compiler_hadd.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void compiler_hadd(global int *src1, global int *src2, global int *dst) {
-  int i = get_global_id(0);
-  dst[i] = hadd(src1[i], src2[i]);
-}
diff --git a/kernels/compiler_if_else.cl b/kernels/compiler_if_else.cl
deleted file mode 100644
index 7ae8f99..0000000
--- a/kernels/compiler_if_else.cl
+++ /dev/null
@@ -1,14 +0,0 @@
-__kernel void
-compiler_if_else(__global int *src, __global int *dst)
-{
-  int id = (int)get_global_id(0);
-  dst[id] = src[id];
-  if (dst[id] >= 0) {
-    dst[id] = src[id+1];
-    src[id] = 1;
-  } else {
-    dst[id]--;
-    src[id] = 2;
-  }
-}
-
diff --git a/kernels/compiler_insert_to_constant.cl b/kernels/compiler_insert_to_constant.cl
deleted file mode 100644
index f94c5c3..0000000
--- a/kernels/compiler_insert_to_constant.cl
+++ /dev/null
@@ -1,6 +0,0 @@
-__kernel void compiler_insert_to_constant(__global int4 *dst) {
-  int4 value = (int4)(0,1,2,3);
-  value.z = get_global_id(0);
-  dst[get_global_id(0)] = value;
-}
-
diff --git a/kernels/compiler_insert_vector.cl b/kernels/compiler_insert_vector.cl
deleted file mode 100644
index 0f0e20f..0000000
--- a/kernels/compiler_insert_vector.cl
+++ /dev/null
@@ -1,11 +0,0 @@
-__kernel void
-compiler_insert_vector(__global int4 *out )
-{
-    int tid = get_global_id(0);
-    int4 output = (int4)(0, 0, 0, 1); //black
-    if (tid > 16)
-    {
-        output = (int4)(tid, tid, 1, 1);
-    }
-    out[tid] = output;
-}
diff --git a/kernels/compiler_insn_selection_masked_min_max.cl b/kernels/compiler_insn_selection_masked_min_max.cl
deleted file mode 100644
index 5b4be57..0000000
--- a/kernels/compiler_insn_selection_masked_min_max.cl
+++ /dev/null
@@ -1,11 +0,0 @@
-__kernel void
-compiler_insn_selection_masked_min_max(__global float* src, __global float* dst)
-{
-  int id = (int)get_global_id(0);
-  if (get_local_id(0) > 5)
-    dst[id] = max(src[id], src[7]);
-  else
-    dst[id] = min(src[id], src[10]);
-}
-
-
diff --git a/kernels/compiler_insn_selection_max.cl b/kernels/compiler_insn_selection_max.cl
deleted file mode 100644
index 762de2b..0000000
--- a/kernels/compiler_insn_selection_max.cl
+++ /dev/null
@@ -1,7 +0,0 @@
-__kernel void
-compiler_insn_selection_max(__global float* src, __global float* dst)
-{
-  int id = (int)get_global_id(0);
-  dst[id] = max(src[id], src[0]);
-}
-
diff --git a/kernels/compiler_insn_selection_min.cl b/kernels/compiler_insn_selection_min.cl
deleted file mode 100644
index 6800eaf..0000000
--- a/kernels/compiler_insn_selection_min.cl
+++ /dev/null
@@ -1,7 +0,0 @@
-__kernel void
-compiler_insn_selection_min(__global float* src, __global float* dst)
-{
-  int id = (int)get_global_id(0);
-  dst[id] = min(src[id], src[0]);
-}
-
diff --git a/kernels/compiler_integer_builtin.cl b/kernels/compiler_integer_builtin.cl
deleted file mode 100644
index 4faacd6..0000000
--- a/kernels/compiler_integer_builtin.cl
+++ /dev/null
@@ -1,23 +0,0 @@
-/* test OpenCL 1.1 Integet Built-in Functions (section 6.11.3) */
-__kernel void compiler_integer_builtin() {
-  int i = 0, i1 = -1, i2 = -2;
-  unsigned u = 1, u1 = 2, u2 = 3;
-  i = CHAR_MAX;
-  i = abs(u);
-  i = abs_diff(u1, u2);
-  i = add_sat(i1, i2);
-  i = hadd(i1, i2);
-  i = rhadd(i1, i2);
-  i = clz(i);
-  i = clamp(i, i1, i2);
-  i = mad_hi(i, i1, i2);
-  i = mad_sat(i, i1, i2);
-  i = max(i1, i2);
-  i = min(i1, i2);
-  i = mul_hi(i1, i2);
-  i = rotate(i1, i2);
-  i = sub_sat(i1, i2);
-  long l = upsample(i, u);
-  i = mad24(i, i1, i2);
-  i = mul24(i1, i2);
-}
diff --git a/kernels/compiler_integer_division.cl b/kernels/compiler_integer_division.cl
deleted file mode 100644
index 146daa0..0000000
--- a/kernels/compiler_integer_division.cl
+++ /dev/null
@@ -1,6 +0,0 @@
-__kernel void
-compiler_integer_division(__global int *src, __global int *dst, int x)
-{
-  dst[get_global_id(0)] = src[get_global_id(0)] / x;
-}
-
diff --git a/kernels/compiler_integer_remainder.cl b/kernels/compiler_integer_remainder.cl
deleted file mode 100644
index 73558cb..0000000
--- a/kernels/compiler_integer_remainder.cl
+++ /dev/null
@@ -1,6 +0,0 @@
-__kernel void
-compiler_integer_remainder(__global int *src, __global int *dst, int x)
-{
-  dst[get_global_id(0)] = src[get_global_id(0)] % x;
-}
-
diff --git a/kernels/compiler_julia.cl b/kernels/compiler_julia.cl
deleted file mode 100644
index 21672f6..0000000
--- a/kernels/compiler_julia.cl
+++ /dev/null
@@ -1,144 +0,0 @@
-typedef float2 vec2;
-typedef float3 vec3;
-typedef float4 vec4;
-
-#define sin native_sin
-#define cos native_cos
-#define tan native_tan
-#define normalize fast_normalize
-#define length fast_length
-#define mod fmod
-#define time 1.f
-
-inline vec3 reflect(vec3 I, vec3 N) {
-  return I - 2.0f * dot(N, I) * N;
-}
-
-inline uint pack_fp4(float4 u4) {
-  uint u;
-  u = (((uint) u4.x)) |
-      (((uint) u4.y) << 8) |
-      (((uint) u4.z) << 16);
-  return u;
-}
-
-#define OUTPUT do {\
-  const vec4 final = 255.f * max(min(gl_FragColor, (vec4)(1.f)), (vec4)(0.f)); \
-  dst[get_global_id(0) + get_global_id(1) * w] = pack_fp4(final); \
-} while (0)
-
-inline __attribute__((always_inline))
-float jinteresct(vec3 rO, vec3 rD, vec4 c, float *ao)
-{
-    float mz2,md2,dist,t;
-    float res=1000.0f;
-    vec4 z,nz;
-    int update_ao = 1;
-    *ao = 0.0f;
-    for(t=0.0f;t<6.0f;t+=dist)
-    {
-        if (update_ao) *ao += 1.0f;
-        vec3 p=rO+t*rD;
-
-        // calc distance
-        z=(vec4)(p,(c.y+c.x)*.3f);
-        md2=1.0f;
-        mz2=dot(z,z);
-
-        for(int i=0;i<9;i++)
-        {
-             // |dz|^2 -> 4*|dz|^2
-             //if (mz2 <= 4.0f)
-             {
-             md2*=4.0f*mz2;
-             // z -> z2 + c
-             nz.x=z.x*z.x-dot(z.yzw,z.yzw);
-             nz.yzw=2.0f*z.x*z.yzw;
-             z=nz+c;
-             mz2=dot(z,z);
-            }
-             if(mz2>4.0f)
-                 break;
-         }
-
-         dist=0.25f*sqrt(mz2/md2)*log(mz2);
-         if(dist<0.0005f)
-         {
-             res=t;
-             break;
-         }
-         t+= dist;
-    }
-
-    return res;
-}
-
-#if 1
-inline __attribute__((always_inline))
-vec3 calcNormal(vec3 p, vec4 c)
-{
-    vec4 nz,ndz,dz[4];
-
-    vec4 z=(vec4)(p,(c.y+c.x)*.3f);
-
-    dz[0]=(vec4)(1.0f,0.0f,0.0f,0.0f);
-    dz[1]=(vec4)(0.0f,1.0f,0.0f,0.0f);
-    dz[2]=(vec4)(0.0f,0.0f,1.0f,0.0f);
-  //dz[3]=(vec4)(0.0f,0.0f,0.0f,1.0f);
-
-    for(int i=0;i<9;i++)
-    {
-        vec4 mz = (vec4)(z.x,-z.y,-z.z,-z.w);
-        // derivative
-        dz[0]=(vec4)(dot(mz,dz[0]),z.x*dz[0].yzw+dz[0].x*z.yzw);
-        dz[1]=(vec4)(dot(mz,dz[1]),z.x*dz[1].yzw+dz[1].x*z.yzw);
-        dz[2]=(vec4)(dot(mz,dz[2]),z.x*dz[2].yzw+dz[2].x*z.yzw);
-        //dz[3]=(vec4)(dot(mz,dz[3]),z.x*dz[3].yzw+dz[3].x*z.yzw);
-
-        // z = z2 + c
-        nz.x=dot(z, mz);
-        nz.yzw=2.0f*z.x*z.yzw;
-        z=nz+c;
-
-        if(dot(z,z)>4.0f)
-            break;
-    }
-
-    return normalize((vec3)(dot(z,dz[0]),dot(z,dz[1]),dot(z,dz[2])));
-}
-#endif
-
-__kernel void compiler_julia(__global uint *dst, float resx, float resy, int w)
-{
-    vec2 gl_FragCoord = (vec2)(get_global_id(0), get_global_id(1));
-    vec2 p=-1.0f+2.0f*gl_FragCoord.xy/(vec2)(resx,resy);
-    vec3 color = (vec3)(0.0f);
-    vec4 cccc = (vec4)( .7f*cos(.5f*time), .7f*sin(.3f*time), .7f*cos(1.0f*time), 0.0f );
-    vec3 edir = normalize((vec3)(p,1.0f));
-    vec3 wori = (vec3)(0.0f,0.0f,-2.0f);
-
-    float ao;
-    float t = jinteresct(wori,edir,cccc,&ao);
-    if(t<100.0f)
-    {
-#if 1
-        vec3 inter = wori + t*edir;
-        vec3 nor = calcNormal(inter,cccc);
-
-        float dif = .5f + .5f*dot( nor, (vec3)(0.57703f) );
-        ao = max( 1.0f-ao*0.005f, 0.0f);
-
-        color = (vec3)(1.0f,.9f,.5f)*dif*ao +  .5f*(vec3)(.6f,.7f,.8f)*ao;
-#else
-        color = (vec3)(0.5f,0.0f,0.0f);
-#endif
-    }
-    else
-    {
-        color = (vec3)(0.5f,0.51f,0.52f)+(vec3)(0.5f,0.47f,0.45f)*p.y;
-    }
-
-    vec4 gl_FragColor = (vec4)(color,1.0f);
-    OUTPUT;
-}
-
diff --git a/kernels/compiler_julia_function_call.cl b/kernels/compiler_julia_function_call.cl
deleted file mode 100644
index 7b3aa46..0000000
--- a/kernels/compiler_julia_function_call.cl
+++ /dev/null
@@ -1,142 +0,0 @@
-typedef float2 vec2;
-typedef float3 vec3;
-typedef float4 vec4;
-
-#define sin native_sin
-#define cos native_cos
-#define tan native_tan
-#define normalize fast_normalize
-#define length fast_length
-#define mod fmod
-#define time 1.f
-
-vec3 reflect(vec3 I, vec3 N) {
-  return I - 2.0f * dot(N, I) * N;
-}
-
-uint pack_fp4(float4 u4) {
-  uint u;
-  u = (((uint) u4.x)) |
-      (((uint) u4.y) << 8) |
-      (((uint) u4.z) << 16);
-  return u;
-}
-
-#define OUTPUT do {\
-  const vec4 final = 255.f * max(min(gl_FragColor, (vec4)(1.f)), (vec4)(0.f)); \
-  dst[get_global_id(0) + get_global_id(1) * w] = pack_fp4(final); \
-} while (0)
-
-float jinteresct(vec3 rO, vec3 rD, vec4 c, float *ao)
-{
-    float mz2,md2,dist,t;
-    float res=1000.0f;
-    vec4 z,nz;
-    int update_ao = 1;
-    *ao = 0.0f;
-    for(t=0.0f;t<6.0f;t+=dist)
-    {
-        if (update_ao) *ao += 1.0f;
-        vec3 p=rO+t*rD;
-
-        // calc distance
-        z=(vec4)(p,(c.y+c.x)*.3f);
-        md2=1.0f;
-        mz2=dot(z,z);
-
-        for(int i=0;i<9;i++)
-        {
-             // |dz|^2 -> 4*|dz|^2
-             //if (mz2 <= 4.0f)
-             {
-             md2*=4.0f*mz2;
-             // z -> z2 + c
-             nz.x=z.x*z.x-dot(z.yzw,z.yzw);
-             nz.yzw=2.0f*z.x*z.yzw;
-             z=nz+c;
-             mz2=dot(z,z);
-            }
-             if(mz2>4.0f)
-                 break;
-         }
-
-         dist=0.25f*sqrt(mz2/md2)*log(mz2);
-         if(dist<0.0005f)
-         {
-             res=t;
-             break;
-         }
-         t+= dist;
-    }
-
-    return res;
-}
-
-#if 1
-vec3 calcNormal(vec3 p, vec4 c)
-{
-    vec4 nz,ndz,dz[4];
-
-    vec4 z=(vec4)(p,(c.y+c.x)*.3f);
-
-    dz[0]=(vec4)(1.0f,0.0f,0.0f,0.0f);
-    dz[1]=(vec4)(0.0f,1.0f,0.0f,0.0f);
-    dz[2]=(vec4)(0.0f,0.0f,1.0f,0.0f);
-  //dz[3]=(vec4)(0.0f,0.0f,0.0f,1.0f);
-
-    for(int i=0;i<9;i++)
-    {
-        vec4 mz = (vec4)(z.x,-z.y,-z.z,-z.w);
-        // derivative
-        dz[0]=(vec4)(dot(mz,dz[0]),z.x*dz[0].yzw+dz[0].x*z.yzw);
-        dz[1]=(vec4)(dot(mz,dz[1]),z.x*dz[1].yzw+dz[1].x*z.yzw);
-        dz[2]=(vec4)(dot(mz,dz[2]),z.x*dz[2].yzw+dz[2].x*z.yzw);
-        //dz[3]=(vec4)(dot(mz,dz[3]),z.x*dz[3].yzw+dz[3].x*z.yzw);
-
-        // z = z2 + c
-        nz.x=dot(z, mz);
-        nz.yzw=2.0f*z.x*z.yzw;
-        z=nz+c;
-
-        if(dot(z,z)>4.0f)
-            break;
-    }
-
-    return normalize((vec3)(dot(z,dz[0]),dot(z,dz[1]),dot(z,dz[2])));
-}
-#endif
-
-__kernel void compiler_julia(__global uint *dst, float resx, float resy, int w)
-{
-    vec2 gl_FragCoord = (vec2)(get_global_id(0), get_global_id(1));
-    vec2 p=-1.0f+2.0f*gl_FragCoord.xy/(vec2)(resx,resy);
-    vec3 color = (vec3)(0.0f);
-    vec4 cccc = (vec4)( .7f*cos(.5f*time), .7f*sin(.3f*time), .7f*cos(1.0f*time), 0.0f );
-    vec3 edir = normalize((vec3)(p,1.0f));
-    vec3 wori = (vec3)(0.0f,0.0f,-2.0f);
-
-    float ao;
-    float t = jinteresct(wori,edir,cccc,&ao);
-    if(t<100.0f)
-    {
-#if 1
-        vec3 inter = wori + t*edir;
-        vec3 nor = calcNormal(inter,cccc);
-
-        float dif = .5f + .5f*dot( nor, (vec3)(0.57703f) );
-        ao = max( 1.0f-ao*0.005f, 0.0f);
-
-        color = (vec3)(1.0f,.9f,.5f)*dif*ao +  .5f*(vec3)(.6f,.7f,.8f)*ao;
-#else
-        color = (vec3)(0.5f,0.0f,0.0f);
-#endif
-    }
-    else
-    {
-        color = (vec3)(0.5f,0.51f,0.52f)+(vec3)(0.5f,0.47f,0.45f)*p.y;
-    }
-
-    vec4 gl_FragColor = (vec4)(color,1.0f);
-    OUTPUT;
-}
-
diff --git a/kernels/compiler_julia_no_break.cl b/kernels/compiler_julia_no_break.cl
deleted file mode 100644
index 5c357b1..0000000
--- a/kernels/compiler_julia_no_break.cl
+++ /dev/null
@@ -1,145 +0,0 @@
-typedef float2 vec2;
-typedef float3 vec3;
-typedef float4 vec4;
-
-#define sin native_sin
-#define cos native_cos
-#define tan native_tan
-#define normalize fast_normalize
-#define length fast_length
-#define mod fmod
-#define time 1.f
-
-inline vec3 reflect(vec3 I, vec3 N) {
-  return I - 2.0f * dot(N, I) * N;
-}
-
-inline uint pack_fp4(float4 u4) {
-  uint u;
-  u = (((uint) u4.x)) |
-      (((uint) u4.y) << 8) |
-      (((uint) u4.z) << 16);
-  return u;
-}
-
-#define OUTPUT do {\
-  const vec4 final = 255.f * max(min(gl_FragColor, (vec4)(1.f)), (vec4)(0.f)); \
-  dst[get_global_id(0) + get_global_id(1) * w] = pack_fp4(final); \
-} while (0)
-
-inline __attribute__((always_inline))
-float jinteresct(vec3 rO, vec3 rD, vec4 c, float *ao)
-{
-    float mz2,md2,dist,t;
-    float res=1000.0f;
-    vec4 z,nz;
-    int update_ao = 1;
-    *ao = 0.0f;
-    t = 0.f;
-    for (int j = 0; j < 100; ++j)
-    {
-        if (update_ao) *ao += 1.0f;
-        vec3 p=rO+t*rD;
-
-        // calc distance
-        z=(vec4)(p,(c.y+c.x)*.3f);
-        md2=1.0f;
-        mz2=dot(z,z);
-
-        for(int i=0;i<9;i++)
-        {
-             // |dz|^2 -> 4*|dz|^2
-             //if (mz2 <= 4.0f)
-             {
-             md2*=4.0f*mz2;
-             // z -> z2 + c
-             nz.x=z.x*z.x-dot(z.yzw,z.yzw);
-             nz.yzw=2.0f*z.x*z.yzw;
-             z=nz+c;
-             mz2=dot(z,z);
-            }
-             if(mz2>4.0f)
-                 break;
-         }
-
-         dist=0.25f*sqrt(mz2/md2)*log(mz2);
-         if(dist<0.0005f)
-         {
-             res=t;
-             update_ao = 0;
-         }
-         t+= dist;
-    }
-
-    return res;
-}
-
-#if 1
-inline __attribute__((always_inline))
-vec3 calcNormal(vec3 p, vec4 c)
-{
-    vec4 nz,ndz,dz[4];
-
-    vec4 z=(vec4)(p,(c.y+c.x)*.3f);
-
-    dz[0]=(vec4)(1.0f,0.0f,0.0f,0.0f);
-    dz[1]=(vec4)(0.0f,1.0f,0.0f,0.0f);
-    dz[2]=(vec4)(0.0f,0.0f,1.0f,0.0f);
-  //dz[3]=(vec4)(0.0f,0.0f,0.0f,1.0f);
-
-    for(int i=0;i<9;i++)
-    {
-        vec4 mz = (vec4)(z.x,-z.y,-z.z,-z.w);
-        // derivative
-        dz[0]=(vec4)(dot(mz,dz[0]),z.x*dz[0].yzw+dz[0].x*z.yzw);
-        dz[1]=(vec4)(dot(mz,dz[1]),z.x*dz[1].yzw+dz[1].x*z.yzw);
-        dz[2]=(vec4)(dot(mz,dz[2]),z.x*dz[2].yzw+dz[2].x*z.yzw);
-        //dz[3]=(vec4)(dot(mz,dz[3]),z.x*dz[3].yzw+dz[3].x*z.yzw);
-
-        // z = z2 + c
-        nz.x=dot(z, mz);
-        nz.yzw=2.0f*z.x*z.yzw;
-        z=nz+c;
-
-        if(dot(z,z)>4.0f)
-            break;
-    }
-
-    return normalize((vec3)(dot(z,dz[0]),dot(z,dz[1]),dot(z,dz[2])));
-}
-#endif
-
-__kernel void compiler_julia_no_break(__global uint *dst, float resx, float resy, int w)
-{
-    vec2 gl_FragCoord = (vec2)(get_global_id(0), get_global_id(1));
-    vec2 p=-1.0f+2.0f*gl_FragCoord.xy/(vec2)(resx,resy);
-    vec3 color = (vec3)(0.0f);
-    vec4 cccc = (vec4)( .7f*cos(.5f*time), .7f*sin(.3f*time), .7f*cos(1.0f*time), 0.0f );
-    vec3 edir = normalize((vec3)(p,1.0f));
-    vec3 wori = (vec3)(0.0f,0.0f,-2.0f);
-
-    float ao;
-    float t = jinteresct(wori,edir,cccc,&ao);
-    if(t<100.0f)
-    {
-#if 1
-        vec3 inter = wori + t*edir;
-        vec3 nor = calcNormal(inter,cccc);
-
-        float dif = .5f + .5f*dot( nor, (vec3)(0.57703f) );
-        ao = max( 1.0f-ao*0.005f, 0.0f);
-
-        color = (vec3)(1.0f,.9f,.5f)*dif*ao +  .5f*(vec3)(.6f,.7f,.8f)*ao;
-#else
-        color = (vec3)(0.5f,0.0f,0.0f);
-#endif
-    }
-    else
-    {
-        color = (vec3)(0.5f,0.51f,0.52f)+(vec3)(0.5f,0.47f,0.45f)*p.y;
-    }
-
-    vec4 gl_FragColor = (vec4)(color,1.0f);
-    OUTPUT;
-}
-
diff --git a/kernels/compiler_julia_no_break_ref.bmp b/kernels/compiler_julia_no_break_ref.bmp
deleted file mode 100644
index e17f666005a4fb2797cf84a14fca429674c9d659..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 196662
zcmeFa2Y6h^m8L!W?;kg(NjtkcJDX<KGxj(tQVbx8oY4Udbj}TQPRNa%bIzH_07)={
zIg?_J5|t<_=V(b|%N`5=+q$0KUP__^Y1xkfKE?agty{P5#p$|Lr_TA#R}l#h{J}r|
zgW$gh`2SbI%s&$T|D!+nli(TugzG|HIR5K@@&~JFRRSwk0{`Zp{=sTmmB5OXz`y-x
z|7bO>N?^rG;NSi8|6?_+N?^rG;1B=#KVD6%5?HYk_ at jUEf3Bug39MKN{PDm1zgE+#
z1XipB{^Vc%->Yd=0xMPmfBLWgpVhP~ft4$PfAjzT>1tY)z)F?CzyG)Y-)dTwz>1Z?
zpZ&XkvYJ*Uuwo_fAO7&4uBKH9tXK*B$3OaKt7%mND^>#k>5u>UYFd at Rij}~h|H;2t
zO{)@Eu at d;tfBG+1)2akktOWkz-~X%Cv?_s>D}g`z*MG5^Rwb}fCGcPV?BA at WRSB$E
z3H;ap at NZYsssvW71peE9{CBHqRRSwk0{{I#{o!g_mB5OX!2kI3KUz(z5?HYk_{;zN
z$E#^o0xMPmfAtrCvYJ*Uuwo_fKmW_0uBKH9tXK(r<G=p<)wC*sl`Db&_GjN%O{)@E
zsS^0>|Nb9V)4fX|Ve^_~QPRD)v)aPfEP=oIAOCSR-J=9D-R`oHVHzpfzULmBTD|>i
zmcTdv@;|Mndyzof{zJQeyi5y)v)e=MSlfG=4<5~`YYdgFW_~v%@U6f4^VM`O5@<bf
zwsvwNyaj1Ww8UyF9~lWRT+RP(O5kt*=YL*Jzn%orrAcy8oGfY6#tn~}ii>F^u&|Tk
z_|v!L(gdMRXG`0!*ZAsPUylU7{f)m^O~1ATirShpk|VQ=iz;>>bPtZvPQu2AErt2p
z-u at wZaaw%&)by|2`09;cg9N_wjsLQmehmr8)03m)BDa71+2T7tY&>uz)Ph2<DxaE3
zPuxgJYV_Jr`D*5OQv%=p>;Jl%?jnKc^$%`&;f;!^>9H5z$~0<2HTN$si(=P1bDUbI
zEmTM*%c>u^dAn|M3;Bh&eptD<C;aMa{&!6R-}{^Ywwk_50wu#Ei+{H)TrHa0ZmMm}
z8yXc(H$40uMOt*AskUr<i%{a}8zMvhSEVPCQ7EO~`{rMgsn~N^sIYqcU6jB#|NHk=
z)0as=oUqYiH}CyyIV7L*#l1paEl;zTl~ztnShBPuPu&&@6BY7oS9U>Ttx6hCi8yw>
zIBq?enghp#3crI#jY%Vkk8l;{xC(sf2@(G4iqgIwg*ro=xXD$No1U~;9Jk?1Ut5!H
zk}K04#f8>9Ut0V|TfYBGtNrd5e*atlV>NxL1adpO+V(D?-gKV3+H>uhqOl38d3y(n
z7ItRYP5J!;d?3Xw4dM67(~}CjI<~&{Hia5>`q+)9vKm_}cI*wW^Sh8&t7SDavzyjF
znA_bWce&O-{9RK)e#gZpc(?8EeWDP>KEAwM($(I5;!K7pHd7Rv<*>vhM8`xttTC#6
zHC1`d4YnM2hA2*_mrLR|WVx)fue at b;X3Ioz>B*6z*mb`Pf8#It4nO$Yzg$gUlz_W9
z|G at IH&g~3cYCe6bde=VTbp0dWwfh`#5f3l@=(A7-GFfhG<IY_<WrgImD(T7PWlv9k
zU}7e`&TluLE{^8~EKW;dYtybzK1+(-kg)NQ_=tyDuxk_|Zy+!9dTLqHiRI<!#Mm7l
z{WLQzMxB|WQ%gfv at 5s0c{Jzq{{DvCJE5}Av3Q at Kz>yA3Vo2L(a`>$5h9TLdz>})xB
zbma2&k>_6zztnNzI;SS9!Q^#m<tb*PqG9KrP=&zOT~5Da;?~PbQ4EFn1 at b%EOBZ(J
z_V$PB{B|>=&%ajG(WWmcO^IHs$Ve&fYVSF5YWUK%hJ^*I$0iKjiII;fBypN-W5Mj=
zruC2LRT8ZtEk&H{D=V_OvMkv;wbQQDWH9&XO=^QlrBO*kf7Gsz|6Z#S_nkgV$<oi3
z73oQ(J)NPeznhr{zw<v=(;X6EFzh*ctajJZ9p&DRuIdBFtxj`MZ%@ymLp=u%&Aj$r
zs7~(qjNO&R>ENj|9E+OjswSrz4xjWiw}k5awlXR4o2-7<!{7fVop#~fPsVS*@l|h9
z)Y8a`K%N%k%5~*5*01@&w~YEsol+DXwPEk4%bud#ncJ_nF6~cAj*&=`Qc~ia`98Tc
zQ6)=CihOLtx`zj!e$iW;?=LOTYh^s5aoaXeQI0w@^{XEDTQ7g;yWdz%;S%ULdZK1_
zE+c7Ecwu-xBYAVnfx{gK59gE?gqN%H@)`M+;@B-$Z%|GP+kg1ej&oOCwYA~ZzW%(z
zq~oD_v$p%(WvsY&d4a0^$1>F!^+!&*i*iMA>siQ4lA}^2sTx_5)nRfsHd at LnFmTbs
zWhqexr&VK6W at e<x(vufne-|A|nVygwxu&SQOYgL4<f(J7zlST3$0^ejwQA{Ip8H$8
z^zirodNqYhK$VfKl*G-y^ah0yk9 at cL@=b4NcX$Q*Kc~`!2$eV{yxi`yPuzHlPk_QK
zhdCzV5i-5ko^jXJhFANV^O<rnPaJ*j<=)Fr=JXGJ)zeiLgTZQ&nGMk!9!ieiBua~y
zXtCpN;uA=V+rV9VMVd+ymp?X1p5eV}uwRv#N`B^z4~jb54cU5mMq1s}WR~5SnZgoy
zeQLT0&tQIanO-eTiQj1V+BmJ+vgNB@;I~!&$oKzdHH9RQo)YEC^VmIBO7P@%T)Ii7
zdf(B)`5k1UBG+@&SxpX~Jtbz{#I+|l4JCjO6 at A^=*;+~z;#iiGWQLx8F{iCHROf5X
z=xmmxgv|wG6Fk at 6)&Esb&&U)_z4ks=Q{y-3EV|;pzKIuJ7b-KVtE35{xDA|^wA8cY
zS^Lm;=3aWkmE)ABMAG5W`pWkl;%fKFGZu#>Gb2?gP2kT at iwQ0<H1=%f4!b)$COV>a
zVvDEHFHMRRTK*k5KKg at iuBMO#w!HY(<nyms?Z%i*k5QOaR+_1im(47YPfm#3yx~#S
zbcLPm{-PYcN;LK4)1e#5n9S;mkzutYmb at HAND>#56gTwD%ViUj;nlvjywdGf%0<%T
zNLgxhFr`F!OA3xHFT0BiG%88xHA=_EBi28X6dR#6Y05 at M7C-q+xD>PLQFXSt{^%LG
zI8L3OAW7Wx*n{70nw>6fZ+6yHSM>K}TlG3cTK at 2O)BeNF`wwF at NS8}$XJ)i|h12hJ
z=Xv;Qq)D5TB&jBYobScrvG4!cGI?8$EA;f=e&&I1J-V9yK>`l1jkVsP<>j{X*Gnd6
z+*K8VaN;*TDoIa?jd)m*8dW_#t(T`-v$Zp?z7sAwXP&2Z&t7bv6dH6HSy>vXT0Zp5
zOD%_vg;)D}^62ebKls$z+{WWd7x#u9y7bd!hICZ8%8_A(B%%HMbuOi)#QGZQCtvyb
zpOX-`Ia90XyY@`+wmmXMdd%jv87WZ(HRTy;v9q^cRET1P)(o0-GBgruJe0Be93Vgn
zYAY}kNl9u2%OVV_GI2uhvEw5bFXJ`{RsQW});##Pt4WXmUBVm41=65#ShE9#3biaG
z8KBNdF&i?K>58<diCeGW9;zJ~2wfF2x#dNpSD!e$yv%8~&9L{ApB7Kfp#KbBfBKG^
zztK~LO4fVzX=9cyJ!z9pE5lWdVupP_x4JC!+#MhMSffbe6g!Vps|t)wgf7KIuCtbx
zZ(8&Hw3HZ&-yP`dE1#S$937V=L>RT{EMs+<$ykGg`c|91c63OmNe|r~%H-Bn51qYG
zP**8Q+{`C1c;;;V#CZGeUDh0Ter+Y+Li6_Rp~}C-%wrFIdo_h5Fn;qnol?wc+@>}2
z?|vebr$nt)sL)&2xNE9LFI}Oq|McS}&2?mK?L9&rjw*31+QrDZ3*;Fa$uu514i;|W
z#WzEBe$yFuZH>{Q$#A-OP)gKeX)){2!-1jl^3udjnW at oOrMQ$NlW at ePm0w$7b!CO#
zDlRFmZ0Ekn^$!`muDq`9f}Wm*4?Y#HZhz}TcdiRWN7+DMX=}sC`HPhA`S_;>jZ~YN
z5^5nlQ!zZ)I5X|Z_o4;yF&<f7ZrQfg=*aR_l?QFAinQ>`zpeb*hrhF$1PN3O4xs#W
zE-eLyM*y^h#F8ONlt~iP(_(9OE@{j<%F!R{w~UhUjZKHDxqNo==>Hsn#ue6AwVpcP
zcjMXFH$Dv2`Hg0DMiuRY*crZZqi)+``_YrLZ+|rW>`UV>zBzRHx;a}fidhH9$DQwe
z^!wk8TK7QA`Ug!$WqD5rS|2w)`sf23V at 0XD{CrDsfH%M6Z4Cx_VO^yxC34 at 7KD)TQ
zEL_zo)5tK7+)-ILt(lzk6nHfm$v}xvq6}*3w%6Zr6z2G<%k>&5Qu at -nzRtpR4}W(x
zApxUNiE$%4OG{p7Gw=EPWkD>dG3!9fa5OnAt~_@^TZ_r4kR)yP<hrPkGci}Ob4jSF
z7RQolS(xLflc(Ya?L2?2_xiK*?|dv&_>CS*`g+phBc at +`1OG)}>+XoP58Uy%$h8k_
zSo4Eyr-kW&<#}0O4 at ORLYOG$9t`x^<GE?F<Jd~EONug6lu6r;!ZsQ%d3#UvX7<hFW
znOUEKMN}xvGOLgVV)@crN_x9>3XxtV#+oXZB;;2XE7PK#g*l8cOaT^)`b+Qn+6vb{
z^1aoB1a|*)xps1L=*(G9Q<L7J4ao%cRigs}w!W~V-CdYdHL=C0lVwN}diL+9PUDGl
z?H6v4VU~C2IJ6nbZQHkUT0PL)xOHpqm7CcA=im7x)Y at +-GjQQ*eq(Lz+`Of_rswjL
zJcV^f=vhh8>u^!24Jy6OtaoH5Wk{JLROtyAtTa}$-fF_opPCYD(q|?|2bCq_msJK8
zOa9b2EJOcW_t^I4`<nDbl$p`<7Xyto!d3b(8Jj2jj>@4^Z+QS6DKkA8$GTRV*|l$J
z_SxH69$UlA)WC_8e2k%*Uw>x9qu*amNB|r!6EwpV`QFp#LNZavQsfz_U>)0!p3r6{
zx9>lwl_grOx_zJglsau^ue6=JN(TEzWp7t$TjSN`WlnL89bI1Tzy563r6(BwL#_QL
zGMz_H4qUj>d-h`4+_v`PXPiBQZ6|;J{y{L0QfhK$JBkZ at bv60zZAE>3MFWGbre+ip
zg*Z+sP5`9jC@(E(ZImfxAU`Fa12};|s8muMVJXq;GSZX6Ut2DU%_}bg(qOk6^zszp
zk|)n)(lU?4hSv<wgQh5IsAl{J7Ughfq4{vtVAe1Nn2qxAnqPB1V$Ba$lRPb&Y2E3y
zcI?`j8oMDR5OI8jR*U+-$zWDbz5W3!+{4Sun)G;n`rV%{n;TkccJBuiM}56oQa3(g
z(nt%Y=0U;XDs^@B4Lo_P{p^+5H$MzDc;7Rij)$*4x#iiH7{F_`?Z~dJH+bE`Q_`i$
z^n7<kDc!zwbhKvc_NIM at +K!!WJ9VCr1nQv7*xgx5rGyWs at AwIWT9RK=o}MYrlq6#9
z0obg_NWln}8nYfJLin3A1<;MRzVtf7xKN&DQIlb15nk<%eDGPKn2gjY46w`{7L$?+
zDoqB~B#lyhN9C{WbmL<WtfrBRS6SJa4Vf*+PP>W=LIR<O=#4701z%+eh2>psAR!O^
zY}u$5bL!~m at waz$Uwt~5_gd>FCu~+-U~aK`ctD&K8JJ$6|AT*{|A!j9 at 0sRZd&Zx+
z9kp>yU~q8k`PXQ_@%Y)e&1+C#?1B8;mgchY at wy$m>GtSFUwk at xomQTj?R9X8B>>?7
zPM^(aH7PSwQF5g55z34dv_Zj>6}nv^P0*w#fbd}|oPFk&P>xR|ue?wrOAJ-JBeU(D
zk9n3#DZzSRF{_MP8IZZD=U;L9?8SJN&8j=<e?6xJL98ZRpY^k|ICl^Q>?I+AD5Qxx
zT_&nR&D11?{^DFB0>&<0uIz5(lo1|eB#6h>ljnRT`E9%RXw&0Mw(eq-!@gI!WAEV2
z+xept^KX9?YViJMq$yFI$4}8_Ej|3`DFE2OtrKH5py#_P%TaY0^IMLb?7sZu7oQsu
zy;)*5Qyyrl1F`e{Z~fKAbq`?y7&?32>9?btgW;DYVY-jNgP^zQm<j<%huXmxkdYF}
zVm7z5Kqxe*#AKKULv_BG0Wk<Z1eY0~0QG64=gb91fghiXKae9z*!aa;e&Z$U9@@0x
zQ%PShsFi_}r_$mgLedb$Z`7*O832{Cq`^zqD9>wZC>kEc0opjVg;P&=AIFjBUhTW_
zoWHDa at bPnv6Jw>@c4;z_+<ET0{YM9%e4bV3?CbA^+PsgM)<Z|jhKGW$(b`rzzD1lV
zmKwCl37hp!tFx*yzpuYyetYAQlT=8MNeDv=e{}rDM^fT8ic(`S0TKBKl0lXh8yC09
zYBOwH`ygX at L1za(TzWow4oRy?*BO+20^lfwcE~U+0CMhL+AEZ_Y}@85^tn9Q6E|*#
zKkJS>3t`|TnJH0<^uz-{S-!lyOa)wHm3>`GN&Fp^zlPJz>mOd>iFthY$3Jy?ZA+j0
zG~4eANrR!!U{uMHBh6Xboj+Q}Wm&ytyz%%sX>wH0z9p)8yLw&yBjYc=g^`nyaOU}!
z&n+*PZrg1($kmcK`rg13&t>PhM{nK=wRs;iSbK!la at yM)4<0AKe(l4AD;h0YtH)~3
zaoM~!Z2q7$(d3QU1}enGZc2#RAQC0WGDUKgOsP|#CIN5~#Yf=AGFuIj43WcSiH+Nw
zm8C82>&<psm9k_s8XRXvlUk_|OA<DM_NS?ZSKhMQjjWr at dKtJl;Z02XjH>=_J|E%q
zOOJuB&b*2MZ^aa#lc(4nCX3rf&=8I2GE*ce(O-JkZ>}(M!y_v^?fUS?%*EMRnk&o8
z?FSBpq`^wfWYJ=>BeIXevW}MK#l at WBJXJ=D!)c-fTy*}#+~lk8^;~%hRKRHrK8Fv}
z|7{KvHjS1OXZx-_&B`>?;C;-br^ZaZ{1y#Lq$$3x9t|$v!W_&gD!E9l5D}B5)ymM^
z3??;!UHMIQ<pX`*(n7g79#dqROhiP0(c`oR3f$FI-ugOyULIdJ%lves4*euum4Qh=
zJ~0Mhv)QUwNaFbfm>*#S$PmY4#wYBTN7HpdR#<FCj6cGkR#08a@&OaU-TzX(Qe=0U
z`KC~WFeRlWY{tFPzH<lW1?&d(b8~mU{r+B!ig<K|C$(Myrg8E0cM><R35f!83PZoq
ztPY}@2m2{EY9zy#uKEjodR at kWPnWZsJ3MV2f!S at -ufLCx)0^kwcW>LaK>v4ovYTh8
zF|+hud2;T}4?=C;$4sEROK44SPcY^ewlucyKd|T1<vl-Ho`3U$t?z!a^x5*<tM4>z
z-_9jRuG^HYC#V at rf>tFdXl}?I9uI$?OmRH+A3mA7gC{WFmUXo)zWH8aYC=v;rCy(z
znHt4ffE)P)SOwq$Zr!^Nk74b|Adz1{LAJg8y3iWqfH&U*UNpS%JMuW`a?1*Xz@(H&
zvp!Rsk+k<`%hX{CU^NlwY`dfWZ}c>J<C+zo3R)URE?!~qm&-*VQ6!}%;N>JS`gI*T
zLOF9p)3$9oSt2U#)Durxn_4|BEhY1d)31NfcIJ}BkU<^1qQ&z&7(&M`TxvgavHQ}E
zg?By<wRyiX)l*Y>Q}eWDvRj<_Uc#)T8fA7_siU!p!o;B8YJ(^#N|G8Y6~(7Z5~Sip
zu_!(%F{<<MQAeKF>UEU%cA?$f at jjU1v3F63^O_ at QAFVwrGB%P&sO6~uhp_yk3Stn(
zGz7sZbqcCVsB2V-F#HOw8I+=~rM;|xgwwA&@(88?P!r4r)X9)0>CGAdgepm_FObW!
z>#J_O at 8tm9S8~d)F6}>e$!L&kr13emRUuKxk~iZXWsL^u!R(8#Q;xb at zjVkz*t=E=
z`XxQf;;gSPp4&eC+WYV%=rWS1W7eh@&1_{r3-<rh7uz4dH2>BQ;}fDn&EA(x&D;X*
z0JHBpcEZxwBEdzcR;9$O$9{tA7T>fYGgTc_fikIs{T5u1)}T~tGx3GVWGT_n5so|$
zf$(TbVC0l~mGD*ooLa%B8I_#YjSXWBCS%UasT>=#paqFz(bz$aTHV>1;y9K?1XR-1
znHo$OGc{77k-Z=PWY>Ei3HiGmm;UZ&*#G&gSP18r7Zo?wn5 at QNK&3REsS_CCUGBZV
zmtr at sUCAkkODC+avSjZ^pAKHU8WIJ+3qLwb0HWQ|C at 2TM$gzHO$YRL!^p8ZwY;x4p
z6iv at hzxE!#eqLDtS37nr=8aEb8!u~XYCC<Qdg<`YtMA6gZw at tk@0qH}NmMM2He>Ol
zzqi&k&>&_RxQ4Qv!MVU!9>}Y!hLyLpucvx^3}Ocqm9C>Fx{sYCXuW!J3jC72Fc;dZ
z{<9ZhYcZKMrG339e!`341j$H^CSTdp!4X>xM{`l3zoJ;Dl3*sq_GPwcP`4N#_zH+>
ztm^G#?a+VZ2#x at u5uC#L6#;CU!s%BXA<)npl&qjx4!3UKiq5u&=op=hMTDoajBoR+
zZoI$cagpm*ayt0gGQ%~&EIZ%+AS4Hq%gS;u%Vt19&8Y|k%Qvk7(nDt8*fDReBQU#N
zq}SOiD{@CBre1v)rFYlcA2=MQ!4oH7K{To*t-E%k|Jw`vQ!l=uwdg}F-+QKdc21>}
z at A$jrjBE?IVpRI3#U1Sj4`Z0^zww;Veq`i&u{>Spbr+0`QDUyCbN3CAVSAd;3pDK7
zqcCcTSTq=wtZEZCJ)$ycS-s-y!*G;s)loC2I9I6Ouwz%Y!;F2BPe7{>**sP}BYXmK
zrL?4}R*@EC(aXv^nuW>+m1x_`ZxHqvde)a_n&)O1?O8sc1+jw2EzMVErV)mQPQ_P7
z7}1yBb>9o)qt>tF#A>dry}5d at H$#>hl7m7c*DA&6x{OW)`caOSS~WI8X6}VonkL7~
zx9!GHU at a?!QDNexx3C>GPHw5{?U;G$8GBnNqu=ziFEk%JJ@)kN+1K99^0`7S-(yB+
z(x{7y3BaKpLRz-H_esg{@cjEf&KceknAu7p26K at l85e-RrI}Nu$L;UwFW<h~-9G{o
z#TTCrLeK25(3unCHz#a*gl_ at O90mYt`iuM^x`S<Qcr-<)%dM%<se at Ahah<RLnX<I3
zg40u at 89I=X%WGAoMWrQ0CC5eNSCxn~%9`=fFFx*$lERvDAVjPn49YZ%K|cG++rVzU
z1s+cM7TWggxugDX;xr*@!%9vy6I=REoxVm?Y-v$Q4rmUn2!OjQrSWaMcT>({4Lm0q
zpzNJHcU0}#M?SkGkeQh_^302#d=KCUmVtrVa${BP$k}r}hmX|lKQj5k>+^5_uxxZR
z)bc%Ma+(^UP at s{j at iFZ4lP|sLZfULEy}xeX5jG%*-Sn73lW8w5Y}gZgJ&o5>Ff>xT
z_h7s at t!{U)<g1d|nFZ8=fUnr~4+4T>V6UB?LIp~aXYe^-eu<2DlzX%7Mv&5IhOCL~
zUOOlVMh~N2&h!UI*1?}HS8rV;RtUG6H4CCd2@|U&*Y{Nqr5vXN?gl<6pwvP&?6-JQ
z at P(m1fw{WNz4z@>bVR~RO=@ZU{Oj)#1H$mtvS%qIhoJJGrG>zOSg`TyPg0Isr}Mx;
zP+oX{P=RXp9H1~OP?+1?)PMD6P=npE!|ln6O^Tbl{W8DindN0h-N_f<Ac4#bwS12m
zHHO9L2%?Nj`uik0b#6yT-OjzO$IjFrJRTppR%_P!>uYD;{E#{s22H`>aNXX6EvGJc
z8|r`Ib6a=sAt*jAIl5}F5AY`=JYKvFk9 at DVsWxiE!;$MBT>H?s{pCgUb7&t>_)&+L
zESLf`nW;fFMiQ at +C0H$L9t3L^t099T4LKx6uS*vvl=Sz1=?e^>JqKzCg^C#jC=rU&
z;)g#Ted>8%ffve%-0Jc#z3cuKCdO=Bv5EeV$KU36G71s%9+Cq;M{ul@#)E9%^P|rw
zXH7Tt%xzX@#JU2LuUk4qAu+-=bMu{NE)eM5d*n#AS(z-8 at TFh{U3}*whQaaYUZ&dk
zvoD5PzL$)(FmL*mcbJ<>`}@RlslTbAa(2G`#N+k*52F|uY^K7lPTIG%cN4=4lC5^<
zUIH+s(quzk?k{}qmS<nUysuKr at E~KEK`rN&o&yK4YmsR<a>`m!f%z1a8p=6|L4#!i
zaS=Em80v#18VP!f at F1|zFpF07cFHw!aCf-3SZjajJJ at Xcpq)(=qgSMQavapLxUwxq
zd3i at m-{Tid7R{I5bsr0pVmGbWM4xBwt{)%S{_0yHA;6qKJP2kV;xb_Epj>CsyL~o{
zoW6Xw*{m+ADQnn&gmSh$YCUkc_2?;J!y^|i>E+2{orXaV+oOMQwEg($!D~;YiV~+@
zdNb7cy<|)PGd(u!mdP58qcni#4 at qgm{=>9sv|CDthsh}1ZjPSD#_DZ5>h>Jiym@`w
z at iV{VLkVyL(nIAyLp4^->ao$_n5>pCyKP$k at P@SyamktMV(>>NVrE1IV#;9k+PP~d
z9T-fwN)(+Kw~=Z)-g+M}NxCu}A935Eqm&T#Zp_vPBa#32{)Uy+?leI$ME at 5qsg;tF
z)&^gpmtZ1nZg<qb at 2AOen^$bI;|$8y*lapqz6T*hM?4}`Wm<{LQ;Mw)GruVvn{oi~
z41;9K+ZwZM#zTL<T)*!Sr}Y2s)8`uZ9S+o0f*s8-D at Z4PQkKXM?d>1#yL6-f@(po%
z>XzqUrSd(dq{Qf+^H%^Q&<^lUf>vs`?`S at BEO%s!(Ppjy<b3EPUmt8#Sp|9J({m{N
z)a<)>?U#J+gWvlmHHnVQZLFuygL$*Lvl!T+^aQ077qc-oW at F^$bw#a>Lfo!emdF%|
zG_aRiotDqlm^7RtL|Mi~Jd_x_5r{YoB3i(>wB`0|-N#OBdG2M5OVu+o;jc7w`V2#m
zP9+w;pe&Put2=+ZTs_bO<07A7=f3^n_3wK=B|dV+rs9s)hKaG3xtW~$ny7UT0u at FS
zzUF4o%Mh5b)~g)o4GJe_eMM(08Mn`xTar6`>U8zuE>2nh4qSPne(wQ(cN{u+ZKPRQ
zjQ?2Cvl?1 at FF!GK<5>tW2X8zRY~<b&nt#*w#o=pD5=Q8*C at UKqZ$5COWNJ=l)|QWs
zHXS_;WXBi?B*t$dc)xDf64uw!(J at Ow-Y@gqsLgAIYPLKtQvkv8Xof6uy#?NcbV*Ji
z$J5 at KJ2>oW>!4azHp4?K$z)PG{0>&Zgh|qeS(@M(VRB4}S{uLd;lk=t#6o%5&=77!
zZX7swks}DY)RZ{kal$btkSnM_+|D>dAwD{wq&VEk^9h7kzVG?egs7F7=;2+54v$~C
zj`64S&{44{L68H=kHw-fo6v<5TX!r{NK`n+5Hf=E_r~&aU}Tijtdip4C!S at bb=VCs
z0v-7AXOU46*zur-kZBcN=dQ3djH{tx=*e3`%lC2|dg8glw&vhF*ewO05B_v={J9{v
zt9I<AT%Kj}4R6V5YpdD5vu5XBSw>pV`K!Oo6BAN_`9wYN-M at L{fp3%1>*YDEEx7Pl
z{-CrI=8R?{wDZ7szCp$fyeA`x07jtx^nV~C0OxW`^7tYEfe;ztt|&=K2rdegX|QIM
zC5w{-9j!)_3Y>rQuHCeN+X7gT&?ZL#4hPXF9)!Z$a!Tf3e;1{Q<$%j)n|k^_NH6rP
zFJ at Sxugt`Fwd2E2!J at Oaop|OpLU6RSaSSegZ3b8ohy at -#cOfX8q^OqpSu$-4a~_|S
zjK8&&qd8F2f8_}}8<PTqfBUwD%~(p&3e3v#g~gVmr~0ow?eFXkws6m>dFL*n5m$Lh
z>Bwlqp8cYv$o!V3lDX}aE3!<6f_!t1m#rr&7lI|d7q6rF{|e8Qrp89C-yE at qkjV^b
zVp)3=N`8J_6}FxJqsLg($0x_7W=K*M8G*JYdOrOh at 375fVJjS%6@}p6=IP1Y;vBvQ
zwI-vWx&(c4)0*!^Z+N(L`yQLmj>)M1@$)i`oVN;wUY3^%uQzf12~b0Xh7pfEf9nOX
zRg_;~wN>EdH{$2$Slah1{2{-hs6|OJD>I?xW?3|@LO*jZ44;*|_8|xOZ!t&PT^6{Z
z%qHc+t8Y<=dyD8WGD9a$8WpKzfZTH|=;~}cdJ-(C-Kyi%s7#9!rMUfeCjE-V-Bnw6
zSZeBX2Zp$Gj|ux>aaRY8VBySbZLXeMaJP4PD@$ize}CxaZOSuEdQEXzVgEqI+(P}n
z!}YuNCMQLI=|j_E*DEs9Km-}BMi#tAn at MMaolqi4i2((X5WS9BAQ<(j6yf_uv1bsb
z9hLx at S>|-TR_P3$VisexXVHq4m>n=tfiQV7Ul_EqY_ke*1&_dx)U$72a0#H1vVekv
z0+E6sVu_L8+eah7HbDLhF9~E6hf7eW(xwA1q%imn@)TBQRih)|?u2T;iK93<c4ekL
zAARb{bprGnJ$GIgC=rCfwpN<VWQQl4AD7K6 at WQKga`*~bckQCW)KkwkPfw639v$cC
zt*x$I+zITTkAl;=XP at WjEAV7nRK>GfYj!QUdj at ib#wfhUR6aB)wBQI71p50cX6G at d
zv>!U!eDEmc$*Bn{m(x{KRXQ<UIyGbVx!8~Rjwi~bNfwvYT^3;LuHxRFim|ck>6zMv
zt at Yb?)NS2fH9Z5*p|_^W=(47Xlgj%07G8QCD84}_qxZr|0z at smL4uvt>50MaYRGiu
zx`|$g-Voy_WBAfXKW1MHeU at G(O{4>twbU0kR^t?dM7?}`3!XLTwbK(evU?^C5?Pul
zLqCe;^TFf5$U`H*NGO?p;WfSm1`{IMmVUe({`C8tPl*$+$i%G8=mcVO at c8kN1cG}v
zs3Z=L6^D*5kV83vfmMB7Jx7j_hx55>_f9f3J9cxdoS7?|n&DT*^3N%)arEZ7L9^rx
zjn^(60w(9`8Km$YQ*K=qEx_mCtFI;05hN!an3!LoS(#3qoETZqKTtS4T0FOiI~a8+
z^hCJLEq<4`rZUjmQ#mzVzhhVPepnz*4L$V&b(pZ6y+fhOWJ)Ke+YcX0jo%myX3tDv
zAu#joZNBL6Iyvz9$WsY(MiGMS0z at 1H5x7N&{Ic8iC5_br>59vfWzAA!5KBwkOrSkn
zxT9BY04%W-<{1nM>}(x}k1|uVA2~r+$5P6IYyS32d~w3FglI}u!6og@;ZMK6c}Z&g
z%1rEUxb2lUFxvMWI)nt)Kl%fXB_pE{bi>raatw}+pkxv@){PELK6Q&clm&ywj*@9R
zd6r}Sp8dsJrda5)=;JiYnEB9mzCmc%%*|&^)pb>S4%$2W5|d)MbT28dqr+WNNDCI9
zE3dshtGYJ7xpCr!H at Z%r7n&vP*HK-a)6?hc>GSvW35A3}Vw{J at O`%H1FP2?Zo!2)|
zwQXnL6VD43Vq-U{95(V9ZV$)A#OSE?4-yx={-JMw|66}aUq$l|TEK>f+P7~D?vlD`
zjc_B!`k86N=WIV<IFS`_xb&3hlBODjR!|9pa1M2pDk%{|G*UCvpCOkJu*QZmgpPu$
z!omQWNFq*L`0yt%v_pr8zW{qFj$pPPYn&KoMh-qJISQgtK0tq2krB?ldlTbV-7ZZ_
zSedC~-~R5UrK#&rj@^8&a_NX51hiRr%dtE&zgG|T1q+iS>C)gC07L4v8Cx!1q7c{^
z$2$7|<P2O`yWV=AQ at jJ4*L>fslZ{`zq{=S{%<q68NC8Uo-Xu(T4xby1ILnH2ySkuf
zVW$a*9fW2x3|dionzON4nZxVJ{N;g?j at GK-K{lIUa|%#N)uY43?aelKHeHB_ezb1f
z6YDpuQMg>Rz*i8x{vmkX*~>C^!$UBFMy>q;%89cmH_%YU+LPE%COCL4dJpU;zF^(M
z-w~c`F{@FK81RXmN2MVg1~U;Q*(L=OflvqS#Zgv5vl4ka)-={u(B~4K5G0PMtt9 at D
zy=j_GUEq~G_4PKpA-Dtp3q*v4PDTs%Tn{TL0winZiAqoiZQl1|x+rl4CYH1W_Rhcf
z8jD|;1I1bu78`;Dkv|q8OO^)X2EiamMkb1Nxq}M<)En%gv(G$7A=plif$<4QPEdHT
z3+XeGfIvsDd%&Pb9Xo%)P+3g{Lv_8kyO#`!DA!DNrd%NrPJj6$fHx{DbxKcdHEY%K
zk&&v|xq)j>2`$8nQq(>laqfZErrODg<{dlRmi7?{Ngy*u-L50YdrqA0JAH2O!sUUp
z7x?7M`+9(O3t{Z6G3n}Y8y`uETALEPAtf$?1kHQw=EoqH0Qm+olRY2v$_m?$oeK6z
zaYAy;x($zfC*rXmFzjQTVZevU$5Y_LS%99;sl#F1_wlE~yWzb>9U@{h2nVv6VgAAL
zi3`k<t;cXmo$84#loKK?PKoxgK?YL;EjUd~%0dgQg;`L`<We{#gp&Jyl!@7uV8tb1
zC+ at ysSV~xV@#i}#D>$m;X~>^tFa9sALr_yv$Qq3<O@<$ldBLoake4}K96c?qRZB-e
zJ9q8gr4dID9y>-~0{2xnGH7k-paM3TqN%xHeQ{DyL(bAeDkz-(l1FqNXLAdc&3-qV
z(d0GOgQ>v&6T01EH|5n;!d!}Xta1AybXd#|!JvcO97ql;x9<wo3}q&7zqaM6=g?u;
zmW~doQiwT%nuZYq_-Lj|1_fM9+-6`84AB_DQ1G%mb|M^;gItJg`4|!L==Z%ve%K%x
z at QwNmJOaU>7=waI6TK+(ATn5nvyE~v(vZr5GKEl%y#VkRVA81_AA<<a;&rMGYUslB
z$}}h at XaVrgrR8Oz5%P$=ZfvBYw=2Ba`<Ty=B(K1P*$0$YPGyPHWnTBtcLWI#OG4BJ
zF(A0(VS>WiLpcg+K}8Xn%C1&;!pmCg$tyhGG*KcQOj%F_TBd#1E~6 at K>e>z9j#)<e
z(8*J-?g6T40;LdAks(2tgUOLVE%GrUOzFRr*z=nj<XQ!lvy1Z4lbd!g6%P&dUbrUQ
zuG40e_IB6J&eqJ#)GzM9;{Z_ula#+Czp$aYxV16R(g1{m-O32#2hK#?E`dC_Gt$$O
zGgav at pTNlm&L at LSz7#~vB*DxNs4uH9UtzT*Mz2TrW`&De76T~}Z5Z}(1wy4;JTh9?
zSc`uoXd_ZfSps9#Wc7*}U#ApJ-MAV0>-cIaI+}skGUJ#XS*Tt_je#%47E0_G8%mBn
z`3!R+Wb8JpzJ6?&6*rCGDHd7)L0wo=R@&agq^!jx`^yRKSE`mNNm+pj*Cb$u%EA7^
z>XN{gDM12d1O5DbF25t_*|8gUfA}NHapgd6KqkwOnO|Ob=qJnMRXMr7wsy7yCJ$>t
z&!NM1s}>a~H8Ij(=-u(|N3Px>F6k?4f#{IY78L`PG}}yiUFPPs59qRu6#g=)xTmXr
z?|zh at jP&H9?#|-D!HUUg;YPNYWV^A- at p1TU8Gg(Ax?8qyXH%7`k)gt-y1bflQbBzc
z+Ykp at 8%w*|2}l9LJ$mJO&*7s*&Gp3fV}yb1x_D%)WMX>i*2_#KpR-BG(?#)xQ}bq*
zm9du&x%BZ*_`6U7LHcD%6D4VJu%;6Yfi(ce5~AiYmpO8rQ1<|VLv&qxb{%4urO*Gs
zoFczjmyR0G#8=$emIY)^!v_?}CxEw$MG8{@H6`Mp2La<J#y9*3piSnUyG^-0-^cVy
zm_YBb6O;>W-ru8Kn!3^wS_)o!x7Rv+`ZPMK at aM;Fe57`Mfv^iOpUeX89OtR!We3y;
zdS(0KHtKl&_Tq-h!J|jX8%j#qGbnFl3;B|k23XVm`EHFkhP80R_{i|t^Fo`E(Ho0r
z7G$anTT=^MH)fmBXi~;UKE^~KRQQF*%I&+U0}lh<uGWJ`3%a`4#*~t5kF9)U7_<Ys
zOV>|L(!E*X=2n(8%uK^&ar__tC~7h#F=%JVQs8(b63tmwLO4Lj{sTS7PN07G96L!*
zhK-78PIwsx0hY;7V|nUoSsbC{m-Y9KJbqS}k*M{$!7!k!U{j4;|1g?A<9~3haGE`Z
zKBf<oT8!uniWDZnl%!}HM0XlIc08vfk4Hlsq|Y{jsbCL5v>=utSR0DBO!6%h_V$W0
zC0JQm0;7TwK0^z_`!F3;cC|rdvGa#N5lZgwQIVdu(o$}3KZ7JgliQm;arL_J=VPI3
z*trL#i1D8v5rP_1T_cJC$d-orIqLA^lE68Tw>C8SyLyUdx05e#Z<@INB)Ew9h=*~0
z;RW0I?ngqKQSs45Guv?VySw^8)Wao(^$-1-i9o1u_ah3k-shnX^qUo1CII}GZJFfM
z;>;@U at 8eUd9vuOY%&r`5yLMrrg6+0?W_I$`cSFt6ljRvHXdTX?yaF7 at lan2XkB#4Y
zMXZoD96X*NP6ag~R3^qBa1L8TatkFacsD%yJvt-?0c<s8ZH+8TLF1H8&ta|y at Ftc9
zX$;j6;SvjD)$<u*ZY`)P#;kx!S>4wu%g)A|9MqlC)B2Ac$JE2xDW|d&W>LLC0csSA
zY1S9T?JbytsFNm2C~m06 at _^^DsJ1+>^ye>D+ER~A$!s at y3;n{Y-ru8ACR%~1>)@fr
z$#E98*O!<1^8vqQ=v83YpzcBc2YC)7EA-Cz$iQ<F0!bY_zup|XP~XwsZ7C at c<c5or
zm at l(h4Dn7;U4_5ELp#DHyqjd$NDDYLTpz^DvVvwbChA<MaQ7pt&f0y4>1n>2Dt~hm
zA-&Xx(!|%)h_%OCTEO^;<5lkQSiBD60^kLje(l{*n|SW at Mx`^~hXs{wNqf(nTX^s9
z3{|z-Y-7*G>tH?=CT*xP8Hq-zb2%c{Jp^zL1^_~dF<=5qrf*}M_vX7{CZSs1<a|y;
z9pPpOiq21m2M$3UlSzdF!xw?VgRKmM>c)sQ3<$y_AP2MOx*-z-zXt)4LYB-FP*7iu
zR=@LypAO%8jcO*Xl<|QjFt>wz5N at Q9)Aq&f`88#I$Bqky_w$$`CjNirBxX|7Q8*9#
zPn=x1{j%_fWBtoaizc!I>Ow4g%;_M$yn|!x_?cT)(0%AI)rL==bUF-VWEzFLchFW{
zE!>N{bLTrhgcOK9=CD`b0BYO0Q at 9iv9g&z2Sv<DIH#mmh6E-<^)<%EGc4rF}?tX0C
zxm)jX1_%F%NmpeBfmFDJplB=W?FMqdR~fP4(fq+-L$)EmxuIfYgm8PIK~dr+Mpzh8
za%w87#>OB&Aq<~OhCl#&BXI=Dndu2}n?g?~yakwkT;$r6)P&gRh*X*A;UD}hS22M?
zLxOrwmxde+^*(e9n}B<Zau5^>61D>LA7(d{7EW2lV)n6>1OOB<dwTr#p8fm0xlXNK
zj)$UoaYwe-&J=(_0LwqCa at qt$7qj6ZT)iy2;LgH2hrwBR7V}PiMG=B!e<ik(552(s
z%BV6WD=M)oT$V{W_~b3L6pYov-!4~(3FTnq0r_KPTN9<IX=chlGJ#vCc6ea;{3WW*
zJ$nn|Cz-60lE%X)Vcit&wdiE$mzN7GijpJOFaV+s83RSarA((2OlHO0HqXE)fs;6K
zFcnIYB5hu~P~q-Jb{!2&&H`Pqmjt{`jZ{|1lJe at R7;Lw`@t)e}1xUuGLjLM<Hvb}8
zP-u<4$yj4Lay_7qaR-b&`E0x>xoBc0!>H33RgHW1XWFbiS8h at n3OH!2h__<1R1^%<
zBuLnxm at oj1^VpSHMvGBF{|60=LXs&>!k9yBOPVxAco3E)7QaLaKzqyfPd3<uv{I}<
z*!;18;ZQa>vf?+d!M$EXOsGy)J3U?2+lAV1c4ZUDMo<7#0BF$QHcXg><r2Dm)AS_Y
z6w}R?o6iYPApjX_CPpE4Q)Pe>3h(2Qi0+k^Kr><hgo_@}4u3m533{6;zoCYa2gVPA
z+<~BUEiEy~Lw*jW`F1*+T)OAOAJz1AlELK)B~<mkqk`PLISxf?<ka;i;8LUiqgL6f
zs)S3rvPz<9YIpCmws#x!nGlC!nWTR at a$G`%Uw8z)fab$kD);4J?L={^9vk5<pbLc7
z77Pp$!iMI9*<WZ1LK4E#JtYMdLxY4|&AsuyOs_HK`jf>eqSQEi1i^@PrC1ujfw;xS
z`FR#NaQcJZ3zFZaM0+brhp#_1^ZNVq at BL`t<_kf3L(Ent6+J&4TfHHZ&@&bky1YCz
zhPtT<yd?C0HhX1zBUU18|3MeUBM?Ns%`ajiPEFj*AcN_wqPvYZWb%SX&Q at AX%r&N9
zzCK<9LnxPePCdT(+S{yrF+Ky3ApT4Ei`otzftr#Li7(w-oF^3C$D>A(zM_&Sar6A`
zm+9dspS6R%{Ou{xYjHC{gu-YB=_T91G222-kk!!4nvUTeeV%F-lcN9dAu?H|C3wDM
zHrvLC$B5TM;Q<MTmj{$DI4(G%F)9iojf>t;GCJ0L^pwG(MLotznpahdv&oh36)N22
zXmn;PvW)hkAgaG=aW{Zt!iwAXE_Gjeg1e0Qd4+xbdXqZ0p|)~tbo$kIDP*T2Hvjck
zmex#8U_uuf$90F{1#2gPROLOL>`GR#>p<|5QZ#(&8n#H#Zq>W at 3zhFUn*1IR4n|!D
z12WSV=1^jJ=!dDX>y at _b^1*(#0u1(lwFIMqyU@>Hhq;E&0U`*R%IWNq%B8@<tNXi9
zW3mhKAXMiwarm8Bfgp~~6vZ(GunMNKue_M?pAQERHIoQ&WCwo|6g#Q9zZ*^=Na0#`
z>=a7w<B=uM%1O{;X8YX?CM>T2#+cc=St&~w#ew_9`hhFQljr7$zjEf;=M}m6j8_D7
z(Es^CnHNURJWl<hiD^?ozTE9*!3Z!0I}$cVR3mZ1CL&+9T)m#t(J6>j at 3upU({}2D
zr#K%*eb#y`tLguqqTF97bN1si6cxFuDu`iZ_dV>B-A9hGy&X47l|kx$e`lAwq=3P{
z|NLbN0hqzoo?BC1H#0MQ8JMMvkgMPTn;JFu;%g}x()_^@K7rwjSGeRY3&4Naa{7{^
zqzDi-C0~^$Z#;?l9YYXyA*c?8YGq?%qU7iYzw-?=e-^yJVnIYRIMa1mtMWMz3b$$f
zBhWLdvrUCn#lYw2*p7;FZnyiL==|1PkInC5dIf{Q$_N%Lw%911n6}#tW}}k+kIe^E
zt?)QzRiLDJE7(ErtKRe1F4w6tR!%DJ?KSya?0C+AHgN1XOm5-~v6ej`RO#&pk1+DX
zWQ7aN;kN90{}Z%g`16^*k&n}5K~0^!dX0R|(qZ~PE?}+CTiROB$WPxRG!p(;DsO%9
z)q=i$L8RWs1`LVqr!QdEK#OLhjk3;GesMr$zfk6Vm!BktQSY+nP0SgxbX|v!)-LW6
z?$Wv)RTC4?K`{8&&CgRvgb8d>Io0L(f{ES at sy8W-6Hh)(fLma0JIls~*%_+gZ0gv5
zFg|Ksme-Mz8kd|9`3qlz9W4<^QEdf5(2W0~`mBJUjAKl|{=>Y9(ZF9?kSR;SMab|n
z{lra1?}XTh6qy8bD2bV|>&nx3UKrxxQS^0mTD^9L7c6Xi4p2?fGJAFdy2F3Xq{A&x
ztqPAr$hK at P#4p4nhhE@*W%TOI6_qNc=W4f%GxD2MqQgI1uAbj!cH2 at CqsE?oflVKR
z5{8H-&&8O}FU6K9Cbb0lpa5gKoPYLtK~@<5$q at g`a7R;kMRi2#Wu##1z>i4;I#&}D
zq5?xf7Koa?hZy1r6@)tub}6(G992R)cR3mh3$pTaRd%a0kl(U%C$U|yy$SW56{W7m
zCJ5`GgJ9<rU}-vof+4+RU;uz+QDg1)w|_`Y^p=@hFK&$5m{nX<)Y1U<o<gio+u#2Y
zBt90m^)62jU2?iDK>djV1`7ccEmSUKu>8|kF%!X$NB;-D6ZG~fQnB6#>dL7T6Y&To
ztbcP$@;TkK_5tXl5d|Xvx=>IB0uI5RGU8aSV%p_#mTWC%Ra`TSQNmLQsm1}}uPSFI
zYMPrB3h&pEQEBC*xTtl&eX(b<s)fdO^4g8$sI_cFu2qTQ0<z-AVf>e;vI_$)R6Mp>
zu57wA@<GXgk!;6nZ;^-LuyW5qxlXBayDa()t3{PANz_W?KuY+Fe5eX|si>xPSSw~1
z1li*J3dYo=C)Q7Hq5tRCRtV*HIaci0tF~F3#le*<Y;Qeh&I^?@v`Thtfi2u$Q`xY%
zlR|t{?6Sn_8>*1$=U=7-BK_*&L2-ttU~;Z$VV>YMmf?Dz8*ZzGcR!iF{mSSQ&)ntF
z;g{I`5(q?TU-#MNW#+i>OXTtV0?|QY*e&V*e1>TI1O;%kWvPYA3>}z{pbi7 at PYEk-
zK1SMvYl1Dt*k6eWQNThFbU?@eb0vldh8>m+LJQcA2vcIIg~yqRMku^rN23-R;1!W@
zyI|yIhlRzrKVYL4oVhr&z`9uTyx66gwS$}kd2VL&qPj|CA{WP5eNM2Q#DfGuT)8fW
z`jD)&E(cb0OyULQMR4cp(&G&l9U1~1reb=QYL2QZLLlo89E*vLz^CuZap2i(-M)?f
zU({3^YUeH)jX`PiIc8se6U87 at jbYtYU+)a$!DMc$tO#O~qu2EuIXdz5E$Z|hJ~DXv
zaiMb6&;VPKu}p40aTa1CNNzQL|M-*7^q;*DYV8+hfI!e2 at zMf;z+HGpeayw5_kVoB
z26g~6XX{YZF<|=hJubIJsLX`;=nuXHu>;BvZw}c6nmmyO&HE3d0%2hQ4g`3EwF$N?
zD74TsL6$PG1nR4V7BDMSbhco%hO7ha=#F=|$5WF|xk6I)<b>I7E~qT-K6r?&9vde{
zr5c4sC)Z~iJnT7=nasXL?i>dnLRm*MGQnnI%lGvxEu~6RYx=wV#d(0-LbA%VX06}2
zj%|-R7Pq0WVkWY%(^f@*!HVFNn1pDyWvtq{M1A&N$BGWtny;YyzyYYGirbn(?R;q_
zQ>$P_sx_)1OkgX<zVnwu)r at XCQ2?&eK>6e}+y1sLE>1l49J_3QK^ndI^J-aEeMv`4
z at xo3%Z46M3%5t+sOC%Z#iiJ1c4>k2mWi&yPJ|Md0nJE^evrj)4eit7#a-+jDb>@^6
zT5Kj5fGP2Kt at WdWLQPDXDbh6Tr9qA?qnbkcKdK<X2u!c+FbEccZ8y=2g7r1hAc#($
z0 at WVNUZDk~y5seCh$>|YX5tVE at 7qzYGOdinMqT-BEyP)v?B?ySy<O5!Wov9UIkWI=
zmi2V<tGWDk*pD$^5VD6%*!Hxdt8L)uQFuI9<nsFh#G=nft$zqWnjkcmd;35B3E)Qh
zzXOa-MSxkmZpSXMR_*T_D43Yp6tQOG+6O=pcnf at BX&9X8|7G1Bcb7S=StdsomK=lM
zONhFmyed at RT3Q0y!CG7dwv(QZd#hv59;Owc0;FvNr_MAkENHA|7P*y^lS-`|dm~qg
zF&TT}=}<erWQGV7+=3`<f%-~+fp`CpJ`2AQb&<XbTm;+*`cF2FEdqWsk}bOQyplYj
zCLjtjk3RUF%AR&{;%4#?p}-xNQ(hFL`m~$nl6WB^fJ-dF=AVCwDVXseo!{5pOCf#%
zA_9U;(MpN0_~*@1eqWN=pk5&fkWbgCvy3q8Hbrm;=7ogKkFrGt1jUUD^T-_Khjknf
zP at KQWM4g#RBum?#y`a<cN^(K|Z-41EsnrTkmfE0{SxmYt19NoG(q5;-2>G+GrV_tD
z10X)u42J{Ek04kB7&Zb413ARh6UPJx2()r{mwEp9G`jTYji>Y5TA^4>5G4!s<6&r#
zrQ$Oh{yd%w7hY~fpy%<6J(q7%p=o|@2S^Nqn&DL{OG8Iu)r at y3Xvp=tfc)M4p<jBH
zs4gH4EZBj|vb*KZx84u0#$H`0{|p at jjne<^J_1L at oYMc<5yMqcO6B5)DyY%fo`C)g
z`$|DaTix^&0}kX8uvmQV2u{K#j1{P)w;Q^Z(&joWPAL4mFiQqn7`t#07Z?x9sjFW6
z{0|I&hkMLh44M^^JQbxd<d0vziW*SdQs29OA1nu0SFpjg at 7vF?58)E?IE<{FyLYc!
z`*6_tWt77a7q at v0<9}6mJN6$zR!U6<UNCGa{H8d?9Cm$WXG=kQn<vLkw0O&bBbgqb
zP*bc?TFT4m|9F1Uf408zCK#~Vv5~vWTyHfsF77bl`I?#@zx`VEo&!RCQKpoT-of*i
zW^cb-H at U@CRoQvuc=^^HSQKl=NAqecg=#9jQfJl__4ng+W+TY_o?akBcYoqnT?My8
z|7Wbmhl~D$-5|UseV({227H*5_!ynJZVY0aTFpv61Yn|6p1<`X#)O%hPou`ObDlyW
zrVtY}?_AW=4Un6#JC*>jPXm3c?CF4Nn4lYsPBlY)pzMUl;R0i7u;zLTn;XJk;NJ6D
zM(s*SP;BFEf$j;yPeADaQDAAn`-z4R!%z3|lSFf{;|Uf9<UDZvgu?3sZ@^v*1E(MN
zG&W%5VN4r4cRps*8pMT%1}Cp5ZUYL^(1{aRr^hc`#QexljHcRt>@;;`I+eA$noT9v
zKlUIFV$>&GrNk7lg-XNJ<lSWs6leI_O<!$w%f5rKhX|GNXZ0RG)qdb`@6luIufgZc
zHv+{XdzE(X+sD8dYO`*~?kt~^n6E8Q--gI;?CKMtOTTi)6!dV>&oSv>fnhobZy~p$
znB~&v{a?)oj$a#B7pES-4Nl0UsK=;0e(5q4Nqax|1aw at M--REULgIkX34={JvovZc
zUVzfB4&nj`$DkT^PWnG<URKk><JedSIu67RF_BPmzmBXrRze~GeD>wHz}{e90I`Fr
zz%NB?3mj-Bw|)HPEwEnx;#>%wh+!GOd at V5}9Uu*Rer>sNlWiOuw~RQQCYV1V2|-*c
zZ6*|OgmU8&?K^givGFjwpUljXS$O`X?lTvRfnuT~scFs6G5S5kNuj9Fkq8*UA=|Qb
z;Vv at Qn6x07wN6{0uXph3lSG|R8G|_=DffB`yyCPtG>3}Ok=Db<`%au>`^WIs6s%X%
zlAw2Bny4NbqECij{Z;cpDM=H2#km-Nm<@A_bHiHz0>{FF4$rtj{|A`I@}JY%p+59L
z3{xzxy7uhuKXiz=2^PXKCC>H@#3|^A9ZOGWU)l%mPOn#B6y>ME+cNz4Sqx|l9`ygx
z=32bQ!sGBDuu}tb1iRyfzrelct!Dj7NZWt-lf0&e=Dqt^d$Lv?J$sJT99)+WJ<v%O
zKmJ*^MNR)l at +<*npL+qB0M~DxnIxD|s at D#mI+Yvn!<3s46Tu~7seCOhaGF*2b`C#&
zj;Uev%$fR~d-(MsKk2)4ojOsQ*8w>o1Coc4Kd-VFMIzY$)1rwNru?fCpJdnZQ}#eU
zRN?C**4i5yt44=g_Z?{8v!{9MR;AsB{fD?<tf_g`W!TT}Xh&<&$u*hdPdw9q^0cS9
zh22>0sPHSDqR;T!K%L1z1%Njs{C1*@0WAj={?GfrH;@-x|6>2iv9lmbP1qz#*hHxH
z(8-g5U}S_Bk~+qJSRC0?8y at xAiE+$6>?TQYC`$m2 at T>;SKKcy$KerJ4A|~3%tj8V9
z5`(B=6x8q+xc9uxVps`DB8qQW+TXnIAic<!=h}Mv<*{?;P=4eYsp^arBw)4a>Ho~U
zSb at OvyNhx_MAQEP5}3=%aOe}^MK$(!po2lVpWD`&$`&U*9V{puHr>RfD*$O2|98Lh
z;n=NL)3wT)LnobW9o(X{2iXGit4eWe;tyrs?>=zwE;0wqKk?!lo~rW3-FqYBV``_S
zD&TFKo?80RX9hkcrPx`R0|_}30i1zfY^V9y872knBv2~=>ic4aU#W!N80`OrKK?Y2
zZ}h|P+XKyYteb-CUq+9Td~ZoUQPsiz at 3UdRBvP22Up)17Ewj`3b3ukDiBUm~*dNg4
z at E!A#Sfud+%f<2Ze+;2Cj)4LSGR#Uf13jz-*vR|yLJ8QCq4Sq8P-E{3e}{X_+W{G_
zfMoVK7<t;xUBdzy#8#OU2Y<XAw9IFwSzQ*V&yMpe*#FfMAP at vA0TO0t!V0IAB{iHl
zzvK0{nKckpa{MNOP%tezE6da3H&*v`O+EPxAC$wU?>u+KmZiZ$PBl$_p|7iV(_=qy
zHZ-zWrc1EVHb<7y_yP#M`6`*KO`4jSS-s1a+uG7_;7IkBEw~{FZ-?^%guKql`dmY=
zYhIXl=D5DtNQPVt8v{mBz(SBee6hl>T0;M4qQQ8}8b>Zm#yB6|0u&RW{-0Bl?=LMR
z1QK at uUjeW;OjRI7vvNFW@=yfV4EAy_!3C1!NcL7{P66r=G=VzI#96=(!}wp^-_K9;
zdH+x43t|z0^tg+Ug8t9izhQEG=<&1R?{JTKN4DwrJ~{Ke;MgT1f>jgueDsrv%U5A(
z2oC9G0rVf at TZ1GXo@{?0hhG!$1FKYw|4?@46#6iJA|EVxE at x0s37gko#KY8YD=q>#
zUDeY*|H3QzrTNSb5TUT{W35LuQ+Wl at Uy%QTY%#9pSC<iYz}^se0Y=VW6w1GNWM%=7
z3?4hDqk~ZNoQh(6qx~1JQ4>=MED%*g{bQG}LAlnnbl{7(r$|yd4;_Y_ji6w8X4)4k
z{Hi5F|A*lUe=YzgAj;t_l(aP=F<oW~<3IKvhzjYb!T#^f23yF-n8vn}iIIE at d_Js|
zxHmmRB#Mu~D$BPMBv)};iBn_ciwQ^t-6*rAO%JRT{Rf)^eIA-n?&5YFE8w4t>Z at j+
zdm;QC?lo^UJAU62mLK{*Mg|C<-FY5XWLbnP`RzbZ*!>p$pZ<y3<16y>YqDhnRtQyk
zk|WOp^AG&P$j9z5w$4sj@^fLxWD_e){c1Zj-I0(2?RfLOyy9F|2Pmtc*3o~y|E<3w
zKp-SlLcdug(*H3P!mfrD6fZ#N>Kz&EvBOW^GJ2iZy0K?^1G(L&&I)yi+Xd1v_0)6F
zl0&Y0$Bn}2;MohHfV5Uq<;3KdR`^v5!Sl0FMgIwg`DCVH;0kZy=lx&)5B<M9KpZHl
z3;iE=NxBR&>B!{hwK+vT=0|MB+{@a8{_if#;nOBq20K+2(a;$w^ncdB1W{x25&Az(
z at f)SYZR9S at u*LP2mBWJ!Q;TnX5dIGLn0ErQ`h8Emr_P|#Fv)^N1f>i=A;UGUTa-_x
zfR at EYdZs7Wh2}$C417L`GAYn`cOaKpyL5a4yElkv_P+z?pA at qmofhnkG;yOO6>3Dw
z(#Jn_xy-POckEbf7#|)wdmeXfxJc!43>xXd{;v|VJv3{9x!bRVR|wA+b#)S7j6>O+
zrK6uW at 7*t4<s&NXYGXeRpn71cTlOCcze~uYQA|H`+mh$685!FC-X~wI at N1O(L;v>^
z*RNEF5J-3<g8sw2#^N-mtbi_!-%9BJ)E7%20*y_Ie2i|4i0~D1ugU8~5iMw}WnN<_
z$j<Yj|3JVJ+<74bxO4)QA)Uk9g$IEx)nuZ0?t*}wPoS{5-fWb!&<KBrd(5Lmu7p(B
z-cmj|fG^&VrJuX?BH at ZgmkoM^;@<A=!$;_ubbkE5z|<?c+a)F=&R-D4I5FAx7DGgE
zBcAIw7=hE%Q-}nCengfQ0}T{@F at k@y*~GBGk8Uu0^3>?1E66j`>kCO0elyIf1=VGI
zT&W40**pjxEOhmb4C6NO7{0~^tgq0ljorK at RPdGL*H2BbDrw!ld+ga42QFT{<3>)~
zcJBfCiSv{g;p|-R7c2Z4CG>y6{)5H{(3J5%ypcdtaQ#bPg-;d67~I74e at +?yKkxrZ
zAY<wO4Czp3up=1vvMnr%88}t;HboV*2MVA?!Ue|cOms8bXTqoY^Zu`q;0xAUwA>Z^
z3EUQcMG23?Ko|ZF_n3D(vVZRrlWg14{=PHkv0!7wIQX+=?4Q~BenL>2cJ1ju{W$tR
z$`3(&Sl$SDcXag=9!Oj{`lmbybI63ZVeXmdARaM!97MaY-y-%3 at bGR=HoIf+6?iL3
zP+a%E|MB>>C+?7^T$zqfjR-y(hkFnN7y8v5b%fJ&xukx_Zd76 at r(j&~K7OirYK}_)
zr(q>k=@jEPo}!RVSHF0B^R}&+Rc(O+UrB*62d1j~^Rou~zbp})1FKQBM#kS5-g04m
z)zABXww6yXtp8j2UL?{KnKT(M7=u6jU<8VCucNHwbHKTTm at oQ2E^Je_9`7W3-Z3>R
z<RU0jg8g5S7KA|bbht_ixeE{l{ufUm4|iL3wl4e~?lJFiT7U18v$SabjrT`yzuvuf
z5Bw)+INM%&%~?_eo@(g&(<7I!gHFfz1Ne<i&l{&E5D2llx%D+=tqts@%cKu_bK8rr
zu=j-A>BMA;tBd|`vuc^38IC;O?7XIWj76P07pvyCL7bJWQHP`|SHlIR#r}_rO`H<L
zFB>FG`!cbs^$IvVF}(tPso%P7^7&VZ&8H at -#dK*BZeIuw$Dg_dxAPsh!|>TKKhL+>
zI6DKmgsmXwjtal_DS%}9f6%uDEs{=-{U^LB{9p8cn9p$<0;z&eRT%$KFDI{F2ZMx%
z9WNL|cTRza{?EMy<5Tv+T&7nj_|Sjc^>xJAVbp~Vg(x;i6#rNM|2%L8hZ%PX{h!UM
z=>O<i;qP#dd9Ta%`<>XPykTLhRFXLN`uot)fH0}->%tuggji=#0&m#)(NEDTb4v5=
zI9bf9w(VQ>`FU_Pu+7BC=`$m at UL%@`*<t4!?@Yb%;l!)&flO=Kxr_B0);Shs_$8~l
zT8n#v6d%kH7#@*lc70>GR0$7(#~vj?k`|AC!v136S3`MXesM{-19_Dr!<~nZrHGTk
ze?sgT$F8GRy at NooUAy}(TphXoROl8V)4qE*gv at G#YS#xpI>4V+Qg}y&U;C8tAGbwL
zSrNmp-l%do&EZXffB3xrr`c=<KJfq5|NS;#AxvlKlBDFA^+9zg&jr;g_xgMKRa!ab
zHLY68QV16q{x3LK=>IZN8~{-u<%9tLeEje2AY_}nkTb3aR?WfwpREmlhkMNX-1gt^
zL>LR<Ef5qVUJxwo`GOV2m+Qoa$;u1bz&)QX)9q1T*@A&C+O>DDNUemcr=Y#HXWtUS
zsc3Iv00hC33<ZPD24qF9O2=i-FT(F4lckKEJ;#PbjQ at OAjY|g~d-MTkdsj%RII6(z
z at _n&DAV?mgAIePVYIw$7Sq6ba&6Y8U3ITtLq^Tyes%~ODCN6T|@pFOpmcG+xTlVe?
zzlFR`C8?R1kjhen5V)EOf`thOxTDUmeTv(c_!s&%3;?tY96G!ya6$Ngu^#Y&<KUzJ
z<Fq3F5o1x^@Ibmk8Vt{g-GG0D>4ROux!2Ry&Kim>^8hn2vjl;l|Iq)@f9U_g^{-LE
zC_%IlMkF=}%k3M$uohfI6zB6e2AuGBxW~NT<M{nf!<Vn&Csk#nln)OD&FNNM^TGm#
z&7cpfC>Jk0e|}IuVSLWk(nb4^9m}7b115x-bnN^^uGS6r(E;EzRygd;(ar*YL2oa=
zARRuhI0wyyII_BhtpK<999j+^ml$;6B85;FS|RYy4wsodykN+e$kM_qgz^M7=GWJ-
zF;mlyopFgVB1sZ#AzW>ona23fq%eN-xt85~LiL3Vnm<&WY{tFt@|!k~jkwx7D%{H{
zSV3Y{3TnzR1rRrZ5hlDf{;1FUe=u|oyD{PgAjHs3HOy=Df86f$e_{bx0-#KCudlNU
zufXh!ud$Zr%VLXFKKakb{}=`+ at DhXo<Npfwf2|ai2{=Xmz%YSzw8{5n)T9%17XA+R
zn9sq~{Cl0|-}=x8_EI4lynKVP6ipHfIbAnM8`#tUr9Xc at BR}dZP8{a<(eoGSz<e_O
zM~-Z{e3eaG8b${ppM<kKr=<n>mcP0J`%I=J0X`@g5rYww7A4>cpf9*=I!~W3S=bRS
zQm`@53SnQuh=fZNmI;|c8eSokw^mizefFZx4)$&Fws*3%;^fU|?0(1O)3;zyY23Pv
zKY=MARG*Byz*|1hN2YGe7$9fB4=ifJE8Jt=te4@>f_MaLB%yQc1s~oZ at h>POd;&~x
z1+^8qmBlWXh4G)oGWwD<Q;dm>{vXs{9LB2N4(=@&8OH<!L%T-7%#u8I^@hPr|4081
z_J7Dx8G<mEVUc4$HH=8ufAac=m{4${6#;%WDT51*``2T!ll|T&Hi__+2Re?O?Am_-
z&)49YbExh_K0=<)uLgZ9YgmHpkge03&Hl^S4*~z6&jTTg-}ES<+yK4k+Ynk}{4DA2
zbd(iC_l;8$pgS`H`2Wu1r)ZPUs^`Mh=;VZOkuu=3m0|D`$al*!MNIBcw}n>-<zbwF
z!2k0_?(?bQB)&l|b?n^>b7p>hb=Tn|&Aa!q+k2=!8FV=UlgSVpNX#P{qgfMP;a>9o
zx*GmQ?3u-_4bWw<!yS?A;SDmiq5QA}z%7L>h~3AK5{$tZf9Sp9^i)wwG%i1)N1aY1
z!9?6!GP97D9OTpu_W#V3z7wZlZc!`5=#w&WJpCVUOOQd1Z;GfQpB20WQwF96qHijP
z2Am%2;#=>Bzr(%e`DK2u6aBMo at 4mf1S*}^w2KWa)tHsyeVlHM!HpsvU#lq~#&j-{W
z`wZ|Z at C@L%2+$xFi7+bwKUg!0TN<!nqs>AvSUNb6*HEL9i_l1I78NE7>_7b%ucI6D
z$&5bxvfA$t7b!m_d*|U_&I#mZC?re=DuX(_f{=&j*;`h`#)$A_Qo;hf at AyeF1E<g8
z7)2=>x_G5wVPW9Lv*Gua_H=TJN({ef_xUS<jy9I_;T7&BUpg`Z at df$}AqHSv+2#@q
zLwJK&%;@d-HOMeW0Mcdz;EP}jNWPaeaiS<00`1iH?F+$(V0dwT?u5js)TAgZTJ(QB
zWz5A;%rHCC|1-q#czcl{v~qk?Xix;5v1t@{QHbf4jo=IGDrRrJ82%3Tn9uWje!o+0
zW8K8lw|D*BXBUV<Vk=vaZ=WuYpTD5hWkQ}43<O{kXP=$^j}?dzFz^iYCHC|zX{w!i
z=6O(OMODSMgFWSK4Hmx}US)!6 at mCVH!R+jEnIILxxIOvu+d;#HPKGeEDyzapO8;ST
z%_qhZBV8`Ve5bYO!z&1RHkE+D%~x60v||S)zS4s7i77B_n8XPZ1Og4Jt!XiMDU{$p
zFY9XO6#O1L%B4wy3-r*{d(W^V44shgx3a&75tt4P8%B7u7_x%>pG`yj_M*m`|DU|~
z;BMo}*0lf4tXVU+ at 9p5EEK*|5Ie;XXGeLj^13-`f7(f6d2!J`~oO7nAEXzR-vgIsU
zwq;9BYUj{)Yo22D;KNXEUw at _?7OhpQbWnBb5LMW9&JOQ>H}eKcI~oz;s&bn-D9Ae`
zz at 5Ya`~x_OLBVmYyX&DKe|HG45 at LmV*}!pA(xgKC3;7SHh-3&E2dtO^)z8QvkZB at f
zT!r<47uq^AW1Sf9zw)f}ci3ZFU8LN{8yL>Yp&_J#d!!0UMN1>TIM!%rFac76G;3Pl
zV5$KZBv3b`#4u5>e(@bs6FK9i-p;uXJ`tceC3&^|-R&D2m17e-&d(*Nfq*C=8(4NY
z=+xzEas<$gnf*f2(x8=aex&Hbyj-YQaDZT+GFL-F?%Y9ala)#Spvq!yK7E!WMBGBd
z0w76{#)T<L3dm4~A-3(@Mdu3%696URNN}7)VB;*zCu`oh!yenvlB32Wig=cI*-1i#
zmfU$v+&+TDCPn2H%R!~W>j?f0Iz+5po^yb|JMnJH!Sr6Z2pkU6m}^}RKOE%emJa9h
zj{G;Stm0N>J`v{s2%&-)5d;`Sc?Bq<0qsnTB$TU!r8YZh=FVN_fAF8q-(ipKlH!7W
zyn!5+Mh6mC0?Yt_5XVCM<_13{cxI4q18?3D^iMF)>U^v!<ew>;SA$v=0>E-?1b-%Z
zUfJof{CvcAc~D%12a>t~35n5|b>Kgdf4I)H4OVFCaRJeXQq<0ml=+_`ZkX7_-58b<
z12E1xcM#iHi|Dtd4L0f#!w|Cm-94C)IhBwQiC)c%V40h9z6uQudVh{+tu-i1=|%bd
zZ at dHZvvZ$4wwabiZ3Nae%6wqe!kFhgW>$6*@}Hh8;Q^u|=9Lr*(kl(iN{=OI?(cmf
z$oC{UTySR at J6qt8<XV4^W5_>sj&}5)V2Y6;{{r%dLSU5Il!iheMmQewI_w3E?#K`y
zt^#L>-k1c at Zh_4C3+%nEQ5EjvjrpI*5%fMhVc1KM-sYtR$Q)*F-lDb|H{SKcQ_OGJ
zr>H2%KZ1%M5BZ19xM6l0%o_n&(p&5kqpP2M2~&ikOl6s0gtd=f4M1b-$};VW1`BCr
zrKWOB2F8rZNOgXs=mVvM$sloRsi!8LfR`xBbM7Fvp#&$tL)Y5OM-~DIOpJZqw0RdW
ze%q*dJv0;&?BlpFUsG6IQN~AVev#xT6ql5SYit%rhrKu8XU6}}V_}xIPmZAi&ENjW
zd00GV$UmqO;)7s8`PxGEF7;AVqS07<J&y<Zo&as0ED5krjA74mZTZkJCKVAG(f%EH
z?#1MkILg5Y@*fpc*=*+-5+b1lEm<?HCJ{kiTtx;M2u9u-ekSKHu=jSUx at aG79Ty&F
zsbvW$sS`L<(O!6xIavu$P%X<`&5idze+~7uu&fyPI{H5tewOdV*ib?(4Kq^&=;@<1
zS7xWhLVk<$r_fYI5yqHsKlD=2DbqLJf}9y1^~&}Z3c>K}A3uJ``FY|dWj at qej06{;
z6~d)M*&tcT4?J_K-$MHUNYBgPo2W!curIuY0TChK#Gqdzicvi{08h1JaBALBcS-!n
z#8^HsK+ndFEk}pFH!y9`=$Lq6jRrIedUn^Cc+8N0Sg#=m(>GY*Kfx5 at dE#Uv{}J{E
z<R6Cv#ECr at F5<)F@}!(}<R5qmoTzwKsd=5090UHJzXdK1b|#(0h{eH=Mb#KG$av0N
zRXf<HQ09<!y?FQYUEg7kAInOL_whFO_pfK){{%g@|HW4UKQPaLOToj2-VXAU8=t)O
zL0VEYxl33FF#JPzTsk~XXcB)Z^S_^`ONcb4V`~$ImV6l!mvn8dg_c^zNzF(??8yrz
zYKeois;eFRKl1P9c5K)46fxE07n8dLAqlFoLSMS84<GrG6b3 at bBT|y^YWjGe#QTKh
zf+x1Jv%UMu^EDF_7!HmL^Yt3q8grGl(M~;6X+kt`R>#=~(x6;5iZ^&OvS46fz%t!6
zEK3949ufShYp}A~;xFQPGQ*&;__!UR*dH};;Eph_Y@#csYt)$eq*NgMgsl at Kfy_?G
ze at uiw@((o%Ir5G3v&cU{qqQ&o0qR at V(ZQ=H at Kq*7WfjQl#zuF2hdqAOYE=7st7vOs
z{_lM1S%i}xa_rSNpeDdq19LcOO^cs@$F$F?$`Zgl2A>H}1OE?|3YmgHaLH^9XhEd6
zQ294H+}}7dLI)IMY6+pB_FukC)P~g|IWdy_RxIm?qy*>ZNr?*Nf!8WCLu#L%f{lbg
zSV47#b04vd-yS|#Je<sp^LM{YqmaB%l0FoiJRq6It<w!_8_?m3of$`ve2r at TANTMj
zN}_`SIIVqu at BU%;as)zV!i71xsZcTF4P)ML9<8#Y6+|oA9jYA$zP`~0o`ir11WIM5
za>@nzxE&7ic152L at OD);wUAW@|1b!sK!1<K*br`$_*Yt5Tw-E0>#0!VKpF{IDDf}G
z1Y5$4!F_>x8ol-k@{g89v4hdqZ#sX6y|;Cx>V3Q+oYc3a)WzUyH_<=gOkVillio|0
zAPH$XcaeGxtKZ+-2`QGM!6Ks79j!bK%t`$4WG$uUQy at Y;{_?B1KrsR0<D+V4=cq|R
zy(;nuDD^w|^cBF*On20_K>qm?DVh at J=P49ANsTFQv;i>!S;V9VW<X`Baqc6w0sND3
zR=>6m0WwGU&M8U-FB<V*_zY_%Cjmc5qC>>aAPw-N(gsS(yO5ceQ$0GWsx^scAIRP?
zIEbB&5(wS^D;VbwFdpZTVevxMLA%2XgwcfjgXAPjnq?FxGa&$K%@h13N)8DUYZ<6-
z_v4R&01pcEq7;H)0z?Obvw}Sp3PeemFH0Et7lQmt!$1LXA+ejNhyYx35ULP*%dgOt
zn5&$>!`|EavXXtgA at Ep^Yv0~m`0`%OKyU5*BEJIjIhrJI1UPf<oq2}oi)op49G at pg
zu(K!!#xhaVP>;qw`}Vt<s<M|L0MAabuWiyHDJeQWHJ(ym7zHRld3iv1!z<vcR4J&p
z<@`J;7>(ptG}p7I;s!1q)*5*Go%@JwUOJFPl(9=q6}}aYsphAy#>a$U+uE0wVL^{g
zPwso^4Y4ygw~i;C25-Q}rBA;hMhnj;Z;*KQf$TH0Q!whWe<=kHCP!_zaf8ky1Ng^v
zfVB(wfwWxoAKnz8&KSjTv=A<&_#NO+EC|w~=Wc(<wSN9yctpWg!DJ%1fT9CaQex2Y
zB*=fbpTLfr7 at 3wDmm&>kv1Zzji;Iv~mZJ-iJ5%0ZCAA;Fkn?wV0Bx;CzkfHOB<_t{
zxDL3-g*zYPAq4+y8ykker~A2U#E&?hot0E#(3AW{*(2EDIKrX~&mQt$fA%7PoaK){
zEl|nXWa`57+)REi%6C#Ej{wc+3)jeO#i5kK?_xD+47$jK80Y87l*Rbulwn2oKYa!H
z7gUAL4(C2%8$Dl9S`7F{7)q;wp^iO)(R{6nly)E-&|W#Nk`*avLrcY8U=B=-1}T at G
zmF(!S_ePd1jcP2gQL!>I6;}-o;*fD37Vu9>e3%&grLGgXki<Bun(RDAEF*oL$=B_O
zDF66}`3XX!!%d5;kOJ{|;hdo$8uAZyJm4REXw(paSO)!vv%FKRBg6~px3<Zbr2YkK
zE4h1}7cSx#a{dl`Z<p&z_v?m8)Ge<PUQEkO;vV at Cn>J68-enybgl3`d`n#lWa2)J9
z%Qqn~R$fXxbA+e?U}M4rw8=o<{^vbeR)W9R at j{cqw!Dh5#+Y!|Gye}f`+QzrMrDJA
zUyb(#h*wN{GFLe^(%4ZCc<E5CMqhp%&z{CqN%bN}2S<anmwcT at ZmiChrEzfZg_qd_
zk}Ry$ww}AFYi at -0S?r7w1>YuZYKl==1M>fgcitypT~==uJ3Np*DhewjB#O-Q6gF)-
zeGbN8=aJ>g9F!j+_*Imvvs>Uuhd=|E1osP3YSa9zpZk#j&tvF9_Q`RAgYK>eA#W!l
zK;>eFh5Q8n4;mdh9`X;lN at 7;p4)`+`kSFs$5d>=9kxwM}ppv7}!AeXOm2FMV-(m0V
z3Yg^g>4xVY_fA4uf;1+Wdqlz^=fMd>Fc<zn;jUX7*@N9BGRySB4_7}k?HlZm&ZBK^
zgzcZRaGHTzlV!&9!<Du)aYT^+^aQxRSuBQMc&VT`w|;V*O9%%y&Q6C)!iAA{HZoa?
zftcoHLKBC&K6m>gN^!wsX_;Ga^l>!G>g$vhWyOt+#{OPZdXfh at g-c&$s%*RPxW2V{
z@`KOB&S=gQgBIKPPk_^F8tZYVlStwiZSM^V_2%RxVW^_p5Y=KpFbvMa639dTv33c5
zq5Q+g&Kif06i`G`l>hwg5B=PaBL7Sy1d+)VJ$dX=_?*#yWN at lOnGOU(5`@o(&<x5y
zz!I!2QjM75!T<2L06cfU_!@taxI^7=KL8SrQ~$;JJM6t(S+3o$8?}{zH)rI_j064L
zBmPO|VIjMuttqd(j3YI}L+s&pC?&mGnazvPxVRWAmw`^vx3}WV@%A|h?270Z2sh}1
zjALUen^karW+sFG#Gn{^^*XRm$Zz4a2dpx9<yq&485bD<*CnuL<R2|aC at zo?$yC{N
z`mA#|u?@o;rAw)uH*@=A)FgtSxci_))>urf=Pv<rc3gtP2M{$MiBky9A4zES at JQ3f
zX8r1#qtD(O_-B~*!Qms at JPHPcjm>#j!7nNe#d|>NXaz7NgFYiAn*Q7`Wigrj{XLEb
zcpSx&WeH&Rj!I1i4u|}+ydwY9Q{&|Vt<Cd9|Bs6eOHkwrHII0^lO;_4MBJi at h?Q$`
zR`U{p00gNxed~Sa at 38lFRk?1zZVjueOf}T`MT-#bv9q20FU#Zvq5NV?4M*x17uXBf
zMF8qTCVNK9`Wi>Fa)me)f(^+z<}GVC#WG@~Q6L}U5CutadQKW48*^VbrGz;^Xc+Z_
z6sOfszY_kC)241}qM9D^k8*|QpC7lP**@^fb>}`}yY1|G3OK^>%tyd%s0twTNRlnJ
z*EMdQGW7R3E+O)3pP%C+`Y_}?(b2&uCkjoGqr=`CR1oHl1SncUq_L+H>^);LAv=%E
zY|s2JI{&FGEPy|gqHx`S^rjlx(Z~K0;BkysfLJgIbOM;UwF53J0TGle5$1mxC0xSb
zl%Nni#xK6LhPhdy#(*F2OO#gY0Z~JrVi*`eaV0Lms>jsf`~@CJ+fbq3uiNMwZ=oua
zVF!MUd#szD!jn+HxL9h`gJI?fEaI?G3fRRO1FJSKLi_f1+r`Te?^N{mFz4{wAl}7#
zb>rMLrO)k~+a-ge&~}gl$*ct#{>(df<gye1rLYm=vR?cA+g%S6Iw0)Fs at 5i1ZW=67
z%xqQdEg<}Nb>rjgN1qp)3>dS*sqRjhz6|7Ba$>Zush)JOn(=YRC301M!}=!nCPygF
z9!8E;041bD9Ub=GAe0Q~0;way1=k{Ael!zpjlp?jPGSGTn+mlB;cpNltd*F<<klrc
z`JFiYFv8D9L>Me6#OaVa0tXEV at I<>4^&e&frhW8Dw#1Y;`sAWh0iVcBfT at 6R13Uxp
z0Klr0nI6wdSJ~R+`~@CJySlP`zix0o0B=T_5kdf!<s`qLRZ{$sy>WbkBb}EnQ<hP{
zF4h`QelP*LE?me}DG51|&#SkYvui9uu(+ah>h&8r8db}=OJQ*m%5!Eavg2YxECaps
z at 84Ax=1jc$23|_0xaphkI6ut1(qdJWj^Hx>ADo1VnG|=9WjZxaPC0iI+n9l>8e?39
zzxc)A*NuZD0bfvSvvG99wy;=KYZiNw%S>TkXnFVuK$;jCX at +BO-V)C~kUfblaOW}u
zAc`Gl&oc?Y7()p>$KW7Bv3x1lh|h=B6Zr=*%j^w-Hn2bfzPS2P{&AnSEHCj2z$6?R
z>_gS;kU&o+CFCFE11~Riy_x(`Cc*im{7 at +#7Xg_R_|};A)AMEgD3}tUM<_2cb at N@v
z7kE$&V^zgI-t<j&nNl|L`di#1tg`^sNa;eKv~O&2grE#_7oJaGKSVh(kb5sbAy+Gz
zYH;@f*`g2f4}9)vLcn#kgbz4EmKO0Q7H;h5rN4hkXc$ZdeUSgTTX*Q-ys?ynEXDti
zRtyn(db+e`sNXm<=iEnZM}+#QEoRb+`Pi_sS~)Vt5<{H`LG$nFZaH%fZZxqc);A5(
z*4T3}D#RPPn!0mWJo`ZQsPROcF=mCwqA38A17pC(H}}NBgZ<qg1YoKs{>7rHtut4)
zHD at U@QQBD)&=|q$d!0Cl^Am-WO3KuKAu__`5B&?^e`1CB|9LVL0><n`{@JG~;4&A2
zzXBH%fwnqRMuFUV>MRFIe&={bUJh#E1GzirK}?3q{kml-b4`N-KuyNqdXIaAJkZ?T
z-uu)u#OOP(JkJrhsz5{&`6{yrUP}Bt16Q79%H=r=g@>Mcnm+Iz!2U6R>yEawlYB{z
zkgt at PF9ZKfiNm!ozb7<IaUVuN{{bFP2giofUSNJRmQzp?e#LaSE;AD9#>WP(zw7AZ
zXh3uW^EvX*kutl*cKSSojl64+UTRyK2d=#q9_%G{#;-+#lB4W_<bl!&^>-6bJ*YjN
z`Me4p2oPS|v;sxn<;!>=9fNzjJjMcnq5}SbNdx3tc}oLHYVe?fAt6zkY~LO5g9|1z
zwgVw at z*j_m1^Ex~#B9g&gP#XdyB*`#PZ}Er9T_$<q*z!S{9RBJ$UlD(l at +i`?a;v3
z>o*C0IljXKYgAX6_UV?HpHnw83pdozt2ekuq}?*uH*obD6V%u{A8-VYHGV<#b9|EE
z^YQZxzi<uk4>(@RSgd^VC4I=_Ak4b>{>Rl5lYAt^Pc#AU2(U5a#S=}|)l at Bga2G5z
z$$FG2q>uB)_$XI8TP=fUsR{wi*U!!Ly?WERkJu*GUt+6+?VOL;lC4)>#48B++0fUk
zskegM1_>bc#5+U-J%K%$IN%2a`Tu|a?p{8!;-Hz}pCL;Wn+4TH;CM`r6UPLT>En6;
zwFl#uj8QsNv^3}%YyiTu(qd3l)OuCJ^d!ztLS0#DaV|$5WfnrDS){^(z3?sI_7U(8
z36X}LE;JvM|Ad5S_~ZeK at KW%^SVu5^d0F_2XhF(i1&+Hyy}EX6WH0yigV&mkhW)yg
zwKTVEpCQ@;3Y2 at Cc=H|RrIA-}u%G(qOO8yw^FH7-+;@Wf=cEw68GrRU7AOYh$O|t`
zymp;F#CGxQ5dyYvZ1a)%ih2zYDpFt$Ms!dO`Z{CN+zh}uR&7!&>EqbQ<YoTXS!);{
zD<GFxvn&-9kfVchgFG7K91eUAl1RlKNTeYD{e9>~A))>xEOQX`4B9{%cz)PJqy~N-
z`KSG$Hlo`wnL{^6xI|T1isifb;U_p`7(dYcaInt_IN*?T!BAy!)Ty!PspyS?0~;jE
zs4&}?6{7sZ4~!&Z0&M;Bp0B41FAhgQ&Ec0O`3oz6NVj18Mg~&RM$<O{c9f!!m`I>)
zu{h{Y$z}ov7-Fgl4X%UP+aEuudvuIbW2)Y-8)jzDmFH$Z_!NdKruUUEzC)OC(V)t5
z%aov9`r<og8-BqZ`A-G{J$d6TLQeRL5dP^m-;R`o;rRq}wf5;(w$0PljctN8 at YPdI
zgXlc4H^e}1sV*)p03L>%3}1cG at h}0y+gH|@Apx#{)dcn+N28FZx1BoW=;PcVv!3KH
zNr)#0 at ujdQB?SEk`6pE&0IADJ<e=JI6&L1B1Nj&Bk{~8tXme;ksExoDF*sCr!d^TX
zLa~fYXb%qnWVX at KA(eB>8R-H_foeqRDxIOLok~m?0?o^dxRD938(Qi?KEo2mwcrL}
zz6$U?84>CSfk0Jv2l6lApW{LaF#vl&e}h?wnF{w2$`2|c at dC)S$%e?+m+oj#x`}u0
zm<RhF)D1e1Q)@Qv*Uh at T3ePae6K;?gJ!EC2)jBfxG*w!T;6-2h;(KNl0BNH9tI9R7
z!!iHE&H+K_>^rx!O4Z=lH8s`iU;M)~x4>06TOgQ9mS;iDL|8K?Hx;Zela;Bb1HT9Q
zzvE%5YYgMJK4gKw`2#mvsksW^DDEaoygB+fHzEQ(H1)RVAP)}WO=1rvU{aC<`6tiO
z-}87<dLjqOg_K75(;$@09(Fq+1=05e?FY3%Khk>kJaH?gXk3n{<%~@BdQ2QeS`L>q
zH$llr*cbbE$N6KZ?&%arcR_xV_EIFr$V!b34)J$WR8`>lVKV1cg7XCC)mUj1zU9Q2
z5R at O}KPsHb-(OJvi}ElK=*CTvAC1NZSz^t~2GL<kDq~HT+G-6Qtq<x3oyW1%nD*s{
z4~NRpkbz{$)44(BcA|%PegJ<W(i}mn2QZJnf+b#*e{i;tKfp_=)T(eeu;^FMF7j)V
zU<>%ath<}5;-%p^1#*Z=$aVw~$8 at LGsbE1N77RTIxx>32CJTh2y%`TG$-jA~YGMro
z&tBctNBju&Ux~dgD$t#e7$EEg`A>{S{tFG|lpaXQN)~&X2Ks3LfnXoxb&SXn at -Lox
zAbX5o))XdxCI`#tFtahk65XbhE7Y~LK?LFF#Q#Z77L}B%;UH4w6Xy~#NlObM%JXqQ
z!c@<i1t%D3U)fm+aK0h`Mb<iCZ|MJoz<9aHr$GP5eo<8DK>h%76O7-yOneTgJ^Ue@
zKOjG|GKElhu|dy~2fo$Sn)l_#FVgnZbC4lpOLBwM&7>+2Gd7uzw(${;kYK_dZ4=D|
z?ivK1K8qiHMw}7u5!eREKN6nIP at k^e0tBvV<rE)5TFOYyl}3;lLfIpM)v8Fw1Z5c>
zBpfF6|9>~UG!#+g?ZZG&n2hv?zGhb+J_bd at 40^J}W{C=L<D;xl&YqGGi3yQaeZ7#Y
zQ#c9v7cY#F1k<2?G<!6kSV=IRM)B0%_c(GfenUfinf7u1w{4$BE%!eDC~lnCxCra|
zR%S)Hq9~WipQ(e;c6pN>{fA(&OqPr>1 at j4nCnUT8yE=aO;R3b7+|z*_4e|#t16mL|
zKgz!V@=S^rl%J>|QiL>ZZLA&Od{{(?HsVB*#71y0B?etyVGgs$=xc9+m)`r`-9LiW
zQnN2Ne3*08Kv5Tv9>@*iMnlxm*f+lVzH|E&M{*RI?9opEKkvwY3MjbM&%XtSkM)OJ
zZ{d@#la&g<(jeRMU{{S#O69ra7?L;-WS7zmT5|=g%UHn})HpxUejQJeWG=BySebwq
zvm({Zp(w{&vUv9kM>j_!B!)UCCm>Oe^gqeL+~Pd;P)zfpf&54Q$)$yUR_qU3CJl-L
zuy5Hujo}Q;X84V_#It+c^MYgVGkas;@a2bJdJV}WAVty;#p%+^%G{1VA|T%|eyMp1
z<#|U7;0Ka7F?Gp&scf<eZ%?2n`N*hDBhSA;>O at s*1BEbPax1K_NAtn|NgM<(F7i(p
z5#^un%v8^l#~sabgCj`QP;VL=LnGpc!*vG#JYd~D-r5gdZmX-^mzw}Gi4Dsv%B!6i
z=LS(P@!03)rtk_-{DmU`o7v;Rz&~F~mY*zzIOh7-_qedILaVMSgMkMIKg_rCrh0Ps
z25;Uu{OF&-SmtVq5KGX`uoF{h3;Y8aTdWs-k6(5?Nq8OxuD--a6dqGwHz5W**!IOG
z^2A#<HXPj?jbKTnabgm%bcEjt4i*{8*(3klg1)0oS)ubjc{m|OD)z at HsNdYCJ^RrY
zQGsqD-Y%>T#^E9H>>l?_1(u0%3hfchB{I%vtaP|`A$CqID)c^aFd{CRbwMzGvjon6
zlz)&I_=E+JXQp7f;suq&gu5JhgzzydBgPQ`D&!xW5~E at B68}PZqgW)$56KizzT=}K
z(HPDj*65uPVvY05Ak2|}%#eykE8&LWYp?9_)_(AECdYlbkxr6FB)3eBJ<AOO{-oL$
z3^x2C at E>vnuMT_ka{&3^e~^Dz8t~Mmro at u`tGCzoKmVfAW~-kZ113%Um(FC3r4hv~
zRUv_3W2%~MKz3oa<ZtnD@{Kp?BW}ilKCzLn&NC16vA0i8@|s|4Q~c4<&Cy`~r%hgP
zgs&?N3LUbK2%sclu(qX%`5!nzVyaZ^Pxb*d%V@`j`S8A=S9_g2O#Kw`>>l at M;Qd#x
zfy@#3mh~k*0p3&BZ?Xi`t!;UqIE2%O at o{SH7{6)wwM>0IJV~5C$T=7%K!en3m*MF(
z3i-kShX`o_Y=}>a%_z#}TGW1=KPW$A*WVT}|4A_gCIiGl0`fB<662Q<Y!jpOgbs-J
z4uz_?x&i{~J>J*9yS(03w=Xwv&OGG2N_|p%BsWO$S%p?DmXX4l!x75Ku_t#M&x|Pl
zI;$ByCp9gO=@)<I=DmA#0EG*<<(Zu}m0vOynUrWuNtGh-)vXPgu<sRQLq&z5Cl1Rc
zq%m6O7idr~3=N at XXaI;s^XdwjeZVcu%Nv}!f1|Q0sO$(oS5DQAkFm$wLP;!~qM-M%
z4yc4HUd7uN6>w5$udbtsK``6@`rEvi!`I&tJN)cDNoN?RglMr-APQqGK$!;xO)9ke
zu}7t8iHwZ2<21(jMdo$(THbCPYtXV4l@$taL3$kUsv`#<I`GI}aDHOR5<w0Q@}>|B
z*Wy;CejghIF97ziTtJdnjg6yU at jQ`#{A1S9VOAVEV{TAh8Rq%S!aQhBfA&rNHy7Hi
z_4{!H{7DVmiuP9KA8rui6z?Kw)J$sxZ8<{OQ}#?a#Anfb2;AVJ!GTG3D#`EobI5+B
zgMEAyj$Gz{+A&c<P?SKzK&BxnuE;+qO`QLPnEClI-{`}J_TF^rG>!1^fZ_^G?eHM-
z-+A^diM>piEmvL;yY1S0xje?o0uutqaT2n}BMLB{;1_yP!{#X*@8Ttb&od#4b`&)z
zeO<^a(X_NQZEc79yNMls_MUJX2`12dp^X!GCE1EOJh!5}X<;rtBbi~tV<LDpfc at +k
zzj@%A$bx5`#Z!c|v&;b+={$WJlx+QlC#eR`^W?Ea$3~R2G;=v9S>}IKApD$BVSZq!
zaP0U5`r;t6PfhSz5ko=e>ArBWvagrvNTJLkzo7TZbENtF?3?=W3mfdVeYt`8kr&F1
z{e2lZDcm4Ss&RO at ac;J_v=CN9j!-I#Jz@`Zha~_{J}f2tUSwxbc$Y*-g*xBc(-r%d
zlG9MY(HSb*oT5CrPD2O`TAQjS8!k=!|Ga4Yg8b0*VFNz^-7XC#M#{d|Qcz4KAdC1B
z$&(fP+`kX=b;&7K7Ml&6VtQv!L=2)u%J8YI7URe$@lf%qNdFUPKC}UgX2>(ce2!E0
zF3iUz++VnAFB{Iuine9~Qs9sUf6K%;{QuOo$AOcs(<SC+1qS=&$kPOdt8^(&t?I5e
zLsti`W`rN at 9es%qu<i6k&yz<WIl&?j46f|N&>%1ITLE~3C;$(e;QYb!nJCGt(4IVT
zgm(?VPx_9w4+@&jIYkQch_R}elqi>@EGyc}ef`L_%yIj2TmSwZ4;e**SQ0mg{cB%c
zhpvj%881CY>K7K+1AE5#&$Nv03Q7%gfJ{dC|EU62)YjqWbAl{LV{aFGI!ogtasCJ}
z2Bi#YdSLBEc3X8 at BcU{YDOLpfprto&Zqa}|gyaH{rOf}>zZ2Kr0`ZG0l~X^s*_KuS
zEODx;ryCRm4Vbke13mI|n$nhL>WdLkbzI0wB(@hm{e~qVE-evXN{H7nM~9!+0G<Ip
z79LuVpM3eA%TFS`r2H@~<GKOTnNV0jd=~i^BEJTmslNv`5<E88SKMp(#PH#(`iE=R
zP6hhAqcs7MMe}UB^tAYWaC<WOV_}i}2<DTBc3FEnj|*=<ejy${#xDjhop}c{Q)4+^
zH#!8k^yl5qPr0h8p?+U(Q at 20H!-h+(q}Ip{lFACT$k?@4 at M9C8;RuiYq`M2K6>Xgf
z^_5U2E_!mBGWca{jg1TQ^a+a!fya*}p821TaPi5 at R5_(;h<Y%knfWzs?HC9JS~YGu
z9N_fHF3xX0dtT_AC;_5O$`blN{!cus{OHh?bLt1T5^F6So~qFq)SH|-JCQrWqv3uh
zWGW>*{KYjUKlj6q3yJwg`nmG4<H=`3y^cwf<ERrvsVql_pV1(F9;#j#R|H18tVB4~
zZL_mNQJc(o=%)xkcU-%{$_QN;%0Ibs%p2UA#$wC>^Ml(5D2UZ`>brZszV7%xF=MHi
zZ0c+!En56C>56P-B;*|V*VbE6et^-sxg96l0+0jBKkimAR4D)S=TY+_fPB_AH7tMn
z_0PDSpLj`gW5d4OCf at rPCnO*rrc-VZPXe{1@%$jPga9}~b%`U7{+Z--t<?;%0L32x
z8LA9A@?}aa=BA}Z`ov|V7HO2^dQj(xkICtYlvYev6+%=3zZ3B<UEe_0nKOkIrMNGc
z1L*@snmwCBTY~%(9s;-m#HjD7E3Ezy>5FIY->1vcAizn`mP;ie#T{LlimYf!2<4Vw
z&@zmU<>^aFz;|2)YyhM*AMwP7`JHe-`iQ6N0iwW;4nL!T;SVOCa!yqAz?nnMUk1U4
z$(zpIi36h15uyV80M0?*XssC at EUGNSh80|$LXvwNFH3kd`8a+oh(($LDgwa#DPBt*
zaD*RtEpGu%IkG$RE3{}zOdU9-!8TLK21-?6B#`W7mlWBj#*4}|<lJ%9&$ykRcu7lB
z<G$RYB7 at NIi2~zG<OZoKOa0Te&%V~yR04tHNY~>}7S)=lr-O!xdyRzvpn`pFj!+Kd
zKdozPzCLd0r6pwZQ8f$@%SlhS)SNVaGN^PRDp6OIQq#6_d~*Ed*9gta^D+?<3|{;C
z7J~y5C4-U-aj=ni2=S9^diqJmH}>`XyQeJ at pqVz#gnA#>PtM}ck4ugV_7uWi)#DR6
zDvHpQIj$85bE1O8kEH4YjmCU-oc(zXV$G!%6KXl4h<1lgn4m5hz4kJ?y<<T9GblgU
zq^xKFaws~6?nmAP0t_=bu+QejdDz|{`P|WDa?mOr*OJRA%0K!)@de%*0&2>ZHk6$9
ztu53i7~Y7K(Vrj-cyivL!qP%L?4}lzV~_{lXl-uVmm9>~-It#Nm(_Oe0yjuBv+2zF
zQ~$gNo^$oHuQ}3t<yk7Z<DJ9o734oJ)6m{B^WKLrIcRLPZ5!(W{vL`tE9B2L7_iDL
zNnAvRB0IlIPu2K>N*zlx$QJX$3OVm;Qza`nA>cx5-Q<U#GdPtcVH_2Jls%o*-5rD&
z$_9rqld*;W-P1<wC6W+Xot;KnSt<4`J%c=sphr~>4w7-O>%zp8*zlb`*uQi;e&8?Q
zb9VLl=^uUlJgC!3awtVu2*UPUyae*CeRC5KAdx=DIOH!N|Gd|{(Y)8>DU<fdazM3T
zK~}A1(BMLO(?mR<Qsx=l%i^`<FChF#J{y*GT&&>vIq7n+VR;2TA0IX969NxK82yP0
z;01zxsG`YE_L<|a{}PS1mgarAkxx4D)_d?|Qr?{#L<?=ba2fC$EagZnM at WZ(&x-i$
z|CRr&>dw~9f8N8HUuv&wTVDsKqU!D|x0-53h9UVOf|*^YP*zt`kfNx%5;YZCzq*an
zn8un~BX|iSn8w+8Mh4Rkc_s~JOOzi336Pk&t5>Nhv`tTO{0BFfKu~3B7M4j{5F)%=
zr?qXZ0d9w21utuB#hTuA6$R)~nK%fW3X^}1wH`{wjKcg~-TvE;ZYPhDnM;;E)D8IL
zDZ+)%2Y1#^+ItL_x2&#+gPd at 4K|w<K7hs>Y)hIutmxBC3?ZJD4ISlzB80OgcXd(rK
z1(^`2c_Cgal}3{Jg61QH!wO_n^ed>YRCRXaI|BKJ@{e*Tj044PTPv at IpiC|=0eoHg
z{M-Nb7WUGiy|rauZrFp%Uwlu+*x^@iaDycVZO4<(0ArwtA at a|W!53eSjR^r4t#7CU
z`2&)(x~rYzka(BYTao`XRZ-d4bcMZ^0u!h@(NV!UDrJGuKzc}#v5J5)geMIbo<#mh
zLPx*CSuH+EWtARsQQEl5negGy!B3uRp@?=#<MOiD=l*@5#}P6F!M$)QJix861=xeu
z at 8lu!A`5GblpeeP5@|wIg#Ss7hk74_nwGjMa6#PP?cW_iXYz14fO9fSuY-pcwFl)N
z{Rh6mten)r=U*gx%e9m}Wlv_W+C=1w|0N)4$$6wIaf#VL+Akq>oI=1~(SjnQLlZNT
z3n&LuLmIOMN)xUnnHtO<e*$a?lfQuT$w{pm9x<<<26o81L)sSzAB3Oa7bMvErfQ5|
zfN)&PCG3B>t)s1VUvBA&ENW(fmLI?Q9ybV#w(Hp!srF7P_v)u#b7c7C*O^)oQ6WDC
z`3K_C)4}oVylg_QZR=|V_WJym4$9ua#ew=16Bj|r_yTiv8ZZWPHQ+Ah|N4thGtmK%
z1LA_tEIvu9l!^^ZNL=U?#zF;3C{}^E22LrSx_=++b==4OD4u*yh5ER{k%E$Z{J>v>
zeNV_VDgtd4L&LkSB0!dqmIzMl=%fEd<uA_q;idTrKWL!mQSg~z(V=019-vbFy<9L$
zQTTD9GH>9G=dmyj4oq?)%za(7J>8Dt5d!v%iwxx-*jp`xUHTHJV31pkU!eY^x=T~z
z<I at uGmtMSgkAOHep|}==C-<^5`AbrgBpAZEB}MXDR^n4EnrKZdD_{<1-hOZM+k1FE
zF$Zw|v&v8b8Cu1kaz{VEPkUR(e%#=V2PA|34+SDONMWP?m#+)*&;0+{*Blvn?M?6u
zM5Z7o2Lgv7VCwDSc#blsw875&uOFQle&sq&{?@hCk_wG9DMnFVR$w;5a!)`O5;;Q2
zNm at M#!jxj+7pHJffY)(-w=jsf6<3y7r>6i{5CR}5Os!#Z at EvD&H3)BM+uM?48RGE}
z9~T-R<b6&af_ez|yS!Yx>k>YahRNiA;_yRQ%CSkY_jhnUk}l7r>anV>HX$|M$KyB|
z2Nd#7Rpg`;7YV?;ty9?GX>z=g*{Jtih!2zdLMHvZPq-X at m{|Fa=RXNdf_b19Fawca
zTwCZlsF5T=00mE$Wuz<NxrkG$;A==*`uH=(!PQAt1=BvS0M5^()cBHmTM$ZDgEccP
zj*XEEH3buIyh)@FOM%N-6!1&fXJ?(i|1Z(*>}cPY8;UyhgGi*EzH>Ju#1C_I_~vc&
zA9#t^KKq7S9)I(eP;du~M3Y^Re}J03T^Mc<K2t>(^h?e9X>bVG3)sR?W+kR4LC2~z
zRp(IU$7BExiPJBm+N3PbB_FD!Qs5WOtFCf9OkY1wW>ov!EVbk9vonC!n94?9z3%9+
ztKs1)s5;T{(c<x79~b2F;G=)#MUIFLD{g5`%FQw?uI;)i)YmmSCJb-6>ybyWQ2zF(
z|FNrs_>nlWvQm$-M7%f>XOZhcyr!ypJ7*!9BM%)w0-k@|RxDMBJ;l5 at h3gXMkDt#;
z&l89E$jp!P6GxeV5gi*LQVfAMfnY)^tO&3QFjtWCMNeEh_0y9~DYTVU<;2aqE<Y)7
zJ0wd8N8<K}%NO?o6mZP*ln#MP7sn|96pEk~)|yd at D74yj<tmC6BmAOUS7*n*+ at R~B
zTry94=7UcnV<VXVJDz?XcpEVq{1V*q)Vm)F^S?SD7d`$T<R8orm3gT*QP$MZzO`94
zGLc)5i}wRJ2wo#<4=IgRNO-Qg0Nc&n+eu}stQrde0_qd-e&GNaxOvC%Fv;PfY<fM#
zd<}Xq&*@o7On0ka-*a@>)i~khj;iAq;8oPz!YL28qxf at zeO%M@`pBr at q~fCJB<Yby
z{%hA&d<^zIN&J_5^J9<w+1vH8#8R!J5AeAHL;2L-zrkM$Di6F_h>vSXh%aF^f>ONT
zB+kP)&CHDQ4-XHeh=4J4pT9t0t8HTgpcKdlpw}mlJyu+$6O{kd7(mfHvAW3#tbTHw
zxe&FV)FB{(B-V+4nlP3C2bHDp5pD;bb9zQR at F$di!i&o4ifCYVkwW1l3~k&^D2m8G
z>uj7PMAh2HqC*@RMpIUB$G!YQjqa|_eYrswMr~jG|I_b(5=_~|YQ1f3lQb^0P2`_j
zp1=DQ^FPQ0j8o)4uP~Q2Jt;et+$+eRJ5Fs?&94xVA$@~3P=C0{3QX0xRTb12h1H+p
zFN6lNEjDuMnLo=wQ0F8&o at 7)Mzjy-WhLL}ge*qF;Cz2<E{5$&WYWRitQ~ey!BX|Q&
zfwyEIpAyGVfu6?#y<B$ncm9Y-OES|v-H&q+1S!=4bZsr;xBpIzEL)MK)R!``<Lr%#
zk4#p`5Pqr*v^;$^JjkP at wbkq75m<JqUXAA`yHJkfF;|`rR~R$DulEUHX at ILAd-%_}
z%4{Zo(j_Pqg`<Gj3K~1litI34m#i05#}L1gkngEeQ8AVrc1V+8I3zI5<d6IdOF(ui
z<a-g(q3}}jhrss3;*MpFYmUlaEKfuMcozsRlZNJekH1j6r at L!kZkpyMCJ;gXKln5*
z9h!o&hV64}pMS&rzwz}yxn=Bvn3zz3zNWbW{fB^N%|IU%ZMj8?vgXFl?QQy?-xB1d
z4b&~OSXpGL$tcy3jSB>tgh!T!?7Dj10?__Cs|okD<4K}mgT6qQK>tDQr|vw%8hSb%
z9qw;X8-?2F<cUj at VmW){;s0ds>IQwzpD}(}8sNi;ONzxD at OC}m=j8(VW?HF++eFBr
zi2$=*)!PGP8k9bgCh)PF4XA23W8thw%T56bUfSD_3RKqI)cxY?WL=dsHAX}Rd3m42
z$KHA267L8JXc)gFo6LXo838QR9^AZcu7|wbj|ratq$si^K=iRXn06vxvLebmNeP{h
zQVOb2ys5&{0`$!OC!W;SRwq!~5w-^@m>)s;AyESKtjn>3QL&Mt?nEkqz`P1|>KFe&
z^H<l~QK%riTKMpjrq$K^pV9+A(%aL$FE=n_O&eP<nK1unl&Ay_+tcSMdrg3bWOhmg
zO}u?4HZ~l^75XM&{)ZH0us;bFO7xbNCQuDL7UUniXxHh}fZVb*s-n7DobyFyLw2#!
zIyS<qlxeX;jAI%a6ylXR$>NhF8k<*DP98VmQNjMT7^zZ6c?<LK;Ez0NA1_xQPZ!Fk
zk_n7MhJ<%eGz3yXL4*Z*vIJler)4FRAkR_)LJyQF#quZ#r!bo}9UT=DGoVHVh0R`9
zWYEK62cal=3UW=MwzYZS#=HFK$N)Fmuy4`k70xax4)k-!#{%Ubl!g?Ch4l{G6SLjh
z(*-ym#6o1gAgjk+4hf$BWXVprycXq$**j02&n%749~~0qpN4pMyb(kL1>AB^w?J<$
z2_Xd=WT^nIE|BTFyKQGKQQeZ4G*^+1MNHgHNO;en3U;ujvkT8BzGV{10B(r`{-XQ7
z-kyEA?acpM6c3ud^LM$)RG?8>S2rl)$%KX$l#!h>efw@)d=%B_Dq9=>CI3VH6x at XT
z3i)S7;;|tA7`a_%&w}HU>B^ulkV+%ebv2Mx+9t+W6vp1VBLs-YMk^s2m8Bd%_}5T>
zcL37bo}N5aK1u?y1JwSNukKOCg?Hgc9yQfMANtS#8Q|ycAK>Nf=T*|(Yo492nVq*R
zE)xsuefhd?M3`rApz{c53&?yn(I{(8MMrB<bveG-B$yd85~0Z=if5Udcl3`6qIhe|
z!0T^w1RtZWvoqM=J+rg~&nJd0g#sb|1!;yihA)gK7DW-o{_x>Pec|vIn5&}^Y1Bo~
zn6{Z|Smjw;$pT;!AjbjuCr~2(E#!at&3B02#wALiw?+9EkVP2 at l={k67rJ}7g+~TM
z=fyma%ma}ku@{-g(8yIQH@>|`CIwgs-iy9xuR6Z`FW2br?cJ9f&W)z^O{8w>y^jkU
z8}aGYpE`p>1EqzPnkkfZfqX{D--yqmqTmQ({s)18<S<DR$K<gf|DeAJ?n7cgAvWL*
z1TJA|OU_C`F*bI#0E8o;KurOFE8u?uy<KxkiYodCD0GEy+%`Ky0s;^qiqoNuG_0)r
z$fNc-aq!?nf1*QhkXJ-(L~uk<XiTKo|FOUQ$H7PbOuL{`i@=jd2 at bQetHU@rplzy`
zmlTkXgMFQopQF at kbWII)vvYJleDEPzb#*|17wza^kMhp;{@323O{S!AY at Dn~JfEsw
zp(HWi5akE27p5o*dF{wB1y9lcG4NR+2+G2Ri1GvM0p=6Xu-q at oKWi)KXx at 5~8ZdrQ
z;2E5agBS%ETrm<dyh5TPgd&ej{+Xm&w6#@?Pf`Do7fN6XO_%1#Giv&KC~u8pR at d1f
zP at QB*SyotL#L<4~{Xk#ezT9x5t$cG2IT?HFwz{JW<)mTzY}3LV_AK&`<6`lP at 8gq&
z!sS(M&Hs}Bp?-3#_*ntl;{)We2=cFz_nbdp+t;0EG$8-*f1+|wK92-}+Www`Djn>6
zb?~cqv;cvF#I<s0sPV#+Tni|OS_75s0!S=AAsV%W3Ku`}s419&kh>jwG%jCRF*-q@
znRGBRe<4Mo7>8+W)G{+uGdWe!-KDBE^4{Sp#Qap06q2n>wK584x12ur at Spz|COPrk
zltLw7yr3YT0%KK7s5c}MT~}Z6_4fo^3c8ZYbKHBy*d*VFdh~EYLikfRzlicf9ULfv
zX?S{_zzN1&4GNC5bmo5)^_}eaF>13y5tgql5uBFtbX);bZ at ekq8b#Y%R+h*!C5;95
z0`d>whm<<xAFYf&VPXE|ef^{YA^#xa(4Cm at 0TV(5(fPy`+ at Uy5S!Bt?{E=t%AW!x8
z5A4T{%8qj%eFl;lVvy3l0r3225$2vwTodHK<QB=fYphhlH&yM;IO-{4g;@tj0TLz1
ze{L!rP;ntkWYyp&R at Ru6b(Rc87S&7RQ=|>^v$nC3V&>t7I@|m_^d`8w%SXn<hY5mF
zTVL0-wgy55Z6P%)xxBR*#Kn(1Y6=}fdf-iwxI!h}4m|Xq?1evSG9bfvT*;0vGF7Q9
zCXL++<`aRpE-duD_^M;fn5+y>*MmVJejEu+N=#K1M}+uLAkQ$+?|R~>m)nulj099W
zP#k!f^aF#gCyr%MS4A3zeZdR$$lv~iOrnkBM?wpdq$LR%h_$s8AcMseorIt;z5<d0
zK<~rQ2(KM_d!9-`1x$j!;@3c!m+yWKy#wn4Zhu|@gdbxZZNIdw)iASwt12ua2-r4H
zSWted%N2Q<ET(9c6SwcOjFNYQKh|+mzjR}8U|?TvY5BQ>FTGZ3v-H3CYT4ijKosO(
z;IUWdt$+1B-Wcwhf}2J99r>@RVj}vN{A-HPf5_c??63cubszcfy?6=YXr;xHS6fT|
zBgN*B|E9%xC^1nyaC#GHqZT~zFUONiO_f6Q+Ptv=H%RN&DXuc~_AGt=oukA34KKH&
zB`qyzK}p%^oJEZB_B*<{xg0!k<Y7`vq;eSv<c{OcjnslXh)~>)KgL0>B`$z&ZyFs5
z#lIOJgCU$(R?L@=jR`{!Ip%WM&E17;TtIqclj+)8p{v6A$y5*=7J&H!{~I=bN=b<<
zkHT}&S(%BXH-h=J&dk8}2~8H>d$3PM<t5M`QSDv)CiwG7S_k$_!aMR0=M~C-YMK<Q
ziVk66enNb?L`e`$@E9mE2%UqJU>&I*8I|P<G#Z5C0mwPu*Du;08XVl0TXbAx<N5|z
z{f^5|Ye&XyljG)@IZ!%K4J_RGh`JKoby8*u@(+$3h=M5pINNd5F#jU}bYS8tR4IBd
zJ#HE5E3jEnr^#wj+pU0S2vD}JEQ6Uhv^G$#g4h`lILDJDi2x5F0SM&3|Jkb)cB~m6
zbDaIbMp9lb4jJShV}TAS`ih_sf3c^>u}4@?WR0!BbrNvtSnWSJf_Tu|?I?mB7Zo5B
zzL}YE^n{YjI68(y1_nb8%Illh<D>;+z~GHr+Xy*wXy|P74-3MXFU;-sde1;#(l$|k
zNc-j0z at j&g48f0AP+p4F%p8vL4 at G3%P`~(xz(ip>5eh`|k$;|ZMpiPDKY at m@umIft
zc(fqDLeC+EKfk1a_XUfCL`Ycm`0Eh9RSgbO3R4{ISJ)2^4eiT~EF>xh!sNg&s~ep_
zKB?Y978r^><tk7|xodDW%xUCgq1NKrVEz~6zpS_n`Io2BAtNJ!l^tR$%V2MT-JYf`
zQyMC$Lxh_YbZ+OVQ;CUDOm_`y>+nkyX^S0CQXuf0oTy(~)-~DZKl)r<Yl8gBarWOe
zFe at OK;yZ{P+zvk^HhfMVKK#gkQ6MJF|0K2im_kG1h424^8;UgcCi)5GARQgJs%~Kk
z1~Br?#e;$2!9bTYvl3xYSC*F at KY9T9=U(u-3r`6)0Gl}?QCeDGhf$33Lr{RQuYG<F
zMUI-V<mrn9aXdYu>f)FzvSj;$FsXnnS0X4s%>208u+0maTd_y{gM4uWu^cfA at mgVa
z at tjfqF-h>pVlv|q1%KuE+P^|$WO#UAZa8WL^H5V%J3Xx%o#YoWO-}R6f>G=`cMcCB
zcby{3B*V_oDab#1Fa95LHz?XG%>VLqIuNx7`Aq36<R309O>1j$tr-+hN^T}J{@v%#
zgM|hNL|N^+ks&zh9Z!<H1C$~v?vWwFn at B(zMrFs at f7bxb?0Wbi0Li-Ee&;^m^F5D0
zmXMwpMhPK*H!{Cc<=GO2!nu#wCjJF4=uXMhiyUz|_*eEwI7~rFsnT4sa-MsMBmREw
zC{zL<Ga-`EpcwTH at Ww>|)1bUC7vne2YU7O#OOS%k=e>aNtx%_e2f)5CkLOdMR2>_^
zJIbP|(yNev at voCL40IDPGt)a-R%B!#b at T|eaPOg^e$tGTIB6uh4Ny1c3QBXrPQ&Dn
z!>9Y1t3=jNs7REEkB<~b`*rrCBP08An|Svlko?R%<((a6!{Y+++Dq3Ve*glChk+Uv
z+;yrVdq at 7;$gpGnCs*ZP^553VyhI1w6eO_{%EZ-!{7Yg&0WRifib3PItgZGx`4nLq
zT%&N;qbf6fIi4hZ-9(?O`}-iEpjZF`Hge+~$Ju|^5X!jBFX2SZDk;vYGBiGZ#nF?n
zugA$FlGt$iun}Sds^mCJ10uojKo8gzsFyVJ at s}v`yh<F0Y`<ZBBQ-mPJo?tlPb2yM
z-mbX!j~w_LNw~cD)N<{3;!1FI1U4 at qA79VoXg&?|b7+i7`6Q*F{75KUASgc*W84mq
za`HU^LZGey1eKBYUWbt(ND&cml3CzIB>9xsI?OX9)1{`z2LyOZQxjNv2seZOBq<D0
z2lK-lrzps#>P=-&7oJZ8Rbq?s2Cuy;j`r*9$3{o@<u-NuE&;@b)%D^Uqh??Pgzeys
zcL^+FZ82j*;KN;~D{}?;?`jw1UsHhm6Q;~7Q=|Xj%ojSOON+Hd$UlxFg~dWnC1K?Z
zr5u!g>-zfe^DkuPrc(v1^~`y~VNjijPm;`Tg0n5B&)~#s-q_4HRImp9l!tuc*kiI%
z6 at jq$w8TRX{YR!o?YIi>sQ1Z3e2j`FcH~B?JIe&gCX@@}U}TUdl21U&IyWa?0&Idt
z0%hzrwg{66!hi7zP!j<@uF#SbXpT*g<g1l~FT6z2)qtpopjZjg3t%Z-EkMzLb|-6f
zX<13IWIHK8^F-O0{IRM4?I7x~TY!%>b+w6q6r%|=IHl`wBeNm-Y{XwEBT~C at 24)yu
zACw<1#O^4w3Z%qv&f8X23BFi{2Jjk{x3`Ex{c8L1v9W!*S!QSPWWqy;7rnT<4<5pS
z>$eCpiYZ{(`8nJ*)A-K(-%g5(Apg|#OpnilCb3P>|LK7Ivt%&O^ApQV=9KI-Ao?k?
zjC`X3c;xuYufng+($IGP5*|GAD8(nq%Vi!NY2H4gZ)xm*{u)TjrtLF7<sru;OJk*x
z#}7Re5gA;)unI!naTRWJ-;;*}gS>I<M at EN`>gDTk%=PG_(IH;o)?n1ck<xzgaYuj5
zNgVHx!e!;>$TdZ6k3Z$-d7RqQU at BlEB-<AWB$<VzHuLy+L~1hg1M-i0Kl;)u*hi$L
zFcb#Dj`EX8wMQd#d5eoB789x+ODYf@()r=gqvVtLM+sxKZEoPzLH=W6!a!)i3xxa!
zhxqX#m-qBw*TVoqUH}R|)`W4OACDQyWo3<aCV&1qSd>z`)o}~IPGe$xd|z%ExfxWB
zkQt36?dG?%18<(c`z2Yx$Ul36N8EL0QNB3;qjr*<3!4)LuOR<B{(m|k|A5<(e>hz;
zDk?Jz6!0}AWu>Yb8{0NFCttq-5fFNE`^C%1KfY`6NdgeHEiTztR;#)@p%TKOG5+4&
zpZJh*8$uon at G?cIa5?Z7$5khfAHWJmZ;47vj>*mhML^k8n9pHBXF|5l&K*7UFj*=A
zzHZ(g$AOvQb!j<$7PiJby{7A#7a-mb3-O7F2#kyh36Bo*@byIbL92mri&Rbiia^L*
zT7atx?@fAT6{byCWC$iI@=w at HQ)3_?i$#xuL|vP?J0GL!6FS760<OvBCtMEV$w8k1
zv>6s2fTEb177rL>^1Y8FNpW<@F3MLnwUGQpoi&^f at XX-q1Oj1OUIBMO=&-t at H9b4k
zalgM>V{&3*Uv8?JY63mkm6a_0nI<^&GA7=-jaD=H?nebBN`Q;pH3b=|ZHoS*wNdD>
z5a%|(IP#B at 1A?6n=>Ncbkbja}6H7F*vJ#j!lXKGa{R7B9)vkpK*E&_l<4 at XWri|Sk
zT!M<OvDY#28b^jLQ&S3KwRL6vr$1rRvLeI$l~!wTL<m=fNn^xop?C0dKk9PmA&7v0
zbW$ubJ|-9lrD=F*;N>^CD$wTyiak~>f=zI?VPlJTyvSted-*!HCtgR=(jiodOHGiZ
zCPJl-rq{5vM5ZU>V-zsqGqJ<qk63bqaGt=&h36+Nj?7$WyBe03F<0pWz5*Z+4kBI(
zoN4gGd$<V%T)YtzuirqoM?=G*3c>^@gCtqXXkZ%vRso123yhzD$_qm7OkPIA><p=P
zM3AwUQHQuS at n(P3{p9}q2i6Pb5D>!ol{$$ckDEjlfz at jC#x2lR%sCvPpd0f)C}rU5
zRI-4mpLnP!|I|9C1M**PHB$?<veC*%)ShCyElrVQoLy+!+M?PuL_mZuJD<EFz#)eE
z>64fuW!-5xdw~#b$HmLMDIEO&_0QY=7`lB at cAE25i79a~laNS=<m1~XuLtlCe>W^P
zDoPrKf*lm%OMk3geM=MU6SCs`vgQU4Z?|Y^6uc0uSt+?$gqTx{3Zx1-#saDc)+oBS
zzpp#7Hi2xUtvRp05s at y|si6gc2ZPBU%nwrp5Dt8~xRszH=e>qijATzxL!e~wCzLcd
zqn at GsH!aMAe;^-?WVh7JM1bOarPLBNTpR)6!O&l`K=70bv?}V1<MsjFxA5t=93=8Z
zbxY^_{ngr2`}7~V9^6^6wGLqrZ&9d)Iz2h~@*6mx$>HK4^SPk^ApZ?kWoZ%qJz at UW
zl`#Jk^E!0kZ^%EA52tatt%f9;Vw;uxzARNi-PYOmQ>Q>vLj=U{-u2Y84RbThq{5i$
zLVz^&>zfp9ubG}{ede0@*MH((s#NA0jgV(X#YHA&r4XSeC;(2I;@5b100y9eTc)Rn
zuHSMDn3%5!ltiIa at Z}p;*Rc07;Yo^*kV=wdndt=zP)Rafsl2L^RIkkP^5EoT==}w+
zj=JFZu>;ijAk7e)m*s#liR&@9`}=$1sK=9;o0nBqX9n{C#uc}Z;MclvnW-Lg30 at TL
z{m{XOS at Otap}ph($yAi8;784nrHS7VRKK>jm)uY65mpDn0nlY2 at LWP^58i8;ES2<m
z^d-j~{hE#G{rgW*Q)AyeJ at x*lEl)njT`qq1t*N)O=h+und69pP<m$_I=KoGe#+d(&
zJzbeuN$|~rod)yc<?o%AE`^Z~`PbD}N5+JMPsk`PkXPufXCH6h-d_CR??u%W;NH8h
zTm=r)w75WgpXhMo_SuTQKHKu@&wI4xb1Ph!mM4pj2w<Z;9I1=CmL|*0Z2J>ejvoA*
zxBF41ZpYx+%3S<Bl#Fk{*Q761)tWk=elDe`Kvtp8r(UGZTHM%J*wBz?v1C<LB&k#c
z0t7c{XIpu9S7=nIrhf>fz3c3`g};A=OrqEE?h^zNlpj)2GzCPs8dq0YR*I|3ajs%1
zv*dvo$5Md#gd(T7dXQ&k6}*}ek}v|zDd`E~*Go!`i%*J)Nl)Ryvc%8<Csobp2<n!p
zyJO+A?|37i;3kgXxSe0QF*7~0UpLFvxvm#p?Z5U~&r8?2$I%<_K=t2#=}A;j<eww*
zavfE8sNjQs%lwZbv__)Jj{J9DxDb+<fIG<8(LC_f6;RV8k!jjHl5?|)>+M|IdFIU0
zN1qY~MHqUYzecVf8WBoM_2?Kc9Z=rkx8DDG50;`Sq}794_VGU9<>~4l>_?$!hC1}<
zUnnXO6d8Kr=%dFDKf)0>LP=T&irjwTQgN*bwkW23 at sFnH%d<^pI7Z|ai^5WuXS0)5
zAf5^i at Fd7Zbtedsq^go+wW^}grZQG?7Cjtoyl!k53!3N{Iugmt at SLFh5cWd<Y1}-8
z{MU^P;wcp>Ahb1M>V`)I5-!AIvWyJDN|#+AFKeo2G#vgZS@=(rg<2##K`~%I)GsD*
zoL?lTI;{YEkfjJ$B}9qe?bqMW&dl!Dt#W!E&RczF2e^0cvG4hpAi2U7*|@j>jX6gY
zm3mP6glH*sf&60#uYLP}<^TKzI_$`Q3-XT_2#1WitvxX(qkM3PQypi{EPwnN#VMG|
z`d)Yid?{5MC<kEOI91x-4%Uu7KW~FV2eX}PCGpWjevz)Q at WAk>5VH8A$Oev!Ov*^6
z3 at dpq<P@}DcwB9(6ZnYw`tJX82_>2YWxi*iAE%BTKg^zL8Mu1Te at KVqBdlEP5qmtD
zG?>!yNuF>$3{g3-2RV9EgB7=D^*}!_NO at Ze>1lXAA##NLN at LKm3`r!RfOe*D-U3@*
z)z*ZzLy{UpB`Rcv#;SOEjxfF)H7*K0pQ40dr}=Z#+?@aP8^Q-1Y(I03KEKsAH#@gq
zw>Ww3)cc>H4|l)tD)-oN`6)PBA*Z6YMNV-(NAeAo$bWTj7n$jl!$T!l`Qm#Ro=J at D
zI(ME9=>OI2O(@l>@{&wl8E%=BJeg%}i&LFv&LaOfNsxa$FuYS#xX=%esyn+YN5|>#
zv$ss8JSHjDad~2TBBfHI!u=qpijxF`I2Fos%rEF5MYq&|=d78Yb#&g<@bYnY9EpsJ
zB78tjBNZqJ=9(s_I0fkhnh8Fiu1lBsh}DmHQ{Wp%B at r&c?cdh}jF9{Sbxk#P2bn3n
zBcuQeW!bCsxRp@;QGU28J13b6P2@*pmFv?r>a^@sd<EiP$BqCTURG13GL$3ypyPm`
z(-W8|o=@Z0nBz<S`i=Ry`Te>P at P(*K*U at fSUgI8zUwno1)z(v|NnOt>RB%LTG!*F6
z)jeHQ_!8v5qjm9<uSEHW1B4F9KS_>)QK>7=HJM3%&(f%E=bz+M=h<@<$c8Bq`KRy}
z^Z&@TSD?cx9T?{9UbYbL<G`31Awibu=W(oJX2CI<91_L)22Fc=)#!NrnTtmcJp?Tq
z-pkNX|LAy$qnmRhDqbRyMuY1J3G(*yaf4+G_ao`;^f`9o7<&R?lW*Llfn?$c0>cJq
z2Z^N+5}C`k*%`zh;fElUK7jKP^>S(%=Vx|oZ^Ma4b}*VhY78#ZjC?8qq{s|ac;4U&
zpg$XcA5frJxDe|>6eA$qa#CjRehF&?wJmtX#BRUUeqnxLzi#{-YMUiKF}k3}#63bn
z!tB?$vbyr=R~dOZ9D&RV`A7c&tB?Hi7R-J4sX||>Zfxi}e}N9 at KjgO}|1bf{tu~lR
z at +}teaS8JO!Cl<f#DK=%`<VHE>dkk=Q+wQ#{Y1521_9m>;_nVir(-|}89dyN9r){i
z_y_tt`q%#eQARu$)=*+w;o<%WIlgz?kJQ^@ql7f`GwFxW>PCe7$EL(5Xv&1JZ?XiM
z1s8W$cei7%#}8r+X&Y=VE{Bo-tgHlzV8T*DbO3NNj|B*Kd3$R~ZMA7+n5xxayz!1&
zC=QjM3EwFpT~kjd`O&olJ*B2f at O4-mNon!0wL88ub~I)$8?gg82Owe<iVS87W-qyB
zNofg=p1(<Baba=4ZZKA5Yt+#SMQ*v4dtCnP8_K2#OY-dxQ)L+(;k^LL3oS`iS33=~
zpy_u%gh&?oN13Ms@?TO_29TJnnY4<^n2c22$hi2py3U`Uzx^RhS;+s$&G(T1`S<UN
zr}nrvPfk(oltB<|SRlHuU3U!V>vqJ=<v{h)hODwYxlkz{Cm8`sH_*|f^isNxjlwbF
z2J0q(3c}o$jcqzpY!uHA?sup##A}(!kxXc&_(;t!9GFNZ$`6H*NJ|ILQNO%WQfKA`
z8M$$*X?Y1JC&w4wzl;6 at S6*y#96Ah&5IE|D^rX_^iBws7-O`FUIC}_`c$?@WB+hrV
z;_U$?HT}V7#M#k^SPL9If2+pQ;?h3e^4fd!BjcUVy<9dvW1Soat_%YeSOu`e+%;=7
z(?0V*Km`^8d>Rus-xcJ)p&t3C1M(05L;cFCvRDz4oRpx<b3CigbLVGo-65S2Nx&OV
zWNrD=Zyaa$(jdr%2UQ$_!tP!!2OOgXdAp?MQffMzBd}sQj?;i0mpY-aOC at I{v4>y~
zs?w&5Pl|nxyBwjxt3ixl>YY1|3)55M&|XLs1^fVjp<#BKI06t&@HzUXdI<E0<(1T$
zh_!JEGd6x6W(iCH>)3F7dXgkbiZhv)0*{!xhYR>9*eV=@(;yRpatSCrO#VI3Jdd at D
z at dX_&FG4-cNR9Q*oqwD5((=;&-4aT*)-#tno_VqM)On_$<dirlKA_iw?T5RD&j+Xg
z@^9$vhAFqarD62-n{us2AjUj*o({-A3%z}Lm2f8?(~V}wvqC|ddh>0f%*g-1Yi~6!
zEpC2y&vAAy4RT{a0*E8vT1RLdqe0jb;_Dg}6HYE9=z6jm9jAUu1D_{&hKj+VBS#)R
z>2}N~EEp&VX}nyE0uRp9Ix$9wEtAqk6=mk3LGl_faG3o2uD(nkvge=?gT>|Yy?bQ1
zC*)+{7MQ*DKKjqfXWvK at W2(o-oxcWdBIKX-g|q^IqnN$(ckYh8{XQ<Eoa|)6Ue29=
ztM>Bp%0AwjpL!m~o5H$U!`w2y3l{ge_dX<1MV_C at T^Cy|c_jtNe|29kIejPt!!Nx?
zc}L{G<Lo&)Apa1d+m}~>Oze6}$p6G^*LCf!oa%q|CiDNsKkn`7^YcF9Ho?6kUMtN=
zCNau+9ONI4Ac%%I807EneCo&B#L-}yh40AGjVjel$mWq@;1jF at d4)3UR at 4=Moh0wq
zFD;qJ#!!C9V&D>pVweg_YmETN;r34{$m1a18#c0I0IWKObu<uu3VATq!$LFm=DTFL
z5M09q15<%UWLe*K^!yDQE7*hkcZ*Gy;>?7)EkmcJ&M&|3)<5r2=LKe0?izFiK$<Fu
zbO!o~BIz3K16Qvh|HXED`{~nk5afSj!?v^xebBC_)Or5G=(Sh$9qous?<;Sj8?S#O
zjJfws22pLKKQ%+ep at 27oVRH-%{s$ksOt0k#pfbnt|F(fefIABV|Jcz39&Sey)g{Ow
z#xFBKP>?rsI8bD~^e9NEf^eHRpE|8=ZqPQ`LAM5n`seb36y)G510X~}1X!a1cCu=K
zc1E$h|F471BkdRAZ&_P|s)!0uYhQdvVHZ|3UOECX_h0gx99dmm+us{(2Hc==Wvg{_
z)5G&b-RLm6kf-k5<6yC^4qgI5{s#w0Ytl8?dY*n3P!JJbI at 1C9?>KeJiXE4iDL$nW
zo+rfy^Z(Fu&l6ljHR4Fq%JSCEnBv(z?xAZ=l;?<pK+XUWv}3^V0C%dxK=sd&h+uDU
z(T-C;(jYp_tPakh@!aEqG11;$Cjf1t4h=m04ETIJKPW%7!vi=fsYVJ`$G)&oGc~2L
zS%`cE1o?!72U0*8pf%nz5=hBj%+YFa`_JG0NN=yb|L<}klRu^ePEJ_qWJPjh9^@Md
z$b<<Xi at yJo-|EQP+WP+9N(M(2?LDNERJJvNLWBqrC*JZWUvk$fn^j({z$tAK>Ue5d
z^eGBSd0#XT^m#f6^1r=}{10D!QG7~Ak31$ey3St&7Y&4l`JW?A%gek|;;Fsw%@Y%S
zFI{JxKq%0?U0SaE>#vI=ljlfwVR)jHkJKvtDSs|5HWc_7l?WW2eS`fmOL_4_f_-rN
zkRJqH1NSR91bVu_3hG*$ArR<%;_1j(p*S5zF7pE_P at zVdEYJ1}_Gb=9s!4%#jOl3b
zW-%1 at a_!InYiomm3tdl6PaxJtogJbHj-J1HV|{&N-*572L$0|7)Gl{Qkw=uD=G9f&
z%>S_cS9Z3Uhlc=n0U at LMxxjO4vtbF+f%K)$)2Hi*ojrF|d`eKXiH)uc7r_Ws^mH at -
zbA)tw<X=3s_dVQnq|7r8!Cy)MK+fqrW>lCjvEU3<AqPYKPF5}m_wwT#j!+bv&P$ga
z-3UA(y-d-80iK5TCMtFT!U3oNt3U40+UXfAU*pgq;L;SeicCoePH~6w7Le%~5*9%I
zJGG5K3ax$hPsf;I1GEo5|KwEk{6x}!$U)!_fe)kv9!$}|hj#V<Z9i^oZ2mzuLO-^1
zm-CAi1mAV`TJ9S8hi!wj4$>9Dw*c;K**=|FQVeF2WEMIQ35C$WGCN1snD~?qJoG2A
zf&8NyRrK{D{~Y0kLjMs@?R_5`833iZI8MG%sJP)grX(VOB_J>~Ks<=s-}&tQZD4Y|
z`@nvjPsylv*4-Z9?}2bqp at 8=tt`fXqXoF1tFo1zL9liM;m%xmNnE=*k__a5Qc8P<4
z6h*g(z|DC~u}z&v7)p_I+tg(3#02GaC~QO&l7KSH0bJSlU-BCs+1%XvBW%%G8QkXN
zoxj7|(DnRFcr*A|WVK`|vdFnMkB*YBs;M)BbzxpDv|6>+8vHqA at U^V20^>*i#i#Vx
zL;oo@(0`g&mO-5X7~=@?zxn;Y`iLF&vX6=IBe7Q;A;8a#I(IOxI}b=XMe0hZS};?#
zU_@~~b$?qR;Y^CAioNqG63<P;!%)#8|9FN`s7TiZ<Y}FqHBU{G7l!kPWP!Z8I?^P`
z2p~#`^27Wu4#FFOB2+g%>O3ZGMnLl?&cfucZLF`Fn#1kG;t1oSq9_-#tX=(o^N(9w
zr~WwG at QrsNacVq!5s!4kxyO-z(lqp~O^~y}6iR9d6wRqc$^vU0RZdtYAV6T at CLoLa
zi%;p%zx^quu$VRh0&-p|;Rr3t<zvhGI`aRZo+OFtR3oyVe?lBk;1Z0FavnT#C;1l?
zhj?(;S?8X#K|wGlJ0C>(VfMz`;~(Hz)zVO;Rl(9DO#a=SEoaU#`Il2_?(wI^OL$Wt
z0&QGdr>FQF at LmdUjXK|XOxmEe$(j*pPY`}<4N0K%WU7f1gkR2I9Ju<@u1kIgAGf!*
z{wN#a-2!c~X?6kI&Ahl$P+OChm7;5ItQjB2WdUD`ePI#O8+dN>)p^iFGyj85hb?^P
zcmLN at ijpgMVgv}#gewOIfU@(k87=lZ<p04u$%r5i>X)Twr!Zje8 at B?zT?kb;4^9dU
zOor6z)s0Vc93V%{+Lm(%M>{bw8Za}SPsb4&z!IoZ1TBvchf-t^z0Hzma{CbZlD`0`
z1C>wgk0hhuks1l#-TK%6x<PO|sF8K!W6om+26&O%g4ql67@|%w8m}OK)FcuLV&bE-
z0nU{uo%{bz+NVyP{^M-RpMA?ukCFq`hHhX;X*Q*h;ofLR{(<<S0 at cmTkjRbv!-azU
zlgfm>Y#14V+}`n&fPvBOICB=tnySGe^dCO9U`BoS|MhWn{@IP?ukVrP&gFr=C#egT
zU7WvbsHjk1vcob9a>e6R3ft8|{0N$k+>@beuQ<+Py(-mt*7<on!?=L3Nx=odXG;*g
z`OLY}=Eln29!F=uLLi`^eM9rX6~^)A)fLqE`k5(59~wb{o=^dx`9Lhj3k9Vr2MID#
zH3<L`Xd?JGocsTN+S}V_{x};@|HQO-gnaVG+w~Wp$~RU+O at QRrOibW!0auT`2EAu~
zZ7s>&YhQk!k`_;4yUM{qpgy~vQv2yMa6VTJ3G&aW)~zjaXLj}3%g2~-KPuLdyaruW
zL~<g29 at y%f2lO~`7&<{h0EY2Nj%ORHA=q^8K$~<(7}zlU9mlC4h7%I)h139Dy#<jr
z_jSY7pt082mzMOsy(m8|=P!x<t&<Z(xU>ycz;9Fm77xNzg%6Vq0>_v^{vIF$g+C-q
z!&qRd$74)cfvKCfz at w5xM!md|H{Npe|6MgspFaD?+2A>$RPM^>-$MAj^5ysPstPJW
zp!w8Hj6>Ie{F~t&d;3maZ4K&c|CMLSW6f77kP5s&yPi_psck50s)mQrf6|HzAvs_D
z=H9M8d-*5{_r<plXn{dO!h-_5U3J4_&I6L&92w>tpA-uhqIg_ksB-Q=8ylIbL*$!_
z$I}WFp&`CXtr~P+m{dYGA~;N at YY2;ob2V&jQy0=SHtrY%P8fn*byJhj!C?h(+}sb%
zwX$J;Zt~{4VmAQTNqKTYV?d at cmsnVdiTefl@|qy_F$ofC`!*~tIL7?FHO`zl_s7}b
zx=+u`*``u$do$`vj$X^X195=^jT$TD&l-n^Cf at s4ZZ;FC$GJf^2Y6jb1x?-U&QB>#
zUEI34RoPNsH9SJ$RE5ddw!Mw~JNMaRo1Dj_oD9GZqi@||D5wj`R at gNrOer|_;}Rq!
zVR1 at 3v&3TI+y`hh2C3r+2?Bn;?n3&>M_+Id*`}SDm(2>;u)bN^+DbUX(HSCi5*tzf
zD4 at v`Te>S;g0YV#LyS!977-D^yANY6L;<9?kX{FS|FPqTunv%aX|fbtG>N5-F at J}R
zvuDr$aW)X1+^p7WCR26upZDP9<0Coj`1-2)`jCI%zN2s5hBc0gE&BSpba at sl1uj8Y
z&YYhTc$nt3HMolnqhrXws<{Pqh$45+efHSSROVuRgZ2 at KtZfZ`-mZ`W?HaS7zTVa4
z5J^}PX;h3finG8WLL-92Zt$fb{A}V!fHx>e*}3UBBqOsjf!|}Lwx8OD!iC$f7#@N3
z4&1flPhcqVg49lo%M}?kIIgEMg(AJ@(&JNazXweyb35hpyuB&Fmx1pzIV}Ng- at dY@
zZ0)3&EYp7L_G#2e$AG`j#<_DB{x}=tGrFmHcut7b4qd&LTA0th7gkr8Mn?@pgGI)w
z%HHmQm#^nkSHs0eQQ(xEG~~Z^V}leA=ck0_2;c#(OT*YWf&_jN`CtCxd*?oTY{MWy
z6f88ro#N5d%#Fy(_Vsk}a6PnZSeR^!o0=q$ki<vB&~osxzxhW+gv3PBjVu5R(#c!z
z)24!aWJDmAFSmo|HX$>GX&gu!9#nl>OVgS2padyP?L4@~Tv^@OHuK?Uc#3cZbBgI5
zZBVIICCPIVv(vM6Wqy7hN}U?bCnGl<_kP3TVsXzPC8c27W{RMC4t2Dh$NU|(&!4~e
zhuZpHzCq}A{o8xxjrRDQOzu6uybMk=<LD^WwJN$gx}SL=v$7ImXDvLgiLn3|TQ}CB
z=0*k_4+`2GvSG{X>&U~!85kZF+zwv)i|-vB9!LY_Um6!d4X^k_2?Kgkgt}CH|HydV
zl{P!VADtu(4E7Z}BqmCzxQE-5kKqwP2!9l%T?=I>FdT`LgreAhgM~PvZhk at 4)KuQv
z>pU`ySoEyL{@o#};uLi;#K}J>JSeR&KU=58eM*p;s4>N)$P|Vth;ERAVjYKu2Y~-1
z=<Gb^@3Vd3!lggd*7C%&WH3>m6y~d_<akxzpqv!QA;HN{vb?^%4W95+ogM~DQ*Squ
zYF1I+=0EOPMh00j#0LebT3AekZF&mY9K+ZIKR2XL$p6yk|9G%Zvbd?4lF*@4!KUDa
zEQ4%!ACF`A{|Rpo7Y|QYj+4C}E|s`@ouo~9cfcD^KEjrc at UuWj65}9n1J at A~535_|
z_#1CQ;8{g_S66pwTidQ-3o6QhI*h;bfvQ}CADFYK^hh|B?=m#%jM9?8KraeJvYsOR
z6c at n5Y2P{%pOMVWj|&LNhc$H9n7_}D7cV~khuWB>Np*prP;Jl!MTJ!^tN|^k8t8`)
zq}XC6pRw`O8L3LmGa>Q?<qnQ_<R6bW>0RQ3N>Sv5N+N1UhfxghJ)%f}kVO6$KmF#x
zKFQot6@{unyFuE37add{tp57{)83gsHF>RZ{C~Q?-0AIY>jEm9Kv+V61PCD^dqT(p
z0Rn`mAOZpsWEDkRAfV{=O7Cs!)h;dwf@@u>#k$wE)!MuDewf^0GFqL^)CGLc%rozt
zocH9sZ@%;9yyraUdA{Glk!P;*-XH(4Eb7Ck=ta~o`RKi<*kvfWqhdx7PF(ylm^qoK
z=NYt(Bf|t_684Etl2M%z9xacSPyPXyHJn9}ee&oQdmRn11KDSHuQ;`3>J%AsxP9{7
zu6&0rIVpB!QY;#>I6MtD18yR;#hDSYX%2%l;X|-yMRqu^%U>P&Qc6agGkmaXL&JDM
zmo8sgGrAv-P<3xlU1+4FaUI&eO at AE=1LALMPE(|qJ;l)42R62n;uo$b*NKM`vS>W#
zft^Fl6W|!>IQaSKgQu?+Nv1vB6Vq`1knjb)1MJQ8&ywI*ud;aY`yYJxr|>C*!vgp6
z#)F55?I%+}V>ct-!Mq(360`%%RxM&rBs<r`fYi{iYA_VpA&XoR<&c7+68{gL9}2`U
zILqCHk1EtEl4VjdQV>>S=7Y+>tbp}Ezp5Z_cGx!;)Q5&S4xGCf+2?#Ne|7k%qzvC3
ztQ~)O_!Q}%QI6X~aLoETI_ic;ysa$^iS at hpgaN^cK>-r=>Xyb5e>vfB;d&MYC?wWw
zY$FD^X2%fg-%PcVhYhFVD at PJh7JT^Z&l0G~|1MWwz$M}`(qD2R{6$a>GWaJX#=?1`
z_j)`VJ892TomT*VoQ$`C*{ZAR?KK7hr~p6Hm8-gp9X%BN__OeuNLHj*wKTF2=35C#
zaZIr?HMyh)klTg+HRC)_yF6Royl0es1oUA^BMM!+^Gu)f`Qzau$0TLEvYD>eZQWA8
zZD8!@Uy3(&&l20Vw$z43aDWqavt}^V at agAZvgO1{j*S0M;_SKmC^U0D43tWjzak+9
z?mid{{M&c3nr7j- at xVb`C9fRGn*Ob|gM$Qcsx?YHjj3{3uGRGNt60iBaKw?w#=pQ;
zTN`d{FLm$$qf9{%4lbarr_WXI43%|tKhqToApA|5LW9&pgoUTHY3y$-Y5DHxy~inN
z!P~9Km-2Ect}Zt?ZOoLCQ&*;@C$U{<ud5 at 7f@Jw;`kdz<j~pGBnkhZAYCgQLw_mud
z4XokkyVljO9t!!odtCK(Y-t6 at r>X2aeu5)Ri7bBi-2I_#Y(F1U<gy%tHfq^ogv-eh
ztKPnov|olq5(kEFKcvB{wX94T9ja!9)KgVCa$8jeyj2OA8P8uOORq)4kpx5EhGtg2
zSw at 4ay>qS^8{bg3DY8<T&olV1-TPNpTadHMRxFKAijyhQkUE7#oy<of*0!F%LVT>d
zvIHtThIcZ&993oVJf*h0Oaa at qS?lnXus`St_~PQ1qdowV5Ja;DfZ*WV6&Fh3=&|Ec
zv%0a*TK4VpZXQ5$B>dZLHPv`BEBm%MYFERn*?i~-_1#CtIhx!>YkE6J?>vMZnvaP|
zu{lQFYzSGIljpx`+m7L at H<1x-`}?OuH|~Xdd$q at SMaGgPe<q9#@)Hu?+3L+wWxzTp
z&rX-IJ+?A7&s2!SDz12IncG at fj^`Gp>&SaR3z%m<O`gO(@3?UJ<A42PZD@>a5H9lv
z!NX7d!_uga_TGJzn48NaiZ7DsuQ2Gf)qa}skXxDayNgU{Cz&+4P at n`V_dWhME%heN
z^L at _$nq%V=QnRij<1W8%O=tvh_V8~n^tgO|n~4autq#DhS-0<F>QQy)2vaB?e*C5E
z8uO9Yz0#mflP6n>jD!vQwr<}%Ih9eMCOjT*VYs(fd(6(1Esu$!PbCWhZH~sMRT~O4
z7K6sDSE`k8BqGd#Tm at oyD4h|>#-kW{1F?y5OyFk~;War7{@k{v${*Pv$812Qh)b|v
zKyoyvSkZKRc7WH7$6t<U(a7zG;r7NNqsd`H;DaY060P)XIRe(myb>kLOChq)1ymj%
zpOl(a23zG>>12V0uH6p*_DrqX6KpTv+;0j5oJ~!T98wPf8b{&~dJi96vuB at obu}MT
zGSf138aBLOkwq^awp&uL<OOPiC%0eye{bPFU)7O(e7cH``Y<jr*1vg6R%S|8Rtn2l
zd3s`6Y66pdwcAAlmc7<h0fdJluPaw(5Y)#Qo|Tu4i=OHF$gTS{h)ax1lqIC3CZwdq
zvpbfq%z)Jp*L~Ocl)K8y-vq at Xejsj7*P5Dehmb;}Yl%yi+;-^VOM3d?$RcE#Bn3pq
zBQLtJ%EynNkeVTY62CHL+xc(E=^MWFApG+Ue!pvDXMTlG>+{*xw@?XL{r;bRfkYSL
z+`#ZCq~BDg5^kBFOTdG<$bbv6bkmlGp`B?OH8Ir#SFXP%BuP$;OHQEk*tqEB%NDcx
zc;-TE;StMCE?dv>sqm=`wF;#G@>WQ^N=}y*I34(BV6Tc!h=VvnWi}AEW(m}=acl?#
zn9T5wAft!xvg=_ibwdlotbWt+$#8FE5F6|U!Z4uA at UC4&rQ2T)X#h|Dz@?dRn+1BD
zn3$5FRSoWf;)#&;!I>K``uT02e98+#XE$va8{>_@@JLG;bUfJ#g;LJ&$kf->)yqae
zN`a<!+csDbU)0s_te45+&84n*SpxmU#YJQMe_<erPf3i9kIBf%gs_wu2x9a!NL6Jj
za<bq^MDT?icET^U9v5WJ%+DilL+Nm!HKuYDQ3=lp32_u~^FsWELzsyTlbmq-LZbTJ
zc6(I?a=`5WQc05U$el-Me*_PG8E&(1kCT(r5;R0_OB>c^JKb>6yy)kX9Y(%Pfu)d9
zw4{3z#BsEQSUE<PNL&O_#}<dt*3yP*4E6q=u1#kyy{N0-U!Sc^hqRo25>?qe|M)^<
z;-Z&CFUrcxD%;R%EB9!4smWHRWu at cYl`B$G(-JLC3+f*EuHueEU+@>+dggrOZ77TE
zOO}2>4e2dxg;QWhn3)m}KYwlB2>s_Tr|0KF+T&bRU0l1W(3rnzV%l0)2TMS4rPt)N
zM)tOV%O_4wO3!qrg6Np&>VfT}4}N;l&(Ak#&;?_$$-`i2Xd>Zdu4QJPk}_nWx;1NS
zH*ca`*0R29`rKTD*HJ)SB}bh#*E3-l_+~3QJ8?ylr?Vn98m|-!^Yjc%hKrIH9HP~<
zhxrYX!?`a;7MSBP^B<bILFM{gBe~i<{xwj<vl~)SWF<Kcy?bwaJ6fm+4abw=Tk608
zg{F37CkwiKV(OGMt+=bN{oognyAEEz8;L-+qqv~DhMHWBlGG<vK`yKaeUnoJ2Fx{M
z!;5nN>90A$hs at Erx`xQQxdyMJpmkV{PJ6zdL0Ls&0 at 89du#0#c(1}McTa=U>$C%H^
zk3*iTSGEUjZaW1>nTw&DLiCEINtyD<8-wbwD%eW&f~m$&6dyCCGUS}l_8Qy?w>i-l
zB;B`vb*!SfF*!96rTf_om+Feh9^QfS)bwd-TIb}cwgU%^4l~JLa|k4=l)AubQ+;E&
z#!>EJ6{&GM_doe>V`ymf{*!RMB0rZx-_$I0Z2fR#e!l+D;qcklbj&TXnJc_R0U<-?
zAKGQ~6r-Q0(W{yEq-Lfo^0HNWt;Xr#>i(`y=zJ+Kn8SR6&f`j1d`6xs&sn at YAqF`-
zPQhmdy)6;Z&gK?o`<tgum8`4db-+f3JTsLizr4E_a2&qUbe$G1IKAE2^vS{3^wZvA
zx6>!jNYm03sr>Mok-a;weLsglj;GYruzv1i at 5FR+T9V#d%8<Br+t$60{uw@%maC%B
zd31s!3PC$&ZfR}Cz}~UBFTSP%Jhb#|D0Qn18mrIyt5+#o-vE;jr=YVyw`ljh$FZ@|
zY!HwdAWKUkdY>HuRy{RHepGk>VV2>cHbCqv(F^R1D2WMg3!)B5DBwqnKOh6tS>vk-
z?fTVgy#tjePo0&lHGKBDx2d6SXsG|vcVQ6pb at k@P<~cw%e0qRz`a*9B<Z1Z5_dIwq
zcZvcs)4T5e*fhF_)wHr8&)C!&dG<AxNiCu0G`*f<e3~qLl_gP&2>vved3?cEf)J?0
zW5fK1H&nQR+F6{C7!!-G*rNBH)#apl;tNg9NMWhVl%Bv>#(4<Oi<(<Y+k&WfkqC+7
zm+XM>*Wcmesnh2qZua)>-ZPh0?b&ZxzrorPboC9)0a9qz at peE<ogE*%e<T9Woua_=
zAG&!z(AT@|+neZbMV at -CWmdTQQcvV1P^Cw2G|=DAvrRpTY&h_HCZ;3Xgv-TMWzhQ&
z=fe`lWY;5qzzUZfmj1IB3HC-1S!LAaX>$<>d;YucWX<U_UrXGqRX#(B%eT3|YG`-)
zj^Ri&a$N52<5RgdOV9Wu_3$J_o(+C}c-y6`#eUzGi!+h+Z=hUYHInd7<~z)X`XZBW
zW3U%>@6uu}P39VOUeDh{VTp^_SATCWO9Q1rhsZ^F(>j(9P#r3)w%GXPrmD*4zxB at 7
zoH=`5*ozQ=W4WfcN3NYEbfOK;qR5tOM|P7u%Oey#G7(w-#>&bZg<6+~-l(m-gjv0%
zyacjwo4;~tOf=7Pe8Tehl`EF5h~j=o<cH=Zc;H~kYQM^E!-v0f=BC46X(@HSvAdn0
z7dm_Hg0Pn$U?{e5R%h06+%$PIvL(^Tb%R4{qqb^bM`ZmQE_+&AZPh+sR~OgC!<pwO
zvLJTg_ZOD9bq*^E0>r10M8FKcY42WWj(Uzw5;f;*55D31oTr!j`r=t(FGj%I(GkXn
zZG!rtp^owCNVsZ8cJtBGHxOC*w#t at OtH|Zy*+%?2N24MI-rKaU?a)^QF!Y@~>uqWF
z)CP1GeZ&60y{$W(hu1xK{*thlBjD at XLId1HDATcP@bboQ{Vajp7GIgcWv>XfbsU`_
zw412u_4_}5>o+z(Z{X_--w69H2$Zz7(X4*#li$)<v{@(!oWF2c*l$F at T(|Z&wiL}4
z3IZ1{UJ)h`kSqchFMTUaARt);E`2j2Odudx1ira^RhU3PvItzh@|`e&fMgN4^6fQY
z0s-kFFmwHiFoA$n5%~7%4PgQS$s#cG-A!Qv0m&k8_1Z0A0s+Y)@ZI&>!UO`6Mc~?v
zJHiA4l11S9&F_T?1SE^Vjazqx2?QjIz|C9tgb4&Bi@>eh_k{@rq>I3v2e*U?1f+_<
z?e8B769`Bafjf5}2@?oN7J={Y{UA&rAXx<N-v3dUKtQqx+<Wj?m_R_X2;6`8M3_K8
zvIsnQ^ph}wfMgMP_`_3S0s-kF at Z--9g$V?tiom1C{}d(=kSqc}Jo%R}fq-NY`0=NI
d3lj)P7J<i4|07HwAXx;SJpHdQfq-NY_#X%t%ZLB~

diff --git a/kernels/compiler_julia_ref.bmp b/kernels/compiler_julia_ref.bmp
deleted file mode 100644
index 2082a1e9b568636fabc6e9b9fc3a7abcbf2e131a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 196662
zcmeFa1$bLan&&<9?d}J=JG(o~%sos!GtGTD;3Q^7S(as4l0jyc*)lUTGjn1maT14_
znVIP(7xev(PtO^(oZEdn_D%N_D^JBwojO&ebLzZR^}_#s>m94F|J;B1IpN>e`TrL}
z=I6!#KmT*TAzblKyf5a(zrXn3f6kIDBd}se;Ftc#&smaX1Xk<_{PO?&c}ud4z=|D#
zU-^aq%aSZ3uwqBxSAXHZSdwJ~R_qA;+W-2mmSh=$6*~gI{=fg5C0Ryb#g4#l{Gb2Z
zk}M;zVn^UNfARmZB+Ce_+!6St|Mxd7$ua^fbp(Fvm;XOYvW&or9f9BemH%!@mJwL7
zBk()F`adkmG6E}h1b+9|{--5bMqtH`!0-L~FIbXg1Xk<_{QhtJFH5qFz=|D#Klsi6
zZAq39Sg|AUhrjiIEXgtgD|ZBb`xpPvk}M;zQb*vAe*2d!$ua^fb_D+TcYfKDEF-XD
zN8nF>_g5^*G6E}h1pf5*e$|pJBd}se;Lm>l*DT300xNa|{`?Pq-I6RLuwqBxFaGd1
zEXgtgD|Q6_@{fMgk}M;zVn^U>fBajPWEp{#I|6_5+h4OJ%LuI05%{Y={T)kM`Uv>R
z-9z>9OYg_h!y6ufzy7n|wWKAEKw5i8<?QB?-G}=gzFcBgmgaAG1pemFf6tPZG6La=
zQTpOMdg#6PJS;m)?5g4PrG&!V+JncI(zB)Q8yJDV{fpnXq}LvSqOCickDo3Z9}{~>
zYG@?m?Yus at xutSuCVOi0Yxitv_-01n@BZ=+Ea~+|Kob(+?YK5LG{D2dF{8bmPKI9^
ztB;+{sI5|~eM|Noqa>@l=k+?bw0bim at b_Q)LrZ$?5lAY?PA<+*sjcq4`?TZc!|cgT
zuGSx<*43s}l%$VulFM8(o104J_q}%imWE&T2>ip>{>YMEV+4F$*1I~bA9?t3Zd-Hn
zu~YS at FV~&ARJQw|hts->&0CX;^8(T{G(rCUx}da)+1Kdb(&WvIz(4-gA6wFo7y+fq
zH!df${nWW>qtVdaE!8aS at AI@@<>R;}Cf87N{9JfLTi4xZjpuLpdD{2gdQdSrNzIbc
z(WYakTQ1#_T3IqbYa{SafBh$x^hG0}i;qaiH;8xpAHFQzvAbs9A at R~-?K>f%0kLTb
zrIS;Xl<hs-bn0To;nTXPU?v46?zSJTd;eR>1EUB9ViU{XpT!aQn?L<0OM2A^csZ<z
zNQ|0z{yF30;p at p?n0#@pyzEzn#6^@%PNkI>^<23r7KY~-JncTJ+qPY+_NBzv-G=6+
zyY`QNZWJs04E}Z9 at IJ38ceiER@^M=0Vf&Gn{c3-IPno-|LgvgXc-VaK%ExxG{=nUC
z70JVXwY%+yUe4=YS?y=P at Sp$o&n)ScBTzCqmDNz2SXw;%<kO8tWBY|`RO`O=Xy{{O
zSafJsTkG^^#*E5RsclMkzsz+*UQd at k-#}r2!lQU_py9;%38PV}^D~lxVv`DUoi==s
zQd6al4v#cs6pW5dEj(w{rcGLn+}mNb!rL*Wyx7mn!N+l}m)%EB)*pGgT5CfC<FeBe
z@(kf|;Yx+OpSOdj?MKWS@<F;lKW|45+YjAsKKL1V%`fv9|MGW#Zb^$rAS_0g+uoX3
zRwCVkj0YdR6ff;of7jb_jhpoc?MIGD70CFy+tzH`ZfK|>uavuXo;urh at y4XlXj<o|
zoA+|E;sGGkgq)0yQ)gW^eBiSFJyQAPL{N~wI#4D(UWhKx+hL7NDXZSHmAT;SX6@^`
zLAq;}VL=E`xchq8QXZR`tnhK7ty!I)&C9R<{a;v;*$9Nhgf$&Hn$yy_#b`9W#V)`l
z41>SFm)v!Ozn6XW+;*u#@BNSA{Ch54i%N{5Fepfo*VEm9|M|q{Kh%j-|IKF_4jjQ$
zo!rpi<+Ls|GB~5AvUqr?VtP8KttBQkfep*YWrL at aRiM&K=IzvQ{H*<&@B6vikW|4c
zDBR!2$=7wgE-6;4Q~S%^Q~};X6X$i(i&W2UX4b<sQIg-?sg%2U+I}eA{n^a?>p%RZ
zC7F$YM(dYVU)^}<m|1!Asq<r>8GRg9$K__mro<)Xqz&A9Ak~3jls=B7`;X@|*HZ`=
z)OqH@$TQ>EOQTfhr<L(?*$|zUXutl0nDnHPhtJ2q_>uI5ISQFm`NX(N;jRf*+O7G1
zfXs<kmifBncebllK2Ug2NI-zvPZ{W|P<lru#jx`GdD>z4uwVba%lh~8yE^>69c0ey
zc-f?U1N9M?ep)a7V}JMG{_$&;WI6)+(!%Pkb0J}YriD_z_3GV_P*wTHO?5lwvuZ1(
zax#Yg!9afxxtn$UwryNiZJZvy|77AbBgAG}?ak-4ks<tOOlI=<bK|V>M?Fl-*(<@(
zx{gaXW6~02Zq}MWAFv!D at lhI;H&Y<Ht1F|UL#vhh%bYbDIg3D8d}L6V8asG)bA!s?
zQ|@8wX8pdupSwz{U=taC`iZ-v6+bObfj9r+U*;G8{h$8Il1xVc#@^q at aq#+W3SDeh
zcU`$vI<rNppzj|k8y)%3$8W}HjED)9%E`!F)))8p_<7g}dFORb>)zF-CSx at idto%K
z_J;F59(Md9N~+<<FWWEP_ at ZAAjtPs<$A;<?T&zFzle=kjnux44e_t1MfVZdpY8$Kf
z#VG)sgB}9pu5fzn0%FhEtxb{1v1}Ge`B_21O2h;tVpT|Bd{(l|X>Fj=)6Mpy;1H$4
z+d-xD`l1K;X_bHDpa0sDq!B=mf$0jZCMDteI2e91!_STVk3S>h;cma?-EYAB!v;sC
z#5e5NAvGi;bGGWccqP!!O`DN{&LlWg6_l33G at 1Hb=;Wu8B2tq=Vj~)lpZVy6 at 3vgH
z at kP%d^ROF!__1MlOfGZby$T2VdoEoUE3<SjOo3HgG6j5H*4eE3ZeDu}vJX2#baGtN
z=}W^egcq!wnH6V&O6kcIKno=Iv=7tA`ns$~R*K2Xj?2(9Ymg4U=rMjO<=_05zp*4~
z1hyHCJr}P+|IXGQQW&0^7 at M2be*TI!MepNj?`*ru$H^)(ISw+AyRM&j_)Ka at hV`v@
zXfR0Qo4a|QJX%C;Y@|T{pBYW7y|H{)dJ1|TUk^K_pBthmx=NT9)H43Qt|)V)$1t?F
z*;&2o<K+;Yt}h-L2GJqja(7(E+{x<hM#$9!%0T*gdOG>JTeIusbazK5L)hz7es0yf
z_ca|pR=aa|{y=|ZdU8Q;PgrbNcuXkbKf8dpla;&k2C7ln!+uptNj_76r;>jCr=R)y
z-+t4Q{$m9AI;?Dcm#z*y`82D&ExV&l92_^hRd59!j#e^0Xkv<1<&9L>f8(y{&;<r~
z)y&PMmlc-oJI0zBl at wKX;3)hyn}}((H<MTTd)DpTUAg-JKi7Bvx%8tst<6eb7v3Ty
zTm#46e*UVXi>)?Xo7K|XdG4}U&DCyAU~oWkWm)I7dmc{fLla||L29KZ){VsMRJJ*>
z8UivI>}68tQYI!{uP?|B4)%w4@^V=1?d2qMT%(jZc{#3)&q at i9yU0E4q{=_t%(wpa
z?<`3if%K{}c>9XUiLm4ZO{h97Axat<g|Dl-{c3HPM&W7KeDFv at ramz%*;W@>aqy&6
z2c<{*v6JPa!v*vEksRx{ZSTHz2l_{eD%E)d8E=;jNZkH%SI9dwToW7;02|NBj}k`u
z^^)NsjatT~kHebqG=1r&8R?d%yIn{^w2SR3b!cFEZB_B;Xw|kI4Tq1T+ZSjU?k><r
z=Cnqv&ujWRTd7svQgbPjT3(z{Ri+Eqpe|;PR8CE at 9|Q*}0+gO1Iu&EZvq_bIikWZ!
z+uvJ~Gy+{`FNB7xxpcC62lK92j)`BX^x|)NeQkP0F@??h4j5`H8qVKnI(tQG>+fkd
zdjDy5eRajYBPu`F-t(6RA3TTu*=qbjKT^%FE)!!&k4T72sIJZ!9KqD(<GR7yd7YP|
z6%XHf_$VtjhFyML6CKW9L0g4--@{gV9+{t~x6D<k_S09C7LATpZkZeZ_y-SfXsp#m
zXt4H1Bt*gcMI}Vi3Pw at kY0Jw>J(y;)TN;ycGngGPU1$|(5~y%zRZ(l?6#9Ao=kJ=f
zdc*ne{QEyxk~jh~mvt<0oySk6)>bE%7D~h7=k4U{X|Ggx)b82uukf&X_ZzJ0@#zVb
zN6#V`OVw0z7l5EK`sl{9SK$^mzA%nF{cMxbh)f~X`ARde`t%>D^1=12{q*^^<EQ&?
z-XHte*mvVz&xI=y at ewdEO?&pCin00VJ4|qAG*lWn3R{Jj{rm5H)7i<|YW2H8`h?V`
zro5ry{yUG&o|bhR$RDb$m<8rvybEtn23gpwvUrINJt9`erU at 5BLnLVOQOR+dAVrW?
z&S<}~)tfB*?!W(|B{2e_5n5fiIwCfdJcO~?XcULV-TDIzogQ|pBK0u{aoCU4ey*&U
zmD5w at dkzg^-umPRH3JoHP3N!YwKTL|z8w~+t=_T)J_P;e_W$VWD;?+5%2Jt|P4DIF
ztw&GxKl&s*J=yH%9If63!^7^tzJN|LBup*$b(Q-#W75)U{ov|(YfpzYN|g-R-_vQG
zS#$9cIa(!m#o#4(u~Pech=uU;NJE%KUfCqGt{OlfY!X}$X0jlypRdze%*{ZF*hf-|
za$ni%jTL_H8~<cUjKF at Qv1(=}ue})q5PCdmOz?AIMMaO1)7I?kypA0|BrZ}{Ro8at
zNa6f`WLr2KD*L%@IASz5p1RO^^jPbayBQV5{a0>GekKUNI~FQP9ex#=lCjZ at nu^-(
z^97UB!;fC at 6XH{ezvbbumTgNLCP*|9DGA!RC{S%k>v(PgW=PD>)~I}ZeOyrLg4t%i
z^RnvT0Cc^~6tkzztg8wRM!B^nr7#;yhj<reh786pv&zyXUUJC707|{>R}bF2SJd0Z
zJ`x at u5grxH6j1qlNHyPl=KJ6LXG>xPSOMW`;?fexw;nwqjS1R9J{)TBru~PMUiLMc
zH)pgohec?HZ{DptE;z+NX;fCYZOCn^YdLqN<I;`hOSft_&yGEOj^<xn|E1o(icCRY
zZ|(LS9jDHfZk*}9biL#H{gEf1ia!M9tJL!Fq?m+)?6lgd?Dn?&{{F(@;hesH!M24Y
z>uI0XP at i000zo41vM(^-!Ek!otwQ8ygFtYQdpnvwHbbHCumKCieit0%C*FdwN4!OJ
zGOcNvubrEV)<>iKM*s;4Q34d<Zb*a{MH#!QY0WpBf9G5OVo8XBd<D77y6)3weLWqd
z0f7>LM56P at t7YTo#)6L4iN`O%gGI)KqSaxwAH4qzPD!j^F*;m-_(aErYf2x7?vtnM
zj+_KhOoIQBI$ZWlOhz)q-+%p1WV*h7?}4P6>iPpm#9#4OctZKWIkMYYO2)=&w$C>o
zKHhQea_^0MI5JQNJ-jY5NFjF}y!$w#x(pTt!#AiNR7JS9A?mVC0Cj^Y0vBic<N_|j
zaZN&2GHj1nt`6`LI`p(Nt!9=-e8wD%We_n0K>+ES3c(RteiwV0S>-o&`R=#BZb_`_
zaQ;|!7zz}3(trSN1PjNvPAM&*@En+j<ank at a$aU)?@-gp^UX(3pxzPdpD-G0_aE-K
zc-_x!JxV|P1qATJOF{mXI$ZV)08Y#ht`2L<rZ=Lip?~BNSKE(*!nLgVhSuiN$w}r#
z*M+O#A2P-^W{ypX&tSb_mAA?dcn`8nP^gMRWcIxN0rWW`k--X?i=el(V+z;@hie5@
zlFNGO;jtj713Z;7XSkQJaE(~*=enMS9l=McW|qM?7#gYy at b_Q~$Zn{GWAt=b3-nZw
z2%N2w3v<lsznRPTzVok^gm_!Iak_M9fT8HWc1s!%VV75Vqai698>J8d87 at NMZk=6Q
znL9Jrc<eO11k3xJ(I_^lnA_2L=|=0`y{M9UZ{COb2mee3sl(;XgvEuo96Cy$rPCWb
z&tIuKe4_it18;X*mi?5f@`Ay^+WFlq_ at mE04~UJbI&dttyH9+84OSocs{K=1T2uRn
zBjdw?`mg`+JBYooC0v4VgE@!KVd66d0Q0j-`#7&>-IksovS%gNg|Uj;iiL>7WaRGF
zQk}&afD at 5%VQ at kCnjuFpeL&@5PmfNDqAP8vYH^dVyyUz8_TGw5y6DhNpBkg$!%-nh
zqk-}~Fu+^k<A~b4>(m*_W0PZQw(STDSD!Z;OXv62A3TP_2l199wkn1WFJAAx_Y5Nu
ztP%8|Tvja5|5q@=dA&VwHNsOB<W_FohL=tG_FdriBh!-7>g$RpCSZhmZ$9X}{Ujtg
zvHA2RO+u{n7;ZKndb`<z_VH7AL?%W7R{-tl<KqHo!QEjkWSQC2fTjo;fwh_x;O7<`
zrbaFXI3aezuz-j_UI_GamAYjLK*q7D at lwg+44hJ^PQ~1zbGCq_+;r+hCq=`5g0fg#
z|En%}|9k(w!V?St{O8!?7ww0S#Al~VqrrDaF$jDM4K_?Z<xTVR=<_oxiY^$9)d!B&
z?mgIb^Wppg{fn*ghlaW?-y{%XtUh{l!E18p&LegQsn2E1l#Y*!z2yxIw4b|Dy7#cF
zt1b4~U|nEXOeos^@YpbvoalL2Y+1Ug?6~edZ+AO?rFUSE5(Wu*U+h69h(GJK_<!j%
z7_+c~Y1Oi<rUrao(Dh(AMmtJGFYH#{PHXW6qg85IA#<E at 3y;vi?}`1;%HPWl4obXy
z<zMu)&_CS*H9-nsuEAO5b+*T6Bq30vfO=)CudeWe?|);3Cv22KY8jB8v3rjj_w18K
z1GWcK5uZM}z(6595_~V2V67ZwDWJ;g`CUD?A4C7F at M0@NXJ_}-TYdLGhW_EkS^t?Y
zQisc!iAajUjfD;)(vpB at YqSbDmLPOEfbN2oWI`i at K=|Or8IzWnT3!USgN#3(EYLX$
z-t^@7f?N<jnaz!cj`oy>23CI7^T_N>xbdKvFc={}rB8Zw1t?b5e5L^EO?)E!WiDs~
zPzdwWA;E~tYtZ>f?-d#vfGRbmI8Q2hWk##<MRCNyA}>cLL<&yycB|sjlK|I+MFq#E
zC%v-OS5)}nJKtR43H?U(#_6K&4l>eEcsj3F`Z|l|(Za3{%7OQ1H`bA9-nFaa{8fZs
z;#~FKegyM_gex{oZ>)#qfc{&LpPqavAfKgMQqRkh0irDSqx5qRP<lb<sbxileLeL%
zcXgk?Jo4b#;Oz(P$4}MHZKE)~x;!p3B{C^GxwIgyvXmVG_*upLZqp|LF9b>%e17Y>
z%SfY0ItT*(8bxAW7V3Ry9#RMPj~<Mzgc(8G(6GP&nIkjBv>&CnJ&Q?1Oo(ZrSw5$|
z6;25!8a5`Hm-P3-YEnlKpCdF_ht2ALrI#PQ`>hq8qEq5Jj-JSEu4fgMh5~m#I92#t
z%$-fUc2mxDsM)fGOzply1GgX6?LS<)aZ~TDha&xp4U;R&`)@z$fAFH~{FTX11>`gI
zFZH=x8R)0y-ZOf`<s>dErEY#_aC|hjwt}&Vg4u2EcB_5dY~(&pDDV|>H-MlxEGTf!
zlDn6Vj^Os5kei7*3)(Y#p759uwg3u2Ch!+hjLu5))A&avMWY9R8-&}@1}R8P2X+hU
zghy!QF6&c^bEU3ein6N9VC<!mS7y*PLG5e-1zqh_PzB2Te4MdC0KU~>h>s3=Wvj2E
zaMgR?Udf3?58i&S(HP+4m|0&V4F$_xP>`Pj1$dy((DhrC!wZRb8x9>Ce()@JV6b>>
ztmnpkk^aS7i6w=7Hy at x~@4a$!>Qm#yCj$NZ`gus*E=z{92IvPBW%2NE`TQPDWC)>$
zyj?f=`8fIexdjHw at XR6_Nk~Kx`$Bj^qyWf|k3_2(q*H6)XB1w{g1qidU<?sS(HObJ
zr(z2L$$-6sOE_~#k&M2))X>}jh!o;y3NR7a0+;~ohCw09i0EMCR at fe~2mZ#VB~*-!
zNS9xfDH-TfD?N|`Kw{%AnpTpJa2*teC}GV)gz)l34VS%q_50sh$w^>z-K_mRZJ7n#
z=PpV^!Ms3B<8M?#1Qbp={D62jZ(tDKJIaurKQPdB^)`1g0f at Ka3v+vK-0!;esQ>1@
zsZWf<Pd|hH1GN59w at c6Dbhh{1d!`ETYCCZ{e{90t+m&@5RzFG~n~<HZFUrM!0ZJje
zrHKd(sNBn^rmAK)S8d)>v1t>=0z*razBoTTF`8RR1vy%+LamnLx-LH00?2<oc_dl>
zG7I=ijG*|eRMF=Vj08L(Vl at h0B!ckh;K|1y!v%@W#lI5|o{&MAW?Hy74=6|*3=?G4
zd+uUZO?gUL5&mMD054#KMAJfqU)<!YC|UEtcUN*6z4H)M12jBz?WQyih+_cM*^Z(A
z<brI<S^D((Sz?8p-rnK+PxV!mxjo$&xkUOGZ^h*q(Eqewy+d4xi5JG<yN{R}7@?$|
zm!7GZnFY+#ar%6GSt(0B{5dXHz_zP*?rA%7k^XJgyz3+P2#$+PC at n6X*&J70U9 at RS
z-H}t=LRyy|0J|8nGwc(J9dw(70K)PMOONF at EII`Fl$uNjv3}{qgn*ZGvld(ce4VMl
z(4aC34D at B2fZNHaERlLfIZR&RZX=bvGK2XT$OOta2D#_Vx!B}b%ncq+Rv?8yiYDe|
zzOvP_7q0#Adn-Ayju~ny2CiJk1}cq%(%%c6KMW5ax3H_7az1 at _Q=M1=waLJZyM6&O
zyu*@93Q+#AcZj!emh8X|b at Bp;g0W|xi{NL_L{iU7%*1A;7H!_fdQLxyxf$&z&r~9V
zU%S(M=2GXiyA--QSmC-Albw;<(-TospVHV^KDVRw%%$2xCvZks{OcIb;&U=!^H5bW
z1qgm3?1pIPKm1;1WeEyNGH%WrVoFOAveTe>01Rkpf`a|=UO`Njd)l#LWBEl`z^35o
zu$sU2YrZG*aVZ(-UHo%qCFne1x7Y%X8jYybN=AkQ)p8~Ry<r_7c8Xd3uj10`!|$);
zlvP{F0uBumv0oYoLC{nC3K$hX*S-svDaQa*y>X*dq3_x)@>#9TMMHydI4ttwt(ff0
zmXl}Wa<hi+J_d&gMu at vZw;xIkmzaV10ftH^;Ofh<wVl0~KQh{W?sDIq$AeEk^K`Ke
zjSWw!D6QSON3BmvuC1xqy1nh}rG(1L_A?iM#81N!0Zs-f2Lw7iG6?aO(MU9;D8qtK
z0=U|)a<*Az_2GBe5Sbm2J(&OSSRKoB{>T_wP;@?OfA{9o7lnQt*Wz*G;jjj{b!dnZ
zkGUW5yZB1OWWrPRU%Vn#Lkb89RRSx*aSRdrN3>nGTOYk+wNevE2E1M1e;9$L-Fu{Q
z;1lz$;r`j#drqID9K=`8+4E8b#9Q)NElorLV)2L0#app?*$oGe=5}=s-Fwo1=aESN
z2m(^WC1zlF=%Hw!AHZ{1svei~ro+cEH22?o=H+Tb0F%td`myJqM_1KE88XUdx3ru%
zGy1WyVs^`q{ap+M1aFjiI$-R>SB1SVNF#T#`3MqqwOdWb-s;`h^hA}yjV%Bl7S#U8
zzif-un>M0401;Z$(<%N6idF$WXSWKt6n+G_00*jlU-<w4p>e0dFBmIWbb<hfMm>u-
z1O20ULj-tbtK}_Rx9Z&$n{>JW-W>}jfOd8PX&l(%QGjF0<nPpz7nFlqk?xY|I(Lb`
zS<Q`YM^8ZB(7AXwzA&$L&w<jZY51So9rHk=DTfOZ?=JCge4YW9c2<7GSWQGoR%=W3
z_WAzX4{_A;a9$skmPok8fcV(z{YT-=ipD1z4<9FZQDRX(s;VFR)A%Z~xD(s9pr;FB
zMl+Mz(G?XR1}U!l;M*nBo3v57yv{b31r$DT{$Ld%;=+VDZ>}3yMo=ImWv80{3eGre
zi);i)Nf=fD5t`nW^5Er|NA!uFEj%iSaxjOu31`<=VavmXS*rOJW!A5LZ-pl;UuXiQ
zK>!JZQi$)uEJ(;mqFnB_AwE4(sz8RohWrI2gI^)Q2|l!VH?gFsa@%~}u08#?9*jTz
zbox^x)>U8zrfpw4Ph_5WLt1`MS9EcazO1-pVxr^hC8g54;mqZj%oIYGC?a%8wY4c-
zy*WKS_4^LCow*QOlt23PvoHCJ2m+`){R4d9N#Mz`8bka{{D|lfL;zQ(4Gwl|qv9hF
zTG;}a2B3!U9SczTgaj*eIu!~Zd at 2dFDE(YOfVa1+b)-I)lF;Z-uvG*FlJ1HbZJ-Qp
zpM4~?I8Q7=BH%}vgZK+47v-AOU-rulYu;b6$=}0<y?dw87?TpmAjrHN@%%+4jyDG@
zKc672G at o)-r}WYS(@{e3<Pz|}(5?HU51#{p5bq|Hmy~UpYdmnc=jv_t1ybS22=s5-
z_Vx0ZB5>x#>`Qa_oSe>%`aS#km8Me{h}%;#K0f-=7-7h4I(;#@s-k+wPB@>MBd7Xq
z-2IY2XJhqVWMKh<Etpc2pQvJVky^~SZZ0;EH_$kl%+<@=CAlaE=AYRC3xqo`h;bA+
zp<!w=*bXA1f{1#D91Yt85DuV-2q{EPL8V_jI)ZcnJ7oGu*$p*JC?sz76r3;E1-PqH
z$?{qo(F-An5k$hY{<7z-*M6{)6A~`3pV!s|7!ryi55oWfVADbQQ#RO72^l<JOh*aS
zF_(t6*6~LlkKBJU^4uuiO{yp>-Z;~I<V5S4i!A=Q%#>}Kf&VdW`+E7%sE~r5?&gDs
zLsODcD$6)@2EcR6sq;~(37oPt`0zz&N at 7}bb6~KlY~v<`0+^z at -Fs2hewm*m=83+w
zotp8vnQQ at 3`WUu9G+=B5K}m7YKRsvn^klTPh3908n7{=V$R{E$983|>qy^ZUhwaeS
z8(0$Id6)vkhlz|0ReC#c&;U*ZbPk}DznGZa9M+mX6?od<U?qw;eh&Fstb^GlDlUvX
zhBnj6%bvHf`fw#D_*h=Q^Ta7o=uKy at l4sco3GoL87U1ImV^0YyTjj*K=_obs-Or_=
zy>;^WXDIo{KM|^tG-29;@u}vcCt2|(J{G`lwY&FCfBu8Jrak<mdAJ>1MQF9K__x>Z
z-49<4Q^7H0JvZ-D9+{QiaN=BEUtitc11$c at 6(vLWo_?8Mk@<PS>f5Y+&wj&4jt=X9
z07a!GL5G0Ti2R?^Py?RF$#K2)ns;p0zGH8*IwC%t&?Tq{P=~?-VGhIHfce6>g-2?U
zdC>`byV`*80aD0%t_YOl|BJE+vo*0(cqA}*A(27Sv!Q1Lf(Vl-AdbB3Dd*S`8e#}T
z2L%@-)%+?lw(CAx$!YNF4VX{#pANRG3FSwSOg=pvsbHOVw?1q%GB_YrS`QpF9VK99
zTyg}==%bH^QFT7~M7&F=wCurQ01^O%Pyr$T5=7m!;cMrM2KvOd$>qgZquNiMR|Wd!
zcC-<jl=9HT*p&J@&=*y6I~ooiL0vz5{~4VBkNr7Mxu>qM2)il)ubkGu at 38K@SVNkR
zt2NsnTpuQex~*H{QsWSRl))-ZbXaI|0&02g!2&_6Xn~jliFNhC3qWyVU+5B|Ia#1`
z(<a6c#i`@k?-Nj$0ExKRAmv6TL~_YfA>^tw3i0uXB%f7NK at 1kS9ku}ALzL%tv|xkd
zTd*%A7*c=ii at bIPyY;J9azgn4w-1sBbtU6~BQWYvU at a<NXN}T>kPZ~GxQ*PtZ#qi#
zJ9l%Lm~X)G7O<ssD<UH$t*fVc_x?fjpEvGh4-7RQKO^0J?MzyAMP5f6&2_QiIP=!-
z+EcZ2Pg+&^;O&RwFN7x~hFkHL?fAUZ?b(k5TFcQBFhZ~VIcQs@@&O10L#2xe<1a`d
z_-$V=2VC9Z-klxR!J at DOg3Q6l#X77E3ucMN%O)m2m(V~}2ahB6!v6?{upmVw60x^q
zdU+8;hp|BJ>&A9~^~%$6ZR3s|2m;ZGkwpIFpcxFu$Bjl%6NFgd*--U^ffgS!E;SyM
zDTaW)^A~Y4q7b$RPXvPLp#=qQ`pS1%mO}dtt5<B|BUaDOqVX=AoE8TmJT5H2*BMv~
z3~gjg2<tyu!5DoE+ELR{f)D4ie0my15PXhwD=H@|C^mvP`Te&ZqM0n+y1n`2IqB|e
zXADgZV%x;R+ at j&(%$6pmUgN$4Jy&m0uGA>vN{TpWn?Qv`=%S8TZu)beK*JNGKz;)0
z&u(qb at 56U&v}|e`BN~~4fqrzkiA8z3_(+An7Ycl|F at -&yAf+`bFT2&>gB3UJEfk*@
zcaB3^&%A*C*$aq>#U8=X=_ at M`0Z>(8iDUH$)c6q)j4%Rt6K8jK&3tZT${=EJXe=FK
zKK8&~ykRw(Po!zqe*qU7te_;jsU8Ew>}N(@Vob^4fa$L<bKZK5{Yp(pXPDiIWGIaQ
zn>&mvh8Q;Y_|$mH`N|1dDN+S7gZ`fk6xe>^OzT-8FD7+TLZChgzc3czp@$#W9y|&%
zLAv|enauiX+6HPB8TGZqBn(f8f at piL+!8y4=?V-{6;Di7Y~9vz<u(9}jJ8(kx3KC)
zrRy;Y=XQ0#IMwW!M?FP!xPd#5oSdu!!h;)6Uy7@(m+I&C_ORUmqGnm}_jW`MHPlsQ
zR+UN>$i$?^qxpwH3iNl!brHW93I(fym)&U=3hOmcespRA0U^~I+-MxwbT}Ck-!bBj
z?lKw$@0+X?LP{nT=EP>`kz%m2p)W#}wCRNr8Cd)+N{F+{w_wVMC11r~2b;AkHVGQe
zn#%gQIYvOKRq{8dy^U|d`p;L(tSF`gxh%CL&uoame^SzZ at +?tzVD-hjzTQsG>)uPq
z%>trRckt-YqZh5`uZ1PYo3;H(FXQvGQ6<p|B|kE6;p9eaRXEr5Ub`)J6`qlr)z((B
zai(I&uB!RnoIy`H^ahFyJ&e1}hmfD4r?+&|W^B{A35%_Kd|a_0*Bm{Q+TKZthpSC?
zd#lTa_Z+R>S at -@oQB;EJK{CpyF4yN~utZ=278~+6wX_gJF!V3%l~KWLnkactma-|F
zH5yMX`~*`#<?F<z0}6sU=<8-9JQBbXA>!f&5ZYKSRBB&^uM6Sz!2Gb<V|L+-B;{q6
z^!M;9Sk2&_P*77JxP|oV%bRhuwOW}eI64&1TqLaV2Tukbd at K$E<IneE<x$C;3Oidt
zvav^?qc$6&v8SI>(sS|J!1X&s*Ze_SUsqtFoCK6RJzKSN at 8IK48c$!$9T+fc`;%U#
zRh11bJRUZ$qOoys!c7MbH6J-H_M=56O^7C3XJ&67GG<~<27%ymTbl~HJMsJ~=<Xoo
zLS{`xY+54I0q<J)5F$CadpLw;q*fd};bOlAft161T{gTA_{VA8JC1AL;dIL&oeB#G
zP2w_=KsZB(sYSU6tsDm?{w~fkfEIA|1+JM^S^&e3$N*df=7%^iVjTq7%+^*;$qb1N
zXCr|4nF7Q=!M6e^#n}BPa7PVCPNEJHVpc>23qf(+t-->bT<8JLA9(>hQer_4hTxxc
z+`eReC%bhkGkMs3)N}eQe9o~27nRNn*H~wue-sx?0hXNuIJqA^3yWJmGHf<PD0V36
zI&*&b-V<0I@|>uP{|G3uvhlHe at Wuy^QCNHUWaH73Vq1K&G@*fbY>Ag&{x2F%Du+ae
zW;E7Erze59gZP<rVh`%*Fnw(eVXV?COMxzwPfb?M%n}i+etsvu%uV|bv>ZADNTcn@
z at ut1|IolV$TEnU<bH>c=<+z3u9$jrdL}QPjO5k*?w_YyR?oR7~@QE(E^o&CaypvY#
zLm)V$THu{vfv|Z&t0aJeNjd3A3cBz>E}0I}tD)FoBvBnB0^rpc;P1%{g883(_9-)z
zYRSd<oE?ToJiHLwhk&nhw?1PulEh8~P!I;_)I?B5Qn$;SakgK-0uzf8B*a%hzrpJl
z4h`}bQ5WS;VrCMy8$c1@*fS<KW1w%?zTIqya)*W~so%8+*l^RS^W-_`6Nn4Sx~6>x
z3N~%wq(};jX6M?@Um at cg8VmzKASqldx%~18Klh}{a_Yxsr)PC^pcwDFcDrHkeyImy
z>2T6SL2q~Y<YeWh87LpPHRw})T`ikJ^NBN3O);}>-ACOQuM!KrsILdUnza}04GNzC
zje<~bz%|t&DiG9!fQXFMp at e~50skNz at +fmcK}0wVCX0jBJLu{$0i*LrV&%M7LWxon
z1|B%H=`W(dkHDopB`zpB3{Nzy0D$X!oUK^l!=po3-V^c-IBDYlOFxXiaMr5AP3i#)
z0y-%CD|4Faq{8LRxHxQBfvNlQ4Tid6Vw at F5Fxf8*0(xd_UY*B|Pe1#FO&n8B=dDNZ
zLO?*xhNx&_Dyy-sdTv|U+<e{9Gu#C*z>11$gYa3IeFN>6ZcvDGV%OC>Wa6u;<nFeF
zyX1H{F0~1<{QWWse=e3{Y9^Hy!DHjbRk?Xf at AbQ4TOyWZ)>f9H$w9E)KHquaDlWCq
zRboy$ae6ar%86>2T9S|aj?tE9gYckUnU at 0|!GvE9iP7OKpWD{#=V^~eJYJ1VVFG6*
zm6b&2WDz?QwLDf}tl{|Qrh<G3;2 at WEeliztHyg%k0k<ifZ3GZ*<0r=WOg$(OBm!1@
z>D8Du^>bTcpGF@%#c~%MrU7NjF3FinM1er202cul<YvEya9B_~Vl_M!%$wK)Uk8%`
z+99TDOiH}e?J{Ou9jsSi0-cMJzkc^#ygabZh$Db6c3N>R%Rc)re at 9*#+pph`Ns592
zHXEYy&2#0OW@>isF4?@TU~U(8ecf=6T|+c9O>RDM)jF@<p|EP-5sa{8a!1A>FhZ<j
zZU7jMhTN>fFS-Qn$y5!F3e`pHaC@)bwxeopyI2|a7^6VZ&`|OCIJz1RohL{gsi3Em
zI2BpAKsME}!R0hJ<h8dV3sld{aBN50;iI)%=Q69y3GKzQpWD}0KD(u6*Iw8pND=5h
zL=KbFaP*W~t6<%R$iepbxZ4u)G^42jK8KLGz@%}pWTA%Phu{fX!WO_msEDx;us$cP
zdU{HHNcIlEQ7D3h6O`1xoIy<ga6t%4YymJ=$O6=a-Nb_oCjxBBY%7?9O9%TXCoUNX
zBK!*&ST+~2&*lB==4i9h66)yA)8{hE3h+{_ot+V1pL5U4$4Bcn&mw=Z@<aa|0mj$F
z9E0-TY=~-h at 2}ahv*FP3l<q!QXg6n8eg}j*VDsO%cS!B-E#9`9CMun_^YTqyLR9&-
zoh-k2>7pt`(u_!qHtX<<F45R<D>6-=QeF(KlyHk2)JO?f8r*wxy1O`3F~74dtF9V}
zGNY;#`fopWV)E%H|JfmD_PJUE#SD$nVcSiuD$l_^;pRQ~wE7+M-RCZ$lhj29BNvNJ
z*w?(VJ!$+1sEY+0YDAz$w~s$#VrdcbwcN`=;pgsZPxLAu_E07WDp1tOh`{IysK4>~
zr!Y3ek)uPf6R?z^qsc?_(P>E$@sYrR*a9$wvAHA^<dlz(VS3<{Va&%upB^@BD9B&p
z^B|6atmes4nTjRL``6vccBQ4U$1gdYB8A{iL4G)Ei?7cv+;Qwg>)w4Rs9Bn#N=rGt
z3voE5z_56Hnopc1_)p*6r{R?~=onERf)OHACff3_H2t^MZz!7EMXT`4w7$DfkXvgH
z93^rB#LtR{hhRiv)Z#uDmk_ZbB0ZUMmd%3xe(1J*W|m9hIplVB;E)UJ0#^VlQZqX{
z{Zeo=uGqK{rIyqc>p4;<t0<N)!Z={CYdd~w{Q2jc at C8nr10oGQJz`}n8hux8B$wpF
z#pTZJ#>(c5^NU)B3KYlZjPfG2!ks8dY<!u*1li!{=MKk$_Q2oU9{Nu-q!JVhxVV6h
zmb*JMChqn~)|voM;ejKy>L7o3u$BXdV$zb>2oRJAz`|0)^Y2-BVETf^5=3ARo7j}t
z=H0u+2ZR3iVKPXJj at HLW@3o8>4`;g-nBe(Ymq>u0d404uoDDJk{4)ria0Fhy?qPX(
zeYYQB1x_o;TRc9vz327!We<(|rKUsA?k?6az25e#AcJT_Iwquy(J5NR78kXgyIPDZ
z%JH*I5QIdSbAAhe<>EdUm&9hKD7F5oAZ2PLd({A|J#`2Y3+_6-qJ#yXC9!4yf%MKU
z?5&2DMiy$Y)>1!2FUP4l-jHf&s%Ku{BR^v_md)?Q90o!)AXpWfXOJqBp~S`JLyr7z
zJ$?#D7=k6jBBJDkMA;CvDlc52saAjNOngqJr^^Oh6nQBK9 at Py1a()hfA}#?_fxd9H
zexDv1w{I7JqHJgYQv!Lwbx6~K(Cx4W`!DQ0j2r>0xrOD04TT<%8bBV34N*|A9C6e#
zzWJO^C>Ac~Ul)6im6RBE0y?4D2Hp at 9=q<iG`Uk`=b&wLwAth~BZYv`~dv85}^CXg?
z+4x}D at 3?%cXnfo-Fyt4khI2q|$A^byx`0BXAg6F}FsiYQR)G;A0fF+G`P~@8KpBCq
zXM=$I66pU+jCnzSUq*8yz|_LQ0X7k!)WrNj;lqhSbVbZ|&KItj+YW{&y`~bqD;_su
zx86=H`yTK}_^^}=54RmVx$!e2w+y|#^adZ5SXCJq8Yn%3v+ZiIYPb(0B+F!O!SPXe
z{+91Kj8_W~5%_<!I#@)2cS=n{W5S{mBL#8Q-3I5-{Pq^48<EvVT=kW^BVu#@Z=g;C
z7L-=eM41lPRBfCFT*3O!UVw7x5cU@!5H9v?1g<t8G5F|O;h=CFNHU~~zs01$vl0m!
z{-4OY(gQ44#?#edMI}5;iI4+s-*Mf$u&Ls^6Xc&g7x!(Pc_~5q<8Sx1yG)SX|4~O8
zrNrX=(75ob?epo~y&)NC03<Nn2$7Hjya+jqeTuNmx|&8$AGe(Tfuzzx7Tb=icfp1c
zR~(5FF#-I5)Z359<PQ$PXtDUG)mC##b#g}+zEQY<CFN(0-g}%>T~#tU1$&cJoKO5%
zjB#RDoK?Z=#APPuv^3Uj-vK<E(;jQ~9!w}J35$zBeZ;I8diX-9Z2J+=GG?xD8eOQ0
zz at Zwrl#qassF1M4=-`+zVL=w$TLPhc!l9#|VVCrBw-bK|(F5imjXh at p0ANE(g4;m^
z(1ix1H8loc^YyU9h8vTUi7E+ at zYwaWs~wf;L5@*Kh(sV_EfNPDy(lq=0G)Df2y==V
zgnTXj3c6@^;iT*|woW8&v2Ypxdbv5Sw1nM?H4s)od~v{&u$TF5&De}WLzNVkZl2?B
z=cVhYL)rSx#wVdLH><6ML*YRV7&<#LT3cE6*`|@*P=nw|4x3FAS%AD^eh*7GYRT41
zx6mT8P9|g~L;o06&HDVJORzDVOr26)nbkJ{W&nj}@jxGyWAbyNGm^_ at Hj_6r*4OXa
zE%w0fK>TM=Ohx^@I5oiVumUHQ6~~tp1#10)T(at-?SxfB*<La{h#-vc4y%vx4ignS
z3l at alt2a3>qwVwsR$VY@#KG%3e~IJcwE<qt3$#Y`2CN6UK;VCXePRMghyVf?8se{#
zIl?LNFo44~IyE>7PLqi*$eDinQhY*Wb9A``xn;!=%wfDsN<4pwybbc19Rw9FTL5!G
ztY6sI%iLk~@XY~kEfy~0UvGD(6_s$@K)<KY%S6i|zBm?17FDA5K`mklfi%gqo;n|_
z at dX}cHa_s-oQ;b!6gXa%dQkT<Iax&TW3_}0M)6oRJ4+K)q|VRJqiXBi;N2&vJ(0E9
z0{Gnp`q!KFx%iS0Z3K?P^q)|aZ|LfT@=>tVZQIV7s#L}(R=sU|&DO1KXN1jR?WK?-
zs$oJ>O7hDm#(OSY7W-631S6P3_8d`~(_D|kPV2cV+=2qxM8e`D@!#yZaZjvl_Lrjs
z3On1F*R0sWPT}Lwbm%A!lJHjoUZ}YNwImV~#97$gfsTmy at DQ*d^Sav5RZ>X-m<<q~
z>?!Of;P)aEA}Hsa5hQw40jPkOu!z_c@)Lv%LZHT=0R1QDXCY0C&x02#TL44B@*<Wj
z<6j>S=arNAh}eTT<PPRJyRBJ#aZb1ctk^ieqv602u_S+Vj0}!c<3vP1b<u2ms0IR=
zpb8kI at M*>UHm$Cj!|&KT;?fe)y>r$ZO~MSB$O6rWk4?NZvT>uwz^4X4JJXF=Qf7TF
zzKqMsfWt|xu3+_s?Z-0Jw09qvH)=vlc)>IrIGm81L7YQQRHP7QLm>XrLe8%TwoM6m
zOH_`y*0vrz1S-3H%N(GEk-Lw$MR=dVTlf3#KcoNQM;}x2MG5s6L_YJ0kr{+pP^^|#
zT at Dt)`onKS`A{r-9{^F1pYVZzM#xZ2q4ZXV2f;7lZon=el=!;x7n}yiXd+)nr^d6?
z6KjZoqLeci_$#<w1j>-b0NuqTMN>jT7ut2~1m|>M$P-JJ at vqF&W#y#78+X7iqEA3a
zfy$Z}=R^nOGJHVV4<5paNgRrt{(drG>D$g;Za#a(Y<&7|J;?3u0@#K_VpdaqY*tEs
zUoUDRwrp&mIV}zFQ8bCItRx at _8R#D`<KD9u=pPvw-UH6Ttk1=lpp;phG5+RHOv9W&
z{J?(1YO%Qn@}We_sVcA8I!7T!Rfr#rP{q_F0t*X1G)6?DsTanQ&2ya0+jmiT3xs0C
z0T19khBRC?$t?a|vl2|Yf*;EGC^U>&P`Zm}F-N8fKtav|Q+i+}VU>n%c at oTFVl{=r
z(_ig}-2tExQyB0nn5$q8zaXmK*aT0DAI*Xy)QYnS#3t;aAc#-_F=9yHVj+lhBxS at 6
zfJV{-ELX<Y%XLL1kYM1!!2gJE4L8eK%>Ht>>F1xK4&?|K%AtS$ww^qT4@=elqh{li
zKR(I1TIp?VAk$*f_4u3gp1S}y3wskUNS#fMyZ6!r?g(LX^vTO<ltLLvP(F!r)?~a(
z%=%n>sjsSl_+#_4b+KVsYzb5d)<~?zqMAQAh)O at Fy#*;o=5EU=6{zm9Ou<}%#vFU_
zl$uac|D~&{h){iHIkU3&;#CS!-4nbKB at Dou#Xq{Z1Ue){724hGx+>HKW)(2bq8dV7
z85W^UFr=X4Vv4c*$UN-DnpldlS?Eg&(2`NY>8q#+uotjXp!O74AWlSeTqDGPSfE2_
z9!D7XA5cRWV#Gqs5WrE;;_?6(JH*1}`YZQ#TRDlZ4?wp7o;Ju|d~59QXvo=NL9Mg-
zj@@}cxuL6zzc{dPm~Z~f+<He_(;=$dxwjqJFeM&v0+_D!x*DJ?$bjJCVQg~STkwvj
zK57}bWkR5kN3F-VgZ|0Gho_Ylns)fge8K2=RAve$06c$*FVuVGhFA at t8d2bMQ6Z@n
zCAeWy$R($sg7Zf`K62+FB^*v&IW?&YRu$nCFfoqEiKZx_q)6s!J^8{2{Bq#Nomc+o
z;zAZ=6f)o_kdLrKnN@(36tE3Gj{2PRfy>tfi-63DebCkVL#Za7k4#wDCw4Ik;eQgd
zQ?dNw!bZ$$;bZ}1WH)PW2_eumz6j>fKSBhol-P+jP?#)mm~1hqK&76SCFAGgzCsdi
zdV;b}?OQf7T)lOx_|^bU5^~aWn`#^O9SHDtKzyS-v%QVK9NmivET*v)mk`q-s at Z=;
z8xw}$$rp at CPl7l#YFVJt3uPb<<N00fct=v75Iuw_!5XUwkY)DtvV%kaesVWLC}&oc
znRfU^d8NW5F*kGU(Z>Kyr8+p&aI8Rlb{cS?ktd&kxd+u>H#awU^KSjAOEaGu+m9R-
zD;M^3^<Tc8-O*0uTUA5|$E<U_QQzh3{a0^Ez5Un>0|L835FT*&#5p&s5B~%I&*}lY
z-m-Te6M=XFY^K-*QK(9l!MOo)W(z=(i*W%vHM%LHN5-Tj at Kmrsj1ndQVx<ysmmL8=
zG9i3KxK``|`p5Xo9?DEa%OrKXEE$E&V}&HJF+FE5 at Uk%f;wy7J1egQ_E6hohV1F0O
z;XTOY_V;&Pzb6kwU$_b%Sn(ErUHoLKxaj1HQUJqz?ghoBjPD3}qj&^_4}Yal`xQ at 4
z4cvPwwt^cM#0_s}Ur&2qr?uG))lzS-%%C|8iHoFi*O?3Xy*+r at OVtp%30Iy}lm`IG
z-FZXF(7?deo6JEtH?}ab8fuox=_yVJVEZVUoGh7`<j at uZSOrIhKx0x@UnYZ4&uYw(
zUhFAqg<H?5v!<;8HsC0S&Y!!4NP>HTJ_$_0vBE$vq?)`AkUy2u6B7f4a5!w2LMBWt
zL=$q|z|w at +LJ9PrURD5|gZV+05qrQKmRy{NQ2?x+ARR0(#rk?GRz{lP(9+>SW&x~%
z_{z2OJ30IaY%R(+N>E&g<w=!gWO4_Gx^F%x*|r<{X9W{)A<%I;Kx}3*@upP4#K^Kk
zs}GhEGXeAuT)C*fujAyIsO(HIa@{xXagGuVQMyJaMnOnEZ1m1n9Y>Fey?xPNBwU2w
zis|XhwpJGZ!i}?1O{~Dgyh^F6fF^s+T^zpiuyS%jaK&2qh_G`YJX;SPAr1+kWgOe1
zGgHvYa+e?v!e;ane(R*1G(j7apEZ8}G3w3wEn7@`z%&fSVkO5>ms0`>6u>15!tCcp
z5Voc at LA?s0&at!mdJ-}PJuubK!6E`+V#6HIF3hbUwJ&FjGoeZc`oQ%C$3{@dTrf1$
z!d7v98B at cw+ok9I<z6c!p|Tsgc^7XlAh^;iBTu1lLn9=WkclhI<1g0RzI#urcJIfx
z#Z9mfdBF<fgaTL>l^tj7vK$H8KeY_r2KpzZloXT<4RVeQCo19sLz9rS6rrKZx|rk`
zJ}YsA at T<j1mck#AI7dEG9|M=3i(&WDHC?J+tc*o~Ux!-SjvVVebr!NDN&_A-W6y;S
z%ST5BuiqkrroC)t79AtdBjPjUj7 at T|>G<OpKjIg^=vGuhIC6AiPTI(gI~)aWR*m3P
z`0cU?fD&g4z?=vAxxvHdG}XiH!0=1;;e3EhAnI~XC1Z}@z_J6Hl+9NVe%-8*%cxBJ
zAB<=S5sVey2eF293c;v at IEDMdwvHA^>T_8#O1bw6NklV1)MB5_ at 9Gd=nU#kKt7xHd
z);1l4_~Jr!sG5*#eA>LhA!IZ+>-RJJ2RW(JFh0G(>V1 at W972I9AD$oK7kVa4G=D)>
zaK>EUrE5gND&D-!&d!Qh2bD9ktk2K}lcnRxG4^_30H!~;IIoKf=jcX#SqTm=Y+H>-
zPKb2?6y<lecN{;(IuGXqC<rw^4w$?M3{PQiw^%JGT*Kmzk{0L!3L=oMwOh9?{*^CN
zB6#(B*x<&+>;~Y0YRj}0dLir@&_AaDK>vxEdPtWAfm0O#U1NYSt*kFA0w~3q!W3ep
z!zO|Zh4EK7Rs&ahKevsa8gV*H%t`?W1pQ;F at o}>id%(a4xQ at UV!uMKMiVg7dSqTXy
z6Uv9r;bmdP`3v$2)+M<xn{mcz%XAR at 6rKQpiFm0F4XitG6q7DSOc!6T*v1w%ku_`H
zgZ_cm5Fv_4Xdra~D-yDR&QWe)e!?j}cXB2?B{8+W4v$*ln02=eap{TB3E)!bzqr5G
z^ye1mvB&X9Ea0t2PvYS&Rsb#2B)Ie*<iNP*z58$?APgN~W_$xVp>piuGpV1Xl0tYS
zB3NM>LyL$<fOP98%@6_|`iHg|E_A&0J9e1%fX!F*Pr<sa&rL_ig~N-@>hBRRf`D4^
zji!}xtHi}dup|5V5L_4B6q%^xSb}fMT-Q at h0BZC|V|O270!EaEp-L_-6no$;Fo$8L
z$ra+XFDJ#S6tb0&HhpTW-MVG)>P<#cd|x6#0jVnL?Vfo2vDpZO#zzuepGdZK$Idvq
zJ54-!2~s7ttgP$i12zIznFmg(>gaI7fTPC)vW0_iep?g4n(#)f+PHD}&Lh|)<X_u$
z?_<kh0Vm1?$6Z1H!#D5ZWnVTjWcG`umjQvY%9)ucjyf6~#J at hRv4Oiud0Dt<!AGT*
z7RbDv04$Y^jPzZ-)i6JgSEFfj{I<~Z#Fv-i<HOqlb~U~Gljeay!~a0%XaS)Afy>uT
zdjO??&lmhZ^pAp+Z3ugT+{YP at bzIunZ9&bM*4M=e^dFfL4-}kk2}}W`L8IXaO5sdl
z+#-MgA%ziE2%QpMU|{*g=5R-xEE%7nXC|6<xb%FWzwb&&=sj{;n_&LEIKF)0l?l-g
z4vomq=$Xw%fRiTL&t8P{Z#r_^UG5D<u{*<NPz}unCpVAYe-d4g$4U-K5V9$|zPf(v
zR_s28#@g!5o6%SrrZy9nt#<cb!V==HA~;VOQsI9lpS*znQO=wFqUj}o0lZW|IDj3(
z6QO8&6Fg7D?!EX))oz|G92$bJ#+{I58TVeI(VDg;9~>Es8++%eGwnx at ho>Yo?Ad2l
z;U~HT`ME&<2`tFGtXbRivO<wp(S at l7E?&VFfDQ`B76+?$(E{OI54^#&3A++P1X>^*
z<?z|WT+Urit4HSvz=JJ at umjM);0up3*^q(~DJm<CI(#GapGmoyf{4AW6suOsS3<)6
z-gf8+OFeR>^uA~zIO~~DCY6X8P+Q(ISIqYuErhZNR3s-J_TGNXT^V>SPy48(n1q at d
zu<_V at i4BN?npl^tQ8?SyZQF*8iG#3lpRCz?h*(%@4RyltC^>1!%eX{g>#5zm+3Xih
zFG1J9)udLHfgMtYsDZa}=3_xu2U{5DP73~9kwL=Q5QRBJ<2P+6=83*rIXzvAqDJn9
zTl(S(KT!!%ClAlsi}VCp!g`rD2aqGuKS<HpPX)heL3;J~^l;t~ppxP8jGrSA5vhrP
zpd1`&cw9IK3TIZAfs}{_H5#FX@>&0p!l()T6LSXoXSLVq<4|Ey$l3xB8s<OcRj(}d
z{~8%hfZs|;aapM|pBvS|0hJp!ith{mnO0WB;)cfFYy?2;6R)FaWYjM>kVW1<C_rDB
zE!IJ;0o%_$lGob<C1d&G(<7|4A3BVw2#3Um`JF|Zx91EF5e1QBiHH;-oWSmBm*3h1
z{d+hHHn`d?o6UYvx`b>v&mG_;hlp{MDyQ_aRH85$y8l$ARd8Y{zPd055DDQOq*hV}
zFV3i>D1t3;C?p>7Qu%9V5Sn1y;?v?e5sAr;1B+=_Y--RyxKP;srd_*ONwA1v2*X=h
zgTYPiMzj;AgJ~0XLqfsmA~cB1z^A!|Z5NMVI82SkFR!Z;Ll}TM=pP*sAS<vF)M3Ce
zVSp_x?(b>dv)8o4CFVKj;H^&(Ds;|vj2ZzQIPc3=t`6`fuptW?;-T3HD1uZ`*%{Sa
z=Ll(triG|$C|krj2*S*Wgo^U?`dUGPR{O^4W556pUl$I-MzPbhXK#8}Hy#ABIhnwR
zXeIcDd)Wab#-|C~5gP2q`JHCJC|$xf5WojaDX#87DN at S{aS0r}{eTLg(K-&ZCY~F_
zkWpFMarUCrO3L`F6^*-gBZ-5?NyS39<c}+;_W|%j|6UF(%i!ot`xM-M0SNgx;3e0*
zdk^%F0<(Vmc21%vU=j9f_#b3j(<W#^u>ycrBH#m+k at ST_G!_n&M-V2MHnsyaNYH<5
zY8>`E;8iq7vWEUk2K(8>vm0woJ6vi$&|mwuC$y9panSZiZwmey+a*i_svATDsa(v+
z1ALQfss?V{3k>pS(@$+~?mB&rTX4353yITOFz}TJjzP&lA6fBO(y>nBpi$V{g^RcC
z>hBSX+_X<f2+kHSa at Z%N0IUF}cTMy7pb@<)HizhhC1{gSJ)!>>D`0fXYiouJ0%g~K
z_lapMDGv~$ZtGT@&TveS3YU at rdlukrAD^DU63qY#_HGku;Q(J0{@_LsOW^>)xB^sz
z3&O{fNQnfUfYgzKO`Bje#}J0)ok3$l;Rt{WFrm>G9Bus3PE0+0DWHI$e at w|L8RlV{
zqh!NIUp+g60F_dd`$HX?JkM*C2dR~BeF6r_QiFsgAgmVN7YqzmQGgI&x)#5FRC=<$
zIB)3bXI+=B1D<F55bL0(R`@uw{%`tRa8nXIm4tYST7M7QBtwcGcYuLDEK{}nj|3$r
zN!=<CSA86CV$Er+B?=;fWcR5v(p|GmUU!!^G6V<4=;SzkzM<vtF|h(JitsaShmXMg
zcb>h}ar&HDLoN{~(WN8216S+4cx7>g*C~M&@wO+V5BeW09cDd1_MDQy`j7Inc6Js$
zK-+<XxHJNmb|T=vzo#GqIIIqh43Zk+(S{ZjrjgA85gz28K>wU3 at 45k}Na#N#$dC1(
zB at 2ro@-L^!(6(%NfY4!VZ3tPge^PHt&jf1%Rzl*aS**0W=n(N`<?hz0rTLhB;Wih)
zeojYQMr~DMezt#P7#s_TWw8!YF!KdGSl_LOs4P$l;Sx&_QD}g!Qp<`;hle^&oB|z`
zH#%<GEyz-WC%^)s73a(LoWZl~)x%z~X;a&oi<~TpVvuut;RnQ;1O{REhY5#&15=8L
zVQ~-mosB<u%1qB{s0j%0SzO_DO0 at D2tvsip24;_ANzHmdsVi&{J`O1bhRTUCykNNG
z*e}8J*WDiehoBJ9Kll)-A?LIr>H>jA|HEcMP;1aiO1TRG!~px at i-es^r2pX?w`V>v
z;;KN~+~x+h1E3u+LeRg|+tM>3TGd;hSX(-d9%tx?pDDg9;s7UKv)YW_dARuX2{2eZ
zI$At3f?qbu3e?(S9n|{?IT_e47t}bYrrim-%(TMtOCqRR`PgXpne&mk*{Pj9rriRJ
zFX(6?rWx)wNWoaaOz%p0B;4BhU9bd(#yT{9;D~B=@8d4?ATYq8Dp<9S6Q?^)pO>0Q
z8Ju|$Qiv19L#8)2Naah+Ak-9fwRfL51^qJzd(ZyRPh%Gl6h1zV;NL*(WK<L}(@`0r
zuHmF4OaKT1Xbjjpq{rYS0z8zlhI7d2=-o##S*dIX!us!KO`W*x431+K>7RXM;L=qv
z50qmU0AkU7`W!kU=wIq>>6y@=z_&iJGH?3C$ksV<?KUsVDhlVxicP>Dmea+r?;~@=
zDV}n0YiNhq_sMexDA<Pd=BCb*rx7rP(62agL~21Z@|O=vnDol2DI~=DBPaFs^*_{Y
zh!XW(<@gvU{-7`+^!E?l{f|$8S3=v#a|FQ0dmTUY at h2}qqEeHGM2o^i;{itQJ#IU8
z!mK%L5AjbpiZ{Qb6?Yzl2(t>WeW~!Y at 4s+~_XWI1MD(F+H%+ at jFN$-zNdJXhZ9q5i
zm=@i&G8^hJWC%Q`<671qsTC2upmyS5V0<L<Ra8a_^v_Pp`VZcfKr~TtI_Mw6I+LjL
z=y6|s;e!G*DvF{1-t(6k1hm#tZ%fbUg4J(#Qu;W-ax=)%YjS8cbb|hQ?A~MG1X8(}
zL2*ZDh1jfAF8S!l2(f7i<lUS$05dL}n8NXv3~CwS=)<UB<X=b{O-OD_L-oui(8zYS
zYs<H8H|-W8K~zNJ2X++W{?xNiOz%p0;*$_3pXh&pcF;<JHN}gTX-jN0xEfANAzT9o
z+i~cy)I`h_5B5`m2%G@^c{cna%__Y1CE&Epp9>-_LxGahtRHMr1iupKzraBBLYzQ3
zy(lC|!REy-hTV`r>&RT_HaW9HY%A<d;aY?*b`utJLwz;+A2dI#{}@(?KF4u;0{zQf
zU^R0Zswtr%oE3UDWGf~Gs6VsESjuHsi0181d^n)9ApfP;gs;Fi7AGv$ZNLdqxtPJd
z9WDajE>4=`D+K7YU at W=i<LN*M9sCgSy{+9bPq$#vfd{ZEvNYkEn%~}x?q&GaeYwAP
z)vkR~x0u+d2B{DXpAh0GH}F!C?wV%sBZln<K~b at B8ep?h<qJ**ZKqt}HH7DKS<%?T
z=QtObHX+aAkBtmmDCC5r3Y!Q~J<aO8_9fgJZE at 7)eTC?bKTIvi#o&Jg`p?gTRtZ#&
zzW{K3CW0o|A7cdTKky8+pu{5*+om@)FucgNgiqvwiBpY7q)7jK7f^G>J)N8>z>*Ru
zcQMpd$lPqoX155&-<&kGaL8-Wzu99f<uW`}`*tS=ne&XGB1Tet)1f;L`!8Ni%uZuX
zUi|LL02yHx99`_t0<n&%V<I|^o%D3G)kXvp>I9xYv!i3=!BcErperG40FZ0}pw@{2
zg6bRICcUZAv|GYMVIw9&6n}{y4(r8nU8WVJeCgB_R$Vllc+eBK$6x6URGzy?wHyP1
zRhLQ8xObmaU(A$_4x_~lON<GM))83?A>FLPQZ8AFX%6wDwiTF`AEp+T{TPlYk~#AF
zhMIDL{&gy_K;R<a{MErqf&N{D10^AHv29vIeQ-n&Mmo4kh8OT5h)|LKanEE6;JggZ
zT!8)&d5BR=KP4MC0jNvP&1l-UpYMoT%<M6iav7ludb<<61j=OOI8JsJ-xR$)oIffE
z_|L`fZs_PhJ59{kX`>)Apy#12c3W&=Fs=c9t}-8&nz?N-s8D`#UIqvmw0RIfQBPOn
zu3eK)Uv^%;VcIR96747^Bpw4;G8CoJX-q3f`NFYrf(jDMt^N4P%+?lU3N*KPR1M#{
zhi(L$#mN1qc!Wvy$>4WJw0trFN^b(b4L^DjsFs^nSYlq7<2vDRMg~nd%;JZsC9OCQ
zSSDvhF%F>g0VhEGuzBQBUE+p-OTI||cua_GISYw>f#Wl<CNTaf#kt_$1p0TkA$}3+
zpr)NWvAGa*0z4t{|5>$i`v(ZqEev%`DD<CFm}B-BOSz2H1;6#Fbg;kWz`?kz6!A^b
z<AGIR(Po8N{O)KD)2qtC at c78_40Q%_NgXfe^?03-5FA)+;~JY$>A*gr?v75300vK-
zkdlGEmVNs+zBC3W#F%!ANQfRItGXP{oZ~0pe{cpgtsv!@lJ)cR#lu4*_n&}!fxqGw
ze41zuz_QkQ_*nkXuvDK6j!{q%8MH%F&psuCOR{N&rR1^FG9T#yUIiHn|4_5u5O{fa
zbUyh1V%<Xv1pUJTW!03!_G8ON5eoCq`VYuQY^&C(l>y%1A8?#O|HhzkE;jP70D<#z
zASx&_wGeL9&yBBxjslAzE*OBK5ya}YZ%4_NUQulJ7)!bg3yFNI6M(C>gNIO|uzT{R
zAQs@&In$F39qa1icMlHN5Fr`!D_RTuxd6R5*{&vFIGhP47-B5cA3i}LYz&HS1VcjK
zz}q08l?@N_Lu at x$ogJp#vhoAh;Q{!d0FV$y2#I4_LCm8@#0L=Q4sMT>RBoArJs{)d
z>B!>A+K%&D^_Hz1hhf^*P+ucn@?L~PoPJ@%Ys|F5lJZH>XgKKsUWHu at sy6G59guQD
zqZ8hi;0&-s#5lqW7*zn^fApV(0}|<<R}kCE<?h(U*j8Bop?^jUb(~25Xq(Xwqbp!|
zfj~3eSp0<;(P1Gdpf(ZUy`ctH7W{+RV=Uz|Dm?V<PR;ud0{aAn!x-|Wgk8di0<{C&
z1^9=>?+(M6QCk^Zh^wh1=r5K&nU^D9ij at caLngt-!$VmNG4!DNz(xZ-LnMZ}N&xUU
z_Ih|a6^@RXb_-+7u8p~qSwJLMmPdjxn^q9>LE&0J{wR6ytPx8HfrVp>D!>Z}9J+lp
zpLILtf2d(%6oJ7h0W}AkL}(NOu>4SkrF~qaRFsVbry>L*1ew>`Xx6!)`yyhS(t}M9
zo*#Dr=pO<m!VL5e02Km8{>2e2ELJDB^}?mg-;=Ek`e%51&tK%+B^XQAf9SuUy#+uK
zs1nYCVM5WI8AL-ig3;Ueu>cY}si?2p>@k*d86BZ}ixUbQ92FU7=^f!-%0`Ewe^#D>
zD>tNaF%tl53PXzr%J!WAR9ennX4ywyH~t*M(<zSn<)|R^atOaT2Ev`zZ{33SgB3of
zu?9c%u9K(JTU%jqO}j1b?PBUd|ETy-db2#D8#JvT<^hK33v-xyX!*pF))Qwq(gnag
ze&VP;IG>{Z_$kwd;2dUPk|T7)+sA|&6d8>A)U?79^H6EJpr6q}{E%zK*r-{D%zc6W
z13b}y!T-Poq5MH0D(UYf5*Ld(+Dq>R{ZB+fl-SnAZZ-1)ofvYEV3E0U9bX1mAn2b+
zxhVx%tP&7EePT@`w3olkg@%kd8!kB5yw)ZlaAuFOl*<^-A9#Bc>N^Bgz97qp_?jF8
z0p=6_2b>`+rP;fCdDs)Qwsdrq$X5b7B{B?=Hm#-#yF8lDjOM1{$Dgp6v;Gs2yZzL;
zit$m at bf~7$esequz=q~CmnT2{&u%fBqR`+&L;rkYzB|G)utu}r<r2Arc`EQZx9)R^
z>q<z7k_@^>&a)#{EkT}5Tj4)WS7HeY!x%$a!`=g6kWA|=G0##Ae~z;o!-&w-I6rUJ
zA)+qy4+sP%5IiSi0{x>CW2O-Qfm6e<XD#Uet%&w1wvEov3y`*jXxMDZc;tbO07*ss
zPyBkAK at 2al6%c4_zDUGK5H##Lbq4DLr+(mZVD=14yo`+sf16WE9Q2RZDkCYrCemX2
zkz=s3(B$G5XKUtgih}7GZZSK;l47Qwe^$HaKti5DsqyFJ3(AQug2u0P|9<j5-cEce
zHUh$@0|4v0aM{V;Dz&y+>KULBc?eqo2$kfc*}%m+J||tOAZ2g~<k?W>czU}~2=sK~
z(Q`7o2yI$<@yOkW$OXhyl<ET_Z991Q2bZbwNc6ZiAbm&`mY!jotD2soALct|j;<4@
z%=(1dp?_FGj8;fM*tppidBK{QO|1XkuGYfY)(b(`3D_mJMfpiE2NrWS6t+dye_;Q(
zDg!c6D%{ygc at gFva|*cN0{sgg4);>JMHPT|yxB7>@iHzt;w?@B=aUqLk%fSP(rc!b
z6|h)gNt8;Y4Ekz#Y+M~F5h6Gte5EFVOB7uH0=%&KQr>;x3hN%<PH2^zg}D>OKGB~r
zehpr^;o)K}^+pB;jK7?+1pO1f9?ll2nYhiSb;LYqXY at kw`Jst1lqeQX2=!BOREnHK
ztBKxOHa3P|fYcED43+}%5~XY9>}G_NmV<|-3QNxbTW#5YP*i?0$4746GwTz|hyIxb
z0Hj&2k%L6G5Z)60A7h6={|opBysgEyC_kZp)&aIcOf$XbF9B at E%FITIwyk_*2(>5l
zk4(XkqCO1=C=?yR2;+%>Y69mMvu9Z1CEL<loLIvlbrkqSixpoJI0T+k@##sJiWa{(
zhbp!mJx)1d8j%e7F4$xzjYh&mpbi2x*LU?MC#~>lU{k49G&%+k3}gj(KcXn^?Zl2S
z?Uq%JgV$Npn2D^S#1h9~N|+SWI%0n0-V>CB6_b<1wxR^bdDsJWpb#nnSOtJ>mUki~
zNDZNXF&`EggxMEQdE5h~yUUVcw$cyMH_Cr3u#5XdQ3?Hnc_8u$TPg-J=pSwna|y6F
z&RGx+Ss=Wphiz_08_lr@`1`pN1QLM){U^p;aEZdv1`G60Xi8MX93LsJ|CN*Dc#!3G
zw4!BYexVUfudV7neRlC<ETtqNHtOw8oZib?-MD9;_?ocF*$p-L&kD at sqIXxTWgIy~
zIq+S=_``cN9yr7$xElB(=pSyJOKdc(=Va>l>_?u3q>KByaR3C+h}#$CQUa_9B7$j1
z3EshcL=@)wqCBaBl;H`1uJNO}y}cApybziQ$FIkS6Xy+V0I_!v-o^Ux4;*G8=26je
zx}tPTEL at hqsH*6Pg&NE at wq3J61=E$%1M!CyKnT%RTY)VMj0XyQ4=CSpEyfP^P%`YQ
zje8H!+}qtw?&Cy6AwW>rK~M<SZP|kT3l%6BQ9_0y=fY?~|I8`GH0VFGp*Ac`6&4oA
zl*z2G0gGk!7)!iNjEjDY6S_5AqTs8cKwcA3jx`GXCqAmc3Cv!clb!2!>=3HOMzCeL
z+pmFf8h!d1B|YaaWi>Sr1|K%nSLxGr`~+ee<y{xAf>%fTA(+_q?t^2`?r1aXmc?Hz
zL4D084tW at w8qDf&Nn~1rn_=Xtp4%?n1seuDe)#qSEY4J5QxI<<2G(qz74z_BJS{*b
zZLq)8aOoK$vk~49<tHl!0%>-AwOOA$1Bx1G6@@3p+3fl%)&ZsrW at 1);0zOOhk9k*Y
zE11zaYhLE6lDk6x;QxsfhdUU~m7EC4F)@NfeC0Z;1Sn`u58?CWb#?%;h)qib|DRD)
z$q^oAkFmr{cD1)S0lNaO%&H>3W9z}g#9rpGLgLt<Ml*YHw9p(gL1FKWdo1rTpU at bW
zd^IA!fxV|I{`TH|+JEsf^v`@5e*6+y0O^l|U0`~#z$O;vnRP2(5<~)ZCG?L3SJ2zN
zxDL_Vh{WD|;R<Rc?jnivm+%NE_K9lFDb;w?ww*XFHbg7id*QN}N4U_2C|Osbf3aj)
z{$kWa`H$TSE(kzQabJ&Fw}c`gA}$HvPb^=k)R-@!x&W*Io(^kKxN-O$!Y|5yjaDJH
z<&;TOnt08ilo073l|C?XT#BH7PW0eQ(E|u-7=DgF28F^QN*U#ac)cNC!#xr;&g?Ok
zdYKTL^j0S{hpfQjJ7NpNdV+O^g?i%A$7U}Mv{>%vNg)O=*a<?&a*za<oHs<sZgg}m
zj_cS#P{eUe0Be`0tBt#hO^`+gNu%T>wjlzkzO>M+TP|tEm&J9RO<bRsQ8d`UxK8KE
zGuXd~)sNRacTtk_7y8E?fMaU}VMHN3o0tgOE9Ft1aCjW{Uw%a at TzUpN#Agi$A7~X0
zr)GA>tWQ>Z7Jq0Ji5}yZp|+BVfJF=_2$auavOxc9v40Wsfwn5O9Abw45m==4AB+T{
z<Dq|yU!3#-o*ai7*eZ_WgsDSnAc`a3LeQQS<)HF~@iTjjC0^<i<KEW9uFb3AM&#{g
zBfcYUgQ(_M|55(4Y?{3|zFm3UofKwuv<o}3m%WFNE0+L_VSBhF{4CNjMt^h^d=W%B
zY+D+oC#zr0#%a`p{1%hQtXnPx-|fv?;QtXA`HtmNlZ)$goII^B$mYl-(^~)okZt=e
zT}3dL%9)91PPl|sX7L<*@GQN$95Dfnu2g5~8MZ2{8}x(Nj_whqv00xuJ}(HWUZ{ou
zya8~Ej0t6M04;msF{%rM{&56`5yF|8wmu$qkTmoksuMgWkbmKJD2F>@Y?&_+`dB6!
z{=XQ%P^IEN$?0Ys^T$vlBiC)&3=9Jv((Eyoc$u6O|F$L=R}70p8^h~XdPf{pz_1|>
zNF`E+qe}_AM!>+<3)k_$0)@gci at q`!g2(cKfUFqWTd545jl~?<4cBb+(l7vQ&~=+<
zd(NB#<by+>)FCH_qCe-7m6^X>qSi)F(y()vR7c8SRzQJM1_avVi(u6Sq(rD^=zrkW
zeeo6#hUP at fW1>Z!NSJ73e0+RN+b%H=*>jWz${#WS#TWO6;1B%=seK530?ngm<Io}&
zaFk;xKZ)uitp5wj9}s;sN1jsnx<LOtGX^!pYUDD?`9=hn;B)};Y#-=U86}n!_)p-_
z6vAq<yCLAPput>GvWzK3pYXOOFtqR+L|859 at 0H#WO(v%ip(>Y3#0<uF_E`owAv;}A
zw(Qys8k1W%@%3N6hJXnmx#`d`jt_v~S&{g5Rhu`1?E(FjU02z#Z4Om7r-GVx%l85=
zM+r+De^GDpaS<d5bZlBp%mdF$DJ>x2vv|pqpbx<|N|3{zbC(MHdZZ>eh+!rZFEMQ+
zDU_i#)hA#hkm at Ww1Ak5@L0Ug}70wh}+#!Mw^e-s?)8ct4;5r~5*eSpP;^vlBUxO3?
z^N;DAwgCUUT&)p)Wgd1|46&?%6lDuW_=WR<{(*V4ojQlfo8yCFDM3 at 9H3AwzTP!t<
zLr!ZmUxBr2 at slj2B=!Gq at 4mm|y0$#A{{{A}@yze`*q&L_?jGBd`ng}!(~~F$F((iN
zh at 5i{L?S>ifFKcw3^3;$z??~uqDYY<B~dx&{FK9s^yjLkYs%mYZHbiB0I=?=b?Vl+
zr|KS at yUz~a{oVC-!}Y+H6T}&j%rw at 9?vW+~JxEz4z=zy5AGNA&P9Fa1=HPoDuRM4F
zh>^9+Z%?bYU#!@*>*Q~4=2sNaPCY3Qxu`W8T9;bVfMM8g6u^QKjvSVtR({Kw^yE2S
z`SvX;NQtdaJ`>q3)JAVB&MP-F{E@<5+^u$eIq&S>@Oegol at NN%GjIK`f8;tZP`Jal
zZ{Q>eQadY)#4qS<SW<5t(~VpI9G-NQ<r`L$*pwfT3?!xG|C}jfC_n69yj8AEjGeJ~
z(<WdBkAMN~DRzM%)GM<radzPR$xj!T<VrHVLW&-!w8S~Eh%MW;*xE$a?8tV9TYtv4
zJhP}_!Eil-=}n6fCsHaabdO9q4+UZ|Q#$0XRhLFDk9Eg+{0v*4e;L4F+p{l(yOHgp
zGl5vnNm_T|0_5AySKi>7^Dh(p+Iacl!MEO1t2*3YgL7lOM9Y7iVVV`8*Rp9nK^;CB
zZb)oYv1{wo&xOyh8pOY3KH3 at -0}7uf^D&>>-JJ0tWTeJw^q)Qz?(pp!JU?9eXx{l-
zgtR=xw~mSRG$-WzT(QKK3jAX#c#YUWf?so|kG1~Af8`^%7VuSK4t<6$D)=iENTwM1
zPq1_TQ-Rb%;uoS*F{r(E?%BopFHpiK%uHZefc^79-TE`W<(b6`>xb(>8z<+b<!*WM
z8TUx|XN#)yX%uF(?c6rxu7f_S`<<LVX$*x^XF`7Slg~Os2z%Z1^z&ZvLRiBT9+WsR
zKb#e`->;qjR}a4TVe7tq`h*XFpCg}q<*k2i)7k;yEo%u+!pT3}4EG5)cD(q?+6OP9
z4-KD at Gw6}w5oJ5CzHosi7Wznr<E~fUfX(pMkECF*yFF9k3%`AXCr3JGp!_FAl~omO
zx^{iYn4J6!f2v^l{KCfeW}6xjP5wI{JAE9?f9#C$gg^AYOzPB>*yKQ%&k0oegdhmc
z{<Xc*A+b;f>pwMyk4T9qmap|+R*?@(NcgK!?imb{<<0q)O at hTke#W<dyQHyU7$4xW
zYcD=TdvTA5aahE%6v>~Bk6e$uYdG at -T`SjJd(>tvY7?yg<Y<<!KGKAd+-j69s^9zi
z+Zucnc6^2y#EUf`FO{D}BACoyN$8QoqC*M2wG(+3f*qV>+q-+s<tvfhLT$Ojsv<J9
zy_J1-k}2I-L)346>~Y*C8?Qgc-4yBxDW`!3&@0U3)~BCmbfb0&eR^A7O%co8P!ts;
zZwKH1C~{a8Cq=O-D!J*gc0jtiP0bnlzZ5Xazqr-BnL+T^!gitTIj=MyDt)m2(_$@h
zNCrCv%Lw>^@f#3<R!ZiNH>Dg(G8&NRB6~md?gyB%JQ1yEigS`9f5vTTFI}{7xE@?;
zp#Iyw=DBi at M?d{du>SY#H2;D}k#|i@#m|{^^sAdrV)+C@;O$v`>58}e-+GVy(O`u+
zuMv`R-1v%>@P2Up4V*l_?Zy+RDUr46aO<IVGdGR^E)7AIE at 7-&`%vIjb+P_^)OqNT
zS3I8zTO%NHfNi4y3SA`)O~V7_)f)43dwxS7-L6;q3C0Z51;2-TXUMQ~r`!wVZ2jjc
z`Q2DU4$yx<p!t79sp4ji_p^f#@Z2f9pq$3w5K6ZY{zUqwC!YBl{1AZO#LMJU)Bjlk
z*i)(ZG=KK55V=Ii=FJ;@uT9+lf-=U_D;H_VFS!kG7dI{)riWB7Ov at H<=mwz(n4f?;
z_Fs8|k$0^SE%2c;v><&fb$Ldi4s=v+DFfyoWWu$?6qvf|JcJT=hq}zNvv)l8%#bm|
z<ExxV4YRzZ(^@um_Q79&7XCD{!Ct6oUG9vcjeFnu5P2rS$n(>(eM_L{Bt?Zf6N4IM
zRVAUf9`mDL{2|o7Ew760nuNT<EcQF^fqRb}mR27-{k|ad0K=9e_SXRUKpP~q%?4M1
z4gh}Yj6g3_;1gn}moI5hf5E2U0LNvy*k5S%M&|r+uyn9q(@W_&M2hLPP4NHwUW8Xb
zP`<)15kQapCAX#Bv}Dn6J@{KBWGQzZx<UDad=7{}O+JNW$XyrDFG3KZaI=qav<{p;
z9od1TlC|NCy+hnH at ItpOV*uiP6(m*s1q-P90$I7K;j26*y~mDvt2CbfwYo*p>Rr3`
z{P}R7Aq~kdp&up?>?6uQRG7GM^Tu^BsKmaLoImR?UDmKucr`N2zcdr=+jRgN0Nbd{
zOZbab$r25Z96N2yycuIl>nY at E)<2XQ^>4-c)q)xj3!FdQgZt2!#LO6{P!5;EhU<^V
z&br^_G at q}_LC&SjQ2s;7Uz;Ae=84d)uq>~2?_Mc3X!c}Kil-1qfkax}C(h3PGQB=!
zGK7E0?P at Grx_G!A!0>!BmPhCYSzD#^3sE#%|B<(xnh<5(w(Z^HWJX4Uf4YX0;ZPr0
zz#5@~h8isB0KnOTi+m|DwY0Z`r-D0(%ZP~XKlecBDzAWc8y~r*ar$>b>T!MBGVnzy
z!<(*N4fly`@C~Za6gty3IH)0C(!ZYb(}jWGsU*iqXnfYF2K(2mkf;RzqhJ0}`*s~X
zX3`#k4JiMW^_3V+LnFf{$4(uSnGrA1-Uh+=rOq*ac^J5qxoD~vR<C*Bob}AxBl8iS
zEq?AaEMD0;$-z2Li8=7$XN0`<Pt_5^3+$c5*-QXfJMu&kCH61#N;0WyvDk^-P?N|d
z#E-p44&SaDj2x%AX~}RsU=@yi_FEpp at C`P!HS;k7bcN4oa8rP$Y`O82c41`^T}5=V
zs;$Lan=jX#NF^>H4i;zZ!rZ5bZVUwy4D>?ct-o{$QBO?NWF5kXibV?NA?~KZ8mFi%
zw`IpRLQ>*bxKCt*pV0aboe>DokP;$1q}r+E5l=CAn3I$fz~JzO^fBHf_Hy{lw{H;a
zeaDXm(etD^tnBcBD0<X0TE2A)1~yu{Zk#`;-UNJYh#u|0`7>j at r~#{lt5YsN=%CA~
z{S09h at 2qNKT+XBEvZW#~qWo}yN{EA|3)X)|93$G4@@Td0-Q)I2E&D9%scrk#@GrTI
zjpfUh4$Fh?YQ>sHYdd^{vRQ$Dpc%twG#Fo$RVu6Y{N}~hs_InxKl;+!{cpbOl_cEw
z*b{>v|0ZbXrT_!54#+FZK$r&dQ&Q6YH{U6#uhAiVP#d(dB8xQ}b5U>SiXGdy_;x(~
zOt?>EgTSQcgw7~2pi#N7hN{2*%2jo8<Dw?f%0i#2>KML|r=3_n_SMbsnQz}<{O)-6
z1rz8nU7-PKHF49&0@`^SIDazZtX0k*=09F{u6rmr&?W?iU55|3m(28eTc3HJ4-GL9
z;ZKHVq{M7yUgf3idFfS&LNrO1i_HSN(ZcQyk3+!xnHivoY>{MzFB&*;ocQ7tYTdny
zjqvSn?bZ=I-ox at x)!ltjr;DpfLpLb?vhLzTYDh`bh`i;&_dlU~AXrO8!CjI)_})hg
zJ6aC^=4QAL+A*aVxlEn0eJd at b1B2JX=J&vRzxmpA6m9qt!<T5_LigIfeY3^Sf_5nB
zMXyF79@#C_&ML|wFwwIMu{q<3^U8}(|5<hJoM+SdqVj at JXNq*F;Wdac#Y}}X2%q_u
z4L3_U7kU-}5u#dk`m_O6eWLku4yy?jJA0DQFy~Kxb^_;*v=?|<a7|kqM-V41<p-F=
zZbkEVEj6Czlarew!6!32+2A62qUyHAw4|ua)R at B3Tx8eKbih>fe{lpAR8 at X)?dC at w
z;p_#k6^2&G{#)MKpS-+f`Lbbo0IrZ5Ad!n#4}@-z2Sza$HD`Mc9~^Saq^L9U^6btT
z*(s~eoC$T1nxw%k1O2OU__us<IU)iQUW`nG4UnIwPHuht1}f>$C81ZTzM%$@X#G2o
zSvl!nY3q;d8ER+bXZj6G*7U2j;fzwJUafz?7<mDWJu4X(s;K<8&Z)5)v?H&l{%|uP
zIw<WO`smxg0x7Xv#GNII(n)Lt5NoVgFiw%Ixag_TQ|=YT;Q3b<L)xP(b?68}oAIm0
zL3w?Zw0Bb7y<iN^E6N6A$jVG`DDS(lubV%O&EB-C*Vg>?z7Qw9+RqkM434}MQ%YZ2
zx^^`*)bUThG|7T%po4azZ+~~Uj?lWIc~~Ckwaq8m0fwy`q-t9KTfVN+XfcOxnf%oD
zAMuK>TVwkxZ%G;O)-rGj{T~cc>>%h+oQuE*Am6`9!AIhb_6zQ^{mG}<%T!-|LWid;
z)Ziz96tZBL6}(ThrlTK!5$+alWENyGa+j>?O_&)BLjMU~qbG}vN_(XLkpJLtq5hy^
z at DJK7Q(4KBH*LYS(5K(>mD>uE6U{FpNQhy^_`AfN)$@W)ojYTKsMeaR*WFZZfKtfB
z|BSJU^Rv9VnD!zLsB$+yzf7FDGbdyf=W%;7Z)s=&&L<_tZzDH6t>pRFk?T1WJgj%V
zk at 64r$@m2+R3)MBfeWSci^&$z4dumojW~<G<*oh6%iCI(56go_N~LV*Xjy;lQ8&nv
z;=oreolZ-o4BxW#A2VZoX>GYPUa8hPWaVdii^(6azN<VAl}(GB5eP=y3Z-v72VD1p
z@@ogsKJ0krc{C|>t?;l4;f30W0SAsB<Ms^fxV%&(-pJ3x-NKEm!fauqz->NboRd79
zUgaLrkO$730q;Nb+neqC_l5dfGXT%po+<l9-0X>TiO6pcb^B(o416gP#06vm|2(cv
zJ|Bd@>#tsu1P2ynSOCtDp=x*I{$&E#5E;LluRj*Y?U at oIlR|P3g_H7Q<x_rCOsi`P
zRvK5BL$Vmn$K5G at Evu2JkvPewVEo!d+V}0%6RxTM*bx-F=r5pFzS-^k)vMZDR}9NT
zjR{yRQftqf at 3}!y01gd`4TmB56TW4sdC4iUicE>=6aGENj!}SDU3xg&L9kL1Zs at H?
zgZqW at Us9I4sI!&#TQq at 9vFnAGU__5vqW?IV1E)@ElVh}54${Cec=n9&Wkc(-b&uW%
zcZ+OTU7|(tGsigzEaa6cLPKcXvCY=7{kfMq4jc&ew`@G8+LjRiNpWq(noAGcr#9bs
zD%9Z{zp6gKIVqul6S%lE7bJsaVLhua0M(;<yOEXUrC5^HST7(S#1j!RQ+^;H7Id^G
z&6~lVoily>oEZ}Ue#ER*?&JJ9`uXo&>qgi?oS&XncOkkbO<?8VU`a)OL2im+D{4yE
zyf$K;eedbt-VE%5-Mf&_eB+z?D;Ku4v=7IFaY`a7NX>KZ29bvp6sC6#?hi#?!neHR
z#aFHT_QCxLbEnYK_d?P1cdxznxDNbsUgs~Y;@b)JCma3u)#RmFfyA?g{Wr;KXbReF
zcuX7xTc3E!+uVW-fqOY($U`<>xk4pVad_YRpN4xzHt5wzTBtEjvQxYQPx3c%em1RN
zyYBK8%OKRBUPSp1I?Nic!<=bjS=JKdMUg at szVRz#GjL00#>3=PFIj-~0+`35oiq8~
z(z*)6X6B^w^906kP7>gsux!Wfo#vTKK|LL&G5dG^lKKS2 at 6zJ|^JqSDlaYTmtzYAE
zrY?UzF=DFO2xb`UC%Z8F=*OQ+smser43H1Wb9+$j4fL8iwtz{dg|g<p at lE~Z3s<(a
z4$Fgt!Sif6 at tnKC9nZalb6Y@`{3qwbx4ix3H{<3`-TvaM1lP*_`>;-lE*<*fkL0|?
zAW{Z%$Yi5_yF?%!=>g|_acMTT+mKcd;S3iS9#CWF^DoM9(eS^MAfRNqohYcBRhk1!
z6WKGe-FNDg3cq|TPSXFqLeVImh=ZE8V`EYsDb$~hpd_odr+`zPa$eur?(K%_kA*sX
z<5y2N4bA0ty{6T@(Ub3~ZfXR{M$3=s4nwJUmb->tV*+ at n!QSXd?#>1$3LwLgw3m#K
zQ<z2gvw79F0PH{X at t2{WWS6A;P at i}M$bV)+LsxrZ(p--N`A at 3wCbjS1ud_W@o*j3P
z at v-lsZ2HDG^_MT~Xm1;qhZQSID_u)nayPjDonNz|`c51#EXpwXk+(c=`dCsZIbpV>
zc#cOf2A at J5c$GdD()sH;TD`TN@%i{)aDdyUY4skB4ObqKpFVriJ)tpa&Y=e1kqoJz
zE`asFsMh}-n~*qi=+j$Y={cMy&Z}=itJgq%4?-p=rWSzwN9ly&tLW9C_NsFaG+_m=
zuW}2ha>5<HSpz&9Jdfv-zlHyn>t0RO`O6l^OdpGVf?IOon$=b*`OjPpupisEaQ;yK
zVMH+iP at DqcA2%z7&r@;O{B#0;`Ib#PUwSR{d;C)ff6Uud&@3$IJX-RaTbnp}?5)NW
zK9&)$GppGa!_UCCOrCtR+xe$l)w!~LSRND-K}of=Ff6%20+~qfKY5~}rYwBFO1fxc
zYPF1$lO#*dD=f;2ntX4#1F)9=&dwKJW->cz0gH$7?eI&0 at xXr~!ot|2ED<9jbd~4;
zu4ZlWO>PvQHgtq1#Y4w;w0y&w at Zduls9Mxobux9{46g%c&oUdiKo_(&^_)DpWX*uu
zVc|<GkA#`yyiJUrA}l3OEju>_W-Q#{8#JmHFF at v|ekII5elQ8|0(NyBZMj9+=r2&W
zt-5rD?GqTknel*pi#k?#v{|y0e_Jgt8OYq)%U4oB-M-d*a8B}B?Ro9((2qf-!kJ at B
zB?|m^xL5`F2!C>kbHJDo6b5YGvRQwI1IwCv$rO_I@(ph1pLj`E$I4-OSkji<nhO_H
z-F1T&u=42rr%utp!}klv7&Yl0`GboFdNH3c87#KM_}MxT<6a4WhVzjx|2X*J7vB0$
zp<wkN+4J(N{GX7Yusu)~%F;zo8yg-r)DZBcDoBli4y7tky5MT0uMX)JehULrSeEZC
z!jR@&yXZoI1k`&@AyFqKO>^=y!kw7_*rdIcIS9YO|HF#~avbjP4H}+(vYoAJ{afeN
zZ7Ws`9>C>psN(s>p#en%EL3U<hd<1lyJH7g|0oLaX4kef#Rm*;f#w7G%nNi%&DMWh
zVC>=`n=&hbw$rh9cYa}}n?kq^No8_8R+K0RaQ*9An#vn$_PqGAU@`s&|Ap`%x4qHb
z*)c2+t9thfFLSKP%MRV3ZP)rIy~Fow{l~}7MC>N>i at 5f@^d3K6)83+%G*5^#u+uh<
zQ2(5gd|<F8eO(fA)ned#v<vuG(v&<S$bxjU#e at f!v{F)*+kfn+05K;XrbJp0QTE?E
z{C{U&4gz|RbvK at -&+EhI3Av%|p%^%Ko at ty@lpVe{2n{694ZQ^wV5N4QJRSb at n>D1>
z)8zS-s3=fU0~a1zv~Er8%<=V|ZQ%jsh4FlPO!V~l!;=633ToTe^2_oQlVgJ_X=(HL
zJTVlhR?vC)Q21Kbu8~n>3jsh!*d5q4+ at zG8Q(yfN?9+qbanoPAoWweupZ<MpE=a2I
zAh*5I)73dF5C4VJf4Et at v_TL*bc1AC|EZHJHm?ugugE5^OJ!5zlC`Tud^SD%5{z{3
z`3I3u>Eq0n$DiQ*U$TC!xAyDm#dWO0W$RZT{pfQKi)vrC@|`cf;u%pIKp!ksp~2ON
z*APqMO9ufGAzJ_F4L_#);DJzwTVJVRnVAVIPn at F9v>!Xk^3{j$oeI%)^yvJh4MQ$r
z`Nq!}>!dwGx0w at u38FBh&p-Wb+}!D`8!89P8-6PE7p_&n2(5JFAPfZSU*wB(hQYgX
z*LG+qKHjdueX1k?jCv~3nA^GNa)&?pDts*l7?@I)EWd;$%`YUn5gR>~jYiKGWbtoO
zUtq<qoi5=TvK??8K$a3I;X&?1qqn<jSRN28L=BM}NcHY6++vG+IwY{5jSb(gI$U$7
zj;UDMxM=l2UGrkTmt>`TuUw}C=p$ahjj6G8!#c0_Zpa71UpU74C;9ij{F=e{y!s{=
zQ`y2=-fTJSdJ=T~r%!885=4gubT|puKJqA2f&t?EpFChDx&Hc9mXscw5zlu@=Z~3k
zucgugIMmcQ<SGvc!XGECmgvd%t~hW=n;|@;+h2V<^ZvW>gIQ+TsWEcpcs_%28y|g9
z)>t>>+W5qPv=c;4;*TAzbKh=&d^5}t=47a7ZK3&RXD1hw<Sgp#+W+<kk(cuZ$R?)e
zI7EJFM}pc&wrx7Xi1r13SFRqHIA2(vZ&Lt!Sg~c3EhciD+urW$=^mDc{{oz_2tJ$3
z4HB*VHZo$c`h at S7Sr<2Fim;Adn`~D+OL-%kFR!US=nA20!kvTYRogO;4;r^a?|(${
zAN%A>>!0&SpSd%}cMR?icRup@@3biiYtEi+UN_LZZdKRmvrwa~=5U`O4elNOL)M at 3
z2~m^0G7n`M!jkd8OAj2<-&;_81Unk`4*q%e3;*q{-TvGegGWvJRl?k9wH<A+85DaS
zdrklp867814Y^9q;y at e8N|2uwDE|Z9cz)m(+#~RR+kpegiP0ifz!K_gQuQM*$KeoI
z1o>$+ABXMLle<#PWuAgZ%YvM*++>6E0{Lgj`mgU=X-p}l2H~%c9O|~W`+Iwa<)Mt1
z+9EbkbpzcXS02#~R|ZKQzF)bh$`R%kW+_ at h)uFMcq{Qrd^IaWCBy6|PU*XQY_iR0D
zWBI0a``>t*{!fnC%@2O?i9W!YyIy)N)OpjRkA)hP1jetx5LIE>?mZYhM8U!X4r$Qg
z=S5AbTiN0~EChw$6G1q$YAyc8RsEeujtsek<*S^^%6)sGbeIV~jh#JlNS{CXmf>S?
z_by9|YnOXdaD;g-_nD%CG5gl5Am7wp1W~YD5nchl0)7(+<Ud0||Mc`Ys#^Ji`8=@#
zSdk-$q)<mao}3cWHa#5x|19N%_^6VyoR*DiJ$)3RE!VDNlHvK`E>rxA^(5>Id>A>@
z?Qi$>_7BH{^FcK(PB{)_H;6ghy6rxEP(&bnzf<q~IinJ$3p$7k at xTY4H1zdQCv-rn
zPf}?lC(oTT`5q0<AJynMaAcwGe(_}<Y>QuB04>+25WHR;eJ4+Z8eS;|AYqn0KMD9c
z(Brlzp9+6EqyfgpA5vCd9XfA)YVe}VB`m3}Sb6yH!rrbSmv{>*z(y8*@S2sAdTWOv
zXKWcBF1w*vt;Yu-6Vn0>P>wlIKINyTse$S;<f_DZGv`bn$3U=0aB6|Q@%&qv-2U=^
zDgSW(6gDs+Sv)-_{`(As#!*#)a!B(r$zH{&mu*~^6d%P`OwZ>cw$zIX(g7+Kuj*qy
zun4g43a&v`5BVjx{p~=1->^IucCRF&sg$BxHf8I-)xYe(eq^4Z`<*lSSJ6>ZitFaj
zoqAt at 4$V$>p5~8fO~YovDXqb;NWIsfA at g<fMbL|Y|A{h>0D>&JCk%vxzq=_Ki>N`*
z(803=BczB4S~FZC<Z8fV`^xL#4nrEz)5me(=auAz&ReC9S<}V~`)1{(tyCI*NyEV9
zt3$5Rhm}h4m^JC1)a2+X_x)^0htS)k=qY6j=Bvq-o1cy;-A#d8H*|N at u3OIt5^NRl
zRb at lui*`3;1d+km+4oPMc#k-jm at J$>i7iFT;tY6T+LlTGf$c1+C{)+a!X9$D5O9$E
zk`_x>Wcgx=!GpBw!h`&!C10~W+iGn+*1Ut&+}PL6zr<tEdEz9@=aA8E``c9m{loHL
zJX)Wf`}gpTQ$A5J;mqvVzYnG>biZ?_-B-7EZFPGK at lNxnZwy?2f-@&JW`<0q4Ogzp
zE7a5FYCdYz;5*s4u6@^bTYyK2 at b`S-q2l7+^Y*WS at JV>_&G2M0_jt$w;b=_|ykK=w
zZ=}hDI}B;0739Q6Pf1RVTd`-4k2+7B!bBwI)v$VXdPc&6zFu{~5|UzuT;;7k`Q?T1
z8?&d33Cx++mT(^#i;M`0lVAbO#AD)jrl!Vzz4%vdd-+Xo7Y_76*MKwt`AaUAZWF#-
z1B4HIk4%=@r3+*`N_({CCH2_X<bH~4AUp}65tT)1GbtJ#d2Of-^-B1k`0@|_9n|~g
z4Qq6>_>+>N<@o}<u?vJ|qy_P#a-1&Rw85M!d>jB!ckjG)z}tIf^{Rnkc{FWUYqwRC
zm)gk|_6V%pw+EgXyeD+O89Ax2>!y0<_`B43S#|z=+woH}FAA#5iF(D>E$r~jfZT)q
z(-1huEq?Gz>)%$s|D6vyAGj#vY02vT$o??!Gzv<x^)F-$L?oaP at UBOU86G^;NJ*E5
zIZ57A`I3ds;J at -pt_mkv;Q{=hxM0!leM7Day#>oDUA!<MVNP_+OxOto4od8yXH1+u
zfv2USzKT*Ozf5&tU<Qld3f%VMYp~x<n>W(K#kCbglShwnXzv^Eguen^GiC{?mr*k&
zK)Z2!GJXNSA^Lic9+m_RWX`*VJ%D>kwr}{taHDETgXk5ggXw~)u%#*l+;#Xcal{({
zN(V{8^T}N-O1}A#Yf{@n)ilKJZ5H8i?p$Nd>Q%$?AdXIc^+(`LVrTy1dK!M`;QsdA
zyTBDf_q%Ar2KWS<vbX!+djG`lZ*sfsc>d+6*x9Yyx3X<R-FnYo)F8x!4=6u?{nkG>
zKK)00=irB*&7OR(2wGfXOsIe8mC_P0fm2^ko?!oChfuqD<(^%UeTK9X6QiSNOyG)y
zGzfo`AT#s+yUQACm;>an{6V!jNaKW<=?s(9j6_v~L8b{<@QKFmm1{3O96fbRV$?)H
zCb4X(RaQQ*glt6M<hFwc6J}4K8E$*wRSJoyA6n+r%p{L$0Q*U${HzUswdXFV-V0w5
zJr$~- at aLtW{DY`<?c3dbU=Wi$5-<`5`<yYu7e+Q at Qu78gX+?608dkQ)#13l at l1V|~
z;Y4Cs at pd}+5bWB4@?VtMd-$L<y~v^NP}>a;%cGf<`gNW)s0k(wJ_nXB6d5{&(EV~?
zO5Z;6!N*n07Uh at b-9P4M$A5P-CNWlA32_QWg;2Ndv*$H}@J(MQ4T^@}cjWM~PrtPO
zJuF8*|DAGm)9=3<jv_pbqB)EDyFmpy`B9G at Wi`l-q$jf(!+maT1l43_Pn<hvsuiwI
zT-=;VNpZ781TdlDj8$t1L#Bld5eHNzuWiXdPus4Y7W{(lj;1Y}TlViyin^bcCFMsQ
zCHKpD0%K6Mq#pKo{k6w at V`9|(3`}5GZRP-9Q%dq&el3JlYE^@qGLAw&jM`)6!-Qk6
z@`%O7M-l#<pFE$Ge~VK>3c_1nN;Gj6?X9;HI+L55>}Nm+aVB7Z!6e_dcQ=dMR_D<W
zO(W!akUUvCpMDnZdijnW0H}af+VYJ4+_1Ot{JOPkhUMX(a`Lx<iXz`?`L->fwmnCW
zSpUFj?w8~b_Jsu%Rx+f`vP~OObJ76pQ?k>5Pb6#PR+dCg3t_cv?JDZ1+zm>;#ZS4i
zcX(uUlk3L=qk%pPet>q-d-^or2oE8-8X5<1V)faxkz)>N$IP5C<-VWOMv{_ZQZf>S
zq3P|NhYxohInsCf49d{F+NzxDiXm5#=blaa15{Fdd$W`oTa^$7Mmyy^6q*V5_v}a|
z*!J8@&QSGN?A$I~<=N4ny(!92)3lK1$ETh<)w?h`AcT*PkFxJ at NCs$RY;Q~J`EvVD
z91{m8|G^%bcWe)T#gGOv0YP(n6Za<k6)VH0j5dp>G)*n1uZzXAl2l}HA?H7{ODX~J
zf=AJXoX<lByc2KNuU$JVj|FYZk9_nwHS);EU&yCZ1qQYUREC${{eqWR!`8oDz}~(4
z^>+kb=Vhc!xaTK5$B&=*<IPzUf3;%&pu&VRCjLr)DJ|Td?R$5Jv>GnEozK4DT3WhK
zr%(8$IC55gIu{UcXaAYA@&tt*j{N#lyN?d4XhA-+>9qgc!5*jTOuhde&c at 8#wDg?R
zoYH)qC*JduY2)vjG3nmK^d!nmQuHM2s&4rbVdxfNg>|cIni{3bTKP!(<<c%))8Bpc
zh?0#nCy&V~$%~ycWzx7`!V5_*-tp4w2Go{H$!mnLqW8f|)DMp;uoIwlT23m>DzK5`
z5tYvtAOI05TeJY%;n&Hz84KH&t=zS(|M)REUywhvmp^wq&Wri7n|S_-nv=h~$q;MV
zxkH3b{YTaig$FYp%0!?GolyfJ{In5JmN=J0YW~8=xACJ5>(&j+18Pf1tFF0`poSk7
zn&~}pg8bj}`rGbT>Y~*v+f;kgqc?v3qyMX>W!cnmzmU+!M$0TMa6Tb1x^eTCnN!DU
z*R5E>C=lTV4Ceo#+W;$)Y1SAGVSe+H^-sUZb^}_2oZ0{0M=oLfa(7t&+G<z}oNayL
zN$o#(2tv)8a-U?b`ZcRp9y%mj7M7kF3lGpN&1CN$W}}6zv2=C+g4Sj5Gcab<{`&Ui
zcmnNBD%VdL`-_sr3+uW%8V34^_jz-saP at QkEL*=u9%#&*U|}ny!d-*utMA<T$rHzL
zzfgNTQ)?c4aNeBBtX%{S^42+>u;H<7mu%f?gJAgvsqsDS*1UsY;oaq*{ByTs5Bgg8
z$8UJ}VaktPh5*so`e)#Xh~dkXi%0ok7m!6zA3`?LY9xqdX2j9%{@lp7`TY9z8;0Xi
z)6yi{owu3)f8hKD{KHZpTX$^V_ttyvSGIL#NkK_zHbSTB_Ezcb<L~|l<|jhG!8hI>
z`-{KlNMYE<2PpvsoN~B0fFdM_fl0LQ+%7MGZoliT4}SHN|70{P(DS8Op~5bq$&~77
zD321i22&c7xvOZue_^U=9lhty+XZUcSLinQ)lIL<Hg8(GVJ$-yLVHnPw}Ti*69gEu
za_=4~W2(l4$1HDJ6g~Ampc-d#Dobiswh1U;kU*;yGk1Dy)Fh_Og0|)bD_0P<9Y>C^
zLun?Ie at 3>AW7gEM^JY(iYhrX{WF-}p<vG7>D{h}^Q7Yn^ucmqJ0O4<I6WUYrCH&R5
zHUi<Fncy)0dtZH%{Fmy&>~*APB}w7$-oKaU2Zx>oPm>H#bMuSombL&$>{|!CLuWQ_
z*f1=QibZwsKO``!vDKFzw*ILl^dE^}?w90`nKz3oTgYbfGcVTn^-P;K0p6H at WBU_N
z!BWndaxZA8A|`RsQy7L&(_#nKKMWfeDESZAaNv{QFd>b`--sRS(8pheXA*?cw!ZV3
z=Met*p9VQBtme;u7w&LtgZ<k$(942=Ve at HvW@2QY*|vtMW0I2QRxWQUUD_D=QMk=&
zR%1>a%^9i`8&+JeW&75mg$wfMm$HZz&Hy<U0+ZM>FMdvPS{&!3N7c at y+uT|At74}1
zfkcDsl3?*S^mH!Uxl0B*(0-`u0TX at zhP=Ov{D({nfAx?Crz at es=WP84{^x>p;46J3
zh#}da{1}bF3-iX~<h&{3DYeTmuSApkjvpH`;GKKBY2(IWc@&fvZoGO8 at NC~3Z^Paf
zl;$Zdw_^J?wY}Ug;XGsV7{FcP&hohX$Nwq6cK(W;JFNfm%0ju=%MTx~8|aUkI(GWl
zp9 at M7p<Ra#weQ;}|AiOSE`amX9^s!0Av|%+&le2zM^2*+f|9V|@@4hSCCe=8?La6U
z+2Pi9c2Rcu!kWNOUXtt6w!=sBzHVqoO}>ZEgu6Z{o>-RGGI;RT%fn~p&KNg0YD!?$
z7G~NbLgy#m_X`3Uj at mwDHxc+-yls2++V$#dSea}GEQ at h5)2TNUw!*41PN(vQsvbPI
zwew|hQvMk}WHlg%T1b?C2`}z0{G~%0zKinX5kR=Xxytrw-MyRULz|M`=!X&V9zDv>
zi7$R9hlui1*;r$XVJY~99K}NhymN0iZ`w30kF30O3strklBk~3XDk~FwR!6nY=`bw
z`rf4ber^{KB---YyICc9JmLG^`vmL+3I(A}{n|CUWiO~5clSSVAu=4gj~;E=v&X*@
z=ob)LNGqwhaMr}Tbp!rfdE{v1H1cEgpE$Ah;zcnp2DryZ&C|#Zf3lrhkO=^vnUxs&
zlqWybh?zca=EPsApTgbBClA_Jx^&T>9KlJHDRdq%Gd!H(KAEYpy(dor-hdb}hn-K&
zO6DvD>JAF~wl9x~o`$E3lE448Hv_dlE2;0yx$2f?ED*GG%T<yW&p*!($``^P?OS;8
zA&r1H0Hi-V$@-W3j~|9{AwQHsky~DfJtNq33eqv at LFZC_SivF`g(bP-zbeAm9fk~e
zN8fJQym?q2<QSzz>{b1s-m~WjRaRIDde09&alb$;<L~_$SM&C_KbkRn>fBiq2OhdS
zb=+O{WoDh+_Tohi;c2N~xq{`(d?wZyaS){SElo&_^J?c?Ho8$=);;!QxW9&6584;$
zXBUtd#W-aeM0WU-ZBjRC${1j5_HSed=ra14?SN0x`sX2mv25J1A+k at XEoB}rx(s^Z
zY-dUu>%1x=+;j9O#e at 5C>$5L1YNV(~&%B=!F2NsTiO9H6ny4;^n52f3_}MED99Xhp
zedUTKo=<ZE`Nl^??RQ7Z)((jLQhsjzc4s`BUkm?W{WHDEa~{sF1A}SMK6UdYDRVd3
zO3XauKc4{0_r#aKufVpEml}AC4<GW7{>hQ=(8;Y^whYSyEE%fABon;-4?ZNqb?}`J
z1nc*||B3shpZxeo{}D20!hLt`e(r_F_3NCBnKzq7CSOw0N>*9n)CqUT#7pQ%LQn=8
z&51;gQU0kwmiLiQzDzI72~AyG%(Sg9z7{!+9OE0VTv2_Awp`oVEbjoVZe)i)+2(k(
z^7-3qTAN!B9*XS4E at qw!MFnB0=qYd!g_XsT9f*BcP*gbr0f?}orj46B^L`zI#ee*G
zMME`?uT3|e5_nRF7tnh4v~hGKaSeq(^v|md5NNVm1j3|6wC>+u-L|~6p at u@}JbY%5
z?R#LqP0gf%{ja-tG4k8PZ6K)NvBI{OowVutqhtkRHaR(lI$Gw at D9mCD&~ucF<(k|5
z{7bEyH&A{6M=Aeu0c;r at XyMVmgT}V4TZiQV$08~uW7m9k9zT&=oI?)>_!<1*Q}>In
zIIW_L8sD{dw`5)}IGVf#Z~aq#B=*LqC$*nCJ7vP%Qu#1=^qxG~d+HRWqGR74Kp<K@
zB#)?QXzGa5$T<{{Qe_Mopw6(7!mq0 at JQ&&G&$VNtr&TOkAP|OW2l79%8^d<)^l=mJ
z`KjQM_3s(sFUrVH28z=S-*{U5EdGBOkMfl(onbG}o-<tvrze+<FJ8Ry(Hm at e5Ie6n
zEKW!aZ(Rom<=5v`R}?kW@(HilxTdy!MbDXY3c0o(I4Ez0<`eS#gs at EV)+zsPKk~PQ
z+XB-Tzl1f1M__(KmB2?s`||Ak^q^#hjQC}Zo(sko#1Sz0i7$R1a6SuCFRU6kdE738
zpea1schlIuZQHOspdHA6o*6_Uy$@W-F38;R^mD3Hk^lGo;zum6jN*J=nzpSQEq<zz
zgO1JrAf`|L*R5Gw(b3@<5gq1oXFHSs3X0jvfkiv^?VgjF!TE3MR$qHOA%1q`99A{f
z@?g-r;3ZTq6 at A<C<kOKI{#-jHIfi+dTTyIbufB544-5AM7~_meO^d5swwNLfCZx0k
zn!)6lY5Y0FzFlec`3w3_9P_g&Q^w)m0mJA$aa=YQzxswpABW))+X`a4iF1;YV+d-s
zY_J5dYbsls1BJXe3$OvnNqtWzxV51uDk0C$f at O`6<d{w=Ka_UhpYRV0H$rJ&R(@_y
zklqU}1>Q{g$;e3wqRfSvB{gN1eV}1>wD76gNqY|;@{JO{JYsAy;c_-hc);(bv19x8
zVR;CTvhQGtRnBcca#TdsQf%A4dEdJqjsMk;shZ0V9tM at cPs;`5psB($7c0~Yw0!bJ
zN>2KW#DvtvO`^lxCacar*mdFrL`v{jH7y)CeJUn5XUdqLn!1%I&u~jd&S7I`8_O4h
znsmjc<=K%V6WQS}v_THwk)R-|mM`tS at K9t=i7=3FWlf99mM%(6nFrg<MX3rH6Sec;
zVAS*ps+Vzr%4OsBWQ3xw0_tYGY`*cd^YCnxaE^Ubk&>OtKg0706utB1H}dN1taH9%
z8AJ8GT^&b{`CbkIx(d&~uopLi#mR-$*wqToXKRc6VcKyqGxBA}So~-_dH!=!49>!Z
z!4MqOp{%a5exMK9Cs3%+zO^?~_}SD!USx4LI0~YS(wfpC!+r;Eckb9RERU+i3rcIs
zmTljTpJeIQEooUvpl&vCSpAp;IFm+q&9PJ6F#q7&?{Puwd*yWtfU}Ns8$tTaY2)X{
z&B-my1P!u)S6#T+aqRe#fo|C`&}Bf>6zqF``d<vvcj+n=S$GcZ`$$JOKl->7c<e*`
zIkfBWr+>A9jFE0{5oQ%;MMqCBsHq5FBA5%|FM%tlqK=b4ekO$n1Y#rE9zB&-PqCr%
zXC%*2IB(5^7lrm3dpe=r>>b>vy!tHYg398e+DcmnQQWL<-TF1 at Rh9HNfmisn+O7_Z
zKlF{VRETAuolw}zoN!CpWrV-OKS_gOC5<<T_I|zcMHzAxQ`@l(b%4zmiI6@{f?$=`
zmVrZ9>KZhtpvqWR8_l1IE!CY#RoA*Ka^&x*y>oc}aoPuX+D#h;eCwnoUV8$`Dk$cz
zH{MMzFX4Z1+bpt$txdMz&fPogzu-D_QN|t6{*-ZdO&oidAR3?lD!Gjp9z?KUVe_cl
z1$Mvmn&McJ$8!p^Ygez9qZpn<G**Ciiq<LF25UEP;bQose at a7wO8mS4?O9M!m{wYJ
z|2;nqUBycyrvU9?TFTti_*tqzuGqQ>_%pYx5ZPvCP72j%_UtJVxEj0K`_G;QoKSSw
zHW7&Nvi#!e(z1qXOfME>O;-oa1iOV08`j)}d9zY85-fE#d&jX8p|4}8dO(7(Z+;p>
zRnc(IGGmtTr`m;Y#BSo*DX9*EYdJY7!Q#(LV}?`vE&i5mTl6ej+)#<gy&$lBnHb6h
z;83Oiphcp6p+Ka1NtDjYObieET{d<N(?1HQJ460__~S1M8|$rq!A;??9k0AKWBLR%
zp7-DLlSKnPIG4mUh4s1q at b9q#;GD_2Nn`J#gh-F2_A7+lcm6^9yT!kJ(*|x;&Y#Ts
zhP=vRB6r at 5@#Md(nb1U{s|{TJH=e?^;@fw>{p<f<6C68t+WZyEs4H2yX%=C2ZYo_u
zBv)b%syDxZQEw00^!O9uVXIn~=hsvQbc-d~g4C>aAP0=)c@@P9l~yiks9w>uptBvv
z3z)R6u&TS8 at +0f8dRb$1)MWK;=qlDf+tZk4;NaWur=-pcFmE}@WmQG;yn2ot!X!!f
zOJP&RTQ>zT;ER$Hqy1o<w}IMY at oVI#6%=Pls1#WX{lb!}Qdu?tgep?ec|3ZsJst$1
zmcr7!oV-+a$M&b5K}{CEqwlh at d-(nx{QURFe}D7Pho8&L>V5e7nsaB#_ASr7JafiG
zYy(+U6|`R at OMnX2zX!oCz~qz*CSCX5U;enDqKNjg>f+_qm#<RAX{X?4u+1%7Hw!K-
z+^`{P?o5+MigKp}5a_96p-fwMZX^5$&Ys(N{jqO0wTm`wa$!kLISO$SQam)k at ULCP
zHe7f0TGX_$)5iZYB{eoYIE{<_8>CP at d<9reCK?82;Gc&6p2h3d0PrZSEAs_K$?{#h
zmTuWh`JsUe;kE7FnUR~`|IigtFvJVeC1^oC2M4!5 at nl(TnXnh(UybTv(>jb0Y<Zz8
z{-2_TI_A0BM!cGFu`}H=g-2%D*NZ=0!6WW3i$C=9YzHu(OSf+IY at +|N>^TRx#Vmf?
zF3sOpEM!$3JP^K}@3^sN_nzT;tVho9`R}Fl@>RB-I)|*x`rr8EbMunptbcb6LMfC<
z{)=WxWm2dDR*jM$n74DMFX-;<K7EECrtjkAzAM+c5aG>)O1qC7nL73tnfaMLCr{1q
z>6tq5-g|!a^TN8SxU at u`7Ou`6FT5gHCZX(`O{|pszRQoWsR0t==FLpYP7&=j)bt5=
zM^W$dGoxpWXYJ04ni^X9>~Xe+2(|j!#D3^YTMi#>KX$zR$g#FVM;t4U9OL<)I%Co=
ze*B*~A#oXPymo!l<4?98J+WxhMm8yTjSKApJ_2%}z<4O6Yr#9=d06}4MaF`Sk6mw^
z18==2ZW|Xj+a_!A2S;Ao;OlRRUxOIY0KsLACL><NZQ-hZ9%C_IgVXcX0Y{xGJ}x7}
zmf`D=gPGXS&;IUT_wLy{Tn~P18p!JN=gI%2dk2YnzPr^|A5F^3vi`^4_lt(kHp`y;
zXO78H>fEyv@@H{xCl$A_p|0h?!QO|iEI)cOIzQhOSzYo_r0;FGdM!njl&SZnWhPbi
z^|OK}O}bA9^{HET?b!bOOZ{gb*!Jv;-*{F at ehI)X&(6=_u0%;hw@=Ru{5C)x^diDm
z*%#3(597eObNs84eK=`v{l?O!#qxravr=ZyniR`nI_~bcgt>WnDLkJI-7D+Xtif>W
zDzPV|78>L~6$LJoqejMJMQz#A{y-YAXe at p?U!1UeUwU<EUk76frIKF~n7wp<26b_!
zNQzPyrPU>dDru;pUoGhC3EJiP0$YK at r=bcC7TU9+t*M|STL8l3%M#V+`#SdR-8Wp1
zlEww1V33X2*y`4A1Z=SWd(K}>D$1w-kH7cl%eQRwAov&9;ynm-0Lfzh(aHo&iHp7O
zmp_h*o?hP8n$fh}6hTf(#o`V%=Bzo>Q!^96e)wb(;^z?594vAk)f!uO{qc2IuYa2<
zZQin}pt2}5Li?HXu=<SO!17Iw<}E}U%cY6)3aHOd;#a}9^XI-UH7jNMl(9a&|Gr;%
ze5mV`A6mV at pP=yMS<}*s^JyTmf%x{*OA7-U!|Gy0<@!*|rD#cZUVHH&hCij9Mbo}x
z3kOcaiX~gFUk7Fg)SkRF%s=Y308UWVxE=B<i|4OslC9Z&@>J-DaUya1+iJm41bMMx
zY<=to`7hw5a13D5pZopa!TJ6B_7B%XZ6g-zifx;BzxH;=rEB(FvB<V#C%Epd|B8V%
za)d+cUlbCjQ)7EG_@(tPX+68X-n77o7BtjVuU=DFQE2g7na!Iv$oYbcC~RJqU7Slx
z0nXupS<u<G>f)u|2QRO?e&butXPl}=b0!<4V#&gJv+rMX?eWlnlP3IX`QCjk`}VaD
z4t5<szV6y%QPamu at 8W?0s>e_GC%@PEz&n%@16G8n1jNX~rq4_mcQ;3BN?xX=4*BC+
z^b2X3iHJ?)&QtzXD*$zX_FVPA19U>br`Y&86!?m&Vky8GnTghapz{}Gh%H*l%hwL@
z^Wgt!T(ink)_LS;==TIDy8!T(Mla$!m61x}r1_)cHu-GoKl!u2vy+4S2Z!syy~7?P
zvA4hQa?QpqG#sjO)4stmvu3gW-1UlWTP5+a3*drCCsr`|FJuF>Q`(N7a&Y>@dx4x)
zL%~4Uf9^ayyja-SyM8n;F{Zk=w`|qgpZ)yDwOuQlckH;0bBNd$C6 at u`H!Xt3v2MeI
z%QB9eH!CeSLjYIw8Cy7VDy*SFuA-_Fsq at k?O=Tu#W+mH?G(e6+8T3BNFE4<3=7bdL
z@*pRsC(etRF*j<ml?gHwGk3<pcYjU)5&I^t9bA<7jwFSVAv~YmhYr%0be1&1bQP!O
z=Tz{bZOcY3BcvrjgJR_?_U?5aVQ=_1dzw%uQL*@qC7Q9Ygt~;MzlIvN$V3SD{9YOd
z1`iC^gVVcmas8q#TgiX-X#E43FWGl+{R^+N0q_3#k7R5G at _*+xnk{~Yl{>Z``S3G~
zf&O2&akES2&YL}b@)+uO)5i5ZXU^hf-SYJF<L~}4$yv8*)slS&vMNe+8$0H%+c<}4
z3ArB)m>4q+^8 at 5hc<?z>#z;}@KKp>oTz>V?`GWF-^t3qjwo($Jf+LZ$bPhR>ik#xa
zgId0 at 7LtEnUT&bSXC;(Zm#%;0(a^OLc><r$;Y0Xag362-ehTdf0B?Cfq{;>I<>HO>
zAn at q&h#q?P*FoCj)vLkcFUl5B1F6M=g;lt?ro6VNi$BvA5dOg&p at HRFkfyK^B?{pK
z at DDYKMGOeK<C*8eJ- at HU!2<_}@v-K{Gl#zX<DpM~yZ6^$5dNiQxw0*)w(Nu%7(e0O
zwmrK%6f80(K;Q`4vGw44A5wIo9AyogmY&C+O-fHFU)<1n{N$qb>rj&=S5{8E_os<z
z2 at Mj2lVj0DEZ={i?Z~m)IEV7n+0mf^)zprjGA2AYN0uP9Y)xly0fo<NELpc2k+l at U
z!t#Qm%Hp#6Duh3sNB`RoiwBIJG{zHw;f-~}0~WfL@>5!#4;ey$OMHX<gJB^2t!J?k
zrH28hxn2WUU1z6dY_*G_XJjSkDi%|gk9Uq3M_0nJBi80wlfxeQs~G80z+5P}yz1=P
zozFh68UnYEs}v6CK5-(l^Y_y}c<A8pJ?hu49sKw=d*A-x(C2>;d4%>+4rzK?IwaeK
zDHAL+K#2Ao+vIeBHOf^PeDhs7>>@!j@=OZ|+>Du%el=m-yn+JQ0KTJ=<;|1t`*~`1
zD*u0KK at PgY@}-RpYgXUJIZT;1V_{c&Xh1nHeE#9VS-}MaYGEd|A50>*tRVc+Uv12u
zGYu431&Yq2N26v=jEjrPDlL at 8t3ros!}zzHtVFmSB>>Ec((_0mX#N`dFkSnPAGKK=
ze*dG at r%x4Cmyzcl2kH=*tL#x(1Cc+2 at Q3!a_}LLHTQ<QKs+X!9s=NSS=aR_I-&gz4
zp~J)Y*#6S%J70Mdi_Y%1KLlb2Z^NzeU;fj7;E22Hr+?qRXLqpvcUu2DA+j*r?0w~R
z>z{<ArkWOnJlSQ1RlR+oDZ-9Y*4%_+0a;Mv#*J0Iy-`!|i;JC6vas$p&LM;Y>`iDu
z%*<dsk%KD at kdzPw2;?NgHu9st+zw#LS&6LCn3Q-uC*Ob1>>2md=Y_PSCGzUfOacr;
zZgP1|8MYz;S<qR;5n{^vTfJ60ln&|uzJk(*S}-aa5hNi=&Q*Ksx6}N&JuP)O!_^O*
zH$GP<e<@=bpiVsQ)=R$oGlvf!8O8 at yL2c;eJGO6r_9b2p=`ddBlvnXZRIgblpB)9a
z^=}PGZiSBC^U|wJg!_*krD>R!%<|%@_LlJc1PNjdwZgCIc^Se+-49)vJ at HrYmWX=7
zeZGAIybYMY|NMiYp at LGUmc>8*n?U`=m004=@V$i3|J4SIfc)p$nj1Y$;i1f;+z=pV
z>yuA&AMpS%Y=h-ml!XGF+mp;k7fJpLD=Tbd(H{Hc3l1DliYkp%9m<a-tpaBE!NFU<
zT?ja&`L}G|U^EI3^)k00JtH$nrI$W)>m}dInIlJz4(~&G at uJq&-S2$@XUMK3<R?eX
z6r<_B@)-SJj)3(q#3?ku3yRo(iDC}Nk0XDU4&Z3owlzFINENb*a;A>|r6BC$&6}OK
z`12}?zyQL1Zc9Vi)9Tjd&`<<E at K1PHMd48(=9d*X<0B+R;g9}814NDHFQlssS>eJ3
z2?<dFbRjQQ8JD#5cp{p$E4SB*mE!{e(tG at vKsE#&#`x6q1Q?<6>f!}0O)LUs8L9E|
zbZiI00c_!0zZVlJ;ZON7GF@)%rOO^4no at R7vMs}$-+IaSb>`^NW5fFxc=+0;m*3j@
z!fUcQ(z24p at j3ay4yQ!V7Bls~;QR@#{}r3o17g9?^c*{S{5N<Z>hM2+M26>Q=EQqA
z{HKinrKiC951n7o(*^kx?sHojTtHpNg8vK9azgavHCL}k4l4zC`PR)c7K09XX^|iO
zxwgO=&kvV-xI=bPj>Rc4S$x?_wmu=NF*Bfm77JF?UWiS6&@Lc?@O6wVBS?H+v6v4*
zj+h-VSjmfO`3=Hjh8s{2>}cbYD(!oAkvzl>?-R2^zzbVfxaarYICkv#us at dX+}VEk
zi1okx^n(K at jzO<c at 7*=zfJmtIAEW_xK{l*WF9y>ToZFGle%t-v!_l)Q!vBQlXV&C<
zk>pGocUNX%u>M2mF|9EZ!hLQ_gL at p$m7x%xsDGsXZ{)BPB!#-<2s^3%HSbg8r+>1o
zG={YelOO(66wLbE{P+_|33I at YmGKHP6XzERNHPD{Jaif990+&*{1RbwPY2rb&cS`O
z$L_(sk_e#p=}Qn(;sxO`Lk;<H;1kRZ`jucx$Z=|tRTwEL&tohM>Hqz{#dbLoj-E$u
zbX~f(^YwRY8f&cW^2!2t-L`iRX10LO{Ln$rxD~wI*B@={@3H$I`tUOyB)LRR&aBB}
z at H5DJ$t=pD|A#(;sFyPs+3nl6F&1(ghQ`500{<B~rsS8Txl=(mLnq;IB0s&g9l$Il
zXJscvendZ6*xqdM2WrgD?NT1{3o^LH2!9Gcrc>yB5LTDq3ZU~Z>R!3-@)cq{Gzez`
zXDNVO<d~s0{3kfHhfB5v%xa+d at 7zxFk!z1V28iO;OTNc5Cr+Fk2}k|v)upYiM?U>c
zMQ!PxH{KDfbk}Wr_RL>c4bKeUF2qm%t3SSIRbS87bPbco-G%%%a&oMHj+g$2uVobG
z)UR0s@#52hsxtdaWVdhM2K86^Iy4SabTozn(2>K2ut2z%oum#$espUaUkbp#kay%q
z<Ub7uB8Y6aL at 7u}bb&MNI%_XqkwicVREa|Zk?a6{SiZ$2Ss3F(gGd)b;3-fZIi|Mx
zr1=Dze_;mmf&WUL3(7?C;vkh^?ZA-!-}~E>Cr^!>W6eXCY}}ild}i~tYsY?nlm5dI
zMB*VQq?9rZ)XPw5(fZ%__6O1Pq9{CqT;chdHD%1~srPl9I-8cCMQm0ttU{v8BB)%x
zG~DO5G!}HUu`|%Nghmquh?_kza%7pm4z8`x$)c)~$WMo~K_CGBBTur0t<N1VyzIx@
z`0(J#tikqxRumCj+n(Lz|Bjbl3teLGfY?zNX>m_`-_avZdUh~ru$3am)P|<eIS;*U
zLAt7Ek|2BwsS*?gE=cd#vun!}PYt=`2k`dv$&(}Hp!Q=#S$**mE|i0x{HAr!9x1fq
zJ2YNVPSQzrFli&*$BylJ{hgAwwt2C$Ha`4tcz&$^SyRR?-#3_&n at NAL{y|@4&CAk7
zpAzo&?Hfe8%A^*Op^ih^&z`vYp-Yj&BD0kmgIXLG!ujO5S at L!xJA~U54}KoMHhe}y
zcD&L>gg?p8Ke^`IIqphM8+;L~FFw?|bB7GdP=D*zYFD&NfLJa}=p=Lmla}8sa!g4;
z0ovhf&0nxUat#`7;T72g_)kEosaTQye<1Bsr_PL=18E`5xg at VcAABqkUT(JhYv2|R
ze-wq*KN#==CB}~&!HYO~{M}5v18=_vuO6DBnN#k=!!Poikd>+)R>!XG!o)t!nO}xb
z?)FY2-XWfUW0p78frDbN8Zy2b7PO$Ux{A<wxhF$9gx-2atjVr}2g099C9v%6ap_sf
z8Z>z^S%4^Z(1u5 at +Y=?xggc7`%avvjS<({docA~=ejyMX?xTTp8ZCea&7lK!xYWX2
z)-DhQq9Ki?13i)be>m;ar_YX at L!1{4;ECVd1VP{a%A4Y13S(hPvHqd6tbhD|_6V`1
zZ7;kc|6S25Tv&MiLsJBDIqm*?sybH2q$ZSA<U4#6cvF`yR^<KmPNPy9fDq;N^KqV(
zE@>p;RVax3ikMjw)pZ4R>o|Pa`Jjwfby;KwZG=>`dI>M#^8s#$!e5-3loC6?Vg9b?
zUcmRF8v9}a-!o_W&OIO|vhK<wq5foro(gJgdGZ<F`_M_G%}fcpVt7pa5BQ~vJV##x
zhpcu~^MPY|+h#CSnUAQha1(|5|DYQF;UnjO|A!FU`P_ at 3KGtpX)-6gyDxt#YYu&L;
zg(KCgPv5+0MK!PPn=)m*0)+ at 7fF7aN&60G08B at l}rk@=jLmybSs%P7cC-%MeCh8~u
z>)Shx#Cwujc-cvYm1q+XUd@>j`4#yU#U2WYR}`VpdC6jt9kf-^VvSZWstcXxw-oB-
zpIOq|Az?ohilXu%{|_nyKK=yFAJbiU5N3kifpg3&S}^BJ0xhUkpd4#%s2eaw>B3rO
z6rU$xo2&sm|DtjVyC91|yQh-45yE5s&>CmYJ}`0)@fQn5IR=~tw4h~MHoJH7jWQri
z!{yEpIQHcqgJSD#%cjkmYLQn|6=AA}y3}*}q%pH+P0lDSkeSZ)XKUau#jlP(9BP^&
za2sc`c4bR?db~O;Dykb6W2fo>L&lGtGg)2l?7Z}xf(#$cnKcn{L}VYnQ<iV|jG9LY
z at lkZ1^;fSsNu}|CW2|NS!1>D~>pXZc+?i2K&nNb`KmBa at BsEVJdlVU=Gnj?&(bcbP
z at h#k^o)`JT3M&*AWq_3A7G*mF^Ao=O2iQ1w?)=C(1oz|95?Fkk9;beHbMgAM?%lGt
z{yPTu;ko4q!WYqg at Q`G&sdHwijR+yY1f~?}Db+nXb{1+-IxWVhy|2Ep`P%h;ufHt~
zoFM=*eH&+zVxw$2&yQTHrrmqM{*mnr8DB~xs(-FU at H30er*mgdf>j801Lm<TnYy93
z(qSyuK>2~#@9if1gGv*}j!GgH=URL9`pUsUnosyEs4=`-^1s4o at Ok2m$7pQ><=6zk
zu5MjU)O-9be!tW1fGe!7zgJJi{!pEOQiL!6VKyFk;KIl`#O1fY at jehE2JaouKEG%k
zd-noL6TWWcEtakwuoBcjY(xFpSTlL{bc>v-u>PTkz~S_qa{oOFq|TWaMT at pUaQ+~I
zQz_f}mpSVZxQ#PuOq9+^u`{SQ!2DHRov~4q;ns$H1->}xhrt$5lug-~IdyDKRe5G%
zwr*M3Nfh#R4_*4YovikXL>}4;8wVvjmBw<dKn}WP<A!UGf-YOSk%JTU`(J-++mp|P
zPjVd#X)WpRrbqd%+KyJN{v2rR>wI=}c^=-Rr8{<V^)$3K=M?9np#!%IU;e{voIn5I
zh&nI=fx#%UKtL_%?Q-uDBvG26frb3B3n&nYdmKj}o!=r{+|$8WKK+NAddk3^mzpqj
z+Wr3f^Xtm2e=H&g-v3x}8MPfleQx7qs`lu&N$JYX&yc+m6E%53*UBN|Pn&oz?oGHp
z)DVz(irP=Q|6YB991~(WKTTV at ip5X<(?%e`rM59kRr&*R_U!kaKHYWVWcTsokt5q3
z=zeG)Z~<Y4^wIo<RfrJb9~jzFz3RGF22WGd!mqcOEDR51zHYukFfqTP$PB9(7&+z-
zvwh*h#SwM%o_!#o$GmcF{pHIQ%}e%t at EP^B>&RhtA2LiK(QVH>j}^q;-MVQV$F=ou
zlTb?7EZslu?%4EX$%cfRq(7--9EJ)i$v_l1JN1X4&uu)gS1F0hs+BMzmvi>?@jUjo
zjz4eiw0ZMpO`kCl9}Dhi+$@+JLc$+nCoLmE7O;%qys`q8uZ at qgB<D*`3OJDa1+L at o
z8ZxYB2fRVe4&GhS0iTlUSTdM7G at rW8_LQ`^q?CE~N0MJYBd5^D8&7%AxQ4bq at pQnx
zd-BAPF at KnEAAInk5p}4lOf-SO?SJ##?9zhW?|%kb!0yBC)3jl&^|1NzC!6;Tww`)m
z*_ytryfk<)nIOl%{DWB<ci&wxX~~RDm}-R^u;vB|vyxR6h1S0 at Z|_XX-n9iN3 at 3og
zY_Dlsj`phK#Hk_QqC#s-^wfEAQBiZIYbfE3mVrZt at J~vP#r%LWNTxib6N5J`Ck+C>
zqNW6^XOl{zR~~6UaA56~M<U1M_JkGW^QR-h2>GbAvH%x~;BV!MWmPTBY3T`AxhRu)
z_=0q<EJO}qPvKC-?S}ai&q?HfKj`+wOAn5ugSQ_O?1|sq-0{rw at yW3}-~Mp^(uKGl
z`p-Rp6`^(a&h=NXFWJ4f?c76%pfht)<t~x)hd%m(tN-46e<8h`w1 at u}))(1SS#sC&
zFBa95%M%Zhb8qWRlHp)E0$7RhvvK|xlod>!GM0qD^;_<{=V!87)UQEIbkF$vP=;EW
z%^TMyC(pHol`gD7%Rn=sz%!yP at 1Da4H#~erMUVDFhx#vEj2sYAr&zE=MJFwOF)s~i
z@)%=qzn3)B3ZJPC88|!@nlH<P4zj0^{HzJG0#r|K`{u`PM2`7GZeM)p@`yTw08lFn
z1j}#b0^R)58)XeOfS_swb6m>^UVHiBy3JdEHg&rHzL}|SUm?zm at oe`CFaO*B?SGjb
zKTntmuM|sA8kF at fKwMN?LH-LI-1eEwD#=$E7lt7 at X>MkAN>NS4^vU-XEm<_=i)Kt6
zmz148W5&d((<dRMvOQ7D6B44?Db+2 at x=x*$mz&M)v-O!5ctqjQ=<4FUN=&MZHe at KY
z3}vEz=g-ss8#`K<(nX5bV?MlaA*(o#eNkLrBR$jj=(Sl%3W5h2G)0-Pa0^%Ui6eVV
zhK%_`e*4g+hey=GUy+%cif~m3jK;F&@n?85aI{+gZ8AQ#ZN+we;M3oZOGrY1V`h-j
zBM6cmsWjog{kQ*S?2Ku}wUvpf at s<QY*Xqkxz`$_*t-ExI{J-rp$+D*W+XC>4;QYy?
zx-Y8Fsw}<ri+=vozn?gLQWE7yb<u)!=w;CT#p~BiON^g7Z30IwEhP=#cu98O at uOg_
z>mGfg>*VPn<1l+wyO0q-ZR&WQ|DDgiU at PG+AlR`!N|~ubpWfd`y|?(~l(D3k-X03{
zp=u~ou_Ox*8S at AJ_R{4mBkgECej0*BYSQkPU+a9};@|$=-!yI7*#E!<CDEI=ZRtDv
zz`plCjVdYQDl{{!10WW`pp93q{N3OEdmg{y1yxFLah at pdx$5%O?N2_9iiiF~{@?bQ
zl#^vl0A}>~mZD-4Ng2rn3+sn`QHBaa^UG2)lO(W1H1Wox{p>t-CMrHArM&bf|L|XE
zK3g7t0!0HuRm#u6#Y-K>Pt2TtKdlK179YOMxXhA#+3|{yZhG_vcpI%Is902*OIF|n
zC|Xd}xNdFZ)@^KFunMe<@ccj&{H_!p)d7?-BKe2>upj>0%MV{2X~)2&D`4t94?L(q
z_JU1Y6**e8W&rdBU#0cmd- at D$P<&0Dbz)|$|E7T+&w?nxkAC!@0|j6~733I+7s&sI
zAKCWg)8$JSA<4wDdnaZxudZ5ERE9uyUaAEw^u~cBC()rsOj=&1JoL=G^yHLzrL`4o
z69iVP&OI<~#-!M!Sl-$hb7vF&lyjOt;V<U3>5=PF#?mS)X3d at w6*W~rFl&CfU;eds
zG#mDhDXrR3<;s=hxlK^&*8G)iO*?n#!-FK7hVWM%LncdMO}S)w at CHu=XX%}|{X0G8
z!&e>|X@}ZC3eFz+@{fC8e|y>SGj5+>z5CQ at W%97)cOE;w at u}x#6%<+FKB{eL!jZV;
z*_XE6c=9Jd`+ssu@`~%LIoo}z$m6PqAE8TBG%tl8IQhq$cVZ?fKgbDzu_;0U>soP+
z=oK<Udw~KO0k>!BJgA1aq!^zDi?cL${P=sb=2uLgHeurAaonMNx$z0ng(?lzmO+55
zICM1pJMWL0MX+<{#>da8tgrHzXO<N!%N1m7<)+A0T- at 8S@saDH{y{*YFtb>>x}r=h
zsbxzRN)}cZfaC|94v+cIt8wMZwUKrp1*Neo4Zs)b-jgdT%9b>$c-Z&grDZ#IaEYLt
z{qe*}_$qx`vwSH4 at TRAp-~8xfKl#~@6;&y!t3r5-L5>S(;PO?);3`%$uetCb!v8xl
zlPDYw8yh<_DK##rh>;Pm3NSO4S6|&3MJNjE=GU%U4}MVE7^JbxOqi$t#3|!{KIWdR
z{7j3MqGFE-B=+%ReE##2Vw2JmFn76D#Yy!$)G`Px*_u*;U;#4NP8PRaL)jw~)1jLx
z^3WA#*kWuG4J%i)9XZPK1(}vItk}Vwxbg31%&S+gkF*1*I5{m|U0@|RnZONu4%`=)
z*tC5|&-sUz?cKL**Y55I9?a|NuU@=h*Nd-IH!rr-H{5s{S>@mV!{6sumlxDjq8}mp
z0*1iLkBB2v50E4u|J}_yG?T1=r1V6C2VCp(X2mDPB%~!KWF#kMr6%QOCKu)vmaFh3
zzLljs)A(_B>nRqTg_Ga;(%h`#TuI6TxKK}-Wkq>a<wXms17 at xEmW8VamQd*f*JzN>
zl2Kkl+2d;kij%qm!{#g05$5M4`Acg&MOnmx at l8%pS$IjkxZxeT>+fdRM;>`}1Rm?3
zcy{@w^~=_+g7z6R{@&0GH0?X^fBe_~`XB%Azl+Mt%WG{fBM+}!t!io{?$$i=7(M at Q
z{_by7+RB|@#$|*-u6f<+{>zWR{o{g`>v#04n|Ej?86C)Gk<J-EAz at BpVzlQsEhjaj
zC?~xr7uWzjyQ*7AT~bSnbIXfzigH9QnCgK27HVxrn~)!bf9U7Um@|FsxL?)u_SSTF
zRd;n1H7}F5Mb95Q{vNI#Y>-ByCN1jiNGd6cikSr>F31am<oOZ}F-UFmVu*3oLvTCX
zp<DjWhP`&}u at QJk1V+}qc>B&RH=bH?_F`xTqLbsXghVIKs~lLp{P-D0LFfK`qGJ|A
z|D`Ki9>4Lg{`J4gtEtRHds(fJb2b-H at 1?6s0xj6MNjV7y#hshUO!ZUB3yfd1XrV`d
zZ$BX^CN3$qaDE9MS_Uc2Urjoi3{WUjmrp*>d}_<lmeOS8__I(Ve_np=d|s^CQB#>h
zazcZVOL8zE8Lhmo90TOW>yH=IRY5=%l;oB#tO<1fHT|Uv>(B^GX2B8`Iodzt_VvfF
zjl5%FcY8)rE<gXy7hVqEer|1b*}Ba|%bJ?@A9S*+dGX4<yAhrFk9VFqCt&&?{?EV7
zuBt$LTU1w>R#G68)_w6|^8erb at BeG(p at WA$`)zor+un$Yn-fs(=cgMvx4v#}>?}H%
z=s+O`=88gv6wxnZDNGNJgdiGQS;*|=lNmR80%sQ-a#?H3t-p$b<mrG2os$sLvUOvA
zX?~&9-R)aDj~rn#FsSJ~OE;`H8ZOYp<XGTO*jGr=TZj5*dgl70H%8{M_KD|E{DrEN
znt`~~1l-PZ<D(aE-_d^Zj5AoomHRAPSWDFzeEWTi<bV3t|0=b#C at v!f3?QqrY(Z<&
z%5xV7&Yb at 7T|bjKHTcmNcXTGvJ|p~e*n0Advq@&#kOtu&7at`K1?mR;&zX~f>`?8w
zr45rOj|&K1wrxqt%Sz2j&#SJ8{DqWxnoj^)Xl<4buQ&zYKED={!|Z|#5jSF=w?|Pw
zXg4Yl_x_?){gERKgZ873Juxzm4Uay7 at t~oz6%B|P$f}-Sw_|VViscr6-{oteIa%1%
zrW#{?e;*h;&$$TK|NQU%-Sn8K(#8cjwN>Ii%Z{F+D%^YjxaO^!_rCwh9i7SIhT75v
z^8?+6^9R(EW}?jW{NnWdOni*E&;=%d(<(bw0_Sku`!Tivi+0y5Z=|HfXBK4f6iL<3
zDlg7mP~#(hOIf-psc{NYV}KOT#nR7{=__n24ShZG;<0zu^mJ4EF~SWz_|P4_!S7}8
z#~y!jWFB0gEvL`p#T|VAlmGEw{>!+Ml8oy4O?&tETzoh at ArfP)tH#x<$VOVhf%iX}
zl$7*8{EL54+*qGiU#AXT)#e at aA85M8YgTQ4{oU||cc_t?79V6KFRm|dlw?w!URCLf
zX3m~EbI$bmg1pd|me!P2EU3^X%<)-CMHk+Mogl+gGZNu8Q!<m;1r-hIus28|W*TF_
zKntLPu=F2>bIF1#Y!XVBCT1p6uH;4bp1W{|?&y0T_VF7}jo4$u6VLXZIxXUP^vge%
z^$slEccAP1L;Y7C4Nr*lki at ijPC^AxaNz8I<@I@$RrgGtLVgx3Zd|r;z2uj!LkEt2
z at dv)d)lWPZzVOa97`8K`rd9X#slk_;ml67+c?r=B1b!Rk7fE#|c`VU2gL8*E<W>}U
z1QL^DV&kIh4s2dVO;K&72SJWNF{Dsm7h^#;wE#-%DmxDyQqEO<s5^HfKai1cJn{5M
zK3dLRT>spwd*A(V=i9&Tzxvp~wHsSreJ4C2g1;UO$SxcajXf(jU4P6+ at kNEXEo~a8
zLiWD#ZpYyMLmz+1FB-n;PB#Mmgyz3!q1rUbxf#B$Vo3w%CoZ7MhU&EHYI;$qM(U7X
zGCMY^xV)gEzDkygC^lvWyg)1n at ScHl4=|q>bhg7bS2Wf^gAciOxW0Yj$!A9Rv0~S*
z=51RyKl`H8;H|H{8#x=*-Cb)gK2+P?NdcxTZF~ATpB67~Za#8CW95NC4se$5{`WtL
zyy`n>BgG=9VSyy$;J+=at&oIO*V-gE6aJ0Cn_f{i<YypiP}SYOfa;(9LjHp;<QL~4
zzF4?vv$TQ*J)J`?83}KneCpZJ!wgidU4QF5<jpVbI51ezvYeT`Xx~Ap!GHgw|2)6D
ztL at Bro!bZZtLy+Fu;Z0CZ at u<AIKx+;$Ny7Ns4Bha7>iiGFjBjO)Ofzil#E2Vy2%-d
zGv>^I<fQZ17towmu4rD^+17XJR9)M0S#RIL at BATu#Zyl|H+uYq8CcZclT}l-pnXNo
z@>cY%Kl{}$YFDog_2={96=~?}-txk$e_ at 0>{n4Ves~4>vXxq0BH$`S~USVBT>EZ_9
zw6ewpCEz;c1q at -Tk@YXD1yGZ~N0vf)yVF1HpU3#mJpa__@#klNN}Su-`!|34?>9dB
zI9&0OuWr_F+!UIzxU?j7*kk9{tbg|9AHp0K)>HtqWn?EyTh1v6f(0s~+8ua=f;C^5
z$={3nw{8FaAHuKwf&7N2pM7EU_{%fUbLL#q{3 at i-5+qfVY}hIl?1wvPjjIP>HlRis
z at 2abVYM0knwQS$|L;lU*<8OQBxfe%|zd8fU4xhkyGbtfq>+`R)p1b&0`;T_`=Q0D&
zKKIh- at lTuql`sB at Jx9C!bD4qXo_~4t7 at dI;I|I+Z at XF{hIs+qi23~ma)zM>g21e`*
zy!g^<qsQnBjMy1?>E+i)kI at +zu`}@UD{qV*qcbpaXW-R0UmiV1XJDkxz$>r4HF}KB
zz=)lJS6_d7^cbCi5jz8~z46ZIF**Yyb_QO5^WD*7bOuK347~Byd!xtb42;+rc=PS|
zM~~4N7_l?();k}J9-}ibVrSs(cYZy3jLyJ_oq>1W{c!Xcoq>@%1MhwG&gd~Z10!_?
z-hKb$(PMN5M(hl{_rWKl$LI`<*co{L*Po6aqcbpKXW)YmKN~$pXJEw6z^_00eDoNd
zfe||cAAbDB=rKA2BX$Np`sB;eV{`^a><oPT=~tu2=nRb98TjlsACDfRGcZzT;FHgP
zJ9>=Hz=)lJPrvxx=rKA2BX$Np`||gr$LI`<*ctfzt3Qk$qcbpKXW)yk{y2J!&cKMB
Gf&Uk?dImuN

diff --git a/kernels/compiler_load_bool_imm.cl b/kernels/compiler_load_bool_imm.cl
deleted file mode 100644
index fda49b9..0000000
--- a/kernels/compiler_load_bool_imm.cl
+++ /dev/null
@@ -1,12 +0,0 @@
-__kernel void
-compiler_load_bool_imm(__global int *dst, __local int *localBuffer, int copiesPerWorkItem )
-{
-  int i;
-  for(i=0; i<copiesPerWorkItem; i++)
-    localBuffer[get_local_id(0)*copiesPerWorkItem+i] = copiesPerWorkItem;
-  barrier(CLK_LOCAL_MEM_FENCE);
-
-  for(i=0; i<copiesPerWorkItem; i++)
-    dst[get_global_id(0)*copiesPerWorkItem + i] = localBuffer[get_local_id(0)*copiesPerWorkItem+i];
-  barrier(CLK_LOCAL_MEM_FENCE);
-}
diff --git a/kernels/compiler_local_memory_barrier.cl b/kernels/compiler_local_memory_barrier.cl
deleted file mode 100644
index 39a94b8..0000000
--- a/kernels/compiler_local_memory_barrier.cl
+++ /dev/null
@@ -1,6 +0,0 @@
-__kernel void compiler_local_memory_barrier(__global int *dst, __local int *src) {
-  src[get_local_id(0)] = get_local_id(0);
-  barrier(CLK_LOCAL_MEM_FENCE);
-  dst[get_global_id(0)] = src[15 - get_local_id(0)];
-}
-
diff --git a/kernels/compiler_local_memory_barrier_2.cl b/kernels/compiler_local_memory_barrier_2.cl
deleted file mode 100644
index dca4a9c..0000000
--- a/kernels/compiler_local_memory_barrier_2.cl
+++ /dev/null
@@ -1,7 +0,0 @@
-__kernel void compiler_local_memory_barrier_2(__global int *dst, __local int *src) {
-  src[get_local_id(0)] = get_local_id(0);
-  src[get_local_size(0) + get_local_id(0)] = get_local_id(0);
-  barrier(CLK_LOCAL_MEM_FENCE);
-  dst[get_local_size(0) * (2 * get_group_id(0)) + get_local_id(0)] = src[get_local_size(0) - (get_local_id(0) + 1)];
-  dst[get_local_size(0) * (2 * get_group_id(0) + 1) + get_local_id(0)] = src[get_local_size(0) + get_local_size(0) - (get_local_id(0) + 1)];
-}
diff --git a/kernels/compiler_local_memory_barrier_wg64.cl b/kernels/compiler_local_memory_barrier_wg64.cl
deleted file mode 100644
index b2ea906..0000000
--- a/kernels/compiler_local_memory_barrier_wg64.cl
+++ /dev/null
@@ -1,6 +0,0 @@
-__kernel void compiler_local_memory_barrier_wg64(__global int *dst, __local int *src) {
-  src[get_local_id(0)] = get_local_id(0);
-  barrier(CLK_LOCAL_MEM_FENCE);
-  dst[get_global_id(0)] = src[63 - get_local_id(0)];
-}
-
diff --git a/kernels/compiler_local_memory_two_ptr.cl b/kernels/compiler_local_memory_two_ptr.cl
deleted file mode 100644
index 46589ba..0000000
--- a/kernels/compiler_local_memory_two_ptr.cl
+++ /dev/null
@@ -1,10 +0,0 @@
-__kernel void compiler_local_memory_two_ptr(__global int *dst,
-                                            __local int *src0,
-                                            __local int *src1)
-{
-  src0[get_local_id(0)] = get_local_id(0);
-  src1[get_local_id(0)] = get_global_id(0);
-  barrier(CLK_LOCAL_MEM_FENCE);
-  dst[get_global_id(0)] = src0[15 - get_local_id(0)] + src1[15 - get_local_id(0)];
-}
-
diff --git a/kernels/compiler_local_slm.cl b/kernels/compiler_local_slm.cl
deleted file mode 100644
index 52c078c..0000000
--- a/kernels/compiler_local_slm.cl
+++ /dev/null
@@ -1,24 +0,0 @@
-struct Test{
-  char t0;
-  int t1;
-};
-
-constant int two= 2;
-
-__kernel void compiler_local_slm(__global int *dst) {
-  __local int hop[16];
-  __local char a;
-  __local struct Test c;
-
-  c.t1 = get_group_id(0);
-  a = two;// seems clang currently has a bug if I write 'a=2;' so currently workaroud it.
-  hop[get_local_id(0)] = get_local_id(0);
-  barrier(CLK_LOCAL_MEM_FENCE);
-  dst[get_global_id(0)] = hop[get_local_id(0)] + (int)a + hop[1] + c.t1;
-}
-
-__kernel void compiler_local_slm1(__global ulong *dst) {
-  __local int hop[16];
-  dst[1] = (ulong)&hop[1];
-  dst[0] = (ulong)&hop[0];
-}
diff --git a/kernels/compiler_long.cl b/kernels/compiler_long.cl
deleted file mode 100644
index e69c5bf..0000000
--- a/kernels/compiler_long.cl
+++ /dev/null
@@ -1,8 +0,0 @@
-kernel void compiler_long(global long *src1, global long *src2, global long *dst, long zero) {
-  int i = get_global_id(0);
-
-  if(i < 5)
-    dst[i] = src1[i] + src2[i] + src2[i]*zero;
-  if(i > 5)
-    dst[i] = src1[i] - src2[i] - zero;
-}
diff --git a/kernels/compiler_long_2.cl b/kernels/compiler_long_2.cl
deleted file mode 100644
index 92be93a..0000000
--- a/kernels/compiler_long_2.cl
+++ /dev/null
@@ -1,20 +0,0 @@
-kernel void compiler_long_2(global long *src1, global long *src2, global long *dst) {
-  int i = get_global_id(0);
-  switch(i) {
-    case 0:
-      dst[i] = 0xFEDCBA9876543210UL;
-      break;
-    case 1:
-      dst[i] = src1[i] & src2[i];
-      break;
-    case 2:
-      dst[i] = src1[i] | src2[i];
-      break;
-    case 3:
-      dst[i] = src1[i] ^ src2[i];
-      break;
-    case 4:
-      dst[i] = src1[i] ? 0x1122334455667788L : 0x8877665544332211UL;
-      break;
-  }
-}
diff --git a/kernels/compiler_long_asr.cl b/kernels/compiler_long_asr.cl
deleted file mode 100644
index 901630b..0000000
--- a/kernels/compiler_long_asr.cl
+++ /dev/null
@@ -1,7 +0,0 @@
-kernel void compiler_long_asr(global long *src, global long *dst) {
-  int i = get_global_id(0);
-  if(i > 7)
-    dst[i] = src[i] >> i;
-  else
-    dst[i] = src[i] + 1;
-}
diff --git a/kernels/compiler_long_cmp.cl b/kernels/compiler_long_cmp.cl
deleted file mode 100644
index 90dfb60..0000000
--- a/kernels/compiler_long_cmp.cl
+++ /dev/null
@@ -1,29 +0,0 @@
-kernel void compiler_long_cmp_l(global long *src1, global long *src2, global long *dst) {
-  int i = get_global_id(0);
-  dst[i] = (src1[i] < src2[i]) ? 3 : 4;
-}
-
-kernel void compiler_long_cmp_le(global long *src1, global long *src2, global long *dst) {
-  int i = get_global_id(0);
-  dst[i] = (src1[i] <= src2[i]) ? 3 : 4;
-}
-
-kernel void compiler_long_cmp_g(global long *src1, global long *src2, global long *dst) {
-  int i = get_global_id(0);
-  dst[i] = (src1[i] > src2[i]) ? 3 : 4;
-}
-
-kernel void compiler_long_cmp_ge(global long *src1, global long *src2, global long *dst) {
-  int i = get_global_id(0);
-  dst[i] = (src1[i] >= src2[i]) ? 3 : 4;
-}
-
-kernel void compiler_long_cmp_eq(global long *src1, global long *src2, global long *dst) {
-  int i = get_global_id(0);
-  dst[i] = (src1[i] == src2[i]) ? 3 : 4;
-}
-
-kernel void compiler_long_cmp_neq(global long *src1, global long *src2, global long *dst) {
-  int i = get_global_id(0);
-  dst[i] = (src1[i] != src2[i]) ? 3 : 4;
-}
diff --git a/kernels/compiler_long_convert.cl b/kernels/compiler_long_convert.cl
deleted file mode 100644
index e5f7939..0000000
--- a/kernels/compiler_long_convert.cl
+++ /dev/null
@@ -1,19 +0,0 @@
-#pragma OPENCL EXTENSION cl_khr_fp64 : enable
-kernel void compiler_long_convert(global char *src1, global short *src2, global int *src3, global long *dst1, global long *dst2, global long *dst3) {
-  int i = get_global_id(0);
-  dst1[i] = src1[i];
-  dst2[i] = src2[i];
-  dst3[i] = src3[i];
-}
-
-kernel void compiler_long_convert_2(global char *dst1, global short *dst2, global int *dst3, global long *src) {
-  int i = get_global_id(0);
-  dst1[i] = src[i];
-  dst2[i] = src[i];
-  dst3[i] = src[i];
-}
-
-kernel void compiler_long_convert_to_float(global float *dst, global long *src) {
-  int i = get_global_id(0);
-  dst[i] = src[i];
-}
diff --git a/kernels/compiler_long_mult.cl b/kernels/compiler_long_mult.cl
deleted file mode 100644
index 5b96d74..0000000
--- a/kernels/compiler_long_mult.cl
+++ /dev/null
@@ -1,7 +0,0 @@
-kernel void compiler_long_mult(global long *src1, global long *src2, global long *dst) {
-  int i = get_global_id(0);
-  if(i < 3)
-    dst[i] = src1[i] + src2[i];
-  else
-    dst[i] = src1[i] * src2[i];
-}
diff --git a/kernels/compiler_long_shl.cl b/kernels/compiler_long_shl.cl
deleted file mode 100644
index 3786b77..0000000
--- a/kernels/compiler_long_shl.cl
+++ /dev/null
@@ -1,7 +0,0 @@
-kernel void compiler_long_shl(global long *src, global long *dst) {
-  int i = get_global_id(0);
-  if(i > 7)
-    dst[i] = src[i] << i;
-  else
-    dst[i] = src[i] + 1;
-}
diff --git a/kernels/compiler_long_shr.cl b/kernels/compiler_long_shr.cl
deleted file mode 100644
index d4e859c..0000000
--- a/kernels/compiler_long_shr.cl
+++ /dev/null
@@ -1,7 +0,0 @@
-kernel void compiler_long_shr(global ulong *src, global ulong *dst) {
-  int i = get_global_id(0);
-  if(i > 7)
-    dst[i] = src[i] >> i;
-  else
-    dst[i] = src[i] + 1;
-}
diff --git a/kernels/compiler_lower_return0.cl b/kernels/compiler_lower_return0.cl
deleted file mode 100644
index fd9846e..0000000
--- a/kernels/compiler_lower_return0.cl
+++ /dev/null
@@ -1,8 +0,0 @@
-__kernel void
-compiler_lower_return0(__global int *src, __global int *dst) {
-  const int id = get_global_id(0);
-  dst[id] = id;
-  if (src[id] > 0) return;
-  dst[id] = src[id];
-}
-
diff --git a/kernels/compiler_lower_return1.cl b/kernels/compiler_lower_return1.cl
deleted file mode 100644
index bcb6b7f..0000000
--- a/kernels/compiler_lower_return1.cl
+++ /dev/null
@@ -1,8 +0,0 @@
-__kernel void
-compiler_lower_return1(__global int *src, __global int *dst) {
-  const int id = get_global_id(0);
-  dst[id] = id;
-  if (id < 11 && (src[id] > 0 || src[id+16] < 2)) return;
-  dst[id] = src[id];
-}
-
diff --git a/kernels/compiler_lower_return2.cl b/kernels/compiler_lower_return2.cl
deleted file mode 100644
index 9fa8ad6..0000000
--- a/kernels/compiler_lower_return2.cl
+++ /dev/null
@@ -1,11 +0,0 @@
-__kernel void
-compiler_lower_return2(__global int *src, __global int *dst) {
-  const int id = get_global_id(0);
-  dst[id] = id;
-  while (dst[id] > src[id]) {
-    if (dst[id] > 10) return;
-    dst[id]--;
-  }
-  dst[id] += 2;
-}
-
diff --git a/kernels/compiler_mad24.cl b/kernels/compiler_mad24.cl
deleted file mode 100644
index 04bb2c5..0000000
--- a/kernels/compiler_mad24.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void compiler_mad24(global int *src1, global int *src2, global int *src3, global int *dst) {
-  int i = get_global_id(0);
-  dst[i] = mad24(src1[i], src2[i], src3[i]);
-}
diff --git a/kernels/compiler_mad_hi.cl b/kernels/compiler_mad_hi.cl
deleted file mode 100644
index 82b09c7..0000000
--- a/kernels/compiler_mad_hi.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void compiler_mad_hi(global int *src1, global int *src2, global int *src3, global int *dst) {
-  int i = get_global_id(0);
-  dst[i] = mad_hi(src1[i], src2[i], src3[i]);
-}
diff --git a/kernels/compiler_mandelbrot.cl b/kernels/compiler_mandelbrot.cl
deleted file mode 100644
index d15ccd0..0000000
--- a/kernels/compiler_mandelbrot.cl
+++ /dev/null
@@ -1,47 +0,0 @@
-// Used to ID into the 1D array, so that we can use
-// it effectively as a 2D array
-inline int ID(int x, int y, int width) { return 4*width*y + x*4; }
-inline float mapX(float x) { return x*3.25f - 2.f; }
-inline float mapY(float y) { return y*2.5f - 1.25f; }
-
-__kernel void compiler_mandelbrot(__global char *out) {
-  int x_dim = get_global_id(0);
-  int y_dim = get_global_id(1);
-  int width = get_global_size(0);
-  int height = get_global_size(1);
-  int idx = ID(x_dim, y_dim, width);
-
-  float x_origin = mapX((float) x_dim / (float) width);
-  float y_origin = mapY((float) y_dim / (float) height);
-
-  // The Escape time algorithm, it follows the pseduocode from Wikipedia
-  // _very_ closely
-  float x = 0.0f;
-  float y = 0.0f;
-
-  int iteration = 0;
-
-  // This can be changed, to be more or less precise
-  int max_iteration = 256;
-  while(x*x + y*y <= 4 && iteration < max_iteration) {
-    float xtemp = x*x - y*y + x_origin;
-    y = 2*x*y + y_origin;
-    x = xtemp;
-    iteration++;
-  }
-
-  if(iteration == max_iteration) {
-    // This coordinate did not escape, so it is in the Mandelbrot set
-    out[idx] = 0;
-    out[idx + 1] = 0;
-    out[idx + 2] = 0;
-    out[idx + 3] = 255;
-  } else {
-    // This coordinate did escape, so color based on quickly it escaped
-    out[idx] = iteration;
-    out[idx + 1] = iteration;
-    out[idx + 2] = iteration;
-    out[idx + 3] = 255;
-  }
-
-}
diff --git a/kernels/compiler_mandelbrot_alternate.cl b/kernels/compiler_mandelbrot_alternate.cl
deleted file mode 100644
index ab6fb07..0000000
--- a/kernels/compiler_mandelbrot_alternate.cl
+++ /dev/null
@@ -1,38 +0,0 @@
-inline int offset(int x, int y, int width) { return width*y + x; }
-inline float mapX(float x) {return x*3.25f - 2.f;}
-inline float mapY(float y) {return y*2.5f - 1.25f;}
-
-__kernel void compiler_mandelbrot_alternate(__global uint *out,
-                                            float rcpWidth,
-                                            float rcpHeight,
-                                            float criterium)
-{
-  int xDim = get_global_id(0);
-  int yDim = get_global_id(1);
-  int width = get_global_size(0);
-  int height = get_global_size(1);
-  int idx = offset(xDim, yDim, width);
-
-  float xOrigin = mapX((float) xDim * rcpWidth);
-  float yOrigin = mapY((float) yDim * rcpHeight);
-  float x = 0.0f;
-  float y = 0.0f;
-
-  float iteration = 256.f;
-
-  bool breakCond = true;
-  while (breakCond) {
-    const float xtemp = mad(-y,y,mad(x,x,xOrigin));
-    y = mad(2.f*x, y, yOrigin);
-    x = xtemp;
-    iteration -= 1.f;
-    breakCond = -mad(y,y,mad(x,x, -criterium)) * iteration > 0.f;
-  }
-
-  const uint iIteration = 256 - (uint) iteration;
-  const uint isBlack = (iIteration == 256);
-  const uint black = 255 << 24;
-  const uint nonBlack = iIteration | (iIteration << 8) | (iIteration << 16) | (255 << 24);
-  out[idx] = select(nonBlack, black, isBlack);
-}
-
diff --git a/kernels/compiler_mandelbrot_alternate_ref.bmp b/kernels/compiler_mandelbrot_alternate_ref.bmp
deleted file mode 100644
index 011d5836c1fded74ae487d074331e51e1bd5107a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 196662
zcmeI*$?r8sb at 1`z&6_tN2}#IE=E*T0;*fx2lfe#ynF2W2%%d=~2?2y4vV;lX1QuC9
z0I>kXf<TZEQUHMvuwVrnSg~Va36uqY0jzmH&vX17%GKR<`*!!ex9|PklAeA}S65e8
zpZcCtr>eW}@A1#L=_h{bCoZL%{JZ9o at RRZHCx7DMm-eJM9&&7da$o8HtRVf=MM^8s
z_YpK<KlmS95f=&k2i at zzHNWx(oIL*zqTvGXtenF`HE$36ALQ09FzKyZKS*D!`J$)C
zf2;e?$1ZDN%|PzCZM)`wpSN?Sdn*m>vujp+t&`z at tFAv6P7SP<%>6WMr~L2d7P2c(
zUiiOP(&BfzpPpLbRd&b!9&UDV3|3O%70kE$e`e$N&|fRO#F6qpv#(cp`gW{uDn0oI
zSBU6No3tbTciQI3ox8#lH-X%9{HK5Vr+ab-vL at W}PWx_cl^+-X6MA#CrwjnwpN;vU
z)PKT*b0;WaZJ_R`J-gt4M@^m3iR(P&!EA2W3+(^jm9$SQ*ik>Os at kLAf1MalXw?SR
zJBNezpZS at e`PrZS*((-s>Hl6U=$ze?F`><?!gcY+EYAPpEu7G0D?Fu##b#C#j`oK<
z<RQQLo4?5f7=mPXjtRKzw)$DTPuEl7%K6{6r&d_LiFyCQgr5L)%>Ufa{oJqo%C8`w
z6+G-=50f*~1kP3vHn=SR3)=MxNuJQ8e!iQz75u?}n7}Xo;xGRE&;L9t2>#C|FrT+|
z@;`yJwVl#rymfGhf7pZn7k=Rvg8#D#%!gkM3-Z56dsMPEk|(sM#dq^q34a7XoV<i~
zkq`0>0k$z0h(ochPPE&+&VvqadxJ}L^cw0}8~@w(#oEe02&^r4x(p}b!M|C+ul?Gu
z_41!3%SyJo{<fN21HJRxuoVCETcU<-yI^hQx8kiTTymRoQXTw1^q~*^rC<6bQ4mAu
z4gpy>Pp>Yqad%sNF4F0Ttz;$qZ>#wgmfuKMyFfx)3W;?3|6l#pU$y=tRkMIBnL^al
zzG(O8wu(J0z4NcW2>&yiv8~QmSiTF=Ryif}rJOJ)|G)gpzwC!Q{@@S(Acp{ls+2>+
z*#tI{d2s$$2=i7=+KTg`!X@*iT=EZci$8z*r+ at m}zx~@Dhh-ELw5JK!4byP$H2yVm
zD-9^T5wq16n9u*5TiaI8Yb!s*^H%vK at THva69R9OU)Y-kSOxMpEI0>zBxMNVB69?S
z-Lna7g!6#>uMOsH+p`tqLxoG=E4j-*wlN=10e<5*euE&VN(!(JBgLNir at f7^t+2pM
z{wLqjwy>?O{1DIE=2y&@yA}W8<k60Bc>nt4M2?&=3bSLQLp~#m8lui^8>ajOoloZB
zP$wRQ{|Sm+)hQEL>OG~Ty(=gG5&R_ofJeJnNC-rb!XoUN8k-=?$@oVlS#xh2+L;s7
zekhWsU3dTdPf+QqPH6+P)zKugS7`H(b0a`_d$wR#*b`3&7)Y2*>Hl3~tF~p~3Cf>_
z;z7=u!~cW^Pf+HnPDv`}3%$%|W(7Z<OaC7ZAM<=Z=C8i`YJ#wb=Ldf{|A_z3CeWsI
zpZu?i<Oz+L&wSR9oDT^b`G-2^5BuN${ojuXZ_EYS{JUJXVZ1OwS59ezx00ii`Jd4K
zX=+ at _S>tILQ*sFV%n$w}jEQaff1FFfzX!ogfFanG34SThN+Zf at Lm1P-s?4-rm;lM1
zPuUy)(-gRpvnm*7?p8E*caz&BIpDX2_htMq at z3pB@DT--{Acjv+^na%#I*KL>x(_}
zyzS+t at xSd=rm1cvXHBDJ=&TCG-rXVRpZtSgv~Sug`1!rx`#pw`{y!`w4QD|UnA{!P
z(z4I;d*FYv-qvv95XO`9dx0-A$H33wV_xv{yTALpvF49|$>=bWe^;Dv3)6aJpFD4S
ztzGj!O=BxLYXTwdQ%cTz<#gBSz=P-T{O|^OkZ;)s`M2D1i}+s-i;$9k<)enIu=jH9
z*7hEq)-~H=xwrBY_#fZ4X}Vg;S-rhKC$pEpDzkF_i9N6- at C$gZy6P(AOMn0Oe}DV!
zw|gDV6hQJuL`;FxWJ(jLE|k05-qGaV8IR3AOP=}f?a*zh7*jrx8xqo22e&YescvrZ
zk8=+Hk&k at jZ~fM9{mGyFi3h&;fB3^6ZkrFkl7E7#vf82Rj%j>ZrdMNQGWQAg$ZPG6
z|1k<#XPL6Emy(Cr%lxDiu>mlLFQhTg%>^I)%L!M1#~pXXU-0~gfA|OHU at jbQ#KjQc
z+^A#>|JtzaZBFjEky!4n*tYzSY}jP|9Q?#>Nf=W;As-SFenRjMU?dCd#X0d{H{h4U
z|Nqe+{ZYUlTc5+kEFg`==~079(gcRC9{FQ#B+E?hrjh*Yt=KO3pRAmNpP2o-pwOny
z(JuVq at WG6BD?B;972!nuV-`^I at BIg6qF7oAW0CAi27<gqyD?kc_2kal8{1<pv=#qj
zDpY2&W)6GeR=q#6aGSR-{CqWT|L_n0P at E&4!TIm}&hNk;+qPtJ4vP@&m;C?5U;G9C
z&osgWFz<Ae0_B-fISbg>o{{&Z*qqK93DO>lEzbWOwH)x=@%=u&WE-~h$tgtSgI){!
zo at xP};3ZGnNU#^`{OCtNddy=UW92hU;JWLsd-bbdZ91%^?;?>e5hPWKg0|v6+C1_e
z=k(Ve*dB9<W%-|@kOQ7Ovb(n`HUa*O`~e(39QJ?qXMYB4<l9>LEZu%7zvLw^F$#!+
zVz96 at WJFL;`u~x$fNb`do1N2TW8mCFneqH at Y|I>O9Pr#R9ldRtq^K*Tw=V^7M&heu
z-Wt)nkVdp49QvET`I{={FX2y_jr`?b{w1qn2xNmr3;|JjUa{M%-kdRaJ*VR~619f{
z7o7hwUA%3XUX~&=39N)G`2Tq2liy|n9R6SZ)n5hPz)sGG1U7<s<P-RRV}VHogUb5j
zx{VfAhc at 2(9R8iV2g2KzSc?CddN|bS8~b<L0u?{GTLEA0CY+pqq#OdwXJP-cm%VHV
z_$vPy&v=HMSG?jC at i>h0XGdNBT|FDNQP`+~IepiLa}P&H^51UB91R at s+>JfEZGm2v
zO4Pe@!cVw@{{tZqdhsukdEDb3XTn>d-q?No;~#&`HP>+dMv#hsSIIW?wzfC3t%sRC
z*hXvDM=vb@?LM7ww3nQOtyd`F at A4mOKEfCwO@sFCAroQCq$a=k=lsL0@>*p}dfVKa
z*;dH$n!tSiXWsikPH*?-gri+%O3a4jWHN-(|3er5x7~J|VE&~qeQ6i+MvmYoo(1&s
z?^;!Rx{dG6X{cppC+^zGH|ih5f8%tAX5Rb$PjB?&ghRckRDkvF4#Cd~IBnkB11vB0
zSpTsE+MvCA$cdsRPY~En*Z+6<*Sy}l=w>$bGqWGtjP35|O#Wxy_5M$9^x%X;T|#<M
zuQDt0W4Cnvf_Bbd<l`BZ*W0>;w{yG>;Y7a_8jGJ<b9vpWNwM3#oo>#MmS%S4?g($!
zJcs|8x4i$;hx%?>ewU42sH)5o!juzH?pne>bPWNl;5pBE&doR9+y=gT^oAR5;QV9#
zCo3o96$w?t%H8g*l{rJ|n%SXkP<M26Bma%-&b;3}pFY%U6Y@(KQZD)Fl}q+2IT20%
zh3>&WPkzrm_jCzw<XAEl|HS+^)_=18(gb=N*_)a7m_o18W_D<UwA~$=%>T at r-Sg?a
z{WUE!87PIsrUHA+ZonDjhw}$5{&{cy-^1UxyyYzo+PjCm3*;=PtE9{SG!uv$EN{72
zdo#OrcbpH^d=dEX?WqZwW$%}Au+c?5!0zT}P86_B_$&UA{KO|d at xvefa2N7Mj;{mE
z9ZLRHo7bvZm6khRh<oo<;7tCVJ_PEH@~81X|2FqoLvK%Qn^^*1%CJeELkPeiCkW|+
zS8=F7nYimn;r~7VG6ckTjt$_;LlOLV_?7&tFfUPFJ)6Ce{3xkHr<0W*GJ*Nsx+Bhq
zs%`T>bk_Xa+*=LXa^5Xp(q73y4k`c!)TGNU>MUJihMf7OkW7Z~0QZ;w3-|@___va8
z3h?>Qf4+pgAzy#}^;+V@;6Fm3(ggBy(Xh4^<WVhGNti&~^=X*E1pfDi?)(dNVcs^U
z0>0c03=m?a1#ePd7RcEOLeLwTUGf$1l-4#Ts(BUxW>WCaldI<|U-?Rd`8 at RJfBxqN
zop|`=bd{)0(uQaT<_U6KI&w5DA#VtZIalS*QtV`gfD`6_Thy!aCF)%{;Sa}Xu|3|m
zffjcSJm!G0 at +F*bys<@*G9J__teC=fBjGla)4_~?Cg!c4<a|glUkIbSWQ|wqjM~x)
z2rlFWQTdvYhS`QcZqq4ROFo$)puvA{@H5{h at 27?e=B;+Sv{yON`?i<?1EdiJya+r*
z;JEepl{W at VfLFmE{A0<B{h$@$2c>AYbfYRYM1|_)b at A`1?jQg09}kg#>#euOH!^Wn
zSdB_p!QFS?ttDhFk<`OlU7BFK(FDRkwBNZJqn&cfA%Jo!_0I3&UiNm8d6N8B-7$W*
z;=Fe^;Sc`91W*JF=<??{^w#~~{oUVzP$ttrjsg;jLXd+!<X?B)b at 9eNJ|)q+U$uJi
zi(l;M=RWs2^?dAOA5*82W)n(!w)>s$e5bO4Yp=c5rQ=PBH^2GKPk;K;o#-v-SHAL<
zh<(H(9`P^#@-OTnOpHa`c;k)UDfL=~qtU8>JhwR(WR8|Q-5qIp@=pVyqDsT_`B%d(
zXz$j!75|Ie*RCt6`eNj6FY4XQF8s+q&Y^`{U#xKcWgH&hr4<n5C<9ua-%CEghN6V?
zAO7%%&?P+o`Op9Q*S`++M?LCM74Yp{&kL}9-+lL4J2h}Hhr8~&>v_+69{bWlSJBA7
z{_DSXb&d40XpBvXdL_hBX2Pyrx0ip4s`Na+m%FU)BIm^TuX<tRZkO|+oHqZ^LbYFA
z5M5&|Oh6{VHU<Lx5W<&&lfwtq4}S22zx~_4wHu7J at g9E^+xhtzgVF|x^GCi)T#FFD
z5fP9NZNabEY)8lx{O1smimFsSpMN#%0{E)VA^xjkb{Dy$omNtH!I<6bzA-`xKRJU0
z*g%?hHARIPjKwgx65DX^;J^3Yd&T*_VS&Ap5<z+K$wxl&k>L4R&wAGV_utQHbJybu
zA72vfU;gr!S*1ZC&eBxzjK)AZqM+d4uIAZF@*|OD-f+VWgftUMDD_q<e36dsLb!O&
z$?#t)e~esq+!(onzv5qX?WwD%n}Y>B*xvZYH^$GB2+j=$f^&zsP!!pM->x5R`1r>^
z9yG?Mi{p8oP*QtXWuE98v6!KhoTHsZFk#KhqYB8>W>fpL7x%~mlqOKA{U}UeB>#)t
z%kC<vG~eDGLwi-G3xCBwDo`C@<NwY(?+nbu;a~gO*U09Zrm+xGh7-0RV|0-7&2N6w
z(NBHqQ;Fr?1fd$jFSq)EKc4~qKwZAJu~|nMth=+-_*mv;8g7A&ocZ4!(&KAx(_S8}
zs2;!D<v)WTk+66m$pH*7pjBZksxgfXr;4kue)X$S;P%^ZuS)J`_vJ5td5l&jAYQQ!
z$OC at 2pq(bjZiFF7DKH9_tALX3y5gTcOKp$u!A8l&1D>kFUjJW}X*BQPhf0Mv<ngF?
zOLpNeoqzD3CJ=#*CC5iU`q351e$2$sAfc!_bdX(hlW%|f+l<jCHn}>AcKLwUBvX=j
zn at DKK;Ty2{e^$d-*n4*hT=B0v7Qv&UaoOFY=Dz`a9_sSERZcJb760WBU?meF7U8={
zzy9^FcZmP|<R?GbJ$k?#RCD;ey2Lzj{)RWaL3^J3<R?Gj2~UVA1L3BdZekY-xQjFY
zi<tJDN|Nv)VJpsi3lG7c{3Ac$5C1PtwxVcW*>(Pbw>jgppZ)9uqTYLH&kOv-5YKP$
zdeW1g^uG7KuPhepQJM{Y1vq~e!Cu^W=%-R$*&TEGw>)=QpI_Ft(f^mtSczO}xL2-v
zWb*D1|7GxB@{bKG<guh*B9t;0n)2ENUR at OAF+^{}7>F4G{$u^eb`1Y|XAx#fVwaVV
zj{jcZGjlTP-4lo4ubh9$KPn)^PYSBL6n+2u-|uFwB<FkI``#x$@d+(|(TiTxZPGj5
z at eV$pUAsY%kHOAe$K;nbD%E9Qgs=$zDp?l$tgXv`9wIE&_@(NpbX)FLy)bikBm8<F
z1Cj6`#S)MqKp^p|SH0>z?|Dxbq?PBGynN#u-{@`RQ=j_OaQ<ihmx6iQdP>?Wc_!`E
z=?(ZB&OiA#i?mu|7Vw2He4&@6HD{Xq_BPL&RV>~{<P#BKDymdq)irjv?daa}rCVN5
zJ_`TeRcYpwnqNfDKJ68v->*3SODq53`2&8d;`~4U4FOER3kKC6>gq*n{h6Qs^rx-p
zKIJJ-5#6~{x8LAjFJ$k8(983L%muN}sv7)HXyGnSsg#+!i_l(G(#w3AS at NIcC;WUP
z_{9larRn6izV)s3vpuGT1_ckYEncx}cYVVAr(F<s0rR$XChe6_al6QF$$77w at LzKJ
zmjiyQo%}rPBO%}NxExQEUi;eDjzQ}v$^`i)_3_wuTmJRkw*B5)zJzlrx$^&IwY_cF
zTV at 4(?k<9Qw~}7q%giqPm^WbrJfAP at k;vZXlv%!Jb`*pUHS$9r`Vj0rAajou{1lS<
zsq~qhmBLcklzc8C5AnZLgD2FJO6v-ho|oFqejE}4ep{{&27+Pmqg{k=%k9HM5*~Zo
z6H6w)Lqr`*zQ<nNz7^4UH0*wbc}Bf-{w4qPR`x}=<0fFxd&(lrmzAuI|E}sHr&RB<
z@(}ZxU&0Rn;SDMzZ#7#L#J|sSkuNs3{pd$OdMt!*Y$q#rv#i_D#_E&*G=Wsnng3pE
z-70g4eE9)<sqL;j!6>?wbaN8^aQ^s50 at S_X`P}C|SDfR4ub0H)i(L;-$NWmeM)1~C
z;F-^SX8Qk(f0F-l2q^X6+m&0v&?sDb at A-1C|8HD<7l(S)6`843WR}|Qf|@ybN<+xP
z4WT4I;MecLKc6o)u(pYI9~i#yg)c;`*PD$9>p^#smU!mN1oF$Z90E$^gbpihcl&fH
za^^E%)==`F`Aao*V?A9hl{u+W8U|kIyg_VrC{ItJDloKLc5cYXkCgu3?=T4deY&2Q
z<#&adb25TpFQU6SL%>EDMixj)7ZDD{f5~~TTtW*%;7K4P4{<v`ze|3Xe?HJ;5cx)d
zfBeUPJQ>J`Zp2rUm!~_wF4!{{h+YV9km?G}XO|JWeL52FF~t at kKPu_+Kc)eb%XHP!
zo0FOh#nLn6I3L^4|9sTT8nPdIg$G>!<>1HF at vkMZ+G7eZgv}}Czw2G^^5&|q^^F1<
z0;O6gZ4Cc9dNMZEiO0x)FX!FNBtL}YA9$$q7D}2xuv%igQSQaNoteE%&;}{^w<H1v
zG5^z^_Ow$%y>Tz5Jmo at AXv0>ggb9>=*X`Mh$$zgNhB8Y9l9OlZ4gA2*@gmS}o7<(1
zR{XoPq!~yM3|R2=TU8zpHLy92Ltp&j7cB&J`KJy1vx4ZX?7`kHuH5+K-J|gTy&7m_
zrs`6t_=ln)KrhgCV7U?UD5j6bpHkLY!cSI-sv-<yhQYty_s!I4K;FI!cZ&Z=lt2}s
z4SFyYqBs4Oeb?L3lY#G^xReQG{2vu|FEk;i_uku?skamoegfSFilJ(1PclnfD>=%5
zHi%6VkYAPT-OWp6J<;9Bk6(@w|M)^SeoL)Q&Iug-zz06?r7wMn{@uP?_ELmFP?EzV
z(J&ou<R1eQaOyo}o&2{UA3B=MmqM3+_=WQ!lrZ=5ob)QJoA at q$l$pJ!lvYrd3_0yc
zcU$x4 at g$!Fo&eh;Z^2uj;yvH*|MNfpbG#9xJ1Bt(P|gMCe~9gk`6ctET=7rCNalR#
zoFK`O64azOa|jA3A8XffN_jL-DTT5?%Ia}C at +D7udB3;4?QK2@@BN*JkvJV)vA4hd
z?VtVZXQSEX!trXv)mL8~J#u0B-$;0)KnZ*$SNz9N8{=;TpO@$_QnDIC904tp;kEQp
zc~(_e-&Hx~ZdRodYv6v^kPkdMdY5gmpEDH&asD2H^9htpWBZJM1VxL4KxO>j8)!8$
z8(@z)Q~_V^mhhAD2|_R<knc^H!==X|?_}m~5F7cP-RPh^B at cyAa^5RPF*QqU&{r*9
z2JmzG%i?sTwHXR;x#bqa>;B{agY!Rz at J5-E_O9IJADmF6XWHg%ph%8w2r?mB;%(QV
z at c&G}iBUewTw?mlDHZ%#CWI*IbOVqtp-cvkl-LEE?YE%$7W_Z<v5%#th<|bjXmowU
zqi%KRQ2xJhYa<VJfv<8({wY=pK7(h=FR0E}b79H7$4}EM5J(5Hb{!J`C~Uk&uM}kz
zAUG?^SHPFMS(OX9E>pS)3;r7|Mesu#p+LQ(kD}M2D;p$i1$m?Jg8WBSjceth#(j-E
zRH5FxJH&rL%aeyc=YL}T!S;2pdmYrn7JwZob}_HKRSQ<&y=9q>+S*lvvl=E4 at W*wX
zqAJ$pEWZb}k&u%tVC?ftLH at dv_d-LHCH(vJ|CpR_0uld@<bNdLjbgpDSD7XJ<jd~=
z0sqe}CyKab2pAKSOPB<wZN at nPxncpWQNu6LS_tK}WQOm`!b2ud^6xCcziXL;oFv<0
zZi)gW{>0ZYp|q0!?8*iM=}YGe3-Z6QF^xMKc_@|B7E1mD{)~Tu|1<&g^5K>s{JK8!
zdFB`nfSL*CipjTRXWgC^C?=Cp$dQzc!6H!4$S28<%PHo>4}S22zHRpl$zxDC$ucxX
zpP at 9m3izwwNB=gE*ht#=0{h{=aW7jPYGa>A+x+Jc09qJxL`>iXFL*)x at G=i?SH5IL
z2;@2o^EcmovtRQDWPGt6`C$~Ou1ugLKj3#QWxVbA{`bHCB&i;MQ=j?FXXu<ZXyzjD
zzZKz)!io1rA^A_|U;6)&f4zWYp5IS1=|RBz6xZmCdCAm_E$A!-V4q!Vmqp0OKYMYC
zN>s&UY|F7AWLtr*Lo7wyoAq2w!5{44Oz3Jd{~#If;oBwm;Qt#)k3Y1L`LaMS|6u~)
zkCaTpSU`UL<-ejBKzcX at Y^=(c19cVw^2AlnJ@?$h3M^m0<~6T*=R4o2Fndv6x5k_<
z$qym;SH at YMcxF`>Q^;q&(HGms{|oZZI%b+c&VPFiZ9L(Pk|o<4<staH{D<@JosG%_
zxr9%DiqV66i}t~)@3#EJu`u3pX#5(vzd&c0kSq<wK+uIB|4ideZ+esGzu*1tcP}RP
zdDj^+Mxb~C{I3Ll)-l9CB}-S_|3lEo6?6U~pMUzNf6A^Qy!XBDwLW8s-UFI4zbl&#
z%k)PW4H;^4mJis~%(4JqCOPJPQNu;}=CP}*GRN>L(FsRkt5bNV=(zN64S%>o|KH`m
z-Tv`MQz0XTP$PX-sf3@~0jFprf}HA)&G}pBWoM0%{fvVM%5d=3x4xB45lRyvGYXeG
z;V<0BXerBBZLs+1k84v4L(msG>v;JWK~?;Z$Gcr}B=cEp$oW%m@(+G)ht6RsTwwzK
za;`~P_Rh2=8ecN1;o8f8t5=`KDBu#2f`9V`(NtdOf(tRv(gnxv|98ZHQaxT6a{kGG
z1e_KBqWyAuI~hyASZf7IgztqG-I^vqkc<mFp1)x?x&9M7(Ui)|KQxp4mmS at 9jFrEg
zvpawOTk+p+`S_!yHpa-~;g7JBXD&k^eX$5&_uY4&-!L?HR{3S{FKw8E$6nGRmpFk+
z{^x)G$10HLfO^5uTm?V6dm|@vm at m&=C;wxBFUxF<d?MhtmFOIhk|)2WrRJ?X^MX*B
zJ6j#%@Z&1BVQA$;gat2mbX8d^(B at E1I)6P_cIe*tXA5&o!1`zD|2H;!Oo37lBjsM_
z&#^?JWIkV5PUitX=J9FK($sb1I?n{a?!W*3SYJYZBv+hJ&*`1wJ;Pl8)Gs=yJNeb=
z8#yU`_)K|K{Eq~_ESB(J;r&7XQ*wm;;t-zM!z^U_rCFYzTt4|)7B+(mi(_R{EHruf
zZP`m4X>C6KG79UI)8Id?Z==nQDNusFQ7*%t2SI;%hk7Fg|8&j-U~j?mU;p)At=`{x
z=bbx6h<zbH(!KZIyVGkOQRN0iePKk_OPqiB|EjMyqLS3j7iRkZY{14gZ!AzLp|P9f
z6DSbp=}*ECuCRaUe}{6-hw^!5Yo37lw}1P$onm8^TZm;8u=OWRcY3X3soYe{JcuJQ
zEC&D4l~rGFL?x-4FD%0U#s+UJP-&odx5PeV at KYnm#r6W5u!0i)<Uf{u at Q=n_d;X-+
zk6yZ5%=j|%f(t%>rVv(e=D#$Gk-(=3TpBnpr{F)rn+SDE{=@l)|Bt0e4p|iRU;p)A
zd*IL#pXUqGfB*M?@8NPsaS7|d;O7?3{3rhv{0aGxaE1K`KJ21N<0+L|-U$=PE%GBd
zbZIX7u!ngG`9J>SKlX--_oyX*4{L8%T=Rv at hK$rgP(Dg0X8%?IBp5@&{IDl$m>>TP
zHF9KrdGD!^hLG?RkS|dt$i+51e9Wza`Iu_S0lz~G<knknz3sN!tpDr{l6cDC^WnW+
zakUrn?jQJdhyK!QXZ{&T!ruVCJXFG8^3UOeTwrNS!;u6Yu$Lndn1eN$cfb4H`y at oT
zdtUqxh5zsW{;%;@7gYQw11W6uoaw#i3kUT7ala+r4Y?veb}zgCOa34Km<PELmXd>c
z0*510A~+-z at f2X6{9E}sKlx3Cn|bMiw)02D5%IsVsY3-8gg^Kf^T1w^!|ikRfH&1O
zBCvum3cFs>%)Z#0aFIWFFO{q#xPr?0^LXj at Qy5~V%%AW1vxdn-fcGEDCT07(Lbq7M
z)mMjlJ%0p0lo^Tt$3G1VHt^31B#*khkjVtdOaT90LN0q`KeG2i_j92&Uj_M`l5Ps;
zulur>+q9JAlycHLUs#0y?p+M!xbZ|fl`te^$x5KcE9_tTKPJ559FY4C3+LWy2EV0#
znm6+@?6M29(fvc>UHAQ8bZuAs&;R^Soua2slK%$k71%H?oj_7u6^q?GS_u{W5&UP&
zZ-!O<A!!Rfci(-t*OGVfw%bP1&Wk at c-gu+lDf_+b?k+r~pC6LvyZx+TrvLA at Uru?0
z70mR&4^&9!ZdDlS-Nf6gB$Ju1v6b_;<^Q?*Ud}mxubpqi^;}?a4fw)NXZ1RN-QDG9
zi1{)<>76gk;lJDXHvC|w2ihPc^Mo$s-5e)I0z7{bF^{d?nBj{5y<t*)(w at D^59cpA
zWae4ewFZ0*p^tQ2bZB&X=^ncXm7EXB^RdqwmgT>^waS?X=io<dm_RS&p{~?elz9OC
zD@&bFS4qIn7OeK%amO8|x`LcWynUhm<j}6c9$A0%b at XO>yb_XQ=ij~LEs(2w4Ca$_
z+7PIiobuQ)CI;9g<O%@W(JW934gntjwn|2_YkJGow7)So5gyrV=VJ3U;8BY{%D&UZ
z6&qm%2~P?`KEKRQ?>%3b<Nr(G1NFGa;5qJ{9FW_k5Ft9<^3?&kL-M8AwGE_Wm%T`F
zl#tAOl7e{wzpVs*%k2OD at Bco(*UmL8q5=L*XJr=$52wffBDy+Pa!MMo{>;URNG}5a
zXa9dn=q`9K7sUUI*_c2^ZlyVpV>iaW*ot9<H|O|&LDE)R)kTQ^ll&9{`*NF6UrZ1L
z^AXaQc9F8_fS|FQ6vv^+iOGV~#r(EP+8Sri>p!ctg6L}<ryrAq5|1P&g>s%dB+sAr
zW({-ZzuD$eDDN)hym3khhD&XPT?FTiZJIzZ5B^AY&+GrI<^QzT|Cwh=e##9K;Qx`F
z7EuXZd+AyP>{XHp|L5nwtL0zAPWbt63{Q!DCG=VWZY$@{1iB^VRHl);PS3F*Mw1v3
z1VZAX^ZP$*vxU=s|EFyNl||Ss!S2Pr%uMDhp)!F8gv_kZ?|-fh{%Fr>zyG<>1foD$
ztc1KRSLEkzX#&O+Ccych-~V4H|0n<ce at XZlImU%H`FS*%F9rOk2?YP*AD_B-7Hm3j
z{{CxihQK?W-uGV?k;c&8TV_EMz`rSg_$L;E7=lFMtRUW|AUJgX{`as(aeCkX&f%X?
z<m at 0_eOoB~KRJg0`~%)QMYaqfl7RsHmn`A@`wxfZ{_ at q&zyHt}1;&pBr3obeg8x_o
zMSjeMBPR?Y_!k<TfB)xzcHre(qp%*aWT)fwWBR&ugCX>CQfB6(tNFs at hhI+g{d+W^
zY}*96y8TqkkdP)2{M!n3;Ei(wL7CDP98yL)|Nh$nO+X0B1WxSt-)4qDVK0>l#O at IP
z@=FuoPk0rfPLN+c8VD1J0+ero^!)pu2Q-26?|=3V5WW0YnO$>W1)M+Nfi3vQe+hrc
zGQ$K60b(S>#QFE156J&X{{HjshJeZhy5j;9z<H3L;ZSJ>!9V{W{2P4FzyE(I{!jJy
z{}<ukxX?@cP-YGXF$yI7A*2c5UyArg<a7S}FNcCZu4 at R^7e-{=6hW+hth%^2LMSt1
z*15=b=KR;`*^IJ<)8tAIV|K#|dQE_aV`#v?*@4&5y&5D;I{*Ez1De2z{r#_H`DZm_
zn6JvD34}k1Z4L)afVasn^2`*xBVi%PMBx1QANOnsuRH0#|9Frnh%J<XP-y}&DB$0K
z8^dnQ0+ at hgA|M=M3xd)GF)+%U|Nd`7pT=KDqYHG6K8o%uecHz0Aw!P&!h-S7Qv6RC
z1$u{o90)QB%7vhq3tNu%jM$9e{P*7*#4dj5g#Z5gQYKJ(gOT!h6Ub2@`1djL{4Rd&
zYhU|_M?AtW?mqUhkLBFT_b$l7Eu+lqU;p~~7dnj^{16|XLo+!9l)c>c|MPu*)-cEU
zJGc7#?@?{L@#Bw{3K=7BjDlhmFa(tRTMPAdQbP6q_rE{o at xr4X^(cj}z4qGp>5qip
zC?nYwefjm{_HT2IzuXCw^c#IKBTN2uU-ohvlB9ROFrWW?1)^+ByZz&jrb0#vLqk9;
z1W~mVYoUP5;HSjtuDk9kcgM&k(br#p{Y^LB^wzh&m7gbIo{2?D{-5~7CyuG@<jcI^
z1uwYfnrn=P+yWDzrS24<O-M=FOnFEAYgPLeMjjoBeHI%U0%9#F__w8bvoNea<tb08
zek}LB?|rWsu{rDwH{8%h(O-~P;3Y4430I~zXL0`F`LD45V-qmZj at r&Yz=(N?TQCsY
z>W*XQpAq$%;Yi5a#ggqY!Vv#7Tn+)Dc~QE_FK#Q&W%?0aNxq2X?Qeg3{%Z6iANj}^
zz34?B{NM+z at bL2reEj1dw~i{AM5{2mHD=kd4I5w=Z+g?4%nrW$-S1YHyJ)+H-O$pd
zr;=B`1doo(E^Z^y3){5JMg0E|{|6ZbhD at O1AC`K-5P){kOF|fNX at o{HS%F7p<pf#I
zJ@?$h;fv>A^P1PZ^PTThSTv;`kgK+YKTW{3lyTPi4-n7*Z6H5}WBqcf{(mX{d4u!}
z8--r}%lL=p153TYV`EYj1a+%7I7d5BC0~m1>I_5yU+txV*kuCp4dPc_b(K at X?MLJj
zHDB^;SFR!_Y>k<C^*Zahn1ZE-n{U3EuILB<0so=+pXvOaZt^QN{Qv$<Ao(XyY@}ZP
z^#Y7RZbpW14jj*R<x9)~*bD*fy6jocdKO|8gMH)^MD;nE<NPx9^(JlYxzBy>w8f=U
zvXsw!<}-Aj{(l1h)8d at ov-ZP(T)G|6jXAo}^GAU;|3PQ?WNf3|Q{cxv?s2?2l7nr%
zlZhcH7O0!>vIWItG6C>QN(SLkbByV>r5Pxom=jGLy#0QW{~Rif(Pt=an*Z-5d0OUz
z{I`dIeVRbYe+~iZ|6v*M>jE9YwQ~Cs{vmBEGh_IOTjWC*`9=rP5%`^JD?rM^s!j4s
zA*~=x;4zPRjB9mg+^6K>+xJ3&k|DqnXecd)fatY!aSeYs4fWo$_RPOFH12EUp;S>r
zC{3V at e*%8c(!VX*!{OU{FALQHeE9P;6Z|XhZ-*HyEb at eP*xFTtvxeX=M}ep<Ovza<
zd)dp{oSf>>4}9PQpZLTl%!8i!%x8usOa66SbZY~KUXrI}F2(=GDL~o0#;uJ!)F3|&
z4e<{`ew!z^MK2nYdCokr514HwISO$83S010UXqzdokcDkepk-Iy4!V`l7|bYiud^Y
z;&WmQrJvFS_QwBw_|<TE`n!1wT=F0CNYsalwN0SppKJ)AVPry=+o$&Q;lX^6S&?kl
zQHAjz<3*g6ga_EMtNt=&nGm9+)0vM)34GvqPENI?$BV{6uK;;nik9?I^x6gCpA`(T
zJu<&x0$u)T7=)a;*xNRJc=BnrM}gSQtsH#>{yZfQg-|lzD at U>9U+`}V-~-rGrFyIT
z@&E<@Jd*AR{<BYq80b3E$vKPre-%z>%+Q^V$xn54h0+A*HheGl%by4QZIYAQ at c$M6
z73wj*RGGP(RjI`D-#5PTjUKUW#mVUv_6eAHQV3-6jeDVF>e6M|k3+pb0kEM{R>FTY
zZ|HtE=BLIgq2eEeoG?9uFuZYKnUrEUQsxkpQJ#Ym0y)cWdGyK|5Bk3>kaApIM at yWZ
zG3ae?d)u?0{p>ft`OT-t_Rt-9jpVbR{cIey3L5jTd=^ZJ`{aKS_*GKI|I_?`X`UNt
z?=4V~AG;O*Py{fTr7<KYx(XXREZG?~GL!Hi=sP=Q$&i_V8dSvuJV)UAqzm=OxUakJ
zI&Q?+XC=)FK=>j`Fep>bng29|UdY>-T@&c?k3*`aa7ZVg9ddu1QE^*3{~s3`mhuu=
zkLxl4{cZuum?Ay-$xjvr3^~kG$~Wcz(wDvz at uyoh0&)eC91ek6DDtTNe=LE{9|9&@
zLBj;-HXx*D+D?*(;eFspoK=n&8&4?<44Hs_X9c>RKQyvD=}AvICDe!R#hu3ZYpWw@
zRU(8_qPLCwCmZvH#p9pF`Hy>SyZ!2DWdb<_&@B{UAK+2D-4fK@$)yQsz~w%_6i{Ix
z_<zMKUU3l~2Ym61U*vg`e5!~<A?$)2os~UU^=$0U$3ALU3V!uu{J$gq^Ok!R(#=c-
zh7ekXHw|+&RE<4y@}D*`MwnnG75^?BP7ev<A74#A?P*UNa+oKUpYKZ106k>VDHKcp
zW#4ssR!+h&Q#eNc<Cc5X(#=dwCjYR<f5Jb8_VH!fc9A9!Js$jve*{0?2t6^#dvE7m
z?|PSSg<ko}S2Fp4KXnq0C{&%jM(FnGvGC8hW}4 at i(|h$(W~MUfHvB*QN^OtFdwj_u
zL&)yd1^_Ta-;tS#UxaTVU;XM=dxj`^_95hpUI>Mxy2kK7hKiA8cIyB4!++dq34B*B
zO at P`%+v8!*(^D9EZgy)5CI5yYZt&`>ueJ)r3esVo at YnI+cgw~*_n!Qxa#E|QXF|6(
zN3y-K*n;q at s*L}4Jp~xLwXUu*Csj(x6rQSX2zg3FXq=vhvVTJe6VUq@;Q0l^9)0 at Z
z2+smu_`(;m0&@YM&!;(@hH(A$*L%;?D<9 at NM!gJvO67#cDs5*ErZCj|+ve|q|9uVt
zdHboTt`NFSGJAze|6_K0>!~u!j%EVEKWFGYYQevdz#F8V2*3EnFZMjtukx~p(;z?Y
z0{oVJOm<@aHQD*=)9mP(!m08fYU#osIb(R9R;B{JyPGBu{Nwy`IQ;9p{ZpU%RAYfJ
zh{XmGA$;_sA3YiVec=)>Ih4zuF%E`KN?n!8?{?x$=JWJr;a6L4{BschpZD0+Ugnfa
zUQjOku~#llK>XufQ~nV7rU15Pg*>Fh3a-8OTKpsD*sb8{Pk*`?kEN&o?*>1muFCGn
z{z at S`cc!p6{ts&cw3Mo=gi_B7%4Jvf%3%UA1PB9S6)3)@M?McJv4xL(<Rdc0MaRy6
zwEsgN`jA&0;%%Rt{H8ZZMO7V9b(!6n*yrgNhyS?ct|lX=Qurdf*_%T`*95!?BSJ71
zM2a^7<oHJ3uj!tK3AhUbf#{AQR3?y$s`TIOwFG#MusHlGtm2<s0y?<=PepZ=xds!6
zfxsvb2^bP9Fcz=^F at rB<zV)qdorVc`^V3&vVFfV-4p%Ue|Ln?{!k+nGzX>pe%Ja<M
z%|7iFatMfNAQ+_51VlkhfVVUXm>pOnJpmK=^rt^<%Hv1IOmN(+dq49()0QWkJ~R+4
zZUw#MXJ*?3f`9Ov0)OEPUpPAWx%%EVd&$S3#;%QVZT`F6G at -A%r|iP{tFsaRtjGVS
zHoCgaocW%=tRZRd3c<f^3<0(|3J8Jl50Y2C>Q(P~&wF}7T63nE`!~Mvjoubo=@r+3
zpZ|BiVFIC?Qg7t!kr1-)W(s at bznlUbmkCgK)faPiyX0ri&=3F*5rQ>CQ^hVt-~ayi
zyO}G=`QG=w=U08S+>c{-oAi!%yu*r?XTfLwXIk+hr&k`PyE_N_^4tWz5~?8}{XggL
zaWGE02t`i(;`-3h!{(c?GhUCddz<0+zI^N%LqN>*4FRE+Qe)(*I~M8j9XWs1cH^JQ
z|F3We2$fcP?(SCoGGVvEzT7Q`faIThv?40<fApgt-Aj=r6kpBv9y(y=Ti)^(cnjO$
z?OV3 at z3+WxV>}46tJy{e1=zT;z+7Mq|BJw{k~9Ckn(Q*)&6$9Gc}mHADR+keficG@
zgyu+le;2~v&U483<DdNGCriK%E_=Kc4|%Ozd4y*Q{DwEYL92Y-{DdbwA)e(C3|>q?
z0e6wBKy*^7tI~gOuWg&TJNS><|A!hYg%9nPeYCAyVxMx!fBJv?^N?7wTG$-|uDa?f
z at JQBD4$iy=_!aAKfBV~}DxTJfd^mQ=C?Fr_3i!o%ul8xMRa`4t?1H6$U$N8X|5!qx
ztxSMvY)gKYPwZ2u_z&kV{^3Hw<L%Ija8ZO8q+<yYa$o)GSEIn~#b2(hPTA at 1%U}L-
zBx{e^%5$Fc97t<?1om!0zG&Z#Fb63GmTUY{KuK0l2^5lAB9#7TTR-1hey7fV$p0S~
z|MXU>eWP6V*GM_BFNHJ#Bn0`u;Qu+yJMX+R==Iq2YhU{s*<UCCkE6=)r6}S~<$Uv-
z-*og-pZe5JY45F^kz!kWBs??Wv|{<%#!ejy)3DWe{yzpdx4<YW{wvM*^1N;4O8D1|
zZCk$Q@|E&8?v5lsi<RVuT=Fk|5F~_0#lLy3pGoxPphv*o2=%5kmN?bG$u=nRrzidO
zy at 1nSG47>w!A$KbU(7R4$2qVQ{xAWyjO`ez;%JNu+AJK3VM0mwc;<i4khd?lk@;?c
z#CwcTnLx=uD&XPc7r=wZADu)R4=<Kx4)@-BuOH0Juc#Cbcj}9B?~4ZEg6;e7zyH4b
z?u+%71+kB+;QHk+f0^IT?=&?P|H*UAVr<c#*oQ^LxFFMSK0BHvDWud}sor)^jXb(*
z=ii8bx*^c|hX7hFyI{Orc4AvDO(6NV5{M8W at tJ}O<a78)Lq5P{5^RIC at TFLCh^55C
zf*<_g2NvG#qI5y>{fTOyXGVo+*9Pgv8*hx?taB}b)@pnr-75tDhOPJ`3+`7s0q1{u
z{O{TX+WaE~_K;%*0e=KMXqS)=q+rReGVn7%_=w)BX~2onAO7%%ep8F^{O3Ra>tFvm
zdQF_SG79VY<{gF-uAWU9Q0}_xuID}Pc}6JhaUqQ~y>)esWFx_RP~F|eQOyq9bQcMK
z>HjNlGt$F1itWMqZ_EEt3;~l(Ko7Q^e;n<a03P50X+)Ve;>1M2UkHlmIs*)4uw*Nt
z2!tRPBY_{K;FJspVyF0;_;a88oO(X?v5%=!Nizr~{qDqfzVn^R9857>S^?O5^Z<A#
zG9vL6+AYTVg9W+5$pj1m=Hm)GsxewsVP6hyaYz|A=#F~%UmSj&c;>(195x=RdSt8J
zjaHB*fD?FN1LOdM6S_<ik<7hY<Vm-$Os2~ga4BA50_FwSHVP;y0Sw8iQbSazPF|XU
zh&_C0T#=u<x88ayyHhOAQcqN(J$K)Ix0a|7x{`V<<G3`zR$~(W#J&`gf9Gn9M#@p(
z1e|}{|MyM-j%5g#GYW*Uw5=daAozz+EDT=e>wzC>1RlDAy6~~dKS2)u5zDtLrm)>e
zm+jzzjnji<V2}A_38n;lr>HRNjJmYVMJ0j at nW4zH+lD_3A<8K16s@%zw;w9%`j(B}
zX=8!?IRDe;f4&Lm*@hLQ34k+rLkPBmG}}NiG7~dG7=i*=vIUi`q+|$b2&#>N;45GG
zO1k=nz|WWS4)sKZYL?=<1eq=!IoeZt`yn}+t#W56lg|IB;h)C;5e)(RF at a!1Y(R(<
z9$r9>K=PIB2mK#3<`!3(@aaT$fq%~281ebff4+fzdB_YR!mwWW%gaT>68JFZYMVzj
zUGvmQh%zVO{5SG{>>*H$vt1uGA!leH07F6&LQsw_-ZB__5cdz>NgzY0OaT92HajQ@
zZ_Dw<j!`4{j|%fD<;Anv74zNQC>ijR6*vv}C-Z;NhJdh_h6!}704D)kV%8Os#^jR_
z#KsUHp0|ei;SYbf&3tv#lW3t=@*kDwwW?NiY2TPL1V1fp4D2 at +fYv?}58qBhjoEl3
zt12+T;SZhCYX!+n7xIlc0c4s$$v@|BImmi`MR<Fc)i|r<e<}FOd+*iH%uXMIZFl)?
z_#JIrdgjgU`SjlYnwD8&kaC*9kkBxM<TI>*3Gn~ofBXyn at 44rmHt^Na2!Uc+ttxe9
z{e*1BP&>Q%d5<ad>TPC+Hb~pup^f}EOkn2y?*H`OUYnemFr?5Wr<;@bl|u5F{PW(y
zzn7D5zWL^g at Qu4()Uhh168vZ7CH$`5ZCmE#9rX%B8k^anyMw$@^Bn$FJM)(JfBI10
zP0R1%kq9+}lKhmDQYHXeo?i^l`TIC!BkfgztFOM=i5^MdzjXe2ts(fkx6{oTQq;_@
zY#_SRLo at k5n?RQkISu&pP)Q>>`6qyu^Y?t#t3mNrLq&Ld*NK*%Jb*R?B>&~*vJENp
z-bFWa2!8n|%zq;UI!6BWRHGlK9qOWzXf=eA$<hQsEB-eG+;-b-7=GzXU)lz~I_j}<
zJOWn982-DB at 6Bmw=1Ad3?->8z=KpL00Y)z~4fq{u at E;*iL_uDAs|auJdZp9j-I)J&
z`7fK)+veWP2K)}4`JbtQgPh*((+Nj=$tij3%B2Zp2n1UEi{3r|63KX1)3-Bi=F6kr
z6!L9X`RY-5m25+AYkM=>s+ie#{O1AFNdJG5Lx7HJ_w0nDz5K{b>bgS0S at AD=!N0{!
zKh9I)-H_uWN^d?3f#MM`J7P_FiM;wyJG=QCl`x0 at 1Ck$?UW$LU&C$c5&fVC#6AE+@
z%ACZn5|Ym_f$;zM_me640T)APkROM<)frzC5G)@t0UrW%`Oo%j6gJ-e%#J(rKU0D8
zPv6+Z6ACoAs>qMslK+HX{9_tx{l~*xp9w&EBmXAL%*3og)I??ru>>0R=cOCXD-Vsi
z at j3cGIQ$wg-v4h5fsS+t(1T+-dfPH3NL at KmOd$}>#ZTPE^Dkd%AvwNnF&qq;fS-~u
z?S(y`FKY729RIHd at sB!7{=1Fo%^7pQ#}5DE{GUyr#HN?4%uMoAKq*#{&w*RLM=}BY
zwvku?m;R$4{m69qmRoKKTkr*C{LqS$9(!S4B1qx<ga5cnUcD`pchQi~`~$w5=BVX>
z=QcWe@}V|njwbws at Y2G50S|_S?qVLl&k!!%mTX~DM8puvfq>`d?PJX!^ODm&1&iNy
z*oy!0cRHu1y38CZXRG*UObFyg=4j at y=Z^3F at g=u40k{fUBp8ci&~AIlr(gaBHjqQT
znhSX0LFA*DQ<zVtOO{Z4vBJdKjTwJaN>1*nL!sV#-Cgj1Hh~JHHg(-mfC<Db7}CJT
za3IYD<lw*hvtoiGnZbY9j?<$CyM~o9!B5rZ_U>uG57ce>A2|e^O`zguya~iCAWQ)8
z;18tJ1PlQ}qdV at nBSIiA$azgjTqIK&g#&&yNC|)2`B$yoxO?WmcQmOoCu`~8CvF5_
zLV>MJAgmzB&n>(o{sDaaY6=rD7ZB>(njk0u{vbcLWBA|pUMBZWg~u9pcjy1z-DE|r
z;lypJ*jRoe{}~8 at HWG%zna391BLDn50)8pW&!;1wQAqrMIRE57DrpBl8=GAfnA|mM
zpuO9M3H*-_fzBpS!L!i>f>qlq7VzWuqSFM#`IbX at ds73epb`0BnjSy&p{4UL;U5Zq
zs^*Q^oyLC`yp`nan*Xy2R8WmHf#jc%{v6&syiow^VFgx)Sb<%cQu3dtr$KeETQzLV
z?uo$<&OPvdHh~hYE{ENmfHoQKH39Qtb6(+)CuM8_{AKWy=MM2-Hff|h4Sr{>#MSpU
zV;cWkg+OuL$=X}Pi6aRaS*#0um6OmW#?=rIqX6tVf02Lq|KvZ<%6h8$N4B#nHmxIi
zsasFx-uQRR(-gRpvnm*7?p8o{cZY_62!S#RG7%8}m;5WR3;w6|!g at F#YRP2&FWL|Q
zfSJsfr+0y`a?*7t%rOMOTT1 at HF9b3W#AAXus$`s%m6Vm2%@`@4D*TLMpZp*D5U@`Z
zNOXtz2fWA!{}zJ0|3HwFQ{W-~M*?3Jo525&zg=7Y9R4Q^0cR5^(JI|?SFTK;^#3>q
zzZX75J~0utYZS;wU?u-qb9w3U@(II_#{KhuHi2X>$?O%{{9F9t^BIC99AX7_Jq~6F
zav}tZ8nW`d?s(y};Xf4rXA?*Q6V9%X{1f=|^#4IS=P!|SI=}?tSpY$%Q%e5xisOZo
zhkri*(?THEl_scnRi}&xsZp|vedbjB<GDmV-gb)#Z at Fa=F&z&6qqar^h7L_ob#&`-
zZD+<mbND}-K(Lp<S3;M6F^||r%#U!<4%A~%h;57!Y{4ub<Db3pe_YsSYv=QSHi01*
zIzGQ5KX=mvuq_E}{HmuH-hA5_VSkbz1#IPnT{!m)e{wz~9Grg*n=sU_?UeDT_m)iH
zE1~2+z&5=#$@RfYK%Ur_!c6DCt!{_VI*R;7_ at 6lhoK1jHROH8Qmwz+d_!eHA6U=9s
zN{AYI&8?Anq2LGJO85_7v90pgR=&a2#zSNH7x~8ue>(q)`Pj{>HeR$Uu&q9i!o#;4
zxfK8Nhk&yQB)2If-Wk}N0`vSC;begn@?1iNcYF5&!VkH%@vlkScEk$Hw at GUpE$JmE
z)xkgVt^D-zU!AxW{M#z9?NN{G=z{z&H3XbZAYl&vBhH7tHJ^O8B{Pm@;ZkUrSas+k
z!;iFe at _!m80IdqPF}o$kCI4c6&YuY|gfsk0jWWyfzu*uMH at K~LT4DJy%vWV96F at uo
zJ at AUi$NEq3UlvQbs;aTOt*(|rZdLWHoPWC7wwu;jzQJMdq2$>R0DBL-V$O?vyE3yt
zDfCv=&D>T+t0H#U#w^bN;zPj6m;ma!D7JHgZOnr|VxicU%%|M0DvoYTzVgfRwzk at i
zg8xw3guYwnDPus*GJ$u(pR`v(mTw5#YGZAz?xH=r;C~lGz=@dv6dRy+4^_06yWPUw
zoNdWheiyK<u+HP+|AJdVfDQgG;X^rR^4mtYBmQ?c1e~4;1foL#Ps^WxeVo#!<@Amo
zDgUQx1#@g+GV>Rc{6J`T{O@`QNMAIw-;e0 at 919k2b1L(q2|ML~ZziDE7DwWORCv*V
zukQC`_&=M#wgy{~a4~mx&Hp}!fat+(F}Q%`FDB}}cYS*NpRJ%_(Y*{@<jg(rzyBei
h?9c`b7wS-{le3%}IC=i#PA?Sd<;`YCpM_ox{C}>cccuUU

diff --git a/kernels/compiler_mandelbrot_ref.bmp b/kernels/compiler_mandelbrot_ref.bmp
deleted file mode 100644
index 494bf8b74412e817f585ac28f6de58b7ab87246c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 196662
zcmeI*N$f30b@*}e&p-c!5Rwowka=>9hd4OFvB_YE!At>T9A*dz13_UhvjRdPfD^Ha
zgbauc77K=e5K<%%LISZxNO;QvBqYe5En<_!|MTAQJ1$pu*X`Tg_ujtucT0NxPFGh~
zSD*TxQ>UuC at 9(L1-28~2e#E78vwzoI5`HTF{nR5KcWF=h=|?>FQIEL%FZLDLSNcCI
zNI!j%(hBr_1Wniv{s&jYMFRg}_j+*6ue<>#&;P?{xWGFr=kQR?+XMdxxwQ*Sdh6B?
z(idyK=;`s_>i+Yw%NkfSkb7?1uKC~R?VRb}N(1}sn$=$GWcc5z>(7N#1FI!-KMmU{
z|NFUx?8=iD{_mBv_?_;jr&f5C-SNMNn_V1(l~i~I^X>kh+4w#5*9tFjr2Nn9>lL29
z9qXG)PrktwBD&Ki?TG)Kws~^ruJFW7Aom>qnV<QYp4@?~3Aen{zFS-6$Ho7I-dyb|
z1HkrYV}2<0pYZV92})QSs5@%UF8JS3QzvxdI!}2xn;Z55`~P<(?b8Z&)Q_vG_9*yY
zC&m+6wSo1{;h_CzfA(j8?&p5)iUnNyzt;*nXZK`GX!ELYUA!@i^S^itCv at 2gPw8Q?
znU#d2{gID+<Zt}OZ!iIdAlaQ`0xr9)eirZ3^;EcW{<rO^6_#&e-hVLRCqNzZKmYST
z|0}=pE68UBk9o{v<jgdIvlWC5F3bOdcD+K9Cp4*_?`CcVfAAkB at Qc6ri;sHLqgX-k
ze>Q>nyseY}38by<lqTb?gG2no9{j)X3%?NjpG{ys{AyT`|3%uPlC_aMp*=0Wo5xD{
zBlzLuCA5otkZ%aEjk!P^ifwhG-R5;3c5vGpT&knjP|w=<-?lH-R{mjNZMoBBI0+B_
z%>sV)SAVsa|14Qnveoss)#MuJo!^F~_ at CbrHEi1jYb(DMZ&l%v+mw^);Q!H&e)KQ>
z(l3dE7(#al$ijJgb%~9;+v;<XPCslVE8%}z&9AWhM!MPs653Koq|^UD_OXw({v%bh
zfGn9p)YHCb_vp5YJuJQRuf7QXGn=uk&R1Bz3({6OCG(}6Fem at N{L8=Wr#pWC_kTZ!
z0EeoSL&MnwHj;U8{#OX|R!!Q9^P$2e^QBz!4|0n?fAS}P@>{?4TONmH6cn_l3D^zO
zaPBnzHF7HrD7+D~)fSk~|D0RfR?llIKg9D^`6ckBobVF at Z<Alxn*~?}@;EFw2Ye)D
z2;w4h1cKeO32cP(fc&ow=55=v734#OOW-TH%Rja;A5Q^({nvk;Ag4+Sunr@|p82P}
zjj*k-z)b!p-_f?Pt*!hJ&)eo#%$K_r|Ka4(j&OMY+T}!!oG=QrW1~YpBa0fM&TSi}
z`~;m(=HXB$9)$l1ie1$y6Ikj!rKG(pC;t)rB>#X%yI4pFM3BNF?3x;zAj`@4M<rQv
zZyVZ~6V!evlBZpF|NKu->8eg?1GCl9B(qm&^N({QKzMt$U{}}^PX`!Cm`v&aU1F=Y
zW#I|RpN8T=&YHvjga%Jg=BiFfD&`Bl%x7i=Kb}kf9}XY$d_Lx{zWQo{u!rXde>ne$
z|Ia4SrgWeDuZrXejhWAU){vYJ2^;x`I_D4j-}}AaiwSSc1={?(T()7nFhN&NX at j?t
zqm%ic(Ee#^T*+DEX&F;;2>Z+r{v(WuZTf$lOToVf!AyW5*p&%>DbGqH%4$Ox)55CE
zv|gA1$(~Qy8~@W3xRSFf7-sHPG<J8B+ax*Qw}tm*{4ep(?OX5>1(p0~@Z;R9r at F+n
z_D}1JJ at dTn<)-n!?Nz3!ZY5_;qh;u<3dP>tA?Kg`gI~07+AH|^-QWFPhLHY0EF}$R
zK@*tV9oy2f&+>cVf3n`zaN-cglk<ClFEhu$&*5WU at bf#r^E<KTkAKPNFp_^)oNx=%
zdSstGZ+op>^FK{vD>-WdA?;I2&U at u_*Xh86=kWaS26>Qg*$4Tz-g>L}Uk;0ql7Ho+
zhODsna_!dk9-Y=T+hV!5@)P(U-?nMGTFF_xy+0?jm%u8sa{h at uuqE&dc&@tYD&$Ll
z_jiAH=bd+Y9nKU$@<v2VfzxD46R0kfyW8H;<lY&N%|1(>`S0z}ZK)VjK9L&|(pLw!
zFpjBiZt;(E4*v;Hc*1Y~=5PM-AOEojzW9IK;~r<555JOsf~vCGq3e!md|9SfV`DP+
z3HHcq?T-I33R!2FvagqthuF*fq!h6MFo!RsG0)8fAN<P+SAW-Ccg5fE{QJNEd*)y+
z9B;(M5a8UXWDNh>u<dP5?zoXy?ycCi{EuwdWc?ic#BE6!Q$8Ud5)ytw at DE@l3+%-?
z at nARLm&5=6;UE5Cz#m(m!^A8gjm7CvgG$l_hOQp at V{RnNOzx(U{OqmRF8H6UoP(d3
z{kx#hrq0nW{NeDyjCLzLIlUF(MEqkGQ1b8n2WFyJS_)&4>`DfLyhOV(Tix~K&e|K>
zV=lB6|6?jtX0m1ud*W8TKeBL}w=VpAHE#dl5B at -$Bc8$eZ~yjh!yenVWN{9Q5bc-z
z-+1GV{6EtO6TrOFO$wA}O64qIV|zy4mtu1|Ya~c}D7HBNbJTLcbI14l_>yhd(kG`7
zkq>$;?0c#Oc!HNaZ6m>6sPmJb{NzbbdXkmTFoEl?yYBU`f4%9jlD>;XzC at 5zB?{V#
z|7i2bdz{l>dtiIaC6?uXjzSK2?#S-ms at MehGx7&;_;A?&>7V{7u#s<T<+F7ArTofQ
zzS1Zl3W~wP(vT5BJ?Z~P&H}R8V{Ud%myLmQ4`s&lzp*iMv~j?5$8_|zWs;(<klwx&
zz!{0Jj(KZD??M{Uj&SI&|N5`1n7 at QSWj6BXfBxsJh9Qs*7BK`w<$1+!t9o<B-1VG}
z+ep+N3S4mh$8_<wWqMhP%p|Z9uHgUB$|t|g1UUS^{L8-#yn&sZ4+(4p^T;Rg|HcB7
z2nLn)$8{SmtPX9w_c{DKcMpWOFR>K=Gxcz&(>M0-wgoDFa<>A$+)X$+|42Cmn9sug
z)vtc_5b#z09e3Oz=e4hWZ9ER+{Mk{Le^<|jZ4@?YU{2q);oQT~k^Hw?GDiakJa=Qy
zZd;(2r4se7obVH_;QwF<gkJoMWS;Vrr<m|os5f?>`qZahbImoJzY(P3-&L{=y{+xd
zZ0liW54O?T_0bE<f4fg79PK41Ve1u2_`CeanvXC>NYkLbd&orCGO5Wg{yG0JtGrg(
zlHNA=X0{b_ye2T8|C#rGkki|}IpJuRnG&-hIhhQh^#9Ps|LwQmE|`DSt6tTGypbdL
ziDv=5{JU1wo^IoNa~f)y*@?S$@{Rh(@ZUJyp_%u-|I-`&IN?w)DivV8yF>7^0#2Lv
z_5jO^J=T9Lfi`IG9&)0n$rA*&)Aj#d{xz at nF1ncw{mksgHe<UxI+OpIcfJ498$CGT
zP?wNi)T_*j{Map>zo4D-7x{RG<@L5M;q4r+Lpaedg~sA%)?8k<YEtZWZ>O6xq@|f%
zxjVw!HP7LH<}L64^r60+mfvNg7pf|=gfQhql)IMj4_!k5D|q1xUwF$cx3q!p9=+j)
z8#w=1|H;Y;c|}6iuyVJ1Yh})mx at LB08`K>g-N=9Ax-;*0&!-Rd+JyWPhLlTwdgYS6
zN=`(Rf1!Ku&y&CBJ at 4rf-pH|JD*lQ2Z>;}h{iO-?HnKM}?=gj5rOoWn25GxHG at 1XI
zH at oN4d;4ozW-?F;iA at FenB9Og$PecaTKx0g{J)34?|Rp}8nky0c^Al8PFG2n|7j)=
zH(1_sul8nk>+U!os`(=D-`i6YGRxjC<zS<WdVt-{&zvY=oA6isBl+o1fBGjr at rf?v
zjT~PGm^+mGt2VDywJI%lyb$-^tH7E3JADY$9pz8sfBtRmvxeTD+BUNUzLa5;Jckf~
zK~50T1+U^zfiiK|k;4Cb{$&V=?;IPzmxm(w@$f78S7BbFym~f!Bl%HMg-$0cKV$;)
zyLCsL4^`Xdf9S0Fx4E|(w&lEAzNEd9gB(-<45&$$UDR2+#0)v}OCgyI;X&>%{}=EJ
z;PG!I-xT0WU;0uBc|*Sb`s=mCiNSw_K&1)f<)UG2E6Af-u97f;xa-p}feHNY4c++{
z>cYHjP6d3q8yFzON(<hkz$}on6@;KSGP~p};3=(bOjPqM0?ee~pC?z(H@@+W2J?C7
z&;IPs3_9`f%jqgno1_iV49pYcxOC)bSVG<q6mzc1ou$~x3;`$1|F)=C<xAANa>5^u
z(PDeNZv!pv8hFeBW93UY;do<<B4s?NRah~F?MA|FCZ~fL|4htVJ;`~m at RhH8#e5-*
z?vgcLsWWOzD<HU#7ewW2MjB=t{<ux2Xf63<hJXhDy}{3XpS+(MDwwz0?b2T5MDN>T
z1`Lo!6!0SO5P{>?<5%7oFacf#fAEhbFZP30gddcm-O`P!)DRV_lh?(+r at DXiM}O2y
zzRcThyDh$viL=6LRKg10 at P;>N30X at d^{`f#CfIH?fiMv5cdo{0r<`&Kpqxs*^Sij0
zy<KFUB>z=+jNh#|@7+!Kga0rA6afRe{5cN2b^o`2`?nyJ$uy9ofP|tD<X{i^*IjpA
zys?i at N%Zblt^V;J|Itw~zj{9T$xo_NNwWzhJ=^{6cfVU%!L`?3>(cS2#5>;cj^{r2
zxlVlk^Pm5^*S!w0kAM8*|K(r)g<XV+v51>)y2(4GUaN34S{0DzHpha@(Q>D|BP~z<
zX&_WoX?Q;WYS;zs-8#48f06szbtP3_jNI)-y_?yEKl#Twv~cT-70$nm!vnmu0)iZ6
zK+E%c$p_d_lyLszAOF}3{Dhaj^rfHw{O6(m7k}{=74Yp{&kL}9 at 4fe0J2h}Hhr92-
zTW#!13tdGc|LU*)%GEW}%c3zhCF+$BN0|w`cHLh7DXP-*{9f*|x{I6><G<>Kk-J^a
zhjQBdLkrb at bwPBEu`mId1lt%0 at Iwe+3Qi6`VE&uG`5U{zSR3#0N3orsk1;51kT`$j
ztHiYk at f#5V`Op^pn$32EOu>H+0ja1;)${pR!!CfY>Kx*~DrR?)JKAX_RTqre&F&i`
zl<<=?NPrEbc~?_Zn88>KgDbHO_YVFKeBcA(eBZFZUP+0dy!hn)`|l5)U+{t#eD8bT
z<FvW!@q~{riT1C3?Q5*kpb%$is(40YARSRq at NZZ1Y$f at T$TDxZ;RZsQ2_=+zD;2&-
zM|UAyJm+NiFO@$=E<0|FT)|)QFS_>BRn*PF0v>E{ed}A}XGsL-h6BO5LtH3|Y{75W
zk2ZYjQ=bYN<I~0QJWnX8J*+ZM^o>}|P)g3x&LWtw=H*cZWNNdiecFqA<N-<(sMLNG
zCNPr!Meb#Hl~kH<?~b9pD$|9(;vW^L4zTh6@|V9nFcXLKx at 7ZB(^v>8!wFlEF*?Zk
z_P4+7=;uE7xx{jBf=~_Nms|bdpU(h)pe|qA*sP-r*4^1^d at S=a4Y$BX&iwBV>G3tU
zX)ljfRFB{7@}I$vNLW0O<NyX3(5f&N)tJVHQ^nQSzy9^_fB*Z+JnwnWt4i)?_cgD1
zO^jA1ATN5+ivse1-z{jT39=hu2vQ1+g5 at fpq`R*8r_WN`<9o1Ca`Awts<7ApS7jQ_
zJNThe;SG5_>fMrE_)F&>{HF;-U}MSgiBEiDMY10=F*Hahstz4w*WBbg-}w$>^odQb
zj-p*Y;5EsVB;F<x+Hv>>EdHO>Fc$XSodQ?<>yAb6sAybv_o(@A0H24tJa3iL3xCCb
zIRseAM94ee`OYrVZ+`Qe9pXPf``OQSj~*}w)f_&rE-_D>zvV4&(Vk~M^O;Y3+S6jn
zK)Ctlo7sf|?&8e<BBnj3k|cac*oyPs!b9*U|Hu#c!~ctuttgsTcAbCVZO-U>t^=ap
zduh)L{KOE?Z}57?GoEqZefO2cVm(T;!LI=4&m!218xQ?dsw=x=PXCtYF6;Bl+BW+C
zvKcFpOAYtRRgX;G9pb+X{!9L`VTC-G^h=6D=0dxfE6L&2ML`}z^tOkAm=WMV)_-ir
z at UM3kVWuQ@S^4Pr?*%?HC!^jyaR~m(`Ir2o0z&+xpt?)Z4}S22ZstmIe)z*5e&#cu
z(ehWk;uYN{z5o61=kwXM8x;8%?A&!sercmpUG_x?i}0_KWwFoNy8P!M!cvW2s-8->
z<!;prGj}(_ulF$!2 at g^%0T}`W5?)~V(1$+M1!?6uCNJOo<~MsA`Rr#uJDmTS|D|Bw
zww{vqN}fr3b$SE-hVxJU%_6Oqm<4?K%U|wgY0a4?zrD?~W)+LK5&1*}n2IVDSaprv
zZ9BTReCd`Kl#jyycU77>rREorvrl`4==Up*|I*5Tc>aLjsyP3Te?tHh at Pa}0hq`*v
zT7TvjzVHPry3cynvqX39)a^I;*9+M at A@uS*A#*|Ov#JLF6I!^7Qz~WV?jp2TmGm-S
zW|sUX`3XPY2!3$_S7|!=zylAgpY1U%G$?qGZSjg-yXzC?Kkb6B3z)a9Gik4cirYnY
zOU`@cg#VJ$zZ~#e?d0cS9|`%E$K`mU^w0nN&tuR!iZVgINqs!_-IjlSw{5 at omM`I4
zO0N8WS#56{_Lf-zpSz2o-mRn;_%gE#Kjuvs0ng_PdnB^oDv?>fW_A>W4>j`RAOAS)
zJs at +B75o&E`l<Apot45;*pz%OA`kJuRD&nflS=Cfm7bT{&3+sb0)AVr4+er^@S|OX
zZ_Dk&LlPc)+Y?JBze7YFOTNcm+`bjjcr@&Og?UE3bp9p(^j7vox8o*Y(0j at v%$Jp{
zjsLFdBBxaEvhon~nP0*W0O1WPByTla6~w>Ka*;1KwjKXNCF?f?R_tb3x1o*IC;w>z
zsiHIgz1F%_<`DVv1Nc(gU3r30bSvrRB>dt0 at s9+kd&Bd^FMhE&#{*w4c7FQPpN5Ku
zryGBzVg1;bE%Xs_`u~i7lK*lDDD~glm0Q8kC|r8)`EsxSZ(MyBhkDf&nW<G|mfG%u
znmKt&L&(Anp(H=x*YCkUpD#ABwuyEh7{=TFtiXs+!gB($XTD6pn-7M7-Vi7|rP6k{
zPnRNRKJ#S_CI6YfR8u$B)74U$lPX0i at B+vNvDKkGJ%y^k&~8P3!k_%}|9*!- at bA<0
zggn11%$$=E1bY$P%^3nV!Z5NxQo4w6DE>>%d*u>Z1ma(ck#~sO`T1S)Bgb_kX at fAB
zCq%wc;LbbmJQ>J`Zp2rUm!~_wCfG9<h+YV7q`E@$*=2-opN_<POtD4Ck4n1yk7>Z<
zGF`Rw=A<S=vGfc%&c`<NKOgn7hU~{);R^c?J?+(!SnV+d7{cb1@;~^&4|;Re*ZM|*
zau%FcFou5}JsF$o#AD>Ym-B9Bk{?3y4|~*k3nfh;SS>N$DEH#s&P at 0T+8_ZyOT@!q
z5c5ChInOyI)EoC=%2O@`g*I$;3LR2@*>~NZy_o#>>R~9eR3JHdrry90{2VU=?Y6mH
z>S)EkOG}!81i^p>Pp^7<Jk-GEG!FT3Q42v`{%HgMtROlod$6~QD>puQ_bB{-uLc^K
zsk#&@{-Mb6>IK>kEH^?P#q`nmQ_4C^_{l0!l{SPK2LF2BH&dqpdHXKhDgGl-0#$@I
z=)qKo-pV1Mx1%Qm-#u|D6Ug{KD(qfpLQe0!w=<LZ6cT;{-3E%GYHCk1OI#~C%78YA
zO%sq`mF(TkOJqIK-3Fle<tXuwFJ$Al)Y{~nz|oI>^rK(>>R0LC?Ym_!MQ{R=93F{=
z>2M?e7?^-l?<wo#zYY1&(PX|9y8Od0oDZRdxtHgpS7F`6cj=?d>^-Hlg0f`DX-B%-
znm>;xSr|V7wnyHAw?M^vzTdy+o_perAl*R;On`DOIR8UzZ_F>5FXf7V8b&hbL+1oZ
zj+CG#y_rK$K>1j^j#J8`c}gji1yWXz(~&RvNf6%ez3+XmPr~2+_P39O=LCwq?|tw4
z at BjYqxDj*Vcs0Uvkm!*M%l}5g8wE<>E4ku7hT0f^Blx^Tf02^a5aI}EnGCO`kIJ*E
z!uqbtDR;9fl~@D!!-jm|3Gh7U7W|y4D2Vg-5S&k-WE$IN{39q at Bm^qs|K32Wk=X!y
z%%KYSa<_z^j871P8G(Fn!W=F=4tXatcZ1l-_v}Uo<tce6gp%`KIf|)SVuQYF at iVr5
zPJa$OCv&c$@YY*zHN5UW{y#YXV+e1QDQWM at UH-udMS7-f-Uf=~*oGhzq9xvT9SZ-?
z1e_S<v&<!?ubfiBpJhUbl1?`O`4Vc|KS+Htz?V1Tx1jkJ{6G20Po|}ae{u+DbbZ64
zZguET{=ac+BM)_fuX0NMDOL(TgJ;VxsLoe&VadJ6Ptz+9NC&ZY9TNX2Y`jLV6lD}3
zI4jCmz?ZvOl?%BpQ at RKX{w3<Yvfzg{LV<cmA4RW4S2jr43i3wb1^JJv8rRB0jr$sT
zs6xGWcZmOhmM0H?&i};vgRQ?A1of~5U`L8w%q#!ycfXqzcyC#zqqcU{;H-uT1pIMb
zr>KfGIqOYtdQ&eIC!c8{)Gr13>rUPa4NaEt at 6-Qda=r;f{6CWak%Tvj_0nEtmhh7=
zyZ;CMKewDH;+7%cO-wFf5}dXf=LF=61++#Dzd&mtl-H6OzAFn4nLx?EvjqRHWe#%k
zoDba~1xoyhuVX at KCI8u#4F=Me&KDNse`8}BcQo=)DyJ=!{0ICQ{{;VO0_f$#EkXEo
zedP1ZF&qFj6V4TrZ^_QOJu6U5CZmueDH(%Bpq`OWk{_2-%!wcS*vEX^?iZ4W at HqK=
z8l%rp8eIkaRq&&K8%S&<ZG3_K at ZY$Xtq!%Z&!cVra|i$}j5#7E at UoY^EPi;Ihqo(V
zvLXa>orU>ZZn?#;d4n^)SdaWL3RG7nP?8_;yOuI9dC5yY@{y06JmKvd{NfkCNawUc
zGZ%sXtq5-vPP{h?$$vWk(*KwI>jfn9{C=8AuL0htxJGBpOQvRQL1!rd`|MV`EJ8m1
z*^5(DqADh1TaE=G+X{3YVkzR at tmk41{$K}ZLRXXd2g!I3-!8ca|KC7*{GpA^mj!zH
z4-)`?q+}At0`lvx{1rt^dN>7atjhn<kA4Jo76J0aRgMKrR$%!W&;B at _!t6zP-5PVc
zBtL}UUm0h4;+a)lOd+57Mqg|j|1Zct>zHW*Isff7wDE*DN|tPIl!xH&@*mE>cQz^$
z<PtvpDMk<OE!qdGzT5H>#}+XxhsLjwf9qS{GE7L8hGHP-!jFHZ at wT_U&GX+i|BUl~
z>@g$82oz6%|CPYcI)?bCWa*0ge<T{YV$NUWQ!Pb)_`@HzK4XdA1DZAuro#&OBaDU&
zwK>ZN>}qCNfG?9A^S-F<B7F1M)|=r~q7#n7R;Tbz(Q)bD8vbyF{=dtAyZz&jrb0#v
zp+@?wQVBn|15VLM1Uc0ooAbBM+uhea>Sr88P=*74w}?#<N)sS63YR<KFWkF2Y2;XK
zu=siV?YC14L(msG>v;JWK~?;Z$Gcr}B=cEp$oW%m@(+G)ht6RsTwwzKa;`~P_Sdu}
z8ecN1;o8f8t5=`KDBu#2f`9V`(NtdOf(tRv(gnxv|98ZHQaxT6a{kGG1e_KBqWyAu
zI~hyASZf7IgztqG-I^vqkc<mA-gu+GVK=${6FbqA%F91All+$*-FA$Xzn!x?fBswX
z-){N%qop>+$m8LUu#;ylLm+*z2w?Z#d++`C-*4`$^2^{~+As%?y`)7haRQb25Wp&s
z=YV>_&|C#Sx_cuhbC at sBT_^uzfG^8zjC>;Cx0UD|kdi0ArlsbsJoAE3nLAq@;_%}t
zwqa=HLxcq{cXU-*EBN34{ohbdI)6P_cIe*tXA5&o!1`zD|2H;!Oo37lBjsM_&#^?J
zWIkV5PUitX=J9FK($sb1I?n{a9(dq^SYJYZBv+hJ&*`1=#y7q(*FW`(4(d*Rb^1n5
zN*_K`UKRf%fiH_C{8xB?*#DFqVZS(pXZA1)nSN=O=O>p>zLtf};KJfqnG_36UVdBl
z5=UB_kH3t<I^{I at PwU%gvttUBU~iPmu;*dWU*4hKNWnjyGXdCJ at cg%b`!}oi|L_n0
zuv3KC7xE+h>%ac%POo)Dl^YQCg%MdVasJ`|tG?cdN>VppnCbts0UO)Au|TDS#%_{N
zpg^3bKM6y)!v3ZI9m+Ky%IBG5!Smn${oi+rja6<TmQld=l>VO49Hp6RnFn!1hQ;7N
zy0Yr)ji at Ab^MytD-`L=d1u6~n?v~hx41Q_^x!7J{6IM{dpZv$N5B|}(YtNsA{L?@E
zlgnvX=9~qeKT`-RIP+f`#Yo`O1TGDnms9W`;Z1}(CI8|4!~e%pB!?^t at +T+ufTATn
z&ljZs`mg`m!{v_R64rsi&n=w!PyQ?T6Y?S93i}U!*hQ1ZQ!2H*6DE*b<VSMo(p>a0
zkMYvxfBxrx?hO_1QA_?F*50nT<_nn(8L5S!e3VYi{;dE=FouNrVNcdDKmHkN<jDN;
z-cunBA>k(=U!qKqi*0!Lm|F$&G1Za-euo&yZMWU#%@gZCdxIpNGTd{|J$t+2YA at v7
zKk(}g{iWB={4<b*zX5!CsD!`dpTh^az|xk6BMCfUFGnIU2Wv9_ at gM)OPeO#d=f(d}
z`2YOR{}_LDLB)SEkitgKncjQ8a6tbb_gmuKkSp?I_p<xH<p1%Hd5{}nDLI%Ya5yq0
zf<r<PPXYGHzbWwf$!{v$%u5%voj)p$i2sdE9V)OO{K3DN2lj#-Zl9|Mys54cffa;N
z*!7BL_Ql?Wi~PZRsbn3&6;#fj$4j at L!VoiM{(R4$HB24?y#G)(Dcj!_y2To<zB<(F
z`6KwD%t-t{{%KgSfqzyYdDP{FOeR2P0{Hh5a at iyMk-ZnXp9`(|D#+)QbW=Eg-Iu-G
zrllmOl#|~1!Xo^4?_wy&jVIEngdrhIRsuC%VgJ(qG2s>GfZTUjIQLdF_$~F*yqT9_
zmtB~R?jI8Gy6^v at YrEoo_uc0!2|aa^{5Mdqz=m<@1d{5iSnTG}N~qwE;6G!2Gpy<l
zNn7yo3vXUa-o at K)8%aAa{@iraO?s#7_p-aY at RWXjNS^QZvxb at ezuSH}<qcLa(*r+H
zA)UKbVW at W#Z?BR}X1>N&&fk{*=jwYo=ls2Pz7f}RfyFi8g%h3C>-=?hm!Bc#%lxEw
zzA%UXZsXhVgP9&^gOJP<x{!BsoEQo4{7J+-wsvENEB^O}$s6DJ#@-&}hx3;ldJCL0
zccB4aL+B$N7aba%Ub at FFLM7)z at _g*GhGqFLZ>@6X!8!O58z#^Td8jKj7G)kp|H at J)
z)KwDjvjwX?cinZDsjeWW5pQ3pKRL7um?zX3eI31-9<PMt*!g!ac?;y~9)tPhoHhh1
zCZ{}hjEMnu3AqBmb~Fo=f<u7Ezpavy?3&(kHSKTAO at t@(;Q5qk8t|w^A7$U^;);#1
zf`li9A)jC7r}v&O%<=yv at PT^VWAGgJP7cWJQiu?pKKbf^+#&f=?Aiv>vCCehI7&$7
zJxRg5fZtXEzh(A4Kii!~#RWNwf74mn#lgdg at qa<O at _d_HX~6n37bhY;dHy~BI{W{v
z*tj at _FM|KaznF~)WaL(w137kM?2D}!MtF0M|1W|eT!i>P$xk7$FSi->#RNexA0d5d
z7b%+#2pY>taU6=Am at GJ5%x|ltt#S6e{<B(xioVuy`Y}l;@knw~DCfCD^89IU)-Y%O
zn{6(I^6o;;8>fU|xYS12MR4BOrU?Y|;E!bYy#Bvh{!e at TpLv$#r`#|B{vXL{5tY!j
zm##&?UL~3Ee}4YETK+ZcgrEP$@RZnBLa!CzwsQVVpj%Q-Wg5Bb^c)LfG>H*GAS5n2
zzyGr~TR83af7&KcS%lpZ>|X54%w)b2Dier6$jtiu{^#1 at kM^AQ`=1+4APSVlO32%C
zMSkv<CSXiq0-XQ({r`3HfAa7DmxPazV_ayHpGTAVQow(jK=3dA at u`bv!KMS}@4wb&
z2)xtjeg9<<X$<YXWfn96{F?%Ze_|nsAxIR?3gT at Ff<x!;e-CREr}zEu9R3+a&JNPm
zw}sOGlXD2bKj6JnWXljD83 at 3C$r8 at L|8Q9DFJJxq`wxv#VEkB6nn3a|_>Uz}<i}h%
za>5XTf1%O&_kRv(2VTB43hNO|b~;W!rmssk7(y>6WoACQnlDU#_~k_JKSTq{woQ<$
z+fTI&326eszpYRQ-Z(c9lqqe&A!VfV at 4p?;1cabW;KY9aZDt4*_EMQZ><;lSzcc~<
zgjW&j1o_pYfiQt6K=~F(&%gh9KodCs{%7w1(aV38*)<1N!1)6n*n)rjm+*%yGfcn`
zAVxAwoPYoMfc&52??3Nu2&hb;J1#H*oCo<C4wY6A{PX|8zrokzcmSM#|9}5haH_xm
zzX<=vg<jf+GIKbHQ6S+DAx!}PQp7(ZpYz{;*+2H>6%E1q!icP!B8b(GRTuY02xVr>
zIv3f_oc}sKn^CrKnq28&%x+jguL;m_3=Q}<JMcQXSA&E}=fD3|0=Z}T#Qy%*vi!4}
zG0azG(gebv#5RWmCcxX|7kOq1-jT2nWFm0>`;U8u-%rz60uqSo5&aTFKy+W(ryHGT
zy4?A~g8pA)Hnx0Bfl?J?<WQh($$we_JsWUi*o|2L6Oc><ghOmWP`V%nMw#>9|83~g
z_<O2<|92_=CyWBULqKT)mnQ)aEd<3}m at o2-*o@%(_um`DE`I2Q|Ni?@CNReBS7pYV
zK#l^zzmJjUcd at _l`1r>^-Y at Px`N>Z<xRmc*kcC at DnK!@r&GRpG8a4PKK0b$LjLzJY
zzAJmP9VE<;d9sE%!H;u2|1IPHsJ7ks at kdLAjFE$X+o33ks*M67&yxQ;?zkhCLxZc2
zeB>h&0Q1Yn&bs#6YvZRs5`LqMWLNa%C#l=N%{Ae=$9sz3=!+Ry@?V-j8<M1VzA&Hv
zd<CLxOuPN#kB-5<EE6Ws;6F?trUM!LloZ{4_ub|07}+HH`s=U1`R1G7`ObIp^90Ph
zM5N^Z=}&+9nA%Rh%*$T(vTLrn#$RFM7MK7nh5tV#{@KEK$Qva~w#Uf9zinj#u@(gW
zNHlL2hSg_1>sfDl)0;}<KK$Vin-QDC-f+VWWqw!o7vyEW@|CaT%GBm8&Obc=74{!8
z0Tb=0;rs)Pn3uQ(1F@|hId=ZLAyAA34Y0=_8iRe78RDOY<5 at uPADS1XoBZOoVq2yk
z(Us(jSl;)(_vNofKj8^ac*QGT at zIZd)CvzjufVsy^)2hDl1a1*qg&OVDQtjUyzOmo
zGduXf4}MTx?xOAH`e&?2^e%z6 at hBsWnerm>&k+9y83l$+pyD5vSTzKoUG$O=MqC=9
z(T{%gBUa#%Svf(L^Pcy-hr<`odzJJ9ANYX6!h7|AT(wDl3UMuEoOS*K1T;YN;16GP
z=D%(1aWp;rMxmE~N|r+5F$D&vUf{7YDGI{B)f=3n9jKBo#dviFqJXdV(m?Do0r>{;
ztFF4rDdF}b@(Jd{vsL^v6ZVqzTui}I!!5VmLRZ1RPKii0dM!J*jl at i!pQq1s{!Taf
zl^XtksUd(uQaNoQ`6uKo;4=O-|9Sz&AU7jJI0ueryYeOG0BnYUc3t*@7rX$miorhe
z38MNO&Cwp%SKF`xw)T>jyky$q(kWTW7r*#LI#2&Uf&Zj;zOWzuqn&Mw9&@yfeI9M|
zpPpGvf^D>W3jCC(JcU<Ba<Hv;GBE_j0(BE!wxF0yCIEg($<pV?5Mx_ffdYy- at nawR
zn77|A@}EPcG5QRp(bCEA-yQ<?X#yqxIRvEthb0;_Am>`SeF^`Nw$(cs!$&ds&_%w{
zL39Lu-DfL6%EGEm@=GDDAWYy%PkNGTb!XhC<l)=*LV=PYz!GREElePKEuC1yAI^9C
zS;K<<e+>Vw+qkchhf+lip)`RAfr9^lAGGvui}rB%w*ERKsss4&=V>PRSN`4aez(EG
zB2QR{tz9)ZYY6^w6o}fwl$=#9y0)1)rK6V4KJ%H+m<K)o`Ogncmi+6u=+*`dN$-4N
zDgHN30m`N}Zf)eD2KjMlh<_0B+dR1~deNB7bLN44z-%kYQGoMT*n+3>lFU5nEOP1a
zyK)xR-LA`&JX|;>q^I2rpA%y!{gfuKH~#0tuZGLh-_29tlK+rLqCQltZ2~3#<XrrR
zF1JtZ>BEEhAhRObuA>U$KgNqVD+v#<V>iZ^+-8{&qNLNAk4FiXPp2_+N at sbzXdLtk
zkk_SXNgqY8T at e0R!4TUc^BX46<)4N@$eD}1ZPSM*pH_Pmh~3=E(MRCVQ}R#<3H*={
z#gc!)zbSwZU{8tU$@k&`3jTQ{-4Xm}pAIq5b)=JX7We-uoY0t|I~|js>go!m3D9l$
zUhbDa5BS?8C%57MEB-6mV|=MHb2qC}iRZs>ed}92Vw=p&X`JX2F!7`i$l at FKLdn#n
z%d#JbdVd07L#M2S|7hOO{cg-pja5R$KL|NtdIn*5<G?a0#c-s|At<9f2PFh at mfiB`
zl`|gpe_0^qxVny(I6Y&~d*A!s7ryX?Z-4vSPlM+%ci}Y>ul+|!tDrIe%4flpxKI8U
zfnOzM{6EeAm*%;V_TB;&`LSE^4 at CfjSsFufqN}j6!;+m*BQpsPgTAv<mJFE*s6kas
zz;gtyPr6WljQhIluH#0GefQjRj}?IMMU-GrrkpeXX$ZZLw==sY(B&V8R88TKPCh&2
zK9o^$TRQ)T3JptniLA$UnSg$`0A);(p83pY3IoPC&torR+4HMk{c6OYZrKRP6-aV8
z1ZttkqxS!?1Ui2Rm}~_N6QJ9Gke+EfNgjsx!6R{2IbLi$r7SRH0{Wd5=z9Lp$nuP5
zJmc8$9 at Bnz8so36j-XYE5Kf8SHu9fr%oi4qe-`II?y>FmtD}_(<Pbo&P=tMeN9}e?
zP<JPnCZGYA`}|Tsg at NGzwXc2cMR*+Wm9Kn-=SlLZA`*qL3vzT;_F&bsu{$68s9`Di
z)syl6j`+`8?o~)PGZh#@XcgWx%+*je_Q=V9+Q=ATf|*qOyL31`B#3`}HTj(9JZFsa
zJb^O#t`rT>LnfU<vGiZ|UAJfDBn&f!W8^<>xmPXS%+zG^4}1J4{9|YzU#4vrX#&yX
z!N2%N at blsqzxV{e-gpZi{NM+DEA+b8y^hHT{Hc?0M4{^JHA1&fkA;86HPbxDoZhRS
zGBcG)x8eWcS897a-s4LS8A5iqHUNMb`i{&@{33h{`TEzt-ZMnWvkxI(^g<{k)is9y
zF;t8!vs3 at SAO7P`OW?b5X#&(9+8z&co}R+UbF*7hDET)Gaf4T1eYI5}R*=r~gujjl
zzgsrmx%cEhm6KXcJrlaUIg;&-#TJBLRb~9Y>nXs{t#x&kIjK at grtnmCL&#GaLgVy2
zl>Hk*n1J5L0M9QN_UO|OM|c+S@|VAy6_^Y7d_K+LG=%G~zutSE9&?!Q81*vvDU}l%
ztF)axn8Hx+Z=1gd{`WZq<n5=Tx<cqS$?O#>{g2u0t*6Q?JDLdu|D2)ss0IH*0&kEa
z|I?rTwCACIm6t`F2KjLp;J55!vJ>;K$<AM&W=GEyPL=;qOBepg8N>6mG8ORM-86yV
zALp0D;a}tJpZ)A-8w-3vEH;P;;Y(lo(#i1e3zvAwp<MQiaWHgJ>Z(+Jw-aYFpQkSi
zzuJ1^pM&`SyvMHgGN)AXf^yl9y>e*+;vest@`uPb1+X<M<RK+iaP76%;vYH3ZUxVM
z?sLU>EIs{yH~1-aRdz at AR|?s=GljkJe^?WsrBq!dlzLuJF1xZ<4iktWKo}6KK=Cy_
z at _9&!Eqvk=pO7goI(Gh}{U87M$Gz$hZ~NrrH@!hBs_KZU%k0j?K2N_m{KqYKH5oaT
z!WY at i-W(FTCg4pN5rVNGQoIQu$2anRP4_fRz+D&!M0X6KGJ#Z7rT=cPCBSop#o<?B
z760TC(82wGDypl at HJCsQ1V({Kz>rvhv49nb8GI at 8zylAQh6#A{(^qd{1u+E<S1^+Q
z?8=$Kp7~$D2{44p^UUAPKJ6892#9GQ7^Kn!L_th|w=@cv9atkh0TcMb7rtQ1<449!
zaNMkWKl4A+mM5G(G!QIq1-;~FX4?dUfAE_EfBDN_K05fh`rbBs$;Y6^u8nbR{=3~Y
zp|88A?85o0vl0KS$N#4`y1LDr`JTV5A!+Xl!M|+`0k$~`2!Zeq5-){*=tCds1!>Kh
zX71no<~Ms=Xr)(N2Y&wF{e}sIa!S3CvqwV6zMCoRjsJ2Aa9k!p;Z<ME+3k{_IYUDL
zJVXfA3{4fg6s`G(qks6rANo}vE%)Qt-Il-q{qMJ;<yr8V|Cv_2$mx}b>F&<KzC1U9
zuY_s{NdM3IdmN0DE<%wLzqmeh^sxCR?2OkV?A~U)`qi)Y7DNmIG1E5$gj!0Ck*n at l
zq{nyU{8ihHe=7gK!XY43TIspFTlLF?-3t41w;TeJf9}zWsL20`Pkdr8MV3%}HQ#&a
zfSK=l*Sp{?Y=gIN+3vgVzOpeMgxS?>qk{r$+*n{PFoyp{;8)3+|6WaYneXOIz`i`C
zWWJQULx8}TV-!Mjr2dXliBQP?cAi7NAOGxUKifTez#Naa;vuh<E06F at f#33$w`h;A
zo1gZyr^T~8g29UkDBvz~6^KqsbyfQB?X_()cL)Db`~Og5rSPHMvX8cvOYBoF`A`3k
ze;yJ`RtvjBz*SdW1s=&-$^mK5OZye;?|kPwrYfG+iF`PA$tWNn=Zg8oct7@{!B%mt
zXt4{H0)E9#oBv}8fwnRMrm-#gSw68(q2fQBzxam>1&_Bw6SELR5ndCGB}B-5{p(-<
z{`bG{(DR=6ysG4Wc3<<F*C1JY%vN6Xq8CA0<0G(l3-U$#ZiG2VDX?7QmjX(%dP<;>
z)DofeKim5G-ts$j{zLx%xcH~HQtcb%vcE>kiG3-g2_PZJ2L}JoVa68$NcPzDYhU{s
z!Cxo<kE6=)r6}S~<$U|w-*)tKpZnZ?urIH|NU^Ow5}uiGTCsd>W2X*<Y1nE!{~rUK
zTVNCw|CQ!@dEPd2CH!l~wk_Xt`AYd4cSn++#Y*x+F8LQf2ol1h;@>>i&m{VC&?8`P
zgnCmNOPp%pWE&Lu)03b2)Te?;f5o_ja~HDqlrQF)r{f&h34fRXTgG+_RdF=N1#K1%
z#W10ydpz^MXUN-^+sJ&kK;k_{s7#>b9~JQM at eAO=<Bv`vjfWRYGY5ZS&ktt$;oR`0
z3Wq!OMfv^r-yf(8w!ini at 7;Uvy|Lc1IR9`p67k#lou;PZKY5N>j4j#|`>==@7i9X)
zXGgOng_L?L)!Xi=kw<s!{2TF4Hw0S$5J0PC7mSz7PHfAi2_*kk0ucfvK2uPEd=4LJ
z$Oo8Af^Co%z7$Iiv6OsRVBy^^N*5&m#v5<+d1h3Ic5RSuy6L9)%{td2XsyO4(!E0P
zZ`g`IvfzHD6L9{g$N#QPpv^x*U=KM~5b#I9gLVn|Knj-ZDg!?QgpcU0ng*OG{qc`~
z?DYx4OJDlZ&wu{&=rwWP$|$Von|ByWxOz5aK)L(wyVYid(jFJmNYh(a*GM)J%m>xo
zZ5-9?uuXT7 at R$C- at -`zqe52SNod34`AH@(b*#z`p+xf at Qt_k1)9*{<qX(LWd1pI}d
zh^{lhPzFo35{f_waxoJ4Q3_7Ua3FT_x11dHDW!To`N>bJQ%N%jCH?Nicfb4H${b8F
zTv`FxzvCV60K5}@x+}gyyTw?4upn1BnSdd{d|Y8iHAbr{?8~7o4k_aX-BB<9i^H!I
z&-^!>!^T5Zk8HKO(F)Q8Z~_l(fE-|OLYGM*lDT(_Jn8n8$#mHQF2zeAH!r}pQ9wxv
zU`SS#8lpmV^3n`M?BPS>iu~NY?Y7(4onmp8dZH5TdBYptpd~7VuB0BzI4(`F)tH1o
zu`h+>-?<v2k#ZC`0q5WL|GiUyV;KVGi~?aSZ7T>92>u}y3xk*WdhkaYfrqZ3E_`hA
zPmqIu#PaQmDQq{=WjlCq<MbdI*c*RY!cTNECD=Pfg;{6RrEM-M5nRX&MZVoO{9y=D
zMq#IDt=+i&P*K;nZ1heW3+%`FpEm#VO+e2!tRPJQoWUDHupOk?28xlHm=VGd6u^=#
zsB9%ALr6nVZ43n8_{KNV)i(rwzMOZcCn{946xSulbm_>^p3>V7$<b_;J4=~#{znb}
zH2#lh2-uGa1RG)lLZtBU0&)bBuVg>$|DZ9qxXOf2C$bCtbLPf~@jt6#1`%OcFZ|`@
zqG1Vqm~*wwqnfUH>Lf&&6L9_;`9Jm$D8|{YkD8D(G!TFxAqgQUM;C7yj6IC|hwmhi
zAyg)Se=wUJG<<$_DBjpHY6SmLVP2)Ycs9FYzPlSG1Aejsrvd+D{x8}P5cbkAfvy$c
zBw$O-x<b;Jd=i4#7y`ue)-e61N(Fg)*OO?WSMnc~=e4R<b!p$2GXy^^Z4B%;7J$}1
z6A#}`Lyg&ZBdaPf!Ql^`(rX3DOc(NvIRRvvK*>MnZ#l?%ejE7eD64T+$^TODm-pVQ
zpP8LL1l#WN+weQuxb)1M-Sg?a{WUGK#31D~fgzz`2+3zy0TbZ=#sByh{BQf`wj%_J
zX|<}<ne`L08AI*t=I1 at 8(5ttZ9oismcZW9e-!Orh_q+eodwXqiX2Os{mz-`+;#UgE
zXY$W`2me02y5*KzDi6PL*NZw<rBs6dth|KZ)w^xWoV=r6VMt>$J9KxDH)@{4ziMaR
z^8QaB>bq(AT|5$@hES59a#G3!K+E%s;W>XFr);FXDsc7HS3A)o3H+DNKd&_efA at B}
zIYWw?*_91McY0_h|7R2E5+bJoe;z7nBq#p_&~pBs&w4c|-fE}_Z|^$M(vt_!hJfV1
zyj->+h2Fd9W)8tG|AhH(gh0p0zn*IJ<FrFvR1&R*P%>GX0BFVkhJf2|za7J`dey7i
zz*k2-R*px&DjCCnxADC>4b2=W{OBFy|J(eZO(4MNWu^hYLk<2T1d1rgYi||d?Om^Q
zdb}I+-!A`UlX~0So7sThp)>z8HE at vA+kHCWXfHV>Z(X at Gfee8_i+|C(=U*Zj?`ryX
zrp<hL)SE)S?J8eADzB1l=xuFpW?L0A`;PxSU>fQFPjU#*aqXU+aI}{nnMqw&NH{D0
zMKAcbnCZuPO1v9#d_?K<0U=O40%k|7DKC*%A8Kbef1?uS at P9z^<I+p<ueLdQIMlft
zJ9k2XE<%};_*Fvk872_^AOC(bB|qR|2o3V%khePHYXXAhBPQTOfG+>po{hrB+n?ES
zXZ~j at aQ^8VyLdu at 23HmNv0L(=@QZ&;W3B&qnCmkENN?odWSN<mHHezXY$29FqyD^f
zqj}|_F*iO({|AR(1IGLRjUmvH4gq>_Oh<29rUa=gCyFTqqPh5q+j#!vD=j3)w=IT)
zArtUZ5~jVd=krBPUYX<n)gb;+XUTuJF}*os?)TW?U!4E536$9Ma+R4$ehMhXD)KpS
ztM^DIfZsL}E8x<9@{^yK4&Qp~tziqkpo||{QPN{C%u56*oPY2iSIMilh4L;M@|l0Y
zchelT9Pr#mM^8S~#>~-#pAcSJ*e~G0u+Ux1<M$cDrQ4D%Y>J2&LOBrd{Jedv`D0#k
zx~E|A+YVdtKmJbV^i-FbL*;B0|BMNN+{hfw9QNGty+6L>wk7~qL5l=qkqp{xFZuM#
zzrY4^s8 at 3VFFc5R6mtsm$#lsQiZ51}Si3RfZ%WC at J#{G5d#}3-{?8^*fz+n1I|?v?
zm<2-`*cc9^nSdPpSASMaP$V<>58H8i)L_ at JGA8(`+T7kf4fuh&E&n5jfU^ly{ERn&
zm<5Ch03Q5-bee!6KxlN=U3WzY<OMme35knjDx+|~uLddMZ#)00wHtTO{P&I~Rpw+Z
z9sI<N08A*bl?j9u1o^pzcf>z{k6%q;0_FljeOnU*1;8KV$94?=+uqCM-l_0d!|v|<
zzq^~Ps5P9pEfpKfZ{$A%A<#y`a5(eW!dv8 at e@DPCW!-t_oycbt68|60KlzVJ+QHAp
zW>*C!cg-4T at 3vtA|KmfTvk6r2Y&3yj)%J=7JoH|4nt(Xpawu<aYG4&KBL7R%<3~Tb
zbp9p$L%~ngyfM4e`0s+ZlAK-he>Q;%s*xs;{1eij!<&aU3P3%q!0Heyuq#ta{`2%S
zsP1*EhK<=hG5Eo`2ma3{P@>i4u$vRmCd0iZU|wv_D;)Bqj4gn_41V(5A^yuIjg+Us
z at 2r)$`rc+t<A19VD6TtMduupxBq1Y<b%C#P657PL8UkVzfIa6g@(=%?{O4I&PgVcO
zc2>ovbwn?9>&e_3|89Aj0#|ZY1;fnU3drv6&=3$IP)0!}0^<LYe+72I|Fm9M59dQI
znaux18v+0 at llk)WF7Q=Oy6%KIh5&d=$v^moKn8+%Ob|zvjI*+mvhuPSBjr<tpHb|S
z|6?Bl_Gto%?hyZg7y01dLXh_#2y$`?JjDM<;HzR2_#g7OYs;U*|AZmnYyu@(rCaXG
zl?jyoALror!l%e5Cc<`&0{IB6<UeaJFFjs9VffLwfBw%VknAOyy+WIRi$8omLy&|+
ztiZ0v!3;r8gg{Y4R-V@#FPt{~hvNTi0!d)P*%gw10)L+VKWOLtC2~#&m_R%WAjot|
z$$wsPym0dH&*y(y2;{ob1of`!l<^=nN_Mf&oQi)um#D|vZZY94w=5#2!@+;l)@Z=c
zp$V#vZauE;%=l*x|7Q~j_7eC?=<+Y-5!;CQ5iZ(+dJGD&jWL2Pm<43~vp4>a3;S&C
zeE!cSFyunV=U3$CZkhnLC4r4!_4LA<ZyO`*Px7OHt(>q6=bqtD&WD79^RHnOhT65A
zG9LBbk_mhzl>7(Srne@!K6nYp6Z=w_>HN3V?GRc=k-rH4Glzh)2{4L^{MhaCZ-yJ+
z!i#f)`7BcjQA4k}H8L+0{J>iY|KTgPRsPz_H at Mn(Xbk@%|5)Kq=U*`&yIIx7i&h1;
z)#p)o_;w?g;(z`Sa5jPDHig7H1A9|oo<Ad;ERaH;OQ`T}?_NOoA-6XEHEG+9SYi1#
zX^o>Lz2u}i_(#5#pI-i}6SsnYTLrc~>Tw-ikpHEIfU^lC%)x)e`LMU<lh3wf#?dTX
z3Jnvh4qasUk+x3$Ps0SDRlzo9x5T*QU(C<>GXaKhhJUG1W?B9h90KA7xAjgdEI)?%
zs!U}9Xa~OsUJ?0N{|WxfVkuWuHFmev)l$f<s-BhePgmP^(>lvHIP5)?JR1UF?}1m$
zd692dW)>)g-m1Ep+p1_)#4g*I#ra=+2sjxNKwTHbc22O3dGJRp6x)*dl-pIs(QV0B
zep%kuR at +hVA4;3hck4W545(Qq at J{%X_Daa|4Pjettc}%Ov}YIm?_vlzF%y7d1Jv%J
ziuQ81TezFEE&0mt0=5;_d0hNoa4QI~!QUl(DCbOm+vs-0|L%r>(=&lUbO_*S`4g~@
zQ`)qg-q9oF|5UADjx9`P{$i3J2<?vlT at L~2i)Qxw5uKi6!QyRBWnMI4r~L2D1oYbC
zNL-K#FB<UG{hkc}XA{`gU at H<X=I*Zf-{%kzJ-96f7qI-rM7{T}Pmlkz6*Mfmmw}6%
oxd;CDKLnH=+JNCg9V&HlmQw>K&wt$Mg+jf&+3e`E(5r#}4{~^iGXMYp

diff --git a/kernels/compiler_math.cl b/kernels/compiler_math.cl
deleted file mode 100644
index 695fc2c..0000000
--- a/kernels/compiler_math.cl
+++ /dev/null
@@ -1,40 +0,0 @@
-__kernel void compiler_math(__global float *dst, __global float *src) {
-  int i = get_global_id(0);
-  const float x = src[i];
-  switch (i) {
-    case 0: dst[i] = cos(x); break;
-    case 1: dst[i] = sin(x); break;
-    case 2: dst[i] = log2(x); break;
-    case 3: dst[i] = sqrt(x); break;
-    case 4: dst[i] = rsqrt(x); break;
-    case 5: dst[i] = native_recip(x); break;
-    case 6: dst[i] = tan(x); break;
-    case 7: dst[i] = cbrt(x); break;
-    case 8: dst[i] = ceil(x); break;
-    case 9: dst[i] = cospi(x); break;
-    case 10: dst[i] = exp2(x); break;
-    case 11: dst[i] = exp10(x); break;
-    case 12: dst[i] = expm1(x); break;
-    case 13: dst[i] = log1p(x); break;
-    case 14: dst[i] = logb(x); break;
-    case 15: dst[i] = sinpi(x); break;
-    case 16: dst[i] = tanpi(x); break;
-    case 17: dst[i] = rint(x); break;
-    case 18: dst[i] = sinh(x); break;
-    case 19: dst[i] = cosh(x); break;
-    case 20: dst[i] = tanh(x); break;
-    case 21: dst[i] = asinh(x); break;
-    case 22: dst[i] = acosh(x); break;
-    case 23: dst[i] = atanh(x); break;
-    case 24: dst[i] = asin(x); break;
-    case 25: dst[i] = acos(x); break;
-    case 26: dst[i] = atan(x); break;
-    case 27: dst[i] = asinpi(x); break;
-    case 28: dst[i] = acospi(x); break;
-    case 29: dst[i] = atanpi(x); break;
-    case 30: dst[i] = erf(x); break;
-    case 31: dst[i] = nan((uint)x); break;
-    default: dst[i] = 1.f; break;
-  };
-}
-
diff --git a/kernels/compiler_math_2op.cl b/kernels/compiler_math_2op.cl
deleted file mode 100644
index 6e970b8..0000000
--- a/kernels/compiler_math_2op.cl
+++ /dev/null
@@ -1,19 +0,0 @@
-kernel void compiler_math_2op(global float *dst, global float *src1, global float *src2) {
-  int i = get_global_id(0);
-  const float x = src1[i], y = src2[i];
-  float z;
-  switch (i) {
-    case 0: dst[i] = native_divide(x, y); break;
-    case 1: dst[i] = fdim(x, y); break;
-    case 2: dst[i] = fract(x, &z); break;
-    case 3: dst[i] = hypot(x, y); break;
-    case 4: dst[i] = ldexp(x, y); break;
-    case 5: dst[i] = pown(x, (int)y); break;
-    case 6: dst[i] = remainder(x, y); break;
-    case 7: dst[i] = rootn(x, (int)(y+1)); break;
-    case 8: dst[i] = copysign(x, y); break;
-    case 9: dst[i] = maxmag(x, y); break;
-    case 10: dst[i] = minmag(x, y); break;
-    default: dst[i] = 1.f; break;
-  };
-}
diff --git a/kernels/compiler_math_3op.cl b/kernels/compiler_math_3op.cl
deleted file mode 100644
index 95b0398..0000000
--- a/kernels/compiler_math_3op.cl
+++ /dev/null
@@ -1,9 +0,0 @@
-kernel void compiler_math_3op(global float *dst, global float *src1, global float *src2, global float *src3) {
-  int i = get_global_id(0);
-  const float x = src1[i], y = src2[i], z = src3[i];
-  switch (i) {
-    case 0: dst[i] = mad(x, y, z); break;
-    case 1: dst[i] = fma(x, y, z); break;
-    default: dst[i] = 1.f; break;
-  };
-}
diff --git a/kernels/compiler_math_builtin.cl b/kernels/compiler_math_builtin.cl
deleted file mode 100644
index d5c8392..0000000
--- a/kernels/compiler_math_builtin.cl
+++ /dev/null
@@ -1,82 +0,0 @@
-/* OpenCL 1.1 Math Built-in Functions (section 6.11.2) */
-__kernel void
-compiler_array0(__global float *src, __global float *dst)
-{
-  int p = get_global_id(0);
-  dst[p] = acos(src[p]);
-  dst[p+1] = acosh(src[p]);
-  dst[p+2] = acospi(src[p]);
-  dst[p+3] = asin(src[p]);
-  dst[p+4] = asinh(src[p]);
-  dst[p+5] = asinpi(src[p]);
-  dst[p+6] = atan(src[p]);
-  dst[p+7] = atan2(src[p], src[p+1]);
-  dst[p+8] = atanh(src[p]);
-  dst[p+9] = atanpi(src[p]);
-  dst[p+10] = atan2pi(src[p], src[p+1]);
-  dst[p+11] = cbrt(src[p]);
-  dst[p+12] = ceil(src[p]);
-  dst[p+13] = copysign(src[p], src[p+1]);
-  dst[p+14] = cos(src[p]);
-  dst[p+15] = cosh(src[p]);
-  dst[p+16] = cospi(src[p]);
-  dst[p+17] = half_divide(src[p], src[p+1]);
-  dst[p+18] = native_divide(src[p], src[p+1]);
-  dst[p+19] = erfc(src[p]);
-  dst[p+20] = erf(src[p]);
-  dst[p+21] = exp(src[p]);
-  dst[p+22] = exp2(src[p]);
-  dst[p+23] = exp10(src[p]);
-  dst[p+24] = expm1(src[p]);
-  dst[p+25] = fabs(src[p]);
-  dst[p+26] = fdim(src[p], src[p+1]);
-  dst[p+27] = floor(src[p]);
-  dst[p+28] = fma(src[p], src[p+1], src[p+2]);
-  dst[p+29] = fmax(src[p], src[p+1]);
-  dst[p+30] = fmin(src[p]);
-  dst[p+31] = fmod(src[p], src[p+1]);
-  __local float iptr[4];
-  dst[p+32] = fract(src[p], iptr);
-  __private int exps[4];
-  dst[p+33] = frexp(src[p], exps);
-  dst[p+34] = hypot(src[p], src[p+1]);
-  dst[p+35] = (float)ilogb(src[p]);
-  dst[p+36] = ldexp(src[p], 10);
-  dst[p+37] = lgamma(src[p]);
-  __local int signp[4];
-  dst[p+38] = lgamma_r(src[p], signp);
-  dst[p+39] = log(src[p]);
-  dst[p+40] = log2(src[p]);
-  dst[p+41] = log10(src[p]);
-  dst[p+42] = log1p(src[p]);
-  dst[p+43] = logb(src[p]);
-  dst[p+44] = mad(src[p], src[p+1], src[p+2]);
-  dst[p+45] = maxmag(src[p], src[p+1]);
-  dst[p+46] = minmag(src[p], src[p+1]);
-  dst[p+47] = modf(src[p], iptr);
-  dst[p+48] = nan((ulong)src[p]);
-  dst[p+49] = nextafter(src[p], src[p+1]);
-  dst[p+50] = pow(src[p], src[p+1]);
-  dst[p+51] = pown(src[p], (int)src[p+1]);
-  dst[p+52] = powr(src[p], src[p+1]);
-  dst[p+53] = half_recip((half)src[p]) + native_recip(src[p]);
-  dst[p+54] = remainder(src[p], src[p+1]);
-  __private int quo[4];
-  dst[p+55] = remquo(src[p], quo);
-  dst[p+56] = rint(src[p]);
-  dst[p+57] = rootn(src[p], 10);
-  dst[p+58] = round(src[p]);
-  dst[p+59] = rsqrt(src[p]);
-  dst[p+60] = sin(src[p]);
-  __local float cosval;
-  dst[p+61] = sincos(src[p], &cosval);
-  dst[p+62] = sinh(src[p]);
-  dst[p+63] = sinpi(src[p]);
-  dst[p+64] = sqrt(src[p]);
-  dst[p+65] = tan(src[p]);
-  dst[p+66] = tanh(src[p]);
-  dst[p+67] = tanpi(src[p]);
-  dst[p+68] = tgamma(src[p]);
-  dst[p+69] = trunc(src[p]);
-}
-
diff --git a/kernels/compiler_math_constants.cl b/kernels/compiler_math_constants.cl
deleted file mode 100644
index 4979cf2..0000000
--- a/kernels/compiler_math_constants.cl
+++ /dev/null
@@ -1,23 +0,0 @@
-/* test case for OpenCL 1.1 Math Constants (section 6.11.2) */
-__kernel void compiler_math_constants()
-{
-  float f;
-  f = MAXFLOAT;
-  f = HUGE_VALF;
-  f = HUGE_VAL;
-  f = INFINITY;
-  f = NAN;
-  f = M_E_F;
-  f = M_LOG2E_F;
-  f = M_LOG10E_F;
-  f = M_LN2_F;
-  f = M_LN10_F;
-  f = M_PI_F;
-  f = M_PI_2_F;
-  f = M_PI_4_F;
-  f = M_1_PI_F;
-  f = M_2_PI_F;
-  f = M_2_SQRTPI_F;
-  f = M_SQRT2_F;
-  f = M_SQRT1_2_F;
-}
diff --git a/kernels/compiler_mem_fence.cl b/kernels/compiler_mem_fence.cl
deleted file mode 100644
index c17985e..0000000
--- a/kernels/compiler_mem_fence.cl
+++ /dev/null
@@ -1,10 +0,0 @@
-kernel void compiler_mem_fence() {
-  barrier(CLK_LOCAL_MEM_FENCE);
-  barrier(CLK_GLOBAL_MEM_FENCE);
-  mem_fence(CLK_LOCAL_MEM_FENCE);
-  mem_fence(CLK_GLOBAL_MEM_FENCE);
-  read_mem_fence(CLK_LOCAL_MEM_FENCE);
-  read_mem_fence(CLK_GLOBAL_MEM_FENCE);
-  write_mem_fence(CLK_LOCAL_MEM_FENCE);
-  write_mem_fence(CLK_GLOBAL_MEM_FENCE);
-}
diff --git a/kernels/compiler_menger_sponge.cl b/kernels/compiler_menger_sponge.cl
deleted file mode 100644
index 58af12a..0000000
--- a/kernels/compiler_menger_sponge.cl
+++ /dev/null
@@ -1,187 +0,0 @@
-// See http://www.iquilezles.org/articles/menger/menger.htm for the 
-// full explanation of how this was done
-
-typedef float2 vec2;
-typedef float3 vec3;
-typedef float4 vec4;
-
-#define sin native_sin
-#define cos native_cos
-#define tan native_tan
-#define normalize fast_normalize
-#define length fast_length
-#define mod fmod
-#define time 1.f
-
-// fmod is not like glsl mod!
-__attribute__((always_inline, overloadable))
-float glsl_mod(float x,float y) { return x-y*floor(x/y); }
-__attribute__((always_inline, overloadable))
-float2 glsl_mod(float2 a,float2 b) { return (float2)(glsl_mod(a.x,b.x), glsl_mod(a.y,b.y)); }
-__attribute__((always_inline, overloadable))
-float3 glsl_mod(float3 a,float3 b) { return (float3)(glsl_mod(a.x,b.x), glsl_mod(a.y,b.y), glsl_mod(a.z,b.z)); }
-
-inline vec3 reflect(vec3 I, vec3 N) {
-  return I - 2.0f * dot(N, I) * N;
-}
-
-inline uint pack_fp4(float4 u4) {
-  uint u;
-  u = (((uint) u4.x)) |
-      (((uint) u4.y) << 8) |
-      (((uint) u4.z) << 16);
-  return u;
-}
-
-#define OUTPUT do {\
-  const vec4 final = 255.f * max(min(gl_FragColor, (vec4)(1.f)), (vec4)(0.f)); \
-  dst[get_global_id(0) + get_global_id(1) * w] = pack_fp4(final); \
-} while (0)
-
-__attribute__((always_inline))
-float maxcomp(vec3 p) { return max(p.x,max(p.y,p.z));}
-
-__attribute__((always_inline))
-float sdBox(vec3 p, vec3 b)
-{
-  vec3  di = fabs(p) - b;
-  float mc = maxcomp(di);
-  return min(mc,length(max(di,0.0f)));
-}
-
-__attribute__((always_inline))
-vec4 map(vec3 p)
-{
-   float d = sdBox(p,(vec3)(1.0f));
-   float4 res = (vec4)(d,1.f,0.f,0.f);
-
-   float s = 1.0f;
-   for( int m=0; m<3; m++ ) 
-   {
-      vec3 a = glsl_mod(p*s, 2.0f)-1.0f;
-      s *= 3.0f;
-      float rx = fabs(1.0f - 3.0f*fabs(a.x));
-      float ry = fabs(1.0f - 3.0f*fabs(a.y));
-      float rz = fabs(1.0f - 3.0f*fabs(a.z));
-
-      float da = max(rx,ry);
-      float db = max(ry,rz);
-      float dc = max(rz,rx);
-      float c = (min(da,min(db,dc))-1.0f)/s;
-      if (c > d)
-      {
-          d = c;
-          res = (vec4)(d, 0.2f*da*db*dc, (1.0f+(float)(m))/4.0f, 0.0f);
-      }
-   }
-   return (vec4)(res.x,res.y,res.z,0.f);
-}
-
-// GLSL ES doesn't seem to like loops with conditional break/return...
-#if 1
-__attribute__((always_inline))
-vec4 intersect( vec3 ro, vec3 rd )
-{
-    float t = 0.0f;
-    for(int i=0;i<64;i++)
-    {
-        vec4 h = map(ro + rd*t);
-        if( h.x<0.002f )
-            return (vec4)(t,h.yzw);
-        t += h.x;
-    }
-    return (vec4)(-1.0f);
-}
-#else
-__attribute__((always_inline))
-vec4 intersect( vec3 ro, vec3 rd )
-{
-    float t = 0.0f;
-    vec4 res = (vec4)(-1.0f);
-    for(int i=0;i<64;i++)
-    {
-        vec4 h = map(ro + rd*t);
-        if (h.x<0.002f)
-        {
-            if(res.x<0.0f) res = (vec4)(t,h.yzw);
-        }
-        t += h.x;
-    }
-    return res;
-}
-#endif
-
-__attribute__((always_inline))
-vec3 calcNormal(vec3 pos)
-{
-    vec3 epsxyy = (vec3)(.001f,0.0f,0.0f);
-    vec3 epsyxy = (vec3)(0.0f,.001f,0.0f);
-    vec3 epsyyx = (vec3)(0.0f,0.0f,.001f);
-    vec3 nor;
-    nor.x = map(pos+epsxyy).x - map(pos-epsxyy).x;
-    nor.y = map(pos+epsyxy).x - map(pos-epsyxy).x;
-    nor.z = map(pos+epsyyx).x - map(pos-epsyyx).x;
-    return normalize(nor);
-}
-
-__kernel void compiler_menger_sponge(__global uint *dst, float resx, float resy, int w)
-{
-    vec2 gl_FragCoord = (vec2)(get_global_id(0), get_global_id(1));
-    vec2 p=-1.0f+2.0f*gl_FragCoord.xy/(vec2)(resx,resy);
-
-    // light
-    vec3 light = normalize((vec3)(1.0f,0.8f,-0.6f));
-
-    float ctime = time;
-    // camera
-    vec3 ro = 1.1f*(vec3)(2.5f*cos(0.5f*ctime),1.5f*cos(ctime*.23f),2.5f*sin(0.5f*ctime));
-    vec3 ww = normalize((vec3)(0.0f) - ro);
-    vec3 uu = normalize(cross( (vec3)(0.0f,1.0f,0.0f), ww ));
-    vec3 vv = normalize(cross(ww,uu));
-    vec3 rd = normalize( p.x*uu + p.y*vv + 1.5f*ww );
-    vec3 col = (vec3)(0.0f);
-    vec4 tmat = intersect(ro,rd);
-
-#if 0
-    if( tmat.x>0.0 )
-        col = (vec3)(
-            0.6f+0.4f*cos(5.0f+6.2831f*tmat.z),
-            0.6f+0.4f*cos(5.4f+6.2831f*tmat.z),
-            0.6f+0.4f*cos(5.7f+6.2831f*tmat.z) );
-    
-#else
-    if( tmat.x>0.0f )
-    {
-        vec3 pos = ro + tmat.x*rd;
-        vec3 nor = calcNormal(pos);
-
-        float dif1 = max(0.4f + 0.6f*dot(nor,light),0.0f);
-        float dif2 = max(0.4f + 0.6f*dot(nor,(vec3)(-light.x,light.y,-light.z)),0.0f);
-
-        // shadow
-        float ldis = 4.0f;
-        vec4 shadow = intersect( pos + light*ldis, -light );
-        if( shadow.x>0.0f && shadow.x<(ldis-0.01f) ) dif1=0.0f;
-
-        float ao = tmat.y;
-        col  = 1.0f*ao*(vec3) (0.2f,0.2f,0.2f);
-        col += 2.0f*(0.5f+0.5f*ao)*dif1*(vec3)(1.0f,0.97f,0.85f);
-        col += 0.2f*(0.5f+0.5f*ao)*dif2*(vec3)(1.0f,0.97f,0.85f);
-        col += 1.0f*(0.5f+0.5f*ao)*(0.5f+0.5f*nor.y)*(vec3)(0.1f,0.15f,0.2f);
-
-        // gamma lighting
-        col = col*0.5f+0.5f*sqrt(col)*1.2f;
-
-        vec3 matcol = (vec3)(
-            0.6f+0.4f*cos(5.0f+6.2831f*tmat.z),
-            0.6f+0.4f*cos(5.4f+6.2831f*tmat.z),
-            0.6f+0.4f*cos(5.7f+6.2831f*tmat.z) );
-        col *= matcol;
-        col *= 1.5f*exp(-0.5f*tmat.x);
-    }
-#endif
-
-  vec4 gl_FragColor = (vec4)(col,1.0f);
-  OUTPUT;
-}
-
diff --git a/kernels/compiler_menger_sponge_no_shadow.cl b/kernels/compiler_menger_sponge_no_shadow.cl
deleted file mode 100644
index 27b059a..0000000
--- a/kernels/compiler_menger_sponge_no_shadow.cl
+++ /dev/null
@@ -1,123 +0,0 @@
-// See http://www.iquilezles.org/articles/menger/menger.htm for the 
-// full explanation of how this was done
-
-typedef float2 vec2;
-typedef float3 vec3;
-typedef float4 vec4;
-
-#define sin native_sin
-#define cos native_cos
-#define tan native_tan
-#define normalize fast_normalize
-#define length fast_length
-#define mod fmod
-#define time 1.f
-
-// fmod is not like glsl mod!
-inline __attribute__((always_inline, overloadable))
-float glsl_mod(float x,float y) { return mad( -y, floor(x/y), x); }
-inline __attribute__((always_inline, overloadable))
-float2 glsl_mod(float2 a,float2 b) { return (float2)(glsl_mod(a.x,b.x), glsl_mod(a.y,b.y)); }
-inline __attribute__((always_inline, overloadable))
-float3 glsl_mod(float3 a,float3 b) { return (float3)(glsl_mod(a.x,b.x), glsl_mod(a.y,b.y), glsl_mod(a.z,b.z)); }
-
-inline vec3 reflect(vec3 I, vec3 N) {
-  return I - 2.0f * dot(N, I) * N;
-}
-
-inline uint pack_fp4(float4 u4) {
-  uint u;
-  u = (((uint) u4.x)) |
-      (((uint) u4.y) << 8) |
-      (((uint) u4.z) << 16);
-  return u;
-}
-
-#define OUTPUT do {\
-  const vec4 final = 255.f * max(min(gl_FragColor, (vec4)(1.f)), (vec4)(0.f)); \
-  dst[get_global_id(0) + get_global_id(1) * w] = pack_fp4(final); \
-} while (0)
-
-inline __attribute__((always_inline))
-float maxcomp(vec3 p) { return max(p.x,max(p.y,p.z));}
-
-inline __attribute__((always_inline))
-float sdBox(vec3 p, vec3 b)
-{
-  vec3  di = fabs(p) - b;
-  float mc = maxcomp(di);
-  return min(mc,length(max(di,0.0f)));
-}
-
-inline __attribute__((always_inline))
-vec4 map(vec3 p)
-{
-   float d = sdBox(p,(vec3)(1.0f));
-   float4 res = (vec4)(d,1.f,0.f,0.f);
-
-   float s = 1.0f;
-   for( int m=0; m<3; m++ ) 
-   {
-      vec3 a = glsl_mod(p*s, 2.0f)-1.0f;
-      s *= 3.0f;
-      float rx = fabs(1.0f - 3.0f*fabs(a.x));
-      float ry = fabs(1.0f - 3.0f*fabs(a.y));
-      float rz = fabs(1.0f - 3.0f*fabs(a.z));
-
-      float da = max(rx,ry);
-      float db = max(ry,rz);
-      float dc = max(rz,rx);
-      float c = (min(da,min(db,dc))-1.0f)/s;
-      if (c > d)
-      {
-          d = c;
-          res = (vec4)(d, 0.2f*da*db*dc, (1.0f+(float)(m))/4.0f, 0.0f);
-      }
-   }
-   return (vec4)(res.x,res.y,res.z,0.f);
-}
-
-// GLSL ES doesn't seem to like loops with conditional break/return...
-inline __attribute__((always_inline))
-vec4 intersect( vec3 ro, vec3 rd )
-{
-    float t = 0.0f;
-    for(int i=0;i<64;i++)
-    {
-        vec4 h = map(ro + rd*t);
-        if( h.x<0.002f )
-            return (vec4)(t,h.yzw);
-        t += h.x;
-    }
-    return (vec4)(-1.0f);
-}
-
-__kernel void compiler_menger_sponge_no_shadow(__global uint *dst, float resx, float resy, int w)
-{
-    vec2 gl_FragCoord = (vec2)(get_global_id(0), get_global_id(1));
-    vec2 p=-1.0f+2.0f*gl_FragCoord.xy/(vec2)(resx,resy);
-
-    // light
-    vec3 light = normalize((vec3)(1.0f,0.8f,-0.6f));
-
-    float ctime = time;
-    // camera
-    vec3 ro = 1.1f*(vec3)(2.5f*cos(0.5f*ctime),1.5f*cos(ctime*.23f),2.5f*sin(0.5f*ctime));
-    vec3 ww = normalize((vec3)(0.0f) - ro);
-    vec3 uu = normalize(cross( (vec3)(0.0f,1.0f,0.0f), ww ));
-    vec3 vv = normalize(cross(ww,uu));
-    vec3 rd = normalize( p.x*uu + p.y*vv + 1.5f*ww );
-    vec3 col = (vec3)(0.0f);
-    vec4 tmat = intersect(ro,rd);
-
-    if( tmat.x>0.0f )
-        col = (vec3)(
-            0.6f+0.4f*cos(5.0f+6.2831f*tmat.z),
-            0.6f+0.4f*cos(5.4f+6.2831f*tmat.z),
-            0.6f+0.4f*cos(5.7f+6.2831f*tmat.z) );
-
-  vec4 gl_FragColor = (vec4)(col,1.0f);
-  OUTPUT;
-}
-
-
diff --git a/kernels/compiler_menger_sponge_no_shadow_ref.bmp b/kernels/compiler_menger_sponge_no_shadow_ref.bmp
deleted file mode 100644
index 133dd1d09a0c16373f3bbd76d6a7f392524f916c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 196662
zcmeHL%dK?HZIs|79D*Z|_x8?!_g*>>r{zGjR0P^N0Ikd)1PTR`&3>ITbEXf4t3frp
z_~>HIy`S`N|M{0c{nMZR_|ISDzyI<F__O}^&wu*oKTh%=y;oeHr9dfA3X}q+Kq*iP
zlmewdDNqWO0;NDHPzsa+r9dfA3X}q+Kq*iPlmewdDNqWO0;NDH at O%aS?{EM6{2^<?
zQs52+#Qf#|JA|#84_82)kI#osTjP}iS1AC`Gq|dF)hPuYs{k9`<HwF&gOviC3V65s
z$YzU5F9jZ`fcJST^1$J1q*7p6fzapw{U84-KjD=GmwQ!WDexQxLVK(8%m2?=Q%!QY
z0-^II$mUOe|JR>@%QsR5Kchg)`5K4+b6WZTGs~(j7b?)Tv=H*&`CQ?`!Kzd#aJK?%
z-F>WIle=fG`lZ0W0{d=nRoI`cDwG2EDd2rO{?8kq8%FLMzABdj%L;g}j{gr^pBqN%
zpFqposl at vf@Lq-U6?no<<i3Yg<x*fuftHPz{Xh79nHsXlrNHG1w4AST_&=xdEm8z<
zJj9njrwWz=g9?O(G{KgK|NX!IM}7=hj%@x`uE`plwrHimRSFmfP94?xBmPgy@>k=k
zM^&9tpsPUQ$?g?9KlgvPRQbQVsUlpifVU<4(BC5Bo!|05Ql`M=FRg;504w0#D9+a(
zf5nlO^Y{JFUp*eRa4B%10&Hern4e9ETLroEFZ938aN(1yR4E_|7(eq7{^ua at i1YXT
zukECcf?8QAaFqgZatrMI+Sl*SRsPorrRG&{uR3p5pk?^+c<Yxx{$#NK@!Na6e#n%X
z5`XjJ>g}5fguYq`4*FjlJMt$$jh&ByFVUs~mHtizyu0*Qw2zNOru^S3r~?d+0sl+2
zcW$s=y{3S--<0uux<p$3mpF>EV|@|O06d2y+EF8GI#kvR6<`Yi!*T);oC1mebK9c}
z&!8ArAt?X9(7iiP4qc?d5x;S||C+S?&sjN!|8tt$qC0=Hc9f~yvlZw%YMjt=srUbQ
zO=ZH>-9#|!Pr%u}-G5!zOH%}x9}Yx1`yavkfDTap-*?EV6}<PnX+0;8bp4;FUwF&@
zmv4bqK6RD#t|<k)&D6I(J{4Ijg0IX}uP#~rFSPm-Fy)Q2$)Rm-a$wktgXpV(uP(&!
zzkVam-fz9Gr9k4STkY5CYs|0aY>{{3>i_yDP|Fy{$8+;c8E=Z*?aN<*oV<C9KLJwb
z_;uF<p}?AL*e$34uOhMu_6ur-kul7RpihB=6)?sSx0r}Os!xntga)sU6!B%l$WEz+
zdE`+T<KU&&(?kI*S^?Z*;(TQ1C;sP at uVB0dU~mlfzoe8;j#R*#q3aXx{LuftauU&|
z31RsP&jA=LRsKKH at OV_q28mBv&No(RRSx55Cm<wj2D$!h3w{@LEAZ<I<c<nWk~m+l
z@|vyN9dov7nmAgRcz85#Xa5WT*Y{rYhf5y`CjM80jTG at 5m~*FyFUt{QX}<E9$&8g*
z{`p-6@?HB|6AAsVrqxfwA3UPMApZk2*xm!_{<{Wv?d0Awv#txxuff?;W*B(P#JflB
z+odfK{74*mt&4u~;o<hxIlR-5#=*q at a-{{Ce=ElPQ%|^LB<c8zHhAI8$+{Qpn)_dF
z!*&ae!a5w(n)u|aJFqnJWnXBg-+HoN*=)q at z2*N_S at _e`Y4OM7T>0|igJb-b8D2H*
z;06;K48|Pqf4=n?MJ~7KeU<$ylE|w}^%IXZ%Tk}1VE5Q^7yLiy=T at EW0A0f10Npy9
zgrBg)ONR8Tg#G+g9%&`2|MOhF{gz8*P97t~tv80`R`4a(diXP2+tC%bZj*TE+YwVG
zHTmkVfBy#`886SQMerAjYchuI0r++SKinH<kGHU|Yg58+O434{uRopxL(bNeQm{RP
zyan2M+EnChgFW_jW=CDm_}|`Y08?l12=jFNq9B|f`kxDq*OcOHc!SXzz;w|gZl?eb
z`B;-2JQ$YMT_RjzQo4!Yd!V@^6^!k1G&Q-PU~?ND at vau|S*A<35fgv`Q2$_?J@#o3
zU)JF_qPNBvCZ&}HS^~6b(pqw1^$?iiC}`sTXdaaueJ;8P at V7p~G++-NYm$Qp(`Csn
z^vCQjbOktJ3T{ULJP?vY!*kGQ<pq@=J}L?NF0+wbD7lsHTJvD1J at 9GRqqj}V4 at kKc
zu*pL#1512%hSsA at T<wbBY?qL)3QNuK7QqLa<lvDYy8&3e2Zq at _`fpZ}5?b8^)tvg7
zlnSr>b2!441>-6#H5-(Ik|H(bQ?aR_R}wtfZ%=!gSpkk%Jp;7|I9;IpaMwQ9n7nmF
z&DmkJBR|JrQ(2G7 at zdTBkzQK%X(l;!o at 9x}8+=T%_=@esagSS8Z^g$e`(FGIkGb-F
z{+GUfFo__3s^6aWu5b$)^xi-u$>J+`iGv2W9NvwO6gR!}h*yLFW!e0~3`;EsTLpC_
zE&DX9963*GgP}KgJFP^Hi-q{exNGk&L5eGf%Z}jWX?kUxKl|$O8A7JCleo-qq~D(Q
zC|&{EwPh0K19KvREzmW#5TxJ;?I!<+Z*M(kEgpWSR7Sm0{4}>5HV<|uYU>Xo>;buw
zBd!>jEWYx1#L}2VzzAPBz7Zl)1Q>vyHja^g2|!=2rqk+`#t-w`)1CwI)pa;xJG=|r
z0%%s~F>n+NIvE84MiNagJ)(lYHLuH$K0S$O(}ciRtgR&CisMf+%wh9DbJkyiumlJp
zNIa(e5%(GnY62L7KbqN)sKDIH5w8;hum?V|73p>i6VXv_rGj!4$Q4o!v)pr at 1BI6X
zw&p8%mySo&PUC#jUDNStZsiE$DF;Udo}Wk1h(VsBx9BTJ$(2ueGOiTJ=W`5m*d$Q6
z3v at eOni9r+yUY~laIP7QeHcy-<0*5^_GoI_=@GXcU?hwoKxy#591#?JnDHL+9KRYL
z>2A}cuq{1?Rs7XRgbgDYDP{(AF>xGGXZCfdzyR$SFu`D<X#`^kkO<<qMdCvYbJ7^l
zHUU^@!ZBCyqyZ=eU<mn<t- at Hd%naS5R_M|O33!o$ZWd_#5M;@V6w9pw;h$u at hr9)X
zCjgsGIOZy`F{%M1WLznktzs|?V<!375ziU#C at D(DTaep&&O>Z-%oq?n0a#PQF<0<y
z2w;`)mV;^x at Zl2!lwfAqKQ26cswwK at IY?I#a0K%h<2~ddQ20W?2HwGNg#dLpM}YN8
z8eR1SEvTPY)eP%M3&iy~IKuzR0rMfYIb#f{t-FTEh_8Vi&zoGBT!4(nN5$7pj%omF
z3M^#lbC3uf5CJ&Ddrx=;B;8rJ=Ax7U?CuiaJ<pMy$$4hQs0QFU*G8lf3Wi?++yXqo
zIcLlONp;;gj)TxAY<nT_aSgNKTX=ltgo)=cNch)Ywfrx`m_}#V at 4K&nq+VWJ<)CE}
zHo0;*vW8o>M?4>O at Rnb+EX!c8kS5QOxVDB+p7~wpoYCE at IvasoI1yV@0FH?#M@{hr
zSUm(h!!pLS%M~^gNBl2Cp5egnzG8Dzk}iwzMT~FZC=(BlAS>{k(D at P+rk?~6t%l>T
z0DeAZmbWPWu6YjV4oPz`YaZU3U`>}#6K@^CSKw*pD*%Fjg(>9;Pm9RFGE)90KsZV`
zz=2<U!pQ2`KO=nQz>ol12gfex^7R+KspBW)`2~Bz(;_^iVtym0RsYNJi~jlb)(|rR
z at K3_=SG=-MVm}GySKtYEM;7`@3QxrXO5EK3x(UBHKa1SLx;~?Mi>z_p*N3qm4D&1S
zgqtEeeT~|zp-hY0`X|uNcju<POIhC6hp~SYeCV%kil8Hdsa|lnW*H4ps{RRdiT|-C
z2)hZ)zPd*lpvxH~Y)*bjI`lMPytpJ9GCv<z;{W;+u>2K(j93#Q3Bd21gu}}k!8*VQ
zQ#rzKk&~%Db_G2R$OjN|LNM<Iv;6-V|Ld<B{e<`mbjutx%jzEClbi{ff{@H(d<&a7
zam?ot8WYUXJQmFI|C;|Hpl%0857_ytHaOTUFUxFd<cK<5GMEZHAG3WI at SKB_XiAIR
zdTIH8)Bi2OjqPz{KDNw3v#FL**JzTJ7vxDU!QmUbl_jgoF$8U7f;h^pQB1BRh~G$S
zHh66og!KSc4*~OaW%9{EvnFs%T#B2BFim9k2s7|JYZzk#tks#yl3t##LHYD*=#{?u
zwN74mxEGltq3tCoYOCN%)+0wWZq@{v0KU>L9JvJZLv}Eat$3%}V6HSum|h<xm;YzK
z0*S~i^J|<FTg&1#v5Pp)T{u34wYW*)33o70u6U=~X08k%70gTJ$Yp0e at Mb>iW-vR`
zV?z#)eofw}rm{~#L~?;W;M;JR<)F^YpUb886J-o3;-7CSzuD5`Z#SZuqj9D=8nQq7
z9chG(DiJxF%5n^I)q&xa2K@||M6 at q|UQ%|gh>RhLp$J at X+yifBvSJ>4TXMwnO(fir
z52~-Yvf>s~_~y#=9XV>#5vFja$b&UEX+{A(a?Llpdi?FIm|$5nBHoZD0%i+ at JMuww
zmwcM~ax`Qx{kmH-m^dmZFt@*TG~&pS=O6dLo0(7y#z4fokt3ibz%M9_a9NK{ip-gG
z%&+i9fSmuRTmNv07;$u9Wxm<fgKy{kswFsLtf&M8nc2c-JFO#XhJdqLjRxcT1pXXM
zd;(3zHe*PH#Sv@>gEn|A4RXN}hzMXeg5bBnDU8i(T1V~@V!u}IGKKjSil@>OGA2(r
zn^%5djTm7ih(@n9_Ta-Il-CvuRluquD+gvTt)pp#<At`zocc`u#MK(Wv;b>$2D8i-
zLP?o3XoGjsa?P<&0Xb7{;V5Q?+wnneq?n70VC_E6WQUAo8IB*ABZk~MhKjYwh?~j1
zm=a;~JB>Z~Y6ukq*=ZQ}L98;_j&j0%!92cl9^t;Gb)L9(i#c<U7vG%OKhsOf0}MLh
zoir9|2V<wE2(Jbl4k|WT<44p~FrGNY%-!y9TgA<^IJWp27g|o}>iJG at kGwh;cKkM6
zrP&KO0yb at r!MLVi#P at -B^?0P!-As#Pi$54QI(uzLobW=<pu9 at cWrZoNJ(|6=XkpF4
zAZjM#4VGfsxYc<8WN|6ROlHiS5DQu3(!vvr&gK8X at 3L1ij7)8cE113T)d<GY6Y}zG
zNlm$elS9Bw8H3y^&Sb_dKH@@FZ2XV7ky?(*SHhql-bRDGIl!iJn!okGh&;zf&<@M>
z97IMqAddq$xdnJg#>#IsVkYAjA8{qi(bSi?a&rF*=WX8Zz8Bhd0XEfT?i0`p8{e<F
zP@!dej+;^Ch}%|2lhUI3IMguy7p7b(-+Tp3k**)!Mlkw7;V|C1HRS!HHp1tA!L<r-
zat>t97GbS#D~t6vUjez&ECI<^;BEHqz86xfwvZ8VsA?j&9x;r9TYDwNTdp3DC&kyU
zu%MRzrL6HkQUrAU at HPUrpiYBUh+hsy8iDhHd6EZ?`@F?Wif>+_qt;=ejQ_dO+w7gc
zmz9C#ICw2a3tm>(qDu&~E)T+E%i!{nP>@GL5P-h|8Wg^Q+!C+4g<NnZB6k3Ed5FF7
zMjZ at C0QT4#MybmI&*O_5|H}i*|Ng5D-9BSTwOPw-80Is8hiQ$(9_wN$;yL%dg?oiv
z%vV79!t^$HXCxGDGbkQNDzN1e+6S(95 at 6q#Jtj0h4q{*P!U)gc%NqX+LHP3dPPhA4
zd&QO`u#kXO5pY_BJdR!Gw82{p!@%dFsQ_hiWCZ(~7e;shE-Rzz5nlm43SWUY!wVy<
z*e1?hv{Rf{tazsya(Q52+yZcS&^Xw|D0K(m?p$9+)noZT`ChYPn;72MtfT3?R*&-*
zSbdj<nH7Y5?hZZ&yErU+Rgk;4YU)=&Z<Q}Nam7onT5>JKVGIEa=}6&iCK!AMvokPX
zF;@fTF_6N+1f$4(fV-P6GOb4VPk{0z{t}ZX&opu+N9?`D=@MFri1Qv3tc{QbfB{+r
zFaZXcJPf*UkTHsX3?$uUT8v at -1V}tF#!IdsP7bhi)-z98xaB<>%mXMk^}7VapE`!a
znBY{w%gH=UtGM^SFkj;H at R=>4e4O3oZ?B5*5<{Gf!B>i}no8>UVWfowFKn?{iYH7;
z$ydPKhQ at eF&`2RiS*s6f{Bl#7M!dlshu+ii_|w$iIr2O^bw+aWgb^}0W<n`~D+L-+
z|0|Xh0WYz7_)JJ7I_M7~2IRMfymsUbcCl}PCwyR3-+eP;hF^OEM3Z5pf*A=B`3e9F
zCp5+zf~=1U&a&|BXE4?`0{lq&1RsBX1mYVoJ2`aIM6*pC%|C(OVD<2gEH9Mj;D<5R
zHv&F9+pX;&z6agDaJ4d3I>qKHDHYn|_#gyf*%ACa7_mJ#pC9kOj;z1I-KNS1jrEZ$
z#1;66#*epp_&|tbG(`LkpuNJ5*xd-YW423bwmg;;XH5)Fvh>O;sp`q?_#~k{&JK2k
zZ4qG379ok}%SB}Y%H)W_Nte%G<?rgwW77FJm}_XFm5JoXv#lP!E*Hey8t>`Ra7K>F
zW=#ubnycmRBNNVYcuwF;ifFZNsgNcTX`<Zb6+j40a&R!0MQ=mnAsAMGo~>Kmm#3ku
z0?-tgTRDdHKOZ!6>Tz}qQ)D51HpTM~wz_|sf4+%$znO^P^9Ico9}}9X&rE+M5ia{h
z%yR;NcpmB7?Wi2+=2N^$4vuu?GL|z(qn;e`lT^+*z6JRHN+L<4PhMe22A>>2dr9}a
zsS;F4&y?GP-R_^}72t^RTX<ytC95}GxF%n5-wQFfn<~qRz*7}INmeD%Q3eL~COJ5Q
zSBHT8*20{Ky|bQ77{Os9tvr&x%;Dh|+WB;eEDv)@Vru}6o38+OJlOF3G=6f3Lo0I7
zWU&X#)%cO?3m#A0Wb*KerwVfVRN}2<nabDKpz7>zCBh~-7>94?ps}JqG8qQo;4Ds-
zGFxhvkNE*+D?E^|Ru2a=QZw^l&-2qlSrGJY_YsgE2xe^zKEMMXH9Hc!+T>!J8fPY(
z<W$URgd2xG3E(0R!FUV6;9%eb3?@FACU0qthqZ=;Q*DoT at vFm)Lmvg;AkGz at gE6Oq
z at xe@@9LIAX%gja4Rr2t7HGFa^z^i%h2nvADjsKM|K_)*3^K-Dx?s&-RGJlSch~WK?
z*PUv6eHWf70IO%AjQQorG{GPCzjo)bTiDFmqWx}M9ym38!Y}`ek}wRb`VjwPHU&Ik
zhz(zkA?>$<{!z>CGKuB?mJ^Ks%?jkUm3VF3^z9Zme6#Lu`qK#hIUHG-)(C<vhouhw
zCs6oa4ni3Q5TBX%VYCD2_8Mn)OFe{u7cp3#O^TRY-LDDi at l^kZkL4hH9+(N67^}?d
zfTkcPAAIXgyZl&Rs{HT8yu<U_Wy;c1WdDkXMEDg?7|DDE;D5v=B6G^|wZH%GTho*o
zn2hb*H`|4k&E$N%u*+I0ucR8 at S3A=G{+Sm>ytbzJloPtuOz}q@`K1OwWKNdXd<Aek
z?<;VJ_`KhwKGRtIB<0tye&v}kyb6wE`M>MHaaWHsyG=hyz}WXSMGG;W{&agGg+VvV
z5G2<`<S0SRQ2zJ&m<a11>IptG5qu`#Q5jz~EqtDUq!*85aFXS(BsUD6>VN;(B*Mb(
z(~=60y<!CvuZ^0RJikiXVYY<Ry^<m=jtr((C;bU%JvNL(;Y1}#9HfOUP7UU+p1QqN
zqGYo#@qePgps@#Ox9%}7&J!l@&5O+5PMN$*p6x!%_p+Slf7XO8!EweT9Oge0^D7vC
zX4<Z?#|fVq7+rKQIUe)xA3RL}oWMcGAPC_2k79k!SB4*Vc#AnZ_9eS3|9{al$;PqV
zg!7pzOahSfZF$?rlOp*Q#$b at A@U3L=QLxOWku&}T;B{;IApKi_#|Hk^Fwz$@Fi7UP
z(CV!&n50EW;*x7_Px3!M4J!F3Gwqr9r-z at C^y}NvFRYAl!0&%n{_Db;VeXj6{Icba
z9?Jmc$8$aqF*D%!f!5qY`r at d60uJ*(UiV#q{W4e{$rwI7wu<urz%BCKaUJ09E=heE
z0JrLYIsWul0MB_QSlD=I at 4?_FMOb*+RpV)E^EpynQar8v?=@*fpm~dMNqo at l3GI?G
z!Xi+BLCCx{cwzVQ|KO%rbKt?;1zKY7!K;O)UrZ56ztX+@{}tJ}seYR{!g$c_O5?;X
z#<v)tn{pumO&MHRKPe?0ar?Xe#}k$TD-XO}Z6Og&8H9DhZ$ZeM3U>QWReJ(iUeq1K
zaDMbF(0%3<L7gy_@=P);eaU!#{rf-or&SY80b0y%Jp867f8EfLLEc4}LeNhEKk9!O
zyZcONk~6!v;ZnjZbYu`RFAs7@;K43z@*KAc&UOqX?FL)jcjCY6e=~U~0`?*xB=}%=
z3x?n;NMyWSn0{+8clgNd=6FWHspDpApKe at q#?e1>JTkQoCXcrmWb&66craIJBTnve
z&{u#Vk5A&6tlKR1)pjCh7(RK$jySWc0e`3ILasPdjcP2K#KH8&#ud_A#f1<~t9<?p
zX^<-fVM-F at c8U|STnR at BiFppY3I!R_EnE<SVc8@&(y^7!<}_H!nur{=S1aDS1)oPn
z(1UPV$qnNi6b<?K6?~Y<2cPp5sn?o%zl}#)4j(l3AWi34dtI2teHDka{h$;dG|a)Y
zeHl^V*2Rt69!#AFM*yA^K at ULlSFH%7XaT9&y1Foq$-C_iHul2P@)fA6IcM{h7uVWd
z%X?v5iugEp at wfXCF9LV;x7S8my0yA2_~Z>KUM?)rUwuBZ at 6uZ<TqOuJ2e_&->b$|s
zn{R|xn*d8xuvtyhZ?*Ae at k<_<7t#MCBH=*u7H88NZ%c2<DDh2K<Ns3%|Bn&uvDIbM
ztIO$$AgwEYON)az%aUO50i+9X0^Vle3*YNi9nm~lqQCMjx{+lkCyCvrY-z>alrF)m
zkw>}(L&AlAcyp;x+dP<W)8FRR{B7dr at XA;CSOi}m-_h&95zjXfR0c2vIlkGqcf8#z
z4Dl5h0xuNUaPlM9_e^%Xza5E4{Sn&dIia2-W8AU#s_7LN*+s%(V_$B<+2Z(ahQPmK
z*_^)AY{W03B41aawZuDoGVATuY!VOM-U=plMy at b+PX78TYk*A!^8F6pUjD^_{ldzj
z=ch(R{XA<^+e-f}1rjreVUpX{l^Qj?9duxr8wOEOLC7(|-`Y-1`$+|iRq|u_3pott
zb&^}QcS7T<Ps&xj4px9o#n}I*4LzUy6+pGJ_rd-->1lB6ESPopNut$Tj#R*W1*RN+
zq#*UEH!Hwjhd1j`Z!ZN(fl{CpC<RJ^QlJzl1xkTZpcE(tN`X?K6etBsfl{CpC<RJ^
zQlJzl1xkTZpcE(tN`X?K6etBsfl{CpC<RJ^QlJzl1xkTZpcE(tN`X?K6etBsfl{Cp
zC<RJ^QlJzl1xkTZpcE(tN`X?K6etBsfl{CpC<RJ^QlJzl1xkTZpcE(tN`X?K6etBs
zfl{CpC<RJ^QlJzl1xkTZpcE(tN`X?K6etBsfl{CpC<RJ^QlJzl1xkTZpcE(tN`X?K
z6etBsfl{CpC<RJ^QlJzl1xkTZpcE(tN`X?K6etBsfl{CpC<RJ^QlJzl1xkTZpcE(t
UN`X?K6etBsfl{Cpc#Z=95BL<+g8%>k

diff --git a/kernels/compiler_menger_sponge_ref.bmp b/kernels/compiler_menger_sponge_ref.bmp
deleted file mode 100644
index 911289fdffb7e376bf0f205de1eb3b1243f5731f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 196662
zcmeFa1-#YO(*J*d|EuKb?(XE!4T7MEh27n)fB_0B1_rj+g`!}0cXzkmPH*>pZt{Q6
znzhz<efQo6(5v?<XZu>udG>|FiSPc*tk2ARW at gG}Bfs_SZ^?fn`M(x<@&EMy{@=Gs
z<bUy>{=L3Ve at s7t^b<%wf%FqdKY{cUNI!w}6G%US^b<%wf%FqdKY{cUNI!w}6G%US
z^b<%wf%FqdKY{cUNI!w}6G%US^b<%wf%FqdKY{cU`1(JALk`;M>;FThf5P+=_$r>j
zqLU6i<>bS at im#mhn&~I-b$$W{`G=l*@?obgI($fb-Pid?P5*4^C-5acfkh`BqHh1x
zMTebs%HgM<dc at R8!@tC at pZ-$mC-C)r0w<psAs at GY+9^i>{>7&qdCJL$cDJRkfUoD9
zmj0=}geTyTFKpi+U)=uUQ;!7vXPkc2nTwC=PE(*S;W4Mb#MkZ#fP4pjkZ%Z&bNhmP
z0sri?&X_%<qyB66qo;qM^b`0Gp1?^94|d46aV~7XqoKT|rsNFk_67N8pE2j`Gw1Yl
zG^8oefAFx=|MYA01RU}swh!_<8_S2bR&_U3wAGbDc+L{HFUVhV*4%T>nme?!Ax(k4
zMsH#INBKfe;KT(7JMcsG4~6h(oSQYMe|vq|kmkysma2}1GI9GL|IE1p{<DuhcgZos
zx*CVH*LStnexYxh{zvI2 at IQV6#~!nfLw?NdYn(fHK)>w4{kZ}>;jzd!;6Lx2V>g~U
zI!%H8$8TZ!+kc at aFn(-LZ*E`Ho5Z=f83Rq6YYC5c`{yk=2JoMM?r|qCJQxZza!At`
z`VrFqDE$QfH&5Wi1qb!&_D}QaO&{kv!sFcj`R5*c!MVp>aNfKN&z}bc%E=gzra=Fj
zH!}TQKj#xzc)~%+ZvV8Ps-=njc$|B*vVHOS#_eBl-f<xRqVwlpbiw at L-HmAq^f}*z
z^r!z1p1{Hr4)ktcGn|c8MPAGxC9N>M8IN;4;SuB;w-53!zVP^^7al*Ny9o-^(Olix
zQu9Cft<v8z{RGzZ1Qr~BpmF=2^BhV(hr~`(b+H#Sq;UJNom7NJkblAP0{)9mxa8s!
zMh<C)0%Z*7m!?2#dLPn%|KENB3ywd)yL~16l(EQUg8#0@^48kYHMsqAj!7mw7Wo4H
z1(z;eFtVpvDNt8h3-sT9d(+>q*C%ko`~#BRKDqtOLH$~5OS&2>dYUV_0 at m#I9pN!0
zfN}_rar=V&%a$&@?2?6>Z9GmX5QVTb1?u(vNdLuu>j|7Ne}8rRNujPNc`^s}r>d2k
zF~DiqOp+&o?Z at 3d_1{sQwZq%0yP7H>JeP{w7vx`l$%$87dg9WHj#mnlE`<HJ-r at B3
zN&N(lpSQnr`%$PH==PB=A5Kc&AwMQ&sAw5o-Zaw1xySlASL?qc+G|F3)N*C0+XwlV
zUwYydmz{Ja=kk*s1*(Svbu`zc{^8PpntlRb*%O$5+<pQ0$#6!YuId at IW5pM?RK2NU
zhU)eSRc+%cTgFs0kAm%+#J)*ynhX#1UoMNGEmfnt>Xh&Z at -IC}z<>G4S6zPc)mJPU
zHMFH5YmjJx+R_y0D|?UAUpUnhIOu>K4Dv1K0r~OtzEdxojum11R=O-D-Ma3nwOx~I
zIwlJKTLu5>_BFAuaW1v3oWTRc?K{F_kbe@$zv_xbS6{j4nk!EkJ+!qbXRvC4I at 4O9
zRBu!I&%TN$5O at 2+d0J{qOm6>>Q%s9`*sf(lUCZ_xhtFsjx>5a*4QsnLsOg+k-9Emm
zb!=tJXsK$s#C{m(UJm#J!gJLX;`TxQHCLT-?Nz6a8P*z5pjv7HU&Sw*{+j70;Ge*}
zWA}@L{~(CEX7z20y6e)7XE^csQ-D3-ZydI9ea|%hXKm-?YP|wl##r#1#C{a#3gIzq
z-w_^h`v&>fUVZ9y*PJ$XcpDT5rlb_8BV7pd?^F84m;D6h9lNhXzHpueCrE88b6`Ib
z`<)Ht2=!yVimp)+Jp&{MoP%~~Peac%@ZT_Wy1fEACUON-wvHved5KHxE8+2OKO{WY
z0)CKx^=ZqlIc?dsr_b7S(&(Wrg9ogy6eurqU|UoA3iz_$_&)#jjyq<b0Q{u)quN&H
zK*?&t)pat->0z(p;@Kp2;5INEKn~l7^O!4Oy1xPp1(GOO)0<(Os~Mgc;SuDE+XwmA
zUwiru*Db#I!ugg0bu|vk$mwdUZBJ96J`dL~@c|rr^gc=8$L&W+&fLs_VV=iiIFHm&
zcfg=bFj>)TOn at t(eFA6~7G$n~+RjOYw|Hz51&_bxs#D`}uFdcy5FXq<$iM!&#ejeL
zvNLYH{tTr+wh-1<$9?oA{`%=J)n}i;F?07e;NLfy at W+#!NqHW66-~R=fWg^=GB}vP
zD3Y9(1$9j>%FW0a*pI`-!AE-qw2oaH!gKv~;`VP?cE<AS0somd-Eii(5p7VQ5k?C{
zA#70p_0trn&w}<#`NfZ(vzLND;5<>1Q^Y(A4_OpV=84Aggn1r1Rt9F|4j7aL{s(2|
z4$jOK7Stvz2(kq12liV}q-#x;Ew!bZ2n`eaSGx=kga at C0&z%=h2)Om;b8lF-Sdo9@
z4QJl8{Hztr&l)$P-BX~9?0mFvX$thEz at QI)k-2mBJbLb4#~!`6=RAyGK&u%N{%Ax)
znCCfNIFFO=+oqMlS$P8oXAd-2fS5p5-r%f!SWt0ZrpJGGb7gBC_ at 4yZkH@*EYKCXr
zkcRO+4P(3OQ9;~(%lQx<LH-Sb{1rEzz4FGh$B*n#3N*aCDI>dpLKs<~*2bzn`1YlL
z<uCjMcG+oD=k_i5$>)Pi at X7dvknksrB8(&ru0{Qvvux8!Ms^{vH&=kLAg%yRAR{Xu
zloB=L|7q{dF08h0KTPbq3=cV_VQtl8y6PqjZ5)LPqNNJLW8A(Vf8|X}ZoX;Bgi#%1
z9R<qFDay<(q7c^Bl*a!T#zLR_hjVA|>A+943*nbMr}A at h`^c4(2!F4f$F^%N5%qFr
zZZQsj;NYC-3Q!Zs&d<mx#7qSFNp9a}c&?EQ5Bi7v%z@~CxB{>OYyr3Lk$=mIb8cCA
z&URZ)@f0X4x0sWrKz$CuU-TEAbJQM5;J4*1<eKDC$nc-Ez!H86yEe&bMiJ7q6-XN9
zVkuFtB3-)Y9f$u1=Yuly1`N)MOdu;y)tjqv`;y)?aW2WF+{^(ed_uy5&%b%a62O1!
z%5#Yb_ at CoPwwL5)jOuBD0&xYTDbN>%Lm&Egvya?85&ZG;Rubot;XEp4i*cSa=0HnS
zqRdzx9nK(Pp7ZD7{6XX3tb&0VIsFG^Vgi!kbYg}Cwx5vL*Ely{kZ%Z&q51*x&jI<j
z-F)8dw{Xsf0u^KrGFc!A0XVb+q$yAzLi6YORgXGi_eAjbUfy!iZgP^->UnfZ56p!8
zjMH$+a0c`Ycz!`+P7yCCY(>&#CuXoR9>@0MiTyKuh9`mW;P!6={DS=R?zr{*J8rvR
z;^<B&5Y+^<Ko}iSMw$YB9z^t&&pq<+-3<8m5YInn&tvB9Ra;)*Q$2x<IVx|tXg8Vg
zi;R=FfG~l4CS|ProD8qwy!e9o=oxVPpwS9AMag4D`>NhtdDGbl*pl47N$kfnJjU&x
z;|Y&-`yl_;^Y6Uvf;(@&VAAMLC=fph6o at FBpqp@;c7SvisIMS<O~2<6hwU1HfA*ep
z=j;VtZ>uXy1^xsLKc4?^R1M4?SHe${(@db1Bxg-oe)ix2#Lf()QqJRKY$E1C#un)r
z0?|InoMEliG(xJ3$GUwI`%=%9l9nd+t=qR$KOj5-^6$F+!n^OdaMGAAC=h0-6bSIc
zwV*)hH8E?##k&9Zhab921pcG;m}62s1h!=LJL=1V3YTx%HPP-#ha{;QWa_ at 1!zmMJ
zWkdr_TdqspavndN!MAHg0?sQ=CQ_iEkz~%ujv8irdKr(c=Z0?orn7PTn&AlukNA8D
z4{jgi-*pGzzlhS<<gr~7M+pUzLfDXIDLM?!f&#(KS{f?X{r5Qi8>V^!haIwW1pXs;
zpY2jTM;);nf=Nu^fc>_!dd@)4<_LdswCmb+-2~e6=+!mT*ci)0-->dcn1(Y5brJ0&
zdw?cMKEJz;dKOoJ$aoUnz9ja8I9D<}N_YhMhVTgT#qA67 at 455hd+)k<=j}Ek1b_mK
z8Quy7TEE|b^(im(A80608vm)lu}=Tlp$G32f&Ylzj*6#x^0Ef)u-yz%^~~GPcdRF6
z_$Ac?q at hVp)!=52hm(198k_d5T+|EaafPk&!W at kh3bO}s1w=BQnA?|<R^awchQ}cv
zs;|hu+adqnyO!Q}_tINdEKv$XAy_F;zX5~#4;TyuYOb$Xr{C)IFBf|PqegT_;6HrV
zBahfEG1Vh_&VA?Erd_M*DQg&3THoV5zYu=d3zB{vzwhSIx>20*B&Q?%GLS0lRdniQ
z)2L`VR!R%9!9OJ}&F#n8exln?$nYrP(ZE66{$03zLH>RBTyp<CmppLqrJe$fHWaA;
zz`^|oW>5%juCGi}pcq8f-T!gOK|6-vuPZM|27dzKH@)X0%NvK6H4OEs9->`8ew at TU
z(Jq7cL&8s^dTbP7*tZhrJXXeLMEfQAS%kXA?HdhSDz|^@$`o-fK7WG|%^M7FhBYw`
z0>UH6zk8`7AMihT-(?$&?G7mrg)r3D+78f~4guC(%<FG<@PRvo;3u|)w=iQfp~4k{
z->Z)4PoYbttZ_KqTTG+XK at DVevIg}dqb`FQdL{fagfn%X$8nxmhSQXE)$P07es69+
z%54%RjP9((^KUq+bs{RD&RRwO{r6s~$Orrn-GBL%aowH*(Gf{I08y|n1UIEw&^l at Y
z2Oh9}4E%@fk~Me$v2Am8F$~{p8^Szil at TG+hl1)-dk at j)Bg+hHyUgl|Qa!yAe#3c8
zl9Lf7<TH~wPhy7CiuRp)(<OOAw{J2$lGv9x_l^q*nbAMs`MClnn=3%w{)6|4+kfc(
z%N}~*@`oR|e9HJCP$06PWPy|dkpiL}z-ZyB(^0^>2mb^1-!2*aM;^YbNGtnGddGr4
z5HpuIj*wQA)-k>tQHA%gpb-3y at Q0pXR!+n-{B{T at F#`S>w at hvmNkcT8K^qlKyO!_O
za&BKVY+;hevHi&H`#2W~M1I!5!kob+c^Okjwc_(1 at W{VkkpIYoS8%3|?|}kM9X~{}
zKyE0+fPooW2u_Cp>k|I=-*?+M_;;3U&tba&esY`W)*{;Dz+Y0^Ra!R$k`L7nOkk2s
zU}&GfpTy@=k?Ki~b`vuEGKUje!|f9zC^J{^_r`fBY<basl;jE1n~8~i$!!+pP(>CA
zoFLy&{Ri>+2Kf&^Ajp68p({D_=I#XrD$W@^!L<WGfk**G6sRtp2>Qkw!G8N}lLGvQ
zM&OSE-gp}e$q at K}GXcE?Oiy~}qyhcb!(^PKjU<2SXgAF8YhjnkJkTV-2}L2Li3#Xr
zk`$cBg}U*Qu9xv7x_y`7kvO+BKPygn#OEvWA2G;(?BT08k3VuX6o{L`QlO!&y!Lak
z(88rh1AU{>zwh2#Cx9R6&Y=hIeAuD8c+cM(_!0K>ADBr#1QQ at CG`E15fJyR5E8>9l
zzpdR{QL1Oj(YCy0hA<2GW&HB-eoBLCm{DC4DU;F+^E}$3?l_N=u{i-}LT*2-=b~gV
zRV{J*_a<d{gz5)`2cPee5BQ&W^ctl=5I?0r80PRU7R1!^f{sWiP-AWRHyQ(d^M~Ji
zudNcm5Aw<IaMlw1nR%r&VTC53J-L_w33;r5D<CP_HMQMXc`L~9J26{9PKM(=W-O0R
zCJFL95$7?zT3*A(Wih<HM(er0s^#3i&28R)uO#*fawEcHsJ;>&<MYMsKk=x5|H;R$
z*>FP72IIOxd)N`lTr7&++7a1Qm&X4$$%gjYa~9y=$9w+$B;d_~$Qbp)T7sX}-K_j_
zny`!sWY}9E?8!CwkLNjwcFi2-^XD;s#7TP0;C(OPmm!=s+Ev0IO(xM6^?>u(P?y~P
z%5%pJkxY*CGj`VcBu{F$@8aCv2#-hplaF2d)Z^Dqn>bXmKt>B^hC;Ls?WiBt$(mpp
zjSB_B%)d!*e;@u?yE~iq+9L({Np&(a1pFVC%=wL;Ic!~r_GsTaB4i}NFrVH`APM}E
z>Y?$xr=>CgzZtx*<t;yfHkihywJn{=WAi)#=g|x&kpj((fFBdU5H!ito7-O_;lbxC
z@}GMAx~HGG4*Zk<(L&fblLg8!bK#&st&NrKO=$}B&9JCFci%E4_zwz;TrS&VIe#4d
z%{9fxyHykjdrV76KGR5y31kurV+h0o2p*DXkK{RNc&G84N-M{gx0LWFX81M9>87!H
zNrTPv1e`}RoCFJmrA%y|IIMBvu%?u5-zD~=I5(N_Bq0BpCzd_)<gz_?o~aaQ(ipUG
zW+;T|h}0dCs)b8aps%wH?7rI;aqw>|*&aiC))M at bz0mC-Yz`-u(0)Y|;viblGjf<o
zMJr-&k~S4KkPad)K%b1ScBvkjL#w^&sR+N3aR!q~qV&GuJYK*_GGFUi#kqsU?Hl!`
ztLIv_A9wqb+w^g+Cp at qn4nCg)@}K2Ab^Q?s?I09rTu6bKizPcEbwN^FV-<z4hMKak
zGY0zR&$inxn*;tm)bsDTl}5Oq7yP-Iq<H!@n`yLR_b#4aO#to`<~cp>Q5nC2pHvSa
zhIVz87UtNFUDLYd%Uit?ei=w*B at HIjHDVsqqN|}Uo}Z~cDqT)U@~qbFU#%G)@Af_N
z1^iE4|J>7 at 8#Dxf0!=nrAU_nsXF-($HPoi@|1~nQU3cCr0sNVR$jPja35e(4fBV&W
z{@K#Q=sAC3P6o*wOdtgR!3XRB?HQDjo3g^?dsqbgZUR3pIudh6g#Tn+Ibpyr<Cg=%
z at 0zw`CXek~iJDfNdfBl33%zt1w=e2Vm*m0iGaB92bA4j}kubv}KHmfm4daJ4D)J5Z
zZ+QM0&hi(YT|Rx%FiU}?9iU?j)6pFTQZ1ZhLDN~FuLt~h-f7ch at RRMq_ab2M;6K=_
zIuG0B2vgzhEzgg84{49;nFr?-rP4M8dQO+>36#vqsUDFr?{?TRI+Jag8P4M~{3JPL
zMORCe45Xr6G0u5>yOz3rFI~3kO_Stl9=U1L at J$#BjT=u%cu+n}8QHSQ_zqRUF$>7M
zeZUX$IWInU<3^K*Z8)(93goqL+795i1JDuNR98`7Q~LFQKp*`ncG_Vk;NL|(|E at xN
z_9WZ0=T`gdwe`OHY_p$oe&hKg at YBY)TJWdrWJ#J>BIR9ZJbQS>^J at cFVv;`v`1d$+
z-tI>nx7*>z+S%h|_}v^%ly8%VH<8RCShlsTK+=$$;S{%jw-xPoPTH|;>{hK~wrn1?
zS<{G_jl)<CGd)P`OIDu at 58?+}#`rGNMz?J|u3d9SSc-T1AfNNn^EYigdAMeQq#eKv
zg-|V=r$A&u2?1If(prfBjp^;U{fwP<*u;asqByr#@E@=P;4i9bx1C%L{3>itn9><$
zdvw_}V*X_C%a#g>YNhwKckoM|Q=4`fFtXR26ZSmnc#nTGnJS8Q^D+mh_y=&}lh=mx
zsM{YhW!J9BJ9SLlzJ2^Qtz%}jjNaT_0W%tgZ4{QYG|sIm&ZW>y$PDsljI&pO5}p^H
zwa5qjFTb#2;|+#Gfu@>5m=1+79g(^wyB;kZalICT>#EaN!2iGm1pGVB+-2uYtIP81
zDhlxVk>}q#@caktfK~_5T5)xU^za(+BW$j(C}i0R1Cu at Hmj>P-)wvq*qiv9=cJKgl
zo0x#Fa4GEx@|*(x{f<3(-=k05d+tKP|Lo)UIBNdxN6f?jn~q(Xy0002@|i0Bp;$mx
zpCqTB$)lb>A=G{O`I~?};2$z|x9$yg?wqtk$M|jK3K+eGy8<@WVy-6kHO_6Qpw2vi
z*cl0Ec|q33W81kSl<=tA2l<>=UR=5F?wdn_%JVZl1;TK&9YB6 at HyW2LXnh+0{{#4c
zOToYEE}QjVe?5X+z`vK$9s~aUO~8vR0im+=BpMTt=?$ihF*j?F3Y%l#cSWwSfj8On
ztFQ;SYGNlRbD$S9hdnGL`45<X>i+Xi5&R!>(mqEo+<VS~y=HR-%;yT&>5#bz8GiDa
zS%dpy0><;(fm9%0Bn^R>2hP(ndJAxlx9^;|eb?lj!N0u%CT!O}&RhYb<O*Or9-POx
zeVf}P&c)=>Kf{8McfMfaTu*pjenH&+D=!N8Uwvui^6O6DX!3AA&18XOC<NLhC=lBL
z7`H3!04+5<_H-8Xe}R4Zo{U)r{3I$_(=d2o{|Nm1Yzz2HYP;#fRf)1OfuWdy at 8MPS
z9^)j<I=Ue_;7twwv*t3-gwA&}pU`R>@cbe84_<J_K_{Gk;PIy&Fz=N8k6UE$&lRx1
zQy>R^>0Z$ce?j(OiFPgFkLELolFg>~mlD-Bjo1YDj+4g(aQL`=oWH*U+Wi$Uk|<yk
z!0*$W1i2g{;)v=y!oyV(BLCHwZhq}$&Mi<NN^DeqqmD>z2QXSVC=mFk_J<a(uBzmJ
z1%tl%eHHw>?YcQ`T<Tm#-m@>Bf1hm&Dq4!F+KQ?>M5tfiLpLI8gD?RZS`|)j_ at dws
zCezwB7C)|pIkbnJyyVc6&N^h_83!*|EcoXNIBt=-0xSipD#_jB$oXbCRRn&`@Y~jv
zSd!CBCb{e4!pauA at NxJI!rK;1V9b_n<F at XYu$?i1UGxgz`hc8B6u=cQVy2d~!o+@<
z;d#l#xq^H{cwQB^ugJgo^;d4;%-CQAApnzqXa`^xI_&@>x*MTDbOa-W5DFx7;VRP<
z=)Z4+lI`48>Ri6atHMs|Q_L&C1PUv~1d461$}rk;W8j|~t)-Azg-Jtu at cc~F5A*y&
zd!p`L+rxFy`STR~$1J(*sMF3r;*@g_Uv$o4C!KxBiD%j?AfP~88I*&$tw^r=!TZ|1
zqR}pd|8~IdT30;bhx6nVRmrIToWiW!B8ZJKfz2_2c4GpyW%+|mpBmhLTu%d60~`qo
zlrpj38{v7)fM1dS#;dn-HkmR43d9vKW&99kq0<gPL4-BgP$06PRtwiyH8?YmLU2uG
z at qZr%efB%X>Rf at av)_QhGOxyr>_DGcRNY=&(+TP*W<{M`Y~zYgsSS%<WP7yiOSibM
z at TLMkgQ^7l$DDo1+%qqpv-qN;PQT#DQ_nl%lyl??I8m;EgHAA4fT2Jj6Xz^HiNU|@
zTZxsoR!8{B^W+xSP<PJEu_lm}SKK_3TL2T7Wx5&%DgL48<9ixOpJE#PZBk-Cmf`VK
zU)}!eFN at EA;}t>vo3Gu**<|WSlLbNxCmoR+PKY`pB at 5aiSs)6*%*dq>T$`pq|1E2b
zfuERnZ%Os5!T~{Af(fWTt+=McH?XscE}Y(w0Dkf#rkSNb>xxv{(+l|L&pYqR<IcJK
zm?f7Ueb&;sXIwOU at rCXRSRz-zLau<t2OWR9r$83}1J*~bpR&B=@;njY$Mb8FGrzQ6
zbVr%Fp$TN?muM_ZW=8QpVQ3S%qY)jo at FM;yWnv$~W7z)6fbay!H{gHkwcFl${q~tt
zM=Axf?EnR330k<WwmRBj=zyRQoX&#&x8VP+-NQOp0DkNOpYKh8!F{676p3bLN!<{?
zmL&xLg5wkCGc#I;JPalffuD&z(cA_&|2zPH?2^mooqGl6*mEvRyaJ#=C!fs~aIjnf
zHVWSFxJCQST?l``tiY$O?WTx!E#cRhR0 at 9jRtm}+*?)ohR9TP`A#Q=}{L-9)vdZFI
zXcb=^=Z_YYq!6J2SAb*t*6k<6xe0{l%>emtzkd7MZ`^U<UbAKh1sbO90J((~P$0J;
z$!OtB78FegQ80zzGzI$an7|&pr7rSj=9ZwzG|K!;y#>~XZW}JNmf&Y-Pbh5DRHq03
zoHH(h;o#)wEWYsQGneA|k308re+BTj(G_5$V7UUqD3}q?k_DQ5f=%@(;di4rJ>i#*
z#h9Mwa^hcBAek*-vIqeD6Oh8mv-3*S1Qh>Nfu$BOaR;)aZDVI8B=&8b`;v`wE#Wa#
zUkMLB-yr|?ciy<;oj30||LnO+fwT~uS6s#MqjAGRFdl{wfS=*N1AspMUBXm9l`kvr
zL7XPTx<!_pU;-Zej4QNLYUdxoNUMbl4)R5=aAK90G|Q|u<N3ibNG7VqvBU5&0iX`;
z$Mb`Ky#lf`24ENb6*eMKuv`JjQSgb}0%Sp>R8K70m3CdvdE9UkQSTR5w`b*-$_kil
zVL>TPAh)nQuc#7;c1_w5{=*euOIj|yX$a3s&22_hU)}!eLU`VOL)<>dfA`Hh-+k-O
z_uje-3Z#W#C{S)u1y_I>jjLKX=?EtJfCAxU)?2?{|MkCJT~XA>!TDAH`X<{c@*V^a
z%*>~CSA?BL;Q;cz36PqmOV=-_(Dl;_etJ?6Eu6UE;I#q&K1WLdmonCY^G}7$!0O at l
zz#EXyKK%lG{yuXTFuH+Sm?n1k!y`{43O at I6mk9MyFcioa!lK%4Qh94kcfIM=z0~#U
z%48Damz;v~th^FsK at kz+7Jvo0TL65j3Gk6CK$Q%ucl%29J at Vf%$QSUxeb at VM-!*f?
zQA&X}oH!Js#o at XM*Thpvp(A*`_4{)u1lLrgvp`?11^84ycq93L$U!>^_z&DMGp`J{
zFD4*M5_7z;)2W(e_d2Ogh&|H?TWd>Y6<x4+I!txy+!9m@)N1k7cx-S>8lOlO6M)sj
z?SVHSC+9<AhokssAbDqFMRWz&L})Au#-N};u3g;>-go7#DI;3YWKQU545qQ!u{=~X
za*Han^UDGj#73|v9pp@)91|ezBgl`reOuCs+`h^1;PW>e-8yMllM)_augDkhzjHTd
z(`lo~f_g0+1_<fWxo`yCmIAfZ$e8qg1E4^)=`8413;%Cv8~fI?He_Jb0qXe=+z~6F
zC(Ddw$nr&AN%#bkelw!{0O&m?K&Ti4KRa1YJ5p)S-bbIf^TBg=Idtx>haH1ZlUmhY
zvyTU{Xn42?sOKsdg4-A_bS`LD{Bz at w*a81UxM3pHM#1w><=<K@#N36kRL at -(v&MR4
zdkxATOaO5*0)A;!mk|xNX{)fJC8wYwr?3Ll=^{MCf?_6+kz4YjFX{TKmS_8>q$Rmc
zLwL}CZZ@%N^U2*vfY8Eu!eiXNApZl-yZ3B1ZM3IAXyFJtB=pEBWG)<qHXVwB?UMy%
zM?j;=f>xEMDbQDC10rmW&v3x=1O7t~*_n at aIZH1^UR5>2(pBE$M>L<N3yDrYYTJDe
z-EP0bcG&-j9S=Nmr-Nqie8}8g4?P;88gd<Uo2YjT7dmPGd5a7eS_~JW)O+}%C7_+l
z2-qKemec~GD0oqn2$d)}(n2hZwX5H~w7f8z>?o73*geV>psg!t6;!~FjFbEi&L8}v
zTPw at YR2D=hjs^lM;1st1+)bAASQ$?Ww-4b#)dS`?8r#0b<RLRBbn+dyoYJF&$0Ps4
zcklV|y?ZyGK6>VcBP|7*(8ISgCm#w##+5>Fb#1K{f*BB}S<vb<1^TMs|1DMZCp9z5
z=qkUNNb6j66@|ydi at c${XHm41NVaj!+T(z&_B?Q#y${}YpF_6W_pt5vKYWJ+FoC1Y
zMQ}8|DqIA at g=U|CjMH+V=ps0af|qb1$qQXXYE%+IS_=!JVBEDY1aOu3R1eWEsh*nB
zeDF`DRZJi+Lq`z?y}H-rmo>mWFaboHrFj|3f)EQOW;m^eO$2PVsug$pZ<#o^Fh>jx
zJE9AQD*!{l9OB5o=cD)T{pkIB57}><O*b4>S(rs3m at JTK|Ih0`U=Rr(ZHK7=|7Iu(
z?J#7UH49o%TJV)Ypih6{gq9XNsQl2KJ^0y7Bz^0R<*cO$i at YKDVLstPu7=i*s_N=l
zyYIi%o(F8b*Fj<h`yRTzy$FsXzJo8}-gnoF04`)N0uvM;e;VPf1jQyVbfo5m&WNsn
z{IW)%qJcRnSx<rJSPxS at h1rAABojybIh+ZtD|sb#U_L9aluv^KX_u~d`!>%Ls5cXn
zJk+yHNlW8gB%pj9?5Lt3tGXy#u7J_4AG|As=fn3b@;`q6zK=h+Z}G{8ZZ-}4XKNuC
z<m2bb_E1%U0>ONOENC@<rG?-$1^Ozil<r;nxm4J!2_L(n!VWND74II}Z%$HZHAP<8
zy&kNeE-kMpDJ!q6uEq+gYHIvNKzzYhGqtewx$B3tR7Dp-Qc#TALAa0$in#)GOqMA?
zWXK9FqsqV*R1O+~pLTT_)Zj*OI?i*I8_^)Wy67L^JYLBbX*dn%aiMNh()GE0Th(&u
zO^tKQ3bMFv=z=ND%fz>n7Zv0i!h_HM$RHo^fAYcoP at v7GkH%8?WVCR;p2#mESs>F9
zTw7nS9l`zj4-zeCb;<hQ{{OxT0QB*%iMBHWKeXR(=5qa9FdvorWDMwcT(p5*wlVf5
z>1S3a_%AIlHzrV}CQw~d1FhvE$jux`yv#_?_Il~|LKj3(Y$E~_6l-?W2gMW!4w!!m
zg2~K5{rrF+5+lTh9{-d|iGqESUsF92?Yarf#`Bv|gl;C4$~bj0iAowwm#(YodOgES
zD}71V%XmV!?-Tnad6~tz8T>{X<XYq#!lP~<<bU$v{hxmLz^5NQKnMT@!qsab807OS
zaC{-SuHI-tTVzMDYC$OkSC$p_akzfzzyALFZWkqdJosHpi_(7JYFb*NI#&YtrOtJV
z-ONJ5hoMzv6_s)Ys0mb6$wg38ttJ4u#h{q=*U?xWiwF)s)<y(e1V=C2?^wx>>Szcu
zOV|q?A_o6V3e5=cFG>tZK7E&7*r2H%2)|GDXwzaipTxL*9Zn*Rx>D5*^E at WhWuHsL
zd0di5**=`dr#IhoiG5-FsR)ll{{0~TJDiUn++w3KWI at UHK!FGW%&*B1j2vGGu4`!E
z=v+kFVW@)DR+gmk|E1$!r&nph=jb_m`h}!E)gNR#CDnhze7lFYw>lT=r(3&*mRD8<
zCQt_cE30D{K}}s<ZC#y94IQ=9!LxTEH56q>35pjOm0b=&u0)7trf9PN=X1Ch0Mfkk
zuhwa_5%_~tk2WoaeOrNy(++3w(tSeL%_enkJg$QP)=QV;Vuqle`}SR$*iUl%LiL64
zh|iCZ|J{!t{O%_Yfq$}~w2aL#9l;cW<=4#2bvsg<>l+(6XhCs4bOaMC(GHUi0lr-P
zEBFZkYRU at gD+^m|OV%RWdEmkm*udUvoeOzS+mK=9Rn?IRltF~bic8BXlP&_Wg8F*y
zdUFxXCN-qlQC}vb=w|VcP_w`Ke-Y!U|0g!oP#P0(;1^+o-8%8GOlI?wsS^6Oh<0Oy
zUkY0{u>z9Kr@)>z_RS`BO&`++>{Yt#InU>J`$Bkd`v&<Be(#fqzW3=vTW&m7DUdG&
zBY4ipA_dy2h2Vy!COOT`z8wZFC|S^S7U)Yf0YAM8_o5C~`nisXR#C4u+j%IohgGDy
zgfx`*RMym1RM(_3fl_M%CMdRa$Xo<s1q}`L4ULi=jb8+2G+aJc0EQ6v|B^PrJsJ~O
z-*Em2{9&F`J9guJTZZ#UuWm&6ku=apMzWN!lr-jy at g19t@5Fm!0&pHxZ+f<mj3<TL
zfB)V%)eqeMC*t-E_#giMrw<=-;C7oE3Y0ylzb^!Xf2=?Y!L-9PHp>wTL<msNP#|fC
zNmHON5&u5nqY<tJ|B-vlp~yRDFTfv5_yql2i(Ix7_(8mx!|Zl)$=s@{+B$Cn#I2SH
zm6aFEEl^s)El{OgD2fQ&MIfY?d*5FKQYM>yJSzPV|2Y5k2_TT64j5d~GN!s?Qcc$e
ze)oh=^*GOOM{z><U8*NF;U{C$P*I5XOiN}=X{aj79 at o>DLc?ZcJj(V>oEuATVlu*c
z9MxCCqi!GMfB!oV|KK~1y!h;Lr9fdJ82)1^km(3+Y-wp~X<<Pg-bp&*T_L!<B>zjq
zK%f0ml(&TTAG}j`#y~&A#EomV;13f%VM~jq`U`V2$Y97G(u at H*sQH|;=AOIcnCjYk
zZvsT7q}C%7C{+`vj9mn^wFJd#0`?*>>=y#yBLa_qrsIkzlH^bSK}@2kY8zM6Ik~oL
z15bNwlHYEfh`|5sQ}Jlm&7`t at E2g$pSDsI$j5MYWGvRkp at Egu!)thVK_EQiZkNh8e
z_mLmUc~mJ-q=lOxbKwYqX@{YXMi#WGrM0<Lj^7SrC{R(F0(~hq>qQPW<_%V{dwH7|
zHYX%}G}TX63*3X0zMoRg(6;UoV`}Oeya|AR5}p`Hq6t)1%0-YE6pIy58Y9)C7lEO{
zLIb!6P$nq<@yVZx=Fze&)!^TkcOQQwmgKj2PKMCR99lfTk9NJ7O$xgv$$1MsFQxgJ
zMY$QNIgfYyM#hs+)k+!XLiN9Ae7?GU1O7*U_`OGe^gYG at 7_y++5v=Vnq(Eth;R2!%
z+}zsM+}768*5<dvh!(W6m|W180)RgLMNFMH5IF=2A3wmS*MyJBc0zt+E!P>d!$HkM
zMvbkhZ}cXBf$(W$J4?&TLlY<}DXkC_h+PDp%!7Y&o at xU1jS>lB0+0dlZ~VVa{zHDM
z+9p7LsFXR{BT4>*JSW3BX<&?j-$c9K^ONLEs%-_jeJ9|2|81jT3#wXiwr|}2#~SA<
z)qg0_?HlC(==+cT`1_B|nla8$piv1O!OTUJ(YV7}TiV)N+U2yicj#P1w4ejlUyl%=
zEKPy_W9!vAZzyu`&AfgaHS#u8{V at FA5<X-*J@{b@=bv+IU1M`?Lz6cFkPLmLc1Ac%
z0w}=*$}s`G2y8 at 9Luq)>fc5z&;9qZn=pvAKuqDJlp5K?rT&l-||2lSfG4_xg4#^z!
zpONQR4YSTC(fJJ8rLIjYPSVgT=ZT9M65akMHp8<T<OBX6|KRbh!2iZ$DFlla&J0DN
zBFus?R1n~wUmpt8+R-7Wy~9zUGMqo at ukw<#7U(}RfMk(Fa?Hy-H{Jz?n{_polkGS1
zHc9w|s{VvFcBYiqH?<^~fJ&n)sw5+n$^<GBE&?@~R1tx_2;e_WLX3qQsBjMLsIPGO
zBtMZXG at hO88;xm0kQ__(ytsmB*NfSb3cIoNJ{>Dbp{_~n2ld?Vtj_IQ!lP~<<o|^8
z!^gMUWPCyv6yXpdfG!AwF)|d0D*y__Z_4khLxBhZsP_>9losXvM+oTK|2Sc2t!e2>
zO!zQ7jqsMEr7kCLi&Xt~6>reSe&KoZ8k$=}6R6f$pr)>}y4ITj)JFwE6a^qc<rS6D
zMUWT~NSRE7;<^SY2`LxiBCz2h4B0RQr9B?}q<X+V1t!&`A;<~!Y^lMYoa7Y3zgo`Y
zlRQao|2MyQj(cb7s1~Sx0`h<Q!zVbi57}|njImk>_8q}uu#AQt)u~xfU=Qmf5d{4s
z3ySksEhrQyodx<&EO>2VUR3>zv<3g#)#BxCXPkcInTw(QvV@&%C$z^5EtDA!W2bK1
z*wWUE3Dj0r*HlPdtXf!51p*<_$f*ew7MGM)Bwhpv=a3Bfi=eLFW=DNc3^v?F(4H`s
zlkzT^9B%^T^PPs at N4qkR&9|-ud7eA8OE;G1>7DZg=}k%O|LJ!xZ#uDS>kWr;cmewo
zw)6eR#OI6K7v%r+M^F6hM^D~=*TpUbh}vOfF5<Xu69Tjo0s#AlCQcJU5Tmi6g_;F5
z6eyhq{el({3Hv{P%u7p`0l%gF;go(h6OEcQwW+ne7Za$fs_`aZ0)YwyLWw4 at HWz`>
z23Rg+lH`&kl=7}wv*?oi;9mr342TOnzX!h=&J#&`B-&jQ;SV^Ecl#g5*uD{eW+0!~
zd{Xyz(}!=l!4P@@e)sDamGF4v|Ln(4{#?#eTWvBfAq#5eBAV?OW<egX=a=Q;BM8F$
z?P&C>5`=$HpprBN`a%|97P3p7x6Ul8rpGF*^SVV9F_8l^Og!xmV_w<J<@U2Mw{6Vi
zY0d2&O>HSnK#BqhCV+0oXyim40TI$$puAEq0x6Su1@&q#0;v;`=ZsRFPv7vsy_fhw
zC6SVuJZG5d2?YFr-?l6IBxiD-Cqc=R#CaH*sI_D07U17z!(oUhHX76JkS}iEfd8qV
z|KzF9e)81Tn~a|&LWn2}nx83i5ure2LCucf7PudWv at pkOK`DQHd%g8bi_;;%7cl_8
zs0GafnHjQ<VVyVZYVk2Ifh{v{Rpb!Hyd-?WLFKKT-7OuRy_-OT*2NqVs)C<TY!Vh^
zO2cXbWfkRcq39xTsUh?dWdEd0Rws~1$c~2Kw|dS58Go<fPl$FS!msUGHp%J1kATf+
z*vRe2lRS?$R~1q0qk5&a<Jywknvxu at 03|%u?HlBO_S2_- at zbZbo;e;0M3osWTyhpv
zwV?dI*uI>a8VI3|MyDel{HL>^Uj+T%`j&5I2l>!@#BbpYpM*MZb^C;>*0Gf>qbr(5
zs>s0)@EO%v$Ho at FmW~w_ZCyi*33T;h0u9x5wlu6Jz;&-bLtp|W+yZ6g#sq9cP=%eU
z&W$<(uTw?@j`lch!y3V#GTL=5>QQaWbgabm3`uTZs#+$o&va8MpSdous-hgyI8*>V
z;lbyB_LHX-{J;3wGuzCZ00koLX|teHWHdB6H$nij9Yz-9fq6M1pp|1Nkjw>TG*CJV
z`UUXsCzg}mG at f6FHb>fK-_^ow at Vf3PwVjj21lq=hF)vEdF0+A}?LyFgUBbTO0Y`%W
zm<c4t0*y8GF%wW#KVhAZg^No{i%KwoVoV^s2nfbOKB-YIEItYyieCgq&m0GT(6=kJ
zCzwMU)3ceGRLRk9thVI|zt^ydjOSr1W^h%lciy-i%u_xt%AvO_BXIkc at Ob3^@@LO*
zw%HW?k4Hd)3XVc>G#AljLD7N=?5nD%mCLD=M45KPuh*}CS_tt4 at ZX!f)6jm=HdnNa
z#^Hncn$Ah!zi!CX+OEkp9TR<>mzWp59Il(e$TF_^!sC}-biySUFBm&zI?lhXizBxH
zevb~^q;NQ90?0%)#hOqTD=HQfpo7d<L50#GQx{vWw}`;^aOuPb#LR9)m5ghMgI@;{
z8rl<r|J}QNyCUG9HKm6Z019V;dRe5)37jWLZ%UGf=10f&mFhpKRNo^1r%x;LfBExg
ze)aQbk3MW?C=ibk5-3A~%v?B~izqvSO%{}#CzzL0QBlSzFGma7Z at q7?-*2E4g3}?u
z=d=M)xTTVJLi?F#TUtL9p3h)^2oFBLx?>{JGA;r>`Z_N$FW0*A78%rk(eb*CcgzOU
zT06QxzF0wLHzF3L_X#F|#4Ef7Fai8|*esy2ur-0QGBE+ALkV#)*-=f9*404<Vw`{V
z;E%O#$v`$!-m<;A)XPX(lDhQKEA3hk{saN1XxN<F*Lto`Z~n}rH#Nf(1HbY4ihRKT
z>(8FOW%-%gm=J(x6%GZG(a>YNDPGVH!xgDd0B=xQR;Gt11_i<d(p7-Z1%D^+)V0+6
zB*;6-Dw{6U?6QWT>~=w2St%F6_<|g1Gx3Wmit-qmFRHd^Khe?!>||_d?<Dwb!2~+G
z+PiyjYupjAS?Eoe5fYVeR$hV$q$~{+2oz!lrKP3i#tI0EU0kfGAuNSZfh6j_$1c)r
z53_pK;Q7NmXFS!T(Jo_rAmq{lMjC(WP{ufXHz54UoX6(&fB5+7-2Tt3+Xwb?J_G#E
z{rVTrQ6n=HXdF;CLxJ2}M56^|N3f1YSIn1`mGUS!#ib>>9f>-4ngV?;{A)ii+J2{S
zi)epFPBDdbroCA!$dGnaT2AC5XdUZgUP at gVgZfkFjjd(8WZ~tPp4i;h(ToWgD**ZU
zD3DJ<2aAw!*u(-LA0=}}wu~H4X#xqQVKsq*q9QQhF9M=qzIc%!LGVxPaMa?9S3`T;
zxQ2L=KLo!oZ+&oIY>Y{94rxq0fA5^fiW%bIm)s_Y43C`9?JM#>6XgHq7tjCZm(Opz
z=>(evr5z@&1w{x!C`}gBV7|1lurMnt)0`~Z5ua`c`&{V%*0)kB+|V{d`=dGMX4=1A
z1Ou^x%p5#6&i~vcETq;IMQmxYG4G`pFSu-}fS(sQc`*U8f)1>pp`{Iugdwzcc8LkJ
zi3uq3&A7iJ=Kih51fW>HC{R#TTu at kq74U+%0HXl^{H@~u(TA^Ed+-NIemjlOrFv|6
ziv$kB4{m|7yv&NiteWB+5B`*#Cyx9$+Yga%2#<67g8bjgd12elCTbQ`+hG#2ptO9F
z1@*Ac;=k;y?CdPff@(WhngXq*5ukZU?&|W{ewKX6bR9G2Ja!QbmWzOi<?&LNjd?Ex
z{Fj_~#ib{Wn6Lrxmea<uR={;Y(gyIGBXt3A%cM>AZ87ncV at 6*V`J||JO`?(G7N9hS
z`Gh9G6=3jRLV}1&!JW5X7~}kQGHp!Nmf-m#@W=C<VTQk=Fq^_Lkqc=Y=E6}v7U{k=
ztptQWRY^Bhk|&Aq;Pwsjpa1QzUijUwUf6E4iJAqa5FBbjbvq2~kr2ScKHL45larHf
z2U|<n`%lC9o5q%XQfB*Uvy}!Dru}0AgR^wnKU~NRVaQT#b6D!qm{(V^UwPR{BgRig
z_R!eMNnr&(G!Xm`?B^%G>fB2hQOpDo2vthXU$djMOln<B(?Qo?yI4mzSn!($-k`!8
zWqUmMbsF>9fS*(ksv%5Z#qzT?)#C`iYB)v7;{}{}{wUN9s#?ELwr?^#CeD2hx9<s$
zfZre=@c;hTFCKfuu9^i+(1J=k%s3;27}eoWpPikP4f6FrHy1SB4(0*Ah8GF6A7Qia
z>S7b3X)w%_9&>8~X5oe5LL`D<K9qpNQrD#>=7sqH{;MuO8O>WmOKYPXwE`r&))15t
zX=pI8zu=#b5Fx&!gag=JW-doez{*5rb_Ab;36LE%Jg1Z_Yf#~p(G7lLPjBF7i~|Ww
z2)s_Cwd40A&o84m1JAGBD|D%As>e3!YR6WP<P^fcwwx!3b3Ne!_HusxBH$PNAGzzc
zn?@8UDGRDXh<1nioSa;a{MS at hK|2_$G149JYrwtxYw2e<D;gWBigaCtpJb9#Sj7$$
z*Jf at n0?&n%_Djs0MEhCJd*$UPUwy@*`sS7fIjznR+SCwYR?yaAMjR;Y1 at i<KkSn4L
zE**|^O$H`F_>9~xoZb+5{)EvDX1lu2^W*uohnGwa%73Fn>x@^p62Y%ysZxM{O`Jzd
zx*F<gZeNo;q&L0W4+)P){vUqx66dDtPJ;r4ApjlmC?Y5XGaB9R$i`_X>;?LHoIDKy
zxKFFf(?j7L#C!k$ewf2S2W(G63VxMN7C*Gy%@`>#R*+BX5+Rnm2(ki&o2C5{^FsR#
z_^-NR(KT0|Qs2~!?4PrGD<G5>*ppd`V4u~0z+h5&jC8PFlQnfa95^TJXK|i?89ltu
z+aBIvZb=;cI<AK_4kn<<Ov2bLCU;AcpW_B{hMwPnUz!$si*^$TzohqLoJZ=pHn-oq
z+gG3e``^5%;Q!-qU*<>%Acf#a3yOk>xrl at S?8w$ED4~$TK2QJ4&+}SPhGM0K5WNH6
z{*4YWWPo!~Zl;#5yv~8f7UPQZ2ASj}iG7em`i0cZ8fpJkSDbwHm5X{tkEiF0W30d!
zg1-(tDQam;fIU%$z+RBgFbA3Eu)_hfT^q0Tut%Q%iEwm at YhaH8UZd)a$s2Aj&Ceov
z=x+g9s{nsk-u*-;vl(GSvYySSdJN$=>V1>phw!rtk6mD$6So)7A7nU_-M-~Kal#WK
zpJstS{qB|RH=m?gP!j at 37L=qh4qrRswH=JB5Lcg<pO=@P&yoKMWF}sEDApR0ub<#s
zdQDDp0L;e^FwD#=6<433gd`8xhm9>l`@?L1oc6<fuDR-zp3&p#8k^inWd$ZWFgaC;
ztR3u48+-qOI~_dNOz%k;*Lls8k1 at R@rfN>?;q{*XWp+%PW)|1IOB&OgfDB+M$XZ+Q
zN2#7D+Wptx-WtBqzC)+))wAL5L#FK7HF>AbNjpTGM?>8;yL}-%fB5Z7;`Rmk0{%b$
z-rzq*fkX&F`fK_mc4VW4mUbA6d4YX_o`Qk`@&oCiSZjlSmh<}kyguRScNO7>4gHo4
zU!ln7ymQd at OIKG&``Jb`Zb&`L(3SSXe6GFv)Y^tdcOomO6Gmk20(g-L4P<VQarnmD
zi^C6w7TTR$u8m#6f30IaI=bWr-7Ca8IWxLph0ZOBMmIR{Bjy(oW`1T_epWK=S)J$i
z;5SWM<F=YTW{V?6Z+6JYnFkJ^vEQ(b_8vNI&mmKH>)v1&u7DJUEmzfwl03hDk##VH
z;j9A#{7QHf`G5Mofd9|Ge|3i~Cfh8icEp?QNK}Lg0W=GW7Sv-N*cTKQ>hVLdxEj_5
z27UH(QYJjz47bB^$bL~*DDnwtKO!GdxFLIk7cmiHbZ4#7{%fx~^}4H1qm0F=trsic
z6L|03U4S`6*MZ|X16joz%xaDeEp$WMuF-Lws%jq9Sv#IJUL#uo5+?-zYvJeyB+Uu(
zh9u748~A;mlT^=`Ee;<yYxel9=W at o*I&#eBhmG3w;1Qb~FnnXZ0`@Rhz|My7i=H7V
z)O}&qzuu$&amN`WIa^H~y6J?jRsVc1!R-t9|M2Qx{_yI&*}HGI`J{v_DDjts06`X1
zF;5j({wpft_z)nyAa(Vojq^`A$tP&(Jt{%lA0|APUT76=U>o{`6)eC0OlUvM=eny;
zU3SfB#I0%qe8lk*zVXrA2(jzH>?dLyuPi4ro?li}#OJm#y$8=913!amDMFzp6_;-E
zIj=<18(bTsczzkt8TBx#sx2Pyt_J*n`}6C=rtb~H!8vFL^J8Zn1^&lvHD~OWTmgrU
zoO#fQ8T$|0XdizCIKpq0Jf7|A4 at nCoCb07+qqd(uoGXB7q6uyv<jeWvYx8ICP6$AR
zB0`86V|6a5ABtrtkYqs>^L&*5ii<hE9gGF36=ms(D7_kijB%U4zhgep=w?5(-?#MY
z0K+KZd4cF0XlxOk!zBx;in2}!Eu7MRn9p_BoYpmBG^u+%;2*LrGvCYtQzb=iE#pP^
z+!?H*zVA|2 at y5X)k9nVDT;VdE(u|y*Z;kb-alI0bE^$M90KZ)`ZKv at kW_wbCpOw}y
zdH8(ylwINWF#MPaY<cAPt>=uJbrd(ks7((Uxygay6%feSoSwmix)hEv0o{VM?X+Q-
z0EU2?PT4+$$0Gj^ul at Cpa(@1!C$`^WQi2e|%>^X{uvt(KdyrpTTvA*jClo^T`u6wj
zzwk2*ePfsJYD{kFW!Wy%ej?`MwEZMJStm+rC_j6UfFIfq^SS1<W!IkGIeb)gEj at bH
z1PI)qqvR`YyZOA^Z#n-CR<YlH!QFRUn6RA7jcax>?;}?|?h`(bU-!%t%Yw};%ZXlT
zCsFIezM{E3y at LNPm+HJHR^*Cjd)OnElV8gEX_7g{1a|3}y8F;+dlBm5>T&p^H$QYN
zCa~3<oWcDu>Mb_tnLf7NUjgy-zNu=Nk}f|jjSozmQ29`OX>LPV9^C|<@PL0sJ|F+@
zPp at +{1R(9NSy0vu`=MAi1Q^pPus4|3k0m9d1 at -M<>D2(eS-EFEQNq*h>S9ZypIc5l
zm=?uGcGUE$bGZB at lkha)zxuRg*PMR+b&F|fm&SH;Foc^|EV*^%Ik(+>?(MgnrwgfN
zE$N*X-E-H)@%==yoCvx;p{F4p^QK7nh)2zrVGgZzWfJphKZ}{(;KuSt%`B0g->5pH
zJbxVg<oOFKnh+zY3FH>al529CgtsspK;BSUsNYm-PvAdO at W0X6j^P{c2UF_Va1WI<
zgrTmc_p5b?C<?lKSp+7jdlM6R!lU3<<ns~gwd0nPp+MXkIut9fxGHQ1gHMtL9n#T&
z7F;FJ=A-li2>$EJ`>*%ybO_KJ{!`C$aO;XZ^U<OJAIbT|5}t<nc%6gNewYum|N3iB
zzhT*8MxA2<E0&+N^2W1ozG=xVE6-ttXbk*!DD&~O|1xO5gtR>kEXieObjp}F?B~Ms
z$7Xe!RKJ(^M6~CvpqV8B{2%%a6t;(pfVZ%+h5e5SCXiQD3H*RJAaAHBKnth%7b(S*
zo{h$JOdio9xzK5QrKswf!d6RlF<p>YEB_V?qP@}Je_-VH|76`h$p71)-{2_zu`)iB
zj`;kNnu5|A-wsAMy$;1HDYgACrXv91cex1xD!6dds{vBtU!DKjFdw)L#Gcp|=kF7q
z<a|`#>~#*B at PzpY_^(^M{Q5I)yy487Jos0fbL+};Z at cBZ+iyKT1?|80k_XIM#<Id}
zO%qX{MWqufbqVb!+vyZOw6WVdSMS-*H)V85w2(q7yfTnK^8Bg5kFckxs*UBRY697Y
z2;~&WEubclUs4SSJ^u0h;D6(Bo$w;bg-+l5pa1u^D%sTS`@&Xzc|m1SHX^#(k{lGI
zn&ctQO>+B!{J;N2&Q7y7*kOxFTrsdL at LyO~S6Ei>LI4p$P{`AvSTaUf+d}1Ig`bPd
zcCfS%BH09VU6*G*>}o;wM%WuNAGH0#?K1|FW??z0irjoxqsp7f_J;{iXg|zn`LZ)^
zy#CCaZa8bjjc2dK^DFq3_JjZ1FSx50+RvI5CG))9wEo2tJ~rl6d7JO&Vq&3=D7Qn~
zf>eJ@*lC9Lm`*Ogd&{nzll3d6d)KEri)%Wv3(C|4GIEN<1dJ8Hh4P9jxCO)nN^0=`
z08*1e8VGAHbnI4hQL-g~pTgD$Z{Ou}`^tGN+fQ=)2K;aS{jYBt{7)vj$02A4P*l-a
zRNmls#Pc(#5Q6r9(*;Z;u=E0Rd=@kv0wm+#<a}h36>PSpwuBwlNjV>xVVIviI7QAU
zq0}2BJeB#}c>NhS-EgL5J}ZRzB+`DE&s`TMW&5vSP85`$NLDYMUh2G}@JXTV)R;GA
zw$n7QYa63qJQrzueCxUtxnu%=X>C_dVFml&*#a-i-*XDH^Gm!5<f;i2R~t4`iwOY8
z;)=%6n;+(Kq5BH>Rm@|my0HwWrZ-)ZCt&;D?Z5f=zr6X6zsfmz-o8qKFaffl2q6ke
zYq@=h0(3__yhw!*OoZ_MpSys=?laoK5JI5oN(Mk5{}a!AcsMeLc~HOPoR9RjNU2vQ
zS$XE;8 at pgW$eV4>$0R&M<`dC=od3<je4z9bdK#hkQMUi?#B9GbSmnxu5b`7j{0Vj5
z-W5K*C45YsD^fU^p*?o%qRy)F!ZrtfX400`56La6$|+c_2^3Z4%S8Yow<aK-xuUVK
zyq;XBf<LV4YDqU`sO#Cjx_w3dKmPjGKmYHoPu{<G$1OJyA&?V7 at J+dZU}CZ$b<$Ay
zj|w4Z2Q%b93IyDCFj<Y!$I+hf>w9 at WQU|!bMz{&g2k<9~-0VCD+t{@_=CfRwkHox&
z`QXw?pN{FOW9q&E|3$Hd>_N7lHH)d_omS*vJK0mo+lYA+6F$<$8&CBof?xFfR at E7R
zA7NX0!_d6q>fEAAXurD!iZZebv-3(c9MGf?AT%aGIABeH{y4NugEF!cBn=_>lQ>VZ
z+kfjH|0m$*{OfOTD+TgG2*MD4Dsr<NFNE-OaS4QdBB-sYnkoR=LMB3_Lx9i(yu804
zCxdtshOf at w=X}EH&9R)%nwbx at -!Pw>&h`mUB{O&`hz$wP82Ila=OYPEyO7$fDC(8=
zuVu_ at M)$<Bou;3~E}JIXDV|@z&pZ>RnnXQ}ZXk0-(}?_%S}}pbUQNJ9#8?EGB6 at b%
zPvP+&NgAA(CnWrq^SC5WvfDS{e;e>e_}|=Wq4{=@F)T4FuUNIv<3 at J)i4Ye2C8b&d
zBmaYlg$2RsENF;-C+|OmG3Mdkir4_#FOT^^W=sSv7mX?Ph6&G<BA=A<PD}fP=~bb~
z!OU=2W5Va72S`^UIiTvajhRC}ZA_b$G&}IKfugc`R6$vN+yqLqa!bIuxdo&>Ig5z6
zumYOInlp$0!4dwAhSNs7PR|hLc`WBKNgmJkL$|Ns|M%bD*?Fre8Um;mnigs9mjQ#s
z)-(i=xwvDZxwv61j4UXfs{IEJW<hWWfWG`XR5+{7XU)vV>3mY;d`zjA^pVZ^#F>wj
zdT%|S*p03eN$g|}w9elpJmWftlp-HS7YgksneP&wK_`1W=1rOKiL#v^Jy2bmr=2ew
zkCWyvCRtIsl5tfA{L;W{#QYUa!wbtA)C7<#<P=tB7nB2dH38f&L9xd_1POC6{y)OM
zlQg^%Bm7aGC*V9L&Q-P_y8VCs{T;yX at V`MQgb*upM9XNQtq?+2V^9rN6%Zda3(63%
zbO_*0KHS)ql=GSMxtLFPQw4KAS*L{v(<D3-nGe-2C_T=fz_wTB^N?<1PZs$|w!dxM
z)~#c<Y#FtA0RF@}Z=%A-#k}!^k7PSpW6EU&4U=Z}f-H0eTTdHC!pC;6yG|DPe?e(o
z0VYsdS67-_U7TZ0z!U`_-td2i|7wH(;*kH)wwX-$*M{?`&*!5epO35l@$SN7_DTo=
zv|R#eIv0Tt0YnR(HIUU9BYT<!|K`7T69TNaet#1J6nPBv<rl%yqQg%=C0bgPtZ)uz
zc&4m&v6GIv7{s1jJ=Lz{oKK{4&{FT+YsGx%WHeg(ol&5nLu(fkm=$W95%$NsTAav1
zVqUNCF`c~en76sQh`N=uKxPe;Y2*c&GbeWY(G9kH{l`y||AGAEiwV at DRX~2gCrd_@
zTOhAg@}H&_%%2b=@P}LnN%*&7wl#4c8|P9ov*7=`1^=pl2>1p6$L?+M??M1zuN`xI
z47Jd-eUSxaJD695>UKPOD|A6{UxvN^-BT?snw_w*%a3&M3g^o&S$G8_9Za?BY9n%E
z+N}h(M)@qxKNa&q<R&5?0ly1- at 4e(fQ|e7-KEtN(BQi6iw3Lpjsk>`Ci7|m~oX)|G
zF|o|Y(te7?)Ol0Jyg|0}!KSJr%CBe-L at x@e^D=+^i|2K2i67lS18-?<H^9y-smU*`
zrNE?fm?a}BCcr8SGXGNlBJC65Kf7SSK=_Xx6qy|DD&e<<Et}qV;5Tt at g4<W{ulnb^
zZ at +eHLI@y(BHhstz-ys(HO7b`P1+66TrWZhZLdHJ?J>}2U!1(~kVPjQddkVsy2fx(
zuUT4j?AqvjkoQ*<<-lsRT)Vnz*Bv5qOOf+=@Ct3|h1=lX;W^-(<|#0b-WU~uYRS5%
z?1BQbW8(Hk+Z-^T*KVWROQvy7>gJHiv11$pkwYYGW(lK7_`rV<VIo4n1Ry`maQpEO
zq=z>IKi%skHJzYcOrW?1*(x<A?l at kn323$x9RigvUXuut8d-LMgqa<aoQyf9YEUsx
z$~;d3=kabI<kK1>=U?v`{6`^xnH8Crk;TcU3J`_>Wb=dq4QVz_G13!82tYp_dy!a;
z(Pv at re{r0D^14R9w<Vn9hT55}4J7Tukq%+CizV+$?7uMcfin;}HV&WBJaW^P(P9Nq
z9cu-mx)-GxA4PpMuwNwaeC1ZM{f|6wxzPCB3>GPFGQN{w)~_Osi5#4^lWZsZ*3nl`
zTqEJ*=k}QC4R-OIAKg$~-EML_l>i=6P1~BxtS+rn69Ds6V5xj at 5m1U^eX8%+U0d+m
z^uFahA=~$E--CbEzuw<v>nULfptB;exXkQ==@W;BApj3*%<$GxJ<Y?r8nrc&5C9<r
zlQakcJPi8m3w8b)_MTxk)|qvUZda)?pTgV>h&>JOxIRD0O-DLtW8<22J|gdj`2_O*
zq?`}<$Cb&<Pc!zAoHka_Hg;C~_-%TcE4f+VCww#&x_${FA2yVMf7~)m27XR38yn-G
zGaM4+ZHz1Y4hjb|pFGHR;{5IUEjOGN{Tr-aOrTIq0Pyp@;6iEwT7D(h^v6Kk5NY^T
z&z36HV+y;D^Ekqv2>!tB<M{#qs(*w3se=D4C;N6tGbpu?yesL at Fa)3-OhbU--AytJ
zB0s;QS at 4hlPlo`jX>SSEHA+`IzFkmfrj(;_j-(D(Nmsj7I2)1Y>X?s__orY!RJ%;h
z2M=aUAfG8iyrDAuGp|^RJ4S5QK7L!|K;WOSj>18t?KcWHWJ at ZO;1j?n7l9ezW4l@?
zbp^EF%iA82QkR)q6;Jrs-E($s$<Llf|4dd#OrW5G%nv3Y6sWic?T}Zstr`3&%3Buv
zYr}a2`3C&pf7h+2#zKIZ<Ncsip4i5dhr87nb|~EFp)G^}LpvLoi_+0jqgrT&!u9bi
zD9%42;ZI|WpWYvCtOHbV8^T-A9uBkey<MVkM&!9x3g^^0pVGP^q*N#;>0~W6fxrro
zTvFl})iL-Vw()*e-f46WBs?1`3Xu?VL1+skSAf?x2ejYTc_WcS2!2ERncJg_7yZy4
zy4MRUno+))N^2QchVNwY;MZ9t5$y>pT<ZB1{8HZXVzxN=O`d1fs_)u$s1rIZ;TNB8
z-9E@)_3sZ>t at _}k<Mv4i0Zjc at O2EttCIsNu_e0@yJ03UVu&zdCV&VT83y%<jEKnaG
z2SM1Y>q?P5wAPlAy(j0Hvawf05t#!C2NK#_w5$F4>!iKKDx8<6RyfC)4_)m^IiG^E
zMkB41imI9bTqte at k=Q0_lF1!4rFnoK6VO&HnhRD#``w^s(RNCyD~x%~zTFV~%xZ%U
z`GMr7nI)RcDPsOL(w-3f@$wd)f7PnrY(BZ0(i{E1dv7_8kG!TSUPIkv at C*Lu?UN7!
zY%+C}xdLQX{EQ7o at Em+QBy*wJjz^#A at b1Q*j(VoU;XsTQTDIf$S>_MtH_l%Y{&0Jh
zeX8>h!(P9%D`mnzp}i$a_^0gcO4Zni&c}2$UPX_gs*6QbAQwTzg%~;)1_k)xL~Z|@
zcaVK*s4VI&+fS)08r_zf_9w)=vXH_LDwMe;W at 1kY@S9mZk>}T@^^o)T3Vs{yQhm_U
z8!hm=%pA4H=3{r<SZ1Nbk^erhcjv>`Us}<72vDHC09gb3`MJ=90KC5=x`hJe=H_-Z
z*R+~;NJ4-<i~mz`{-(E)uow3(NtHqURpgm+q=^lCrLlLBCj6P_6AOFSknlJ2OzvLl
zCRrtnbhuh{l_&~~z&_z3VB8`mAo&d!8tdpz6rM1j*g|SM#$+vNzszm(<2rHjKH(!1
z+ssZ18C_z=wMh at J*+b!HGW#~J&j<dbR1b^rh*s1D>Pm7O%ky{JY|Qo>4c}|l1VeZ%
z=kefQwdzBTh5+=-+o6cE9c(O*h+Gi-hY)}wg;oJ3%7X0n(L-A`1n6$Bi$Z{!z8eB~
zof~sL5qv^#u!4lJSDn9(H0d?$T_(Mas|$O>oR6L7a~VT;9&rhO?dlbEy;T=GD at b(_
zh!x}(S^OtVG7<30=uVhVDDwG^%l4<H{Z`}<#k{?P|9Jtwc5<1S%&0p5L-3RBq51%G
zlPM4dS=B|^=qm`WNwG2u$P<18eu2F^AMLu0guwh0dVYN`fEEJyhzamTd<Y;EXjm(`
zP(pwq?e(3lwP8DC- at F2F{)<mNf~gL)bdgR;8TPu~#>5%UYY2NydrL~G!?+<0RAwno
zG3C$WU%PrmU2hZx at ryvYP-0O0rtfM*;pybfZjy=9ImjM%+sv-n{?AGKbz+-cND+&9
zO(&O=G~3~Xro#IgrMJH(2fWJplRUrC^Ssm5P)-e+<P`;IY{7TIlgM>GALiqc&x?;Z
zyKS=}ApjX^df{y^fSC)eg<vQU78Ha4vLJg at Pm6{CU9Gh$gwXAHeGvZ|_QL#Q)!rq?
ztiHFArp5Xmv+BBQvgAC&us6A}H))=aCQ*4`igTrz-3 at TIB2P&wilP94eFf<zG8jl}
zL||zKFAx-KM4(C0FU)+Bvi)(|Z>BT{v|lH-nLR|2=a-q}A^3OLXvFTDjo~9AYBp$y
zuq~PMrv|_1dD`n}p3fy>W&TeU$~p#u4VGQ-0scMs1^E{L+k*e8d6_bQ-d6#1H4G}C
zlnb&E0%-`)-Bu?dK%-rd-52p6>fFwllOpWBAR6GWf&@M`kC;huwqfXW_WY*qZCq{G
zD at jy4FMWU}{2zbBiabq$wNk4~d;|>e0a!8O<b<GD%K>k#E%S*Ip0=6YB|O(i`(rV$
z2mh}f_=WkrQkIvo$#_{D16|*B)6r at Ip9}mXInf{idrW{S5bz%~B!d6Ufp~yqx9{-(
z at uK<r5&}@^z)ZprfbDn)L1iLJEClFuAwV-B at DLXQkQA!#lOaI7y-OO~>1|91duuu-
z=}Kz=-z1uZ%~W{YG-75|+xTdzLlE|k?5I_Rf1q=V!d}zKZe{;*=YMTcWvgl8qq-zD
zRw=Mbowq;p?Kx)ff;OI`F`@)eF4JpWZ%c}t&zhN!T}~8c`+KMTy<|Io{|dDRP^!GW
zwj`I-B_<%+9?kQwj`oP>*9<?s5@?Vx0lrjCS-xiYlL@~^{;E|UbAIsYLmC3`ufkpc
z-3}Q}MDeR(P(-7JCIrC$n-D<SAscG?ToyESWBZb*v7I^R<Xb9R$FR?<Mi#qIt{XD7
zp=Vm-u#Jr}XAAHAHSA@`Iit>@Gz_YW=2<1_+(3)er(~YP;9!!Q%&?`vBn4JiW7V||
zMrqk!t4_j&OlnBvXGN7}lGUBjqAnG=xvs{<Qg5n+r`I<B{KsYquVX$*2_F;lnhjjZ
z2_F%T8s1J2ihK?eAbaCx_2|R~Epo+#Juyj7LU}7laysW9aUMm!`S{7IRi8)*u+<c<
z$StRj4nu(C?U1N7SddKt(S!g^gnNBC1OWeMoPOkL#yE3<%1SS>0$J$`1tF_e(>bZG
zdrE!JG-$ka{-)Z?L?Cn#nzBeW&&pPN%L=mLKOq0&3yxRk9}cqu+k$XuWi?j7_;i(7
zW(?Gbz@&!61fa*wqc#`kuhVN|y)AB%Ptej!&L=hVq0Sp6JZ-k0+>V)2zB<|;C4Bzy
zD&Z=N0|;GVYlgFBk#!GLonHm`1^Ie*Ga&#%pn|N#5Fi|iNELvB7eXNVbZ{mKApjFm
z`mOi>^{Eg*XZWXHU~$2GX1$svFS_1Tb~{RAky?Q)WS1nosrK5Or|KerC01aafAT!5
zq-w95WM~_ECCH_PP^>@<fiM9A%ty=$MkFR+QbT at pxsGuQ<o#=v^GPA{`N>o83JOm<
z>G=JLU8!k*F9{z=I|B?c0jN9CD>Np1P=D9G`z3;32#<IB4*#Emf2{({+;DUl0@%6e
zCIs+8poyb8$s6<DjTmA>06dJFh*H+4 at b4$tCg(gazF>ZKK?P{H8-9Zgrx=1*fiZ+o
z>I18>vj5D1$vMyX_6nKmpw-^c`Lnu$p=y+Utrg^2D*#I*1LJ!u;-kxbwaX;@dlR`O
z<a|QrL-2^}MlVh32I{`ev|)Bub5g0x$=hBrJ?z at d^%{9gdLbox<zpd}3{kHR3{{;f
zY*R_+7o|O^!M|$Nr at L=EO+x^g2;}CX*O%s{3<0=&sRC$$AgBWLxe#EDIZqUrsBX+*
z!>?KL8 at GZ;>SJ=AJXl(2)e6iE^F)zzZ|z+=%nk5gchxD9-bC}@tibhl#oAj;&c}qk
zLBiinvI>|FQU}x9vNp^I{7ctBo-A-z0`Ka)z0iI$y~H<jsp5z$fK(Oh+T)&IX7z9!
z_)YhsikUwL=T8RzryyU??%RQX2?4 at h0EQy+!z70QBohb$be|MjXoNt0GXzlQ?>k&%
zq?MWH#xPHuKii9(_AJQ?23tm?lWbM$qvJs9D~qDASKAwtr9QE0Z?LiP$z{34HGEU{
zxzIVHlMESYqGLQwW3RNg_=G=AUJ>*6VXy1zRh^Hic0H6-?XtrhLT$f_<*;AN;R~~Y
zamrFxNc+Kmyp7i;e0ul%0r*V=msc{Us&M&$HwEYM;9s at s?>Ak&$W*~hF955-Tstt~
z?dH=*Cxie at 1R?}L_RsMl0HPqO0E7T&q5B90N*-y&(iT6`DzBv0RGPd3GldnTo at 9Hg
zEU<9By;087Y_CX^`T+HCX;-Ql&dDQ9+&rJ8us4)CY&(58oA22FWt at LvZ%fF0RN-j@
z*t`rCp}}Xo$j57&!%~;+=Q8p(9pK<P8D%&v`1e!VQhWZ?;P>S%TiZ3M&Sdca4Ry3R
z-&wWF9;yIT!D77tn~W!D>MaDI?TfBV26Jf at fVh|tfGjB6A^QUUt at A%q3SLP45j>N+
z)EyQo^~o!(H}XpnA#+mR1+n(V<Vm*4y}b`y?xhYc>`lPGjP!Z&*&EFa=M}QFD_mWH
z)FIHh#k<;V*gJ7p)6`L|+V+TYk|L~i{;t~PC;3D<pPxQWUI_fd-pfr3JlZp8JkCE<
zxTU21IDZFz8Ot9fe6+}$OnW5NZ(DbJ_x#@N^8)by(t$i8JkI$?DIh*G3IW_uP^u>y
z0_a`<X$N)-;u(G=Q|Sg~B!&RBeWD8Boc~;Oo{TBu`hynQG3I7_mx(}~<baJQ83TBj
zWSD(hR&RqH;xqi0-e)J->M+9?{^P?8dz<9RRELCNZox>Cq_9^yA7y}v1hdfiUw!tR
zHZ~^6`)#$$bv3^F!V36Lc|kS=9?wr931LPws6R>J=4rp;KOEo?FrSpE{<Q)BZw<Ud
zZ2Q+f3gAU(CcKurBOwGJsNqNmFm)uo08u;em`*|fhGlWW5C9nT5h0MDX9#b%{fvY9
z`>8(YJbe;IQ!x}_Z4z?u0BTZL!RmFMiGv-2Nwz`3i=1aP#+lhZFR1emw^#VRMWS;v
zyGrBLUKjS>tJBM+^U(~H(=k3#!awTj^*W!Z+Qs#!B{>@5UD)g7onGhQc2DbaiUisp
zd44mTS?ALR%qJ at H#>D)#$n^)8)%5UAz_x|AD}(`c-vXd7XbP~$hQKZaAbZ?f2w;X~
zW&04o2!X2lLI}VZ6F=3bv_NJxsOI at 1!d^4akT^6U4?_jktf-SMb#O)gHgT#?iUlqS
z?Tyj8>V%x9+1>*4xglwcvvvM6#&;qUO(pd)ds|$!m&sQo-lei^GO at UEGr(4QyAl%q
zPTrr;+hP=+lJHE;e4^29pO5w at fqxZ%SA>Uz- at on^+kl*@jH_0?7eDW=`nNm(dgp|r
z_Y8-EA`0Dn`WQms<n5?BDa%&@I$LV`NC at DaKja7J54QpT;TZp%qACc#>7fwvPeKx2
zA+R6VPo)UtCvAsU@(zn+k$<nw-|nq@?y2j=`9HgyoKHB+5REiLn01m5Ox{X;;yKT-
zx3QzX4EDm2QfyuZrKr^;{0VzQolh^-u9sBdDLJ2b!c(=)iOk2){uJ5HRli at 2$M&w<
zyhy<IdjOc5mpw{5%ow at D#v`|!GIRzV!T)+^)j##Tz3QKDulk3cw^se*tyO=2YyKSB
z4(xjYOb9TF5CCmPI1xySJDItRLm4xy#q|PI<Nq6K*YOb8JAZPX`|iC>@<=x&`Q~GR
z7=jEsqXO06)S+aiF(f}6<G&iUL&DNhuk#F<kJ(!nEwIp>=ZYK7q at aLd!eBKm->cNe
z<vbY*A^jr-S(pH6eEyX#ZHb(JD0S#n=d;$#$7q|An2*r at RjYm-chQP!=cT>7)))VJ
zSMZ#0{`pQzO)-W{T!yw8x4+#+BX*oIYSz at Dn@s3pHZ?e3_4hYd{Vh2E_r at wce`P!B
zBqIbGztxO!z6!?s7=-|%I~D)bH^UIXuSQyjvp_n}v)2x<r3+ozE6-F38O0+fgD at H9
zKVbdUGyiCwq3LZ;+E}e3f2($2V{b1x&y_W$`7n7C&&mdEqVGuRW42c$w|7+)=kiYo
z0TOebuB$yE?3KpGpFfkJ^9gf4uAe<<Y)N1~M&3!xyK2>E$pCgP8b at uswEt+`b<AlS
zJd5`Zfz4h>d=48VH=jI&jP8z`jM{3$VXOZ7#;U)*{%<{hdHvsidF@|%{`}fM<-98A
zPp=C8H=UrX!3Y6nZa7N5)Z}3sP8{mnfuTT*<c)^_>v$C)bpGLB6F<*0E5D3tFK)s5
z2U7y3&nuL=*}bK at y)K#gCl0f<J1o at slbmGX(Zr#R6nq`?x6Yr{UB2Me$S&PHS>UTy
z at aabnBo(|;OML);Le4W`l3O^^ArN`4q1qMYd`wr at s#QOBSoNUwFWwZ-oZy^8NBuYF
zsJ+Lwep`SYVH<@1<u$evczFLSfHw&Lhn!db at yA#G?#~}y{+m00_~o<g1<>ul8Unzh
zHkvfd3xTMD>AYy#fe}K}3*bY5b$BU8-1#4O!Fe*(Ds1n~%qvydn~XFJr&`HilURFi
z;?n8_=AR^WBhZkZubjcKdWuu4asG_7VvHNNzs9pzLFD`cohJpa_(&f!&&r9MUCz at h
z{7qx8<UH3h?0uQdjCNfAA6{Lx>IVu=b-(Vlz||k?lf85P>+5+`peEB4Gji6Hp^>8w
zJT{Ovs5XB4PvW-?stvFcu>HrE|L(9YApiZ#|M&Zs^!)XAFWU3l7ylyXg}?mfg+Kr1
zg`*GOd24BhR|+H{0QYGa0%!`9UI56gh5+0MRKeEaaX?GXl$?L!0<UO|1;d<AiY at Rm
zYb-v;RIA>dzw&vkfS$hBUb$s8&L6b{Zr>>CWgj$#khs9&y|r=veyT%K&NCe8;OCjR
z-Y#NZ at -slu9z!SOwSVFN%Dr%)74)*qx4I;k=tHQx!9Ubpd3%Dd2G21_8&v<zq1wXx
zcQ3`UZQ%V|fww!)|LNE6{OY+sx`Y4c%symChkvO8P!SG80EBRqz!-{46)Zsrv`+GW
zD!deY9rI7&{8uyEVU5mzWJgUj(lE*SGwsA^%%ts$i+J_UpQ%1%WtU!fLQLw$4F50S
z{M}TC)#p6X5-Z+-pF8+iUW=!-q(Wb(_~`$Mb;uhGZz2H&-=03UW3$Oaz(2g5xOG#S
z;=Qld7uI82RO7lGs(JDJpFOb63y*Di at yq8F;e7o4FF4QW`Q2yFnDg{+e{N3 at 0*quM
zn63t+RZWFJOawv*K?sZxLfe7iz3XZfAX(?^bN-huU0^2pe{Sbb*B+}&SzrpQXK(L)
zZm>zXy$<GISC+4QUaesD&i at TF$vIRz#HDV%I{)N?SAx{X=R5(t04(yN5%3 at n${+NF
ze1uUXos|DJ{KLs3T2}r0y<`|WcOCia2-pFt72c_^4Z@%1ID|j-o1Z`Ro1fY9>z_WU
z=T|>@LeDRM{Df(Tk5vJ})nNS*!kM9<OavkXfE2B(LZC0~{CgYhL-`CoLlJ=kx4-Z1
zrB>&kl=CM!Ls<$YPl}S$TiPdKm~E8vSLYv0_354Yr!II=V>MV3Z|OZ}?=P%_<+qzT
zp^IHee-LEKF^<>1?){&~zJ>d~)<q}yYMu!<MNwX6_mtg+Y`ACllwCcre;WWBge$P$
zdU*wRDCBC|n077{m=*OwR8PPB@#DYvk)Fps`_W^c{ZP-NKmWm_uReDJS<p?VNeIA1
zAPs>j<**%9hk_~vA_U+MS&GD2C#wLTkNLZ)ZlwBCsC`V at 2i<`3nVgJ)Q%1HXIe)Xs
z;t`qcP{yWoX?q-0R+#gpIsagWe at x_W)DD!K0E~Bx2`_+_JKmAn7lhtu;eaJQj1Xq<
zzs<DaAkD!t@$*ytx&PvkXVxF!%@=PZ#-w|wbJ9*gy=TKchi$a)h)oU}KI4F)8|};g
z#0okm?~LpICFjSS$MraDKR&FbipPk_fd82jyNt}QYs1lPX#alp{YUit^!tze^m`9;
ze!}@K=b=OQ-*&TU5(0pK4FRaE(Fkvbf||VmW+-UJfPU-u>(4}7gh1<92=KX_KX4t=
zT!|=@1$MnTf111iiHZ%t_G+9zI%jQidHRX#NP9}bH-*}v_a>LMWByE0!0-LS9`6hv
z|Am8)$CAO70hl8Ro-ODLz6jMc at IQ5Q8;igc|I}v_K5g~?Qvm#vCurEDk&_xayh0^6
z3HS&0BQ`m3_$CK>{C7>>xntrE_-%iF_Jc=5Y_nSsv;%$*ZxH at t&Uf at Y_@nPU_ at hrB
z{Nbk${O}VwKag|(!TWAKbHkA`5oppdCSnnVNeD19+6&-A0Pw%=g#c at E{&t7gHD-qw
z*Rkm0OxZVu^EcZ|sRGmRD2bY!401K8o&Uorw>KuLeNr~Lq$>EvnE$VS@}vO3I68HA
z^3nM~4;Xpz15N}dk1PA)hmZc;oX>vvs5zcIto;l775F*@<xMp2GrWa0VVnT}b_E#t
zZ=bN8@&CIy|9>DRz(vqAZLjVryLV0ArDNib?c=u-2d=<&*cM<LY#Vr6gd2E2 at Pm)<
z=X_t!NB4bC&xiMY at 56h)%lSY~*b773Z at 3-UhX4!(r8}%?o$CciPWuqL%1F<p3zO46
zI0qHQVFkSve6PLo6h4PU4bDF+V_?+bn?mQGO6nO``>cWaza#TJdDHb>)^}W;n|L{M
z_*;7nNPhgC2d}+s0XLNVB7^&HG`0g3jX25gJ_M-TQF>rLDqC<Ly+Nsot<^_i8gh!N
zS{45+i==1Y`2Qla0*@;on~i1;|H6N8`#66n5W5V(|B$J>cWtms=cFC^oVIb>u=^<v
z?EAm}(S4kh at czyR_sDr)&ZqC+E$6+vKaq3SC-2_%u{ja~M0+v12?40B>uNCH3qWhw
zIwk~)od3DUfmm!`SM-whNiom)n$vU{F2DvniBeDF{F9ozE^+gm6Zf|N2Ri>ddHc-!
zXx~$Pf7O+VPy6s*oZI)r#hGJJq4412J-43QTwTP)M5s7PbaWl4Xr_;ChdDq7tj{#u
zz}k_a3aMW^6Z5uaU-a@%_~LvWU6zU=FwO<hl;B?|kjMXyT^sC5z&muKeIWl1|9c1c
z-`?PVtCrDQ#DSfF?HIg2e&?=_-?{T6b3T0g4tw6Z<Ab+um-FWBS1vtXLjd0kqeF42
zf}w at eDgYT#&bkx=IOl&X9gfT=f!NUY(wp;FQM3tH2S?8TrX{x|Pc{5PO<q>#|J+T{
z>RzYwH*b at B*Ua1Z(cAXj<UQq`RVT(r9GV>C-^5J(QNL$=pnAg5U3K99H=jKdGathT
z)QG~5#-P-!;>Kl&MAF|HYM}%p`Qr!ovM-w<T at 2gt_-`4#W$W0j;WqG}82)GC|Mwp{
z9sKXXpYylv6Tttr#K`tn4uH+0h+{i~H$m~n<2yGP(SmyRy*F-q?~PmEechecZh6O?
zeRtnHs)CK_q8G-m2J7jNDu8JX%j61JXF}j`sv&YRO<G3I|1yU8pM3R|i*$z_gV6Z|
zK8=pxn{GIZ{Lf0juWBEh|1Aj}z84eu8s~rMLrH1RHFo&E{p!u{ylUSU-ks>pdi_ at 3
zJM#|S_Wm2Uz5gcX_STwW5_F_KtT%h>_7C5>LymKFAH97?XfM`e;)dfbNMBexiVO;y
z(xc2F^+&4G!ukgFr^T4U7MF|tSN`jm7y2#O8fNg1^Un<M&qi10|KUF~4<5JGT<@;=
zrTp)R)8=<K$2<o?wVqqwbJ(V;!jqXWw2^?FpNCxB_ at 2g(- at E&*S8jgmm6e<~U)HnY
zjhEzjA)JN)@BzOXO!orNAh|Au0Oy@!$2*jo at oP{Z7`|uz2p+-(rhcknLWl3IH=p~T
zjCUaI`Tb8HdhLZ9Uw`o?fAsC(<C`yY?AxSo8SmZOoL6st_}-;tV-#{|P$vv+g2r%S
z#uC^|WHr`s#CG(6C3}<)#6AK!Io76D`+_ZFJj1a}aaa70>)?v{^=HpSpmlshzg>P=
z1N^6H<YpHC6Sn*1PoBiC9g-9AY=1T9vDI(mD0mw72(T at --!ji_WM>_ipE|0I-<0R+
zpD+(x&#N!o`0De^^}O=jaxa8qA{H)XwAl{qLjW4&btvdMa0P_UpTv&%b~98hX at Th}
zDb{$Ua{kE+OnaN{^XUioz4-Jp&P&f+ujl1wuYdX38#u2#r)T*q?oE01dHYW3`{mz3
zUcB)VX9eX3ChJ1rnXaE?EO<GAgqlo*6TM%8E5>5UK<iy at oai{7;GAk`Uu*mNwOjQI
zhTkRjnx7<uvEn%d^D8SKyz9bgqubmsD4xN4i4fR47LRRS at bp4>>*Li&%`^AU|HWtI
z?clud^s=erd;Cyb34zT}TnzzaHFp0&1N*PH4&Xmr<Hc^H6BitGiKcxnkp-q}<@_N(
zy)3hc(mwYS`Cjq<+jl<m*wu0#zxvt7uaWb_HP6Yp_PHmoeO}IW&p&nD3+6EK9%Fpt
z<(2Y|Jd?skVrKH3^<C~=ju{I8c>M)?t;l2#g3ZBMO(R&Jy=4d<|JqzPD_(kL8O3Or
zjF5+6P1DD;PZ`zffaf{G7ki;Mn)zrbhyT{*g;;cG;MJvhRJHgq at Zl7*_(?ExA{Y0|
zikHA?n<IY10h<>ou&wachs at KKXa1x-e|Z<4katAin!R?}bc1o-rV3_4fSwlmI|u=~
zWG_IqWI at -75Fngqj?@`eugrffcR1d>Vo6Nu9G~jRQ+ at 2g%N~F5aybuO{=`F9$a(mR
zCpnK?$$3i8qgOqx$5 at B%TL*aLS4Vc%LLMLzfsMq>MBYc^vea?$(R(vq+<Eg75{wXR
zvlk<e&IN;iDK;to$)b=>1UVi{;R~w0P{C21b>N>)6Y$Ru6Z+LPzBar<-EYhZhu?+Q
z0e}M-2S^5)BRXoqKL!&1g8sJ-QOz^)zz(o|t;hDWkBbXZU-a~2_TfME=vDf5$XoL;
z=Zc-T+sF&y2mvraTLo*WF;y at o0)4Y5VujA1k;@ErOK|?IvD2CtI~-YKw??V+qxWC>
z;N2HLc#oWi?pgZKy-VTe58r#q!}neCh at Sf|<#Qf=fOFYndU`XEhp&Xv;N_BR<SO1W
zdym+w#NH-%tUQ~RWSx;qnMudtdi=|RJcs{=VKbUWZrU<tR@?Y(NvD{M%61`^?Cap(
z2~qbSyq3G{!n5b#z{$oWe at ARtJ#+Xm1hd6+=&qf|4pGhXd79%KONedMr+9K43)X~1
zkLzi~vhYs$D4dm?2QK5?k at x8SODB(Y+p&kW5(wB3fOhyMnTW++fNwMfO0mfZ@^gvQ
zysjkeL*#qq8v0!By7j!fZ<BM+ZRg)}`}y~B?zn(+ALq^sIrnq!x`=bpIY(0wCUG>V
z|9aLsR%0N>My!EgCV`EZd&FEN54)=*xJ_=pVKLz(1EK@`m*D?tRi<;3 at w_tJX;7xY
z|7PHyeeoXu<Q_?<b1yhnrrgXiG@%E*9OVxdlf8V7VHbqzkUEW1Xw=0DxLhn1R6^)I
zv-8gu$<9kFqy^8;UE?3T$Hr-My~;6Ht)SWfJH$3mb#VXnN3_?H1w|V7^7G4aO*klV
zQ}>F?l5@{ebz*q4NC;;_fFU{*w5eL#fxprCk5BbH9_N241z(tdsy-KOa=i7Xv&=dB
zwiR-2U%5oj9XFrDx$_pzxp#4H<(zl7w~pJ-?`kYBFOtPoJbd1Chy*UkSce$M1Dw0%
z$n_E4AjU at QJ)&=uyGI_m|5A?JCSok&viyaDy%bfpP+i3eumz8Q)V!px>wBg*4%1aN
z;D0+5W$OPu{;>`|$KE at hq(v_b_7s6@{22W!NA}#GC<C+~g>MMu&|@*|U~Ir_knF&m
zfM<U3G2Qj*v3VN$WGt#Jwj*GN*nZ&di{-H!2W8xp_$zf>crbNk_%tVkV>KQ_aR~wJ
zYP at fH2*9)-Kh+cRlf1)}^6rh-op$4Or{A<p&Wh_7>sfij8G3GBekSLZ8#!the6*&K
z!aBr2&J_a@>xdhOxjxJd;vReAC1URpZz;TYSPJhBVFKd|gl;)w33*pRd1HY8!L{8}
z1^>f0VL?Xgn5{%?5a9oXr<O%_6gMc#4U{1~c-dta97p*Wb4C?Os*|Mp*zWqrJcV$d
zmhi8l8_j)jwOsSj&_ZX?7Q=wqQAcsn7R=(Pt4s3u#fP<3kL}j)-Y~4KMx3 at l+Mv2O
zVBaaXv%~fUJaaj>oqx9+aalMnd3Ve^CGXeG=WMgZ23iHvc6jKM-wyoE_5Ue5+*#Ln
z?G-0qd*#X3$yv1QDs!$r<$7~&xaL&O@@qM#amY(h4i;9EIgoOX+^QY5D{ffqOyi8u
zI at ZQO<OcCJlFCeYkCbRB*Ww32j7rTK7{F$^(0LK?E^9J)w*1oi?7~VC*B<|Pet*%}
zyWWH?5jTq)lqCk9A($7exdC;8|52?Gd5C{b;y=_c>pmuYYx$APF&K_u9Jpx6q+ykJ
zUbte}>E2gIkOtegJ5*a>8;<IMeXF=2d(5q^cemc-JuOwYtyrR$JFZNxd)~WQn at -Xy
z*s#t<0%2)~|AvPEIDb0aSKfHm<rklD`O*`v;9RocN<Eh at yoz(#!mBSkk#o)EoRhA(
z;-tVdPQFe}<Elk!8U;CnyP7I^P&YX1(2L_nb8*P^k>c*K26D4pA991Fv=QEph-Ix@
zqHmV76nCKn#uD<bC^m8Ti*<Jrst8W38}$D0jtiJ#H at v-uYN>^m=L28p#V&^(yW0`-
z_n5t4_oGhO?TC5N*VNn1eP5DY`hCTUdm4tf)%c&&zA%QbzfRz#jiU~I^(`!)oz^gH
zW1<*#5pvBn4Be=1$cD9DQ>r^Ad0+!?k8KiMI4-?MMs?Nov{rXCma7Nz*Zob)7V{2z
zAsjy{dja~d|7{Zje1k*ar5DV<`26FRUNDby3FpH3mvS!R9DmtG#}ljaaFksnnub`1
zn8wv=8rC|*K+MGvS;sPSap+oJx<?rwAzQ-+Ws*Q%F3d{ERb(T}7UNMXi*xwCTqxa5
zmAoTFi#IQKmg2Zpg0Y08%lNLyWNdg67*1qC60KMZ!XGwQ7jvCC{7Zs;Xj`?TYM!$R
zZA(5gw%KX(UH9E`_XB3_dC)fd9J<|pN9=ImQ9B)SwBY~9`FqY at u!rD({;r1~cmLfN
zOMK)#uzS(jSOEyh#&84rpD=pi;w<k9*ak?li|5IcB(5Q^3&O#9-4Mn9ObA}%@R<!m
zH|9_H^P0}d)$J2JaZSKB at c#eXJJYAC&LoUiML-OZMP%PDJ7_eRn9;;6Wz>udsE8oS
zzVDlWpyIyo8k0;WGgFzVnJ at EU=5L%|zkN0?=$Mq1MC{a4r%n*=J?H7CpYDFoz2^`G
ziN!x|6Bn)T6nd at r|NO~o0Cw>~IQLx`MgX1;Df(X%R{^w(d;VnM+b4_PK3)6{JUcI`
z@$7t7#(Q+vM2B%zvxC(5^LI->3RW*1?gl~JAd3fqWy#vRTYlkwS-$>LRsVD&JR>!>
zZLj8t)RCWVD&cH-7T$mV{a6CwrAb_-gasvTB#G<3v<LHt6tBu?`b5f2IJ`Jx6noSj
zVCDACwXw9cv~>Q<NYBW~*u;OCne}abM>_`5|B2o)U;ndC|L41AmOTB>i2mCq7Wnyp
zq_qeTyt}s(9G=_J;wW=g0Pe!dT+bJ0pc?)2nPixB`rj-1|L|bt$LOE6tRvI{<{i2|
zr~fZ_Sf|srCv12Qv`rMecK2^L)Wm3mrQ-iZO20G!KVHKd!>_~F at N{f$id*>RjsPz?
z@@J3cpFKMF&110e9QdgbWCyA7{WnrOT;T|72icLDSwOR$lFDsDRsZsg0J(7-Pf8N=
zPvz<fQ7fwX6i33EsL at nv!t}4d--d06U<Q#fB<QsyK>jcimoKjGVlV;DzFgMGoq`w;
zc$8<A<S*+^A5<4fGv?uL(3J&#7~Lr-F3B$}$}1?$$;;2q&CSZrNli^nO9P^R#GkQA
z^ndttPrUwz at PF0+BHeOzEN5FqL2X$c`fs0DME|Ep=O_ at -_tJfiN1F}*2<1?HXBKl-
z;0Z<5yD%0kC940}cJ#kLqW^kb%PJH7?=5*B{eM<eyJwlOJ#9-V*LIh_SGwOHuKX3a
zewgYn_+ISp at PSX{Dwy68%Z&gpQPJA?rziL4o;(mdeK-%EfiOGHX?8425WjXT%yw<c
zEyJeB1 at tdZ3Um5TTAy4{wX3N1Q?aZM_DQ^C$x+I*i_xCKnol5KqafkXUdy#xVaF9V
zUEW~gkL|7p!^HdvC79xu<&NeNm0gO?&GIU_z7NVOt77GqC8gy>u~OAP0_Nv0(tksH
ze??JteOtfyfA@&<|H+n6|L3Wm?<Obm*%CUdj;RZDM85uKTZU$u2dDg!Cr1*vF?}GN
zCx7x`ZOQKK<vVJNLvt2?_AHtQ5u$(S!q}nC*T47)Uz5bKRnlw&Rj(>+)i!s$CrN2L
zS;wfWDc)M1FBSj!MH*vqIoBuSd%*|cl9LjuX at S=IO>v`H{P6DCN8p~|@%>paH{HST
z%My at I3fv@sZwFI5{PN*dko4>lxqYIi{|yDz=%0}Byx{$K6v|YF|MWa8B~)AKwOqRu
z?YM9up2ou3Bk#4H839+XDiWvq0r**?JJH<n2bSVkX>n;;Nm+TUyrQ(C62X^MRhL)S
zlvP&qf~x=Gi2jK(KVPQ*bn$;wy<vSK*}<1+ME{+u>pwLmneS6DErO0|(SIBMKQ>Q+
zI5mv^r%w({Hua4MJ%)A~tT~YBw4H%~orax^eScOZXBThvRxQ+}ol&cvAxe7G at 1$Q9
zI5ORQ=c^jF17TCmopDL)`&8Os!IMRtO+hE%`T>dT+i*v$sO(qWzkhq`{_Sb-;0~Ap
z^V1!4M3N(#AonCez!RVqWJM8?G+EwgDcd at Uc<t6x8Afy-aebFRu*=Nu=Sw)e`&r{B
z4u4X!eMez&NnuG0S6`|Ba;N`_n%WA<0{p)ss(-Bu*|~XP|Ks$JrK`82f2u&J{{j4e
zM*ANc9=b1_feZqSz at q<&g+TvI%1-|i6b@!*S%q_LhDcW-0*==(O7>*TVuhZ#x^zU(
zSOo9*enkOeHD<o0JU^=HP}rjCP}t76q{M5jf9j$pv2$^hXx^LE;OZT*7y;JC2SHa=
z_^bc$&W(vXHzx1i^l<OilwxI$JiIgW at Gc1J$Rj^ZT&B!Xh0#@YESFxLzMY+*<BBB9
zve_g|88^Rs-lc=QpF5<_{aaI8ckC>VmBsl#`bYT@{V(f(XhOhB{j0Fa0*oE~AL|@)
z{m(dh7X6RT;q&M}B{_-HN!gI(mO#<J8-elvQT+cb`fnbXYU=m&&nxgcvLfdeA3{S`
zXXad-Eu-hapF<^M)Dba at tGFtxlJ@kBumeeps^`?8*b)U5Huat85TlyXJoqPr2!R?M
z(F`IxH`T#aFnv1qtLx-#_|2PF$H1*?VEoqg@!Nt4;BsUF!6YZH(@Y7-WXETC`az_i
zxJ;2`32KUqk+ at J0IL#WZFS=#TO0LXqNUAB#<${i+k3X|GF`T=$G`wx+uAu*M`me35
z*%J7FwEt)R<$zcAKj|Ac at D{GIPk4#`yUs54%v}M&5~wTzjm<Lxi~fg1|124u=o`oX
zMgLtxj1mp)1A3@#)N;rFa6U6F1x?cIaZ;>NM^BmkC?U?JeLde(J&UA)R%*AE+O3EN
zLPJwgoXu-$$TWP!Q3C34^O}VC%RO~ls@&7D-=-1ZXQlA9OC#4Vk6c$=8NG33baVQ9
zWrbPHRwRgIil&KU)n$q#i_)$&W!18x at e0DnPBd#Y#D1ai%FXhM<8^3<n%nAj?P2(>
zs22UZDM0$4sQz=~*MC_3Njq at j%-1K|54Ln3YVAI9rWd*5+l}2Lbn?vulc$Dekayeo
z0s}9$AL`#Nfd)%Jr$*4fjKJuhKWyw7bNU~qm1^i1V5WHfWYKqH)v%sRRKx7cxkss3
zF6JrpT#%JcFH{xF#mqrfN$%|%;z$mms=bIf`yx_`>sLlKe8f?rd1?46SOP;=mWH-g
zuZ0i7{VYlU;$OaeVes<B!7CSsJS+{tp)h%A7*-v(ex{HwKK~MhtD{;|*iMh1A%p12
z2_g*=r8&qN4QM2Hq$P`{&&u{Jkjk<4zMXr%^!>k*2C1mTTmSL(AN2pC|NSr1{}h9*
z=zjwJpU3}u=dXb7*-Kmti(3Nq^)Dl^i~!vuTtqn9IfVYHDJ-j!T)|=M=|oS^*Dy+!
zI!m<;EIKM?cnkE*&h^XjlFlvLkyHACQ?(~-jS=yZs9hM`QkD<Z7}wJIfu+TMa1ktk
zK7Bg&FIL6d`G-QC<50<j)k{8TD(I+{_SN&nrHr37UgBt#nHoEtl$@fs>B}vviw2#2
zWFR+q;WMboN!0hP6$Pk;AG%h}b!*qg51nk=zH at hU{`K`AtpBI&JKh at j|KX_r_l!FK
zNB?Ji{p0^jy>qJn%Ulc7B~V!cl1l)yR0@`W$P|>UO$Emjhq$v40Xt9TTv&Q##gdyf
zJ$^8+<{a_o(4`Tx(2^*3FU*N;N9}nP9~D&nfrV2RqVp?u=9Pbl{<CA-0##pF=o6gl
zixq4>f3ElZykJq#vpCnYAn0D0?LOzg*Wuqz8NZgZhD<0GV&{95=UBdQenB81AQ1SB
zLzp!wY1}q2l?7FIxmm9)Y~<tpTnt73gcAMdSMDsV-c6LlqC at p@h1-=LEkLdYNkMne
z`hIEn(|rePw$*X{%h!MC|N9!F`tLb%rce5xt|1zDU;lysU!d*poxckB6p$-(QtYIK
z2oSvW(s0H``JQ8PVgh|WD>leGa^zAy14CASxO8DK at C|WhG3SUsJBya5mZYSke{NmN
zVyV-Ao#?;v<HDNVEJWv5evJNeOY3rC+xUfxivz0ab7#Be6*FD)Go5pa>CV~d4#8B%
zSwZ{R$@VWl+woeIU at xL1!}dI!JMxKw!1)Y@<H1>wWX)U;mlgag%cB3p^&7H^w-8EP
zj>sZ at aXBx<&f=ok<d-3Q&#Oc$c9 at i-*MGk{)}s3VqwD_<xAxRW^w099r$bd^utk<4
z&Q;z;>!7!ljzXFWg=fOfhdnF6iUT-LcDC%?W3H#%l>@fo&yFik$+O)sv$?1?t9YwA
z1A-U*V-DgEyW=J8R6R4<E|_SWo at is(rzq3^RF&kE7Hlrc-84CNS}=NgLeTnAU5%;t
z^)dkS0*%6?_zVjmbp8aQvN#8C^r9wq)HyfZnVwbr?#9f7#3Z7O%jK2t;Bvp`V46h1
z)-T-1Bh0DUZf;dga9K5~EXhH8uF6ZT*F-C=s@>brjQ$(i`t>KTxYgI08b8B}lLh|E
zE_>@Zxr%Q6qYX|$cEpM!Zj2|pb7vc}F%>cAsFHm#qh}A}XE-WA%5ZFPl19}NBdz0t
zQ($aZ(K0&ZVPvrR^+w!Y?L`boEF3T#FHGt`W2dLaydY{Q8IY&P{rI{-lSCQZi8L*R
zD>X!!IgXqnn?fLx5L(tnLaRfoe`L!?jJU!@pG?zIUX&H;P=9B|>qsk-AotSWTv(&2
zstq{}8)Zw6D#&_vit{#+k7P}#Th2>PbJ>Z*!!l+(XBKmgC^=5dNIKLr!bZ{_2AYQl
zPQEA{_VeG6fgnbK5$O(BsVEJ;O^I2J1Ls|Ct5znSCh!v~vLmHj@=M|Ji;BRoygp%F
zd0`eNxlCYw0>0u8Q#bMPk91}h)qiF|RaF1^6(2eMZzm&YRP-R7_l6EEXW^M}=*DBd
z8wYH_PkwfKNq***vb+(Iu_!sfQ2)uH{wBq57({#P*TTR+?+Gy2r)V1N^ALpC?GSOn
zFo-BY_m3X_JSpKF+&f6CU$8Se*bIU{Op~wqC(<NS4w&VGpX&}E1*A!f>Yqgzr_yCY
z^$yh?xgI~~!l#MkWea)POukR;pRb(0QsHkK`+FK+3&ZvzZwdoFoyP=S$9k9HcyHJ7
zq=a>S-N#o!kLct@*pyeXxv)C?*WShfAABgTFeihG;C>RPz2JZ4_xr(%-y--YZobEa
z$!juW((tT2RL;U7Ji9j~E_R&1J_8+RjtJW7LFY=e*LSwpceOVt_!bq*BkSLF%ctvE
zKHab`Au%JjY*T)vwkXn*6xL+sS9NzZbax#6ncz<v=%W(Xy at PermUMMA2>f?nxx=x6
zU!OF4$2G~o>6U{YP8~e$aOTt at keDEX)P32u9%3mq`Mq>55~XLy;`HC&d!nuN at QXlO
zvOY0^=a(Vx7yV9K>!AR=*P5i-PU?5gK=X<H%_k0cXgbim0xeAkmgDP|CP5l^mtOY{
z3NOgXXgT at y|Hbc|2Rl4tps8{H at uPbcjYs$DCz<);RY7(}<FT(^4r9+4SYr&-AO76o
zi~7S~tg%zG(=i5&0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N
z28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0eP
zW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@z
zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em
z0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c7
Q7%&Em0b{@zctaWZA97SnL;wH)

diff --git a/kernels/compiler_mul24.cl b/kernels/compiler_mul24.cl
deleted file mode 100644
index b69dda0..0000000
--- a/kernels/compiler_mul24.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void compiler_mul24(global int *src1, global int *src2, global int *dst) {
-  int i = get_global_id(0);
-  dst[i] = mul24(src1[i], src2[i]);
-}
diff --git a/kernels/compiler_mul_hi.cl b/kernels/compiler_mul_hi.cl
deleted file mode 100644
index 28ce0a5..0000000
--- a/kernels/compiler_mul_hi.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void compiler_mul_hi(global int *src1, global int *src2, global int *dst) {
-  int i = get_global_id(0);
-  dst[i] = mul_hi(src1[i], src2[i]);
-}
diff --git a/kernels/compiler_multiple_kernels.cl b/kernels/compiler_multiple_kernels.cl
deleted file mode 100644
index d5cea68..0000000
--- a/kernels/compiler_multiple_kernels.cl
+++ /dev/null
@@ -1,7 +0,0 @@
-__kernel void first_kernel(void)
-{
-}
-
-__kernel void second_kernel(void)
-{
-}
\ No newline at end of file
diff --git a/kernels/compiler_nautilus.cl b/kernels/compiler_nautilus.cl
deleted file mode 100644
index aa7251a..0000000
--- a/kernels/compiler_nautilus.cl
+++ /dev/null
@@ -1,66 +0,0 @@
-typedef float2 vec2;
-typedef float3 vec3;
-typedef float4 vec4;
-
-#define sin native_sin
-#define cos native_cos
-#define tan native_tan
-#define normalize fast_normalize
-#define length fast_length
-#define mod fmod
-#define time 1.f
-
-inline vec3 reflect(vec3 I, vec3 N) {
-  return I - 2.0f * dot(N, I) * N;
-}
-
-inline uint pack_fp4(float4 u4) {
-  uint u;
-  u = (((uint) u4.x)) |
-      (((uint) u4.y) << 8) |
-      (((uint) u4.z) << 16);
-  return u;
-}
-
-#define OUTPUT do {\
-  const vec4 final = 255.f * max(min(gl_FragColor, (vec4)(1.f)), (vec4)(0.f)); \
-  dst[get_global_id(0) + get_global_id(1) * w] = pack_fp4(final); \
-} while (0)
-
-inline float e(vec3 c)
-{
-    c=cos((vec3)(cos(c.x+time/6.0f)*c.x-cos(c.y*3.0f+time/5.0f)*c.y,
-                 cos(time/4.0f)*c.z/3.0f*c.x-cos(time/7.0f)*c.y,
-                 c.x+c.y+c.z+time));
-    return dot(c*c,(vec3)(1.0f))-1.0f;
-}
-
-__kernel void compiler_nautilus(__global uint *dst, float resx, float resy, int w)
-{
-  vec2 gl_FragCoord = (vec2)(get_global_id(0), get_global_id(1));
-  vec2 c=-1.0f+2.0f*gl_FragCoord.xy/(vec2)(resx,resy);
-  vec3 o=(vec3)(c.x,c.y,0.0f),g=(vec3)(c.x,c.y,1.0f)/64.0f,v=(vec3)(0.5f);
-  float m = 0.4f;
-
-  for(int r=0;r<100;r++)
-  {
-    float h=e(o)-m;
-    if(h<0.0f)break;
-    o+=h*10.0f*g;
-    v+=h*0.02f;
-  }
-  // light (who needs a normal?)
-  v+=e(o+0.1f)*(vec3)(0.4f,0.7f,1.0f);
-
-  // ambient occlusion
-  float a=0.0f;
-  for(int q=0;q<100;q++)
-  {
-     float l = e(o+0.5f*(vec3)(cos(1.1f*(float)(q)),cos(1.6f*(float)(q)),cos(1.4f*(float)(q))))-m;
-     a+=floor(clamp(4.0f*l,0.0f,1.0f));
-  }
-  v*=a/100.0f;
-  vec4 gl_FragColor=(vec4)(v,1.0f);
-  OUTPUT;
-}
-
diff --git a/kernels/compiler_nautilus_ref.bmp b/kernels/compiler_nautilus_ref.bmp
deleted file mode 100644
index 9d2dd96c9637e4ab834b2eede4bee4e1ab235e22..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 196662
zcmcG%_m`YilK1((Xa9-avuA&McV^lFjd$`=dGCE at miOMto03$Ls^q=*-W%jW2m}(|
zd(+Ugp__(=HZ;R at ckU-5p6BLMSq1d$+3gea%+1Vlz$fB<BW~P#C#T>0KmND>A^*FV
z|N9Ra{7?J8|M@@ucX`GC>~kC2^WXmO|MegL{%=3R{^Q?%{2%}R;~)L|Pk!|8Kl{m#
zZo_{1quYP_qdR`~W9;X*iQReIPwu*1?Cv{$a?c$<z31mYy;tqNJAd}z-M2k>_w5he
zBlhsUw~xE`j&b+hG5)?gCfxsXY~lkypY*`br#y7m)Q9hy_VC>a<HQoj-;;z*xF>be
zeQA^LOP_py`jq=Krre)7_5PfM2Xhl2Do7qzkTR|?Wn59}_+l(=d`a4b()0;sSjL2K
z_T&hbGr2Nna#ik>YAkO`P2SYn{Hb+V!L<6qX$^(b8jG-mrs9OQvZSt1D%KrN?FpyN
zs?C~Ro3*exZ(&RRqL%!{t@(qk1uMEs*7TLH?Jr-~U%q~N#rhc)8)j5&oLRAHW(eCj
zGsH`5O<&o%=@onpU%9fUbah|(^6rx5T_r1f%2xE0 at pA3-(3<|x>i&x5J!Q)}OO|#N
zFX<>=)>*o;FErF$w!F83!RqOeRsE6So{FKKisilG;oi`a&ho*|vZY-W%ljh3y^&=-
z;iWy{MV%E3T1yAo%jdR~4769wYATstU)WQV-%*)cUz%Q1lv-7o63R;|OrM;aJTZOR
zxReR^B#YghH2&^s58s(M{_aHiw|y5j@&4N<-go=M_x$XEJAaJb^|ODw_xAs||K~rx
z?~Whed)MvBQ^uuE9hW at i;k0Svb5f?{rcTLEpNbV`CKP2Rlw>D4E6+`F7Rpb>Dht!G
z>f+4$@*J!&l-p3AQ&*ZL&$29MP2s%ea9(R9zqK;n+A8z0j_Sg$+G2Y$=&dj5t}X7Y
zE)=UNWZYd>%)qRxrm&-`z*$=)uO*z*63%U_%rj%$s at 7bQ-B_O4P?lL=npszxQCpG`
z%1bWGPAtt%2x9-!AN{+-{&vG&$q!<G_Z>fl_WSR;4SN9lPV9yJiT4Zh4*O|8gnj1J
z2lA62{+F?zV%XP!eZFE}Ftt90eL|CB-&~x~UY6Xg*!NduOs~oqfca)+Ua&71Y%3V*
zEE?`CUe#N=y0;Xzjd^I_G%K`O&EVfMJHkge#p+(+-{4;%{FlN1%HA^NzjRfAe}%sU
z_y^mI*UpFxcb5%yl`ZcX$$xhR at GtEuhySJBxI=ijFEV8OcZZjBhZeS%FX{}<Z!6Ph
z`OL=RzPiHh>im{ac3nw&eQ8EbQCcWBsW at XQE|8rx0WX;Fz+DgB`J-tM-D&Vod654W
z0{??|{^S9%AOBzf=l?P3;d|2(CZs6vnTZpz{PbxBY5=bWAxRGP^1KwYio6soT##l~
zS(J{|m1RSFQz(ytSwjWz%ecNQyRjk%@&*3N0<*Ttf;a<vtgWg*I0t)xuM^;nd3(aV
zGe>?$bpfcGwO8T=xjZ2s?3Mhi#&WUdP<Cr1x2Yn#wm7|}IK8qUHByj5w8zH89 at MdW
ze*Uw2u{(bT_V at j3*iU{?m>-3`27HZ9qociHPpEg%zQjfQj0xo#6D`^k>ML^;dkOX5
zk9{K8_f at 9PtjQ$QWAhqvf}ws%TLHGbs~B6+UA(fpWK~beYD`?9bj$28ws{sNUVtxP
zn`eiCpLqfPf#2i5yA=3`{oud6yL44=`O4mMg8!<%ilq|#OO~`t at E`6jC-^VxDqGnX
zUeOnF!GBqIg}~oczN{NBs37b+{)c)im-R*#cZCMK!wWkq2D>8*J3_OYOO5~5P<CTk
zMnh=^E>KyJQlTzTk~J+aby8-+xU9qp*~t at gQYK|5i)AHE%1N1=l{C>AFZ0u;V#QgB
zr8&uFZfua3<s at T{c1M1sAPuW3%BU&H#Ef$w2X!+yZmh_~AU}?Fd0FLIdsP9n^EB(M
zDZ&80CtzJQMa}@;8KK_D2W&6ehq6H(bJ#O(i{uh6T0%MYudA*kqq-=qEIZ+jpZ(;H
z+kW!%+kQfjzw`E=-gUb$Z`cd at hW(vC9PKAPc;^pdpEB`YCvvhA9&{q-yRZ*sO^RWk
z>#&zlFCs^yJqo9}B(bF=skJnz4J%7-FE{Kx=I1x&E@;eM+>*bnqX>%&^=nZw{RDH=
zPWgrz<r`-pbr3dX43vL?-&Z~&ehhwQ3I{(w6XgT{C?Dnm_y_(K%6~BUFYPP^ei!^#
z^!ogFSHS<`j#4l9_l6NaE2dX1 at 2?#0s}%lwB8xjisGxz43gZ9buE>J+(2Ry+^iNZH
zW at 8!Cy713LP+gRY3zTL}!v%DZP?D8Uk(*qaomhfpi4|uhl;%iCN3 at jZCYyQ*J|l%`
z_L5IAUOMA_H?Atqs4dN^F3!LhVD;tM&d@)Mn?ku}j&nC~s5{`}-T`$7zhGZm1n at k2
z>rqDqooelfC=2q6x-lOlAKHV~RG!7ZEB-~<zpGGgVp;aIJ8zH2{=XINzZ-i`+oMIn
zUdW$vf7Y}IzYqI#(e^O!Veboj5jnoFZzxJoF`w96oT#X$bX25tR;2Vs(h2q0ocf#v
zO?fee(<;~xbs%q`wAkbg3TG|Mi^BJqSA}1(d6ox1{DV5d-@)&KKeA_4ZyEfr=`V-&
z72T!${9y1OHvW4MIb{U at B^vw at Ka1OnE%+n&3I5A_L&H5Gl)u7XM(`i(EMMGF2KFnb
zSFPxe at xN60C-@ux105mwpW9l7{vrO80`On6wm1zJK;Kpuk`APn=Om(U!}%##C=W}n
zEKI{-m56Pj+o_juL8=HC74YHwR7`_B-|ne;`^Z=L8LIOI`yl*CeO3ENpcwWBe;n9j
zzVwt#HHt{G08IphcEg^R20YL1+9C|{n?pI6MR?UVGIs9-v1i;=0r{f;`FBOe6v;~p
z<t9|*Bot>%anask|AX3o(gSz?i`ZMV&-So?h?EwKMSD>=<6*ucQ<=AD?_=Lkl-O95
z*i at X@T#|&floH{SExdP>3-&#cG{e5XDjj(<(1faY$!r11tc7}$H$L-aFz;b6S*<X?
zB_{Gc{+Se%|CsXGFe7BjNBJ)$=Os-x_?LDREp0C%_!IfD;jYpZJ>|f^yt{01TahXM
z#qGdfj`G2T|6ZT}?ux;VGO#E3JMm-uOYrYQ{8Yj}Vc+;)(2f at f|MS}`;6FG8-~!AA
z%;}MQ5kld-WUxoynioVw>xv2O>Ig<J?%+Jamo(`rY|^WW#P}BXG^rDKW{}v{l*rQz
z!B1}69Lg0VGNZ$*P&Fe>MZQUWQTsmdreS>eHR08?7t}5PWgr1R!ViyO?<*X6M>yA~
zz#kUoH66}z<O4r3-&twql;ZTs at z_f~J4PjEBFqP{pZY_U9LhLB?DG_R$~aQVQS8ez
zCq;6mAm%G`r_>fC)D<Mu7h;KmeKFW8^MZYHYnfr6(j88tZX?)hs3)2ARK1_f!aT_=
zs(#p4^*;7K^D1vP3-+NcvqM{F%hUMB7fks8KZcLE;1B$k_FC`<eoWynHu#tL{1g0#
zy2K>-ca$t at Eh6$SY$<fXe`#l#1%J(U%LxAPKhzUi))QLV9a<ulpGqn}%loT5 at zYz0
z_>bqmgZN)Qv#F#@Q{a|RR&zxb{MTSbX{aFbyKsIo`5lE0_^i_4FH?ZJfbonYShUwT
zFSCPLC_lwSj?X_LKRv*_sQp^C`m!trJk1dNRCO%L)jU^<Iit-19~>C`nzst%057yx
ziCL+~F;4-<nCHnDgLzPQv>W-nYz^n|uf<}1kbJ`)^3A+xugpJa)k`U0-a!Eq<^_8Z
z_IFOUd{(fhsun9?rcAt#>ZL1Sg1wM0+FnAvRWD0K*i5X*njFfeP&u_aZ(4Q!w3_^B
z4ttm%fxU)$u<w*|Wtw2`hkDIt{bbg#*SaOlFKsV$nXJkiVR(Zm94lZd^RtBcZF9m~
zXJaw=CCOFU&o^4|7yhl_DK$?ff-vyA;O~?V`~&|`XNg394gSE7?5ECy@`3+_t%U<E
zg^SvXiTq0g!Qc3&+Bw`C7XHb6yDQ*dv8VDGq4K$;J8a3X at jtJ%jQB75zeD0bDR6IX
zp`^fpEWli#wj>=DM2W*yIhYG%Qcy)?qR8+LJUxNrW{29+%<nSO`F!fKT?S1RlKk?-
zf^0Kxk>uACHf~_?9Ku^8R7AxLcze1x85r<JyYX+p^EAB4d at a<&yk^0WPh}vp9<@_U
zWlUmzdG at r@%&8808Dxl!F4_mMk1yjSO}ICCf{1y;K5dd$w|BzcRWHjjNnNLebEZUc
zrdH-ot;!SZVcx at DLVbcMoLICkP3ovf?Zif5ZwkkvJ^8Gb>%CA9_RHD}t$-7!>Yco?
zP!IOo=Y)AG|6{<9><50P4B#gtwwg~+`K;})kjNhh{=km`yeS`rU-*}rPe%#x&#up%
z*O>3|-&r=)O{w22buOXQFV)Ui at E;WZt at 7#dKiCzf^1nce|E0$N{I>Er&80IMi at S9R
zpuJMc8XD-lLJ;+BsHiW?v??DifGDzBA94tF6q^nTQ>%;kRCEs01Yta;WXiKm(g&VY
z&c#spHN_cbjLnex{vgMaTy%a51$p0sJi8Pi_$FiC=c%C{r>0^9`7+?2#Tox-5RNg>
zP%mT5N}W7$0U at 6ve=$-p8SJqb_R74GUzj!tv$d)T7U}~ECt=(@3FGgPC8`Pc3if^u
zn?B`%jHwS$sE2thFX`dJ6j3#$857GgCV{;Pn at H{m>}v}&+6S;l*teFYw3Vl{i<lSe
zb!BQqw71eFt5jCQ8EDEy;Yg_0XuqtZki>RnkJK&42=yv&jQJgN!`rbK{9f>PwS6f8
z`S4TxH2$gZDEuL6K1BYtQt(&)yGsY#3Z3#9Y=eJ<P_Zc=fxok4QCrbqN6GxAeE46`
zT*!EFJMY7Px$#ftYfD{z at E7qT{P+6&OXWWd|62T^_%GO#_ReW3i{rmNlG{;5xmy%3
zV!);VNs47 at Koo+wfR?+1UcfA1f=9zR`XL7aW9B4{4V+V$)aNM!S=;j9NA25~K^)R?
zFWnay>P9=jJ8L9vt2wseJkAVwW8UgN0M8_7l^?LLF2v1+d=L8o^Fi{9(k5Y39=aPd
zRWl9d#|iUTim00V(<ZYT`(RGu!&q+8!+A;L@{`31QpOj0VxFZ~VP3IU<|W$4D;$J<
zb4ju<=7o6=dl%}%lFTCPXVhfQtPzDXyH2rh%8g;Kp?;{NkYWx-F-NfXi<Xwjn!FM0
z=Z1I8jqI2g;VJOXb&-FB@<HT#@O%8r5*WeX)^;uUOSRv at uNBT^9ise+{DT_&ZF$#%
zzrk<H2l(eU<~#luwUsREE=T#myaj))_M7+-{?R<L?A1%~kEr;O<d^tAyQz3qQ!&`j
zZY~l2TT1)ui);y)6rdBU%4_rFuGB&i4Ai$V$k7l=aYnsBqCE*h8hL at F2E}0PMfD~M
z<5Ife>FIgr1@^`6Y41BwNpfv$39mh6h1WAr+t~Yrboce9`F+}RiSQ0=264>Cy|idA
z at OyQB;UDH9zf#Dju;a;_;GiU9GG^GjXY$1R)22L_j!k_qW9mbh(;mvg5+2G<@R-j{
z8kgso4`Q#(qw0eS$ArC#`6P1Krjq35Qo}x_t;}bBl){-&4fC=}MW_e+IrZ5K1beCH
zn6TGSFW4{d671tuy$kiie0b-)$lie}Yz+8S`MaD~Wxw!mvLEHMMwfsMekwfcXM{}l
z6ZzNlSBzFZ1b^Tc{#oHt<!@>4!qy_-H~!~07ZUszVQnQA{1>&CE^I3?!B5#!Gv5%w
ze`)s!{#o-{+!aRl1o@}`0T)33^wbm}f#BcIf<*-}1&9*X3W+fTOT1$NR%sW%Fqk3P
z!&qg8`3RE*hA%kR at UnnFs%s*j$pVIX>d%pJ&{X!zJNya*+dgH?*Egss=lspkE>9cq
zXZy};MN99CMbhKfr5SN`e*B%PuZjH9tf at iZZEV<=WK40)%OKsejHwU8ykPG$KSrom
zg;SI^p*U><$t<BB>{0bK`3aK47A6wj>m`RxY82)v-6-=?y7^9pGrc-980zQLWzVh8
zCe*|HqUJnP^@Mt at VG8z;xwfy=)~Ch{^<ckmVKoN%j4_G-8vH%Y at 8F*u>uMMQf1d__
zUD&0(5C59*O7I7MDfmmZznGQ at 3Z4@D+lr`gTJWdNgIVwg{`pM>F8I%HE)f3PN+|UZ
z{1>;E8vm3%7qyoyY%d*XD_zu4zOcP)ac70LJ$Uio)_j%!65>B?55)hu693CI{udDT
zDS at _zv&n)b3t)XeoP!zv&_XabFA(<BDU52~H-_~olEXYgv<+(ng=uEy3p|}KFp!_A
z#`o&`;!uH~CiySs)9$_G9b-QD<QwB00lb}A+RKxFE}n3XF}4ZLUP3+rA2TuU!#{<>
zKEONk$oH8C{$jO))QQCTY+v4}s+mxjIzdsNSdu=Gx=pFC>RqU>DTrZjp?(DRQm#~m
zQ;{md-YJ|&nlP`Sex^1gNT?5D-;$@Rw5WOw^_ at j4x{6Wbg1uL(_llNI-dL!I`Ta`1
z!e1Q+e^B;oSHlSS1G2x2nZ*`%QU1VBSC7ZP27kKRRQ41vA_r0BW5J&aKfzyDxTy9^
z&Bx$}|5<gpF8HJN2RlmPU*Rtm_yhdY;WpSQ at gMP{#UIf>i2wPmWyU`}Z}5-)C;n^Y
zGq0;E&t#AA9~S;u;ztFU3y=sne%wTW#y}1^v5ndhtH?3<O&am63Yg}(G5(nsoH?iP
zevbV#|0!v>xrx5xyv7C&a-D0$q4;avo5r^N{rt7OB$qd{kL;bwg5+=>>)pisDL(%(
z=40>&us8C-zR<VP%nSCK%$lmVx+T&6dqTYm`}k1b6;A7`%8-^bFVuSq2j)>YgnC`2
z&0D0{54Ps}tF#j86?@4^gP|UhMb&F;H|7s4s@{){hToI at qWrz!F9lCpdVKgr_9OB|
z`H1Z46Zjqf2EUX21b^-DEH$YE|H%GW at b}<ng|~>bmuNpvga54h+?jQ`a~kpq{-}Lj
z=aR at jGWeHS@OSaw6aT9JS at SafDgMAe)?Zgh=R;pzL05HNdn5;I!-V;4vS8sq!gL at m
zV7YLd3s_7R&EtCkUjTa+=d~6j*?}1iMNabvW(QG6mQ&ljp!tRTK>J-j-d<V(y~eit
zOC02UyA^5eBL}t(pq=-PbH>DZv7%JEcgX7 at pVeDiz;&S>7jVp%WKO}H$Z-MRVebvn
zCL(Ey(>2rw3OK at i)?|8btZpd^$1BmBs!xhj_3eRB-&g4~|Gf%_P!ID<TJuHKOQ`o0
z4ot46{a|`otZ1p3EKz;ed{H<6e_&CK+6egh)QkM1;rEn}G_#5355R8)Pf$1bZDAMM
z3I6ms(Ac2x3;!<oFKnUoD#~YZYoRUgTJQ({ISqN3M1IYD;eU2Rp1`mC540A$;BVqb
zdLBB<6 at Jk_H2Dm6(cu%anh)3;|1%njrq>ts*5>!u3;&&!xyYW50ROzC5b9h&(?iJx
z+$<o{NLwFq0aMy|fnf}U&c<{Ea|c|20TonxGO%gFN=)u)-eE6s3I>jR<yq=c7RmXg
zHW>Z1Z<qHKbvzOBsc7+(Hb0;I80{)`fZVVTl5aX^H1>sQ6S1PSSkcm$XNgK$&T^)Z
z$=YgcL-7x&dTm0;_?}QN!d_aAW1)UYTRt^R*K7%dg8g)`rvt5A<V_&d1GX|>eQ<G&
znei`?e~}1&Y}fqCQSe7b%6>2S3;a^viRHYYZt$<7tHD=3+T`Q-r at dc-KRRboO9A`~
z{C;nP!e0#hC?DXTQJZ7@&uPpj_%j!v{K<9)TCo`aQtj-l0RF`t9{&RY{+D!1&jSt5
z at Q>#2uPf-QE$FQ+=&H(P*{dy_jS2JW0-6Qn3IDzeK)Y2)EFGrm;!O>aT$gErmYIX!
z2D(f}zYuK_YV=D44EP~XfsECW;^dR>FW%4Rw+Qpnq(nD`kc`Pngg<tFiF~D2I~mw-
z at qbqg`?9QQ*a-49)Eo1Te5-s0b&j}zGH=*JK30%IznLt{8uQkTFgla<<c(jz>5ioL
zNUbs>80snDjIHXMMb%rVr<g;i2R2J)U8sloO*6`AOAvW8SHd{V at 19>N*emmg20ilO
zKMsD#|JUI6I+^|2rnl6k at Jl}%@Vnse;Adf%$WK2%YrCrRi-3PX`Cmlvk0~GFUn0Nq
zKfNZ~hre)cQvvW}vl|K)v=)=?0zB|L{t5mT|4Duqb<q4Q$uIC5|8ts4W;PVTe|L2r
zhUUiwg8T!&@gJN5EEmQF5JGgqW9kCp1q5Lh2&}-u(^$2T&JF at B&K;zW!uJJ*U);fc
zmlH_to!}q{wokHn4Wb=$Uuj=vNeXWU$!BcQo at WeuA9xq-8PL^G<hL{ce=Okp%)5Z^
z$OnGv`NlkL3CMew#s=jL9SA7-?yxaWkEO_)fU5Uu^}$Rw80wv>_mkNXp?=d$!JeX}
zsd`A>y`U1p;T+}<57zP=0l)IUe^HGDe+~NzzXX4&cFsfai*1`D!GEhSd#sZg<@5dU
zQ{EKXrM<I^%`CvrI|e^pZI<%_|3GsAp&tGv@@r$K$$ks|z>lf&k>GFq&uJ`}-H<=G
zsc>PNWWEBwAO8h at DgKm`@M_K*GX58|mCtG{R?T0~QzP(WXr9(kR(nL^KSmZ{{0ChC
z_`O`1buoqCa{>C~LpffX5H6s*W*ltnAY-gddUA-BVk+v+9ZatCQZ<s-YZUY#<Jtcq
zu_S_bpxxfLv3qIXq6JUsVx at V>eL+=03PB#`D{>Nf!ZsEJ-o{{WW&!_S!Cvb5Y6Yni
zu)4wot60LkFXPiXM=>9hH-4?&mZ*ZYdNNt5TgtL*tbnt!yO;vb=uoeTZG{W<WU?;Q
zA6`-m`3k at AACo-+_?aEN$UjQ?Y!m*+fL~U1wYC|^d1H~^YWog;`Z<R>i%s?@{8V@}
z_%|0Uz?$;uZSdhQCg(Ny5kJ7+PyBDl2l!d_d6)%%;Gf at 8Z2VLCLG5ECzYE$*fuBV#
z#6R(0bKX)4{+Q*wy*2qk{+r4(S}L+k|7h{wa{-osmG+nl>Zr<>H>)K6V`w4Ng^6vW
zn%E9zbc$ler(@Xk$#=jnDKI7;Bm?yYZM|b^fMGNHvCwM+`xS0%U&AkDfD`f5zeMH*
z%uuH}zalpg&g0;B%<I5w>4AI+``;by9ri3{VH7#d#%A8+jf?Z6ik5D}thYYZ?lEsm
zRD^o4hk3ysRWD1lw3A7w-!iL0mS|^(Mu++%OKPz=_zyYFA5%Ux%n=6vh~Tf0--5qH
z{yDONOC!H1pYMQQ_;)QmY~!-X&o)MazjZYr`&rnvf)9~j;BU^SvB8)9#k>RmPWd?a
z0Ur2g*5}QZ;Lk)L{A;zx%KpGl3Dgrm^V#9sR<@w6Y;JRjX#S?+84XhK!Ib~}9)f>m
z4)GuUo60hbe>9J*|EdJy*<Di*bb(IcU(A{We1V~bl)_YEI|g8Q0a!X9VbaWefhYO|
zM=-}R at _G6bf#(bQ(sKmH at -y{^^Ygu5;r}jnD}y>u`;F#4_Q#ZDPIagQzr94mt2<1k
zdo9j9o#Qi4 at t>tGr*raCCZKTQun&??YFv^&DW+`#%+IRLo=uff3Y9r?8*<n==y#pT
zCh at oqoFMb7dWy+vT_zi2-msq&BC*}Gpi<<`Vv#q{ZrG0ne=PVjHJI#&d@&dN=lRO#
z{{#3b{)_CfJ?y~0Sekq!=QaLGcoqHv;KvC5bhXjj5P)BTzbPM8I|ab6%BNsf1C~Fh
zsZaubYY8@=&Flg^FDdfS+r~uT at jtV%2+beIKQ*7u%A7V at oy#*+0#Wvq6xduq*MeCN
z7XD51NK-_0zNNjgexzGJtb`&}l>B7Z25%w<4q<Xk_{{}8F|Xu9IEF`<J1G3(5twr;
zuxEE6=H3BmOusnhDSR1!i6h_Ve`*kZ-i#;T=iCK+*V|y&$H>=c?_$1{gTP)aLu^J(
z7N)7|2<C%Zs9azDD0x#voX2G6Y;OrgOX9qSdfQi`p<b8|Nn66)FxVekR)2h1{fVLa
zlfw<z(WNo|CGxBCIV7 at Q%#@G7ul$b%f2GL&0Q{zW0+Bx)i2ST-S*c$X{>aE*DyKKZ
z;Fl8{41VG~!QTo#66zKHc}>#NY4Ee!C9+49PY&=K|Fi1z=eHCA|BO14V&Q*geg2$A
zkAG1<B7Oq=w+R27 at Gz^fXnI{i9RK9J#(#5pCh%kQ{8RRKDyXNH96|Y46@&{gFIa0R
zB~YuV1HWo)simOyE!#Et4N)7%BC{$J;76ahOjaiaDd1r6PfcDMN?po;Tggv0@<%^G
z-RUL6-om?K at 1D@k`<SWv82sAapv+6_rWwFvuD8LmS_7UZ3g2{2jC{r3;Ad^u;yil>
z<F*ZsVBVKERBvcS&}L(pmr%c^w?x|#;^mDoPpGFG;poyj!F~wrg?VSZ?}GpL!@p-i
z)o!u4$UhqXNKE$V?sb8Gx@=U}CEXzW#Cfli8IeD713Oz+XmXI+zE*fV_-$bq{(;}R
z+KBwXPm-&$KL_Ol{4?rukvgh&iu!AE;NOBj{9__`O!@o#6Z|Fq)84G`8~+r1sQJ(E
z^^fqcWuNAX82 at Ae-a>$?AY8zN5P~1qzy&D&uv%o>z0C#UWHzfvOau;o8(0{JQcIA5
z-%QE(vRWJaGD+*1k}Rh{KD}oc(HnDP8vwlhaG(511*tUQNMdWoOAO}ok|$t{{Z(DB
znGMc)$AAw$4SvYCl-8b3;WKd2-mqt~D9 at T=_MLIwXMVK25#|;9puBOJtTL|(XRt<@
zmr#FddBZ85{|)#h_!IW`3{(NX@*jX-a$evU{sRS{|JU%dX|ZHTH?Xs5(cri8j*5KY
zUn9Q+f8eK|AO2}<fPV+S1%G7EJcXagZ^7UAx8OgoxmZh`mida>LH`*4mhcMv^##QL
zApgMc_$T0Frhjbl*CY^6EB at mGtO(-*-i`o09l~6|DnD#}wekz}`h%Dk7 at t9jBFnX!
zpPF2UeEUZGUVCX13j6M9Mexjr-$J*WYj_Fj#<tOJPXj(LWkL>>8OoB%c`(BBK1zPH
z3G+Vo7U6mN<V%x7fPBdg9QNheQ!BEkhI6Nxo{wv at 9Futq_3QdeM-=MkNueI*E!11l
zlBh1s8}^WI77xD{{Kty?p7II6FTp=h at EH^Sh$nl-i2R~_SmgD}JAufro3;dg-NU7u
zc3TU9pYo1_Un0L$cybMXx_Y#{p9lQ2>+_uQ0e+SJ68wRGW?dfePp`|H+f;<|pWRsK
z`1i$+$N!w>;+YMFM0*YR9{=hBg?+X8#y>UBc5m5>*e;z9{^FOe1#1@^$3b8eKW#@C
znxEqiFvvGU+eGrI at C*577Q^*P^RSm1!$0$d2^I4Q%aN6QX}O6rB_H at bE6+(VbM8Qk
z0`KrFNSg%7W<btMqn&r4oo5zZ$Mo2%q~XbUH1oMh<2_3rpO-wIXz$2(11W^2O|+yS
zfc at 0+EWzF^lAD0JJ%gs<{oWg`So#aH)>N+*n<|(@()fJ{vL;I=8<aQaRy9Aes+p(R
z*zk+;3GnX=e$o6Q`)m0XKLmfJ7x}f?zje;{!S63}3I9Ra6NKM3Ekgci_+3AzwX`8}
zw7e<&8~o62 at RQ^!{Dow`ru^Z5j?e$x=3=tlfcTec5Ae^Sx3fV|kK><$Kg+(|)e`@0
z3h)Jw6oQO at iT0WW6Y$9n;G7=#+G6UEsV?Ug<*zQF3SV3Ri{sxUy{LLyu4S!ulr)kA
zR+nF`Chvd`4t(;bLAwDTfP8#Tk{FPifwwUqe8=F2aNdle?wDtw%tOAyFKL3%F3Ey)
zbvovK?1gzTAA8_8@*{Z(m|Kl?O$byAW4$+X!U*pe^9$*{@tB8IC+UG4<{w!t<Okt5
z7dX4Bd4%To;1~Wa_*=GX at I(G6_^U=m{uum_9|ylIa>X>ibn*luzZ}s+8?$Uzl<m3_
z`61unNBJ21wqqUH!@`!qPvobi$7=hU;mT64mG at QZNaVNRPpBu)MfqFWJH1x<Z<P2C
z|CsTQ+9%sJ{((Qhf1&9g;y*P{TlS*!hutou0Gb6`z>iG<xB&2T5EkT{;RRA-ETFtk
zVV~NjNOUFwO;?@ZPeKdnmwBZ~!n^U$x0qr<sGDgfE7cokg=th8k>vt;oSAOPOPL7j
zY$^fcAoIMW<=!mreLezyBcHb95%4D)_CmXnZ%-rNd-?%Clrs$*jeQ*Xm3avmC3=>k
z;+Usg6URJKTta<N(hoPBUfy_SMdN9;?}7j9%4Q4~kc2k|e_fpNA at axISJ|&Q at 4o`S
z1b+@^^LMGcgf|AiU)%BF?-~KWZr7C~Iw7C!>MZhFKM(L at CVLG2{_5<$>MVm_G{0Bj
z)YUFO_)EdR(Q2Mlatet5!0-5<-&z9vj(;>i at b}l{`|+QezvzF~yx`y3e&B!96yWv0
zQ3%2yoJ_Vx`LE1R!V3^N#<p{Tu<ik8S0H8>OL1P-r($yfdfr~T0+FS(fl7{)<qKJ9
zQe%l0_{|smC;90_48l_<vsG63cjm~q_tPdn;68HLLw*c?3H8FfS&)3j4trPghk1iP
zoJ$%WlR6&x8t at H!dsgKqn6}Zz8*k^7Xd8|5j(H08R<Sfm5Aa}bX7J+(&Q2|FbmE7|
zZ}1!cCx#nT_K5h2gP&izcR;qTi0l~wzwo~^mhck!CHS+*>qq`E;P>0u$}RFc__fp{
zNA&1kT`%(MjxA~C@!>Bd+ePym`~xjTM1C|s<sF4Tn`#e{ANUFKh<xHakssxwHP2##
zzbPLr`%w1u_ at 7aiKdZ5DmWKKu|5W>-eI);~=Ea-zIa38<3ZTyc!Q&*5uYz*f_R>(A
z&M5~L>LDEXjsKtv;2laeXCOd@@NX_aY*&#Z6M>b6RN;H>fD4G2(Rz-n<hWW*e(J=a
z0YA*cFi(&MY-dJzkbD~_PrT2(z<`fE6J<k+V}4BX^MT)A_M)H1G>-**$aiKsKZM{J
zgZ#v*d at -rp=+3F{V&1AZLFPx0Z}H#fANYgj_~(ZJzt~X2 at u7yp#=pvb$p8NdelOeg
zs`{dNMD_&WXS<fcZ`rO!et{nY{sF9|h*A&mqj}=s at 2Sdy|30a3=1#Ar;aQfqSm7nk
zTg?aMkND|Vn^B)H{44xK``JxJ7XMwf)A(l!ur*)${NZ0ppvu2>{;1&3HWh^CN9_YY
zQa_THh=nm0bJa!(AxU^?A at h0mT)-)OTl`|aaC3plcu&mh!Ykx!twus|Zt?`*M3&$P
z_RLBc#}-;gJ_BBkwv>tYxsMn?eunNq1bcpt%KPt(`H-K_CR~Mo1o_#X!Z-MX3O^9=
zi4Pw3kYBB4dfv1Rao$Qd9`h=1T&NEYys-bh at ShxRRP$xe(mI15{;^|24Mx5XfAv_A
zzbY>BOK(pg@}qfTvL~=_G1kVW2a==teZeo0-voaUevAAIS_FPdJwf>4KL9_dOYn#M
zp2{rX at 2keL3I0~z=h;`2%lkq2aRK<B9^jv~U0lGec4_>FcB}vBJ{NX-Df~<U0>5 at X
z_%$Cn^R}@py|I+#CyF-7#(&TS;${KDJ7$fPz6&Inu-A;3)hp3UE-7{`mlSZwUQsxZ
zZzW0}d*MGjaU7=ajJGk*v?&jWO at 1H<dC&#C_oqGNeWiXq+i$_%<c*8`LA7JpL%tfT
zU4fXNJu0`=XkT5BWLBA%h*`9^r;uNeSXY#cS&9Da$|elmf{Z^OZ!JOc8UIW0FE{ub
zJ<adSevSNf*0=8^ysCWm3 at HEJIv1KpY!v*JBjJxY_`Mabegwam)Oq~H+_B-;^LZ at W
zCG2xP8;iLHKTBFferh|Ak5TG`{~5JnQthb~+2i21;7|PTug&%07yf&z`ARSN_tnw@
zL{=M%|I~Tle+H#~t at eYuE%>_l&sIm%MKS&>rSlV``KP8R1*z{t4*%dSQ-E^;asj3Q
zzQ9U7A>A<IsKy1DER26w^R&6Z$~!#CVXX*n^+~Tjugg+~y6qX~3C6s`z`>u$2~m^o
z!}y569yIqpA91LTeGMn- at a;kPN09F`Z*?I at eksNLk>s1&LFzd2YYLNU3X{K!{KnGM
z`r_oVm~T11dJKDHbqh8EetbcdPf+tPKKUK+dwt9PrWJ|&KK$0k;3d2Z41Tt;OPzl^
zHW%{02Yxw<AI(1+eoyoG#}X3xE$rLjQ~|*+i&?gwCFBeIEMN)z^O_5h_YQt1dx-o}
z-WR73`1@<bH2CKNKW55 at XJ5@2 at gEn!FGliT1pgRq&&q!>DhU3i?I$d4KUhO)T5VAZ
zR;4;0!a2tkynVvy7M^AaFD{_Q7l1m=^Ha?T={SN^=5>k6ynv^*6Kf7D39Rw&!LJKa
zjB_;L8~Gd<VgpEa at TW|=U#Y&IfxXX142*Vef52eg$On68d>KDH&J1|>gnZU{k@}^X
zqsf<o4 at Lwq_`%*;EwiKsd>8W}U*S)wFHX6<uFct)*xQ>1fAA at e@I&ys;O}o*k-q(y
z?D653;IEP25?i|WM>lY?Z%gW&Qs*b^M>w20a59N)SC@?{7WwrkaygJzi=3u;^jJ1K
zkXcV=^VGg*9)({!8CcIk-gxk{nA==v>$$?YCcH%c?#e77U*)|Azw+N*mEBz_)>WD1
z_y=<M$6WG@{x_+k(LT1?MYTr at K3)po3O+3O()NJbuPaWir9Kb*1=KB*%msx1fC~Ts
zE>Mv@%@P5?wp7<POrd1(0{SH3-?Y7cfwU`FVhi~rO_pMXe5u<L<R6xEa(n|?8!O}w
zI{1Mc!kr`VKJV!5KX-EJkNe05oH2#r2t4KB9kT>Ejl_)gFI>RZd1-ha8S~|z)X3*)
zIwy!d<kuF7nbfH(65yLk(|9(Rm83knvEzH}(z>=d3%bC$RV`RB_)Fy1;1Btj^sQ;@
z8vJYUuNfQu0c-E6+NF_y6#Q}yxjT)}j-vHS`gRnpE9q+wn;gZgr!fP+)_EYm)P;SE
z{C=tn`GvIZ+e)t0^HDn%_8t5zX`y+X?D--1g at 3H4I;W>f%=quE$+e{}Yjv<t&quD>
zNu2i!{<+<{;AJk*Qjv)Pzge|b_00u{|D=270wQ%hkuS4=rNdV0k=U+#NvvFn3z!zN
zSs+-_VJuahfETzDJ(Ya1DGvf_&=CxKVCK3LyVlAe=Y2C?PI>4~EcmIxZ%^LmP)%GQ
zV+!Ta82Q;8A*<`Z20v?C*7*<fVjA!bek0#<Tlja_8~KeT673sH(_-Y8q%@SIG>WBu
z5By_(WbSZrU7KfX+b*tcyPzi39xZqtU0QG5JO3K|)p4?C$9#^is`Oj;N5Id4RCfK4
zt>nsLu2yxlu;aBch{y?cZ*oLWEbLR#kqW=2x&ptPRpPH?!9VcxW{`YqW^nK$d;G|c
zy!Vt3vZo`Q=?8!1KjQJ<U6o_jTa!oRH|wd+#em$btBTrYjureZ+jVQcxB&3iEBu!2
z!oPC?SLm}`z*j*WjG+AIN$|(uU!J;29BmK$HVepUIof+h%Bkg at KuJ@JnUpRmQF`R-
zAeB4XDD11wu_yEr+wF2UBOIz7{QgHV{vG)+Z(q-VA8V!+QO;fyGx%k%R`NI_zbtc#
zXIWEX<mbn#I*xn|_$h`x<hRf?UXcOw4tvP2FG@!Lj|uss8#~7`nJKQ0GzUK}VEj|_
zfqz-&(wx^4UY>`r!MdR4*PIvlg at 23uJ0V};cbY#K`2~LO`iYTk4DpLuvXZ5J%iftJ
zR?L at Wtfu@J`GM{=C12o2>H|N_n^DZy<y~3NvTBbdwtjBwX at 1~0{<}o{h;{n>JN*Oy
zq`)KiR~P7rWMhthrT``as{Q5ywEficU#cY4rgd?F82`zLobN~k<ZKY80OKEc%mu80
z0Ttw%w4&hxuH?di_%8)XuWsor)Pf~^avm&2d(1J+X_=gaZ;(6qT~xRC<*0mrYTzSi
zH?yzjdNL!QlQzxx?H>8kx*u!r5%RM<qm4~set>*Qato3);HRK-VBV~yLdb6}OEa^%
z0PL{_HJ|@6fscRl>c&nr&kKU^8~?z6!nfnYjdAcF9IR8TJ+N48KeniL-=bRJhkPIY
zDhL18xs_YzRHFIq99lb#$|8TPjX~=9(!Hi(Uv8QUY)c=}z~I$$*oUIWGMLoYzD>wy
z87tPqATeLt7^JbMv0z?v5t at g{Z;5RT{#q~LHU1s^j(>q)^*`_{|FX_y!C&IP&%f#%
znF1i+%nF`(0R^A>k~FG4G5$xo0RPd0DkzW(iwiIjn7r|(02M-}g1jyTZ8NsQzLhk+
za!ssmFUz=`2W#;2bY2jI-ym1c<-lZn3I8^5aef5(TueFsZil at MGC7TK>VtkQNLu&3
zuAcNs20!Ez`RUul{KAe`=LCC4K2m2S`ROg?RE(wIqu9HNASF)TfB(yv>_Ptol#l73
zGb@{&0srwKv13Dx7WsYnNeV{55C3}?*6dN+Jy3&bsi)GxPqw>hcEsTKtD3>Ztk^Pc
zAnbbwl34eGt7JkxtG8~uimCe80<Ny%`sCBGAmn4Vl51Hls@^Z`jDQ~(aQrLbi20nc
z_%G-Zou7;Thkqh}K<ekThqExMJ+{xwwtA89TER2u0xWxx3%g}s6GAQ*_T-I!9)gJn
z$pXw&2)POmRTpLfa#%B0uB3*K5$&fw%%u-^*{R45etBO5yFqTD9`em8_$UCs9IDLu
z;TYd;KgXWD<M=o7<vC5xTejYYxPCUDd~b!9xzCk4gXA}rrTH;Gy;-quDor(G7EswQ
z;=iRlt+hPu`+*OB8VA2IZ_l%<TFziAF>!&@W-FRct!RdSmb#8E6T<}#EEfJ<<X8A>
zgYfTKP_uJE_0IX#JLXq!pI7bRw-cD%QEc8a?pR^pweAFK_+ygaU72aCSJu5?YglL=
zZPyX_=c*b11b<6ujeje3n(}w?zgLC5AK^v$2jjoZ0`RXvKD(1*k)H)H1<>BCCj2vZ
zQ|iR{?`x$V=K at F|DFhX#B7~&cqsgG at 9IK50KSe@w0n2c;317}huw1|*zcpT34adQ6
z1Im at GQb9NuopAMugCA&l)6AS=!hLs4e&FXAz`KEs%{%=0;@%+kW5Yj9$T#@mp9L at L
zY8bP(L6&#@I)7bp3dX-NV!n~D at TZ&9aoC&wX;J>$Lm3 at dIHRp1T?uc$wC)G&;<|RV
zSla9O55O<{2jPeRli2d+6U&>AENeKjwBhj5hVO!Z*FcTI5BUcFws}?C=2mT-71=m5
ztS8XQIcyX;?SjQXF<+10^p7IZm>*lcVu{LC?=9fFb=%(R?B1$uTe<>%>rw!IfH(4K
z-KT*~jGnaGyg)r?MDTZ!e<c5;w<GwMJhxH|{)zC$zncQA!ygx5Vb`=PF%ACt4{a_$
zxHBPSi7>$sc_S8Z0kjQmFy;a at 30SF9Oa0t_A_pl@+p)e%Ys(o~%zQxeR$01A9DlD|
z`t#tOxPXtVN4`Y<hwqyF;Ln}Kyx`%xCfs+sxPwj^<~V%)X!!9jT?m%b^$mL?pQn{T
z{iR;<0+za{`P=dqPx^U6T&j|nVB}j#Ge*7!e58(&@5z4Phk3Ks@^r8_YY)Ny50K9n
z`0%@dSMb3FfIrCp>6I<Qzeauszwv)!xaqjsp(PE6mel)^UxGiHXDs-uw<`P_W=7V}
z<l^1%x*1{aRTud6f;qWMT5c4T at +J$oY{>P<*QHx(m@)FTdI|j6uE5GHOH|oCRi0TS
zr$0wqbd-GQ*cUVMfgfYJ7XGc6<AT3d`@NhOFYqJ3ly@*K at 5Efd@oyr>W&z88TSJ))
zaDgTo8??7UtDPSIggacop8{xdW^F4m#=p9Ni5yqw0UO}Q5y%3V1yI!1TI1l46?UdP
zh;DHe8^$m{B|tv(y0Fi{{KDo1TwuceTy%a118BE#5dP8R^NzuvH2xkY8e0NW7x0V!
z^g>9 at f4nYuO)O5E2>fNrzmd;BxFx?<>TD=UCE)WfFc9!%E^q-Kor4kWnWj6#nULR7
zmdZqc_)-1y1N at JIzx~2mvoYZp{vkge{^iZUe+(OHI;wVXu>Qbc{Ydz0B<!o~**33w
z6JdW=#NZe575+8-q1F8%?v=KS)H!mWdv%v|lybp}wW}?VUFSl+tXOHUg2P^-eYHe;
z4ESxi3X%!hUSjL*Rq^5Xv4?y!%Js%Sl^l$czKi at ei09wAfPN$VLq74Jr{%fk0&O97
z^@>@khia!4JaGZ7_NWBX1uvTdT(#3&fWipyGYdEu;0s)OtMXo2YdrpwWnYQab11w(
zd(do&)`uU_B4+R#$*}GCXE5>pJ1_&@O$X)+qsgE4 at Ld@1Lq0CxlP`HkaODg5DfkQg
z{wd{>1*A{nAJ&m?nJ?AO=CXA7mttmdvITr50*`#fUZjpP5BBX?DBZAcD^F{yNNXu0
z|NTDx$AEvG$A2vHtMb>#5Bx2sR$wZ7eC31qIX>Jh at DF?NA6eFPcv<7&rH%U+*Y8_g
zr?SU`AM!ELJVE%Uhu2Iu@<S{8xIdIzw76QGJEI}L6!O7d$oEd2q8m*P-l1qCYgM&*
zF4|k%4g_sks1;SOhQgsO$C+c^@o()4R>>I+{}}P#m-ps19h%;n3poA}LKyJ#-_eyi
zt+HoQ-*i4Ih$I*OW2tUVf(3aiU;+uiSR#N5V$D=`SNTl^R#BnB67oqoA)nk+O!=oi
zV at p)<&%hRNY2yKY(?SNbr2}#N$9aT(YMk?3#=Lt%zQC{DL6&O-$!GD)mb!Ra*~iE?
z_`{TawDJ?t%8$3UB_$nM)wLyEBOiCb7tlGa0iDwokwr<??mI>Hr<pHwM=~$1Z;#nX
zUl<#H<^Mb3SN=uwkA&ZXzeRq9zX|vcEp0rwv~lmEx;=~PcFeCK@<aYsg at 3~=G*5)E
zubKz(@5A4#@b?h^%N_Z#?T2#4g176|RVj^maJ8V#zXXc&&SH|rYt*6OSwvg1gI}1h
zFW?<#?9U>GkI6rhJ~#zPdaEvABBvvg#Y`>yYa)OPSgFUVJq;ykxB&lIt<Dpi0{lFe
zrX8>Q1 at gTHc-{I(-5yjd{^JFNP+3UTxEhz+!hb-_c;y<FZq>Nr_U8t_O$vx2^8(0s
z at DuQT$R#_DGd_iO{|hAGJ9Fd{`Nxd;9{hotC*<3Xbw at t>A2o>huR#zpC*~#87A9eJ
zMOZRRT1LJ}oz6(6U>_0ejeOpL{0^A~QrpDRV(>dhP%rpS_}8_cUDb+7!AC6?`Mu!Z
zG75eP{v+UD=D~kpN#lXRhW&#Ly9VlZ4b*O(E0JF{kHC-SSu;JXf`_mllCTf?+#J_Y
z$}K7?b-cYNlD+ypIfQYKc at Z`y#kCKi)>AJ;V?wc+pjZXWQlGcL4&G+=j>Fy!_>_+<
zla13qar{dPpl1A|?OQ7{9sdl3f9-9PYLD<Q?QKp4c?}PKhqLCn;sVwK$<w(2Iv at CP
z0XBo%;*r-#;8!(K+92mjnz#VL*-A9_v;rnii~lBs<VpUk8G-R1gx`6D(auNX at 4d~&
zC at 3?&#w=-qgniRIJjFM))xrK+M?QbQ9aloN-<{P!so(4ERPup8oHLc)PM>^f?;+uJ
z0UyYTZ^3|%?C*m7P&yZK8TRceemMEl=fC69`k0M|pLZ^(8T`t>x_~6SDtlt^!+#5!
zM`Vwue40J at hmbvD7WsjH{~*?|Z*jxk#SOr}Wo~s0e$hPPRsBXj7p5b4<O&rdf4-FE
zrR$!gm4*Zh<4%EC;%Q;lKy`X!^uQX=<f&BiH1cW7x6WiakS$>59XbWXdjb5%xd8lk
z>IyF|0Q}DQ+u+|^z*RfV1w8&m(@M_|Dv0=x$Tvx#L0(ECHU&UFMz!45a4o&{;=fJ-
zhMY+bD{PvWv2vwhPtnE(!CAmLf{_f{nB(7tecmzh`P5+_9N<Jj^7(tL&&SB;De&u2
zw03R at NAwu^QugsHKgd6 at x3UkL7M1*DNqDul$C2O0^cu>rfKS2;_C$NKU7|g*-;@uU
z-)>sxmM+e`eRNZondATB`VO&mBg}(;wM2d&e)w;V3;vL=@C*L|_=W!?W5K^~P{_x2
zET{$k&2y?Y&93spet1=%!0*WC{Cr|Q%TnaFnzu?+CzyjA`dRwKtVy^ejWtuDNE1oQ
zDK;Sd1`QyAlPBqC&~OmjkP_ox`}55g+($MA1SSHjZN~G at 6kz;&Nv`h#{3R?<VphAh
z-exxi$eNem!Aq@!yiZm?{j-kE1*F;!`8EqE|6Y=-M<r-^lm1NlDy5!@nHrB}sam&p
zVV_w5_}xoO2YC8;-~Q0uKO2AV?YuO$ZD3BpN0|F42EVqw at dua>jwWB=_sJKj at 14x1
z*em&zeIOs~jeJxP<XgfE`7G)B<Y%;LdDB((t;q8|*mI=6T|DjhXK>ZGI2X9Et^+#@
z{K`Mro1GT^#RX2OdGJf{Z;8P_4E)Uo{~?L|O=y0L{QCwQA%Bm;zkPn~w)wRiXIE{Q
zRkd2eepm$$S4Ed`elktSD)K49=OVnB-4N2yZi0cTxK%<>2-XbD0SLAwoc>;Rf>1eB
zk4WQq92$wmw5bx8q2wqr*{{HuQ{WeDJh$zK-V~rN;NWLqbA(MU(z at m=BAZ`a7GN_1
zF5rqh{4VE)TI!Te6)9!w@;&66 at i%L=N74buf3Va;{10XUmf?yE`20(eM;q0wr0E0<
zpn6`Qg?g9=exA$%ZX$4w0Q1<xiZ|bg at e<mBT*tTZQSj4AI7pz|lRv=B^>(_(HY49A
zHCgS|3n>tF#C&R=+(`udm?NLG7qd=gE%l_j3TIOZUCpU9HZ)6NQ;cYD6&{ZCZ=^I-
zl8i49?Hh{{c}L at aLWA7Eo<P`tbW=BWHQvM>Y!-;YzuF_;<6q!!JtZb#Un0K;zwmzy
z@;&&Qec1#2O#=UtMhE})1w#JTd9_>S)vTXYwQgqR%Kk9-M00HxM`+TG#)7OVoOY(O
zaHjklC{7{wfm=X=SQd<Q8+ck>3C9=E7A2QM(c(q#E<G(YblLW8Hn+-ofU<coLrziV
zEKNO8iUxag1bl&?W-dT~g7NRXAP7HWW8QfI1AB+3?*h`#Z*qvIO)(CB{&+V%S*hP#
z0Qf2OdoG}DKUNFE1;h(ROaXK?ds(o9-=+Xs$fUyKH&~jOhgd|5G0c-iD=FP5_7C6l
zGt4n>gYowX_82eC3*6J at 1^1Gl2KHhPh`B~Mk9_~M69m8YwgrymlyiG*ZzK26VMe}Q
z$TbPUBT`?nhkSOg#I0)4!_ZVpC%?4x0J+}MmBb~ac4HCmw5sw!@I!uGK|&CFaRl*&
zL<j%lTYIrMFSxR)`^v^{KmNC!UELNJ{1tw20muJw3H~j|hFb#gH~Wzv_?vwA8}}?~
z*uJ37;NLt~;9onl67muG=p5P)Ox{zmVWtCnO1n^m{N`dTvQch`;8t|_<ZdiBOmQ*R
z^oAl}=G-UZKapRyb;y}xlQR>><)%z5%9zTD9~|+)r{)Em9KsO_7$++5jnaOgi%__L
z?n9UD=Vo#6$MHX=7XZI}nf7zy5yrop1 at K%`XoPoN at a2dqS;uD<7&Qg3laV_hME}Eo
z&;_)mnI&Cs=d5{wb<_kq%_JcE38~|M+&#BFc-K!c2BX8ic?9q~FL1Q0cibT#-AmTs
zMSCOPB0o=N9NMIrfP%&!=6c)sQw4k7%+B9$@LSna)lRI`Y2?d)eOc0_L|}dUDU^DQ
ze8ZkQN%gL}sV>@sy}O4R at -5mM_SJb)YSe1;r(9a!i8<^a-`Z!6V7>tV2ERSeuj at F!
zR!o$SiXY?u<O=w2CHQ;r`}`jnYCb#!{LLzR#)f~(yjtL2H?xYu4%efz_Yj3o2Lfdr
zO=oB=&f??*PD|!)Anu0astB%!8|tgVmi1O~C8&d+TXB2q3ONIlGXS~njq6T0*`5on
zaDnWk2|39V^HL|3=Ol8(8OMD%FJNCe$0 at kEz`TGXcW^5VAta_}at6I182^ob_jKL?
z_L5fnrt^Z#FK!mV3*xGsxB&cHISBn at 1%E`HE%?S|0n*Q=SAPN$Ju{T|Sy%E3`&!#~
zg?-2WLwEo5A(+4SwmANS;)gN(3;8-PI2W+F0R9=+*nqcy at 5U1L{eFIPM!diV>67ob
z-kvz}Y4SIz!yJdmugIDr*z2Z6CVH#w8~N6>5BXqUSD3`Lq+DHOw=_1Eh|VFam5WMa
zml-i5NT{zXm}boLtj(W_H5MgckF04oyExJdu5Ilz^QVB$^Xo8y{}HuwYdg-Z5j(r4
zUEzoSR*C!`{4ECmVc=iZtg?s5--PVhv$%2hqDCVB*7<e7zh-)5Reyv_5=n1qJeKoA
z>hpo0(j^@TT#381C%jBdF2>S}5i7VVg-ap^+AD0UEJ2&-O{=gRiLCH*05b4%?}J>v
zS&?0ylSJ^(N}7<DDvl80ni8%rk%RuYxH*f%(`+KJynr9Y86(=0EXS`o{^MK#{vGh&
zHQ;OT1u_V89MeTS$>7Xb!5qauH6L*Ss@%5Jg$vk%FD at X3pe*mkAFtZ)pNC9#X?+D+
z-q&W!ad#V;C=<fIE8qzH_ueL6aF2KaLdf8^C(P at -@RJAc5_2wq7nt$ReRuqbCyw9(
zzWpMewz9_4fOk*Gw+<ip$8wV%)|l_Db1|tI`BZ+4d=o!b-iLh3`;Pnw#m{`|{}%A4
zN&MIQNez4MGm>aul!zmMeIV2e^L1Fk)TZKursBl5vSco&b^_+yns#US!j(-uF&Eg_
zec8858 at q%2pB4T)&a7 at fjjd`wwW|H(s`jJ9Ek}l14iB~X at HZb=D)8?eY%=(_EvVZx
zrv{zBqAxVu8zRFUAjy?x<6 at 3S<5t9>-tfxlRl|Li%d!4ST!8E0I53%`GTAu}Zv<6<
zMDQS8x~uacAA03foQf<t09>xY&F!o%Xs^oWcIK+0^iW<(VaC+V#0hvoZptKFK&~>E
z`=I5XP(448t2rf)z@(HUsc{YmPvHV)|1JIzX_QROFKng&dt2=al=^jds_z0gg6-q8
zo(He(&EMy1E&%^l3pMyz<fVkdI<FO2th{N<TYhbyB`wk94t^YgDZpGn;MYVzUEmI0
zKJ1GklST%=O$Ut49Ui>%C(d8|-y%C)n0LV5LcPhJ82qyOKx3OUHV4a|R_cd&Ti&Y3
zri()w+c3zd&RLzGfbuc&xsa5XkgoxMT6La~Uz0zLmqdHR-frn7)PsF}Apu{Q7wikf
z>I<eh?B!Ow5VzW;K`$}fc>x3G1qAjB>$`A-%h*OS;1}D_eNoMWU-<7hy}ASVh5wc9
zCswu}U(t4KMcdKkZAXS%4-dB*{5u!cZy%^f=TqTP_`|EFS1#$2`w+PmZbg6PaBpPC
z;@0(Z>NYQE+%UIc)r{&@Gina5?2Sg>iGF({`p)U7_rGubf&Kp%{`}IB=v#;8wU*1-
z-ExC7$6aP}*KKPgue+|eIh at y6kz1ObSd^KNkuW}O+Bkdxr{G>r?gPaIG##M*hIi-~
z_o_p7-VU2kWH*YxGX;!|XInVaX~H|7mNDnHnd!Yn+|?+HYp&E!wV#@mRr{UD_cw8P
zyP3=djC0QgV)0)l0zRVWlU%@oWbjLoQ=2MzN<&VdnCVoy6>V?<__svBI at aLd<^rBZ
zK2LymoE!P}QuV)Vc*OWE^!B^<eqVZVyp_d&X>W5aoveA8!=m$TV~Z{C>hhM5PkUQ{
zd^w*7@@oq at s7f5c1$-O<?1}a!_%*9dB;Z%)PSI%3>@bzW4%k=cPUcOpZ`Nq<-{hFq
zQJw<%{Z*M<V|sN<KX!gy*ZK8b&~8ZE^W at 4_9kdhP6@K{dd1PJZxwT?vu{E7%6n<zw
zzM}Qm^46ovTLIpJ|Dk0q2bZ-RSlYaQN%P*p<~@T=+Xosp&#hf2d2ZF3nN^$S)vupZ
zyLo=Yj>RoUR`ncP-FJLV|DhG#PaRw$z(@ZW{q(}Cr&oS{b9eNY7owj&8vXG6f4z0?
zgQrh^^5mY=TNXZZYSXWtIr-M(hkp6Y>Cav|7mfZZ8vU<m^!?ACIk=!b6v|5`!Z(F-
zfxo?~uql++6wWKnNiNDtgnzuCx;TRy&$$w=t|S8?<hej;y3|M|{&UTuoH09^e_SBY
zuFuxR81 at c+_;;>h>s<Ck+tAW%jm at sN-(0}zJT?pX{3kjUWYvC_y6Eb()h_s_qC$1u
z%!>RT{K~&`0jJDmpouWGP~)E`E-)H?_=k1~xBV<OcFgmW&1mmuz{-N_sW2a8CNi&d
z?LFqLw$vqAyuZ9_G2fBT!mcH}H3f-Pc at pq35&4YeCFD!|ug(+03*xZ1P!IEneBys|
z2`VV5y*#C*G^y1$xw_Y^GJQr(=99bUJhf-;le=a=zJ2BsJ7-?oHl25_Zkc{*Q!j>7
z5Zkdw)^(X(+}Lw*L(c`Z^Xt3Mtm!<xy7QC-|BjQZI*tnbt%rwN4-FaoE&G?Y>{`^g
zb7A9-g$?k(b5YZtC9V61It~nVoL)cu{Fd1#*7jfAHuvu@?TvnVDf-p*8%I~~9_l{6
zcE*Km^RDk*^z4ykubf)>2VCIoQ_<gEjedOTPp_Q(=8ZGa=<lP^x1-SyqtRbSqrZ(t
zKmOY<Zoc@~iO=7<9*us+tnizghw93*;J>Y^u(h%P_?yG|wPiWQSxITr#%Co>EYC~f
z3-A#xv5oOx;_;6n`VRhM(cTfxz;?3RliZnsl~QfNR|S<sezG}h=_j_swi!B~>A(^J
z%X6*TX^s5^M%&op75x2%ANo0Uqi*aJ9oK1N4VjRs!Pz@<L{<Ux1Rm>Zu;l=&h~fea
zm<4QIfN%Hrt=wmXL;grv<?nWR7}?|P3vja!0|!6YyO{6QuYB^U^IOb!6 at Gjnl+DK8
zX^0;Q_(DG8Y23yh4EQq6pBB!ZgbP&WOvb8mCx^2pMzSYWW>12AEA=?$(fOD#U&-yg
za)B>4lRLlk+OH>e&AzdF&eMD6-r6_s+5Pix?w$Mi_8Bi7Uijw8!M9H>dH3|v56%re
zv1<-r_Sp8BS2p)w*wA}<bN^%8W<0uW#-&Yt7qN|f7dG~t-_ZLAw!Zh=`rfnadQPnB
zI<ma|@NoN~;r1gdI*+gFKDD;*<l4RqTV_AGZ_$<Q^KR^49F2bQhnsr|@2{L$^WK$h
zFP_<Oe%G>n>ldw=+k9}<^s}4iUfeeS>dpl(o>=kGqg%dwZvQ{uI{DAHPe<Q-<Uij!
zAC11}OCYq+-=onl)e%0v{>YIxZ(aV?E05`?ul at 1*y4tdA_;0Ad5sKQXi>phr(-S77
zOdVI8ox~JStNe4ziMjykfLtLV=k1KazZ^f#IpmnddE-AwK4UxBB#wVus?dUeis at V7
zUtJ(D3sCJzL<t-GJl)<FQTwA-yMP~)W at cUFrNM><GwW at zCuCY3#x;48pGsv?5Ac!R
zHf?Xl5vHo)0_HgG+szAjlP$o;xphs*Q}@5vn=$frp&9t;JB{5*r0osB at 0!`HtHGN2
z%d;j^?TI7b0zTwdWKFUPPeeGMQkgrYJYzyd<^;pum<M|)>EunR%9%_(N8`Kz?_pn=
zVLD$0PljF5&h?IF)2lPCZk_SuE|~(J-aGHszWL7{nE%GfC9fS@{KkpF7Y;3W=k(Hd
z&n)}RmDQg<y5`rHSN-AfwO?Fc_s1vJe|>B7x6f^RYVU$4cF%j};KEx67Cv`q at y-1M
zPwyMJzI*<SeFHZSEW%zqHuT()r7s*?_RB{%3$g!s{pQgX- at df>H`g|OcxmlNS2q0R
z`TgI#a^&4h8$W)0=Q~%ny`U~IJhx-#((V%*=A2wV>*DtLPaj(L_Js|<dusPLuO9pA
z`9sl9m<6u>`BkQXkD}54RL=jZ&u^m9PosZ%<%x?YUVZA~>rY)^5{Q2J<ezVD4Hcv{
zM+zE4dGKFXo?DWgoS8JKAS0o&D1$7ZrZ~fwK$)x^DF2cX2jf2}wvq4Pw=>BFe!t00
zSB>QWH+#qGoU*d4JrB0p#Zwhd?2JB-f6a5f-sX`mV5u%oYk0FFKc!CN-!e@~j>5n1
z0ssk_dWM6X+kk<+kgo^$*j5)_T5qR$0Z;P+2fuSA*EPpGu6=^JCWgHq at Qr-79ss{c
z9iM!GKZ7?pz|GstLbVfj;QBcuzntwYS(78VqySUGWWkC(<cG5-6Z|1xv7cCxIT7*=
zdn at d~ypKJrT^{r8<;l=)))P+iXs^qjRVOz*Vl%2UF&m#*+kJ6U|F!Kiae<qA=e=-v
z;p-=symEB$YsUxQII-l_V~c-zY2~jjulnrqb-2LqudV&V<Lkb-z8?7h>-p``S9V9=
z+8=%YaP))2(GQPAe{odoqodJZos52RGWsFo<IxX}zj}P|`9lleIz9C9<u%wxm)895
z`sVj9tbXT_RlmNr`5$i_i at tLTuwOg3{^he9-ng{=v4g9J=XR}}RljMVW%shqvzzB!
z**U-*@!K1_KfARb2^9U!wdki${MWmep1ycA8vUm~5qSUq{PBI4PwajC?12}qosNF>
zO7xrOHqL86`80;}+iFTGi?garbMn%s<)<fv^3y5{xyRX)Kus00b_V}e5rTi}KU|~;
z{M{P%J@{+$fgf|Idj%p}DUcgmC>iCtr7o-XyRJ at i1iS$9ow4R?@CRKWSnaoP%2JUl
z^&9y-ZJCv)mjX<>&w8HO$qu at 92tO`h=l1BA#kReO3+U!A=LJZ2+x9LVH0>dt#=kvH
zVj21Jm8$dY*HMN->X?m5zOC(AlUq^R1mG{rWKx(2`DGasA-_CxQXt?9_Tj8a<r#u~
zC~IPQ#&`?$RCNUV+{vw_$<%YmZPEEHC5h;Km<RZt2$t?>H_m6*<)HSt&o|DFuk1Ln
zs`HY#z^v;#XTN-O at mr^sy>n*hg+l``9a;Fw(M9i{8~*L1YrlAM<6m!W{rrgyzrVKb
zs~elXcw+ruZf=ggzBl^DK5>D!4u}_g4DCmv9~>2X`(X6l!_jw+Jhpw-vj+#BJGAim
zLyO)zGyLlDr5|5j`_bjKzj}1TZy(?M$zz*-eQk at n!09iaKlH07_q=p=!|Un-+g8rs
zv7~eL?E1BH8nz6yoZ2w!sY65WUf%NQ)BB<yUW$Ht{qOHy`1ajP- at K3DAMwBI=MG#y
zcj$?82VT5(>h&9EqtU<q;nfQ at Wx1VoWu0~9jgi8JaA9Wh<h=BRvfPwNVY)AYz~1=J
z;^stF5Lim^;P-=nKc!a>eq9t(;9Yf;0;ySG&6m9`vaykEO4joe^a8iN%e=s)y10Pu
z;q{NZ(aul0`VB2gh`L))&Iu9tZKcUSMbPbe;WS#Xl*1gRK7<Q+U&a^v9YHoDxNVO%
z7r?WtBN^UfKKUABo~LZF at ySQ+k0gJxt#jG(F68GYk1L|RKW&1MUrLjYPd-(Bl|54l
z_#wd_onzQfFziL==TOg?Oq>V%hQetW%y(3zK)YqN(<Q3s%pM6jI^Qurm;0=Jvo}w!
z?lKp6blc2pJ7zt5VBqDWgRdT6qAsxTr6Y^pJh|lKiz`1>7x?V)^|-)aZf^Pd*4Dp0
zyX~JZ?TWs<OJ;#r_e9 at 2EcUBY67v~+a4h=f!9P5;gIwUnBZDs=8+_&X68Qh%{Hj+^
zEXDAG-#xMA4>z`d{`AgYi3=Q$zJKm7FCY8#=7E>aZhYyHEl-`;cyi~;6YFQ~Ti&yO
zdC#t;9Y<DAzj1Krg_CQZKC=9mPwe^n^)vr`|MEXRc=X#3uSb9Tr0)ZNV{rb+&c{ye
zdFImLXD=WA;_WA+U%mY6$G6m#=e5_Awp5i=mSpFpC+4OnkPBDjr%D#UEuR#NDzdpM
zS{Kf8xKzmT-zTT>7Xm-)%eE-Yx&wU?wk{0w0PmKDZM9d*q_NHiJH1wR>UsS8y{TS@
zzntXYr2_)LHg?)JcBTNt0|r;{4{20Xls(xtZe>Q;#t~?HGY;KBwYUK0pJe5Efnm?n
zk#7U|Pn#lVc-nMe*c;?-%unN_6o7Zwi at W(5F7PACkY|*qy!HmavB8l~*k=|X<}3LU
z|B3m?9uxdvPgX0~XHF#YgS|<8LOmsY3H1`^lT74yR-_8^Qp1r8tR3MDxUqe1L++S1
zt2T>Id6EcV%onHE_TU1i*K`9asq3x%3tl|3_>GgxkSojuuO1ux;E@&Yo*jPw-16T(
zy6$(^)_r+nles|j<=xRYEb<?bX#dWk=)2fqdGq!C(bx8U{oKy2^J|Z-?09thtQ&jg
zJ-v7SE610<b!Pbo7goJ?V%Y~5R=;<C6)y1AGrRuu?A|YK?*7yB2fls%#NXdK^W}@j
zUp>F&+0&b at A6>tF#oYI=Zhhw1imSU9U*5Io<c8T7whugYc*U(_t6n;@;nQc1eEZI&
zuiw7(m$$F}?Zc<U1^)Sq_n*6RaL0xx&mFjNZr^LyPk#99`RL!C|NBQz)t2YC*OqnG
zSJaf{6=o%8Buyp-fd8r at R)KSxL$YMn9Li}4vv4f at _tX;Y3#T^}&uA<j4S%pT$gS|&
zq2;zfz!NXP?C56caMm4OF)t|Qin`!#cRAZOsDjJ|1b%H2mJK6;EnNmbiGX$f`{#D*
zwnyFh=<%;pfO&yU1d;_f(_EPIJTY?w9eZa1*-tPpu!C at U+RkDpbr=}=2EQZU>*`76
zCf{)q_5<V-|4Y&)gmYNxmDU9d_$u`$$6O$5qG3+~6Z4BXvSQm?nc-d94)!BCA85{>
z$2FZJ&1Jg``l~WTAgNh`uy;wbbAdDKdLG?2>*oFi#OHU;E`Rg%(Ca6b{^G)_k1wtM
z<no$dUtOy%u>P~hH+=of_J6#z`=7YLD|@1E9*DkoB>K^b==(>--aZt4>)=0M+56{b
zcF at d8{ga=M3y>yX-#LdL{=$*PZ=YTM_SqGr0B at dI{>9TfKD)6U7x>fj`~UR(!N0zI
z^iMAx`{Rqp- at Ls2spIQ$f&J?jMSp$uH#c^_aem`-CstqFvFO_Vp_|86U*5gs`oR^S
zJbn19*Uo+O?$y74^yIg{c<OhrKX&!RuCLyC;?l8Q&s{ls^ZbD~Z=8PS+>XD!bz#@C
zuD+J4_S*9LP(ejuR#wW?+_b4-(LeM^<TT4-na4jX$emUB at Ne+XXe^nDHI>X#bL2Ci
z^@tukY)*5j9a`?-cRdeolb3S@&hR%m#1j{Avj8i<a at 2{R3tKO@)cnl_e041oK_VB1
zO3$#t?_59+YL<yWOanFa+L2ZWcz-Sk at UQoCQ4s=uo|y^a2xi_7 at h{}%mpbz09CA5L
z#kQMC8P>wS>tQC(<!?6ffuERPm@=NQZ{%Bfv$h}+ at +sz1+X-S%<kwIy%y(3z66dMp
zP{Wa;Wo<U*0{gs1?xo6J*itaBF)z+c^Q#=n=BXKh<pm?)M;h&4)_QQLZQs(C6RW#V
zt?70yz%20k$z`~}+h>M9xw6(=;G>JHe)H(M&!5=z&GS3IePP$%U)-%;uqXP;Uh#ro
zo{D~WJo at gD=o<&A=YRd&Zcb*Pji37ev6Y=?*HIwtyRvoW6T9Z#+CT8>iDkIJ$5+<>
z{>iPMJi77ATf6`8^sdiu?)mEZgP{KTbBBNb?2&gK-F^M=np<bK9 at s#!^quHu*S~%9
z^aqdac<a*ECl0N6;mpPxN7r0Gyy}h1yFR&j?3?!<`}*B$fBWEx&)>ZE!Lt`$eEiI_
z7Y|%Nz30}218+Tk<n<>`zi at g(XML!%AygkKH2(855{&<rNWSu)*H)R=UYXZXmET#N
z-!BcN1pgA at --jO;V3k=+nTPy^9U-yKkU4@~U}R5b4O{%RO^%L#2GW4-dw~^&<WwK;
zY|mIO%oHF^&a%BlH%W0Y0{h(M7<}n`<0Co47Sm&Ft at GbbY&Lo=bUPRD`L{cX<YqcI
z5$JxI*hO``G*<$9uf@*yKKTQLe9!e9`TQ|f;emXY<U&5B9*Ufn?aIDI*}auWC6j<J
z8LkQ*ggpaRatZaud}k;PZQoaw!744x!+DT!n8)Tf<pmAdPlk&jieTPb<kHkY69nO(
z_>Y<Ru}OplDVC*nENsLDjx6sux1sOy)|pqg&7!bLpeAocx4(aWB`)yMrPaT at yyh1d
zWjgr!*&Tm-Zs%WaZU6Sg-AJ8(ytF6!{;}vA2S|7+`26GLz0p?>eEZVAPafOM6<VzJ
z?pxZ53mh75JGr_W7kGOA0L9W5jtstacExY5ZT{oUoqu|E54F%QpWXY*Yg>PLZTlae
zKlI6yd*6R-*Bh61+&Z=C>cO?@0$)X=e~$j~X7s%ae|`Pz>le4bcy0@;z!!E8J$rWR
z%NKWjeCy<|UpV*CGiN@$b>^)nPd$I- at QaU~yl`yy(S6&<h at ZQ7pe|I{)evs1EGf&+
zNKcyb9sK9RzXkv427hD8oR+e=t>u`(KhP1vz<#hhf&stTtfpeI#$x9MtP#*qYFoW*
zd)f#u5Esa>l`p9XsSDWRFG9#$@FIAoPPBcFtO!^+)H*-S3(N%^kaz)yT*W2=e-`*I
zFL3*1f-d00A2<tLkH+OFEjuaNejUHs{z!5b-J37j3WZIoofP at C$jN>d(fLAtfsyY8
z{D|;B8Ice6?d7S0Jv}+$G-!wU{_0E^hWYteQyw?<%x}u)xquUl1BTi+jF}z4K4!YY
z3-<gFew6$`H8c-CrC-d~i)|lh+&aI0o4UZ(1 at z}M99`LYdCSblch1EHDC|FbaM2s5
zhTeN*CA$3=7gtljeE00~-#@<bvnMuv{^aIwp5H~Zmze)1vIjdX_S%8}d~px_12zXT
z(9e$xY?)uTdvO!XVVAbdytZ>LD+PGL^M?oDyRhc>Pj36-=FYF4+4IfIhyL>7!7raX
z at S7)h|L*2~b%EV4pWk}x^k!V(=$2(`mduVue<wQs^PAtkbK&C~hhD$D>+!>DFYH-<
z_28Q8$2L87WW#e8_Pl)M;PaRE-+E;4lV^56c5>(WLtD-t-ulf4*CQplU5(+I3iMBQ
zX3Er}tR$`fWD);c!i4<-3;x};h44SCxokGpQWk{Yk-xArJlI_+)>FB}w*|DMnhWR?
zFR*0-YpAnT;Gh?{{cGj|H2)a<c9 at ULg-r-?wk=-ZmIIs%=wZ%shO?dU!@$nG#S7FC
zBwY=f$swM|d%L}hZv=iTsFF>aM at T}UW~lQsfuD&+Oi$M0k8$wx2gkY^vZq2m#&RB2
zP1FwEn{+JK7bVfdP?bwzlN$acRrTn3VZM(bUzanzI%~Qnv!L$L-ki at Z%-DkFd@~b2
z1aQGvNd{)eGv6*hM14nNetLH#U762}!@j37qbHKlU!AqGKeB0F-4<M6LBsZi;tROI
zp26lvHuhiHHtYKCdDnK#dGRO(oF%vbMVn8qu6zHHmA|~Q_VXKCQ22j+cIVg6?ee_f
zoulFfZyx&RtNWwx9EJa{pWpl0Q#(0haJVP5qA$E<UfqFZZO2x1p|x;<r}hnCFCQOz
z_xzd<FR%aY6Wjjy%$`3zxBrW0_OaCU#d8NKhyL=(eQ#aa@$&g?R}ZXuWcTu8TZgu<
zUI_i(%Gbw_|Ki4>=g)1sa$wEAwet^eT6|#rqGMZ^o!Gwo%8^Z%4sCqw__nkA)*afq
z{J`d+PoF(jUYOO>TvZ<~D$UO%{ugB>M+!4o8g7l`w^tQ(*A{iw6n57X_SKj4H<Sqf
z0)P1&jr<EV<_~m)Az$F{89_cSu&65x|Jc0NGK`H0h$Yqt%mrj3U~`Rk$R`ck{*^}F
zZe=;-nd*=fMg0RG><$adh;ad%0 at MXOFAx{-w*XL?0aT}j<fy|`Hw$<fLC^~<w{=gX
z5eb66luH<md3$=yEA}?m at HZgLtSbZZ@mX85*1cL%$YPC~gIsvhqR+k+IdZmG+VW{s
zX8R#~Z(GY!y29y1=2=pfr+|}9Cd>V6pgy2a8!*OTp48Qw7pgKXZ#AAR_zU(mSpZM6
zz&wJ1Jw9b-ah|7R9_;(7u*?~?*~|NA#f+?*RkLAE%~o7spwWB*7dW-H=knHB7dOvf
zI=HcS!D}an-Z(w{{`pl>x=~;F?X``6y0znvPi?~szPh>nZ_n?JzJBnV7xw)96-q#d
z;6M7tk*{Ce|K6pI957C+=eB{yLn5)JpI+B at W_{m@)jc=%4zO7K%%Q<|9$E9jrS-qL
zzU`Zr4}baW{y*H>_oo*Q|JR#m{_x!453cQg at 7kVs9^3oq!PRGW3?YQJET1>0uRR*2
z)cGmRKc7B->c)vp$G0xsFgShj^p;fvy<3LoZW@}icm3eut-~jGt=Y3~aNDYZS1)c4
z7iD)fMrtbxi*wT@{%0q%E=FHaM>XUZb=MYm3H-&tKi%WM9R86#3V+za5C1Oa+hA#L
z)#5I`paL`gdCqPsv1FM_slRaG-DHg;u+acBImAR at JCyaba}`4B1-=V#lD{A~rVChF
zYEPRBymY|d3v3wy5#G{USIL2P^9b_-Jje#_o>QZpCy6ajqJ4mT at 7z%&nGe4#YSZ9H
zIz#IwolcxO$Ubz=VPHe9?8DWb{I;?bu%BI at 3-BP#RpZ>$U{40z$c7<%@C!_&i&}S>
zFfK^*EkKLEKt4z_eNYiH>_;$PMHYZ5^OX|kede>|^zWK%Gj4oXIlXdeSH+6{2z;)e
zU9)jcEtKK{<ORD2n~$#SI=!y<!sZz!T3$T5<mKa3?<IBp at ZuWQu<(TsFRuQ at r8RiL
zmrrm1^5*vFYX>18`{!#1|Mud(f4p}1&(H6pfnh~oWc}>gU4t#hR`;CUF#Ynj*;lsD
zxw>QS6MF|}khpbl at YPc*-n+Q|i(7j>ySaxc;P*H8{`SV6KRkPga_H}$J^HJs55I9`
z*ISS6JG*O`2)}Q`;HpJ4qn}^@=kH$s>ci*I|4*OZcInWDC9~Rlnj*a|)${vWhUfRL
zT-d*2pnv_+Ih%&(y>WF9#s99x%9 at J8{H&C`jHJ at s)VlJV=7{j$Ra at LsXZ%a>NBPet
z@@w#4&>`dxXxO*lzoe&1thWm6%@%jDH!ZTbJ7NOKTwr!{jDK$*jXHug4&ef9w25;8
zcgSa~1=PRB!nr`;o|gp6M#+fb-%khZdW*@{AQx2irilFPV4QOV=Rvqnz>mDmW%iT(
zBc{E(gQYi5$(M$0xl~uyvJHL;ylm5E?;eLxaTE!s at ienb*WfQtAyCh4 at FYE#FLNE0
z-AIMtA%Ru(A{xfj3-HgZ&GDG8%|<Cv2vX+dsc}A|PlCCG`d*Lu%$`atqdTG>RSWPK
zpYpz4Vh;9pHY}GuteaD}W at gQBZ+KaE#ZXUZ)r_hQb86Sls@^<LTwvGY<|8Y*4h?sp
zST1g!`Ph!Rw+=3P>Dbbjk1u=k%!&^#toh{XhWE~|#tYs#xAGU4WL5X~{|{ep!QW<<
zrg?vmcblrZ3xei=Lxz|kW at eCW$&xGvlg!M_5K|I|IjJO-;#7*Mp{8M`d!}c$VRm+A
zw|8cD^8U{`k}6d*yZ&AM^rIu$6-n29pPSF)xxYaBPq+T}r(6H_$=1Jqy!CIN?)>Yg
z=l<&6T(6~=YG*{?%A|urxChIghbwJQ&h>tLaqx?4qY6K}Iq{nZ^S^z4>2Kdy`J2~Q
ze)q=OKfJf~ySF!g{TM at N`HOq2?_XcIvoW$Y)ww;>yE5K2*4z5*AD;aBlQ%xPwQ_Ez
zdts;*hS!wl)m0Q&bd~L{hE{uhLv2}oRngDhx=iNRtQGt}lNghemROd1MpvFgT^!0E
z{$u>uq~+tRD{$2n2>uJrUn=<TBY&s4>^sa?{8x^!@P(yctYSebF52vq0{>nhw*#>w
zDDPN`fS5`_YmC|j<eX>b+=@}RUU%4cytVKJ6zK7n*0{3v at e96V4k=|WuihL165+S%
zm76SnSIUkcxg3yA-!$;fQIvnvf2_8+kq2$_Pg3OPpNHonlX^+?-(l2I=1snvet)`F
z8PkCXFnEn2^Nd{6=Eb4>(c3t%Of6=PF;{FGsmxKxaNet^@dcng3LhIuz{mLp!TBUF
zu`ABl1caWKgy%n$`t7IAsKYwpJpTYicua9I7`7^1O~}M7nQEz_&4k_)`mIJ?l~XO6
z5oZNu`Qz?N>hq~pUhg$*^clAXjMQ*mopjuuYkXs^?Y*t8k1q86^3KFBZjKSd{P~R$
zq~NP-!#}+~{MYxVe*gO1|M*~C;_SbFe(t}&zy2>DZ2ZfITUa$?ja5sX_0&I~AF<wF
zYJI%k@$Poddpo_9gMM~(<g=@zU*Da^Ui#(zxvy?b{p!IYb#VkdzqmE`^VgPt_4w?U
z_f|f+y at bJkcXM=OqW$bd$Le at zPqU@3&6Sdz^!fdbjmeIY4yOtBXQvhCWt10YSC{5j
z6y+FeN*5-F3$s(r+6tabNjP1Uok}fGeR+<lI^SATK%0!YD%W0%@-Gnl*A_JEi=QJu
zL7p<mFZl1%`2)`CL5V(lr5|3WSO$dz|LY6<sR6QM{u&8HfWiqg-I~5hENY5{Y(Qgp
zi~r1vg#UQFFFb^zm?B>L<T)u&+W|pKl_QX80<kr4jJ4mY@!R%FaJb^w$`Khtw=0JG
zwY_ at ir~UK0l1f{stMF at lqXVdYk}VRnPKe3a3}}+WCpkbT4aJKcLe!n;C4>GrsZiMe
z)xsKS)MUV3Kj%%Q$)*yJq&P2>e5E41xcUi?STV!XT*k~Rrd<iB13HlfroA!q4ZwLN
z2x<x<SGBGNfX{g9hMX1SP1S4!+#n01?#l7TDmH>KcjbJ0-C~D!sZ)2h&%j1-e#CNR
z!f|WX{n}E?8`v%9`+j<TL`lKdx5vM at GQ_4pJm>3M<1(tb^3U(D|K+32KfSZ^-=3`h
z`Q5cYKf$Ws{^a`9a+iLkTfaGAx-#XuHQ)UBZ09 at Mz2K88BVXK@`270#XV=Dmad+-#
zcV>V6X!-M-Gfyv%zjtx$qw6#8>`pwrI!i?K;m-KA<^Hu%&*oI;;;?71&DP;=@VHDh
zRb^ux_J-QhvcjC~jMR+Oq at 0Y@yv)=FO(Bv}oSUw%E~zaqD9AcfnwM5rnq#cWH){&u
zzrD5)<!|?q->oh5cs0LZeut0w{myD=?`Qs?s~Ys%E1!q*2s%x|9cEO8oK_)@^c6)E
zUZ@(mOm)H$1#(D%oCPGhFXbVpA{UGl_&R^(N!GsTkXJc-k8u%Mu<r;0N*-3D&;7bx
zSv6dxgCLC@=`71LlGI5_-?~bnBNInH&bt9A=KKC_;^-Ofaa%}ap!xma9oe3n7=Xyr
zuga-U%u|)~S2LO8#7rA#-=@u+YcA*DLacqv6|-Qk;5?Lu^9T!&8eXVzh%JU$6(;g5
zBi$5%{e%}|uUPjz1+kg at hTowG&- at T&hKad|@}xF)B{3#Wu8%cpXtN!4R}VWyv*D1V
zf{kF%UdE0<6Rz43 at Q$%twgybwL*{eCmaRe4uC(D_TWUoLetv8G>)R7}ufMuG`PKE2
zpWdLbQ^a$Ab$9Al_on{%wje)&{eS*o^N&&l{`_R~@7`KJ+i$u&;k+{Gx;fW;b;^Bp
z+Wq=^*V|jYA6*)O{GVPOe}8wFiqKy at T>j~u`7dtI(H%g}>z#`e_s$NG6uYxNba!Lq
z>T>_mQ1jY&`|?QJbYBw&e}~&-(pJ?~m7PgRjEX!J7ZV+KI+C#eL|@D6=O=2)3b2JL
zin6oQlFIYbwPiUC)%guodA8a at M_r*)TjZ!y%D+%4|8`Ru=$58_kFB!TR_SHFr2UYq
zddQ^#{f^3hM->?GqOw;;L{&tnrJg|0HyHtc9kr^CptBP4$XpnMiM~k(bHa<HpZA<!
zZ~t#robOaGk%WTY&sqMFDn{fDlM*RC<2}_^>Ul98R~bnB%JZg<GI;!EmH$5^tuL<)
z#y<wZq&ZZyh;kkoqq_2w7^6g^1jZX}*ObUYd$NSBhGLHo{%9EcV4IOdVKK8iTI=%}
zanNZjBq~mjXUffio+WGwP#wZUY)N%FoL{kBvKl`c_A=5+j`0_#x2VG`SQk(ESgj6U
zmTdQqIELzi?Sk;)fGRcjm_fvtXQDN=JZ-?i6p`{CODRJY`fO$Wvfq5HvAV}x(%DeN
zjzCW?4Y}AYGp)6YojS<BGi2TzXyAqhu3K}BNWuGbX<Zupg_MFXu8w?pZG`);Z%_X8
z#@KIOn<WHFROf$wyhDWpZ7hF!Z{yGJZ&ArisoU062jpi9xHaEGtINIRwuft7A6y)H
zXJ_D}%VU(fq5QwRGfzd_CpTuFT$)7xzj1#2{>Ct5ey}rsbA9;yY|q(=cFKfM at 8jLB
zkxo}vquHvjHq at 5aRh3wE<vVkIND7 at b_tyK3wPg+?LXef0ky25R!KPr+6kz|L{N42>
zE?tpZSM1Ujx^;yuhLSc at S(mk<+gb_pzahU%GblMPnC})Cc5A$}cUBEN2N at B<9TpKG
z6$qkgPDO!~|I3wz8lXZzDkCiI|8I`^l@$>}39F(Ae+Wog{=V~YnHeI at a$bgMq;>~?
zr0DsZZ)<zuz&>x at C_A4&qO30%uE`U4p81mV)W?dUNz{j1tFjw)1;ocZ#uDK7l2nuc
z at t0en2ody&c{P;-C<<<D<%~G!X3BxJq*I^Ep%3GZV(cF=u2T|QSC9y+nO at F#L#3-Z
zu0l<F<0;nttcJkfVKu~7Y*z!9<nT$sb{rFi^~s_v-z+}Smyyz{FYp)&nJXd$Q=7*b
z%`Nr$9SzLb5#k^wFo=zSo3c at N)pSdZl!E&8J|hOqT8}~Q1vZ at 7*Vo!Vx;XfbH0D3t
z9Y7*Jz9hWbpWmAN)xDWt-JkixJ8S>)(f0rP^!#5wIZvJ2Uq0LYmrpMI at yYhzy|YQF
z&(qz(kFSirwcYn{z3ahR*XtX-?_C&vdTH#v-O;C)Cn$&e==$s at H|O8GJbh<v;O^O>
zdz&K!f-W!hZ%lMd^*E>d8vB|}{VkTBW^=nke`RIp#>&9M?Xlad{kK+n at 2>aXS?#^Q
z+KpV;4VsLU`0|2GT}7U`rU>P4uFiMV6*cNhAb(@M;D581{FUF3-(J~kuY&o4{65;l
z{9$(u7<5+s-+)J~d|_fi!ua=f2lz!mxxk|7{#(OKy=Oj(jIb{$Ovpvp=g$?0qO?)h
z5cPRojiCaorN}735!Z5%1+f_p;I*lgi>>|we?%Ui9gDd6*q)^LFCONzE1~MWv}d-G
zr7GK|$t5^OhyWL<(@gF|!RsR7C3RWK0p5`EjMyU45+iQSXrpGlsb;K6Gw2Yim8=j`
zUO66u+%7{4nefJ}GevdAorxp83efq2y&|Smk}Bp&ddKv6S<O?5>ReT;k(ehbhe^th
z^qZlt>R>5VjwR1rz*SEtYTb>TTFMAhV68D%4Jl~R<s%LreF0J+$uA6~A!p at 8lV-BH
zhRF;I9XdudFslJ6*cdQv4Vo`cIv=dGKU{5p?_A%L^Zg%R8vf$?*q7JGKfN;Y^_^+F
zTB16?d%Q$o6Bhvf|MN%Z*#-XF2j~9$bmt#GyztvMH>h^_^wvD;{k`);@0=Tabhh{L
z*1)5U{>NK`@9vJjcWLs;mFWjtBe43?eE0HD<H~UJY_Dr`y8F(?=);|fk8Ul0c6as5
z`)eOupL_S><l~)@TgyEcCR;8}w_cj at T$%N_jMYundcCGJBPF4xERRA^o3;eyZ>uYk
z%3qMbNng at ou0Zp*n at Df@G{3#7Pm*6UUl3lPv1Y^vTmWec{U=wHp7?BiUa+c;RxJbS
zij$~3M_foX2u=)0DG-Cu0nAiH72WYZ`yZDRS}J&XE at wo*ZJ9oxl~~v(eg&@7I2 at Mv
zR=J%zM^chpgr0bTxEGukBl2hkg6)d=#<C0w!tEL{Va%;9z|K*@0j at Yley9+E;J+_W
zz at 8|SgR6S9k<YDqq)`L;Cty))Ep)=b9&?q?HkET25d4SplIr425W#2JJ>mU`MCwo^
z4T-OQQ!$b)hGD{XHC4u6Ri&IMK2H>j-#1~(liIT|L1}2hW~0A@!WDKUAq8kEeIY{y
zG14&A*c7;LtuH_d7`%gxG+?h#QZO#1V6I&^-C8&65mK<+ZNQ#CH)6Xs)A-s-`-9bv
zH#WN8JJ(O^?njq~3I6}py;-Vy{`%1(fgReosBi;hc>n(Gv-GntvElFE-TK3mo!>lO
z|LX3-7q=J4`F?SC>Ej!7RQSMW)c%_nCSKney|X^>_}tjT?GYZny*u&#)tOIjE_`}x
zk$wS+<vzSN`_At8wfT<g3!S at Dg87>xt_zdRyHm{<r(3jDC3ZtiWpPenPFj6sp{1_G
zT32kXEppYDv>40X_3*!>wV|xTQVIDx%;nv-svdh4Y9I3VIjV--H2~WCnNM%dXj3gv
zj)2?_ggN8~A1v^@!+u}bUn8n&q at O$OS5C3U7cTI!R7n9>zIXrksGJ2zu673%f$_;s
zva;2ou`<rF&lThrLx@!gj`w^?m3PDY=Eac5%m4f&+JD4Y$coGcQ4pA66%+7aelE;!
zF%$!6Pkca`J$~}zC;|0x;SFITj<;whTC~$`_4AzuO2Otj^z)tiX^(cQwQi<O3wbcD
zCmSmlJXP1n3^=5`N8X74T?<Q04ng(rgUGw^yM2LTpHK_2RlpfRRN=W82~|u;R#dZN
zu<<U02v=rN*~|N43p0btY%(>3tUFC5SZiJ>V9b;*pD)WV1xg|?jpR)cI~S%AyV!`k
zda|WfycbX1VyAws&$KmU-5IuBoo=LK@%~EtYpWgaUl at A2JM_hkN$~T#v%k1I`{k|a
zuWn6qCBpObyYs(%utbFOH?OaL{hBE3{PH&5uE6KF=0CeN|JB_kfaU+;wV5ZEC!buN
zdV6>Ljh&H)n}ctj8)aC8*cUEMVjaDIWs1dX3xfQYXWOpKwJH9epJ+w|?ku&pI*iyq
z#DX-X`L_CsCR25zp`y`H)^4qCvsASh%i7Hq-L~pZYh}B+yu(rf`3Ho-BWOR`TsJ15
z<qHLh_FTt6vw-3}`@0{?B4R?LFF__gUclHoK69L6K4E{Eoaism<S21qUqB+bs+5`N
z!K4$-JCaW1%YY)Y at 0x;i$aSSQ<<)n%2HQO at 2G6p;s6Qf#@zA1TmS&<Tz!oE4n8Ysh
zq<ERs^C(6|es1h^{nSzcNXcu7BEOga#uDbtKzLMy(h>tsVIQ(BPI`3noyPet<3g8l
zx!1JPYhLXWSm`y<(7M=VSnf71bsGo+5 at 1~F5K{qfjvM(m2umze%s3K`3F!tI=@n+1
z5Oy!b;7T#CK<rb at E1+eSt|hriDXNPO4z?|^bBXmdsu`sei^^W=dl3OvsB$6K51vck
zl&g>(Ul4l%T1!3T%i_KlpGEEw-1E)i#h}@cnju%!cyrA}OYLN99fGjXsoxm1oEvrA
zTJX at ZxHDqEIp2D3x#P{Pz7H;qes~#-y}dK={_e<UH>SS6zwq__#joznfnVHT1fSlR
z{`AJo2UjNF-5pbSD(}(i0D9kA?gsbPg){qTYY6^R0*wgVKRa+?s#RfUym at D$`P at YF
zrP;O%Q!Vq|=G6ha)lh4xuQutba?+Ct0lAIUEoM!Vv9iff-eJ at 9I_r8IHNDQ7!A9+X
ztJbIaiERq<54mBum-!Q|+KE=(q=H8`<->SO-Gl_Yyn>ogs;+#V&jX=QkXd6P6e?dV
z`wQ^DM7&6ic2siVi<;&r(SWF8%lHrAS!G|T{l!0|0{a2 at jb!X+bqo_-naBbnfcRh%
zAZ65h<I?)c at 2JV62#QcxtFZ*~WAgwd0_c3D?cqFHVz{wZd at LT_OgkFh%Y4Yc*xjJW
zzt(47 at 3)*Cu+Yl4Ib>b$Gp+SCtn?U&t}l1i?GEav8p~lm!KmVNM%E`X$E+eJ0jgJt
zQT9m;=wM74RA;Oipi_@#CBbt!=#s7_f#NjQMH6dr8tdLg#$c8)04mE^PEC6bpvsFt
zH?V3z9*RqZFPv2(Ug68ysK^x$*~LhA@{}-f<txefu-)@ph&cuT1ek8q at r_TlYT4r!
zx(th5Mj92*kGZbTwcc6kxVzkOZp?Xp-23p(a>s-99`Mfj;rC^D=kuGhfX;XD`K>uZ
zJ?~$dpuL4Fiv8^iV-Ge49&Zo7wlQ#Hsq4yIJGimbeR-|}+}{}Fx;@@}cG$f<;5a+t
zUKwyM^x9^+%#&@#(U$t9e*1inwLx3i;%KnyH7I|QVpK=CjaBXTI*+Bg-Kyz#>$(N`
zYa#zolWwG0H`G|y>!|K?@Rn=&X2E!ij_=pYd>`kh+UnWa6=vG%CtJ0CVCX92hbysA
z;D5-CjF*a(L65ae?7XskS_z0ReO!qBiOa0y;`urXHC)1f6?=qlHm^LPNz8|I)#h*j
z0RvRkft4JECZ?)tvN$vZ8$+dKIXXlgQox at gF-?!BY;()SDn|38 at bPU0)%C^7$no>v
z at 9<(1qU|R=^#Ixn=6Cs--vINMx*OI9tf+lBzdqn4KPvJ3sAFTmyw)p1C?d7mSO3L%
z4`y45;C~$Rip7lXe9 at FzQ+S2}W$?MKD2)aUdh}p511;&-17cl1Ra=w>{OgqRiWke*
zGXM(ylixQ~WXpB&6pIQ>1yozPie1aSpi;T*tVl1fc0`!CV)y6kR`*k$dTapc^l8SM
z(R+OFLKDISJ_KP8yEQ0*vxBysQRkJ})~mCvTO$ti!1kzXce3f?WYgW1?wgAp4>$VW
z*cqak>)qW^wEdeq!{T~Q*fxHk=dUhwUY+l}IMW7pCR%o<#dUk4<?Kk~@_=)`$HsN8
z#|FkcMljT@?{jN$X+e*(cBG}=WzoCL_4S&v@}iu&ib8jTro~dzW~=SA*A6!82O8`9
z-P%4^ts*~CGu)&dY1Z~Tg<2bFssl>7 at kR6A{j`VkOsD{}?Ro`11iJNc at f0SSYyZ=@
z5YPIoBe9u22T}~)t(IL_fdHKXaR~+JO+XbJRhX%|d>OLf%vPcnc|<K38qB!tW^E4h
zR0*>aW2Bme5?=~hRAm<_{(fs|8-JD;>+%W7vdhrm)~KcGBM%E-*!Bc7Wnf3x_N4!0
z9)$2FfF3FutV}^Zkl7A{!a_HLYcO)m(EjXzb!*rzwY_a?$hJLfyD;WFH)_AYh`(Vg
zQ~t<)G6Rj?D`t-qkT1<jU`8ub`^vHtnajsq8i}N;{1gV%0NS)G^OB!?D!Du-Nlq|3
zLkAy241B+mT$P{7i#1|Vpr$AdXbQbhi|SgHe+Ejkr%NfQW3TUbRLlH6;XZQu!tY~6
zCOtLKV9 at IW3RYknNUK0<MNd8VzD=-xPV9gUGwtGIS?n=y4m;Ne?JIqjm455Suw!G`
zd3CN0++6Cqx7Pc-N%L at P=+;UPcFU#NcH)-T7P`1uA9AfpEcV$~hg>Uzu9+^&cw56<
zuYIc1GU{pQb!kD5OWR?qQE=!=RAGZzli%bpH>3OwwNyk at mE<{%npSIFhh5uYuj_T|
zhFT1RP5R*${b;LxxVhd>{?TULaHDvS$UesZ^UPPe&dd1 at JwBZR+n>Trn@)&^*b(Z$
zm<acMgJE`0SG8JE_y6(A9zjGJZ%ctFgz&snTtbE;`~f;>%w%{nHH6dK^!e0rQN9J$
zDcoA`si%mShKrp+BeTeMN6cq?cxYJd(jf at UTx~ZpL%WDwo^TBXt|E11Ea|kAa}VL+
zIrlQKDZ)EGYe(e1(FW)`zT7#`DZm?t^NRM&D_HBdY>zm0MjXs;-5$1IoN(`sJ1<VS
zE>F5HjM;aFaS|=m)$mVxcdd~EiPG%Ek}Ltn(Uj#R31lbHmkr8ulYx3xJynsX*1b>3
zUrDaWONG)^AYY&o5fD<qVwzZ#>y=_%JjJ41=czQM%|?WxtM$dVl at y5RpLqKskXu0}
zh)gI^kscdfVT}}oS~MgNJ1rH1?%JV7 at sOu58vys?t at WeL+Q~NkRGVSC-LTweTj(~=
zbT%yZT3DIuGA;GlHb)!L>Wc8^r&__*cr%s^m}oPOdyH_BD_VW3!#vt*1QYG%{zhG&
zTi0b53cS^fC0}jVl at iP+pR2FTXU;=KewwB at v!*!HWiz=f28*G#qBsxz-%wlLXsT_s
z)^<5{{Y{3U7UM{(QIg*<+1 at bKVH#`IWB-h{=$Jvrzu#~9Pqpc%+r$<RW;=lQt6%DA
z0Lwil3_t1U;p^ew8395;pab9>0pi|3I7-if<hvJ5A}Z)Z4M|C23nI>7E$cRy5P~Bk
z)7el=IJ(<h++!(WEVioGqF8IHS%Ve5(MOq<;mWv;GDRkjeQ|Y&u8L1D4Ssl`4}5-k
z at QW*h%pYLZ6XOnO$0K~rAH?Xw45OC;5fED4F4P?~kS=W{dQUx6#NetvfyHi<F!H6H
z&y1SYJ`0537_?#GD?3Ng{`{Ep(xm(9Ow;w*W<ny at XPe;v?wFm at ubn{?&9<NJcyPV5
zlcTeeqZv(Hl##$hn!=2Dh7!=1L~CkkHb??YDk}pyK(6N?6sasKN>}8csmKEqbV>N0
zV!f&$9g>4ekS{>RdzFHG3boAJK?(pn8eg<}`zU{v{Ui(y?L9^j?`mr(Q?YRoA(256
zyv1IJrq7{ar3qV6yr5jh4~d^tcUmgRC3V at Vq(@mj;I18XV_Iui8EVu*wr+d%xW_Qv
zY1$lv_D(oI(xRVeYrq=?9o8x=6VPs{>ay2#+G|kq?Y5dOht^}!v|2Qc#!6jzF7vD^
z3ern*QYmRD%S)%QjoBtur3F@#!C}@r%=MKe`Bf$PHoXSr-(sn2v(@#u>PI}LnQr?;
zhncN}4F&SgbegBy8z$NeW3Ba&f5M|j3Y769zIVCHD~-pO4(I)Z_s2J|b(e)WG%Vl>
zNpFatA7KH&2qT~*LS1J(T7fo!SpiZiI$lXsneaH|A8iyxDZ>oGc2`lOJKk7Lw2%}e
zgkNYErMc_9dJ5F9O*tMew|;qTm_n3~FAaTtcjoJRbH9GL{8z6n5mNZ+ow<*$jDLM^
z_NyD?6e#}k)+iItw)%|}v<%AdEcq$2RPbL$cZIEsCPW`f$H$xO5Sw6AEmFVGB`h32
zl&PbPd<-6}9XJmzj5~>bT$yTw_BZERU_MnY*QVW&pPGTo<F+efre9v|g869)k!kUf
z8HrKZVj`IrIjJ#Br!2 at wC`ea`FUm|T$xa5vSxKNYCk2#bgXFT at R8R`!qJLey81X?C
z^3JHCXM!jBX$s81DbE9EHisQ+1GeQp%R;wF`Z9d!!jfV42T~7IcUdbHAUQ!oGDJ|l
zSziLTTMVTw#?n?}8Ii+oyT)TGZ#I;YNMgmQ6%}RXYWhlYWnGPU=+YLcGJ`fVVaCdK
zg6)>74vXM<kE0fJSgSpzO5oHL1LBh{rplIv$~KFp!(Q8NtHo}&YfG)#Qi}O&N^>+N
z+116_G&YvzrBmLSo1T=G6kAzU<*=G8My*j>t*tJj5W-TgvFWR63TU%w`<jdc&Bn1d
z^K7qUw%az at VVdo>;wIxbBZ;$}rs;O$q=#)w&qgmJpCb5!Q3ve>^L-|+is`NOo6&xL
z)we1`eDfXk^D@>=Kum%7 at M4#OVW~@k0HDN5kCA8R+O;HBs6r%|Oi}K1YmLk{YPf-`
zB2L(ek~eOnImd0+r=5>hJfB?|`t`kOie`WFXzACluYGxMnaaR>o1^!(#vh)azPB}T
z>+I;wH43GMAMcEQd0U9U=a>2!^hXOG?kBqp5exzvhya|&#p7+tFfVKuga^Xkkx?Dq
zII2=noi~n=qvkTfc{D$!&V_Lo^D3de)b>r+gxYVqz0gW!3(Tk1>*j1Dm6LRrf3nj?
zYfMIBbb4Y`dV)Y&LR3c5X~uB?nzD0J<8o4C^U~rKXw%D2PXL9PNyXVIu(~MAhs-1v
z6$&zvXy^buTbK#NdO>DVQFe;|^@ZPlieG{J*yPOHT<W#VcbULUhY{7s){jYpB|tEw
z-&q6D=csp20}O}xrK(y0s>5?C$84g6QlhSqSh`h&m<k|2b at h}M(_kyYO*I89Qfx-O
zjlB*OwKP;<#t?z;cGN<3qLHoUDyL4QWfjOzS!#<QyiHrm^foGX>MQaXU_$jyRZ&)D
zVOB|QdVXd~_L;=A<hV0QafxxKD=Mq(R+F`%-c(;xQ(019Q|>bB8ZEj;bFIg&>u~6X
zJ?4o{+f<irzR!shfe7G4L;j^c`$CU(uG>t=bfL$L&4xmN5+Z{mEg!TWVGXu>CR9Ji
zc`p-Wh|j#z(?EP1toAk_3nI$hZ3K`Utb$(ST5ki<zjXl<dBeFjt;`{kOgF6d7}k4@
zXZsq~dJSj$j2OwA{YI({DL$v>_O-=kI_7?PcS<n%`sB~<Ek3<A_u$+l^&V#@yQX>@
zhuds}9$SB_tOIcx==z}vZhfMYLXk&1qm+~|cJ-%M`ftrRaX)9<b+{o!^N<1(8H8|&
zW8e((mboXg!9%=z%zO0w8ot|*4Qvhxw(pDz5a`~WaADqGnQpp1C*~F3S at hgpYP+}8
zc7M73-je6;V(ax8H{~%fpLSYCD?eOtq{N;|I(;%FHUcEao;njB$vD3B#OUnQxa`!}
ztP}wTH07ly2&5(C3NW}HDM-xoB0;{G*T=E$TTJx5So}&3I1|sG%1nvPJ`*qhh<}}@
z#Ivl+_vKjXHA`6Lx*D*|QGgf#<H8sw5~33pi?ynkAfXJBciE~@-4x6~d%^r#cuo}!
zJkJO8QZ-b8JR(la-WOBHr5nx)u+|hd8p=VFu>!dCWtN&khqk26TGMW=>2hkZ=Yg}n
zjN~kA*H`4#m1Z-y%1~9HXwMicjGU6(G*o>?N*uILjz1lDIwB at 2;@Hu{C1vF{iy*&2
zYJPLQ#%a=0_RwOhZ?o5TyA9ngJ<5N)!#dyZS{!gK54u-}h at Co#lrHpIaY+_>EQ>ut
z8?Ygw^9A#j<<n_+&g>D{90-r{_iO$Q5!|+H66@<Xt at oSH_L~s_AJthARHs&i(BI~u
znTipp4$#B!TnvP#ymnBO*U}$%eps|x+?aO3dFBbfzS4?G|LglRU)`J_W5|5Sw=d6L
zSst3|YwC0v+nsuGb?Cd?+#4FrbuBhM^4{h$anspo9`9+I>~UXN9=x;G_tC|nzrHj2
z*4Z}xLkk_k9wT5y>{=>$V!0}#;SJ>C<l at EP%izpP*tbUnlwpr;kG6;Zq<9!sPwgU{
zC;QLMYb)G)=<g6%<Sj5-y!Gc-dSHIcsc>-m)KQQSeIhC5RAS621R*`?bb8|Hw8Ycc
zt^!Fh>0XF+=JjQz#tEdvL0xz&kSdTRpcYw|Pk9&RQz>yY`YG@$^2Oe3W=cHkOFibZ
zLw2Gx3bUOJIHv#`Sb<<*zpJ*#t^rs$(#Wasm;_n{NFkL`LVz;2XbLPf1&Zf-j+`jX
z0=hD0k7okh6Py&rFY7CEVYR+850aZ}3h`TkrM4I}R2N!BSwac%dC(xob!v*U;5_EN
zvhDNIlW5(_NRFe2B`GdCF*Z8t)QJ<vjvfjN&CM?`)N8E`dXv6Zrzy7 at Y8(xM4DBvs
zr`y<O*Y!0u3^X^4wpmdAbA8T*e&^DFYkj!!>`2r4uzPjTxi;in?6ofUSy%dPtNk{j
zSV+O*b7qgAy;A<ZfVK?rSxJ1KA9E1g+ZnNK4qCQ`ERyYJAKNWN{D^y;8 at A&8QAQ5i
z{q^J*MywadY!^l>m&R;2XIyvY8<~v3WPnF2El;+)DI@><+W1$uXFs?)bA4st=EgW(
zZ at n$nW}DtnQ^p&#8EVYBD!iM9x(ad}HbZTr&ERpFTb-s>XM at MtKoi`6$38#UdS$7f
za5N+MK04RMe~y14+mp;%isA$+6JR?xGI&J at OUFaDGh|#@_2_wlNjJ;~H|APy&I{ZA
z#%wd@{oO^6Quz0mJP%jfUSDl{yykhd-1OT!gN-$r at zE!uP8^9mek3;XSZu_x7>T&3
z6LC?;6QWNh#Y6xmlF^i%8ZUq#oB;^}2m(aq8~3wUQI|#fShG?=e5Qh+bUa#7AUQ7G
zi`ev}Sgc|N^%M<&3dAG{P6Bp(0RM^DOtu*S#t-qp!N$5iXAK}dN|FdrEu+wEEC&v4
zF<Kopu0Tb-WO%N&G at A$vF&Ty0k}Tn;=ch4!mJkijh_);jpw(+jvZ+SX(VSabVyP<y
z4VvP*vRrKY%EAmx9me(WAt2@{aZ$-}k%_U92{DmTCy$*7KN5NJ_|YSW4j&3jN=~h*
zuCki+W_?|KO at +-^+i2A{+v=Mv+773I2AS?gV{emjsMR#$F;8|{7yDhS!%gcWO&g<-
zzY+bvGT=b}FZbIZKl&djSnVg2M_A8>>Fc$5WMtdNc^iQa!rBD)q#1w#Onk$^L-_9{
z{0M}%T^P0D_rZK_P`tDeVbWZ}4V<tu4FJwFX8^*}RrlUj=NoGtZhm%i48tCa<&zt8
zuWgQ8T<F`F>e-qboa*<qyUiU<wkDg=)}XZ+wQj4?Z8bPdI?^01PIHUH<Z)X(E(>p;
ztRGb$UCmZ at fmWN2x4%8vhLHZ<gGomGvC$xs_#n(yRW%9RNatOT^MYuw$O?NINh=_N
zInzyo_LBJ+_KNver(AayTJ9~iQUm;O#q-wLjyKmlzqr=_r$=Kcu_qPnqfdq_&YzAr
zcKQ at x3kZ*9FNioUaST~VIDINU`V at 0Hd|dTXG(Guw0*ggOY~Rab(S#}SAQ~itI01BH
zQe2cktU#iGU`}F;Adml9MSi|(ur^?)Q~>*bTA*RvqbFQ5AR;y*8sm$};GYV$uQWeK
zyREheE8SF0A-zCDbpg6v0evoPn96*`b8R`Mdk#?=^f|0%8Uwybadv7!W^zf+nezOM
z+S1(GvOHa7VRcDPMPVj=D|of+cgS*bY-D`&$v6;oGV0W^lgEyn2tSO$b0{n%C@}Ek
zsZ$l at WexRpx|&LzrVP#BY%{dj4IT9V^1U~kM>`xCKfR3xl>a2kzt=h2V_z9+TocN_
z5fLDRyfNZlA99`@c2PBVc8ENMLor{9fJo at z=wbcJY>waqhtv?$mS%uk#X2beqoa)z
zZ7#{y9*BYI3-dYn<MM<9C4YU|b#ul|4=E!B;5>!_g#X}N&(m|=bX7k+*YnYC{|CE+
z)QWt0XW<D`kG98m7y5S>hgK)L*QfhthdZVQ+lRWE==bbwws*HW2RfSvI-B}C6dGA<
zb6c8h2Ci*xGeB4nfkv|yJ<w#XZMSQ&`UuPX`OVocuMA*c;hc(%Y19tb!q~{zzcA#4
zIX7VDp;#ZaUmSN{p-oA4D&1LV#juy!zU9tBGn{|Kp%3eAPqsRKb9?C7hl?qvk4GFk
zd@}q{#PK6hC&Qyo9*sJ2G}4PB&|WUet8YE}6q~~F(-FsGqfW+4L5Pb!1yK`XA`(tV
z#Gj7vQ&%oVvLY7+u_c)W;S+^Dpr{^|5F3>c0|eVaJUFc&ei4Hi at B*??xWK480Qm{d
zWB<=eOtu?`n{;GFv42R9_POf1>>9!~IIX~~FLmp&e1rin&6q;71}i<^P?-<mF<n4?
zWr2cGQ%uRF7ga at cqtk>-5k7NBin7mO&*Y{hvWsETW5Tgmn0-dA^AtN;T2f46Oavbh
zpXaG#M~;LA9}W$M_#weT`}gfTeE4uiM!K$6Q(s%DsVHvHR=Lbt8o^radXHU?<wI-0
zkjFaGX2tTK>bB4HI2QU{^L>uReh0=sp;wX)WFof48n?%r&W$&zlDVxB*T#?#0TS8R
zJexyy5}LSvIDN_n at Nr%QIxqm};^82to3l-5LRfKkvE}xB6G4yLb6nkb<{IxUG(BF!
zFi at OlAa?J^7kZg0^Zrg36JRJ8|Ki5flZ)d|ug<)4dFJAL&!xqIb8~$wqwULMowI|U
z#nH~CvF_QSj-gKXV269St7)jSv9Hb9>k;T`w!!l at ml=OYqR!bMAfmnvwF-7awbNM5
z_KN34u9lfje|S8 at G>><-x?WpuMG*MMUz36QJBzJ^Zg at Ml=e<C~-$ltU3X}f93P+rD
zK0SxPc7L$b^;b6rpMAK*<fzz)@MDKVjvom<dMNnVk<b(2hxoEi9Xkw89y=Uy{3u_a
z_y*;d$Rb}Ts*HUcafk#b1jNdzW3f at E5QG>IDR4USL~JxGr(y*BizlC3^sb*4FZM#d
zSpCW=|DyjUI^tw>#EFYjE$BKtJ~n;8?vDdF(`g!OsV5qb{X_kLs0ssaZKq8GJm$(K
zW4Wuo)CqK at O8KMqfw`s_O9o$6FHl$yB<)e at J{0LHC8~;R%L{8O3ZZ&oc3MtaQf6ub
z`x+Y-n-@~gUd9H;Vp at _g_4x$&438ZN3kwbi4GuUI613;lSN86CH7qnFAwDiICrhiT
zsHrHat1L0si#mVWfjiv|eJvK6VlexMJeI+hhUp&XY_C&U{@6bYeRi_RB$qM%QU05w
z?u*kNS_WtqxHR2*d8T!H#Hna64IZ2D`@CUo5#N)$zn};D5M_wR_h6;%(P}$Q{f}1L
z9xS(VB{Gj0jBSH at WY`^qCjtrQ8T`xaM<_&zIOiICaD~3+nMXTgk1tHo&VaSEHQlu}
z)3Z9>u{_#7JJ32e<eBVip6+j*>}#3mZNUl}?P(tBaQAr}yxCTV*zDS*weL1-6<7!K
z`v4MuRQ)L!&_z{+B{?aCCMe*%JKw|{OQu=={QA%b=X=<Un8<|FEkzY+74{5n2qqcx
zDxdCjeR;W$G2qWWTK=E!EpTSRsiUEXLjsS41%)390WhD3N5g{AQ7rOh9S#iwLLv at _
zA`WcaLKaRS3r9~09D(x at 3f`5Y$O0=-r;Y<Cs(_cLRw8|iQ4uF1P9BRmA#mzMxEII6
z#iD{(SCG#h4?lH0{Ny({itW5J-nc&KkoJ#lZBQ7%ME@{;z?3k73}j%3KvR96OG}*?
zu}Ul-%pR0Kuxm?z4A)?~m!R_*uv}l6k1?;WDgvl_9jGkQ`cPL{TvJ{^DFQhuP+pW<
zQJh<xmzkG&CNq^VW_(iIX|ZR;M#1@*NZ$1^KB#a$#DM+#_q_7*PhR}d55E86kAC=*
z7hecCcp&`fk=U5%{G80{@}ioGqPof=zH67Mw!>xYZ?z7$+xuJ01pND(jWX<MMftA`
zHDUQvFErn4qh1dChZ2jeu_lT|&rLL4nrWq9;L>!<<rxH_^}>Xk`aOakXns<e97d!3
zKGdV~_&B8Rjk8^^uXS*)*;|`kZ=UUVye1EUTIUcbnA643By=oZC-w$YVwjbIw*Tzf
z7`FYx&4Kr?&c1hL_N|LEuWe7fzB at z2{@iR2lO8vwx;CeK&Q5l(O>`}ev`_XnjdVJP
zJDh{<4xHaMrvU*Mj%}NxNBF|^ZgX9eRp&C*!FDnoW^E;np7mA5b>#*0`wNuiR}^NI
z6EV(9&(BCEJc$2DRFI&e$Ut!>a%LPA?}VP-T=#r=x&QAUP5tSOStcGc{qOdin^HO|
zGmnJ at 91RT&4cs4iU~h21{-A^V6hZ<IgascA4e}x+ at F2`r;A><3kdP6vYacxnf)Wcq
z5_bIP;p0aSfn!Gmux5{gqu8{E0G=J>6gYO2;0Ab(y8r27_=)4;>Xqtx{Mgas;oykE
zvG60n{{r!>d;#{)*<mM^k2HR)L_f%Z&UTq8p(GzV-AUDfq1#?Vii&8DvV59_ at l!^i
zzQt743>vCL`9W<l%Ad3p+bc6RF?bBs#ro=EI;}8ugsLwutdW58BxDuJigH0=Zf1UV
zI>^mTOG%7Pia(tcAHzNc?fF>vtd4|*@R9D@^U6y<e(}W at ehB$rdFdxX0SAs83XMG-
zm6Q;hm6lSNlg?k(RTVSg#MMxP&x__CXtkjE2U<+Hy<_c`@eT_)UwX&pd+iH-j-`Ib
z=4cblSC&8S52}FOaA(YYe!TI*MB}+J7jZvqel$PUK7l at HPl#KF_}bst=z43jo5?M2
zZ+5 at 8-GdeJ_GTyA^4+a23<E|aeQ_DW4}q_5j(&ZMZn&{0yTfmvAAPhv`t-)q)0 at jA
zs_txz-99^db!BjOq3`@$@A`QA>S){gc*op8Gqa2qhuaurH{R_YZg+Gyn!4N#Emm!_
zMcZntC(h|{7_jj$>@n}1#u{sVl|fT#(3I4a<xAvgO1-Eq$%Xs?tC9^D3o|bxNd%CS
zWAQp;BacU)JPJ-64Gk9xJRmgiK+u7`A%Xit0``XqRv*~E=jEV-d!aozu=mvidtcf6
z%1a0L at 8N3+4m^M?z;K1I;6N!30f$0^*rr(w3kj6W4?V&j;bXocxg;mnkz_bJ+^d|A
zD!ol`Bf<x at 0)Z88QR9;Ea6Vj-`Q-6qCj`9f$Hlt$DJcj?kA(|7_gmrx%HYT5S?;%E
z_5dn}v3%ybt&{`+%452u+0$mO@|deA7;ZHQ=DQ8$ZhbkKDW|^NQ7<5rzov)*;|(<>
zMxZI-yI|f(T}2U*Iz8%0Q-*z_DKCQj6(t2QzqBZ?I6tQ#HwzTzW#we1ok>neNsNz=
zjZTO?eLCtCTN at wL(ZivKLWB43-2?OY at 7oh_U|(o(AS--s at i9@zOL|H|ZboWlaW2j6
z{6|HRn at vl=lZeM)tGU;$A8GUEye2v<v!Ym(Xuq9;x{cAs^<kGXeozHO1BeETBGsv8
zidU)P#`3}8C83Y2OO%`VHmz-(Q2g$8FK4qdx#->PZqE37d!rL0;nPd~pI+=o)dNoV
zAldZQ^-&U4pWRvh{K58<TO04(SbzKa+M`R04=&8z+nK(-IYAiz at -lNxA%CAB|5*D}
zk87gaIo|2OXCLo!jdnUoX%XQ^qVeUMty-iT at E+Z!T6Q|Dn)>Qus4hvK%@rljj4#})
zvVzRw+_bX%Oy>O-37kRslQAsJqC_MvHtGb-2f{x+c~sc#VZnz&0uBWSD4qxG-viil
z_q_5GaB$zN2Y at 91{=KiT4$w+0?tArR)&utMJ-B}_5)pV{AKwuQDkSJ2iYr(_JPg2V
z1AKQ1>fzzA5L6i;lt)YhgtI%Ku7yhfhQo@$sBt!Z9}XWq@(qq0K78cxA)Y!4jsWjd
zM~)m85YLJi_;L8~Aq*ZuofN%b>H`cO%$~`16PWI at OthQE+fCB)5m{R5%_zd5#*!2j
z=_-;|9&1gjrG|3i#)j%9a}5Vf*mM=ln6+pt(8FjXi>}I8Th25FeT_g}RjH=DxU#eW
z{#TR~D*hK0<QC*+XJ at 9RrzR)H$Ab9S(<t`SQ4xqgl8)>n_<TNmq%a?40 at xkU4{Q^p
z08$cSXl!A;58pcxB!{7@%~9{MiBca*JyHH7ye2xVV{Il1p7DG!e%6NED&~*zvpv>`
z+q*sLrc`x%)CvDNXy(eaIDnGOCQ%VwT?~G_!Z$a%pPVB^Gw}3$|2tdVZ*O)z+3Ei5
z^1x at 827Y>N81sg)kjw<5&F$H5-u&RTix<{sH<zZ?=0?}&MlWy7UEi9!vOalbZT#B$
z`0cH!tE;1zmWD1Z4PIOv#MQ;-SsZGe>1!JAa>`7uwbNzr*mP3o*ENyYvI_o7g<t2E
zrjA`-4f89DvP<(bU^w9dfO;n(P9z~WJsBkrNRgK^4Xhvwn}+~6!34;U<|ix}as2R!
zqhXLAwGa7G-99D%3Q8WH!~9o%@*-9zmM1*l`|3+T at t+-e-=3FWefcMQU-e$u5e^86
z5ZJ%>Rm1_nf4(>=4gtY|;9v-QL=XrF4G9Vj7Emj}L4j%ox9%_!A;^4K(cVY+Z at B$D
zt6{RhAp!XlcIZ$Tff4!hou|C7;01t;Ki1B0vyM0?pbVJuv#Cx|6$U0d%)>2)p=Lvm
zvyPI>Zbx00gW at q=H*o5xqJ&`0W-5wnTP(HBmRd^dT}F*XTh0(d#t$khR49LqQ2x5=
zG71v#Qme`e%Zu|%3UUkcvU4)iGt<u~q at Q7mTS9znOzi3C)6tO(@QIF$@Jj&#aN^hz
zY(-QDJA(3taHFD69mi$n8)s){v>|m7Y(V^b=y3E{MafWKqkf>tFyd*T+IghaK(!lg
zFUAi6|J6Z<jCneVdD5N$|1o<wbnF^!3p35vXIrrOIfIpiKHdEo`4pJFf4&ce|754<
zv&)03uJY$MMt^;G@=x!rKl|T5o9u6Gc9<MygVSbebXa>jJ=0 at D%d_K1!P)uI&AH*-
zmGNsEQ<qjocbA6F&G+NvZcX=4qOdgL!R8t3bPQs!wOTry^)1#q`FU1LeIh<mQ*9Z9
zx7AmnSo9h;)<V>KX?~_+K65QpPDh2ulVT%*FGwx|XoQZ5y+_JC)XDI$BcXxVHo*b=
zux-Gemw&S7<sZNN;}>3i`NyxmB=E{hFXC%~7k>EtpS<|PAHVR!mwx<$;QuQxVTxjm
zA{qz<cnSRY1y+y<ANjrfKd^5vU^_Sn_U{WgxE}-s91ILN7#tK36sVvc1`^6<g|J?5
z5C{wj2}Te?LqiaR at 6tQW{}cNBk9c)Rh<YwGG)z4uh#sck|1IwgnqNhD2=d_SlHMZJ
zLkkI@*qGXQ(B-HFQu)_*JGE3PP=VR$&~`Yq#FN|XT8~Yj)ru8b?J!jH9a(f04BM%%
zF2NwzRu${2ODRFFsVGMIS4*Jzi}G_oZdOK4Rz^lzDuDY at 5vNX_JP{Qc0rMkIos5h)
zg%q4TaV#?8q}mJE77+m~9~nJ3N}P?rGQlD;fJ9KKi^$JNB5`J~FK;o|G&NLp3YitH
z0rUt^Wi-~-Fx_bp1rL38Oup3t`0tSVAA_IZr(2mlsC`^r41NrrH#d6-?=YkeJD<@m
zgy=uNGW5mOVMg9 at zy}A at ERA&%c(<E$4fQpIp|mwsz-}>t?heoBK+o*N(AkBFo#n~h
z)v1fC6XzC&w&w=cC%V=ryD;(v23r_g&8e^b&89Awq0^~vGSygx8YzSG4K=025b&hX
z^A&~Jm^XCsR~F?E93wcKot6mgQ)O0&L=Pz>BIiIx6mb=a!yo1&A{q~fNuD@*DEzR9
z)d0L#Klxw&$qSGl8Ur~0(u+Sr=cD<dH===(S5HB5$$TLKEGp%X{#WbpfA5}GUVWK8
z;^jRUMUwoOtk|xQ{{Z|yu>YWfe8>ud00O{4aNr;~a3Cm1$O1ot&GN at ja)|3!^FCsS
zg@#E8!V3r~Pzd1<ga%8fr+hE)z6Nbi$uY70!6qG7B0N-JQfv$$4AxGYrP|+D((A5=
z_JaBLI{F8Nb>YypJ9KoEP*?0URH3Q(zHob)w`r&;#pl&l3i4~KN-4sutt_c5DX1zd
zDlaK0$jKyVlarO6m3~I3{ltWr(@`KgDiY2M+6(4KM4URw3ir{Gr_ at G3lt2UrjvXO%
zKu}11xg<x(65`EK>_jCA#S)~LEw!SQg76gWFjUsDg<;FlN-)=B#k<GM!`WGq)eczx
zIJ}rWc)LV<=-i}#8S>wlYli;}=0fv7+37{?Gv at 2_E5rZ#*@Z72Y)%b!40N at 2v^Z(8
zaas((s1y9JEGvfpjV^nW%P}!BI5R%Hu{6E4G<jilYG-kDXJL4IZg6vklkU4`2buw#
zCpU*0aT%*@y7GpaVgd+;>Y}>xJZw3l2blEOb&CA-Z(`;Z<)qWgsj{48b7YtuwGamQ
zKtyKna3~+n5gB_F5#u0l9FiDX(82v!DFD+2VncfrJNVHLzW4p_{eJ at gMc{|u|DM$R
zKR^o93)B at UAo9kdvWVb0z|@hp&?`PYzxTj?0oWcGa3JvD0f;Ri9tyTAwI3J|pqMYI
z9uUZ0Abwar7|f4+0QX_O)ZX7PTyZ-z><~|c9Xc$*{kISzq~Kc!4h{1P!Z)uBb83ql
z^@Q<@iS6Lt0{X#Kgom;;k>T=%dQ`Lr+P6!)n*MPtpC*&WWvGJrd}XFu0hASCHv$pF
zA+h{*%-gIesxB>{AYZz@`4w0`g}H+KnUFvAOmZRye_RaqPDD&}R2-&{)cmJT9#_g=
znLvm at q^$G7IT9jp><E!GR2g44nG~5fkECcMH9jgiHiCLr%D<_&pg)2Fr26t~Q&k at R
z3+<4EvvBHh at Tc01GaU_N{Z{&{1bi at i&P(M_s1x#I?UN*BDx;`foNL17`RvLFM{obv
zPw$NPwT<+(cec1XT3pRe3utR{xNQv<gBH=Qt|%!jD$rDxJMET{f!^84k?pnlmD$nl
zrHKoxlRJwetCKzJQv~)gc-qkUI4K@$U1NjB-B3;Fm=rnX+?>!s7Xy14<{S|lPU{dg
zu4D<*lW}u$GgGt9B;obMMMt3IiLMY at gzW&c5UOKxOOj)ILvrDw`ppud#-*(Sjp4JG
z at Xyiy8|ME=GGCHky_nZ?gPwmG$bG?Q`Mjuh1T?=ga`*=*@=H}O)V{#Jy*$LK`40I}
z`}{z9_%3J<@q>dU?S=IsmA$a*{UpZ{@^SufXc#!8Sj}Rnf>;#mA%27&3Xup32 at MMN
zLWo0X*t36s{N<HFd!^`?r{tJnu(mo1?@I~qkk17?<Q_u;G#Uk(O&S36fiU~cwTx4+
z>nrIi$3|5Ff2>oCA0j`HpIxA;RD}8k|BLfW3v&x{GGM+UKOQgqN4>{HN5cQ-EFWq7
zNc#s1C`#Ht<T!{3;r4Q)wg8z`IUEyt9B+<dLTanxB9EoUMNm3U4LMyxbPv%G>eA5;
zTuKzT&0L}SeBnR+Xv91*`?qACi}D7 at Pe~6+e+rW4+BmJlOn!=!2>#}+?bmh}7bp7r
zI+`JTYopz4&;p~b)?&o$sReZ!9QwSn;)2 at hids!&S9|ODP~X<-{PxPs?)vQ3!syog
zuu}fZqa8#w3GcMqb<G%Q=9)&6hPbiP`S8E8D2otHfvoFhUptc&i+Mv5kV at Co#8?vd
zvE+mZkAxp44uD^Yf))B!7#n-`k`|P}`~XDE6qHsM^!~y3o(C)6lXw9;U*U%s{6F}y
zV7^!LE86?b9>3*-G?9-X7OjK={_~$EFS$=_2e0lIgcmly;=g=|@h>(4zvfru50F37
z-U$@jfG~#me<=?bFjC7a^)6{Fw7OL0VS?e3*ow at -Az?uw-o at b1Lkb~bhrbP<T*zPi
z`pzV$P5|=nKfgWs?AhClNugp*m1X*}x<!uqG8N?H>M~S14V46ZpuLRwREn at qy$Ji5
z>dLVEAwOYHW&9J9B)wHykX at 9UQC67CSmxsVtnBnuK&(F{F%HDXM8ki-2>2|2_z&$*
zMVvf==EwL!1c(ol2UNyC3}D~K|HZf^j^XEj<ncrBpPWv5LL at D9#hD2dVC&1XsnBM~
zEfe18KBH}o-Y&&|$~&3c!1NL|myhXoOnRh9jIl+3db-2;s at K;>F0D<@kM#}rwzasd
z^i=9<tAWX&tF9;mn#wY4o;pn>H;^CWr at ggtq`zxsY+z}6cw=E~ZDw#|ZV1gUD;Ziv
zp?<rK2#+^zU>2snrLGMAb2d$tF!HksvV_9N!l$5%oH*G)Dp+7X#3!v!o`@g-w1;x9
zy!_Hne*EGKKl;%NKl<She(?PteE<90{0RI|;0NFT9?J^cD~K)NCof{9O9&g at 4~!Y^
zl~v=v`XV`dWVG{}@DA(J@)5=lqNms{$WM%P-(Coh<-c#Qz}`LJ)dTzYBMVsgg5rq5
ze(@u at FKvJ9e+(i?et8>sPzgbZuv`49J1{sTFh~GR9_R-TCHcQuLC?z-?|MjBAP5G}
z{Z?=&^J&S;fM4C8{rfjp{`l at XCy;W!TwO^PDJ?29X)vUQ4O`l&uTXI4D>!3CK`~#&
zJPG&<XRWqOD+<_1xZtS?XN`HYr3G0c)mxZTn47^s^2{^IAT=qDJQuoOUD*Q!gbN^I
zKCm6IDG1A78vhh*ko)G_hXXJ`@t*{-<UjS~;qg%?B90w`|FNfzCPp7mI(__1+$qr|
znwKIb02HJ$Ps7UKN_`0fZRqY~a1Fg4bU!ipg48ENfSGqn(LQsE{_te$uixDG at Wui;
zsmrV57uTkiCI=`sYiqK%H at o!On)<q$%CeH8g1oYlLjJ#|szM2c&17hAaSipfj}LS%
zPY<up4zEoQZp;pzo$gzk>{%FYo9b~B<e?r(82pAxtbH2UFnemta%tzG(ltLbnVMe8
zAn{?TfguUb`<0adCy4`N{t*WzNQf1I at eH+IlJx)n_rDL@;roj(@FOGvaP#9Izo_u)
zD=$k1dbP1)ssE}1mEXByL;(W$fd}_XV8eVXyy at q^T30&}uk=NDyq3RoY2mroy?vhi
z2jtJbef#$A-M4T5e&GfSAqbMpCl3*XN{8wJLBW!@g7yIlfx!m at gZCc{^y5H45ZE6;
zP$^U*<Y15&0l}gF3FOPr{J*|G``bqgkpK6R|9^OQ{U6`odiKjpHN{yRm_ol5B|U)L
zt{1XInHA-!QL9X;kG4FYb47usB$w at 5@;{51bBP2Zz#$ZD0r}Z!B&xE~y!=N55 at Ms3
zAaE0VTJRt81NvEFqJa<!W|+stM6v1f8u(Abi<&67K`krAghcj4>7Xd44L at -t<mA!N
z=o5$Ge|%(kW>OUW)XWVi$x2|b22+(7`Ni=TjKAYl-zG7;m=o?8 at L0rv$GMLB$D6&M
zUZ47>k1ziIz4M>mS-HPGacyn%*7oeZi!0|>CMO3wJDMHXKUh8ntwyias8A1An at P{U
z(9_;L*zFk`=;W14ll|L^V^=q333y&u8o}W`zc9Ex+ee0Lw!ew2T#ws8-o#K<2=gh6
zr2>{>S8N^(9?G9Y4UEYCd&^wIMbwuh5m7t>90UmAK9&VRMHDT at _Wr$6$L`s)2QG1a
z<>i;*6xThkz6!Wk at Wx(b1SUwv;n_x>hc{OxIS=zy_KK7)kS_}emXUlJ&lf_$>jmKt
z>?4>D2=DVUUohVr-sIm3yiTsL^OdC|<NzB-M16#W97F*2?%Tg_|A7Ms1NIXHIvB_e
z%m<3<2L-o75ClPH!Cp!4z>tH1AqND41p);2As5_u*S*gk3_|m(E#R9glbIp^-#l9Q
zr>C3$_WAC=e!lxJAD#Q>kIwz~56?l5s=`bPI4Nc$w~K+Q0O9%8sPK_RK7#qwQz`Ou
zrOrh1KS!h>3%w%1$V~zlOdug at f%~RJ04YdMNlZ?N;hLHhPwS%MIm{=k%R}}BFZq!R
z$R88Mi&GMyhp+ at Fi=`Y|@n4iiM^Z^19)2h&>iD6E at X)x3aFl;mQgl&9JcDJ5GUCc}
z5*d-i+%OD0hTt*lOrFn}%?t#3pl&X-J>Km9n>Wt>`J+pJ`|kNKUt52?J9B$u{K19!
zH?FO{b#v>^h2?WAlf&IDT`dlzfZBVS>uIsH8g)%}Q%AFNu&ZUPuYF>mV`-vqWvYLD
zdSG{D4B5ePAlr3$W#q=$@hdAM7ZwK2%4mO=tDX!6Ef4z20vegiX>-U<C3}TX6Vjp9
zF_OZ_h!fJ;LG2R)#}3Ba_tFQ&DNF at P8)YWQV4w(V`|>`Aj~+c5ew2a%GDzY^<vlT-
z4u^#b91>88SL937;mFz>bydYVIMfO%=SUHjsA>oeq9O%|!Uj^tp~2#hgoTjCJ&JEi
zX)Y1Rpg at 0kUyxtAy_oh&`3sL1&f~Q}_JaZZ55fb;&mJIdSQ5Jce?^!pO6S9K#e79_
zRK38#AZQQU73aBOai3TW;i_;TC{!R22w4a~3PKJk{MEe~j+~am$#?$z{w9Z0{N>Z#
zKR(&~{ab5H5Gu<{V|OMl!PjKdmLUZSy7D}+WtZjvzB?~UuwAntzv92F;m;!T?%xHF
z0!lprf{>k-3^Gy^;WL834P|cto~x1u$e$b^gG7k3ZBfE4Y+&-dlzHO at 3TIGQ2#Wvo
zO`J?TeG>j3I}}7kBK%K^KAxEv1^==CnI0pQe{NE35i?O4oyYLNOvc?X^oh|28$<S+
z3+*3Wo#LR$KYV!U=MOjDzrOh4?X}l0&b at wd;nAg~H?OTfy0Uir{NnlL at wt(%$$|E{
z(VosG8%-#*Sy6J_+vXbU^~{g<EROdsjCSp=PF!A_ytF!YXJ_`|#l^R-tv<fI`0&Eq
zt&Q=ktHaduZ_jkEjkVA8HFml5Y^hS2P at g6W7)WMe at KeMt-*ptWUnKs|@o?0>3<#oH
zgNcd|9)aW{Cq!g~M1OeriIXP<PJk1q#g7Oie}kw<9us2&D!oY2U_x9BNQ{fY|5C=M
zv@=D)FisXmm-02DBaUNg%DPPvcE;%z at l|Tr4ts0ZguEO%L}3r)2grhutguj8GejC!
z+=!sOi0g=uW*`wBHUNk(_`m-EoX7G(^MgHm*{BYP8y+GX0YPYf$#yT*ze93G at 4W{C
zpU0m4fvoQZ2L$#Z8bUh6c5pB#j9ow>DD*J+^=otg at b>EOUS~4-#vk9?_#dBK_``b}
z|M+z0+5dV}l6$7IAcJp*_FGE&m8N1ZP_(b6EwMNYDNsNJAip29t{?@BWgtN*;H^JV
zRVZl)LVl(=mWXIx=9xsU+44s8EXe)^n2)NbodLF^?IFDCYe-Fq;UUp}(wZcFpuOxN
z5-oM;|ELp(PaX+5ekdsV#35n)h^ZRU1!=LRVz5#Y#y`U$<z&b-IoYp>nNBphFp2A@
z_m-Kjcz1p9!&}R5T%5bRHTm|nm4_D>-n_PY_uSmWODp$xIYfJYb8cvHtb1mtV}7)I
zyw5Yx;qLV~sKy`fZCRP<T^jE`JJY{4H-M>gd36k(e|LNO(eB(^SC`(ty7Z2`-dG#C
zCPbibYpQEuuo)|eB%Pzaf+}&gPTXGjPaz+T{8)OFKb<;p9P*>M`5!-UKK$6R<HynH
z$GM4!j659^bNaMEVqy}Amp{q!CnY%<WTdAlq at 790Oiv@#0y5H4NH(S>Cjbhr6w;Ct
z(ozJ7to~mR#kLD%3H^!FzRF}N6qH$t>do))pY|lhf5g_$f5`9kbEW1-5T4ikm_5Rz
zCrT8E<s&q|Fzl6iBXqk^?>yWe0HoTN-1ZXQ$9cv4JqH2-%m+doeBgJzJ3>$>HvjM6
zTxBNtKR(?C|M1S)Kfk~I&mUi)&6XA|PRLT0zuE#&{_vlMT%e?YD|>-oBKQ>rB?v^Y
zRUDh0-75%E9Aqt4x(I7$odINXax+p$-=o#xxh(j{&XKBKYI_z%7n^Jiz&s$WpGs$F
zVhnvT%Itrh|1qbI#6}#2|7r23^3KF$CK3gT^D6(6bVFGNGcB3&$Kckv&W6{w1{uKk
z?Ad3}p8cO^&wl&t*>8UN?$y^WF5ldmT^jAA>*~_#__ at X53(I3G6FuwG{qrN8Qv)6_
z-07YkY#VH+CfPMJ;32Siere?D`UEEq?=B9WpYOl8IB;Wq<lgoKcGSmr*1vdd^PQ^;
z+&?-$&BTVA>m$@Tk9F8cqtNM07=dzGDtYjdPz!8`_&z9qY8t6gBqK;xJR%|@Dk>@_
zCN?1frYFJfl+;xIm!6T4nVFTFmzSGM5mk0hc6LEQesNJ at q4%1Hmkvsc3yNiUmLRQy
zs5#8d%Fo6r%TN(H6_=ox5O7KYVhH#m)Q!3-T_m>Sm`Ei8-m-jIaxV&usZWz-Y?SUG
zxfor_XJOO&Cc=-|FJ0Z|Eguv<%3qNm&O?6Tz<O<XL3JqwA^Ta8#?1b}Q0}E5gzO7Y
zP*jKQ!GiqzzY8T7&+iMrd%XO+$18vT_WGZmZ2eJ!;18oA1o_JZ`IYiV|I^i?z{x29
z(EtbnSNN}lf_7cP*9sgk_Z-qGM^qJw)E|<;1hVtxOaVnZx#=88#F<=Tn1dua6)Z%&
zVYqDS6xI&jE?%J`Km4aTI*p`%d^8Qzm_5-ak1$UFxA*kPBk(^Z=45K at sg#%#sj(+>
zQ%>UoaKbxtP*MI2@?yRvBCs{;`lk<fApGve;@0x?%Jk6c^x*o;;JL+-fBNF~#r2ts
zYtxf`qTgg at unkNPv_byy-e$BtHxqp=W8Ku`yGFa*oH)5L-FIPe=+g2C=W(2y?d4RO
z?WxY|tAn at Jhd8I{*4p5Mt<g6wOn!2E`Quy5pWa#h>cQsyt+9*qy~C|05-Z{`0$l|e
zbNFA7lb)HDOmLV)Albmgg!uTlIP^M7Jw;IdOh!gVUS3{)K|x_5EH5lAEiErEud1xn
zR99=Nt7>aBI&Cd;06 at LAR$Hr~GmhA7O;x#8Q%Rh*N<ma1iYhFwRT6}z$<7d<BTRvV
zCfqb1_-Yig(wMn{bi|W}0IKCs?FiA4qMZs0iW>rVgsiDrp;lAzUzPMI{)^Hc;lu>t
zwh-r0el7|hn_mWV0w6y at OMF!fbtwhPdjE#`2ZO^71bHE)AXI92L3=;;90>Y<L+uM#
zJDfv=!Si3=-Td1(*O(DeRg?*tNddrlNqaBzO*KVoI0GpFV|4*>AzTAwgsZ&CrDGj`
zSyP-1D&-AVhBna23#y8<6_5gM$mVlHIj*WmM;3C at lW6D1`i1k<C`$D%TANYz!qkrv
z&A+Oqixzmre>&pR5~2xvMjkul<Nx8L(<k6R_J2ZDIBgv`zf4cX^JVt6ttOAzba=iy
zqb|gJb9s7oVR~nMVR>eBXJuw<apKbYv<%k_|Mfe&3*-I7aAt-&>9L~Is=L`LTCO_X
zJ<V3SPB>+(-(!dW9I;J_^2%5T^*oS&ZLCe4N;%QKIqspwU}LQL{FLX)T*o6?T`rD3
z``;fvd-k>5X#Vlpvp+ohw-0~+?lwcKCOd6Jl}(&nTvk9s5S4+&XlE*-Qj$_rlFtY|
zpMq|O?NGgpAIbUJni^2A)79&=z+^N?=uJkw88qlE4SJi|Xg3>~iQ%vq30pZWM#h3!
zjar?i0x&2*L0eraYP2dT&=SeY3i>h%vhmc|jQsdU3eF at U0_n-|G%K+w5WYhe at Z+$W
zFxzn72;af~h*Kxn!0=v#<INsGS(+^3!FeIUOOlu9rsRKs^m)Df_iO(DNPbj3mOO-4
z<li3{<|Th%=)M5p-39grga{l|_(mf9qM>e-b at Wdkp63vjfB)h<#WSV3XJCF!NtU3!
zQ26=ccu+Z?ge#{7F@%aH7tz)3gOU+#c`jg*g8~vH0OuvBMiY?x0uq5NkmV7Ho?@EZ
zMSw_MF^ZtQRQPm0GV&r`F<<ToQA~co+6Uyh5>KDvA!A_}3c;+H=k>n|dnU)6V5DS1
zWO!=q3G9D4@;aT-b8ekDvWi(}&whIO>dxxg((J~{{LcE~`Lm0QQ$uV4)Tiw(kKNpy
zzJG4!7jK-O9_bnBVcvqJRSZ&SXtL at VCqj22({(7kXQohZGliN4YOP7;&h$6U^tqX=
zMWHEUMVTx?a}7roe0g*F?)inj_NK|<-ie`}`H7+1m$yH8_raG>U;pgg`#*j9 at YkQd
z@$4_Z;EWrRi4+Y|C_<HNZB=<yd1+xm9%f8QaZzbWaYaQr>b<5$Q&(G~uh$t3dW+d)
zF*P{sR-45HoHmQwVFQg$YqQ(#X>x)Vx4jiK+C38F at 0uJYDpVO3!Ehu%yEI at zDh0ZL
zQ*sn&O(l0(k|&Bw^F;xMK%OYW5PJay7(NjYHj?5$E*nt`8OI}79m)PhDu;wVZ7FO6
z#Gmli2~QEm5(PZ6CQXF;Wwf7NK*ckIL}W&4{$Sy#N>fK at enozz=i$F1|2{AC1^K^C
zd&uu){vK>0- at Sj)e}jfpgAkc7%3<jB<+=4 at K97PJ<6w{=5v)e^(CWpFNt~QWQj9>T
z5EF7_fReLn9~j69)I(%}_%<E^PO%>{+>t}Z2M{Szo-#>)3e;gWAQH&f7RXO{AGW8&
z3;rjZ_VS;hNsN at C)Cc}k^M>0?*e5>f7-?V9Ud)qBPlzD?nG_wKn-a|=E<<@1XMZ$`
zLrjYAEO(;((fq3mGv_u|&TTB8U7DVs7+9Mf*_;=tUVPpsx6Z=<iGj|+uGYTxMyI)+
z3F>xZotU?yr=zx}p{|@VS21kLN(F3vr%T`Il*NH|s_e{+6{4s9+I;)7|MRoWg|X?O
zuJQi%nUQY7r+sa%slm?c=a!$oe&fl5Ywz5@^5)%353Zkk|Fui^w#H~(H0i1dtE&8h
zvA)h&uQlpndwqjZZ?{>TcB_ at jQmdu8(bd}QZfycCADo?@CeYsE29zf$P^tvln?%^Q
zquCCc?F|BshDHXbG}M`O)eUu(0 at _NGwvu{va`y^Uu;7woph{;=NkNK|0{k_(1^D=%
z80+Uhy-UQDPK%(Es9=Qu{O`o^<KYBh5d-1KBMXN`8G}gChElx%`7wAXR0x(~85NvV
zc0NHHZj`F$3e^t;A36|pXup6Egzqqa&%qGI`Txfi{;U0h(YQ5588yWj+OlkDZ>Y#s
z1!K$)2gb at gBPS$k7)w>`(3L7s5yV4gKCn9g<b at G!HFDmv9Jia!Y##-`kIc<CVN&i(
z1e7eOcqyK;f|_x}C?wKA+%x_N@*@ICAeNZF5CLp{#eW8f5%x at ti)8YEwET}I$DCx0
zYIe$LBA*$Fky%MmIVsT`e}MhN+3t+09&gqC_KnqNfBI^DX?AOEX>)a9cWagU{Gskv
z44#$Ae(ayy+cO{B-TK9w7s&;5wz|7KRJZ9ECEB3nSk(#+lrPQCqJ^0<56Y4$QKnFn
zY&bT&tdgpv(3DOJ{0p3m_wVms*_hp49Nm~5!igY8)af?Sw|jnN;`+|g+jlQMx^e#M
z&dToQ(&qBavuFQKhohL>!WbWyl|(aSZfkaTc$(W<8ew}&qpR8N>}YGDxTveW1=_c_
zG`6+4d0BURi$pUyIECK!CeZD1gB~A9UUauO<a87Z1F}3$6OHqBW35BNOv}b|pn{S2
zNaHqvS?RK+$x1v?jEBEQ$ilk?C^z{(@SjvB1zqd{)G at +;8MdNqkpwman~sQbHG)Hj
zj!?7)?Zb|QA3Az0?8vdu!{NbUM}k6+1cn|C3^^PS0 at cF~3c?G6UlAVi9}GTxzzZP=
z`vSw%Ua&VH^xN?53vz?la{#~C%Y4QE`m$_eB~v={xl$yf|NrTF3%|JUZ2$jn`ToA&
zdw2I%)3}g?I1$|4-Cc%Zm;uI^fx%^Pw;%x$h`Vds)RMaEws*JNcJJ=|p6~Y?XxiP&
z<Mh)BB at JO-$Ip44*dQTsE3(FF1=WMRmKDc1aXxfy$q~{=grF=bQT|F`mX-`x-ZYMt
zi0nA#*Bp6G9VnbCb-*c*XhQ@<_lGCNZ-`JZ>EItBBtw|$#Q1}M?7!sA6Vyq>JlKCV
z?WR-!UGUhm<FIrAO#TFU9+1V)LqW&(0e*%bz(4%e41BuYoPB!#;_T$`Xnz;;X~Vr8
zZ4PU*y at m;&o+iskhyC<K=Yz9jZ(f at G>zm7fzfx0NUXssvCuSL1IcAyYU&shKfQpSs
zXCeY<1yU%$A;N|PKL$HxF4tdN|NZovw{KjW8<_5EIy2P`ZyTHJ?X?vRHI$5Wea#jo
zqDOmLX2<%DkMy-S)eShCA-N*UXsa_iECz<F>#fxdHdCFo##E)V8VyE+c-qX>wWccd
z!dj!ZnG90&Hlq-0b;X)Ub|46Xw6<z(ok_>jUZb at d%8V67NOgIEp)?oP6sY77I8sWb
zutCp$O+iLH8%&7WDJEYNdz8T|Du4?>1?0xfL5kAS^6!7v{&RVpB|d?FImOOWhv-i1
z6ly>(j+Vuit=l#UE!etg%eKv{;NP at mJNVzQdE5HU+g{nUO=`i`mp33=)@|JS^2V)L
z{+Bjv0sMUOB`MMiC|`gUC`CXQ{=J|$!f}Yg(Tc!Ws00E-_-T>cM5sH1R_SLU=ZsW?
z(9A+BhAW(c3W{(Lj0q)0_)76(*f=r5FEQMY!DECxg4YS*I2WM~sz9Wk;9pQ(MF;aj
z)rimnDy4w`U-7S00Q?K;ygkf0h*2LnBuRTw0p$Wb54l623WqSsuTX)*dqTVqK`D>%
zr})op5f0 at PC5Lj#3O+;EpD(|8`~1T6*!<MU^l1O|XfGq0-7U7kj`|U2J*}(r$Gh*J
z9=$f#_5StaJxykvrdV5ASe&0lOu}V(=J&#b{2;7|3iYSK%~EYzTo_I8qV!ns&$u`{
zMBHp8#BzQA<R4$W{^-)|snPa}v%Qd+aH at E?rFwDDu{_em&R0jB!P#hTZ?HOB8#>#X
z8tUy|KU_H8-#pyu=xeKUHq~}C*0wj+w$xji?B?b=OQYS?RA=VNYxSbhW@@w<8*Mes
zb*5H_1!=Y$89k~u>k)@p-&kAaFjqF!(wH{Txl;mhkXctuUQbdlsNssl9z6nygpk}+
zmWz?%Y at rBZ?<_TzH3XEMg<>(78bIR)7D{SCD<P05R at 0-QStIjb;-5AAi}elR0H7#S
zI<U(Px=Od5H0`!-ciX}OlX$wV8UGE~fAA0ZH{k+=0RCq&|MJFdLN;xGc_XszB_$iS
zy|iK53+uNCc?DU~2;~}{{iRX?@x-UB-<%U4#9$<x%t|<zf;{^gHfBVV8N+Ba0=*{@
z5rUh5-jmpg;~G36_Iy^rzt9D#4rl?iho}R(u%-pFQc8CiR!<*A0jI$KEdG at XkRi|>
z&<=qf1|Kchze}h9;<49F%{+S_-s^wt0Myx%TX-i?P_WlQt|w6c5A!+Xf5e?*QkgM+
z+RO+zja@(AeD}envy0OU$A at Rf`j=)#jt at DR&p$4TKTQiGZCB>{Ub`^y at bu6Z_ZL3C
zJx2;zQjp7p59=+=IY+U&<9!qrhzRjdiV0)DiIHzsKE)_(x>%QhB2|F at uOIyF<40e;
zb^Xqn$>Y5aN~6ujl8JWXPj4);FJ`OO5dZL1wUq at 7P7u0uwzt+==|ucMyZP*NKg+`7
zy}~>6wL1{zNC&%`sZ)_YJ6q~Ho9$gKbwWEDtVm0psm)<&bC}!e5mQ&Qt*f~fch+8S
zT$7G^W3yGSq~2KWFqTu)qL5|Q6+)!~p$bAqU!I>TBrlcJrZh)r0qd4|X|d>dvRpJ4
z<!jl^q+~}3Bzl)V<idw#3cQm4f`2;8Vw7tiJ58*zk_OPhSiwKwcVmXvZP(WAEVu94
zwqw`U9Xq#d-?@34+or8<8$}4TLu$eHS2iKr)(OCGl>yIY1%52Q0{;sBCHVQ|i@%fg
zTa|XG-zC0Ssgit3pR$eE7-n(?gC!yP%9Ck%AsK`^VLTPREh{8z+_q3Br9}E6+>s%7
zSV<ztBYvv|Xap*-c60#zD-{6z2wPg<AMgtn>lK=7xJ(7jFZr(ufp`kS&;7e4SE^6}
zC6INX1>^#rhxQ<70ZiJ^$V)G<&+E|cK+gkVz8(xeF#jLn%Sp9k6o0r@!zByXKkvDI
zc=y`bg^NowcP}rUUzoVKIDUG1U}3cL)OhEGncmkfOum2f#D}+L|N7S1pWa$3E6Oh|
z%GZ<>Qb?qV&W1~HfDddf6e?j_BVi<RfRn^foKaJfp)W{cnVQ<>opZBq+&ulxowGNW
zCz$-4?yVnes(N&)`)?mVfX1pYGlA;LP<IO|z`R7Q$>8j0Z*T7y7#w_hb?Vmg*wvGx
z%g6iBk(r^+>7mZC-qzvn=8<kRLcHj0s~>bW4s<s5cQkZ0)#53fO;%hOL#nG{?QAf2
zH(6<FAjEY at M}0NYW-~OJwDmO_#9mc`z>aIK$ghE4MU%^k1Wx3X<t7WsNmdJeIVsW5
zm$87UR6t%^U|Q){{8J8Mf(0#Ln*A7sP!BO#A at MKfE=T~_>(~cTu{$H|GzNBqe>bLC
zce}6PfBSFnzhTRc^_%em68x+97g5m0ZR<8|M=<{DHt$%sNr-R+N`yNQqA<^Y`W^V!
zv_SlSq`b0uyQJt3hQnVSjQicQI4uJ2Kt!Yj8vk at DAU`SGCo$YdsesY~6hY|%>VPPB
zz{Q!B3mrjTiu{&x6X54I0pJJu&vLd4 at I&e=OF$5Q0&kv(412aK6<~uK72vgU2e1e8
zWvGddxTmlm0(l$(;1Bin;FylOq{I9(Edb6CaMc$+bJu5QT&_Rgxx94a-2B6<%dcKr
zx_f@^_SxeE>R09m?ktZ!xi<UZ?Gx`^oBGFl7k_^HG&!cWtQZwA=*o+sR!>c2ZJ%Wq
zGUCGQR5D_6#u`l?<W!xu3N}OAYw{moUz#25esJZ~>o=B{r}~(SXfl?znu>*AaD6?|
zWf$}RhN3D>{@agk at u|^%XJ<!S|G>b|$k_LvJ$-V0?#}7)J7=eEEKgoIF}yI|y)f2&
zYO-%(yk};(bD~cy)UZvA&l>A(Q7?Es)aj5RT*F{T-C%oNUu!Kg*ltIN;*@kbYLJe)
zss at v2-l2%FgeftV=LweV;!K317UvQ)QVSSvXRQO)IKj&**AvJEs9J-6QUHpgG|Pf~
zsf#kof)*U5b9d~>A at I*OD^o_;f3}*$B$9l9|6Q=!u*|)CkJ~Qy9Xs8(?bx{${EH9>
z`>%}uzrp{yO)~6}D)0*6|6lO0l;U5WLTi+O`8C<F#f{@E+^t|MgrgM*tp3kPG~lOm
zDkf*5`~bg_)F=UdZb$M|T7V*;0!kMY_!a&+x}?CrdbWlmHC`O at 0HWOZ5I}v#@?-Ns
zKJ`y_7%BB2B)lr^<pmoq2#UaKr4A|tLJ=qs at mml`<LO*S1b7ltarlNaPxvE}6q(lt
zG6KYHCYbIxKn&#m{NbzbKDzet<C~wodE?X9ufBPG at zKTUhvz0=zc~5v-NipYKJ(L)
z^RB<W_QM-zD6>#(EH5jrF;o^8<mF{&u;fA at R9cW-UX-IN%_F01vtv}tIX2N@)o at Mb
z`sw4-BRv-ur!Fo|09t5InEapYFbVj(zCJn9>T<m=U%RL~@nU?Sb7pGd{Q2`I7EVqb
zpW!nf++KL?()63x7w(;(zPUVkX at 2<J?BMC?e*DzZRNu+T-V>wFx#3Rw)Z;zPESHUS
zH!`6;(bF{Qbd2{jj&~ys2uo+<-HyRFTYrnCr_tneRKp|MVW*v~gHx`drVO>Eg{P#p
zve2l>sVd3T=0od2I-I1|`rz?X^SxB9aRHQr=-n{WE}Hm3Vw#beCA1*W*ApT#Kks7<
z7kM7_ID7~mn*#?Ai20;_QVEz=+6R;6zWwfd+0Wmn at c(P@^DF+P at qfntOX&W4{3~~`
z;t`Zytg6QEv|tVP>c#raJ2q@}D^3YRbU87)oLHnhGaBJUQE7T)W^4dwRoNVomsq*4
z>X#hugRoAhR6yZhseq*SSLgPG at t5bxyrKfdwI(Ipasv4Ql<SWjU_XnDm2gGjA1*$1
z{(wq8)gCZU!4nZZUn!7gD~=|?o-IUCHVO7 at Q5t0&$YZ5m#MlybB>W3=N|c@`%+jZz
zU`ysgYR_MUD>lblE9Ah>r=P!l`}+?b{^g^G-#xkY!M!u at +?fC9-l^~3y7-R|ue(0G
z<@)@l%k|NjiH?f$GJ{^HudJvxR2nKP3iETgEJiF;l$%+jE7O(cTMe34dlg2NIA^x6
zp0i5dymNDLdhFcd at zZl-GsDiMsotp`$83+#yPrRM{pR8zFR=gT=7zp{eDS?^XoAfx
z%uby>y?pN6`3n~>^5hFXy?^SBD>L`cPP~3)?(W&i8%yI?7e`Tq^K*k|XZlYc?;}k>
zDVC>tnaw^i+(Gl2Jsr~L<9!fKG>vxF0sfIr`%qgg(%)>B!VX%Ev)<5Qt6UXbt3^u-
z8!?sV62-x0P at 0{{PB&7J9xHa!MEoz7I~4v|@t|c1{+V5&HKy!8GfUtf0>2gfAMt?A
z18P?AfAHV|KA1_}yKmoqM%o!>*>}Kw at BZC;_Pg!gvt!quZR7$wcF7cA=ca9>0766*
zqynKWZoK%N{eRX4yt3I1StmsLh2K8;%HIjdSHhp7E_QL%NFFv4SB((vV$(1J{7Mo-
zy?DVB<ReN2c%e>Aa%GaMeBv-);4!p-cpKOgdvL;xr?_I~cR1Ml5Xk4=6UbNK=i~=T
zE3n661ADADW*nigkI>{r;AkS+fhAap<kN=jX9qi92rmxGC-|pRMzetB5mGa%k=QHV
zwNmj8vZt9)n#s8t4%WnQtpH~S<;$6VX^MaP!1c}BzkK at YKR$o;%hxY{@#@*nA1;6Y
z=J}tVTyTAQ-Szi3T&}N1m}xfE=qj|vn(AtUzPd`UDJ{kel$R9hwWSqhg@*DXdrbvP
z at yrgL7-~B=)pdH5HBuM#)qB^@-?_ZJG(Eg at y#LJc-l66yKL69_Z+!Lm0xw*j-M at Ki
zlz%^c>vf*zPtD%GaplV8i??szLT=r>!6(0XaFSr`@#X0|%VYP>Ok7(WzI<Zv+TzIN
z`Jr<&edlNU&rSF7e?B$db#lykVz`ZOfc_oRdK29aDfOeBcC- at AOQ~i76HnA`({Vdy
zMa<>wV?s1%t1Pf+a}lU)*h)qP1RsT1YZWSxDR%S4W(UX at b6lZfvkCmK<-g2AFgwa9
zDe;ew=TX+WJ&ztfdgL(kOGl0zW{By)K^XmT2H^j|8vb{=@7w9Vcl%EF{|*0`XrdJG
zzl!1Q8 at BFTk8BaLVe2kL{Bre^t6#SE^}l(shJ5~q=ok1G2kf$<2 at I4X0Df}e+=L)?
zL0jRU;Yq;H6CsLFTA=XHY85%A5-KgBK8IMj<q7zyK#C%y6nav?{-{V-#nmTy_=($3
z6fFf~0|_kU9g<uHd!8`BGuTYPqln at KV>U#=k|mpQbOh31CgPMZ3r!$OIGPw80^JbQ
zD at B>Saq-2O2 at KV+q)%E}TajbcWJ3N1|5dv&AFA_f6LkR0_1{liU%u}8>h<s5y7cYi
z^ML=ycP_X-zUKP&uIry~xm at 3Mwm6J6H5FQ|*<=zbP-W0+%F4 at 1Xh<2WbS6WEwWg8^
z%#gE at V*bhTu4{`!Hx~!49dACrH2>zK+t<#Wymes_`+onz?4$FO;!phNHy=MB0r~ag
zFJCiv>U!hOg?ra8-oJhQ-kqCwZ{NIi<Jzt3S3Z6Ey6eL$AKspS=i2OR7pLx at 8NanO
za(!`#8qvAqJq%_us(N~|i|5jKCodqEo9S=D*Ni#sW1Wa?sLg^vH-wC|TL)XsgDs|R
zhoRG6*>2T>d`=@Zz^p6xkp%%!MIOCuXbs?_psAOe44Y*nY_93?VQVgc at hz5H!9Vd2
z_Fs)dkpF^zCilF>PSYVc4UQf at r0~xGANW5klmM4-<e<ml1BX2J?mvkA-zB1;J!Ao>
zz&5wtTX*c<vSZig?Yory-?$Zouizi(g6;KN+`vDwaoes9N~8*?PyVV1QXSMM<&)p#
zCcrO!3dmQoY1>W?*ePKvP#m*M4KGXz$rjTBLePRW<WohbkRtAMOF<DBEerQO6ozoE
zQi31k(|8iSCr{CYm1dv&O~UL0eleLQPo7b$p<<&NSRh{|wnX(Ryoby|!JarrLY-A#
zDQ??XhJ`Mk<zFUmm9QE^6^_|ON|7|~VVt8H12Lv#3*_=kW>qoZ&!hI}w3QDw>ig=n
z-29qsHB7Zu-kE6<DE#q>>#J9PdjH0cPp|y=&PCTp*Ib|7aD9JY4yrwAYHZN!4F*G%
z&2Hyk7PHA}G2;k~)q1$CEH!$&xvH(f+SP0y?rNMJ>R?ms{@HQXXIwvg^wE>Yuiv}&
z!JGF!dgHe1yLX at 5JgGqc-|yd5FU0fbuj!Qi^7G$#d3kyEtw(nrKfH7Q_Kh1?F5bL$
z>CTNScW+!q4ZnVLihlIlSEi{=-9IySduimx;?ULkfeX_;bQaD`I_cRlw!!2QGuZP(
z&5I+g3&X9j%ps)PtX?AHPTNSkWkgaB(TwP8sOqY#Y&MoUs*04r$70jv*OX;pG$0TY
zRK_V$sDPldj}J?a3tJ0;NCDvBilZqeyMg4t#6RS}EAfxC|KOkKN6fEE{4>OQ at Zh0?
zhdd5R{O>>LvG2ek_q_*p??nst?{wd{eb*kT1 at 7Q~Gv&}7yLqt*0q4>MC?tdYP1|>G
z+=lE at A{0SrfzXTpO;DvZ0rpC^Y~NLyreM!y#t<cdA4!$LkFxpdsqhc@!8{Vekyft*
z3i)f`XWy2s6UJ|ptOYzE|A-Wjf9${tQOUlYTUl2pja7_%3ie>0eRi?ZF0Nht$`Y^k
zj~F$F`GhTab_2P6K*22}zy~%_Xmw>BCLuo~u{axg*c5F+x~?dLt8fIg(2O+J6t|j6
z!T(rm^;k>QkVCuJYo6^e+&tbWK=|eTzrB0)m-ny!^TTUDllFdc&Gi-G$9oGL9J1Rh
z^@i#iBQMNmb6uU?YOxRnSxhy?D!sYJP;WKToT38X*Iqw8*nVzy;O?2pN9V at Bdoc6m
z$M3%P=A-u>-}~mn$AAC&=}(`$>iY8o at y9Xw`P+|Q{>nJ0>$5kmpIexEaP!jbYZva^
zxP0~E*(>KyU%zzr-i^yoUcKe|_V(xZ7oJ|5etdD_^$QaZ&Wzq&9=<-`e`T)s(rgcV
zYCO+PIhV%TPK~zC4>ryAIc9ntbNvm|J#`ZQwWICkkv6j;U1SZps}6o?T}LhPPZ`MP
zJ_vNdY-KXYBxx;Sa}_GU>PJ>0TdpC at t3XV|Q;~5=W&<X8{h5~z37{4#^519Uf8rl#
z%~bq at CWwzid=Ll;Em+9{_Wg=~H}`!zcJJM>YwwQT`*?2OwRfwV`<5LDim-c&oBL*7
zyX`^1zmhc-c;*GJ;a8}yV4lxNSwlWAHgDUBuPK-IKPN6ATS`W>AIL|NLOtVUzytV|
z+2^?i`w*}FNU##m{XtSdzK at 5yH*(0G3Cv^rcT$I^AtjK{ppNX-iUt<r`V#rOcWj1s
zm78eX1c8E;3|Apv!5*eQg?Xs1SgBC!Me@>tICemhnU#&mupqio5Q=i-mm$Vn&cJc=
zE<0JcfV@=66E0YwO`2 at pT!u4y>MDktt0voPCflp$do0WS)-!|FyK_`yi1hFN{O;v%
z9-aLD^`)QQT6TR)S at LsdN1LVAW~i#M)&l=Jd!6{GwSs?xv8Jj at ufqi}jnF8Xvu0cX
z)yPwmJ-C2J7pC66Jn8!DXJ3Bw^otMP`tIYm|Nia!u5X|I^D~A2-=d%0o9{nSpL+Z5
zg-gqG^T$UopF4GadEv~-6U&RU%L_9XPcI;E-M!@c`0~fMXWzYc975^)%R_fg4%}Sm
zV_WUYZ1<(<uFLXy;ka{gs7b6F_tnqz*0I7r*Dr{6*~&p6+U;x5!?NCGuRx$)Y`19e
zk1XR at wK)jq5}>tYH=o5E)-#m~-~uEcT`(#@3P1 at oArhhkR=fivp)~;i{({pc$j=*E
zr$9eA{f>Dar4TCcPZlg<AF;<EHW^k^0NP^*_pBzu1VXp~x7|>9a6Ab`z#Rw`*tT;I
zvek{}-mOCRY}>VO8>%6HiAFplyQRwz$|BWa#mGO4c?EmnT%?e3gM7?BtO(frq%cn*
z68SL!hn2wx_Q;yq4?MPa4f#x$`Fgk`z at B9j1mrVy3Gy-cOk;8#L?Qpsp6vqmyS9RS
z4x;Vcy3vhA#jP8*ZF+@^Ie=fB$k{F~Mk(UH)w2kj6zl~d_SVfXf9{f8(C~!vLuNoe
zHd63NgMXM6vH$s*$rAr!j)nFmB>51AQ_v%)YciI!najHE6%6O&0;W4nC%Vn2`fJY(
z+pkVIKDa_2`nl_qt3Nzm`ti->pWZx0<>%hHX`8*Sy2fNQVfO1A<cHmECk?2g9#m1T
z*J(}FdYh%jQEP<i$JuNr3s at ZQxi~+3_sqoW7pMO5^z2ukyi0ih$&*K}zkK$~SMU7t
z>7!NX|FZhR<@(!~y#C;w$F6_=ofp^7%v?Tw;>6U*sky27>G9)ZLzANeV}m_Q^T(Ix
zr%ug|- at Cl@^BW7F-I at L1#`N2lCmx*{zPB`Zd$IrKeDC!WJy&PDFVA#cns%O at Xj>d?
zSQu!SA8^dTvfgcjXnLa4GTLgS6NmJ|xJ$LxQif${Gt-_Z#Y)&Ja-lV at E>4F!nDu<B
z2drnJ0?^tE6%h5$6&Jub5QNg;pF$9$AYp;N(3*)O4go&kpErp01@;$?9wG84@;QJ9
z0RAcj!Ue1qf__y2_k9FHDi(6X1+01j at V|YRP=_76_iyKu?gw_b^I}DmBA^%2Q>^$4
zT*ki@@{1L5+YR_hx>*KiD+)=C at CNw^MM5Ml2(y1M)O&xZH1*-W2Z4Ry(Y*+x#R~S%
zB3~H%17h|DfqsW2ECebB#xfCwe4-urNfh#dJv{ReRKmiF7g$3+Yy)DqTCP{KObYDT
zr{;yEJ>14f6}5$sK!3mw(^`B?1eAm6$#L1K33*U4WG0v7GNKGCzG&am%A}!V(&P}+
zLb-#Z at 2u7I*tKkCO?4O-`)W`2S#Qm at U72vavE2R5!v)vh-*kO)(e*85&&RIMZgx96
z%oZ!)$Lu>Cj;5xj=B6gQ%|;enQ*F>`HI)_R#6NbcvCdM{TyJ3-p{K<@JL0^&Fp3Mf
zcV_&fJM$#ifBoi at PoBK`<5%ywe*WTrzI?;=-D|%h|Cv{B-n;VE=O6$4<A1yU@$s$m
z^I|q*VrY7NXmX^VA??w at p26Nu2KI(}+NZ|`PM?^(cxswr(l-z0KD|Bj&ZV)(=SCi#
z9=g5Qdv(@%dAjq`@phhEfj>Lmx-{H4*K6ng?@V{?WT$zugY`7SAkwJst=Bo_kEPAT
zS*S9h3+7UXfm><$g4|oG0HjZBJdp?x1(68L5-5XPijP##+R(^`*@>}0cE_S1It$^N
zgFh?Au-SXFzXQLebOB&rxc~}5Xu_HbkOklfL at pp=p##6FfOH3LtL^}G;58~BUkDWt
zB7P|Zy;zZ5`-qf;?4YJ3(N0?ZjF4ro$#%Eh3idGp9!es84+8t>0FP*YXhVc3<O6=J
zy)^i{St{|8)}94hY`zM0u=x`CTlcwb2KKwRZ*<$T9)XQV!5-v8PO^Q|D{d0`o7Zz9
z=cO$h*Krw2-im_KpDR(~J_y7DXn~;7*svZ-jqT!!0nF#yX{Pvi9SijL<yb&eIE#A`
z;2$>WjO6%&tW;XD#W`uETz?aH-)P^npOVfvv8}SOp+=mOz{>Id_S9*In)H+H#`#|B
z$^P0)<BfMuv_F_{d;4tfr*{{A{@|AD(;MHtaqi5*l*weOuBjp5X%OIV?CI`mZfbPY
z+bw3JXb0%DRh1Rke>sO)MGC+K4s!?-eXZx_hVdP at mc|~Q9s9?-7k>Hv^B=x=@5is+
zcm3rPvS8OYkDo#PZ(crq^U<Hb{pzQ`{P~mDE-y|FOpo at _7k0KacC|HiceM06TVWGr
zOth=D0hyZ^T$~=6pBy|tKkoXU`yX8!fBVA7Yi9=3Wtm&^U00^t&yTk(4>!PK#G#p!
z1NCz~we%pk0xXiC*6Pugs=oS)-a4(bwv4k-t;S-G12)$bvBJ|_Q;Zf+G&7ZDYK0eo
z>n~wV1t<iGaR}K6BMVN7f!s1ACR|YbMTW3b%rzgs-~eB)nFRQGqXMuSLu=0>8!P&h
zLM8Zx4y>xc0m?xt9p1bD(4PGV-S-_t5eSEN?K!Yhq{bp5+9_X4b=WUoA8>O=_)kJs
zbwPR!<vT<Kh2x;PKxOGSLYBQI8BxCR!GaiS&Dvw|k#L`b2+LDQz|lQCeLZ#~3i&G9
zIU=n+YlaAvBT7I%t0-<;UV(>U+s2n6B-y&*WrXtzL_3_0QplHAb;P+Sc@|2XNP~_0
zS>&rb2(SmRJjVhBjTE*40|WfRLV~!L0qa_9RCrQ+bXsC8a|lE}1z9P~u>*cofaNSM
zq;L$Kn?ZJcA?G9zqFnIbWh>_$A8)Oi?J_U+S<epF-I#89xY+U5neMmG^?z{p)UC5K
zXHJZFwl$kgMrxjp`ntvjM`wFmZ%<cyYcnI7HmjKle7&xmv3%(LnM`i5n;F7vsW*2t
zT3MoDR^i&I at mDX+-d!I3ShxV!51+qFg#Y8`@3?;W!1Xn4g at 5_@`!{^*%9;7M9>4nG
z`|tAl^5Xb-Upw5n{avlpU^`nI8|$oXP4%!zw>8?8Fu6T7(tCWQx4*NA8Z0BDq%j{{
z8hrh9 at 9U@gUpw7 at ccJUn3FpO$=2L at pC;RP-eKsy=&p6FwKof1%!%h03#>&CQ%7F%5
zzoVktrr|8CQUs+14OIm;T`m{HjiMr&Oi_rUDCJOUL8t(Zfa78bQS6BM5(Tjn!Axvi
zWC&wXxB#IALH at yk5WRX62yx%R*T)+bKneJedLYW7B*F&{0{%n4Q-MAE4(<`UfKw3a
zfEMf$t^o(ZMPcN??tO=Zto%}a@*rOzRR*m=HSiZgL_$r8byXDdskjQ+<qq<(_JAK*
zGxZ@}`$9Yga|puzRKSrvAYWPgBYU?iIkbE0{+*j)8rijV{mw1OD~N#o76E%?>&BNi
zz4D?$KCnk#e*RC~(BY&M=c3g0G<70P9g149`SP%-ItaqfD66BaPEbbXhZhv!&z(mo
z2P4Bm;2unfjbaFgCDxpDvB&po at Xz>ePBKSQIDuy_&!w%y><#%{hqb)RrtP+sWAw&b
zs}=sw4B0P_H{6_VemLLu!KMB;&JNx at 4W`-~>uP~|qoc0TVMiCb7|!W&c6GG2x9|yT
zwZ5WKTgGOJxw?`G{CZ0@@xL6!v;e}H!FD>c_s<=Fe0k>S^;y at 4mw*1|gMa+_qrZOk
z*55vR<DXx>;rjmHsKDQU`3cxxyL|rA#S3q}A$-L2U`KyvV|QCagUw8c1^(^gS<4HU
zbz2;^7DsJgXEV~-T-VdyP;WNW=t>!=VBjA<qK9Y4UBBGHuRT2JyuaY&(BAD69hWAW
zmIiF({?i>b$J?ui8Y=qi8VbTJtZ@*t%~;q{Bd+8$8uA_byt>L<j%Gr7&)sB5?>Y1X
zVQERGpnHX?ly;a at 0d9?ju(qtCAl4#K0WMonmxv4v3=P5&_(Al|iHG1of6P~azptOK
zuP4kb$Bwbf&p!W=qsI;(If^ep1%xgfI7BQY-GRs6140G%!gF)*Fv1H&cn9Gi4!R5N
z5F&mlKf@=bh&bwZBD{%kC_;9UWlP!RzW3KS$LBz}5B1Cg0A2~h^N@!iK8JQAB(@+Q
zQ-5$bX{_K_Q<(o1`O at HTe&t03<ZpQCx%DqSCt&}=pE$Ar@)3DG?T=iQ;_?EgcGM+P
zXvDT{Rsqk-DIECyppFsLAMU%c{FsiQz<{vO;PBAk$nemZ$Z*ADkeV2q#afnF7zF=G
zME*sx_yhPWseG1XF<s0pm8P1KrkY~xe|KGlvsTmZ(2cejraMInup~kt$Mvbk*H1a0
zp6mJQ_Bf@*seuj*Y_r4OSZ~Ad_Bz{;p3b)Z?hY(4tmaiZ4b5M642^m%{V$9^Er8A@
z8}Sbu(ahnTp6b22I7}7j)pO(DzP1dQfB580Is)H3z4yy!uhDMcGr#+I?>%Amhx at xP
zUO0dG^5t*7`ts(f5&nlJy at o%JKh9jOci7B;zu95q1-f9jRMUWKuD7zjR%fa1YIU$*
zY^f6aFVz(#dQG8TQ&3q}!2TDjG!APOyUb+eu3zrLZ*%i_!^s}wLN{VM-ewqStl$VZ
z>d<Q|<3P4hgz5r$F(;eTIW}#!r96vRh)yEZ-*6V80yKq52bhbdDL^a)=_^+z*&T-H
zl@;c=DDL|R72vEJ<AS7Y*se7d2=Mpw_d^$8BqB-ng4p6Hp25?L=aHkHhmRgR<UyN^
zDY~Qk4;?<>apb_EBfQuzwP2sr0u*7-exVnuZeqn#D1Y(Hle^Ks3LUpKVE_Y(4TKnT
zMI!y^-qOI@$Ig^OzUKiqPr)L)%lqIi*2x9(1-sw|<XPCOPzRg8`4!FuzMzl~_z`tp
zMB at LC&;RK^IVptzeomypRL=ntzz<{O+F3MWeuypsKYOB#jAQxz{d at xh{DXr6SOzET
ziHnJhize*nh*AW`KPy$NZ?iKiEB`5M=2H0t{3O4|^4wZo0g+F$N!WktKV5chZ+*pJ
zLnZOgR7VYF at XS!%`H{NIWA(RZn%}?J|M~Tyx6ch+J4xKpNYuevN^fUNe^*;iM>8_g
z-__ODh&8sEs|*#TmF2|-Z3%d5vKy)Y!*)yl3*jx}my2UgDC2IN9Da0e;;l;)uJ7-B
z{q95Z->;wC`S!^z*Ov<a|07i3i<OEfb3dPc^B4ZCp`oFfx%qP!F8$?)@8HfgR*E%V
zb`XjSaxFCmG7gKeioCnlRE_sRYV=yTrm4X~y6dQ|v6~GhLpck- at RXJnX0yAgDavJm
zQ;ceey<iRFd=Nyy6p at vgk&%&}nJNCo`uyn$=cN%V_Yixy3}xduaxsSjxfr6ffTLHO
z(c$z17vCri=?l{chnSJz?gQ7R<V|5t+=gc+ajJ$Z%#n0tpu3Na2!UcHM%?-d<kk<0
zfC``pLDCll1_lJ6184&G%YA(nzl*1E3KUPhj)|xDQBUt9$Gkj_96JOh at ZqBeJ%p at k
z#4}1ER0E9={(=lb2oco(A`1CD_w3!T>YS81Rby9H`1e!fM1cLV{cgy?-CK}-ZkrJI
zZETuvP~knWm&ku<>johpA5pL;)IlWp|5L%9r at EU4hc@6R{t at 7ptg0lrk}GdL#IEAr
z(}wjBRx&hB-9TA>jDJXQU~E)GY;;6ibR@=~$e*;AZNx0GwJj?Ds`CXo14|s7eHZxG
z<PiLm{L<oVHJ7!TOR4`$<6kw_Vwh~JrUbe?XgfP(yF6ZhYr6T#xt@<N5B&0Y?%f-+
z#2(J(I%iA$a8LVyv!&nJ!jAA at cN@=EM=jNUn at MjF>*OUMt-)H|WUJ|DFb}lXgMWrF
zCwm(iNVq)L_uveBloQ{-cIqGBJo)*{x4(Pu{?~8c{NX9hwGUk`s-54y|L~G>1P#q?
z=Wo3>Gd|GP-r3bRG&Q^M;5EXeFUtxti*hp{Fk$EpG84v7Nj(U_MEBWPWicA6bYl6}
zYSf#mD$G?CwMIQpgw0Ksh`B^ol$QzZNqI?uq=P7CelI601L6qqpPG^a_)}6+Qq$7X
z)6=uFb8>TYONxs)b1>7c?=%&3TT6r%=yPGTu#{y8N1(|vm1aQOML2{C6m$1MoI4b^
z$qK~9H|}1=Diy#NaP*4OG_*pLsZj*({zONFMuY~F#GwcTw7jzzH{}jc0i_Q<1V~=q
zUfw>Q-acMFzC1m>e9!{q at KH~+U{w)d02Hp_;HqBWGQ?+;zo5S?h2qlhgw`9v80y}A
z`vvS_$dsj?NPiYaJSg%=*zY*HZ->Voh}5<z*zeu33FHg#3)rvQv3Z?>{R;Tk{SNv6
z$uTuBkEj;{{PJQZ=Q6p%1Nfm1Ch`~H-v~1d;D1GdA9g=Bg-Dc$`T5Dnus={TjVt`i
zny0k<*>HEjT>xu=z<&Z|PnP&3{zc~({MT0%QTfF9w_8Q<)929j*H?@*8%CS;vrf}O
zkA?W>^g!)}(YotX4G-p9KfOBm*9VhNE)3l|J;BP!P**b?L0m6lQDv~Jh4m|n{Cypb
zt at UElQ0$fKHAY>jwW=I?hh|$9n<fn2Gl9$!{lah?dzA1<JUlZD+Z8hmpTBkci??r4
z+xh(UOEM_>@x6Oz0Y8gc87T>tx~75SOQx#I(sG@>slBadXyMGIhp)Y%Dab(6xh%j<
z8Ccc}^Kyy`@+iMjg4NT5sL-Gb)p{*nK*eJ=Qxzi_cmZoQx0y=Ii}OngvdfBcOAB(q
zKXFt^VP1Z2RzV(o5*cZ!DLGI}q~irLvTz9EBcr&eh)?F{<?v-j3dlu?-L)kx)%l!G
zvuZMG%f&IlT5UE3Qf_O?<28wl8glxFWf``H*_wpKLXt>CbN3KhA$$RMKT{K9xc-JB
zutACzKt_im at V4UFr91G)9Y9_uokD>67rb_G+j+y<$Z1fi4#G8f;Sq?DWSE35tVT*o
zFIKffgimWiTJdj$bmNc*#IRs~HPzj(iaaaGci(nk*A`%p?Afsi%q!S~{2iNCz`td~
zOIs*ou73%$|MK&HL|%ISk1woZ9^`XO5ae?)5aHmI0za(s at CgHcbqaP3{3N`@{E!8x
zgcsva at Wamsk4el=!6z;{oU&(1LUd+IJdqFh&(BDr>|elD#H=I at hoOrySl^J9pB%F`
zx85M|FN6Owz(3HSC- at m@(u??~y_)*ZsXi-R;Pb;a;-9;-%^zLv|LVrjKi-;u_59 at Q
zaOdnuH at sLgqdhYt-P648Ygem?@WnZsY_L7sYP6=xQd at O-U5(aZs_1F94t3OV<Y;D~
znem&`6CE($-ags?Xn6pfKfH31MVnWzEIhrl{N`n<_kX=~YWm}QOXp6`78c~$8(XL5
zPe(>X6qJ-#n(AyV-K{+%b4wSiN^=rpA^;2=hM*-rE(XgD5emPhq^OW#RK~NRgJ3s@
z=!lU#Nf}XE0}G0_1kr0t at B*yx!vdu6Us{xxo0S1ITuM?xQbIgzLQuv*pG6pyoFrc4
z=D at j<%Ab<QAC#Yi2hkR!8S>&d8p}OUM`aF<z at o{hF5(hs21!A6NxF_}n|aCHTo#K1
z;vRR3@&&vvC;|qG?qo(X$FO2h1lWxzT*pL^#|d{pLMLh(;h{JMlp#1sP&ft$@tThy
zKF|fU0G3CX9=-7h!X2m>NrXu&`NCn61uh94^MC{uIlLl#@^?bT=~;;jJ_bD?VGm(H
zgb8ql$UJw)A@^;RclPYqC}jIaiacO`=hpSxH?2by=H>In%@FiT*em2Ko4<BLQz3ut
zdNL=H0lzBvDDcA-zh?O%h5`Jv%e}q5B=~)(7=V8a#Tx!8_^;w$L_VawAfK`)Tie>g
z46(;roXOZ5Z7(uk##$Pxi|B09`R%I*|1h)Z5#pb at F4JPKWqF|X^k6OIw>OVB-J5NG
zbEy*&JlA_CKfE!0Vx&VH?dor1-)do^Z*H^)k1){Lfbe3lvw at XE_<R7r!>of2m(^Of
z3kTY2VUS=BQ{aERojccp{C2j}_1VQMOUKX8k6t-B@!HkJ3o|`v#KqH#gjl0a>Xxp%
z*Dpds5}%NmTUb`4rLWLrZ|xgDahB^F5g~!JJn(~}0uUCOo}QMU$472nZjO}f(&9n{
zY82c-g{A~Y0MtoO5cpdFKjc at svO<2zk%HW;G!7PUts|8?m9QhGCWCfd0q!6 at EftTD
znVy!0QY0nhWTituBn~{KCzD|j`B+O+xEsz at Xu=^J0mpEw3ONZX908XQ$&1MgDhg5|
z1f%m#|D7o;B2ow?=u1+a&db1AC%`zDmc%9K7|It^@Pti^i6pWmxr3xMIx-?EB0Mqz
z64Q{-kl<&vK&A>p3w(W*B0!8M6hSxzp$Ny6kUmpT`d4A}6zbGxg<%YWAEuX?WP>fi
z?=avOF~6$t$W&KU^(k*E*sJp9mh}SjN;bUwJg|T1IUx%9JUOE&56J%C=j7dRz>nEq
zyAQqwev$UBggqkiSKwC at gMdHK-%kl|J at _Yd<h+&ue|)qE`%~hxQ{(x07Ra)XMuh!D
zKIzKxo65x%(OO*|_$Tsb^0V8nrR=HjFN6Oo at X!3iQor@|fc28hf1yBs{bV~lkUu^c
z`}Y0}0sJUSRede&p|gQIJ=DRbA?+>rta at 8*tk$w%%Lzze-vYaW6;fP1TVUM{M(!LP
z?`>cX^W;d&;!xwsLC4wA#?Nn#FHQ|k4s at It>$$o##hBbz4^KV3e`m0_i_nE!o`bL%
z>8S}x$vK6kMcOJ&Rjs+f**894lAX*@Spe_3k2n8d3?m~Wlc7Ca`A8>+&CbpuVj;4J
z0*<?rWVn^YIR&}Uz9}IJ0{>(I7;{(<(~}c2Qj^$Xi;s;;PK*cYxC6l#nx4vw)Z|2z
zA}Jvb0=k5_Xuep&H5waUoR!3RP!0&TR*S>XNUbKrEK=iCl^rua2dO*j11u5Luu4|S
zPJKG%I5m_dT9dhH_-pFbByM<c-b&i{{Qr~UqVepcc;t67(Tj|WiHePmii$)RQ2LP2
zP)JW#)PcNN<jhhLNEW;>m*fjV5qS9c`1n4f4oBe%R^-^febRyuA97s(V5rYQMmJ%L
zRTZ8Cu*mLWdSMenz`tGA^9lQDW~svdN`({fOXO41k>LLi0RM;o_kaHL|NS3MCj)zg
zn1`d`n0<uvI;#aw>YTp;KLsChUUo%Q&P&)&pBIsJGk?f1!9O6ubu#Lfo)iQA;VUEO
zRRzzr$cKRk!hXvB){5LZeF1G>MqCvB0Y8nN;ik$}{2K{=&dB_i_~-g$!|mzD2XoC&
z&p7|~VEk{d&0e1EWu1y*rnp-ww`(VQ`DM#cXMKO0owb+_2VCgY?R6}b*FgIZy;Zy2
z(9>vy-l4zAIMiyMAAs<`ey-PcYM}1bQ(bgy=~%Tl+9n6P7N-VghdVI)=T0xRH8*f6
zI5jB&!<(3xl#-s6S6r^GuGL!{b0^O--O4VBp9DYeIB#x1U{F+a44#6l6-iA^RjQDa
zon4SGf+E%v%1U5CEF^j%aV{yyAq4>Z>@MeKrgEVbuwhKFx~%g<jhmL7s8j&tC&tHO
zfs+&C at D2$0PmGI>jSNeSjesLGBZ>QN at vtIS7bH+7LJ_zpE3ZXoks3T35ivo>*dbP^
zrYxH-JQWEh(n$>jr%*-$WjYL(Fke|IG;SbP%1%on&Eb3FtQ3DD%^mrSmRb-Q6CEj>
zLU@=|1;KSqq(r753P>_%#w at 5p66ogxB_NyjrupnCs8iL4sIvacM~L at 9HMa?8tcUwH
z0Kb11EXrH<@7zMnziZnDFpn_3z?10()z4COo)@3{1M>VI1?-i8{9nQUhyMWi3j7 at 6
zL at 4{v<P}%%*RPY~4WimFh8$$6pIvDh<X*>)O0zG(Pu~Rm(?+CjCcrP}+=wB07qV01
zh${IpVpu46s+^a|2g^_7V=iaxL6rTOc>w?Pd>Q+}{tvF;UnIYCPJ#cWehb0R`JvkD
zla5=*8}83GesH1t`#Zy~CkuB at 4T@XU-Hn_vLex^ZBL9c~pVe|_gAodJxS#=lZ?jo)
zMC;mZmCiatx1)+3lb(A0NUM>-o4IaWjALSCz}enR1FOBMex%Pi)ZNBW;D_fX&MqzB
z1vnN=9Fmlj1f+}0DoV5lldZ8lKi$t8u6|EUodUmq0Kss8ub+QZbZks)d}4A68pChN
z$jHpd%*@H5fJ5GzLwZX|lM8*=d1#;0sFfwhrzFJiOpcGHdPevS3py%5F<GiW0{L}X
zN}?bgmC>fGGe;7T at CD#MIy{)$&D3*9X$2`(Vg!6>b>(S&wvvX*EKa41Yw21xjIy|p
zu4+UwHON2<*r^d7xhxy+Tv3pY6A?<38pqow+(DLb2T}`?GE*pMBnh4|sS9{0G?d(*
zBZGWDXeOuD2#q2{$`C5N0to_I5Evk`2AMdlDFvMc;UPGFAoM|eczFqBSkng@(FoDL
z5;48wzKzi}Sj3e`%!_EB_(u)%sBD)32G!Mi at xT7ChI|Y@!qIR}DkBQ{GUgG;SKwbM
z_{*9n!M_4O#UFBBC}LO_1^nJ#$Eb`cVaQE_KY#!@iSzN&_yd04f}GSiWkv`O#Hhch
zc|yV|8ori_JiD~~6g<VigI!D6ld&HvKj42v*nd6XM@~3vmijCgM(h_y?bjyiZ%#Sx
z%``qa-TC2pr|Z+ at drJePvCt-TH=5XO>}|Gi{G!RCg9yE&4*qi;;BU6-06&|*()jCP
zb!&kyy;jFAEluanT5V6gZm`k7qz!@A&_G{%TWfut&0cF2o#lF4eXXg^Qq^RuzJ79;
z=!m$5stnagZH4aS>?8<bibk}JsE_bLtvnzwI3&zJfQm^-NO)vSTtZ?p(9c5Bk<6@&
z%&g3;EW#nmIK=Z<bpWHt|4BB1F_)Kls`QhHOQ=9}1jZIcz|<3ggET^Mr2-_RL?ir0
z{4c+8RRtm_@@FJ+^eqBDd~H at tvpx&Ti)KR(x0T5YY~`7jvUCz;izX9AV0HpUuxN8o
z1WeO2T98P}2AL{O9A8kBlS(OrECY|gG#6SR2q)8%sf<a at jm0mZ2z-;oY;^xohv-Q7
z-<2YSga)tV&Z~+*DM{!B4g$R(c}5MCCJ1Hl@<fC>Agp4^ab=j3*M>IN2G{^U$lsxa
zLA8zR0RM({FTC=iXlwy~5#;>gKmPb1{}<sP_$u;OOZ^i0s^G6Krg2Ygt=mQLPuZWr
zHctF-^_p2(#@iSa5iJrSeq3judq^9RHVQQm$<Zy0e`azF*npZ0<1ZL!NwtbH2sK$;
zqUNJ4KQ&K<e`Y?Jd7$hM{)Z&~C)=u~JF0(!|B)5^-<@fAXSsu$IId5Z?w{&sZ5+&t
z*v4)E>X>?jqX3}YTv1q4o at db&auL8$qiHZ|TC5e2DsT$`IuVPO)T4+1ti at E?SY60B
zK!bI7c(~rtV6oP+P*zi8WS^2%GMFVQ%8DgRb0H&q+M=wo{B)2&m<LdqbfW7=g&hCR
zX$wgIL&GSbM}<d5M_~WslVai%W8xB%(=wCOGE&kqQqwci(m6$(MuLDI39j^L;2#2#
z!$X7UK#6)wSP&IR>_7OA4iDic%xnG=AScfX58(xHBHi|-=D=&>5dM>RBUV%(G>u|r
zd<3O_&eminML;i5l^@?)mD666*QC!uSTePhXP^bR1KBdjq<zd<!Ed!7lLUeHj!8x8
zrGjxWGchkcp)@a at Oc^c6%S_JCOu-kR3;2c1)WnoTD!@VuRDgscpap!BC<1>;L<UIw
zjDkags31uZHB}+%m;5Br1d&Ot3SkdyX~^NdZi+<~F8y6%fK7~U?%2FuggvXm3>$+D
z>t6gXmFiO7ME>v}{~sa>KC09y`&<}&s{IQ2ggpxURDJ+IDS)c{Q27 at l{X2JX<dG?H
zz>g^8uYsRQD%>tHFx2#vk!h&_eoAT>e<-9 at jeoi{{sR9T)g|U<+8?GtA|EV20}sG&
zfa0g4qSvmW#XsJnpK3Fl=&C`^4Ax#4v0WXnyDsd1{e!utcb3~Z1?&23>EZGKJRuyp
zFlzH5jH>0-OLZBvIdG;SG#W_jc<&HvWuah^(ihnb#U^c at r6Rw&l+iol-Yl_KWhh{f
z#%U?(?d_w<Wv;bX)tE}kG-aA{ovyOFy1GJJ4zq+-Q=*9aVOhi`!?MMji<jp;#m^Ju
z67>cK1&2pQg at Ve6=<ujm96)SBaul~Ol2YT7Qji2G at d-(>aq%%Ru~AV`TnZp&1`<FT
zO#<F10$vqiK9l(zX7yog;FlpmBF{n*ctOn}G#J2(Dn0KAzvLZJT7VaT0g at X5P(wri
zOV2ke0ST+fjjzm!>9Z9#8?xJ~QH1RJ3ZVsfgnC_0gCXBmA%-Z>0uEoA7$_>uT#1WT
zwE#YCWz(2rVUGi+Kxm}mB0K`RAaaD1c&bJ!O(2Wmr=*<Msv_X3LR2+XmQ_V%Rq6ux
zXZk{PQSk;sq$2pySU9{#aR#!k!sT>MXc6`(VNhR9EHk%>0RD}yytolG%dVEF^GM_?
z at UIp5DR=_=HSlv8lWvy~c`Fm}6aN$ZBU`s@!uZ3I1pe8TV_Y1O0ly#b3&=;X{NSH?
z651#kNur+uFL!R5F#i0w81lq`R2HUF at Dv4~iae^FtU3zgZz{p^_tsS~(AZ-yXYF^;
zQ87 at jg_eJ`NykkJz<;vGbav3n2_%XCx?5BA57+Sj#qzb;&L(p?b{>*U7 at Oe<RLD1!
zX7fj9CPs4U7$KA;0E0r%q|GP36`EL<P4y2I;Jae=l1z{{y}mLRF1W_lPK(`Pvf7JF
z%PXsDbowfLT|I-=RdTJqq`0uSFfR)$o{}Up(8Pqe7*rsF)GsoE@<$NW@!*h%D13jc
zcuM@^1>zE+rA~=UNEVWqOk5NZMaCE%5fRCi7>>kHLLpWL184yQX at EJ<&xf)S0{9Wu
zRZs`=EERL|E|7QN0tk>4{+Z+i|M(7^vKZ_Ub}5t_0kA_u5XvAB^uKW9R~IJLlN8hz
zHRv+hszsTozCv&gpasyvGfIIwV3fjC#+D^}c_>1*sa(`6 at CBrA7!zg}Szp4lQ`V-q
zffnS7Dz}*LRl0y*AT*+gN(GgS2B$y~Rm{V1(MF^*GGGfALy~}BsxU53yhiYYL`vd^
zfJcyFwztO~7II;c75vG2cfu>Ud;2Cv^buB66!O_pVOIrVVvSPI3(x%#kW=BL&Z)}#
zJpW4y$XBP3Uw-j9CC`GNhObNk1pYDpEOSYU>^*P=ur7!2c7Xgf at MC8fCKUG|V#CuC
z$h at Ml{6s!@UW|WHRw4v_APtydY%wOBlWVLlqTAIXrhQ6<<+qnJ*4tHEhUEwUgAOfm
z$XJtZvZZpmU4OFIbh_UR{;vu9ukhc9{pTjQ>x*UTHoPNn!)gmM$_vs_feO)F&ZO3q
z8W)bh2g@@%IR^L5TZTIj<!(tHt6T%$8^v%Y1gHm6A-8E#o7<fAO>I_tgSD=qvdU<+
z*Q@<9HjANHsVJwNRU}f^yc|Mzw1CPC1rXc-|4{!63&Wg+Qv8XCj3)Ud{RQw8j1p7Q
zh<}n&Gh!2xqGJ=HW8=d`j1&d-Wyr+u3!{FBAHnpA!a{(r7)zGOhpUYj{P0l$e*SWG
z%Nt!lLBz2<X_0Uo=mo?4JVm4w8YFKgh4Ah$>cg~yU`kKmHfUr{Qn)57wnk_{Dq7H@
z&yre at tF%DPQ4kc79VjiZ;tn)fW?3ns*UT{yk~p$C$v&Ebe-~ubvbjl`K*g_6Y61B&
znF3lMDyYeE^n*z1(FLL-D&$ZUqX-lXQC<Y_3%`c)@_JP-_$9hPZUrF;EV2kJ;_&K=
z<-~0p5h9=MGT<lXXHi86mx@<Ldj9ao|NMUxHrFbg>V+usGxqZ=^5p?>W%<{ydlA9-
zGxNhr7hAm?*#!R(1w$9MYK1)6p+hh)3jFbrA&CS(!qrBtfj>Vz4u+HBtVFtvhLTKC
z?bPOC{E0LGf3uNQ_Y$@_*l7a!Sbi1xVEOy&G~>;cldXElAHe at YcMbUG{@sOP>(w#a
z?Wy`lCz_s~Zhx}W?E33vHe_MNWTryKTH;;6?=a$+7!@M#_xZp9g20487=S;b3`MU8
zQR;vx<4xpSg^7jP0GNmvm~nk at p{2d6v8BDG-PzRIVXJePEwv`I#b|_NrCML9(`w47
z+t7GI06zsu6hU|aLJ at K73m6mKhD34yhyo~0s+2TRV4(uZY00UmKsq51{|)aD5*i*7
z79LD2PwhOEb73e at Fb`s2UvIITNVF+ at t^~iY*HL86Bk*~D{__zJm`wP0puZ3HAIHHL
zgMTT3Vv-?3SSRJ0(-VY4WG?_MfO8BjFyzNK=`x1uN|Y9$2n0oB2WWw+6rl)^(pby0
ztlDfwtkD8vS*Ecpi+xqRCvR?fo(M0M7VuN$jSx9P25$r}l2yJ;AAvCd+ySiwmO&_z
z;0{m+6oJkfGXpBkmx>^+N`ZVacOmi}p%-2rdjy3hT>9`T at 7~5XI@^d!wrp63s6`dV
z)x_xX^M6t^463THvR(C5?Jb~=s3xy^txkk1 at N+txX-|wldoJ#~+&FQ_!S|zw5Au^&
zE*Js<7D&Y!owWRbpT#1;PpFBX#nNK=K@@W)#c*3?CldK!H287ZEAuh_tSqs_-9!jf
zRY2I&ZZ7GrE$gq>4mJqO5B>-0HKR=x6V1Ar4#Np&^<sC;Qm+y4UmUhx9<kn>us at h>
zcxS2gt;Gh{*JlZ$==+0bEKgQ)EKeK|q&I<FDDd<M^gg04_p$v-7{E~s-WnRX_-i6G
zX29~(6DU&QAV3BD;XL`aS){r>)6&`1<Lv3{aCWzKI9aSG6UP3N4zpQ_0+10iqQ>d2
zOb{&^Rl)~Ql_$%i42}jwM at Ml1ECIFP=AB4%Q&UpYQ`0lae^b)ZDTgW*2#bhB1;QgD
zL&Hb_(4BC!KqwH!b4rC2ll*+p0*cI7epaeEL5`pT-p8my^GnEVJ at 5{^mIlg`i~z?$
zcAz39f+a at Um~$o&%Ak!U15{4<aR6OvLBxs{<i$J6Q-u~7vf8V2l{-KSC>DvTX=M&#
zugGT0fSDq+z*w50GG!73xI1v5WrBuU#JUttRi+H#D$x<iGBt1p0O%>x4CQ;s<eVAb
ziBN<Xs^u~+iWG_<wxyW05cxh?ygIKYbRjfI98!^7vP3 at aZd=@UY+)On$OqZVx|R(1
z8CM3<3gJ9oc<xWn{pk<S3XLsf9aGI*@O$Ao(9R1b3i;wcz4$!2fWkk<pZidU4scI)
z4?lBhd0@{I1RAVSM+E!B=cB+6tB(SIW+F~DCZEV(T2y!`%X5>7d;mYKE(#0w$~?AK
z9fo|s&pEkvQ*no-q{pTiYSfYQjx_0rd<N?^V@(y4ExO}v+ at v$iJFAxaOs9IP&kvf<
z4H&PCSZ+_+-&kn;_*~mhk0$v)HySnN1sNC|e!RTD2rGUZsYE!*%56Sw!?E{=5D8El
zSMLR1MyphO=kbw5ZU`z&@`C^3mITo<Gh=UGo*Et*>FVxoYj0<#9$F#R>W$S^B*J9E
zw637rRVqNagX9h!NP>DgJ_c=|HJiw}$M`r at ATcqK(M at VTxq127xp`SRxfDXvGBPOv
zB_<`u#KwVtsRBemLIp%B5fM&Kf$Jv>Mg<7(!86t#<g;7N6I%q08+M7fl<U~I0m)?I
zK{&+k;_DHjBRm4tBsq~4o)8nxoF}C at 3KXb64v_^(7GyXN$K|YwoOpd+99l43U(!*N
z<22=?1q_#x9W;rmX?BxAj1{2;OxDTv!LRiqy2-SXl@=&6QkrNgQzr9*?g=e`f*Vtl
zox&Qp&;r_{V%A7%fl>s%JpwjLh;)(gS<fm0<jJs3?G=<eTOnbPoFtprNoOGuA>e0M
z1 at r=AQPPpYzk06Ca}x8f)p^ucN<}~y#P3>pEx}I}NCrO}An;Ll-Z_^5{vizx at HrL)
zjj*4%2pkQoKtvFhpRFR!3}N~Cd1fU=!9vWjAsG4KrDXD)pxRKJj?=W1=h$^DE9KdB
zxebIs)dejzg{?+ZpomqD{<`vEYL5+C_B%MsGSW~!-lUys(am)jX4-U%T~&)+hO_;~
z^8?1Kqn2x<mRINM|9riBrlV at O)y%CH#?N?Li8hmCBa&j->hn^kZx8O>&Gk=?9>V*_
z#nNbTJTye*Wwa{PMbTtl#PDMmk`zn-E&{#aJ;FP{&_Y)fJ-xa#+27Y=HJi-FYGbv5
z!TzdBZH1<oDNV{j`8gTzO|Mq`qUjN*B*teD>=XDTCo-?Y*h4|Sm<Gzt&CSlqq4ZA&
zOuooTms&uSgqp<0i4VL6^8}pIqbN#~R~Cf=h-v^c5e~?gim;Lqga4x*2UQ3JlNBm}
zA`lDVG6*5WR#yO-nn(wTw~2)?v&^<pqvr33%A*CmWjV>wutvyhiDBGN(Pl;4N|Od`
zMO at +OGUX50OM0wDC_;lSi<u%?$qkh`by5pR5R9eiY at d-Juyn(45tBu1Uuts1(g7F{
zF>n?y5|kF;ZP5j^K$HhbMv`NB*DyqsYEcJt6L+BA4y6bxc*7mQIt9%j3_LI}2oi>^
z&@XI+gk&@4$X<R?ir7`edO!bPe^f$-izQ!ssuz4lmU>>~$rmI1UiCsf`8+evjD2q1
zyaBU+XrDXOZJtLCay<~<FxaypP(s22yrC2T{E!(EY_nm?<q>|8*~w9WUkur%#gb9-
zqhKSI9}B$|C~Fk>sj*1oUx4xNw3Kw1i&*X>?1Ak{ro9y$WE^eOPBd3A+|F^j*>>H0
zr~XuT)naGm+5VdAW7a#9wujSp*W*#>5sr7;dL0IHMFBrafDMKzMv<F{Z+^c!nu{WE
z?hwX%KkuUfzMfRb`PpI*mBS at T#O(?TDaTe<?PSC%RKyeq5iAW*ju6 at OMRdws-`(c0
z3k&snZ5cNlnb<GN%VJ`UXI^$Xb33R5D*(m$IYK)Ma><l6rNt2QR+2kw%gahj_$VtY
zEh at r!$Pu}`JetBxN8l#n;|Q1H68IN=gIF3#1XH5VMO358n-qn>KLkFczz8Y8S_rg?
zf3e9fDs|po!VyRzizGW1TpY4ZjDeMoK!iisE|LNqH}4&70t!T25iQM#*5}1n=f!jx
zbBF6n`f3Z&0z87#R6qx<ttKBWkdsB(b-EmtCW{0?5_7 at Ir7ub&hGg6tEx-&C3~-x+
zVu-xf6i0$aXv7UoTrCMB{+IVIL!EYw6ZLbc2$4b&#2|4P9s$-V!X7OD&TX5Ce70}d
zh_I6mR+Uh|A*Gd(KYNQ}j7P*msDON~fuAqq>#^|9DuQ~gp6dUG{deEF-DCeAzytmT
zY3eZ#PAYRi0VY)h8cz-m3RZz=?0<+1Cc`0L<vh9qe_?to;4jZfWagF{8WE!cKQ(q%
zR-2{q?=TlrZ)c~Kuz!#{q|*3<e2o8yLo?Z2G25Y^cN*r}D;J#lrS7VePW_qQs;eXB
z8)KG-)3vUzmWEqR at Q0ilZfY`XF=(`4C@;{44hi%<;&I@>UiZVO0r~qridP2^Y@@%g
zFpSJ@(M3hnKrir+d6uj^i24Il2TU at H0eI#LIC7esnZj~bac)LMac*U4p1HE5uBM!x
z8gmq|w|#MM&gFX7VbL?j$qbvOD6h0IPg7h#bVS!o5VMz+RO at v$Rr)GD+|;^CT?KU{
z=!w*e3aJ;Bl{yVdQCPrWGXp}5daBddnG~4fW93Rw1i`!#s2flO{+cQ&fX1A30Q?gR
z!Dmj7-rMt-=u~=psuCgvC8<P#{H0{F`J0GHIL#P5cqEA%?i(sasD!u at RhCJ1oM<Ud
z>^9|&H<tC+77p4=SUq!^3uvOD1<h5Ij6~H`G?ZnUOoAXb4vNzRH(hR$(1Pp)wTz4w
zuz-VkL>KT2^3RH0)q+U=bh>o}W~c)(DqdJ9f_TBP;|M`KwPTChwoPtZH$gw5L`FVh
zKLt^-Ju$zG at I_RwKEqRek{9YL>21m4k0|&*i~KeG1AZ3X;V=~V7xD9f75sZ02Km8$
z#~@RMPo5)FnEm7!)~f~22EuwB;Ahni at I%U1nibDafGs?7B`V1n2d=1N{2TOntZxJU
zPD^o at wFKi2@<$shI7JHb#~OKEK2%>i(_VR^LocOr(P=o at r9aiBKi5}%W!Q9Spz76W
z>)qLwbCc~)u1rF$M*oZBr=XO!3)MeBPBOS}&u+?ATzRH`wQr9*SKjE~F`@<-M7t^^
zm>d%!*`)I*CfEIZmGCP at R+P}#W!Q}J4oNO!#)X1YJ*zM$gR=s<vI4eu4dsO<T?zM6
zYYk-%qqeoS5 at l?!)s1ynAohVV3)*uo;z7V=x0)L2YU}ORx>`%Uy%v^=#)f)cKvhv^
zv)YkbORdFJDGRLSWyPHHP%Q5Jxy(XSLQhSMQ$s$qw`jZI%R)qrR3rs70?=-Oe^{*c
zGouBQiD0#Y-i^N$sr1T>I(>?;5L(6f0x at eLBO(@Fh=_<AsSogm636DGL=(LfrpJ_I
z#Fk{l7>iSC3gSC!vPbJndMx>*$!I}GO&(gna2?VpyU8mfc1&ECq;X*cVj?y%wRuS(
z0b&+vYwRNv6(}tLDk4-)i&H%s98g9A$QOwi5w%nYei at +xT4ElU2BDn7{ww3ph#FOT
z75pfB{^Ii#^F?^0gkQdh at t5)}_?2q#6h1;!L4W-%7=JQf at V|5W7O2Y!o at M@cKpoH|
zriR0ot7 at vQ2)(v6`(Xn4iGq9>B4Sv$*TApIPT<n0E<ed2htFxLkU9Z=jDKrQA>emf
zG5#e~J5{xRqD42}TtV1B)`%8pj<@P&+baovPIgtD>M|^K8%{baFAUUN88)8n(S3id
z^XgpBJ69&Zda!VBd5Ak%n!=pCtkl#b($Fw!-~<MuZ6PYR`&rNDz7I3o>@2Xb#<Yo;
z(xuB77$|Cvp`omAFt;Peub5t5`CyiZ)ebUJ<`WPRki^9zNg}pS$xKVh$xLT-jhKgt
zP44coz{}BUj-pm;i;cQse1t_`Qfnx!<yl$8>58`6ios^%*)hSpK0egf+tuFJ-8s<P
z)!Wt4<7}7G*5t4^z|~b%SzXC?f!G&gi=VlRvcg=Hj_a0Uz#u`C4H at -B3s3=Qtmq4)
z0+c;f3XJ`if7yeA%SW<WF-(Jo6G at R$%L;3tm>r6Wz!g$p;U~u07d1&z15B=L7OX@>
z#Ib;ui)rOK at s)Xr*3wi*dGeT}q*rQzND#~gC<0>@LJ_L-sG15bsK{d6nxzBoOc at H3
z;U;1e6D@$G3oU@|8<6mSR-rQ42az*ckQNt?>XAswu1zSRwa6}G!|_cp4JrZrFpz*!
zO7u$P(85YQqri-P=fyLT|8weV_<CNbf{*eJt12KAVI}gB_}}fe75pFCC-6 at uNg)vl
z at IDOqq3-9rCIY=ABzv$5DDdZDF);h-v9OSpLF1pDz+agcQ2JvE7_zdKXA&#YTWqZ<
zfVhCgZMIecKh++pofv;=KBxf3f3!g}>L{CP){Zyu)GRvnC)z6j|58`wr9tDxfvO9=
zI at f!1On!d<`qF<tUPcibEjre3*#W^$GImANkeUf|dRRgQ`+efX+kQsOA at mTVxB-k^
z1+lNhtOCNUGUDqWpqBV}GQ-B_MNK}8l_yb|l!X~loMBvnfp^NAMCr*%iDbA`d!#y~
z<z}VjWu^0NlosX?FO?VNY6`P;C3#il1=ZTZ>hgS=)U>L}R?ONw?yGW%X`x at N)j%IN
z)YmoC=j7OZZ>OLV5}Wd3L9&WXVN11+yV%;|JT~P^@-ho^(pFM<Q8NrxtLqdDaRF#O
zD!^4E{?-Eehj0fTyf}93C=-?Zz4 at CkX{H<>)g?s4e&Mtq0*H%HE2 at zq{Em&l_F{xp
zzo0}kF$K96%@Ha;Y!ftSQwM4bhU`TYi~4KHlnYP+gx<kQy+|eq#^O|cexfcfp)4y_
zlO0!_9s at kkCc*=>0JNY5gj*O-hLj+w;BrAybg+o1WoVHUy`lveWCZ#Vgv?aV=d2^1
z0n9x4<x4L-uSCK71*$zSJkJwB9oDZZ3o7vPi@%0OXn|4zl@|!(zhNB=p9=q|z~TMw
z-bW7jdwL+$(mAON@;QOcVFfP2r^EzjBnY-Wz)!>o3oCy+bi6b(t}H7~Bf+oDiN^u}
ze&R#S0(Aq(3R-LOJIzI?K%b4uPnj%uiiDSf&$u-H{8WeQiYM>_&E>Og+POCEi8k#i
zr|#;oX|AQ@;gspsvm>A1JMrTir#`<k!vaffRarrH8j%UrcxHnM;E8()W3YRy5)lV*
z+K1yN%#}l5z*w at 6FMU%cl!N>N0)6SV1_t|y*FoNX0iND`A{Yq>4h<yl3=LnCFfr02
z3YAC%`z?Ghy2AtyiE4Zt)lL=_SyW*@nV3B*J%#H_O!61xq!;F9kUId~@}lgD;v7R+
zezivELRA?P1$lA<y13n14*%QJd*`Nxds*RU?izk0?xn(6;jkF&rb at HeVlJsH%jY6|
zac(-ruFMps3-AR at K8rCqQUgU}MG2GvU0{y}K<Npgtz`B0K=;{D#HrC;zz8sI$&W||
zd(06D&IghpI#2{fa+*aH#8g=rn at r1qvNpHIBvU<oOiWoWxp22Jd$LJ0f)-FOvJ|ul
z707CpGZj=#sTYwZGj5@@fOZ>~H at VMVm==u|02o570>R%d_^WBjQH+JTTHf#QM+?X<
zi7^Pt6yG2XsjZt7_=WL*`6ZIsl@}_`;WNl;%p>ajN<q*MqJFdh`;T8BG*b3oJ!ye4
z at F~OobqrB}e+o?;Z4vlCAo1_z;qT=U<Z~n<(3``WT){@T1q{zB2N$3kQ{XR5ixDi8
zB4~_R1Aj$sLRC?UNg54iZgGxO&)SIpO$E?*^xMk@>&k{4nsHU|Z>=Qk8E+~dsW0V6
z$`5w3sSM+f%(ZHkyDJykHS;Ycu6L*5RsQku$^Uu#)He at KaJRR%N+XCwit;E!GK#<!
z25&1-J#R58!21r5AIN8`j^#UFzW^_okA3}p`~m<xaQE>G^!7s$m@^9r42|#)3iAyJ
zM*M?9l>~-_BSBJ>I?%LIy1?{KL}V12AQXXymsAA8q=a}H0kQ07(G*}gD=RIT!>j}_
z=qUyq0BZ^uBF(5M%C0QQsVvT7V2Q(yjD^F4G1^*#Qy6kKvA^8WU}5#X*;d_X)w9KE
z(iP)P_>H2Aks8myAsM3JFo_Hy at fW#|kC$wjdBaNp{uP}wJcevh$x-^Fa>m|Uj;aPS
zbg!n4SH~|!y$It$;!jKk9SX{&f+9L2_yW>Zx`YJq+WZt+`7|_}YKmHoMQ!@@<INh}
z0aa6Ox1j}$Thl&Z$_^c&SY#_tHx;LlO>1-F&;o8%qXk at PM+?w}{M0CP0sLo*`vsw#
zoaXSl(t?DDKxm7Ic at U;?6yVhpJR{h18TpgU3R(B^ODgggzogIm@=LGC1Q{QJ7D(`~
z4F4$bqafg4F}(3q^v(kRd+9ar<ZhSO;e8w}Lb&-G9^e at r;u{y{kHm-jb15FRrDz7{
zB;YSdjVjI%;8&N7u>62umzz*ilwvMTW6l=vV-48O#zl6T3VUj?|0P598t%LZ<KL>A
zZmXPb)r~cjjX6q39VHWurTkRqJ1XYd%IDk5Pj+gj9EE3{Wgp(0`QpyB>(dLaudjS{
zZ+3pDMF2xzP7#u7iEP4(NSCb(#tC?fC2<q*_fo`7-WdO1VISb-8{p{^;6;5sFw{Rd
zEFdI8iGOgokAE=2=htLSBZMwU*PsR%7<iT=Y;>(6M1T|>6&EX#g#=QD*l5<_sbta@
zqdUe~K4N&rNAogM at +Bc^X<i2P)p9mNi#YGgZO1HT^B5PwBOG^HE}a<aZK*}r<>_v+
zu-aqQm!LAGd1<PtM5}`OIkuWoAtTcmaM3LA_w|<}#89{?<Ihz)p#ahdsKrB`Vkc1w
zIS(8^1V|*yqF5w{&`6`GGLd2kMTkKWD9A)msH8v0B#D at 5EXrV0fUy=qTn}-#DUY{|
z>|oF)6v1iCLkpVqs6aNogF5zZ{zVIz%0>%74&|oY<Oq5Yxk(Y}u_4J(K}rj_la&}5
z$S4j22?FrzUKa5T##{=3UK7xbyzu;U2>(XV1%dyUsgbTj3sgk3rUIfJCVIiouYsR}
z5{Wk8=dcS0>`(#l?|pbb*B%4CiGMse{vH$R3-XbKaR2nU5JqZqk|Oxd`70ErMNuvQ
z{M60RaRvU$yacKTfZtr2D(7r*j-qttG#7STiu&y(gLS1t^<|{JD&d`K(PBn0{v&n8
z{3PevDrQ<Vvn`s%4(&vJ!I&+__0H6X*QZ<`oN;||*7e=RA0IDHbTOb)X|B at dXJ-)q
zFkvpn>BGaQc at VCX#`3lk?I?B*kT0Vh%zKcJKLJl52>0|2 at CgX<2JL~NJ^`WL0U^GD
zVMst|q+f72pI?&|by)Qa#7Hts3Jap=5E2#)I|764V*X!raz%U;85tYH4uD9XV_}07
zS`bTw#%w&18fzn&FoR_zGc8#pokDR=DpV at k!c07ZbO-s4>f-J?-JSVPc_6ZuWAyda
zWy~xwa>keey(Cpar$|V(Tvmq|p$sPc!~PTV<NMev<O#nyCtbvLxm-MloJ7(u at NaSk
zFFw!GmDtLa8z`(WlP?R_6Lxxhy at et$Wy*?2B!j*X$FW=>2EF(O<UAo)m0>f;Vz`k>
zau})yta(#SnnCFf&;lllPy`MxGh0|+k%1Nv5#bBK28{-ML4Go at 56epqXD|;eWyOc4
z#RN+&2qebF7XW@`z~Ny)0J9R{j=fh;UZ}927fKgY<d4><U<rf&!gC at cP%1!<EP7rq
zJugQ6rKskb!oRxS%Xw2zkG+iF1$iG1 at jb#7?ATD>xKQ7O2>;ZW;FPGqwAf%eCa5j?
zTSWYy9xXDREH2r_VfpzB68M=)QUSlEG|gI;Mob9!x$V_uDWa>`TU*?3D;aT=k at HTq
zR7|%C<4@#2Y%dzEFP>;96~@1{{6t$h_#ZH5%{LYN_02P1-yU;)0sfa<u3N6BOYHE%
z?NCud-$~R7iNG1g6yum;oQ!mjI!}-Szn2dsP8Kb&=OKhQfZ5wW$jdLtcNO+t{vlp`
zG9c79DBLG7Y)$z5QSSgx-ynpqN4%x at 1~6$P#6Kv6Z7+n?ub^P2^Tj-yoM at xG6c!<Z
zqzJSUK^@}o2y$s%@uL#5u{;GuWVTo;Oi~otY?o;A(`8(g13xfx<4lZ?v{VhZneB!m
zy3$PAh_mmgfM}#L(hyDal!_3E0Qi?Pq||!R0m)k^F%QTUb*E&eS|#2&1idXZ4BP|r
zgp&jpDYn$bPOezIB09p4;z}qdP*tYZiZ7tWf+8fwge5Uh5gX3Hn_Qe{$~S}Aaz;a~
zx_oFo+A7m{2m7u0xC5t2XaPglwz3qZ1(cGM7F6WKp#_C05o=n&NK#r%P<m|enijB%
zf(=KY+{B(^*hQQJ_z8aGQ at vPI1pXuP%Bq_X|5cVl1^%T9tW=65y`jQC4dpfb|Nor5
zcW`C-mEZTTcNu2LA(wGNPwX(Ak#l;$%NZ{Kc*r?6&<%9Xd3vTN2hI%1A;qu^%jGU<
zZ?d)WE_bynOIs at 0rIpGhx@ft|CA(~wWtSxTpZ4dRbMNn6JfMdxzdCd0zSjs3!1wz*
z`5bc1hJTjavH6Z|r at 2J`$Y6q9 at CbW*r-yS3;|2DX at +McNO1xpni!M96GH&3%bYhC1
z3-DjxoMjflOXn5=|0@@k-n at F^-5VS4-)3Z)f&UDN#qYj)?mMrZ{oZTme)N{ukl%S_
zi^Kniub=(#o98(EfBrR`-wWS)>BQGA&p!B{{`8ms=-Ute{wM$Y-+b%AFaP+#fBc&V
z|MpK<k9F(P7WgOdLa3Z*4A_SPG?f58iF6JP(~^kUZ#KUe`Q;I%fS&oFU7*gfKa|X&
z0*2Frh&)Xpd8F)!5YG%IR4|#)8p&)Sg{b?06OmC at T6|{>E71x at BLGn(YC(BW7wT$z
zNb52-0apdF4k at y1g!kzgK_d{}p^=1Idio9NH8XX<pkVrQIbc6{`6AxIIVrHAympRy
zKfF{bJi#PUAnbN(9yqsYBn1AzSZ0Z^<0THf6aAn)5|@!{GM|%K|J=(=LK8lKX;geL
zIszU*02BvbgfE0$L^Ku8nw0^RVUUBy-O#eSVM>3gWT2jbtS(xKw?u_GLR~uV`Hw%k
z&EJs&4HkU;&IT3N#)6m5&cAeS0TxhzdUa#!0{eVd#vBV)r%FrXg at v)f`O!SbEKRs(
z?HlsBf_}u^IGcwTJ<H$I5n?G}BMJUrJn*8{#i0lc|G2{>5fCgN*<_?bajD_owmpJ>
z_CK-?m=*Aq!Nh1Gp-ZcCi{nLB_rlXvte|OD&kt`dRM2Id{P;M4{|c=}8<bSdK=Zq2
z7hb-wM0q*!F&rY&=wH9P_05+gt1jTbe+F~$yZ6taF-bKNSkuG*>`&f4|NC#B|LNQ3
zzyHd~cQ4QWlkZ>uKmWzgXnUvl|GRJ9xPR*sTSOoHKYvXL=qoqQlZs;1ulAA?m7J!2
zMk+AJ$H5+^2sk9vL%1`YWx6pYJty`s7Jg2y6}5SW0J$9d#Sz1NGG9*S%0dAZV}y_*
zSBj_eCW%ZQ5ia0CWJUP;m{<tWB)%QIGcIUT451gH0$K at PqM@j5z*2*%gsjM0pboT`
zT)IVQp at IlHF?gPh2^TiSJD{%tdjm^@iFvT#fBwhcXUP|fjo58XAv$Ah at qY>9fPMN0
zWt;*PqcVg|V9%^(uHal}(uQqNGZSc;Ps=n;<}lk>PNvsFibz~Ww_zY*6Uji5I5)xt
zY%1bP)K{=CfN(1X7&O|zJ7y<ZO%Wsh at JeWzrzysU9!R&vNoEbL{qS`$Xko$oH&48I
zW!YG8ZDZoj>A5>+=Gba|er1e()@K$gTMHu_vqP(s#l^Aw()b`O;3PM(gZ<D!j(yx)
zET4n?hY0KsA0{MZq%fM8^UH^Ue+XjuH at BB7F;9fq{uB{WN>qb?R)Dejk-Ae_4|M-;
zxSWlS<m1RhDb31w-jyn;BH%xP%#_()y|pN%BY>YBzL!r-QbTh66#nlVOvmbb{mLq?
z5J|)LZ=d|eOIsh^lUTt=_qINIX%h;3>)z(qZ?Avz?#4Iotbga_&F|me`n@;LVfp{?
zwXF}YFMfD+?!hnr>{tKr!$11Q4HlqZxp0Oal-KXS{D1w+KPI6-+apoIO)0;ToD_p`
z02L+&PADNt{85eYOOO*4faQ;$i%W~2TNoN0ERPBW4E%+Ww4VR|$v>3LBV`k{jxdnQ
zVhH7mu~ZK6h>$iSz=eDY$>vqp<b`y6J4%u@#lZLjdk7Oqt_?}Q0K)tnxIjWm>l|d@
ziDi3H2h1B;M;)v!U>7l&he}tPeX#$TUPT)zqXYig&)=sax4<SN!k$T)%fX3F;7iPx
zRGPyaYlmT*EUoaC7WoV8+<bo9UcpRqc32=xDTgDGcq$wfb%0U;{n$=WNqmW<wx#1z
z$QY2Aw&bLT>B<}`5-j4a5}2hHm!c^mR9JEN>2yj`pibF2r1-&Wr+ at FQ^B>$iVJvv%
z{QT8*cKeQ9J~7VlI!f<g!C7U&$+ at AGi30eC1wrr|1r+=*V(^&Qi$)4aVEE^%;ZQFT
zU at Cy<DB!oS4>>RJPfktn-?HueXW=9GXa6a}3i!d~z)&_?$;T^$BGbd!Ib4A8L6p?e
zL;-EJHdQ(?EplpZ==|z9;J>myg<iX{Idl8;9BS^>i_33ZS$*gFI^d_moTMS)V!#gt
z1o?M1KD at oo;s4P~CqKHo at zI_2@4mA6<2TNH=ibIQZmzs`cH+Um{=NVEpZ^G&kUu(e
z>crX8o9uSEd+XZwzws7U6D_^h&Y!|&FcXMse5 at d~x5o)fVt!+J(2Z3du9&+ at 7^gHc
zRvaG1!_Ai~;^Ynv<w_L=KZ*brctk)2sFW~`f`S%EWD9`bV}TGMmrzNjbID8&Uju;!
zNG{Jf6o?=~=8fDM4<hhz0s9PHfVWObh7h45ec}`*QK3XZDXmi2MR*6y(B5Eyg1<ln
z*8p8W*9rDEs}q<Z at V7sGmmTh;y;$H*rlT(uVt6c5`Z at OPzz5X^cw1M;DlTr=K*Yv6
zb`r_<F1>OitBX`Z;dmsGjwaHm14slB%r3%BmLRGTL5!jlC8nqzqNdaqQdmo$3q}4^
zWLYJxjJ{-i3R5GvQBwTi)lDLMu;ATmE7Y3a-lQwpW5KzlimZ2E89Ti&vN=DzJ`J>r
zAeqCyMh=qUQsLj^pK%1#?6<3ais%Ji$L9BgKcWR7g{1}v`^z$;rg|!iw&B0475vj~
z<M3Zd4wN#H;aqHVFpf+OrNuBC%>(}BiNcy9pSQX`Q{I><^R~|{RW6;F0RJ~PXYZVu
zzkd<mf9dthE5rfbxqjmPTN at wTK1ppY3G|QdZGL!r<AYo4AKYAf|HkS&SC>Axx%#cU
z8{c{P<Tr1xy?15dmDA%tef{KvU;Wt+-nc-{2qTA*d&Z`*%;@Xy+-KU`ga7R>@6pVD
zar5Hob%Kg`!BQ|o39`*qplVE8v53+Wu_sD1G%{8i9xV-z73J`+aQNqnBXTWOuzxuD
zeHAe5v_K*Y+D(cH^@2J7kwm6|2n&+gSSlM=Nu;xgupsTT0KZ!zuFQ!Q(HSYgU*@Gi
z1QY>If>k2Ps1PB7%t_EH9Y&qVARu!M))u9m(2OE_49}ljra~KCzzlh|r_oRMPyg_}
zrskH`wvLXj9yYei-fCT~(#k?cpw6yFK+f(hUC79?QTCHIcl4?B+KNX0iDkY*iq2j(
z7WEFq24bmrDu+6V%XnuSb&hV4p;bJHEiv>C?*O}t5>ryi#Gt6Pmia}KqcSE)g<eS9
z8CqZv8K}h$#1o4&tN!SXv+rGB at mVnCv0!cd^uo}YMYjD8ah!rEVC=*Uo`WxPsuTR=
zb>Rg>kQ*g}rwjZ~(R7%o35gE*)jpONvpPCz>J<MC&i<#%0Q}Qv4+ZEu&c^x*sexi@
zU_|hrm?$MDOR4Fh^jsy2Zd#cvtWFlzXB7Oi<&(4JQ*-6BOBHN6)ENuwZ=asU<-dPn
ziEeAa|LzSY53Ij?eeHwW8}Hv-{~AxPufBg{?Q7Rp- at dZ+_T|O*udi_afBn|#t7oTP
z-Wq at F!qkKR at K65Y`!Dn7CR9R_msHnlcdxO-;^*K0fC2vh$G`lC6yM&tymet~jfgt=
zR+3GW<5RR|6+1GYPm{Ii0P<9fB`FP8ibIItUrnIO;LupUJen(yVhD+aBgcM89Rbh&
z0roXw;UMP at bN+8*LCRPF5g7ePK^`#_>~ayA6RSkX>g*?&z=LcBt?yQ!L-Ilz>SeHl
z4AdR34C|z|F?0du5Caz2B*;i at Kt;TiO;SXGXo91r!YrbH{ip9YG`F^Nu%epfxm^IB
z^^3NUmzAR|p=JYnT}xMEd#_1TM<3GI*2C4KgY2j4k$t|bF=wAqU$~z>vt$-s5KCsF
z)LbWIq%HQ9MT%^MmCitxR5GO$@`fjQ!_4xUlF$}of>dNA;L<FLj7^9TS(Vztw_n=e
z^n2^_(rXtMUOGK<^~5+tVAcDn+0y15h$@L~uSdKX{0L~qo>$ACtNoMXg6RT2#3&<{
zzf{3_1rpBlC6!Dm1r*p7{{uZTXafAxdP(;^6afE2naEfn0r-)ra%y%sGe4SJ7|pFt
z73Jjj!4GH8ERLMloy8Yd$8d0%$jTHlQX$}9Qsh at x-n_j0#-*j#E-t)%W%+A2)>IWP
zzjbNhohyqZ6W_kP at Y=bVE6b&Oo1+i@{>Q)i^RJV6!8c^+$eEL?Z at +SjId81JW^_5L
zQvTO}@h4xqxqkcN$*bo!&Tk3@$h49OreYIEc#h7J=_!RjQPFYw&B6b0WsJ#GPyj6e
z{)>7wN5HfI<`DQ#h>=q?N7xvF%@Y*jKZtt45*IQP2!zCuR3_mI6fhQ0ScDi0xHA4v
zCIE7Nl6#W$lZ=6a2pB~^5o8_$EI=@dWd7CUn8r&5RGhAIoGvq7l8#OpOM-XIhz16W
z5rij3#F5_6%I at 8shPLkGz`m)YzOARewfk6e=dmWF<9Kry(%2Dl(x9Z^W1vP$XGn<C
zCW- at Hz)CN4L6~7|v=^lGClUjX!ddd{`~;Fo=08%&T4FjvvJb+FBO|jMDXtSPU>YHG
z#5;iwTFx~6&D$s5y9O{8VZq(gGdDIS&M%L!_IG`{ppaJNA3PYmhYN>|7rqy4ECB6@
zDFX9+EkG(YLaG9q8f>3q9W|who&R(epaOc at nXK4i_=f_CfiCc$i}jUK1Euu9a5iG#
z2mjMUskxC1vNAD<*vSw0H|K}YTxXX?0RNQ}6SuZzUMA{$e(`lMe|hC~f&Jp^m*mH!
z+m4_2jf)HKTwQ+i(gKJ7yH}T9zc73M?DXlG+|3iiKfJ&G;6ME>6^ZzUG}zKza_h=j
z2AKcuhp+wFk3RTs|6KPL{g1zR at bCVHx@#gN6b5j%Y^+G_4Y>fC(<S{%_2!g}*&#2B
z6~xpL at Xvf6w7?(<-_l4G|KbaX6 at -ul<Air-zBB&K=8>y{-=jdl|26wZC=g%)yCGyl
zgboI`>LanDGcq&ZGEN2|vxvytQJ!j5YUHt*ih?K+%G7ESDPpJ&mENS!KoQ_U9pH7+
zV7SSs)wQ`RvQqQJ>%@reod?hLZM_Zcef4d9b#1-JS^$67q58I?O<ji at +K<43=I-OI
zJtp<-eT^Ocjh+2`d}DiGLt78rY1C!z;xBaJ8b^B6B8nz5Y7u4e^re7`>M491QDLOa
zWTcf at ahBka>4<8 at S;ISXbZL8JHogf at 33f?qyo}hL`smIHbOES%^}_tEQ<LYHhR-aN
zovCkj&O!eH_PKRR!8C%HM&R7{1uQhG_{Z~=q9C$qba)vB at O%aTQduoRmklk(4*!v!
zHul1U{|pp}_m$FN at IPKm2>2EMGdKd3>_R2GJf2^hEUZlxPR^82Sf^&oXBLJr;V!L>
z-8eNxu=oB2T;RofXXjo%H-GQ!?91oo?w_A~<?QV17Z+Z;F#pEI`PVPZy?JT=rOk=k
zC&xCYvX>T%x7UXsJowk-ddNePi$tqZ1AO<|`M2*~Wpwjj{p_QE_s{?6!LR=E!N32z
z2M_*x-WAiXu#vDc1r^IOQ4=eOZba-L>JSKrj>}`hv;g?W9j1msYI}yLd9W+)06|gk
zFZo|=A)f+z>}LvM6!~U92fn5NylWyz0X2Tu3S^RyeGsA!gat|jQmrP8$`{eZt6D>H
z5hq#ap;- at tM+90GgbT8b0`C|_VBRqn5rfyDfXr%Mpu0*&*D{}n*gGtE;|A at e7ml~~
z9&PSASl at P}sq0Wf`=R>wgZ1r)8#;J;ytVIWbI;LccmWZ5>rC2ukGFI;cMTvd-2<)N
z11(+s?LA?(T4N6NhU0x<8t?IUF!?gnP)SHx9emHb(XC;yK*=j_m>h?ha7F~J-<F<t
z=7d8ECPDyy6a at H3aH79+@8rAJmR~zRcXw;*;_`@D`&<vH>0>u?FaEFhFcyGz{?#lW
zJOAy>=M}6VBBJDx9scorCHNzwBn13)+0a=J{t-L>4gZW at 1poPXUm-~rAUu+bP86|%
zl7N3^I6XU at o*Patj%HUT at +YPW>(j*zWTpuC&o5Ultc+ecF at Ept{Ozq71^?W=GqW$B
zoqOrb%*$tIUpdG9%)Qgow@*#HdT#dS#@L0$($;kD{QTgp6T|=E at 4oxr{N#1KR}K{t
zM!3D~$zp*Eqdx!eJ8%E>&%gD{zy8UCfBOr-|KP#DdGDnQR7??b#<#+ at 6oZrN$^wRv
zY5|!s$bZsZt6BhGn8Yl_Y+A`vfdwc6OA1(Cz^A~Fcfy<HlOfwB`CkFQiDbb<2>uiQ
zvEUE!p9B;Lupq&}2HlE+&5ZF(MA3|AE5GqrfHGiczW=}+f(Ygp_(YI$WsU+^K!=*9
z3}nd^m;pbwZ3F|Gc0%eRXtq at rtWiotiiGhpN1D11i*y}q=s48arP9fZ2rM|>)_1I>
z$E2>UPjrDPf{svAN2skQ(%u{C48=P8B3&W6=~AIc5(>b2SisLt$^%7UEFj at -e>L7V
zzKl#q7yC^Hr#rvE-m^6PPLEMsWP>2^7ZC7IB9F#|- at U(yN&NDe8AZK-|3!Up!^0zm
zhJcI%;uNTNVEEVgr+geX548|vyC{UvsfNd(0HxFc{7drpWAL8}cV(kOfuT$o0sP1m
zQcg~nAwqI~B)w3{c=(?wo}4LSxt*RL+MFw4#W8d5=BcS$n^U*9rtfS`<Kx^@{NLG{
zx_xT$?$+eB6P5FerOoNw>S%I#Bz9q;@a;P*5B}p{5w>JV6usdLy{Gr;_O%OdymXB@
zw?F&tyTAC^xBk^%(EsvZJowdLpap*N%~#3OQKriQNJ$unA$=lffwkrN^;JeTODio(
zfLdjA07(ISVHrH76e!^fgMTUVr1(>+-5>&~G3p{rsQ)n*2-KxmPACw>za_td__q+K
zocU_ at 2>w;#iKG*ufC=G5YrjcX8*qrLSWOybX`H1dbnWPDG$8_G5^eG`0|w0^B222*
zH5GBx=S(UK7<{)xvVejFrcM6ghqsQj^udB7&ArG`fqlP|#_m{SR|IK7x+Bfqk(Qol
zTVK4TJB+k){`W+>`V(EDSU2sY$y}7U5LzIuSr2l5IUE?N0MV8TqFdtED+Ms#)P<1|
zpp<G$>zPfD1nsy6(sbb8a1Z{q!Hq%-Sw{Agx6b+S7W5m!jR;&F3tl{MfDbb*0O-ku
zSqRh|0jh>b1bg_e1OKwd-6-IaUyPOD{HNF0OdyPZ1p9~cKhfV|6ey<p!T(qxF8EjQ
zEB;fnL%74Kx#85xcy1M$z#PhNOc&Ot22aft&n*pKTCL#JUs)Tyb!zJN=G5IS+N;NJ
zotn70F at 9-z`1I@`$X^_a&6UDyqlvAl%!B{oXRqJ6G>qXtG0DL2ty9ub`^xQW at 7%xr
z?e}DR9oxHpUl&;X=?}m5<8Qon>(XW-(pM>_sYsz%7spWM%*@LmO0)pJfYpTx{Jn6H
zjNGAOP0MwLDfOo=D6gdvC<03m=adUd0V*XZ{;3)~)c?4r27bF**we-TNdY*^KarG}
z31v1x{6m2%3w$m}5t?|$q7EchL>i3^Yk>)|^fM|EB-mmtz4R$_w1OfXyh)g7O6K1x
z3rNTkAfi^2K|O>?Ss&ln6?XVP*4BTtrLV4Iz@)xoph;N(1sXdClmd~qzF2!-ytNzr
zhp~mw0$u&F-f*Hnnu;VcXaNofDhYG+5a3T))kk><XMp!FISy?)vxt^uH^>x-BcmHa
zWjd(NJh3a22c(^0q(om^MM^AWC=kE~-W=~iA~*^NDL}j`0>i&rKGiIk)D9{Bb(p#A
z^CI|T!B13x^wewR1NcV;^mb7HATEH#fAD`9J<0%T!#}H+Sim%#4UZS%?(m-h{P at C(
z|E1B)(r9*VBEMKkLj>@@F*S$_gBG~FHVXbPuU4+CRW7ZJT!9g5m2(TF6BC)~!oYa8
zZ>BIXUyf`{q<;SH`3L{$7ZcNrjh&XUIU5 at +dISF~hGUK68~1M9zkT`cwR3Fsdimz1
zE9Xva5e=LgXH-|Xx08~9Il7W*Ut-D)e%7MYSfT}3ONTp#9Yx`RCWoaejp8(!y#@=U
zdXw`XcUXx~l&ZF at mC0$P9L1s_oD<%moxiw$F9~1E`I7B26Ug#kc7*~MJm6m`pd;-`
zpQ<DYq5C57bpN3afn0Ep395*&ZA2;H6G5iM8WGGK@&iP~-dW&<Au&!T7uEYTl2fa>
zzQ_ayj|J52e{k<yLst~3>j-oHA8YMH>e~B}hRy+Z{u};Vd!n8FiOzv!7t$Z^9*Fl0
zB*1 at PI1!2 at pa3d>AeeMapr-guQVlCrPtse8^-9wj;Veq>pn$zqn=L at KHWXmIiAaTg
z+ at 8qT6P;oW5zqy=2?z9SH}G at iDO_;)S5rt8ftWgy1u)B>tg)0yYt@|8&iPZ#)$^6$
zC!TL>ljOfp0ZfzY5)-Hq{P%aaQvblLX^a0m{Ii1q{IiLpkO+<Dqho{7$zpsGces?8
zE+r<5G4 at ols&%>)pBqlj52qGJQp;nR6BD_u+2YxSp>vBvmsS9L`TXM0<&}|(%fqW<
z>BZsr)ZoBGt{?nQ<@?viQ<s*C9R7E&UmRmR)fAJXmf5AXd2-{-=E*a<9+5i#%jdS3
zu|TN<OX3J}qGSiidWL%GlFP&gX2wch>nKyLWFG+wxaXD^n8n7X5(y<y9YKJCQHA_v
z_$vton7T?mzm_qZE|8<Fge at eEFe+LvE%uKZ`DW at 19jeH;Y%ihypm;tn{;y8~Zm6>q
zF$&-dm?#m90S^D}Mx%>f$Ch^YNP`a|6COyv3c9?;cEY5XLz02Qv=ASYnLjdD!83=n
zf`|czOyOhrKx22bxhHPdrtWBCXSk&|*4!O!?TxjEz<jDZlIe+Ny2EL}-yKf&gp;9I
zx<8f~h-dHuh=`gOAcY?i3zDq|RtGM>RjGIK at J~{YcL at IR1)R<T|1y$A$G%ZtjR1ZG
zj{tSR`)4#0KZ2M!zOM`T-NQ735dlL8EnxURdPHCk{_DKLIjJ2*1$fS{1V07#r~rm&
zK>@=*6rlKx%vV2R6wv$^_!kQJJ2;F2#biiUvJQgz80#q!TTjfMZty=-j?b18=z_J0
zoZx at 11pYT?3lPEZzcpJ}97#+Kh9~kMKQxl+8BO<24-QP_L+ at W(WYOH at EYreeY^H9C
zSYs;4sf`nxCr_|BOU5FstuD;ZPfku^!%&#gKM*GGPm?dxs(U)yhVrTD3bW}-2;I~4
zhTvY2JjFJ^NTB?l+DrZ%xMn<r0&-GOv`-(bon6xTsHUu^4!Eak2*Jb^F&1cfgJ<yg
zNiHZrgx}%c%o}&zg#t<h5C6&PL#hk(q2VEol at e$X?^pznz*-lD2-4|hyGVQ%RK&CZ
zSKx=kQ-CD>yfRdT?v<cZz>srhkuh7fy+75~m%!BTiRHT^+1^+_lqd|ON=SdQFpw;S
zQ-x at z6w8*P=|VI$7)z7vkdz0O4=!*97D_`9`4sWj2r at I;ol!>oftcup&&6OP(vi{-
zH$CaQ?M%UCeUj$L)PEO8c#@szymPz*Ms>-MBI(MXop49JLq0dYE#xTzw16}F0YAIy
zxC;J71z`CL{&9OP_(L~YzyuQfTm3UC0Q?ID1pkykv?pZmfM){P4w_7)I~(a{0WlOP
zr9z`Q*+<N7V$Oed({ui_tseYy{u};<0+abuGlh+*{K at IT^~v1ISbC}unamH2=laJo
zeM8A^!GER~7l6p;FTQ*0!N2<b$(e<j`6Y$~GCXr`PNt|Kr%rCLNo#FwZDw|kOs*m=
z*ViAmEy*pdt<6o1Z7ofG-R+F3m}KB#g at JD+3Up<jj0_o*rCJ=1gySf=q~r`WpemXu
zOOYBOp90vfP{8W>l?zhRKWsh1R^G`qXyG`(yBmT$4)#F{KarFwGQ=L9BETis?cw{x
z at _!=&g`Fz6#^Mwpba@&Vj0kuHW at BJu6ETJe;2$d@$O1KorkGfJd2 at -mg-qvT5Gy$E
zPYw>Gijhn?nkmO}!_jOxo*z!+hm*)4)gaWzR<c?sLav;2p{5R{lB6spC3L>g>cb8s
zAU at 43FIIc7qmsYcA|tXF<|#^~C`E_kO;OH4 at RkKP*l8df1ugZiYz>eu2I=V3KbGuI
z<V8l18UFVN&@VB5eHali`$>e62tIa{V;`u?u13YbQsCGT*<Pvw{^=(3@?V<&MFqI}
z2k>vj52yg}&%|k?K+purM7oRuxo9`S4*GH`G?eZiMl$_SU at RY23M6KS5_3a|#Y$>*
zJc~etrAlgIFbwQRGog`mZzbIa@(uqJxe)ljvNH6`KYg1`UbFo2R at Rmo56IkDeVjOP
z0#k at pLQKwQemM3y)_8v;PT_8MZ>X!MucfuEp`oF*rMa!8F*eZ0v?3bzW&SfPsFdUk
zl-Xjo!BBFk7(!NfNq}9-^vh-O2*e^1rvM8UA(AHr%t{9+U at V}R$5 at a?1&Bx*D<}Zo
zKk7ZS2je_7Sa;jrc4Giqz(S<etGULo!2IGW5tIuQ|I@>3EMSDPS=ut!&SQbhctjWA
zAHf2edD#MdjdjeYml*H-;k|R|LM1mekuFv;D!KBQV7 at 46L4;aCa)sr}#L(yjp@|XM
zZZOT717=wp?3racJu}08G!88`wX!Si#41y=S1?mgo?t-J60ryhv=|G()+7l~Yx0+>
zElJr(7Eek$2wX6jj-CQiIWk9jc^3Td-+#apG5)=W(*oH1*gQwIOqw%aMe(mH0Jpc1
z?d?APO$9JM4#5O+`QJ`2|Jy7sz;+eD0ve-$uLAIhJF|-ae6%|s>&ZpB3h^GKoa!4&
zVH!oo^ASv-<<Sf-!2ED>wj75Gz`mRS at SOJCbc6p=ysH at N98UG%2+WtGS67Gr{oj6z
z-H7vx%Xq#V^(!lKU0q$}DPxlvo?jWCqVbCKYc!doE~TeG+8qkFclFdaG8(3_sj0EK
zv7xJ at mEkRg3^N;J3 at l<=-T2TTmawT*&O=M23I(M67;iv)H630qwW9o|=BrUaW~3M$
z#7)p~<yzG&^_-M31d%T=^}{%J&bzCFHy`8f-HoxpJ at s$ov;D8AUsvhi<&4EO_GWf5
z^UG5QvXoPlf)RljDZ at W?s)I~@#I(k=P@`HVoDe8uUN>8?VF8MONtJKh*ktnd=;Yk!
z)ZEC#Ol4wbcx-BPVg}*Yj*PODazaFodaRr2Ssh+F%Yw^=g?aXLbKoztuzqcY{oFPp
z2{(<-Y(yvHt)D%$#xx9u0MPOY!YPD9PE*}Y?otXw>33M9UKC-=lGTgu_a8p+<^O=6
ztJ(ZV0KeG$w8<O;_eKHEe^UWX4fQVaLleE>Kal_R@?WIDI$Im4e+a4o^@7C;N)B{d
z6bK3=35SCJh at Ah3?V}G;ppxycWCz9vBV)M%biq^szc at US2@R)u4gbI%{B!bigCT_f
zyEc}dD at CuL82MlR@<ZkXuANwCU at VbOuDAer!Hf-;wJ9?T<fkZ6!~Y5=a($6xcPL7M
zR!e(Vb89>JuWx8*YHY+3Vty~fZ*2<tNFg&;&W{b{>Dp5bJ4Rs5;tzyPs4+7|ppgnD
zJBVw{1J?kppvV^r*gZB90y`wittHJCp5aQovU*JK267+O-v7aT at D-l|jxp7nZ4^*~
z*={UecT2LkVcdlZu^5Ks3K4Anr|b(Gk=hA7P5G&-ERg9^!h(ef2Gz3slo`&<t9<ju
zDb639FN6gK$Q<{qyP3llo!5cZ7&x<Yv;4y>1`gR7&UrS`<Ctx3tZ~${AxFo8$wt at H
zCs(Q3I(urB5k|}hV;~aE8Wby@*;u-?wMK&*C4BTXP`+~Ij0nvFY%@WqZsi^^_yc!$
z^keJWgE&9n=Wz^&cQ^dAz0UBD2?Y4j0tEl9{s9+Qf<LxOK<gh+0hB;Mfo&?F*Sr9a
z0zv#kflRm)F$xT-3dl#hiizH#bZ9t at krRRf<N5G#y04t<EylZ{Kq1yOlJ2Wu0;PJ<
z1rzxJ9O2cm)NCnoX{r2oKYr=Gw_am3?4^qrx0r{?uF#E*we^z=%d0rWrOG5_$&pk(
zk{S%fGQ{G#LeaLaP*YoHLvveQgQ$S|dMMDq+A at 4$r9hbBUCb=SFNOuoY=;7rsRIKt
zELg~FXOpgZTE?UyYZO)BQve3=jDB*?f62s(yDam`>8+8aMbcS at YA8ye+a6E=advwU
z-n-u0eouFW0y?lr{$C@>M50D0!8Zv~!0u`NH7?K#hFEbj1A>_F0}CYB2n&cVN~A at G
z{Ln<tylbWr(pJn$3ueEw6!L?+XP8`Vo)<?tVpB;OOo~0TaY9TQgE~dIh)(_5U=AK~
z`5beKHkej)`RvA(vm2Lm at X@t%Cn;0EbLI5iE2k-CM{Zs?$$~-(p;=9J`{F6C$Tb$Q
zZml4c^Fc`pyum+*y@*l(Qy<$O{F}`W1;p$Z{Bz)o3J9M6ivK!U<EUjnhJVX{dHDA!
z!1<4O_@@f4tEJWpP%V%Mb;SDGOa-6?lA-owe|xIGBN1v#4|L?BU72tPMv+kf%yaAy
zrTV~pA=VB42cw<bmy==znL5B7Kn1Lfrsm4AOUpz5?8h(v=<BcDyngK(P3>n+pE-T{
z<f+Zo6DQ}ERxv*FLu2%0g_HUIL_QSHk&9{Rk}}1{wl2zj8=6{$0`(}o`j+OVw$|qE
z&bCOXI}v7zOSH`J(tMKb7&yg5#Tl3Y1~?K`7l3~nPw2ps+2hzlSVUl7ns${0Qlc-e
zGCqPR2Wsh*1w5<34(isxzZ600jd8(P;0HG)#3}Jk=kfYCF*<H#R#jDKt*QaPJ*5M;
zMl at pTv4G~pY-YPUfCU+*H((kG1%w5q0^RYr##ltc0_g9tK-O2m0%n^quKfJQ{FTi`
zrgyUKf^kfj&TX1tz+5~d!X!F`>2}CP<g|>ryLsvKovUXV{Kz<_S8iN*<L;F=k(aKJ
z$9(1bx%)R51$pMx8|PS9MZXgA+Rbx!FP&n254#8v+WcR+y2TCIY8-Qx%ix$?JuS6-
zzT+zt0Q7(#<lEz at J_7hx3cvx4{5RCsfq$a_Zm;J8kpEK8SK^-<{5KWg;lEAJe^miZ
z{XPZ48Vh3kYCME=#Ciq)NVK;#*4rBIZH at M{AVvZ3?<fG~3-N9=!eA8qcjY6U*@5<K
zxV at C<$wxY%Ln+aXE<gn=Rg$CwNCbcHm6H$t%}-yxd+W~4>$h%Rzj*Ni_+Q)D9G#pk
zk4_B^PsDRW1SmrBd~Y<<A^7j7MzOiQr at pzpzNxLgsim%g8F>wjSV65VEo`yrXbbm2
zfnKH<L4h(;?4UrUggc;Z<3sp{gi1IVQ3OT-t~6vxzDDZs^`Ms<o|Q#4h|3`T#q?N;
zog~f!{3uCe(m238PKw$zXrnQHi}dff1}PB0zjA>_^vE_ANFy%2w>v11wB!NtCh5<0
zLR*&7L9R^1Qh^1`bC6N$xW*LNP-X)Qm>3TW_*GyWk|wZZ8O`;VQ3P9y40FDJX^jbc
zGSO7!=0&=VMCiHDg at bI>WYX!`S5)p_Kl}Qv^9XwhSvC8?{cG$Q|JGZ#zxl?E4`03Z
zb>y{c-+1lX2lx4>D<9s!LY=A;mZ6iIV^xYS-CMhPc7-|8mru?c{ymF_7=IP~_`LG4
zu#cYqV)Fxk at DKO}|4IQYALj*d9}IpP1#Fv=oc~${A^7)H0Ob(Pq0VL~0RD{vrUK%9
zZQ(9nZ;q&d|5SfFDj?R|k{Rg07Z%vZx^t1vd=wE1<RTpz at ITOw7T_KVl++@^5$5n;
z7*1SS9eMfm<S+l|^;ciMbMMa0J1iTzeEIa5bMs4UV^i}(<FncFcw%sb=p6C7zIeVp
z6mRb8r(T`Tj^lv88T_|4a&2rrcD$~ssfln<YfDpGb7QEdBOdO}#s`D~xdiSoaUmih
z*Z_2J;}M%8kOYCQZ<dvI(v1ZLwES3id%*>i16Qz58HKWg5+(cvs?w;?p<qqQ;62IW
zr=}6<72JW_DldcujAwINK#-5{qP(v6{2#-}B>1JgFA`_Gr{KSa0>%X+0v<tLS%6>6
zfGk*mUyK+F$h}G%yUzBpS?IFCb8(U>6PHddTw#d!*=5Gte(>rw1Q;XCxPJGgi*MaI
z&-Fdz-o+1IxdO0}5AR<_K6?Ec^1XL%eea#y-+x!+J8#|i-FI()_{v4(>nijqymfQy
z{uOqktjn%F6?U-78rBOkN1EZ8*EZ*gb{hDx_4P&wfX#0)A7y}2z%zk_0+>M9Jm9~H
z*;xX9k$~sxHNUw0m!|^A0t^173jm=Cf?cb9w1agv6ApD02zR$2ksdbDHwP&Y?-NB3
z>uJFk#t;JY*>GpNzg;N6$sg`W_qQQN0kl9a+)<2m4W)W9gs_6<hT`iJSxlh+`rEQ^
zotfb;-MMw?(xp>dXTbmX%wo1Q3jULY(MV>fKUwUF=15RdqubOOqFDWSQ~UA8);duE
zt>B+<5XPWIM2QHY@|bHHALxMsrEFX&ph2Ojip&pWg{uY$>D`kWMWp~*K<icL9~KIL
zcY;OIoG29(BVs0DBT0T!)Pz+jTa_9Cc^8 at C2AkXr^&oTu_w<tp)DcEE8{l_Rz$b#R
zz&=;4Den{c+yDhAN)C!B1z5l&D;1`fuv}7HV>|--c8vv;+)Py1JMT at nvgi<F$%ziJ
z+w1bFg=<?2FJD^wfB)$>fBeBqKX~uX?|twR^24v)Mt=95o5+v8b{qLI^8W1~ynFNa
z-oO3BcW;{f!PoC1KY9Q5kKViSlMinH?%UV6VdE8Jz~8&Q$!Iv8oz9i%SSyT*VqnzG
zt at +FAlZ=pJkcgol$QujP-}NrUJXN--0D}KW1A@&jv*W7x#|n}mx|#y^OMqmLn5BTF
z3X~CW0SYMoJqo}Aw$Dd;S_irW|NWg!16_zmfq~9O6oF}he5 at NqkPNk92%!|R5l;I~
zV4uQA at F^fHPzqrGK!MS0|7<BXKNP1l;*AS)zxtEc at 4s}Loe@{BUd8xdSlJkvm>V3K
zN*BkH#WC<tj<PF~QT&H#@jwOCwR9e9Y^!T(Ki1Gv*N8M9JzjSlOGx|yIS0^sU2V+~
zh8jit90kY`qxYeJ2$?c18(>W>2^xq%u_BemlvzRnM05AzEQ_bCWxbTRBSr+c01HGF
zu*aE^4^<Xq%q at Kg3uK}Q6fl7TK^8E{Uql=PsKJJdFk_u{kb4#R#+ at Jq>>F{-IPn>Q
zUu;CcFSbp2wjhZC4wN4RS-?5~*19oYh at Eci$GotCE?`CM;_FvW{P_>w{4c-v+JE)E
z*Z$ED-u%<=yz)oiy7%*M-1&nKZi##-@}Gb64nnyp at -r2-*&@vPW8&Edw@=x;Xs&Nw
zS*14+p+kf|S^A`IZcekR9$_K`b0KJl_w60QzZdTDIpC`R2Bdf at fW#MnZo at w|4`;r^
zKLAk6U#5v#@IO!jK_Wn_ptTCfQ2;B*rvMgFW4}@W%p>4mDA3sy>S*k3tMBg+{3C>e
zz&rx}VF8%u<QGLSz$>jhO(_LDTS$EYT!W!x?{tw!Y2@@=@yuM|_uo46&MUHM?)>@l
z1b=21S4Sr2ilZ~>(pWS*)SoJX{Eq&V7OO<S|M3=D`8sHBt!r*a1=KaRYB;DF{2#BY
z!yT5e at Uf!|xF*>*(9 at oZK!Mn>Of=021;&SDi>qt_BTXiiGfZ9ZDWJPxMrCWcmfuU&
zB{^2;01-et1<CT1uqa$$d#RS<Sm2Q>CoLYR1Y|^5%wd>JFi8gy<OfArU=(mHF#JOS
zVL_xy0X2s_GpR}e{jz*zM*+L>zpv;8iw?m8iw?=MykZ_*z-+f53)q!5Gd6@@%w`sr
zQ!xLT4UbU3rl2#*>92nH+FyMC70M_6?Av$P)bl6byv3%HAH8{=H5rV3qmQ+e=>5be
zemfwa;PJ^%eB!r$>p%PL-})_+Pkr(ekA3#hFMsj#^@sOygyJv~Ekve at G4iLBkj;;z
z4F3Xta=bqB?f*6Sx5$s-zp;TlFGru?9}~zX=z at QvfCYcHtAIM<|E2<bE2vS8f3bpk
z+DHvFLV-S5(A5m)Lme=pp-)AhHew5be>`H12nhu|EifP+F;5eHtx&)eftf?tMd}6j
zXkI`luv|$|Aa`|b<PYB3x^VvN<|fYXsoBM~%H({0crr0qAwl04AM6aLI|kBip+s{}
zw5cmhLu;L=fUaYW?HEF+fa8rV7(&PD8jcVWLlGR8Nnn(MPzT7oukQ9{wh9UbG$O>d
z1!aN618pfG^^-J}NL~6gtE^=g5-}59%?!dZ8)Vjj3=FTxMit`)FG3AvhpjJ{kc)?Z
zBJ+xWD4;Azu%7^7gpNs-1=}fLEO<BtL|GsX|9oV?vN9HsL38411bZ92C0(nRRf{Og
z?6?{hOjb(90yeYA#@P9B))-wpInP?Rn`f5pU0D9b_wIiA%U}Nd=Rg10V~>62GoN|n
zkw-qMk57O4(~o at m)4#2cPkr)}{Qnb9wle}cc=E|leDaf at fDVs7@+kyTJpSb`Jp0sF
z4?MpI{9^(c3%CXu5WxQt%X|TTAOA%A#RNhHVD at O)gLuA91$gmK?f(k4fLRDsjsIqh
ze;k4CR{Y`yC;<MA0zGZ at T`hIpEp<?!r?n0ipaPIYUmN&O5GL|jz$>u86an~0Py|o_
z9~nge3y1|-T$CGvr4#uu6gWFyx_5f=zx&DE&CM+hex9gIEs&Z|<VUDc!T9MINKv)b
z+LxeHgGzPUT8}n$9&Kzt*3^EqvF&I>>(Tn=qxDV48=7A{bcCoGE|mV>bQHW&0I~}O
zbgnz=Y*?91P)L;i%$T>AQ`%ISQag=NM8F(ZkxE^=;hsPumNTXiEZ`}~!I0n}g$2mS
z5EP&efy%I)t)=F?m0j(gDEO180L&OU*ky;KFYGN6QDEyejOAnJzg;=`ogw5t%y${Y
zUfNCp2ma~})FUqBvmj;5C1C*rpYaHSET9w_7Km~bb4XUSu(5^hNSH&cIJtRx@&3h?
zuYBbzU;5IQzVL-FeD<-&9)0vtz#n`VBe)tJ+|^@5fDWJh#BZB+;QGj?KZShuGmk#@
znMd(-9rzXhRSF3H5s7vl1ON4P0)E8K{D<S;YkmpDKdUW}hJU&M$bump`&~Z%p+Hw_
zeYZ+S(=nv2;YfSqQ7C|fIvTM55dxuzr3TC#QsbvB-rItRUJ%uwEWibh_Y7)ilrRw<
zG48;)ghNvomWJNCH2?QMdv$gF)co at L@c3+|G#bwhWBm8Ta^2BvD at _@_ at djEpy2ADC
zAzEAyH?$q0t-HSUNPWxUx~9X&8;{mC?LT;U|BHwA(-?Y?B3Wr5lHjn+emsoh!(#D5
zDlDU|hx21hch{0RvI8>ids>J<`v5)KP=IoDmNI)YmWK-dg61NDQ&a;_jRO8DD$y0N
zga9fiz}QS#U`orlP(W9@>uz`5WX*uiD*o*r3fMj`R@#|}{jV;7SwVaN3oeiv3OKSj
zox(c2TJbf4V*vqDSO7_x?I~l=@r%iq$&XnWA1=ZI4u@%3NW`vBcD;?Uz>8&GtoI^K
zaOd38Pv1OkEco2#KL5GTeeSdRfD7&cBODQGZcq>+pAs=+>C>P3l*p$)^_fQ>L4x2H
z{EG_kC}8*(@CWdZuV*U2bAcP=@VE1Sd+<~9zkdEpTOhqI$lea=0+W-UrkEC50~$~P
zoh@~o`TA5S(BA0b9~N{ri%3vN<3fZ+IrfbOVgji<z{yW&i0CMO0Vh8!z$x$pq+WCs
zbBK%p*)g)iPyk=}?Mw52{r$T$3u6DP{UhgpC|T%=WZObXD%Cmv>pS|HU_b{q;6GH?
za`1Tbp}OY7b<Ky4H5@!zfB0C#{uhk`Qbq*@$fL*r?EnP^Q{ka}f~8I at _<#bk6;$@p
zLV;204_VL*5hz4g3V41Z_hgU}V+48uz+*zwxWqg_xG*}rjRJs5R+m;;pcH at zJ_{g%
zE_2^TgzXgQ-%bHpejQ=Mi>x;DI093=k5QHJaTM at Lp?nlwz?^ef07Ky^?^amA at c*(*
z78MqZ6xAG(-U>FtEKQHFGL?;Qtn|VoAW%u%=JCfL|Kb<F1pXZbKJ(enKK8lKJ at V+I
zCW7gpZrFYgFN_P1Jo0Je(MKK;`E~gB!~Pup8upQBkKv!1Pv$(xQy>5G)Hi{o1<W&n
zlmg)2C_w#>ocuoiJ6q~In(L5G#G^nRTA;J}cx(NU)`lad2(X3vJMj)0aEeKgK>=ey
zN{t_MfksE0#RL-7AQFrYS%8%DpGc8;1QbpX5k0q9#t{0)- at QIGHj^!nVgE!jCH&vs
z_#izRfS+b1T9#<sW~>1-Jr32kzId$Z;IXDd$Atnf9;t%@2ag=zyZ<06VBdik_wL=N
zkG%)>?~|VBqlcRtj?w8O6v)L{?KClzpQ;oHeHaCp?20bnY81d81_=bri53zqF&0?w
z27t$Zl#^3gAm=Bq4AZDP$crd~lH%W3z$|fgxFa>XU<V7r32(7!Ka0Isaw>aHJuRTi
z-&F-f20}p!z=BAa%|{|A3m05sK<KXGTV*od85YQ*d7lMp4pmt&p)3$zX{?MQknN50
z<Lt=0xG~GZ#~WMoL~_3R)yIG5cYX&A0QgNFd+c+c`OIex&cUl3^E)VD+5z{$Sitom
z=f9``z+Z!Zb9*Ux)0$_)KQ_OkKn?z at DPY4tjv-wzX8CaJci<f~9Y=OjpriRXmJbv#
zMPM#)Z<~0;niP`+0k)9S1pprJ7#5f#jDo-xG8U*W>{&$I!vg5w1x3p-8YHi*4FBPq
zrwSvJl%o%%3ZcYcU!p+EhT=cmAm at KC(`*jbwd_CIc;IN`i^q_r7mqd^Jl1&NNZo<M
z$MzmLw0HlD`wkp@{)N3S7zOqU1=tT;cl1!>@xwxaq(=c10Zn93fY1k#aI&KQRk}#T
z7#P*G>6p|HXv}<=3<50Rw6p`0CG?0jvGNKUVW>#rDO(!Mzye2vZ7fhlkWIy*Ksv#|
zHB$sw{zifR7-QHR1tK2!Q2{2~@h>0gC}1oww*oGt at H>2QbZ`{lM)!y%VF44KdC$H%
zG&ouw92>$MD!>BFp_$PVi|Sa><(orOcm(WxymNNpi6@@GFaE+8zleP4OJDxVSH8;i
z^Pm46U+|d4Wwr;7Gwd*N_7XQR<1>#wiaZSe!LkQC{J944?=oL<>?;Kb{#)~ldcmdw
zJPO$S2gARq06aus-=_Fi3J42C3#cOKXgc23c(kSdFf2e95EsHJ#s!85futDtZ*{r=
z<Hus8M7qLVNE7NHpbN+jRFh>m1(XkA2u%)#>76+>o&V_83VjyzWq|*#aJq9K&42>H
zFZNH146)(-KX9yR-{E>FAabN(|KYm*hmIdOeEh(nW6$q<@%g>`U)Xox+2@{r?)m3m
zc;SV;d-v|&hrGZZ5GX*)Gh<HC0;5G1eCOD|#?mXL05QNS1vFVe%|IC#Xzontz&(0_
zHH;(091G|Xv;&rdBLc6mMWsAw+uMOwilNPjQ6Q6ydFmh)cN9<-DE at b$z(Cwb{tgNV
z_)V%57(fwJodwoJI)Mwu0z#vX1vmoe0t6Na1qQQlS)BsRp+U@{iQ&Q|KmI7 at P)UAK
z(<AG;IGa7Emqiya^nU&;U;XNrzAWH3`Re0O at B}_M`P}C}Z{p|x69^*d!=nOvWEcGV
ztuA){6Wyy*<Hzt%%*W1u^Mcg`lCTdHF#Nm7j}5;f_``l}@Glg==4aQuW&t{>hy(wP
z$9JVbYs1kt6UDy<g6ex(1^+G_Y6U`8Bji{B?7=@0m3*06L>d&rQy?gWQ6wrrQ)Xre
zQAY|3R>m^)jxiwUC$Fw!0xAAe;`z$3ntmHxbGWhNU|s9pL-l(P*Y7=eeE;G4{YUDJ
z0{adgeSY7;XJ6R&+}{1qKKH^i&p!X$bI(8f+;h)9`|REqp5MRs1r|a<0h-+ycFnR6
zmYuQY%qW06KmgEm0b4-{iK7m128oKW42U4Pu>cB;4GmVHfJre|k)rFua3MS7ODT_o
znI6n02Q$ec6bP^&n~cE%lXTKk0lQKFMG%kT_U=XjRS*vURV|=yg6Aoy%k1!9b0hwU
zSY^TmW~wU%WYoVZ0%HM_8H5F at 2&BEp%%Ryaw-0oT1&A!bx_fr<@h6^m{P8CY|H6dF
zAGa$u5&}7d3ty}<;&;CA1<?)q at b$xEJMmA=gO~8)Myee={B!t20mHw5zgqm`%%0sT
zAZt&33Wyir;~xqL{(}?{TSycEW)H?cEWjz2&}bVzavgrLW&}hRkRyxsP!ZAUSm1jB
zEl>c7bR*3~N=4Kz at -xLA3viGj0u^+{L=P3zuwZQ>duFb9cXRw7++LKS9KA8lf95q|
z|1jJS6~J)6eTN(N9;$o(z|j{D9!D1l3l8)2Fcf&^`F&8}+2{8 at wda{VPe1$2Gr<43
zr=Q;Q%rj3v^YorWFYbc^F)@S&M)HZ#Vv2o#P=FPjD0*~(ZfC|K8d;tl!#ctf)Q|{G
zRU_B~xQ9Sud>A7^Sb$(KjF$6=u%MVN=91vwmlPBj%p{P!Nji~FGhsR6vmgri4gbj)
zv&j3Am<d*WfCAeULDfcbED$Z=;XmYg3Z5>&HK-~AcONi{gb0oWYQJF)Wl?HSTg at S1
z0g3<?pa}RavA}m#Vx*(&c4Q6i<@M=XTeExiJdHfHXU`K)J}K8Ho^<l~6Hg+>1?V7*
z_~MsfL68VF_&+K&4^{kY&dcH7%lvZwTjtl9K<4(=2LILb^_O1=1t@`YS+I_ldYs?Z
z#$#<F0WF{u;6?L)af<so0DJ>PfCZKmLlGdj0Oke20*oR{4R8ha)J|Bi6e3_3A+UhM
zU%CmjYRK#&jTE(6`2^+=IRY}pbLBW4^fxy~zj1x8sT2Hr;0OOq`Frtr%L at nVp51pC
zfdwdn7hdFg>^aW=y)W*0_JuvqJon^NPd~w50 at OeA?9&in&z@(V=E+n0UwE$m=s~4G
zzfho%Vg)CE(^)nWPD%irKk at v8aDjXf8UZ)Z3dS^pT$&gW!vG41U?->;1-O=SDJW3R
zrx9fV_K!z_DiMSQaafRY5)0R`AUe<&8R&xo9t$|ntG1AE#N1 at A+bJO6cjEj7gS})8
z0wO*LI!Gj*Q85;%BFJD4q0u}Rh$0vib4V0H5iP*)icP*N)5GirWh>n2rO}IP6F+ at z
z{TYrM6fS!AdGzmd{PKkiPje6<Pn$gX)KiFPjVGRPq&QqH`8=%Pmw>;W|CaETt8f3v
z`Om%9zXgjQ)CCYLNOQj4 at HdJ7H&>Ux0Dcpr0M0KIXlF)>M}cEiL&!7!#rX{+#WY7&
z)di9lv!JL|3Yj~MI<TryBZ9GjE74IG8Up<0CcBWS*+nP<?IWOfpl@*`wK-eFFZkg4
z($&>r@?SFCvY~zd(I!lwXZIg at Mk(;zfg>**JO%}x+jr=h7Y;nJ=h-Kodgk#b!T-}w
zJh_KI!4v%FD6mH;&>$3OXX-UuZ&>-qQf8w7LBGW*jyM*S4?zLAfJTsDDfd$&>?^0~
z9#IxZeQAINBp31{#q7{vx{yiGp6|0jC{V~Ic+n^z>Od)gIpnh-oQj82v9Qwu;6Fft
zP&DkzK*&=NRSJli<gp+C{wfP3xgaXTrQwqCh!KI at oUwqXsd&^_fNz2XSx_mNf-^-R
z=8*cuY_cw~%y(@@Rywj9^z>qdk+3*j2q8E^5Weh%59nb>0d5=xj0lQ<$^Tla%P2q+
z2MSd2Pm*89J{bNnfh_Y21<d{z{CmmYZ4{vL%|>A11t1>&RSO9Io0$$o{3k$x#$y%{
z!t!aUKY|O~!_*+n3%k^?nM0-vEI~|Al+*xmQF>=^1keQvdubmqk5~*L at svG7h=v+d
z3J?LkAW>5l^$Voem}+XuOE8USx2L%t2YGX5 at ZBqmKe)Gg at Hj4T!}AA^KePAHGhlw-
zp=b9Udj7zX=k_0l0(+j at _mwC1I0`)e<R0{|qkz~#d!9P5_qn<w2k3fc>icjmK0T6$
z0`u%;mX+Tl3ln9QGQ$Pp9^^xpB^X}8MnbRwh at H}O4-1&V0vHe at 1wF_#U{*@mipPRD
zTu>IIXw?@AY-2$jEr4W`(KO&U2~YrAC>-iRPy~^FbU~E at Q4i;Rss+?dP)|W<vKs}&
zBJ%xZmxd$ygm at H?@;sw}xhFz_Jd5x|ouyF(I5=hwq4Lx(E_jMyw795>V0C(k4WVp!
zgav2ki)3MteftkcAa4JDk$wC3?%PjjPMxynQ4}Z!Y$YRtkN-n8_&@Hq`Wg!!hJU;O
z&jnWe`zpW-{_F6EMznyn090q8w?GHMzfS>Sff_<$4gr1>qClWs08a^o&jK-i+C;=D
zpiDyi0<r^5&JnOQnQt0Nm=puah+vE`j{rIlCPfiQ5>2b=xSEY*EoMpqYr5|n&C+We
zS)a<oh3o5MtP*(t${Yh50l!f|ZuTC0`uY8jKlLmW`10dV0)Di>SGf at i@OWy^Q%^yG
z=bwH0*rELtIAx=~<9GqZlv03Q<i(|_A^xUIQ^PAW6{6oK=Ek at o1`Z3*3#f_7;X$e?
zU;$4lE5blhB48I`5m9lSAB6(Sf^sfNhra3pp at 7GNjMD}2L8ZVp7Q}W at 1fmQ2kzNx(
zu2Qv;fHwvbVifodSzr|4s_|GTfL at 4T5t)0U6u@&4FCLE`bFMs?R!>LFAt=vpfLVM*
zM>#rB1gkT{CuZ0XH+pJrczG;mlRK3H0Dr%=HyR6!2ylTgoe{zCZ>e5q|5(D;o&O4c
zKLw^HkURe$t^$Mt03JaLI0`r`s2wL)GGC$se9K2(0sk%aM_U>QdrC$O0snnkBj=y_
zq7h($=8G+BEUtltM#UE(@*`G|=8H9D9OMF}q@>cEUXVJ9P&<Bs6Y8rGa>s*=o<I>K
z`xw14A~L|}iP7A^SWapPDIh#KUD%o{URxh~<I)1v6mMRbxwufEkem3=SD)PTl^qm#
z>Zzx2g!k`#uKvgYY&M3Smeb+!Vsf^^*6-ZhSOK$^rOYeSBY1ghbE9jsqiBSUg$Z;4
zq<|Vwfb_w1rC^pY7~tvT$RLHLP(Z3IN?9miEEq-w<dQ>!sohu*AIzxuilC|sJQe`y
zezS#?0v`ThLD(eJ8xHlFn^08{ss$cG0ijG#7dQ%-A}|WznD`!g%vhj`ASD#Yr-ueJ
zvX8PPKddQ1+<{q91m%_KAyEYL6?SHA%rN&dYhAli&7egM)Mz23=n+_8_=f`E-vj><
ztM;!J{J4|f$G=d(eBSN&_Y+~;tsskkiWi{x4^RN32vP{zcThmmVM>7`M1jbW!2+ry
z1n{Z|0_uQ>kfe#bke1{4$cT%MT6D-V1<=7#W*q)<{#U(bNuQa6pyrU|j?o3Q+j9l^
zHh=<MP>3^?v3EE#U=(2b1i~;PNP&SQ^H>HW)1?^0C at _{z%@$d*bA4liHB4_`UHQh{
zlkZ$zdE?R|TL~_%j4-N>nY~OgT^h?Risae!G*`*7@^5A&x5802J<NfIb4SGc#2hMs
z9OxJVBcOn&hUpQEC5V9U3=tU24h0aB%dlXym|-Lfqk3t{N6-bdWDXCelm#6AF;5qW
zB4B<?l>(*+V1c;<sn`ILjIpw`FCO8{?~D2>z!ZV7Kq(+LlIn<{r(hg$j)3<uo+=TA
zVnhf~K!Z`L1-4VbV*!ewlvfrEdMv=wgXYq3Ju-;VXo_HYs?74x<;mjm#NgaeQUW)1
zbuOH9<mfR6aq6{D446pdd28_R3Vy)9RCDR56N~wi_T2^ly70nt0RmnC__q<Djsl()
zq at J(##nfT;7z=_Spw@<CgodaE!uY2af--3{eymK?BBBt153pi6vyRA-N%^!k4rnWl
z*F**>T(H!*;4^}P>K0lI)OWx&@X9Js1crQIuLFo=29ZfI(T6aPYa~0s6{%#ym0TDu
zFrkrAb-b?ZkXN+AoXPEJruE9?>WLg<tIsS9v9?1N7Mz=BXWu(F*5A0g#{O>FkuK_L
z`*W+4XI3V*h- at rRZY@o0Xx``K!niR);~t}!NvMh0QB0;1o*;jEI|iY^Sc&5?qbx`}
z7C?lebfqOrxkNq{MSK<r1-7#w1_iQ-2p+Mc04#t4aXH(2gDmhV&?5?>itS!Ago0|K
zivQ||)v_Sv#bd<~+GYzSp+Jl%F3!8Mz!X6mMKA)>g#uafiI|0xT!|-)4$h6TKa}N(
zgKUmi9m|L!@FSXrf2rowqP9cY^78BOFBAyk9}2kQPmKa`{(B-`uu=f<3;uNks7(P4
zT0s!O at Gn|GDc~gnG!TmM5B@>BG)t;r|4=Lq3l#984(z};b-=%Za21A2(^)CKGd04$
zI_+SL;1y92Dp*7ayf7U>SrL=y9PI4|bI7K0>3BwA0a9X4qmF7sJ2*j2Km?oIh<2DP
z#B6>q9AShh<4k!4l`&Ihid_<3u!U-KwzM@@zOc+7_X)a_UOvA_WSi~wH#X<4Z_b}v
znIPf~DYlj;HkT$&Esn3vj-V!B!2*u6ND&qwlfz(uDkCLA5h4f+Dyj>#D=kTHCR#vQ
z5E)FzkUZ#8Qs5ED(=-%_Aen>+EJ#E`9tDgAHHttz<p2ddOUc8(uO?6y1EF4z2;xv|
z6DUI{sY(GHWR1{PZ6RfWPl1%$LTL;<hA*M-Pz2~cY`=-2>_j;;HJqIll`86$<w5+C
z8ylJ1#OxY*(6A&z?;fKJ>gucDSNq3Kd+1?@zn=f#|40 at 8n)a&2zo!Dc&0ie&h}Zw}
z5DK&k)U7*GDG+3VRs>mJ06k(5LGe%Gm}1d-(*>SJV5U|ZMRD|tN&BRU&jn!wssTE1
z)x?>*ilz`zlS#v;!XQi|_qo_bHip7oGhwE$h}d}2p)@MM6GoLXx!sAW3ArZw7+a)5
zG>NfAp1we3zy(JKv!Hl7RgCk;LUA+WngOS5`e0MxIazi#dWn5!>k}7N$5{V;c6sc~
z^7zU5%KBVod9u7TQCgfR&5ah&2(y?&P{3yacz^-{7No2<vzUn~3nKYsgehK(Ffs~o
z%_T*^KcOKMfn$N0L#7Bs7X(=l5*1()be5g7Ak*X3STYt2gnEz~3aC*eEFco=*+m`&
zh>nV1Ow1NVV1Znc9hgHN3mCpMm=a^Jm=^UXKW}Qhl*XQ%8OhF$WEV$sC;|f7&H8`{
z%<nMp*Wlj=zcjgP2vk<XOIy<}_?P-mJN(53Hc>4=^CRGQfgmXatx`aGfe|x=lmZ?L
zL<@KnIELkK#y|EyWzt3gSRmEWY807Lu$D21fXitD3vhdbbO7N7X=y0a+<|(^PG5M9
zmM9B8ai`F0<AixcL19j5je=lcmnV#^Q!zU#colCV(F<P?Mw>b at ZDIs5Y8V%w18QQi
zl3AM^gbrv5=KZq%=Hf~PQm_Q-?Bd9|<*}3VBdgQp#qr|&SOFs7O~V2qf|>-|Ss)ak
z9vce$Iu=AS at o+jmfS4liETU*X_*ZdG0bs6D05i#a1a~z{2^NU-!Ue&<lNusO=|yw^
zpV}l5<-0=xVS!M9S|()y4huouViu#0e1|wVr~`UVM+zz7dm%MeOiz^4P7y4OX0b?(
z0!_`$O-&-OfW|$i0v!Gw_yzw;0XhG*?9<8~f&)K26UbKql)wr8b^fQRfE^U at I^w~<
zP(W=S=MJdl(}+_5_!a-mi)b`2Sla~5E|O#489$~SKsZM|?ek^=>9H@=*hY#@n$A4i
z$=$d!zvhN!d?Z1#fW9+dc<M9))9MW8fol&hnmBzSH!|1P6B}m-cT8V+$|5Psf>@IZ
z)9w1%fB+F#f&dY`B~Y>lDouP3)nIM~OF$U>s~L(xV+3?KH9x#GUcdmhu#&G1#5MpD
ziVcAWETBVk7Z#{3Wa<FbfUxyISfC!UQ2>ibo#I|5;329Df)wbj at f4iP>`_2j at bN?l
zQUD at AH;8~4hNM+1!2&EdR26|NTo^o>QkLN}Nv4qD?;HNd%b9>8$fzR7Q1{-^(b3Yv
z{3dxQ{)GY#{K3QD;oqqMtNbzi>%ccp3pf?vkAUz-;8v}mZCXGqAH#ou0ul%%DNKW~
zv4Bcx>5)+)IE^57k%>46m^VNg at 4yostHp4+7G8l7&_NiX)Ns5oY6R^l&m2;t$Q%cB
zL9~}W9iHfHE}PKR?q1}E$)!j-+?|eypcG7knj(0g=7Z(qJ%Kn_Qzndjm#Ob6SXOuw
zm0YCCf>NASAgn^OZD=e+Ln%N6LP^VGSz*M8INHnvJ|RQkGsI?55UhA!nJCPUN^nWl
zL6rqmUkvBL%yt$e%_0gj(M~BK_%~6DD9D2Tq$mQ+9&w7J{epjl;n->jc@)@YCaK9J
zhrh1~pn!?f1$N^UhtmQ^fg}`A7AOrRb0^+923sm>j=Zoy2k|*Yz>hgrOih;4)5Dn=
zku--1{qJr5!|?xc;NNZn>1po`d{+EhEs(GP3Mkrb1d90rykak^74&cl7z->Trhu0+
zIqMO#c at av4dTkjNjbK7($hHYM6Nphlb`SoYA>`Px^Tz2BvyOx*zBqMYiohmx?YyE9
zOk{*_P{LjApPb6D8>b_<F^57a&^MUi{1?+mr62s8um^-yIFlvWhJ&yWXS$rQoltYe
z2vrR}BN&UFWw?RTAq^MM5o`%Ly)d*sU4jef1>z*C3sS(NOlT+ at bGo32FCZ)k=aR;P
zNIqpgLd+=w)dl^jSbr)iEI^C`0Tw9!p at zqf?G}-`%-dPe)!!=;G>vw$04?AsfFdv!
zsJAXY3xxF)fleVq5m0CA8$y|hQhI7AqaK0ml}5476r+%!2LD0J$2<Ik`1dN`Bn#k~
zKsxi*OdzxQEf%CxfK&yDA>^?@903#G^9^bN4TLf#MQY^K^1<Pi8#gtGNfC|<<^s6W
zUJrcyUpe`~zn$$ygy1><uzN=zKEUY$_oBxmHKhhfsP(p)m?DTXxzR+Xm3AVc4pi7{
ziI|QEUV|FJ-2;BJh)St`gzT7)|7ayoa5Xw!h$9mwvK-124m8AV31m5l=m=E@#t5Gd
zspV1jre&%0X7w}sl!=glippS;t^_C`EKsMQn29pZ5eoP$5DFC17#rKnp)~k6Q409B
zP){sOY)91rPOiAdrXYf`Q}16rT_9S(!@s-XpPWDhrwGLFARgu0LS~PNt1j<N6ag$C
z*sHdXOk_n7Kmk1B(L!>(R8<5ln42jl8KDgR-QiyY{wn?hE`ULu>vsIh<Y(}Y*!*XQ
ze{lq=6u{uGQb6OPbuA6Y_yEp-^M5Id7V%l&Q@~?{1%)g$3LTgu;R&!;Q6ex<1tZ_H
zh at 7+Rw1&HJAM>yqBUH^bOo}-m%q$IxZFF+ipj}j>9oYJ0V(I{<u=}i(8bAR5Fp at PP
zt>BAl1U5sNpclq<Ka_5XilY={V<sYW5HTIWlpE+^E(4YlOB0qx)2xo7mV-R$>A4a?
zLe54Zg3kga0xS>;Am%2(0*e=+2z*`8 at 3A22=>lUxG7`cN5*8>0m=YXTQ8i(@z_XY5
z0A)cf{&yvUSwZT0R~3Oz0h|<cmPY|1S`e0C?@%tm6dDwP8baa`n<AJRO3#jD_`Ny&
zb0dx0y63`O#rZX{5Rg0nef*0Fq$<Eg{+%OGOMz`H at QI*`01CKRD5+ua&pE%72$(|%
zjKECd%02dviJjGE{K!}>6JkE1GQ>>?3NQYK;#9!S8@`u`QwQ8o+iaq%o!IVFl~lOf
z#B_w`HH3*2iH>0Xu`K~FVfkkxPAHIo3qf(bKqEN8O;91NAeNGuNn$ApBNC1g8d*)*
z_CTzoC0U~>t8-|4Sf3Owz=(y>+(<r-Yk*Qvy%5JDDu_{pITR7SP{V?lP+%tulF<-u
zGUBtK+p$2n(AVwh2%jSZeO)3u6v0j+82*E{&~^%lB0vk^!jR68ly at c;u!X9MfXb7p
za>^b4KK{2+U_1UL3s!Uf8~$DLSLgrh3IGiU{W=QBv2Pl|WyG*{aDizP#tSxaHjlee
z3e at 2p;|@5HwK6I&!kA)YasIM9_J8vm_r)J}W2(W{8SB+k4YJy!7k{~Pr=S|rk)CX<
z*GVqciwq`02t}btnbIJYZO9MsLQ)SIQ4=G+k08cUkP-Rlgl`~85Gmj|5KuJ*VTlIS
z4zf&h1=DCMZw3-vV4vD#3GV=-C at L0_DuOBtd{0?*fk%M=3qpj9pa6;hfdy>LL7+gD
z1tbMjg2s|#!LKC(W|dL^@53Acx#E~ev{n=WJXIE`B7g##_z+%8|6M*_8BB~7lVgR1
z;a|Y-o&VdkKo$Q-Nr8Dw9*qKK|JZd0{-J=!f*=JvTgX=gE+cFP4-2yWHhIqH7Mm2L
z7#1S<kd}xLVxb{xrMIiuKX$c$^(-GhiTrDyI)1sE-$YHI8k{cJ^~Na$ZZeUcOcd!w
za<M*SFwvij_c<{wP)PQp2vowQw3NwJWrsSb<itThJToc42o?xpAo(^@)n%BHXj0t#
zXiY;)CR!KEl6R9J5=sG$U|d+A%wjtM7>HmjD5xS(A3 at v%rv7H){fH?7p9LYYk%(CC
zU;#t`y&e&K7I+##?WG_KAi}PK)g+#U(rPyf4D3b$d>m0~G#_E?2?Z4YfPV-6JuMK#
zzlK1)J&!>O1dAUy|9ur;6p(9>0$LG7X{cp>wKT4YfT!0Wsg at 5G3;1VDgiyeQdq$?%
z)D$BEM?FJ?OhMQyJhibxM1<^K6K6t}hs!p*$Y~00%<u3?CwA9%sm7qtCTNEmAHh8}
z)esAHvg|t*>2ZPzfC7|2qXqKukO at sONInrloGvhpU{~=DJYEcx(@w-d67c6lgbpUE
z4(xSj9R*zm^PtHuC>Mkdq8g+sgWZBjGmrvYVB2!`#CQg?L1RSW01L!N$SMUgzBvR7
z%uV<h76=hYob~sZA_(_&AqIZ at f}Jd2&U`Hw`npWBpkmAl3TOdQ1QN?qTL=?Qv_QtA
z0Ez(oqX??t-**0cTHx2>- at IL;fH(qPIH(GKRRqU&W&w-{nEiI<gJdg>h6 at ac=<5W-
ztq{Q^c+UH$y{uA243>89u4b+T5o>t<|8addcdE2<YQmgx(*oh%c7(|%L5Z{PRgwk0
zo<w`ostY`gpo##Eph_W>i-!i2{pf<A6qEh*9XL{$zihmK5zcYo#*hy+#AQ%#dL#=?
zJd+6zTDahESk at vX$+hj|0-;okrkb;WURaZ!pd8L)F&*();8CE41*#gvS at u|<=8#%M
zeTG}PDg}%PcEuucM5ti_6sTo^QU<=5yJ1A|4I%ly*+ke;0H;`Op%_|VI3LFr@=pF*
z`^WHa11)_QSWO^j|8v8{W9RKc0T2HH3IwYlwoyP60Wumw=VEbntuf3<LHyHR<^>rS
zg4b|whe>~T8`6g^@HPv#83l|ZJE80O)D~je<ti=7HDW48uGYD~?dqus=Z145d!2d+
zkapAvD!@r%pxeZ$18&d=CZY>e1#m4S2MVcyyfVUgA=jiQL0;IsQlsB|2ag(6H6i}O
z4mwDRL9=YmOu~Z}O9?KpZCn?Qi&8K*0V0T}Fy`%?W!o~*RCbF%1oe(<S&&TtzkwhN
zQocEqjPxZUjs-nCSpXM&-&u5l`3{`_wG;@b3_jji0L5x301MP37GK^dV7Ab&!#@<L
zvcQ(S2Pwe4qd*n^Y(df$sCG5v2e0_N)(${-JmS|yOOK at C-%-Hb7$dl1+c0B1C?R8k
z{uBQyjPOmPDtdiyItXJN?OnugOmoRN3&z^jsU*GeJQ3*TBC$qEuKxMo$rR9CB-F`(
zT-1R{GTeitR7 at 9$gAi90kmz@>xEr&SYOdx`@G)XmMKP<0DTy6rLU6T^6cG)Af1xP`
zj}E?GaAuMQRDB{S3(PuV?JPvFAS#(PTxL}YS)!?{<C%>~w$~5j5(Bw-KZ*d6d!xWM
z77#2o*SIgh0&>T~f}KQgEHDai^=%~arafM$?S$5VHRu%9 at rdgk6*t_pk1}yP1;iGL
ziQDT$;-A|@!C$375dT)^T*bczd=%t51x06JSs`ffYV~h41%rQS4b~eU|FR<h!2|+b
zJsmBGSpM6kzo$JY5W#c-Hyr-<!On4TH@>3rG7CXSZ at b^26n0^dPbIUj%-7)RtS at eY
z^o;a%JWQNvWGp}_aAT^$QG=(cNN<f)EhtPW--r_W_)5f7iTT>*T-VaUaY55<(4owd
zaU}v_)ty9erjhvw1W|<rnoaQ3!FU!%z=Aa;LN*@aJ*T4~vxs)EK>TH8fl$DN1v)~3
zhp<3RBM<G)I&%1TH_=cxABh%#0>T1_77g)@#1K+jD5r`5Enw$=75ux{|AzePRq*eb
zH^<rjh8PPh^R>g;k#TTA at N;h+k#=P+mNbIV3*d_}!rWoQKW2~JxNCoRdqBkg0soP{
z&VgQ>qYgd%#c?oHJI{Lijpu8a$MLaO5)ESc`1EOXgmO1#eQ|Xs|E at RAW((e!jpV-~
z{(}BEa^uuTtiQ{|<4CwCp~}KkhFy&^c1;d+<6<DDO at fSo4x%G8*Wgrx=>?}0j0m_A
zmRty$MszU*>>@Rad={9qtZqVz*}}`Cl4}<0Xd<I5=u1aMGO-YnjzJ30C=^f at R4D)v
zYFMyC9RTlcKn~zx0pgHvH;RAx7$_hrK(zonI-vl<_r)VtQ!Pr#2Nd`i{09zyj{@M|
zy4?Y`3HXNvtq?(zzdI;k;~@NYc%1?vvmiKTTbqJhKrc8P8dl8^>g{Yr at B&OQb!udQ
zn1Cl$qsTtkj&A$1&g^kWuDNkKsOAP9ZRbvPmKWazdraO>*T+iWJqPuIyGNY`bw_~R
z!gQY<;_^g8T~6XCi-GP~s7quUM^GZ3e*q&NMhD at 7y4#``)JEEs2&NGprVj9$WtWN{
zGMXPwE+CX1VIu`t!17H at BS!>QM6n`Ap27t=nLQTp;=^>ob`~fF`aS%M&BK`=>Nbbk
z;a_Od-{V5ExC2fL_!OY1Bf2a8+2#|JV5pz+&empjpf`elRv$VRIQ&110 at e{`SGD=Y
z+V at 1;<b#ah9&t85H%5oPF1+1s0(io`ok5ET%y1f`FWeE$O%2-JQ`I=$U>1)lelXV2
z(5V2Ak^y_n9sa-RjmEW5YL3_THG^c|`2%kI>3TZ)iGe7mAU=xEmnt<JDSRU;K!<>8
z at N6VM5(^Q6o`MCMf_9Pfl<^M6s7E5{oR3&5^n^6;$WkE!rys)tOe1QXOcyv7BqP}B
zVkyZhN{t{39-<C*P(aWw636%tiaG+u0wtP7qC&U>m}Dpd!#}b8x>{kO6-_R+!ko|c
z7LM+wb`EeADBu-8Xy>C5A?WRL9|V8Ry<>s-!XT4Z44=;CaW?^MNX!Q at vnSNu?!?gL
zK4s_W9faJ++;@?KM(?N_VpoS-LoZjSjNB``-vqu0Uy4n6+ocIp&`EbY%&kiB3-)!l
z`%l|?cRL5dRXX5bdyH at jLh0af!SsUJNI_ at 8QWE6ptSVzrNI_wq)MjH8Sz&59MF(`4
zZXJrWt=SV6(9sDCXz*kXz)U$liwGSO^TP?0!s1ABMJ*!s at 34*>!E*D6px%wKAQ|q3
z0_;-`>VjR3qL>f(NY(T8C{Rm;-6((|1Sy~Z$lnQm9dBNXe7Jz|<AFaw0kl9B|9<~(
zkOk%fI3vFX|DHy`7uHyiyBcnT at B`ugU*9`FdBq)u&IqxOsR6br6nE^~O$`WlGKE)w
zV$C-VJ`M2E(@McN+$}oDldkp_gtyW0>!h=-xkkD>S`m4-N=g4({o?YC&`QEbIR{K9
zq81$;YPe8C1P1exp3|B=uSm%++Y=TbxmXW<4c4sy5jexGyHke4_$<)Ie~$%Fz_9=d
zAkcxqlJuU;vv_Veu{fMC7Qinf0_Kp35CO#Ey<)|gv*X)E=mJk2XqZTYMcohq3YZx3
zgICc7<_KFjNV0N><^{wZ7W})D-!=K}#J>eOIsDrU`GITI1TydkuM+3q<^qc at u!$)C
zP!!{ZdA`A`orexT{BaFzLHGfFBnUzWKOZF3lh!fIyV2;AeMfipdN*o)!5}^VYaMX+
zEqXiKd=Wm{TUDGZPy;ab4-L{Bp0pA8+Etnxonj3zrMaWkm$v4Pz*jb=_&==A2;~Cr
z&3-dNhwXYn<53!w^|KP5bL|nq+-Irch7=U3YK3YyrP@}ino~y5!sc3=i-}%(Inf28
z2y`F}y1-a~T{K;c&6Grp1uUX<ELa*zELD;?2<FJ|$^sBBL>TB%y9o0}SRh33Sb#6=
z;U5<8!A><m1beDqK_a5!0(cZ4JS!0)!0+`o`W=pdKZt)9?YANSJMrJz+#r+BSpg74
zzTVe>AEi+9ihJsSp*P|koA`g(<{-$q2ZVOkVFrl!P_&bftDf!RtJYu}zz4pUc;ZeB
zZ$YKtzFPIhKhHsXkHn_Dli8ivfYV`B5Z)|e9 at 8#YjiFg2&93}<gTn9DKFeOLu{`w+
zd*9Bz0dD+Xn!H0hF6=jE_t<P0jpkOH?;z<3B|?w|aj$q)^ny0>NNWRStHuI!0W9z)
zV`vK-ea*&#Ax6sk^O596?gxYgJ_UpYLV>uNMu|lzFp`7?%ax?DfavZ{T~I}`5J6mq
z01=b|ut166K62-cSXN#*R1^XD-v<5w1+aD;^6kdqzlH)1|FxYj8Y6NDw_KQe8oY4`
zbT@&c&rbyS2sfyk<rA=n<qyrD+v$toN$%L>zN~XPoG}(u3W_Bm4qwgemcUgMih+$6
z9opTY4Mh3<2xxa;yO}7N6WJQSi?k3 at z@7~LlYUBoJ58<IIU=O+eKC)E`VQR>D?h&H
z)C)DtGNj0aGXw`pLr-lG!Lh)y5 at f3>Uge&$J!^2Va&Dsly$t9AF^vK&ut8z4fElW0
z8ZjcQf+!2vIfXDra;gwz7cGKDfCaPV*j!m|kcHv+;&2?Vq(&W>r@)J55upoI9S94|
zUIN(IOAhcn{dmz>kYwm~#eWU*d1~NS`=_e7^&sVM?VbOq09OlV8bPkw3-2X at x7$LF
z0uF?pFR<Ma0GZ(2pe{$Q7(zsN+R204jUH}t6#M6%{FU8bKXBu_7;5=|;ea9tDh2PJ
zPxQW^4|qPs0A>ffLERnKt<6o65Haxq+|<~hQqSH%PuLs&8w=~z+$Xj)5p7dZjszLu
z-UDw*%~6R+i|7<4`>pcB+L>Sq&SQZ(_*Py>IM-$Iv}~_E(kl|}YnKvMzs(00I7NVI
zWQqU>0bSrt%+t}4m`1Qby#tvZS;;C3asx_-eg;TR42D_0GdTzyBGX7QLPO$gNd!9J
zAdtwG)Sl{sOsp at X83c%6)G&+45dmEwE`!E|jR?OM|4 at LSQw{!iB45F88(!pEW3}2Z
z*-^moUj at H1!monx^TM_%#v7KtOK7MDmU4Erb5aTBF?GN>*HAYxzz)y&@$Db=6U7rm
z6s!EjYkWyL2?LCfd%m6bL#eG2B%{3(XU2f8;K6PPv=e(9&Ue7Ofu(`6H}K;`XZ0~y
zd&kG<=Ne`BE}|Nm8l4Cunj3{CCjKrqPO4prAT03IfhaO#fw=ji?5J^-Jc}gXz1|{e
zuN&xQ2*5TLICIFFH=zK!fB_dW{zdGfZk?OQ=2 at WtQcm>^A!+7XglIW5r7)VUvH%JQ
z3yMfI$b$KD%&`C>?9Kvp4T41QSRl!C9EaT%fd!fr|5DW-ENs|G0So5Xbr<{x@?W^g
z!N{jm2iyc-58emy#(fR=d8)RD9O;JkK46b$=V^qto=#5!?x#jt1o^d4uR*?m-xv2b
z;IbW_YLH8^!z^<-hZSS=K8rB;T3_*YA}i*DAa|3-yc=dMsnqRwus+^B>>uqT<?4?s
zvm4l9)0-dy|7zdbdjmR`j5k(81XIEM2tjq=Sb%QTP?$POR(vA$Csx|(m3(V;YcoZC
zD1}Im^td^52t~ksA|x|mgaSSbWSFqfp(}?(Wu$yDVJr{|2n#Z-of4%03s_37x<Dvk
zEPw(trU+CQR9WEE0jXqF2c`==yGV^9g1vBot7Cyhlk5r|f=|&VzaISN)%xk(hvA=J
zZ;&S3dv$Tuxe#71I0%03ofTv^LHy%60 at 2_Z4%$I}sHYR-$06U0qJW9+8SOP__n;n#
zT#4oEyTiPH13Z8+V{a$m9o|4A^YNGljM%v?TcR9@{Tl<be1!btE+2Ai$HRT9eEbfk
z at B*LVeJ%ag_8x*<umMeu2+nY=sskHMskSITz61m`BX8+HFEZ at 0z?6dalj;ac3S7PF
z?r!OHV;Y9^{woEzfd!@!nDL_Xw1on~f at qfv{t_1SGF5)3A`ljsIb;;@%^{BkWwD50
z0e*o~2RO)19n`SE%Z3XPBtH%jf|#$l-+9^xU)dSbv4DnSfgP3Z>L?HdKlkqSnwuK%
zyF=LB1i=r&74z6XM7c43+AT0{*UmO<9x;2I2;d)rcK7}*IO9NKn70$&hZaBt>H>Ji
zrpicQdB`AD1+P8}T)YXxfuX{Oj~rzRHzQbe{xF|({OGaccE9s#b6Mpo-^>$8!RH4b
zK23aHRTuPBm4f{gHR?b*_4Fw7T{Ah9Gz6`=c-zslLlMw7Va4RqL&p?We<G#L(_oSq
zlP4J$!!T7?U=#D$OD=RkFX%{Zou_SzK*B_&WbaNz;Ip8r2)3I;m`0J=VnlOxUX7D_
z2arN?%8mux5Xf>hA*vCiR>VBz-yHut!Otrm{?%00BgHEO5+Lc=Lw>!+Af<ryf9X)%
z9nn#~TJS4y?_h5?qNX+6O_;?U at 1Wg~@6P|Oj#h_x_wjs+9q(1B2kd;$bk{S##;Os+
zLJnVm>P-z+;0fB966PMVAQ=v9!}$@JHg9tH2&08}%E3d2k>Kmf4hZ52jL^aL!VyGf
z*SoLjzL(OEcO_i%AM&278bJ)Fpk2hzsDG5|vJ(00cs1&tUgmdhihu--6+vlnxHpc&
zC_r-rH at cUB>D;!OMAk9bFg->m*(6CFBkZp!5B-0Yor!i_$B{%o!xVOOqZjmw#zp`H
zNJ1h_ZI&!svgUZk<MH_a|6y)qROPE)2x<C+o(qizNcu!%MrP%E^@t+!kOdL}UdV~S
zD!>b6MSukU`B(7Cb+PRbW%9ql- at dM8vQ!Wo6WXoQuwRThp#qS-BlmJ!A&@dkzo=QX
z(SBq7`}v=u;75E5WP9EDd*V%sg03i*@ou2htW6(z_;>7_f{5_&AHoYy!t=XFpgv at 6
z&aAcHYX{zOzO7!>sNqSd;p9yfh~IEN0(qr756WJ|%f|)kyr{}^RxO`d&%vUFIM3k=
z(=AvI?RBwSEiP92 at vUFWZ%#RMx(gL-3n7wMQGpX#KC(DwTAHW!apRJ1)&_cBQ{0!=
zJ)<=xz}*mWG?gCB3M_$m9BVn6r#?@(JbBwEQk8RQC4omBHS))&IB at 65XK_Yp@cb(U
z@((JIId+YMIR8udhy?xz{QT)(f#?)T0<8*S!&*DntqPcTO%<dBydWcZL>3{i at D{@c
z=krU?dHUKCIHGjf)^YSs^0V0HfAh25W74xOZun0jP`h at qAZ{1(ue%!4J~M))0q0pf
zy}1vRs at 6fi4fW=HX-KLe<C>HhYFiT#y>cFgoAdL<Vm=pqh6vY;;SJT79ld9ZX#>uM
z56mXB#ZJuTsAI{GOs4bh2SY4X8d6iMvP~iEQUU)a{#_)p at NZG7)cqYK;JS}H__Waz
zGwmsXP(hIZa`4lc^nku{Sb3FzRG=pk=R>(u0z6^Ti6Bqj;i#!r0;r%!falDsI(Ux?
z)FTQNa26*AasK_sul`fu at TrggBrnh}`m6A-pTVd91;2dy_b;DP1x#^l2!ULHI(WYo
zf+dhbNW!;^mi!y*4gLrD^{9WqxA?FkzyB|dYf^oC(bfVj`Ta*^XQs6 at xFC3*5#AZ0
z<$QX6Xz#v_IZvn;?Q3U}Mvct%<t0%(UqtmJJZDI)a~@`Pn6P#*uRLET_M8tu=J90q
z0;~&vfP>>%oKMgQKikP<mmJno!-f!SisBmXs7k<3`Cz73H*{;_Mf1H#z at slWngO`D
zy+RAz-yxudo69AOdp(`3JfLic1av^vZ%KeBsp<$e4k*<5JDCM6flxt_0LKn;1R<x;
z0wl1ef<Nz8K?=bt;Hp_Bb||VTA{|Hq>nbSsN5sxTOZ!-B$n6CXvF%cFkzXdmlmGcn
zx5)b?o1)lxq`kskm#!Pe#xAIh^KTy?{K?z{g7$40Yj2aGUMBhK3J0A|COPjoA3UFN
zXqwN8;(88(oLooe6JgAef}EZ+g}0zac*l8NM|@Hr{w#*$2^er>{OEi*o(h&gNf!Dg
zD5#Y~(L(4ha!{8MstQ)|k5b9NONF{?lz6_!#d5*FxqIA!ZfgZ)`YR>C;(E2XUM=B2
zxV>E7Ne-*~z{?WgbdvG_Ngb?E4kGahJFNurL~==h6Pdr!LF7Jy_Ag(*W&O){oWF?#
zq=F_9P%_IMwYebDfjkoF0NS%FUD83QKtk{x5SBnA1n;a-K3D$hxh2L6<mX!(v`_N$
zev&*Krp8D0PDA)y`wvZP)G<HG0e+{+oN?ZSuhBm2O*D4=F~q`xsQ?xc;nkckmR=60
zb}6G&gcXovgYz~vpW!@_nZq>2d6U*xGrv%`ev3B;usQ&rcf#L2^I`Fv7hmCDJD!j=
z=Ho^M7T2Z_stV$7u7X;YOqF#x&Y6E832f%05a)A!PyGL^1bna4<;CI(i2rL6xV>7Y
z1R@<=a%wZrtK6ssFhVa#z+T8%z!KotSx#Q_;hR5k=FZn|;lCw-3OI{-M<T!xH7cN3
zuBPZWRKPeB;~Y*0(LrMRTKmgM``<(Ukj54KB;=a;Twy+-g;@9>gctc6=2w-KvWqVv
zzlG)>&tGCAg!!*Q9!p>RJfR+BoUh~;?b!pRk}XsZ$6I=bREB!3;65RdI4NRm_<4C1
zMf;5N5WWBoS8fl-iq#3;PpS__MDmF!Jv{FR&iHZ{{N0VKf6!Nc=g1Ps>$(<F2ucUV
zgB4 at u!h~bp;x(JX{&*n+q)`0aV!n|DRu>Cszgo@#i`^2qS|Wj)%f;*Ki at U)6%>@~O
zlR7!R!ACZ8Snb>UE1lYT&yk(#4*94N*8<K0tpvX1m`?j5StF at H=g;m^0S7T}+M%j~
zk`7V at stzQCHWx6k#Fs!jccB6{5fFk^;2`{4<nKyXh-$xK{&$`8hV5qlHs|X*@r<m>
z|NISJ;9jUHI!j;UyxTjxzd?Hj0B}2Ohi*8W+84y?5bz7_A%g8qAv`>njnVnYHa4Pt
zbv0smLwMFDRtL{T_&|_(+#d!8<NjdWYjAot0=(lzUU`R43jV=zm3+u4#XiYIMLO8Z
z2&h16wMPn at 6n}I5LjY&pmUC}EBY`C`U_JxO1=s0?L?QmS61bEc=2wA82aB840twt+
zE~*4%ihNk at rUV{zF0Cbyhfi_rnvZ5?n;_4h-Il<QA32oyu}uWd1-n)7qx(f+imD1+
zBSU+(r}c#4Vv0HygeiKD3P73=B(Tf*tT8{xuePL{>cQBupR&REDyt0moxgH*;8e0s
ze%(q8vW9I#eWruQhkK3O#0*Rhk`eiB>`i+IeXjUlTLSXGtU~Y~@~_c;-P?%g!?7W9
zCQ-%eQOEX%<SpU7hUX{!AviugTSM>cIN<O4+KB?CNGv0iH9!TF53VEDRgg6`5|A<D
zaP#pw$DIT7KP52HYpN5Vs}Y*brb-7hk$<lBbOGkmC32WeSTD7nN(ce-zd9oEKO~@Z
zaDQD=0EadEymC}P3Mg4%O9F9ZIj5H2a0IiC9ege-XeID{Bmzr7ol+GDst61m(aS1u
zI{3#=AHaYA^bu^U08x+#oDnD%lK(Q{@-Vg~9qn;7tvQLdr1;-<Y-(Unw#(iC|F&YW
zq8-$g1~>X}Du_>-{4M8m9bsRQKTQ7J17|lyKS#qbv~r at 2S%wW%-Li93m|y#cbQcx*
z6*g7LcJ>CxZikbhzU4er>=2RMTy1%KBB~SQiSXm&-XL*wdiFaZfk+eseyx8$UTAne
zOQZ^-=uk~9c at 9P))zM%$7Di)^H8)1%v9w^248jtH7AEi?Os5l7_+`O*GM@?3LY2UU
z^1^hrn1RcsaJ8Ie3ZO22eI;ZHumm`}Irtw&s7m1Z4Tm`2aAbKa0iU_)M9 at kgy%1Rd
zAOYdi(@&qCP{Gep7i_42PN^z|QZj$}_aB6R{8=h6n9A751$=1<n5ZVdd7fo#%Y2BM
z&b%c*q*WVJZO at MURYYAMDQWM8Kg<udpTx$yl1<vXq$S!X?ah4C{#GvyCh&^s8chq-
zF$2PWX^+r3C-P&Jqahj0uMQ{3U->^S20j9KrG3MBGxNANOonF+=N+hiSaERDH}ai!
zam0rkndEPag;IvWU*l{{HC+)UhW%2>O{57h6kd?PXoMCx=NUOj5985 at wY4#woCC-&
z{)Ysd0wNtK3&8)2;QuQ4j|5hW=_OcB(SmR>yAHg*T#yb at 0;s at +z}ve^>H>}_e?bCK
z8c++U9Qe+t<v>jYYbrnpR)MSIU%zJu?fE~zpHwdwA%qrCLH3Kdf72>pPR|E1C^dX~
z2X$NWw-U&(pX5&ouyDBMXRRQvka<@f5ve4q18AT8Z<)`!CBJF!s at 6US+7t4L`8u~U
zXs at 8}{r+$~Fh6E#)bL}LAo?L{iOd$-SBe&jdYI`PYICx-Yeth=lkPC^j_ at r}&0(%0
z_DP3><Nh|<4;-DMl!_3-XSASnkhbbnc|qs}PWuDi at tW&S2|)YdXavOnkicLt^lLQK
zcO-%HaY$e?IUjFG0P=?xCd=7mIVUfigQYN$1eRcp|2G$;hWYEO#hpOQbou&net*4u
zyj?XCh!n6Z3m^gT_4~Uv5x64eT2&B<pymR-`SI~DpPp=rtO9lrqIbF`gkQgBa}7Kr
z2PU*b1sYgI1&HEv{BOwL?aUIfVLtU~kl**VbUw$F#@<(M7v{IA!D~Li?@#m3ZzJYo
za=3-0r9D&bt<Q15_bJ91 at Y&%p^F2Zn!vmtdFkiZ*vrYTbnXJ(@Dp}Q at 9pzN977&n+
z1BLddgCsfJJ~%nsKkjkOu+QS~6luH!t01yT`Q`c}*7Cye=%k<N;G{Qz|0iO8MU}&b
z1R@=f5nw$OpYWgg&sTma{;NX97b*Um{P177K<NOgt0D+H1oOpzAUi}|Kt|A7SS<vl
zg9Yh8xYU=EE3g!<ms4=NnuQh?Z*DH0a7W4rm+$T_pC7JW3)l#y1gwIMM35?=W%@&a
zN&)=os|QrzjPUcf at 9;$y0#~%~x9{Hn{LR}2?|%7KXjQNs{LTE}r)pcre6I32+_a*|
zUuNDM^DEnnnK7$nq8dlEA%SE*3+EAbX|t+rX-}NjC|BG(V&*dxuYG+W=6920nw(j#
zO#A74$u8;^?Qzu6ldrV5yQq;r_%8_*oDR-S`(P&I970+J^B{K1_HKRLZ=-#;uGT1w
z(7G;a`j8@=5l+tz5LAHDASIAlAR9+pMyM+U;6FGU42k*?_#^5o9q5((Ck4QNFpXSL
zUC{0-0RB4#6#j<<g7eA<tL{rlATq)X@*7CNcu-Qf08g*M3cP*2dVhcQ<(un|99I7J
zmgC5gK&Jvo{_)Xl$0L1LQH1c34P^ldSOsK+KdWk}9VE(URnP^g1#Z%@3U>0}oZlvY
zNfyEXUF285Pi}8;-d{3zz#vwB#v8RBPKbM&e7B$u=yqWn?w&cWxDUk4-wOC<KBG7U
z{1_f6`>^o8?!eZqsD}AxqbXtE<nOK1{&X<5=b^AY4je)L-Y}S7e7;k_K88o}zwbq4
z0cC_25DHpL7JS%B**`knJ3QeE`434VCw<C_sE$<{gOos+ADU5=z3NuE{#6NI*D&9}
z_H at R_?8p6Jfx-oaHyWLfg~$b?NC)ThsbC9~DIlu=H-)kaa0*z>&yj#rfU-cOfSbyH
zRB(SqjUbr++Y)&HaP?gA;qeC0Df;kq^YQ8Co98>~Vyl3?GsvIFbnxx-9Uu7d;~QHe
zT|)>d2MJ+a4yYibeJ<44Umrzt<cILd|Baa6mCQ{`hYz<BF!S;MkUtI)=3YN(K{ryx
zSdQ#{b at -*MZ3^2A_;&a*`SSTIO`yfRWy^dFznQ-?;G6l7U$n2xC)xwiUNtZL7ka~q
z7svE=KwoIIP$KzJe{_gCia^%G`??Eibzvcp5lA1<-hll3M?DNxELfjP0<}Ao62PaC
z1!$J`RRTx1w$#G(g<!sdzmZh{d>`;CML_bO#h_|oIHoR8X)v5f4r9_mTLnbemjyDe
zFX)kWRY1r=E=acL0?d>GsE)$|g$wE=kXZmD^zL4879bHIfp>T0g$us*{{HgIH&>Rx
zr+2RbhFu$H&-bAPso<OUcLmRP$iymeQrOT!D+ebC<dC%YBFXO#f3ZDvbf07q=0Dq{
zP`7qUOFuKV18V2fGD+q`evMu6Ou1lwZr9r0L}6PSIxX|p1AdgZYs{D1shgxs4lqBU
z#?F at 2p`8+a^%=H at bzi|B2^0|XaXwZ-)k4SlmibBq4NQKn8)!dsK*_LE2*>?BVm_RQ
z at Wu1=Edl!<)- at 533;HUGCC{vdM{Ob8KO6Q-*mqM%5)kc+1ya=ai<P7xH9&qt<WK%v
z0+aL6Oe%<6pmcCvo1&!(u;<AtK%8Hx5C)wDY6^(bSXBTZ3#0@@^?Q{A!FH}!BmyL0
z at TSqK03m$!c>N*p$G5jeCj=CsTyU?{Pz at 4`kVBUp at JpDbb^gok$KZXrbCz3L((SWw
z-I_m=HYOH|_Pb1x>Vj*H8VVXd)O-Re&^;yqBhR<HR^~eMHD({3%u?Ql$<LS%^MNO1
z%zVhd!F;;t127it&3uu+(!M{Mk^)-Vvu>k(7w{X-*JzI;!WWGSNDayk^~>If?;e~C
z_Ay8mj{o*cd&K!8e15cyqGg&A;LZ4!s(^Gs1piVXhbhWh7%$|axYr+mkU+FX*DcVQ
zqCc;i0K)%Zg=~S)$qxRL1<r+50`uv3QK2fhv;FRiZl(a+{wxISf{ODe!arQO9DZ}N
zthE4yzj7i-JCrK0M!tG;-JuErIiwa?SPp5E%05EfO<+U8dkT=5(Pa-a!2Be?;{W<h
zUJm9a|2p&O<dm>qs^e}SO~+&h?Zy0<He?~hOpYdy<E8nWwvA71o6J`;Qxe#W`7UxH
ze=?tG0g+#`lx6d%GQY(9NC8Ctf|mK6&k2*$2K+XXL+Ld@@&@96;2 at X}`CCW at 3i!P*
z4o?kBpctOxo)STak`ZeBFD~ftq(@)KTV^M{GoW-3O(FCDw13tMAcX$ez&JY_?BIV$
zpe+HY0*LvP044rc{#ydd1xDq6l*8(aUd+zhMvz>PERbAKt$f`Y)s=UM|4IZ=2yc|b
z<buj}B?3#pj)+Y0HsB9XGIuIq{aBDf`1(B?%>pX$Zd!9K-PD)KZ at 1G%b@;zd{?70?
zQ~0~?^J8^_?P9*q6gKmH53O$Fi%DG#>uOTHbaghEANNwJpJ|`(nC~I^b at I<NIa8Uh
zu&<cE$^5hNEMop7-A-XXb#8U|yJLRCe9=45lAm?H-!9P0{xQry+Y9oW|E~^CiV9d5
zlmH$1yDESbpv^Va!bTaWkR3{#^o~z^QUP+HSUBmOoEG%@edN$L&dSS~K*=C1kR%W#
zaPnX6Aa#Vsa31ncR1plP<6)7&bj(J8yFf|-r4c&uURbyw?FF>k0qg}B4>wCB;4FXy
z9$F(*n?kM#K0MvRa9|arBXV8f0vRFTi)@W3lXt>N0TpEVOa+}aa?5|;Z<UeX at gMRx
z{O?*fCFaNGZ>9#w&m1P?Pv+-Q+P+t|Wqz5!*Jv&+{L64S#qBueC-bwbshD4yJd1O6
zIK%B at _@mXc753%x3+VQYXCMr}OWjiB(&53nJK+C*=C}M$w(raB2>FiV|K3smi$lVG
z7x_2IFF6QV1?OU;1V9VK|HI?cLv*2B&|`fRI6OW9$0w&JJ#qfD*B8)5PmlyY!~f5e
zz^Z~Fyf_~v09V$k0%{4Yn4f!L>=7>%@Pq%Q3b<X(Z!hQUh(Z2H1d9Kvg=15|iNGBp
zTu_?`utRH!AR43!_$A2SkQdlKXq%<(n)=#S#MA<Y%jX=Zumv*z*KE&j=Tqw38vIMx
zZ=@mGr`z#;7F<Q>m^{~H`a<*P9>3Q(ZoK#(2D0KS&9NIB%y+bp`$5XRQ4RTjJM63B
z6Jg(O-vOU%>21RQp7`&^&PI9Lx}A>IHU8&2$$T&NBH$DA)9RT21pkfrzjsK_^HeDy
z`2WShvGHpE=!^ZMy~AVTKN3(OpaPi%%oh%hU^~}i7Fz2|;i%vgA;5olj|H;-d6EBv
zs0GA%ED-(&Wc<%6U{R}J&qCC_U_5`<2&xiL6%7BoLb&M#wGyxjNCf6TLU_8RMqV1u
z1)U>`>Nv<>w7|w0y9NfKzEy$O-c#;&mcM)mJES|2c}R<$e;4_K{A*=z4))(_dLj6~
zMt<E`-7ud61x)@8=9ha;;=T;%&I{Hvl%;J*{?m+>hVbKt4&7<1;r6Z3h1T%6&eiPw
zR##t*ePdXfJoY@<*fjGU`5`}z{r?yFH`v~O*)klHV}uHNUo_62cl=57UlOSN|HIxP
zcxCJ#IuRTo0jVHxbh3YV3=Tk$e+U0h#DC=ioRD~*{$GxVjbOIGG$qG^|3>os+69|%
zV_PW!(*NWxK+Xcu|7Rka5jdtmUte8-Yj_ at QA8|frq`A5gq!hrn+zwTDXy!%`SG>?e
zZ3jh1XmNKrw+gtT0t~+s!MX}cf$UC^wBWt7r(16#bIti`5=7>RRu12PcmsGg3;c)t
zu6$##O^++ at dOr2}4DNFV|2xB<%ulydn6I#}yN%**r1Izl-Ha509_B;y!u%k==5;lu
zEB<>*)8lH<*x8)hvFAzhM at zE|iDhFy$)6^l_NI2V6za8;m7odlp3K^~LbiIgJbz1d
z){66Ccv$RYeoElg!7*skLE%5eugOoqUqj{ptNlYV!amlBAKyPR^9%pm;2-fnINxji
zKRLkuKOB&X;A{Yy|2YK_Wv_O at JO~lAFXPZ_vv74BRL%d3S&=}!FUCWmTp0n1DIlr9
zE(jwO7Km$C3&*}dc^?T_1(^uQ1?~>v`Efh+NVkRH8iA|lDC#tYHVe4d%tG)@XYJbW
zu(NFDbA|TCHu<S}#s8RI!}inXj0V2k4$S8XqV#q)3{T5^Y))`r7c)P at K9S!e>+oNw
zciQIdS38H+==12_E8lfh<A0Lh!C%bx0FS!*h5VXfs3 at DcyZG;Ry{@%^;{ui|?{pFf
z&UcZ#hWCc^j{jnQMUxR~<y)k|XF>uB{$YM#{vY-ZxW3}LcL4dnI5^sCVDm!>K=BKr
z=Ix)TDDLWCn}5hJ;DvBQB!f_adY<F4`7h4LASjDE1;J3LI{%R0{BQ4w;Wo*<DaI*)
zLFjs4jP47-^OFLg`dT3zg at 6m;?1<i6OcNVk2q9PkRsrMF+(ZM=Lc;HGWwW^4SrAX+
U(k%w%kzD0TM1B|x*VYmJAAWV_oB#j-

diff --git a/kernels/compiler_obread.cl b/kernels/compiler_obread.cl
deleted file mode 100644
index 14658d9..0000000
--- a/kernels/compiler_obread.cl
+++ /dev/null
@@ -1,8 +0,0 @@
-__kernel void
-compiler_obread(__global uint *src, __global uint *dst)
-{
-  int id = (int)get_global_id(0);
-  const int to =  __gen_ocl_obread(src+id);
-  dst[id] = to;
-}
-
diff --git a/kernels/compiler_obwrite.cl b/kernels/compiler_obwrite.cl
deleted file mode 100644
index 50e55a1..0000000
--- a/kernels/compiler_obwrite.cl
+++ /dev/null
@@ -1,8 +0,0 @@
-__kernel void
-compiler_obwrite(__global uint *src, __global uint *dst)
-{
-  int id = (int)get_global_id(0);
-  const int to =  src[id];
-  __gen_ocl_obwrite(dst+id,to);
-}
-
diff --git a/kernels/compiler_preprocessor_macros.cl b/kernels/compiler_preprocessor_macros.cl
deleted file mode 100644
index 0f23b3f..0000000
--- a/kernels/compiler_preprocessor_macros.cl
+++ /dev/null
@@ -1,13 +0,0 @@
-/* test case for OpenCL 1.1 Preprocessor Directives & Macros (section 6.9) */
-__kernel_exec(1, float4) void compiler_preprocessor_macros()
-{
-#pragma OPENCL FP_CONTRACT ON
-#pragma OPENCL FP_CONTRACT OFF
-#pragma OPENCL FP_CONTRACT DEFAULT
-  int i = __OPENCL_VERSION__;
-  i = __CL_VERSION_1_0__;
-  i = __CL_VERSION_1_1__;
-  i = __ENDIAN_LITTLE__;
-  i = __IMAGE_SUPPORT__;
-  i = __FAST_RELAXED_MATH__;
-}
diff --git a/kernels/compiler_private_data_overflow.cl b/kernels/compiler_private_data_overflow.cl
deleted file mode 100644
index d0f557d..0000000
--- a/kernels/compiler_private_data_overflow.cl
+++ /dev/null
@@ -1,10 +0,0 @@
-kernel void compiler_private_data_overflow( __global int4 *output )
-{
-	int4 data[65];
-	for( int i=0; i<65; ++i )
-	{
-		data[i] = (int4)i;
-	}
-	if( get_global_id(0) == 1 )
-		*output = data[0];
-}
diff --git a/kernels/compiler_radians.cl b/kernels/compiler_radians.cl
deleted file mode 100644
index 1f79481..0000000
--- a/kernels/compiler_radians.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void compiler_radians(global float *src, global float *dst) {
-  int i = get_global_id(0);
-  dst[i] = radians(src[i]);
-}
diff --git a/kernels/compiler_region.cl b/kernels/compiler_region.cl
deleted file mode 100644
index d74ac7d..0000000
--- a/kernels/compiler_region.cl
+++ /dev/null
@@ -1,10 +0,0 @@
-__kernel void
-compiler_region(__global uint *src, __global uint *dst)
-{
-  __gen_ocl_force_simd16();
-  int id = (int)get_global_id(0);
-  const int x0 = src[id];
-  const int x1 = src[id+16];
-  dst[id] = __gen_ocl_region(0, 16, 8, 2, x0, x1);
-}
-
diff --git a/kernels/compiler_region0.cl b/kernels/compiler_region0.cl
deleted file mode 100644
index 5bd57c0..0000000
--- a/kernels/compiler_region0.cl
+++ /dev/null
@@ -1,11 +0,0 @@
-__kernel void
-compiler_region0(__global uint *src, __global uint *dst)
-{
-  __gen_ocl_force_simd16();
-  int id = (int)get_global_id(0);
-  const int x0 = src[id];
-  const int x1 = src[id+16];
-  const int x2 = src[id+32];
-  dst[id] = __gen_ocl_region(1, 16, 8, 2, x0, x1, x2);
-}
-
diff --git a/kernels/compiler_region1.cl b/kernels/compiler_region1.cl
deleted file mode 100644
index 9deb63c..0000000
--- a/kernels/compiler_region1.cl
+++ /dev/null
@@ -1,9 +0,0 @@
-__kernel void
-compiler_region1(__global uint *src, __global uint *dst)
-{
-  __gen_ocl_force_simd16();
-  int id = (int)get_global_id(0);
-  const int x0 = src[id];
-  dst[id] = __gen_ocl_region(0, 16, 8, 2, x0);
-}
-
diff --git a/kernels/compiler_relational_builtin.cl b/kernels/compiler_relational_builtin.cl
deleted file mode 100644
index 8b195ca..0000000
--- a/kernels/compiler_relational_builtin.cl
+++ /dev/null
@@ -1,24 +0,0 @@
-/* test OpenCL 1.1 Relational Built-in Functions (section 6.11.6) */
-kernel void compiler_relational_builtin() {
-  float x = 1, y = 2, z = 3;
-  int i;
-  i = isequal(x, y);
-  i = isnotequal(x, y);
-  i = isgreater(x, y);
-  i = isgreaterequal(x, y);
-  i = isless(x, y);
-  i = islessequal(x, y);
-  i = islessgreater(x, y);
-  i = isfinite(x);
-  i = isinf(x);
-  i = isnan(x);
-  i = isnormal(x);
-  i = isordered(x, y);
-  i = isunordered(x, y);
-  i = signbit(x);
-  long l = 12;
-  i = any(l);
-  i = all(l);
-  bitselect(x, y, z);
-  select(x, y, z);
-}
diff --git a/kernels/compiler_rhadd.cl b/kernels/compiler_rhadd.cl
deleted file mode 100644
index 4024ace..0000000
--- a/kernels/compiler_rhadd.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void compiler_rhadd(global int *src1, global int *src2, global int *dst) {
-  int i = get_global_id(0);
-  dst[i] = rhadd(src1[i], src2[i]);
-}
diff --git a/kernels/compiler_ribbon.cl b/kernels/compiler_ribbon.cl
deleted file mode 100644
index 157cc66..0000000
--- a/kernels/compiler_ribbon.cl
+++ /dev/null
@@ -1,88 +0,0 @@
-typedef float2 vec2;
-typedef float3 vec3;
-typedef float4 vec4;
-#define sin native_sin
-#define cos native_cos
-#define tan native_tan
-#define normalize fast_normalize
-#define length fast_length
-
-inline vec3 reflect(vec3 I, vec3 N) {
-  return I - 2.0f * dot(N, I) * N;
-}
-
-#define time 1.f
-
-// Object A (tunnel)
-inline float oa(vec3 q) {
- return cos(q.x)+cos(q.y*1.5f)+cos(q.z)+cos(q.y*20.f)*.05f;
-}
-
-// Object B (ribbon)
-inline float ob(vec3 q) {
-  return length(max(fabs(q-(vec3)(cos(q.z*1.5f)*.3f,-.5f+cos(q.z)*.2f,.0f))-(vec3)(.125f,.02f,time+3.f),(vec3)(.0f)));
-}
-
-// Scene
-inline float o(vec3 q) { return min(oa(q),ob(q)); }
-
-// Get Normal XXX Not inline by LLVM
-inline __attribute__((always_inline)) vec3 gn(vec3 q) {
- const vec3 fxyy = (vec3)(.01f, 0.f, 0.f);
- const vec3 fyxy = (vec3)(0.f, .01f, 0.f);
- const vec3 fyyx = (vec3)(0.f, 0.f, .01f);
- return normalize((vec3)(o(q+fxyy),
-                         o(q+fyxy),
-                         o(q+fyyx)));
-}
-
-inline uint pack_fp4(float4 u4) {
-  uint u;
-  u = (((uint) u4.x)) |
-      (((uint) u4.y) << 8) |
-      (((uint) u4.z) << 16);
-  return u;
-}
-
-// XXX vector not supported in function argument yet
-__kernel void compiler_ribbon(__global uint *dst, float resx, float resy, int w)
-{
-  vec2 gl_FragCoord = (vec2)(get_global_id(0), get_global_id(1));
-  vec2 p = -1.0f + 2.0f * gl_FragCoord.xy / (vec2)(resx, resy);
-  p.x *= resx/resy;
-
-  vec4 c = (vec4)(1.0f);
-  const vec3 org = (vec3)(sin(time)*.5f,
-                          cos(time*.5f)*.25f+.25f,
-                          time);
-  vec3 dir=normalize((vec3)(p.x*1.6f,p.y,1.0f));
-  vec3 q = org, pp;
-  float d=.0f;
-
-  // First raymarching
-  for(int i=0;i<64;i++) {
-    d=o(q);
-    q+=d*dir;
-  }
-  pp=q;
-  const float f = length(q-org)*0.02f;
-
-  // Second raymarching (reflection)
-  dir=reflect(dir,gn(q));
-  q+=dir;
-  for(int i=0;i<64;i++) {
-    d=o(q);
-    q+=d*dir;
-  }
-  c = max(dot(gn(q), (vec3)(0.1f,0.1f,0.0f)), 0.0f)
-    + (vec4)(0.3f, cos(time*.5f)*.5f+.5f, sin(time*.5f)*.5f+.5f, 1.f) * min(length(q-org)*.04f,1.f);
-
-  // Ribbon Color
-  if(oa(pp)>ob(pp))
-    c = mix(c, (vec4)(cos(time*.3f)*0.5f + 0.5f,cos(time*.2f)*.5f+.5f,sin(time*.3f)*.5f+.5f,1.f),.3f);
-
-  // Final Color
-  const vec4 color = ((c+(vec4)(f))+(1.f-min(pp.y+1.9f,1.f))*(vec4)(1.f,.8f,.7f,1.f))*min(time*.5f,1.f);
-  const vec4 final = 255.f * max(min(color, (vec4)(1.f)), (vec4)(0.f));
-  dst[get_global_id(0) + get_global_id(1) * w] = pack_fp4(final);
-}
diff --git a/kernels/compiler_ribbon_ref.bmp b/kernels/compiler_ribbon_ref.bmp
deleted file mode 100644
index 2225f4547ea23b4de878aba3c5f99b83abd9f270..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 196662
zcmcG%2bd&hb?$%f^M4)-?M|Ma&N+wa946=4ysHF4LJ>r?O|SujO|%V2AP_;=B#9tE
z5(*$Bgn}{H1SLSyDiEEnjlsqS0~Xl6r1}5OcdDwZdwO<Pz}@GlRNY<Eq3V6ldC&RI
z_tpB5&j0%V{+Img at Lyhb{<r at 3zyFtC9`R3K*L~f_5`kDU5KjihQoW{6CWA5C%B|?g
z*vZ4ACl8ODJT&qIwL-%aPL77+BSB;Aa11s&v1{D3%O9BX28XiM$y{wRQ=W+D#(aK{
zKR7iyzH4|?Y-DV=v7wQ%q0#Z-P$V!uIXdnco$!o#{Nt;qrc&8hu9PiS3dL$MkqS at O
zrsJtlxlv(TY1RsJmFcB=X`w2%*lSDG>7A`O*Tka9STq&4EfGr at ODAJpOU2S%i>FiZ
zbh>MqbbNrN;u+iIc=x*{VrlsZ`x9e)frwZ%l8DAK(R4nO%qA0=gfHmz2BxM09*=**
z;~Ss!j!kgRJR{?i!()>}V-rK86T3&pv0b+9<{6$Jn;iCsruY-i;n?KJ*u==_#PI0&
zP$V9d<0p1aOzrjsJjIr$z7UF~{P9#^W;I!8PI~>5jrsW4#L456yScI)ynFbh-9sns
z!gkAcd~#@L<fH+{VLRA>g9pBY!4hwhZ%l at hBeBeQG(8 at S4@Xktk@(d3<St)u3 at lA}
zclrENsa!CT_9rsIL?+-5jm6V`UuZO*@<o$g4oIW};kYN7 at bW5_&WF6d$v|Xm(z}~?
z81tMwHYu=-q(;J6awMAYD+K`g01Che^SncWcy?@b+)!Y&OMzn36HSj5D&c%33=2XD
zn*!tVaiHB79!{4hGL;FTKz`gG9ySy>d05zFvtZPs0GG_7z|<JmF<%R$bMgFiu23!{
z(vd`3DG-jQ#0vA30mwH*I0pFJ`(_KX4GaG+3fTAurEbu&4~$*rz`F<hHs-sp3iw_4
zH{ciiJB(BOM-~6=)m$o<2LJJN+#8(o20T;#Nsn)0(t8a28y3I?1Af at y4|(w$fS+?{
z at ZSS|E`6cl<$9fZVI`XM<N7+QNw|PhN==WCP2#x3tyy^P0sruhU>*ei9S<IWfBD2f
z$lF;><jO((C-`9-hz)yu!yfN&G~pYc+T{(7B(njKpA_V)1txvFqlu|_+82yYgkqCW
z0Q_Sd15JX_v2c8H(zlC0=ci#)e)A?dVHuVw`N97QQUD?-3lixNr%|H7wm_iYTz-Oy
z0vw=$VE6D7rh-Gs;yCzEPfsKY<H6VnPuf)4H9W!_?#46<xGBKZuPsE<`9yv?TPWv~
z=}4(sA_`2`%jJ57h|ur$?I<w4TssB@%F8uZ2(Y36$P@|yQOmk4Fi0MRa5vg}_LK3<
zAn>R82*p1i+Qol35h=G*sa(o({y}m62LBfLC#FX5|G4+A|2MF=-Tsh*-y4{in8I6H
z;E%>bk$4DaZbHMZd~FIJd+3}(I5rha`Xg~~dnKByPo at p{haK<_orGU<Jpb^h#`;0d
zA3P6>DP?4T0K#{AQr?#DMtq58#soaZkQ3p=STN!t7~!!!z9De#4Gt%>Akc?z4 at M@S
z08irfV=14w{Y-!-dDXamKW;w|@&SHc61Q)_ABrMW1ojvoRH%kS`2Tnh1=QR33n4oS
zI23>gr8a?S2!!+f`4wtJ(s07kLP7x(Dco8po*Pe<Ca`3I7&kTq1tyR{2r5GXII#l-
z0+GpVA(bydfm|{ZEun?d5m-Pt*a`pT<@z!3zkbeaFaD210rlhp=^l{p#0Ud^gMZ`y
z9YV!p7XA(R1^?>&BgIO|5kFoLKeqFCiysf*xA1QykO(2wJWwML_IiUB_}%#D0*&*B
zmK^mg9flD;zz+qMkA(B}$@+Xu9GVOKf_&SK1OCT>_C6LU_;;PW`y>D<XiOlXhcTS|
z=)}pBQ$u_!06gWL#Pd6DA19BiCmf)BkUA=XdfomwWKrZ#dWXD$(LiJZagxkW#j}%q
zis0W+fE~fVMS;Mva)Ch<NSCGrx>g{tC;+4-9WWt`4`p8tARRDT2%jIzj-`si0w}<~
zLxG_YWx<XVnDS3Rfm|s=MgRpQ9S}JbArK6pz*4oc(u at D)>U6JV+vVb13+-XD00pEt
zXMt!p1PF9p;J1N2m<aAyt$o*9={u|c*N@|)1^?lAB$n=qf5eaN{CmZZgMX6(NFWd!
zHsJU9Ba<dg5a&OR@}C^W`I9y9Bu++zXuz|0Fl5}mFC6opdSMyak1kc&1CIisDcrb&
ze0F$fJX;@hfBlCRS_+Lxg<>Q%rr-~RClEY*B}9uqJeJ7#Ebt?2GC^1Xu<`kT-{aej
zxA&0(q(}#N)sN;O-xRk$wTqvrZXfUq8Wr|t2d;s9O>JEGClI(O(3cB45Bt)AoSa*m
z0^N*&lZOA-jF^a^2S66Q5ELNT0e+!Cah!}83UGCJ6$%V#AlM-akPaj>F`_^!7Z)ug
zfuN);uqd!pE!jD*g at 07g4pvz~0<}tWEkGzz#F&vlJ5WF{|F|p>&p4i+9S8rm^G_-M
zBk^=1Q_QCG{4bHpCAVe1cJk{PHu<kc0omf%75u at N2cd}anE?DElkjXIY;tOp3pC{)
zBl%i5Am9i2*nzWi(=$^%so)<%;i!hO-M)Zda^9U~|F7uzE#$*2z;9qLZXbNIMR?%(
z`ASoPVUJ%lj{w_9dT`FZpHw&PCj at x>Ljrptg{AgGu?hYJc91oQ&ks)$K1e7qK1C^@
z$Orrm$9wVb<ie&R<Y2yUr<Vex1BzY+xuu1MIiFn$@agg at 9v;0!3BtP at o+k3+1OlNz
zeq1R)m{1A`3wkJk^d05mnoMw<lrUE%DNZN_gax(IcBzBH-wFBpJO|`DRlz?v6mwC)
z!Kw)a;8QGvojCsWc!vTu_|vhN^+EEXCi9I%5|K<XSF9Ale>$JC#E+};V-<e{?Lq-D
zgM6M3M*IT)u1xAWe-1<Zcmw13Qj*+g(ie(O0e)Dpa4?juOn{J)aRsCi at GkI!5CeW*
z{q?=Q^A7S^V-vf1bA*9v9z`bLw~+520mD>m#O-G#&&B8C at V$W%U=R3FKEU1=95vvV
zDiCfT<dXv9_BGX|UPMx??@W9V!Gq^FI}Y-7NAq9T)(QbuQM3>F&O<F0*%>i;0VRbA
z&#+RUTOEZ3BTpa-P!}Q`C^duv<0o_G!92(Z{}^1LBE*xtDij#jK;TY?yA&|>KqwH*
z<daetqBL45N>XflerKnQ1ah$ez;8G3Uz+cs0Ql_sYNLg0 at H>z`HVd4?tR2_8 at y?2W
z!#EK?5yTG?E?dl%s?&)~JX1(-7ymZ?B?WfO0lzsR#0V=)i1JB<MyZjK_D*7y;5_IG
zWIy=lS}z_7WvdfFg;FQ-eq{7y&0ei)r(uDn1HU=&E6d1scaiN{$TVt%eNtL~2&E^2
ze=0B(j!&rOk$je7PBuvO669;DYb65e`LjXXK8Y}tp|(S5m)H at CPDYYr2_yC8&C}xi
zEuU`+xef*Rz2F?#kMc2QOCU2S at VF>IMqHbXX~L^4=nDi|8kHx9pTGg4g-mG_{eu?5
zC<+~y0t9!B0?AAqtIbDzp(zanBn1xa?VXxPph1{-v!F0j2mdiw2r&5HMgejD+pUiX
z+YjIw$Mdrz_&0&3i+>bXzFa8P%B5;q@!u8ywpR!0TK at t36PP?43q=EgsApS&6gXMn
zSJ at BFQPjX*!B5T`js^e>o?mlY2mIhcP2`YO({Nn(ud`#n+vpR>c2Ogg_bmz}N5HLm
ze!Mqs+!GL056Cg3JNQTHkP!zW<4}ODQ~ZP%9FHR6w?G__PenIf2#T6Af(nPPf+vz5
zl_3ll_?=&BmvoHVSN(5i0YVM+^N!o^+v$x0a<FT3Kv-bcg}^+rpPDDJKq<hM1Gqr^
zI$#g at B?=e{z+x*Gu%kdY%GeDR48{ex`dtc;5&OfQY%xtBV2mJ at jZZI8^XwY<cSC)r
zeemxN0XF`-6ad4<2EzN;Ps$(K{@*x%!M_1N+hhd)ABu-Fg)Gir at XvT!Aw3nCv?~7=
z{>8Dojg(fw&l%Y6{7q>{Mg$E0Pe$z+ at O$z9{?IsCFpMysN?<tv{KLOl<zs=L4^q#s
zYF~Zw#1sR0h=G&Aa5yoU$ofIGf<KuJ;n+3R<yCR}=>QT=BZ3TR;r5}7j|zaK42+Zo
zV^Tg+X2r4-_<ZV(;_Y3?=b;0BzS6j7x7IvCuK~PG1OflfL&I(&^s*pbqHJqQnpzif
zhRF;CU;$iEItT?uPUb=Yc%Bgo7$YL&Dn6kA_#Zx*LT)G==%c`-$pr`j006Z3La-oX
z#>nzr{2R}ITnaQcTNFaUKTuR;y6|sNz{WpdJ~rC>URBm8{w?qu{nLYg#`SFcQ_gkp
z53q^sQv5en9Si^LBlyEHd?N)?1AaS3h%PeKQBghy{F7eB89lKC$NM5NLV!=fkNz|s
z<_RNXlq2lXTLs4ON$6PdQDVQ2&*yI~<g4Hp at ax!?Q6u<dkdN%ab%W$5ocvoTc0i8i
zVMsca4N=~~;gblXjxfPLK>>DTi3q!W!4a+S at Egf?v!xKoC$fNfEk9<<ehc|7&+kUQ
z{&3C%UShftk($4y=Pl%0bU1bhP$KkFKnKWpXB9%-K;R%>cZMV=aF#fdlOR!mbU?LG
zUNQo?MslR&0#Lv;G$v8Nra(+6;Ge9_Msfs#Leeex**`A+2?~|fnmYubg;c26TMNdI
zhXp-<63e*2pXSXK|Im%hH=N9+dhnl5F@~%D-}rWm0)`0VARqGs{s83;%lS`wg&p7@
z<&R8?#)H1#L at 4S7{EQ+|;sF1!fQL9z at wbyhp@_GOe7o|)Gj_HAHwJz#qPXAPC&e;S
zd(T%wG#;RNsL$ZERrB~Gqn75$hQcuq9-az6;1{>gm{*E%x+%8o`$8j-MVcAxAzcXy
zX{*BN2p)!#yWqEz`t9K7_ww~H&JSvwM8L%YI~>^9?i~~h(SFnOjD47iBSIyFjlQ|V
z0?Q%TfnYcIR|=SnfT+Q6fKb5Bi2EqeR}tchD<lAkQUEQKuZ8Fza3~<yUa1eJz)G!b
zTYG;;@oytjAZml(K-bbgJ*eIx7W5sX4`VJ0=$k_U3;&^5C{rMK(co0#%cru5Og<&}
zH}Dn;7-J_K4`TdGuLvaYPbsXYHNxW?1N<JJ)I8BV#^(pjmR1J}=EGk97zhXaW}wy<
zKXwRkf&bURzvcEdiBRxcvV`%b^k^V7se*sfOIO2?Q{hi$Lb!e4O`Ru_n4+Geq|g!&
z(E+zlMO58>PzF1OV(Cc~wYq&3RE%zSk?)c{1Ho_jF8Id?Qjs_()W{(d3se{NY~8X)
z at P8}{K!igVB#}3~xkCXfBj}@mVS#F)T-g^0PDvDi1tuxx&mqok%>~>=QIiHj0Wg46
z5DEn7bfQq^NoEsnsb5*Ovj7|L4)UEH4FR3?oPnhU(JlotvAEbEY-i)~?bdUo{;h23
za5K!(t%d(WrHKEB0%i!9=DHXq&~!d22=`e=4+EAd8}J7wasK92sDV1d`BM}cX2%x<
zS|a-a7~z|m2G<lKMB|(zc~Yu6qcq#dI9H!>l3mK at SHr)Je4~8$6tZ3LFV#Pzd1Bd7
zq!(XfQd=5AL$v7N)lDToDB$;s;D-W;|6r7U9%*kt at Bn*p`@Y?#flbstqh0xO$OII5
zbBvZY+7Fa&*4B9bosh3T-$ACbfGub5ycg8FzTI~0LWBYMA4~xb)<BRg`}oO}EKIAL
zMTDL}pi#hVd7dx8=zt}J3<Y3;P(UbSilPn$CP!k4utou)fT*Ae93zH8?!mu?fSth)
z3tS;UVCh1s_<sX_-S$#oJMsrS6N_h^caSDe!va2n4+=+;Ve~)k95g?`0*1iAe>@cx
zBL<O at B*JRxl7JtCi}M%p1M98Sz)}7<F$4ZxU{A_=0{#F>gFYWnM{gSk1jE~uk7?lH
z8d=xnS5*F8 at H>JZ9IEFBoOH7Bm5}R5m#M(+Jx`8_d(R5&saOJdMtkXJm<rIM7P8cS
zhImID+>MsN?c<yoyg)l;OTlzO%KN;nR(Pg6zU|2GOLhDBt`F&6?xO$|+DOb#Wtb4t
z3-~_#^H4*;@dAMqg(M@!oX_f^0NA!!0M0oEG1jGkkwZcOuFEzGNIlR9A&UYO_DF|=
zC<ITJ0xKx|y5s71+No_wA$0u+V*vtAHw9ey2gyASKaq_e(+v2*zeRy)d>j75 at er1!
z_LEPW{<nCX0SI!CWJImd2-oIg{_qrOzE|*XoWF&C%lXp?5lsZgJwr%YM2^UQQ`0tp
z8J+Uckt at DMl#f&Mu|oh_NZUStRs466PjEp*IZ#yaM>BM at 51|A^@OyXB0J;C1gk9tm
z&EpS`)4fJ6p!){=(&~xY2mAyDb^GWyhPq5&ftBh~+oylY`8aE5yWl6a=g0O|eiZ*C
z%aQaLfx|(j0+p?iL%X)QeK!l-_#YeytaQM%N${RH8Me-6^{`;*3A>DGQcToHl_oV8
z(5;LP+v%{C3rx at hpyOha3qS#*f=m>E0>Lf?z`tYx#|#0A|LOU*0ly3X89-}0 at NBFf
z?YVejClhLLyh8y2zp+RxWBh+QOb94e3k+n3VnOOxV)bZ(5MZJ}u^GvfLreS0fyk6N
ze}jJ`evI??jZN6%Czc2XBU6)8$Ya$!B7X3<<h&l=2t&YKZ7-3uD}De!FS(l-%|$uE
z%8v{Acqh|D;eZhEn+oI@<l<_AVFXN}F?GsQvmhKN586}NFhzbm|CE22hwAxxHIiWB
z!)}T{l!IUmt$M+zhv@)HC^Bf=J{2U?zDg|TLq+_%alRe-`l@{fNFV6Wfd%<(fq*Cm
zR&m|5dhQ$ugaV0fAaJq67EVe5r!LBS3I!Y%=u{fb2uu`!1%v~j&S9Dbq>2;9x)q^N
z*sl~Ao1hs$%RyZV;34soL;))V;Qv?Z)z!wa at z1OE&BnBh1*-%S3fPFXFsyhM3hadW
zp63Ppj>WT4F`<CLzfeH%A4!C0YR#APLB_Kp{%9(guSfE=NTD97FT}$MUm)W3N5uJy
z_z9BcIO0c~|CE0m at XI)_X>zlak8%Ei5Q8OBVGf3;y7-qcYBepZ{}JWW9q>{}9~b}q
z$Y;<22kYQ49Q7eifKVVzizZ{cfO&UgArjAcRr65iN#&5Q(%}j6!|^Eve=O;ZCI$Sw
z1ZDXC-oRKoAEbM;C(k`Ww{Orcj4*wDRtT`c&y&8;FvC(InwAX<3Qdo8>ENOjsBDo#
z$TphR2C=}x|FJ2c=>Qdegbe|j_axO~dyGJ!r6CSL(82=gnuZ0X3I0l>02By at c`F)#
z5tdFOAhX7-L;wneJPzi;f7PXeXnxyno&7W5zZ(K9cWrR%LUJM(>%)IC7k8WeDu?x1
zG?5jHXCq>na8xJ|3MYbvN{(CrvV;?X`a+_%5MSC?3B{S&;dPw95&z(yWQSna&3w&_
z0BLoY@{gK?*JQp@@b}|*alg{Z(~ocgFu4Hi81&LH at ZXDkb^9a4?k at O^prVxp4 at Q5x
z6gd-xvBo0B-bwNNnGhu%FwgU-eR2C4P$UyuVkvr?N$Sm9E!=(-#~WZGjJkaUe<C+o
zs0Cr!@!h_yf;1xNR`BlvKS090<2M3P3bPT at k`zG>ITTP9aC(IWaWc#yN|d(j at 6rF@
zUu~zNkm#sn5J>|CAQW%tn8kwLK;W5TUV#Y&B*o(r2o(QxS#Z2Ku3^-ypP_sv_em7!
zCIST0ah#+{1iBQE5U|!TLTCW;9WK<?>(dKu42goH7I$s at w!y7&=3Pj;FrSYn2U{$e
zcPyI7IcD&m4aYL!SUMC*1tZBI$XAOb+3^ebW8Q#+|1i#9#lMOlOZmr=A=*1-u!cX6
zdL`{mFd2k~pGjX}oQn$%dz?R~&Nj+HJ5giM;8*t#t#{COM)3E7pI3bWJe7c-=~qmy
zsmz*2O#^i_Pa;hi!|jKa4rVJ2%)YQRzp2~j`zNxT0Rw*1$xx_<Dl>tB$ma{V<-I<X
zU}UqP&-0rIC_l%P#bgdCu#`X`BXrEZ8I`=)v}-B_6srU^j-)<g0)cpb#~l10HxT41
zjA(W#!1?FREeiAv7CT9?sS8O6FvfRqQ-JBiLIKkT at 8rT31tbJaIw1h?AD04E at INp3
zH{drEaPZ$nek_?YmXD_j$F^8=DZ6&KwRT9Xv6#VD4>ng1HtGwh=5n^PnvZ2dP#~HP
zqI at E$0N{_%rEKFr7 at e~HzltBCo8|mb^$LE at CmJIVW=fYed`}?o12I$W-wFRbKRHET
zuF>r_BOGd&9gPCpV6O*{(zVW%0k0eUz>GiSJ;}k*?UeUvvF at zUox)^Qx_U(OGm?d>
z2mF*b<LLlKF3cnsvRxh3qFM_<Qc~d=)}~GRh1x5L6LI_9FJnrt4h7tv-vYlGdnMMG
zt~qNOH4n)M964m>q*&ktr7BwR-e{78=OrBQv*X6UO#xRf&^w at znf5TLnfGC6hPMUJ
z$}fury at 9}r0@^hvNwKhiux?R6NXnlNrht_Q*eVDo5B`M$gT#+Kxhhs&vqFGSK!l1B
zEyi`bocRFQcUB9~0aULaZnu`RY7Y3p|LP%--)t<U#TL^m2kNk(zK~qrU*lnQj(PC`
zLjmyb!|?wG{~nY4TKGr&Fzap7OW}*C2k}MulLCmyG>wa-04n?OS0myp`u#t$2hGDV
z)=Pt=Q7;i(6fk_ at 54mc9%5t#A(+c=aHjU at UhbQu5x!Oc$nH3BK_B5axg)cd;Y94j_
z at w8|j+`f)bp!S3D(O71}>R~etoCf*7C17^Ue6*n2Sodp~Z^A>X=gm3HmOVy1OLnQo
zD1#10P+a9S@}n?qR13u=5JXbUOYc%Zfl3(-Im9K1WyTckefYO2K!9+uz|M%dQdSg*
zLjgbXW;+Y4^Ka+Hfgn|D(=TKiNAY<4iJ<^m$fm%A%z-7FV<ZT9Y=?jeLI8<?VxAPB
z1_h)XWUC;9c}2c%XAaCu7C;CvDqWOME}G0^qGVD9$Kvyw)9ux~!Fg`|NV~O?1Nj2}
zm0W8ji?I*>*YW>qhnj1K0{H(G>_A-&3e at HkOZ%$Txp;LpUYUu7lY;*c^Weq*gMWSk
zNxg{wIN<m316lMSL<peUM7sKo@&W&V-;w>M$ROZ%8`q9wc&6+8kBfhe5%yN!&4L^N
z+igH-W{U9=R}(j$Dvh7K>$hsN5pCC`fP?ebnolI*RSF<@X!{}6wcI`f*8E;G1(L#%
zX1mNyHsJ3^KA+x$eDgIpQebZ|uUk3BMm{?Z?42Fci6QB^XG*rP0N>6}V2c)F<gQSO
z5Ds<>1mpCO?@ARt+wp%~3TQeEkD!3 at R5AwL69{ZM1oDXjgjy|)0(+Cz32T%BI5eVw
zw7V+>rn(d`AwVdASGOpjApi<&L%!=7D+DBR5gYu`xs4J~$Gv0h0C*efpj}MCFV7!o
z<L$wJdo|lOL@;#7v{o{$<xF!qjWrfib!;K2{(pIYRq#I_U)o!#%*HA+(Qv}M4gVs3
z1pl`4XPAbrPEaRBHe`Qz3gr(MD1 at Tz6{zkl;MZCZUQVBv<X3IG1ae-oclZ;t3JRCQ
z_WX)N1Abx+*F^+>dAvRk@)0&6lni}$0)8WY>}_x=xVt<v#lbXi5{WQLa_#O-1W&OZ
z+6nm%_^q#@L1E~mRMCrG;;+Q)FQ)kKY98D3D+K^N6kv-AVjUF*+GMz4(h3ATPZY3{
zg5;n;5S2gxS@?5$O}Dea)<~`>;L<{w=_x<mAkb}Gs!S3HOf2YOflCerT@>g$CKLe%
zHU&J=24+Qpz&I43asmZ<LV)JN!h*q8nr{*Ul2m2#QRGT<3EYBS_3DCcH`)!nL3_?+
z0)C$7ukimE at 4)-u`NjDkXms>o4p>Up7hwT4p9KDYQSm<;UD%u!{Kwq>U&TL_-eJmU
zTpg|y-ku<f@@GpRkS8a0;ZFqry%aFu$5BW%UY&nG1#FymNnt;uN3s<-4FW$eF=L%F
zg$jOZn~c~3e%YFu53SdR1wlG_aQoh%Oj;pFAXTA(liH4Yes*yF_4)A0yMJq7sw*zt
z`2q^{-6!SB0UZ(Og1^V at _jrDBr}nGJEk2!-<_ofD40Gj1B5}r9s4ZA>2$)4=KD%Xo
zfdDrm2cYB)3!u;Ar9iIYw{@4W0D}T3TZK1UJiKx8MuIYlAmnqR0M9!Iunz at j=rxm`
zm`No4Fo*=yGMWM90RB<YRDm!gkfnll0KXwc4g6y$77Q4pVUz;m|JAqS-dA%o>jjlJ
z!U*I1%~mk4W?q#yQCmGE6j(i2$5sy35&w983?kI#<JI}t!k+2!OtjpIOn1Tt|9o at 4
zKjH^b$B&{&G8~T6CoHgM*h|6BRUj5~0`dPuQVah!1qA#Nkv%-mq+kcny0abdJmWq_
zA1e5}@H6THN6L{na5PW8?rAS4z`1 at UhXOo9g)@~4&8(&xiwp^v@;={o;$+ayf>*$v
z)e_j28ew(&UGUpzcYm(P8v}k|Z?!<QO$&tiN)Ei)!SlNx_U(gt{68$vC_otjqurEg
zH3TMJ6***Tm8PwlSRh2$o)K6SFm<HgzjUsT1;>s8)KvKtO+C!kVu2G2tidun5K#7)
z;AN%{45q-uZb<~35a1^S^iV*ufb}L6*va|p^ZA)7_y?AXf1!Y2*c5Y&o?qHubphTD
ze)gr60-9{dHp4!DuF8iuY%HZL!}BjDmk(6YKg;_oi+jt6pXyw6ezQbJ_uP6h6!Vay
z8T?b!Wprbd?SxDf+)Y0Km&ULl2m(n2fRlaFr1tJmzyiN{rqB7iLB7+z)JUDK3ETaO
zA6CszwmW%pq3)$P*;ruYnpiI_^b{}+Jtv6*CJXS_=4s(WW{cbBYv6JLKbUu>YZ>Ib
z+`f%`6*Gc)8}<r*hS>P??vvZV--q_?4>^qlCbnj!6oyn}4kpuw<(!Ac`~k0-UqeP9
zEC8Is0;7of0)cSEXc&5~j2s$bu|ziujzNLU^kjA3ClpY#*7TE8#52l1wm==@bGa5>
z3YaJL7(GBzi7^H>Bm`I#=m`Onifsu2>rJa1x<eFj3PG*qG^HDrK;qI3wsortU!{(!
zAomvWKet($+bpsrOz;xm=U at T<A|~LkFD7)r3+K<67Zh0BI}P~fH%im(a9BEl-S|h>
z4FfG!bE2XG=B4bD3=kItY+>fWbO%<T0LCb=Xnq5J9(ug}&VMJ^ThBY|0vY8auvfD*
zzs%i0^RUby9s3|ZZl+BcRYRSMNn0}1)m%)_lkW=)y7=<ojiw-=%X9$k4$W5s<jY;3
zZv?yoUO&zOKgTHS*}?*8c;2S=x8r=kGv-%#S#V-X(q6N~q6{D!IV6in at FcI&al}}F
zBn37U%~D;X<i*AbTd)LyPIVM5q%G)#<5DA{EU at w4TM^RgP%@aWQvbDj7ki0d-qxjv
z+$=CPqV5-PSbz|Ms#K?y0(=?LMnV9yLMWtAPJsd-|G4<)u(h*i2?6N#wZlzp{cuy9
z`C)PFj&;^@^LwT-5I(z6be=amR?h3By$b&JN~U8{V|lokMEL`L6+cVhf6sJvE>fNe
z&u<jx)(bZN5ptux5DowEdN(B$elN}+3ZO2;qfQ`1NeZOX%*6tsfMXnnEIbb2ZRNuS
z<;bq*cjMpo{5W%_(zllAS+%E4$uOKH$wcsHgRP}F1VQtt+b1`tN+WLHww>JmcH{&8
z?6e=s<ST(xVah`OF%?cf@@@V?DBhpJtU%BQys3f;;7u+73osK1SW;#;?WvSsQYAX{
zWWiNVJ0PSkN+2-a*jm_xCl!HsU??Dg08cK<j_sB*X?lk?A-h0I!zZ8E1^>2K;JT(3
z<{6<I5QdCe^ZLhSVZg~DQVFUhLIE<J;J7b5!8%b)8 at D77Az%mRuVJFIU+^zkz+qB=
zG%yyUjI)xN-&4XIw1Z^FHcn|-X2g%tKZZC*<V~8(six|m#iWFQg#>hHuV&b?Uzv^K
z{1^6=z<;S7Dz$>a82+C{Q_(+&(qXg^R}K6dQ61!*3;s<B#X`Q~zb6owOEZ2lkUK%}
z6F`l7kve%lgoaNd$%0dOb=ogGD+zSIw%f^E16GukWSrtpus#<fE|3&6+6z6Wq--lq
z%g05&g0qW%BlTeoQlGyS*c+1rP8|F;^7$*?U!@mb9ejd+R at TJ>qlIX4FwS2Vl)%;C
z!^sG!s#Ru#Fa_t&GfDyAXXMaGUmy^UI9kY1fH4}lb8HqA>V6UdDLpwt$l0+JktBCg
zCNc=uKp@)@VuY+Oq|ZBBjwB7lA3^~u1b}}M91{XqGe;%Rv9kc!p(?1n*q&L>8zqC7
z!O05+6!06Tw6V=o*|r=C*gFDjJ=knv5TT at Dtln4>{5Mqpi2q0V#|#A`JUQJ7RcE6`
z!9ScGr%#e at 8IK=2??zOx)&bj4WC|4o*ywNuV4 at fu@Ne7UfD;iv(xXdLkX;U)@{PMO
zrkNK9)aUtb9>#Vlz>2#w$XD=#e at gwWr38z9Gn<>~?R+%LO|Y-1qnS;7{xJoQqSS#p
ze+c*;fuz)Mf3Y3+ZP;51YUm^-5pPHzskms<0_3oOW>h-=$%uIdhYVo>Jg_8NVdR4T
z)l6lQ^_)Q|kW>FJ+unp!L8wWwmWDW<zy}LpkSiAS)J1U=<yq;DfR%1 at 7y+31wy0Tg
zbjkudFYpIh?8&Bpx%5gFLp>7$MB0s^AMl^7CMx(}7YQUPs5b-%=6kI;*C>++i~mpC
z$TuF_<?{vbYnH7YX{;WuuN|(hvva79&2AKy_Lmp-mY~DTdQL*XGAS^bZ)N3R)uaIN
z+Ct1wAd3FS|Id>(Y!v3!^NN3pa!d*265#xq+bhx{!$4|SPM0a9fHAI-QeZm~ct)<~
z at x+f=)3rO=>kF_#P}j%mRp!#5XO<32g%iM2iIs^qh5~TGczzM{lIn`4<)VlHQ^8M>
zhdQT#-`&Gz=eZWD4PphZ#>q1T238#+NN8|<rDN^yjQnCPoXAfywThu$mXhdUfsa_=
zk<}!kbgoLrCio{Pu%o14J{oh?kwfz97)G(dFJ(z#L9ZZZHjQc_+nK9;6&5hPk at U@K
zA`&7LYCh(RNv^St0-SSY0VI+gp>0>?N)(X#r`K}+;s*7YU0fGC1dN~`R00K}f`0 at C
z;IG?Ra3AJ-9<J5#|5$59 at Gn|LOau>8COd0c0Ka}pbLCJC*w1d{=l4jAuoz(u<`@k8
zW8i=7aBcMvHBW|*83;>&f4CsvpN~@f!4~!u2 at R!ourfml6#ox%k#MXE$UGOX!B~hN
z%Z{8YQT4KZT927n(51tKh at WHNpAiAPiVA*p{$BqC7t{e5`@G6A2>z8*n43eRowc%r
zUShycNNUW-rrUmMq0mj27@`FlPs^t}$ajNT-Eu$j4I`8zU8X!v<U0<Z9eU^Z0^;*!
zWO<ZGgp=pI(c!@G7A#;{IX4S9&nO~JHQ74)$DCyGGZ+s8Az8+pyIP27pR at vj8CI|<
zU|7HflB5{XvW)^rL1Mv0FKw}8P`Wf(Yy{9h at R2W8YRN)y?oX6`J0bvn^o(+W_~K>(
zA7 at d(!M|aRga8lYdVmM~O9%)=C+7FX!GCKx1^$%+J%D%o|C;C at thKMH_*VyxV_)1i
zjqAp%E4HoeI*hQ*VBS2R>8xei*eb=JbW67 at DVQ?5k(*u5L4 at XVa&d2|z8L2#q5sRB
z at U#*C#bzKBxA4z2SaX>~@PjnG6K={rSB#$b;$I)yEZ|z>+Xesjh=7v_SYu)K^D-77
zs}zd<*K2AIxJZ$|*qY+ at 8KQQ~vJy;YXSjhaqtARL<PhvI%`GyBL+MG at ns6cC5imjl
z19CU=*|$JzJb(A#Ujz97o-d$%bc%eETsa$N-4zBbWd4h=V3f``cPs#(EJkM*)SaR_
z<YocV$R8YMTsu?dt}bXi!tO3rK|L&R2@<f%8FRD{kmjUGDQrq6^)uLw_{aH^BkVgn
z&PS{0>SuvX1c^rm+wz9Jv4Beq<K#&NznK+6p8);}EvF at vQY%pI1j{oaC;-^%8>k>@
z3hJ5-dj-F4$%3K4%E8LqW&!X!fS*~<if!b!8O6{1%!a($S<lSvAui-QYw7k{nrB+8
zsn$vo*f*CGjm0>~NB<cA9})b|gqusr&Pt}(q!D@|5FMj8cq+&wDaKD_c^r(S(p*Z%
zSI7iIu|Y)OOyYzs|8Huc;Gcmo927ppO$tZ(%Z?S(WokSwtJL<0<}ue1*+YvdM$t(U
z-n5 at dxM&_mbv2HVd_e(xJ`n`8cfo8UAE at _%-@?BEzeNN+=D32#ek<p%_(VlMm`~<C
z2p(j=${5;>kS@`b=d_FRsvPp%!-$?|)9OPwpysa-0%Jgt`X}`t>JJ9?b}X3S<cssC
zEnnpjo}70R{L{C*T?-jZx&r}kPFa!+4rcMrd=Txj)!87V6Z~%v0Veu5jKH63P_Q^<
z2_6weL;=OW9AN&+NI25`VUl`Q5-v3SrFLN2P at pm^6gUz5!vdp%IyiIiY%mY(voK<I
zGq-xUI=44JZ){;tZE;VH?ab=*{6=+tvx3d-$*Rq6W at a|hSZ6&29SjT5KTrVuA6?o%
zO*kO=Mf|juQpGw`z-We~ay25i(a8()L99-m;!?_qGUuxIjP<jCR|8RQr!wl8AYa6J
z5BS~s#~}hwa-;};<Muh>l=!%CY)usKQsJ!4h4c<GP|5m31KQ&wpTlgBchT#FhR2J1
zLoUnbYkief;L<XQlCy-zKt_5)vT#bK5T-+kpD$;?=x182l?6hCxYR%8Rc3CIx_Wo#
zY93Hc&o)@qi4{0lq%}Dg02Vn^k%WSS2?Rm`WdTCSrG<cH9|ce*bgeLOL(!N>sze|t
zu;V~|rycyczQlX-x$5vuI56U0C6nUcqh+okkKlhaU-zLp<~Q?%00j2Z-clF;gFL?z
z1r|<OEH8Fu#F+!;93WrZQ=eIxo?ovnY}Q*##rATkK9{S{i`C|`yfm{~o?ELl7V>lJ
z73k1f%C{Etot5JJMtOd-JhulHB-?95fjAVHS<8?GG?$17iP~JO(oV2!R5a}g#zvW=
zR9}#lkm({|c_>!M!PBav;7awG6$tEDAU9GWM<BBc4>6re8*jL>=IYzS#CF-=fxYaQ
zehI+Oz$ltW3K}sVu$L0INqh19+&GLn4}zb=R69u{)|f2vEF#A-TibMfzJqOpe+T>y
z9h}r- at J^r4H^`S3ID1%u9ahKUhjVg3K0iN|mkH7M5GL2N)&$Qmu!}--vjDi#;Q$3R
z8~`eP6{O*r(fq_jdO5UfLLfK3YYKWz4MPo(j~pVgg;0_ at 85T(1WK)2*;&=);_zgy*
z#6KHjx&$mh5wRl`C+C8i>|3=ETZ|-YARXj+^HvrM+~P+HSrT6`O1nttT+KVPnk59F
zf)@4^miCnxZxRX|6a2i2QqmC6UM at Bl@*uo2ldjHY*s0HD0eN$=00lZQVxu;{USm7E
zR+(KZS7*|dPO3VaF1M5HH|Ddo*>rO;2OS#onVHq%>{<y55K1Wi%&g|yOSwuXQEJ4B
zb$X%4aYxL;t}V))eHc+<EC~uQWW!~3Ok#lv2YU9*S+W(8>LPIkCN5~{z{0=OX9nsY
z+&(W6G-*qw;v}$lfuDV}5Q+#1O@&k5MAwm4oI9{LuvBdC2y7e4J09RLMR)AuyA)$3
zXVXNa;4jr#Jwtpxrvfnp&WWMfBIPn>)_YkyJs2IQJX at c`%L{<Dy}``_kgPp#uz;Yz
zG5k6X;H;wdl?CX3887xTA|Q#C8FJc{E=_QUHNpWO?WO>4sPCW@;0>Vw=1>3z5e0PO
z9<e~PYy_LazRL&?Gl&Tj#^WhF*f&m|@>G`^HnVuf94z1`ih&ubDE{zhXE`%xLcrqQ
zVs$PI{+IWcj*EXifDnM;)#ui$xc8Zra&w_joyow3>2|W;T8ZgaqGYVGkb at eXl@g4o
z&1EW`WU&z~HDl#=qO($HFXd~qspdkqwU~nx`D!SU^F%Y;Bx0Oqcy3q0G;oIFnIwxN
z;+o3O at zO;pjg%%92p1d**r&op0Vgjw9{xeTdPOb=9-g=?`0s+BJWjyRI_lg$M$!lA
zDeb*qq~gEN=l8+*S9rJ``O*&29Ze1=Y2A^VddNtwSx}l8?o2eGXi4bA0+G?iT%tak
zth8e!{_4Pw!2+{vBkwP3L;zsHuvC&|i7EsS2&WMR;GyK90D*w>hGWO!=c>d+ZoTQs
z2n+?31^S7qg)9mf43lIL2-G<FCKgC8a17I->h1yNeeA0*)KKRSRB#2<wG{vPns;_B
zJKYXcW<!Gic@|rU))%8ELV?!aS at 5rro^Evk5B?kTKsQGSASm##+(}{6ZJ~f+LA=xy
zD>h at rMyxuMf&$1P!U6kmp->MO8xfFSpUWf*-fTG#%c6f|HPq_7clB_twHli4aCanr
z2tP-bM4O^z-R!VE4hvlPx9Vng2ypv<<MvO+t)XYYIX<cjeqBeG*d6e&R08K5w~tJs
zScL2DdgBxE`HvU;gOHETXFx#*l&RimHH;9CA7BNQY?0e0hNLSg&0MWrWKZ?kM70w)
z$Y=dnmJN|YBJBZg7Jy6*1Z)-X8Vd*nx#^(HjyEjeFgy=}pIA_82FVD3F8IeF0)NXh
z)md&bG6}qS2RkY5rUPcWgoyTT6fn>QuAF at F|IG71zA*-E;a_CT<1q!l3;zQCA<9kU
zlDXPcq2VJ0lxKp~xlnCB4EP&MvDQlbxD;sZ75|SR_{IOPmS<PX?4$XCeZT)V5dn3C
zUg|8D+Hx4YBO=5F at PheBz8=ok!ntY)1NoV0f4bzu5_u1|Y$LLBdy$ocndO7&${cH<
z4C}9e0_?D^2qi}bq%b8ymj&j$*{+~BBkm0Wefak<kivwNFl*-qEahXw4>>Pcz~&PZ
z6ii?TOktY5h?e2*npclo#-9ig4EWvr0{L_SfqY<(&qwE*u_|jpT|y**lJpi81Q8Os
zsd6(?1Np5eu*ak^%oyMl at S99l>grY%#fT!48uzduZq<n7N#o2po{=p4JUC}dI?S6p
z6krFkEF1_Uhu9H0Wa>iQbU;7Op at 7SE<F^q%q+KF`jt6_PT9x<PxBRU>DX!9h-y1^z
zu<8q0uy<}fJHMH$&W9RHk;YQAy%uY)#^?8?j!S`>)PjTpigr|exr2$f?=|zhC5jRX
zdytRjVZSnyYA)shJh=e)XYpQcYLl%5GG%|E7ABPw{O6>+++6X`ZboM}V>o~CAB at op
z1d)fRH*y=J#zGtlutUtn9rXkPyE<f8;G%#T7qC-cQv%W~fU(-~leN5$Uqbn4wrdhz
zNq$#O4f9#llX3f!mf8xZANE3u--Hc9KC)1epUTTnAd at Q*JotPZLNLs98 at U}GBA<se
z%hhHQtUIdSo-LtDk?-JN<%hC>eJZ*=EHHD0+$`XSQzIoQz^emkwwy7p5!Zs-%QB3`
z$)WK~SSFb at Z4V=}Ye|ZzID82NuF@!P>qG&*fP5310!Fu3(tQB_O)|S3?cHZAVQhh)
zP$l^H4^g8oHm9hi1Y)DyBB9vyl{<mjLg?UmxkKmY4_{a~^VyBsT<UnaaD%%BboS2)
z1zgC-|KsF=G+8iP)IP4BoEMx+=G#Fj2?eIxaist(Fd;yex&r^xt(eIL;^03$?F0X$
zz%oo<oH+HO)W)g#`l1g%19=JMfyfAe$LF^e6U~JLu*dj0Y}-qT9Vj5V0Djvt4FR^7
zlWQTDLnjo-+M!^cN-`9nUV&1ja>Bi1ynY!$vu+&F3w|qm{eOmhbUy3<DDv~=FtA4_
zqYap}C2>%0lgeC6FCw2iC{<c<IxaBahl$idvDj|k*-`Mjw at L&eU>^&3xSa(;0mA}Z
zItNhs;Q~cjpgt%IRmq>2zw&q`5Kus-cSr+)5{G?r+Fj+!ehTypo-V at sDBu9z>}YN%
zTT2_$)F<M{9~lAvq?1%sh at 0tY&veIMUkn{OFMH&|{Ao`wHs;es7G9gn96JOwHd>;B
zmO7QC4rn)OKLyTrHVqK6CG)M$5+;y906to5qJp46*Z*fL{>-$GXOcxvvLJ!=MQ at sa
z*2`xQKh!rU<HKKy4COY#LPp^!KeDBu!Q3ms|8kN*Kz1Ohu_+J%65Fx#gaGmXb_&1_
zNr6rx2JL{Kz6Fra4qPA?<4p#nx`qNLj(jr at SLS4?4UQ3x&*#le9*x at 3>F_w-Op%#2
zqK)}Jq;hzBqz=euSry8XWV;M?0ej=~1^i}71WWBWuxE!!Rj430^4<H&0*dpD;yFZc
z&K0;77z_Bt|EsXUvBLu1gzLo>VUYnULI&Ofa{U^l2FM{En!l2*Qb3mMFl~799eP4Q
zFaG;5?|Rq;ys3(qMJ)vLlJFYYZ!%x-KTHdskTgv%BI|67r>Cbn8<8Uy=6?G%O~4Q8
z06#h$SFDSrn61?XVMsyOocMq6&qMGpHY*-}2jeAL8k8Ez@(dJkqCgA^;N;6~asi=0
zsTD;6L5fV-$CpW!JjC~MJ6xy*p7F|QWF+`U at sboY=oFeoiU{~I`jFXze}0`l!xjOc
zxqudh>=WDT|LsJ8pdi(rL{PyG^2P1T(gd=m7Tq$M>W*+LEhBrnnBUpqJ2-dkFs6JQ
z at LN*KM!x=Jw$#C>>QHzG`S6;hp{eSaS at x_8wu>uU#-B6<{IsxQeNx8(zYI*XNQluV
z);Uq_v2Cj?;CRWA?bKj93#bM-6cBksL-N#aE*7(xnX%4NB!o*a&-)Mv*wMIPGsvO<
z$H+(MchE%Gly2POXRz~kJAB96`?b_F#IPM8k)G8Mm48tV)UseGf(;5pGvkC*rs0>{
zkxD1dZB+pw2&4!J{?Q~Z3dq7iYP3u%{@eRzW)IGRe?k6S8nx3{%u&@B<+G5*8ph1N
z_<TczWMu|R7#75*+fYD4fZ{)259Mn?zD8>?o2~e`4-_lr73%>?7Mo|rXb}Mhl!Gdr
zNQ;(<xrjm?@GI=ufdcv at QGk8i!T<`mBoHoL%q+7h!&^r4o3UN5w5%|hB_?a9n^c!8
zYc#)u|3M1hfw$S|c2G#f at 7kc$z;XLpJ2kh7MCb668M6cV6Q&`Vp98NMz#_M0ia|W(
z<8F^2f4Ug~(gyQj6@>Tue0~B>m}49(x44T~*WbGRzk6R<z}B4_sIURd-B at 6L9r)K$
z53vB at 3ig(dL^%fJ^XX=!Kz6i7Wc|4v1&&LBe*E_%pGu&Zx_ulz86u-IP at qkx{d at uz
zAe(9S14w)~C_uZ>bR&w)$V_{gu*prMNJ6VK=m&5Zh6^Zj2lmbm{=d1W4frv3R0Y-M
z8M at 8Xv4vhUPuAwswK*(R#b%S3P+%rr?pPEkwIao4xX=g{>cM<1kgo?@i<wM$Dm^{P
zWvaGgoJmRz#4P4L)n=opoyJ0xezRiB%a$f#C;<Kq1(L_3fE at x15u{qq!l4HIRC|o(
z*BMOQM`;{)r{Eu~Ra_M40^XiGVB~?Y#xfiK{cqKad^&}|yv&P~&P+i*1QefdkdM at n
zl|oHn2Uox)V~(Lh8q6~Q?bLQ03Md^o2Kcc>8dcg+YN3s}cn|)S3)`ZA!v!S*rG6(C
zh$lCBld=HJTY<ptf8cqX?cBc5?0QOBK+hFipfsd^=rD*^<rx!Y92KP1dkq1{0>9{d
z1A80%k`S3{5BOIKw3cX1lt6&;mrTmsVhjpY+wo+<g9<`&OgE#HU-19101-lQ9%YVm
zc974G&YE%KA3CTCYAoXanc>@S=6PB9u)dJSYV#HgDzlV;EDB7wqe=l-0QmDYnCPdl
zJlzV_X5v(>nH&LI`R3`87yPr30<#XOLozRk<?B1ENd-S!=pc*`Q3Urz7fBSb69Ir^
zF1i^PlfDRPq9din^E=>|$y{a{uU?U^+jpT|F?@W?JK$%>@{qmG-$|lPkDN|U0r|<i
z*NuE)w<4cu>G*%n1Jl9m!j1qN*gNJRpXXKTC_#u3oJr1SV?It|NDs*X{5uh02O=m7
z`bG_Uz$|%zJ?v$=fWS6#Xz>ttu95*VrW9d1MNt)z!-4 at 6u#2BP_;-7L*4Fkj!%GB@
zngjk))2H}n+gV8=37~+<q&RilUugn^2&v+v!9U|o{#+$s>M&7i^0TWY#$h4C+`$E<
zfPh~n4)^$fnj%;@9SSs;a;;@!vK&^P6|vfCtNGdWqFE*mYCr^G0V^NY=8~*=Sed00
z8x~LzRSJZP4dz at 2@- at D^52?fTs&t|ZwP>_rwK00^ar^C+ID=5Nxgc9802jne2yiH%
zXMhMO6(M_c*tzI%fe{vTJ{hhBez{X#0R4jtVjPo;C9Ycv*FB)MVDHBEard`_zt`>K
z^BrSMQ++<dp5 at RL`3z&RFX=7F&yA_bXO^qLUZjQKUy%>qcnIcsRUJM|G0104Jrn|S
z at W;8!7;o$NcITW7*cn6wWdY}hcW}Z%PikOTAg9jm0^&a7)Ft>nEZ2tq0sqXffCx5s
zy5nx{M1X3llLB-pph>Qs>h^%2Y&U2IxkAHW9>Y~qebp_%Ao+y?Ispe2WR{f{{AbJF
zLY)e{`2U%e0^$cvPOTEH!WPV1&fg{eNrAO at T3%gkL4nODR`xupy6?&LgHLH5I;YLP
zu?o*0dP?iad7b at Fu5X+^z5lGb&WINl%**13uz+O`WzC<qbpF%-Pv<kkbIpY$IbF3A
zqqc@@Bi2(9!hJFKkd7d>mNjKSmY?acfL|(wAT13oCa4r?Iml^{0Q|Dh2SZw_`B}=$
zESb)N5?oW`k@|IuI`FQZIWFei2lSCh-M%gLtvQM2){qwR<^HE$(p$4kDC at -y;qy!N
zuuP~FuP$r9Sg>~?-{iJ}e0BRcd{QS)V6BrNYM`2^5%Hdk3+Ky`gXbl?_;)3q11PYw
zG=d0xC at 6KYz$J<t7Rb*RPhwP%3=m_0pM|o`TG`S>XVesbE7n7S?IFOyzb$yAykqJ-
zDtk25#qF0`J`7+`_EcjZAPN5S6n{XzShhk@$eXMB!9N)&L_nEy`xTN?QdIVl>z4Dk
z at Gs)ujsKYgk_cmm&u#BNyKdQ8^@Ha$51rfE_vGr{GqDP`=Sk%~Pb|ZQjnhl(rxn*v
zFP?V6%;9sJhn`YDa$alW^y1>dB-3-|_Qe+VN5Mb-zdn}`|1bCtvtn4a!yI`p<xrY}
z7!iXA$_1f-vOrXyR)h=%Oqo<GqTpXjD0B$Ksh at LeT^;0-yJLfVX5k at zdcg0-@UOh@
z27j;HSLB0jdR-jk$5O2PFSi4x**h2;1NI<U9ex+{>hlfwO$ZRFW5Yhm at f3o{>1cVy
z;qzmeH-W>aDFWp4q!z~vdb_i$EIK$6Xs4ZR5kbR&H8aa-c$7RmHD^+CWK;08DZr4K
z!M|p~L;)xO{v}}9RVLk$?;}la5&{M|f8P+z{M%&@BfM05DD`(ezX3lp%fQKW$BWNL
zOQ8J8O#nagfOd!+dZXqqnhcaY6dmpce{(TQ>Z%kl#h-rs69O>s|D<Ow9zMT$<bu|b
z^IPnkanan9p1E-7+{P&vbPhbFw*M at mgAn1+IgPz%mN(8Q?K`sq?7=@ftEXi5ompNw
zlv+DAyLceJ at 5};eJAsKU_?O9X5VI92HG-{GKZC-x1z&Z+CqytTkXYbE0fT>7z$y(U
z at sSls%(&R at Kx7<TF<r|6KOul5SMCuUl7SmZc+D)ZU(waOY0 at WqTy9_04k&daKb#n+
zdx63Z6C79w8nvV8Ex at L>(+_ at Gp+%wqubS;J2bW3Q+Hq*b at 5S4TrDf^4+;k+F^Lqjm
zGp#N`{D6hGZFpAT?HC9gUTphAh`_uUp at WTNqC*c0OpeUmEBNNh0tyZw9}37Hj>{Zv
zWs`0#3YZX}6fmWJyUt@|zvKBC5OKh7IvgbVWll}0?PcN~;Kyy&7yXSTKbf!N|0O-&
z1K=5Q@)zm>8~jL-Xnj6~ILG-{=TIpuSDQxg;P%z|Lj;Arv*mdxu=n)EJ*O>Tdrw=~
zcgEs5zq|JImn}W(6{}Bu$--IBSvquX9XjkktFrIO<-KQ4?|IU+5aIN~`f2&KQ*%&Y
z&y$MFM^YQ7XID?99W;sfX at dWvd|@bnB?=RyzzYW=htJDzJ}HJl0e%`Ra44W!h`Nx1
zAN`~FhXP3>Dx|S9MpvhV02ZxM$t_n(I+=e%_%}h{${k$DXH*OD6VAv!sJ=2Yh3~fS
zDRCyM$n3TpHBYAKPH<axRWcNC`jO8#s#WCFO8&4o{Pbw1<YjsbFfi3oCdvil86U{!
z{h9Y6<v}kq*(LW!{&7nAy$(>po3t+ULE3@(v3L6Z%4AR5SwIQ^?4?X(j2)$bY{z$z
z5l~`f=$SD`et7qr*aHCr at Nd`oP0nk9U)uvv{(v7n%mOt9{C`V4|K79W`_4|V1xt#5
zCM;BDLJRxD3kOI)1H~p&&RKq$76rk-D4$uTq9h>#tDVad(5!s5cd+wU7F3rz*x|De
z9WwTeKRCR8cz*rJ{KhGBo2Sm5|ALK+{%G;(f3)<pmo6SWw|3wu)qQ6v3yK?0EUcfN
zUq3Ckc3Nib)HL8f?ZP_vXMQwWLKP_hw8ct<r+Sd+aOj-Uo+rl-otNQuq6`o~fszIS
zO9f4qS|~cy9c!mcK at 1qM#rd1I838{&AI(EA0ouc)ZvuYDEdQ@`c)X<80sJ5z3QOoW
zcZ9?tcUA at Y^ss?^!U1Xr-C~e03vg{mz83ja>hM;;o+5U>!rkGAc at rEy;5V~`CQ>=>
z1}f{To2r)udu~j?r|?&_QfODR0io@&&9uZW_7vF12EY5&ULw##XgPCR6e-|^1x6G>
z0SyHFURLbqU?@N=fR*a`H3m5)P<x!$_Wxbk?*c#VJ<$=$;~2<C|F at RG^AwA#0DiKb
zi(WR3+E at JJ{41UC8PCoxAC7IFk!QWBQY$pwW(Imxh%g)H7A;h7 at cfi+SnYPtlknSB
zt^7M~zi+3y(plVCIdbl)r`UGnoKw!c=*i1_H&zaGHjd1m_uTboynOMZKb*ht#k1$V
zuygR7%Ko#b_ddCV=ihu{e)EaBjVEUJoSC`kr86KuU-bzKrYAH6kg99&f&~nwA2>VD
z?L?V0ZBanA5I?r#*D5IaJ|O`7;}{_b8W<mo+K&K!vuZT6>22`$&xLe|(6 at 7Zbu<wC
zLnl!-<gFM=mO+Qm(A;_&wZj)+As0H*i?tALT+`d_us6?$$Y%#pQLM`?AQL$zhmO(Y
z$@D8pma{=t+=Amg!+3!Mdum^_NpQSiUSKaKsfXRtDIgR<VzWS+g`~FAH8;plaNquO
zCU&`50JhyMP%dZ);3dj&(*G>QH)h$()L_T(|AK!z=SB8N+Kc9qg%L#ai|04sk7q>r
zU?%hRO6F_hpRq7RKBAi9r;JVPrAgbfc}D6<&&e+xq7=!(P3aj{b!HOQGX2b~Ovn;d
zEZ39SJOiOp*?(5;;5qfZr_C`0z`_xI$md~wqfy^%LV>Lv{+)Kg>Ft%WA;Qdy-?IL^
z*KR)bC9~(hsB``cJLkNh`IP6^&wpY2tmjtGeqQCA7gRt#MXK5iWTcIjULaX>15*m{
zD^^cQ967Ia<Y_7N1A*Z5i>8?=fYKuoZY)Nr{}dZOdIQka?UiUUE31(U_+<i%tk_^y
z5RxHa%lY at t1?z)-- at _eQ;DF!JJaTIonNx$ff@>h3wyRj$!>1FB=;EWngNR_Ty-nm#
zT2X*kF+`C}X0OS5CequSkvk}vX`$R2STvptlQGLLFiJ;sIPRs$pPdeXc4;H8g%$by
zt#(<co3*BTRU?i!)^R9a1-D%auz!Nc?>o%A326>*<t753BCuCcWYPgXk%?eBznEJC
z=uS8Jm9md`ejE9N!5>a=TV$#H)aIxndfCCN;4P^Dv(75 at bM7Gsgup+D0{_*SC at b|n
z`%h}iM-od1>CXwX{J2?%IbNSnvKl$dK2ymD{HI>n*>?uQet!M%EFd2Me#QTW6ie5i
zGQR@@tfvhN+8akYfBL at DUV8cF)BbSwf)}^Xe^L8_7q!p%z52PoU;CZcwi*Wiv_N#$
z1F%&>0P7~%6re%E{E+eW)01aBD}$~>1vQra)P-1Ymh`{W^wTU9h>egJ)R#mRFl$dr
zJ#sfL0Y5n)*HrLtDiSh{(dhp^s1JNN82<u(Ggx4QUpj@%+Ch8 at S`JFq=Avf(F6Q|A
z5ONA^JG}+}T?&8)Q_>fakJO1}kUBCsowhe_nGKh5`1~kfuR4eOE~&hS5saXL^ISQI
zpGW6tp@}b}$k+ZQD(9d}a6Z0^l86w&tZ=THgpbyjelsk96lV3FJ{Is1_Q{v4AfIUX
z!ay_Q at 21mF=IxrL|18-<fFq_;-_~-s<a%|PB+eGhv&Cc;rot4KE_xA%3~aFoQo1DK
zK_#@}e|{fRPU7|1IQU;ZCAoY!$<$y%0QX^8Jy1vdFkFS^-+TJ(S<hbCbK2bIDRUb~
z7M3;_PCx&Q0r<!HTh`n>cVXk4<4^!5w3bUN2U;(=?8wXCvHvA++xWdVF1_H=h3CIv
z{&|<ozUZ>0_Hu?>Cr>v+ at RU?VC;<Ll6i_a(MJDZga_-<$3j3d2AOrw-fmy*Lelj&$
zU-D;)auYi6Z@@3>NHBMg=|ztC(W at Z%cg&Rw45om))Wg0F{w~Jk=JIk`!6!r2h!cVi
z;|{Im7(U-Dz#>H$)i!SAn at YaC1UpJ~$!)oO+%*Po5A0F+ARq0-+cKfs(K);`n!i|!
z@~go-+dkOy#jMUfLsIHpEN_e7ki1w%J;cmZVwv+O`KenJ{YGMe6B^9BZ3_qT1^Cr`
z877pWf4D$FGZ750Wz>%3acCaEfHpwl0)A8HWIopv51WfIo+0l8`O at L0mcez5G3HA<
zJ-U%_0AS3p at 8tZxFvCd{*ja4n;8RK~M`+Y!1s;~-6z9Ksu)cXpXKr(P^VC^`{JGVG
zvu8d1>~o)U{?&i=dC=QOfx7Ykt-Wm)&Lu!>p0jZ55a7JJxVJgGUVi1f4!-cRWhn5f
zcO88G>*t<($;@+JwL~KvacbdUc<q#o$pZQ*0G$y+8VFX7#Ao*er8GJlV>p|L5BQ-2
zXAi*0Ef?|pa;J4OVM-PpHoZWW{?RBP`us!!LBIc3 at Y@a+7fSjJYXE1qHi5GO`KGNx
zifoE}4ltPS@%eUo%P^KS at aLEfQDmn15EFZChc7DtNEuUlIk<z&2$PZdMVX?X<%Z~;
z5X>iO6qMygrGwi3N+uHZ3}n*`hN!0fiSk!8IfYZ at A+m%o4+uGR$^sJ(?9{-`0td{G
ze at 7Q15<#_%2z<0sfL94mY at q-xxQKsd?vu$%kuy9 at W=H8BSFZzGNJ=PR at IQsa=N^Iz
z{&;qRhoT$lsLxNvvnrmY`9W~C-{5~X*<Q*lvP%DIZskA~&%bu4v9iBT=DT^y47V#H
zY27$Hw|QjoiBCQAwDX_n;MPq61wVNK;GaD>KSOKiYJ(`?KKK~>oz=?X-ulwM+6ymR
z`GdEv|Nfhnp7;8>Ke%k8K9_{5c=ee*LHd`B3NjS1RggwBr2vY^ET$Jo=4tJiB;!Le
z;qzJjK)Z!e3yG{>)PiXQ8iapK3t3TM=Mc~{I$(p}@vb1BH)paKP6>R1d<v~-T1CFg
z;dj*zT)^8Sb+}mcVsX8Q>F9Z+8igJBi{R&*<NX|+LpaDyGg2VE6ST|$c;oZs-eC^%
zov+l_#lb`Hz*Gx9NQDrICsK`?39izF11Zjc6IejS(y+j;mjYU+So-+EFR(YpCp!B*
zL@=2GFM)r!iTeWo#B0_-=J!&`WO$2I7Yg85fIaE0W0XD|=g%x!d>}|5sPUsP(2~f5
zADLGr_&*RPjxbBEwUB19{iS{7=3=_doq1Pss|OnE+`#crd-WjJncr-lap9BxWozq)
z+dwQWK)q&IFvFnm-t(8X9e%7Q<~FJ`YtxH+s;_>}p%=Vi;rXvyD>kJo19?NL3k3)P
z+f|TIz$C at _s-HkG-3(J*XFWZh{Jl5K7OT;eSv!J)XKj%%DoNr1{P#owSYQjG9VpPn
zzZ?AaeK7?26gJHrn&`4%fntMv?bT6-??%3iVQ~QM3S?)}+r}JTZWfHrp~*RIeP{92
zfl+=1J|CR}?31}ELB45|#_fx%KQZJ>FUJTg`RILPgY*M{6J&t-2wD7@{wp+wgae(f
z;uP)eL{+ at Bt>*>0Hl*D<(!kkcvaq4s+z0EvOupu=oG8OYU<QA=Pl3$(nFz-`;TSj8
z at l(pvYz3DH{s{_ at 0%NF)ea1m>{-|HFKYp5mAJ3mEPSHP*$c at ufz%rHmK*9gKtcKB~
z!oSY4RHfy8Rc=eljd~aN*47VqRu4ddnaxv{&U(f<5B+fK$Aj=MwV+=7yB|JY3N#ms
z^PAPi0xPtz7Epn~2>LPbLgzfcEY+$i4I9$7)RPF<6(PV6=7|^JpM(*nFcYv)jiw7B
zLcqd4ZYoI*)y2QHSfVo>_=G9Y4}K%3d6K9B@;9EyO#yTgrI%qHE#?pO`A&LE&7Wm3
z5j;dFbEjaLz^;icaUY#SG$9S7lYuE<^hGlRH#Z$JHGC;%o*?Y;`Q2|m@&s<q!mTsS
zBFtSPP$wZA07Cj1SpSpW08Tz=H$4n=ILqjj#saHMWY#txNC9bG7-&va(|#45uSfPV
zLY_3u57Ou08>0P{ge4dmZ!Sj|{bxN2X^AgQfceU-kNYT9=6vkrME{H<dmQlN`6>S3
z`Eiw?onHim81M!EjrnAKCfQ!ha=$I`#>#99o0a8#^|gZ_zq58|cF!rx=l%AD_x{UI
z9{i7A{PWh<x3{*wx3%@tt*!rYIdV7P`}V7=jlJhDx{f{mZfkkEzMxZSGPH))=ThYF
zq$i69!%iY>C?JDkVBT%~G#)|$ln-Oa;2)gO^wL?ET!8G!!vB=IEPF11n*vrXNQBTp
z71UM!;`znEg9 at INQzNoKE)As-R?3|K`P!V*r}F`!A|JO;I!4$k)G1GyTVrQ~Oy*@>
z3;K3&zmzdqZy5=f$Z}6)S*2ECkK3oRVZq)O`Nxnt>hRs*XCMFHy-Sz18o6~Rarnr@
zYO0YqWI%{iz*_=El4AYIP7edAdQU9q2?V|PcVPcGcQ_A(0InTtp!q_~cNYCmY3tOd
zrvWyuo+}Rc_nwtFa$$<|3HVb5kGOp!d+3=bA~?#Q5~$$6B)@3!U__=u%%)g!ZEmf!
zxTmtT7ysW_J<wV^DB#~Xym<caJoU!AANuM~w(kATk01Hb)+3K?ecyopKYD at O2Yd2g
z$4)#8aKEKlTxDA4i<zlm{<EJ~oZlZ>Ih^2|!+N2B69}{}RG_Xa1tP#-n~7CBi7GSh
z8?m(`dDd#<q|r#JPL&}cbv0HBKqBl=z=eN{0=*K*LXqk1QCu;6uyP7_1d!fo8d|t<
z05 at Ojb@-OrG02y~4h4VO`H&fiF~YiL<#fJ*eB*wFm>{3Dh528x^aRMq*U7w?1Q2{Y
zI>$(zKIH2|ZTZ9hTP)x%MaDED5E at tkrnQ*lM8N_A87G{SlP!D~77S7Hl70rxk`oJ9
z1;y>dyZ-;gFpso at WopjiC*YqT$Z27a3!Kvv$fabEi%#a>eoY;h4hx{b{QmGWUsV>}
zo25x0!jt0mD?vp*lf3Z%lt2MLjxksDvS7vf=_ytNYqAL8N?~@bi15bquk3FE{?!AW
zmHo44KjYl%KY#zVfBofK?tk<vkNx7F?>zRk|JpkGgI_%Q*w%Npw*GZXxZwO#z&AFV
z+ilNzCz=R5?*_kGOC{D?)MXNxnDD|k&MzH~5CXUgc%&``3=2TMm}%-pBcbu=@hdlD
zI8SaiO|8Qe4P?~_Ndc^`0HmfJ0t^LYAPjR+pf3dU0f|>-?aJ_^&Y<B|%i{B;InxpO
zHu6XD`SKEzKFHINNr-tf_{&`J$upi&;#-lGP{Y&_il|^-R*+WABk#MgHxA$O_A<WE
zZznV{XZQ(H6-<c3mqfsr5W!}FeWMo2Rx&M`T-CH~uynb%+>u%YXQ>+tdRgF>LywmN
z4*qQxNb{#P^6MY+her at O6l@b&F99)Gm?||xDs0#?&V?~74)TFLvO&R5KNYW<B8dP)
zi=T}A&aGwZv#HiXc9umrR|Ws9YK!Jy+25wx^OR?ufB7{x-ubl$um1GCANlP4w?F)i
z&;H%_?)lDte(fh)_y7CP{%LFLF=Id2+QRhTcI4|bt$i)~kmLXV=UZF<ZpiiUkG2{t
zt~i^40!$f(xey%9HY>x{rg_^$0X&iz`_j=$cU**)IWR^RKr`gw3zI0HOo>Zotrx){
zl$8RT5 at I(5Xctf~{`*3JgMSq~rm({ri7bbH9ONT-=<?-Gsf@`|3)NyKwd=-W1gS$w
zN52N`d6Lq~P42|iV~CtC@=Y;wC!J$pFJsLE)sFSe&8v!ADyvc(Y(~xf%N!z at aNuSE
z`*Nd}Ad`bw2a=gVX6ROWb+{H}!9;=G<OOzDr^un+^&Bh;*p9sq;oBcd&g)v<!QkJF
z{F+&f6o1My-kJ4ys^F#0DXWFl0-}4ZDP0ptAc8`6+9!n(3O+gD;Yk-gP=ML)fZvE8
znHStyPG<^{&Jyc0vy3zMUaT=1wY-mE*~JTf_o6 at h$j9Ds!_8OTa>q4)b at z>T9sS5(
z-+%if-~8m!e|-3dKYQ@|KmVJbZXNyMF9GU*8?3U!Khql28pwhJPhByG9A|^u|E|fh
z|6yzE{_p+tt3TdqF3N(6ER)E5<QHGI$WSlCcJ!>`f)GLgo at G}B`K1XSw$}nQHPvS0
zke!S&Q<nJ-polR(a%a{H!k8N0_5V_B7!(3rECA|m!?zP7#O;SXs2!@Brh8$V&o_6F
z#OGto_1HKqOW{H!H}%YnZ+?Rb&T_v1U{7xVQio(#0WU*Wrlfg-u$QdXGK2g<f at gb-
z;2E>VnoJ&~;>!3MLK=iiMr=id-dNz4MlwrImf0tk!RwV%VmN#&LAJ7EGhU!&94jL*
zxxmg8*p7KO1#tL$Pf`FbG5DuBoH{L~OC8~5tS4LMu1r$Z6e39V+n90tXdWK&JjR+o
z;`~MYdvaAzb0O83&2*MYdr|)Nm3>V-|LTF63x4NmuXxj&-gfo%@3`S6DDc5MzwqI|
zyzA;u-}lkG9=Y?;zrFvvKSTxH`<=(oKVSN{pML#+w!ZR{t^eBE0=lHeo&7Y3cA9%!
zEZEa*?2#MI9DLg9G0^`@lUDOS<QfnCXp4`KK=ZwyeBmFzef{T;LID;L<tIGz)n!pZ
zh5|$ZPKX-&41Ue+4R^SSOeabfpcBV9IR#dhW3d!jAi|m*Pd-Isq~1F~^y)wg*eXaQ
zkW#=b5C>v$`%Ia~6XMcU)$|A+Gba%tgdv+ at ipM()@=-f<Zu2!rPmG{t_-P24LBUgz
z&-QWYoB_yJ=WlNZ!d{*<1Hp``akno=X7H6L{=fy!m_-B;MFUvCca|IhT@>@1j<pG9
zHLA}i9S|Z6X2FgWa6`Rk-=69#{ST(wKVS2Zl1SwzLHnOH1LNLFZz*h2&jAUrKy{8%
zz|lM)hqg}zKOF_7CR2Tbjk#oNAve1^y|{_;XUwa;erW!J-+AiGE`9yW-}uJ2Uwgwl
zZ~XX&K6BICK62w<Jo at N|K6TfJ|MI?T{_6f4?t1v1fBx=g|L)(v_}$0u`SxRv{^aNP
zfA8nt+S>Z&PlW||Z}8uCSO5`hJMgrXo$&vE?Sj%jZf*VT&$fPHSn$C2e|-11{`JPY
z9{%J5- at NJGhgo7>*3oSSpZvQyMubTOhyt(}<YPP}10o{h>X{?MDhHAy6g at N#fI8;F
z&~M|+l$R=ynGx(HYh4wzLn4gNXO5)G0CUl$u-PZ|afUq8MZTF|36}8r3{A2mY@)!3
zk4Z7cpTI3M9OR?(@%C<qe++r=g1xPFY`~*@j*WS3fq-RHO_45uA6(Hu>-8BT*!4yP
zBqbmUS$2XjNEF!-L3EK(fVcu80<M4rSt#IQft?WypullGzqGv>|4$W^#(pzn%Y&;Y
z|3%&~Z;>tOEd%QSAYYedL(s$O at U3kTZ6M0W+-@w0^T!AujoI|fN^t?_zlXH9y>@W!
zoM)Z)wC6qR6>qxqWtU!h`8C(S at 6PMqf9H)K`pnJOef}@+c=+KD{pDRB`qaJGeCEp^
z`Rvh89{u{!|9I@{|Go94 at BZY`|J-`y$3K7I`@f(%`Zqt at qTmDOX@qF)>#!vjIM&|Z
z?xVoZ4Dulk3B^DBQYx#s{d at oAN4G!xPq#h%^_%Yf3g9OJ`P5gxdih6gY%P{pvuL^<
zL<IqLr2s4-BOoHM$iOM*RZxSp%)tWEVZ;w*7CMcssWJ8hF=v4|9SG|Q0S5n8Q>aOY
zX$FQJxI44~D`MgH5j=f`O;gY8LB6b=#SJoilQU}s9cf55jdn6dkOuii?Wni^m0+)$
z#}+(0!QS|JZGj-TfO(9MW}tx>gq*->Yv~3e at Q_|0W(QODSGT~Eh-8LG&6*gJBljoB
zt~7y&z+rd>PKC4*nZ`C#8J2ni9|YYD3;HRrBmOPtFUnt>zs~jw44Z`xr1Jrgo0+`Q
zK#RA}l)a3T($WAb3<ZoFDoQvI&2ND}z)SS}5JVXHLj17K!{R2&hl1zq*-t<Bsn2`H
zAHM!|FMrdeuX at W{-twVquK46N at 4fxHD{j5v-8X&W<M-Wl`@;`^>T8dF at GtJU<^H4B
z{?!A2`HgS<#aI9K&aeFQSAX)$d%pdjU-?gg?$IA?edWKl)aN^}cXr(P2l=>t{xPg@
z^asEE=Fhht`Oz=${my?r^uzzY>s#OX%s2n>j)(sKmM?wnV|PDv=ObVFv+Hku?<a2i
zz^6XiTAGIP*{WyhPz1gMdwwrl=<uZHu;><@Ki+an=F!tT2mYmf+BHYgnJG`WH=(vW
zcG(R9E;)oWLZw8_TIdLVZl-LUe7C&gAfFx74#$ur5-FOC%${I5Q*Lwu04xR7T=nbi
zAiJge6R6(zI($d%%gz9A at 4`IDr%n#$#o?z$2sZ>E2A3&4fpF>eG!38B2ZRU)r94k9
z5yEl~g$Sk<fw3?qFQ9gC^(H&$7e&c*2%{+if=In6=0_QlBbfP*^3KNWyjVtots<wR
zzItSjDfmmx$9R4V{L=Z%>fh4sKf9LFwjbO(6&@}6!2;wEu^wO)n~Z`nrQMe?f*(<Y
z=SLL)ej}3*QK`mUYG$RxExMNXHmP=Q9$7x`ITya<;@7<7;@AGsrLX^!%P)V+Rad|J
z6CZxp&DZ?djn}^Y`s?0$%?%&D`}0JBYybMLtM0t}=KCMK<$;F?1fO`|YhV8Ee|-JF
zfBKal|KdyE{jZ09u=Vf{w!ZkUKXowQv$MB_s|WUq{6~Mh_4mKnqR#Ws4}U>I@#tee
zzy0BVyysirMPl84^zT0L<*$F}Q+MC- at S}fz!>w<-_QrSLa>JFkU4O-G*R+?)czEhp
zj9&nISb*`XsSZ(5CmNFf65t>LCuC+bc<}7f!E>|B0Ma><N&%^Y3I(>`HAB(?jI@;K
zAe|>t)t at p_zbDC6<WuSgJjfngpDrSS%4#f1g$l_;;y~d=w_x at EDeTqH^AYOjyAD4s
z_dI2FT<wk)q?y&U)HzEdfiV;{?i8T%JX;}xuJGSrNn2T>Q at C$#)IvE_(&XN7U?>ny
zro|Fzx@{#KK!H%yC(d8^B_{h;zeJY;{UN|w;X!1NrF at L@*9k9-0%*?<4G+{pCB4nb
zVh%upkwnIQHlLVb-8taFlfWJ$E<gv8UzU0R7}E1R$FNs=eyzN;r?I at RCF5Mb{nU$|
z|Ew3i=8qBouYB{HUis$BE`HY)Z~DLo-+Jv;Z at K0}Z at u=Kw_SVPTduz0#xH#SwxbW;
zcJz at ieEZ>RKlA0A?tAdM&pveB=N`KC=-2Q6w;z!Ie(fjX!|(dmV?D5UNubu=7CFL~
z|Ltd}CYbWo$0U^|g53G&Ki~JAfB(+bPd at SGZ{GI6-`;f3qsXm09)1Myzx$?J-+tY7
zfBw;ryyIh6Uw-YiFM8eUY378~<U0fc3>Kh>s18x!qPwZH!t$Y10LEEOh|oY^G!tY9
z?odD$i$Db#A=FO+GbjM&)u0A*1kk_~`nc|l>^MoTg?x{6Y2x$g at KNNm(Any#F^ZXp
z9H}=NS>nLb0>AOkJJm4NpWF4E9#=oW+q+%8+zUo}K8?bWrWaZtY5Wj at r@x3rz`U%Q
zyIW>MEXa&_8<v80;evhJBMMNQI!C$?0&uVt5ICg}VN$f;5To0&IPkV`p!nzR<Z6;B
zo8be(A`S$%uOF&f$cX}joWBKrp at 0K^S=CVdKcfK7lwPi{ly`~~DE~^E*1- at 9COqra
z6?&V2Isnjx1PKK6MuLB2KhB?FU(()%joR|w*7~8jbDw>|Q=j{c-+%QhUwX-FU-rgJ
zUUAu_e{%U-U;B<fzvMkvUUt<7-+0ygFZ<Ak-g5QT at 4NN(w_bh2dv3Yq)(5`)$p;_2
z>AnZ9y5p{o-t*-f?|$IwPu~v_Zhi3UU;5YYQwaLT|NP><fB8{!Z)>}C4$K_={?=Xp
z^w>B4dy8Yf_Fq4{<B@;*;=g?Fvw!>TJ0Jc(w;%ocPu~Acl~}hOJ$lo9UwH2=cU*Z3
z{{I?i_?Bxv at Tc#1*Na~Jy63&>l at xgOr_nqB*^AuQvJsGaFGGR*LW+Mz0r=sE&n^DW
zpSBqYAkl*YoI1gOQ<u#0P!wXCm<;#ps?qe>Mx at nB7R8G8yM0AIVVx8}kxyt~b#(a1
z9g$G@>gs7 at 2H}Ey*I4Zdr?e*wd-LWjgec`Bozj?)wc}Xhf^IS6Ic4SufMM>yna?g~
ziXr4Zokeufn9{59#>P1t|J)^l-v16=B-F6$Ie?b4%IFCvJP?#K!&3hMTXd0xgRUqN
z7T6T9h+u^S?j~$*qPi^?Pzo?5!Gxz?@T>B7W;>eYP0ZZhsoH}7l&7UBexh}8hHIy$
zSRThzby5e;E+F!ufLd)fX6V3_aF!5^A%3`TBg$u8a^7=ka=`h&_%*M7=_Rj0|AYTO
zzWlP+{Q2dtf6tYde&F4&d(V3=egFI4bkzs1y!jJv{_wSLz54pgKk~5~@3I2HEf0R_
zsypt!?sH#ajO>QbJ$mh59sSJL|M`xu{LKU3`yo>Rw&P!)(IK-3|KkUDe&ugI^_73P
z?ZLml<LE!!`rsqCeDP~nfBGKc%g4WX at B8n#?VTU}#9OZ+?p*Wc4}a)QSAF1Z*IfJZ
z%ii|VH at yB2E`IIr{mHAOs8uGenXxbv>`;S}1RaPf{-FcLVb6Sdi$$a_dU;7HpmQY6
z`T(+0mQ+VsHJ#fkaTkdwvq%uJDA-=9?~#S4Fp!V;!|?eapCc)yqVRF};=L92ihQ%b
zldIq6<eg;J!hespx1)x`seC1bq^J3l&VN>irX!Te at 2YU{`Koa6letpF+&9ffwUZ~|
zIN})(S)Gxhy&Aw4bBJJa0iBsh8HXG}OPY+D5z(LnM>6cf*<;|F)yt{*F#KoMQ{p>V
zIkL#1UJCG#a6nCf7FOmqs`7WXP6$xVL*tX>`CZ^w at sIwIA%NH at DF6du)Wf9;nwK%q
znN23}vb1RuYcHl`c&qH8V5k%*w-_B}dFK>E!1L?WeCYG(Y#ye)?Sc!R`}C(h|JlF)
zC$IQ}*Zs-M-gxoL-*n0A-h1&IuDbL!?|A#ASHAD!E8h9~_rC8PH{AH{kA3`#kKc0T
z&7XYphp)T*+MBNX>(AZ%rTdUWH{5maP4|821GnFO&1b&&!8^Zr&8Hvw at TVTQ<}*h>
zdiSHKo$W@;=sn;1H)wMG=O4M_=>NIl3%tYqH{bWQ5B|m7pM3C<+aG%P<6pe{`p<pt
zikoi-{O|q5tykQ9^Q9kn|DRuf{Uukv>!oja<BKo;(--{lD}VPDfAsuUy&U|bc{JJK
z41j-rFBviW1Ok~hNH1tswlBJD0fBVjTv-9bL;;x}-7(+?|ICqRec<^$F~Bc9#)wuC
zJQOQL_BhCAnHuBqB=qa5DUP=9B7bMt+n9HtzI|s~N~<ErxO&o9sy7(m&y)hWGV>Z}
zP9RQs=$w&^9$_C~ZBMz+DK9Z`fTa#)&BG}7|B}T&>3*b~g@&P4>EPeJ<0e91P!JY~
zqBCZie~1pGIn<)@39{O`cQhdDNlK1PBHX8ix^$52Kqg|-_G!GmHQKAlceYaS=_((S
z`O^6&lV7CyA69Y?3+Z#td+2iz2~>~)(9 at p5P^q*uvqk4%B)qJm59P_|rRIaprKIMw
zzrAsI;oN7Rcj50o?P<?{<}+XT+~0fk%U^m4_<!9i-~9TwU;k$x_{`<6yW-MUzwIq=
zyY|XUu6*ak?|JXVSG at O~H-7BhAG`UAkKcOb&9{C0fji!M^+#{`{1<Nd@)vJ?;DKvD
z`-NNYfAsyg-F5Y+?!W5xFTL;9``-JBFK(Q(AcfFgBLsZ(3*WfvjxRx$t3Ulkkk8=S
ztq(l>$p??#{N?*@y7!)Uee4rg+<MbnuKoxS=RG&w{D$|v|Lxa)<hAd5=O12r*-PGV
z at g?tn!^Q7K0{zi*{_w?5f8h&A{Hbmsbr69}n95bAmJY>i|1ZcFqt_)n_WVocp8ksI
z!{`71w7qw1+-Z8}`Pc4FPv~xCN|Z>EV$L~LF;tO77IV%y=bR~#Vi2husGQYOD|Vjl
z>7MBEWP6f5_IftJ<1^qp92UO4!(s0hyTBRf`#kUatH2<2&)O at zDEwF|7At(8=lMR_
zpQ%AI5Gip#$fp5>DGL0Uo)-XSaCkxc2CA>hAdv``Vkn+ZyE;CvL3Io*?a<Gn?Kg&H
z6y_DqH}y;EA6=pQjlZ}(>}4*re~7d|x>UVd2Y{-lSWebqsD2q>57j4hNlFVaIA^Mm
zn*g+cpZBPPoO0_h1nw8x8U^hXC_zxNV2t+^_kq$x;?EF2a$$UWjD3(`ks?J~>Ch2}
zX`ng_56i&0R`vVgY%b)B&#Rb^lzl4j^G?A(`kz*JTpqS%F#%qS05E{|Q`IB*PiB79
z5s;5QWRNn<AGa3~Kna*Lqcr$yJL^RG_qVo>bc6q~MfCr|`0BBd<=Kg~`ROx at 7oVRy
zdU0+3(uK2c-8lW=)`=UpS8v_9{?7ZS?>{{I*5h*zpWgZC+c!S=;OU=!@4cV>{G(s~
z`6s{q?Xw^M^vMr at _TaOh-T&6l?|k(0TOa&9E{8<G<`bJ8|IUy8`omxR{(FD(@4x-K
z-+%VIzxwnqe+%b%@+UvI`_1nV>c9K(r{^C%!Qx<gu0DSO_-}voWa;YVm0PFRUtC_j
zdt&+4Qs3M}@9bnou7$P{UuvGoeFyI3{R;m#^uMG41pNLo^^xnAsi^!$-`v^&OlPd=
zaA3I9+Ylf{wE})-QmG0?QTymgaeHNC at tYd?e4#2R^fj&XUCE{`m`4Nz_S*v9{Z0e?
zZpe3oy|8+9DE{;driD`$Ph)h5UUGq|_w?S$5qjf`J=)8tH~1SRPhg&zx6FdmQVizN
z<l2Pcx$xo<0gem*Mu~z71#c${$c2*~y}~Hy5+L;e9rIM%u1WuCDR5vOLjeBO_zP|i
z at uNtAk4JjGKe}DJw@`Nu{=4Qp+$rGqeBB-V=zs7pWgDu_Sr;~A0&sreKT(M+o5l*j
z^t_M)G(RyP`dngD{B*QGt1zR!yS}lvxp|<iZKSJba%gyAcH!#m%}>`xmS;v+<|ft_
zCQmKSoLQN{B3wMba^upedpDM^-&lYCVD;ABQ+FSnx&KH@!R-$}yYk}wi;v&G^YOQo
z6#VAfzx%5X{`^- at fAsSY|Lm`~f}eXBANT2B{>}5B{OsF*^*g-j5B}^IPyXajZh!dg
z^{4M#c>CE!@iLy>eD8ykckf+(`h5NAqxEO^X3m_RyRdfY#l`h^&)oUWxzlg09lw68
zXJ)LrqlK+-hyW%)=fTlM8}P42o+1KB2QfW at MG2XbAR{%*p^Ti*pZ&rL?K(Rn$Okq|
zArR!Nc`4jNcXcFRQT@%CR>Z+L?g)RywR*g}`EWYRF64W&<Ouv6plu3;kE5~w;G6rs
zWaf|18~+0bymra>tbpASaiZjz5y8s_>I(C+2!lMGJLZ)FH<A(C<Nu3f!JQ!KB$sZJ
zcNhg%kBkofBM#~_WX>LZ%;gj~MBor2;1?)TK-d8(ps at vRquLt@O)$OL7+otpkE-nv
z&9BK1;8*yUH7-Gs2UO at o3j57@G%w%?ix)s791#Hg#6>mp!RIB_MORB5%D<<vxxb}#
zsH1(fyJvE6 at aW{kiDSnu&kiq6O`l$zI<+{yIuHJ*PA^ZNUOjsL?84>qtGBP5zJGh^
z>W%Y{A6$L*-pRXf8B*}p)3a|qKl|Xtg-7qd_1O;|eET~e{qmRJ{58Djw@{<_99Cv*
zI547b{q{Eq3x?y}pZ)l)Z~e)|#~}atoo{}6`@@gVJ$(E6yYF9r|H<il4{p5o^wN`i
zt2eICoL!qayE1cb>D-f(=bx=!`Ec#n<+<*u(VEVd+O8(Leh>i;L14kZiht4$Ci>rv
z0`Vzn(NHDgZ;qccg+v{K2+71JVf%s^K|XB9a~Et!c&xuvKRSc?I<WaiqupH)+|#w%
zUslBrz#cQit?d5x#r-yhwh15b_!^7LckkJWl851-?LEDvzk_le21MxB%*$40OKLEj
znAeO2oxk-MY{wn&ufE=58aBv+g!fe(RS&#%M2*DO>|pFLbx^WT5dU|B6vz-H5dnSp
zsOiM_3q}e&SZ#xbCliOC>uhfX at X#Ku`6>RSepQse(*G1WV*;Q+;qin(4 at V{VQri#a
z at p-9{M%^I}aVh>8c2ZsDs at 5vPJ`KGZ|Lq-P-QAP at eKVuO3o|q4CWn_Mh8CxW7iUJ6
z=f+OVPploEJh?P=YGvxw+VttuC+}Xz5L|u#-r|*;7oR-1^!UZeJ8zxF7Cd--7Abh}
z?9Bb=*PefN{^1AbAHM(gcYpNk$KMz5+a1Rt2p1oJaPONxIQP~&=O4Z}|L7TP3Ttxn
z{g2MvfB62dKfL_(#iQ at Pw|3{+rN{S{uU=WYase^K9!;E_A74E>zB+s5-Sac&raHz4
zt2>)3T5C!gEBG`hb)&5t4G;c>4yo2imk3B-q;3|LrXlH(iT9!89 at q%@WrMA3g`?IT
z7ntvhuY*9Ms#`GF{ufgkcbspzcDV))*rW3Syu|H~$Z{5jF*5FeKS~S-zg0W40G>n8
zlIRT&R=SRk-2+P1zYO!+0DhAQfL?dP|HbBDlXSTKy1TQWjDkxRv;ZOn7y{vAyT4Av
z7(MR{5Gf+$5&>)hCeQ20&iK?Le1p&%GF)Ntdzo8nuk%GNxJPS#MtgD18ZYp#>inhV
zQ|cVZg~ejurMCslOR9^b++LVZW`0UeiKT`yCWJkE8=Lx at n+96ihC6zu`o>Q7^iB_t
z9G~txI?{h^Y+!zJ==k*biTTl$W8<p}6Kji;CzmHro>;zdZuZ>S<s0i)pFduIeitb?
z{ovk-8~4_3KR9*w;hFnypMCH|3&QzFFHYWmcID}(F7Ufa0rukZv-g4hxra~AKYEH!
zas8bS at UqvRJYTtS^XiMoSDrsyyt01c#+9j4Cr(_ygcxFvAZ8;=Gee7$gU81wSC6(1
z_ttbZ)%P~nbk>(QSHb5A-IEa`KqvTjObr#->uPZNC4=dV*h{X21{vaPD#)YMK3z`x
zcYr{praUBy$o}PBUvt)f{&T>;E%Jdq5h}lM!u7IK8-_#D4OPz$Q=D1GJJ1)#GGC8F
zUzaIBYO$koU4`MO(mO-Xv(Ir8w!i2{GIY2A4py(?pDtP0g!3=?qeC1v$b!oGiV09T
zWi16f01cxyjC;@ufs)z8g%AO{K~Ye^8;@0#m~^l2w3Zy1xL{_UgEY4L?Lgf*!7t3#
z(d0r_2-$JsUm+hU at YT#Gr#QW$sl2wMroOvQ_<vth>k$0Ey?wN^aiD2vxu<=sxBuu^
z at 9fC*sm1<d6N3v=^A}DoTspmY`Rw at W@rkviiM5r9wbg4MUcLDArj~*$@7`OyOn~Ul
z^3^*hZr;E4;)7H79w|Y1y#DO at -A~{D?5}_H&M!XU_Q?-FyZrpcTc3UV+*?oJ`DY)z
z4ShOw_pP<t_d))Zr|+D9>k-I at Wu1F`g#_IE#dFx5iIYnR;MfTq^SPnL>4Aj_#B=8K
z at s{E4mXVH;6J3>UHH at d=RJMu;Pz8Y!;1km(Kt4cqxS;NfVVi^kA`=DtO6`A5H at dO{
zQV$3s1WL0x;D__ at m2Jh6v;eEZhA)-~H>%?d-Q#qaat`BS at cbATV2`S&L(|)Dmu&Kd
z)gO`-uA<zGJxA2%AfdY46wFg#iF)7Wg>8MQ8}E^~W1Jmd)nyMnkGjVt3;$d}(DI_h
zVS_9<N+2*0*aFNAoRiRy>UR?<5ZEgs#DzXo%qqn$;ODE<N7mKFdK<LIq4{-(7Y{)H
zQwR|jdjRDxN0h&sBA)E8qWz}4@~o=X%G!?VnvUxFp8Dqg=ElCprh(?h{-%ch#-^d>
zw(<7%v7Vmk;l8=C?&;y)*|Gj(lY<M>!;7<{%g4q}5FlD40xwdqx_a^X<&*c;&%Fig
zuU>inWbyL#h4mW?mu at XyxwCTp-p%(vBx`o_o6kS}{kQ(&zy9zS|M>m8pS?>S`SiU<
z9K>Yp)_r9-?p}HF&V$e1yYl?)%g-ME^8fl|`O1}<Gbgb%SRB+o9Bg#?C@%nEoISHV
zed_q+>U{fH-{7&)qZcNIS2`-&t82UJN*YRw>Wa#m%E$%^{$*sMVFf at wYM*=HlSvkT
zJZ07Z0e-#$f|-okQ at eCM2{^zp(EMm)1N at HCwT(b>v5S`qf)n{ps>2{qRSU#Zkp|_j
zP>n`5ij<9>N{!M(cj3ao>WScKdILBWpLed4aQ*3*y`+uzI{@#l at ExfxpiWp!I*Y at Z
zDf)(%1;8oC-6(uX6Y#Q!ZD$&Ie*QZ7FH!&~BFwH*J_ofFI7NU93LCK9D#<H4O{Uxg
zss)a!$r0o`!4Ff?rEUa#H2(2_X#*h^nnAQbKRLTNy|6m3suew1QP*8t+gXDYH1sy0
z|7*Hx8~PgSdg>eco0^AOn}<5OCI-7EhdU>Sx~E2Z=f($)O${BN8D5%mNx|y!#Oeyw
z2uClRnL2g)%Cm=;9=~<v+2f0k9xbe2U%Y&K_RRIUvp0 at ixV3os&idQ$TzL3w{qege
zZrne<e*4`0=kphCUV8Lm at yd-$Pu}8y{Bv(#UAcDs_NUhz$j1R+fPIZD&B4S5j!kNj
z99f*{oER9IA8#9LYaVW@?XInCuPSRUFK;O?X)MjJ&L@&U)e~qJz2Q(D{79KJwQ!`!
z^J_yz|Lh^o^Yw_t1O5z12|XBPl8J)A5``?BUzER^0<@j;=#H_?RzPQnoVnnyseThR
z1(YY`$^F82CRzO$yXqH2oq+h)R20yyMhwSE=>_wy6)G>qykUuyJ#u?V8!)f+t$}I>
z^0_ms5*s7~*7z^Yh0vcE9SY${@@_x;@MQ at 9qwaTzgBTiB3(Cu2kRustjtnmi5L at 6n
zL0)WW=X(U(^fwXVB*jmkyTN%B?ctT9^o0CV6&A*lI3Ms&8x*^J0e`xkA|GNtW_zi%
zq^_{CxvZw6vZAH5wzImauc5BHrn0S~wyU<Ls|G7j+f&~%)YjPF(lpT4G|<s8Hqbpe
z(m65Ig%r$gD+NnR3QmlztWKXiJALZR>ASaAZd|$i^zF4<H!nVXJb&@p+}W#hXSuz0
z^xU<DOE*v5ez1J)`qk%8S8rWI=byQMYv#<^rEBLVPp%2_#kfFtj*qR(k1QWW=mzGe
z`sT*Fr$?|yql>dcI41LBO at l2MtlFNs>W=D)R>)6TNkd6dU7>6rsLrGIm6V4T0i=Kn
zQeCB;{_NDl7Vxpdc~CoiTm(PU^ZeNzAWZ>kE`(G0D`N0c>}kAh(*G(w>Z*bOS44{N
zAb>p$$Wh6jv>gF>crWUX4SiuTl04O84;7`CntV4T8-Lv$=bNq_57w04ATus*?*zON
zpZSVfs39vONhRQD at AHtA=+s0JWde}AWv9pLto-3lLwuaj-5&5rlN{|*z3f&$#(66b
zQ&xaFH^w`7`|Tmx?{#E1c at 3us_y>8>sGFM4YA4UM0;XJg;=zdss6Iz39(Cl0ZxboN
zv!mdF+ at Au!FI|lm2JaUnXP2bqmS>jK6;w2rRJT_Y*5#Ep6_vM?R<@O63z`R;E7~fm
z+N-KNYk*c`e{+3bQ$t@%^H6(Ze`m+o;LXpLPChu+H968dGv1FaSeO}JblQUB6RY?I
z${ehm7+qQ&KE67+c4q42+0%FKp1pr>@#^~dw{P9~=-KTLpRPZ7bm8HHbGXdcZy+qk
zE}orOC9HI6=JeVo<SW86O_Hl;W)$R)EgkKf9UVG0(KOiBATO_>w!5ynv%0da63t)Q
zR8rhfR8&_`P at 9)mWoJV=4MBVkA_CGE&o1UeIh8^1Ndf=fZ=~f0lKDmD#$_C!Jb>;G
z>IYoRM=^f^gEj##XF*Qo??k>%0Rwx2kcbimV~H6oEIth2iT)A#u$2d?h^55pL9e1W
zl9t+ZHsRd;N5>;KW8PiWBLWJ{WV>J*I-_Uoh$IdJo*9gT3mFmTh57}A<o+n7kW^`;
zWD?;g2!eZ5UmJxDg0NW%UJ3q}H~;D?AYKL{0Qed2Ms|`B at sNDF_WXjx7KjK0dD$xb
z&}`)QDR);c9xqjn*8EgB>rx*n_E7Qv)a)3uEt(2vOCDp~%(>;(qFQ at teSTh5R%v5F
zL5&?LC~hbyX)FRi<t=3>(zcN{G-}IGYi)OZT~9-OFVU5jp4o1spnY_pZDe5R_*mz}
zNDoqQ)bI<?(&*~(6G#EBfpU<A7oo}5h8Io at 99`*|TIro$>6<yh#l-UYq4^Udi>u=+
zG}@e1RA*&UeoNSn*7<^bbpBC6{`{rmql<IH3)2I0<9)}v8~R)76;Fe(RdqPP-&|VK
zSX^9RSXh@|P?MWim2I!cgh-<hP!z%m!*=2JLi at 3>fIqi76oO5UB(^}}%sxB#(hcRm
zrT_6|BH%<mP&dG at Q(&)u1 at 1(BX?|S at h$5Oqk36>|6m;B1-$HL3Fy4TCcbsp!c07I~
zy#eP=*HQ#l6u1UFlEvRre-6L{PGiKVD*lmP74jOSrD$>_Ifyo(Dp(kiYG$XV2)#jB
zAh$d}f}nT1ljP-Ec?yP`plJ+RMV&1o at I|n9FM*@@hgt|kfczJe+|1blq(Wdm3^w!+
zGDLv!4!ll^94PXaes&?cs?HzqhwVmwDF8tA;r7zio@|XUt2(#L!jzoS^t=jdZn-75
z(po<NNV335QC)svZC+7*en~@NeNSy;UwuVuxi$pNgDqf8NdbOAQ(aF>*K~J>h(Lem
z`0&8OXvg?)_tY5r8GbT!d={1tS62=)VWLGKt>UFClP7`qiSPd5!FT`g78eHKxl^L4
zOOtDe41rCMuX(;^I}<(Aqf1v;K>i3$$NbdD@&LvNVMHXA+ONS>@j8)NBp3NDsxRP;
z<k#4FQ at pkM{ya;8S(U}o_$ej;zlm`HxCVvwVHAN7{3kC!I2|cqM-t?OuMc&-k^C4)
zGep2mMZ1IF$c3r-hwz;I`d~IIQPx5u7#f~RQ7R<4km$Ekybc&|fIW9^Lc9Fv at Rt?d
zoUj+V?l^KMk3=mSn0E*KP9vR%2=KqkxsdE0+>h!ADbA-{)6v5yvS5e<1=4$|9Fwq^
z<N@~}zi1DJ>chQxB}_X(-d`yQZWQRt;UBrv2N9s=fxQ)o0FF7>Cg8(7A4=RUrQQL-
zhx~)R(CtwP<g?gpE0{+LwC1PO4bscO?M+AzNzP=FVXRdKc&2a|W6MZ44hy+#rKvgP
z8TN9ky&@~GGCRN8-q2H9)mC2IP*~bj45-Rm%Ww+nd+Q+>;uMH2Fr)xmFn4JLTfiAu
z7#Wx!6>~7{W)7B)DnTGoMb<#c!bx%mh=V>{3+4^jpEyQrXJm<DPVsPYF-Yl-u8hNW
zKt4Ku;CQcr{9Zx6q4wJ=%UjFKnoCPj`wfLiF={`*Iw!Z%mRpgTTWRT;sk9U%W8bL@
zV$B3KqD+9KiiSu6$fp7v at Dp7mK8EIpqA0gl;a_{c4*mnW3>LI4_#ODfUnYD?fe^h>
zz at B(MtudO_E9`Br>a`$jg}p;Sw$K{`_B!$jCl^+uyaprZixlwZG|n~Pc>q6B8bKd4
zniFBi at Bt4Zz)s{lFWkjJTL(-7?}*kmq?jjX_!SZn7Pp at f91tWIJKEkNIHX{s2+-~2
z)cL~vx108ZGeQyvaU<0Q3&I5O^&tq>5??BQ146ta<0ZUFodXNJ at adG!7x2r@^dxVB
z{~394mi)N%+*p$>QXPi*C#NyqCzpB7iC`nUG(D?0HLEy1yTp=Ho|RjXT~M7{P?HCi
zn)(}%f{NC%s`g5xpmVGPDR9_=2C)U*&2`<aos->&0ImU~sCRa_eRRmhi{_{CTg4&>
zHNq$yBah}d^5f{r(b45Oc#aC};NGI}$4)(196K>Sf+;yZGlVQ0?P=(16`kLUpIhHG
z(Z$Q)B~`Q$>M0eq-%!-hQwQNkese3c?d4h7Wfq&fFS8{-IXyQqH7AaWAT+<!MaU?;
zoj6A%N7y3<{`sKTkI85Vrj%>*E&6{u{BIQjfv6gX0)LRwAl6eHl!-tz#ZX-=$W&XZ
z9Z24+>bFI{@nC0&UPUY&G#=LBV)7dE$QO4ik|R at w_@h8w1D;eeXeVXHcq at z@6>)F|
zFi!~?Za#B#A$wAm=GL_0l!9$9sN_UC5O6)}VekH(6g>0V_;c_djDpAlQs5>C!iyxr
zv%M4;oPP`W#S74Fj~-vA$(?vL&Ilras|$%mm0=NpcVHNTEI}R!5AO@)2Sx(^gMm at f
z-cr+-Qr(+u&W<o~Y>f1bO|>&!pA(a6k4<O7TW*52AUPvH*-~J#7MQICX_-YCwi0V$
zT~1zQPJVT6VQoHo6<$%+T+%k&iWC4m++<=zC}Bv5G6zUOOMOpU$3%DAa3508Jvr7j
zIn+8dNLg~%<d}HMM<)rKl0HDaBN1{IrumUO`;SiW0JMGQ#PIOq1PY(nPXF9E#-(Yn
zUF-b%Uj9%$5l%rqF)Km7B0RXd_2TO0SJ{!=oU%+?i6y(#l3A2$DM(4rOG>jR0DcqQ
zo%VQw186@!SfcA$WdV``i<CXuMi)RV!x><$ioQyrqnik9v;x`|!0pvex7WY}T>xl%
zx<7zDVI0l0Uyb=q$ag&0$!%O03RIfd2ys%FCkp_mgvN7tJ=_ZZ*%}~Qu4H$l&K>Y0
zYu_mh+kc47r(dNUnvx+xi}c7)T|jbK8o?aQ=gVB^_Fm^B5eMDpj?^RR>g~UY#o^`g
zvi0FwJIh)ML=ZM=eo_7o+Oy%p(e_T|GkspV{zr#;un2G-v0q6?BI0~hk&no=#=p3D
zk$cnZ(bYXERo%&rLzdQ2TdF<MoD*rz=0ve$f~n3(L7F`lI#gI=OV3Np$U_idN2ZLt
zR7-w(W}(Gal37#-k+x$F(6JoMK~;MNu0eGt0ir4;1+^fvzPC{v<ep}{gSzgvmf^1E
zf!@ac?vAnHj?t0&p1y|O{-%Bm#8AihNY~`(#PadZ at sYlnsg|L^=0UL<ql at sI*^z~r
z-nrh{vok3ChQ8*8KAdilUkCCV`Wiq!K`JO2!YEXqAWscJo*a9*ExQEdTdjp at uzlV|
zdag!(JUeAzdMQ~^H25>ok-8xN(0#V at K&Hk?E-YwAlI;L(VpKlU533_TE)$@<0Bs1g
zILIya2|HiY`Fg at QumVWV9}9cX4%>Mp=H-9ghz;6RhVUa<KwTkUF3|H*=^Ax_x(EvS
z4*9`wyvd4EDM9%JrO|AV2kM^QY+RBBc@&ERc!t2!_Dj!rb#G*N5 at Q(uI1$i~cM5{^
zvq-DE7!kw)Re&sL!0TJ5SMDwaI@;+JgblFQvY^4QO at PdN`v%T0uUUGUR81Emz`9bZ
z8i?H?0u-?*JMI;kC~Gt^2Q|GWz+c&wT;7pX)s>Q-ADL#4REEH?1q?Y<%T{7ib7Ir%
zacD@)0m!Lr&Cf1NO}CrUbCn<zAP8CZ3cLel4(ba_l{tVHRkl}DcU0DNRfA7Z3Ra29
z09q!c*NY&u)^xU2x3 at L*^>J!CIvaZWYTCP+dq=xQr+Ox)x+li_rYHMnCcCD3n+H1^
z`q~uiTNLsUD2 at D@_E92Hm6h$~twYUa&Bb`=n&;<M=H!%R*@~@MMH$wDR3*7i<nz{`
zd@(6m(Fi#1f0CT=Buf|}GV0=Bl2Qm1v?C?gGq*a3m3c(|5drwWsxdaKfR+XA6v+Oy
zeczx=i*H<JL8uWx(j6(qa@)i$9q at MI-2K9x(kssb=Aa7ld8+M{yi_~vQh*oT&T#Jl
zb_4@>*@eddOq at h%?>e-D4c8j#qTXdS-u`_ay9l9^*8}tWz24X>>%;aU9Z(?FCkg-g
zAHu(z6sQg_x2k at pI0#Mh-Un0C`T_m#$|j4Qbs2&!<ln9H*D>>oa1h~8R`)XZ3@*e$
z1k#JVq>Vk%H!##ID9Qum2gk6(eP7)`YE^eiMQ3t(dtzOGdR<>y$7D8(UCi0xCYzj;
zESd0c%F<4OScI&?WCQ`Wpag-1M at hC4bDBLR&2G-fO|#}_WENVpOK=c`7lA-<ScZ?>
zDv5)tj*6PDs at m?Fx}I8`Wpp)3Wc+2)2N0Ns-d2)my;CFA?X49pEmf^;l`Snb9c{Ip
z+~3(WKxUzpL|da#eZlXNdTXxjso^;r`|8?8S`^P04_9J4Rd$3iyEGGrrER3jl5e&Z
zXQbyQr`Z#kS<36rE=e`nqS5*6kwNWq*d~*h!C|#iXx&g)Mxig7UpGZ^L41;4$V}A>
zhMmO==FkfdNJs<|h~rjPv9ObZx?CUeYAM`8_x{na-$3a_1QeNfMk!J9E++4wH`02e
zIlL?~^LrgVPqc~^9!$`s3Yz*2056zV>+qy-2v!s9Nh7dSjr#5uobUT8c~#5-jRSI6
z5a~R-gune!F2GiKQMN!P|A;Mc9A|Hre!Ob<-G^vw()<Shckv%`@z9|S_$M8pXZ}$9
zPil-x20jpo5F&stp!!^V5P`_VL##Ul{~goTnqG5dXL4CvVrff4L%+3QAj47^k!lY!
z*%<W`$_{rqR&Lqn9?rH4Vx;U_G1;P6@@39;S_I5NqOH`FT`Gc*Za3#uTZ`(mvx=<Q
zr6LFfTOc8ZIcO`Z>VOwjHul$dPj>cB6QZwg>~Clspsc8g$|7~hCaW{pLUK)==BB|W
zjy!Czv7sL$f+ at kvuB`5;sB9}MZz&-?R}9G~o?i*o$?BS{D{anh8>s~Oz}}tepzuvu
z(Ewf)zD2Y>hl!5z?lOr0M~259W;zgoP?W#39GZSTdv#DjeHhJ;xLO2)7$QL~j7jNi
z4US18^CG>#l%|jyVgM9?+!_ddxwdyPdF4KDa$tqnKnxtjMqF1yM&hx`{;xwpva(Zr
zcD{P8($%V8Cg^$q{;$0DuT}rcepbQ(dy1EUItQqu*u|E~k;*#fQN at 17kE*^J{44+0
z-34~Pez|pU!CsBMGJbU6-zf-O=q4}6Ju+2*57XlS*6K~^d2|kTb6jiB7ud`HO4oz5
z{c<pKdZir^3^{>@2w(+h@(K!*9lrfbIqlPy>K+r|FKLc1sE^I9j<%IWrssv3vRNt=
z%!aQ-OAx!Q+4G`KNTMYq$r1`wnE#A8AO*Mv<jdRzfvg#VkZw;-x2I&}n)9lx1vPMw
z%$!miu!M&LQI$t7scbK+?yP9&6ByU`)im_iHV)J^4b(RcHgKAU8r_cE(==Gm19%t@
zuIs_4s6dV?+e(G%G(vS$RHwoQ>|2M}yO)KZo{@*2B7q%D6$+o%=}`Crd!_9|3H&nA
zH$E*WJ~b#VHBcWuSd1nU5jFm$7t&vLB+)6ufGqaL5){Q-q_7q)lu-~E7<LfyKn_Td
zPobtW3i?GALHd!-Tcm?)RJ!6eDhZ{$S7*=$ubEK1#3!Q<QUXLDD at 5f;00ai5%FesJ
zYF at M~g#qVao^CI!5>WS4^Bfe~U*p}O*mp=VkE$l!OKk&-wB(uu9C{U5ICyxE$3fX2
z#Fh=V4{&5?i9R~=zf~Nz69EVKjZs$)Y`gUT)_YWWv!k|C8XhH-#OpyE=-;HIA9&N)
zh@=zqWS}d$h_b-YxV<nRwe3;*{h4v0y1gVEsyZMH5n!qh0j`Gr?7ri+ju}f;S8_>9
zd_i4|y)r7RBs`-aG}RuQk`<U_Wvg8P8+GNRaspU*!IF1QLV8d_IuaqWK(NSGl!VTN
zATbUdqX0G1 at gh*i{!<ihMlPPRIltOkP at 9GOnNuc$06!^dC at 5<#s%R~#>L{z}DzELS
ztnaI8=&x=ZprE3*dAP2{ak%E5#sS2ns;&n=0v=Ub(OO*ATv*&dK28$2xfNM8T?Ng9
z<r31#=P%0kRs0kj7G4sx&7^$WWX0{FH^4qVEtpLKapu5S6N3<$1K`JA8*XDvex$wd
zo)r0U>3_0gWQ19<ibY^!4&q=d3l59+rokMJfi0F?n2WloTDWZsAzY8qlwM<A^LeQ>
z0Q`=~<QpJgR^7#U6Rx3ipTGrsx{1#y{{mo0dl%{*B~O#1^fvnMqa{k~_PzUMB%Kr6
z8sSJN2<Q5M7XwM8td!m{(%dTGv-e2Qe*aJp%nIjl;2YlRP<JXPP}akdr^9uHv2PFu
zHNfE&(NQG at ufqIGq`>I*qMkvOI`a%PFYje}eSG?1)-;1{J=K9~Pr^Q=fOBemI_ASE
z`={Vv;eQ7<k%#G;PkcJ?PfUAcHLqtrt79gkvNH+IZ?BBBm4;giLsD~tOtt{34QZu}
zHPa48u*i9+j%E}LZSsDxW_C;jfR=<bmn>iu?4 at P|fptj4P6-*|ID<ga2N{w_O97Ua
z{M7Q+oWi=S_Q at imF~np*uOSF+#h|*TtE{f4qQ0-PVW4Vosgct-P{ogRy%jax0{hCg
z;<A>al1AJL>eeKIRn?JK+HA`zPO}!831$+;;V&YCyZ~jMq9ANoE6kRHy{LMWe5^Sj
z-5wL2LS5yNs3bU{8hya at 1Ga!AunWmsYC#znsk&eQJVR0Nf(e9jC#BJ<7mTd|%<c4|
z$z2yeyMZ6lz8U`;|5tKS%7>LylnUTT9tz~6;kidQ(UYLeDh<+WtRW<P`&2%o>i6tr
zy{`uyjtr{e;DC5|%JNf4yD)a8$$3 at C<33?xvbGz41VNyAjb}S}csGkPFc6^KFL=LC
z;2ymNTg?b!PKY#@sR{qm at 2mttY#&iyroIps<G;8iQ@}0>8E|n}iGyAZqvjlLWlG>5
zdjH2tfuqmG)$^z;++_DzAahF5?F_R$K!l$%Epon4eH>e&7EJizM??VR%aL{%*=Ip=
zQwl!AcMmLOcOSEM%%qo!@{hHZ0si2$yg+k~e{$B5#?h#>JiqMHD0YL2osII86U{YL
z6XQ!I3<*JjjTVO#YnYY=XcA^Zwqs<5lTagq>J)?w*^ZZJEl9E!q*x0~nT4sDMQJ#s
z*`-!{ndFoUYwX4Kl-L!Nw-f>Ls&?#xaVpzMu8~<N1oLH0g}^?q(niHjP8m4}iu4HM
zo2-T8CJ?lQ^gJAM9Fu5lQ%V*U9dLWJy at I_tAXe#l4S3!KYm)F2aTxhdQ4~yn<!}L)
zrfy20F8;3^E>uaa^x07;OJX!7%O9sqkiRAD?*zYrd3lUcT_%`UB?pS+Xw1uuETWWq
zJ$8~2lL2w6l^9Qu5;!8LuYL7jL+L#Zy&=mu(hpblMBvqGryK1pWM<cENQXpRcad_X
z6pf7o9*li}kKyfNBM51-)RnUBBS9?4-tQZ at Hz4!?V<M>GXK at U1Av|T{_%ac0H*a4C
z2PyDt{QCsG$;@-kSHDIE?W-6O<uc$td<`WDqkxqG63Ui{^lAg)Buks at f}!fS%zV at L
z3+6Wrd@!5>_qIo8ohJq1G`!1qBn1yrxW!kd4`}C3m=E9=<*!@-DSHdsO~Y^BqOJRw
zrDG<wupy?PHm0m8xwtMqE!QuVWA{(A_+%ADaf{96O`#S*1)mtpG|?DG0zFU~@hL&T
zCaZ{KfxpbqNW at GqAQw6jkX4xASP%v;Vogj0i>k>okXFmckFyjcSPK&~3zIXY%EF{_
z$_Ro=E0<>Cw;~G#)z}4lQ5{~h9InB9zK|RqU at fS&WtXPqR#<Gs{CY}e5fvH<mICtB
zglA<bw#kN*j*~(dCm0KbsRH)AJYFO(H8nfblo^s at 2~A85j)?Pxy2BZm79!XP#`?1)
zT10>*XaKK8fLjs)jE<Bc8)3V1t3nB<Y{-0Vpfti~5DJ(Kutyez(x`E8sCSCWWSrC<
z8GVnEr%nL0%isu48JtVCC$MJ<x{n`Im^>LL4zp!hIrQ5%1Wj&usT%4^t9x)uKMuSd
zGUKi25W>RRZdO1BgnH5#3q3m$ypO$jvKr5SS75kjaO5F$K7ePB0LRmZ<HEnz{~!nC
z!+&5tWB{pm0_wODuq=XLfuXV at oM{sHrzipTVle!f7%y>4qL)$#wD)z=d}`7urA=;p
zX`{=$mG*GYR<-YJcz3^WNC9=8hhoeJrRFVc50z{ov3sSVRmlQUV3hq!6i6!HsQ+P^
zMc?tv?qlg4GX!cPaw{WC>Jy6U;w^>f|0C(SLDquMi~{(uH?vSEkO+ at M?PF66SqKOd
zLBRg%qmZ+odx%273M_e1lv0abF#F>><18duf(arKN+rLXW at lv*Iki}8VO(ZWLRN92
ztt8o2nvyNCqtxuOG>Y!BOEW5(iwRm1z2T6h%~PsAuhN=djn3y`=Il~Rl9IDZ5_uAy
z%EAKrT#!#-iU<`RdN6+%p9QK$BPXzrHTy8VCnX~+AXF^AZ=eUs9rPjFuH#KXbVf4{
zf^R%n%$)2*<Nd-C`7pHz;0ssxhlIu*pqM1R=n$%J1NhzaKTy|)))mlB%%6x2_n_hB
z?2{>=z at F3(vyKURGYpfdp?f`cp`~f;V%Jh)hHrGrLGZ>bbZEThGk~1)`i`$ay!q3I
zWUIBT!y}#v6FBU@=a4Vveiy=vR at YEJ?7!<s&^~0 at FT?{%4;eljuv<?;V3U_`&>m(-
zght^<d-3*p09?X5fPNO~q6PWD9*}z-*+Zs)yciy_^Q~!+^C2J+Fd|(L6&mM34>iLR
zaJm`%0{cR!nSV=>113*Jt6tY{S&IW4Ne5I3b*f_oMFGDd0!BE<)#~mJey$z(H!i4i
z3kW?#)jBl~;1(9dxNpLq&VpyH{BfY*NPWkx-N({8XH!ZW6HDqj2}~18wfmW}k0fXL
zqWR;~4#%3jqf at ATB4orlgdhM3dIa3XfgjPLm<B(Xq#~1O8>K%%5x)XWqUcC=#3yFp
zQ{!2OnzO^w>=7AxQI>+3tl~IZX}rB6v3sT{w<;yC%9K|{$S5_hDsA(rPR*+}=hv8f
zW{PY3GHQC$s=LiqU8eSNyQKi*62a4^WZ{w{aRG5=zvvWT&-^Yg65pEJAhv*?Tj0&|
z?&K^V1MLd%NH>@di=!mqAl-1hS>7^ems-$}okTt{0e&Hj&ZhC)D0>5k2KiB{UhY?W
z-1ICU&E$bPnqQRsfnA~x59(?E9<2RUV}d-`c9B;ToK|>{Jx8Kr)rK#5<~P4WbG_zK
zDxmZgOoQ5RN?LOVY8iflqE>oabhztye}jeB&O@~}%Aa;cz9X*LYsnG9uS@^}f{g&@
zs4_Aa&?Hi0m=e%VED?jET?rYVwTBoZ(}7fGN^v=NcZO?`4%MHi`$jRBL}o%_MJQ;$
zVo)s~1rLMuQTs%}gNNsCtpr3I7;>VL!r~*i#YNpYj}!cUTafQA2-N&D!W0dxs@;6M
z79*&CP<<}Ke7I(fDLn$itG1p6wzQi|8<R>J5-o)R8TtO{`2pq}zZBb%B&%;iI;-Cf
zvmOEwh)(u$NCA_AXcIGJVUsxU815mnfQ9AonFBmH63_~d=NZtzM~EgRSprisgU#8Y
zX}RI$9f<^>NI=*1n;VDIr!MBrtmn^NDLi_u=-Bn*`5VRD&Rr>*Sub3?RlR(>X6901
z>qJJwP+H?qdUa27+nBAaEk4yAO0+i7LbQs|4U>xwBb68<r_DkHVw3%OVd-|6eQH1*
zwClt23w1Q|1^hI@!D*9-5 at Y_nFaa=3d_8!wBQ+^CKXR10=Yqaq0{)`qWc4kpKe7Hh
z$$vp<NNb|xA@;Chp*KFl%yX)JEv1Li?aFsB622sM3H6Zb;vh0Q7Roc at x*{6DUS;AG
z at -_HnIm??a<ZCJL7BYjF!|lmUz<*eQjcMT4H*lX{Fq-NBP$ym_&4a!kqQm#g92E_9
zuDM5Fi|HXuN@{>v=zG2@{(^EDcxEb%Wj<K2GzWovXAO_8YBOrvRACPckPi?kAXkVQ
zAxcAu8cYdmh&U(`xPuXhTq6#AP<%=_4muZxzYOfPL?8>`+$9C>4Ue0yRpozJ%;D%n
zmR7K_i>aQz)cFLk!!Bx1MQ7B)&HVYB_Q93ZvZf?XX;XZ5d5E<r5GkOuPedT=2qqvd
z^)O3G6#m5uI7L9rK>|mlfG0P^VT(|ZVgPBl&vI0b2EzfIs6HYSosjOIoEey!6Vftl
zt?Wt|JCk|rhP|{UsjM}*ye*}o-Bj60VlK6+E0tSLMTd#|c|c8fde3}D-9S=#dt5_*
zhRH^Hf?yP}DSQxlVIq}6*aZI^t~n`|V1f6mPdsv}L|ZBU#B~4Y6y)6-%?~wVxVMKV
zC0nBWxz%Ng;2cAbZp0r1_Gme(nw1Z at k8hI*p*k`J5&smP!!HUi+WmE at VSb(Vc4Lwu
z_;C$9kwJ)Zcrdl5z($ZC^d>qVT7pk1{9GMom_yy2_=nrTd_ev|-yMSUU;r=0Jh%g%
z-n(%P at RY&16Y6-!2F}%_I1P2wK2XODL3?2P3<W*tvokbdHwRCd at zEjzY72~(0zMYS
zmt;N?5o0Kg?t(-FRF97_{8snE=zFwu0C+?L*+FT at wQAc({JE26e?9yPS6WPiGixS{
z2oVsE*j?uv*Q()5wSCd~B8O6ks020GB$*xPWD54w^bivCA6O{pnagP!HdVGJw at t-2
zjKtWhLbA()GD}1R(sKP_K}i-d0pMSo07`~L1cV4}JR%5kVE#!Nft&x=`CwqFVkU%5
z^n;NO2s!J?QnCVy8l!6a6Y#`~8{<k_6DvBBYx~R-rwfNya|c&!1538P#jM^1tK_L$
z6N;PSN}CgEx|0j)Db(?UGxI!P6~m-oo<t^Hf7igX2r1as{7nR8i!7-BlE)}PW)wEc
z9}fs60Bm4NXgo&izy#Eh3%pKXFAHD1ATu)mif>;yt;G5$6*!<6`)d$>G&vznrPw!&
z?$oO;^uTj{ZQP?K;wD%<ld=vaWXcviG(X_ihuQ``)miwDulTTxI0Nd+9XmiUAFU2o
z5kJ}khg3pCXmwdqv+Fgv0PVY9qfS6;b+V;+8MJ>AP@)!sXlhWn7nr9C2qD5tLXiD~
zCEf`5G3yHd$en8o44;fXA`5D0s?!R%L_oK^srk1e3mooIw~lTgXBDW*p{R%f#E(x8
zb)g(3N>WK at OF#_#`)-s1&@OF{j-D^w{HR5MR6gb0pn^5r<!#ZUOZ9g at UVr%Q8+~&{
zGw1ECQ}J~J(M3&Rxz!=IvLFZk{gN|%=|aUF16|?;Bs(1eg?|U^0du18ZN`Mc^L^t}
z*%1?@$%7IZxRc|gP=lurBNo*$VF>sWzR8(KvPwhpY9dNnV*8F~%-_uIn8?5T$=i27
zdHmkbKE40xvll=5<_ACj^umj}W7l&=SM5a&(Ro!wRs-YHeX<Iok}~{}BN}G)^XtC|
z+i at 8zZJU$`i2tIGvI}m4AZ9}JKNL<0JI{mcqXfv9^Zmk^X?vu8ASKIBc44rVR0;`X
zIz3LPq+iv+1OPdlQ|<qP{LQd;&UtXoIng^W^pEOR+XA!Qhj5(s3z&I at 6<`IVK7O)s
zU?2W3ct-jVI{qjJpF&>{=hwO&In at M4PdkV6pw*ESQl(UD0C>y<7x*Li;JB{j1tfgr
zCm~bH{`o7C+LPJ2yEY+T^uHoPPW*F$2pD)aT04z8f2Txz;f3x9z#wX)pxp{gAvTmi
z6CW>c786GNO`A3nBBTTSI6()s+Lv2t`#MDP7alQ!ETw>Po at K336RVBa-&?!;$+`6x
zOY6^1G!L6bPMNBEqs!YP3md|6Due~0|Dix8+mXz|u!5?1lKVNO(dca$h2}FV5g at Ey
zSDt9tq-KSo;bnYEqL>MH at GDqiM}$q`Q|KrMxMJ at Wu@2&UAS$ysh!;@Xo%;MoZ@=@C
zr}sX+eebh7_dmOP|Fe7dKfA9E7yNkV-Jd;g8YN*7#EV35a8+<26O^cG!shT<+&G(9
zABXaH#<EmiL%GHh;MGSQmgs{#Pg16Dc}EyeYt9U%3zBaZ22#`#Y_j<W$DoLas~ijn
z5&RIAr}#waQc}0#2!MQG??C>>vA1em^QOuF&OJv?69E1d1(FC7w2IKEu8 at Rm69NJW
zXhOiCp>EK1A?h;lmSPy-N;(X!zW)%}E?inRbYK_uP$mKGr!+z%9G;^~;|M+R7Jw55
zP8$O93-C$0!sR4Oc%OtIAmooCM_S3l|BcEhRUG21lHx)@z6JjRY}M`JbQWHH;T!?y
z-WNbo9Pd|r^F!z&8E4J at 5k{K=q=-aMoC~mIviacx3-Y-QVcw}!dZXD&nxn2fTe|#g
z;qvq2=ii<?|M=*IC-Y6iDK)*(och6-?DF8UCQ?WNg*CBbXHyynX#tM16-AGpNhZ!u
zpbRz at lNb<_7|7G2B6J at Uw|s!uUzXs&^HXi%NCcmo2m+mD$=;9?6h3wY at MBOwKA<gZ
z2*v1>w1kznN90rlb1Isxm!6(F|MuziXXmfJd-3`Q>o-5Ta{J?}w?Dq7&Q*TA at xeO(
zwf_7Zgbfj>>5D4w2rq69D{KtSuMgpwMFf-~;O}bvk5tO*QGqOR2V#7q;sPNFuyMZe
z;IPASX+*QV!eivE#ix)a^Qq~JB*|sU3b0oNQCCLZA973RfNZa1I^umWjv4uZ at fio<
z44_CwMZ_K6gnZHbipjXR{kHgb-09o};GBgnazxjdWDq3C58%=2(tV&PItXVB1=X7z
zYL(&Ym?RLcbvQ*4Xm4bJTLt+2pdC{Ma^x2&Zw}ZEFsO%D2~8OXO{*hmEEF9?i(5j$
zyk+nV4}qnNDpnZ{t(jf7+Rt at lKwKJLi@-)faL2ss863asc8_XUR)0?aU8f;H2_S|@
zfee4}{04QNv1tdx6ZVOY3Lp_IDI4mavnmb`tj5vy2>+q%p8^u{Df1WFPuv<@y)%6B
z?&zs|<EI}?UU+=8Z7idzJGx^wp`;;>SSX2rqS`ocMK~0o0s~|UrlIve at f=iTKo~|-
zK5BeD71U);?>>YAAVC^27U8jnB)lwh$;34PjSBxNzHRXZuDy#1%u<HQfPAP|%S7DD
z&DoV3N7wEwtld7o{`kU~2Pc-UEG=DGUc9`#a_z+0t&?lF)>dyV-+1@(xkpQEX347w
z$*By+ZRwm%uIP*?sHZ&7SGxlm{Mu#_$W5~N;l at VA`$fh3hsXG#67iVeEvRvr0O<f?
zgOc`*^n~a0HW4BcPuxl;wTf~;fpk#>e>d8^4|t#<ArjyaKmto6jI&YmEBtS-|25}#
z-6}EBIv>ny!1ERJ{6fn^cQDh8xm&?8yZA1!nEZ8ecB<NEKSQ3Wi{McC#x1TcG)C>S
zU_;Ft1Z^Y)r;MF5pUZp1cJnSU;xq`*Dy!3T3gku$Jl8sNp{76x{^_ognbN8VQ at u9T
z1gE0D;MNIjr}E!S{ta<37?IN!xMAL4{@O2g!CpmHb*K#+1pY+?R8s(|fU-|L|ACQ2
zCGCEM?}-01*p18=0Z(Grgu#i0GTtBEMY4G2Y}?Tb9rNqm^Xomwuk<ZlA6U6Lw0e7_
zdB|MeoJ1~+C at 3jlj0oTd_TmDkU<6U8-iH6HoLNvU?xc#e at G+83<#R?Zz!D*4um|Bm
zc5<tOTP9=B_WU}}1L3E67QmObg%{LC0^q#b(6;ILg)2i#*G89bjGwqQxq5qg_4dr_
z?b+4abE~(Gp13K8i?!QG$L!jjnf0eDJdBxa&113JbFb at 7<^_wlVm_Ra8-YKPoDtMC
zoLt|ZOdt#8uj!4ZYDrefYYTsK#6RVJ2l<C7$uyWGaegU#h+q|hiG_Fj^>%FdElu$h
zJd5U+Y^;QX6!=}r-^qLw^WS0u92NlpQ1&AlUMYE=CoEp}%LGR4<g3J%#h7T>Ad~1#
z{9NQT at SrMVCL|~acSHFd3?q6YAdIR81|dq$MM at V`w+nOHb at h%?>|Vf0H-hm;^#!*?
z<6#&0=K3Cmc|9yw%J5X9jkHfnB2QKWkmub)2?Umip}~+P%nH0BG>(+(zMv?g>$@0L
zr at F3oARt;Ov^W^vuG8~%lZEXBLGtDX{w3h1`hxYXF*U`&KkYDx07j5)7fkynFhxLE
zR2IP~3A*m0&mF_9r+Vt`HYF|LQ>W{vPB)IPHq4#r8JuqzoNpXH-rO=mIxH!xB*;>r
zLO?b@)Tu at kNCy9g2y6)ixyM`Ze04a;8SOz3I1=+o@)kFlBy472ip`H)GvF_34DX+<
z8eM6bIN3gZrfcp(&-{A-;<cfbn<Ljhn!WMy+|5sp-ul+DXFoaf?8j&Lkvms!k1kyw
zn!nu7gQw4QqLA%X!9=do>_OQ at F_zp26N7wcRF}-P4mt_*cOJv}b$Y?-!uVh1Cd=zj
z1pJ3-7|gB+!aUI>E#XIh#%Qb9qYnd?1^*~#K)V6|4*kDb1l$IjtBzOE at XC(AW-U9M
zUl)v{0pJM*NM!zq2lWqo_K^{m`X7$+aQCZ{R4Krt;!E=raqDzoIhIfOFnH5STjLo>
zgIi=!qn97mF(yCgo*FQw;jMl}Qq}rUp~OA>B8TiPhes0U^bMvo$df;cM<6CZHNjC|
zNAbfx4l6-Ch?4EVu<|;oG$7<iwJOY<)oD~I6UznI0A6OHsEClmSr((PMG&@=f{plh
z5}|NZ2c4>_^IaShHRl!+fH1P;&YUOfp5sh1*cMYhwpuo}T0XW~F}_wgzE(Z4Rx`22
z+#YjPcT|2|C|&^I!~`T;Nms$BB?P2RfSU-2E!gIWba=B$k6SG==ByBYm&22Y|C=iM
zA9FBw#me96o+;^>E$f-B=$)(TKUy=mP(QrXICi3C>QwvexvpcEw1w(lzA><PwGV?e
zcfM=xeE0Zj%gA!m(DC}gh1#Lx^!z3tznMeYPVs;JYL&D)TmbM4s+Bmn1i>j0Zs3=P
ziQA$)7n<WrJN;0|WO*d<<o_o0m at F7(l+ at k^=8qIObHR$P>%1-CK at fmCnOttkg&{0p
zgQM7&huRM2LE|A8#JZ&iP#r?4xF>K+7&u&oR1sl7RWc+a;6Ns~8tObh09K%N!dt0s
z8MGqy#R+ePXLnTVh8h7jkCc3b(Q9l3UYuU1p@(;TRcf9kg}0xKEmhD23K%VpFU)6x
z0irfirbZ<D;4FxztO{9Kd&<$NE?%&{V7CR&$vaZ{VwuycErpXo=?i_o>t#5tfP?%9
z__ZUjS86c8KV>R<f**xIcrMUaHR^4rf7mWIo=g81P)zngDhKBC1{U%M7YYWC7Y;2J
zjjxu^o~<P{R at xc?ugENxC=iT-0E=M-lnGFJRYlj`;-7*pbua`1dnE!I{KOF0lZ!8@
z$-f3aa4o0{rL4DkJhpW-r+qxPb1J`krm%OexbIl$z<l}OLgnD`>Y?K`U>lGhztqp|
z at M8VMYV+_SfUo8OJgom%DZkP^Q!ucYUQ{1b+mlRxBEltv&E*0+IGa-hoLK-P{;8Oc
zi~q=b;l&d_=fkAnjnXfSDJ~VCCp?*NoXQ#Us?@!}|1||-VKmB|Ujg2 at 13KzXSU@G4
zBq;#AHFC%TvjP>6Qy3;7KO|F7s05%if`l)SP{5Yls9w3qxBoJDtN(Js+vt}Ob?v6H
zfsnz$lmQZ4xjfD798B%rN_m6xIK_dQQjC$Bd8Ni)8ReahrWhmH=adl<6CxzYI8Gwb
z2JsVlv-%U at m5}p2<c-as8VcnggDJ=bb3qCW>ChHOM9-c7xFcW2o`?&KKLY=kq7Jpp
z0@@=J{8+#pf%cGEmq1mrF2z4m{I-kl7a3_BNaZvQrnL-bw2fIiCNjIGY(29%h(JYW
zWMOS|MnM2)`n;{MCO*4_=8>ReOCY<z;!OdGX~9WpA&KUYxTIh*4#D9*yfv&g6}Iqy
zj4~pi2 at gOLi4)B)c0`5x{cwAW8)M)V%|mImJ?4h~w5Gv~mXXZ%aa;F{{n(YV<2Nc-
z?$lg*uW9}LmdhWsuH0%|x!rW)cJsAwc0ByS at ap~A<y+PBSIc;0$E2-g#M(HRp}m0N
z6>CvbsJp>Z0xJYe1TYo7O&*7osE4&U03{q4>KztML#RI`aJ(avCER2UOGx!6p+HKP
z&rlV=3I4I>QVSHk8!bn5fs|9y_UQR_903FYTR?c6wqK&|y7SkG6XrpIcD{Y})k_JG
z#yL>mE&I)-lNZJA(C4Dt-`M#zK&w=@(GkPL^x?q at 7{=HTC$`0dkmJItQl4OV(><;q
zwT at M{`gi44Wu<k(!tK^!8p!Aw{lC<3e$heR^<#9Mn|vS+Ns)VWW?Wknm!wDwJf9VY
zk3#_oc0{u3%zl@!Cs3z1*}yz$J2*ecmpxxzl>8YRP7kT|cB)>Tti3dAAOhTS7~;g2
zh%-ekM9++^Z7jWYBz<76pku^N{c~k&iay7#<WdxuTOOTV5@{=rn7@`&SRV!WNo-L?
zkU|ZcHN<2MAuw*v3M1^FniWpWQy*YYIxHhMlyH;k6!2=Bjzt`RUwo=mHWt)}woJqV
zeiFD6ZX)5^6kpzwP}!DP-I-M1XKEf!pE#3y>QVXB*+M{0&g;SV22MX{z4%W3`DeAW
z7mDZCD`qYfw2oyo^qXtCk}BI1D_Rq9r4a$5No6fD{1p)avrl at CdR6rATSK!-LQ-uZ
z+=B>XrsGWhakTK5{o~~XB%}o<rStAWOqrp)qx75zTX8rJFZdTJ2o at 250@43PFpx_4
z>Vc5V;$UqeDI%3d66KBZ-Dz%vVyF0rWDQ>*N(_B26)&pj1+Kz9inl0utCe$_Y-`o6
z|JRL>2(Y(c+YQOC*o%SW?P2WZgE$4}%U&oEaAAJCK1W@#!>!8FDoJ_e!}Q~+{3M4?
zg^%;sjlZG_;kXmQ!R~N)TKR05kLs<f#63t=5cx+VC1f0q&p1 at p#iS<pehtAqU!S4J
zR4F^Wh!SWDf%=cyyQVCioJmf`&_XV^9g`UY^Y)hEG>U?X>k{l0k)tQm3E)71AQfO6
z$A=&fflcz@)Oiw=z{*Q(8ExRdpS(FmR{XEo7MNcXfq-P>L|Sqqt$9(I`O%sAQI@>$
zy51y!TGAX{*`82E at mnXbPi*Kj*K{XAU<l*X_mOun^~`0w_h;un_|?S^ezpGLuP-|e
z*O!Kttt}(wrXh at 1D!)?OorDzdBs^Pbb4+0klY7IHG6M8TOyeR5kjGJjY7R;;hr}iY
zN5uFS)khP&<+F9gKf@#i#=FBoCSHU?DxY5HPR7Wv{4p$^o#4AviIEDJ$9j_u;p<T8
zc<DyOMWqmeY^)Rl?SB(D5E=}UNry=Zw5oyz`AXsIz=%WZzC=aqv9u1w{u0f+0n$d*
zkggqi`K_B`-|*{Se81DE=?i5JzAVl`vTFX~R#iK at 6?w{kx&655TJ-`rn;&^3u`h}r
zxR6x!VgG%YbrPv6?6Z?h<&ls*1V3q0rFD*=F<)PD&OyjOD}LyagayHi;Qwymw~Vb6
zDJc+f7(SlgIhSY^{vTk<7XEL9fK&)nb9+dId&~#9a70?9FB?O^0~`f!@?ZQ28q=~v
zGYcXi|Ac)i+Y->*AQs$$USM3`m)taDnmT7&zLN*S&ps}{{qfxWZ_hva!Q#^&uYCMh
zr(gW+#FIZ=e)#?455BW7yplP4zVQ6h%JI{g_5CTeJt6{#5 at sc@A~v%iDyuNsnjb~n
zlD|%16aK>_E65o1#t3yf$^VA<kIVn%!Qdavw@=4sR|Mn55b;2J at Klsyl4lHxktvA8
zWI#K#2h$ATDTh;4po9wP1%`g${3=E5@{SF?t>EpZt{oiXORMfLiS|GCVXu+`HQEBw
zPB|-0UO4P>yf~tn<!D8%Z-wnRoCT*!*Gk?HgqL7`OY at h2AED4iZbzg9RCR<&%>$MH
zj>?DNgOSMxQZoHw%!lIASpg%Ff697c`!E4|0a~ZxfIZBgQ_v6y^Ka-&t!_7^+hS6!
z(S=os#dS%g4awzADP`@EXm6IA<Nq35V%zwS@^i)K)kjDU>r+*lKzYGH2!-hk{%Gfy
zW-(A&+nvInE3AzzYfgatRCS05G!B@?)-u8N#iyN at -|4ybe*cY+25)^leEXBpJKq}P
zaKVo^J{-9Ee&5R7{G%6(n}^Mq42YAKCL&kXLdgO{xA?of041u*Jy#C9Q%*Mre+bel
zDMpt0#E9bZyOt6!DVk+IaJY2X9SPZyQS4RS!@Qs)2^nyDf&HF+QvXQ+5dW7DkapHk
z`#K{aQ6Phvzv{wCbzTYnKNiXVQjd2 at gcIj(7b+a&pz%6D<bKP?!jF7JGQ;G+4hSKw
zF_g$kbju+`N^nGW#2iyMs4az(4o4%H*8g&AlzKV}o~01fRr#iBen`TG9U>S`MGc`d
zg4iU#I21xtqQ*B%DyO71q<hBNH7&<Mfh-*poQ(Ey+~JJkrf^jV6hN^kRzS+3GkkGl
z(SAaKq74=lOhIe}<H9^O?cvX%|ACMZ2y);bG&=p?%C1Q8U)gRTR+#|N-r&EXU-bXN
z<?_XA<tJ`epL at Ih=ErTfKkfYRS4V&Sk57L6e>}PS?VelT>Ui+o-qUZ at uH38~IgyFU
z0RM0&M1ZG~XYP*N<o{|@C5C_nj)`96>4M4ANiU~#bW$xWub*y(2w`r#1w;mu%KIh0
zjROVYC&Wh&9Z4mL|NBsFLX=yoKvm<dq-KoZr;2<ko$u&;e>whN&QJcOaQiR+JZ`X;
zDt+g12mI!1Mcv))!gkkECGPT$-3*7*f*>{68h#f6fdXwR{uH4wq=242qxcOept&zR
zMv5O8ZOYgy@?WYx?ND}USkG)`x59tdloc-Ic0?!|hmy*g6Z5NLtp#CbTTrq!5b!HT
z9cVbh)?iv_Vffsp+QQPZ!_|pMvqkU#OHlxV0Ocm#0Gv?8U=l=8Sp-DcB~fLNpQP$8
z>iLrz`b-V|Da&_-`7B;5TfPDQD=xoVcjdkM at BIGk_x}C)AN<FQoFDz&m7o0m)%ADk
z*59o?al3r{lx_BW{>14l5dm=ll8D?=4ngLE3IQ^wcpMq_NO8=w!pqy3>mJEVqBTq(
z213%0qx=HKp7<x=DWnIIHO9eD%MQ!1N02>Nt#fn_u{vrO<&KB_cOUfGwfDdq)L)6h
zcMtok;-5|6e~EYbYGk5sU;Tjp$^WaE*haHuL`^l}(YKll9rPlKOCu+~kIZu4e7*qu
z8!^8f?49@*)1aeI8+~egVO%in6lf`MmVi=?6NCsvc`=|SJPy?@C43SQjXglM=jc+w
z=u+X>a?$uo at z`=nV^1c`r>f0V*PYhXZ*3k*g_+>Svigwj675R@>|{bfRzV1`7yQ%A
zm=y~CMFeaj0_mKbhzyQhJYT2tn^h2<T^w855(W8h8?n`QTN`>TWlaect#|=Rbv?;2
znSn*?u}dY3SIbszDe%8v|Ln)3FMc}l?k}c4`HSQK?!SKU{-4i&^sA%Ke=>$#a1fJ;
zGq#S&w83Kq-Bb3CvFxUP3$dWej##R96#sz&xgWLHSgkfz)!GL533vkjL=ApRu!OeM
zn}YKY^9T7yLWq3srT+PlFW{Fd+%E(EjS$+*e>QL)AZNIu|1+>HPrl{FsB)c`xZbYd
z|Hkq&cQhK;F1;-w8uzo&SV){iyatBjX_4__v53USAVnN^XTklixFW6_VXyrN&6Ef`
zFd9orL2!+=Q=pn(bQN?^IQ5^97DRw at 9b%H6QXmw&SNPAA6}K0{(>jt-(UMZum|Wc<
z9zn}UYI#diQEhx~1tHLgyvo>$b|%CgVYv+ahiG9^dT??^Xo at Aw%-AbyxY-&3ztV0m
znl>#vB0XE--!73K9sJ2EjL9yF%_)iPoQtn$OQgQEs4lLwQ6isJ?LvM!CalBD*~hPx
zE?qA>ajW9uv)YH>>wWnB-nW0y_oKhP at RPs0^wa<4GPhj6`?GQW>)hMbD>us*E|(6@
z=l0InQT`ymur3n!A=yf=u|Gwp(q)$BmyqTUC5tyx0w)W;=?maTSWrZq^vA)4;!*+<
zQiGDy3F?NaV1f@$1f at YxN2aU6c>up}&|Z{3_?L|TR{Z}l%m*lL0KXvrOTykECYyZ<
zSM8Zwddn3ceMJ_)?Y}l93pV{I&$b1bS|_UzkTV_d5}-N}`|=A#{<RC>aGcd&lnM|n
zSzI`e@)YD(wDK3H*a3dk1*2NPg5gC6r7Rf{paeP&4$KOqT@<uX1!TAY!hbfLv6ET(
z)zP{Oz)}!m&Iz!WGhKm!Z+bzbL{#9(Iu;6ThCh>33J&+C@>57Pfkf&2HHHNtGEg8~
z<AgM+D2ANiTs!%XF#m4Co+*(3$<w*u8LfW#y*d#7NWkC!&0o)c@|&Z-`_K3P`u}|E
z_y70X-}>z_?s at e6zN_!opM6x_IcZ(H%V;cI0ObX at B^6Z1<&?(Sief-Me^(q9+7_ZE
zW*ZrQB*7Fy at pf!tP(;iT$iKW!8Er(xpp?U at ia06$WIix8Hh`as7YV7M`~y(_l$z7-
z%646&1kuHR9QfB|4`0&l-CifF6s<&uHXh)&=^nQPmJ|P5^}Iu5zO0D7N)p}izv<eQ
z8qk99<)q-%fgoZ&4*z$X5kOmgVZ$|ccZY+d{vQ({EGUMWWJ3f9Xiy7X+8Q~!TuAV9
z{6z5tXSD=IG`UvVFdReu5Ajc8H8{WaGGd8gG*|&ABuJ1ijW7nNfDq0jE!F<P2ZAHK
zaEJL{AcV_o_`*^Mr0RcEs~1m5-9AJey3#Rb>zT6m&g2aoEf`#~9=liq{+F&R{C~gq
z(GU6r{J%Z=lRupK5C7%SfB*cK|LyZ%{^ftVfjA%+NXN;0l{gE>E|#{BSsVLP>v~Mo
zR1mYm*T7rR!5>t;7J<y7a9$OHKs9)Hj1SHcGRvF_UOWX|()NNBL>){_4PqNOV+K+F
zIJ|x#X#PDu0kUbGR3jA*MEJQ?WuHcB-Wl^D>?0u{btL|y&vqQcK=MX4?g;+83V~nR
zQaGPPON5&(aMo4I1sya}+vav8AMH#xZ at l=%Cd_a6QS!M;ON(Eu*^b0T#UmiF<Hqep
zQnpCPKT8lCu^<Eg;tQ)ruwZ=QgZ?TU<PZUAgpn-(@m|4EGG2*&@%^)fJ(H3GhWT(R
zTTP8aWMheiCKgo1+RLLe3&TqqV{rtMECIs*RSMY1|7Jpg!p!7<Gs6k3NUYW5i(fzl
z9`KWOf>#56R54xyc?46Ie`RMh#m~jHNl+m84_v5eAiZlcn|$=pl6B=q6`n8L9_9o7
zKmN_!PyY7Izx~g5{-4jk|M};C$N7hUdgteVfBxfN&tU>E6H{k%##Rb?rgOR`kf!YX
z+AtzQnS~MA#W9%$(fA;^BxI|}?b6ATmJ_O764ecgF984dPe`Sl!<GESKf>pQ_A>(w
z%}=R=j8XO7>3Mj^{)4o)lh~5TkB)hgktZ*Y6`&_e&X=|VivRqZufHM3umWykqT~p0
zDtvAOQ4LoC>ei$3Yp=lY%dq{b`z0%_&IZ75peU|T|F(~DS%)picgn)cL|{7;pu6DF
zV9s!;$^z(IfFmQIq<|hhVtrx)P|h at hsaTLNEkBX*q^PLUr{ncN!%%$7Ko-s~hlwaS
zza(T!8sjYm%uj<tOZ6I6=wKU0O^2^?7$MlCRwZD<om`l#!MKfSwlKp5wnu2^mpl|u
z6#ic<{D1sRT1iuEVSPkFb!<sPJpM1#T?haB7c48+tI_}KFPcEOW<Edt!`c7!pWgla
z^S}Mv`1hNC`2XJd-oIUb_T%B}?{}^~C~O&3DS)mdM2Yx+-(m{<pF$%tRyy^70AjhE
zQBd99uHLxn_LaN<|4WO655*xW+KJlVqY7wul2sHD at Rhb-%H6 at g>K~VNz#JpnB{?q&
zGL7S&?bWr!&RZ!e-u+Ufxq;cGkVQqy5phs%sc3Rtw1ZdcYAe${1z$vR9E?kw1Gnm8
zZ4_LFVA~f-VUkqc6ZTZ9eoN5O<qK~V2X#NcA|A0+#ED&Sh>5Br`eLEjK0$0G!d&Sv
z$qPF(VjBOL0NnyiER;ZyY6N2ijM at T_K;xT?J78E`<47DtXmH+69Hz0~Only6!6qQ)
zicqfXmzeIyEsi8krGkAxGRT)$kcxsjLqIADN{x+#fE51S<3F~-81Qc|i_NbIFKvpe
z=}PV#&+eYg>7CB)pUoedFF^laeB8SJtc?h#_I%O*zxv-UfByL|KmYun9Qgk)fA`;>
zARSMBIB at 5a?x{0*hyeT_CxXc5z*1VvDEMa<gpqgK82 at oJwCc82xs}nr6vPq^V%jIk
zai*kFIz at FoT~Q-vk`k?6ap_)BDKu5>q-~Iy3FN#uQsm&l2ne{4fS)1<fT4my0M)^K
z)P+l#OZlz>w$i1WsD-0AS%CKnlJhmkyp&DIM<Ngt^_;rGdE48~sCJV$rzznT>T5#=
zAxN4d@%)>^n_B~(ZubCneT?5SM!|^GyzD at ecrf{8ir*-gl2$LyE~z0Q%BrPCB0?%h
z<}w_l0~|;9!c&OIVMKsl;bgXv$)%;8**<~w1F at 0?NbrH5s2N$3)+bHOL`3*=!=Pe5
zjfp5{B0n&nw4C6SOeUX8IgO5g8nCy9=oG5rKVcM at Iji7wAXK72IdTvLEepyJP?-=#
zD=}4Y1VV9sJI8Yn0p$hQ`;X?}1t<|{h1<OMiwR7?FaKfv at BjNVMSipd{Q8IgVeQEe
z2gwdhpUa=SSlB%U^T{l2j+NklX;elo$q1sdylg30MOrafSS|^8GLlgp-ZB)3LO9+3
z1y9ozZWN7BF;1NuGxY4WzT*DS1ZVMO+5<UdDm<xnU?iFvC&E-WRgoz3e^g<cqr6R(
zE<5WvrJY1W9YKKhE0S-JbF?waTnmLm99$hJj&>DY)i1YfHQIXT#(Ug<UH|EA1;PDJ
zEfmI!)Ma?v%hB#{geB}{@drn$nzuVtx>D`@B at eZN^2qI;$0<9;g%npvy3Hkk8)L1`
zpb(?2WmYyvrdUw_vpXneH>-iESK(zxn>|x<ywVH3DU*ZfqWnREvwDGk;f|Sv(ne--
zhS2}pI%=-%Nu>XsLAU at oAvKVIA?AZ7 at z|um at aQ8^aY5lx0l{Iu0m0rBKT}SIxP?UE
zUHV2RN;sXef4qj&oS=-n5d2V5&kzzcGmbz}W7x>5mA+kyKWn>84Si`S at P+|X|FJBI
z?Z0RT-o!aS{PXGW|IG?6z(0Qe@#mla;s5>o2Y>OOuD|oMv6~;a-1)Tq=!KG at g?xga
z6qHV!ON06A;(sQ$BX<Nm at n3SwV{FAy>Gm)fT3kv{Tyju!LLl{Tk+Feck^VuUzATJD
z;WM3#uox91)OK=Il?X*XdpUT`@#(&dlhu<zsB_bY at U@(SjL_f3d<G6<Y}JrMV%j??
za+W%0Rnkwp2c!Rx3+kM~Jm}J$Al$k2$mVN`|7B&8bhYqX?njT9WAqj?DmgTACRz_u
z?h>Ew#Wjb<d^uT+)Yy2WmBTkFQy##7nX}P{a>5dJ(>KK7E%ONw7*U-gviP2(#y{@H
z8WPdMt`S9)6XQD4U+FjmSU5Do1cq}6Ana#`u#8kyUDZU`c=2d;-Ws*v#^<9NVfYZf
zp)wTAMbw8{@r{S- at x2EQNe6-JILf3|CJwnX>XG1AN;S!xUaCXAj_jf}fFL%ZJUW=L
z?@|I9vP-Rf-!BFER{y9Z852sk+Q^Blik4(X>(ByUK!~0c0Fh5S8Lm)fc(OY(Cdn@@
zC6FNramjLG5`&`R0+0n_DYV1uiUM6r0L7yInWfvPT)?kc6Ls}SM7li$&%#y~QqdkS
z%75D4KbJRfEPv&88O3i@^^BdgU4GVj?Ssa<pLRU?(?LQ&KmEJ2zxm&<{^IX15dXaS
z&6Wq>?VdiHH at IX$OxnjSxDO;Oh*RPA68R+K0Pn&X#}Z+cuuvo{OqMW)-_o-X5ql&!
z!kft$p;5l52wpj`&#qvvhZHXXe&SbpBm#7iaF&0FM7LzrkJ2qjI at 6`F#Wb+!?}$2Q
zjxJe8r^%78NoJVy0O at ei$MK!g0D{TjSB(3qlxFg?$_f#5RnvEkNGz`eGi at 9h%b<d9
zMBY^J&CCCFb&R1{pwxLJkgNJ4c?KDl<#xRMUYBG1uKR`S*PYM9ue%@GY-QYp2b<0)
z!Z!|8BI>9;N@^4ajD=}J#$m9E+X4KDKUR+ep`z7AOE;d84(H<IDCK~<5RIYq04>tu
z@?b#Ke^E&e`P at NaIfoIus<2!l5*$JkIB1Lp(xXx6&X7s(Vf*!DW9mW)ZV=q2te5em
z=>@(F$ZZ&n%&7_h|8&Ptgiz6%R9qjQR~eI46rP?NVzR;WCGvynhWx`QjQEe_e?#3`
z0HhHB{}+!y6D0A4rHVioKSz=Oh5v(34l)HxrwY2XDVDf>=R|h*6ch+S$myNQ>7BKW
ztY(g_WmDt;yovMR3t$W2{I~-kf8=;k-+ac%QhwiTPWP0J5x!6<T7cWe&2+oN*61%z
z%z*Pq4V!ZWmbksT=QoZvJvwyY{5t>ZkMeICi?Nll1%^>q;tq#OUp!?_q)zajJk^po
zqvc#vO(>{%aBdMlZJ at E{2!dhLz4z_gPq&LYtlRQnRJc-8j$0HL7DW4l;v4$V|H$vs
zN#xA($Zi+mU0yrrX`&4idd6Wn1zBk{ZGfR^Wm>y&R4i9Vbh+hDR54LpVz~?kK_{!a
zTpbCQl&EAyjl}37q>l_K%upTK0HO{Ifg?Ow<^H7QpQCpHxZiquGS?L6NY%L=fF&A7
z--EA2xJ+uLcCwG=jeYxh7&C#flFX))c1R=w(V!;?cmsZ}B}%N2uS}tEKd0<y2_nKQ
z(PoF6Kwd^`e%%qzM05ySc+x(K6%(!ADcP)jWT69}p|W%lyHfMKnMc~Y65V|)Ne1MG
z?I!Y5*K4X~%wTi8t%S9Y0r<br3C4#yvE&{C!Xu86 at FsE*MAx}48;~l9oNz_^jrs>+
z{`t{pW=>8?jJ*u}o0o3q68tG|O~4U`x>LQ@*q=rstbNSVGm|y2XgTwC+4;8{E<J0O
zMDX`|K|bPe_1$(VpC?vv)${x3^2=Id at TP6$L1H*A=hXEj>Y5E+v!2<@%hrhiiT_A0
zz%l%d3qA8T9^1FmQgYZ@;>VZ~%pwPRW+ at CJ146dWoPC6h9{OKqqp7lU at Ciz#_|xMJ
z0IcKN5)x4y6+;Xu;(p<-D&oNfAV<TyLmeZc?1*#_I1gK0^x3U0nD+3M*Z!6Iqf+j!
z7klX;C#w1#Pmqy5jQy8oruz@=WUC7kjUb{zfHxlQ<k0v=s{&JiP>*WtA*x%gz+(&E
zURj5SR+o+{&o|T)?!e_|;0as6xFGzi9Df=dWcDLT5H)Dasr==FRzwvd;8%7aw!9wZ
zZec)aQ6Z#8Jvn0pR8<Kj`m$S%-ck<Qn4=~$?`4 at L(<JD&AS@}71j9cvOojn_w^;FJ
z5l|!94g9BivJQ!r<<aH?k;(hm+QzrfYk>UwDgDnqrrbldgW-9#A;d{|Nx)CFr6kdf
zWyuf8DvVTtL>UIc;W4o(J~YuI0vzVw;#b0}(fJzrst^wMGmI2~R{j!i&vTgo%JMl3
z)Up**SrN^|p0d`+_8I1R#?lKsa5QiJO3~u=;?s{xDTIRvEnF$R^r8mXufJ1!>S4+8
zt0m(nvx)goDM!yQzr_e3#<pO#XaT at gH)Szd8iN%;0}J(UI3QYb^{8GN|0NKrdNcLd
zLmB%VdypYoRed4JIjqq!zLA>#a7&RtB9M~pW6tqqt`y7TfEn`u)#N?tb3vP_{4d0q
zdA48E1&UgYgL8^fzys?cSgOVJAqgX=bC{<=VD>O`PJ*Ll|7=*?e!gxJF=25By#3fx
z%2;NZ>Z33WjMdQt2{+#2<pE|~5;@BGVhYfv^KZWLuQ*!J<T3IvaS!D}{VuN!hyqlW
z+;JFb!jA|PGQv^Mte#*072kan{!#S}wvjbOFyvSGOb{q`a;a&A9xQ`kVhlAl;YyQG
zY(~AYw4%tS^*vmRs}+v2<yJ7y;iCwN1@<x~A~NY<R5JZXhnW3>X~1P5KClh!wFo%$
zznB0C6Cs1L6czkargiY}PJCV_$xsZ2)g#eQ`!;D!1Q03Ul`!8P^$sD2+o1HIK!mud
z$+wqB0e*8fEP}FUswI8YEKP5~FXK&AdAw5iA(~VGe!N}4k9_GaNC^Q+N2JunIe8Ji
zGYAWg016o%MT*vx8ANeuYECfgHb~v(SH`ytr$gq6XL4u+<A7~B1Ez+7l>WI~JcYj5
zT>iJbMaoliN`+8KOi4Ao at XVMVRhSooRPyH}@?-MlHAo;diFofpZh<{9Pq|I;HQPei
z^GixjeGXW88EQm8nAu+_e~Lgj?1fR2)?Qb5meCC=0B!`d`BAzZJ$FGzT|%+*HB>8O
zF5s573V$)d79WnxIWb0^$S5#+Liq|9i${B%j at c?}MKb~sxdV7=-hQZb4i^sT at RwOY
z8;=fmY`irTJ^<EW7JQ0W$+m0bFcFbKD|*(7zTkGh=U#4A{KSZ&D8qr2?FCnI9L%2!
z9073$JeZxhmjQsxgbYvE&)9!9cL>76M6nCmmf6dDp&ud99so~E1dSDr|J}u?4K~Sg
ztA7j8fEwW?x%&%FDIgvT5t1bf1mDz35kk=5U-KWLb7(4F5~Pted6aC?9n7RVTwt~!
zk>3IQxc0CezH6f2FkuuUweh?v`XXWeIb~7A2VnjT(uDI1^G^%l0e~l&^<L>gxL4GV
zQU4}Rr46^yOM{$jFKQp!iM=BffW+Z4Gk1%}6KtdbfxI*DBOr+q=4n%`c%42p3!}z~
z-qQ<K+ik-1NK=5(6ei&Boz3Z+vx9%c0sNCMpk9=ebbeJFu^q7{g)td+Azg%hU|+}}
zPKpF(GYQP9!%MY>@fu8-f$2G6`1`5Z)HV6yTA~fo3uqRW*CU^U>I<V*7H5-k2>7$`
zf0+||07`%sb%vU80Z^^58u%@q7s$s7C~mBnfXC|uOPNQ($*rN}J2*C#HdTtiT_QkC
zRUPJR8wcy)ez;$$APmQ0W|1B6e&c`_)B-VllSB6_Ar3 at CtcF7<6i<`IcAF0J!aX`F
zc=(7ch|~w%svy7tW*6`_-HxmYP<OiS*T_e;^472#TJwAPi2mnr4@`-d#BXtEi{>bw
zU3x}jJ#o~2yn6zVupm0AH3h;RsU4JjbdCiIYOk at xd-n+b)h!nr;$Y$$@5LjKCOdoz
z at Q=HJ&BgL^s7 at Ed<imU19hvAUQPAk!VF~+UOa~J(ymD#|cP~Zqz2nrVN&uAxN}@G@
z5q}4 at 2+&2ygoNCRC^RJK1<Bf(N=yx*gpBwPaWKY<(LBOo^O4a=5`KW$YZ(Q8x|}R5
zhD8!mc*y~fsAZ}k*g%2irxc%FNLx`Pn!Khbe*A1YJ%;cZqM$Gz+=0<G>(NX3vlnxh
zZj?~!zj}v`fbwLkU+;pssxzUuA&SXVJx9}N8Oy5;&MXKg>`#z0EhmiKUQ8SkAKZed
z2I8cXn-Jt92$nGL%$x_RVR3AUWx>qp>ca4$omkw%!Y^L1IDL%7jP)jvg+f!#FU+4h
zLpd7ul6=tx0FvA^suLCe7pl+Eo~&>QpS{Sq at E<komtl+&P(|}Qj+)j&kDk8Mg?}v+
z)Ev@$%^)TkQTKYvsz+jahkSOimdHT9lQKC(06c?jZ6Gw80_0vC-#w~fT&nn(h%3bY
z5MG0{^Qgxg3-Y93VABaD2yl>y8RQ470yFF&A^;ImJWwJ(xCW3Sx8U$D9?Acr5JWTY
z#!~1Ijm!a%Tsg!>N=MZ6A%~x<y<Kjd4lj<d5iAvF8Qa7 at 5l0A=_@@+9s~$`lsU-fC
z_N2u3k?ocT&|2hffK7awH(ZD;SgM^lX at R1am1d4iFhl_F9=i{>ArXeP%B_ejZlFXt
zHbGT8K#~cGAPDL(WX}^&Db*_IGAT`~7&ZJy8Ua-BN3=1f0Y}&>E<hyRD5^78QefGN
z{}ZlZ#P0OPtoa+Z!um*j;fl6|lBO7`h#(#C|MPaIPj+nCb=bd1{YK1HD4?oPD4;OU
zz{3OZ=DFYNnQZpNNeqe-n`DdBY*}{53Wq!>!j{4ghd=qB^>6KcGH=$c0{W4b9C0G!
z+^k#o=FMDdPiOCae)Ils{{1I^_HSPN)&KDEU;ev~e);FmfBt9h%JA`qpZxLTuYZ1v
z2mNpVkMI72zo8 at E`@tXHX8(hh<OlY at Kr79~{%5c;(q`j_4)RM~zafhw{@3j at R(=g-
z(d3dd3P0hEWY%w!pKFkujN!?0P6<+tsWri<gc{48W65S({cMk*j!cn^n-A5|rymPD
z!Gx>w;JFQGvSpRqRr^fEes<aB<#y at DpEx!{Xz!|M_G$je#sz&rHNSlejG-EU!5G>b
z_Ks`vKVjaR!9x$SeI at EkP?xwC>>c1A`=g2d-rly4o^N*zt7y;pjq}S<`$De%x_G(0
zvnBqyd+DO%j$_3|FI==)UX5*gyJw_L))f5j-H|}u5J1)uWyH<wg)uLIb+KgDf|D8{
z5u&r8Bcsv|eYO7UXC?*Wjw;2Z0Lg{!im(Uo>WC}S#p11fZ^^yqmziX}E`S2o2%fyZ
zCv^>wYFN at bG+5U!K1m`(CW~|kiv at ECDE@EyKRg_Zzg3wI|K$Qd`tI*M`q`g7;RO at p
zzx?%6ia-G84}bIQkN at WRzxmH!{P+LYcNO{mkN?m2{@wrmz5nk2{6=ZyKm3;;{pr8>
zNb`pzY5esEe;kX5r|^PzV2O<%VJ$=a^V!FWUoKYzTdsOaKGTorxyVoZW!dd0cHkW?
zowM9yPgu($g2NWVe)TsuwZi`JyVqENX at B?06)k5O7*p6J+Z_ at +^YDNY|F^f%{zXT<
zt>!TYKO>_`Om$qe8PRU(N?vuiMni+L+v^xdnCNCvv>2bU?WL2%IOH4i`Nn*|Y(`+m
z*3L=8B=5h1L~*gbb0R|ah at s;S;eQhNFk`5ql0Rm2<WtqBk$E;n>iAEb0zM|a-|Gd5
zvep8GNk(<wrF at z6<auLT{4-6!Yyy~-taSdFmxD!q<dX#LQ{t!$x+!HSk!OKcE?9wo
zN`6RB)G19my91B9_+$Z9B4|`t{g6=+mPF8fi4ehmm4-$2KNtGm;Rt{VZ-rq%K$S#_
zAYvd9q~Ii%pg?7ttzCg26eyQ-6oS=a+0`ionk+cRxhRkl;MM|+pU=MkfOBCGgRdA?
zvgW_`3W5kKSC<}%!}y`b&ezNG!MHmgeg*%@d at JG4#juB$cDvaZi7a)giS0kPoTO`C
z;yi4gi2cfWt1fw2=#=)O+569b{ovVW``p#r at 0??_?<N8-|EE;{C7S)%kyWtO$ck`Q
zxQ4#2b+KL}n*~}(l=G>CvcvD|Z+>Tvf0_t^mX at hVW<1tdU*a|^&$P6>m&lTEjeU;F
zz3n&5TxbR{h8y<&x~>K6e^G<cE_zdBSLS(E%IiD`e?v~Jbq9{*YSiMdL|N+#-D_9-
z5ffeVSpM#()xgH~wDwWi5v3eS12`X94Oh2Kx&(O24zf#qZ2QiaPIhQj!~=g%#&O2{
zJek3t$<Fl||D^&t5!Cjt-4wkHp=^mO9dww!&(du;fT at TOCq*V?**4M0u+;H?J}e4g
zM1r3w1Wp8%@x$7Q3H06j-pmTZ9UieWB9IBld~(xyhL#bBI+K*8tI9FyQB}iXV&x7!
zB)Z$H^<6%P&+es<V&VH1crJ(cUcTt7#9e)<zq&R$E8q3ZWe539-WK~M`2+rLX+`pT
zQaZb)!u{H*AN|RVCm(I!eRqS$3jdw?mPq)H{5O8?TN^Szr?wBgHfhgHT)CjuBC{@e
z at k}l2RQ`h|Z<WAcxxZ2)Mvg>8Uo8#ydNB_g7utf&YJwGkHnD>F>hpZvj-qGmSy0~h
zY9YXx4stFdpA#Lj3UFrg4T1e0%@lN~KxHpy0Q}M at 8lFB4f-F)#;>O<L0c|t>4SfKh
z+U;^1nFsD3ujKACo7OSH2e3`D-eDWN^a#yXtt*f-6tmUil>b)7Ok&7q-z?c)bpZ!E
zyr((0Z8<3lOwzu)L(G_;Ck6f?{HcIjW3&lG1r+{M7hk#1W&b=&I<$qqj9&74ewl29
zna&BJ1%!;qPfK0tpj+|JtODC(_v7m#KTzkdfQKelgyq|d7l|yvGh at 44{%oqt34Qwh
zbw^PbuCYi<MTD{%tKY1+Us9~oAa`E_D>)L<_+`rRk-z%MLz7yJNPBa_pEkh)!^Md9
zC`Q1nxY%h-cUO>#!{Ra=rDtObg9mM`pF+N2A_8U|#9AtWZ)t|ef`99(9x)17H-!9$
zFD`Ch&Ki)hdGTbT-<|nc9j-e6(-K(5))>i!tI&i1o!ox0>nz!Cos#w=tJBJ++#VC}
zsTF*L5<Bv-3HQ+*&}I7x_lKV~-8U&T7Y?l2KeUK%!I#3?x_<Y(C{Wo&Q3q at fkdAMD
z9kjBC%feg9vKQemRzr7W7d%^o)k?v|?X8u%sVL|Of!0!W8*gm6*ebP)B}000ZIX&c
zo(JIt=^%VE&gTj1MW4gA*bC%u%vCTrPVo)Q&xMmm>S89qXFFhHSqRWkI814uw~tc^
z<f0Z}!oQ1er`}Glg951tOFDF1fCU9aKOmF%1xx5+A;WfsszL#FKG8}Ja~`u)s+#!e
zC3pi`=7%tm$H&a`fsSQgi7{TbgS?|>3XqZc&n|HsIHxS7#yoTAiyuDt@<+N3K2W{R
z^ZkRrdcms|^JL`PEaOLibcdV3)ED_g2h{ld2lqe!L5wK=W4VoD=A~AegP-A`wT4^o
zeR{`W*o*V%eTvr{-U_}AgP$~u?!JDSa?hrU2eM_7^KaKJ8eg!5*(~x2`Mvr{1;qMI
zx1XwcSyaB%DvXZA6`D at q?nGC(NMpkSM^z-iZ>_)2nD+!(Fr_p_r^%fNQ#MZ|8=*v#
zBfGkdYR7DTckQJ6>4wL&ek^KtL9|w$gD at TA<m$~$!BYDI at D7A41w1Y3TA9ttS8eQ-
zC0+Yxaq8=gBL-z5?DDz!<k`(Pyt&uld_q>ZN at 7RC&wl7MX at t{#ZNoTHXNAwhwE*R@
zE~WZ%-X$>3phmB-n0Q%eA1oMLm<9fE6LMf#1<+bxRsrz>9`J=FfRQ#*I)@hE3ncL)
z86d+JBE4;Z&T=qR1?sO$oR*A at ycNMCqwKaoYIUd_=DWVkc>xw^S8{G?jAUm2NRVI)
zaVW|i0ALZJL_xp!QN%kruMPe${_#^g^!@7B&;Ed8`&Yq#d$^GQ`+xc3SAX%`pVIB^
z*U#-urZ<ZWCFyw|e|<+h-^YF+?K$l!Zs7v9x>Q;qfUkv^viY|JdCKNL)jn_AJisqK
zrZ*LZe-P5=XIIVFUY7oY|EhfH4$r;LxL)v*4u`zLq!R-(kT>}I=w+5{HcnW?0sD3e
zYH>%a at V6xMcV4KVcPI9nhyi-@90oT>5O20#LlJm19u|V&1unSZvfAjfN?q$o^4xlx
zNZDWQhbE)R>dccpTfN)xeP>@NDLY3bm|vURm6bJ|{n}UMl=HP5Y{@_ZD_cbu=*fT~
z#*?rl at HkBOS;7xgw at 5G7b(Db3r7p>ynmIyK9O|RkL^uljVe=o>1uM6A!3D0<5en$o
z+2vqS0j&j!0$miD1}TFABLgbcF?FAl`CwSBBl;@m$9^aYl{<=TTRcjL8_q{l+_aE|
zz_QHmvQjD+h$H-<av>53Z66l+$?)Z1`OE{VsTE`K1~NZyU>#XC`}mvNAAfVl+Y0}Z
zAM`0o!jc8_IKSz*d*GV2g}3;A>!JLy(}JAc!?vS6%pPlkS8v6~8Q_m|ciJwxYQA`X
zgnuQ&5dM*$?EH#;NJ~!r*BDj#HOjuGKA)goV=!VSMM?msDy`%+)>3AlnIqeh at Zr46
zyQ-??#7qi*k|Eg|L^gG3QrXl~+Vj;r at 17%htTcH#th>(hy#4TE^8!;$=5)|hLqFXs
zRg#ofREox#p1y5^Jbexqf^28AIr`#o$DS7EligDG%(}GC;s|3&?o)MuUlC;buciE-
z=L`G~w|7SVJUJHj^GTl3!2c=`ltAdv0xMrwZ0a&YC=F6l9Um6B6^P(g6!^0=+(l9>
zAF0Ar0JF#7W?EfhS~L4UszyMpBSPMsoHwjPDMiVO807acflv|A2Z?*Xw`Z-22_zSS
zajw3G#Z`-C*FXQhrYnziU-{tc18t~9epKoDE}X(FR#}2k^$GT;HWc=<zCQet<iF`<
z3f4Z&*46KSv-93}cM1QJ{6RjKEdkHlXXEhd<bPYthqRB`lTDl>`A=W6iRaaXJFE at G
z_^G59OF6aioCL*G!4LeWu`Q`yAh-CN60p_q66{|wfZPD)_70i_=FT`z;H&mZ-urG=
ze2Ns=*rK^$;*)z`U!m7-wo)=L-ldOv&t-@;JJj+Ro)^7r at FM^oL8N_h$C at c59<vH5
z>g6e$xG at I80)=ufuE6I at Kpu02wWASM9Qo1+Q3{7^guhJ{u&+1_{+Hq(5oWZnO#~3y
z1$JEc!tw5#0u%v9z~Uw?z!w$~tvw=B-Xd=y6o at SpbEp$vIjSiVEaw+UdUaL7Z)~A%
zgjGii1a0J0DuPuoHVH2^nF$>Tawb-KjFW86ULL`oCOm2i-g)ol<9BaZrV)H#i at J@v
zxZHhspim{w-3>A7i+3Mg#sa((<bVEg+Lb3Tm82sfrY!sVcE*oxbz-d_{c!i=AMRVu
z6UdeFs<NZao>aS3kz-pvmv5+cJRP&Yh6&@}{^>*bCw at MJzlb-1zXpCQo0I~}AIwJc
zlT}v-R!x<+r!GE4kwDwnZsZf)4bk=v%-KA}h(U^mcWNF_zUC7k+#8&1QoM{8-UIyo
zzqsIIeW|*${;pO`(L4N<vd8RoZoQ*=oSvpQXbtuiY8ag`)^kUYZmV9vR>~8=SIjEQ
z-?Ly}!+gJ7wXu4o*nf%q|65QXCR1$(+{mwEFNY--3jaN_*ufUcqW0tts}7C|2nCd`
zWK2uLBmnNizgW8EFv3%+0OuDS(p|hZzb3;g at F*r3$^Y@!x?nMZb~`jgeGohJGVl1=
zhY`_2^p0e>4kVqN`TV2XwxUo$(?v8KiuXUgo4S?H at 455ue|rDDPwvUS(8k9XmEm+B
zRk_vNfv<o1 at XMdvfA2Fv(c2i|OaIZoyZ8C;9LW8!mZ9E(|1Ms4y+ZwrWR6VP1Eb=@
z8Huv`IroU$Tb2*`&v}gHui>E`ezVou3jZznYY~4!zHXnR;pgb>!1zajr6VvKKPJR=
zcoAT)cmbvC{8}N}Jb%Hy4{V`93YHI(X^^4{-e+ae=a1vXu%o;avziMFYP6vhmwaMJ
z{B-lYxd`G1x^>h+Vr5gNN6<d4OdSjO<;enncgp%L)$TL?kJAFLVgc9-0f~SeRs<>8
zsEXjlittnyT)JRl!98wKd|_=fE%&_trJ}`~B7_M9J>y~R(tz-<5rm=@CJ;;b_G7qB
zBQ-MLau`fP9XZVFjN|#m9X&R&hF`{xdiwF at PrrZryFb5Sk5S{Dk1qQtHVn*n1cRcH
zXhbitZ73I^d%~P`6niEK{9y`;aVQMm#R>|}Kfi0eSlQPv|NNOEjwC5*X7zYSIPQ=C
z`QuN2e8B9toCp6Te{!zw#s1m93IC`6`TzFbZ~muue)6Z;!&iQ|DhUBk_?Ips!9aG|
zaC=A0vtmAl|Jm$69{+2ApG^HF?0?Ig`dE;Hpaw+>qSgyy2uTkB(U}yWi$QC>AevLH
zETG+gMOl;`RZe#l4K{@crCFL9KDMu|xlq(YpA|d4J?5AAH~+g);FT;u2kQk%P;p$s
zKIIbADEu>%4zXZlN6fn5PC}z>A&>sf(~bAONY8&=sy_Vs06c#GpWPBai9aRV|HFM<
zbR?<T2FNz468Shs<bMEJsm?$vl|BB#i&UY0|Mzc-2pPZkXOGBdZt{zdZ)?MQC=mLo
zoQj}59>M!r0ua&^4n2O96G3sb?x?V5TT>X9bq8Gd=4TK7>Oa`X`&Q+1W^wJ#lO!C%
z{D(i-`SXAO_+S6$4}brkJp9F9-2c6QeD~=myH7v9^yq`_4){xT=+sK!7a=6`WBkYS
z&9ax!2h7j-7yt1x_D_tTso`^a8%_fM?*RUn{0r$_q==d*D=3oOg4$dX3*La;qyT2`
zX=MSuLtoS<m+u at S$_M(>>~Ys*t6c_v^(_eH4YSrj4Py<}f2)@h1xf|5g1((0wA2Va
zr-NkK`Rc>bq0nJ%AVr9f{W4aJh;@{gR{bc2to at Zmlx)>x%6)O|osae&f3Wl7^Mi-)
zU6e8>enMtiDi!|}SFw-45C7nvm81O|7CKK7^$hP%zPT at p{=xG~pG)wetDd(%`@!vZ
zKe5EHM<&PTimjeSWF~st<gf0M at WYL5XZG-M{Z9pZLC#OVHw|-X&)?W?g9{K>+Ry~-
zC;#AqsFawkFKwS!*k5ZPTf2VpeMR4Ld#a=R=U1M7oF6MQ7V_KpvEbFQah8uC2>d)>
zD_p`pKo0FI3IzWZ^W^ik{U6JJVeq^J%y9Lx(Wd at 5PTK?@|K{>CVm@{2p120tx7xbZ
zjB2EiKbh85lLb}EBJOsRV)|reSUhfTLn|lePiS6HJw6#b{#Jm0*_*#T5&9E&8FHIB
z8sz*M!o6G)Wcq7X3R)>lXU2+oUN#q|V!FyI>15FhFk^dG{UQt#!!oy$c|nqD1Ac~V
z|M&+~K=w05fh#x9V1Y2QRI&TdM3vQUXRwr*`ugqj5z0R$oa2@@J|DhFaI)vbKC6ZW
z)hR~Y1j!FBL*W&a>ell9msb-zP2lu_N_O^`#0k2_`+W%cALqJQfC%08gtn3z>J0>b
zB~%D%S;f=F;WBn7m-vfoY&_PERQw!m8UOKROTD$!bvAW>yP*J?ZvcPepWDmNMFGcH
zJ{9vU6)?j7<p?lE1_g%M|8l5L*jsVoSnv<&J#pbMZdd=?p9a`rL<LA&O at K7$(iAhK
znNJqiV&PA`D1DLUTAYaGRrRNZ7h at OTw_gV7|1#&h`Op5A+&0k<fm0Y>!uu8T#yO5u
zbaaqH6v)GJ?9b`<m?yntj4DCBnxzdRtK?TU>}kdO)A3IX at bWdW@k9vWU(Ntul8M4}
z at 7A)4+QbrtQ?P)UjU7a;BRmVyv{A$huJ}(m#YqI}<osj-(FNo)a0<67BH;W=zB;%m
z=R_Hi7LMAArgerYgD1~!K6>|>q638n*Y94mxNHN;tglT91=>IPTK at li@%-QY^J|~|
zMA~zTytp3LeJt=9d|pcl@;PrlK1<ZI8yzJ%zw at DZsop*cI#Ln~{K5YY<0r0e<9|{C
zg91?mwj-Q3_G&FKT3|7g5(`>cL2VAbk_d;8KU*w^F at G!(=95d at F6S`3^d?Hkmz>`?
z(Rr9GsHCuJNpb!ZQuLUqG1*bEg^c0$erwP77+z%UEb*emk at N@HmJ52emWgW#Y+fCk
zCYP@$o6n+~;nSi!razhZ94Ey~>*Tfo^*s8ko$tST+28Ak6hQ7vVPMYYHBV8)o)pK_
zM<l&Os`<V?1KME9h2G!}Go&HhDu6%`$W4o?*<~-f;N}_SC(vF;lYx8_END^Rm}d at 2
z1o8<QQvf+J&Lc47QM~`Dm1Uc&-mY?+?8(AMR<R<7fw#+;FCY2RSHJUslcEQ^mCY}I
zEFJC+JteF2U;d{LsHdkNT`fZ^i8TCTr8*Y7g-`i7X=ZX;b&~8a%@$J38`kfOTFY_?
z@>OjZ)#2*Ysk5(FOAWa?F at X$8ZeSlFU#&jL{0fp}382SV|1FDXc&70Ga`69uNB&HK
zwaLrB^jJoWr3y|2UUaISNu1 at fe3}<4{CE84xZ at 17Oi~$9wf~nkNp)t7{{PO*e)MDu
zW!234XQ<DBA22R|!5nA at 1rD|aVAtPY#B74hfcJIYHXn(m&N+1Q^w~FDk_+p+?vc at b
zUe&g|mlRG4gYR8C16o`F@?ZQULbbLx!U7l*t^r69A?A?HRUr at y%0w6Tk3fce?yco5
zwh-9A`^i4Q^N4kAf`9*;M9_prce{>E{9m+RI?DaWHy%9ES?Josr#BuwwKQ;3MF#o*
z>_Z&6$71>7cdnPqyyqKTn}XAS`X8Sw<7Ga%Hu+2Us!2QfFJ!8QvD^6YcPu4HYe_;&
za$3 at s!5C#ta+{OhoW>nQ6TlPo9Nq?hj%o6ihKF!In>ubOxf+Cwg|M2m%@86an9nRB
zijQJ)h5x^ev|oezw|sf at +sB#Xb;MwV-^GGL1PbC1wx?JqXk}#c`s8xEb#nPEgc0w~
z`<KS>@`x8}(DiaAMZeQO`oOF>*CJX2_|SiyNhZdiWYMRR at sd-WWYql&o{NztOVxSF
zTvn>TO4F5dXhLKu*;ZxmvVE5)PSM+6m=@3k!{*NRl;;IJcz)rlU+jyh_fnuhrA?IB
z>hP~3UVbtk*}PeBy|#*jNwx%=-+8N4%y^i8|EpvsfW7g<Ke`RWxWJxy_k-IO-~{|(
zRbWT_2Zn$5Pw)M!|McPC{D)7aRaDYZ`YWc^tm=6!e)$TfzN|L8Y5(>A^6nr0(+AA{
zFMj6+-6YQ;39HF6%|2zy7#HB at Lv2@Dm*-OEAA4_VQ6;coWk-FV4F7tLZitLcDF?4J
z^`i at t-g%M$(c3EZr<*JytFFW6^|nrdYiT(j%bXZQcm)@r at mnJKztr1a#)w!=y_NQ2
zVFHnXoCKD-slf}h7;YWp1m_L)BMV`N5Ib2i{$;63Ks}!<L88fWHJwk^hW97?uF3?w
zEt+LQcz|6gc~xjo=3I)BQhDJqc_ at TW*IamB=IHD>Haqeyr5#G#CCbPC0bTYF at N<O4
zM)WTD=|8$Fg`k#$JMAj{qg1j>3L<QYaYyD5>nQm)_mf~?STT`fzzGfJUj+8=eR%~D
zz&<#CPnj^UnG0|!mi$wz44Rf)gL6mur4l$H-x8aGO6hhne%|HPCV|<vfW6K|fBnA(
z`Ct6*!56=K{rOjMPh5j&rzNfG?6hCP-<lf7zcSt{L%1ja|Lqykypdo*zP>#=xm9^r
z?8Dl(U2?Lt#z>6xITr#=+h at YCVeiPDbW6b_5`MCF+~;s%avs6H!RCBUmQwgFT=@T!
z4!-N<Mw%=4(_FcG(jq+w4AfU?Z(be?bti##F=7#64fNKBl-aXDyYu<elvWy2#E81s
zaLut6M`T|c5Z<zVuAS6A%e|$oJQP-3m)>;SNk7435-#gcnDJl8m)!Cuy`P7^za<7D
zi|pAaSMTWi`su!;5uKpe|6I<I995Z7!T*b_i-9iu>(`-wn$-aa#04QoDD4{mti9gd
z{PYJFb0z2BiR&8AcMMeWGUokLv`U&Zvp=N at _x5yF)UGp_C+dCLy|a`8<p0foeD){*
z>hbUW`o^a}xgyC&0|#1zA5pG^Hb+u8($-8yQyRG4i_H)J2Wemx`JYBoSvpZ?krc!{
z%1OzN0<N8?Z^KPy>UZ51O-fxNf;$Z7T;QaDo<F&Abx*z)gSqn!7I5N$f_lR~|GW5;
zxj%6;iwmm;xhuP<kU3ud*S3)s-?es;{jw|l$%kX1PAn9pLyaDRdR3{H=+4QdRBx!q
zXsHnyUSiyF#(7A0nPtUHO&wWG_e=7Nl$xp<9;K$<0NW*nMtfD#X-BdCC4wm{9R?LF
zSFq>hyS+gLcy_LbSxW%=QMIXYl3i86k^B|{EQcBC9sS+x=g6FZf4Jff5ZaX%C0{N@
zVK8qnhagbwg%JX)CfC#8sM@@gj{wGO^>z~;y_bxLlm@)BFTBIN=b{>7>{7G5v*kR)
zp6Lbl|KfjtAM*e7U%&H5|LoB>zr3Ymr{-NRzS=f80`h#QA)9&tzx0*h|J{B0 at ZG>u
ziECN at 0sj;e&g$VXO6z%{LyH<u%?+;%1iBy;pcFijS>V^RNP}+p_kdudZg0{C)?fqe
z{;^LshCPC55h_|BmdpZm=030(Q7*&eHLSg7y!@|0hsDLL{T450*tgJ_abEW=jUOY}
zV+#f9Ovf4R1M2(nd>ifF+-Pq(+%g%GjiOA-f#JNvwuDj@&`q_~7p1+v!7;bG0rqYw
zY}bNaCXIa0qQbd+uHfIxmOmwD6mA6nE-%kI3>5=Orw%5u^fOMVkf7x-=@5?6A*v`~
zWCW4VVS&2E>Yz^kw?`aXD7rwMS2E?GQR;#WWR2{!lTwYY<EXwy-Q$QbZv|n}178fn
z{DbfBe*U{x{^7rQ`e*;`yMOxM=nMBmduRPQwM^GYC)>FEaR1An-uUdt2cP`t3OnlI
z^W833R;@;-=#z<7w3V2 at WovnTH>L)*gg=Kj!apPUZwh!=BpWBl1lm0plHc*f>DM|E
z5(lB`+^fTLH+DWV!^1Ob6NsD-NU9INdp^IRC+@$SZyxkc(4Ej8E||~f=ZVKR)4?11
zW0#+>V$k%N^Z))GCkqPrqUEm$;LGra8RlYJ-F<R~dO$Tx@=37ge%3#(p&is)&w_f3
z_qeOm-LA5 at w2A1h5pFWUPQ$thhDndQ?e0>{9v^}fXDflcT$n8Oxo>VS<HwWob*{mc
zd#1kK#fybj`B*B0VkBtTXf623Ms=P!c=7qQryt9R2JF-#b(T2%TN-n0EfBx>MHB%8
zzC8k!lJL(Qq6kDIwfNKG!zLQa)nz7V-D7B4`@LV>(YN;NU)<6j>bpO?VP)CS{0GkK
zc<1}Sx+|oU_x${p{+wU^US$4<-`^wi^`@`{rfFDr+e0EL*(`s{a1wsFz)wE7^x*kL
zF at MEA)xa6rQ%fHEXOjH$BoDD3uE*+0VS!uZDfbZzdR^6{G3O4n at aGG7C_QGJxXErc
z&;pN}UyG`hjk(0tiO|Gfmk<T at B^@ws`PX^g%Ug~`hlvqO at Grlp=gYr-oB82Sn15Oe
z_MrtPqrJs=OLcRg>N5lCWwE=BZN}tS{Y)C|?y&b$ua=Ok-6SLT;M4$ob&b|Ir9*9Q
zDR@`3A!d9dzq&?eGtFA&3mt%ew=AF50)5Ok?rphUzTI^~zMmlY>4}SZR`<x!FNlN$
z75En_Prs(m4n~1kHA`VpRBChzC7J at v4B%Ha+?4{uBI<rS*=Cm_5Q<D*1R~G{Sv$jm
zPi=vBTSCGZKf7&H>@j|RTOa10<A^!FeEOrSU;gyw2jA?8dCEcRg2ys=l2DNjlaDW2
zfNStebw0RvMmI(KeY|hM_tUHC$ftpAGOKIU3LxYQS+IWw at +bULh(=ftTXcjw2o1)M
zCxrzmiS5?q)%Ju&7!LCJQ|_=QqQaM$iioa}r`C2(FuzLLpYd#h3;s8%VSw{HZ=Lu~
z3$7CW2}O2p=k$j8ouSyIAV!qcnekE6HOv=tX!2?z9RA;?Kp6}KMcXjZl2Mm+$JWpe
zZ^3+mqQi|cG2B?Y58Qnw)8-&a1-H(r!Lh~)`Q0Y{`~__!&soN5h2mr5WW~<RnhP%U
z?d`i-5+J&O=x~!u)Fk(t6@(+60?}j(1|rKl<0+Tl?Sg&2=iaNp)hw$F<7x$vyigf&
z+)p)<RVF{>MQ0V&paSTEsDo!ALMs9k(8B@#d!>LPh(?glY1 at k?LK#KHf at p+lPJ6XA
z!i&$Y={1KD^8oeFe{$V6k$iBKWt?$cP^88&sIbWrvrjfyJH&qXZS%cY(0OiO{`A_{
zzq+b>=lfq?v&d`B*CMYquWD<M)~_Y at 6NrF+W`AO9t=T)2UD0gkg+LuM^56ve68dx0
z$=owS2cn+y+v3HsLE_Q0rgqO;DK9|_$<Bj!KQeDFV8_0i-v-Zg_w+JcnCLL_-$=Qa
z(ZPQ;9ULbe(Fj?0H2P}Sj?<T}zZr476Q13)71SqFrxj%bo{V+7`lj7~v3c+L=KbfJ
z(Cz^xi{O?v`{&a><=QDVcP0(^F1<g!p^_q<e}G?bKC6w8Um64j5_Ze_OLZ71<HyY`
z!#=jX-&=E&hzmEFd&^A@?01>>ajt!Mi at Oo}tClix2`ezd at -b%oCnIz!jcE#`I&3Ns
ziy_1vPNht2p&oQWrRanRMqJ(7XZXd8qWH+_wyJc?oL<Oa9ZjR#RXNfTjtW?U`P#+{
z>^rtYkHA0VGj+)MM!pJVun+ieD(u~q<oT<=di?W0e^_~L*Jb<YeaD at -`RHslw at Gmg
zd(Rjwh?sJwN?9jq7U5s#IR&)yU_rV%r;e|PkXVHL{PSDVB_)jICUco%9i;_ILZ&8&
zKspgb?Vz=qZah0SQ2QmUdWbU at iVg$${)8;^f7PS|k_$RihO>WP0eBMcMZ<pQ%!sy{
z);*LpE*yP1Zc8~wb$=q^dpvkgr~S<a{Jm$J@@YK|Ycy4Enbtse9xL0Ad85u$PRr;u
zv2|{9E7D#`b<C<WYMj$1QHGT{<U5wkXV{DZ)r7`!xT|imv3uDD1o6%~9NMsN<hSK!
z?O609NfE1L(OAU-gUh67_D at P<rs^>H19n0g1(H=SKeK=q;10(Mnut)pnrlE%hYLo$
zgA~xoz_Ey&bz~8tnG`$)VWQQD6CJV`jrNW#WnSI;lZpD|Vp>l;)%PHY&8+>VfRDX;
z=QL+oKl8 at F$SoC+#Qw)g_}Sf0!UOzQTh6ecRX_(NW^E4b)#1uMM=?!lf%G;{p?8V3
zu%I at r@aQWvBy@%aMlph9PTMQT(4nj&3y!da1s$)@%9Vfu<37&7hJO#yOK&E`Jl3Oh
zD5>6-(qKowzkR(T6zLa7?_~;twd})dgcNf;ydiWH^UE`hf5)ev?#iJh*o|b5KesPf
zk|d#>R3zI0zL5{=O6p*~5^2&|8sIl2Yo9-Naobi;S$^sy6GuV#u%L(l`AvbA|Fw+8
zKZ+I9m)b{m4mnejr&_h_R71IP-~78vCD}S7qK<L>##jmeq(d8XfmrZ=XJ-^hKFHqL
zp}<@tT#e(J0&xe*DG&?l#jN%SV7`ekA6Z0BiWFtkN|s|UX^odv{L*O8kp<;n3ij+A
zxpuW-aSVRQhk2hY)RWx)o2Rg#niQS><9~Vg5B|xcU;X8y-}^`R$bY6L at avo`@4~uX
z;~xb`^$aLoY`@}0b&LWjNO;GRY;C@#;UWC*O%w>5E?dMo#0V|WH at D8d@#f!;nN*&g
zuc!ruQVO-{RVxL^rxBR4UV4H=Gyucx%mow3?3exou1hY=+5vzkOX(GKc$+-Lh at +~Z
z&-joso?}Avco``^`09W?V<?wvjh`lO+9jpKVFt{%cz4_}Qb~GBd!h#XeB^a at dabPT
z0r+WYc=<Axf0_)qQ3QT`UgnT_Ns`ErG!d;;fD-t&pz=84Xb1M`J_PEkf at NGY=0#62
zzzT*J@>3Kr*8-#)-mC&{-j5?ND6r51!xow>q9#IdA^FBL9XJRxBcc?V7q?Egp&pG;
z!^`|NfcKt=dKON++9%nwqX)7;eh5`To&-5HaMR4>!6vox)z7Z|>A$`ANB{Kk at Bij;
z8hCz_5+2*YDZ_z(NzNPr4QwwTuydC94+SEtYm|h~-D^8Pc5Iun6V5|{v>ML1BynOd
z>9X?(Bg$p&zEZEh`S(kwBr67ed=Z?uA-e}BOf01t?J0m?=+ONfQsMg at XO>);RYQ0Y
zOX-kmIF1e+<iQ96e5oCL)aI7Fg#{fBySn76_spYPG~)$QblqsuebeeQiB$^jV$!66
zz$t)-_U+5|g;6Du?x31F&Y16sz5%Hi0>xtizi6!2UPh~c<QbMz;1-F6&am$V0<bsf
z_mg1LnvT?<EJ-))9m%(Kvwyby+y0p;(A`kW3oa`tOQ=nORs^F{!~*;s8k&yPN-joG
z0N<n63u at UnmG3=ZIPFFs>rRu&&<?F5q9&p#z+NQZau_4Wd;Fs}%Qb at hj&okUefra%
zT>9((`S~CI%_El2FaP4<SHIlTIKrNW-S;4EJfFz+ziLHK^0UUUN%-8~$R0hlnImKl
zL0vtEFYL%>fSI^^0PIgjT)c at 3#C~I*LeWu8s}0Kvj(g=+Pz`Na;X=3Zw1<&YYA<CL
z$qA{H5B6j_E!2^fm<8)HaTDJr?a=`>Xavv&$Tdp|1sdM|G^vJ>2{3cP8-Ugu7GfVG
zxUuYqt`Qg at _u;;DylugS+43na#K$Dz*)xs+Z*8$9{1Wg4yA&F3>>BL#nj1K*z++(9
zL*K})q!;2vOa5X<tRNI4D|pAE4G9fRuxILcE){%8M1tys{4(#83)iu!{-}IK!G5-R
zmS+Df{D<*V6cGQfa<HKSuHUx%LmUBGK+DijV6uf!;QHMyH^DA!JbKU3u?Is)37Cy$
zJkwW>JoJFPBB+J-V4lk$i4Nuu?w(`bkooOLz(3!C+shD=R#8cAr$710CCg-Np5OnC
z@%R^i@$l!remKByd(baP{_MI!{xgA|e0b^B<FlIQ1HXjlWO{35pOGz1Bm8qeUvFcQ
zC)>lV#)atCQU{0-l~Mmv@?Ysh at V^)dF?mVaw4+Tgbjv~CMFE8c_cyK0xltMd2moq5
zfdcyQc;ey-cb}az2tBYY(KiBmpkAmxq#B$okVo1toaiMT5-g1XPld~p4mrP|!<?Zp
zby+Dc%q%cr&lnf>O2TU^TK%8x2m|(z2FW%oTSLB=1Nn>O{Kh=nCPd);qRcsdu08d#
z8BNB7`C9pkc`u$oXT_>?tj84CPk}qKJ^sQ%r<Cy%`^Q+ozUsf`DzMInY2&|y{~Q7e
z3l3|6go7AD6AR)FxBP#p7O+^b!hah at k@M-=msXaJg#r6Rshv@%8{{t=;d)8h!@T5b
zEqQUl(IT%MqdxiZ-WNZ;`pdt3_^aQ<+W+NWKGL!I7r%b^)i3sR^ROjN?Ty=(k6m$N
z|ER>2ahhh%`)BoY*72;f{RahhH8w8~w-SC@{=3yY+3tktD9*DYLRmz^@>znv)2b_l
zo4M61Zs?Gajkhv3HqT^Ie^r>T$4K21s*PyvnjMs91n%F}%<9=WhTOg98{7l~j2(H<
zOrQzynapENHB6Dxgr`b1jD-WNVb2^#huK(a?J&y3df^~|uPu;Z)c|7z*A|lBdKC8G
z^2}k(4^dB?>PwS#mP+HS6s#egW`WPt0edW1BA=;Q(td?`FZ;H;;e!Z=%7I7lGyd;H
zfz{>+3kr;gP&H0$7L1_i6cM5kViw9bevme;N at hIS8`)0%3_)kq^HmWU at 4&pIx=Cyy
z|H81BGAeIVvRq6ZlK&lv4fIGbFIhr5P%i|3{G;8U{rSUR{>7tT`~_?05!jRYAAdgu
z`@qjf3;1L96Z`w}_kiDc`qAEu|1`SXli{4*Os3%syC^p~;msQ6{Rk4zF?P<6$bYx2
zpS**07OW`H+t|rFjo873`9W~Lnh43nh*y%$rroYIBRxoCPxps9=o`g=6hOlTze^@L
zF32p!0_bHRbu<Yo2=gYz%!OC0hGFnjn3R$K67BF>C-3<v_7BVhJg3!!kwa)7weY_c
z>}NT at W&P`t^)KrJi5gwENo!yqn=|XkwGiLZzS5Xs-a}#S4A at UHpXD=`hLQaJMB4vt
z%(n^Tp8J#er~<A+__lu*R*>A7?Brgfs^c|>zqKtQq>9AoxF}t~A{uc~8^}IS)@2$G
zzPFpIf!aF!^379_+|nK$$U1X>61O4J1MgV=z`s at J&+}wi_5RASW!^AyKKt>F&wp~$
zV(u5eQ^%j&{M~<e at ADtu_}M>x at Z&$RE^Ko;yVP9^>?8KG<9Qt3;q%&QD?R)T$XCuU
zmz({gB`o}>#^K`0x!|j7Uew|#co{*qasdc at F-(D-GK$82*0p4FR`5SGNt`DRHSV;v
zV?BLrwm8Io5=&BXpz(g)@DQO#vaN!D8i6 at l3v)_JnUq@;fzr0xMk?KIxy+$Mbz{pu
z at 3qN0A|SgkSM)*^;Fw?p9f1N6Yb?32rWz(EI+4;P7tBM4<Fo_Jlld+D-+1%2Zw2)V
zbrSO2gl;m)gYb)Tv;<aZ4`Bc317=|`?|!=fEq_dU%&<3!w4Y=?m#RVTNEaA03(`bx
z735#dfgc5G&8uvoV<`}esCG%nE;&6y0qep&CKe<#bnE^ur&x8lW!5`S&)<9Z!owFf
zUD~wKl~t!_pIq&IuaZqv2^EpXpQhy8(VH107H9ptjuTc1<=RO%wR5qW`i!p+jgP**
z4(HjER}Y7;!9K_j>?h=Rw5JT7fWPrC^5X*^zPIhG at 4c(cliO=Eixm0J_)oRVj=I0p
zbQoOGm_QQ+=-;`ee`|!S_Eur9u)mn6cUEX93kuBwq6V-F>I46S1!D)s1m7^CtsrmC
z%WD_UZJg21zn;#vvTJ+B5sbiZLb0Mi`v{I5G(d#1kv4F_O}PJJ!)j57Zn|#K90h2H
zH4hp!ECe(=@WR^^j2tCGbHQKRmG<jIb$Y-*;ct|ApH05}@HXRHK`@psTsonjq;d}z
zpSWnnNL$WZEbzF6Qh8D^Z;<xwVJ%^g2#4&PLVm|KVV>BJI#|HI4gTeEjRgb_e{I-8
zrI#c5I~KZd2ZlPBwu_2i&_uXB_Vt^HP~I^I`QGk>7u%38>n!bXKe^Ha1qSj5_z&b1
z!J*93am;zP$^k|c1#}<EqSZ7)2g_KvVDf%-u<Vz0CK3J)a?Z$~!SD8F<?G2gVW0c<
z{^R^UA^cP4PWbEakbP{c;5W$M8OWElyBKFY7b?Jjb_<KVFg_{2m^vV=xP*~fc4XU=
z0-CL>!-7PI!h(|LwQr029C#lhLNo$`NJ*+=YlO_RK(iu(|Dv$8H`iwy7XYb3jv<2K
zq$5jGWULh*e*qVw8oqk~^9FcR3Ia+5etEme7Mt`!+yU at z^T|mzRhc?(`%yzFEFwZp
z?T+x!0&(ZBVnpns8S{dl%El}5A0clL?^zBj^G3K^^3TKfg~B?YB=9~4_UKU6UMo9C
zBG7q_+>^2n at SHW^H=p_lxoK-7p6?ik6 at l9;I#EKV-QfxUixq()MGB_cBR+bJUbwv)
zNg0|9BpExMZ-4?OUYZCz8Z#;2zqG at Zv>SSVHyz<VmCS6ihYq*^uJ3$!$s8RPgN_I_
zfZVYW-YZ<rH1b(HE%wDcWj^>olHaHKd>7EA&4j<b%NzfW6Zj#&irmLeg{gL|EnQAy
zK}&mpw_+s)#h<XC^!2C|P)2GUAw;OH+ljS>E(p|Hq`ZU(v5r_x-i8RLH(oa(rW{)%
zkXpL&3)>#t+Prz6F4z%jYc6!(+R_N|u$l`TA9TP4p#WTX{`sExIWCBNHWxClG$i2n
zqXyIy4oakGK2xe8B+463z80Ksy$$n?_Ky6J^TGV(6ELr>dg-ZH@?1Hh-jacljEGt+
zj;Jr+ijc2Np$jW%U&}6FZ-D(0`GI<cdcYp|n+3~b%$^=EVZl-h(6)X;$^5p92L5A<
z&J?Jn0S{$7wIiy*`KlC{2vS?Vwwj2hn5ZFw+ATf9f{&AgL;gSg$kttU{M>U!ezh~r
zm*z+x8S3*umKUWm#4y2_njqB;2zRVMv9jXlK6-y!S05*vL=Rr5h}<zJ`5%9<yAu98
zrzYbk;4l0K{GEBytMD8F at igJ+WL^dErz7yE@<uNi+t@)VKnpHZ+R1R-I+WDGf6t4-
z>7Mr(L>R`;x<+WF(D5SgJhNd33VoHuG$ta%iOzq~VloPZpm(mGK!-w|-sZzoK!l9a
z3(2>vI8t*#32MbuQ>p{l<uYjPHC%=P^(l8~p&Akwf`7ulMldfB+H#(4lVmnYK96eK
zyF_o&GXd;<J151hn}vK$j)6U^Mqq!5eBn*7Cq}qej!VEFJAV}gCKaIWBadT_1?7BT
ze{>W<l!~_ouP{;A;pO3>t~PdTS~UOmar2@)<XUBzJd0uqUd$spqBhAb-C<W;m<R9b
z+f$@y#eoHYo%ehaCl|sEZ=;lx=dizNvtu!zCJ|L)1H`s`(%5s`F48f6CgI<bztgVT
z|5b<8sU|UgjH-4_{vpEva(bvXWiX8N9@`j6zRJd4$^YpH2FIC2l=ZL8v+z$xlRUue
zu7(J1drjIkIQCfOcp*a87s|7y5e!QhA;s2Pe$MvglXjpp_{)gEcjhv*%Uq$PM3Y1t
zM2~q)?Jp!m{KXZ=)(esC6Bo*TehnkmxR5uTe{*a1ZJ6&gHpgBOi;<I^6wZLXM4*=T
zk3OhG(2A1zmZPvoiWoTy*f;n|j1n3H_F+MpJ?qEP2x}+H|2^Iiq5_yhp27$L4Mr65
z*R at 7{!bFPLv85M^BXbsg8LsvC`XRph*bi5r&xGQL-CJXgGTEl~))>;BX^NQ_J!zaf
zwk~LcssV4AX*qDgU`i$6pO{Z9{{en7e**t3{OR-rf2zY9FLKe(N9b>C=HdYnn7rd9
z3#9R|C1?bskbf8lLA<C+_7WFLdxYT;ycQxP_+LbbdDBFgZ{3mt at fSLjRE|UA9}!x7
zS-)!{=uPdv(8Rsn*+1JB2w3)xNbM#FKAQ-tV*y53g%NP;l?B!~7Cigx^0Uu|jkMAW
zRn(6fll%M{IS=z~)nl3LeauQ$^X*C0fA`?&CpNI_wErYfv34TWMRLldky{ejCoOH;
zu}`kUzB;SN&MEmnj+3{mv&x(%cWzUIR`>G|L5@%$u%CNm<?bcg5X&cco{;ZBNJ-+q
zPtRidQ at tmTtm%;V2l?KgQR_H8 at kBhGsO*mWO&UM%S&hT7!BXXe8u7}T8i$UOmX!uO
zzEeA-V??yW$KgdAR3=N<_uS89^J`{n$J;_aTRm=X at 8or?@VBK`gCFt_WnNVlx|4*M
zCj}lAcu&qiYXL{*v6sSzSO75b5zfa!Fz5ol00atb!m#WJw at Z)*5ppLh9FhB3#y<?#
zy<NA9oDcr%7I|kXRbl>$g1|TAvihiY6C`6eZ_mfQE1Nd|x_WEV>O2Ff(sjT-YYJ>6
z$JPrb79uN+_EgdZ%UQVhY(raM(%$c#xq$U-p$^@&Nw0{Tmm%T#;d@)Q%Y6J%r3?1D
zNvaD|I)^xGu#b8FGT2v^R15zl@>>@y*LIh45 at rqmUM?swxxka;_tydb74i=?j+4YP
z;5xklM?A8bDS0{J*=jz8o(Hj5-Ja)cwqr&m$@s6e(XwuioJUiXvS at bH5kWGpTpwfq
zx|iqCVGaN8iHijItaJ6y+U}AFrxs)*?9-OdLilGb9{ywSSI*&_aBecCAdcSn?IFSj
zNXSTBvY>IoF2Vv_h=X8n$7DgDkt%6H91(g!B<k<l_C$neVW<Xvkap}ConIZ~&-Wqf
zK$uCwz#BmBul~guZ_djD8#|uas0ga1joi<xTg;@53vXS%elD>`@_%emy(a>{<U-Q{
zq<euzqch>7#8kh$Dzr-*HWw^S8u4UbY`*jH&XbQ~vBPtq-bJ-lG1{1S^rzo0?Q8WU
zhEU9&B=Ah*P^f>2`Q_ZsO3 at U@tAH8&aU#m{B)$7&#Jf#qXROYX8QbB}M1gr;Ule)X
zJT35#4vhtMioODX6$Tu^zzzu}Di|}MuB89HDX^TcNKub(dP(BN`aL?*w$uRlwc!do
z$)}gPY+Y^70y|kOCI0~bHk6)HZ~^>otO@)F{8JQYCc=sZn`!l65w?+!4qy-PV^m_l
zlT-k`;FutiO at VjLvd@|2Yz7OvC3`LSN}rQuaSjp4aL8|sK;T4^4k8o_>JH4(ARGH;
zZ{G~>3=6KDH*u4}zS51(po2N$hZ+~&&W*Z!M$bu?A at 2wi*)YR2Du3A}d1=rQ7NZ at l
z<6E_Kk(TDM<K0g$@gQD&aXHU%0sGkYlT_#OybAVZ at cVZm0*}l)+5Z!k#>5R at EpkmO
zyi3f_a}Uc$y%PKhmbxbe;05vzw&xF7n at sqx;Od0`kR=qGFE!UstwZ>s(J29kj~(x7
z_rGpb{>2Xu5qgxrQ#WA(Je^X-DWObhikfteWgawxzmacltbu>Lyu8uiC-cR2pnbL4
zRUJNO;ScJw at za*i0{>lbrwwNI^X>Q#Q^$aLET94!_A!!Y79 at U>@)q$!_-8M9KXoAC
z8RQJ`BY~6r_9UxXoiQRYm3g)zLh>T?8={gT+uQhY%$SrTA7M#^yyqah{W`j1{?vJQ
zh(N7a@^I7q at 5a_!Y{Cndq}!!GYBEx4)8S?%diGTzf(vtbyap^V at yN!rEAY>lZ&B}M
zEn~UVb=w~I;XMCdCBTl8z at HJt{7yrX^|454TLY at 1q%`0<Ect`;8Ya-?YJql^`A#~s
z_Br#*reS}e59yEUmqj8v?sfm3F(Dkbo$L_q9M?5Tk<MaREnRy#lfpgeAVAB3?y%HX
zGAWnW1O6Hs(i-Mfz@=d|Ba=)Mbv$ManZLbE@)_AakYC^z2#WBxrq881d0HEv^fo^%
z|E1<GI$TW at XvvQP%>tHxl_<`x;wm8x3q%fO=`e{cLPZ^Hoo0tn1h8koRa at qSEvb9+
zzNfayRcRtXGA-bU1(EXwev={jHyKL;O7Ry47tX&CU0I%jBfw*UGZPWc<`b at NY4L{$
zzDO$Ixve*^-rfZDT+h3?o+d(F*jRMF^JqKeT@%8W7EWMa6_G)BX at METtiC1e$;=XZ
zE6n$Up5Om1CqCBaG%}Ap7O3)ub_Du8GtL*2z{x(&1Nn#9l#_`~tpLA7c+a8QN@(TA
zOudPwu3U3_u5Os%=`#hh{DBLqHH#hfG7BOR2ty;}ODFu-WaUI)Ze8$T0h|Q?22FI_
z=-lSf(ss&oOK;m5|CV~;AK)AR?#v4RQ^Dyg at ZT&T{|5^s6;z?FAGla!4HvM$pJ;(%
zL0S_SU^a;GZiFzYixg#nD7e^?{}B8C>Q)nhA}}9<J$6o-HAVQh3A7+WbD?qW=sn)q
zN+B8n3v2&(B%%}|J!;Qu29oagwmic at EO0TMzAO9A?vSk%R<JM8T4KCfS}84Gh;DBy
z*atkGi%@Vq-1R5B{FiSz_n2T~6%kqr|9OGzFg0j_C2XL*2f1w#b3%R=8jQv~`b5;1
zFTccmKzm9i%yCdpc|w}xykdCt1@&mj<oFdA&|$Ek!eWF;6JZF7G8e;$(w==`(KwSP
zYIQ&r9*2LVm?*HDuFgFM{wvR?@!#^FqvvD!zbUd?R^FBWI~zZ<x4SmM0w6b%T2m}=
zjCHg~PA(RNEX at LRz=A3WRV6gi#bY2n$(HU`wLnq3)b0Hf<t!&^#79WXXMb2Y1?&)E
z<qH%MW;Y?Kp=_t7iSum&Awn<D;X<Fm6#G5Jo-CCiVr<)A;7809Xrz>B-~Es3k1H1=
z2hP`UJHbBPr96=)NI$+=rqx4S|Hrk at Ir<VRR><$TXoDYUD}#b^$s1-ylnv%mmw<2N
zIOdYd-JZ>`TvespHQ?J~F^{Z1g88aSkUv~q=|*~Fk|cL8T^Q{wszb<f?(T_%7yk7X
zNn=uM@)8k(|0Gh*L~w`6_Ka|0(hIIIgN98oxhPPI!#r{(x#EY%Pzs>{f{^*}FI?cc
zpa30eO!#Nszm;saDdEjmG~hi5i(ejemH?(@uf{nT&u2_#=NIM=vmjxjH5No8Y}iyf
z7Lm{4S<CbjkXP at P8&&biwu{<jmgi%sS0txo`yc|VJ^{}%^@|9b{tCvk{nK_)bHN;m
zngy*C%4N>KbixL`!02+4(}4x?mt$UTTJw at LqApcAw)+oYN5NUJ&!gdac?z*}^3+P;
z_pw|&&-&>9zU)ltnmpNwI739Q1a)Nr#fc6XC*;?9 at r?7e$$UvJudcZawoW&#9$B+l
zLO36i^XWkc;pc at iI;<_-<?)9XwDA`ulf2q_>E=lTJ3JCksLG~Znry4S!5rL{6WtU5
z_=yE87o!Buf(ylq!fN~ux4M6$d%HH87xS?vzOiWN*B!z?vnM8yZR~2P*E(;zx`54G
z2jI5b1vUw7t}fgL(t-UbGpu~eIj<}R4-=>(r49aNHgfPkwSbUyS;=YQt|zTVVS$xd
zf>%B{3Us{4t)mWlgG)7cwWx7Uu&6ac6JcTMWOcyH9$9TH2VoGQ79aBlq15xWSW|J-
z&fjY;Sju59g&>JdC0Ec(X3`o~2ka}D({jx14H^$4-x&{a?SGGbS(ulh<ZiFE(p?2b
zeYj5pduR#lC%XlteY+=kbTsT8BT>tcVDtt&h4~yKeq*1nEcpU_8#4uXZB@?5uvLO#
zeZ(5K>?ScWX-+IyfilOdw~_$49E?VzrCD4&l^u`OQ6`l_l&_*mCDKc<lgt5U-N058
z`9%vydnSTkk(`7Q*R$<p(w at kC^h>$4MmRD}%;(YaKSk)Zu?w50doH!)PostlGT+i<
zyFb$zS<oId5f`pa-F^@R3uYmY9cBM#+bk4t{xAzh>28yvS>Qco5oJLQzbe5y>OihS
z6QLbacdzUsY3CO$#U9)~FaIIt{elQ0V+?yCf)eiwB3N0=io<GUtu;a`h30}YCY{mk
zIc{APTHmr_js@^f9W-cX*n1+x7gNXcDuI6(`Naap<grknPd4Tov=PgzVBjG)5Q#iE
z-{nh}@9{530iQFc#Yse*g82daG<1#QIbc7T9G;__A8Eh9e2R|sy%(>0CY>W09ajAs
z$@@1m0cJ(e=CM~*uwFZ<NO=SqiUo1*5=jgG`_0$yZFy=WPc6V@^`XM5{WJaWjK+U!
zhcJDLHN{z&xX`2s1!^>Nqp)@uIWfbgQDy9f|3Q`o_}xq=D>9$3B!Qop=XrbHorZr<
z_w%9Amu3NXR~4kLN}cf8UVOxb$HB51;ntdan~#ERkx$1ag?Wu`=@xewBO3pGEEXj3
z(zBooqF;)P^eGm+_(B#(+Gy|#$Qd`&Ev=o=lI>%%wfj~JYE}@9U<oW%eJuH53;C<<
zEZg{T3=ys`h_FaU at d;cBMCjID&4mkya9}AdmPUm6etH7L&Z*U|I=L`)3ieLAGc(BN
z$%OV^7ap?Oo0pJY%?khn_7RLLMjQ|OGT>*}hmyluSizoXg8xd;Quw2A==C<{BkId&
z7Yupu;ylb({%Wn2S5{T2;N9wRA+LLP|3<bzP5;Ix_M|wgz<+>WY+=H`sB)f{Rh4W@
z9oc0oF-m-7)>RrzFE?06?nwmKi2S?N74|HpkeiV8 at l|D_pEgq<P^{6m+3L8X5wOzr
zK)omC^XQX4q*Xw&o!jg=6(J1#K641ew&+^BZJpKF#Hfo&7xd8@>v9 at 9B%J=v9;0RV
zYMPv26NLMy`M89Ab7Ve)1=X1$DMrK*?wB~4Vjp>Hi17IpMiF~5BE_g|Pj|Ibeb_~t
z7vBa{1M))zs-QzXn-w at +#6`V_AexELbm+XSWMmaVCL*L7-F+}Tg62CB6m*3S>&Pdy
zVqKJL+(+O)3VVvfJ6BL|u|IK##16%j#_(zvZ}X+cNc#c%pglseVBeyC2>eOZlk*15
z7wo54O~GC>uC{8%y*)U2J2of4dz8u<WV&XEMHoF-yha5mY+NCK0{?6UVF&BT at Uhgy
z%?BEiXK&V$_5<^62+jEKm#q%y-w3gE+Q|y9yD^Or!S4mp6$|Rut-xRDH;wi+P0?hT
z|8b%KLny)@Tv_{$#+olP|1OheL0?sOMDe^dzJO0e=oKYIXi`vxKGV%_w7dT^>?hT*
zS~3VPDw at PKfd3`}qiCpus%x%B8GF8N+*=`|@)6{xUAt{fL?upKV`a{3L|`vb2k>vw
z8bPS1h!CZa5niMdc#kGUTf%PsLP4)1zvuv;YiJ)Y#g;`I0_NjJ|1VnQL0A4;ltRBV
zMefH~^(>qiIVIse<)g6oX%Y1*=mV07eO4>AK8yO|H6v5?aZH-(Vicglys+C0csGhk
zIYwok_>+9sG=aH$ekJ)28~=@*b^#QwR;R>ECDOyw{=JU#{cJ`!uJB*!E)i(O0?kI;
z|LWK?h|q?R-##O`3BDy8f9hVM$f79#*d~qqC2RVB+vXp~!XEImMqYvcnF2)O_+3$0
zsc~)=gb0sgvGh$~x3FQ<rwH{_>?jl{*C6eS*K|SsDN!RHL|9Ng;{2D5KdSJv%ABJP
zQt%Ryb#S8POsa-UYI%Yj1PJFNAc8bevC|=`>PeNF2oc&B_8u%K$v+XH?4p?nCeu?p
z2E+ACZOd|Q#y at Fb?p6;`e+2ersKhw;T)YSJqgGb17hgRB`@(!fz5mhCSW5dk9}A~|
zkr<<SkUv>C4SVJ~@71lNK<frFDK(-wMZ61nWpSh$vy765^Xcg23@!ja%g2C!!p$vR
zN=1MvT{*hA_^wFowmNEpfO%P#jNdCU28(AF<mWF_<3`Sp&~6Xf4fruSw<|7lIR!p&
zhBOL*v15xY$KAaPgaBiYU0uFU-h2q~y{bDOD}mD|_^%oNz9REAj?)5f{C#7>zl+Zr
zZc_m4b7N~@0afToFCay)v<jLL?{i!T7uNiO!hcxcJryPz+qZdJ^*Bm92oZ^QKe5%g
zhHR<-%GZ@$<Xf1XzEm#sg-h19HW2~Z1vaf9G!gpev__C^Nb+Mr+eMS`A6)2{$67n2
zwDV90{6Y%R5d~w<^d+KxBtnE5Sq4hn<J-VK6od9i^+<d9S4-GKln*pKV$wdIU=?D-
zck5_;HJwQJ(XF%bp;CjtyLauh&UK1+E?(Bug4;EE87<a`XCf%Te6!7=AivyR50rD1
z+ZfodFc0?epp9A)D<PZ~`mSvf$QA7`7SuK8ruki{+V!&&5n|0=J|LzHUfAZ|LFK$j
z0kUve-P^JRT(*#ZpM`nfhnWH<?n4J{JSH|0*&YjL#{6<pmJee3*v5Y-T)_tm2QQ;Q
z(-sj>pfWs at KL(9%QB#1dFx++oaS~QZ9#H}Tf3`i30~bL3*ioy=Nv_}>BSOMTRnPeK
z&u>c9Ov{%lgx5Et)j at xCf3K%3@^J47-l4QCxXr{iD=*G5%fU0Lx8gNN5nR*QI at VEY
zohC!b<Ry4sDfDomLhEbqY*Fu-x}^Xg*iS~z%&C`2`-c4xn1 at 9@{I_ at yBWf2gQmf)Q
z>Bar=kHka at lcVWwo?RO`E8C{zyb|VG`nSPlM<8Qz!<Cbf`Du3aM$G>51w6GYH`Ay`
zEi;RB3HurFGw at tbkLaMC6h^t!7Q!`Y)lgh$9g!bW*ASVI;TdHV1@?mfvo{`DvXnL{
z1&-*5E}#*}5Tk_v767)-$AaZ0x$UmONTetRQp&YNY}(XcI|}3U-srh$b!{FQ{3F7v
zDF8oncdua!J=#_nHCQl(%e*W`EQxR#5k!7EYIKwcV9!C8Q;I3=8W41hBEOe9 at GPhU
zJ~A%o4|)CG=FB^E5Ozic>cHa at GO9Xg)$2)+4jt%)1rgfY1)gYxa+8|{M^QbWIV$Z7
z^JOx{L>VEYS=#qskHLI}E|-SAo4;n^H0(*U5~uah1G6{|0QSN6wk2jaEUVY_5Lx`$
zc(T=%x6PZ*d3J4$|5 at gPQ>_OT_{-o?_~3tWhxkg3TZ)Dbc6P^V at 0)LbX9j#vnubI!
z1R9a~wS`K{=e46B=nU9<PaoZ!Lo65+2n!%zf1x{1wr)Q;f8$~LIW!9pp*V{yc9O~m
z&J=K463wdt_J#Q~mNQbWSVyAXSi}F at C%;1`BTJh-egzw~@$ZhUQ2=<_5X!fw#d;`^
z?1dV)V-anyoPtRaz$Y{sWvf(<P1&M+TUHI5zw;>8h~RFwvw$YWf)lFG%1vez>3y_c
zwT<bEqV~3250#G>eOHviLG+QYV}?nz0|vRE>>ossdfI+5IxKX0-?yR1XSAEN+;*$y
z`2_gF{D_ohC!K_h7Si6^ek<(V?SSF1wD;1<hJ8ULRW<=w+Vp7&csaWdJc~eH!rr5S
zeA~Dy+XQ>UybSxdCA~D at t$WUMe}$sf1q?-M0_ at 2R&!}$TDaha6*@{}ZaPG~wzT;WE
z`L at O&=Oq7h;AO_VD~u(!$O1h&cku~ARv14&WExQrMTh)MilB7CtO!ux*5mWH9-Y7U
zbo>6ZorAllZ$F7H at c24d<X;R}^~oMkk<kSY3YfGa2p2B0+>(lB4J&H_wywB<2qKml
zy|CqN(C*X9q#SJ$sd8gxL7Na01<1 at acr>aH*p|vKjopm&wyGr0<^miNDNTWy2p*R6
z?l$dU=Vjh5V!rkEF?LZq4!D4)9WP}P%hTo~YXpP^Q3qc{9cY^BtA_zrYsw+Ql=JM8
z#7-r at CFkMld0idcMs#3djvv at Q-34y`fPK0AS&(w3kM*Z1ticzMk<~^{`2w+Kza8vL
z?j7=Hhmo^8qTg6B<K+9lf18oR0(|h^mM~5se`TPykHc;W?8|$dCA?bK21%o9BElP|
z+S)0Z&mD$*55l;UqUJJnR<Iv3zmeatZ#(}e?169|`8kW1<|7V&I`Q`9SiP;x`;|E)
zzJ0KH^U;Q#CG7%cJEZJ__smhSH02~q78DI*6XtRBjx9xm*&S$G2<&5lXV0DD!d4nP
zKtAh&jExqM9ut46lUw4iEh#V?4^4sgB7vU~($#|CC&75u2o`XOUvYb9I!qK55RbKv
zG{O^mxsIY;Z(!9x_1xQSsS(OpN=fF36mcRdekJzu?6Yh*UL)#2FTT0{x1?E~EC&QH
zlImH70QNnPMYO-c5s)M8P7*uvf=uW^>XJ1so)6xR^G%p1%#Ro$wKNvHJ<*JBA?<5b
z7qFQ<vyklOhh$evLj20S5c0)OuYB<RZ9C2|`S|{Ko at U>Tl`N_y58$7reT#G;pD{mA
ztadq1BRHn7#rZdBikA6xi%zAMe;xU=z>h86h%J~MlJ<q(l^E||v3@*EgcbPPYnbTJ
zL?9VT)s8hywh*yj__qa~*68;C-L?PA!97(TVSxwN7LgxIM$w!7`L4O`+ctRIRTFe5
zb&ws4*b-om2+aimV={TH?y%2^#E4 at u$+{~S8vHp{D6A<UIY;J9mrW at iY4Eod1lU;+
ztYI!<nZN4rRtpD19ju73JN)SEq_9VryB=L_%OhSXg~>I at iZi#RnPTp at JpVi_pbj_}
z?I}}C${2--e50q_>V~B>h)}7X=eJL6ZJ%TdN&B&gP^-x!|KTX|-Ilt;ZRh09NRxY+
zkply$;c3PwDkBH%do=jH!INsJcxS^N2EP2+0oZFR!S+s~RK at LGb0fc{eIMJfC(LKT
z?x}%ypJ(LcAyy%bNy~i5*QyTk`-ZsZdh5lBINsD5$anoqY5y|J=Vu-nD=r*n!E6z+
zUi|iqB0 at fV%^czm9Gq(vVDDh~H*P-MY$Duy7gG+gpyiU!@qs8%F)P5%SA+unT?w2j
zmYnn4vI0vrILUVd^1}ZL{1I_81zPe<zCg-&ub-p>X2}o#ZHF*Fj5bJS`^R6c5018<
zvpQHApLsMruz=DR4vJ~C2pRE?JA&FqkzXVSiE8i at ctf#>zPkGS^UDO9GRA5$oN7ny
zAo^oFeA-7*sT!9Fe+~j7s40g0AZj7`3GKG<=iBl!*n8)1hyBQqua(V~{Cnp=`r*!J
zzq9}T_qLJOmHX{fYQ=SrM?TlJ{aI)ysT%Y1u|?vV%)j+uM?M3ChbZvKV&TuokA*)O
z`P&IwH6Y#9SyipUejVy%jk`aKk$^zIZN-96X=MwwQ!reEi3RmVVL^%Cp$OPQw;oXh
z+t=@(tG!k)*(}cnVOVgxEFx<MZ4vqHi9eLg3As9?Zv(qZb!eNvV?K^j+QNeKit^GY
zy!C>A**LHG=#c#H$Y;y{A%%(pUCBEO|2B0RX^=lCP|mO0-f_9Mf;v{y>+i!Tnha6@
z?g1G-4N&FZ0tVyX6)uU;u0a(byzRHZKeBYlRP`<jlseeZw}Fpv`?2tpj%_K!^!bf{
zSI9J?aU|d&$hiw|T2lt~S at F4zlQr1V;5a)cP2S?hIv$nwWWM`ZpOc3IPVput$^Z2)
zu7CaW8xP*g7Go{&U1YTwvZvljGJh%X%^TqXc7-(irMg#>_IXX9ZbrVBV*awq-Dk*O
zxcrmMUmzdmW7?IVo{>M$IQgpir9EOH#NV0k)zQh|!u&6jw>$d+OD!;Sp)a6sk?$%T
zj_ByE#~ZrPT)BM;1 at 63afoohlMcOZH$By$j5_705q7Ih&e4pc!JHl_%u6P6$8l}<d
z_h$X8SdeBWQ~-dPOcWR at ASKMTVCQ3(Po%9NnNBy-?>fG48~+^(3Kz0-P_4qWsGlgX
zBm#FJPlpO<bEsI*_;+k7IqDJ*#;hH%U)n`w6!j{zNRhR?ByuA{(cyK51p7JhqA#!V
zvYBcwl7kS9&~{PPCKn63{$-TC$J$9uvYv9PV2-TPo*8Kgp3$+e2le?+nO9(^C82$+
zc(so{*m8OIUz}&>@ICXBvx8)WhT!e;KAVF9FtcYG`FvYv%J?7Adw=z(Xf75}H7bGp
zECF0SDSKf!4!wZ2aBn-X<Gw}am(9?~UxR&Y5+irxRe(QAfoQ|l0(JB`lR_D}&4UY5
zp6AR0lLZCfa8d+UH`qcp3uxp&dT;MxZ4lpkWV4H!1&95DxCVaRbQ7vkL*-6%5(Ofl
zK*os*2c6*c6N8|h5>#Vet#%peYnG2 at b_6E;uUJrA*e2)O7ih8X`8N3b=%w at dQ!@W2
zA`}K at Ex?8kHf}^6kl5`ehqeo&2n#x1+Q|2d;NPQcb>Jq`1seW1vMy}0;G=l%zJjUN
z6r&N8K+*-30Xwol|IV;yg#t`J>j9oX=)8?<-~DvAc2G^Q<^FS<UdgT;(XhIbQ_I_H
z9$=SLcWl^W0c#ET`*Ae#XUpG9$iHw=$E4w`<+)GDPe^l;`7q{2HS%NOm$fq?AN_}8
z>xTsPi+mnpe;P52jbo5MoeXOx7A!rWf&5C^%=|bCgayUB7?#sY8H5Xmw(!RS6nOmJ
z9&<>52n%eSYWXZnX$fm!Uplk-e80j^YYNC}t7T%L(KB$8h-hsoyF^rcflIRfLV*eY
zQW<SNyZ(SQd^4;~K-3%yy`GJt5)PF;rOvn5u_D4D3aq@~TDK}q-MonID0iS0!BQQt
zkb#-mW)S%EmA6qOI^?8>%f~Nu5br?Xv{{h)j^`Wt|F~M8NgYI0Jx-TtEbx2(4zTxR
z-QkA4c?*AMGWNH?{^_SXU?21T`GyNfPng;WgVyW2apmT at qsaHafp;1Co?{FAM!uIv
zkw3%UM@{0ck`@*+pJan=Vaz4+gZAN~E at 6LY)q7xmS-cP;ybAoyi>QE-|Be5?KP4Q7
z7HHK|WGr7e`Ku#uA%Cjki at uY7b%1?vo-I^Pag3jt0$AW=xd{}(Mp)2og^CES!Ea>H
z_MP#uZpB1|vw*~Szy+643enEjHW3(FpePXhE3tG9Yfno0r6I;noTh~W&>j%l+QaIo
zV?Xq>CWcIMybuM7Mp#n>GYd)`Ocqgcd%&ZKFtea15DU7nMCps)F4xguz7~;_dS{8v
zFM at x20Yn{aWH(ZVhhB)FXc3w7!Y-2H3;zha2L6&=FSYF(_U@#o(+_vXyu1CqU)|z~
zC?RZtuOoV!_f2Ydz%8n^+7smYd`mr at f$a(Q3>%qg*^;1S{`}Xml4V!2DIA)~BGaQi
z++M at 7faP%$@~*Iv1`J*vgZ%R18 at k6}eu at 8i{t6b%!oO|ELvgT?u|M!1s4qtNm>nnv
zF(+Z-=Xc1OBH#|&LDe!D<Uf4A`}lpE)a<f|Za&Z__M!k_B^0Hjf{fGpMUhBy>Zlb?
zF6$*M7+FI}mf#M93L^BdWZV=`U))+C^~IM})Y{MGkRj9*=p<W5I7bKZ|3rIgn0Uz-
zyLx+LCIYjE at iT0pb^(eAF^X!RDUl*%Im!YM8tR~Q1a$z?V9(8;y#o{Yry61iolUp@
zRtH}Cjkq9KiauNeL=eKl0 at vL5kGh{++ET%*itK^&%HChXo{`y7uJ)+9`tW_7cy$WB
zB!=%Rx{A<clLLM)u`eM_L-iT?EtJ~4A2`2S);?Fa at So>C$$Y^dnw|VV^c0RmK9vOa
zjeKyLkY7T6Df7$P at pJlz7gQ!AX9oEzCa=POg#SvaO!zM?Fk!o0kHc0F<l{xIx&B)7
z5gqk`Zbd5s%K at BX#t#ZGgiyf11*XxpyAf`CSFu3GmmJ^- at WFyoNhm;EKzMFZS34$a
zC|h8FilL<sB3KFP1bfNt>>tTU*rdRrYEPzo<IOblG06Wcga!Et_yce-JjM>s&Tz)M
z*tI+QIdACRxl{-7f_s$9+%dp%B5WhI(giI-2MZ=QnMTm$wy?d*IE8;kQ3p{?`1mm3
zJqZ?BJCGrG`gI;CYkdFKshA~euwQz<?Z#F-C(pD!+;Wq>?3`@^pR|Acq5a~MKXcvv
zzs{@GZZ5uUm|m48U~iWJ=p9x{?I4-G2C9(}{D%nBXgahN)OP+M*dHhJZJtQc*JG_U
z<wB813{KMmZXA3sGcIpg{R#2|<D;-YRFz-F$V!rr*7Y1?2)Qk}QOkR1zM#O6?Nd+`
z$d`_Qm(7Bi0<ndr`#({DI at qvxyl^PYw-$Kv{$;~U0n*DiPLjs)i;Dsx_ASZ5*eAF=
zFs2BAyz(EC0+D61Vu1uXP+<u9lRUS$1KQgre=_)APyh=;gr-0w|AQI-p+Mn()V8-f
zTn;ZTga`+B;wE at o5Tez8+~H}=EU3j|@8>Pf7SWOgtqz2D*f8WRm*+SiS!UhXDQT#K
zssF8?$u44_w6w3zCsWL46}?H8n#b21NzAkSGNu&Ig0z49;YE>5lAqX_bMsuJ3zkbS
z at m?FQ#`X;R7U_ZgWZv6-GQrHMMuGNzgCplxfy1kjk9s0YkPjyUeGPTsDdbm*+DhgZ
z_&X%~QsfVicLDyY?}`R2Dal`>z%h>S@%W!8&_OnMZeO at TZVrAu*lhk9oz*H}w%F$^
zg`ov_1Z<($Jlp}82Y#)jjaWp_M7eijmLJ3%q6kDRSwvV+6hPZhz^LmH2cr(EeM&jS
zbU|kgSw`m`dK*1rH2%f^`+uk7pg_z2VnNwILkkQFfOoNAfZSXq3)6^3U?#zTjGyCJ
zAhC at swTOlViQ!KUauXrm>!b^ukq$u!uNg(b`Lt!8KPA{p9dHWDm5w at C2&*8x7HS9V
zyI8wSBcc-Ed!%LPS4^E<?L*1=#B-(+=2&+n at EPzMQhv^*C6PV#Smu%E)wwIS{f5}i
zTiUmJj}Ap%E|GsU=CDv4iS1BcTJ?VKSGVczM!p}#%xmMe!81ht<m7g2>KJQ>{9gz5
zk!D=Sfd6<$_!!~ew>L at MjG5@527ho~V+MbO at YHK76sS>FN*tMbbHcVhq~v*=;@vAT
zcx*9A@<aa953gi=WYeX~;za~F!@K?B&iM6 at U5VytwjvP8@qvwh8X at H#l{lIhQR?M&
zcn$?9ks1Flqkyo_YA}cH4<f__>ePsm_Cw$o+Wo2RBJ??y1??9U3oxizF#0^tx}aR|
zvBKq~Urj!Px-lc47Vxrt<T+%@-iuw7R)J}u=_UvE^}L!05&QeG>U;QD(%y))zklAH
zA!M at T(E?xo{Poi<@F$s{q|Jf+D?UHjJF$WQzT%ni?@W8Oy`JT`F7Q_-(^=UI+VWW7
z`{;+eU;XR=7-|Ih3GYPgC)6{IVemBa{kqxUsi=Ok{%XVoGUE9zh%i(@cjZb;mcu5{
zOYHxpFgY|o4*x;^NZKFre at TJnf?wo4`I$}Ra*9c801gXMM`L&0Qx*t_eQ_c9e>Yof
zWOQ^Wdim<vHitB6Dc9IP=HGoti*b5E^04Gd)er`=AM)8k2 at qXWOmqUM&V>c5Ep;aO
zf5;F5fG(2<a_QyP-)-QcP=$~$lRjG-88ZdIyTrbpw7N#~pcgFYKh<%tptjORCGytQ
zuJAu)Pyi&RIL{ulQ4ymEyjw8Be~(fJ at sZ1MZtvg_?A>a&rACm?&SBNVJb`bo8G%#Z
zl5F|f%-VOglS1Z`>hMg+vt$PB%cN<j!#Po(c>+5X-l at OF+Nu2x+CW+Zzt87BN5#n1
ztQ`P9{^6ww`H_&2Z;+*opEm4g at Hgxohp9i=JOlHSQmbD&xd4Y*aL5W;QvrV~{2vB?
zs{qG<|0w<!S|Aiis!|rG2L7?2BFyBH5g1n~+1|CYHYSco at WK{*cGI|u1&&zo;Mt{v
zyXS17vVHk<`^9YzQ3S0E5CNE3@>WIR2RI!W=Z at w7%9l7%2;8k^=7R!0WJ!T`1RUX$
zd7p86(;m<j at e8LsM?_%ulr9MD!vb_j{4 at 28=KhKWtqXj6sIeHX!AT^Ae^S at n1s}@-
zZwN9|JDDZ0cRtzy`^J2;fbmo6z&djJL$>^H*t;75-*Nj$`xl$H9$k=4VeKINdMAxR
zI^HX;<wtd0EqIGgKyo6GTjzj0MrIi{Qj7-R8}=OG82qvSdwHvN9A3rNQoU&FG44aa
ze+Kf!tX$8hKiU7mAKWJTO3o)aq>(>4xht_hBj1D~o5X%i+J)(pgAq;ki2 at 51KpiZ#
zz*0NBY!%>;%wMy7s$&)72l9)s1^y%WKdJ(@rX+tqyrQEix~#~Rppc7Cv=gw|IhIsz
zKe8yc^W=le4Sx7H at zNTB=e4>0rs5iuQ57DmzA12Uk^FBkGq#D=1}A`lD2x%^JOYB<
z(~lOI_K=z>fEUJ00sUqLc?k0x_k}<&nkNc+YlEKhWKEo8`84>~Sx|dq^WSNN0KR1Y
z%!1G`C!?y$W$4`@k7t43GP47E8O$(G>^B!?buhyN#tQbaa17y{J5LhEY0SGDf>-FA
zg#!gs*H1^_UnKV55+5M;gZvASKV*BycD$#W6eZ4MG$WcC<r<_4W0v`l at 1FSZcoWx7
zK6tT}CF2(x?EKGv*B)@m^@a8p`+(gR at +9!#pJ}~HU>nGvp<cG!>f{jMf&I$<IV}Gd
z_&;PCg$Qf%zo_(T at Ym%9{7r#W>>elokHdddK#w^()SsgT910Lw33Zk&w0q?=>lE6B
zMkg(R0$~AjNG&Z}=+c$p7ejK)p@|6S0N!9setPHtj|-WP>MC{ak;&pMQ3TVjnhpLn
z3S at iVP$2k+<eLx3&u#PT_byzywP6iNFr2dx7L@!C!dn+qO+AoPKv?4l3_<&(2$}*;
zy0*H!TvFyQ*9CqHI5Ay77ot$0<o_s4cK6z}AolG7W7A=&aqc1HGw=O&0>1(2-vj$<
zq)-B1i?Ipz6|rx_K7ikR({_X;zqvsj3{yYC|Lruf&kpiIzR%$@pp~ERr at 2lZJ(({;
z>w4b#cw2bq>tEX6vAo4Hco+bl{#-Iv_&<dFmDn%v!#ru35u0IF2b0a;m|r_iTHr{`
zXQ+wRmE$;l<_iDIfM>hCM}+^Y at V{mPU0mURW<fF~$`-<=7(%_lQ+oYPis11 at fDZ*~
z=i=I5GDZ>YaOvQT(2&}w+ImT0I7Q%?=8a7Ox?n{C8%gwD61BsNxw;arXeiLzXkO2J
z9<vtk`7!?Qa*Ep*-e%tPKm^5E#GT;{hgeWJhqnwY5GFzs){bv477Y9+WR$2&t}WFr
z$@9;(y at Un+y;)EZs(1&qK=}f1k at -YDOUYp8*c70Wg=EcHPuXPZ5c?=#Kz at vwg{i|j
zZ6c8E)wc0XC1y%&6rHKTM1e!dw>$HWT8tpypg16(97uGx3Kskd7uLw<Yk&V&x4-%2
z%|<>qu&kXJIql>^a!dZD%s&SCFh9UQ?4Lu>jToOSpS8(EfkS3b_MK^aX*$l}UtoR?
z_>Y*+BJ8s+{ExGLUabN`fvVkuf9k;X_{@`MUh6&1674TVz#~ZKgm-t!9muYc8MO^7
zbBImbPBB59CLzqBi2}5<4}s^`UjKVBv&#a3`KW_R9wr_Oa=YFT7L++O<G=nf>te>G
zs~cN8Cl%{4%-|gC3;&kGY6ROC_{covupmpr4f}|6bF#Np4-L|;F-4HCE-PppTM<kw
zaJAirrO_U7y7Z1G7IY}d;+OcR<`OI=!@op9h^bay5ZgQWzkVtLzrr=3Zn!_}ob4ST
zE~&oxhA4fDdS|?O*gPzsB8!*Qgt3nN8)y8?8Tkiyqnl_VVbw2wdi9%M-sosyd#|7l
z at Xdw5e#*65f<JP;(O46(kE?i$<PYW#j|t2xY!@kxr9l37@%{<_PIg1u<uPb4 at VB|r
zM<<8n^Ahkc at xOBk<uU!j#qCwWd*fdmxRhYRs_hP2BIgmeRYMU#`2LM^Hy)g~I`Hh1
zY&UFk;p{K`X*RF7aJF}F=28}md!;O`qKXC40{tPt4E988Y>cOAftaE~O*`M!)jW&<
z!X@(OdGA;k3S6-jg+!pu2)eYl&F+n1L9Gju{N~PJL3F{rtug}!3w(G{AYQo(KmqH^
z=5-~bSxs0_%EC$Q$Q=6(eVxGUr8h7tdZoY_R-9i1c!uDZGmUeq!9q5`!@u*5eAsT-
zx11;N?I=py66^#%tA at bWLMO1VasJ|o;D3R9WGUn){?93h%wHhCzw6QaqMFH<W9O6k
z(d-PKTKa4ZdpY~LOU%#n2LCt~<`>{!@nVARA^dmFPcdQv>;m~JC`vmt9R_#S-x)Wm
zcn6ITzBc+7%_qMN{$YL!fu^@f$AZvd_yVN at I?sQIg*2#-N9^ek;H3x at fQ$d1 at iZ+E
z#1P6x^EQdrQAC5O{ih%8+c}O?Tolk(d2Cb~TWD<29@~bTpIJb<ns at z3wQ(M{(2V@$
zq_qGQg9V%0Z)x3Td-qlc%>wxEfey_AG@&LU|A+7odfVX*3m&n|aU at PUw3n;chS0Eu
zBK(^LsjLiDjb?#=&nRDDW&t9Yi)T7wfdneYmf>W+y#=#M#f-0}Pk?RPHOQ~6#!s_z
zX4spcLs|Q5o&-7h0{)9r%+!Z`-54N0%C4FNpe_C4>(Z9?`37r86(mz%UDyCWKXK%$
zRSr+(03_zK at Nj#62>GMvAVI=`|4AcE$e(fB6qsL{93sVWFW26 at FsNGNR7`S+;#u{W
zOw>rKLs0`_dqUJ79kTT4IDkj_9-_PSAeW(DTJ<0tE_AhHQ^0u<dm#esYYLF$741)%
z%+BT0?mSyaILN;9mQgwl%wD&4nP(2s6dM<@APp0eIAn{ubFar8sI4361*ir*$cK~W
z0$dgTM-OKZS|Wd*Hw75OKKbI_X%x`OlR8kBDkQsNLDvEl3s8W)G(6uY<ax~dL4j&M
z>`yGBU^r0ky~c(XaI)<mmsc8L at 8OaKW&e23JQzRJ0Vom?*3-e5JdeO{g9p at u{Edcp
z at V{%f*;qu&0r^grwIAfGES{0i$QSna<{9~|cPN*(^U3`8zTAiWFMsa<Dm*@q((?rX
z2rMm-`LW1{{}uQrneP*V{2BI($x-gCotf?S>HNAFZy|rIgr8;mtO#b<v%%)Sn)p%9
z_^~-ZRRJtn&{Znj9JeCr%AKfIDLRPIj=vyAI|7aW9Q8A?8lF_ow40*^*g^^Qms4z$
z&`Sr3p|+r%7eEDk at ZGB#Ou6~iiRcA^Beqb5h9u6Ve`exBLyyF!0_pY$$jqjI2?{)X
zmU2Q8+sPUB%Slr}%YBN#(2XH1xU=QB7ZwNvDWb7PJY`2b+~E#fx^|k6>|;x4C*awG
z<Tt^HS|;F$MBuaM8&`dtDbOsKs5<F_!}#X~z$e_w!y)iV`ydwbFD95t6tq2aao1Ad
zA%X9|;^aa;%2e3Xop0o`_M<rJbF2|WPZ9W2NZ)b{neVpCol_2}SfD{W8$6NT)!5eY
zTY<ltq&2R>h$*WRjAuwMCnTirvfN()OLjp(8%Oe}epyjKiS!KP8RQj}t$(jiaGv~k
zQoC$5%Z|jdi~@5LKXWqFF?0)D9gFpTW at WxDI()YLZ}5YCIR#Web$i=Q5Ra5_GzJAK
zs*tY;{f$nOC|l at yoMOOBM$q-Mk6v5?_)y^Mt6%)y<!^p<?W1oFJPwA?r7LIc!;&CU
zwNv(Awx~<~TPuR{i-8T)86l2C#)bvtaQ3<T&TDas*G5x-3eci0ir~`e%hxQB4HnP^
z{1j$S0znfCFv235z+e^v7V<xqPYo>KGV=($gm7a?0V2ImM*dgKsw>~?BnGWiKuntK
zHJr^T9aRY0GXl0dj2VHyYbOO8*&LGj-Vm8TA>ZOxBj1Oh&l>VwnD7zj!WyOfY$ZZ1
z<nu4~i2agRdHRjswp+$>XT;-CK<3O+>^FYqGc)F$@tHtwA~G4wEAH5`@3}pyR-61P
zdTLmDgTcrL9%S)34f6Te;E&Kg{aR87D;DI<KwjTcsJpDw!fF3*@2$=v0DEt+{f%qb
z+&bwRAk%;OQfW@}KjwVJb at SUR^Ct#>nLxArmzjnIO#yFi at H-L_$5Nnwaz!;u5!f5_
z%7$gKOIOcWAm9SCg1-L;H@^Pm!PQ&m&+oj21>2WTF@(J5{LTql0R9QUSrM4GA^`G~
zP!$E>5c1&)1*%bJmU`Fl?`2a!**>$m6#;vA=gO&>1-n;ISsLRG&lE86lI0)*8AUK5
ze^8)|AKHQ6iXe at 4$0ZB;WRM?%q$}ynf-tvOK<1P1E$|iH19k~^QTo&1?IIz64g6&V
z#St(xQOO#;^fqe&7f;rT*qcM<S3`h!@$X!+pdhdV`3xRQ(kf+uf1rIgIoRf9 at Q)mx
zmm!~3&`_T#<7H#MWiQ})?jYw#V#Adon^)^3!7lp&No$c4?q5oDC-n<B?VPn_LGY<7
z!j_#=WWUFpaHc<MlCJ5s(kE at kN5WGmJ__2$u5*)NgDmKPbgsc03={t%j6hxDg6~yh
zV$<H47tYj4Yuwqi0t-+8^5LHsz!z=`ph+4#lokj_bgf=AbMEUbMpw>T$A!uk;_dG2
z$0OkX5=S3>?*RA>^8ftK+qFh~rrZH>p*Y2{g=*94p$NFf8ZU30fqxR%0&bf_5Y>2d
z-Z-iV1_ch>N!!w$p=h at ENLQOLoMaANzkA`})+X<GtO#T|OxP!R5ey{Jp$h&C;U5Z&
zfKT at 3ppvMbnF31|tSC^MQ7$Qf5k3U+Bk;?%hkTf4sxftf{CN~9uz<{`FT6S6-*}^u
zZ*mCv*Q{}$6V$~`c7B$gKiXmN$R^UWh|Y!l5`d-pE0{SGA*lXsV&8i_+!^zc&sQ$A
zbpc)7YPE{vUYja^yW2^Q@;&^i|B7Or1Y#Y;`aZCc#y}49WHrPNMx>s1puH~pyzdg^
z<c)f>f6;5v|Jr6No2}S*OYgznc&PSX=`*gXbP7Db?O$AH{i6s2-Zcw0eJmmr3n++u
zi?8!bBOI#9+wc*_UPv*4jG-?o0}2hpf-;1Zy10`*p()@4Cx4bzAE%hLzkB7(<M-2k
z>i$#C#+xv|aUsX8owpr#_9g#skk#H#ah%!Y5yz(xS!#0#1%SNKUdB&CF&;O_wT~ci
zVoede_S#q)*sIp%k}-U~wp5!J- at LH*_Vqh5B`$~&L3^S=SrScZkij%kS;-<I>I?kw
ze3!#F@{4`-!*|D~tEBF52g*8{k#F+o`AQMMd`zA5ZxZ;%3iC7gO9ce^yFtF2(8yP2
z806c7VC!xFu77fUT~>|DV7rvC+xuBuzW;nfdzRq;tIPdNBjQq-k|>SAhRLedtC3$G
zZo?jUJXRm&i5CoBhwbZkthVo5yK~{@y&aRI<NDo;#!QOlf|ou)xtwFE2ELD^!Bj|r
zE*97%v=?^C?U?Z;>b-$^L$=c$-e!+2)z(&{jt=L6zj7(*9c^7xWWh%2ZG45rNdBTg
z{MOpf6zs!@9<yG+H7x7kXUYGxF|6Mn7SIJwQVsT7<kZX*z=D|qiR$-KZ{qxcG(~W6
z?-bA1W?PN_a~G^*W*~z0I8x at Ep#{Y7ha$*kyH$x+#{{%DtP|NFBkq6!b)ZPD_M#H)
zu%-xR3NWtpp#nJ+;GVk at h5QG%&Z7Voz)!JQ5RYJ at 029a(0Dl?d)+i8%7aiW&W0m>p
zK)o=J4y7iBVwxxr at Xr)rj}iF8)G5qcy>)UXLc0KvA0I(b^kSOCLOz?nk<Zs~NkqNn
zGsy4N1T}h)|LoIr@)T-#|Enu(o+#y1<4Q5rVw7}>+2eU-{u1yz4~h+Y&lho+&7SyM
zZ@)I<{K}2Zp#9$Vl^cxP)2vE;ad)qrB1vxClXjAEa9avi-gc{~F|(j`0WLHJfO%E~
zpx%}|#4`B%$S89CTvy-+Ht#3-1ACWrcnolsA%q2ab5ui^;-k=~_wdCj6X3TOo9?VK
zz_U~5f&%_3KP_^jb_9;Bh>wu4 at c4=-g7mfx1<F7oOkAWQuPS)d^FK`?I!6L}+l((^
zo;?V*c28WoqBPaQeS|;ocb|Ndi<eHpKP|Aed$MgIEqP(UhxkCB&;g=Z5yUl4R_91d
z>qS+hAeq-$Pz%H;z?4c;;>%G4zV5=MliU;L(2cw5CAXMED at Bluh$sS<8>e_lfyRHK
z{W7I9C@}55?fg6z$PWb!+NYszC*smXOXLrkj~&dO1 at f)IXY&*dd|<w{4CJE#Czsfl
zQ=tbD<TLnH2kTkd2=`EW;%LNmeYwFCvQ+h1TN?fsR&U<lCBuOk_|rE3uARhB+6v^*
z*n9ip<rCg>qXfPMpq>4b7J9It?aU<wS_=&PpNa|~u3N~%JX?sZqJBIc#Oc?CbD8(F
zkBfn1CDk(ITk-?Hh68FV<W`+DYQxZ+tbtP;5c0n|GpFYs3UE4L+b3V#Wvj3>g8xzn
zjelC86+!fZU7?xZr4-z^6h*pwmH=>}!S6^uu#sFpA|!k|C?L-&S^B=Kf}*KpX_vNw
zoT;O+E4r%Ti+d-B7MLi22w1>M#{$v&%h%2m*QE#o{-%<Z0tsC%9t+?+?!Z;`0;z4}
z`hg;iKsy-g6ewGWCgK!R1TrOd_RktX$PMwxC<2y0r}!#G(6&%72Ryz+L8u+$5f9{-
z{GUNy3L=|s*I0qy8!BKskpHmo5B$E-w>x5Db77YGE==7D<hylbevd+adPhKhk|k0L
za2ohkNs##l54Zi?kG{DU!ByhDkRO5XrDGdBCS?0^_^T%iY=A-TF at q!OOK8J$dOI99
z-gxUfTf1*FXs_I~ydul-Oc=5E_SKu4{_D!kI94PH3JA5qztJiHr%W2IggMN^wy!3i
zTjV+hZ;Q~St789$0_R1OB>SBp{~P~RRaccqwL`8Z_Dc$YeQN>7QXhN)w>L}b;0^pa
zCP?mx0)qvh<vlPKI-o#CbV0Zv3dAT%x5LPPEv?{RC!Z{q_1ak(a!~|D0YV#<#>SM@
z%(jgAP$2zv4>rhu6d;6K3jjmwg3WEfh$3)o{1e?#1U4kC_7qD+z)Ej(s7)ZQfw&Oy
zND;7JmMmynC=@6~zz%P7Xj at VHmMeMd8X<O%)p|j6NGyo_w;a|hVz?&E0(-|%U_aD*
z=eJXU{HNN0pYU(wy8xkn_B;x3av{H6-5|emnBjazex&`~6oNrM3xBrr;a^VOz)#^B
zT2{!P5*wDVHxErJe$L+nxrRM^ezsM{<R$oj<IV2~Vqn3=y%Se&p5MQ*i2 at h*-j2+_
zb3y9~*;WJp58 at s8w6{+L{6I at ev*dkg!yeiR`Er3t;FbT|>Y#sD$?a?o<sWAXME+Oh
z9nadtC-brg1<DYjGO{5rEh89p-l9OPposT`M9yBjclxQEga>CIzkewv!R2s4vtoZT
zFZ?qdL9U0p6uZdPmMt{!j{>S(9cKzKii!eJ1W^GsIxbqa(CiL`1t_q+NAC{`*nZS#
z7PzEl0lo;}AVOHM5x>}=2snezPz0<LH7{5IhcSneZ=)jYg!9!7CCZ}5Yp?yiIW9yI
z_?f;d(V_jbG)_4MXG#%J`pG7pDS!o33_@`?X30NI*#G<OhCG_I0Lh=f)>6f+1t<u=
zZkGALALQ?xwuYN!-wN_H?9KT^vF($h9JA-<{Zz!TcEmOrJTULb=7IcKTE at aDfgfxW
z`(?X2W3mK4cCZKH(q2Aau-_%m*I_@}xV=>V`<KM=c0+-keZgeqv2Nho%>LlN<i8t;
z0t5Ud`I-I1KD3`Xmk!db at eXVj83Qd=L?<3N&cDn1xgp-~$UtJ=Fq~Qov<U?Np+Ffz
z?4sEU@~e at htsp;{<fj6RcRrAfbH&j{FtU`d-9PjAgG;xboc-Y+-G&6d>NKc;Llo%n
zkz407#6Qaghzd}>>w=pCj;+E}`?ewgek>@Dcwq~rU&I#KD__Dw7^oZ2SQJncY4!7s
zvs+$DW;kck_;)OiAe5x4LaSOPBj=&L6 at dvN*v}CK+D%?6f<qL at KEIoZK<=DCH|EfV
z-8coT+*SlUJ8_}^x43(2lH)k80Q at FHltdE1-mt&|*u`Zpz+!=2Tu6x~X@#W_B`Yk4
z^dL+2|Nk5QPG)sa?+pMYG8|FS(bLm2)6;cM=E<zA>Ue=^AQ+(#VM6{;JMa(Np~ma`
zbEsReZwZub>wn;n&2Qx2Geu5PWo at XPs)ERj-K|gH9PBkCSzzDAau#5Ld4lJQUq|gP
z!5@&9J-5~Awuy7kmu|usoda(GAPFgf^FG)&{;x9r6p;^VTRWs<@Xzvd0aQ>ghfDK7
zeuV&cTKW9qQ|oNsV2V+XkRayUs)LFh;zY~!*Gehi9XcdJAH%_nf1fXb<Kz5-Z-8ni
zfI6FBLMV&%wX$mbBZw1b7a)|#Y>2}D(b*>aL%w+{&t7k-+kf)n=IO6?p1oQB{onTg
z_&-N<QBk1rzoY;QlhA+;aY+~|`6JLU*wH0J7~xOZ4+ZY8FDZ~Hpx|nof}bQdg|wUE
z&<vC9-tKfzQ9x9f at Q_aM5;EbR7tnYp_{U0HUO<w>)+PBW7Cr{2CjWvxN1&lV1jET)
zStEmAEr)Dd3)OcfBJgL)65tOD9wa&tr*{uBXv9xbKoo4pR2tu06d1`*`>p at Yg0z1P
z1ri9%$Y=9=AYe$H<TjHRosm!NyK>e((aovE)OOF5Y_(7DcTO_BP$~KVrc_M_YfXeU
z`}!gVzjV%{!>w73Uu*L}0{rmLaINrvutEPb7xa&nj&kc>Z1?wzcEJ+(+04ves|#+-
z+q&%Gr^<P?3v=<^@FkSVU+Wnt8O-e*rf;K#5)M})2n+nmIsAtjt3a5(@+E>_`sd}B
zR`R)9(^dB1|K*qWW(pj?+x+AI9{ujGPyg_DzF^6MA%uWm;1C^N4Ii5Y?0*fGjqx&<
z=eFDGM3RFeD6|{zE~8x(h at SD}tO)W>4SgyLN{7Jw41TC^jw9k?$YeiJM!ke@>(6oo
zuBR&KLV-8}@$X3zq`egv at CAAKQdWP>3EdWsz^~^!$ssW*J{AjZx(1;!4^GMojUhi-
zptH(+*39A;N&XKCv<tujQ(A1Vq(Jb0kN3ZM0r?U>OXRoB?=sN}?Gxvg=85cCA|F~B
z_ObbepH+IZs&R5c!5&Bsj_(y94OA`L_ftNz at elqV4*XL-51-tQ=6{xTx@<iTz;9Ur
zgW!?gaSfw2k_+?AQ&&h%f4Ef!rdb1Nz76WQ1H8tpb_B!hPgx)@9d~D_EP9E{aI%|k
z^pNF${^rivSDCk~Q9-@`<Rn7q`P)q{;P-z!z=H4ox<9kPC=#%-y<&s}1=Diq?F-!b
z5^qX|vapFLAQaeHCq;yfO at XjrtZh}J16A;*>wRa*n++03a$W;?E`a?9@=g`nA=Dk0
z7ZNz2j3Xt_5*N6JxC80das=SY5wOxT3y2fx`lTZ%FEGM^DnJSc{YSx(Uty at Rz%P2>
zsn8e;j1dT{3;!sf3NCUhu)j=!SKFX|1qI%D)<tx_e5Sj{@)Q3Umz5+drPDKF)V?wr
z7R!2O?cA4{Am2$IPuwW|*`Bu)LV>)^zFQ4ZO$Ry$JW5(`&^cGZex|@R_<yhRY5gOE
zXDBD)=U{{KVflgI!;jo6zsT%EW?wKoxFlED^aRTl;Ai|7!ikp4ZFO>(lI&32K}F5J
zUvxkV!FE2l0DtQrXA&pCuNgab!+~F;e_Hvx{d!Lm0z?sgz1tKxdcFSbpYB@$z%vxA
zfMMky`eY=Fk~rcQribNCEI>(lDnkJNWAI-s6sQy>3P?`Ee@$smQdEkmBv5Oi2q7(@
zXeJS?6FeG(3kPg9*4P#@T?T at XD9)!_$`RZkggPQ9ue327K~4BY0p)GBD3Bq8uBNkW
z)Pp#S*$ebP3I!sE5)_05<#b$?lvEN#N1KBJH5 at Du;9R17iUmf&S_P3na!?ZmRv~~W
zzz|+AZ*t;2j|==ckZW|l+z!n5Tu9#u`OnW%#?atzsSn$ov1yS2QH^|30V=%fh~^wO
zL6}(vf5!QBJ6GZV8t^ZTKMF+rl=26D+A=n$kWcE1I^i=mKT~lNkK`g7>V at -otFc&O
zQtKs{#}ZXJZP_O8KxPNt&7FL_zP}s+Rd3)p3a2!GGpLMz>_6q-__xyrAI|NZ{mOc_
z+i$<w)4W6h$FZO(u>b0o$D*MC7vPZ!zy7a16AY)gnEq+}*VB=j0<|JKQK~Pp;9<D{
z+(ZW<WCp6LG>an$1r9QwH|jm>C8q4Nw2+`+lhtht&lj-0h5SgMZeVYx9f6Z^p*}bq
z0qE*_Ut8ZCIm8kB^#~yeqLT<A7z+_9B2WuDw9t(>0>MT9FA+gl at G!Nb2v{t*Nr1T?
zv+OI|Im#j0yEW`*3FIaG&oS>Z5LU4U`D%Oi4h>{ymGVrnsp*g|%u7<=)L`@Cfj_Ng
zrn{?EZ)Sb$+cVA^{BCdCd|*@P#U3)eN!p(iIoE;T at k{u>9{fxE+Xwzm^;2b!E8vBE
zqfu at 1Co5eOYU;Ur5bIx@!*(;Gtom%^sR(U;2~O2k8cB at V@8T5m&c;gYY~R044sirP
z-ZH7Th8Rl!#QqolP0J11HD>?CJFA!6fBVfN2Tk35^5Rxez>Zp-o&A@$u;B3ZZL{Ql
z^Oq<8_NP#Q_NeU&{{XybF+L^;>ki;={Br^A1=!v>8~{#JT~v7T1-MWVaU?z90k+2A
zqkw!AJKV5u3e>Ps;$q;3OkCJ~vSnY|wrA4}ZRTkjJ1Gr?@T}P-X!YFcTF)vj;MJ(0
zkmtv^ID(?Uk_BPYo`LeU*lH|@B5D?7WTEE*7!HU>=qiYj{Op0ShkVU&0jd8fFYxXG
zvA6%i(pwt{(zD~;kgj3KvtwTGJb!(U&S|p`|Bd{BzfvM?;bY`WLN^y6%{>>09lW6M
z-vjk4-#U-~j{`sBFYP1eqtL>jTZg(L(CySeSHw{R5G-&>vQ(4>_JwmJactwFrN$nM
zyIt6CA(5m?S_ha(uoOYEHc`HFI0E4tEtIOEhPu$0Q-FDXVc7rMpGf$FdQ+g4&+|81
zY<^MTk+?V+(XV%f14V&*PhVOSX+vJfYTp0;=f`ipy{nQ91?pkJp#W1^Z9#!Z5ihsg
z4T1+fu>eR&Abkyc6ANlSdzJc&N;rZV9ouRh0{^54<&SFuQfQ|ZZp91SsD=@rc~|q6
zlVR94^huDCItM<5#*QO+6i1Nqo>J^wK- at uHhOK?P(1UPZS}2YnBOsG62n%+b1-T3?
zkhA3rjAE}SP#MwT1r{t&^Epw#a=~e}u$4k<tF=VrqX3(4jz61^5yx+KqIo=Y`<=vK
zfYfGx34RCJy&%6<eA46W-amx=?`Qm5^N;N(KT-Viuiquqbwr%2mtB}k0(FMhHrdz0
zX8}I&Ug36<Gz%lYGVfO%Y!{Giyu-YrzA1`{dg5aIs5=%fu=NWALqZRjhx{4*cK8Co
zZu}1le3M1nP+&et5qT~!3YfZu0#ZXyPi~5cjSd{WxveQO5e{6U0Km^Jkn_^Eb9Bjt
z<{{uo%S)t_ACnde1z^CL9Sg_~!EI%VIyL&aSO5_KPXq4?2X62hy~;t{M=cG+i5L#(
z5pAdW1{c5))YiDkr|k$>d#y?)vP}9sK+xCb%gYPos at VJsEWjyV#&K7&weuOjg9S$J
zr0aQs5eO{6j}B1X__uBR6FDvQrHOn5=9zul;Qvk5xoz<4Xvo((L*A7+v)KnTctdl8
zJ}q?&V`<;h_ at B4@gwRJDe}Z43kvr+B;<E8FicH)B`2n*lAG)QDe@(ekz|-RV%B at dD
z-cRTEPLE>rmi`yl!2iUNnGsp7%P+D9lHrt$`JvF>X1})9+s~w!%Jb~L`!<3njSBka
zk+S4D5O73XeDG?Gryz|`;N*+Dw!8oe9G>0wpm5JzP-K3I0s-4-Wp&H;X5>pxaRfa?
z3;FPm1?>ee0 at yTjCrb-uJS(PqH|ZUEhNEHF#T~+7kaN(PeR7w_ at EXkmTfZ*4WCW6-
ztyln|3>n*UG5td#HP at iIfR2khJL;+uq`dU3?lH5{(|czYlvm>K)|&;qfJ`j#qd-`&
zqnz(&uzlGD!1hFe*nc)(OX*HkuG;buG(W-fqKtptu2%cW^JIop1-7=#z8-W?g9K=A
z*w5R43jZGs{&&C5n!o}FPljc388_D!o1ZYet0hMOdnL%<e-MmAf$JT_>f at E_=^q`x
zy9$a;uO9gvQruXx%#T|~^Fwt at pcMr|ghv8_lP~TyBb;`4>Jdomg967lU%b165r?O1
zB7)~{$)Po&@$0Ye%@kmwtI->y4U^sxZrnk90SN?nRZE##vY7&`E^sp1!EpP6jFcrD
zfH(NpdgS!p?pou2NddpLqQIjqvVZHI=O}HophAj{uhB5|^J9!4^>P)JkHLcW1#twY
z3f`348CEb^Acbni#o8BKV8QmzO)i5FiYQV(v15v&F}qJzEO__uc#=Rb-x(Ks!1${a
zLJHA=w+j4NlOeN#{0eoWa0=(K`88mq`{XnIg at m`4kpKPd|9Rv8Uhpr&Ud7c?3Iva0
zm<-E~k*Q7k90<7puBwwTm$wbw`fFp>a4dX7ecmY-;LPy7<|9W$E#7thiUO4^9p8}2
zyeUHPvQ)<gVFS{@%;rNfNuynX|G0pJ!$t(eyzIYyXTrbcv%G-R5RG(nwm}OWoZgll
zJv_T*#mJK{*=Ln(ktkD}DG*gt2rOY=6wt*S0ps5kVEs@)V|$wd$}D|^xo+tmEtF(V
z50j+|$gd<)n3hAd(_Uan0YeO_sJUyVgY_j)!%`dI6i3h_W$g%*9+5yABIr|qL;<Zs
zV>7D!9OV!EB5o!6=A^7xkSL>lfmy~GFODd>XEIl68~6phc(lJ2BD^y|HlhId?^%#-
z_G{EQDbp45Q&_TINzOb7!;Y?p{El!H(#)p*^3L}${^!B}k;><jpGfaB`(3o=^4NTr
zR|-68-~JNwGfD?~3&T#PQUKNPkO_u8$FM_#?AMe-JI-;YRtl=OVTyIvIllg_)%O>J
z#>;vRbzK!j#7b{Gd%X$I5Z)|k{DU|9zj6U}0=`f_&|dgYTyXG`!Cw;yoc=NtfPXAN
z0beUGbnxod$(LK!dAN=Ou-8~ko~P!*=xEiX&<OLXRj!G&c0z&0k`BA&2z(Z3+jK_@
zJ>CMy_<}GZ%(@_i`d~W(pA`;>k%5!_cXC)T96 at U55M*`)Ns!hf^I8<mjzF=cw at 5FJ
zK=fVXajbo_U^O!C1i`WZ+}JMIPef2h#2tLPc1Mu@$t;0rBy^aNPZ6!a-wE at Mm{>o(
zADf?f;?`{3xeWLVNB(jAzt{M8!28wj9`T6^Y*LMUGvf{s9u?#U-qnB~2*oVpNIfG4
z&dVlOuBP+}d;XDa{vHIW`p+rtGi66z!;%HP-|oPVx`*&1fGy)6ku%$WM=)Z>e*@kT
zP{$WrXJ(A-tB3Hve{viC#R!j&Klk$Z?VW at JMS;V!JY=?}F4m)gFL{BO-x;V?|1$>#
z<p^T`YhGbdpq4t3iiFHcjdn&T)|(nZ0gj-xPzSb!>QyY at o9oLbE%ew2t at _RyTLmKZ
z620_sI|4BRI<zA|t0YLDZI=Ge;)Jd$j-ZmINXoEN{<gB0a!|DniP~x7)Tx+-f4XR5
zfi!HUcXeXQN2;lLHt8}%0RCw>0P<a7WML(FbXMjVLKmYK<d at p{7~~_uj|zVChzTC|
z%_Rl-=K&1%G1Se1o%JC?&Yy$Ymz$5|tLC?s`}4thr%v{f_6z9HZeoPkbpc#ME at R;i
zywvr7`1}5h at RB+aLYl>?E>OT}QlPwmp)vMf6H3Fpr0A<JJ at Z94e2XIp1<D=p1>#~s
zvC-jDL9-BAMgdVEldVp88^17SNA}ul9T8^*TEc)4ZVJfQLpa3_sP&OmIN(TAVDc}C
zoe7~81^U?;HMk}m07zO0edg7_<5rR#&G)n;kj<d{VV)xDbkJ}F=+JTT_NUMe{Fta2
z!x9=$J1oDvkioJdLVSUjaR)Wek#^z{l>HM$wgvtL@^_OPAA$$+OYIaXHdLuyu<+Nt
z{PDnV6-R<6vsCUUnbSe;z<-bD25+fAaOLNCG2u3;zbulITyC}1j<@*1>3H6ap_`hQ
z6E)_Y^JEF*GBwiJaY#`!u)@R)g}bZMxLdryhLSeOr|oC6Z$XkA`8G$iA_!7M`74bp
zAv96oSE0a@<E-R^0tYYGIfCOicMw5PY_OOwkQ&OkKmvj5D6nmTI1Lvj3dFOU9Ygtd
zEbMNe0Q_r`qHUZdVSwM6h-_O#h!-f$Y<wz5TJtO^fC%vpHL_+u;lQ at iaZ+tOxV(vA
zD8XC4wtowlu>knle_kLNp>hP3u*&#F$svxwT$NBj;|^#ZMxM}WcTo7BS&&gVL~sJK
za0-Y&Y<|k`lis)JC2NlYMsFMWhc7;?c9vZDX#9T<*-!Sk6)Y<IP=Y6_8^T$8TWE(g
z8e`(Z3YoOZ0 at 54$G$60#Pnnm#le*i at Y`;(aI;h{rIW><jF9n8{RxA0J-k<1 at xHxU~
zi*-GLz3bVi>}dN4+muys2QpN<8*2L->bA4lpN~}7JNyE(fBbfPP~fY$0E!6gA3gtE
znn=m?(dnkSGfv<aXrZSk@}i>P8W&sPKSh;V#$@UFRza620HPpaFvwpnEtEw<;NLxg
zz?BwCv9yIyP#~2FfafJ(=VhK3S!k~e>hJ=!9$g*J;If?x2WTPl>^yXP^%w~INEBaC
za>y^L;L<x<t|3Ea+xmhp at G@6;c0YP)*W9$>2$~39Qu`4_g9tsbE=5y#!5uUa2KY<r
z%*e-rf&A9_zxWqPp3$yJ_00JHk-*RFCx>h(e<66l9?T#-uwNo at vhWUe?(0x0xRyeN
zYWK~yG0(rdfo|h$=-gZT-QB&@cfQHuxR)b8Fg;y2c&-t^;=*(#lR$EXVBgVn$I;DJ
zUf at 6ezM{Yi`DOpTY*9q^YcMYz6bk(EzWq?(mk$nKZJ+>Z&`8f;-?1-E>L3bm1X81>
zNUP*uxPVI(DEwdW0+XSR{9r4Lhe{B&`31kG01`P3;897Zz$(=B5%|Z8VepFr(C($1
zW{VE>{h^ODjRJ54Z2m<Gm`$UIdhLeVB))*TX6oH}J!RW`oa16WsHdPB5gPpSmefh6
zD2bqn2#FC)Wg0Ai^Emoxk+kUin7EWKtT6xo2YzN>9Av<#<J^F}hjIH680Rq$SN;n$
z!hG9#JIsZBIB(>aHOteZ3>n12dqQ!HN%rl`&E2+dn_FGYPPabCeh<^6TPGrbv at 5*G
zg(gA?q0Tkg@&e8 at X!wV}9kdD}buLg~NT8DaQT~aAw=|l^OffAKINf~oESBGszYxJb
z7hpCGEp&J)1io4YwF`(B5C~kNKr~E*Ivbt^e1fh#Y$7)#X_>T)ky(uduoDhUrOpj(
zARiQ{@5#Y_0P9s0Kpc^;FF}M06lh1#zQE6IZspn8n5geUfvIo^3v at Ahx=!zkd at 1~a
z|7p^$mqsgk-~bUy8c|1S73wD71$#Z>%B>l41 at fB$KaBDJSlI*opMI_ueSj(%o=i?J
zkrU((;Xzk`ecSnIn}uIm=QQ#I`&yS{hPn=&@!ycPbOxvg^J(ej+IEkRmoxaS at kJ6_
zl+2wc7_=rrb0I89t?5D<&F-M2nlQm1A>L5tyZ=5YsK?+p1%~CXpqTLo{%!#O>}*q`
zc}O75qfVclZGrv4s|`!~zj%9h at 7d=Z0Segi0<D6|1)K{6-cNxs9jyMBNZCC!k<dN#
z_nQdr3`_==+n-^9^O<YlX@&1dC{UvY_KO11Ji`lQ{rsQKj=({m6%l9o*~Rm)W;zh?
zC?-AS=fFEtfZJtP*@pX%0&EeB<nmmkz?LuY6S6~Hn>XlC(E(kA2!5`H25zcLDTAMI
z=IG_lwaEVn{QrZ>=bCIM at Z;%cw^Bjf$Orxj^TAceu#h%keiZc;^2amL>@yC!&&`>z
zt>$)^`o+OuJ`*$w|95vIfxL`bE+ZK)zqipjz`ZOdn-DK4ls2Bcd at m}pAVT?qj<uTz
zVR45ik!_{i=prG!&h@;HnF7P?H~2g4+4wKz&-lZ(M)RP9h6}_G*gtu3+al*EurD+S
zBMdrQd{_bh6)GtBuYY%?7w`w00)^)!bHI$%Z3 at _dG~6FrsG^AqBoh%|q`({wRLF28
z1yBS0<V87xv3S?{h`>l0LNx`jK$R&9U}E=dUr$E_deB9Nqz~6JRjn2$v{Or3tpWsL
zGLIlqF0;ROMCZ>U=enKu8vh><{E#osWmu#)d&CV|X5`PQn+vcvAG2)~t3JcNrAwvJ
zqF(fxdo_rVLB at K>U>$j295cl&$xF8%zp&-0%f4mc1|A0fr_z at kNpfRF1c{XP2q3X=
z2P+m-m>eSbYtH%hKOaQu&#<42|H}TC?5F%Y;H7+M9`;}J<X_0&JNg_8o}J~P at JFXx
zdq<x=etr`d5(SJw;n at Ww5Gee2EIbLJ@ppze4+X~Tu>3E;3k#}X#+`IO4IVWGb{?*|
zUGC4Y_DS``;14fQ;Q&pQgB3NnGqX+Z`<!rK(n3vv_=5B9pdHHW2zm-|OjaIXlx-Y=
zxH$W%Xi7CvO;0vhCeYTH{ScuaX;kh&_0flsj}box_^%x2{rOKacu~p87|cmd$Kcn&
z3$QnS(H366#2{3fqG2DXSFGd_W8G_R3zgW-eSiU5-30UOkD^2&wwJ=Lu4b$q`{&#3
z8<TBJLQhv3)0w+<L4=5+Sr>KHasQ*ST__?)48Hv4&yQQ at G!bUmGj=BYQ~r#9hq^Qm
zI%uAD$MQdVb`uL=-t*rP;pvOD-NURaxNre81q%Oh0oPK%tiXu^0cQaG<W3<!H92+~
zX|nOCp)nEep^r4ACkp7eb+^~M`G#uk1!f8~Yx*8S?2P|;XVyX-ffG=mS)js)twY1U
znDl$EwK63!<n)BVG(SfG|1z$cmue?!k=vhr6!?D_{C`09$L!~UZo#=2c7^;!R9oO5
z^Vh0EJEFAxAQsqZ<P$S?=$wv;>^rR^Vs at Uaa>I3pxj!htM!7kT*n$6A#3PTk1bfHR
zN4E6{GuyzRbga{~2%(xPvS7p=p<J<G^!1Vj_3z3B%#nMsAiiK{9R+^-mnY|8pX#{L
z7Wk+9CI6**WI at 56{ZIR1$5Y_<Pu5``3l3jx@&X4hH$5GGkqDacf6fJz*DEg&*Ot+-
zxVipofn2J9Tzt^`B#Rls8<S$2(*2rH*^a<O!q!eXvs!NKUQu8f4zw4j6*Zd$PIEpA
zbVtm{zp&Fp&{Mv%DIl4{)a&R1|40qFu%#T*^-dEGpl5<#^{Ds9K)^@g{|7Ms9{|6)
zWmY2N4jIOp(uqk-Ed$#iACi-ut~_KTzcF8bzv*8Ol&n=)X(9g|YXn395A9@?4uWJ`
zH^D(rA6-y2>by^@Adr|1l=HpRHCmkz7U%+yC`KeAaQ%8PXVzG1Ya!o1L=idE2 at oYW
zH5H3TuzXfCeZ&Qd%=fmAzeuIrs(tlP*+aL^d?xc#$shU$1@=$Yj^AtpKNsLRUnp>N
zdItrX1zf;W_<t-BG)Dm|3Uu{CyMSvc(C)9Sy1(G>_{*%lT+l>;eyaPF8ZC!%(F?37
z5RKH1z|MS!b93r=Qy|u<7P7v)-PmORGe#h4Zb!f)FzHNvY+&pEg&ZOYU`F=4=JMx>
zrB1FPfTTb_jQ at WY{Fjh_UiL8i$<&odo<&aC$r<^>;44xk@@Ioj?+t at r**W{I{3Z6=
z)LZPUVGqw`tAl^^w{0%;R&ke(;3Z4g>xBq|+K;;zD2 at GE8^^oq3_-<bga2{|oO|d{
zBgML}iGT~vDI2(LK7z3`N@?~5a4zzSqO*EiJ*1#1ppL@#9KFtzfndIj|A75D`=22&
z%D*W9<j-E;p at o9~cV;b_ue!Z|vSAfs&m7r3^z6mY>aoAZ0(v-Lra<eT-bM%Jf)n7B
z^`5=JM1g>_t$Llt%ywgJJ2h%mpVmTsTK)ZemHXpvxHCF}^=_#5 at e33vQ{z`chs)sa
zBX_npD>Se|dxGL_Bu$iUtvG6 at LV!r(b_90v)~U*^jEm8|uz^7z!2gd7eq}uFMh!Pd
z_GpFtIi(Zi12bL&|BQTkuaV!XK55Ld^JVH&xy>NBGvy`Y<@?T;h0)Q~%YeP{)4iuU
zdh5~tcG|)A;{%JKZPd<P`<ngn?!HuyRC!t`kX+DUO7SJWz^@bw;+p*n0B`}ixc3VQ
znGaH(zKRQq1xc3Ddptry1GAEMH;rC3?6F`n`wu$pKkR?1KqY^aEXE5wIlfKs9KV(S
zkp(q($&v-zhp)D<;OX&tR`YnwW~zv|fd4VKcX9+xfe4|A0%K<cLA6YlzmS{hzf4-F
z^@gOV9Ykm?G;lt=VMV?Z1x7e9X`YJ|sL|wb?RpAq-wiu*!}kb=%<I(rqOJ#nz at q@q
V9kiXq0^rZfEC&?B=tnt%{{!Db7ybYM

diff --git a/kernels/compiler_rotate.cl b/kernels/compiler_rotate.cl
deleted file mode 100644
index 8d0dd0f..0000000
--- a/kernels/compiler_rotate.cl
+++ /dev/null
@@ -1,5 +0,0 @@
-kernel void compiler_rotate(global int *src, global int *dst, global int *y) {
-  int i = get_global_id(0);
-  dst[i] = rotate(src[i], y[i]);
-}
-
diff --git a/kernels/compiler_sampler.cl b/kernels/compiler_sampler.cl
deleted file mode 100644
index 149bbf1..0000000
--- a/kernels/compiler_sampler.cl
+++ /dev/null
@@ -1,25 +0,0 @@
-/* test OpenCL 1.1 sampler declaration */
-__kernel void compiler_sampler () {
-#define S(A,B,C) CLK_NORMALIZED_COORDS_##A | CLK_ADDRESS_##B | CLK_FILTER_##C
-  const sampler_t \
-    s0 = S(TRUE,REPEAT,NEAREST),
-    s1 = S(TRUE,REPEAT,LINEAR),
-    s2 = S(TRUE,CLAMP,NEAREST),
-    s3 = S(TRUE,CLAMP,LINEAR),
-    s4 = S(TRUE,NONE,NEAREST),
-    s5 = S(TRUE,NONE,LINEAR),
-    s6 = S(TRUE,CLAMP_TO_EDGE,NEAREST),
-    s7 = S(TRUE,CLAMP_TO_EDGE,LINEAR),
-    s8 = S(TRUE,MIRRORED_REPEAT,NEAREST),
-    s9 = S(TRUE,MIRRORED_REPEAT,LINEAR),
-    s10 = S(FALSE,REPEAT,NEAREST),
-    s11 = S(FALSE,REPEAT,LINEAR),
-    s12 = S(FALSE,CLAMP,NEAREST),
-    s13 = S(FALSE,CLAMP,LINEAR),
-    s14 = S(FALSE,NONE,NEAREST),
-    s15 = S(FALSE,NONE,LINEAR),
-    s16 = S(FALSE,CLAMP_TO_EDGE,NEAREST),
-    s17 = S(FALSE,CLAMP_TO_EDGE,LINEAR),
-    s18 = S(FALSE,MIRRORED_REPEAT,NEAREST),
-    s19 = S(FALSE,MIRRORED_REPEAT,LINEAR);
-}
diff --git a/kernels/compiler_saturate.cl b/kernels/compiler_saturate.cl
deleted file mode 100644
index e9ffc4b..0000000
--- a/kernels/compiler_saturate.cl
+++ /dev/null
@@ -1,16 +0,0 @@
-#define TEST_TYPE(TYPE)                                                           \
-__kernel void test_##TYPE(__global TYPE *C, __global TYPE *A, __global TYPE *B) { \
-  int id = get_global_id(0);                                                      \
-  C[id] = add_sat(A[id], B[id]);                                                  \
-}
-
-TEST_TYPE(char)
-TEST_TYPE(uchar)
-TEST_TYPE(short)
-TEST_TYPE(ushort)
-TEST_TYPE(int)
-TEST_TYPE(uint)
-//TEST_TYPE(long)
-//TEST_TYPE(ulong)
-
-#undef TEST_TYPE
diff --git a/kernels/compiler_saturate_sub.cl b/kernels/compiler_saturate_sub.cl
deleted file mode 100644
index e20a76f..0000000
--- a/kernels/compiler_saturate_sub.cl
+++ /dev/null
@@ -1,16 +0,0 @@
-#define TEST_TYPE(TYPE)                                                           \
-__kernel void test_##TYPE(__global TYPE *C, __global TYPE *A, __global TYPE *B) { \
-  int id = get_global_id(0);                                                      \
-  C[id] = sub_sat(A[id], B[id]);                                                  \
-}
-
-TEST_TYPE(char)
-TEST_TYPE(uchar)
-TEST_TYPE(short)
-TEST_TYPE(ushort)
-TEST_TYPE(int)
-TEST_TYPE(uint)
-//TEST_TYPE(long)
-//TEST_TYPE(ulong)
-
-#undef TEST_TYPE
diff --git a/kernels/compiler_shift_right.cl b/kernels/compiler_shift_right.cl
deleted file mode 100644
index c109170..0000000
--- a/kernels/compiler_shift_right.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void compiler_shift_right(global uint *src, global int *dst) {
-    int i = get_global_id(0);
-    dst[i] = src[i] >> 24;
-}
diff --git a/kernels/compiler_short_scatter.cl b/kernels/compiler_short_scatter.cl
deleted file mode 100644
index 7dad029..0000000
--- a/kernels/compiler_short_scatter.cl
+++ /dev/null
@@ -1,7 +0,0 @@
-__kernel void
-compiler_short_scatter(__global short *dst)
-{
-  int id = (int) get_global_id(0);
-  dst[id] = (short) id;
-}
-
diff --git a/kernels/compiler_smoothstep.cl b/kernels/compiler_smoothstep.cl
deleted file mode 100644
index d3b7da4..0000000
--- a/kernels/compiler_smoothstep.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void compiler_smoothstep(global float *src1, global float *src2, global float *src3, global float *dst) {
-  int i = get_global_id(0);
-  dst[i] = smoothstep(src1[i], src2[i], src3[i]);
-}
diff --git a/kernels/compiler_step.cl b/kernels/compiler_step.cl
deleted file mode 100644
index ef77f05..0000000
--- a/kernels/compiler_step.cl
+++ /dev/null
@@ -1,38 +0,0 @@
-#define COMPILER_STEP_FUNC_N(TYPE, N) \
-    kernel void compiler_step_##TYPE##N ( \
-           global TYPE##N* edge, global TYPE##N* x, global TYPE##N* dst) { \
-        int i = get_global_id(0); \
-        dst[i] = step(edge[i], x[i]);     \
-    }
-
-kernel void compiler_step_float (global float* edge,
-                                 global float* x, global float* dst)
-{
-    int i = get_global_id(0);
-    dst[i] = step(edge[i], x[i]);
-}
-
-COMPILER_STEP_FUNC_N(float, 2)
-COMPILER_STEP_FUNC_N(float, 3)
-COMPILER_STEP_FUNC_N(float, 4)
-COMPILER_STEP_FUNC_N(float, 8)
-COMPILER_STEP_FUNC_N(float, 16)
-
-#define COMPILER_STEPF_FUNC_N(TYPE, N) \
-    kernel void compiler_stepf_##TYPE##N ( \
-           float edge, global TYPE##N* x, global TYPE##N* dst) { \
-        int i = get_global_id(0); \
-        dst[i] = step(edge, x[i]);     \
-    }
-
-kernel void compiler_stepf_float (float edge, global float* x, global float* dst)
-{
-    int i = get_global_id(0);
-    dst[i] = step(edge, x[i]);
-}
-
-COMPILER_STEPF_FUNC_N(float, 2)
-COMPILER_STEPF_FUNC_N(float, 3)
-COMPILER_STEPF_FUNC_N(float, 4)
-COMPILER_STEPF_FUNC_N(float, 8)
-COMPILER_STEPF_FUNC_N(float, 16)
diff --git a/kernels/compiler_structure_attributes.cl b/kernels/compiler_structure_attributes.cl
deleted file mode 100644
index a07dd88..0000000
--- a/kernels/compiler_structure_attributes.cl
+++ /dev/null
@@ -1,17 +0,0 @@
-#define X(x, y) x ## y
-#define NAME(x, y) X(x, y)
-#define S struct NAME(s, __LINE__) { \
-  char c;  \
-  int i;   \
-  float f; \
-}
-
-S __attribute__((aligned(16)));
-S __attribute__((aligned));
-S __attribute__((packed));
-S __attribute__((endian(host)));
-S __attribute__((endian(device)));
-S __attribute__((endian));
-
-__kernel void compiler_structure_attributes() {
-}
diff --git a/kernels/compiler_switch.cl b/kernels/compiler_switch.cl
deleted file mode 100644
index c28b431..0000000
--- a/kernels/compiler_switch.cl
+++ /dev/null
@@ -1,14 +0,0 @@
-__kernel void compiler_switch(__global int *dst, __global int *src)
-{
-  switch (get_global_id(0)) {
-    case 0: dst[get_global_id(0)] = src[get_global_id(0) + 4]; break;
-    case 1: dst[get_global_id(0)] = src[get_global_id(0) + 14]; break;
-    case 2: dst[get_global_id(0)] = src[get_global_id(0) + 13]; break;
-    case 6: dst[get_global_id(0)] = src[get_global_id(0) + 11]; break;
-    case 7: dst[get_global_id(0)] = src[get_global_id(0) + 10]; break;
-    case 10: dst[get_global_id(0)] = src[get_global_id(0) + 9]; break;
-    case 12: dst[get_global_id(0)] = src[get_global_id(0) + 6]; break;
-    default: dst[get_global_id(0)] = src[get_global_id(0) + 8]; break;
-  }
-}
-
diff --git a/kernels/compiler_type_casting.cl b/kernels/compiler_type_casting.cl
deleted file mode 100644
index 3cdb925..0000000
--- a/kernels/compiler_type_casting.cl
+++ /dev/null
@@ -1,19 +0,0 @@
-/* test OpenCL 1.1 Conversions & Type Casting Examples (section 6.2) */
-__kernel void compiler_type_casting() {
-  float f = 1.23456789f;
-  float g;
-
-  g = (float)f;
-  g = convert_float(f);
-  g = as_float(f);
-  
-  g = convert_float_rte(f);
-  g = convert_float_rtz(f);
-  g = convert_float_rtp(f);
-  g = convert_float_rtn(f);
-
-  g = convert_float_sat_rte(f);
-  g = convert_float_sat_rtz(f);
-  g = convert_float_sat_rtp(f);
-  g = convert_float_sat_rtn(f);
-}
diff --git a/kernels/compiler_uint16_copy.cl b/kernels/compiler_uint16_copy.cl
deleted file mode 100644
index 1072234..0000000
--- a/kernels/compiler_uint16_copy.cl
+++ /dev/null
@@ -1,8 +0,0 @@
-__kernel void
-compiler_uint16_copy(__global uint16 *src, __global uint16 *dst)
-{
-  int id = (int)get_global_id(0);
-  dst[id] = src[id];
-}
-
-
diff --git a/kernels/compiler_uint2_copy.cl b/kernels/compiler_uint2_copy.cl
deleted file mode 100644
index 7c5c5e3..0000000
--- a/kernels/compiler_uint2_copy.cl
+++ /dev/null
@@ -1,7 +0,0 @@
-__kernel void
-compiler_uint2_copy(__global uint2 *src, __global uint2 *dst)
-{
-  int id = (int)get_global_id(0);
-  dst[id] = src[id];
-}
-
diff --git a/kernels/compiler_uint3_copy.cl b/kernels/compiler_uint3_copy.cl
deleted file mode 100644
index 7dc71b2..0000000
--- a/kernels/compiler_uint3_copy.cl
+++ /dev/null
@@ -1,7 +0,0 @@
-__kernel void
-compiler_uint3_copy(__global uint3 *src, __global uint3 *dst)
-{
-  int id = (int)get_global_id(0);
-  dst[id] = src[id];
-}
-
diff --git a/kernels/compiler_uint3_unaligned_copy.cl b/kernels/compiler_uint3_unaligned_copy.cl
deleted file mode 100644
index a50f0ab..0000000
--- a/kernels/compiler_uint3_unaligned_copy.cl
+++ /dev/null
@@ -1,8 +0,0 @@
-__kernel void
-compiler_uint3_unaligned_copy(__global uint *src, __global uint *dst)
-{
-  const int id = (int)get_global_id(0);
-  const uint3 from = vload3(id, src);
-  vstore3(from, id, dst);
-}
-
diff --git a/kernels/compiler_uint8_copy.cl b/kernels/compiler_uint8_copy.cl
deleted file mode 100644
index 9eee538..0000000
--- a/kernels/compiler_uint8_copy.cl
+++ /dev/null
@@ -1,7 +0,0 @@
-__kernel void
-compiler_uint8_copy(__global uint8 *src, __global uint8 *dst)
-{
-  int id = (int)get_global_id(0);
-  dst[id] = src[id];
-}
-
diff --git a/kernels/compiler_unstructured_branch0.cl b/kernels/compiler_unstructured_branch0.cl
deleted file mode 100644
index 66da6e0..0000000
--- a/kernels/compiler_unstructured_branch0.cl
+++ /dev/null
@@ -1,14 +0,0 @@
-__kernel void
-compiler_unstructured_branch0(__global int *src, __global int *dst)
-{
-  int id = (int)get_global_id(0);
-  dst[id] = src[id];
-  if (dst[id] >= 0) goto label;
-
-  do {
-    dst[id] = 1;
-  label:
-    id += get_local_size(0);
-  } while (id < 32);
-}
-
diff --git a/kernels/compiler_unstructured_branch1.cl b/kernels/compiler_unstructured_branch1.cl
deleted file mode 100644
index fb937e0..0000000
--- a/kernels/compiler_unstructured_branch1.cl
+++ /dev/null
@@ -1,14 +0,0 @@
-__kernel void
-compiler_unstructured_branch1(__global int *src, __global int *dst)
-{
-  int id = (int)get_global_id(0);
-  dst[id] = src[id];
-  if (dst[id] >= 0) goto label1;
-  dst[id] = 1;
-  if (src[id] <= 2) goto label2;
-  label1:
-  dst[id] -= 2;
-  label2:
-  dst[id] += 2;
-}
-
diff --git a/kernels/compiler_unstructured_branch2.cl b/kernels/compiler_unstructured_branch2.cl
deleted file mode 100644
index 546f253..0000000
--- a/kernels/compiler_unstructured_branch2.cl
+++ /dev/null
@@ -1,18 +0,0 @@
-__kernel void
-compiler_unstructured_branch2(__global int *src, __global int *dst)
-{
-  int id = (int)get_global_id(0);
-  dst[id] = src[id];
-  if (dst[id] < 0) goto label1;
-  dst[id] = 1;
-  if (dst[id] > src[id]) goto label3;
-  dst[id]++;
-  if (src[id] <= 2) goto label2;
-  label1:
-  dst[id] -= 2;
-  label2:
-  dst[id] += 2;
-  label3:
-  dst[id] *= 3;
-}
-
diff --git a/kernels/compiler_unstructured_branch3.cl b/kernels/compiler_unstructured_branch3.cl
deleted file mode 100644
index 67b4761..0000000
--- a/kernels/compiler_unstructured_branch3.cl
+++ /dev/null
@@ -1,16 +0,0 @@
-__kernel void
-compiler_unstructured_branch3(__global int *src, __global int *dst)
-{
-  int id = (int)get_global_id(0);
-  dst[id] = src[id];
-  if (dst[id] >= 2) goto label1;
-  dst[id] = 1;
-  if (src[id] < 2) goto label2;
-  dst[id]--;
-  label1:
-  dst[id] -= 2;
-  label2:
-  dst[id] += 2;
-}
-
-
diff --git a/kernels/compiler_upsample_int.cl b/kernels/compiler_upsample_int.cl
deleted file mode 100644
index d7945b5..0000000
--- a/kernels/compiler_upsample_int.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void compiler_upsample_int(global short *src1, global ushort *src2, global int *dst) {
-  int i = get_global_id(0);
-  dst[i] = upsample(src1[i], src2[i]);
-}
diff --git a/kernels/compiler_upsample_long.cl b/kernels/compiler_upsample_long.cl
deleted file mode 100644
index 8f914e4..0000000
--- a/kernels/compiler_upsample_long.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-kernel void compiler_upsample_long(global int *src1, global uint *src2, global long *dst) {
-  int i = get_global_id(0);
-  dst[i] = upsample(src1[i], src2[i]);
-}
diff --git a/kernels/compiler_vect_compare.cl b/kernels/compiler_vect_compare.cl
deleted file mode 100644
index ae43ec6..0000000
--- a/kernels/compiler_vect_compare.cl
+++ /dev/null
@@ -1,7 +0,0 @@
-__kernel void
-compiler_vect_compare(__global int4 *src, __global int4 *dst)
-{
-  int4 test = (int4)(0,0,0,0);
-
-  dst[get_global_id(0)] = test < src[get_global_id(0)];
-}
diff --git a/kernels/compiler_vector_inc.cl b/kernels/compiler_vector_inc.cl
deleted file mode 100644
index 548dcb4..0000000
--- a/kernels/compiler_vector_inc.cl
+++ /dev/null
@@ -1,13 +0,0 @@
-kernel void compiler_vector_inc(global char *dst, global char *src) {
-    size_t i = get_global_id(0);
-    char2 dst2 = vload2(i, dst);
-    if (src[i] == 0)
-      dst2++;
-    else if(src[i] == 1)
-      ++dst2;
-    else if(src[i] == 2)
-      dst2--;
-    else
-      --dst2;
-    vstore2(dst2, i, dst);
-}
diff --git a/kernels/compiler_vector_load_store.cl b/kernels/compiler_vector_load_store.cl
deleted file mode 100644
index 964f5e7..0000000
--- a/kernels/compiler_vector_load_store.cl
+++ /dev/null
@@ -1,40 +0,0 @@
-/* test OpenCL 1.1 Vector Data Load/Store Functions (section 6.11.7) */
-#pragma OPENCL EXTENSION cl_khr_fp64 : enable
-#define OFFSET2(type)  (type ##2) {(type)1, (type)2}
-#define OFFSET3(type)  (type ##3) {(type)1, (type)2, (type)3}
-#define OFFSET4(type)  (type ##4) {(type)1, (type)2, (type)3, (type)4}
-#define OFFSET8(type)  (type ##8) {(type)1, (type)2, (type)3, (type)4, (type)5, (type)6, (type)7, (type)8}
-#define OFFSET16(type)  (type ##16)  {(type)1, (type)2, (type)3, (type)4, (type)5, (type)6, (type)7, (type)8, (type)9, (type)10, (type)11, (type)12, (type)13, (type)14, (type)15, (type)16}
-
-#define  TEST_TYPE(type, n) \
-__kernel void test_##type ##n(__global type *pin, \
-                            __global type *pout)  \
-{\
-  int x = get_global_id(0); \
-  type ##n value; \
-  value = vload ##n(x, pin); \
-  value += OFFSET ##n(type); \
-  vstore ##n(value, x, pout); \
-}
-
-#define TEST_ALL_TYPE(n) \
-  TEST_TYPE(char,n)  \
-  TEST_TYPE(uchar,n) \
-  TEST_TYPE(short,n) \
-  TEST_TYPE(ushort,n)\
-  TEST_TYPE(int,n)   \
-  TEST_TYPE(uint,n)  \
-  TEST_TYPE(float,n) \
-  TEST_TYPE(double,n)\
-  TEST_TYPE(long,n)  \
-  TEST_TYPE(ulong,n)
-
-#if 0
-  TEST_TYPE(half,n)
-#endif
-
-TEST_ALL_TYPE(2)
-TEST_ALL_TYPE(3)
-TEST_ALL_TYPE(4)
-TEST_ALL_TYPE(8)
-TEST_ALL_TYPE(16)
diff --git a/kernels/compiler_volatile.cl b/kernels/compiler_volatile.cl
deleted file mode 100644
index 84f7228..0000000
--- a/kernels/compiler_volatile.cl
+++ /dev/null
@@ -1,4 +0,0 @@
-__kernel void compiler_volatile(__global int *dst, __local volatile int *hop) {
-  hop[get_global_id(0)] = get_local_id(1);
-  dst[get_global_id(0)] = hop[get_local_id(0)];
-}
diff --git a/kernels/compiler_vote_all.cl b/kernels/compiler_vote_all.cl
deleted file mode 100644
index 1918c1c..0000000
--- a/kernels/compiler_vote_all.cl
+++ /dev/null
@@ -1,10 +0,0 @@
-__kernel void
-compiler_vote_all(__global uint *src, __global uint *dst)
-{
-  int id = (int)get_global_id(0);
-  if (__gen_ocl_all(id > 8))
-    dst[id] = src[id];
-  else
-    dst[id] = 0;
-}
-
diff --git a/kernels/compiler_vote_any.cl b/kernels/compiler_vote_any.cl
deleted file mode 100644
index 0a81e89..0000000
--- a/kernels/compiler_vote_any.cl
+++ /dev/null
@@ -1,10 +0,0 @@
-__kernel void
-compiler_vote_any(__global uint *src, __global uint *dst)
-{
-  int id = (int)get_global_id(0);
-  if (__gen_ocl_any(id > 6))
-    dst[id] = src[id];
-  else
-    dst[id] = 0;
-}
-
diff --git a/kernels/compiler_workitem_builtin.cl b/kernels/compiler_workitem_builtin.cl
deleted file mode 100644
index b01dd7d..0000000
--- a/kernels/compiler_workitem_builtin.cl
+++ /dev/null
@@ -1,12 +0,0 @@
-/* test case for OpenCL 1.1 work-item built-in functions */
-__kernel void compiler_workitem_builtin()
-{
-  uint x = get_work_dim();
-  size_t y = get_global_size(0);
-  y = get_global_id(0);
-  y = get_local_size(0);
-  y = get_local_id(0);
-  y = get_num_groups(0);
-  y = get_group_id(0);
-  y = get_global_offset(0);
-}
diff --git a/kernels/compiler_write_only_bytes.cl b/kernels/compiler_write_only_bytes.cl
deleted file mode 100644
index 555a9dc..0000000
--- a/kernels/compiler_write_only_bytes.cl
+++ /dev/null
@@ -1,6 +0,0 @@
-__kernel void
-compiler_write_only_bytes(__global char *dst)
-{
-    int id = (int)get_global_id(0);
-    dst[id] = 2;
-}
diff --git a/kernels/compiler_write_only_shorts.cl b/kernels/compiler_write_only_shorts.cl
deleted file mode 100644
index 205634d..0000000
--- a/kernels/compiler_write_only_shorts.cl
+++ /dev/null
@@ -1,6 +0,0 @@
-__kernel void
-compiler_write_only_shorts(__global short *dst)
-{
-    int id = (int)get_global_id(0);
-    dst[id] = 2;
-}
diff --git a/kernels/empty.cl b/kernels/empty.cl
deleted file mode 100644
index fd6f298..0000000
--- a/kernels/empty.cl
+++ /dev/null
@@ -1 +0,0 @@
-__kernel void empty() {}
diff --git a/kernels/lenna128x128.bmp b/kernels/lenna128x128.bmp
deleted file mode 100644
index c3d9c46078ae35590c987f1aa4525791c290b3f5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 49206
zcmZYI+sp1%wZL)r^}gIU`z{a#%@i##3<@$rg!DqYD7BJEqcTOoV;+`vGQ$&PTMM&;
zomR9d3UBg4Oba5c6|uaCb=5zzKXZQHckD+SuxH~ppZS|}jPDq8%=tX;s(txYm%eh=
zmP at tg`M(oK|Mwqf{Wp!ga at JY@^`HIUe%4%fEcf4k|98Lp-QWK9x8M8T_in!V=Buu{
z>Zzxm`pHjz^1oYt^{Zd`&lg^J;nSb~^wn2iecpNJz2`medEfiqchN-`U2 at 4K^h+<j
z)Fb`f?|%0cS6uPI4}S1n?|PR<o$q+ZJ3jp359 at j7JKuTv<(EJ5$RjVk^wRa$U;nw!
zea--4HgBDO{`qI0eYW=f?|;A5*>LNvx88mC-M8Fwi%vcCuYUEbU-`;cnEJ$)Z+zn$
z{`1jCAEjvP)EcA5;HRH{+T*vr^(~+B>wmWV at P|L-ORl}V<<(bT{l`E4aq85mzyJO3
zf8BEC%o$)f`}xm*o+T8I*IaYWl~-QLJO&dJzW(~_FTVI9ciw#SO*(^p`hgF8fVKQJ
z*z2Shb()0nCafp-jr5jIhW+k$zY_wV8u{dtPyXy at Kl{yZep3i2`0FQdVa|pNx6rXQ
zn<uC-7mgm!Ip-Xc`&2lL=g7CWQ1H=X<OLU8fUr>FuZP0akAM8*Ea%aE_ua=H{h#^F
zXBdwpK{&|tXP$Xx+B(f#XgvA|f4&%o*!REx{X_D<|NZa(^rt`l at sEG}+m_R(Pyg#*
z|I+H`CIi at s44p}MvX*(A(wbSU1kkkj6Nni3-uJ%uLm&E3<F#fmk9X-5VvGs#DU`e>
zRzV(rvl&Ug_O-7?UTfxG{_>Z?q2CN2`N&7Sj!D>Ag}k%}Sv1Rb0|Y`pQ*D8B&plVp
zg9*RPw~3fx-OSJuj{;#@I{r+$<BmHpzxUpIIi=HHh%no at Kgo|RnanqacqGC9&Ue0J
zcS|t*fANc72mxoI1E0Vc|B_z_xCs$-+C)!@$_(6e-gVbqC%4!FUc}!PP&8yq{EcZI
z#AXu8ZMWT~Et*0J4sK|a|Lkmj#$ygXQwhaFXc&3J4L6{KGqy!R2$*;A#TR2P5O#z)
zwX78*OCTS7Jq8pbgIO#8bsBFrQc!XMfACeFhaP&!Ld<3Wwq<xBV5jt!@Fz~32z$xD
z=s)p9`t#2}&oA)#2)=XzpHuPw%U}L7`H!UHgBvMnSvbM~SwSpq&c`2roI>oEfBy5I
z-Ze9WC6Ct)CKTf*1bWg<&TIVn%QaNl!#u9xZ$&v%{ww~b)yn at n@4ORy`R^64N0@>n
z at u<D_+G~AEk^B_%qh00iQ>cZ&M-t4sO at +MVHv^MQnD6Qj;Sub52m|<wvo^xj7WrSl
z&J at L8^7DcOAO9cx;0N-bU--ZB$}8G(9)F6;6MvLIkWqsXG&Vf=;DaV7=6v?qXVr>w
z!-U?o1x)zx!w&-<`A>Y}6J{VWukBNWofPFiM6iQTEMaMo6$-#RdChMxIKDVrs>^Bu
zS4zO)wFQ_>48u9diVxuOUu%qhlT&cEBE=TKA6`9#J$lp}i4=b!uory9ukt_OP^{AP
z%rleo8_%QQQyzQlF(DwGyfQ!dGA;NjKj6WqRQx&XT?-MctZPML3E02+&2JWkeU5$G
zLV(k~ZVPlG3yK#RPbm1C3jFvttyT!|N#f5ilXDY)GqVJL<mJCu$RaL?4(zdou51r`
zNVOhKV&(>DiJ%zl{v++31$Kmpcx1ehO{=}^vdg?H99ovg|A8$M#=Eva^*`p|w-G=?
zNn1Y!F7Ty2{#wQpA&{ki_`@H-C$2sCt2re<jEFG__9g^8 at kr<?CO1q8QuA$u;g8kY
zw71?G`Okj#vru#7lb`&g9`<`AbS=jfXP)BU;fp`t at n<vUW=n*|{YTMr`B7L(dy03J
z7ZIVvSttHFO|IYkXj|8(@?R7%*P~78UF79F_#Fpkqu3Gb6ejtvWiUsa!X80Z at I!&W
zjk%L_9lL<k!v)dN+GY52L`JFA_!Grn<;RT(0sive71YrKtl7$TtyO9*+KL at R;1g3x
zdm{f$;yU`}FMk<-cB((K1y~M(DDYx7f}KtPkAL~kar~{=`D;R!+Xx(a?z!h;E(#Dq
zClD0X242joPI}_6@`wW3-G3-B5|)7PU3xiC{@Wlv5+gHIk(gcmm-Av#L_)2+L<8g$
ztzqCZUZ-{{f0<thBtK}9fA|YQ`R}`crR{yFy-v&ta`Tt`R+pt(w*ryf0sQOmr-%-l
z?bDLn8JB{*?Z82g2z!h_R_2laTJJg(d at 9>z3#n$>3wGJpzy5WEV~!g{L{_s|EYK4L
zx{oM^36{=cp;OI~TFCDpEb<mo22I<R&r~zaF2G;5a3}GRN3Tm5^MnN}q6ZT__!Bz<
zJ!xME;xEB?G{s-q+Xa!Y1&#aOHP6Psnw{p4_o!bKP`c-ydn||88*jYf<bCb6*UX at f
z(L0yre_H@;O29GqNGJq<^#LMAno8><2G}_G%X}j9nXNS~^OOh}p at UZo2-Ic>rbps2
z#h5-42w9CAXh0EBqnqERV1}^T0 at 7P+!r@=SgKudySwFKq;-JMj_=j7d%!iA?_$O{Y
zZRb^bcJi0E6`yqV2MxwJQlqUc5M};s1f7IQmVlj<|CJ!R60|WNHOi5+XF0I)hb;QX
z`R_i7y!;>jUSl?ccLZKyaP>#Tk(BCS0#4+=R;L8EE7ciCGk`idGJ}N!e9X}{G7$w<
zS;Erhl<J}YxVG>W6#YE4v{pakk at pCG)kX-=@Tir#s)x3dS5n!(e5vwm_N$Su!++pY
z;veUXT%eEZzkcg_<Z1b!1j&EcYlpw at N*F5sjMwh1a7!U5B<*yFh!kaK=dWrY|BX at Y
zF=w{qcV^kPdboz6EdXrfaTbdXS@|3{pLR at B^mxV6_!~JT$Y2hd%F+}w$Oo0m_zoBF
z1;wL_=(<nrF9PL1eN%Z$Q$#8|;1dQTzb-xd+Eei<1d2amkykWiKAoGJ$Jr(^o8$+)
zD9lEfC53?gr7wNSi?BD9jgXEThO(Vd3?m>22RHW)SPgnggwn(|BLC?+#mmkLzBc|U
zk}C&G=JHv3LnPtdd64uj+9HS~+T76}f2- at HBOiRsed@?FAz_=TFgIIsnoX4P=Y=fl
zD*&_cw|D0LgF|WA7GNP^KX-<|{NdnSeh%}0*N;`YEgFB!kvEA57SO at oLfW=~Q@}zB
zjx)VLG#gzJWA>^t*IifsYkL$CUVQP3Uj&MeG84M^`-lx3v^tx?AO4KduUO&cEtIN4
z%<iaV66NZvuQr3uXp0d=+T)LQ^#^~8LM{JY7u9_HwFGeeS~K*Gm?AU`lN;&kPj?LU
zM<A*{5K&6|(1A~?KYSsQzngzQ`(O@~<R|VzHdns{g0HZcgkoC7Ulda6DI9FzvJjvr
zvZk`9hQGS{sZV{X`zPP01kDx at 3mCyMiByTdPB!3Nk4|DLXMyapir3-wVp55K9a}Yx
zQt>yf9zV4e1s at dx{CE04!e)c<H^5Y4iY at +Hm4^tfD6|)B0m;v*_^Z8qFWW<*^@x(g
zSIhW{53>sa_#7z&k{>8C at CCxs9G8%ma7)DBoI+qWLg`UEw@^Aux(Lxt9(-++%kXHU
zDg;HLuK;vgK&6#bQiyGArl|iJF#Nm!<cN*dk3Yee+s+Q4P(s^OCd3m=F)iCIWPq|0
ze`!w&0hdMAio5)*Q(I5)t3p~LMrHtC3RVBb!X&VWf>J=?KCvCNLIA$_?(|>zPl8|l
z!T+%Si-K>#?Kr;smJOO|rF!JGvk?RW|DwZ3%P~gl!eb*3|3YA}>qH?yJO1J&9HQXS
zrse|d!8ecbY~XD5zxu;??l6O?aCON+hRtZ>1{(4p6R(Sl9<BWMDS-MB(^?CB+rdZd
zw;jyv6#*^hwH_z)JBxiMWvaLE=T3V81je(Ol=c)x62_ahV|Oy27ahJOCtpy~`s0h`
z%xvA at O9M9z^bQ50z0^@7^9dKUEb*I<U!)Z`_y3|`74&r4yim^;z at IN3iPr&f+?brM
z-_p$RmY*8rJma(9_b(gV;V#J`C2X!f)5W4)0JXJ%!V_CtKtG`q%)#$QVSwZ}m;t6T
z1M;TQl6e$FCK1+}$4LCY at P#ip0%SYi!(mz(3ztWBR(uXCPw at Xe^Hm- at T2e{8R$&7#
zOeN3bKZ?n%;*sL4vAP5(|M5r0{(_wp0_8#+d1~^QGoH)CpYLV^-#i?w_%K8Ma{+%l
zS0Ygezx at 8tAzsB$XYk=Wu!KFf1I|_yP4LTkH7fYVfUgr_D;mHOI<Q4*q2KU9&`FmJ
z>}eO%2|J|+{+2UUr2r6VuT5|RU;axTIbU1yOZe))pL&!XTT)ETX$gsnk99?)E08&T
zHxIa(4-a~)6E6}rFv+{Fh>>q|3519k;8^h~B}djf`?sw4W98AJwmApw!Rin4!C!k|
z-~T)7eSe3`NSyJ<Tt%V_1ij>^kg{Fn=Tx!amqm>sf?|G<S=Cv*=x>q#i}mq!R0!Db
zu at q$<5dw2c$jW}?SM}K<fACiU!akJ;lP*8_%UCI7PQ{rG6(5Qo-<Q?=b^)ajSW5`B
z$V>Z4V_1k6tt`0UTcy^z{z{hd1`tV(ws&<RUl8@@ofa$J*%Z}JnXmY;nK9lnvKu4d
z#CR7@@f8RrNhee}g|m%jDvz}k;Xq8Q^6=djsJyVpJa)Yz48NL>fF6qEr0diYod&bn
zJn^US8vL-QGu1`Z7LYdm+7ok3oV;3JHZ5ltyUPI*e?SOpr6O)-FfH26Y0<=B9C#N-
zZ9NoTn>?|(I$u0WGt){cF02?_d8NUGqNl10g#<86zwZu?FvVvVo^=Wc0e8$}Jj*Gz
z0RAjNNvi8)lBvu?QEG6;oX#pGNKgG*uY)gGCNZHE*=Fg=4#<FuMY|yL4AY5^8 at 2R+
z-3&6n<cElYSW##%SeFY(Vm^Yrg&3*D-x5{_c2ikc6aoCXY&M03l- at 3r<$ScYg~M9X
zm@#_z6?_MAr-0+QDg+=_o$`F)h;IixB618#6 at W?leQR@@DtYW*Az+MF-MH<x+iY9Q
zLC11$Nq)X~)Z#`|o9euv<YtdzA?*dlTNIt#?=6e6!Gu~fl=fP-fzMh(_Yq14-*nSW
zu=EGt>d!=BPG0uALa>|!9~`rpq}Ezi*YX-V<O at Ok{drLZaM=0XKnp(FwUpvpt26;Z
zgh2hDwC^GWz8*nw5ct$y<33>qN3;y^sGT!Hn7G4QmY4s&0(f-(3XL3~Gm;nT45}-H
z`wTT3k5C1f2#Q!p!dg8Fmu*6ky at nC%!p?CmX)0r~u*dip0ybM3D at IBN^MD{0qCoK%
z0obkB$;*C<D7ZF&%-~u^n%Se2V}M-`DKgA3voU(SB9vt~mu&$$$W{T|DWJp=`kbLm
z at +shMi348=Y9lxo>_kTiN8B58(CUogI7^C%;$U~%#pOR21kNs?@Jl9mUA8zqy~R|J
zIigizOr at Tn3JZohtNB{l4m%WDUKrB}9$`pXLN_NfC|VX$!fqjY=cAA8Vy_T47Ud{7
zZ2?BAoK;H-F9bz&%+F5iYE7jr+-5T^bR~Z|X<A^tj<Cs5?dIdrrbrh3&A*70|5}jo
zpUO|~Q51+9DW39>M{RS4B|Nn{{sQgRY8A{AmuDM6J|OQ!!{lDHp$1B+;SpbSnn5SL
zMur{p6p19kBH*ncSl!Z$2{JguR9YOs at oA5AO7J^0`xa30%NZ3r_{zQz5cZ3RkG$3E
zEm~OjQY)<d;*=0*TMlrqn=sDPLWfMD5hFVOB>qZ}%I`Y`=E at Ec2zqzjjt0fh7-5pt
zd}o;Lz<sVsgZT5v%%wdSQrKW?$T|$=zsfJ?DPELILeL#j+M})Jh(e{tBi+oRX1pIf
zLBQWzM98ASn9QK)H*Nh|WITc+A`EbMBBB|8?gJ&yeG5kZZBj)NTr-gPdo(T4W6t=S
zxg5}`s at Sc{g_$X2LV!#<{>hHOY5<hpfD`0{-=kLk7Zh!}g}~QxTrxn^Pfzx;RgjnY
zwF;^FZ+=E1ujFb$E}t>XL1l+h*=ZwaMMM(be*5j<dvqZLAr8Zz4JOeN{L9Sd)RwxI
z76RmzLEksQmv2&~%ENv9(Pp{SEealq{AaLfO|AsV6Z1DYMJKDK{uGzt?;v*G1)M%n
zNXOs0MS(HIAq%yHFXscU=TKRdXbT(ilnpk5G$85^gGF4;!Jmk!DBv&uWs4{f{N+5!
z1w1Lrj+{qZ&ewXZ{`ZljEi2-H2`LZ7!VI-mA^Q6i9J-nVK2|1SBxhI7?VsHwKM at Eb
zW0gv)b3rWVKH`xJhS}^p&gOO7jpODNS at 9KUs~BKfubTvXsGCZQ|Ad1c`4slB%BRSe
z^OR~4*zuoM6`}{ta)g6ykk3vW)|zMPkL#k0l3lPf(r<SNxCF{}GpH?~xeLj2-tmRm
zN)v^Y{1mT<h1OraMOF=z at Ln{7)sev=1$m0xU{b-&Hb<?@H-pSC`OyZ7waPWfD;WFl
z!Z;XU#}WPPfyhnLJS=Q2Gq?BSZ at EHX46FR?U at GDBF8+d8!V5v+FkxbtD9|ZR0r{`a
z#~=3gf+!G)=c5S$B?q-u=QXzYyX9K0E$rqAzAfO<(%d)3*AsfbV+(<;YDddwIZvQw
zGt@$$Kv6u35yjyJi>xq at 3E2!jDH~x)DH*Ey)`EqF+P3E*e=ZY=fxr1#Vj<rPM8xB?
zb_Cr>wlS6DxTPgL{_ at KF#L`4!u&ql-{DU8Pgmnhry0Zn$f5;zRw@}U|9w}NunJDm=
zCB&lqjlbj(clqDRtM~|kjKv&4W7x at HhpAwxLOg{|dEuRKU~ascL-c65sb#a*8SHB9
zb*0Sw)~z6<u*6h!SmLk8Dq58Xf8ne0Q_v1REEGKi`~+|YcO9Zvf()}<r<H~L_+S<M
zxomUMEkxokYB&({kl>pNc^{ENpf&AC`7hP0`4r64ClHFyF8^-~fBBzq6IhFalYrUx
zFPlQmVF~`eh~eo_GXv(F0@)07f$))Y0sN#u*be$ZV>zqL;8SO at ckOpHR0F<)PvWn0
zCFK at _k$2jHY!Z;UjE3abdepz`&F%7mSOt9Y>tFxcUem*JohFn2D!<7Kgyn=-fBZc%
z32oEjU>88zyIQny at KH4<_!9_m^r=feynH0xIVa(dHp4z3=$&y|t7{oRLDijs&2rum
zp!ncV=cx=dMjC(gqaU at FOA+A6hyuY}@)MjZM96#8^3*UzRrLVGpFI2y<E~}Gpa1;l
zP>7v8#NRwC0Q<JtS8^uVbd?<#<L@$HD-nutG^RabPD;|2p<CUKD@)-e62`igQ{o7}
zNC_Z7kb=w+5fp`={`9Bxwg6>-Q>s4(_cg?)?)C$`Jnyu%5jb8590wFD$~4|lv>?a?
z{LLl=@*m-K0ou1vYpL5j1>YW#z}&~2FY2Cmp_cp<lw38PyrKiX)+585(SV4o3}KRk
z-g3-F+b`Jpt|oXi36n&`0I#@{#2 at O443bu#Hn6qwgsD>9BRG<lc!W{T=;Q*zHeF&}
z5Ofks*Cf9`n_u!9 at 7>5#%q+v3Upu?NHwBM{z}2F(SN|*c+L6c?1<Xg<@@&9g(A9re
zXd$o#67zTd8pAd<+(>L40q`OwqdXG2YJ)%cl_STZ!CVtB(J2bPh{5X|w-*F4{@qDR
z46(3^!4g<o=4&yLA#6y}>jWPqJ;Kd?Q5I`IKFdj2)P0F1<^S4d`x}|%*vx=}ZeK_|
z5jPT8Q;DD|guKZK6p4j|K<kkK#CW(S1O;N?QzD-dd^{%#@wXxal$|*O)E}KpGSX2c
z`5mJYn9YFe$F^z%yUiYaPANoo2j)^&fN~j3b^?Mt!b0HEH6f7pI0%F}eQI+2wUJlq
zVaK_RucZ?Z at F5h4DEM<9fA9suqf<CxhLT7qVduCC?9saH<US)^S#5!t*)BK+{}%qR
z_bmT~%#FpOmKKG!0NV6g{O35f=m=IF1U4!Ak;hyJ2vAx}RDUEb{+-2=--|+kIfX|u
zT+WLH0bkSz-5xQR at E2-_2(gNOHdw+W6=d at W9|**!qT{3hpZJb5{4o!{!m?}3^J*q#
z2Vq6Q0OTDvT4F7h=(h`;1yH*)Ypud0iwZhL^w}f3Dt%rtzvS1N`H;V<JO*D%tnA-{
ze=Abdf7r!hLO>y+pbft2N|D%Xuqghf<%>ntYG!u at k_l46NZEMfjW_xuxRH3OrK$~j
zlAJI2i-K?v{L6fmgkSPUh at AqRdS;W=OchO2Ih(|VV8RluxAa at F<Szu;LJ(o8f;l)0
zCUCU{%5x#0;GhHvv5yLYdT9Q{U8pV4qB<=afBnXH1W#m(g4Np&a-g6b<9`%1PT2ya
zlebfNgMUjCfAu8(LO_ulCRG3BKltT8-Aw}rNn%X-&kONFUV3*B>sfh!{q at y<j{>BX
zX^M%$$UFRn24}BS-fb(}Hkb7~7NHO?(Tu-H&9$GKm3?fJ$Y>Lt>VOy#gI!7~b^%`m
z2sdJYMLUJr*2b^+Gl2V+uqeHFK~0d?Mq6thE&h}I9?dKn%73lQZwqMK1&0AZ5<smG
zaM=-z4>-)0{PEYy95Gccq7i>JK{!}WKz1WCgIFLh?cIgU!+3i^zf87}OyiLr<wb#2
zZ9IyLPd&0$qB6jvPKwrw{p>UR<v;WIzL7jz{+FWg>h!5GI55msB_0j41+2m(1C${D
zl_nu(3>&P)Dbk|-_ at M5||9*|}mf#Nm$QJ at SF~B3SuA_}3lD{LM%8!3#AODIE1ryTJ
zlApm$;;%_~6o2s5pYq?<z+AY?e at Tlxynv%EpJgmds{efv at F}Mh9JJ*dXX#eak1f>B
zJ3B(o$j^iU$m=(ld10&sss9R^4CgW+6ksbpCBJ at SijmgfbcZkg<~N?;&qtHH_YxLL
z{_>w~!X!q%6fn#fJc;>d3monO{#tb4d(q4m5(4BUm9{M~{3isFua*46-`{^Zg}I8M
z{@^eFE!6#!NoYv;gq@<mQ^_x}`xYP~s*qRoa}ddP0Z)lnxL_V41U?lzmkp<_uVa?(
z@>BjZuUin3 at s|Kz2PBx0N7!<D3?n!YoV`MkMgEbk5CCPo9)?LL#mDLr1AGfHhIyPd
zh7BH>8evwc35CEU!<=qk^w`G1- at iG*U;f(#_$RPargbz#-V#=?_*hi>vDtFcKpfiz
z at wb<KYOrh<0u{-Mu;Zo&bNq=C1ir_Fk0rlAsO?bOYxWNK4Cu}y(|oP#^2Tzn6awT8
zwyxzO2_0t%)bc<0TGndyV?O*T-qIO=GpkYIGR!~oFggC1bBYeQ)>NuGQ+)&uo(wa&
zGf^uX;Fwd1C=dp-impv$NW~w23PIj3Xd?&#8U8pNh5%vtKj*Iy$bX at C{-S{xP{^|c
zllaRelb|H|ktd=cB3fy$;FSEllWD#V at X?CiWf&jX>?2~EtGBY$zXq>|F$Pcmk9Sjo
zm?85eNqmrDr(v+KZLl|jkIX6m!KVwHOA(umVKbBPSL(}ufiT7lok2cgl1G^@t8oy%
zL=Wa~lPokdfE)Y~{KK;#{vu+<;*Li3$8yeMb9Vk#g5qz{vJq;Re>#9xk^g<krErHX
z3Uqm5UwCxJ$@$WZvtnT_>Ft1Ht=WWF{u3vH66X&DtktiFh4?#e#5$N>Dfv+%EX1Ew
zH1r5f5H|jm|160=7u>Ss?eKSt;Ia(C--?2+HAceIb^26~3GD(*%&)BqnN7lArR^5P
zu$C at l;>8gGm|Y<M^~AsYM}v<lKQ~)W%C)(8giQC(>QDJ^JRo%S6ER6HmjH(dXUqXF
zB5t1MN4}OX6lXL=cHwU at Ukq5M;65h&LrMpMa$yUoLMCLJwZKHuLd5Qt!;Aj&&l^dY
zN7M~)@P`)%-?$YSijR1G`t)gGs{VN0JSOA<$DxjMCyx1TQk|^T4+|jp`%y@~G1x9E
z1p1LT+w1~?qkA10#(-~W{1cBtfV{T+2Xn-7T{epK!0-H>`U5_ZIhJs>mL5W&)GIq~
zn9gE~Er6|7KNs5LDk{YoD`IXWYne*d?;zl^q;jmY(@)d#%18LPidX*;!#4Ok>(@W*
zCrs^8M8IhaL>M3Z!MCjd#J?;pM)-3%^EiTknM}7s`DJTR*vS~S?U)~Z#V-E^!i03#
zDfXHf1RWe0oj81fx+qWx{)tt{@K=k(TK(}=SD@$e6Myr|Lo^KV<yY~M-mnlSLbrOm
zfX%>09sw~8yC at L-IGaapk=smFi at 1-oPfcQXC_%iypOJi@{O6Pj!9U~=dm*UB2Vn!C
zkpG3i82k|srt;rZU5$JT;E|;{PMCow(c>a&bqa%}giYZsSgJx60wnB_*A_d9U>Qsd
zz+V*Pzm^S!qd*`@@GlB1flCcP%zyB?rp(HJWK<`w7$YY|0en8Pihu?_fWQh35eWIO
z6Jb$+*JC{fi-ma{Jt~g at g!|&ceG6g5U{weKi&{wXgC at 5*2q}|{k=xAkI7;cQmEl#b
z@<0BzfaoB at Y_l1_eM^Wk{_-DKbxaQ(`S{}#Qns}Pv at 1?q*yBH~NFf8?DmIQ4F}FJA
zwG^%qKjVPuqQZvY%SJsiN1n{#%Rw&SZ?_t$_()(tgg_6@(!&p!$g4SV?g~^1GC!(L
z1OsdkjuU|v2*CNMB5A$ISv?f|9fI)M0)PJVpDk)RtPn$wZQRE^VOye~qBVa}5Hfko
z{x1LJzmLpA`U#8U$QJ^uo7vLJ4wJO{?E(st#Omcg&Yc1q`CA&hz;mrk76r*^>2hA%
zj)*^!D2cBcQWW$+%@Jmo{93Va=k!thy#f&?T9X at WmCBBk=7m((Mq7aF2qCZ$VDDZk
zK>bD(|9qr-%SaH~0!+09EN9yI+c?CEvefPdGjXdCjzZ8*VG{AFAAj&SmAAZWUl;(s
zBTNR$e2|5JFx%4Jq89=tNgK5&{=gn3{r)+qM?uj!wMb>Q%3l1a at h<*5<=1gQX$#;<
z*ucAg=a0F;MS<n<cSgv6a7um(`^|54>xzg8D>!^%Mj at cjzOWJGC!|_6hl7HmP4IUL
zYwav{GP at Ail~%-!O8}ag*ILIMk<2z=j<ZC>T at 1vF7*_s^0$oC~*8R{<mrD|F_^X8R
z=c#`DZOm>#bgM*D{u9Y>HfteIi9e-?Xo*5(7g&+lhI%Fn at kbu6>WL6olu7cl{5M$U
zCz9MG1{-4}1r4<6?NI%;t at QJjg>*{qL9LcTN^Au4BTv*HM}W>res0paYzuJK67lz!
zGKEOUfQ8z-vf2Q3FZdp12*RY?3%(yeofrP?vGW%q28$g#CAoPxEA;VatyBSAxi%+v
zCM)zy9?`*2?97vxWKrIya6R-CacNg(rzo)2O;2k;PE~)v$B=8mR}8VmA4xa=34z_M
z(?{iuw1?3np|c8bo3vu<l<^ZE)cC`z)Bp>$9!`0Lk#LG at cDG$%znAuQfnd>1=!<|q
zkg>sC$o)YSy7YP%BBru|B9leL05?o#>#<Gnr*L0R;;;UAi=Et5Ck2B0X0r<Zg3fsG
ziRFyJgv|*H4PY30QrevU9FMSFpiNMvXgd_ at wDg<>6k>)%q)dVy{v+5bFL>I3-7f6h
zN|3ei7badC))rXwZ@!rqIGBVl5UB%PFu#R-nZjQ(^BrX5m8LcY-FTe_xc?ZyLAuTY
z;VsL_a7)WHA%NE|@U6{?Y(NYs2FpxVIi at AK{HHUoVkO(X8-M2oYkeeMUcq09GYPRM
z)C};AkMROzfX<{S$QH(MN{-nhteRA};{ewNzbNRbE<q8ETDw3Rm`6B3gN{iQEz3##
zZD;vE;t_v?`KuHcvW<WJlj&an*vCG`Q{NhF?GnH$90{@%rQi&#%7d-E>N_v5J*vIZ
zkIRxxbi_g+xM^ujh~SC>VFNo2vulhuEn<cd{Xzq*{0CpI;_qDc`-88XJ_6Zztn_=F
zNz5Y<>=8j>wNFjn{PFi9MAZ{k5uCM{n=RD5Htocv)nSKP>v8RYy$e#_1`x)Khng?8
zfZ}fpP%Jd{2Y;4$SEN$3iO6!(&vz_Qve+gMg`oNmzWg^*OF)K#AkTec3Ju?3;k6Jz
zVIj=%w-e<*djvw!Al|BlE>>RDBLRr$!@>-&D2YN~2F8oK!B+7)r5Wg!lK}Pwn+3FC
zSyBj?3N;_WjC at fj*&@$nisQ0a7?}u4O62Jjzzc!&v#CAyO~?0N{CCnF{r+RZ_{%*v
zB at Dgjm0s7@<5K5p;qGDntP(-#*Dm9c;zQ at G)}jHAKlk<c2u%KJ<-Y;k;j-$%9{f8I
zgg|IaB4OB!Asf7_lO+PJ_~Q at 0*YPg|wkN+75JuW5-qI2ksWh-?|0F}U$DcyXTnHQ-
zrX`2`F+U7}k1U$NPWjP~el+}D(k2iw<OQK?8SgKB%`fe<Toq!rL&1HCzd0^g{R-M!
z9=&TvNFLjt<8sd{;)SY{*CQ{8%vXOf_afK$#dodH7+KjtzSEiFUFWH^#DABcSH!|2
z-9k{in4!&0(Px8cS?HK>7BfTir9F}Vxx*3zx;ydIEA|2#z}K4Gr*x(YftE?dLd!z0
zh#<%#l9OHtaHdcGdnAC1Q8Ms-$;G at YXvvRZ^~Y2ui9fHI%@O%;fNU{_LL9Y4ke&hv
zDM^s=7XIw#kqJ?fY3 at 8+#vgEs3|Do#<3UX^p8HCHie#7pZXKw$A7SUngg~8f!-Uir
z(U;O-vH|vl@!-q+T8d4i6|W-2qag20U;pyT((*ysWRC(xXAeb6s7uPY{b)Hk$*CmH
zTGP7U_DBzY{Ivq7?699Aj<81_Jt7v$qmzqAk_UgHfN<O@(hO(Tf;qq`yfBH^wFrQZ
zvm-#O>RJUx_6xVVWPsN}_7=`!B*QtV2L!rKkE*Uz<bE4Ozl`c;RTTJT3#dY<W|B|M
zW;sDGXOI^HZI$0h0=~zN15tn?{&K*I@<9&+EG^qf{JR*iP(I**p%5IBr!&dD$lp(`
z?rvEK%m%yhllJLa5d at s581clA0WOWw$%Gl7zaF_}K+YOgyu409RV(W#%9jvy1J{F_
zYdpunaRp+wjFqJhUvcrJKsmAzv?8Jvso`%7e`TEkP>8S8VhJ~;mO^bW)Jj@=R?ZM<
zNnlSl^`i!P{J|$Kt6B-ha$v!?F3S<KgXDw9`1_O%9vh|vfhoHXuJSO3&|zmAi9g6T
z%aB)%=`!CDP_eQ!DSIhk0t;H_ubU+JT|teX`%m?!v<EyfN&Fc`NsRF~R(r~$v_YPO
zR=2g?Il1gxr&fB41!s-tCV`!#=rlkTLdIH{qs?Cm!5?id>vTDx2*FeyA#k6BU8-;D
z>lT!vbyYJDm!-FTCo9BPnpw9rpvZq>KY~vTW3w@&ER_!?5eo|JL?HB#Nqbwef};n?
zwuaDvMqnql0CAU4e?-b8;P)p0O7-7?>+)0m at uHA{gUO2G)^WCd%71|<7AlYJV3!Gj
zU7!lt1@@8T?<Y_pkYJ7m%xwW)>w%>JDFxu`*RskCB}V*BE(B^3)clfQ9B=1p<vsFR
z*wH?Of9A{?k07)Vu>9hwmR`aSf8>RrO~J^jhn77e9(hZ<=alW*j4_7v7<O$T(3ZLw
zq6faVT$SqPECg)<kLVeIn=x#Tzn)}z%KXS{g^Z^nQfQ<NMF<Kd2W at u#I at i#q>+xtW
ztPODCg-Q_qTE~!G;3JtJe5^uMEBUp=&!n~h;h-(R_ at V%EQ8<L(77!ZA=7!J)v at 6Z#
z;)FIcv@*XEM5#vz*x4-z5NqMD4SRP>V95kRKG+luqZ_QXcL?&xh{E0hH+mEW1>8oq
z+118eqr at L`{26Q*8`?Yg_aa4)JT#|COzTnR`*%kkVJ{qd6e5#gF4^pQ+uscQ0$d2}
z{f=F}8>2`4cXohp3;0OVilAM<DO*+kw*}&_)laHI;FI9j+6eJSo2d-2bhMGNPp#`Q
zfn5Srf-J3*89F7BG*DG61a&1n<_HtS5_2+12t4ZdNP$<atL*TdQW}^4{rwSq<P)!0
z%gD)p2|sV?_j<cYs|0ll>sJ~48|?C5ID9G!Y6#<HnoGEX20PB2!l5)15!r}5(Furf
zi;H7I2>gWNs?QO=SAQs-wuJy#`EM66e)xkg;b#}njp2o98DKeu!iyX{W`FeWBETm)
zl^}x&d-^d`6qq5~B{R0nXlc0U+R6Nw8*I^{({Y9g2|irxk*M<DJowM=KVDIkeCqHO
zBY9iw^z>FUn9A$mX!ZC-$PbT_O|BY=yjvpju-gJQf*zU7qku#0Tt>rSJ6+=8 at 6i(Y
zOFy|s3V}{3B$Se$sr@>Hza-QON3p<P4!}O*3e;I3qbyWelK{37CS0>9lhB6U?vN4`
zEdz)^lrZ4St7^`mhP at 02P-p!mzkUj<z_gHdG8RmhAm;qVgeA(X<iWpPU>=!<yz~$P
zMjEdQwFQa=<|Y&ZR at nk{{1qSd-;cwg_QfB6ZNDWdq5926N_egz at 3aL!MUM$#hb00#
z2<MprG$*)>D*v6xZaZPepU!0*1gOlf5DA1w0|4ZU`PCd#aZo_rmRE{jaDi2zhMlOE
z>4HL-!CH<mo*CdU04Qr6roGh*hqe$f)!?>(Efar<gnT4X^-luuKg at qK+hSM&4gyw&
z5s#h4lG6+xO@)<d%YU^c`1pI>%xv~4v*j(XB|n7=QW1eevB$Y71UlObn7Eec)PiOJ
zV_K1?*s^n~5at4*tw$`R{qPq8gQW_LDv7L9d}OkDn5W8tZ!=m8_Emj${tJYDtq at q6
z%l(+_EqIAJ3BvT4Ye at l;@Wi9>6wAfGHhQRb|CIdAW(&}TLwfjB{%fm33 at 8fTr9(l?
z1}y$QA~FqpVt|5!f5l(!!A``BFh<Kwv?afQ!W(Bg6lUf)8a{O$5)mzNE;CHRNPcyO
zP;l;c$_17ef<D!PZ-7HwBDwT3jA9Z77|dWb2YHK%xJ6l2 at +*>he58|YVkd0~r!2Hd
z|9{OFg0ejYb5W2I$|LxNKmx#}8c>))xQSBrpD~pnt^6PUtd;iVd~e}QsYTu-9wn9J
z_cb&3`CI<C1=N2^A!rwP#iPkp9*}*_;k7&$ud>mKdXN{IZbS|OpIXj_Vyz7C6ae3%
zlApq5df{k02!ZY30?Z2xP0KZzj6XLG76LyGI2SC}7N8J;@F)ayAz-I<?Q4#JU(Pe5
zK!}K*GQW}tyNDnke1YIH^1&AfX{;Uo<-ZAS0fsq$!IAj{YJ;^z;X;7YF5rb}jTDG7
zpADR1qybt{sBF at WaUy%P9sIcje|rZL{BhRW=CY2bYJwiLIW8!A=tV~q_+>V!C<K%F
zVdn++d4ai)CO|9%ld}{dV75)f%~H<S4SymRf=T!tfrVW%s6S%CFz>?1c;_kX(JmIF
zPtDOYnNJ~T6ZEv85ekzWzAwJ`qDu?2v#0#Gocg2fu)ve_V*Irpbx!5C(}@V0%12Bk
z9lHP`kDFE$WS|?VC>S6FXoIgDfo!v at 26~*f^#~1U>JJ(Q*sxyL9)>`k3jzMq7MlL;
zfk<)F%wFUX+W>(`DD#@x{)%mWp|22u->Kv+;qZ|VsGK$n8Q^V%b^+bA<-8ujD)|@v
zWBz*w9Q~N!-i|-oY&d!H<ZJ;wps}<3-{4pNQ?w-PT4G<jFu3E{$P&r734|T at lEkhD
zT)|O)x(mhM0O7C%_<Yf6t#$#<`~{i&;KNl2#KHg}kpBfj8S$cQ at 2G{n5=0?*YRi8u
z at h4+3QYR}xj$o_z-I?PQ<0&{3n}q?eQz}h#hS at k=V{^c*?v=JcJ)zbXg?WrWT$O8z
zy^o}yj)h4yWxgmJp1)`h|7uR;y*nW=#-n{SC$D|&2W at i-gjh>;@Due1v2+Ue=~_<7
zWMM)^+QaKO;J$pbu1M)u0qAy$79T$#3xw$KOIxa|IXHtX5U`By$BGqzS6`(lk_L;N
z-DfIs*IFHa6=3b&mtPKhIe@?Ax_#+U30L+%zW$f8z{eaqf;L^xU@!A!vi`yWRK-7l
zXvqKmdW$>}0#fy0p~UX~k9M4UaVBB8k7ShO_qB^_jQ65&0P9PEoNo(&T>bG8r4ZN!
zDcrHI at fQe+832bGe>pGnU3;vh^(YBDtnnv;1-Pw*>XaI&i-<OT(ci*O|FVKu6nrAb
z{Eu^*U#f_j-NafoA9jH#78aENTAl0!pPdMo{P=@xzjxq at 0?`A0`R^k-Zg5#>VEPA3
zob?g-rW(=1BZjHT+W0#KV4;gbCxRVBH^A3kAs|r5{7yGx5SHhb!(6{P0jHDl-vG|K
zEa_nh*8p)YOHPx-+((gj3qo6`Jt8#D2)m%<v at TDzG8{lc*Fr7?^xD}7Ql%(xnR#3&
z5GMDf%wT7MwJd=@?1W-Vinx);w*>$Xbs?Bk54+Bk+MvZ>9zw at Q?jsX_8&L8SyTHDH
zT4A at G7Yjl8Zw5-O<ahY`+RG!N{yWM|NbE1GMA&%1 at mG|rSmslNqd>?I*xAW1gDooG
zY<7n%MEEmRYf)JGJC08k1c)$Eg3#tKbc_DxAACK89{fs>7Jn@{b?Ovu69pSq`SM>6
zw*{QV$iuD*d8Am*c@%uDs^wiGB3!8Eq<cJ!g2#wih*B$oF~Mq8pI!U`q?G at dSAP_u
z#>ZbjDFhV!ZEBUryCR5x0y2 at kT9EC&P|J4Yeeu`N1)b8K3sA%E_^`Fbf^G>q{?1A^
zH{Lad!NOrYQ|%hXS<;#lXY+^xs!Z}I^TG7EYtL%Z%NA|?eQj}dF>M>cLSFQB#^!SP
z#$O0lG1|L89k7rpG^j0#Fsa95u{aC?hKYRUj<)+x{7ZY8AAgxy{kH{-Bt;Dq;;|5D
z*<9wwU+jE$fKhP0LPtgvU=K9~_B!kLibt(<LY2U7211ec&I110>726V4FjB=DRkl^
ztzgLnFrmgDUTsncCKkbWDI)fQgtuIV2|ZKwsB%gi=0a?*34vHp*yG5?zYwsk%3lbk
z<&i)LL9swX5~3PR=+p;whQE at EJB$~F_{*#KGbYr%1-{2Q2m};=$yV*!%$~BRfc49U
zy)2i65_1M~N<Y+D=n-DY&rXi$#}i~aOA3k!*`u at 6qIl%50S41CXFmr=_$zx2Ak`wR
z5ZDMQbc#SA-$qb^+QKHWkojwk>3k6gQE&jY7hC}NWemSsH~xn<_>?91n=J(^+)#}k
zMNjvC{LBC0uODaiM};>`;JmeSe|_QdNEcA8`eUndgbn6F41fKGIRcD~KT|1!0y`aK
zk3<NBhUIu_Vb>Z^G8d6DA5Vj&H;?$`(S_3hE#2+iiz1 at +F33ee8|`)keU$iXaVB<w
zcg<ghh!?-)zqBU~0>yuHTfk;vrxxls7dVsDqmzJN2x0;|Zj-<dJn(?Q%;ti2`1?yb
z{?$VyWperNU5}<BwvR`{hQAO1Xz!?O#(Q0%mMT0F6xIg6)}y6mZ?Tw6_LnTiuo+tl
zp}?rs$vdxzi2lAY;m>j(=}Zik22KrZ^*|~dGF+a=A6rofdt1Or{7nd#nH^6iG+5 at _
z0`7q>UA`9+8$lGD!VW3M at FL*ak;r?bXt}AyjU1*idO$JNFpGk(bp&82E{FV$j5%fW
zdT at 6C>EK4vZ1^kwGGEmEb;edQrVtc`0%35*+XXE2$Vj+K815%b(y6{_4e+R6OGlLg
zua+(lz!Dhy$SVYP10p}yp5afKPBEI9O{?Fh_)C7wkv~)%3U+Q;#2CV`3K69c at Qcv3
zaDfj6rClI_ah6W;=Oc-~bHNyguN)RNvGA65q(`yP!$JH-4SW?wOwFwL7^8g2e+jQg
z3w7{WSiuiFo&C}{VmhlTp~i$#J<(4$%p*aYt_2EnqSJUn at ezgZBEm@X%lQFrKwCf$
zr7b}5Rz2=TPT>-Mz6&^i?E(jZxNwl!Jjx4(E!_JAq5G&u3c?1HO1Bm_Oe81%3?txo
z3b+y7ci(-`fiDU%- at 9j3o;DHkUMG~cF#giJns0uY?^EIMMHqI3J+jks4A!G^iby at E
zQo at Cp-1E2~ZeiQ8y8g4!KuXGXBnfC*A!y9*TLJPqor0}T4YL=3^_b;)h{rZUBgG4U
zf;0GKzHb4QAYV^(It3g_AajbaA9kV#b3(D5i-OFDE`Tc%`vAqqi;Mm-f5zjlhQMC^
z7lMKBE&coLRsYe(A9juiF~y_7Di1{z3?O3Ro+GC8ZRz^2Fo=lO7G^e6ty}G-Fh)Cq
zUOLw(_{7$Wlkj at N*r!^L(H5ron^sTd$d48NG$RU_Gah{7<3FwM^~9IEDvz8eP6V}x
z2!ucAxF7O}<<f~4>JK9;IFa{AA;TXTd|*Tae-OwDz!na=#vlnJ@@;{tRw46x{Jky&
z#Haq*gQz*RJ+`@Y(iI=$wI=M5F1Ib=JoR-LLkF3a*<fj)+}=F`Wfw5sfD&F$QK*Hh
zl5UK*e2TMHzsGv$BM4i9k-m~BHGW|bBO=4;KGkVL at Z-O8fBo;->c?NTkAGXBU7(+I
ze?wTFGlt+_2<p*VI)-fl06iijC)r~_ at aOxNx}^T#-~GS0jK|QsVn at M0F%@eo{zmqx
z0WLrN3TG8!PVkB7%NhJFsuoEbdtun>ga!P_Lpt|KogQP06$Q7h?sRXVttX7KI`|cK
z1L9wHnG<It3mMMDc%2m`3a8ov{+&i?uL_9*=2L~v-v7fL!YZlS0$|z&q!945LWI(k
z4kSY=Ee!}hAY2v#7TOmjKmHRkiJg at H2*WD`W|RNsp&Rd0ui)&_JT`@;@dufO`jveH
z*l9)BDO!PGhU5=#;h<MN7^VjwJ%kcowCP$|R|3;14KRidtU4n-SO^rwzGIbN`Fv`;
z5Kz!IOf>b76^~P=@OQg*1YnN5ADy&q0g6qb5c!#iYh{sLur|Q)LCm$Hpr6Z0 at Zt67
zp2ME_BTwk;M9HUxz&EUbdvO$jXbT`rcLnvXgg2mmfxzE9j at lF<=pe>l;0$9Yun5Z*
z35l>$gGTT%q>mUJd2l4By&!vuVTt|*fQh`vfzJ%g<v$>@%a)gTZiDDK>2S7+NrZq@
zn#^F8LJ)u70sx;QxV<0>K6MZy47CJfCuQ<~_ at gKP!;Wn_GZ=<Bdc2N53*8}M at Ao$(
zB`~mu-yP6{9axHwyvShu%^ZLFU`M{RS9zq0+!F$UGZJ>IS8W&|77{5%>y$)>0xW@)
z4pg|bdaO%yqK#PXz?Z<jj99BO%QZl>9A}<?{NU$PRAoNYDwy#UkHlW6{um=tQ+$NL
zc2Ie|=prNpJ_U#6q96ptqU5)nM>>oIpF|*pKuwna#t<A*+MWh?|ECy9CjTe-LB=ov
zfm8H}%Y=ZZK9c;R;2Vb!s5W{iKJrBs)kH-C!7ixa=!6|-ZAnh=oZZw{l1o<~QS5~h
z-bX3unN1dP6LZoQ=r44ZcDsNMNrZic!5l+V6$N`CMg8vz3N-=WaX^vzLg3LPT3e|j
zMwN at Cy+G*t(OUu70>0ywDizUYm@#b`iuxmAe9AmRk^jeWTR&e*_(BkQ2_~^+3y+M9
zKb;uR8BzWNPO3seU>DqT&plod0(RO3d at m4yi-I;m7+!j);Z3hZ$XLwjY at nM2ItqH(
zkH6(W;GJxYKa+e49kxOMvdKl00p|B^0*mOxA7t1uFA6G>O`($_7C=EK|J{fj$C0;U
z0-yoNYl)?$G!*d{0t*p?^)R?GhE=j)kG6T}xRvVRh1#Eh#XbIw)LEn`N)Xx!BSk^}
zV?r at lzd!#?&PTqqAO7Hgtg{e+>`^<9^x&tUC!fLLrZlq_?3Dt}7JWV%AO!9+j!{vt
z3%qC^3sJ<;_5mMWE$oSd*jw}>Lh&dTs*qA61pKmA<OPCmtw>S`ut<U+D_~cAsy`}#
z9tPVW#xyME5*uE+7PQFsmz02;0r1Y&*#**!2m#0jGpzHSVj*ooF-A<43&5p1_d8)J
z5)$gS(S}HtR`3BQ9<}<*Tdj?WUT(?_%PB7$gh(t at LL2}j;0uAl?ALFA068*5N{cQ2
z1|Y298-Emry%*+OFo}`e at ouh}r<9gj){1|v<5e2tto~c2t6=fM2d-j-f6N(XJYNW%
zU~U-MfY<+%R)`8j(J4Um#)Hqca)X8Cq({0aB({moi#dbwr`QWJyeJ6GCcQErd10EG
zBT;4h at K5*sl(P&lt@$zMpb)^~(cb4Bs(#XOq^cq8l#qa{04a2DaSi`Mu)}rqb*zZ!
zfxW$8DqDjK5?-sWx=~wHX5vZMV?SD#j-*(Nluw1p9fsE)Ey`fD<wN5GD5X=n2zl&;
zby$?)-ol*tNT<-yWi=%Th7|%W0z)2(`t=y&Bg{!D4ZeNh5ne6$k{tZQSVUep1fu+R
zd4N=!F-AF6kYR^KvH`+J3*q1-mACi<A|(nF2oBTW8}G3_q69%bTR>;^UuX_%5k9sX
zF`E_DA6po9CTU at 3Rs7xmS!JXUboq=wdWJC%e}RCV7kUyfi8FU)|1K<i at d^P at kGSZe
z$ocrgOXw*+rNke6!c=>KwG`IUD?|YYmV&vqT|glMfxJ)S?~&loJITXeo-)Jy(iln3
zQgWFMK7|y2kut1mYyk4iunW-e$SNNpkMmqRyLs9IqCod45d{%(K>JZe at _QXy;T8f{
zdR7rgt&1&~rago&3I?l41{-D!DbEW*`R_%F5KR6{Fz(n*gd-z5iARHd-(;0 at wj*Ph
z^HjwX3)afg62{G+0u<(cC at a-nZzMlKUJE<gN)06)d0Qs4bC#)AFOyBkJ5eAOWtfrR
zqsO-DAu|kSiRuwOd??<Phxm&Z;5d7$%jYCNCHVUNjS?Kcj(Xi%Ubmr~M^-EZZ3Nu-
z9(J}-{Obk$RT7pr*vJmt;1>u%p(roFau9aOU)qbEPwV%QZ34Ay*VA6uF<DLd&pe+Z
z?~$DpCE6B9^q`Hr5Om;9s#8Qq2-F+`zF72~h2?PZlo!^OX41IIPa#&Zs9~UK*~tt7
zH6Rq+1fp;luV0Hiu-!I=Ad&WkfKq|FZ2#AJTwvfek1S$<X;Ed8<si+%{{D`<;zRuY
zZz1b?(H^md8_Ww*&Wpw1<r?hrnf+cV3bhj&9~p)=MJogg{qYyEj$@BvM2E#zC7r*N
zioe8&vpkpi9k1Y*_M#Jio at OxkL{_ub<ZW}V$$S`#yM7M(3T&s-dF^#A0Zs9t)Ka{Q
z5*H$@?4XTvA;8}`B04&W09|p#`Y-k1JViCIQj~>O6bQBzpdbJE#~e(oVmVatFP98M
zUdtmS1%fgmU=q}FDTZ2edYu?-Iil<s));LUA&NA!L)A%ok0n3&aus=BbtON=T`2QJ
z0c|bv@?Yy4lSj$#kyFmTEL;KDA;_fi5Cj`a6!_?`5`MQ4f-Luu(8$u5)0t;j(xx!R
zD`-0flp2CR>_n&5qX6|0{)9>9u_CZ+kO_jKQwZ28>va0)82_sO*6Qz%;wV^#k;+a=
zI=rN;MlUaV1YbE-h&&dl(tcxJBRvw2$}IEr#J`_|7^C>WUh9!gB)r4dT}UBX73cK&
zlB)%uFqL0nw`gg at LJM&dIuHo{<vH8h(d`aqU~U+}yu+6=QShnP_2BHwa-7=;dgOmq
zh~7u&DONfGx1#cbt;tm(rgj%9|2e4a_f5e75z#L|)gR2cvtqEnd2x{0hvh|vt2r2k
zonI7><}3up8>7e4p^mmz!h^#{t(>>C3o}Gj9{CS=Klo7W1#Phqg$aZxINE{<IBQ9v
z7X?aexz9&SAc;9kh;<?5wN8pp<4>RB<Mj>#J#6!?B2yuXc~z)bv?&ar$bSR;d|@HE
zgtN&V#5SoAFj$`J(NE$}k^cb7CH%F*#~ltLF9dDyoaLH85aWf6q~J_pwqZU6Uu&?+
zQ}IDb*~zbBk*@M2%)pt=!@NQie7b5w><DHvl3|RL>Sj)?=;+6PAj at 8P$X}2PI+7GQ
zP-44y&?_~;hn>PU;Siu=r(B~~o{IwP6 at QBF5%G5gDg+(YLLmRS)9T=uL53q{&PD%N
z3}A-17!d!J_s9Qgl)^hsm0*y@);x5(ASn<gA^H&(5pv?hiOLSIbrQ#umV*?Q5QuDn
zGT$wfqWDh~<Ui)35PU&A=DmIoQPSCC#RAb*jlY>e#*=`IJVk41F2hSWuAQ{^Xv{qJ
zkshd=LDEuggRI4T$cu|_!5st at B0B!wY70<o0hu`$q+|9+|5^PvfAz;O*ga|`e|2^8
zpLc}Um?uI|UbPo&9OR`vEG56=c(Y&sjXc;R?;xfGA8 at s$5U{D7FA8+AAO;|B&Jku<
zkq88xh4D8m+OUTjL)bmmS`=Gjv;_8;7mgl{6hZyOzqCJd=8Ql2Nm1|#&ajW at 5fP6R
z0jl3V9sUSo!aT&7L_)7Z5|08@{kOF{skuW$!CR#KhmpS~0fB<Ngy%b7bS at VA|2dJR
z&1tZYB9FE)WaD4|WAE`-e9+J`6=4eOn9mU)`H2ZpHCw1DBjrDPe8k{lRFMZ9J%qs&
z0t-QEX`OoXQ;<0fK`$Ci at hOA-K<dQDzYr|?o4>YGKnr-qr(Mw3wAiv7YKvOM;fPXO
zKK}mgpN|NPkq4Yi&KCks5e}Ane8(AlZ1qq~E559azt$Lc8*3R;+SAKJkge#EFwg&}
zl;7NxAlQXKAY?mTAQT at JNu;cfm?g}nHMtcFK_*F$ZR2Y6umt>;@FJa96w;2}>c1Y3
zlmFhLYq8P_fk(;Tf6X6%Rj7*);FbMC060Ym6o0MI7=V9}y9l)f<hePm>(fHx(&8h;
zV7I at tn3wPr^+!uM#b3!Lh!o?AJ0}jL5|pl=@pOtd9RxQ|BmvYTH0~9dhdIs?UR>OQ
z!Y&FzpvSrvwW1lcCe&I^6tvT$(9wfm(Sthdq9E>E#+>LcE{FNAhgD%m!x)0Uf1)P&
z<FEes2#T^DWT*-9&VnK$D0=85yg2udY%PJj8MGW9{uCeaOWCmnWd33DZ}w|btLkN%
zcED0V2zZ<aI2wAmAmR=4Q9D8%V1vsi<^*sdNC0ma7|;pgT~mQCaArf&JQmd!g0_P(
zna5PR#4wm&#%oFZEiEXb;OBRaqoK#-$QwzlOIWToOu`3WD at o8WSPOFe=fD+(;MX62
zA?Ti8rm-P0b3G}{;Ev2s%x^nu33pNkK1H#Dg?Njp{G~@j4-3mrdSc8-9~tZ*=m&E_
zft^4BvMT4TCa3fw1y2ik^sY~59-SpWg>7y`4J%mE*tB^~;cub`|3Uz at Vfxz<mhh<4
z?;cft at C70i-6f<b!r&81RY+U?sndk`6RUI=#XL*&NB{%$$c^FOz1p=0bG}5rD73oH
z$nX&p5D0^{9tpj+0n?Mxu*T4vsw-<V2iChjtx{3S at ZyWAsdN(a80nP`CO@<?(mY0%
z%>8c^^E3{T*XmLID10v{6lvov<fjUi{NNMG503d|rbU^7l5YW_uKwe%$1YHg=oW<+
zYN=%{A<*j77JW()iNE at z{_pa0^uO0M{H^6g$W87ufN;F}4+VRop-p^BiBc^r-qqhn
zX7C8tbm}po!Ni1s2tmsQ--P;&F;Y)0#e{U38UHF3u$7%$uI2LVf)spoCdPwr3CXW2
zR{6mf2xn07wby*tV4GngQssC5m-z&C+d&lco8RPGXPMOr1 at NSG1;V36xvBV6|Di^{
z5>(pvNav=J_|$To8KVc*BPLh at 6)`<tq?440=}$Z+9=&Bw43lC(*Xeb`jH&feQSfM5
z0+E0kT>iJ&^PLVd!dkxD0?5=eD2$Q+L_g;H%6SHVH#7ve-*-t1;ZKxMndw__7artE
zA<&wHw0eQCXtBWDM-0$Uw=Sn#b>iPzmLrkZ60Q-e8_dU8!9^(wq1%{OqEdW>5 at jAK
zdJuDuA`OUSI=_suinb7#b{6%bN8%OZ^$&cu;ZM9}5>8F!2|`{^t1}3KLWIoGtQ6q?
z+W!CPu<FjPJW^3v0Kc1+72{wbAy7AjK-sYiw4 at M(7hyuTgypPG^mx?jAxworDDl at u
z+oJfl7Yao6CzrWzb!NoVBL(OBwQT{2C>|+3<s&8G1u<Kn(v38yVF}31>5=YJFH(%@
zOCP1>OhWG`h*A`P at QE)tIOp=olP4*0$nn~4M3el+xN25>v?8(+ai1&}5&}XY7ESza
zU<)`4+>6NG2bVN?OAl%$=^<HVjE^kMJE-yR!f&~vFbdRkA!unRz|js{lzdb;ST*!0
zKGGjRdi=F?aW at 00KX*LF8O8?pF1^GvSiJUo51`>KOEZsTo<RS5{+IA!k&qsJ`7%sI
zYJJqT2mg}aDS(4LRq|WC<wju`Q;DOqv$zmAk<Hc?pa5Rn(WdKBh|(?1O*2^NF#kP@
zNT&eZiiCG7Yj+Xm{vjMQl&+LuY6%NdeA<8>z3$P{F>flm&bA5N7`h$_Z(3qDqQ|G^
zp#Z`)hB2}b_()32G;V at SQuv$8T3+i+ygpmNEk)%o`6-t0#mD4UDYz6I<Y9r(a=|dR
z_3IGwL=;Spzm@^Pr&I8sgV=I<Y%wz^af%PY+!B_f=MiN>P!g7V3=1Pl+2B)_z at lGI
z0!Vo0)5c`EPQ#2htbVUkh|Ux}(|OqAm6aAdF_?;#)@<zA;Md)ogNGqV*GcdZ2to%z
z+nvAUSFZ+sOR&dANVhciwZw{9B?QP<h$7DbN;z--(S-o~`fWNXjj)6dwGfb!s=TtO
zSnEmR$)2*20nA_n#Z)PXAslo4BqK*R!0S2}+|Ar1(Dk}u=GXd&;-i*hKx^rzWDoO@
zXMZz5ifyRrAjAOyF6${3Jvwc}g1?J;$*=xUOoe|OtP=KCZ(Vkd0a at r%f9Dbc$3aU>
zxIHG>z>LJN6M8`Nzb7etg at 7+%w>l*~1Msw{rJ=KE5Ihq7dI(*A>CM4_do(~lX@=1$
zrq%ZDp5y2UC<=|Nzjux2EE||wPBN8l6%h=+mTP4AN5Es9`@^H%K`;3gA0j__t at 4|*
z;98ehlu-Cs2?~f#3`<cMeFa#@|NiP%0+^qo$LbXDh1(V&jv=mDPW{Kfpi?YO*pO=$
zwFI%2 at yNt^FivQU)LH6kJvN?BeBH=?W6Y4?cC4=dY~*0?BURV1woEo?NtD=6_X_W1
zofd7e=stgxe8>M$2s{~Cm>ji!>O@}g at uMrpO{m=~tiNAldsuv!VJ)9BNz0=~3YHbE
zyYa8)c+K^n9tEOxD?#`()l}*~{w-=<kJ=>uW+qkvbJ8_#UJq%g4*}Bq)JLe&iMI%)
zPiy;B+anhYC=hzA+xV0g%4JyC8UK<$2lI3iZ~4Dv`aSWTz~UE%eroQ{Z?-bf<kkW|
RvEnGL?$c55 at hKay{XZW*&;tMf

diff --git a/kernels/my_test.cl b/kernels/my_test.cl
deleted file mode 100644
index 91f1821..0000000
--- a/kernels/my_test.cl
+++ /dev/null
@@ -1,26 +0,0 @@
-__kernel void
-my_test(__global int2 *src, __global int *offsets, __global uint2 *dst, int w)
-{
-	int i, index, j;
-	uint2 out;
-	unsigned int a, b, c, d;
-	int2 rle;
-	int gid = get_global_id(0);
-	index = offsets[gid];
-	int i0 = 0;
-	rle = src[index];
-	for (i = 0; i < w; i++, i0 += 8) {
-			if (i0+0 >= rle.x) { index++; rle = src[index]; } a = rle.y;
-			if (i0+1 >= rle.x) { index++; rle = src[index]; } b = rle.y;
-			if (i0+2 >= rle.x) { index++; rle = src[index]; } c = rle.y;
-			if (i0+3 >= rle.x) { index++; rle = src[index]; } d = rle.y;
-			out.x = (d<<24)|(c<<16)|(b<<8)|(a);
-			if (i0+4 >= rle.x) { index++; rle = src[index]; } a = rle.y;
-			if (i0+5 >= rle.x) { index++; rle = src[index]; } b = rle.y;
-			if (i0+6 >= rle.x) { index++; rle = src[index]; } c = rle.y;
-			if (i0+7 >= rle.x) { index++; rle = src[index]; } d = rle.y;
-			out.y = (d<<24)|(c<<16)|(b<<8)|(a);
-
-		dst[gid*w + i] = out;
-	}
-}
diff --git a/kernels/null_kernel_arg.cl b/kernels/null_kernel_arg.cl
deleted file mode 100644
index 68a4280..0000000
--- a/kernels/null_kernel_arg.cl
+++ /dev/null
@@ -1,9 +0,0 @@
-__kernel void
-null_kernel_arg(__global unsigned int *dst, __global unsigned int * mask_global, __constant unsigned int* mask_const)
-{
-  if(dst && mask_global==0 && mask_const == NULL)
-  {
-    uint idx = (uint)get_global_id(0);
-    dst[idx] = idx;
-  }
-}
diff --git a/kernels/test_cl_finish.cl b/kernels/test_cl_finish.cl
deleted file mode 100644
index 723949c..0000000
--- a/kernels/test_cl_finish.cl
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-__kernel void
-test_cl_finish(__global int *src, __global int *dst, int n, int num_threads)
-{
-	int tid, pos;
-
-	tid = get_global_id(0);
-	for (pos=tid; pos < n; pos+=num_threads) {
-		dst[pos] = src[pos];
-	}
-}
diff --git a/kernels/test_copy_buffer.cl b/kernels/test_copy_buffer.cl
deleted file mode 100644
index 6f2fd22..0000000
--- a/kernels/test_copy_buffer.cl
+++ /dev/null
@@ -1,6 +0,0 @@
-__kernel void
-test_copy_buffer(__global float* src, __global float* dst)
-{
-  int id = (int)get_global_id(0);
-  dst[id] = src[id];
-}
diff --git a/kernels/test_copy_buffer_row.cl b/kernels/test_copy_buffer_row.cl
deleted file mode 100644
index e33380f..0000000
--- a/kernels/test_copy_buffer_row.cl
+++ /dev/null
@@ -1,8 +0,0 @@
-__kernel void
-test_copy_buffer_row(__global int *src, __global int *dst, __global int *data)
-{
-  int row = data[0];
-  int size = data[1];
-  int id = (int) get_global_id(0);
-  for (; id < size; id += row) dst[id] = src[id];
-}
diff --git a/kernels/test_copy_image.cl b/kernels/test_copy_image.cl
deleted file mode 100644
index a5ee5e8..0000000
--- a/kernels/test_copy_image.cl
+++ /dev/null
@@ -1,10 +0,0 @@
-__kernel void
-test_copy_image(__read_only image2d_t src, __write_only image2d_t dst, sampler_t sampler)
-{
-  int2 coord;
-  int4 color;
-  coord.x = (int)get_global_id(0);
-  coord.y = (int)get_global_id(1);
-  color = read_imagei(src, sampler, coord);
-  write_imagei(dst, coord, color);
-}
diff --git a/kernels/test_copy_image1.cl b/kernels/test_copy_image1.cl
deleted file mode 100644
index 28e7a7d..0000000
--- a/kernels/test_copy_image1.cl
+++ /dev/null
@@ -1,33 +0,0 @@
-#define S(A,B,C) CLK_NORMALIZED_COORDS_##A | CLK_ADDRESS_##B | CLK_FILTER_##C
-
-#define COPY_IMAGE(_dst, _sampler, scoord, dcoord) \
-  color = read_imagei(src, _sampler, scoord);\
-  write_imagei(_dst, dcoord, color)
-
-__kernel void
-test_copy_image1(__read_only image2d_t src,
-                 __write_only image2d_t dst0,
-                 sampler_t sampler0,
-                 __write_only image2d_t dst1,
-                 __write_only image2d_t dst2,
-                 __write_only image2d_t dst3,
-                 __write_only image2d_t dst4,
-                 float w_inv, float h_inv)
-{
-  const sampler_t sampler1 = S(FALSE, REPEAT, NEAREST);
-  const sampler_t sampler2 = S(FALSE, CLAMP, NEAREST);
-  const sampler_t sampler3 = S(FALSE, MIRRORED_REPEAT, NEAREST);
-  const sampler_t sampler4 = S(TRUE, REPEAT, NEAREST);
-  int2 coord;
-  float2 fcoord;
-  int4 color;
-  coord.x = (int)get_global_id(0);
-  coord.y = (int)get_global_id(1);
-  fcoord.x = coord.x * w_inv;
-  fcoord.y = coord.y * h_inv;
-  COPY_IMAGE(dst0, sampler0, coord, coord);
-  COPY_IMAGE(dst1, sampler1, coord, coord);
-  COPY_IMAGE(dst2, sampler2, coord, coord);
-  COPY_IMAGE(dst3, sampler3, coord, coord);
-  COPY_IMAGE(dst4, sampler4, fcoord, coord);
-}
diff --git a/kernels/test_copy_image_3d.cl b/kernels/test_copy_image_3d.cl
deleted file mode 100644
index 103fb69..0000000
--- a/kernels/test_copy_image_3d.cl
+++ /dev/null
@@ -1,28 +0,0 @@
-__kernel void
-test_copy_image_3d(__read_only image3d_t src,
-                   __write_only image3d_t dst,
-                   sampler_t sampler,
-                   __write_only image2d_t buf0,
-                   __write_only image2d_t buf1,
-                   __write_only image2d_t buf2,
-                   __write_only image2d_t buf3)
-{
-  int4 coord;
-  int2 coord2;
-  float4 color;
-  coord.x = (int)get_global_id(0);
-  coord.y = (int)get_global_id(1);
-  coord.z = (int)get_global_id(2);
-  coord2.x = coord.x;
-  coord2.y = coord.y;
-  color = read_imagef(src, sampler, coord);
-  write_imagef(dst, coord, color);
-  if (coord.z == 0)
-    write_imagef(buf0, coord2, color);
-  else if (coord.z == 1)
-    write_imagef(buf1, coord2, color);
-  else if (coord.z == 2)
-    write_imagef(buf2, coord2, color);
-  else if (coord.z == 3)
-    write_imagef(buf3, coord2, color);
-}
diff --git a/kernels/test_fill_gl_image.cl b/kernels/test_fill_gl_image.cl
deleted file mode 100644
index 4250a57..0000000
--- a/kernels/test_fill_gl_image.cl
+++ /dev/null
@@ -1,11 +0,0 @@
-__kernel void
-test_fill_gl_image(image2d_t img, int color)
-{
-	int2 coord;
-        float4 color_v4;
-        coord.x = get_global_id(0);
-        coord.y = get_global_id(1);
-        color_v4 = (float4){((color >> 24) & 0xFF), (color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF};
-        color_v4 = color_v4 / 255.0f;
-        write_imagef(img, coord, color_v4);
-}
diff --git a/kernels/test_fill_image.cl b/kernels/test_fill_image.cl
deleted file mode 100644
index 3760568..0000000
--- a/kernels/test_fill_image.cl
+++ /dev/null
@@ -1,13 +0,0 @@
-__kernel void
-test_fill_image(__write_only image2d_t dst, uint color)
-{
-  int2 coord;
-  int4 color4;
-  color4.s0  = (color >> 24) & 0xFF;
-  color4.s1  = (color >> 16) & 0xFF;
-  color4.s2  = (color >> 8) & 0xFF;
-  color4.s3  = color & 0xFF;
-  coord.x = (int)get_global_id(0);
-  coord.y = (int)get_global_id(1);
-  write_imagei(dst, coord, color4);
-}
diff --git a/kernels/test_fill_image0.cl b/kernels/test_fill_image0.cl
deleted file mode 100644
index 9428092..0000000
--- a/kernels/test_fill_image0.cl
+++ /dev/null
@@ -1,9 +0,0 @@
-__kernel void
-test_fill_image0(__write_only image2d_t dst)
-{
-  int2 coord;
-  coord.x = (int)get_global_id(0);
-  coord.y = (int)get_global_id(1);
-  int4 color4 = {coord.y & 0xFF, (coord.y & 0xFF00) >> 8, coord.x & 0xFF, (coord.x & 0xFF00) >> 8};
-  write_imagei(dst, coord, color4);
-}
diff --git a/kernels/test_fill_image_3d.cl b/kernels/test_fill_image_3d.cl
deleted file mode 100644
index 4988f69..0000000
--- a/kernels/test_fill_image_3d.cl
+++ /dev/null
@@ -1,14 +0,0 @@
-__kernel void
-test_fill_image_3d(__write_only image3d_t dst, uint color)
-{
-  int4 coord;
-  int4 color4;
-  color4.s0  = (color >> 24) & 0xFF;
-  color4.s1  = (color >> 16) & 0xFF;
-  color4.s2  = (color >> 8) & 0xFF;
-  color4.s3  = color & 0xFF;
-  coord.x = (int)get_global_id(0);
-  coord.y = (int)get_global_id(1);
-  coord.z = (int)get_global_id(2);
-  write_imagei(dst, coord, color4);
-}
diff --git a/kernels/test_fill_image_3d_2.cl b/kernels/test_fill_image_3d_2.cl
deleted file mode 100644
index 1f9eaa1..0000000
--- a/kernels/test_fill_image_3d_2.cl
+++ /dev/null
@@ -1,10 +0,0 @@
-__kernel void
-test_fill_image_3d_2(__write_only image3d_t dst)
-{
-  int4 coord;
-  int4 color4 = {0x12, 0x34, 0x56, 0x78};
-  coord.x = (int)get_global_id(0);
-  coord.y = (int)get_global_id(1);
-  coord.z = (int)get_global_id(2);
-  write_imagei(dst, coord, color4);
-}
diff --git a/kernels/test_get_image_info.cl b/kernels/test_get_image_info.cl
deleted file mode 100644
index 8f69b75..0000000
--- a/kernels/test_get_image_info.cl
+++ /dev/null
@@ -1,13 +0,0 @@
-__kernel void
-test_get_image_info(__write_only image3d_t src, __global int *size, __global int *fmt)
-{
-  int id = (int)get_global_id(0);
-  int w, h, depth;
-  w = get_image_width(src);
-  h = get_image_height(src);
-  depth = get_image_depth(src);
-  int channel_data_type = get_image_channel_data_type(src);
-  int channel_order = get_image_channel_order(src);
-  size[id] = (w << 20 | h << 8  | depth);
-  fmt[id] = (channel_data_type << 16 | channel_order);
-}
diff --git a/kernels/test_movforphi_undef.cl b/kernels/test_movforphi_undef.cl
deleted file mode 100644
index 035c02a..0000000
--- a/kernels/test_movforphi_undef.cl
+++ /dev/null
@@ -1,18 +0,0 @@
-__kernel void
-test_movforphi_undef(__read_only image2d_t src, __write_only image2d_t dst, sampler_t sampler)
-{
-  int2 coord, dstCoord;
-  int4 color;
-  int x = get_global_id(0);
-  int y = get_global_id(1);
-  dstCoord.x = x;
-  dstCoord.y = y;
-  coord.y = y;
-  for(int j = -8; j < 2; j++)
-  {
-    coord.x = j + x;
-    color = read_imagei(src, sampler, coord);
-    if (j == 1 + x)
-      write_imagei(dst, dstCoord, color);
-  }
-}
diff --git a/kernels/test_write_only.cl b/kernels/test_write_only.cl
deleted file mode 100644
index 27c7acb..0000000
--- a/kernels/test_write_only.cl
+++ /dev/null
@@ -1,6 +0,0 @@
-__kernel void
-test_write_only(__global int *dst)
-{
-  int id = (int)get_global_id(0);
-  dst[id] = id;
-}
diff --git a/utests/.gitignore b/utests/.gitignore
deleted file mode 100644
index 90f80fc..0000000
--- a/utests/.gitignore
+++ /dev/null
@@ -1,15 +0,0 @@
-compiler_box_blur.bmp
-compiler_box_blur_float.bmp
-compiler_clod.bmp
-compiler_julia.bmp
-compiler_julia_no_break.bmp
-compiler_mandelbrot.bmp
-compiler_mandelbrot_alternate.bmp
-compiler_menger_sponge_no_shadow.bmp
-compiler_nautilus.bmp
-compiler_ribbon.bmp
-flat_address_space
-libutests.so
-utest_run
-generated
-utest_generator.pyc
diff --git a/utests/CMakeLists.txt b/utests/CMakeLists.txt
deleted file mode 100644
index 49bcf62..0000000
--- a/utests/CMakeLists.txt
+++ /dev/null
@@ -1,216 +0,0 @@
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}
-                    ${CMAKE_CURRENT_SOURCE_DIR}/../include)
-
-##### Math Function Part:
-EXEC_PROGRAM(mkdir ${CMAKE_CURRENT_SOURCE_DIR} ARGS generated -p)
-EXEC_PROGRAM(${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR} ARGS utest_math_gen.py OUTPUT_VARIABLE GEN_MATH_STRING)
-string(REGEX REPLACE " " ";" ADDMATHFUNC ${GEN_MATH_STRING})
-string(REGEX REPLACE " " "\n" NAMEMATHLIST ${GEN_MATH_STRING})
-MESSAGE(STATUS "Generated Builtin Math Functions:\n" ${NAMEMATHLIST})
-
-string(REGEX REPLACE "generated/([^\ ]*)\\.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/../kernels/\\1.cl" KERNEL_MATH_LIST ${GEN_MATH_STRING})
-string(REGEX REPLACE " " ";" KERNEL_MATH_LIST ${KERNEL_MATH_LIST})
-string(REGEX REPLACE "generated/([^\ ]*)\\.cpp" "\\1.cl" KERNEL_GITIGNORE_LIST ${GEN_MATH_STRING})
-set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "generated;${KERNEL_MATH_LIST}")
-
-configure_file (
-  "setenv.sh.in"
-  "setenv.sh"
-  )
-
-link_directories (${LLVM_LIBRARY_DIR})
-set (utests_sources
-  utest_error.c
-  compiler_basic_arithmetic.cpp
-  compiler_displacement_map_element.cpp
-  compiler_shader_toy.cpp
-  compiler_mandelbrot.cpp
-  compiler_mandelbrot_alternate.cpp
-  compiler_box_blur_float.cpp
-  compiler_box_blur_image.cpp
-  compiler_box_blur.cpp
-  compiler_insert_to_constant.cpp
-  compiler_argument_structure.cpp
-  compiler_arith_shift_right.cpp
-  compiler_array0.cpp
-  compiler_array.cpp
-  compiler_array1.cpp
-  compiler_array2.cpp
-  compiler_array3.cpp
-  compiler_byte_scatter.cpp
-  compiler_ceil.cpp
-  compiler_clz_short.cpp
-  compiler_clz_int.cpp
-  compiler_convert_uchar_sat.cpp
-  compiler_copy_buffer.cpp
-  compiler_copy_image.cpp
-  compiler_copy_image_3d.cpp
-  compiler_copy_buffer_row.cpp
-  compiler_degrees.cpp
-  compiler_step.cpp
-  compiler_fabs.cpp
-  compiler_abs.cpp
-  compiler_abs_diff.cpp
-  compiler_fill_image.cpp
-  compiler_fill_image0.cpp
-  compiler_fill_image_3d.cpp
-  compiler_fill_image_3d_2.cpp
-  compiler_function_argument0.cpp
-  compiler_function_argument1.cpp
-  compiler_function_argument2.cpp
-  compiler_function_argument.cpp
-  compiler_function_constant0.cpp
-  compiler_function_constant1.cpp
-  compiler_function_constant.cpp
-  compiler_global_constant.cpp
-  compiler_global_constant_2.cpp
-  compiler_group_size.cpp
-  compiler_hadd.cpp
-  compiler_if_else.cpp
-  compiler_integer_division.cpp
-  compiler_integer_remainder.cpp
-  compiler_insert_vector.cpp
-  compiler_lower_return0.cpp
-  compiler_lower_return1.cpp
-  compiler_lower_return2.cpp
-  compiler_mad_hi.cpp
-  compiler_mul_hi.cpp
-  compiler_mad24.cpp
-  compiler_mul24.cpp
-  compiler_multiple_kernels.cpp
-  compiler_radians.cpp
-  compiler_rhadd.cpp
-  compiler_rotate.cpp
-  compiler_saturate.cpp
-  compiler_saturate_sub.cpp
-  compiler_shift_right.cpp
-  compiler_short_scatter.cpp
-  compiler_smoothstep.cpp
-  compiler_uint2_copy.cpp
-  compiler_uint3_copy.cpp
-  compiler_uint8_copy.cpp
-  compiler_uint16_copy.cpp
-  compiler_uint3_unaligned_copy.cpp
-  compiler_upsample_int.cpp
-  compiler_upsample_long.cpp
-  compiler_unstructured_branch0.cpp
-  compiler_unstructured_branch1.cpp
-  compiler_unstructured_branch2.cpp
-  compiler_unstructured_branch3.cpp
-  compiler_write_only_bytes.cpp
-  compiler_write_only.cpp
-  compiler_write_only_shorts.cpp
-  compiler_switch.cpp
-  compiler_math.cpp
-  compiler_atomic_functions.cpp
-  compiler_async_copy.cpp
-  compiler_async_stride_copy.cpp
-  compiler_insn_selection_min.cpp
-  compiler_insn_selection_max.cpp
-  compiler_insn_selection_masked_min_max.cpp
-  compiler_load_bool_imm.cpp
-  compiler_global_memory_barrier.cpp
-  compiler_local_memory_two_ptr.cpp
-  compiler_local_memory_barrier.cpp
-  compiler_local_memory_barrier_wg64.cpp
-  compiler_local_memory_barrier_2.cpp
-  compiler_local_slm.cpp
-  compiler_movforphi_undef.cpp
-  compiler_volatile.cpp
-  compiler_copy_image1.cpp
-  compiler_get_image_info.cpp
-  compiler_vect_compare.cpp
-  compiler_vector_load_store.cpp
-  compiler_vector_inc.cpp
-  compiler_cl_finish.cpp
-  get_cl_info.cpp
-  builtin_atan2.cpp
-  builtin_bitselect.cpp
-  builtin_frexp.cpp
-  builtin_mad_sat.cpp
-  builtin_modf.cpp
-  builtin_nextafter.cpp
-  builtin_remquo.cpp
-  builtin_shuffle.cpp
-  builtin_shuffle2.cpp
-  builtin_sign.cpp
-  builtin_sinpi.cpp
-  builtin_lgamma.cpp
-  builtin_lgamma_r.cpp
-  builtin_tgamma.cpp
-  buildin_work_dim.cpp
-  builtin_global_size.cpp
-  builtin_local_size.cpp
-  builtin_global_id.cpp
-  builtin_num_groups.cpp
-  builtin_local_id.cpp
-  builtin_acos_asin.cpp
-  builtin_pow.cpp
-  builtin_exp.cpp
-  builtin_convert_sat.cpp
-  sub_buffer.cpp
-  runtime_createcontext.cpp
-  runtime_null_kernel_arg.cpp
-  runtime_event.cpp
-  compiler_double.cpp
-  compiler_double_2.cpp
-  compiler_double_3.cpp
-  compiler_double_4.cpp
-  compiler_long.cpp
-  compiler_long_2.cpp
-  compiler_long_convert.cpp
-  compiler_long_shl.cpp
-  compiler_long_shr.cpp
-  compiler_long_asr.cpp
-  compiler_long_mult.cpp
-  compiler_long_cmp.cpp
-  compiler_function_argument3.cpp
-  compiler_bool_cross_basic_block.cpp
-  compiler_private_data_overflow.cpp
-  compiler_getelementptr_bitcast.cpp
-  load_program_from_bin.cpp
-  profiling_exec.cpp
-  enqueue_copy_buf.cpp
-  utest_assert.cpp
-  utest.cpp
-  utest_file_map.cpp
-  utest_helper.cpp)
-
-SET (kernel_bin ${CMAKE_CURRENT_SOURCE_DIR}/../kernels/compiler_ceil)
-ADD_CUSTOM_COMMAND(
-    OUTPUT ${kernel_bin}.bin
-    COMMAND ${GBE_BIN_GENERATER} ${kernel_bin}.cl -o${kernel_bin}.bin
-    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/../backend/src/gbe_bin_generater ${kernel_bin}.cl
-    )
-
-ADD_CUSTOM_TARGET(kernel_bin.bin
-    DEPENDS ${kernel_bin}.bin)
-
-add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/generated
-    COMMAND mkdir ${CMAKE_CURRENT_SOURCE_DIR}/generated -p
-    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/utest_math_gen.py > /dev/null 2>&1
-    COMMAND echo ${KERNEL_GITIGNORE_LIST} |sed 's/ /\\n/g' > ${CMAKE_CURRENT_SOURCE_DIR}/../kernels/.gitignore
-    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-    )
-add_custom_target(utest_generator
-    DEPENDS generated
-    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-    )
-
-if (EGL_FOUND AND MESA_SOURCE_FOUND)
-SET(utests_sources ${utests_sources} compiler_fill_gl_image.cpp)
-SET(CMAKE_CXX_FLAGS "-DHAS_EGL ${CMAKE_CXX_FLAGS} ${DEF_OCL_PCH_PCM_PATH}")
-SET(CMAKE_C_FLAGS "-DHAS_EGL ${CMAKE_C_FLAGS} ${DEF_OCL_PCH_PCM_PATH}")
-endif (EGL_FOUND AND MESA_SOURCE_FOUND)
-
-ADD_LIBRARY(utests SHARED ${ADDMATHFUNC} ${utests_sources})
-
-TARGET_LINK_LIBRARIES(utests cl m ${OPENGL_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
-
-ADD_EXECUTABLE(utest_run utest_run.cpp)
-TARGET_LINK_LIBRARIES(utest_run utests)
-ADD_DEPENDENCIES (utest_run kernel_bin.bin)
-ADD_DEPENDENCIES (utests utest_generator)
-
-ADD_EXECUTABLE(flat_address_space runtime_flat_address_space.cpp)
-TARGET_LINK_LIBRARIES(flat_address_space utests)
diff --git a/utests/buildin_work_dim.cpp b/utests/buildin_work_dim.cpp
deleted file mode 100644
index d678c0f..0000000
--- a/utests/buildin_work_dim.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-#include "utest_helper.hpp"
-
-static void buildin_work_dim(void)
-{
-  // Setup kernel and buffers
-
-  int result, err;
-  OCL_CREATE_KERNEL("buildin_work_dim");
-
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_READ_WRITE, sizeof(int), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-
-  globals[0] = 1;
-  globals[1] = 1;
-  globals[2] = 1;
-  locals[0] = 1;
-  locals[1] = 1;
-  locals[2] = 1;
-
-  for( int i=1; i <= 3; i++ )
-  {
-
-    // Run the kernel
-    OCL_NDRANGE(i);
-
-    err = clEnqueueReadBuffer( queue, buf[0], CL_TRUE, 0, sizeof(int), &result, 0, NULL, NULL);
-    if (err != CL_SUCCESS)
-    {
-       printf("Error: Failed to read output array! %d\n", err);
-       exit(1);
-    }
-
-    OCL_ASSERT( result == i);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(buildin_work_dim);
diff --git a/utests/builtin_acos_asin.cpp b/utests/builtin_acos_asin.cpp
deleted file mode 100644
index 0187226..0000000
--- a/utests/builtin_acos_asin.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-#include "utest_helper.hpp"
-#include <cmath>
-#include <algorithm>
-
-#define udebug 0
-#define printf_c(...) \
-{\
-  printf("\033[1m\033[40;31m");\
-  printf( __VA_ARGS__ );\
-  printf("\033[0m");\
-}
-
-const float input_data[] = {-30, -1, -0.92, -0.5, -0.09, 0, 0.09, 0.5, 0.92, 1, 30};
-const int count_input = sizeof(input_data) / sizeof(input_data[0]);
-const int max_function = 5;
-
-static void cpu_compiler_math(float *dst, const float *src)
-{
-  const float x = *src;
-
-  dst[0] = acos(x);
-  dst[1] = acosh(x);
-  dst[2] = asin(x);
-  dst[3] = asinh(x);
-  dst[4] = x;
-}
-
-static void builtin_acos_asin(void)
-{
-  // Setup kernel and buffers
-  int k, i, index_cur;
-  float gpu_data[max_function * count_input] = {0}, cpu_data[max_function * count_input] = {0};
-
-  OCL_CREATE_KERNEL("builtin_acos_asin");
-
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_READ_WRITE, count_input * max_function * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[1], CL_MEM_READ_WRITE, count_input * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[2], CL_MEM_READ_WRITE, sizeof(int), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-
-  globals[0] = count_input;
-  locals[0] = 1;
-
-  clEnqueueWriteBuffer( queue, buf[1], CL_TRUE, 0, count_input * sizeof(float), input_data, 0, NULL, NULL);
-  clEnqueueWriteBuffer( queue, buf[2], CL_TRUE, 0, sizeof(int), &max_function , 0, NULL, NULL);
-
-   // Run the kernel
-  OCL_NDRANGE( 1 );
-
-  clEnqueueReadBuffer( queue, buf[0], CL_TRUE, 0, sizeof(float) * max_function * count_input, gpu_data, 0, NULL, NULL);
-
-  for (k = 0; (uint)k < count_input; k++)
-  {
-    cpu_compiler_math( cpu_data + k * max_function, input_data + k);
-
-    for (i = 0; i < max_function; i++)
-    {
-      index_cur = k * max_function + i;
-#if udebug
-      if (isinf(cpu_data[index_cur]) && !isinf(gpu_data[index_cur])){
-        printf_c("%d/%d: %f -> gpu:%f  cpu:%f\n", k, i, input_data[k], gpu_data[index_cur], cpu_data[index_cur]);
-      }
-      else if (isnan(cpu_data[index_cur]) && !isnan(gpu_data[index_cur])){
-        printf_c("%d/%d: %f -> gpu:%f  cpu:%f\n", k, i, input_data[k], gpu_data[index_cur], cpu_data[index_cur]);
-      }
-      else if(fabs(gpu_data[index_cur] - cpu_data[index_cur]) > 1e-3f){
-        printf_c("%d/%d: %f -> gpu:%f  cpu:%f\n", k, i, input_data[k], gpu_data[index_cur], cpu_data[index_cur]);
-      }
-      else
-        printf("%d/%d: %f -> gpu:%f  cpu:%f\n", k, i, input_data[k], gpu_data[index_cur], cpu_data[index_cur]);
-#else
-     if (isinf(cpu_data[index_cur]))
-       OCL_ASSERT(isinf(gpu_data[index_cur]));
-     else if (isnan(cpu_data[index_cur]))
-       OCL_ASSERT(isnan(gpu_data[index_cur]));
-     else
-     {
-       OCL_ASSERT(fabs(gpu_data[index_cur] - cpu_data[index_cur]) < 1e-3f);
-     }
-#endif
-    }
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(builtin_acos_asin)
diff --git a/utests/builtin_atan2.cpp b/utests/builtin_atan2.cpp
deleted file mode 100644
index 29dd7b4..0000000
--- a/utests/builtin_atan2.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-#include <cmath>
-#include "utest_helper.hpp"
-
-void builtin_atan2(void) {
-	const int n = 1024;
-	float y[n], x[n];
-
-	// Setup kernel and buffers
-	OCL_CREATE_KERNEL("builtin_atan2");
-	OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-	OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-	OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(float), NULL);
-	OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-	OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-	OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-	globals[0] = n;
-	locals[0] = 16;
-
-	OCL_MAP_BUFFER(0);
-	OCL_MAP_BUFFER(1);
-	for (int i = 0; i < n; ++i) {
-		y[i] = ((float*) buf_data[0])[i] = (rand()&255) * 0.01f;
-		x[i] = ((float*) buf_data[1])[i] = (rand()&255) * 0.01f;
-	}
-	OCL_UNMAP_BUFFER(0);
-	OCL_UNMAP_BUFFER(1);
-
-	OCL_NDRANGE(1);
-
-	OCL_MAP_BUFFER(2);
-	float *dst = (float*) buf_data[2];
-	for (int i = 0; i < n; ++i) {
-		float cpu = atan2f(y[i], x[i]);
-		float gpu = dst[i];
-		if (fabsf(cpu - gpu) >= 1e-2) {
-			printf("%f %f %f %f\n", y[i], x[i], cpu, gpu);
-			OCL_ASSERT(0);
-		}
-	}
-	OCL_UNMAP_BUFFER(2);
-}
-
-MAKE_UTEST_FROM_FUNCTION (builtin_atan2);
diff --git a/utests/builtin_bitselect.cpp b/utests/builtin_bitselect.cpp
deleted file mode 100644
index 37fb8df..0000000
--- a/utests/builtin_bitselect.cpp
+++ /dev/null
@@ -1,50 +0,0 @@
-#include "utest_helper.hpp"
-
-int as_int(float f) {
-  void *p = &f;
-  return *(int *)p;
-}
-
-int cpu(int a, int b, int c) {
-  return (a & ~c) | (b & c);
-}
-
-void builtin_bitselect(void)
-{
-  const int n = 32;
-  float src1[n], src2[n], src3[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("builtin_bitselect");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[3], 0, n * sizeof(float), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  OCL_SET_ARG(3, sizeof(cl_mem), &buf[3]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  OCL_MAP_BUFFER(2);
-  for (int i = 0; i < n; ++i) {
-    src1[i] = ((float*)buf_data[0])[i] = rand() * 0.1f;
-    src2[i] = ((float*)buf_data[1])[i] = rand() * 0.1f;
-    src3[i] = ((float*)buf_data[2])[i] = rand() * 0.1f;
-  }
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-  OCL_UNMAP_BUFFER(2);
-
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(3);
-  for (int i = 0; i < n; ++i)
-    OCL_ASSERT(((int*)buf_data[3])[i] == cpu(as_int(src1[i]), as_int(src2[i]), as_int(src3[i])));
-  OCL_UNMAP_BUFFER(3);
-}
-
-MAKE_UTEST_FROM_FUNCTION(builtin_bitselect);
diff --git a/utests/builtin_convert_sat.cpp b/utests/builtin_convert_sat.cpp
deleted file mode 100644
index 7272057..0000000
--- a/utests/builtin_convert_sat.cpp
+++ /dev/null
@@ -1,80 +0,0 @@
-#include <cstdint>
-#include "utest_helper.hpp"
-
-typedef unsigned char uchar;
-typedef unsigned short ushort;
-
-int64_t my_rand(void) {
-  int64_t x = rand() - RAND_MAX/2;
-  int64_t y = rand() - RAND_MAX/2;
-  return x * y;
-}
-
-#define DEF2(DST_TYPE, SRC_TYPE, DST_MIN, DST_MAX, REAL_SRC_TYPE) \
-void builtin_convert_ ## SRC_TYPE ## _to_ ## DST_TYPE ## _sat(void) \
-{ \
-  const int n = 128; \
-  OCL_CREATE_KERNEL_FROM_FILE("builtin_convert_sat", "builtin_convert_" # SRC_TYPE "_to_" # DST_TYPE "_sat"); \
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(REAL_SRC_TYPE), NULL); \
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(DST_TYPE), NULL); \
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]); \
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]); \
-  globals[0] = n; \
-  locals[0] = 16; \
-  OCL_MAP_BUFFER(0); \
-  for (int i = 0; i < n; i++) \
-    ((REAL_SRC_TYPE *)buf_data[0])[i] = my_rand(); \
-  OCL_UNMAP_BUFFER(0); \
-  OCL_NDRANGE(1); \
-  OCL_MAP_BUFFER(0); \
-  OCL_MAP_BUFFER(1); \
-  for (int i = 0; i < n; i++) { \
-    REAL_SRC_TYPE src = ((REAL_SRC_TYPE *)buf_data[0])[i]; \
-    DST_TYPE dst; \
-    if ((double)src > (double)DST_MAX) \
-      dst = DST_MAX; \
-    else if ((double)src < (double)DST_MIN) \
-      dst = DST_MIN; \
-    else \
-      dst = src; \
-    OCL_ASSERT(((DST_TYPE *)buf_data[1])[i] == dst); \
-  } \
-  OCL_UNMAP_BUFFER(0); \
-  OCL_UNMAP_BUFFER(1); \
-} \
-MAKE_UTEST_FROM_FUNCTION(builtin_convert_ ## SRC_TYPE ## _to_ ## DST_TYPE ## _sat);
-
-#define DEF(DST_TYPE, SRC_TYPE, DST_MIN, DST_MAX) \
-  DEF2(DST_TYPE, SRC_TYPE, DST_MIN, DST_MAX, SRC_TYPE)
-
-DEF(char, uchar, -128, 127);
-DEF(char, short, -128, 127);
-DEF(char, ushort, -128, 127);
-DEF(char, int, -128, 127);
-DEF(char, uint, -128, 127);
-DEF2(char, long, -128, 127, int64_t);
-DEF(char, float, -128, 127);
-DEF(uchar, char, 0, 255);
-DEF(uchar, short, 0, 255);
-DEF(uchar, ushort, 0, 255);
-DEF(uchar, int, 0, 255);
-DEF(uchar, uint, 0, 255);
-DEF2(uchar, long, 0, 255, int64_t);
-DEF(uchar, float, 0, 255);
-DEF(short, ushort, -32768, 32767);
-DEF(short, int, -32768, 32767);
-DEF(short, uint, -32768, 32767);
-DEF2(short, long, -32768, 32767, int64_t);
-DEF(short, float, -32768, 32767);
-DEF(ushort, short, 0, 65535);
-DEF(ushort, int, 0, 65535);
-DEF(ushort, uint, 0, 65535);
-DEF2(ushort, long, 0, 65535, int64_t);
-DEF(ushort, float, 0, 65535);
-DEF(int, uint, -0x7FFFFFFF-1, 0x7FFFFFFF);
-DEF2(int, long, -0x7FFFFFFF-1, 0x7FFFFFFF, int64_t);
-DEF(int, float, -0x7FFFFFFF-1, 0x7FFFFFFF);
-DEF(uint, int, 0, 0xffffffffu);
-DEF2(uint, long, 0, 0xffffffffu, int64_t);
-DEF(uint, float, 0, 0xffffffffu);
-#undef DEF
diff --git a/utests/builtin_exp.cpp b/utests/builtin_exp.cpp
deleted file mode 100644
index d5288c8..0000000
--- a/utests/builtin_exp.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-#include "utest_helper.hpp"
-#include <cmath>
-#include <algorithm>
-
-#define udebug 0
-
-#define FLT_MAX 0x1.fffffep127f
-#define FLT_MIN 0x1.0p-126f
-#define FLT_ULP  (1.0e-6f)
-
-#define printf_c(...) \
-{\
-  printf("\033[1m\033[40;31m");\
-  printf( __VA_ARGS__ );\
-  printf("\033[0m");\
-}
-
-const float input_data[] = {FLT_MAX, -FLT_MAX, FLT_MIN, -FLT_MIN, 80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0 };
-const int count_input = sizeof(input_data) / sizeof(input_data[0]);
-const int max_function = 5;
-
-static void cpu_compiler_math(float *dst, const float *src)
-{
-  const float x = *src;
-
-  dst[0] = exp(x);
-  dst[1] = exp2(x);
-  dst[2] = exp10(x);
-  dst[3] = expm1(x);
-  dst[4] = x;
-}
-
-static void builtin_exp(void)
-{
-  // Setup kernel and buffers
-  int k, i, index_cur;
-  float gpu_data[max_function * count_input] = {0}, cpu_data[max_function * count_input] = {0};
-  float diff;
-  char log[256] = {0};
-
-  OCL_CREATE_KERNEL("builtin_exp");
-
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_READ_WRITE, count_input * max_function * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[1], CL_MEM_READ_WRITE, count_input * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[2], CL_MEM_READ_WRITE, sizeof(int), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-
-  globals[0] = count_input;
-  locals[0] = 1;
-
-  clEnqueueWriteBuffer( queue, buf[1], CL_TRUE, 0, count_input * sizeof(float), input_data, 0, NULL, NULL);
-  clEnqueueWriteBuffer( queue, buf[2], CL_TRUE, 0, sizeof(int), &max_function , 0, NULL, NULL);
-
-   // Run the kernel
-  OCL_NDRANGE( 1 );
-
-  clEnqueueReadBuffer( queue, buf[0], CL_TRUE, 0, sizeof(float) * max_function * count_input, gpu_data, 0, NULL, NULL);
-
-  for (k = 0; (uint)k < count_input; k++)
-  {
-    cpu_compiler_math( cpu_data + k * max_function, input_data + k);
-
-    for (i = 0; i < max_function; i++)
-    {
-      index_cur = k * max_function + i;
-      diff = fabs(gpu_data[index_cur]-cpu_data[index_cur]);
-      sprintf(log, "%d/%d: %f -> gpu:%f  cpu:%f diff:%f expect:%f\n", \
-         k, i, input_data[k], gpu_data[index_cur], cpu_data[index_cur], \
-         diff/gpu_data[index_cur], 3 * FLT_ULP);
-
-#if udebug
-      if (isinf(cpu_data[index_cur]) && isinf(gpu_data[index_cur])){
-        printf(log);
-      }
-      else if (isnan(cpu_data[index_cur]) && isnan(gpu_data[index_cur])){
-        printf(log);
-      }
-      else if( diff / cpu_data[index_cur] < 3 * FLT_ULP \
-        && ( gpu_data[index_cur] > FLT_ULP  || cpu_data[index_cur] > FLT_ULP )){
-        printf(log);
-      }
-      else if ( gpu_data[index_cur] < FLT_ULP && gpu_data[index_cur] < FLT_ULP)
-        printf(log);
-      else
-        printf_c(log);
-#else
-      if (isinf(cpu_data[index_cur]))
-        OCL_ASSERTM(isinf(gpu_data[index_cur]), log);
-      else if (isnan(cpu_data[index_cur]))
-        OCL_ASSERTM(isnan(gpu_data[index_cur]), log);
-      else if ( gpu_data[index_cur] > FLT_ULP || cpu_data[index_cur] > FLT_ULP)
-        OCL_ASSERTM(fabs( diff / cpu_data[index_cur]) < 3 * FLT_ULP, log);
-      else
-        OCL_ASSERTM(fabs(diff) < 3 * FLT_ULP, log);
-#endif
-    }
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(builtin_exp)
diff --git a/utests/builtin_frexp.cpp b/utests/builtin_frexp.cpp
deleted file mode 100644
index 75dac3b..0000000
--- a/utests/builtin_frexp.cpp
+++ /dev/null
@@ -1,50 +0,0 @@
-#include <cmath>
-#include "utest_helper.hpp"
-
-void builtin_frexp(void)
-{
-  const int n = 32;
-  float src[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("builtin_frexp");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  OCL_MAP_BUFFER(0);
-  src[0] = ((float*)buf_data[0])[0] = 0.f;
-  src[1] = ((float*)buf_data[0])[1] = -0.f;
-  src[2] = ((float*)buf_data[0])[2] = nanf("");
-  src[3] = ((float*)buf_data[0])[3] = INFINITY;
-  src[4] = ((float*)buf_data[0])[4] = -INFINITY;
-  for (int i = 5; i < n; ++i)
-    src[i] = ((float*)buf_data[0])[i] = (rand() & 255) * 0.1f - 12.8f;
-  OCL_UNMAP_BUFFER(0);
-
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(1);
-  OCL_MAP_BUFFER(2);
-  float *dst = (float*)buf_data[1];
-  int *exp = (int*)buf_data[2];
-  int w;
-  OCL_ASSERT(dst[0] == 0.f && exp[0] == 0);
-  OCL_ASSERT(dst[1] == -0.f && exp[1] == 0);
-  OCL_ASSERT(isnanf(dst[2]));
-  OCL_ASSERT(dst[3] == INFINITY);
-  OCL_ASSERT(dst[4] == -INFINITY);
-  for (int i = 5; i < n; ++i) {
-    OCL_ASSERT(fabsf(dst[i] - frexpf(src[i], &w)) < 1e-5);
-    OCL_ASSERT(exp[i] == w);
-  }
-  OCL_UNMAP_BUFFER(1);
-  OCL_UNMAP_BUFFER(2);
-}
-
-MAKE_UTEST_FROM_FUNCTION(builtin_frexp);
diff --git a/utests/builtin_global_id.cpp b/utests/builtin_global_id.cpp
deleted file mode 100644
index 9601cab..0000000
--- a/utests/builtin_global_id.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-According to the OpenCL v1.1 & v1.2 chapter 6.11.
-Now define global size as following:
-  globals[0] = 3;
-  globals[1] = 4;
-  globals[2] = 5;
-
-Kernel:
-id = get_global_id(0) + get_global_id(1)*3 + get_global_id(2)*3*4
-
-dimension:1
- 0  1  2
-dimension:2
- 0  1  2
- 3  4  5
- 6  7  8
- 9 10 11
-dimension:3
- 0  1  2   12 13 14   24 25 26   36 37 38   48 49 50
- 3  4  5   15 16 17   27 28 29   39 40 41   51 52 53
- 6  7  8   18 19 20   30 31 32   42 43 44   54 55 56
- 9 10 11   21 22 23   33 34 35   45 46 47   57 58 59
-*/
-
-#define udebug 0
-#include "utest_helper.hpp"
-static void builtin_global_id(void)
-{
-
-  // Setup kernel and buffers
-  int dim, global_id[80], err, i, buf_len=1;
-  OCL_CREATE_KERNEL("builtin_global_id");
-
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_READ_WRITE, sizeof(int)*80, NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-
-  for( dim=1; dim <= 3; dim++ )
-  {
-    buf_len = 1;
-    for(i=1; i <= dim; i++)
-    {
-      globals[i - 1] = 2 + i;
-      locals[i - 1] = 2 + i;
-      buf_len *= 2 + i;
-    }
-    for(i=dim+1; i <= 3; i++)
-    {
-      globals[i - 1] = 0;
-      locals[i - 1] = 0;
-    }
-
-    // Run the kernel
-    OCL_NDRANGE( dim );
-    clFinish(queue);
-
-    err = clEnqueueReadBuffer( queue, buf[0], CL_TRUE, 0, sizeof(int) * buf_len, &global_id, 0, NULL, NULL);
-
-    if (err != CL_SUCCESS)
-    {
-      printf("Error: Failed to read output array! %d\n", err);
-      exit(1);
-    }
-
-#if udebug
-    for(i = 0; i < buf_len; i++)
-    {
-      printf("%2d ", global_id[i]);
-      if ((i + 1) % 3 == 0) printf("\n");
-    }
-#endif
-
-    for( i = 0; i < buf_len; i++)
-      OCL_ASSERT( global_id[i] == i);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(builtin_global_id);
diff --git a/utests/builtin_global_size.cpp b/utests/builtin_global_size.cpp
deleted file mode 100644
index 094e019..0000000
--- a/utests/builtin_global_size.cpp
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
-According to the OpenCL v1.1 & v1.2 chapter 6.11, the behavior of function get_global_size should be as following:
-
-  globals[0] = 3;
-  globals[1] = 4;
-  globals[2] = 5;
-
-#ifdef CL_VERSION_1_2 | CL_VERSION_1_1:
-get_global_size(-1) = 1 (dimension:1)
-get_global_size(0) = 3 (dimension:1)
-get_global_size(1) = 1 (dimension:1)
-get_global_size(2) = 1 (dimension:1)
-
-get_global_size(-1) = 1 (dimension:2)
-get_global_size(0) = 3 (dimension:2)
-get_global_size(1) = 4 (dimension:2)
-get_global_size(2) = 1 (dimension:2)
-get_global_size(3) = 1 (dimension:2)
-
-get_global_size(-1) = 1 (dimension:3)
-get_global_size(0) = 3 (dimension:3)
-get_global_size(1) = 4 (dimension:3)
-get_global_size(2) = 5 (dimension:3)
-get_global_size(3) = 1 (dimension:3)
-get_global_size(4) = 1 (dimension:3)
-
-#ifdef CL_VERSION_1_0:
-get_global_size(-1) = 0 (dimension:1)
-get_global_size(0) = 3 (dimension:1)
-get_global_size(1) = 0 (dimension:1)
-get_global_size(2) = 0 (dimension:1)
-
-get_global_size(-1) = 0 (dimension:2)
-get_global_size(0) = 3 (dimension:2)
-get_global_size(1) = 4 (dimension:2)
-get_global_size(2) = 0 (dimension:2)
-get_global_size(3) = 1 (dimension:2)
-
-get_global_size(-1) = 0 (dimension:3)
-get_global_size(0) = 3 (dimension:3)
-get_global_size(1) = 4 (dimension:3)
-get_global_size(2) = 5 (dimension:3)
-get_global_size(3) = 0 (dimension:3)
-get_global_size(4) = 0 (dimension:3)
-
-*/
-#include "utest_helper.hpp"
-static void builtin_global_size(void)
-{
-
-  // Setup kernel and buffers
-  int dim, dim_arg_global, global_size, err;
-  OCL_CREATE_KERNEL("builtin_global_size");
-
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_READ_WRITE, sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[1], CL_MEM_READ_WRITE, sizeof(int), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-
-  globals[0] = 3;
-  globals[1] = 4;
-  globals[2] = 5;
-  locals[0] = 1;
-  locals[1] = 1;
-  locals[2] = 1;
-
-  for( dim=1; dim <= 3; dim++ )
-  {
-
-    for( dim_arg_global = -1; dim_arg_global <= dim + 1; dim_arg_global++ )
-    {
-
-      err = clEnqueueWriteBuffer( queue, buf[1], CL_TRUE, 0, sizeof(int), &dim_arg_global, 0, NULL, NULL);
-      if (err != CL_SUCCESS)
-      {
-        printf("Error: Failed to write to source array!\n");
-        exit(1);
-      }
-
-      // Run the kernel
-      OCL_NDRANGE( dim );
-
-      err = clEnqueueReadBuffer( queue, buf[0], CL_TRUE, 0, sizeof(int), &global_size, 0, NULL, NULL);
-      if (err != CL_SUCCESS)
-      {
-        printf("Error: Failed to read output array! %d\n", err);
-        exit(1);
-      }
-
-      //printf("get_global_size(%d) = %d (dimension:%d)\n", dim_arg_global, global_size, dim);
-
-      if ( dim_arg_global >= 0 && dim_arg_global < dim)
-        OCL_ASSERT( global_size == dim_arg_global + 3);
-      else
-      {
-      #if defined(CL_VERSION_1_2) || defined(CL_VERSION_1_1)
-        OCL_ASSERT( global_size == 1);
-      #elif defined(CL_VERSION_1_0)
-        OCL_ASSERT( global_size == 0);
-      #else
-        OCL_ASSERT( global_size == 1);
-      #endif
-      }
-    }
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(builtin_global_size);
diff --git a/utests/builtin_lgamma.cpp b/utests/builtin_lgamma.cpp
deleted file mode 100644
index 876699a..0000000
--- a/utests/builtin_lgamma.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <cmath>
-#include "utest_helper.hpp"
-
-void builtin_lgamma(void) {
-	const int n = 1024;
-	float src[n];
-
-	// Setup kernel and buffers
-	OCL_CREATE_KERNEL("builtin_lgamma");
-	OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-	OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-	OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-	OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-	globals[0] = n;
-	locals[0] = 16;
-
-	for (int j = 0; j < 1024; j++) {
-		OCL_MAP_BUFFER(0);
-		for (int i = 0; i < n; ++i) {
-			src[i] = ((float*) buf_data[0])[i] = (j * n + i + 1) * 0.001f;
-		}
-		OCL_UNMAP_BUFFER(0);
-
-		OCL_NDRANGE(1);
-
-		OCL_MAP_BUFFER(1);
-		float *dst = (float*) buf_data[1];
-		for (int i = 0; i < n; ++i) {
-			float cpu = lgamma(src[i]);
-			float gpu = dst[i];
-			if (fabsf(cpu - gpu) >= 1e-3) {
-				printf("%f %f %f\n", src[i], cpu, gpu);
-				OCL_ASSERT(0);
-			}
-		}
-		OCL_UNMAP_BUFFER(1);
-	}
-}
-
-MAKE_UTEST_FROM_FUNCTION (builtin_lgamma);
diff --git a/utests/builtin_lgamma_r.cpp b/utests/builtin_lgamma_r.cpp
deleted file mode 100644
index b6e5d0e..0000000
--- a/utests/builtin_lgamma_r.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <cmath>
-#include "utest_helper.hpp"
-
-void builtin_lgamma_r(void) {
-	const int n = 1024;
-	float src[n];
-
-	// Setup kernel and buffers
-	OCL_CREATE_KERNEL("builtin_lgamma_r");
-	OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-	OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-	OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int), NULL);
-	OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-	OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-	OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-	globals[0] = n;
-	locals[0] = 16;
-
-	for (int j = 0; j < 1024; j++) {
-		OCL_MAP_BUFFER(0);
-		for (int i = 0; i < n; ++i) {
-			src[i] = ((float*) buf_data[0])[i] = (j * n + i + 1) * 0.001f;
-		}
-		OCL_UNMAP_BUFFER(0);
-
-		OCL_NDRANGE(1);
-
-		OCL_MAP_BUFFER(1);
-		OCL_MAP_BUFFER(2);
-		float *dst = (float*) buf_data[1];
-		for (int i = 0; i < n; ++i) {
-			int cpu_signp;
-			float cpu = lgamma_r(src[i], &cpu_signp);
-			int gpu_signp = ((int*)buf_data[2])[i];
-			float gpu = dst[i];
-			if (cpu_signp != gpu_signp || fabsf(cpu - gpu) >= 1e-3) {
-				printf("%f %f %f\n", src[i], cpu, gpu);
-				OCL_ASSERT(0);
-			}
-		}
-		OCL_UNMAP_BUFFER(1);
-		OCL_UNMAP_BUFFER(2);
-	}
-}
-
-MAKE_UTEST_FROM_FUNCTION (builtin_lgamma_r);
diff --git a/utests/builtin_local_id.cpp b/utests/builtin_local_id.cpp
deleted file mode 100644
index 1f07615..0000000
--- a/utests/builtin_local_id.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
-According to the OpenCL v1.1 & v1.2 chapter 6.11.
-Now define local and global size as following:
-  globals[0] = 4;
-  globals[1] = 9;
-  globals[2] = 16;
-  locals[0] = 2;
-  locals[1] = 3;
-  locals[2] = 4;
-
-Kernel:
-int id = get_local_id(0) +  get_group_id(0)*2 + \
-         get_local_id(1) * 4 + get_group_id(1)*12 +\
-         get_local_id(2) *36 + get_group_id(2)*144;
-
-dimension:1
- 0  1  2  3
-dimension:2
- 0  1  2  3  4  5  6  7  8  9 10 11
-12 13 14 15 16 17 18 19 20 21 22 23
-24 25 26 27 28 29 30 31 32 33 34 35
-dimension:3
- 0  1  2  3  4  5  6  7 ... 139 140 141 142 143
-...
-...
-429 430 431 432 433 434 ... 571 572 573 574 575
-*/
-
-#define udebug 0
-#include "utest_helper.hpp"
-static void builtin_local_id(void)
-{
-
-  // Setup kernel and buffers
-  int dim, local_id[576], err, i, buf_len=1;
-  OCL_CREATE_KERNEL("builtin_local_id");
-
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_READ_WRITE, sizeof(int)*576, NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-
-  for( dim=1; dim <= 3; dim++ )
-  {
-    buf_len = 1;
-    for(i=1; i <= dim; i++)
-    {
-      locals[i - 1] = i + 1;
-      globals[i - 1] = (i + 1) * (i + 1);
-      buf_len *= ((i + 1) * (i + 1));
-    }
-    for(i = dim+1; i <= 3; i++)
-    {
-      globals[i - 1] = 0;
-      locals[i - 1] = 0;
-    }
-
-    // Run the kernel
-    OCL_NDRANGE( dim );
-    clFinish(queue);
-
-    err = clEnqueueReadBuffer( queue, buf[0], CL_TRUE, 0, sizeof(int) * buf_len, &local_id, 0, NULL, NULL);
-
-    if (err != CL_SUCCESS)
-    {
-      printf("Error: Failed to read output array! %d\n", err);
-      exit(1);
-    }
-
-#if udebug
-    for(i = 0; i < buf_len; i++)
-    {
-      printf("%2d ", local_id[i]);
-      if ((i + 1) % 4  == 0) printf("\n");
-    }
-#endif
-
-    for( i = 0; i < buf_len; i++)
-      OCL_ASSERT( local_id[i] == i);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(builtin_local_id);
diff --git a/utests/builtin_local_size.cpp b/utests/builtin_local_size.cpp
deleted file mode 100644
index a9dac2e..0000000
--- a/utests/builtin_local_size.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
-According to the OpenCL v1.1 & v1.2 chapter 6.11, the behavior of function get_local_size should be as following:
-
-  globals[0] = 3;
-  globals[1] = 4;
-  globals[2] = 5;
-  locals[0] = 3;
-  locals[1] = 4;
-  locals[2] = 5;
-
-get_local_size(-1) = 1 (dimension:1)
-get_local_size(0) = 3 (dimension:1)
-get_local_size(1) = 1 (dimension:1)
-get_local_size(2) = 1 (dimension:1)
-
-get_local_size(-1) = 1 (dimension:2)
-get_local_size(0) = 3 (dimension:2)
-get_local_size(1) = 4 (dimension:2)
-get_local_size(2) = 1 (dimension:2)
-get_local_size(3) = 1 (dimension:2)
-
-get_local_size(-1) = 1 (dimension:3)
-get_local_size(0) = 3 (dimension:3)
-get_local_size(1) = 4 (dimension:3)
-get_local_size(2) = 5 (dimension:3)
-get_local_size(3) = 1 (dimension:3)
-get_local_size(4) = 1 (dimension:3)
-
-*/
-#include "utest_helper.hpp"
-#define udebug 0
-
-static void builtin_local_size(void)
-{
-
-  // Setup kernel and buffers
-  int dim, dim_arg_global, local_size, err;
-  OCL_CREATE_KERNEL("builtin_local_size");
-
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_READ_WRITE, sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[1], CL_MEM_READ_WRITE, sizeof(int), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-
-  globals[0] = 3;
-  globals[1] = 4;
-  globals[2] = 5;
-  locals[0] = 3;
-  locals[1] = 4;
-  locals[2] = 5;
-
-  for( dim=1; dim <= 3; dim++ )
-  {
-
-    for( dim_arg_global = -1; dim_arg_global <= dim + 1; dim_arg_global++ )
-    {
-
-      err = clEnqueueWriteBuffer( queue, buf[1], CL_TRUE, 0, sizeof(int), &dim_arg_global, 0, NULL, NULL);
-      if (err != CL_SUCCESS)
-      {
-        printf("Error: Failed to write to source array!\n");
-        exit(1);
-      }
-
-      // Run the kernel
-      OCL_NDRANGE( dim );
-
-      err = clEnqueueReadBuffer( queue, buf[0], CL_TRUE, 0, sizeof(int), &local_size, 0, NULL, NULL);
-      if (err != CL_SUCCESS)
-      {
-        printf("Error: Failed to read output array! %d\n", err);
-        exit(1);
-      }
-
-#if udebug
-      printf("get_local_size(%d) = %d (dimension:%d)\n", dim_arg_global, local_size, dim);
-#endif
-      if ( dim_arg_global >= 0 && dim_arg_global < dim)
-        OCL_ASSERT( local_size == dim_arg_global + 3);
-      else
-      {
-        OCL_ASSERT( local_size == 1);
-      }
-    }
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(builtin_local_size);
diff --git a/utests/builtin_mad_sat.cpp b/utests/builtin_mad_sat.cpp
deleted file mode 100644
index ed9a558..0000000
--- a/utests/builtin_mad_sat.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-#include "utest_helper.hpp"
-
-void builtin_mad_sat(void)
-{
-  const int n = 32;
-  short src1[n], src2[n], src3[n];
-srand(0);
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("builtin_mad_sat");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(short), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(short), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(short), NULL);
-  OCL_CREATE_BUFFER(buf[3], 0, n * sizeof(short), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  OCL_SET_ARG(3, sizeof(cl_mem), &buf[3]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  OCL_MAP_BUFFER(2);
-  for (int i = 0; i < n; ++i) {
-    src1[i] = ((short*)buf_data[0])[i] = rand();
-    src2[i] = ((short*)buf_data[1])[i] = rand();
-    src3[i] = ((short*)buf_data[2])[i] = rand();
-  }
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-  OCL_UNMAP_BUFFER(2);
-
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(3);
-  for (int i = 0; i < n; ++i) {
-    int a = (int)src1[i] * (int)src2[i] + (int)src3[i];
-    a = a > 0x7FFF ? 0x7FFF : (a < -0x8000 ? -0x8000 : a);
-    OCL_ASSERT(((short*)buf_data[3])[i] == (short)a);
-  }
-  OCL_UNMAP_BUFFER(3);
-}
-
-MAKE_UTEST_FROM_FUNCTION(builtin_mad_sat);
diff --git a/utests/builtin_modf.cpp b/utests/builtin_modf.cpp
deleted file mode 100644
index 057e95e..0000000
--- a/utests/builtin_modf.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-#include <cmath>
-#include <cstring>
-#include "utest_helper.hpp"
-
-void builtin_modf(void)
-{
-  const int n = 32;
-  float src[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("builtin_modf");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(float), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  src[0] = INFINITY;
-  src[1] = -INFINITY;
-  src[2] = nanf("");
-  src[3] = 0;
-  src[4] = 1.5f;
-  src[5] = 2.5f;
-  src[6] = -2.5f;
-  src[7] = 20;
-  src[8] = 21;
-  src[9] = 89.5f;
-
-  OCL_MAP_BUFFER(0);
-  memcpy(buf_data[0], src, n * sizeof(float));
-  OCL_UNMAP_BUFFER(0);
-
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(1);
-  OCL_MAP_BUFFER(2);
-  float *dst = (float *)buf_data[1];
-  float *it = (float *)buf_data[2];
-  OCL_ASSERT(dst[0] == 0 && it[0] == INFINITY);
-  OCL_ASSERT(dst[1] == -0.f && it[1] == -INFINITY);
-  OCL_ASSERT(isnanf(dst[2]) && isnanf(it[2]));
-  OCL_ASSERT(dst[3] == 0 && it[3] == 0);
-  OCL_ASSERT(dst[4] == 0.5f && it[4] == 1);
-  OCL_ASSERT(dst[5] == 0.5f && it[5] == 2);
-  OCL_ASSERT(dst[6] == -0.5f && it[6] == -2);
-  OCL_ASSERT(dst[7] == 0 && it[7] == 20);
-  OCL_ASSERT(dst[8] == 0 && it[8] == 21);
-  OCL_ASSERT(dst[9] == 0.5f && it[9] == 89);
-  OCL_UNMAP_BUFFER(1);
-  OCL_UNMAP_BUFFER(2);
-}
-
-MAKE_UTEST_FROM_FUNCTION(builtin_modf);
diff --git a/utests/builtin_nextafter.cpp b/utests/builtin_nextafter.cpp
deleted file mode 100644
index ae95497..0000000
--- a/utests/builtin_nextafter.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-#include <cmath>
-#include <cstring>
-#include "utest_helper.hpp"
-
-static int as_int(float f) {
-  void *p = &f;
-  return *(int *)p;
-}
-
-void builtin_nextafter(void)
-{
-  const int n = 16;
-  float src1[n], src2[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("builtin_nextafter");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(float), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  src1[0] = nanf(""), src2[0] = 1.1f;
-  src1[1] = 2.2f,     src2[1] = nanf("");
-  src1[2] = nanf(""), src2[2] = nanf("");
-  src1[3] = 123.4f,   src2[3] = 123.4f;
-  src1[4] = 0.f,      src2[4] = 1.f;
-  src1[5] = -0.f,     src2[5] = -1.f;
-  for (int i = 6; i < n; ++i) {
-    src1[i] = (rand() & 255) * 0.1f - 12.8f;
-    src2[i] = (rand() & 255) * 0.1f - 12.8f;
-  }
-
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  memcpy(buf_data[0], src1, n * sizeof(float));
-  memcpy(buf_data[1], src2, n * sizeof(float));
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(2);
-  float *dest = (float *)buf_data[2];
-  if (0)
-    for (int i = 0; i < n; ++i)
-      printf("%d %x %x %x %x\n", i, as_int(src1[i]), as_int(src2[i]),
-             as_int(dest[i]), as_int(nextafterf(src1[i], src2[i])));
-  OCL_ASSERT(isnanf(dest[0]));
-  OCL_ASSERT(isnanf(dest[1]));
-  OCL_ASSERT(isnanf(dest[2]));
-  for (int i = 3; i < n; ++i)
-    OCL_ASSERT(dest[i] == nextafterf(src1[i], src2[i]));
-  OCL_UNMAP_BUFFER(2);
-}
-
-MAKE_UTEST_FROM_FUNCTION(builtin_nextafter);
diff --git a/utests/builtin_num_groups.cpp b/utests/builtin_num_groups.cpp
deleted file mode 100644
index bbff435..0000000
--- a/utests/builtin_num_groups.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
-According to the OpenCL v1.1 & v1.2 chapter 6.11, the behavior of function get_num_groups should be as following:
-
-  globals[0] = 1;
-  globals[1] = 4;
-  globals[2] = 9;
-  locals[0] = 1;
-  locals[1] = 2;
-  locals[2] = 3;
-
-#ifdef CL_VERSION_1_2 | CL_VERSION_1_1:
-get_num_groups(-1) = 1 (dimension:1)
-get_num_groups(0) = 1 (dimension:1)
-get_num_groups(1) = 1 (dimension:1)
-
-get_num_groups(-1) = 1 (dimension:2)
-get_num_groups(0) = 1 (dimension:2)
-get_num_groups(1) = 2 (dimension:2)
-get_num_groups(2) = 1 (dimension:2)
-
-get_num_groups(-1) = 1 (dimension:3)
-get_num_groups(0) = 1 (dimension:3)
-get_num_groups(1) = 2 (dimension:3)
-get_num_groups(2) = 3 (dimension:3)
-get_num_groups(3) = 1 (dimension:3)
-*/
-
-#define udebug 0
-#include "utest_helper.hpp"
-static void builtin_num_groups(void)
-{
-
-  // Setup kernel and buffers
-  int dim, dim_arg_global, num_groups, err;
-  OCL_CREATE_KERNEL("builtin_num_groups");
-
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_READ_WRITE, sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[1], CL_MEM_READ_WRITE, sizeof(int), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-
-  globals[0] = 1;
-  globals[1] = 4;
-  globals[2] = 9;
-  locals[0] = 1;
-  locals[1] = 2;
-  locals[2] = 3;
-
-  for( dim=1; dim <= 3; dim++ )
-  {
-
-    for( dim_arg_global = -1; dim_arg_global <= dim + 1; dim_arg_global++ )
-    {
-
-      err = clEnqueueWriteBuffer( queue, buf[1], CL_TRUE, 0, sizeof(int), &dim_arg_global, 0, NULL, NULL);
-      if (err != CL_SUCCESS)
-      {
-        printf("Error: Failed to write to source array!\n");
-        exit(1);
-      }
-
-      // Run the kernel
-      OCL_NDRANGE( dim );
-
-      err = clEnqueueReadBuffer( queue, buf[0], CL_TRUE, 0, sizeof(int), &num_groups, 0, NULL, NULL);
-      if (err != CL_SUCCESS)
-      {
-        printf("Error: Failed to read output array! %d\n", err);
-        exit(1);
-      }
-
-#if udebug
-      printf("get_num_groups(%d) = %d (dimension:%d)\n", dim_arg_global, num_groups, dim);
-#endif
-      if ( dim_arg_global >= 0 && dim_arg_global < dim)
-        OCL_ASSERT( num_groups == dim_arg_global + 1 );
-      else
-      {
-        OCL_ASSERT( num_groups == 1);
-      }
-    }
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(builtin_num_groups);
diff --git a/utests/builtin_pow.cpp b/utests/builtin_pow.cpp
deleted file mode 100644
index 8ed17ed..0000000
--- a/utests/builtin_pow.cpp
+++ /dev/null
@@ -1,92 +0,0 @@
-#include "utest_helper.hpp"
-#include <cmath>
-#include <algorithm>
-
-#define udebug 0
-#define printf_c(...) \
-{\
-  printf("\033[1m\033[40;31m");\
-  printf( __VA_ARGS__ );\
-  printf("\033[0m");\
-}
-const float ori_data[] = {-20.5, -1, -0.9, -0.01, 0, 0.01, 0.9, 1.0, 20.5};
-const int count_input_ori = sizeof(ori_data) / sizeof(ori_data[0]);
-const int count_input = count_input_ori * count_input_ori;
-
-float input_data1[count_input];
-float input_data2[count_input];
-const int max_function = 1;
-
-static void cpu_compiler_math(const float *src1, const float *src2, float *dst)
-{
-  dst[0] = powf(src1[0], src2[0]);
-//  dst[1] = src1[0];
-}
-
-static void builtin_pow(void)
-{
-  // Setup kernel and buffers
-  int k, i, index_cur;
-  float gpu_data[max_function * count_input] = {0}, cpu_data[max_function * count_input] = {0};
-
-  for(i=0; i<count_input_ori;i++)
-    for(k=0; k<count_input_ori;k++)
-    {
-      input_data1[i*count_input_ori+k] = ori_data[i];
-      input_data2[i*count_input_ori+k] = ori_data[k];
-    }
-
-  OCL_CREATE_KERNEL("builtin_pow");
-
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_READ_WRITE, count_input * max_function * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[1], CL_MEM_READ_WRITE, count_input * max_function * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[2], CL_MEM_READ_WRITE, count_input * max_function * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[3], CL_MEM_READ_WRITE, sizeof(int), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  OCL_SET_ARG(3, sizeof(cl_mem), &buf[3]);
-
-  globals[0] = count_input;
-  locals[0] = 1;
-
-  clEnqueueWriteBuffer( queue, buf[1], CL_TRUE, 0, count_input * sizeof(float), input_data1, 0, NULL, NULL);
-  clEnqueueWriteBuffer( queue, buf[2], CL_TRUE, 0, count_input * sizeof(float), input_data2, 0, NULL, NULL);
-  clEnqueueWriteBuffer( queue, buf[3], CL_TRUE, 0, sizeof(int), &max_function, 0, NULL, NULL);
-
-   // Run the kernel
-  OCL_NDRANGE( 1 );
-
-  clEnqueueReadBuffer( queue, buf[0], CL_TRUE, 0, sizeof(float) * max_function * count_input, gpu_data, 0, NULL, NULL);
-
-  for (k = 0; (uint)k < count_input; k++)
-  {
-    cpu_compiler_math( input_data1 + k, input_data2 + k, cpu_data + k * max_function);
-
-    for (i = 0; i < max_function; i++)
-    {
-      index_cur = k * max_function + i;
-#if udebug
-      if ( (isinf(cpu_data[index_cur]) && !isinf(gpu_data[index_cur])) ||
-           (isnan(cpu_data[index_cur]) && !isnan(gpu_data[index_cur])) ||
-           (fabs(gpu_data[index_cur] - cpu_data[index_cur]) > 1e-5f)   )
-      {
-        printf_c("%d/%d: x:%f, y:%f -> gpu:%f  cpu:%f\n", k, i, input_data1[k], input_data2[k], gpu_data[index_cur], cpu_data[index_cur]);
-      }
-      else
-        printf("%d/%d: x:%f, y:%f -> gpu:%f  cpu:%f\n", k, i, input_data1[k], input_data2[k], gpu_data[index_cur], cpu_data[index_cur]);
-#else
-     if (isinf(cpu_data[index_cur]))
-       OCL_ASSERT(isinf(gpu_data[index_cur]));
-     else if (isnan(cpu_data[index_cur]))
-       OCL_ASSERT(isnan(gpu_data[index_cur]));
-     else
-     {
-       OCL_ASSERT(fabs(gpu_data[index_cur] - cpu_data[index_cur]) < 1e-3f);
-     }
-#endif
-    }
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION_WITH_ISSUE(builtin_pow)
diff --git a/utests/builtin_remquo.cpp b/utests/builtin_remquo.cpp
deleted file mode 100644
index f67be12..0000000
--- a/utests/builtin_remquo.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-#include <cmath>
-#include <cstring>
-#include "utest_helper.hpp"
-
-void builtin_remquo(void)
-{
-  const int n = 16;
-  float src1[n], src2[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("builtin_remquo");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[3], 0, n * sizeof(int), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  OCL_SET_ARG(3, sizeof(cl_mem), &buf[3]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  src1[0] = 1,         src2[0] = 0;
-  src1[1] = 1,         src2[1] = -0.f;
-  src1[2] = INFINITY,  src2[2] = 1;
-  src1[3] = -INFINITY, src2[3] = 1;
-  src1[4] = nanf(""),  src2[4] = nanf("");
-  src1[5] = 1.625f,    src2[5] = 1;
-  src1[6] = -1.625f,   src2[6] = 1;
-  src1[7] = 1.625f,    src2[7] = -1;
-  src1[8] = -1.625f,   src2[8] = -1;
-  src1[9] = 5,         src2[9] = 2;
-  src1[10] = 3,        src2[10] = 2;
-  src1[11] = -0.f,     src2[11] = 1;
-
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  memcpy(buf_data[0], src1, n * sizeof(float));
-  memcpy(buf_data[1], src2, n * sizeof(float));
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(2);
-  OCL_MAP_BUFFER(3);
-  float *dest = (float *)buf_data[2];
-  int *quo = (int *)buf_data[3];
-  OCL_ASSERT(isnanf(dest[0]));
-  OCL_ASSERT(isnanf(dest[1]));
-  OCL_ASSERT(isnanf(dest[2]));
-  OCL_ASSERT(isnanf(dest[3]));
-  OCL_ASSERT(isnanf(dest[4]));
-  OCL_ASSERT(dest[5] == -0.375f && quo[5] ==  2);
-  OCL_ASSERT(dest[6] ==  0.375f && quo[6] == -2);
-  OCL_ASSERT(dest[7] == -0.375f && quo[7] == -2);
-  OCL_ASSERT(dest[8] ==  0.375f && quo[8] ==  2);
-  OCL_ASSERT(dest[9] == 1       && quo[9] ==  2);
-  OCL_ASSERT(dest[10] == -1     && quo[10] == 2);
-  OCL_ASSERT(dest[11] == -0.f   && quo[11] == 0);
-  OCL_UNMAP_BUFFER(2);
-  OCL_UNMAP_BUFFER(3);
-}
-
-MAKE_UTEST_FROM_FUNCTION(builtin_remquo);
diff --git a/utests/builtin_shuffle.cpp b/utests/builtin_shuffle.cpp
deleted file mode 100644
index c7fa86b..0000000
--- a/utests/builtin_shuffle.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-#include "utest_helper.hpp"
-
-void builtin_shuffle(void)
-{
-  const int n = 32;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("builtin_shuffle");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[3], 0, n * sizeof(float), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  OCL_SET_ARG(3, sizeof(cl_mem), &buf[3]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (int i = 0; i < n; i ++) {
-    ((float *)(buf_data[0]))[i] = rand();
-    ((float *)(buf_data[1]))[i] = rand();
-  }
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  OCL_MAP_BUFFER(2);
-  OCL_MAP_BUFFER(3);
-  for (int i = 0; i < n; i ++) {
-    OCL_ASSERT(((float *)(buf_data[0]))[i] == ((float *)(buf_data[3]))[i]);
-    OCL_ASSERT(((float *)(buf_data[1]))[i] == ((float *)(buf_data[2]))[i]);
-  }
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-  OCL_UNMAP_BUFFER(2);
-  OCL_UNMAP_BUFFER(3);
-}
-
-MAKE_UTEST_FROM_FUNCTION(builtin_shuffle);
diff --git a/utests/builtin_shuffle2.cpp b/utests/builtin_shuffle2.cpp
deleted file mode 100644
index 7a9ebd1..0000000
--- a/utests/builtin_shuffle2.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-#include "utest_helper.hpp"
-
-void builtin_shuffle2(void)
-{
-  const int n = 32;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("builtin_shuffle2");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[3], 0, n * sizeof(float), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  OCL_SET_ARG(3, sizeof(cl_mem), &buf[3]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (int i = 0; i < n; i ++) {
-    ((float *)(buf_data[0]))[i] = (rand() & 15) * 0.1f;
-    ((float *)(buf_data[1]))[i] = (rand() & 15) * 0.1f;
-  }
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  OCL_MAP_BUFFER(2);
-  OCL_MAP_BUFFER(3);
-  for (int i = 0; i < n; i ++) {
-    OCL_ASSERT(2 * ((float *)(buf_data[0]))[i] == ((float *)(buf_data[3]))[i]);
-    OCL_ASSERT(2 * ((float *)(buf_data[1]))[i] == ((float *)(buf_data[2]))[i]);
-  }
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-  OCL_UNMAP_BUFFER(2);
-  OCL_UNMAP_BUFFER(3);
-}
-
-MAKE_UTEST_FROM_FUNCTION(builtin_shuffle2);
diff --git a/utests/builtin_sign.cpp b/utests/builtin_sign.cpp
deleted file mode 100644
index 426de36..0000000
--- a/utests/builtin_sign.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-#include <cmath>
-#include "utest_helper.hpp"
-
-void builtin_sign(void)
-{
-  const int n = 32;
-  float src[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("builtin_sign");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  OCL_MAP_BUFFER(0);
-  src[0] = ((float*)buf_data[0])[0] = nanf("");
-  src[1] = ((float*)buf_data[0])[1] = INFINITY;
-  src[2] = ((float*)buf_data[0])[2] = 0.f;
-  src[3] = ((float*)buf_data[0])[3] = -0.f;
-  for (int i = 4; i < n; ++i) {
-    src[i] = ((float*)buf_data[0])[i] = (rand() & 15) * 0.1 - 0.75;
-  }
-  OCL_UNMAP_BUFFER(0);
-
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(1);
-  float *dst = (float*)buf_data[1];
-  OCL_ASSERT(dst[0] == 0);
-  OCL_ASSERT(dst[1] == 1.f);
-  OCL_ASSERT(dst[2] == 0.f);
-  OCL_ASSERT(dst[3] == -0.f);
-  for (int i = 4; i < n; ++i) {
-    if (src[i] == 0.f)
-      OCL_ASSERT(dst[i] == 0.f);
-    else if (src[i] == -0.f)
-      OCL_ASSERT(dst[i] == -0.f);
-    else
-      OCL_ASSERT(dst[i] == (src[i] > 0 ? 1 : -1));
-  }
-  OCL_UNMAP_BUFFER(1);
-}
-
-MAKE_UTEST_FROM_FUNCTION(builtin_sign);
diff --git a/utests/builtin_sinpi.cpp b/utests/builtin_sinpi.cpp
deleted file mode 100644
index 0e11a0d..0000000
--- a/utests/builtin_sinpi.cpp
+++ /dev/null
@@ -1,104 +0,0 @@
-#include <cmath>
-#include "utest_helper.hpp"
-
-static int as_int(float x) {
-  union {float f; int i;} u;
-  u.f = x;
-  return u.i;
-}
-
-static float sinpi(float x) {
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-  float y, z;
-  int n = 0, ix;
-  const float pi = 3.1415927410e+00f;
-
-  ix = as_int(x) & 0x7fffffff;
-
-  if (ix < 0x3e800000)
-    return sinf(pi * x);
-  y = -x;
-  z = floorf(y);
-  if (z != y) {
-    y *= 0.5f;
-    y = 2.f * (y - floorf(y));
-    n = y * 4.f;
-  } else {
-    if (ix >= 0x4b800000) {
-      y = 0;
-      n = 0;
-    } else {
-      if (ix < 0x4b000000)
-        z = y + 8.3886080000e+06f;
-      int n = as_int(z);
-      n &= 1;
-      y = n;
-      n <<= 2;
-    }
-  }
-  switch (n) {
-  case 0:
-    y = sinf(pi * y);
-    break;
-  case 1:
-  case 2:
-    y = cosf(pi * ((float) 0.5 - y));
-    break;
-  case 3:
-  case 4:
-    y = sinf(pi * (1.f - y));
-    break;
-  case 5:
-  case 6:
-    y = -cosf(pi * (y - (float) 1.5));
-    break;
-  default:
-    y = sinf(pi * (y - (float) 2.0));
-    break;
-  }
-  return -y;
-}
-
-void builtin_sinpi(void)
-{
-  const int n = 1024;
-  float src[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("builtin_sinpi");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  for (int j = 0; j < 1000; j ++) {
-    OCL_MAP_BUFFER(0);
-    for (int i = 0; i < n; ++i) {
-      src[i] = ((float*)buf_data[0])[i] = (j*n + i) * 0.01f;
-    }
-    OCL_UNMAP_BUFFER(0);
-
-    OCL_NDRANGE(1);
-
-    OCL_MAP_BUFFER(1);
-    float *dst = (float*)buf_data[1];
-    for (int i = 0; i < n; ++i) {
-      float cpu = sinpi(src[i]);
-      OCL_ASSERT (fabsf(cpu - dst[i]) < 1e-4);
-    }
-    OCL_UNMAP_BUFFER(1);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(builtin_sinpi);
diff --git a/utests/builtin_tgamma.cpp b/utests/builtin_tgamma.cpp
deleted file mode 100644
index 4c824d0..0000000
--- a/utests/builtin_tgamma.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-#include <cmath>
-#include "utest_helper.hpp"
-
-void builtin_tgamma(void)
-{
-  const int n = 1024;
-  float src[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("builtin_tgamma");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  for (int j = 0; j < 1024; j ++) {
-    OCL_MAP_BUFFER(0);
-    for (int i = 0; i < n; ++i) {
-      src[i] = ((float*)buf_data[0])[i] = (j*n+i+1) * 0.001f;
-    }
-    OCL_UNMAP_BUFFER(0);
-
-    OCL_NDRANGE(1);
-
-    OCL_MAP_BUFFER(1);
-    float *dst = (float*)buf_data[1];
-    for (int i = 0; i < n; ++i) {
-      float cpu = gammaf(src[i]);
-      if (isinf(cpu)) {
-        OCL_ASSERT(isinf(dst[i]));
-      } else if (fabsf(cpu - dst[i]) >= 1e-3) {
-        printf("%f %f %f\n", src[i], cpu, dst[i]);
-        OCL_ASSERT(0);
-      }
-    }
-    OCL_UNMAP_BUFFER(1);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(builtin_tgamma);
diff --git a/utests/cl_create_kernel.cpp b/utests/cl_create_kernel.cpp
deleted file mode 100644
index 36a7c38..0000000
--- a/utests/cl_create_kernel.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-#include "utest_helper.hpp"
-
-static void test_create_kernel(void)
-{
-  cl_ulong max_mem_size;
-  cl_int status;
-
-  OCL_CALL(clGetDeviceInfo, device, CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof(max_mem_size), &max_mem_size, NULL);
-  OCL_ASSERT(max_mem_size < (cl_ulong)-1);
-  // increment the size so that following clCreateBuffer() would fail.
-  ++max_mem_size;
-  buf[0] = clCreateBuffer(ctx, 0, max_mem_size, NULL, &status);
-  OCL_ASSERT(status == CL_INVALID_BUFFER_SIZE);
-}
-
-MAKE_UTEST_FROM_FUNCTION(test_create_kernel);
diff --git a/utests/compiler_abs.cpp b/utests/compiler_abs.cpp
deleted file mode 100644
index 3f477a8..0000000
--- a/utests/compiler_abs.cpp
+++ /dev/null
@@ -1,254 +0,0 @@
-#include "utest_helper.hpp"
-#include "string.h"
-
-template <typename T, int N>
-struct cl_vec {
-    T ptr[((N+1)/2)*2]; //align to 2 elements.
-
-    typedef cl_vec<T, N> vec_type;
-
-    cl_vec(void) {
-        memset(ptr, 0, sizeof(T) * ((N+1)/2)*2);
-    }
-    cl_vec(vec_type & other) {
-        memset(ptr, 0, sizeof(T) * ((N+1)/2)*2);
-        memcpy (this->ptr, other.ptr, sizeof(T) * N);
-    }
-
-    vec_type& operator= (vec_type & other) {
-        memset(ptr, 0, sizeof(T) * ((N+1)/2)*2);
-        memcpy (this->ptr, other.ptr, sizeof(T) * N);
-        return *this;
-    }
-
-    template <typename U> vec_type& operator= (cl_vec<U, N> & other) {
-        memset(ptr, 0, sizeof(T) * ((N+1)/2)*2);
-        memcpy (this->ptr, other.ptr, sizeof(T) * N);
-        return *this;
-    }
-
-    bool operator== (vec_type & other) {
-        return !memcmp (this->ptr, other.ptr, sizeof(T) * N);
-    }
-
-    void abs(void) {
-        int i = 0;
-        for (; i < N; i++) {
-            T f = ptr[i];
-            f = f < 0 ? -f : f;
-            ptr[i] = f;
-        }
-    }
-};
-
-template <typename T, typename U, int N> static void cpu (int global_id,
-        cl_vec<T, N> *src, cl_vec<U, N> *dst)
-{
-    cl_vec<T, N> v  = src[global_id];
-    v.abs();
-    dst[global_id] = v;
-}
-
-template <typename T, typename U> static void cpu(int global_id, T *src, U *dst)
-{
-    T f = src[global_id];
-    f = f < 0 ? -f : f;
-    dst[global_id] = (U)f;
-}
-
-template <typename T, int N> static void gen_rand_val (cl_vec<T, N>& vect)
-{
-    int i = 0;
-
-    memset(vect.ptr, 0, sizeof(T) * ((N+1)/2)*2);
-    for (; i < N; i++) {
-        vect.ptr[i] = static_cast<T>((rand() & 63) - 32);
-    }
-}
-
-template <typename T> static void gen_rand_val (T & val)
-{
-    val = static_cast<T>((rand() & 63) - 32);
-}
-
-template <typename T>
-inline static void print_data (T& val)
-{
-    if (std::is_unsigned<T>::value)
-        printf(" %u", val);
-    else
-        printf(" %d", val);
-}
-
-template <typename T, typename U, int N> static void dump_data (cl_vec<T, N>* src,
-        cl_vec<U, N>* dst, int n)
-{
-    U* val = reinterpret_cast<U *>(dst);
-
-    n = n*((N+1)/2)*2;
-
-    printf("\nRaw: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(((T *)buf_data[0])[i]);
-    }
-
-    printf("\nCPU: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(val[i]);
-    }
-    printf("\nGPU: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(((U *)buf_data[1])[i]);
-    }
-}
-
-template <typename T, typename U> static void dump_data (T* src, U* dst, int n)
-{
-    printf("\nRaw: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(((T *)buf_data[0])[i]);
-    }
-
-    printf("\nCPU: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(dst[i]);
-    }
-    printf("\nGPU: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(((U *)buf_data[1])[i]);
-    }
-}
-
-template <typename T, typename U> static void compiler_abs_with_type(void)
-{
-    const size_t n = 16;
-    U cpu_dst[16];
-    T cpu_src[16];
-
-    // Setup buffers
-    OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(T), NULL);
-    OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(T), NULL);
-    OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-    OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-    globals[0] = 16;
-    locals[0] = 16;
-
-    // Run random tests
-    for (uint32_t pass = 0; pass < 8; ++pass) {
-        OCL_MAP_BUFFER(0);
-
-        /* Clear the dst buffer to avoid random data. */
-        OCL_MAP_BUFFER(1);
-        memset(buf_data[1], 0, sizeof(U) * n);
-        OCL_UNMAP_BUFFER(1);
-
-        for (int32_t i = 0; i < (int32_t) n; ++i) {
-            gen_rand_val(cpu_src[i]);
-        }
-
-        memcpy(buf_data[0], cpu_src, sizeof(T) * n);
-
-        // Run the kernel on GPU
-        OCL_NDRANGE(1);
-
-        // Run on CPU
-        for (int32_t i = 0; i < (int32_t) n; ++i)
-            cpu(i, cpu_src, cpu_dst);
-
-        // Compare
-        OCL_MAP_BUFFER(1);
-
-//      dump_data(cpu_src, cpu_dst, n);
-
-        OCL_ASSERT(!memcmp(buf_data[1], cpu_dst, sizeof(T) * n));
-        OCL_UNMAP_BUFFER(1);
-        OCL_UNMAP_BUFFER(0);
-    }
-}
-
-#define ABS_TEST_TYPE_1(TYPE, UTYPE, KEEP_PROGRAM) \
-	static void compiler_abs_##TYPE (void) \
-        { \
-           OCL_CALL (cl_kernel_init, "compiler_abs.cl", "compiler_abs_"#TYPE, SOURCE, NULL);  \
-           compiler_abs_with_type<TYPE, UTYPE>(); \
-        } \
-	MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_abs_##TYPE, KEEP_PROGRAM);
-
-#define ABS_TEST_TYPE(TYPE, UTYPE) ABS_TEST_TYPE_1(TYPE, UTYPE, true)
-#define ABS_TEST_TYPE_END(TYPE, UTYPE) ABS_TEST_TYPE_1(TYPE, UTYPE, false)
-
-typedef unsigned char uchar;
-typedef unsigned short ushort;
-typedef unsigned int uint;
-ABS_TEST_TYPE(int, uint)
-ABS_TEST_TYPE(short, ushort)
-ABS_TEST_TYPE(char, uchar)
-ABS_TEST_TYPE(uint, uint)
-ABS_TEST_TYPE(ushort, ushort)
-ABS_TEST_TYPE(uchar, uchar)
-
-
-typedef cl_vec<int, 2> int2;
-typedef cl_vec<int, 3> int3;
-typedef cl_vec<int, 4> int4;
-typedef cl_vec<int, 8> int8;
-typedef cl_vec<int, 16> int16;
-typedef cl_vec<unsigned int, 2> uint2;
-typedef cl_vec<unsigned int, 3> uint3;
-typedef cl_vec<unsigned int, 4> uint4;
-typedef cl_vec<unsigned int, 8> uint8;
-typedef cl_vec<unsigned int, 16> uint16;
-ABS_TEST_TYPE(int2, uint2)
-ABS_TEST_TYPE(int3, uint3)
-ABS_TEST_TYPE(int4, uint4)
-ABS_TEST_TYPE(int8, uint8)
-ABS_TEST_TYPE(int16, uint16)
-ABS_TEST_TYPE(uint2, uint2)
-ABS_TEST_TYPE(uint3, uint3)
-ABS_TEST_TYPE(uint4, uint4)
-ABS_TEST_TYPE(uint8, uint8)
-ABS_TEST_TYPE(uint16, uint16)
-
-
-typedef cl_vec<char, 2> char2;
-typedef cl_vec<char, 3> char3;
-typedef cl_vec<char, 4> char4;
-typedef cl_vec<char, 8> char8;
-typedef cl_vec<char, 16> char16;
-typedef cl_vec<unsigned char, 2> uchar2;
-typedef cl_vec<unsigned char, 3> uchar3;
-typedef cl_vec<unsigned char, 4> uchar4;
-typedef cl_vec<unsigned char, 8> uchar8;
-typedef cl_vec<unsigned char, 16> uchar16;
-ABS_TEST_TYPE(char2, uchar2)
-ABS_TEST_TYPE(char3, uchar3)
-ABS_TEST_TYPE(char4, uchar4)
-ABS_TEST_TYPE(char8, uchar8)
-ABS_TEST_TYPE(char16, uchar16)
-ABS_TEST_TYPE(uchar2, uchar2)
-ABS_TEST_TYPE(uchar3, uchar3)
-ABS_TEST_TYPE(uchar4, uchar4)
-ABS_TEST_TYPE(uchar8, uchar8)
-ABS_TEST_TYPE(uchar16, uchar16)
-
-
-typedef cl_vec<short, 2> short2;
-typedef cl_vec<short, 3> short3;
-typedef cl_vec<short, 4> short4;
-typedef cl_vec<short, 8> short8;
-typedef cl_vec<short, 16> short16;
-typedef cl_vec<unsigned short, 2> ushort2;
-typedef cl_vec<unsigned short, 3> ushort3;
-typedef cl_vec<unsigned short, 4> ushort4;
-typedef cl_vec<unsigned short, 8> ushort8;
-typedef cl_vec<unsigned short, 16> ushort16;
-ABS_TEST_TYPE(short2, ushort2)
-ABS_TEST_TYPE(short3, ushort3)
-ABS_TEST_TYPE(short4, ushort4)
-ABS_TEST_TYPE(short8, ushort8)
-ABS_TEST_TYPE(short16, ushort16)
-ABS_TEST_TYPE(ushort2, ushort2)
-ABS_TEST_TYPE(ushort3, ushort3)
-ABS_TEST_TYPE(ushort4, ushort4)
-ABS_TEST_TYPE(ushort8, ushort8)
-ABS_TEST_TYPE_END(ushort16, ushort16)
diff --git a/utests/compiler_abs_diff.cpp b/utests/compiler_abs_diff.cpp
deleted file mode 100644
index 15a1f90..0000000
--- a/utests/compiler_abs_diff.cpp
+++ /dev/null
@@ -1,295 +0,0 @@
-#include "utest_helper.hpp"
-#include "string.h"
-
-template <typename T, int N>
-struct cl_vec {
-    T ptr[((N+1)/2)*2]; //align to 2 elements.
-
-    typedef cl_vec<T, N> vec_type;
-
-    cl_vec(void) {
-        memset(ptr, 0, sizeof(T) * ((N+1)/2)*2);
-    }
-    cl_vec(vec_type & other) {
-        memset(ptr, 0, sizeof(T) * ((N+1)/2)*2);
-        memcpy (this->ptr, other.ptr, sizeof(T) * N);
-    }
-
-    vec_type& operator= (vec_type & other) {
-        memset(ptr, 0, sizeof(T) * ((N+1)/2)*2);
-        memcpy (this->ptr, other.ptr, sizeof(T) * N);
-        return *this;
-    }
-
-    template <typename U> vec_type& operator= (cl_vec<U, N> & other) {
-        memset(ptr, 0, sizeof(T) * ((N+1)/2)*2);
-        memcpy (this->ptr, other.ptr, sizeof(T) * N);
-        return *this;
-    }
-
-    bool operator== (vec_type & other) {
-        return !memcmp (this->ptr, other.ptr, sizeof(T) * N);
-    }
-
-    void abs_diff(vec_type & other) {
-        int i = 0;
-        for (; i < N; i++) {
-            T a = ptr[i];
-            T b = other.ptr[i];
-            T f = a > b ? (a - b) : (b - a);
-            ptr[i] = f;
-        }
-    }
-};
-
-template <typename T, typename U, int N> static void cpu (int global_id,
-        cl_vec<T, N> *x, cl_vec<T, N> *y, cl_vec<U, N> *diff)
-{
-    cl_vec<T, N> v  = x[global_id];
-    v.abs_diff(y[global_id]);
-    diff[global_id] = v;
-}
-
-template <typename T, typename U> static void cpu(int global_id, T *x, T *y, U *diff)
-{
-    T a = x[global_id];
-    T b = y[global_id];
-    U f = a > b ? (a - b) : (b - a);
-    diff[global_id] = f;
-}
-
-template <typename T, int N> static void gen_rand_val (cl_vec<T, N>& vect)
-{
-    int i = 0;
-    for (; i < N; i++) {
-        vect.ptr[i] = static_cast<T>((rand() & 63) - 32);
-    }
-}
-
-template <typename T> static void gen_rand_val (T & val)
-{
-    val = static_cast<T>((rand() & 63) - 32);
-}
-
-template <typename T>
-inline static void print_data (T& val)
-{
-    if (std::is_unsigned<T>::value)
-        printf(" %u", val);
-    else
-        printf(" %d", val);
-}
-
-template <typename T, typename U, int N> static void dump_data (cl_vec<T, N>* x,
-        cl_vec<T, N>* y, cl_vec<U, N>* diff, int n)
-{
-    U* val = reinterpret_cast<U *>(diff);
-
-    n = n*((N+1)/2)*2;
-
-    printf("\nRaw x: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(((T *)buf_data[0])[i]);
-    }
-    printf("\nRaw y: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(((T *)buf_data[1])[i]);
-    }
-
-    printf("\nCPU diff: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(val[i]);
-    }
-    printf("\nGPU diff: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(((U *)buf_data[2])[i]);
-    }
-}
-
-template <typename T, typename U> static void dump_data (T* x, T* y, U* diff, int n)
-{
-    printf("\nRaw x: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(((T *)buf_data[0])[i]);
-    }
-    printf("\nRaw y: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(((T *)buf_data[1])[i]);
-    }
-
-    printf("\nCPU diff: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(diff[i]);
-    }
-    printf("\nGPU diff: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(((U *)buf_data[2])[i]);
-    }
-}
-
-template <typename T, typename U> static void compiler_abs_diff_with_type(void)
-{
-    const size_t n = 16;
-    U cpu_diff[16];
-    T cpu_x[16];
-    T cpu_y[16];
-
-    // Setup buffers
-    OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(T), NULL);
-    OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(T), NULL);
-    OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(U), NULL);
-    OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-    OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-    OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-    globals[0] = 16;
-    locals[0] = 16;
-
-    // Run random tests
-    for (uint32_t pass = 0; pass < 8; ++pass) {
-        OCL_MAP_BUFFER(0);
-        OCL_MAP_BUFFER(1);
-
-        /* Clear the dst buffer to avoid random data. */
-        OCL_MAP_BUFFER(2);
-        memset(buf_data[2], 0, sizeof(U) * n);
-        OCL_UNMAP_BUFFER(2);
-
-        for (int32_t i = 0; i < (int32_t) n; ++i) {
-            gen_rand_val(cpu_x[i]);
-            gen_rand_val(cpu_y[i]);
-        }
-
-        memcpy(buf_data[0], cpu_x, sizeof(T) * n);
-        memcpy(buf_data[1], cpu_y, sizeof(T) * n);
-
-        // Run the kernel on GPU
-        OCL_NDRANGE(1);
-
-        // Run on CPU
-        for (int32_t i = 0; i < (int32_t) n; ++i)
-            cpu(i, cpu_x, cpu_y, cpu_diff);
-
-        // Compare
-        OCL_MAP_BUFFER(2);
-
-//      dump_data(cpu_x, cpu_y, cpu_diff, n);
-
-        OCL_ASSERT(!memcmp(buf_data[2], cpu_diff, sizeof(T) * n));
-
-        OCL_UNMAP_BUFFER(0);
-        OCL_UNMAP_BUFFER(1);
-        OCL_UNMAP_BUFFER(2);
-    }
-}
-
-
-#define ABS_TEST_DIFF_TYPE_2(TYPE, CLTYPE, UTYPE, KEEP_PROGRAM) \
-	static void compiler_abs_diff_##CLTYPE (void) \
-        { \
-           OCL_CALL (cl_kernel_init, "compiler_abs_diff.cl", "compiler_abs_diff_"#CLTYPE, SOURCE, NULL);  \
-           compiler_abs_diff_with_type<TYPE, UTYPE>(); \
-        } \
-	MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_abs_diff_##CLTYPE, KEEP_PROGRAM);
-
-#define ABS_TEST_DIFF_TYPE(TYPE, UTYPE) ABS_TEST_DIFF_TYPE_2(TYPE, TYPE, UTYPE, true)
-
-#define ABS_TEST_DIFF_TYPE_END(TYPE, UTYPE) ABS_TEST_DIFF_TYPE_2(TYPE, TYPE, UTYPE, false)
-
-
-typedef unsigned char uchar;
-typedef unsigned short ushort;
-typedef unsigned int uint;
-typedef uint64_t ulong64;
-ABS_TEST_DIFF_TYPE(int, uint)
-ABS_TEST_DIFF_TYPE_2(int64_t, long, ulong64, true)
-ABS_TEST_DIFF_TYPE(short, ushort)
-ABS_TEST_DIFF_TYPE(char, uchar)
-ABS_TEST_DIFF_TYPE(uint, uint)
-ABS_TEST_DIFF_TYPE_2(ulong64, ulong, ulong64, true)
-ABS_TEST_DIFF_TYPE(ushort, ushort)
-ABS_TEST_DIFF_TYPE(uchar, uchar)
-
-typedef cl_vec<int, 2> int2;
-typedef cl_vec<int, 3> int3;
-typedef cl_vec<int, 4> int4;
-typedef cl_vec<int, 8> int8;
-typedef cl_vec<int, 16> int16;
-typedef cl_vec<unsigned int, 2> uint2;
-typedef cl_vec<unsigned int, 3> uint3;
-typedef cl_vec<unsigned int, 4> uint4;
-typedef cl_vec<unsigned int, 8> uint8;
-typedef cl_vec<unsigned int, 16> uint16;
-ABS_TEST_DIFF_TYPE(int2, uint2)
-ABS_TEST_DIFF_TYPE(int3, uint3)
-ABS_TEST_DIFF_TYPE(int4, uint4)
-ABS_TEST_DIFF_TYPE(int8, uint8)
-ABS_TEST_DIFF_TYPE(int16, uint16)
-ABS_TEST_DIFF_TYPE(uint2, uint2)
-ABS_TEST_DIFF_TYPE(uint3, uint3)
-ABS_TEST_DIFF_TYPE(uint4, uint4)
-ABS_TEST_DIFF_TYPE(uint8, uint8)
-ABS_TEST_DIFF_TYPE(uint16, uint16)
-
-typedef cl_vec<int64_t, 2> long2;
-typedef cl_vec<int64_t, 3> long3;
-typedef cl_vec<int64_t, 4> long4;
-typedef cl_vec<int64_t, 8> long8;
-typedef cl_vec<int64_t, 16> long16;
-typedef cl_vec<uint64_t, 2> ulong2;
-typedef cl_vec<uint64_t, 3> ulong3;
-typedef cl_vec<uint64_t, 4> ulong4;
-typedef cl_vec<uint64_t, 8> ulong8;
-typedef cl_vec<uint64_t, 16> ulong16;
-ABS_TEST_DIFF_TYPE(long2, ulong2)
-ABS_TEST_DIFF_TYPE(long3, ulong3)
-ABS_TEST_DIFF_TYPE(long4, ulong4)
-ABS_TEST_DIFF_TYPE(long8, ulong8)
-ABS_TEST_DIFF_TYPE(long16, ulong16)
-ABS_TEST_DIFF_TYPE(ulong2, ulong2)
-ABS_TEST_DIFF_TYPE(ulong3, ulong3)
-ABS_TEST_DIFF_TYPE(ulong4, ulong4)
-ABS_TEST_DIFF_TYPE(ulong8, ulong8)
-ABS_TEST_DIFF_TYPE(ulong16, ulong16)
-
-typedef cl_vec<char, 2> char2;
-typedef cl_vec<char, 3> char3;
-typedef cl_vec<char, 4> char4;
-typedef cl_vec<char, 8> char8;
-typedef cl_vec<char, 16> char16;
-typedef cl_vec<unsigned char, 2> uchar2;
-typedef cl_vec<unsigned char, 3> uchar3;
-typedef cl_vec<unsigned char, 4> uchar4;
-typedef cl_vec<unsigned char, 8> uchar8;
-typedef cl_vec<unsigned char, 16> uchar16;
-ABS_TEST_DIFF_TYPE(char2, uchar2)
-ABS_TEST_DIFF_TYPE(char3, uchar3)
-ABS_TEST_DIFF_TYPE(char4, uchar4)
-ABS_TEST_DIFF_TYPE(char8, uchar8)
-ABS_TEST_DIFF_TYPE(char16, uchar16)
-ABS_TEST_DIFF_TYPE(uchar2, uchar2)
-ABS_TEST_DIFF_TYPE(uchar3, uchar3)
-ABS_TEST_DIFF_TYPE(uchar4, uchar4)
-ABS_TEST_DIFF_TYPE(uchar8, uchar8)
-ABS_TEST_DIFF_TYPE(uchar16, uchar16)
-
-
-typedef cl_vec<short, 2> short2;
-typedef cl_vec<short, 3> short3;
-typedef cl_vec<short, 4> short4;
-typedef cl_vec<short, 8> short8;
-typedef cl_vec<short, 16> short16;
-typedef cl_vec<unsigned short, 2> ushort2;
-typedef cl_vec<unsigned short, 3> ushort3;
-typedef cl_vec<unsigned short, 4> ushort4;
-typedef cl_vec<unsigned short, 8> ushort8;
-typedef cl_vec<unsigned short, 16> ushort16;
-ABS_TEST_DIFF_TYPE(short2, ushort2)
-ABS_TEST_DIFF_TYPE(short3, ushort3)
-ABS_TEST_DIFF_TYPE(short4, ushort4)
-ABS_TEST_DIFF_TYPE(short8, ushort8)
-ABS_TEST_DIFF_TYPE(short16, ushort16)
-ABS_TEST_DIFF_TYPE(ushort2, ushort2)
-ABS_TEST_DIFF_TYPE(ushort3, ushort3)
-ABS_TEST_DIFF_TYPE(ushort4, ushort4)
-ABS_TEST_DIFF_TYPE(ushort8, ushort8)
-ABS_TEST_DIFF_TYPE_END(ushort16, ushort16)
diff --git a/utests/compiler_address_space.cpp b/utests/compiler_address_space.cpp
deleted file mode 100644
index 89c7a38..0000000
--- a/utests/compiler_address_space.cpp
+++ /dev/null
@@ -1,10 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_address_space(void)
-{
-  OCL_CREATE_KERNEL("compiler_address_space");
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_address_space);
-
-
diff --git a/utests/compiler_argument_structure.cpp b/utests/compiler_argument_structure.cpp
deleted file mode 100644
index 22464a5..0000000
--- a/utests/compiler_argument_structure.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#include "utest_helper.hpp"
-
-struct hop { int x, y; };
-
-void compiler_argument_structure(void)
-{
-  const size_t n = 2048;
-  hop h = {3, 4};
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_argument_structure");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(hop), &h);
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-
-  // Check results
-  for (uint32_t i = 0; i < n; ++i)
-    OCL_ASSERT(((uint32_t*)buf_data[0])[i] == 7);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_argument_structure);
-
diff --git a/utests/compiler_argument_structure_indirect.cpp b/utests/compiler_argument_structure_indirect.cpp
deleted file mode 100644
index a4584d5..0000000
--- a/utests/compiler_argument_structure_indirect.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#include "utest_helper.hpp"
-
-struct hop { int x[16]; };
-
-void compiler_argument_structure_indirect(void)
-{
-  const size_t n = 2048;
-  hop h;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_argument_structure_indirect");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  for (int i = 0; i < 16; ++i) h.x[i] = i;
-  OCL_SET_ARG(1, sizeof(hop), &h);
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-
-  // Check results
-  for (uint32_t i = 0; i < n; ++i)
-    OCL_ASSERT(((uint32_t*)buf_data[0])[i] == 7);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_argument_structure_indirect);
-
diff --git a/utests/compiler_arith_shift_right.cpp b/utests/compiler_arith_shift_right.cpp
deleted file mode 100644
index 6485571..0000000
--- a/utests/compiler_arith_shift_right.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-#include "utest_helper.hpp"
-
-static void cpu(int global_id, int *src, int *dst) {
-  dst[global_id] = src[global_id] >> 24;
-}
-
-void compiler_arith_shift_right(void)
-{
-  const size_t n = 16;
-  int cpu_src[16];
-  int cpu_dst[16];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_arith_shift_right");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = 16;
-  locals[0] = 16;
-
-  // Run random tests
-  for (uint32_t pass = 0; pass < 8; ++pass) {
-    OCL_MAP_BUFFER(0);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      cpu_src[i] = ((int*)buf_data[0])[i] = 0x80000000 | rand();
-    OCL_UNMAP_BUFFER(0);
-
-    // Run the kernel on GPU
-    OCL_NDRANGE(1);
-
-    // Run on CPU
-    for (int32_t i = 0; i < (int32_t) n; ++i) cpu(i, cpu_src, cpu_dst);
-
-    // Compare
-    OCL_MAP_BUFFER(1);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      OCL_ASSERT(((int *)buf_data[1])[i] == cpu_dst[i]);
-    OCL_UNMAP_BUFFER(1);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_arith_shift_right);
diff --git a/utests/compiler_array.cpp b/utests/compiler_array.cpp
deleted file mode 100644
index 8806c99..0000000
--- a/utests/compiler_array.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_array(void)
-{
-  const size_t n = 16;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_array");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-
-  // First control flow
-  OCL_MAP_BUFFER(0);
-  for (uint32_t i = 0; i < n; ++i) ((int32_t*)buf_data[0])[i] = -2;
-  OCL_UNMAP_BUFFER(0);
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < 16; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 3);
-  OCL_UNMAP_BUFFER(1);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_array);
-
diff --git a/utests/compiler_array0.cpp b/utests/compiler_array0.cpp
deleted file mode 100644
index 7cf2bbb..0000000
--- a/utests/compiler_array0.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-#include "utest_helper.hpp"
-
-static void cpu(int global_id, int *src, int *dst) {
-  int i;
-  int final[16];
-  for (i = 0; i < 16; ++i) {
-    int array[16], j;
-    for (j = 0; j < 16; ++j)
-      array[j] = global_id;
-    for (j = 0; j < src[0]; ++j)
-      array[j] = 1+src[j];
-    final[i] = array[i];
-  }
-  dst[global_id] = final[global_id];
-}
-
-void compiler_array0(void)
-{
-  const size_t n = 16;
-  int cpu_dst[16], cpu_src[16];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_array0");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = 16;
-  locals[0] = 16;
-
-  // Run random tests
-  for (uint32_t pass = 0; pass < 8; ++pass) {
-    OCL_MAP_BUFFER(0);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      cpu_src[i] = ((int32_t*)buf_data[0])[i] = rand() % 16;
-    OCL_UNMAP_BUFFER(0);
-
-    // Run the kernel on GPU
-    OCL_NDRANGE(1);
-
-    // Run on CPU
-    for (int32_t i = 0; i <(int32_t) n; ++i) cpu(i, cpu_src, cpu_dst);
-
-    // Compare
-    OCL_MAP_BUFFER(1);
-    for (int32_t i = 0; i < 11; ++i)
-      OCL_ASSERT(((int32_t*)buf_data[1])[i] == cpu_dst[i]);
-    OCL_UNMAP_BUFFER(1);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_array0);
-
-
diff --git a/utests/compiler_array1.cpp b/utests/compiler_array1.cpp
deleted file mode 100644
index fe1ecec..0000000
--- a/utests/compiler_array1.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-#include "utest_helper.hpp"
-
-static void cpu(int global_id, int *src, int *dst) {
-  int final[16];
-  for (int i = 0; i < 16; ++i) {
-    int array[16];
-    for (int j = 0; j < src[0]; ++j)
-      array[j] = 1+src[0];
-    for (int j = src[0]; j < 16; ++j)
-      array[j] = global_id;
-    final[i] = array[i];
-  }
-  dst[global_id] = final[global_id];
-}
-
-void compiler_array1(void)
-{
-  const size_t n = 16;
-  int cpu_dst[16], cpu_src[16];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_array1");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = 16;
-  locals[0] = 16;
-
-  // Run random tests
-  for (uint32_t pass = 0; pass < 8; ++pass) {
-    OCL_MAP_BUFFER(0);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      cpu_src[i] = ((int32_t*)buf_data[0])[i] = rand() % 16;
-    OCL_UNMAP_BUFFER(0);
-
-    // Run the kernel on GPU
-    OCL_NDRANGE(1);
-
-    // Run on CPU
-    for (int32_t i = 0; i <(int32_t) n; ++i) cpu(i, cpu_src, cpu_dst);
-
-    // Compare
-    OCL_MAP_BUFFER(1);
-    for (int32_t i = 0; i < 11; ++i)
-      OCL_ASSERT(((int32_t*)buf_data[1])[i] == cpu_dst[i]);
-    OCL_UNMAP_BUFFER(1);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_array1);
-
diff --git a/utests/compiler_array2.cpp b/utests/compiler_array2.cpp
deleted file mode 100644
index 61ca9da..0000000
--- a/utests/compiler_array2.cpp
+++ /dev/null
@@ -1,50 +0,0 @@
-#include "utest_helper.hpp"
-
-static void cpu(int global_id, int *src, int *dst) {
-  int final[16];
-  int array[16];
-  for (int j = 0; j < 16; ++j) array[j] = j;
-  for (int j = 0; j < 16; ++j) final[j] = j+1;
-  if (global_id == 15)
-    dst[global_id] = final[global_id];
-  else
-    dst[global_id] = array[15 - global_id];
-}
-
-void compiler_array2(void)
-{
-  const size_t n = 16;
-  int cpu_dst[16], cpu_src[16];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_array2");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = 16;
-  locals[0] = 16;
-
-  // Run random tests
-  for (uint32_t pass = 0; pass < 8; ++pass) {
-    OCL_MAP_BUFFER(0);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      cpu_src[i] = ((int32_t*)buf_data[0])[i] = rand() % 16;
-    OCL_UNMAP_BUFFER(0);
-
-    // Run the kernel on GPU
-    OCL_NDRANGE(1);
-
-    // Run on CPU
-    for (int32_t i = 0; i <(int32_t) n; ++i) cpu(i, cpu_src, cpu_dst);
-
-    // Compare
-    OCL_MAP_BUFFER(1);
-    for (int32_t i = 0; i < 11; ++i)
-      OCL_ASSERT(((int32_t*)buf_data[1])[i] == cpu_dst[i]);
-    OCL_UNMAP_BUFFER(1);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_array2);
-
diff --git a/utests/compiler_array3.cpp b/utests/compiler_array3.cpp
deleted file mode 100644
index 865b1e5..0000000
--- a/utests/compiler_array3.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-#include "utest_helper.hpp"
-
-static void cpu(int global_id, int *src, int *dst) {
-  int tmp[32];
-  for (int i = 0; i < 16; ++i) {
-    for (int j = 0; j < 16; ++j)
-      tmp[j] = global_id;
-    for (int j = 0; j < src[0]; ++j)
-      tmp[j] = 1+src[j];
-    tmp[16+i] = tmp[i];
-  }
-  dst[global_id] = tmp[16+global_id];
-}
-
-void compiler_array3(void)
-{
-  const size_t n = 16;
-  int cpu_dst[16], cpu_src[16];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_array3");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = 16;
-  locals[0] = 16;
-
-  // Run random tests
-  for (uint32_t pass = 0; pass < 8; ++pass) {
-    OCL_MAP_BUFFER(0);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      cpu_src[i] = ((int32_t*)buf_data[0])[i] = rand() % 16;
-    OCL_UNMAP_BUFFER(0);
-
-    // Run the kernel on GPU
-    OCL_NDRANGE(1);
-
-    // Run on CPU
-    for (int32_t i = 0; i <(int32_t) n; ++i) cpu(i, cpu_src, cpu_dst);
-
-    // Compare
-    OCL_MAP_BUFFER(1);
-    for (int32_t i = 0; i < 11; ++i)
-      OCL_ASSERT(((int32_t*)buf_data[1])[i] == cpu_dst[i]);
-    OCL_UNMAP_BUFFER(1);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_array3);
-
diff --git a/utests/compiler_async_copy.cpp b/utests/compiler_async_copy.cpp
deleted file mode 100644
index 7951ff7..0000000
--- a/utests/compiler_async_copy.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-#include "utest_helper.hpp"
-#include <stdint.h>
-
-typedef unsigned char uchar;
-typedef unsigned short ushort;
-
-#define DEF(TYPE, KER_TYPE, VEC_SIZE) \
-static void compiler_async_copy_##KER_TYPE##VEC_SIZE(void) \
-{ \
-  const size_t n = 1024; \
-  const size_t local_size = 32; \
-  const int copiesPerWorkItem = 5; \
-\
-  /* Setup kernel and buffers */\
-  OCL_CREATE_KERNEL_FROM_FILE("compiler_async_copy", "compiler_async_copy_" # KER_TYPE # VEC_SIZE); \
-  OCL_CREATE_BUFFER(buf[0], 0, n * copiesPerWorkItem * sizeof(TYPE) * VEC_SIZE, NULL); \
-  OCL_CREATE_BUFFER(buf[1], 0, n * copiesPerWorkItem * sizeof(TYPE) * VEC_SIZE, NULL); \
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]); \
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]); \
-  OCL_SET_ARG(2, local_size*copiesPerWorkItem*sizeof(TYPE)*VEC_SIZE, NULL); \
-  OCL_SET_ARG(3, sizeof(int), &copiesPerWorkItem); \
-\
-  OCL_MAP_BUFFER(1); \
-  for (uint32_t i = 0; i < n * copiesPerWorkItem * VEC_SIZE; ++i) \
-      ((TYPE*)buf_data[1])[i] = rand(); \
-  OCL_UNMAP_BUFFER(1); \
-\
-  /* Run the kernel */\
-  globals[0] = n; \
-  locals[0] = local_size; \
-  OCL_NDRANGE(1); \
-  OCL_MAP_BUFFER(0); \
-  OCL_MAP_BUFFER(1); \
-\
-  /* Check results */\
-  TYPE *dst = (TYPE*)buf_data[0]; \
-  TYPE *src = (TYPE*)buf_data[1]; \
-  for (uint32_t i = 0; i < n * copiesPerWorkItem * VEC_SIZE; i++) \
-    OCL_ASSERT(dst[i] == src[i]); \
-  OCL_UNMAP_BUFFER(0); \
-  OCL_UNMAP_BUFFER(1); \
-} \
-\
-MAKE_UTEST_FROM_FUNCTION(compiler_async_copy_##KER_TYPE##VEC_SIZE);
-
-DEF(char, char, 2);
-DEF(uchar, uchar, 2);
-DEF(short, short, 2);
-DEF(ushort, ushort, 2);
-DEF(int, int, 2);
-DEF(uint, uint, 2);
-DEF(int64_t, long, 2);
-DEF(uint64_t, ulong, 2);
-DEF(float, float, 2);
-DEF(double, double, 2);
diff --git a/utests/compiler_async_copy_and_prefetch.cpp b/utests/compiler_async_copy_and_prefetch.cpp
deleted file mode 100644
index 323faf9..0000000
--- a/utests/compiler_async_copy_and_prefetch.cpp
+++ /dev/null
@@ -1,10 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_async_copy_and_prefetch(void)
-{
-  OCL_CREATE_KERNEL("compiler_async_copy_and_prefetch");
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_async_copy_and_prefetch);
-
-
diff --git a/utests/compiler_async_stride_copy.cpp b/utests/compiler_async_stride_copy.cpp
deleted file mode 100644
index 132f917..0000000
--- a/utests/compiler_async_stride_copy.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_async_stride_copy(void)
-{
-  const size_t n = 1024;
-  const size_t local_size = 128;
-  const int copiesPerWorkItem = 5;
-  const int stride =3;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_async_stride_copy");
-  OCL_CREATE_BUFFER(buf[0], 0, n * copiesPerWorkItem * sizeof(char) * 4 * stride, NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * copiesPerWorkItem * sizeof(char) * 4 * stride, NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, local_size*copiesPerWorkItem*sizeof(char)*4, NULL);
-  OCL_SET_ARG(3, sizeof(int), &copiesPerWorkItem);
-  OCL_SET_ARG(4, sizeof(int), &stride);
-
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < n * copiesPerWorkItem * 4 * stride; ++i)
-      ((char*)buf_data[1])[i] = rand() && 0xff;
-  OCL_UNMAP_BUFFER(1);
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = local_size;
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-
-  // Check results
-  char *dst = (char*)buf_data[0];
-  char *src = (char*)buf_data[1];
-  for (uint32_t i = 0; i < n * copiesPerWorkItem; i += stride * 4) {
-    OCL_ASSERT(dst[i + 0] == src[i + 0] + 3);
-    OCL_ASSERT(dst[i + 1] == src[i + 1] + 3);
-    OCL_ASSERT(dst[i + 2] == src[i + 2] + 3);
-    OCL_ASSERT(dst[i + 3] == src[i + 3] + 3);
-  }
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_async_stride_copy);
diff --git a/utests/compiler_atomic_functions.cpp b/utests/compiler_atomic_functions.cpp
deleted file mode 100644
index 65f1c5a..0000000
--- a/utests/compiler_atomic_functions.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-#include "utest_helper.hpp"
-#include <cmath>
-#include <algorithm>
-#include <string.h>
-
-#define GROUP_NUM 16
-#define LOCAL_SIZE 256
-static void cpu_compiler_atomic(int *dst, int *src)
-{
-  dst[4] = 0xffffffff;
-  int tmp[16] = { 0 };
-  tmp[4] = -1;
-  for(int j=0; j<LOCAL_SIZE; j++) {
-    int i = j % 12;
-
-    switch(i) {
-      case 0: tmp[i] += 1; break;
-      case 1: tmp[i] -= 1; break;
-      case 2: tmp[i] += src[j]; break;
-      case 3: tmp[i] -= src[j]; break;
-      case 4: tmp[i] &= ~(src[j]<<(j>>4)); break;
-      case 5: tmp[i] |= src[j]<<(j>>4); break;
-      case 6: tmp[i] ^= src[j]; break;
-      case 7: tmp[i] = tmp[i] < -src[j] ? tmp[i] : -src[j]; break;
-      case 8: tmp[i] = tmp[i] > src[j] ? tmp[i] : src[j]; break;
-      case 9: tmp[i] = (unsigned int)tmp[i] < (unsigned int)(-src[j]) ? tmp[i] : -src[j]; break;
-      case 10: tmp[i] = (unsigned int)tmp[i] > (unsigned int)(src[j]) ? tmp[i] : src[j]; break;
-      case 11:  tmp[i] = src[10]; break;
-      default:  break;
-    }
-  }
-
-  for(int k=0; k<GROUP_NUM; k++) {
-    for(int j=0; j<LOCAL_SIZE; j++) {
-      int i = j % 12;
-
-      switch(i) {
-        case 0: dst[i] += 1; break;
-        case 1: dst[i] -= 1; break;
-        case 2: dst[i] += src[j]; break;
-        case 3: dst[i] -= src[j]; break;
-        case 4: dst[i] &= ~(src[j]<<(j>>4)); break;
-        case 5: dst[i] |= src[j]<<(j>>4); break;
-        case 6: dst[i] ^= src[j]; break;
-        case 7: dst[i] = dst[i] < -src[j] ? dst[i] : -src[j]; break;
-        case 8: dst[i] = dst[i] > src[j] ? dst[i] : src[j]; break;
-        case 9: dst[i] = (unsigned int)dst[i] < (unsigned int)(-src[j]) ? dst[i] : -src[j]; break;
-        case 10: dst[i] = (unsigned int)dst[i] > (unsigned int)(src[j]) ? dst[i] : src[j]; break;
-        case 11:  dst[i] = src[10]; break;
-        default:  break;
-      }
-    }
-  }
-
-  for(int i=0; i<12; i++)
-    dst[i+12] = tmp[i];
-}
-
-static void compiler_atomic_functions(void)
-{
-  const size_t n = GROUP_NUM * LOCAL_SIZE;
-  int cpu_dst[24] = {0}, cpu_src[256];
-
-  globals[0] = n;
-  locals[0] = LOCAL_SIZE;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_atomic_functions");
-  OCL_CREATE_BUFFER(buf[0], 0, 24 * sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, locals[0] * sizeof(int), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, 16 * sizeof(int), NULL);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[1]);
-
-  OCL_MAP_BUFFER(0);
-  memset(buf_data[0], 0, 24 * sizeof(int));
-  ((int *)buf_data[0])[4] = -1;
-  OCL_UNMAP_BUFFER(0);
-
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < locals[0]; ++i)
-      cpu_src[i] = ((int*)buf_data[1])[i] = rand() & 0xff;
-  cpu_compiler_atomic(cpu_dst, cpu_src);
-  OCL_UNMAP_BUFFER(1);
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(0);
-
-  // Check results
-  for(int i=0; i<24; i++) {
-    //printf("The dst(%d) gpu(0x%x) cpu(0x%x)\n", i, ((uint32_t *)buf_data[0])[i], cpu_dst[i]);
-    OCL_ASSERT(((int *)buf_data[0])[i] == cpu_dst[i]);
-  }
-  OCL_UNMAP_BUFFER(0);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_atomic_functions)
diff --git a/utests/compiler_basic_arithmetic.cpp b/utests/compiler_basic_arithmetic.cpp
deleted file mode 100644
index 0e5ec41..0000000
--- a/utests/compiler_basic_arithmetic.cpp
+++ /dev/null
@@ -1,116 +0,0 @@
-#include "utest_helper.hpp"
-
-enum eTestOP {
-  TEST_OP_ADD =0,
-  TEST_OP_SUB,
-  TEST_OP_MUL,
-  TEST_OP_DIV,
-  TEST_OP_REM
-};
-
-template <typename T, eTestOP op>
-static void test_exec(const char* kernel_name)
-{
-  const size_t n = 160;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL_FROM_FILE("compiler_basic_arithmetic", kernel_name);
-std::cout <<"kernel name: " << kernel_name << std::endl;
-  buf_data[0] = (T*) malloc(sizeof(T) * n);
-  buf_data[1] = (T*) malloc(sizeof(T) * n);
-  for (uint32_t i = 0; i < n; ++i) ((T*)buf_data[0])[i] = (T) rand();
-  for (uint32_t i = 0; i < n; ++i) ((T*)buf_data[1])[i] = (T) rand();
-  if(op == TEST_OP_DIV || op == TEST_OP_REM) {
-    for (uint32_t i = 0; i < n; ++i) {
-      if(((T*)buf_data[1])[i] == 0)
-       ((T*)buf_data[1])[i] = (T) 1;
-    }
-  }
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(T), buf_data[0]);
-  OCL_CREATE_BUFFER(buf[1], CL_MEM_COPY_HOST_PTR, n * sizeof(T), buf_data[1]);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(T), NULL);
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  // Check result
-  OCL_MAP_BUFFER(2);
-  if(op == TEST_OP_SUB) {
-    for (uint32_t i = 0; i < n; ++i)
-      OCL_ASSERT(((T*)buf_data[2])[i] == (T)(((T*)buf_data[0])[i] - ((T*)buf_data[1])[i]));
-  } else if(op == TEST_OP_ADD) {
-    for (uint32_t i = 0; i < n; ++i)
-      OCL_ASSERT(((T*)buf_data[2])[i] == (T)(((T*)buf_data[0])[i] + ((T*)buf_data[1])[i]));
-  } else if(op == TEST_OP_MUL) {
-    for (uint32_t i = 0; i < n; ++i)
-      OCL_ASSERT(((T*)buf_data[2])[i] == (T)(((T*)buf_data[0])[i] * ((T*)buf_data[1])[i]));
-  } else if(op == TEST_OP_DIV) {
-    for (uint32_t i = 0; i < n; ++i)
-      OCL_ASSERT(((T*)buf_data[2])[i] == (T)(((T*)buf_data[0])[i] / ((T*)buf_data[1])[i]));
-  } else {
-    for (uint32_t i = 0; i < n; ++i)
-      OCL_ASSERT(((T*)buf_data[2])[i] == (T)(((T*)buf_data[0])[i] % ((T*)buf_data[1])[i]));
-  }
-  free(buf_data[0]);
-  free(buf_data[1]);
-  buf_data[0] = buf_data[1] = NULL;
-}
-
-#define DECL_TEST_SUB(type, alias, keep_program) \
-static void compiler_sub_ ##alias(void)\
-{\
-  test_exec<type, TEST_OP_SUB>("compiler_sub_" # alias);\
-}\
-MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_sub_ ## alias, keep_program)
-
-#define DECL_TEST_ADD(type, alias, keep_program) \
-static void compiler_add_ ##alias(void)\
-{\
-  test_exec<type, TEST_OP_ADD>("compiler_add_" # alias);\
-}\
-MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_add_ ## alias, keep_program)
-
-#define DECL_TEST_MUL(type, alias, keep_program) \
-static void compiler_mul_ ##alias(void)\
-{\
-  test_exec<type, TEST_OP_MUL>("compiler_mul_" # alias);\
-}\
-MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_mul_ ## alias, keep_program)
-
-#define DECL_TEST_DIV(type, alias, keep_program) \
-static void compiler_div_ ##alias(void)\
-{\
-  test_exec<type, TEST_OP_DIV>("compiler_div_" # alias);\
-}\
-MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_div_ ## alias, keep_program)
-
-#define DECL_TEST_REM(type, alias, keep_program) \
-static void compiler_rem_ ##alias(void)\
-{\
-  test_exec<type, TEST_OP_REM>("compiler_rem_" # alias);\
-}\
-MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_rem_ ## alias, keep_program)
-
-#define _DECL_TEST_FOR_ALL_TYPE(op, keep_program) \
-DECL_TEST_##op(int8_t, char, true) \
-DECL_TEST_##op(uint8_t, uchar, true) \
-DECL_TEST_##op(int16_t, short, true) \
-DECL_TEST_##op(uint16_t, ushort, true) \
-DECL_TEST_##op(int32_t, int, true) \
-DECL_TEST_##op(uint32_t, uint, keep_program)
-
-#define DECL_TEST_FOR_ALL_TYPE(op) _DECL_TEST_FOR_ALL_TYPE(op, true)
-
-#define DECL_TEST_FOR_ALL_TYPE_END(op) _DECL_TEST_FOR_ALL_TYPE(op, false)
-
-DECL_TEST_FOR_ALL_TYPE(SUB)
-DECL_TEST_FOR_ALL_TYPE(ADD)
-DECL_TEST_FOR_ALL_TYPE(MUL)
-DECL_TEST_FOR_ALL_TYPE(DIV)
-DECL_TEST_FOR_ALL_TYPE_END(REM)
-#undef DECL_TEST_FOR_ALL_TYPE
diff --git a/utests/compiler_bool_cross_basic_block.cpp b/utests/compiler_bool_cross_basic_block.cpp
deleted file mode 100644
index 908edc0..0000000
--- a/utests/compiler_bool_cross_basic_block.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-#include "utest_helper.hpp"
-
-static void cpu(int global_id, int *src, int *dst, int scale) {
-  bool isRedRow = false;
-  bool isRed;
-  int val = src[global_id];
-  for (int i=0; i<scale; i++, isRedRow = !isRedRow) {
-    if (isRedRow) {
-      isRed= false;
-      for (int j=0; j < scale; j++, isRed=!isRed) {
-        if (isRed) {
-	  val++;
-        }
-      }
-    }
-  }
-  dst[global_id] = val;
-}
-
-void compiler_bool_cross_basic_block(void){
-  const size_t n = 16;
-  int cpu_dst[16], cpu_src[16];
-  int scale = 4;
-	
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_bool_cross_basic_block");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(int), &scale);
-  globals[0] = 16;
-  locals[0] = 16;
-
-  OCL_MAP_BUFFER(0);
-  for (int32_t i = 0; i < (int32_t) n; ++i)
-    cpu_src[i] = ((int*)buf_data[0])[i] = i;
-  OCL_UNMAP_BUFFER(0);
-
-  // Run the kernel on GPU
-  OCL_NDRANGE(1);
-
-  // Run on CPU
-  for (int32_t i = 0; i < (int32_t) n; ++i)
-    cpu(i, cpu_src, cpu_dst, scale);
-
-  // Compare
-  OCL_MAP_BUFFER(1);
-  for (int32_t i = 0; i < (int32_t) n; ++i)
-    OCL_ASSERT(((int *)buf_data[1])[i] == cpu_dst[i]);
-  OCL_UNMAP_BUFFER(1);
-
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_bool_cross_basic_block)
diff --git a/utests/compiler_box_blur.cpp b/utests/compiler_box_blur.cpp
deleted file mode 100644
index e4e053e..0000000
--- a/utests/compiler_box_blur.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-#include "utest_helper.hpp"
-#include <cmath>
-
-static int w = 0;
-static int h = 0;
-static int sz = 0;
-static const size_t chunk = 64;
-static int *src = NULL, *dst = NULL;
-
-static void compiler_box_blur()
-{
-  OCL_CREATE_KERNEL("compiler_box_blur");
-
-  /* Load the picture */
-  src = cl_read_bmp("lenna128x128.bmp", &w, &h);
-  sz = w * h * sizeof(int);
-
-  /* Run the kernel */
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, sz, src);
-  OCL_CREATE_BUFFER(buf[1], 0, sz, NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(int), &w);
-  OCL_SET_ARG(3, sizeof(int), &h);
-  OCL_SET_ARG(4, sizeof(int), &chunk);
-  globals[0] = size_t(w/4);
-  globals[1] = h/chunk + ((h%chunk)?1:0);
-  locals[0] = 16;
-  locals[1] = 1;
-  free(src);
-  OCL_NDRANGE(2);
-  OCL_MAP_BUFFER(1);
-  dst = (int*) buf_data[1];
-
-  /* Save the image (for debug purpose) */
-  cl_write_bmp(dst, w, h, "compiler_box_blur.bmp");
-
-  /* Compare with the golden image */
-  OCL_CHECK_IMAGE(dst, w, h, "compiler_box_blur_ref.bmp");
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_box_blur);
-
diff --git a/utests/compiler_box_blur_float.cpp b/utests/compiler_box_blur_float.cpp
deleted file mode 100644
index a3c97bc..0000000
--- a/utests/compiler_box_blur_float.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-#include "utest_helper.hpp"
-#include <cmath>
-
-static int *tmp = NULL;
-static struct float4 {float x,y,z,w;} *src = NULL, *dst = NULL;
-static int w = 0;
-static int h = 0;
-static int sz = 0;
-static const size_t chunk = 64;
-
-static void compiler_box_blur_float()
-{
-  OCL_CREATE_KERNEL("compiler_box_blur_float");
-
-  /* Load the picture */
-  tmp = cl_read_bmp("lenna128x128.bmp", &w, &h);
-  sz = w * h * sizeof(float[4]);
-  src = (float4*)malloc(sz);
-
-  /* RGBA -> float4 conversion */
-  const int n = w*h;
-  for (int i = 0; i < n; ++i) {
-    src[i].x = (float) (tmp[i] & 0xff);
-    src[i].y = (float) ((tmp[i] >> 8) & 0xff);
-    src[i].z = (float) ((tmp[i] >> 16) & 0xff);
-    src[i].w = 0.f;
-  }
-  free(tmp);
-
-  /* Run the kernel */
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, sz, src);
-  OCL_CREATE_BUFFER(buf[1], 0, sz, NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(int), &w);
-  OCL_SET_ARG(3, sizeof(int), &h);
-  OCL_SET_ARG(4, sizeof(int), &chunk);
-  globals[0] = size_t(w);
-  globals[1] = h/chunk + ((h%chunk)?1:0);
-  locals[0] = 16;
-  locals[1] = 1;
-  free(src);
-  OCL_NDRANGE(2);
-  OCL_MAP_BUFFER(1);
-  dst = (float4*) buf_data[1];
-
-  /* Convert back to RGBA and save */
-  int *tmp = (int*) malloc(n*sizeof(int));
-  for (int i = 0; i < n; ++i) {
-    int to = int(std::min(dst[i].x, 255.f));
-    to |= int(std::min(dst[i].y, 255.f)) << 8;
-    to |= int(std::min(dst[i].z, 255.f)) << 16;
-    tmp[i] = to;
-  }
-
-  /* Save the image (for debug purpose) */
-  cl_write_bmp(tmp, w, h, "compiler_box_blur_float.bmp");
-
-  /* Compare with the golden image */
-  OCL_CHECK_IMAGE(tmp, w, h, "compiler_box_blur_float_ref.bmp");
-  free(tmp);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_box_blur_float);
-
diff --git a/utests/compiler_box_blur_image.cpp b/utests/compiler_box_blur_image.cpp
deleted file mode 100644
index 351f08e..0000000
--- a/utests/compiler_box_blur_image.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_box_blur_image()
-{
-  int w, h;
-  cl_image_format format = { };
-  size_t origin[3] = { };
-  size_t region[3];
-  int *src, *dst;
-
-  OCL_CREATE_KERNEL("compiler_box_blur_image");
-
-  /* Load the picture */
-  src = cl_read_bmp("lenna128x128.bmp", &w, &h);
-
-  format.image_channel_order = CL_RGBA;
-  format.image_channel_data_type = CL_UNORM_INT8;
-
-  /* Run the kernel */
-  OCL_CREATE_IMAGE2D(buf[0], CL_MEM_COPY_HOST_PTR, &format, w, h, w*sizeof(uint32_t), src);
-  free(src);
-  OCL_CREATE_IMAGE2D(buf[1], 0, &format, w, h, 0, NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = w;
-  globals[1] = h;
-  locals[0] = 16;
-  locals[1] = 16;
-  OCL_NDRANGE(2);
-  dst = (int*)malloc(w*h*sizeof(uint32_t));
-  region[0] = w;
-  region[1] = h;
-  region[2] = 1;
-  OCL_READ_IMAGE(buf[1], origin, region, dst);
-
-  /* Save the image (for debug purpose) */
-  cl_write_bmp(dst, w, h, "compiler_box_blur_image.bmp");
-
-  /* Compare with the golden image */
-  OCL_CHECK_IMAGE(dst, w, h, "compiler_box_blur_ref.bmp");
-
-  free(dst);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_box_blur_image);
diff --git a/utests/compiler_byte_scatter.cpp b/utests/compiler_byte_scatter.cpp
deleted file mode 100644
index 11300da..0000000
--- a/utests/compiler_byte_scatter.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_byte_scatter(void)
-{
-  const size_t n = 128;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_byte_scatter");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int8_t), NULL);
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  // Check result
-  OCL_MAP_BUFFER(0);
-  for (int32_t i = 0; i < (int32_t) n; ++i)
-    OCL_ASSERT(((int8_t*)buf_data[0])[i] == (int8_t) i);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_byte_scatter);
-
diff --git a/utests/compiler_ceil.cpp b/utests/compiler_ceil.cpp
deleted file mode 100644
index 29c7551..0000000
--- a/utests/compiler_ceil.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-#include <cmath>
-#include "utest_helper.hpp"
-
-static void cpu(int global_id, float *src, float *dst) {
-  dst[global_id] = ceilf(src[global_id]);
-}
-
-void compiler_ceil(void)
-{
-  const size_t n = 16;
-  float cpu_dst[16], cpu_src[16];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_ceil");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = 16;
-  locals[0] = 16;
-
-  // Run random tests
-  for (uint32_t pass = 0; pass < 8; ++pass) {
-    OCL_MAP_BUFFER(0);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      cpu_src[i] = ((float*)buf_data[0])[i] = .1f * (rand() & 15) - .75f;
-    OCL_UNMAP_BUFFER(0);
-
-    // Run the kernel on GPU
-    OCL_NDRANGE(1);
-
-    // Run on CPU
-    for (int32_t i = 0; i < (int32_t) n; ++i) cpu(i, cpu_src, cpu_dst);
-
-    // Compare
-    OCL_MAP_BUFFER(1);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      OCL_ASSERT(((float *)buf_data[1])[i] == cpu_dst[i]);
-    OCL_UNMAP_BUFFER(1);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_ceil);
diff --git a/utests/compiler_cl_finish.cpp b/utests/compiler_cl_finish.cpp
deleted file mode 100644
index 7c7dee3..0000000
--- a/utests/compiler_cl_finish.cpp
+++ /dev/null
@@ -1,50 +0,0 @@
-#include "utest_helper.hpp"
-#include <sys/time.h>
-
-#define T_GET(t)        gettimeofday(&t, NULL);
-#define T_LAPSE(t1, t2) \
-  ((t2.tv_sec+t2.tv_usec*0.000001) - (t1.tv_sec+t1.tv_usec*0.000001))
-
-static void compiler_cl_finish(void)
-{
-  const size_t n = 16*1024*1024;
-  struct timeval t1, t2;
-  float t_fin, t_map_w_fin,t_map_wo_fin;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("test_cl_finish");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
-
-  // Run the kernel
-  locals[0]  = 64;
-  globals[0] = 32 * locals[0];
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(int), &n);
-  OCL_SET_ARG(3, sizeof(int), &globals[0]);
-
-  // 1st time map after clFinish
-  OCL_NDRANGE(1);
-  T_GET(t1);
-  OCL_FINISH();
-  T_GET(t2);
-  t_fin = T_LAPSE(t1, t2);
-
-  T_GET(t1);
-  OCL_MAP_BUFFER(0);
-  T_GET(t2);
-  t_map_w_fin = T_LAPSE(t1, t2);
-
-  // 2nd time map without clFinish
-  OCL_NDRANGE(1);
-  T_GET(t1);
-  OCL_MAP_BUFFER(0);
-  T_GET(t2);
-  t_map_wo_fin = T_LAPSE(t1, t2);
-
-  OCL_ASSERT(t_fin > t_map_w_fin && t_map_wo_fin > t_map_w_fin);
-  OCL_UNMAP_BUFFER(0);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_cl_finish);
diff --git a/utests/compiler_clz_int.cpp b/utests/compiler_clz_int.cpp
deleted file mode 100644
index c12cfc6..0000000
--- a/utests/compiler_clz_int.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_clz_int(void)
-{
-  const int n = 32;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_clz_int");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  OCL_MAP_BUFFER(0);
-  ((int*)buf_data[0])[0] = 0;
-  for (int32_t i = 1; i < (int32_t) n; ++i)
-    ((int*)buf_data[0])[i] = 0xffffffffu >> i;
-  OCL_UNMAP_BUFFER(0);
-
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(1);
-  OCL_ASSERT(((int*)buf_data[1])[0] == 32);
-  for (int i = 1; i < n; ++i)
-    OCL_ASSERT(((int*)buf_data[1])[i] == i);
-  OCL_UNMAP_BUFFER(1);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_clz_int);
diff --git a/utests/compiler_clz_short.cpp b/utests/compiler_clz_short.cpp
deleted file mode 100644
index eb3a370..0000000
--- a/utests/compiler_clz_short.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_clz_short(void)
-{
-  const size_t n = 16;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_clz_short");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(short), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(short), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  OCL_MAP_BUFFER(0);
-  ((short*)buf_data[0])[0] = 0;
-  for (int32_t i = 1; i < (int32_t) n; ++i)
-    ((short*)buf_data[0])[i] = 0xffffu >> i;
-  OCL_UNMAP_BUFFER(0);
-
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(1);
-  OCL_ASSERT(((short*)buf_data[1])[0] == 16);
-  for (unsigned i = 1; i < (unsigned) n; ++i)
-    OCL_ASSERT(((short*)buf_data[1])[i] == (short)i);
-  OCL_UNMAP_BUFFER(1);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_clz_short);
diff --git a/utests/compiler_convert_uchar_sat.cpp b/utests/compiler_convert_uchar_sat.cpp
deleted file mode 100644
index da00041..0000000
--- a/utests/compiler_convert_uchar_sat.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-#include "utest_helper.hpp"
-
-static void cpu(int global_id, float *src, int *dst) {
-  float f = src[global_id];
-  dst[global_id] = f > 255 ? 255 : f < 0 ? 0 : f;
-}
-
-void compiler_convert_uchar_sat(void)
-{
-  const size_t n = 16;
-  float cpu_src[16];
-  int cpu_dst[16];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_convert_uchar_sat");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = 16;
-  locals[0] = 16;
-
-  // Run random tests
-  for (uint32_t pass = 0; pass < 8; ++pass) {
-    OCL_MAP_BUFFER(0);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      cpu_src[i] = ((float*)buf_data[0])[i] = (rand() & 1023) / 2;
-    OCL_UNMAP_BUFFER(0);
-
-    // Run the kernel on GPU
-    OCL_NDRANGE(1);
-
-    // Run on CPU
-    for (int32_t i = 0; i < (int32_t) n; ++i) cpu(i, cpu_src, cpu_dst);
-
-    // Compare
-    OCL_MAP_BUFFER(1);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      OCL_ASSERT(((int *)buf_data[1])[i] == cpu_dst[i]);
-    OCL_UNMAP_BUFFER(1);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_convert_uchar_sat);
diff --git a/utests/compiler_copy_buffer.cpp b/utests/compiler_copy_buffer.cpp
deleted file mode 100644
index 8066efe..0000000
--- a/utests/compiler_copy_buffer.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_copy_buffer(void)
-{
-  const size_t n = 8192 * 4;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("test_copy_buffer");
-  //OCL_CREATE_KERNEL("compiler_array");
-  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * n);
-  for (uint32_t i = 0; i < n; ++i) ((uint32_t*)buf_data[0])[i] = i;
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t), buf_data[0]);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  free(buf_data[0]);
-  buf_data[0] = NULL;
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  // Check result
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < n; ++i)
-    OCL_ASSERT(((uint32_t*)buf_data[0])[i] == ((uint32_t*)buf_data[1])[i]);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_copy_buffer);
-
diff --git a/utests/compiler_copy_buffer_row.cpp b/utests/compiler_copy_buffer_row.cpp
deleted file mode 100644
index 12c0592..0000000
--- a/utests/compiler_copy_buffer_row.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_copy_buffer_row(void)
-{
-  uint32_t *src_buffer = NULL;
-  int *data_buffer = NULL;
-  const int row = 8192;
-  const int row_n = 2;
-  const int n =  row * row_n;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("test_copy_buffer_row");
-  src_buffer = (uint32_t *) malloc(sizeof(uint32_t) * n);
-  for (int32_t i = 0; i < n; ++i) src_buffer[i] = i;
-  data_buffer = (int *) malloc(sizeof(int) * 2);
-  data_buffer[0] = row;
-  data_buffer[1] = n;
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t), src_buffer);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  OCL_CREATE_BUFFER(buf[2], CL_MEM_COPY_HOST_PTR, 2 * sizeof(uint32_t), data_buffer);
-  free(src_buffer);
-  free(data_buffer);
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  // Check results
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (int32_t i = 0; i < n; ++i)
-    OCL_ASSERT(((uint32_t*)buf_data[0])[i] == ((uint32_t*)buf_data[1])[i]);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_copy_buffer_row);
-
diff --git a/utests/compiler_copy_image.cpp b/utests/compiler_copy_image.cpp
deleted file mode 100644
index 58827f2..0000000
--- a/utests/compiler_copy_image.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_copy_image(void)
-{
-  const size_t w = 512;
-  const size_t h = 512;
-  cl_image_format format;
-  cl_sampler sampler;
-
-  // Setup kernel and images
-  OCL_CREATE_KERNEL("test_copy_image");
-  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * w * h);
-  for (uint32_t j = 0; j < h; ++j)
-    for (uint32_t i = 0; i < w; i++)
-      ((uint32_t*)buf_data[0])[j * w + i] = j * w + i;
-
-  format.image_channel_order = CL_RGBA;
-  format.image_channel_data_type = CL_UNSIGNED_INT8;
-  OCL_CREATE_IMAGE2D(buf[0], CL_MEM_COPY_HOST_PTR, &format, w, h, w * sizeof(uint32_t), buf_data[0]);
-
-  OCL_CREATE_IMAGE2D(buf[1], 0, &format, w, h, 0, NULL);
-  OCL_CREATE_SAMPLER(sampler, CL_ADDRESS_REPEAT, CL_FILTER_NEAREST);
-  free(buf_data[0]);
-  buf_data[0] = NULL;
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(sampler), &sampler);
-  globals[0] = w;
-  globals[1] = h;
-  locals[0] = 16;
-  locals[1] = 16;
-  OCL_NDRANGE(2);
-
-  // Check result
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t j = 0; j < h; ++j)
-    for (uint32_t i = 0; i < w; i++)
-      OCL_ASSERT(((uint32_t*)buf_data[0])[j * w + i] == ((uint32_t*)buf_data[1])[j * w + i]);
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_copy_image);
diff --git a/utests/compiler_copy_image1.cpp b/utests/compiler_copy_image1.cpp
deleted file mode 100644
index d469fbd..0000000
--- a/utests/compiler_copy_image1.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_copy_image1(void)
-{
-  const size_t w = 512;
-  const size_t h = 512;
-  cl_image_format format;
-  cl_sampler sampler;
-
-  // Setup kernel and images
-  OCL_CREATE_KERNEL("test_copy_image1");
-  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * w * h);
-  for (uint32_t j = 0; j < h; ++j)
-    for (uint32_t i = 0; i < w; i++)
-      ((uint32_t*)buf_data[0])[j * w + i] = j * w + i;
-
-  format.image_channel_order = CL_RGBA;
-  format.image_channel_data_type = CL_UNSIGNED_INT8;
-  OCL_CREATE_IMAGE2D(buf[0], CL_MEM_COPY_HOST_PTR, &format, w, h, w * sizeof(uint32_t), buf_data[0]);
-  OCL_CREATE_SAMPLER(sampler, CL_ADDRESS_REPEAT, CL_FILTER_NEAREST);
-
-  OCL_CREATE_IMAGE2D(buf[1], 0, &format, w, h, 0, NULL);
-  OCL_CREATE_IMAGE2D(buf[2], 0, &format, w, h, 0, NULL);
-  OCL_CREATE_IMAGE2D(buf[3], 0, &format, w, h, 0, NULL);
-  OCL_CREATE_IMAGE2D(buf[4], 0, &format, w, h, 0, NULL);
-  OCL_CREATE_IMAGE2D(buf[5], 0, &format, w, h, 0, NULL);
-  free(buf_data[0]);
-  buf_data[0] = NULL;
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(sampler), &sampler);
-  OCL_SET_ARG(3, sizeof(cl_mem), &buf[2]);
-  OCL_SET_ARG(4, sizeof(cl_mem), &buf[3]);
-  OCL_SET_ARG(5, sizeof(cl_mem), &buf[4]);
-  OCL_SET_ARG(6, sizeof(cl_mem), &buf[5]);
-  float w_inv = 1.0/w;
-  float h_inv = 1.0/h;
-  OCL_SET_ARG(7, sizeof(float), &w_inv);
-  OCL_SET_ARG(8, sizeof(float), &h_inv);
-
-  globals[0] = w;
-  globals[1] = h;
-  locals[0] = 16;
-  locals[1] = 16;
-  OCL_NDRANGE(2);
-
-  // Check result
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  OCL_MAP_BUFFER(2);
-  OCL_MAP_BUFFER(3);
-  OCL_MAP_BUFFER(4);
-  OCL_MAP_BUFFER(5);
-
-  for(uint32_t k = 0; k < 5; k++)
-  {
-    for (uint32_t j = 0; j < h; ++j)
-      for (uint32_t i = 0; i < w; i++)
-        OCL_ASSERT(((uint32_t*)buf_data[0])[j * w + i] == ((uint32_t*)buf_data[1 + k])[j * w + i]);
-  }
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-  OCL_UNMAP_BUFFER(2);
-  OCL_UNMAP_BUFFER(3);
-  OCL_UNMAP_BUFFER(4);
-  OCL_UNMAP_BUFFER(5);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_copy_image1);
diff --git a/utests/compiler_copy_image_3d.cpp b/utests/compiler_copy_image_3d.cpp
deleted file mode 100644
index ff493e7..0000000
--- a/utests/compiler_copy_image_3d.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-#include "utest_helper.hpp"
-#include "string.h"
-
-static void compiler_copy_image_3d(void)
-{
-  const size_t w = 512;
-  const size_t h = 512;
-  const size_t depth = 4;
-  cl_image_format format;
-  cl_sampler sampler;
-
-  // Setup kernel and images
-  OCL_CREATE_KERNEL("test_copy_image_3d");
-  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * w * h * depth);
-  for (uint32_t k = 0; k < depth; k++)
-    for (uint32_t j = 0; j < h; j++)
-      for (uint32_t i = 0; i < w; i++)
-        ((float*)buf_data[0])[k*w*h + j*w + i] = (k << 10) + (j << 10) + i;
-
-  format.image_channel_order = CL_RGBA;
-  format.image_channel_data_type = CL_UNORM_INT8;
-  OCL_CREATE_IMAGE3D(buf[0], CL_MEM_COPY_HOST_PTR, &format, w, h, depth, w*4, w*h*4, buf_data[0]);
-  OCL_CREATE_IMAGE3D(buf[1], 0, &format, w, h, depth, 0, 0, NULL);
-  for(uint32_t i = 0; i < depth; i++)
-   OCL_CREATE_IMAGE2D(buf[2 + i], 0, &format, w, h, 0, NULL);
-  OCL_CREATE_SAMPLER(sampler, CL_ADDRESS_REPEAT, CL_FILTER_NEAREST);
-  free(buf_data[0]);
-  buf_data[0] = NULL;
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(sampler), &sampler);
-  for(uint32_t i = 0; i < depth; i++)
-    OCL_SET_ARG(3 + i, sizeof(cl_mem), &buf[2 + i]);
-  globals[0] = w;
-  globals[1] = h;
-  globals[2] = depth;
-  locals[0] = 64;
-  locals[1] = 1;
-  locals[2] = 1;
-  OCL_NDRANGE(3);
-
-  // Check result
-  for(uint32_t i = 0; i < depth + 2; i++)
-    OCL_MAP_BUFFER_GTT(i);
-  for (uint32_t k = 0; k < depth; k++)
-    for (uint32_t j = 0; j < h; ++j)
-      for (uint32_t i = 0; i < w; i++) {
-        OCL_ASSERT(((float*)buf_data[0])[k*w*((h+1)&-2LL) + j*w + i] == ((float*)buf_data[1])[k*w*((h+1)&-2LL) + j*w + i]);
-        OCL_ASSERT(((float*)buf_data[0])[k*w*((h+1)&-2LL) + j*w + i] == ((float*)buf_data[k + 2])[j * w + i]);
-      }
-
-  for(uint32_t i = 0; i < depth + 2; i++)
-    OCL_UNMAP_BUFFER_GTT(i);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_copy_image_3d);
diff --git a/utests/compiler_data_types.cpp b/utests/compiler_data_types.cpp
deleted file mode 100644
index c686cc7..0000000
--- a/utests/compiler_data_types.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_data_types(void)
-{
-  OCL_CREATE_KERNEL("compiler_data_types");
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_data_types);
-
diff --git a/utests/compiler_degrees.cpp b/utests/compiler_degrees.cpp
deleted file mode 100644
index 7a17ca7..0000000
--- a/utests/compiler_degrees.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_degrees(void)
-{
-  const int n = 32;
-  float src[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_degrees");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  OCL_MAP_BUFFER(0);
-  for (int i = 0; i < n; ++i) {
-    src[i] = ((float *)buf_data[0])[i] = rand() * 0.01f;
-  }
-  OCL_UNMAP_BUFFER(0);
-
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(1);
-  for (int i = 0; i < n; ++i) {
-    OCL_ASSERT(((float *)buf_data[1])[i] == src[i] * (180 / 3.141592653589793F));
-  }
-  OCL_UNMAP_BUFFER(1);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_degrees);
diff --git a/utests/compiler_displacement_map_element.cpp b/utests/compiler_displacement_map_element.cpp
deleted file mode 100644
index 98041ec..0000000
--- a/utests/compiler_displacement_map_element.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-#include "utest_helper.hpp"
-
-typedef unsigned int uint;
-constexpr int W = 16, H = 16;
-constexpr int SIZE = W * H;
-uint in_1[SIZE];
-uint disp_map[SIZE];
-uint out_1[SIZE];
-
-uint cpu(const int cx, const int cy, const uint *in, const uint *disp_map, int w, int h) {
-  uint c = disp_map[cy * w + cx];
-  int x_pos = cx + c;
-  int y_pos = cy + c;
-  if(0 <= x_pos && x_pos < w && 0 <= y_pos && y_pos < h)
-    return in[y_pos * w + x_pos];
-  else
-    return 0;
-}
-
-void test() {
-  OCL_MAP_BUFFER(2);
-  for(int y=0; y<H; y++)
-    for(int x=0; x<W; x++) {
-      uint out = ((uint*)buf_data[2]) [y * W + x];
-      uint wish = cpu(x, y, in_1, disp_map, W, H);
-      if(out != wish)
-        printf("XXX %d %d %x %x\n", x, y, out, wish);
-      OCL_ASSERT(out == wish);
-    }
-  OCL_UNMAP_BUFFER(2);
-}
-
-void displacement_map_element(void) {
-  int i, pass;
-
-  OCL_CREATE_KERNEL("compiler_displacement_map_element");
-  OCL_CREATE_BUFFER(buf[0], 0, SIZE * sizeof(uint), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, SIZE * sizeof(uint), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, SIZE * sizeof(uint), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(W), &W);
-  OCL_SET_ARG(3, sizeof(H), &H);
-  OCL_SET_ARG(4, sizeof(cl_mem), &buf[2]);
-  globals[0] = W;
-  globals[1] = H;
-  locals[0] = 16;
-  locals[1] = 16;
-
-  for (pass = 0; pass < 8; pass ++) {
-    OCL_MAP_BUFFER(0);
-    OCL_MAP_BUFFER(1);
-    for (i = 0; i < SIZE; i ++) {
-      in_1[i] = ((uint*)buf_data[0])[i] = ((rand() & 0xFFFF) << 16) | (rand() & 0xFFFF);
-      disp_map[i] = ((uint*)buf_data[1])[i] = rand() & 3;
-    }
-    OCL_UNMAP_BUFFER(0);
-    OCL_UNMAP_BUFFER(1);
-    OCL_NDRANGE(2);
-    test();
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(displacement_map_element);
diff --git a/utests/compiler_double.cpp b/utests/compiler_double.cpp
deleted file mode 100644
index 7c54ddf..0000000
--- a/utests/compiler_double.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <cmath>
-#include "utest_helper.hpp"
-
-static void cpu(int global_id, double *src, double *dst) {
-  double f = src[global_id];
-  double d = 1.234567890123456789;
-  dst[global_id] = global_id < 14 ? (d * (f + d)) : 14;
-}
-
-void compiler_double(void)
-{
-  const size_t n = 16;
-  double cpu_dst[n], cpu_src[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_double");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(double), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(double), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  // Run random tests
-  for (uint32_t pass = 0; pass < 1; ++pass) {
-    OCL_MAP_BUFFER(0);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      cpu_src[i] = ((double*)buf_data[0])[i] = .1f * (rand() & 15) - .75f;
-    OCL_UNMAP_BUFFER(0);
-
-    // Run the kernel on GPU
-    OCL_NDRANGE(1);
-
-    // Run on CPU
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      cpu(i, cpu_src, cpu_dst);
-
-    // Compare
-    OCL_MAP_BUFFER(1);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      OCL_ASSERT(fabs(((double*)buf_data[1])[i] - cpu_dst[i]) < 1e-4);
-    OCL_UNMAP_BUFFER(1);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_double);
diff --git a/utests/compiler_double_2.cpp b/utests/compiler_double_2.cpp
deleted file mode 100644
index 7e3ae4b..0000000
--- a/utests/compiler_double_2.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-#include <cmath>
-#include "utest_helper.hpp"
-
-static void cpu(int global_id, float *src, double *dst) {
-  float f = src[global_id];
-  float d = 1.234567890123456789;
-  dst[global_id] = global_id < 14 ? d * (d + f) : 14;
-}
-
-void compiler_double_2(void)
-{
-  const size_t n = 16;
-  float cpu_src[n];
-  double cpu_dst[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_double_2");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(double), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  // Run random tests
-  for (uint32_t pass = 0; pass < 1; ++pass) {
-    OCL_MAP_BUFFER(0);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      cpu_src[i] = ((float*)buf_data[0])[i] = .1f * (rand() & 15) - .75f;
-    OCL_UNMAP_BUFFER(0);
-
-    // Run the kernel on GPU
-    OCL_NDRANGE(1);
-
-    // Run on CPU
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      cpu(i, cpu_src, cpu_dst);
-
-    // Compare
-    OCL_MAP_BUFFER(1);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      OCL_ASSERT(fabs(((double*)buf_data[1])[i] - cpu_dst[i]) < 1e-4);
-    OCL_UNMAP_BUFFER(1);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_double_2);
diff --git a/utests/compiler_double_3.cpp b/utests/compiler_double_3.cpp
deleted file mode 100644
index 294950d..0000000
--- a/utests/compiler_double_3.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <cmath>
-#include "utest_helper.hpp"
-
-static void cpu(int global_id, float *src, double *dst) {
-  float d = 1.234567890123456789;
-  dst[global_id] = global_id < 14 ? d : 14;
-}
-
-void compiler_double_3(void)
-{
-  const size_t n = 16;
-  float cpu_src[n];
-  double cpu_dst[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_double_3");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(double), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  // Run random tests
-  for (uint32_t pass = 0; pass < 1; ++pass) {
-    OCL_MAP_BUFFER(0);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      cpu_src[i] = ((float*)buf_data[0])[i] = .1f * (rand() & 15) - .75f;
-    OCL_UNMAP_BUFFER(0);
-
-    // Run the kernel on GPU
-    OCL_NDRANGE(1);
-
-    // Run on CPU
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      cpu(i, cpu_src, cpu_dst);
-
-    // Compare
-    OCL_MAP_BUFFER(1);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      OCL_ASSERT(fabs(((double*)buf_data[1])[i] - cpu_dst[i]) < 1e-4);
-    OCL_UNMAP_BUFFER(1);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_double_3);
diff --git a/utests/compiler_double_4.cpp b/utests/compiler_double_4.cpp
deleted file mode 100644
index cb25bd4..0000000
--- a/utests/compiler_double_4.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <cmath>
-#include "utest_helper.hpp"
-
-void compiler_double_4(void)
-{
-  const size_t n = 16;
-  double cpu_src1[n], cpu_src2[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_double_4");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(double), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(double), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(double), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  // Run random tests
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (int32_t i = 0; i < (int32_t) n; ++i) {
-    cpu_src1[i] = ((double*)buf_data[0])[i] = rand() * 1e-2;
-    cpu_src2[i] = ((double*)buf_data[1])[i] = rand() * 1e-2;
-  }
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-
-  // Run the kernel on GPU
-  OCL_NDRANGE(1);
-
-  // Compare
-  OCL_MAP_BUFFER(2);
-  for (int32_t i = 0; i < (int32_t) n; ++i)
-    OCL_ASSERT(fabs(((double*)buf_data[2])[i] - cpu_src1[i] - cpu_src2[i]) < 1e-4);
-  OCL_UNMAP_BUFFER(2);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_double_4);
diff --git a/utests/compiler_fabs.cpp b/utests/compiler_fabs.cpp
deleted file mode 100644
index b14f486..0000000
--- a/utests/compiler_fabs.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-#include "utest_helper.hpp"
-
-static void cpu(int global_id, float *src, float *dst) {
-  float f = src[global_id];
-  f = f < 0 ? -f : f;
-  dst[global_id] = f;
-}
-
-void compiler_fabs(void)
-{
-  const size_t n = 16;
-  float cpu_dst[16], cpu_src[16];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_fabs");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = 16;
-  locals[0] = 16;
-
-  // Run random tests
-  for (uint32_t pass = 0; pass < 8; ++pass) {
-    OCL_MAP_BUFFER(0);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      cpu_src[i] = ((float*)buf_data[0])[i] = .1f * (rand() & 15) - .75f;
-    OCL_UNMAP_BUFFER(0);
-
-    // Run the kernel on GPU
-    OCL_NDRANGE(1);
-
-    // Run on CPU
-    for (int32_t i = 0; i < (int32_t) n; ++i) cpu(i, cpu_src, cpu_dst);
-
-    // Compare
-    OCL_MAP_BUFFER(1);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      OCL_ASSERT(((float *)buf_data[1])[i] == cpu_dst[i]);
-    OCL_UNMAP_BUFFER(1);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_fabs);
diff --git a/utests/compiler_fill_gl_image.cpp b/utests/compiler_fill_gl_image.cpp
deleted file mode 100644
index 437fcf4..0000000
--- a/utests/compiler_fill_gl_image.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-#include "utest_helper.hpp"
-
-static void read_back(int tex, int width, int height, uint32_t * resultColor)
-{
-  float vertices[8] = {-1, 1, 1, 1, 1, -1, -1, -1};
-  float tex_coords[8] = {0, 0, 1, 0, 1, 1, 0, 1};
-
-  glBindTexture(GL_TEXTURE_2D, tex);
-  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
-  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
-  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-  glEnable(GL_TEXTURE_2D);
-  glDisable(GL_BLEND);
-  glVertexPointer(2, GL_FLOAT, sizeof(float) * 2, vertices);
-  glEnableClientState(GL_VERTEX_ARRAY);
-  glClientActiveTexture(GL_TEXTURE0);
-  glTexCoordPointer(2, GL_FLOAT, sizeof(float) * 2, tex_coords);
-  glEnableClientState(GL_TEXTURE_COORD_ARRAY);
-  glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
-  glFlush();
-  OCL_SWAP_EGL_BUFFERS();
-
-  glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, resultColor);
-}
-
-
-static void compiler_fill_gl_image(void)
-{
-  const size_t w = EGL_WINDOW_WIDTH;
-  const size_t h = EGL_WINDOW_HEIGHT;
-  uint32_t color = 0x123456FF;
-  uint32_t *resultColor;
-  GLuint tex;
-
-  if (eglContext == EGL_NO_CONTEXT) {
-    fprintf(stderr, "There is no valid egl context. Ignore this case.\n");
-    return;
-  }
-  // Setup kernel and images
-  glGenTextures(1, &tex);
-  glBindTexture(GL_TEXTURE_2D, tex);
-  // Must set the all filters to GL_NEAREST!
-  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, NULL);
-
-  OCL_CREATE_KERNEL("test_fill_gl_image");
-  OCL_CREATE_GL_IMAGE2D(buf[0], 0, GL_TEXTURE_2D, 0, tex);
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(color), &color);
-  globals[0] = w;
-  globals[1] = h;
-  locals[0] = 16;
-  locals[1] = 16;
-  glFinish();
-  OCL_ENQUEUE_ACQUIRE_GL_OBJECTS(0);
-  OCL_NDRANGE(2);
-  OCL_FLUSH();
-
-  // Check result
-  resultColor = new uint32_t[w * h * 4];
-  if (resultColor == NULL)
-    assert(0);
-
-  read_back(tex, w, h, resultColor);
-  for (uint32_t j = 0; j < h; ++j)
-    for (uint32_t i = 0; i < w; i++)
-      OCL_ASSERT(resultColor[j * w + i] == color);
-  OCL_UNMAP_BUFFER(0);
-  delete resultColor;
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_fill_gl_image);
diff --git a/utests/compiler_fill_image.cpp b/utests/compiler_fill_image.cpp
deleted file mode 100644
index 2f9fe3d..0000000
--- a/utests/compiler_fill_image.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_fill_image(void)
-{
-  const size_t w = 512;
-  const size_t h = 512;
-  uint32_t color = 0x12345678;
-  cl_image_format format;
-
-  format.image_channel_order = CL_RGBA;
-  format.image_channel_data_type = CL_UNSIGNED_INT8;
-
-  // Setup kernel and images
-  OCL_CREATE_KERNEL("test_fill_image");
-
-  OCL_CREATE_IMAGE2D(buf[0], 0, &format, w, h, 0, NULL);
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(color), &color);
-  globals[0] = w;
-  globals[1] = h;
-  locals[0] = 16;
-  locals[1] = 16;
-  OCL_NDRANGE(2);
-
-  // Check result
-  OCL_MAP_BUFFER(0);
-  for (uint32_t j = 0; j < h; ++j)
-    for (uint32_t i = 0; i < w; i++)
-      OCL_ASSERT(((uint32_t*)buf_data[0])[j * w + i] == 0x78563412);
-  OCL_UNMAP_BUFFER(0);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_fill_image);
diff --git a/utests/compiler_fill_image0.cpp b/utests/compiler_fill_image0.cpp
deleted file mode 100644
index 1ab13be..0000000
--- a/utests/compiler_fill_image0.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_fill_image0(void)
-{
-  const size_t w = 512;
-  const size_t h = 512;
-  cl_image_format format;
-
-  format.image_channel_order = CL_RGBA;
-  format.image_channel_data_type = CL_UNSIGNED_INT8;
-
-  // Setup kernel and images
-  OCL_CREATE_KERNEL("test_fill_image0");
-
-  OCL_CREATE_IMAGE2D(buf[0], 0, &format, w, h, 0, NULL);
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  globals[0] = w;
-  globals[1] = h;
-  locals[0] = 16;
-  locals[1] = 16;
-  OCL_NDRANGE(2);
-
-  // Check result
-  OCL_MAP_BUFFER_GTT(0);
-  for (uint32_t j = 0; j < h; ++j)
-    for (uint32_t i = 0; i < w; i++)
-      OCL_ASSERT(((uint32_t*)buf_data[0])[j * w + i] == (i << 16 | j));
-  OCL_UNMAP_BUFFER_GTT(0);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_fill_image0);
diff --git a/utests/compiler_fill_image_3d.cpp b/utests/compiler_fill_image_3d.cpp
deleted file mode 100644
index 6a679fb..0000000
--- a/utests/compiler_fill_image_3d.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_fill_image_3d(void)
-{
-  const size_t w = 512;
-  const size_t h = 512;
-  const size_t depth = 5;
-  uint32_t color = 0x12345678;
-  cl_image_format format;
-
-  format.image_channel_order = CL_RGBA;
-  format.image_channel_data_type = CL_UNSIGNED_INT8;
-
-  // Setup kernel and images
-  OCL_CREATE_KERNEL("test_fill_image_3d");
-
-  OCL_CREATE_IMAGE3D(buf[0], 0, &format, w, h, depth, 0, 0, NULL);
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(color), &color);
-  globals[0] = w;
-  globals[1] = h;
-  globals[2] = depth;
-  locals[0] = 16;
-  locals[1] = 16;
-  locals[2] = 1;
-  OCL_NDRANGE(3);
-
-  // Check result
-  OCL_MAP_BUFFER(0);
-  for (uint32_t k = 0; k < depth; k++)
-    for (uint32_t j = 0; j < h; ++j)
-      for (uint32_t i = 0; i < w; i++)
-        OCL_ASSERT(((uint32_t*)buf_data[0])[k*w*h + j*w + i] == 0x78563412);
-  OCL_UNMAP_BUFFER(0);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_fill_image_3d);
diff --git a/utests/compiler_fill_image_3d_2.cpp b/utests/compiler_fill_image_3d_2.cpp
deleted file mode 100644
index f5ff792..0000000
--- a/utests/compiler_fill_image_3d_2.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_fill_image_3d_2(void)
-{
-  const size_t w = 512;
-  const size_t h = 512;
-  const size_t depth = 5;
-  cl_image_format format;
-
-  format.image_channel_order = CL_RGBA;
-  format.image_channel_data_type = CL_UNSIGNED_INT8;
-
-  // Setup kernel and images
-  OCL_CREATE_KERNEL("test_fill_image_3d_2");
-
-  OCL_CREATE_IMAGE3D(buf[0], 0, &format, w, h, depth, 0, 0, NULL);
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  globals[0] = w;
-  globals[1] = h;
-  globals[2] = depth;
-  locals[0] = 16;
-  locals[1] = 16;
-  locals[2] = 1;
-  OCL_NDRANGE(3);
-
-  // Check result
-  OCL_MAP_BUFFER_GTT(0);
-  for (uint32_t k = 0; k < depth; k++)
-    for (uint32_t j = 0; j < h; ++j)
-      for (uint32_t i = 0; i < w; i++)
-        OCL_ASSERT(((uint32_t*)buf_data[0])[k*w*h + j*w + i] == 0x78563412);
-  OCL_UNMAP_BUFFER_GTT(0);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_fill_image_3d_2);
diff --git a/utests/compiler_function_argument.cpp b/utests/compiler_function_argument.cpp
deleted file mode 100644
index a39523b..0000000
--- a/utests/compiler_function_argument.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_function_argument(void)
-{
-  const size_t n = 2048;
-  const int value = 34;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_function_argument");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(int), &value);
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-
-  // Check results
-  for (uint32_t i = 0; i < n; ++i)
-    OCL_ASSERT(((int*)buf_data[0])[i] == value);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_function_argument);
-
-
diff --git a/utests/compiler_function_argument0.cpp b/utests/compiler_function_argument0.cpp
deleted file mode 100644
index 2e4227e..0000000
--- a/utests/compiler_function_argument0.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_function_argument0(void)
-{
-  const size_t n = 2048;
-  const short value = 34;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_function_argument0");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(short), &value);
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-
-  // Check results
-  for (uint32_t i = 0; i < n; ++i)
-    OCL_ASSERT(((int*)buf_data[0])[i] == value);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_function_argument0);
-
diff --git a/utests/compiler_function_argument1.cpp b/utests/compiler_function_argument1.cpp
deleted file mode 100644
index 48a7677..0000000
--- a/utests/compiler_function_argument1.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_function_argument1(void)
-{
-  const size_t n = 2048;
-  const char value = 34;
-  const short value0 = 31;
-  const int value1 = 3;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_function_argument1");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(char), &value);
-  OCL_SET_ARG(2, sizeof(short), &value0);
-  OCL_SET_ARG(3, sizeof(int), &value1);
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-
-  // Check results
-  for (uint32_t i = 0; i < n; ++i)
-    OCL_ASSERT(((int*)buf_data[0])[i] == value + value0 + value1);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_function_argument1);
-
-
diff --git a/utests/compiler_function_argument2.cpp b/utests/compiler_function_argument2.cpp
deleted file mode 100644
index c352a9e..0000000
--- a/utests/compiler_function_argument2.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-#include "utest_helper.hpp"
-
-#define VECSIZE 8
-void compiler_function_argument2(void)
-{
-  char arg0[8] = { 0 };
-  unsigned char arg1[8] = { 0 };
-  short arg2[8] = { 0 };
-  unsigned short arg3[8] = { 0 };
-  int arg4[8] = { 0 };
-  unsigned int arg5[8] = { 0 };
-  float arg6[8] = { 0 };
-
-  for (uint32_t i = 0; i < 8; ++i) {
-      arg0[i] = rand();
-      arg1[i] = rand();
-      arg2[i] = rand();
-      arg3[i] = rand();
-      arg4[i] = rand();
-      arg5[i] = rand();
-      arg6[i] = rand();
-  }
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_function_argument2");
-  OCL_CREATE_BUFFER(buf[0], 0, sizeof(float) * 8 * 8, NULL);
-  OCL_SET_ARG(0, sizeof(arg0), arg0);
-  OCL_SET_ARG(1, sizeof(arg1), arg1);
-  OCL_SET_ARG(2, sizeof(arg2), arg2);
-  OCL_SET_ARG(3, sizeof(arg3), arg3);
-  OCL_SET_ARG(4, sizeof(arg4), arg4);
-  OCL_SET_ARG(5, sizeof(arg5), arg5);
-  OCL_SET_ARG(6, sizeof(arg6), arg6);
-  OCL_SET_ARG(7, sizeof(cl_mem), &buf[0]);
-
-  // Run the kernel
-  globals[0] = 1;
-  locals[0] = 1;
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-
-  /* Check results */
-  float *dst = (float*)buf_data[0];
-
-  for (uint32_t i = 0; i < 8; ++i) {
-      OCL_ASSERT((float)arg0[i] == dst[0*8 + i]);
-      OCL_ASSERT((float)arg1[i] == dst[1*8 + i]);
-      OCL_ASSERT((float)arg2[i] == dst[2*8 + i]);
-      OCL_ASSERT((float)arg3[i] == dst[3*8 + i]);
-      OCL_ASSERT((float)arg4[i] == dst[4*8 + i]);
-      OCL_ASSERT((float)arg5[i] == dst[5*8 + i]);
-      OCL_ASSERT((float)arg6[i] == dst[6*8 + i]);
-  }
-  OCL_UNMAP_BUFFER(0);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_function_argument2);
diff --git a/utests/compiler_function_argument3.cpp b/utests/compiler_function_argument3.cpp
deleted file mode 100644
index e9f5e80..0000000
--- a/utests/compiler_function_argument3.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-#include "utest_helper.hpp"
-
-struct sfloat8 {
-    float a;
-    float b;
-    float c;
-    float d;
-    float e;
-    float f;
-    float g;
-    float h;
-};
-
-void compiler_function_argument3(void)
-{
-  sfloat8 arg6;
-
-  arg6.a = 3.0f;
-  arg6.h = 4.0f;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_function_argument3");
-  OCL_CREATE_BUFFER(buf[0], 0, sizeof(struct sfloat8) * 8, NULL);
-
-  OCL_SET_ARG(0, sizeof(arg6), &arg6);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[0]);
-
-  // Run the kernel
-  globals[0] = 1;
-  locals[0] = 1;
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(0);
-
-  /* Check results */
-  sfloat8 *dst = (sfloat8*)buf_data[0];
-
-  OCL_ASSERT(dst[0].a == 3.0f);
-  OCL_ASSERT(dst[0].b == 12.0f);
-  OCL_ASSERT(dst[0].h == 7.0f);
-
-  OCL_UNMAP_BUFFER(0);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_function_argument3);
diff --git a/utests/compiler_function_constant.cpp b/utests/compiler_function_constant.cpp
deleted file mode 100644
index 20f0ece..0000000
--- a/utests/compiler_function_constant.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_function_constant(void)
-{
-  const size_t n = 2048;
-  const uint32_t value = 34;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_function_constant");
-  OCL_CREATE_BUFFER(buf[0], 0, 75 * sizeof(short), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(uint32_t), &value);
-
-  OCL_MAP_BUFFER(0);
-  for(uint32_t i = 0; i < 69; ++i)
-    ((short *)buf_data[0])[i] = i;
-  OCL_UNMAP_BUFFER(0);
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(1);
-
-  // Check results
-  for (uint32_t i = 0; i < n; ++i)
-    OCL_ASSERT(((uint32_t *)buf_data[1])[i] == (value + i%69));
-
-  OCL_UNMAP_BUFFER(1);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_function_constant);
diff --git a/utests/compiler_function_constant0.cpp b/utests/compiler_function_constant0.cpp
deleted file mode 100644
index 6fbbd30..0000000
--- a/utests/compiler_function_constant0.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_function_constant0(void)
-{
-  const size_t n = 2048;
-  const uint32_t value = 34;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_function_constant0");
-  OCL_CREATE_BUFFER(buf[0], 0, 75 * sizeof(int32_t), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, 1 * sizeof(char), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  OCL_SET_ARG(3, sizeof(uint32_t), &value);
-
-  OCL_MAP_BUFFER(0);
-  for(uint32_t i = 0; i < 69; ++i)
-    ((int32_t *)buf_data[0])[i] = i;
-  OCL_UNMAP_BUFFER(0);
-
-  OCL_MAP_BUFFER(1);
-  ((char *)buf_data[1])[0] = 15;
-  OCL_UNMAP_BUFFER(1);
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(2);
-
-  // Check results
-  for (uint32_t i = 0; i < n; ++i)
-    OCL_ASSERT(((uint32_t *)buf_data[2])[i] == (value + 15 + i%69));
-
-  OCL_UNMAP_BUFFER(2);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_function_constant0);
diff --git a/utests/compiler_function_constant1.cpp b/utests/compiler_function_constant1.cpp
deleted file mode 100644
index b92e6ca..0000000
--- a/utests/compiler_function_constant1.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_function_constant1(void)
-{
-  const size_t n = 2048;
-  const uint32_t value = 34;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_function_constant");
-  OCL_CREATE_BUFFER(buf[0], 0, 75 * sizeof(short), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(uint32_t), &value);
-
-  OCL_MAP_BUFFER(0);
-  for(uint32_t i = 0; i < 69; ++i)
-    ((short *)buf_data[0])[i] = i;
-  OCL_UNMAP_BUFFER(0);
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  OCL_CREATE_BUFFER(buf[2], 0, 101 * sizeof(short), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[2]);
-  OCL_MAP_BUFFER(2);
-  for(uint32_t i = 0; i < 69; ++i)
-    ((short *)buf_data[2])[i] = 2*i;
-  OCL_UNMAP_BUFFER(2);
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(1);
-
-  // Check results
-  for (uint32_t i = 0; i < n; ++i)
-    OCL_ASSERT(((uint32_t *)buf_data[1])[i] == (value + (i%69)*2));
-
-  OCL_UNMAP_BUFFER(1);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_function_constant1);
diff --git a/utests/compiler_function_qualifiers.cpp b/utests/compiler_function_qualifiers.cpp
deleted file mode 100644
index 55ddd84..0000000
--- a/utests/compiler_function_qualifiers.cpp
+++ /dev/null
@@ -1,10 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_function_qualifiers(void)
-{
-  OCL_CREATE_KERNEL("compiler_function_qualifiers");
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_function_qualifiers);
-
-
diff --git a/utests/compiler_geometric_builtin.cpp b/utests/compiler_geometric_builtin.cpp
deleted file mode 100644
index a9ccc2c..0000000
--- a/utests/compiler_geometric_builtin.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_geometric_builtin(void)
-{
-  OCL_CREATE_KERNEL("compiler_geometric_builtin");
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_geometric_builtin);
-
diff --git a/utests/compiler_get_image_info.cpp b/utests/compiler_get_image_info.cpp
deleted file mode 100644
index 4454d03..0000000
--- a/utests/compiler_get_image_info.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_get_image_info(void)
-{
-  const size_t w = 256;
-  const size_t h = 512;
-  const size_t depth = 3;
-  cl_image_format format;
-
-  format.image_channel_order = CL_RGBA;
-  format.image_channel_data_type = CL_UNSIGNED_INT8;
-
-  // Setup kernel and images
-  OCL_CREATE_KERNEL("test_get_image_info");
-
-  OCL_CREATE_IMAGE3D(buf[0], 0, &format, w, h, depth, 0, 0, NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, 32 * sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, 32 * sizeof(int), NULL);
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  globals[0] = 32;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  // Check result
-  OCL_MAP_BUFFER(1);
-  OCL_MAP_BUFFER(2);
-  for (uint32_t i = 0; i < 32; i++)
-  {
-    OCL_ASSERT(((uint32_t*)buf_data[1])[i] == ((w << 20) | (h << 8) | depth));
-    OCL_ASSERT(((uint32_t*)buf_data[2])[i] == ((CL_UNSIGNED_INT8 << 16) | CL_RGBA));
-  }
-  OCL_UNMAP_BUFFER(1);
-  OCL_UNMAP_BUFFER(2);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_get_image_info);
diff --git a/utests/compiler_getelementptr_bitcast.cpp b/utests/compiler_getelementptr_bitcast.cpp
deleted file mode 100644
index a57ff36..0000000
--- a/utests/compiler_getelementptr_bitcast.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_getelementptr_bitcast(void)
-{
-  const size_t n = 16;
-  float cpu_dst[16], cpu_src[16];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_getelementptr_bitcast");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = 16;
-
-  //must be 1 to pass the test, it is required by the special usage in the kernel
-  locals[0] = 1;
-
-  // Run random tests
-  for (uint32_t pass = 0; pass < 8; ++pass) {
-    OCL_MAP_BUFFER(0);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      cpu_src[i] = ((float*)buf_data[0])[i] = .1f * (rand() & 15) - .75f;
-    OCL_UNMAP_BUFFER(0);
-
-    // Run the kernel on GPU
-    OCL_NDRANGE(1);
-
-    // Run on CPU
-    for (int32_t i = 0; i < (int32_t) n; ++i){
-      unsigned char* c = (unsigned char*)&cpu_src[i];
-      cpu_dst[i] = c[2];
-    }
-
-    // Compare
-    OCL_MAP_BUFFER(1);
-    for (int32_t i = 0; i < (int32_t) n; ++i){
-      //printf("src:%f, gpu_dst: %f, cpu_dst: %f\n", cpu_src[i], ((float *)buf_data[1])[i], cpu_dst[i]);
-      OCL_ASSERT(((float *)buf_data[1])[i] == cpu_dst[i]);
-    }
-    OCL_UNMAP_BUFFER(1);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_getelementptr_bitcast);
diff --git a/utests/compiler_global_constant.cpp b/utests/compiler_global_constant.cpp
deleted file mode 100644
index 88f9852..0000000
--- a/utests/compiler_global_constant.cpp
+++ /dev/null
@@ -1,104 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_global_constant(void)
-{
-  const size_t n = 2048;
-  const uint32_t e = 34, r = 77;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_global_constant");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(uint32_t), &e);
-  OCL_SET_ARG(2, sizeof(uint32_t), &r);
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  unsigned int m[3] = {71,72,73};
-
-  // Check results
-  OCL_MAP_BUFFER(0);
-  for (uint32_t i = 0; i < n; ++i)
-//    printf("%d result %d reference %d\n", i, ((uint32_t *)buf_data[0])[i], m[i%3] + e + r);
-    OCL_ASSERT(((uint32_t *)buf_data[0])[i] == m[i%3] + e + r);
-  OCL_UNMAP_BUFFER(0);
-}
-
-void compiler_global_constant1(void)
-{
-  const size_t n = 32;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL_FROM_FILE("compiler_global_constant", "compiler_global_constant1");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  uint32_t data1[] = {1, 4, 7};
-  uint32_t data2[]= {3, 7, 11};
-
-  // Check results
-  OCL_MAP_BUFFER(0);
-  for (uint32_t i = 0; i < n; ++i)
-//    printf("%d result %d reference %d\n", i, ((uint32_t *)buf_data[0])[i], data1[i%3] + data2[i%3]);
-    OCL_ASSERT(((uint32_t *)buf_data[0])[i] == data1[i%3] + data2[i%3]);
-  OCL_UNMAP_BUFFER(0);
-}
-
-void compiler_global_constant2(void)
-{
-  const size_t n = 32;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL_FROM_FILE("compiler_global_constant", "compiler_global_constant2");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  // Check results
-  OCL_MAP_BUFFER(0);
-  for (uint32_t i = 0; i < n; ++i)
-//    printf("%d result %d reference %d\n", i, ((uint32_t *)buf_data[0])[i], 6);
-    OCL_ASSERT(((uint32_t *)buf_data[0])[i] == 6);
-  OCL_UNMAP_BUFFER(0);
-}
-
-void compiler_global_constant3(void)
-{
-  const size_t n = 32;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL_FROM_FILE("compiler_global_constant", "compiler_global_constant3");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  uint32_t data1[] = {3, 6, 9};
-  char data2[]= {'c', 'f', 'j'};
-  // Check results
-  OCL_MAP_BUFFER(0);
-  for (uint32_t i = 0; i < n; ++i)
-//    printf("%d result %d reference %d\n", i, ((uint32_t *)buf_data[0])[i], data1[i%3] + (int)data2[i%3]);
-    OCL_ASSERT(((uint32_t *)buf_data[0])[i] == data1[i%3] + (uint32_t)data2[i%3]);
-  OCL_UNMAP_BUFFER(0);
-}
-
-MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_global_constant, true);
-MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_global_constant1, true);
-MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_global_constant2, true);
-MAKE_UTEST_FROM_FUNCTION(compiler_global_constant3);
diff --git a/utests/compiler_global_constant_2.cpp b/utests/compiler_global_constant_2.cpp
deleted file mode 100644
index cbe63ae..0000000
--- a/utests/compiler_global_constant_2.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_global_constant_2(void)
-{
-  const size_t n = 2048;
-  const uint32_t e = 34, r = 77;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_global_constant_2");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(uint32_t), &e);
-  OCL_SET_ARG(2, sizeof(uint32_t), &r);
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  unsigned int m[3] = {0x15b,0x25b,0x35b};
-  unsigned int t[5] = {0x45b,0x55b,0x65b,0x75b,0x85b};
-
-  // Check results
-  OCL_MAP_BUFFER(0);
-  for (uint32_t i = 0; i < n; ++i)
-//    std::cout << ((uint32_t *)buf_data[0])[i] << std::endl;
-    OCL_ASSERT(((uint32_t *)buf_data[0])[i] == m[i%3] + t[i%5] + e + r);
-  OCL_UNMAP_BUFFER(0);
-}
-
-void compiler_global_constant_2_long(void)
-{
-  const size_t n = 2048;
-  const uint32_t e = 34, r = 77;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL_FROM_FILE("compiler_global_constant_2", "compiler_global_constant_2_long");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint64_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(uint32_t), &e);
-  OCL_SET_ARG(2, sizeof(uint32_t), &r);
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  uint64_t m[3] = {0x15b,0x25b,0xFFFFFFFFF};
-
-  // Check results
-  OCL_MAP_BUFFER(0);
-  for (uint32_t i = 0; i < n; ++i)
-//    std::cout << ((uint64_t *)buf_data[0])[i] << std::endl;
-    OCL_ASSERT(((uint64_t *)buf_data[0])[i] == m[i%3] + e + r);
-  OCL_UNMAP_BUFFER(0);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_global_constant_2);
-MAKE_UTEST_FROM_FUNCTION(compiler_global_constant_2_long);
diff --git a/utests/compiler_global_memory_barrier.cpp b/utests/compiler_global_memory_barrier.cpp
deleted file mode 100644
index ea84e72..0000000
--- a/utests/compiler_global_memory_barrier.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_global_memory_barrier(void)
-{
-  const size_t n = 16*1024;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_global_memory_barrier");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-
-  // Run the kernel
-  globals[0] = n/2;
-  locals[0] = 256;
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-
-  // Check results
-  uint32_t *dst = (uint32_t*)buf_data[0];
-  for (uint32_t i = 0; i < n; i+=locals[0])
-    for (uint32_t j = 0; j < locals[0]; ++j)
-        OCL_ASSERT(dst[i+j] == locals[0] - 1 -j);
-  OCL_UNMAP_BUFFER(0);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_global_memory_barrier);
diff --git a/utests/compiler_group_size.cpp b/utests/compiler_group_size.cpp
deleted file mode 100644
index 8ad83f0..0000000
--- a/utests/compiler_group_size.cpp
+++ /dev/null
@@ -1,141 +0,0 @@
-#include "utest_helper.hpp"
-#include <string.h>
-
-struct xyz{
-  unsigned short b;
-  unsigned short e;
-  unsigned int o;
-};
-
-void compiler_group_size1(void)
-{
-  const size_t n = 7*32*17;
-
-  int group_size[] = {7, 17, 32};
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_group_size");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-
-  for(int i = 0; i < 3; i++) {
-    // Run the kernel
-    globals[0] = n;
-    locals[0] = group_size[i];
-    OCL_NDRANGE(1);
-    OCL_MAP_BUFFER(0);
-
-    // Check results
-    for (uint32_t i = 0; i < n; ++i)
-      OCL_ASSERT(((uint32_t*)buf_data[0])[i] == i);
-    OCL_UNMAP_BUFFER(0);
-  }
-}
-
-void compiler_group_size2(void)
-{
-  const uint32_t n = 4*17*8;
-  int size_x[] = {2, 4, 17};
-  int size_y[] = {2, 4, 4};
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_group_size");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-
-  for(int i = 0; i < 3; i++) {
-    // Run the kernel
-    globals[0] = 4*17;
-    globals[1] = 8;
-    locals[0] = size_x[i];
-    locals[1] = size_y[i];
-    OCL_NDRANGE(2);
-    OCL_MAP_BUFFER(0);
-
-    // Check results
-    for (uint32_t i = 0; i < n; ++i)
-      OCL_ASSERT(((uint32_t*)buf_data[0])[i] == i);
-    OCL_UNMAP_BUFFER(0);
-  }
-}
-
-void compiler_group_size3(void)
-{
-  const uint32_t n = 4*17*8*4;
-  int size_x[] = {2, 4, 17};
-  int size_y[] = {2, 4, 4};
-  int size_z[] = {2, 1, 2};
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_group_size");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-
-  for(int i = 0; i < 3; i++) {
-    // Run the kernel
-    globals[0] = 4*17;
-    globals[1] = 8;
-    globals[2] = 4;
-    locals[0] = size_x[i];
-    locals[1] = size_y[i];
-    locals[2] = size_z[i];
-    OCL_NDRANGE(3);
-    OCL_MAP_BUFFER(0);
-
-    // Check results
-    for (uint32_t i = 0; i < n; ++i)
-      OCL_ASSERT(((uint32_t*)buf_data[0])[i] == i);
-    OCL_UNMAP_BUFFER(0);
-  }
-}
-
-void compiler_group_size4(void)
-{
-  const size_t n = 16;
-  uint32_t color = 2;
-  uint32_t num = 1;
-  int group_size[] = {1};
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL_FROM_FILE("compiler_group_size", "compiler_group_size4");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(struct xyz), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-
-  for(uint32_t i = 0; i < num; i++) {
-    // Run the kernel
-    OCL_MAP_BUFFER(0);
-    ((struct xyz*)buf_data[0])[0].b = 0;
-    ((struct xyz*)buf_data[0])[0].e = 2;
-    ((struct xyz*)buf_data[0])[0].o = 0;
-    OCL_UNMAP_BUFFER(0);
-
-    OCL_MAP_BUFFER(1);
-    memset(((uint32_t*)buf_data[1]), 0x0, sizeof(uint32_t)*n);
-    OCL_UNMAP_BUFFER(1);
-
-    OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-    OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-    OCL_SET_ARG(2, sizeof(cl_int), &group_size[i]);
-    OCL_SET_ARG(3, sizeof(cl_int), &color);
-
-    globals[0] = group_size[i];
-    locals[0] = group_size[i];
-    OCL_NDRANGE(1);
-    OCL_MAP_BUFFER(1);
-
-    // Check results
-    for (uint32_t j = 0; j < n; ++j) {
-//      std::cout <<((uint32_t*)buf_data[1])[j] << "  ";
-      if(j >= i && j <= i+2) {
-       OCL_ASSERT(((uint32_t*)buf_data[1])[j] == color);
-      } else {
-       OCL_ASSERT(((uint32_t*)buf_data[1])[j] == 0);
-      }
-
-    }
-    OCL_UNMAP_BUFFER(1);
-  }
-}
-MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_group_size1, true);
-MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_group_size2, true);
-MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_group_size3, true);
-MAKE_UTEST_FROM_FUNCTION(compiler_group_size4);
-
diff --git a/utests/compiler_hadd.cpp b/utests/compiler_hadd.cpp
deleted file mode 100644
index 9723702..0000000
--- a/utests/compiler_hadd.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_hadd(void)
-{
-  const int n = 32;
-  int src1[n], src2[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_hadd");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (int i = 0; i < n; ++i) {
-    src1[i] = ((int*)buf_data[0])[i] = rand();
-    src2[i] = ((int*)buf_data[1])[i] = rand();
-  }
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(2);
-  for (int i = 0; i < n; ++i) {
-    long long a = src1[i];
-    a += src2[i];
-    a >>= 1;
-    OCL_ASSERT(((int*)buf_data[2])[i] == (int)a);
-  }
-  OCL_UNMAP_BUFFER(2);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_hadd);
diff --git a/utests/compiler_if_else.cpp b/utests/compiler_if_else.cpp
deleted file mode 100644
index e38b23f..0000000
--- a/utests/compiler_if_else.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_if_else(void)
-{
-  const size_t n = 17;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_if_else");
-  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * n);
-  for (uint32_t i = 0; i < n; ++i) ((uint32_t*)buf_data[0])[i] = 2;
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t), buf_data[0]);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  free(buf_data[0]);
-  buf_data[0] = NULL;
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = 16;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  // First control flow
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < 16; ++i) {
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 2);
-    OCL_ASSERT(((int32_t*)buf_data[0])[i] == 1);
-  }
-
-  // Second control flow
-  for (uint32_t i = 0; i < n; ++i) ((int32_t*)buf_data[0])[i] = -1;
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < 16; ++i) {
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == -2);
-    OCL_ASSERT(((int32_t*)buf_data[0])[i] == 2);
-  }
-
-  // Third control flow
-  for (uint32_t i = 0; i < 4; ++i) ((int32_t*)buf_data[0])[i] = 2;
-  for (uint32_t i = 4; i < n; ++i) ((int32_t*)buf_data[0])[i] = -1;
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < 3; ++i) {
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 2);
-    OCL_ASSERT(((int32_t*)buf_data[0])[i] == 1);
-  }
-  OCL_ASSERT(((int32_t*)buf_data[1])[3] == -1);
-  OCL_ASSERT(((int32_t*)buf_data[0])[3] == 1);
-  for (uint32_t i = 4; i < 16; ++i) {
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == -2);
-    OCL_ASSERT(((int32_t*)buf_data[0])[i] == 2);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_if_else);
-
diff --git a/utests/compiler_insert_to_constant.cpp b/utests/compiler_insert_to_constant.cpp
deleted file mode 100644
index c4f737f..0000000
--- a/utests/compiler_insert_to_constant.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_insert_to_constant(void)
-{
-  const size_t n = 32;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_insert_to_constant");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t[4]), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-
-  // Check results
-  uint32_t *data = (uint32_t*) buf_data[0];
-  for (uint32_t i = 0; i < n; ++i) {
-    OCL_ASSERT(data[4*i+0] == 0);
-    OCL_ASSERT(data[4*i+1] == 1);
-    OCL_ASSERT(data[4*i+2] == i);
-    OCL_ASSERT(data[4*i+3] == 3);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_insert_to_constant);
-
-
diff --git a/utests/compiler_insert_vector.cpp b/utests/compiler_insert_vector.cpp
deleted file mode 100644
index c7c239f..0000000
--- a/utests/compiler_insert_vector.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_insert_vector(void)
-{
-  const size_t n = 2048;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_insert_vector");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int) * 4, NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_insert_vector);
diff --git a/utests/compiler_insn_selection_masked_min_max.cpp b/utests/compiler_insn_selection_masked_min_max.cpp
deleted file mode 100644
index 6a2edcc..0000000
--- a/utests/compiler_insn_selection_masked_min_max.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-#include "utest_helper.hpp"
-#include <algorithm>
-
-static void compiler_insn_selection_masked_min_max(void)
-{
-  const size_t n = 256;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_insn_selection_masked_min_max");
-  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * n);
-  for (uint32_t i = 0; i < n; ++i)
-    ((float*)buf_data[0])[i] = float(i);
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t), buf_data[0]);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  free(buf_data[0]);
-  buf_data[0] = NULL;
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  // Check result
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  float *dst = (float*)buf_data[1];
-  float *src = (float*)buf_data[0];
-  for (uint32_t i = 0; i < n; ++i) {
-    float cpu_dst;
-    if (i % 16 > 5)
-      cpu_dst = std::max(src[i], src[7]);
-    else
-      cpu_dst = std::min(src[i], src[10]);
-    OCL_ASSERT(dst[i] == cpu_dst);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_insn_selection_masked_min_max)
-
-
diff --git a/utests/compiler_insn_selection_max.cpp b/utests/compiler_insn_selection_max.cpp
deleted file mode 100644
index 8552b9f..0000000
--- a/utests/compiler_insn_selection_max.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-#include "utest_helper.hpp"
-#include <algorithm>
-
-static void compiler_insn_selection_max(void)
-{
-  const size_t n = 8192 * 4;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_insn_selection_max");
-  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * n);
-  for (uint32_t i = 0; i < n; ++i)
-    ((float*)buf_data[0])[i] = float(i);
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t), buf_data[0]);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  free(buf_data[0]);
-  buf_data[0] = NULL;
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  // Check result
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  float *dst = (float*)buf_data[1];
-  float *src = (float*)buf_data[0];
-  for (uint32_t i = 0; i < n; ++i) {
-    OCL_ASSERT(dst[i] == std::max(src[i], src[0]));
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_insn_selection_max)
-
-
diff --git a/utests/compiler_insn_selection_min.cpp b/utests/compiler_insn_selection_min.cpp
deleted file mode 100644
index f5f9d18..0000000
--- a/utests/compiler_insn_selection_min.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-#include "utest_helper.hpp"
-#include <algorithm>
-
-static void compiler_insn_selection_min(void)
-{
-  const size_t n = 8192 * 4;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_insn_selection_min");
-  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * n);
-  for (uint32_t i = 0; i < n; ++i)
-    ((float*)buf_data[0])[i] = float(i);
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t), buf_data[0]);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  free(buf_data[0]);
-  buf_data[0] = NULL;
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  // Check result
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  float *dst = (float*)buf_data[1];
-  float *src = (float*)buf_data[0];
-  for (uint32_t i = 0; i < n; ++i) {
-    OCL_ASSERT(dst[i] == std::min(src[i], src[0]));
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_insn_selection_min)
-
diff --git a/utests/compiler_integer_builtin.cpp b/utests/compiler_integer_builtin.cpp
deleted file mode 100644
index 98ad51b..0000000
--- a/utests/compiler_integer_builtin.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_integer_builtin(void)
-{
-  OCL_CREATE_KERNEL("compiler_integer_builtin");
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_integer_builtin);
-
diff --git a/utests/compiler_integer_division.cpp b/utests/compiler_integer_division.cpp
deleted file mode 100644
index 3898ae1..0000000
--- a/utests/compiler_integer_division.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-#include "utest_helper.hpp"
-
-static void cpu(int global_id, int *src, int *dst, int x) {
-  dst[global_id] = src[global_id] / x;
-}
-
-void compiler_integer_division(void)
-{
-  const size_t n = 16;
-  int cpu_dst[16], cpu_src[16];
-  const int x = 7;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_integer_division");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(x), &x);
-  globals[0] = 16;
-  locals[0] = 16;
-
-  // Run random tests
-  for (uint32_t pass = 0; pass < 8; ++pass) {
-    OCL_MAP_BUFFER(0);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      cpu_src[i] = ((int32_t*)buf_data[0])[i] = rand() % 1000;
-    OCL_UNMAP_BUFFER(0);
-
-    // Run the kernel on GPU
-    OCL_NDRANGE(1);
-
-    // Run on CPU
-    for (int32_t i = 0; i <(int32_t) n; ++i) cpu(i, cpu_src, cpu_dst, x);
-
-    // Compare
-    OCL_MAP_BUFFER(1);
-    for (int32_t i = 0; i < 11; ++i)
-      OCL_ASSERT(((int32_t*)buf_data[1])[i] == cpu_dst[i]);
-    OCL_UNMAP_BUFFER(1);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_integer_division);
diff --git a/utests/compiler_integer_remainder.cpp b/utests/compiler_integer_remainder.cpp
deleted file mode 100644
index 100f464..0000000
--- a/utests/compiler_integer_remainder.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-#include "utest_helper.hpp"
-
-static void cpu(int global_id, int *src, int *dst, int x) {
-  dst[global_id] = src[global_id] % x;
-}
-
-void compiler_integer_remainder(void)
-{
-  const size_t n = 16;
-  int cpu_dst[16], cpu_src[16];
-  const int x = 7;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_integer_remainder");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(x), &x);
-  globals[0] = 16;
-  locals[0] = 16;
-
-  // Run random tests
-  for (uint32_t pass = 0; pass < 8; ++pass) {
-    OCL_MAP_BUFFER(0);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      cpu_src[i] = ((int32_t*)buf_data[0])[i] = rand() % 16;
-    OCL_UNMAP_BUFFER(0);
-
-    // Run the kernel on GPU
-    OCL_NDRANGE(1);
-
-    // Run on CPU
-    for (int32_t i = 0; i <(int32_t) n; ++i) cpu(i, cpu_src, cpu_dst, x);
-
-    // Compare
-    OCL_MAP_BUFFER(1);
-    for (int32_t i = 0; i < 11; ++i)
-      OCL_ASSERT(((int32_t*)buf_data[1])[i] == cpu_dst[i]);
-    OCL_UNMAP_BUFFER(1);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_integer_remainder);
diff --git a/utests/compiler_load_bool_imm.cpp b/utests/compiler_load_bool_imm.cpp
deleted file mode 100644
index d060daf..0000000
--- a/utests/compiler_load_bool_imm.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_load_bool_imm(void)
-{
-  const size_t n = 1024;
-  const size_t local_size = 16;
-  const int copiesPerWorkItem = 5;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_load_bool_imm");
-  OCL_CREATE_BUFFER(buf[0], 0, n * copiesPerWorkItem * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, local_size*copiesPerWorkItem*sizeof(int), NULL); // 16 x int
-  OCL_SET_ARG(2, sizeof(int), &copiesPerWorkItem); // 16 x int
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = local_size;
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-
-  // Check results
-  int *dst = (int*)buf_data[0];
-  for (uint32_t i = 0; i < n * copiesPerWorkItem; i++)
-    OCL_ASSERT(dst[i] == copiesPerWorkItem);
-  OCL_UNMAP_BUFFER(0);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_load_bool_imm);
diff --git a/utests/compiler_local_memory_barrier.cpp b/utests/compiler_local_memory_barrier.cpp
deleted file mode 100644
index 6c9c98e..0000000
--- a/utests/compiler_local_memory_barrier.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/* 
- * Copyright © 2012 Intel Corporation
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author: Benjamin Segovia <benjamin.segovia at intel.com>
- */
-
-#include "utest_helper.hpp"
-
-static void compiler_local_memory_barrier(void)
-{
-  const size_t n = 1024;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_local_memory_barrier");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, 64, NULL); // 16 x int
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-
-  // Check results
-  uint32_t *dst = (uint32_t*)buf_data[0];
-  for (uint32_t i = 0; i < n; i+=16)
-  for (uint32_t j = 0; j < 16; ++j)
-    OCL_ASSERT(dst[i+j] == 15-j);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_local_memory_barrier);
-
diff --git a/utests/compiler_local_memory_barrier_2.cpp b/utests/compiler_local_memory_barrier_2.cpp
deleted file mode 100644
index 4fa090b..0000000
--- a/utests/compiler_local_memory_barrier_2.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_local_memory_barrier_2(void)
-{
-  const size_t n = 16*1024;
-
-  globals[0] = n/2;
-  locals[0] = 256;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_local_memory_barrier_2");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  //OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, locals[0] * 2 * sizeof(uint32_t), NULL);
-
-  // Run the kernel
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-
-  // Check results
-  uint32_t *dst = (uint32_t*)buf_data[0];
-  for (uint32_t i = 0; i < n; i+=locals[0])
-    for (uint32_t j = 0; j < locals[0]; ++j)
-        OCL_ASSERT(dst[i+j] == locals[0] - 1 -j);
-  OCL_UNMAP_BUFFER(0);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_local_memory_barrier_2);
diff --git a/utests/compiler_local_memory_barrier_wg64.cpp b/utests/compiler_local_memory_barrier_wg64.cpp
deleted file mode 100644
index 0cb69f5..0000000
--- a/utests/compiler_local_memory_barrier_wg64.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/* 
- * Copyright © 2012 Intel Corporation
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author: Benjamin Segovia <benjamin.segovia at intel.com>
- */
-
-#include "utest_helper.hpp"
-
-static void compiler_local_memory_barrier_wg64(void)
-{
-  const size_t n = 1024;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_local_memory_barrier_wg64");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, 256, NULL); // 64 x int
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = 64;
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-
-  // Check results
-  uint32_t *dst = (uint32_t*)buf_data[0];
-  for (uint32_t i = 0; i < n; i+=64)
-  for (uint32_t j = 0; j < 64; ++j)
-    OCL_ASSERT(dst[i+j] == 63-j);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_local_memory_barrier_wg64);
-
diff --git a/utests/compiler_local_memory_two_ptr.cpp b/utests/compiler_local_memory_two_ptr.cpp
deleted file mode 100644
index fde5533..0000000
--- a/utests/compiler_local_memory_two_ptr.cpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/* 
- * Copyright © 2012 Intel Corporation
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author: Benjamin Segovia <benjamin.segovia at intel.com>
- */
-
-#include "utest_helper.hpp"
-
-static void compiler_local_memory_two_ptr(void)
-{
-  const size_t n = 1024;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_local_memory_two_ptr");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, 64, NULL); // 16 x int
-  OCL_SET_ARG(2, 64, NULL); // 16 x int
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-
-  // Check results
-  int32_t *dst = (int32_t*)buf_data[0];
-  for (int32_t i = 0; i < (int) n; i+=16)
-  for (int32_t j = 0; j < 16; ++j) {
-    const int gid = i + j;
-    const int tid = j;
-    OCL_ASSERT(dst[i+j] == (gid&~0xf) + 15-tid + 15-tid);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_local_memory_two_ptr);
-
diff --git a/utests/compiler_local_slm.cpp b/utests/compiler_local_slm.cpp
deleted file mode 100644
index 48a072f..0000000
--- a/utests/compiler_local_slm.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_local_slm(void)
-{
-  const size_t n = 32;
-  OCL_CREATE_KERNEL_FROM_FILE("compiler_local_slm", "compiler_local_slm");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-  for (uint32_t i = 0; i < n; ++i)
-//    std::cout << ((int32_t*)buf_data[0])[i] << std::endl;
-    OCL_ASSERT(((int32_t*)buf_data[0])[i] == (i%16 + 2 + 1+ i/16));
-  OCL_UNMAP_BUFFER(0);
-}
-
-void compiler_local_slm1(void)
-{
-  const size_t n = 2;
-  OCL_CREATE_KERNEL_FROM_FILE("compiler_local_slm", "compiler_local_slm1");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint64_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  globals[0] = 1;
-  locals[0] = 1;
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-  uint64_t * ptr = (uint64_t*)buf_data[0];
-  OCL_ASSERT((ptr[1] -ptr[0])  == 4);
-  OCL_UNMAP_BUFFER(0);
-}
-MAKE_UTEST_FROM_FUNCTION(compiler_local_slm);
-MAKE_UTEST_FROM_FUNCTION(compiler_local_slm1);
diff --git a/utests/compiler_long.cpp b/utests/compiler_long.cpp
deleted file mode 100644
index b525694..0000000
--- a/utests/compiler_long.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-#include <cstdint>
-#include <cstring>
-#include <iostream>
-#include "utest_helper.hpp"
-
-void compiler_long(void)
-{
-  const size_t n = 16;
-  int64_t src1[n], src2[n];
-
-  int64_t zero = 0;
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_long");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int64_t), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int64_t), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int64_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  OCL_SET_ARG(3, sizeof(cl_long), &zero);
-  globals[0] = n;
-  locals[0] = 16;
-
-  // Run random tests
-  src1[0] = -1L,                  src2[0] = -1L;
-  src1[1] = 0x8000000000000000UL, src2[1] = 0x8000000000000000UL;
-  src1[2] = 0x7FFFFFFFFFFFFFFFL,  src2[2] = 1L;
-  src1[3] = 0xFFFFFFFEL,          src2[3] = 1L;
-  src1[4] = 0x7FFFFFFFL,          src2[4] = 0x80000000L;
-  src1[5] = 0,                    src2[5] = 0;
-  src1[6] = 0,                    src2[6] = 1;
-  src1[7] = -2L,                  src2[7] = -1L;
-  src1[8] = 0,                    src2[8] = 0x8000000000000000UL;
-  for (int32_t i = 9; i < (int32_t) n; ++i) {
-    src1[i] = ((int64_t)rand() << 32) + rand();
-    src2[i] = ((int64_t)rand() << 32) + rand();
-  }
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  memcpy(buf_data[0], src1, sizeof(src1));
-  memcpy(buf_data[1], src2, sizeof(src2));
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-
-  // Run the kernel on GPU
-  OCL_NDRANGE(1);
-
-  // Compare
-  OCL_MAP_BUFFER(2);
-  for (int32_t i = 0; i < (int32_t) n; ++i) {
-    //printf("%lx\n", ((int64_t *)buf_data[2])[i]);
-    if (i < 5)
-      OCL_ASSERT(src1[i] + src2[i] == ((int64_t *)buf_data[2])[i]);
-    if (i > 5)
-      OCL_ASSERT(src1[i] - src2[i] == ((int64_t *)buf_data[2])[i]);
-  }
-  OCL_UNMAP_BUFFER(2);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_long);
diff --git a/utests/compiler_long_2.cpp b/utests/compiler_long_2.cpp
deleted file mode 100644
index 6c5da4b..0000000
--- a/utests/compiler_long_2.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-#include <cstdint>
-#include <cstring>
-#include <iostream>
-#include "utest_helper.hpp"
-
-void compiler_long_2(void)
-{
-  const size_t n = 16;
-  int64_t src1[n], src2[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_long_2");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int64_t), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int64_t), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int64_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  // Run random tests
-  for (int32_t i = 0; i < (int32_t) n; ++i) {
-    src1[i] = ((int64_t)rand() << 32) + rand();
-    src2[i] = ((int64_t)rand() << 32) + rand();
-  }
-  src1[4] = 1;
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  memcpy(buf_data[0], src1, sizeof(src1));
-  memcpy(buf_data[1], src2, sizeof(src2));
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-
-  // Run the kernel on GPU
-  OCL_NDRANGE(1);
-
-  // Compare
-  OCL_MAP_BUFFER(2);
-  int64_t *dest = ((int64_t *)buf_data[2]);
-  //for (int32_t i = 0; i < (int32_t) n; ++i)
-  //  printf("%lx\n", dest[i]);
-  OCL_ASSERT(0xFEDCBA9876543210UL == (uint64_t)dest[0]);
-  OCL_ASSERT((src1[1] & src2[1]) == dest[1]);
-  OCL_ASSERT((src1[2] | src2[2]) == dest[2]);
-  OCL_ASSERT((src1[3] ^ src2[3]) == dest[3]);
-  OCL_ASSERT(0x1122334455667788L == dest[4]);
-  OCL_UNMAP_BUFFER(2);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_long_2);
diff --git a/utests/compiler_long_asr.cpp b/utests/compiler_long_asr.cpp
deleted file mode 100644
index 0a70a23..0000000
--- a/utests/compiler_long_asr.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <cstdint>
-#include <cstring>
-#include <iostream>
-#include "utest_helper.hpp"
-
-void compiler_long_asr(void)
-{
-  const size_t n = 64;
-  int64_t src[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_long_asr");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int64_t), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int64_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  // Run random tests
-  for (int32_t i = 0; i < (int32_t) n; ++i)
-    src[i] = (int64_t)1 << 63;
-  OCL_MAP_BUFFER(0);
-  memcpy(buf_data[0], src, sizeof(src));
-  OCL_UNMAP_BUFFER(0);
-
-  // Run the kernel on GPU
-  OCL_NDRANGE(1);
-
-  // Compare
-  OCL_MAP_BUFFER(1);
-  int64_t *dest = ((int64_t *)buf_data[1]);
-  for (int32_t i = 0; i < (int32_t) n; ++i)
-    if (i > 7)
-      OCL_ASSERT(dest[i] == src[i] >> i);
-    else
-      OCL_ASSERT(dest[i] == src[i] + 1);
-  OCL_UNMAP_BUFFER(2);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_long_asr);
diff --git a/utests/compiler_long_cmp.cpp b/utests/compiler_long_cmp.cpp
deleted file mode 100644
index 35d4c4f..0000000
--- a/utests/compiler_long_cmp.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-#include <cstdint>
-#include <cstring>
-#include <iostream>
-#include "utest_helper.hpp"
-
-void compiler_long_cmp(void)
-{
-  const size_t n = 16;
-  int64_t src1[n], src2[n];
-
-  src1[0] = (int64_t)1 << 63, src2[0] = 0x7FFFFFFFFFFFFFFFll;
-  src1[1] = (int64_t)1 << 63, src2[1] = ((int64_t)1 << 63) | 1;
-  src1[2] = -1ll, src2[2] = 0;
-  src1[3] = ((int64_t)123 << 32) | 0x7FFFFFFF, src2[3] = ((int64_t)123 << 32) | 0x80000000;
-  src1[4] = 0x7FFFFFFFFFFFFFFFll, src2[4] = (int64_t)1 << 63;
-  src1[5] = ((int64_t)1 << 63) | 1, src2[5] = (int64_t)1 << 63;
-  src1[6] = 0, src2[6] = -1ll;
-  src1[7] = ((int64_t)123 << 32) | 0x80000000, src2[7] = ((int64_t)123 << 32) | 0x7FFFFFFF;
-  for(size_t i=8; i<n; i++) {
-    src1[i] = i;
-    src2[i] = i;
-  }
-
-  globals[0] = n;
-  locals[0] = 16;
-
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int64_t), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int64_t), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int64_t), NULL);
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  memcpy(buf_data[0], src1, sizeof(src1));
-  memcpy(buf_data[1], src2, sizeof(src2));
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-
-
-  OCL_CREATE_KERNEL_FROM_FILE("compiler_long_cmp", "compiler_long_cmp_l");
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(2);
-  for (int32_t i = 0; i < (int32_t) n; ++i) {
-    int64_t *dest = (int64_t *)buf_data[2];
-    int64_t x = (src1[i] < src2[i]) ? 3 : 4;
-    OCL_ASSERT(x == dest[i]);
-  }
-  OCL_UNMAP_BUFFER(2);
-  OCL_DESTROY_KERNEL_KEEP_PROGRAM(true);
-
-  OCL_CREATE_KERNEL_FROM_FILE("compiler_long_cmp", "compiler_long_cmp_le");
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(2);
-  for (int32_t i = 0; i < (int32_t) n; ++i) {
-    int64_t *dest = (int64_t *)buf_data[2];
-    int64_t x = (src1[i] <= src2[i]) ? 3 : 4;
-    OCL_ASSERT(x == dest[i]);
-  }
-  OCL_UNMAP_BUFFER(2);
-  OCL_DESTROY_KERNEL_KEEP_PROGRAM(true);
-
-  OCL_CREATE_KERNEL_FROM_FILE("compiler_long_cmp", "compiler_long_cmp_g");
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(2);
-  for (int32_t i = 0; i < (int32_t) n; ++i) {
-    int64_t *dest = (int64_t *)buf_data[2];
-    int64_t x = (src1[i] > src2[i]) ? 3 : 4;
-    OCL_ASSERT(x == dest[i]);
-  }
-  OCL_UNMAP_BUFFER(2);
-  OCL_DESTROY_KERNEL_KEEP_PROGRAM(true);
-
-  OCL_CREATE_KERNEL_FROM_FILE("compiler_long_cmp", "compiler_long_cmp_ge");
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(2);
-  for (int32_t i = 0; i < (int32_t) n; ++i) {
-    int64_t *dest = (int64_t *)buf_data[2];
-    int64_t x = (src1[i] >= src2[i]) ? 3 : 4;
-    OCL_ASSERT(x == dest[i]);
-  }
-  OCL_UNMAP_BUFFER(2);
-  OCL_DESTROY_KERNEL_KEEP_PROGRAM(true);
-
-  OCL_CREATE_KERNEL_FROM_FILE("compiler_long_cmp", "compiler_long_cmp_eq");
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(2);
-  for (int32_t i = 0; i < (int32_t) n; ++i) {
-    int64_t *dest = (int64_t *)buf_data[2];
-    int64_t x = (src1[i] == src2[i]) ? 3 : 4;
-    OCL_ASSERT(x == dest[i]);
-  }
-  OCL_UNMAP_BUFFER(2);
-  OCL_DESTROY_KERNEL_KEEP_PROGRAM(true);
-
-  OCL_CREATE_KERNEL_FROM_FILE("compiler_long_cmp", "compiler_long_cmp_neq");
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(2);
-  for (int32_t i = 0; i < (int32_t) n; ++i) {
-    int64_t *dest = (int64_t *)buf_data[2];
-    int64_t x = (src1[i] != src2[i]) ? 3 : 4;
-    OCL_ASSERT(x == dest[i]);
-  }
-  OCL_UNMAP_BUFFER(2);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_long_cmp);
diff --git a/utests/compiler_long_convert.cpp b/utests/compiler_long_convert.cpp
deleted file mode 100644
index ada6926..0000000
--- a/utests/compiler_long_convert.cpp
+++ /dev/null
@@ -1,158 +0,0 @@
-#include <cstdint>
-#include <cstring>
-#include <iostream>
-#include "utest_helper.hpp"
-
-// convert shorter integer to 64-bit integer
-void compiler_long_convert(void)
-{
-  const size_t n = 16;
-  char src1[n];
-  short src2[n];
-  int src3[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_long_convert");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(char), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(short), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[3], 0, n * sizeof(int64_t), NULL);
-  OCL_CREATE_BUFFER(buf[4], 0, n * sizeof(int64_t), NULL);
-  OCL_CREATE_BUFFER(buf[5], 0, n * sizeof(int64_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  OCL_SET_ARG(3, sizeof(cl_mem), &buf[3]);
-  OCL_SET_ARG(4, sizeof(cl_mem), &buf[4]);
-  OCL_SET_ARG(5, sizeof(cl_mem), &buf[5]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  // Run random tests
-  for (int32_t i = 0; i < (int32_t) n; ++i) {
-    src1[i] = -i;
-    src2[i] = -i;
-    src3[i] = -i;
-  }
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  OCL_MAP_BUFFER(2);
-  memcpy(buf_data[0], src1, sizeof(src1));
-  memcpy(buf_data[1], src2, sizeof(src2));
-  memcpy(buf_data[2], src3, sizeof(src3));
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-  OCL_UNMAP_BUFFER(2);
-
-  // Run the kernel on GPU
-  OCL_NDRANGE(1);
-
-  // Compare
-  OCL_MAP_BUFFER(3);
-  OCL_MAP_BUFFER(4);
-  OCL_MAP_BUFFER(5);
-  int64_t *dst1 = ((int64_t *)buf_data[3]);
-  int64_t *dst2 = ((int64_t *)buf_data[4]);
-  int64_t *dst3 = ((int64_t *)buf_data[5]);
-  for (int32_t i = 0; i < (int32_t) n; ++i) {
-    //printf("%lx %lx %lx\n", dst1[i], dst2[i], dst3[i]);
-    OCL_ASSERT(dst1[i] == -(int64_t)i);
-    OCL_ASSERT(dst2[i] == -(int64_t)i);
-    OCL_ASSERT(dst3[i] == -(int64_t)i);
-  }
-  OCL_UNMAP_BUFFER(3);
-  OCL_UNMAP_BUFFER(4);
-  OCL_UNMAP_BUFFER(5);
-}
-
-MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_long_convert, true);
-
-// convert 64-bit integer to shorter integer
-void compiler_long_convert_2(void)
-{
-  const size_t n = 16;
-  int64_t src[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL_FROM_FILE("compiler_long_convert", "compiler_long_convert_2");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(char), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(short), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[3], 0, n * sizeof(int64_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  OCL_SET_ARG(3, sizeof(cl_mem), &buf[3]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  // Run random tests
-  for (int32_t i = 0; i < (int32_t) n; ++i) {
-    src[i] = -i;
-  }
-  OCL_MAP_BUFFER(3);
-  memcpy(buf_data[3], src, sizeof(src));
-  OCL_UNMAP_BUFFER(3);
-
-  // Run the kernel on GPU
-  OCL_NDRANGE(1);
-
-  // Compare
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  OCL_MAP_BUFFER(2);
-  char *dst1 = ((char *)buf_data[0]);
-  short *dst2 = ((short *)buf_data[1]);
-  int *dst3 = ((int *)buf_data[2]);
-  for (int32_t i = 0; i < (int32_t) n; ++i) {
-    //printf("%x %x %x\n", dst1[i], dst2[i], dst3[i]);
-    OCL_ASSERT(dst1[i] == -i);
-    OCL_ASSERT(dst2[i] == -i);
-    OCL_ASSERT(dst3[i] == -i);
-  }
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-  OCL_UNMAP_BUFFER(2);
-}
-
-MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_long_convert_2, true);
-
-// convert 64-bit integer to 32-bit float
-void compiler_long_convert_to_float(void)
-{
-  const size_t n = 16;
-  int64_t src[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL_FROM_FILE("compiler_long_convert", "compiler_long_convert_to_float");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int64_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  // Run random tests
-  for (int32_t i = 0; i < (int32_t) n; ++i) {
-    src[i] = -(int64_t)i;
-  }
-  OCL_MAP_BUFFER(1);
-  memcpy(buf_data[1], src, sizeof(src));
-  OCL_UNMAP_BUFFER(1);
-
-  // Run the kernel on GPU
-  OCL_NDRANGE(1);
-
-  // Compare
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  float *dst = ((float *)buf_data[0]);
-  for (int32_t i = 0; i < (int32_t) n; ++i) {
-    //printf("%f\n", dst[i]);
-    OCL_ASSERT(dst[i] == src[i]);
-  }
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_long_convert_to_float);
diff --git a/utests/compiler_long_mult.cpp b/utests/compiler_long_mult.cpp
deleted file mode 100644
index 06070f7..0000000
--- a/utests/compiler_long_mult.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <cstdint>
-#include <cstring>
-#include <iostream>
-#include "utest_helper.hpp"
-
-void compiler_long_mult(void)
-{
-  const size_t n = 16;
-  int64_t src1[n], src2[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_long_mult");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int64_t), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int64_t), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int64_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  // Run random tests
-  for (int32_t i = 0; i < (int32_t) n; ++i) {
-    src1[i] = 0x77665544FFEEDDCCLL;
-    src2[i] = ((int64_t)rand() << 32) + rand();
-  }
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  memcpy(buf_data[0], src1, sizeof(src1));
-  memcpy(buf_data[1], src2, sizeof(src2));
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-
-  // Run the kernel on GPU
-  OCL_NDRANGE(1);
-
-  // Compare
-  OCL_MAP_BUFFER(2);
-  for (int32_t i = 0; i < (int32_t) n; ++i) {
-    //printf("%lx\n", ((int64_t *)buf_data[2])[i]);
-    if (i < 3)
-      OCL_ASSERT(src1[i] + src2[i] == ((int64_t *)buf_data[2])[i]);
-    else
-      OCL_ASSERT(src1[i] * src2[i] == ((int64_t *)buf_data[2])[i]);
-  }
-  OCL_UNMAP_BUFFER(2);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_long_mult);
diff --git a/utests/compiler_long_shl.cpp b/utests/compiler_long_shl.cpp
deleted file mode 100644
index c8e4624..0000000
--- a/utests/compiler_long_shl.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <cstdint>
-#include <cstring>
-#include <iostream>
-#include "utest_helper.hpp"
-
-void compiler_long_shl(void)
-{
-  const size_t n = 64;
-  int64_t src[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_long_shl");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int64_t), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int64_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  // Run random tests
-  for (int32_t i = 0; i < (int32_t) n; ++i)
-    src[i] = 1;
-  OCL_MAP_BUFFER(0);
-  memcpy(buf_data[0], src, sizeof(src));
-  OCL_UNMAP_BUFFER(0);
-
-  // Run the kernel on GPU
-  OCL_NDRANGE(1);
-
-  // Compare
-  OCL_MAP_BUFFER(1);
-  int64_t *dest = ((int64_t *)buf_data[1]);
-  for (int32_t i = 0; i < (int32_t) n; ++i)
-    if (i > 7)
-      OCL_ASSERT(dest[i] == ((int64_t)1) << i);
-    else
-      OCL_ASSERT(dest[i] == src[i] + 1);
-  OCL_UNMAP_BUFFER(2);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_long_shl);
diff --git a/utests/compiler_long_shr.cpp b/utests/compiler_long_shr.cpp
deleted file mode 100644
index e9fea6a..0000000
--- a/utests/compiler_long_shr.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <cstdint>
-#include <cstring>
-#include <iostream>
-#include "utest_helper.hpp"
-
-void compiler_long_shr(void)
-{
-  const size_t n = 64;
-  uint64_t src[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_long_shr");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint64_t), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint64_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  // Run random tests
-  for (int32_t i = 0; i < (int32_t) n; ++i)
-    src[i] = (uint64_t)1 << 63;
-  OCL_MAP_BUFFER(0);
-  memcpy(buf_data[0], src, sizeof(src));
-  OCL_UNMAP_BUFFER(0);
-
-  // Run the kernel on GPU
-  OCL_NDRANGE(1);
-
-  // Compare
-  OCL_MAP_BUFFER(1);
-  uint64_t *dest = ((uint64_t *)buf_data[1]);
-  for (int32_t i = 0; i < (int32_t) n; ++i)
-    if (i > 7)
-      OCL_ASSERT(dest[i] == src[i] >> i);
-    else
-      OCL_ASSERT(dest[i] == src[i] + 1);
-  OCL_UNMAP_BUFFER(2);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_long_shr);
diff --git a/utests/compiler_lower_return0.cpp b/utests/compiler_lower_return0.cpp
deleted file mode 100644
index 0e9dbd0..0000000
--- a/utests/compiler_lower_return0.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_lower_return0(void)
-{
-  const size_t n = 32;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_lower_return0");
-  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * n);
-  for (uint32_t i = 0; i < n; ++i) ((uint32_t*)buf_data[0])[i] = 2;
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t), buf_data[0]);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  free(buf_data[0]);
-  buf_data[0] = NULL;
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  // First control flow
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (int32_t i = 0; i < 32; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == i);
-
-  // Second control flow
-  for (uint32_t i = 0; i < n; ++i) ((int32_t*)buf_data[0])[i] = -2;
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < 32; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == -2);
-
-  // Third control flow
-  for (uint32_t i = 0; i < 8; ++i) ((int32_t*)buf_data[0])[i] = 2;
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (int32_t i = 0; i < 8; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == i);
-  for (int32_t i = 8; i < 32; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == -2);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_lower_return0);
-
-
diff --git a/utests/compiler_lower_return1.cpp b/utests/compiler_lower_return1.cpp
deleted file mode 100644
index b4f1fe3..0000000
--- a/utests/compiler_lower_return1.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_lower_return1(void)
-{
-  const size_t n = 32;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_lower_return1");
-  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * n);
-  for (uint32_t i = 0; i < n; ++i) ((uint32_t*)buf_data[0])[i] = 2;
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t), buf_data[0]);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  free(buf_data[0]);
-  buf_data[0] = NULL;
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = 16;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  // First control flow
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (int32_t i = 0; i < 11; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == i);
-  for (int32_t i = 11; i < 16; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 2);
-
-  // Second control flow
-  for (uint32_t i = 0; i < 4; ++i) ((int32_t*)buf_data[0])[i] = -2;
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (int32_t i = 0; i < 4; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == -2);
-  for (int32_t i = 4; i < 11; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == i);
-  for (int32_t i = 11; i < 16; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 2);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_lower_return1);
-
diff --git a/utests/compiler_lower_return2.cpp b/utests/compiler_lower_return2.cpp
deleted file mode 100644
index 1e34036..0000000
--- a/utests/compiler_lower_return2.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-#include "utest_helper.hpp"
-
-static void cpu(int global_id, int *src, int *dst) {
-  const int id = global_id;
-  dst[id] = id;
-  while (dst[id] > src[id]) {
-    if (dst[id] > 10) return;
-    dst[id]--;
-  }
-  dst[id] += 2;
-}
-
-static void compiler_lower_return2(void)
-{
-  const size_t n = 16;
-  int cpu_dst[16], cpu_src[16];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_lower_return2");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = 16;
-  locals[0] = 16;
-
-  for (uint32_t pass = 0; pass < 8; ++pass) {
-    OCL_MAP_BUFFER(0);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      cpu_src[i] = ((int32_t*)buf_data[0])[i] = rand() % 16;
-    OCL_UNMAP_BUFFER(0);
-
-    // Run the kernel on GPU
-    OCL_NDRANGE(1);
-
-    // Run on CPU
-    for (int32_t i = 0; i <(int32_t) n; ++i) cpu(i, cpu_src, cpu_dst);
-
-    // Compare
-    OCL_MAP_BUFFER(1);
-    for (int32_t i = 0; i < 11; ++i)
-      OCL_ASSERT(((int32_t*)buf_data[1])[i] == cpu_dst[i]);
-    OCL_UNMAP_BUFFER(1);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_lower_return2);
-
diff --git a/utests/compiler_mad24.cpp b/utests/compiler_mad24.cpp
deleted file mode 100644
index a3890a1..0000000
--- a/utests/compiler_mad24.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_mad24(void)
-{
-  const int n = 32;
-  int src1[n], src2[n], src3[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_mad24");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[3], 0, n * sizeof(int), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  OCL_SET_ARG(3, sizeof(cl_mem), &buf[3]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  OCL_MAP_BUFFER(2);
-  for (int i = 0; i < n; ++i) {
-    src1[i] = ((int*)buf_data[0])[i] = rand();
-    src2[i] = ((int*)buf_data[1])[i] = rand();
-    src3[i] = ((int*)buf_data[2])[i] = rand();
-  }
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-  OCL_UNMAP_BUFFER(2);
-
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(3);
-  for (int i = 0; i < n; ++i)
-    OCL_ASSERT(((int*)buf_data[3])[i] == ((src1[i] << 8) >> 8) * ((src2[i] << 8) >> 8) + src3[i]);
-  OCL_UNMAP_BUFFER(3);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_mad24);
diff --git a/utests/compiler_mad_hi.cpp b/utests/compiler_mad_hi.cpp
deleted file mode 100644
index 6f66e7f..0000000
--- a/utests/compiler_mad_hi.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_mad_hi(void)
-{
-  const int n = 32;
-  int src1[n], src2[n], src3[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_mad_hi");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[3], 0, n * sizeof(int), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  OCL_SET_ARG(3, sizeof(cl_mem), &buf[3]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  OCL_MAP_BUFFER(2);
-  for (int i = 0; i < n; ++i) {
-    src1[i] = ((int*)buf_data[0])[i] = rand();
-    src2[i] = ((int*)buf_data[1])[i] = rand();
-    src3[i] = ((int*)buf_data[2])[i] = rand();
-  }
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-  OCL_UNMAP_BUFFER(2);
-
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(3);
-  for (int i = 0; i < n; ++i) {
-    long long a = src1[i];
-    a *= src2[i];
-    a >>= 32;
-    a += src3[i];
-    OCL_ASSERT(((int*)buf_data[3])[i] == (int)a);
-  }
-  OCL_UNMAP_BUFFER(3);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_mad_hi);
diff --git a/utests/compiler_mandelbrot.cpp b/utests/compiler_mandelbrot.cpp
deleted file mode 100644
index 7758dae..0000000
--- a/utests/compiler_mandelbrot.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/* 
- * Copyright © 2012 Intel Corporation
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author: Benjamin Segovia <benjamin.segovia at intel.com>
- */
-
-#include "utest_helper.hpp"
-
-static int *dst = NULL;
-static const size_t w = 256;
-static const size_t h = 256;
-
-static void compiler_mandelbrot(void)
-{
-  const size_t global[2] = {w, h};
-  const size_t local[2] = {16, 1};
-  const size_t sz = w * h * sizeof(char[4]);
-
-  OCL_CREATE_KERNEL("compiler_mandelbrot");
-
-  OCL_CREATE_BUFFER(buf[0], 0, sz, NULL);
-  OCL_CALL (clSetKernelArg, kernel, 0, sizeof(cl_mem), &buf[0]);
-  OCL_CALL (clEnqueueNDRangeKernel, queue, kernel, 2, NULL, global, local, 0, NULL, NULL);
-  OCL_MAP_BUFFER(0);
-  dst = (int *) buf_data[0];
-
-  /* Save the image (for debug purpose) */
-  cl_write_bmp(dst, w, h, "compiler_mandelbrot.bmp");
-
-  /* Compare with the golden image */
-  OCL_CHECK_IMAGE(dst, w, h, "compiler_mandelbrot_ref.bmp");
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_mandelbrot);
-
diff --git a/utests/compiler_mandelbrot_alternate.cpp b/utests/compiler_mandelbrot_alternate.cpp
deleted file mode 100644
index 2e5d59f..0000000
--- a/utests/compiler_mandelbrot_alternate.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 
- * Copyright © 2012 Intel Corporation
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author: Benjamin Segovia <benjamin.segovia at intel.com>
- */
-
-#include "utest_helper.hpp"
-
-static int *dst = NULL;
-static const size_t w = 256;
-static const size_t h = 256;
-static const float criterium = 4.f;
-
-static void compiler_mandelbrot_alternate(void)
-{
-  const size_t global[2] = {w, h};
-  const size_t local[2] = {16, 1};
-  const size_t sz = w * h * sizeof(char[4]);
-  const float rcpWidth = 1.f / float(w);
-  const float rcpHeight = 1.f / float(h);
-
-  OCL_CREATE_KERNEL("compiler_mandelbrot_alternate");
-
-  OCL_CREATE_BUFFER(buf[0], 0, sz, NULL);
-  OCL_CALL (clSetKernelArg, kernel, 0, sizeof(cl_mem), &buf[0]);
-  OCL_CALL (clSetKernelArg, kernel, 1, sizeof(float), &rcpWidth);
-  OCL_CALL (clSetKernelArg, kernel, 2, sizeof(float), &rcpHeight);
-  OCL_CALL (clSetKernelArg, kernel, 3, sizeof(float), &criterium);
-  OCL_CALL (clEnqueueNDRangeKernel, queue, kernel, 2, NULL, global, local, 0, NULL, NULL);
-  OCL_MAP_BUFFER(0);
-  dst = (int *) buf_data[0];
-
-  /* Save the image (for debug purpose) */
-  cl_write_bmp(dst, w, h, "compiler_mandelbrot_alternate.bmp");
-
-  /* Compare with the golden image */
-  OCL_CHECK_IMAGE(dst, w, h, "compiler_mandelbrot_alternate_ref.bmp");
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_mandelbrot_alternate);
-
diff --git a/utests/compiler_math.cpp b/utests/compiler_math.cpp
deleted file mode 100644
index e0c4487..0000000
--- a/utests/compiler_math.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-#include "utest_helper.hpp"
-#include <cmath>
-#include <algorithm>
-
-static void cpu_compiler_math(float *dst, float *src, int i)
-{
-  const float x = src[i];
-  const float PI = 3.141592653589793f;
-  switch (i) {
-    case 0: dst[i] = cosf(x); break;
-    case 1: dst[i] = sinf(x); break;
-    case 2: dst[i] = log2f(x); break;
-    case 3: dst[i] = sqrtf(x); break;
-    case 4: dst[i] = 1.f/ sqrtf(x); break;
-    case 5: dst[i] = 1.f / x; break;
-    case 6: dst[i] = tanf(x); break;
-    case 7: dst[i] = powf(x, 0.3333333333333333333f); break;
-    case 8: dst[i] = ceilf(x); break;
-    case 9: dst[i] = cosf(PI * x); break;
-    case 10: dst[i] = powf(2, x); break;
-    case 11: dst[i] = powf(10, x); break;
-    case 12: dst[i] = expf(x) - 1; break;
-    case 13: dst[i] = logf(x + 1); break;
-    case 14: dst[i] = floorf(log2f(x)); break;
-    case 15: dst[i] = sinf(PI * x); break;
-    case 16: dst[i] = tanf(PI * x); break;
-    case 17: dst[i] = 2 * roundf(x / 2); break;
-    case 18: dst[i] = sinhf(x); break;
-    case 19: dst[i] = coshf(x); break;
-    case 20: dst[i] = tanhf(x); break;
-    case 21: dst[i] = asinhf(x); break;
-    case 22: dst[i] = acoshf(x); break;
-    case 23: dst[i] = atanhf(x); break;
-    case 24: dst[i] = asinf(x); break;
-    case 25: dst[i] = acosf(x); break;
-    case 26: dst[i] = atanf(x); break;
-    case 27: dst[i] = asinf(x) / PI; break;
-    case 28: dst[i] = acosf(x) / PI; break;
-    case 29: dst[i] = atanf(x) / PI; break;
-    case 30: dst[i] = erff(x); break;
-    case 31: dst[i] = nanf(""); break;
-    default: dst[i] = 1.f; break;
-  };
-}
-
-static void compiler_math(void)
-{
-  const size_t n = 32;
-  float cpu_dst[32], cpu_src[32];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_math");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = 16;
-  locals[0] = 16;
-
-  int j;
-  for(j = 0; j < 1000; j ++) {
-    OCL_MAP_BUFFER(1);
-    for (uint32_t i = 0; i < 32; ++i)
-      cpu_src[i] = ((float*)buf_data[1])[i] = .1f * (rand() & 15);
-    OCL_UNMAP_BUFFER(1);
-    OCL_NDRANGE(1);
-
-    OCL_MAP_BUFFER(0);
-    OCL_MAP_BUFFER(1);
-    for (int i = 0; i < 16; ++i)
-      cpu_compiler_math(cpu_dst, cpu_src, i);
-    for (int i = 0; i < 16; ++i) {
-      const float cpu = cpu_dst[i];
-      const float gpu = ((float*)buf_data[0])[i];
-      if (isinf(cpu))
-        OCL_ASSERT(isinf(gpu));
-      else if (isnan(cpu))
-        OCL_ASSERT(isnan(gpu));
-      else
-        OCL_ASSERT(fabs(gpu-cpu) < 1e-3f);
-    }
-    OCL_UNMAP_BUFFER(0);
-    OCL_UNMAP_BUFFER(1);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_math)
-
-
diff --git a/utests/compiler_math_2op.cpp b/utests/compiler_math_2op.cpp
deleted file mode 100644
index 454967d..0000000
--- a/utests/compiler_math_2op.cpp
+++ /dev/null
@@ -1,80 +0,0 @@
-#include "utest_helper.hpp"
-#include <cmath>
-#include <algorithm>
-
-static float rnde(float v) {
-  if(v - floorf(v) > 0.5f)
-    return floorf(v) + 1;
-  if(v - floorf(v) < 0.5f)
-    return floorf(v);
-  if((int)(floorf(v)) & 1)
-    return floorf(v) + 1;
-  return floorf(v);
-}
-
-static void cpu_compiler_math(float *dst, float *src1, float *src2, int i)
-{
-  const float x = src1[i], y = src2[i];
-  switch (i) {
-    case 0: dst[i] = x / y; break;
-    case 1: dst[i] = x > y ? x - y : 0; break;
-    case 2: dst[i] = fminf(x - floorf(x), 0x1.FFFFFep-1F); break;
-    case 3: dst[i] = sqrtf(x*x + y*y); break;
-    case 4: dst[i] = x * powf(2, (int)y); break;
-    case 5: dst[i] = powf(x, (int)y); break;
-    case 6: dst[i] = x - rnde(x/y)*y; break;
-    case 7: dst[i] = powf(x, 1.f/(int)(y+1)); break;
-    case 8: dst[i] = x * y < 0 ? -x : x; break;
-    case 9: dst[i] = fabsf(x) > fabsf(y) ? x : fabsf(y) > fabsf(x) ? y : fmaxf(x, y); break;
-    case 10: dst[i] = fabsf(x) < fabsf(y) ? x : fabsf(y) < fabsf(x) ? y : fminf(x, y); break;
-    default: dst[i] = 1.f; break;
-  };
-}
-
-static void compiler_math_2op(void)
-{
-  const size_t n = 32;
-  float cpu_dst[32], cpu_src1[32], cpu_src2[32];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_math_2op");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(float), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  globals[0] = 16;
-  locals[0] = 16;
-
-  int j;
-  for(j = 0; j < 1000; j ++) {
-    OCL_MAP_BUFFER(1);
-    OCL_MAP_BUFFER(2);
-    for (uint32_t i = 0; i < 32; ++i) {
-      cpu_src1[i] = ((float*)buf_data[1])[i] = .1f * (rand() & 15);
-      cpu_src2[i] = ((float*)buf_data[2])[i] = .1f * (rand() & 15);
-    }
-    OCL_UNMAP_BUFFER(1);
-    OCL_UNMAP_BUFFER(2);
-    OCL_NDRANGE(1);
-
-    for (int i = 0; i < 16; ++i)
-      cpu_compiler_math(cpu_dst, cpu_src1, cpu_src2, i);
-    OCL_MAP_BUFFER(0);
-    for (int i = 0; i < 16; ++i) {
-      const float cpu = cpu_dst[i];
-      const float gpu = ((float*)buf_data[0])[i];
-      if (isinf(cpu))
-        OCL_ASSERT(isinf(gpu));
-      else if (isnan(cpu))
-        OCL_ASSERT(isnan(gpu));
-      else {
-        OCL_ASSERT(fabs(gpu-cpu) < 1e-3f);
-      }
-    }
-    OCL_UNMAP_BUFFER(0);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_math_2op)
diff --git a/utests/compiler_math_3op.cpp b/utests/compiler_math_3op.cpp
deleted file mode 100644
index a382b0a..0000000
--- a/utests/compiler_math_3op.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-#include "utest_helper.hpp"
-#include <cmath>
-#include <algorithm>
-
-static void cpu_compiler_math(float *dst, float *src1, float *src2, float *src3, int i)
-{
-  const float x = src1[i], y = src2[i], z = src3[i];
-  switch (i) {
-    case 0: dst[i] = x * y + z; break;
-    case 1: dst[i] = x * y + z; break;
-    default: dst[i] = 1.f; break;
-  };
-}
-
-static void compiler_math_3op(void)
-{
-  const size_t n = 32;
-  float cpu_dst[32], cpu_src1[32], cpu_src2[32], cpu_src3[32];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_math_3op");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[3], 0, n * sizeof(float), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  OCL_SET_ARG(3, sizeof(cl_mem), &buf[3]);
-  globals[0] = 16;
-  locals[0] = 16;
-
-  for (int j = 0; j < 1000; j ++) {
-    OCL_MAP_BUFFER(1);
-    OCL_MAP_BUFFER(2);
-    OCL_MAP_BUFFER(3);
-    for (uint32_t i = 0; i < 32; ++i) {
-      cpu_src1[i] = ((float*)buf_data[1])[i] = .1f * (rand() & 15);
-      cpu_src2[i] = ((float*)buf_data[2])[i] = .1f * (rand() & 15);
-      cpu_src3[i] = ((float*)buf_data[3])[i] = .1f * (rand() & 15);
-    }
-    OCL_UNMAP_BUFFER(1);
-    OCL_UNMAP_BUFFER(2);
-    OCL_UNMAP_BUFFER(3);
-    OCL_NDRANGE(1);
-
-    for (int i = 0; i < 16; ++i)
-      cpu_compiler_math(cpu_dst, cpu_src1, cpu_src2, cpu_src3, i);
-    OCL_MAP_BUFFER(0);
-    for (int i = 0; i < 16; ++i) {
-      const float cpu = cpu_dst[i];
-      const float gpu = ((float*)buf_data[0])[i];
-      if (isinf(cpu))
-        OCL_ASSERT(isinf(gpu));
-      else if (isnan(cpu))
-        OCL_ASSERT(isnan(gpu));
-      else
-        OCL_ASSERT(fabs(gpu-cpu) < 1e-3f);
-    }
-    OCL_UNMAP_BUFFER(0);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_math_3op)
diff --git a/utests/compiler_math_builtin.cpp b/utests/compiler_math_builtin.cpp
deleted file mode 100644
index 0577e04..0000000
--- a/utests/compiler_math_builtin.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_math_builtin(void)
-{
-  OCL_CREATE_KERNEL("compiler_math_builtin");
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_math_builtin);
-
diff --git a/utests/compiler_math_constants.cpp b/utests/compiler_math_constants.cpp
deleted file mode 100644
index 5ec97c9..0000000
--- a/utests/compiler_math_constants.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_math_constants(void)
-{
-  OCL_CREATE_KERNEL("compiler_math_constants");
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_math_constants);
-
diff --git a/utests/compiler_mem_fence.cpp b/utests/compiler_mem_fence.cpp
deleted file mode 100644
index ad7e2f6..0000000
--- a/utests/compiler_mem_fence.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-/* test OpenCL 1.1 Synchronization, explicit memory fence (section 6.11.9, 6.11.10) */
-#include "utest_helper.hpp"
-
-void compiler_mem_fence(void)
-{
-  OCL_CREATE_KERNEL("compiler_mem_fence");
-  OCL_NDRANGE(1);
-}
-
diff --git a/utests/compiler_movforphi_undef.cpp b/utests/compiler_movforphi_undef.cpp
deleted file mode 100644
index 50526e8..0000000
--- a/utests/compiler_movforphi_undef.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_movforphi_undef(void)
-{
-  const size_t w = 16;
-  const size_t h = 16;
-  cl_sampler sampler;
-  cl_image_format format;
-
-  // Setup kernel and images
-  OCL_CREATE_KERNEL("test_movforphi_undef");
-  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * w * h);
-  for (uint32_t j = 0; j < h; ++j)
-    for (uint32_t i = 0; i < w; i++)
-      ((uint32_t*)buf_data[0])[j * w + i] = j * w + i;
-
-  format.image_channel_order = CL_RGBA;
-  format.image_channel_data_type = CL_UNSIGNED_INT8;
-  OCL_CREATE_IMAGE2D(buf[0], CL_MEM_COPY_HOST_PTR, &format, w, h, w * sizeof(uint32_t), buf_data[0]);
-
-  OCL_CREATE_IMAGE2D(buf[1], 0, &format, w, h, 0, NULL);
-  OCL_CREATE_SAMPLER(sampler, CL_ADDRESS_REPEAT, CL_FILTER_NEAREST);
-  free(buf_data[0]);
-  buf_data[0] = NULL;
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(sampler), &sampler);
-  globals[0] = w;
-  globals[1] = h;
-  locals[0] = 16;
-  locals[1] = 16;
-  OCL_NDRANGE(2);
-
-  // Check result
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  // Just compare the initial 2 data is enough for this case, as the initial 2 data must in the first
-  // tile box and we can just get the correct coords.
-  for (uint32_t j = 0; j < 1; ++j)
-    for (uint32_t i = 0; i < 3; i++)
-    {
-      if (i == 0)
-        OCL_ASSERT(((uint32_t*)buf_data[0])[j * w + i + 1] == ((uint32_t*)buf_data[1])[j * w + i]);
-    }
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_movforphi_undef);
diff --git a/utests/compiler_mul24.cpp b/utests/compiler_mul24.cpp
deleted file mode 100644
index 8a36947..0000000
--- a/utests/compiler_mul24.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_mul24(void)
-{
-  const int n = 32;
-  int src1[n], src2[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_mul24");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (int i = 0; i < n; ++i) {
-    src1[i] = ((int*)buf_data[0])[i] = rand();
-    src2[i] = ((int*)buf_data[1])[i] = rand();
-  }
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(2);
-  for (int i = 0; i < n; ++i)
-    OCL_ASSERT(((int*)buf_data[2])[i] == ((src1[i] << 8) >> 8) * ((src2[i] << 8) >> 8));
-  OCL_UNMAP_BUFFER(2);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_mul24);
diff --git a/utests/compiler_mul_hi.cpp b/utests/compiler_mul_hi.cpp
deleted file mode 100644
index 5ea6389..0000000
--- a/utests/compiler_mul_hi.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_mul_hi(void)
-{
-  const int n = 32;
-  int src1[n], src2[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_mul_hi");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (int i = 0; i < n; ++i) {
-    src1[i] = ((int*)buf_data[0])[i] = rand();
-    src2[i] = ((int*)buf_data[1])[i] = rand();
-  }
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(2);
-  for (int i = 0; i < n; ++i) {
-    long long a = src1[i];
-    a *= src2[i];
-    a >>= 32;
-    OCL_ASSERT(((int*)buf_data[2])[i] == (int)a);
-  }
-  OCL_UNMAP_BUFFER(2);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_mul_hi);
diff --git a/utests/compiler_multiple_kernels.cpp b/utests/compiler_multiple_kernels.cpp
deleted file mode 100644
index 09b4349..0000000
--- a/utests/compiler_multiple_kernels.cpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_multiple_kernels(void)
-{
-	OCL_CREATE_KERNEL_FROM_FILE("compiler_multiple_kernels", "first_kernel");
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_multiple_kernels);
\ No newline at end of file
diff --git a/utests/compiler_preprocessor_macros.cpp b/utests/compiler_preprocessor_macros.cpp
deleted file mode 100644
index 3cd0272..0000000
--- a/utests/compiler_preprocessor_macros.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_preprocessor_macros(void)
-{
-  OCL_CREATE_KERNEL("compiler_preprocessor_macros");
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_preprocessor_macros);
-
diff --git a/utests/compiler_private_data_overflow.cpp b/utests/compiler_private_data_overflow.cpp
deleted file mode 100644
index 0fa30a0..0000000
--- a/utests/compiler_private_data_overflow.cpp
+++ /dev/null
@@ -1,15 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_private_data_overflow(void)
-{
-	OCL_CREATE_KERNEL( "compiler_private_data_overflow" );
-	OCL_CREATE_BUFFER( buf[0], 0, sizeof(cl_int4), NULL );
-	OCL_SET_ARG( 0, sizeof(cl_mem), &buf[0] );
-	globals[0] = 64;
-	locals[0] = 32;
-	OCL_NDRANGE(1);
-	OCL_MAP_BUFFER(0);
-	OCL_ASSERT( ((uint32_t *)buf_data[0])[0] == 0 );
-	OCL_UNMAP_BUFFER(0);
-}
-MAKE_UTEST_FROM_FUNCTION( compiler_private_data_overflow );
diff --git a/utests/compiler_program_objects.cpp b/utests/compiler_program_objects.cpp
deleted file mode 100644
index 34ae42a..0000000
--- a/utests/compiler_program_objects.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/* test OpenCL 1.1 Program Objects (section 5.6)
- * test creating program objects,
- *      build program executable,
- *      build options
- *      query program objects */
-
-#include "utest_helper.hpp"
-
-void compiler_program_objects(void)
-{
-    OCL_CREATE_KERNEL("empty"); // set up global vars
-    OCL_CALL(clRetainProgram, program);
-    OCL_CALL(clReleaseProgram, program);
-    OCL_CALL(clBuildProgram,
-                 program,
-                 1,
-                 &device,
-                 "-Dname -Dname2=def -ldir "
-                 "-cl-opt-disable -cl-strict-aliasing -cl-mad-enable -cl-no-signed-zeros "
-                 "-cl-finite-math-only -cl-fast-relaxed-math -cl-unsafe-math-optimizations "
-                 "-cl-single-precision-constant -cl-denorms-are-zero "
-                 "-w -Werror -cl-std=CL1.1",
-                 NULL,
-                 NULL);
-    const int pi[] = {CL_PROGRAM_REFERENCE_COUNT,
-                      CL_PROGRAM_CONTEXT,
-                      CL_PROGRAM_NUM_DEVICES,
-                      CL_PROGRAM_DEVICES,
-                      CL_PROGRAM_SOURCE,
-                      CL_PROGRAM_BINARY_SIZES,
-                      CL_PROGRAM_BINARIES,};
-    const int pbi[] = {CL_PROGRAM_BUILD_STATUS,
-                       CL_PROGRAM_BUILD_OPTIONS,
-                       CL_PROGRAM_BUILD_LOG,};
-    char param_value[1024];
-    size_t pv_size;
-    int i;
-    for(i=0; i<sizeof(pi) / sizeof(pi[0]); i++)
-        OCL_CALL(clGetProgramInfo,
-                      program,
-                      pi[i],
-                      sizeof(param_value),
-                      param_value,
-                      &pv_size);
-    for(i=0; i<sizeof(pbi) / sizeof(pbi[0]); i++)
-        OCL_CALL(clGetProgramBuildInfo,
-                      program,
-                      device,
-                      pbi[i],
-                      sizeof(param_value),
-                      param_value,
-                      &pv_size);
-    std::cout<<platform<<' '
-             <<device<<' '
-             <<ctx<<' '
-             <<program<<' '
-             <<kernel<<' '
-             <<queue<<std::endl;
-
-    puts("Test clUnloadCompiler");
-    OCL_CALL(clUnloadCompiler);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_program_objects);
diff --git a/utests/compiler_radians.cpp b/utests/compiler_radians.cpp
deleted file mode 100644
index 882477e..0000000
--- a/utests/compiler_radians.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_radians(void)
-{
-  const int n = 32;
-  float src[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_radians");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  OCL_MAP_BUFFER(0);
-  for (int i = 0; i < n; ++i) {
-    src[i] = ((float *)buf_data[0])[i] = rand() * 0.01f;
-  }
-  OCL_UNMAP_BUFFER(0);
-
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(1);
-  for (int i = 0; i < n; ++i) {
-    OCL_ASSERT(((float *)buf_data[1])[i] == src[i] * (3.141592653589793F / 180));
-  }
-  OCL_UNMAP_BUFFER(1);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_radians);
diff --git a/utests/compiler_relational_builtin.cpp b/utests/compiler_relational_builtin.cpp
deleted file mode 100644
index a9a6eb5..0000000
--- a/utests/compiler_relational_builtin.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_relational_builtin(void)
-{
-  OCL_CREATE_KERNEL("compiler_relational_builtin");
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_relational_builtin);
-
diff --git a/utests/compiler_rhadd.cpp b/utests/compiler_rhadd.cpp
deleted file mode 100644
index b25c788..0000000
--- a/utests/compiler_rhadd.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_rhadd(void)
-{
-  const int n = 32;
-  int src1[n], src2[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_rhadd");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (int i = 0; i < n; ++i) {
-    src1[i] = ((int*)buf_data[0])[i] = rand();
-    src2[i] = ((int*)buf_data[1])[i] = rand();
-  }
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(2);
-  for (int i = 0; i < n; ++i) {
-    long long a = src1[i];
-    a += src2[i];
-    a ++;
-    a >>= 1;
-    OCL_ASSERT(((int*)buf_data[2])[i] == (int)a);
-  }
-  OCL_UNMAP_BUFFER(2);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_rhadd);
diff --git a/utests/compiler_rotate.cpp b/utests/compiler_rotate.cpp
deleted file mode 100644
index bf52ca4..0000000
--- a/utests/compiler_rotate.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "utest_helper.hpp"
-
-int cpu(int src, int y) {
-  return (src << y) | (src >> (32 - y));
-}
-
-void compiler_rotate(void)
-{
-  const int n = 32;
-  int src[n], y[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_rotate");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(2);
-  for (int i = 0; i < n; ++i) {
-    src[i] = ((int*)buf_data[0])[i] = rand();
-    y[i] = ((int*)buf_data[2])[i] = rand() & 31;
-  }
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(2);
-
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(1);
-  for (int i = 0; i < n; ++i)
-    OCL_ASSERT(((int*)buf_data[1])[i] == cpu(src[i], y[i]));
-  OCL_UNMAP_BUFFER(1);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_rotate);
diff --git a/utests/compiler_sampler.cpp b/utests/compiler_sampler.cpp
deleted file mode 100644
index 32bf926..0000000
--- a/utests/compiler_sampler.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* test OpenCL 1.1 Sampler Objects (section 5.5) */
-#include "utest_helper.hpp"
-
-void compiler_sampler(void)
-{
-  OCL_CREATE_KERNEL("compiler_sampler");
-
-  OCL_ASSERT(ctx != 0);
-  cl_sampler s;
-  cl_int err;
-  int a1[] = {CL_TRUE, CL_FALSE},
-      a2[] = {CL_ADDRESS_MIRRORED_REPEAT,
-              CL_ADDRESS_REPEAT,
-              CL_ADDRESS_CLAMP_TO_EDGE,
-              CL_ADDRESS_CLAMP,
-              CL_ADDRESS_NONE},
-      a3[] = {CL_FILTER_NEAREST, CL_FILTER_LINEAR},
-      a4[] = {CL_SAMPLER_REFERENCE_COUNT,
-              CL_SAMPLER_CONTEXT,
-              CL_SAMPLER_NORMALIZED_COORDS,
-              CL_SAMPLER_ADDRESSING_MODE,
-              CL_SAMPLER_FILTER_MODE};
-  char pv[1000];
-  size_t pv_size;
-  int i, j, k, l;
-  for(i=0; i<2; i++)
-    for(j=0; j<5; j++)
-      for(k=0; k<2; k++) {
-        s = clCreateSampler(ctx, a1[i], a2[j], a3[k], &err);
-        OCL_ASSERT(err == CL_SUCCESS);
-        OCL_CALL(clRetainSampler, s);
-        OCL_CALL(clReleaseSampler, s);
-        for(l=0; l<5; l++)
-          OCL_CALL(clGetSamplerInfo, s, a4[l], 1000, pv, &pv_size);
-        OCL_CALL(clReleaseSampler, s);
-      }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_sampler);
-
-
diff --git a/utests/compiler_saturate.cpp b/utests/compiler_saturate.cpp
deleted file mode 100644
index 6880df0..0000000
--- a/utests/compiler_saturate.cpp
+++ /dev/null
@@ -1,114 +0,0 @@
-#include "utest_helper.hpp"
-
-namespace {
-
-constexpr int n = 16;
-
-// declaration only, we should create each template specification for each type.
-template<typename T>
-T get_data(int idx, int part);
-
-/* the format of test data is as follows:
- *   the first column is A
- *   the second column is B
- *   the third column is the expected result.
- */
-
-#define DEF_TEMPLATE(TYPE, NAME)                                    \
-template <>                                                         \
-TYPE get_data<TYPE>(int idx, int part)                              \
-{                                                                   \
-  static TYPE test_data[n][3] = {                                   \
-    { 0, 0, 0 },                                                    \
-    { 0, 1, 1 },                                                    \
-    { 0, 2, 2 },                                                    \
-    { -1, 1, 0 },                                                   \
-    { 1, -2, -1 },                                                  \
-    { 0, 110, 110 },                                                \
-    { -10, -10, -20 },                                              \
-    { CL_##NAME##_MIN, CL_##NAME##_MIN, CL_##NAME##_MIN },          \
-    { CL_##NAME##_MIN, CL_##NAME##_MAX, -1 },                       \
-    { CL_##NAME##_MAX, 0, CL_##NAME##_MAX },                        \
-    { CL_##NAME##_MAX, 1, CL_##NAME##_MAX },                        \
-    { CL_##NAME##_MAX, 2, CL_##NAME##_MAX },                        \
-    { CL_##NAME##_MAX, CL_##NAME##_MAX, CL_##NAME##_MAX },          \
-    { CL_##NAME##_MAX/2, CL_##NAME##_MAX/2, CL_##NAME##_MAX-1 },    \
-    { CL_##NAME##_MAX/2, CL_##NAME##_MAX/2+1, CL_##NAME##_MAX },    \
-    { CL_##NAME##_MAX/2+1, CL_##NAME##_MAX/2+1, CL_##NAME##_MAX }   \
-  };                                                                \
-  return test_data[idx][part];                                      \
-}                                                                   \
-                                                                    \
-template <>                                                         \
-u##TYPE get_data<u##TYPE>(int idx, int part)                        \
-{                                                                   \
-  static u##TYPE test_data[n][3] = {                                \
-    { 0, 0, 0 },                                                    \
-    { CL_U##NAME##_MAX, 0, CL_U##NAME##_MAX },                      \
-    { CL_U##NAME##_MAX, 1, CL_U##NAME##_MAX },                      \
-    { CL_U##NAME##_MAX, 2, CL_U##NAME##_MAX },                      \
-    { CL_U##NAME##_MAX, CL_U##NAME##_MAX, CL_U##NAME##_MAX },       \
-    { CL_U##NAME##_MAX/2, CL_U##NAME##_MAX/2, CL_U##NAME##_MAX-1 }, \
-    { CL_U##NAME##_MAX/2, CL_U##NAME##_MAX/2+1, CL_U##NAME##_MAX }, \
-    { CL_U##NAME##_MAX/2+1, CL_U##NAME##_MAX/2+1, CL_U##NAME##_MAX }\
-  };                                                                \
-  return test_data[idx][part];                                      \
-}
-
-DEF_TEMPLATE(int8_t, CHAR)
-DEF_TEMPLATE(int16_t, SHRT)
-DEF_TEMPLATE(int32_t, INT)
-//DEF_TEMPLATE(int64_t, LONG)
-
-
-template<typename T>
-void test(const char *kernel_name)
-{
-  T C[n] = { 0 };
-  T A[n] = { 0 };
-  T B[n] = { 0 };
-
-  for (int i = 0; i < n; i++) {
-    A[i] = get_data<T>(i, 0);
-    B[i] = get_data<T>(i, 1);
-  }
-
-  OCL_CREATE_KERNEL_FROM_FILE("compiler_saturate", kernel_name);
-
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(T), &C[0]);
-  OCL_CREATE_BUFFER(buf[1], CL_MEM_COPY_HOST_PTR, n * sizeof(T), &A[0]);
-  OCL_CREATE_BUFFER(buf[2], CL_MEM_COPY_HOST_PTR, n * sizeof(T), &B[0]);
-
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-
-  globals[0] = n;
-  locals[0] = n;
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(0);
-
-  for (int i = 0; i < n; i++) {
-    OCL_ASSERT(((T*)buf_data[0])[i] == get_data<T>(i, 2));
-  }
-  OCL_UNMAP_BUFFER(0);
-}
-
-}
-
-#define compiler_saturate(type, kernel) \
-static void compiler_saturate_ ##type(void)\
-{\
-  test<type>(# kernel);\
-}\
-MAKE_UTEST_FROM_FUNCTION(compiler_saturate_ ## type);
-
-compiler_saturate(int8_t, test_char)
-compiler_saturate(uint8_t, test_uchar)
-compiler_saturate(int16_t, test_short)
-compiler_saturate(uint16_t, test_ushort)
-compiler_saturate(int32_t, test_int)
-compiler_saturate(uint32_t, test_uint)
-//compiler_saturate(int64_t, test_long)
-//compiler_saturate(uint64_t, test_ulong)
diff --git a/utests/compiler_saturate_sub.cpp b/utests/compiler_saturate_sub.cpp
deleted file mode 100644
index 48947b7..0000000
--- a/utests/compiler_saturate_sub.cpp
+++ /dev/null
@@ -1,114 +0,0 @@
-#include "utest_helper.hpp"
-
-namespace {
-
-constexpr int n = 16;
-
-// declaration only, we should create each template specification for each type.
-template<typename T>
-T get_data(int idx, int part);
-
-/* the format of test data is as follows:
- *   the first column is A
- *   the second column is B
- *   the third column is the expected result.
- */
-
-#define DEF_TEMPLATE(TYPE, NAME)                                    \
-template <>                                                         \
-TYPE get_data<TYPE>(int idx, int part)                              \
-{                                                                   \
-  static TYPE test_data[n][3] = {                                   \
-    { 0, 0, 0 },                                                    \
-    { 0, 1, -1 },                                                   \
-    { CL_##NAME##_MIN, CL_##NAME##_MIN, 0 },                        \
-    { CL_##NAME##_MAX, CL_##NAME##_MAX, 0 },                        \
-    { -2, CL_##NAME##_MIN, CL_##NAME##_MAX-1 },                     \
-    { -1, CL_##NAME##_MIN, CL_##NAME##_MAX },                       \
-    { 0, CL_##NAME##_MIN, CL_##NAME##_MAX },                        \
-    { 1, CL_##NAME##_MIN, CL_##NAME##_MAX },                        \
-    { -2, CL_##NAME##_MAX, CL_##NAME##_MIN },                       \
-    { -1, CL_##NAME##_MAX, CL_##NAME##_MIN },                       \
-    { 0, CL_##NAME##_MAX, -CL_##NAME##_MAX },                       \
-    { 1, CL_##NAME##_MAX, -CL_##NAME##_MAX+1 },                     \
-    { CL_##NAME##_MIN, CL_##NAME##_MAX, CL_##NAME##_MIN },          \
-    { CL_##NAME##_MIN, 1, CL_##NAME##_MIN },                        \
-    { CL_##NAME##_MIN, -1, CL_##NAME##_MIN+1 },                     \
-    { CL_##NAME##_MAX, CL_##NAME##_MIN, CL_##NAME##_MAX },          \
-  };                                                                \
-  return test_data[idx][part];                                      \
-}                                                                   \
-                                                                    \
-template <>                                                         \
-u##TYPE get_data<u##TYPE>(int idx, int part)                        \
-{                                                                   \
-  static u##TYPE test_data[n][3] = {                                \
-    { 0, 0, 0 },                                                    \
-    { 0, 1, 0 },                                                    \
-    { 1, 1, 0 },                                                    \
-    { 1, 0, 1 },                                                    \
-    { CL_U##NAME##_MAX, CL_U##NAME##_MAX, 0 },                      \
-    { 0, CL_U##NAME##_MAX, 0 },                                     \
-    { 1, CL_U##NAME##_MAX, 0 },                                     \
-    { CL_U##NAME##_MAX, 0, CL_U##NAME##_MAX },                      \
-  };                                                                \
-  return test_data[idx][part];                                      \
-}
-
-DEF_TEMPLATE(int8_t, CHAR)
-DEF_TEMPLATE(int16_t, SHRT)
-DEF_TEMPLATE(int32_t, INT)
-//DEF_TEMPLATE(int64_t, LONG)
-
-
-template<typename T>
-void test(const char *kernel_name)
-{
-  T C[n] = { 0 };
-  T A[n] = { 0 };
-  T B[n] = { 0 };
-
-  for (int i = 0; i < n; i++) {
-    A[i] = get_data<T>(i, 0);
-    B[i] = get_data<T>(i, 1);
-  }
-
-  OCL_CREATE_KERNEL_FROM_FILE("compiler_saturate_sub", kernel_name);
-
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(T), &C[0]);
-  OCL_CREATE_BUFFER(buf[1], CL_MEM_COPY_HOST_PTR, n * sizeof(T), &A[0]);
-  OCL_CREATE_BUFFER(buf[2], CL_MEM_COPY_HOST_PTR, n * sizeof(T), &B[0]);
-
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-
-  globals[0] = n;
-  locals[0] = n;
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(0);
-
-  for (int i = 0; i < n; i++) {
-    OCL_ASSERT(((T*)buf_data[0])[i] == get_data<T>(i, 2));
-  }
-  OCL_UNMAP_BUFFER(0);
-}
-
-}
-
-#define compiler_saturate_sub(type, kernel) \
-static void compiler_saturate_sub_ ##type(void)\
-{\
-  test<type>(# kernel);\
-}\
-MAKE_UTEST_FROM_FUNCTION(compiler_saturate_sub_ ## type);
-
-compiler_saturate_sub(int8_t, test_char)
-compiler_saturate_sub(uint8_t, test_uchar)
-compiler_saturate_sub(int16_t, test_short)
-compiler_saturate_sub(uint16_t, test_ushort)
-//compiler_saturate_sub(int32_t, test_int) // TODO due to the possible hardware bug, we disable this, uncomment it when it's done.
-compiler_saturate_sub(uint32_t, test_uint)
-//compiler_saturate_sub(int64_t, test_long)
-//compiler_saturate_sub(uint64_t, test_ulong)
diff --git a/utests/compiler_shader_toy.cpp b/utests/compiler_shader_toy.cpp
deleted file mode 100644
index 58bcc6f..0000000
--- a/utests/compiler_shader_toy.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-/* 
- * Copyright © 2012 Intel Corporation
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author: Benjamin Segovia <benjamin.segovia at intel.com>
- */
-
-/* This is a super simple wrapper for the OpenCL kernels I ported from GLSL code
- * taken in Inigo's web site:
- * http://www.iquilezles.org/apps/shadertoy/index.html
- *
- * They are pretty cool and rather complex kernels. Just the right thing to have
- * something a bit more complicated and interesting than unit tests.
- *
- * The code here is just to wrap the common code used by all the kernels (to run
- * the code and assert its correctness)
- */
-#include "utest_helper.hpp"
-
-static const int dim = 256;
-
-// tricky here 'name' stands for Kernel and Reference
-// 'file' stands for .cl file name and dst image name
-static void run_kernel(int w, int h, const char *file, const char *name)
-{
-  const size_t global[2] = {size_t(w), size_t(h)};
-  const size_t local[2] = {16, 1};
-  const size_t sz = w * h * sizeof(char[4]);
-  const float fx = float(w);
-  const float fy = float(h);
-  char kernel_file[256];
-  char dst_img[256];
-  char ref_img[256];
-
-  snprintf(kernel_file, sizeof(kernel_file), "%s.cl", file);
-  snprintf(dst_img, sizeof(dst_img), "%s.bmp", file);
-  snprintf(ref_img, sizeof(ref_img), "%s_ref.bmp", name);
-  OCL_CALL (cl_kernel_init, kernel_file, name, SOURCE, NULL);
-
-  OCL_CREATE_BUFFER(buf[0], 0, sz, NULL);
-  OCL_CALL (clSetKernelArg, kernel, 0, sizeof(cl_mem), &buf[0]);
-  OCL_CALL (clSetKernelArg, kernel, 1, sizeof(float), &fx);
-  OCL_CALL (clSetKernelArg, kernel, 2, sizeof(float), &fy);
-  OCL_CALL (clSetKernelArg, kernel, 3, sizeof(int), &w);
-  OCL_CALL (clEnqueueNDRangeKernel, queue, kernel, 2, NULL, global, local, 0, NULL, NULL);
-  OCL_MAP_BUFFER(0);
-  int *dst = (int*) buf_data[0];
-
-  /* Save the image (for debug purpose) */
-  cl_write_bmp(dst, w, h, dst_img);
-
-  /* Compare with the golden image */
-  OCL_CHECK_IMAGE(dst, w, h, ref_img);
-}
-
-#define DECL_SHADER_TOY_TEST(W,H,FILE_NAME, KERNEL_NAME) \
-  static void FILE_NAME(void) { run_kernel(W,H,#FILE_NAME, #KERNEL_NAME); } \
-  MAKE_UTEST_FROM_FUNCTION(FILE_NAME);
-
-DECL_SHADER_TOY_TEST(dim,dim,compiler_clod,compiler_clod);
-DECL_SHADER_TOY_TEST(dim,dim,compiler_ribbon,compiler_ribbon);
-DECL_SHADER_TOY_TEST(dim,dim,compiler_nautilus,compiler_nautilus);
-DECL_SHADER_TOY_TEST(dim,dim,compiler_menger_sponge_no_shadow,compiler_menger_sponge_no_shadow);
-DECL_SHADER_TOY_TEST(dim,dim,compiler_julia,compiler_julia);
-DECL_SHADER_TOY_TEST(dim,dim,compiler_julia_no_break,compiler_julia_no_break);
-// test for function calls
-DECL_SHADER_TOY_TEST(dim,dim,compiler_clod_function_call,compiler_clod);
-DECL_SHADER_TOY_TEST(dim,dim,compiler_julia_function_call,compiler_julia);
-
-// Still issues here for LLVM 3.2
-// DECL_SHADER_TOY_TEST(dim,dim,compiler_chocolux,compiler_chocolux);
-// DECL_SHADER_TOY_TEST(dim,dim,compiler_menger_sponge,compiler_menger_sponge);
-
-#undef DECL_SHADER_TOY_TEST
-
diff --git a/utests/compiler_shift_right.cpp b/utests/compiler_shift_right.cpp
deleted file mode 100644
index b94cc46..0000000
--- a/utests/compiler_shift_right.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-#include "utest_helper.hpp"
-
-typedef unsigned int uint;
-
-static void cpu(int global_id, uint *src, int *dst) {
-  dst[global_id] = src[global_id] >> 24;
-}
-
-void compiler_shift_right(void)
-{
-  const size_t n = 16;
-  uint cpu_src[16];
-  int cpu_dst[16];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_shift_right");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = 16;
-  locals[0] = 16;
-
-  // Run random tests
-  for (uint32_t pass = 0; pass < 8; ++pass) {
-    OCL_MAP_BUFFER(0);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      cpu_src[i] = ((uint*)buf_data[0])[i] = 0x80000000 | rand();
-    OCL_UNMAP_BUFFER(0);
-
-    // Run the kernel on GPU
-    OCL_NDRANGE(1);
-
-    // Run on CPU
-    for (int32_t i = 0; i < (int32_t) n; ++i) cpu(i, cpu_src, cpu_dst);
-
-    // Compare
-    OCL_MAP_BUFFER(1);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-      OCL_ASSERT(((int *)buf_data[1])[i] == cpu_dst[i]);
-    OCL_UNMAP_BUFFER(1);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_shift_right);
diff --git a/utests/compiler_short_scatter.cpp b/utests/compiler_short_scatter.cpp
deleted file mode 100644
index 1746744..0000000
--- a/utests/compiler_short_scatter.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_short_scatter(void)
-{
-  const size_t n = 128;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_short_scatter");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int16_t), NULL);
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  // Check result
-  OCL_MAP_BUFFER(0);
-  for (int32_t i = 0; i < (int32_t) n; ++i)
-    OCL_ASSERT(((int16_t*)buf_data[0])[i] == (int16_t) i);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_short_scatter);
-
-
diff --git a/utests/compiler_smoothstep.cpp b/utests/compiler_smoothstep.cpp
deleted file mode 100644
index 363ea7e..0000000
--- a/utests/compiler_smoothstep.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-#include <cmath>
-#include "utest_helper.hpp"
-
-float cpu(float e0, float e1, float x)
-{
-  x = (x - e0) / (e1 - e0);
-  if (x >= 1)
-    x = 1.f;
-  if (x <= 0)
-    x = 0.f;
-  return x * x * (3 - 2 * x);
-}
-
-void compiler_smoothstep(void)
-{
-  const int n = 32;
-  float src1[n], src2[n], src3[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_smoothstep");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(float), NULL);
-  OCL_CREATE_BUFFER(buf[3], 0, n * sizeof(float), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  OCL_SET_ARG(3, sizeof(cl_mem), &buf[3]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  OCL_MAP_BUFFER(2);
-  for (int i = 0; i < n; ++i) {
-    float a = 0.1f * (rand() & 15) - 0.75f;
-    float b = a + 0.1f * (rand() & 15) + 0.1f;
-    float c = 0.1f * (rand() & 15) - 0.75f;
-    src1[i] = ((float*)buf_data[0])[i] = a;
-    src2[i] = ((float*)buf_data[1])[i] = b;
-    src3[i] = ((float*)buf_data[2])[i] = c;
-  }
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-  OCL_UNMAP_BUFFER(2);
-
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(3);
-  for (int i = 0; i < n; ++i) {
-    float a = ((float*)buf_data[3])[i];
-    float b = cpu(src1[i], src2[i], src3[i]);
-    OCL_ASSERT(fabsf(a - b) < 1e-4f);
-  }
-  OCL_UNMAP_BUFFER(3);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_smoothstep);
diff --git a/utests/compiler_step.cpp b/utests/compiler_step.cpp
deleted file mode 100644
index b022826..0000000
--- a/utests/compiler_step.cpp
+++ /dev/null
@@ -1,342 +0,0 @@
-#include "utest_helper.hpp"
-#include "string.h"
-
-template <typename T, int N>
-struct cl_vec {
-    T ptr[((N+1)/2)*2]; //align to 2 elements.
-
-    typedef cl_vec<T, N> vec_type;
-
-    cl_vec(void) {
-        memset(ptr, 0, sizeof(T) * ((N+1)/2)*2);
-    }
-    cl_vec(vec_type & other) {
-        memset(ptr, 0, sizeof(T) * ((N+1)/2)*2);
-        memcpy (this->ptr, other.ptr, sizeof(T) * N);
-    }
-
-    vec_type& operator= (vec_type & other) {
-        memset(ptr, 0, sizeof(T) * ((N+1)/2)*2);
-        memcpy (this->ptr, other.ptr, sizeof(T) * N);
-        return *this;
-    }
-
-    template <typename U> vec_type& operator= (cl_vec<U, N> & other) {
-        memset(ptr, 0, sizeof(T) * ((N+1)/2)*2);
-        memcpy (this->ptr, other.ptr, sizeof(T) * N);
-        return *this;
-    }
-
-    bool operator== (vec_type & other) {
-        return !memcmp (this->ptr, other.ptr, sizeof(T) * N);
-    }
-
-    void step (vec_type & other) {
-        int i = 0;
-        for (; i < N; i++) {
-            T a = ptr[i];
-            T edge = other.ptr[i];
-            T f = a < edge ? 0.0 : 1.0;
-            ptr[i] = f;
-        }
-    }
-
-    void step (float & edge) {
-        int i = 0;
-        for (; i < N; i++) {
-            T a = ptr[i];
-            T f = a < edge ? 0.0 : 1.0;
-            ptr[i] = f;
-        }
-    }
-};
-
-template <typename T, typename U, int N> static void cpu (int global_id,
-        cl_vec<T, N> *edge, cl_vec<T, N> *src, cl_vec<U, N> *dst)
-{
-    cl_vec<T, N> v  = src[global_id];
-    v.step(edge[global_id]);
-    dst[global_id] = v;
-}
-
-template <typename T, typename U> static void cpu(int global_id, T *edge, T *src, U *dst)
-{
-    T f = src[global_id];
-    T e = edge[global_id];
-    f = f < e ? 0.0 : 1.0;
-    dst[global_id] = (U)f;
-}
-
-template <typename T, typename U, int N> static void cpu (int global_id,
-        float edge, cl_vec<T, N> *src, cl_vec<U, N> *dst)
-{
-    cl_vec<T, N> v  = src[global_id];
-    v.step(edge);
-    dst[global_id] = v;
-}
-
-template <typename T, typename U> static void cpu(int global_id, float edge, T *src, U *dst)
-{
-    T f = src[global_id];
-    f = f < edge ? 0.0 : 1.0;
-    dst[global_id] = (U)f;
-}
-
-template <typename T, int N> static void gen_rand_val (cl_vec<T, N>& vect)
-{
-    int i = 0;
-
-    memset(vect.ptr, 0, sizeof(T) * ((N+1)/2)*2);
-    for (; i < N; i++) {
-        vect.ptr[i] = static_cast<T>(.1f * (rand() & 15) - .75f);
-    }
-}
-
-template <typename T> static void gen_rand_val (T & val)
-{
-    val = static_cast<T>(.1f * (rand() & 15) - .75f);
-}
-
-template <typename T>
-inline static void print_data (T& val)
-{
-    if (std::is_unsigned<T>::value)
-        printf(" %u", val);
-    else
-        printf(" %d", val);
-}
-
-inline static void print_data (float& val)
-{
-    printf(" %f", val);
-}
-
-template <typename T, typename U, int N> static void dump_data (cl_vec<T, N>* edge,
-        cl_vec<T, N>* src, cl_vec<U, N>* dst, int n)
-{
-    U* val = reinterpret_cast<U *>(dst);
-
-    n = n*((N+1)/2)*2;
-
-    printf("\nEdge: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(((T *)buf_data[0])[i]);
-    }
-    printf("\nx: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(((T *)buf_data[1])[i]);
-    }
-
-    printf("\nCPU: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(val[i]);
-    }
-    printf("\nGPU: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(((U *)buf_data[2])[i]);
-    }
-}
-
-template <typename T, typename U> static void dump_data (T* edge, T* src, U* dst, int n)
-{
-    printf("\nedge: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(((T *)buf_data[0])[i]);
-    }
-
-    printf("\nx: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(((T *)buf_data[1])[i]);
-    }
-
-    printf("\nCPU: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(dst[i]);
-    }
-    printf("\nGPU: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(((U *)buf_data[2])[i]);
-    }
-}
-
-template <typename T, typename U, int N> static void dump_data (float edge,
-        cl_vec<T, N>* src, cl_vec<U, N>* dst, int n)
-{
-    U* val = reinterpret_cast<U *>(dst);
-
-    n = n*((N+1)/2)*2;
-
-    printf("\nEdge: %f\n", edge);
-    printf("\nx: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(((T *)buf_data[0])[i]);
-    }
-
-    printf("\nCPU: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(val[i]);
-    }
-    printf("\nGPU: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(((U *)buf_data[1])[i]);
-    }
-}
-
-template <typename T, typename U> static void dump_data (float edge, T* src, U* dst, int n)
-{
-    printf("\nedge: %f\n", edge);
-    printf("\nx: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(((T *)buf_data[0])[i]);
-    }
-
-    printf("\nCPU: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(dst[i]);
-    }
-    printf("\nGPU: \n");
-    for (int32_t i = 0; i < (int32_t) n; ++i) {
-        print_data(((U *)buf_data[1])[i]);
-    }
-}
-
-template <typename T> static void compiler_step_with_type(void)
-{
-    const size_t n = 16;
-    T cpu_dst[n], cpu_src[n];
-    T edge[n];
-
-    // Setup buffers
-    OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(T), NULL);
-    OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(T), NULL);
-    OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(T), NULL);
-    OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-    OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-    OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-    globals[0] = n;
-    locals[0] = n;
-
-    // Run random tests
-    for (uint32_t pass = 0; pass < 8; ++pass) {
-        OCL_MAP_BUFFER(0);
-        OCL_MAP_BUFFER(1);
-
-        /* Clear the dst buffer to avoid random data. */
-        OCL_MAP_BUFFER(2);
-        memset(buf_data[2], 0, sizeof(T) * n);
-        OCL_UNMAP_BUFFER(2);
-
-        for (int32_t i = 0; i < (int32_t) n; ++i) {
-            gen_rand_val(cpu_src[i]);
-            gen_rand_val(edge[i]);
-        }
-
-        memcpy(buf_data[1], cpu_src, sizeof(T) * n);
-        memcpy(buf_data[0], edge, sizeof(T) * n);
-
-        // Run the kernel on GPU
-        OCL_NDRANGE(1);
-
-        // Run on CPU
-        for (int32_t i = 0; i < (int32_t) n; ++i)
-            cpu(i, edge, cpu_src, cpu_dst);
-
-        // Compare
-        OCL_MAP_BUFFER(2);
-
-        //dump_data(edge, cpu_src, cpu_dst, n);
-
-        OCL_ASSERT(!memcmp(buf_data[2], cpu_dst, sizeof(T) * n));
-        OCL_UNMAP_BUFFER(2);
-        OCL_UNMAP_BUFFER(1);
-        OCL_UNMAP_BUFFER(0);
-    }
-}
-
-#define STEP_TEST_TYPE(TYPE) \
-	static void compiler_step_##TYPE (void) \
-        { \
-           OCL_CALL (cl_kernel_init, "compiler_step.cl", "compiler_step_"#TYPE, SOURCE, NULL);  \
-           compiler_step_with_type<TYPE>(); \
-        } \
-	MAKE_UTEST_FROM_FUNCTION(compiler_step_##TYPE);
-
-typedef cl_vec<float, 2> float2;
-typedef cl_vec<float, 3> float3;
-typedef cl_vec<float, 4> float4;
-typedef cl_vec<float, 8> float8;
-typedef cl_vec<float, 16> float16;
-STEP_TEST_TYPE(float)
-STEP_TEST_TYPE(float2)
-STEP_TEST_TYPE(float3)
-STEP_TEST_TYPE(float4)
-STEP_TEST_TYPE(float8)
-STEP_TEST_TYPE(float16)
-
-
-template <typename T> static void compiler_stepf_with_type(void)
-{
-    const size_t n = 16;
-    T cpu_dst[n], cpu_src[n];
-    float edge = (float)(.1f * (rand() & 15) - .75f);
-
-    // Setup buffers
-    OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(T), NULL);
-    OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(T), NULL);
-    OCL_SET_ARG(0, sizeof(float), &edge);
-    OCL_SET_ARG(1, sizeof(cl_mem), &buf[0]);
-    OCL_SET_ARG(2, sizeof(cl_mem), &buf[1]);
-    globals[0] = n;
-    locals[0] = n;
-
-    // Run random tests
-    for (uint32_t pass = 0; pass < 8; ++pass) {
-        OCL_MAP_BUFFER(0);
-
-        /* Clear the dst buffer to avoid random data. */
-        OCL_MAP_BUFFER(1);
-        memset(buf_data[1], 0, sizeof(T) * n);
-        OCL_UNMAP_BUFFER(1);
-
-        for (int32_t i = 0; i < (int32_t) n; ++i) {
-            gen_rand_val(cpu_src[i]);
-        }
-
-        memcpy(buf_data[0], cpu_src, sizeof(T) * n);
-
-        // Run the kernel on GPU
-        OCL_NDRANGE(1);
-
-        // Run on CPU
-        for (int32_t i = 0; i < (int32_t) n; ++i)
-            cpu(i, edge, cpu_src, cpu_dst);
-
-        // Compare
-        OCL_MAP_BUFFER(1);
-
-        //dump_data(edge, cpu_src, cpu_dst, n);
-
-        OCL_ASSERT(!memcmp(buf_data[1], cpu_dst, sizeof(T) * n));
-        OCL_UNMAP_BUFFER(1);
-        OCL_UNMAP_BUFFER(0);
-    }
-}
-
-#define _STEPF_TEST_TYPE(TYPE, keep_program) \
-	static void compiler_stepf_##TYPE (void) \
-        { \
-           OCL_CALL (cl_kernel_init, "compiler_step.cl", "compiler_stepf_"#TYPE, SOURCE, NULL);  \
-           compiler_stepf_with_type<TYPE>(); \
-        } \
-	MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_stepf_##TYPE, keep_program);
-
-#define STEPF_TEST_TYPE(TYPE) _STEPF_TEST_TYPE(TYPE, true)
-#define STEPF_TEST_TYPE_END(TYPE) _STEPF_TEST_TYPE(TYPE, false)
-
-
-STEPF_TEST_TYPE(float)
-STEPF_TEST_TYPE(float2)
-STEPF_TEST_TYPE(float3)
-STEPF_TEST_TYPE(float4)
-STEPF_TEST_TYPE(float8)
-STEPF_TEST_TYPE_END(float16)
diff --git a/utests/compiler_structure_attributes.cpp b/utests/compiler_structure_attributes.cpp
deleted file mode 100644
index 31656f4..0000000
--- a/utests/compiler_structure_attributes.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_structure_attributes(void)
-{
-  OCL_CREATE_KERNEL("compiler_structure_attributes");
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_structure_attributes);
-
diff --git a/utests/compiler_switch.cpp b/utests/compiler_switch.cpp
deleted file mode 100644
index 6e93309..0000000
--- a/utests/compiler_switch.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-#include "utest_helper.hpp"
-
-static void cpu_compiler_switch(int *dst, int *src, int get_global_id0)
-{
-  switch (get_global_id0) {
-    case 0: dst[get_global_id0] = src[get_global_id0 + 4]; break;
-    case 1: dst[get_global_id0] = src[get_global_id0 + 14]; break;
-    case 2: dst[get_global_id0] = src[get_global_id0 + 13]; break;
-    case 6: dst[get_global_id0] = src[get_global_id0 + 11]; break;
-    case 7: dst[get_global_id0] = src[get_global_id0 + 10]; break;
-    case 10: dst[get_global_id0] = src[get_global_id0 + 9]; break;
-    case 12: dst[get_global_id0] = src[get_global_id0 + 6]; break;
-    default: dst[get_global_id0] = src[get_global_id0 + 8]; break;
-  }
-}
-
-static void compiler_switch(void)
-{
-  const size_t n = 32;
-  int cpu_dst[32], cpu_src[32];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_switch");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = 16;
-  locals[0] = 16;
-
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < 32; ++i)
-    cpu_src[i] = ((int32_t*)buf_data[1])[i] = i;
-  OCL_UNMAP_BUFFER(1);
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (int i = 0; i < 16; ++i)
-    cpu_compiler_switch(cpu_dst, cpu_src, i);
-  for (int i = 0; i < 16; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[0])[i] == cpu_dst[i]);
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_switch)
-
diff --git a/utests/compiler_type_casting.cpp b/utests/compiler_type_casting.cpp
deleted file mode 100644
index 392acf4..0000000
--- a/utests/compiler_type_casting.cpp
+++ /dev/null
@@ -1,10 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_type_casting(void)
-{
-  OCL_CREATE_KERNEL("compiler_type_casting");
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_type_casting);
-
-
diff --git a/utests/compiler_uint16_copy.cpp b/utests/compiler_uint16_copy.cpp
deleted file mode 100644
index 1494e81..0000000
--- a/utests/compiler_uint16_copy.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_uint16_copy(void)
-{
-  const size_t n = 128;
-
-  // Setup kernel and buffers. Note that uint16 is aligned on 16 bytes
-  // according to the OCL specificatio
-  OCL_CREATE_KERNEL("compiler_uint16_copy");
-  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t[16]) * n);
-  for (uint32_t i = 0; i < n; ++i)
-    for (uint32_t j = 0; j < 16; ++j)
-      ((uint32_t*)buf_data[0])[16*i+j] = 16*i+j;
-
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t[16]), buf_data[0]);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t[16]), NULL);
-  free(buf_data[0]);
-  buf_data[0] = NULL;
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  // Check result
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < 16*n; ++i)
-    OCL_ASSERT(((uint32_t*)buf_data[0])[i] == ((uint32_t*)buf_data[1])[i]);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_uint16_copy);
-
diff --git a/utests/compiler_uint2_copy.cpp b/utests/compiler_uint2_copy.cpp
deleted file mode 100644
index 8eb4314..0000000
--- a/utests/compiler_uint2_copy.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_uint2_copy(void)
-{
-  const size_t n = 128;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_uint2_copy");
-  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t[2]) * n);
-  for (uint32_t i = 0; i < 2*n; ++i) ((uint32_t*)buf_data[0])[i] = i;
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t[2]), buf_data[0]);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t[2]), NULL);
-  free(buf_data[0]);
-  buf_data[0] = NULL;
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  // Check result
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < 2*n; ++i)
-    OCL_ASSERT(((uint32_t*)buf_data[0])[i] == ((uint32_t*)buf_data[1])[i]);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_uint2_copy);
-
diff --git a/utests/compiler_uint3_copy.cpp b/utests/compiler_uint3_copy.cpp
deleted file mode 100644
index c4d3cf0..0000000
--- a/utests/compiler_uint3_copy.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_uint3_copy(void)
-{
-  const size_t n = 128;
-
-  // Setup kernel and buffers. Note that uint3 is aligned on 16 bytes
-  // according to the OCL specification
-  OCL_CREATE_KERNEL("compiler_uint3_copy");
-  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t[4]) * n);
-  for (uint32_t i = 0; i < n; ++i) {
-    ((uint32_t*)buf_data[0])[4*i+0] = 3*i+0;
-    ((uint32_t*)buf_data[0])[4*i+1] = 3*i+1;
-    ((uint32_t*)buf_data[0])[4*i+2] = 3*i+2;
-  }
-
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t[4]), buf_data[0]);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t[4]), NULL);
-  free(buf_data[0]);
-  buf_data[0] = NULL;
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  // Check result
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < n; ++i) {
-    OCL_ASSERT(((uint32_t*)buf_data[0])[4*i+0] == ((uint32_t*)buf_data[1])[4*i+0]);
-    OCL_ASSERT(((uint32_t*)buf_data[0])[4*i+1] == ((uint32_t*)buf_data[1])[4*i+1]);
-    OCL_ASSERT(((uint32_t*)buf_data[0])[4*i+2] == ((uint32_t*)buf_data[1])[4*i+2]);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_uint3_copy);
-
diff --git a/utests/compiler_uint3_unaligned_copy.cpp b/utests/compiler_uint3_unaligned_copy.cpp
deleted file mode 100644
index d42b4c3..0000000
--- a/utests/compiler_uint3_unaligned_copy.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_uint3_unaligned_copy(void)
-{
-  const size_t n = 128;
-
-  // Setup kernel and buffers. Note that uint3 is aligned on 16 bytes
-  // according to the OCL specification
-  OCL_CREATE_KERNEL("compiler_uint3_unaligned_copy");
-  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t[4]) * n);
-  for (uint32_t i = 0; i < n; ++i) {
-    ((uint32_t*)buf_data[0])[3*i+0] = 3*i+0;
-    ((uint32_t*)buf_data[0])[3*i+1] = 3*i+1;
-    ((uint32_t*)buf_data[0])[3*i+2] = 3*i+2;
-  }
-
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t[4]), buf_data[0]);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t[4]), NULL);
-  free(buf_data[0]);
-  buf_data[0] = NULL;
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  // Check result
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < n; ++i) {
-    OCL_ASSERT(((uint32_t*)buf_data[0])[3*i+0] == ((uint32_t*)buf_data[1])[3*i+0]);
-    OCL_ASSERT(((uint32_t*)buf_data[0])[3*i+1] == ((uint32_t*)buf_data[1])[3*i+1]);
-    OCL_ASSERT(((uint32_t*)buf_data[0])[3*i+2] == ((uint32_t*)buf_data[1])[3*i+2]);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_uint3_unaligned_copy);
-
-
-
diff --git a/utests/compiler_uint8_copy.cpp b/utests/compiler_uint8_copy.cpp
deleted file mode 100644
index 25dbd58..0000000
--- a/utests/compiler_uint8_copy.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_uint8_copy(void)
-{
-  const size_t n = 128;
-
-  // Setup kernel and buffers. Note that uint8 is aligned on 16 bytes
-  // according to the OCL specification
-  OCL_CREATE_KERNEL("compiler_uint8_copy");
-  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t[8]) * n);
-  for (uint32_t i = 0; i < n; ++i)
-    for (uint32_t j = 0; j < 8; ++j)
-      ((uint32_t*)buf_data[0])[8*i+j] = 8*i+j;
-
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t[8]), buf_data[0]);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t[8]), NULL);
-  free(buf_data[0]);
-  buf_data[0] = NULL;
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  // Check result
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < 8*n; ++i)
-    OCL_ASSERT(((uint32_t*)buf_data[0])[i] == ((uint32_t*)buf_data[1])[i]);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_uint8_copy);
-
diff --git a/utests/compiler_unstructured_branch0.cpp b/utests/compiler_unstructured_branch0.cpp
deleted file mode 100644
index 128a53e..0000000
--- a/utests/compiler_unstructured_branch0.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_unstructured_branch0(void)
-{
-  const size_t n = 32;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_unstructured_branch0");
-  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * n);
-  for (uint32_t i = 0; i < n; ++i) ((uint32_t*)buf_data[0])[i] = 2;
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t), buf_data[0]);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  free(buf_data[0]);
-  buf_data[0] = NULL;
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = 16;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  // First control flow
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < 16; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 2);
-  for (uint32_t i = 16; i < 32; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 1);
-
-  // Second control flow
-  for (uint32_t i = 0; i < n; ++i) ((int32_t*)buf_data[0])[i] = -2;
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < 32; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 1);
-
-  // Third control flow
-  for (uint32_t i = 0; i < 8; ++i) ((int32_t*)buf_data[0])[i] = 2;
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < 8; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 2);
-  for (uint32_t i = 8; i < 32; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 1);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_unstructured_branch0);
-
diff --git a/utests/compiler_unstructured_branch1.cpp b/utests/compiler_unstructured_branch1.cpp
deleted file mode 100644
index 6021f5b..0000000
--- a/utests/compiler_unstructured_branch1.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_unstructured_branch1(void)
-{
-  const size_t n = 16;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_unstructured_branch1");
-  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * n);
-  for (uint32_t i = 0; i < n; ++i) ((uint32_t*)buf_data[0])[i] = 2;
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t), buf_data[0]);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  free(buf_data[0]);
-  buf_data[0] = NULL;
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = 16;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  // First control flow
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < n; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 2);
-
-  // Second control flow
-  for (uint32_t i = 0; i < n; ++i) ((int32_t*)buf_data[0])[i] = -2;
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < n; ++i)
-    OCL_ASSERT(((uint32_t*)buf_data[1])[i] == 3);
-
-  // Third control flow
-  for (uint32_t i = 0; i < 8; ++i) ((int32_t*)buf_data[0])[i] = 2;
-  for (uint32_t i = 8; i < n; ++i) ((int32_t*)buf_data[0])[i] = -2;
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < 8; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 2);
-  for (uint32_t i = 8; i < n; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 3);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_unstructured_branch1);
-
diff --git a/utests/compiler_unstructured_branch2.cpp b/utests/compiler_unstructured_branch2.cpp
deleted file mode 100644
index d61c6b5..0000000
--- a/utests/compiler_unstructured_branch2.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_unstructured_branch2(void)
-{
-  const size_t n = 16;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_unstructured_branch2");
-  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * n);
-  for (uint32_t i = 0; i < n; ++i) ((uint32_t*)buf_data[0])[i] = 2;
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t), buf_data[0]);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  free(buf_data[0]);
-  buf_data[0] = NULL;
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = 16;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  // First control flow
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < n; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 12);
-
-  // Second control flow
-  for (uint32_t i = 0; i < n; ++i) ((int32_t*)buf_data[0])[i] = -2;
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < n; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == -6);
-
-  // Third control flow
-  for (uint32_t i = 0; i < 8; ++i) ((int32_t*)buf_data[0])[i] = 2;
-  for (uint32_t i = 8; i < n; ++i) ((int32_t*)buf_data[0])[i] = -2;
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < 8; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 12);
-  for (uint32_t i = 8; i < n; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == -6);
-
-  // Fourth control flow
-  for (uint32_t i = 0; i < 4; ++i) ((int32_t*)buf_data[0])[i] = 1;
-  for (uint32_t i = 4; i < 8; ++i) ((int32_t*)buf_data[0])[i] = 2;
-  for (uint32_t i = 8; i < n; ++i) ((int32_t*)buf_data[0])[i] = -2;
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < 8; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 12);
-  for (uint32_t i = 8; i < n; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == -6);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_unstructured_branch2);
-
diff --git a/utests/compiler_unstructured_branch3.cpp b/utests/compiler_unstructured_branch3.cpp
deleted file mode 100644
index 0c6992a..0000000
--- a/utests/compiler_unstructured_branch3.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-#include "utest_helper.hpp"
-
-static void compiler_unstructured_branch3(void)
-{
-  const size_t n = 16;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_unstructured_branch3");
-  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * n);
-  for (uint32_t i = 0; i < n; ++i) ((uint32_t*)buf_data[0])[i] = 2;
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t), buf_data[0]);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
-  free(buf_data[0]);
-  buf_data[0] = NULL;
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = 16;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-
-  // First control flow
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-
-  for (uint32_t i = 0; i < n; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 2);
-
-  // Second control flow
-  for (uint32_t i = 0; i < n; ++i) ((int32_t*)buf_data[0])[i] = 0;
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < n; ++i)
-    OCL_ASSERT(((uint32_t*)buf_data[1])[i] == 3);
-
-  // Third control flow
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < 8; ++i) ((int32_t*)buf_data[0])[i] = 2;
-  for (uint32_t i = 8; i < n; ++i) ((int32_t*)buf_data[0])[i] = 0;
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < 8; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 2);
-  for (uint32_t i = 8; i < n; ++i)
-    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 3);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_unstructured_branch3);
-
diff --git a/utests/compiler_upsample_int.cpp b/utests/compiler_upsample_int.cpp
deleted file mode 100644
index ee912f9..0000000
--- a/utests/compiler_upsample_int.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_upsample_int(void)
-{
-  const int n = 32;
-  short src1[n];
-  unsigned short src2[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_upsample_int");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(short), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(short), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (int i = 0; i < n; ++i) {
-    src1[i] = ((short*)buf_data[0])[i] = rand();
-    src2[i] = ((short*)buf_data[1])[i] = rand();
-  }
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(2);
-  for (int i = 0; i < n; ++i)
-    OCL_ASSERT(((int*)buf_data[2])[i] == (int)((src1[i] << 16) | src2[i]));
-  OCL_UNMAP_BUFFER(2);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_upsample_int);
diff --git a/utests/compiler_upsample_long.cpp b/utests/compiler_upsample_long.cpp
deleted file mode 100644
index b125ff4..0000000
--- a/utests/compiler_upsample_long.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-#include <stdint.h>
-#include "utest_helper.hpp"
-
-void compiler_upsample_long(void)
-{
-  const int n = 32;
-  int src1[n];
-  unsigned int src2[n];
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_upsample_long");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(unsigned int), NULL);
-  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int64_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-  globals[0] = n;
-  locals[0] = 16;
-
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (int i = 0; i < n; ++i) {
-    src1[i] = ((int*)buf_data[0])[i] = rand();
-    src2[i] = ((unsigned int*)buf_data[1])[i] = rand();
-  }
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(2);
-  for (int i = 0; i < n; ++i)
-    OCL_ASSERT(((int64_t*)buf_data[2])[i] == (((int64_t)(src1[i]) << 32) | src2[i]));
-  OCL_UNMAP_BUFFER(2);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_upsample_long);
diff --git a/utests/compiler_vect_compare.cpp b/utests/compiler_vect_compare.cpp
deleted file mode 100644
index e9e45be..0000000
--- a/utests/compiler_vect_compare.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-#include "utest_helper.hpp"
-
-typedef struct {
-  int x;
-  int y;
-  int z;
-  int w;
-} int4;
-
-void compiler_vect_compare(void)
-{
-  const size_t n = 16;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_vect_compare");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int4), NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int4), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-
-  OCL_MAP_BUFFER(0);
-  for (uint32_t i = 0; i < n; ++i) {
-    ((int4*)buf_data[0])[i].x = i & 0x1;
-    ((int4*)buf_data[0])[i].y = i & 0x2;
-    ((int4*)buf_data[0])[i].z = i & 0x4;
-    ((int4*)buf_data[0])[i].w = i & 0x8;
-  }
-  OCL_UNMAP_BUFFER(0);
-
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < 16; ++i) {
-    OCL_ASSERT(((int4*)buf_data[1])[i].x == (int)((i&0x1)?0xffffffff:0));
-    OCL_ASSERT(((int4*)buf_data[1])[i].y == (int)((i&0x2)?0xffffffff:0));
-    OCL_ASSERT(((int4*)buf_data[1])[i].z == (int)((i&0x4)?0xffffffff:0));
-    OCL_ASSERT(((int4*)buf_data[1])[i].w == (int)((i&0x8)?0xffffffff:0));
-  }
-  OCL_UNMAP_BUFFER(1);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_vect_compare);
diff --git a/utests/compiler_vector_inc.cpp b/utests/compiler_vector_inc.cpp
deleted file mode 100644
index c44424b..0000000
--- a/utests/compiler_vector_inc.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <cstdint>
-#include <cstring>
-#include <iostream>
-#include "utest_helper.hpp"
-
-void compiler_vector_inc(void)
-{
-  const int n = 64;
-  char dst[n];
-  char src[n];
-
-  OCL_CREATE_KERNEL("compiler_vector_inc");
-  OCL_CREATE_BUFFER(buf[0], 0, n, NULL);
-  OCL_CREATE_BUFFER(buf[1], 0, n, NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n / 2;
-  locals[0] = 16;
-
-  for (int i = 0; i < n; ++i) {
-    dst[i] = i;
-    src[i] = (i / 2) % 4;
-  }
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  memcpy(buf_data[0], dst, n);
-  memcpy(buf_data[1], src, n);
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-
-  OCL_NDRANGE(1);
-
-  OCL_MAP_BUFFER(0);
-  char *dest = ((char *)buf_data[0]);
-  for (int i=0; i<n; ++i) {
-    char wish;
-    if (src[i/2] < 2)
-      wish = dst[i] + 1;
-    else
-      wish = dst[i] - 1;
-    OCL_ASSERT(dest[i] == wish);
-  }
-  OCL_UNMAP_BUFFER(0);
-}
-
-MAKE_UTEST_FROM_FUNCTION_WITH_ISSUE(compiler_vector_inc);
diff --git a/utests/compiler_vector_load_store.cpp b/utests/compiler_vector_load_store.cpp
deleted file mode 100644
index b44abc7..0000000
--- a/utests/compiler_vector_load_store.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-#include "utest_helper.hpp"
-#include <string.h>
-template<typename T>
-static void compiler_vector_load_store(int elemNum, const char *kernelName)
-{
-  const size_t n = elemNum * 256;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL_FROM_FILE("compiler_vector_load_store", kernelName);
-  buf_data[0] = (T*) malloc(sizeof(T) * n);
-  for (uint32_t i = 0; i < n; ++i)
-    ((T*)buf_data[0])[i] = i;
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(T), buf_data[0]);
-  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(T), NULL);
-  free(buf_data[0]);
-  buf_data[0] = NULL;
-
-  // Run the kernel
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-  globals[0] = n / elemNum;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-
-  // Check result
-  OCL_MAP_BUFFER(0);
-  OCL_MAP_BUFFER(1);
-  for (uint32_t i = 0; i < n; ++i)
-  {
-    int shift = ((i % elemNum) + 1);
-    if (strstr(kernelName, "double") == NULL)
-      OCL_ASSERT(((T*)buf_data[1])[i] == (T)(((T*)buf_data[0])[i] + shift));
-    else
-      OCL_ASSERT((((T*)buf_data[1])[i] - ((T)((T*)buf_data[0])[i] + shift)) < 1e-5);
-  }
-  OCL_UNMAP_BUFFER(0);
-  OCL_UNMAP_BUFFER(1);
-}
-
-#define compiler_vector_load_store(type, n, kernel_type, keep_program) \
-static void compiler_vector_ ##kernel_type ##n ##_load_store(void)\
-{\
-  compiler_vector_load_store<type>(n, "test_" #kernel_type #n);\
-}\
-MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_vector_ ## kernel_type ##n ##_load_store, keep_program);
-
-#define test_all_vector(type, kernel_type, keep_program) \
-  compiler_vector_load_store(type, 2, kernel_type, true) \
-  compiler_vector_load_store(type, 3, kernel_type, true) \
-  compiler_vector_load_store(type, 4, kernel_type, true) \
-  compiler_vector_load_store(type, 8, kernel_type, true) \
-  compiler_vector_load_store(type, 16, kernel_type, keep_program)
-
-test_all_vector(int8_t, char, true)
-test_all_vector(uint8_t, uchar, true)
-test_all_vector(int16_t, short, true)
-test_all_vector(uint16_t, ushort, true)
-test_all_vector(int32_t, int, true)
-test_all_vector(uint32_t, uint, true)
-test_all_vector(float, float, true)
-test_all_vector(double, double, true)
-test_all_vector(int64_t, long, true)
-test_all_vector(uint64_t, ulong, false)
diff --git a/utests/compiler_volatile.cpp b/utests/compiler_volatile.cpp
deleted file mode 100644
index f4fe054..0000000
--- a/utests/compiler_volatile.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_volatile(void)
-{
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_volatile");
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_volatile);
diff --git a/utests/compiler_workitem_builtin.cpp b/utests/compiler_workitem_builtin.cpp
deleted file mode 100644
index 092b0e7..0000000
--- a/utests/compiler_workitem_builtin.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_workitem_builtin(void)
-{
-  OCL_CREATE_KERNEL("compiler_workitem_builtin");
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_workitem_builtin);
-
diff --git a/utests/compiler_write_only.cpp b/utests/compiler_write_only.cpp
deleted file mode 100644
index 3935535..0000000
--- a/utests/compiler_write_only.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/* 
- * Copyright © 2012 Intel Corporation
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author: Benjamin Segovia <benjamin.segovia at intel.com>
- */
-
-#include "utest_helper.hpp"
-
-static void compiler_write_only(void)
-{
-  const size_t n = 2048;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("test_write_only");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-
-  // Check results
-  for (uint32_t i = 0; i < n; ++i)
-    OCL_ASSERT(((uint32_t*)buf_data[0])[i] == i);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_write_only);
-
diff --git a/utests/compiler_write_only_bytes.cpp b/utests/compiler_write_only_bytes.cpp
deleted file mode 100644
index 1a13cdb..0000000
--- a/utests/compiler_write_only_bytes.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_write_only_bytes(void)
-{
-  const size_t n = 32;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_write_only_bytes");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint8_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-
-  // Check results
-  for (uint32_t i = 0; i < n; ++i)
-    OCL_ASSERT(((uint8_t*)buf_data[0])[i] == 2);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_write_only_bytes);
diff --git a/utests/compiler_write_only_shorts.cpp b/utests/compiler_write_only_shorts.cpp
deleted file mode 100644
index 19988fe..0000000
--- a/utests/compiler_write_only_shorts.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-#include "utest_helper.hpp"
-
-void compiler_write_only_shorts(void)
-{
-  const size_t n = 32;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_write_only_shorts");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint16_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-
-  // Check results
-  for (uint32_t i = 0; i < n; ++i)
-    OCL_ASSERT(((uint16_t*)buf_data[0])[i] == 2);
-}
-
-MAKE_UTEST_FROM_FUNCTION(compiler_write_only_shorts);
-
diff --git a/utests/enqueue_copy_buf.cpp b/utests/enqueue_copy_buf.cpp
deleted file mode 100644
index 969eaa8..0000000
--- a/utests/enqueue_copy_buf.cpp
+++ /dev/null
@@ -1,66 +0,0 @@
-#include "utest_helper.hpp"
-
-void test_copy_buf(size_t sz, size_t src_off, size_t dst_off, size_t cb)
-{
-    unsigned int i;
-    OCL_MAP_BUFFER(0);
-
-    for (i=0; i < sz; i++) {
-        ((char*)buf_data[0])[i] = (rand() & 63);
-    }
-
-    OCL_UNMAP_BUFFER(0);
-
-    if (src_off + cb > sz || dst_off + cb > sz) {
-        /* Expect Error. */
-        OCL_ASSERT(clEnqueueCopyBuffer(queue, buf[0], buf[1],
-                                       src_off, dst_off, cb*sizeof(char), 0, NULL, NULL));
-        return;
-    }
-
-    OCL_ASSERT(!clEnqueueCopyBuffer(queue, buf[0], buf[1],
-                                    src_off, dst_off, cb*sizeof(char), 0, NULL, NULL));
-
-    OCL_MAP_BUFFER(0);
-    OCL_MAP_BUFFER(1);
-
-#if 0
-    printf("\n########### Src buffer: \n");
-    for (i = 0; i < cb; ++i)
-        printf(" %2.2u", ((unsigned char*)buf_data[0])[i + src_off]);
-
-    printf("\n########### dst buffer: \n");
-    for (i = 0; i < cb; ++i)
-        printf(" %2.2u", ((unsigned char*)buf_data[1])[i + dst_off]);
-#endif
-
-    // Check results
-    for (i = 0; i < cb; ++i) {
-        if (((char*)buf_data[0])[i + src_off] != ((char*)buf_data[1])[i + dst_off]) {
-            printf ("different index is %d\n", i);
-            OCL_ASSERT(0);
-        }
-    }
-
-    OCL_UNMAP_BUFFER(0);
-    OCL_UNMAP_BUFFER(1);
-
-}
-
-void enqueue_copy_buf(void)
-{
-    size_t i;
-    size_t j;
-    const size_t sz = 1024;
-
-    OCL_CREATE_BUFFER(buf[0], 0, sz * sizeof(char), NULL);
-    OCL_CREATE_BUFFER(buf[1], 0, sz * sizeof(char), NULL);
-
-    for (i=0; i<sz; i+=8) {
-        for (j=0; j<sz; j+=10) {
-            test_copy_buf(sz, i, j, sz/2);
-        }
-    }
-}
-
-MAKE_UTEST_FROM_FUNCTION(enqueue_copy_buf);
diff --git a/utests/get_cl_info.cpp b/utests/get_cl_info.cpp
deleted file mode 100644
index 4148ce9..0000000
--- a/utests/get_cl_info.cpp
+++ /dev/null
@@ -1,629 +0,0 @@
-#include <string.h>
-#include <string>
-#include <map>
-#include <iostream>
-#include <fstream>
-#include <algorithm>
-#include "utest_helper.hpp"
-
-using namespace std;
-
-/* ***************************************************** *
- * This file to test all the API like: clGetXXXXInfo     *
- * ***************************************************** */
-#define NO_STANDARD_REF 0xFFFFF
-
-template <typename T = cl_uint>
-struct Info_Result {
-    T ret;
-    T refer;
-    int size;
-    typedef T type_value;
-
-    void * get_ret(void) {
-        return (void *)&ret;
-    }
-
-    Info_Result(T other) {
-        refer = other;
-        size = sizeof(T);
-    }
-
-    bool check_result (void) {
-        //printf("The refer is %d, we get result is %d\n", refer, ret);
-        if (ret != refer && refer != (T)NO_STANDARD_REF)
-            return false;
-
-        return true;
-    }
-};
-
-template <>
-struct Info_Result<char *> {
-    char * ret;
-    char * refer;
-    int size;
-    typedef char* type_value;
-
-    Info_Result(const char *other, int sz): refer(NULL) {
-        size = sz;
-        ret = (char *)malloc(sizeof(char) * sz);
-        if (other) {
-            refer = (char *)malloc(sizeof(char) * sz);
-            memcpy(refer, other, sz);
-        }
-    }
-
-    ~Info_Result(void) {
-        free(refer);
-        free(ret);
-    }
-
-    void * get_ret(void) {
-        return (void *)ret;
-    }
-
-    bool check_result (void) {
-        if (refer && ::memcmp(ret, refer, size))
-            return false;
-
-        return true;
-    }
-};
-
-template <> //Used for such as CL_PROGRAM_BINARIES
-struct Info_Result<char **> {
-    char ** ret;
-    char ** refer;
-    int *elt_size;
-    int size;
-    typedef char** type_value;
-
-    Info_Result(char **other, int *sz, int elt_num) {
-        size = elt_num;
-
-        ret = (char **)malloc(elt_num * sizeof(char *));
-        memset(ret, 0, (elt_num * sizeof(char *)));
-        refer = (char **)malloc(elt_num * sizeof(char *));
-        memset(refer, 0, (elt_num * sizeof(char *)));
-        elt_size = (int *)malloc(elt_num * sizeof(int));
-        memset(elt_size, 0, (elt_num * sizeof(int)));
-        if (sz) {
-            int i = 0;
-            for (; i < elt_num; i++) {
-                elt_size[i] = sz[i];
-                ret[i] = (char *)malloc(sz[i] * sizeof(char));
-
-                if (other[i] && elt_size[i] > 0) {
-                    refer[i] = (char *)malloc(sz[i] * sizeof(char));
-                    memcpy(&refer[i], &other[i], sz[i]);
-                }
-                else
-                    refer[i] = NULL;
-            }
-        }
-    }
-
-    ~Info_Result(void) {
-        int i = 0;
-        for (; i < size; i++) {
-            if (refer[i])
-                free(refer[i]);
-            free(ret[i]);
-        }
-        free(ret);
-        free(refer);
-        free(elt_size);
-    }
-
-    void * get_ret(void) {
-        return (void *)ret;
-    }
-
-    bool check_result (void) {
-        int i = 0;
-        for (; i < size; i++) {
-            if (refer[i] && ::memcmp(ret[i], refer[i], elt_size[i]))
-                return false;
-        }
-
-        return true;
-    }
-};
-
-template <typename T1, typename T2>
-struct Traits {
-    static bool Is_Same(void) {
-        return false;
-    };
-};
-
-template <typename T1>
-struct Traits<T1, T1> {
-    static bool Is_Same(void) {
-        return true;
-    };
-};
-
-template <typename T>
-Info_Result<T>* cast_as(void *info)
-{
-    Info_Result<T>* ret;
-    ret = reinterpret_cast<Info_Result<T>*>(info);
-    OCL_ASSERT((Traits<T, typename Info_Result<T>::type_value>::Is_Same()));
-    return ret;
-}
-
-
-#define CALL_INFO_AND_RET(TYPE, FUNC, ...) \
-    do { \
-	cl_int ret; \
-	size_t ret_size; \
-	\
-	Info_Result<TYPE>* info = cast_as<TYPE>(x.second); \
-	ret = FUNC (__VA_ARGS__, x.first, \
-		info->size, info->get_ret(), &ret_size); \
-	OCL_ASSERT((!ret)); \
-	OCL_ASSERT((info->check_result())); \
-	delete info; \
-    } while(0)
-
-/* ***************************************************** *
- * clGetProgramInfo                                      *
- * ***************************************************** */
-#define CALL_PROGINFO_AND_RET(TYPE) CALL_INFO_AND_RET(TYPE, clGetProgramInfo, program)
-
-void get_program_info(void)
-{
-    map<cl_program_info, void *> maps;
-    int expect_value;
-    char * expect_source;
-    int sz;
-    char *ker_path = (char *)malloc(4096 * sizeof(char));
-    const char *kiss_path = getenv("OCL_KERNEL_PATH");
-    string line;
-    string source_code;
-
-    sprintf(ker_path, "%s/%s", kiss_path, "compiler_if_else.cl");
-
-    ifstream in(ker_path);
-    while (getline(in,line)) {
-        source_code = (source_code == "") ?
-                      source_code + line : source_code + "\n" + line;
-    }
-    free(ker_path);
-    //cout<< source_code;
-    source_code = source_code + "\n";
-
-    expect_source = (char *)source_code.c_str();
-
-    OCL_CREATE_KERNEL("compiler_if_else");
-
-    /* First test for clGetProgramInfo. We just have 1 devices now */
-    expect_value = 2;//One program, one kernel.
-    maps.insert(make_pair(CL_PROGRAM_REFERENCE_COUNT,
-                          (void *)(new Info_Result<>(((cl_uint)expect_value)))));
-    maps.insert(make_pair(CL_PROGRAM_CONTEXT,
-                          (void *)(new Info_Result<cl_context>(ctx))));
-    expect_value = 1;
-    maps.insert(make_pair(CL_PROGRAM_NUM_DEVICES,
-                          (void *)(new Info_Result<>(((cl_uint)expect_value)))));
-    maps.insert(make_pair(CL_PROGRAM_DEVICES,
-                          (void *)(new Info_Result<cl_device_id>(device))));
-    sz = (strlen(expect_source) + 1);
-    maps.insert(make_pair(CL_PROGRAM_SOURCE,
-                          (void *)(new Info_Result<char *>(expect_source, sz))));
-    expect_value = NO_STANDARD_REF;
-    maps.insert(make_pair(CL_PROGRAM_BINARY_SIZES,
-                          (void *)(new Info_Result<size_t>((size_t)expect_value))));
-    sz = 4096; //big enough?
-    expect_source = NULL;
-    maps.insert(make_pair(CL_PROGRAM_BINARIES,
-                          (void *)(new Info_Result<char **>(&expect_source, &sz, 1))));
-
-    std::for_each(maps.begin(), maps.end(), [](pair<cl_program_info, void *> x) {
-        switch (x.first) {
-        case CL_PROGRAM_REFERENCE_COUNT:
-        case CL_PROGRAM_NUM_DEVICES:
-            CALL_PROGINFO_AND_RET(cl_uint);
-            break;
-        case CL_PROGRAM_CONTEXT:
-            CALL_PROGINFO_AND_RET(cl_context);
-            break;
-        case CL_PROGRAM_DEVICES:
-            CALL_PROGINFO_AND_RET(cl_device_id);
-            break;
-        case CL_PROGRAM_SOURCE:
-            CALL_PROGINFO_AND_RET(char *);
-            break;
-        case CL_PROGRAM_BINARY_SIZES:
-            CALL_PROGINFO_AND_RET(size_t);
-            break;
-        case CL_PROGRAM_BINARIES:
-            CALL_PROGINFO_AND_RET(char **);
-            break;
-        default:
-            break;
-        }
-    });
-}
-
-MAKE_UTEST_FROM_FUNCTION(get_program_info);
-
-/* ***************************************************** *
- * clGetCommandQueueInfo                                 *
- * ***************************************************** */
-#define CALL_QUEUEINFO_AND_RET(TYPE) CALL_INFO_AND_RET(TYPE, clGetCommandQueueInfo, queue)
-
-void get_queue_info(void)
-{
-    /* use the compiler_fabs case to test us. */
-    const size_t n = 16;
-    map<cl_program_info, void *> maps;
-    int expect_ref;
-    cl_command_queue_properties prop;
-
-    OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-    OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-    OCL_CREATE_KERNEL("compiler_fabs");
-
-    OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-    OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-
-    globals[0] = 16;
-    locals[0] = 16;
-
-    OCL_MAP_BUFFER(0);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-        ((float*)buf_data[0])[i] = .1f * (rand() & 15) - .75f;
-    OCL_UNMAP_BUFFER(0);
-
-    // Run the kernel on GPU
-    OCL_NDRANGE(1);
-
-    /* Do our test.*/
-    maps.insert(make_pair(CL_QUEUE_CONTEXT,
-                          (void *)(new Info_Result<cl_context>(ctx))));
-    maps.insert(make_pair(CL_QUEUE_DEVICE,
-                          (void *)(new Info_Result<cl_device_id>(device))));
-
-    expect_ref = 1;
-    maps.insert(make_pair(CL_QUEUE_REFERENCE_COUNT,
-                          (void *)(new Info_Result<>(((cl_uint)expect_ref)))));
-
-    prop = 0;
-    maps.insert(make_pair(CL_QUEUE_PROPERTIES,
-                          (void *)(new Info_Result<cl_command_queue_properties>(
-                                       ((cl_command_queue_properties)prop)))));
-
-    std::for_each(maps.begin(), maps.end(), [](pair<cl_program_info, void *> x) {
-        switch (x.first) {
-        case CL_QUEUE_CONTEXT:
-            CALL_QUEUEINFO_AND_RET(cl_context);
-            break;
-        case CL_QUEUE_DEVICE:
-            CALL_QUEUEINFO_AND_RET(cl_device_id);
-            break;
-        case CL_QUEUE_REFERENCE_COUNT:
-            CALL_QUEUEINFO_AND_RET(cl_uint);
-            break;
-        case CL_QUEUE_PROPERTIES:
-            CALL_QUEUEINFO_AND_RET(cl_command_queue_properties);
-            break;
-        default:
-            break;
-        }
-    });
-}
-
-MAKE_UTEST_FROM_FUNCTION(get_queue_info);
-
-/* ***************************************************** *
- * clGetProgramBuildInfo                                 *
- * ***************************************************** */
-#define CALL_PROG_BUILD_INFO_AND_RET(TYPE)  CALL_INFO_AND_RET(TYPE, \
-             clGetProgramBuildInfo, program, device)
-
-void get_program_build_info(void)
-{
-    map<cl_program_info, void *> maps;
-    cl_build_status expect_status;
-    char build_opt[] = "-emit-llvm";
-    char log[] = "";
-    int sz;
-
-    OCL_CALL (cl_kernel_init, "compiler_if_else.cl", "compiler_if_else", SOURCE, build_opt);
-
-    /* Do our test.*/
-    expect_status = CL_BUILD_SUCCESS;
-    maps.insert(make_pair(CL_PROGRAM_BUILD_STATUS,
-                          (void *)(new Info_Result<cl_build_status>(expect_status))));
-    sz = strlen(build_opt) + 1;
-    maps.insert(make_pair(CL_PROGRAM_BUILD_OPTIONS,
-                          (void *)(new Info_Result<char *>(build_opt, sz))));
-    sz = strlen(log) + 1;
-    maps.insert(make_pair(CL_PROGRAM_BUILD_LOG, /* not supported now, just "" */
-                          (void *)(new Info_Result<char *>(log, sz))));
-
-    std::for_each(maps.begin(), maps.end(), [](pair<cl_program_info, void *> x) {
-        switch (x.first) {
-        case CL_PROGRAM_BUILD_STATUS:
-            CALL_PROG_BUILD_INFO_AND_RET(cl_build_status);
-            break;
-        case CL_PROGRAM_BUILD_OPTIONS:
-            CALL_PROG_BUILD_INFO_AND_RET(char *);
-            break;
-        case CL_PROGRAM_BUILD_LOG:
-            CALL_PROG_BUILD_INFO_AND_RET(char *);
-            break;
-        default:
-            break;
-        }
-    });
-}
-
-MAKE_UTEST_FROM_FUNCTION(get_program_build_info);
-
-/* ***************************************************** *
- * clGetContextInfo                                      *
- * ***************************************************** */
-#define CALL_CONTEXTINFO_AND_RET(TYPE) CALL_INFO_AND_RET(TYPE, clGetContextInfo, ctx)
-
-void get_context_info(void)
-{
-    /* use the compiler_fabs case to test us. */
-    const size_t n = 16;
-    map<cl_context_info, void *> maps;
-    int expect_ref;
-
-    OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-    OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-    OCL_CREATE_KERNEL("compiler_fabs");
-
-    OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-    OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-
-    globals[0] = 16;
-    locals[0] = 16;
-
-    OCL_MAP_BUFFER(0);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-        ((float*)buf_data[0])[i] = .1f * (rand() & 15) - .75f;
-    OCL_UNMAP_BUFFER(0);
-
-    // Run the kernel on GPU
-    OCL_NDRANGE(1);
-
-    /* Do our test.*/
-    expect_ref = 1;
-    maps.insert(make_pair(CL_CONTEXT_NUM_DEVICES,
-                          (void *)(new Info_Result<cl_uint>(expect_ref))));
-    maps.insert(make_pair(CL_CONTEXT_DEVICES,
-                          (void *)(new Info_Result<cl_device_id>(device))));
-    // reference count seems depends on the implementation
-    expect_ref = NO_STANDARD_REF;
-    maps.insert(make_pair(CL_CONTEXT_REFERENCE_COUNT,
-                          (void *)(new Info_Result<>(((cl_uint)expect_ref)))));
-
-    maps.insert(make_pair(CL_CONTEXT_PROPERTIES,
-                          (void *)(new Info_Result<char*>(
-                                       (const char*)NULL, 100*sizeof(cl_context_properties)))));
-
-    std::for_each(maps.begin(), maps.end(), [](pair<cl_context_info, void *> x) {
-        switch (x.first) {
-        case CL_CONTEXT_NUM_DEVICES:
-            CALL_CONTEXTINFO_AND_RET(cl_uint);
-            break;
-        case CL_CONTEXT_DEVICES:
-            CALL_CONTEXTINFO_AND_RET(cl_device_id);
-            break;
-        case CL_CONTEXT_REFERENCE_COUNT:
-            CALL_CONTEXTINFO_AND_RET(cl_uint);
-            break;
-        case CL_CONTEXT_PROPERTIES:
-            CALL_CONTEXTINFO_AND_RET(char*);
-            break;
-        default:
-            break;
-        }
-    });
-}
-
-MAKE_UTEST_FROM_FUNCTION(get_context_info);
-
-/* ***************************************************** *
- * clGetKernelInfo                                      *
- * ***************************************************** */
-#define CALL_KERNELINFO_AND_RET(TYPE) CALL_INFO_AND_RET(TYPE, clGetKernelInfo, kernel)
-
-void get_kernel_info(void)
-{
-    /* use the compiler_fabs case to test us. */
-    const size_t n = 16;
-    map<cl_kernel_info, void *> maps;
-    int expect_ref;
-
-    OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-    OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-    OCL_CREATE_KERNEL("compiler_fabs");
-
-    OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-    OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-
-    // Run the kernel on GPU
-
-    maps.insert(make_pair(CL_KERNEL_PROGRAM,
-                          (void *)(new Info_Result<cl_program>(program))));
-    maps.insert(make_pair(CL_KERNEL_CONTEXT,
-                          (void *)(new Info_Result<cl_context>(ctx))));
-    // reference count seems depends on the implementation
-    expect_ref = NO_STANDARD_REF;
-    maps.insert(make_pair(CL_KERNEL_REFERENCE_COUNT,
-                          (void *)(new Info_Result<>(((cl_uint)expect_ref)))));
-
-    expect_ref = 2;
-    maps.insert(make_pair(CL_KERNEL_NUM_ARGS,
-                          (void *)(new Info_Result<cl_uint>(expect_ref))));
-
-    const char * expected_name = "compiler_fabs";
-    maps.insert(make_pair(CL_KERNEL_FUNCTION_NAME,
-                          (void *)(new Info_Result<char*>(expected_name, strlen(expected_name)+1))));
-
-    std::for_each(maps.begin(), maps.end(), [](pair<cl_kernel_info, void *> x) {
-        switch (x.first) {
-        case CL_KERNEL_PROGRAM:
-            CALL_KERNELINFO_AND_RET(cl_program);
-            break;
-        case CL_KERNEL_CONTEXT:
-            CALL_KERNELINFO_AND_RET(cl_context);
-            break;
-        case CL_KERNEL_REFERENCE_COUNT:
-            CALL_KERNELINFO_AND_RET(cl_uint);
-            break;
-        case CL_KERNEL_NUM_ARGS:
-            CALL_KERNELINFO_AND_RET(cl_uint);
-            break;
-        case CL_KERNEL_FUNCTION_NAME:
-            CALL_KERNELINFO_AND_RET(char*);
-            break;
-        default:
-            break;
-        }
-    });
-}
-
-MAKE_UTEST_FROM_FUNCTION(get_kernel_info);
-
-/* ***************************************************** *
- * clGetImageInfo                                        *
- * ***************************************************** */
-void get_image_info(void)
-{
-  const size_t w = 512;
-  const size_t h = 512;
-  cl_image_format format;
-  format.image_channel_order = CL_RGBA;
-  format.image_channel_data_type = CL_UNSIGNED_INT8;
-  OCL_CREATE_IMAGE2D(buf[0], 0, &format, w, h, 0, NULL);
-  cl_mem image = buf[0];
-
-  cl_image_format ret_format;
-  OCL_CALL(clGetImageInfo, image, CL_IMAGE_FORMAT, sizeof(ret_format), &ret_format, NULL);
-  OCL_ASSERT(format.image_channel_order == ret_format.image_channel_order);
-  OCL_ASSERT(format.image_channel_data_type == ret_format.image_channel_data_type);
-
-  size_t element_size;
-  OCL_CALL(clGetImageInfo, image, CL_IMAGE_ELEMENT_SIZE, sizeof(element_size), &element_size, NULL);
-  OCL_ASSERT(element_size == 4);
-
-  size_t row_pitch;
-  OCL_CALL(clGetImageInfo, image, CL_IMAGE_ROW_PITCH, sizeof(row_pitch), &row_pitch, NULL);
-  OCL_ASSERT(row_pitch == 4 * w);
-
-  size_t slice_pitch;
-  OCL_CALL(clGetImageInfo, image, CL_IMAGE_SLICE_PITCH, sizeof(slice_pitch), &slice_pitch, NULL);
-  OCL_ASSERT(slice_pitch == 0);
-
-  size_t width;
-  OCL_CALL(clGetImageInfo, image, CL_IMAGE_WIDTH, sizeof(width), &width, NULL);
-  OCL_ASSERT(width == w);
-
-  size_t height;
-  OCL_CALL(clGetImageInfo, image, CL_IMAGE_HEIGHT, sizeof(height), &height, NULL);
-  OCL_ASSERT(height == h);
-
-  size_t depth;
-  OCL_CALL(clGetImageInfo, image, CL_IMAGE_DEPTH, sizeof(depth), &depth, NULL);
-  OCL_ASSERT(depth == 1);
-}
-
-MAKE_UTEST_FROM_FUNCTION(get_image_info);
-
-/* ***************************************************** *
- * clGetMemObjectInfo                                    *
- * ***************************************************** */
-#define CALL_GETMEMINFO_AND_RET(TYPE) CALL_INFO_AND_RET(TYPE, clGetMemObjectInfo, (buf[0]))
-
-void get_mem_info(void)
-{
-    map<cl_mem_info, void *> maps;
-    int expect_ref;
-    cl_mem sub_buf;
-    cl_int error;
-
-    OCL_CREATE_BUFFER(buf[1], 0, 4096, NULL);
-
-    cl_buffer_region region;
-    region.origin = 1024;
-    region.size = 2048;
-    sub_buf = clCreateSubBuffer(buf[1], 0, CL_BUFFER_CREATE_TYPE_REGION, &region, &error );
-    buf[0] = sub_buf;
-    OCL_ASSERT(error == CL_SUCCESS);
-
-    void * map_ptr = clEnqueueMapBuffer(queue, buf[0], 1, CL_MAP_READ, 0, 64, 0, NULL, NULL, NULL);
-
-    expect_ref = CL_MEM_OBJECT_BUFFER;
-    maps.insert(make_pair(CL_MEM_TYPE,
-                          (void *)(new Info_Result<cl_mem_object_type>((cl_mem_object_type)expect_ref))));
-    expect_ref = 0;
-    maps.insert(make_pair(CL_MEM_FLAGS,
-                          (void *)(new Info_Result<cl_mem_flags>(expect_ref))));
-    expect_ref = 2048;
-    maps.insert(make_pair(CL_MEM_SIZE,
-                          (void *)(new Info_Result<size_t>(((size_t)expect_ref)))));
-    expect_ref = 0;
-    maps.insert(make_pair(CL_MEM_HOST_PTR,
-                          (void *)(new Info_Result<size_t>(((size_t)expect_ref)))));
-    expect_ref = 1;
-    maps.insert(make_pair(CL_MEM_MAP_COUNT,
-                          (void *)(new Info_Result<cl_uint>(((cl_uint)expect_ref)))));
-    expect_ref = 1;
-    maps.insert(make_pair(CL_MEM_REFERENCE_COUNT,
-                          (void *)(new Info_Result<cl_uint>(((cl_uint)expect_ref)))));
-    maps.insert(make_pair(CL_MEM_CONTEXT,
-                          (void *)(new Info_Result<cl_context>(((cl_context)ctx)))));
-    maps.insert(make_pair(CL_MEM_ASSOCIATED_MEMOBJECT,
-                          (void *)(new Info_Result<cl_mem>(((cl_mem)buf[1])))));
-    expect_ref = 1024;
-    maps.insert(make_pair(CL_MEM_OFFSET,
-                          (void *)(new Info_Result<size_t>(((size_t)expect_ref)))));
-
-    std::for_each(maps.begin(), maps.end(), [](pair<cl_mem_info, void *> x) {
-        switch (x.first) {
-        case CL_MEM_TYPE:
-            CALL_GETMEMINFO_AND_RET(cl_mem_object_type);
-            break;
-        case CL_MEM_FLAGS:
-            CALL_GETMEMINFO_AND_RET(cl_mem_flags);
-            break;
-        case CL_MEM_SIZE:
-            CALL_GETMEMINFO_AND_RET(size_t);
-            break;
-        case CL_MEM_HOST_PTR:
-            CALL_GETMEMINFO_AND_RET(size_t);
-            break;
-        case CL_MEM_MAP_COUNT:
-            CALL_GETMEMINFO_AND_RET(cl_uint);
-            break;
-        case CL_MEM_REFERENCE_COUNT:
-            CALL_GETMEMINFO_AND_RET(cl_uint);
-            break;
-        case CL_MEM_CONTEXT:
-            CALL_GETMEMINFO_AND_RET(cl_context);
-            break;
-        case CL_MEM_ASSOCIATED_MEMOBJECT:
-            CALL_GETMEMINFO_AND_RET(cl_mem);
-            break;
-        case CL_MEM_OFFSET:
-            CALL_GETMEMINFO_AND_RET(size_t);
-            break;
-
-        default:
-            break;
-        }
-    });
-
-    clEnqueueUnmapMemObject(queue, buf[0], map_ptr, 0, NULL, NULL);
-}
-
-MAKE_UTEST_FROM_FUNCTION(get_mem_info);
diff --git a/utests/kernels/buildin_work_dim.cl b/utests/kernels/buildin_work_dim.cl
new file mode 100644
index 0000000..27c0e18
--- /dev/null
+++ b/utests/kernels/buildin_work_dim.cl
@@ -0,0 +1,3 @@
+kernel void buildin_work_dim( __global int *ret ) {
+  *ret = get_work_dim();
+}
diff --git a/utests/kernels/builtin_acos_asin.cl b/utests/kernels/builtin_acos_asin.cl
new file mode 100644
index 0000000..bba2d21
--- /dev/null
+++ b/utests/kernels/builtin_acos_asin.cl
@@ -0,0 +1,10 @@
+__kernel void builtin_acos_asin(__global float *dst, __global float *src, __global int *max_func) {
+  int i = get_global_id(0);
+  float x = src[i];
+
+  dst[i * (*max_func) + 0] = acos(x);
+  dst[i * (*max_func) + 1] = acosh(x);
+  dst[i * (*max_func) + 2] = asin(x);
+  dst[i * (*max_func) + 3] = asinh(x);
+  dst[i * (*max_func) + 4] = x;
+};
diff --git a/utests/kernels/builtin_atan2.cl b/utests/kernels/builtin_atan2.cl
new file mode 100644
index 0000000..aba73be
--- /dev/null
+++ b/utests/kernels/builtin_atan2.cl
@@ -0,0 +1,4 @@
+kernel void builtin_atan2(global float *y, global float *x, global float *dst) {
+  int i = get_global_id(0);
+  dst[i] = atan2(y[i], x[i]);
+};
diff --git a/utests/kernels/builtin_bitselect.cl b/utests/kernels/builtin_bitselect.cl
new file mode 100644
index 0000000..9b60cbe
--- /dev/null
+++ b/utests/kernels/builtin_bitselect.cl
@@ -0,0 +1,4 @@
+kernel void builtin_bitselect(global float *src1, global float *src2, global float *src3, global float *dst) {
+  int i = get_global_id(0);
+  dst[i] = bitselect(src1[i], src2[i], src3[i]);
+}
diff --git a/utests/kernels/builtin_convert_sat.cl b/utests/kernels/builtin_convert_sat.cl
new file mode 100644
index 0000000..1485f1d
--- /dev/null
+++ b/utests/kernels/builtin_convert_sat.cl
@@ -0,0 +1,48 @@
+#define DEF(DSTTYPE, SRCTYPE) \
+  kernel void builtin_convert_ ## SRCTYPE ## _to_ ## DSTTYPE ## _sat(global SRCTYPE *src, global DSTTYPE *dst) { \
+  int i = get_global_id(0); \
+  dst[i] = convert_ ## DSTTYPE ## _sat(src[i]); \
+}
+
+DEF(char, uchar);
+DEF(char, short);
+DEF(char, ushort);
+DEF(char, int);
+DEF(char, uint);
+DEF(char, long);
+DEF(char, ulong);
+DEF(char, float);
+DEF(uchar, char);
+DEF(uchar, short);
+DEF(uchar, ushort);
+DEF(uchar, int);
+DEF(uchar, uint);
+DEF(uchar, long);
+DEF(uchar, ulong);
+DEF(uchar, float);
+DEF(short, ushort);
+DEF(short, int);
+DEF(short, uint);
+DEF(short, long);
+DEF(short, ulong);
+DEF(short, float);
+DEF(ushort, short);
+DEF(ushort, int);
+DEF(ushort, uint);
+DEF(ushort, long);
+DEF(ushort, ulong);
+DEF(ushort, float);
+DEF(int, uint);
+DEF(int, long);
+DEF(int, ulong);
+DEF(int, float);
+DEF(uint, int);
+DEF(uint, long);
+DEF(uint, ulong);
+DEF(uint, float);
+DEF(long, ulong);
+DEF(long, float);
+DEF(ulong, long);
+DEF(ulong, float);
+#undef DEF
+
diff --git a/utests/kernels/builtin_exp.cl b/utests/kernels/builtin_exp.cl
new file mode 100644
index 0000000..ecc1a3e
--- /dev/null
+++ b/utests/kernels/builtin_exp.cl
@@ -0,0 +1,10 @@
+__kernel void builtin_exp(__global float *dst, __global float *src, __global int *max_func) {
+  int i = get_global_id(0);
+  float x = src[i];
+
+  dst[i * (*max_func) + 0] = exp(x);
+  dst[i * (*max_func) + 1] = exp2(x);
+  dst[i * (*max_func) + 2] = exp10(x);
+  dst[i * (*max_func) + 3] = expm1(x);
+  dst[i * (*max_func) + 4] = x;
+};
diff --git a/utests/kernels/builtin_frexp.cl b/utests/kernels/builtin_frexp.cl
new file mode 100644
index 0000000..766695a
--- /dev/null
+++ b/utests/kernels/builtin_frexp.cl
@@ -0,0 +1,4 @@
+kernel void builtin_frexp(global float *src, global float *dst, global int *e) {
+  int i = get_global_id(0);
+  dst[i] = frexp(src[i], &e[i]);
+}
diff --git a/utests/kernels/builtin_global_id.cl b/utests/kernels/builtin_global_id.cl
new file mode 100644
index 0000000..5b82f9f
--- /dev/null
+++ b/utests/kernels/builtin_global_id.cl
@@ -0,0 +1,4 @@
+kernel void builtin_global_id( __global int *ret) {
+  int id = get_global_id(0) + get_global_id(1)*3 + get_global_id(2)*3*4;
+  ret[id] = id;
+}
diff --git a/utests/kernels/builtin_global_size.cl b/utests/kernels/builtin_global_size.cl
new file mode 100644
index 0000000..e6ddb2f
--- /dev/null
+++ b/utests/kernels/builtin_global_size.cl
@@ -0,0 +1,3 @@
+kernel void builtin_global_size( __global int *ret, __global int *i_dim ) {
+  *ret = get_global_size( *i_dim);
+}
diff --git a/utests/kernels/builtin_lgamma.cl b/utests/kernels/builtin_lgamma.cl
new file mode 100644
index 0000000..85bf859
--- /dev/null
+++ b/utests/kernels/builtin_lgamma.cl
@@ -0,0 +1,4 @@
+kernel void builtin_lgamma(global float *src, global float *dst) {
+  int i = get_global_id(0);
+  dst[i] = lgamma(src[i]);
+};
diff --git a/utests/kernels/builtin_lgamma_r.cl b/utests/kernels/builtin_lgamma_r.cl
new file mode 100644
index 0000000..71fcc36
--- /dev/null
+++ b/utests/kernels/builtin_lgamma_r.cl
@@ -0,0 +1,4 @@
+kernel void builtin_lgamma_r(global float *src, global float *dst, global int *signp) {
+  int i = get_global_id(0);
+  dst[i] = lgamma_r(src[i], signp+i);
+};
diff --git a/utests/kernels/builtin_local_id.cl b/utests/kernels/builtin_local_id.cl
new file mode 100644
index 0000000..489833d
--- /dev/null
+++ b/utests/kernels/builtin_local_id.cl
@@ -0,0 +1,6 @@
+kernel void builtin_local_id( __global int *ret) {
+  int id = get_local_id(0) +  get_group_id(0) * 2 + \
+           get_local_id(1) * 4 + get_group_id(1) * 12 +\
+           get_local_id(2) * 36 + get_group_id(2) * 144;
+  ret[id] = id;
+}
diff --git a/utests/kernels/builtin_local_size.cl b/utests/kernels/builtin_local_size.cl
new file mode 100644
index 0000000..979d907
--- /dev/null
+++ b/utests/kernels/builtin_local_size.cl
@@ -0,0 +1,3 @@
+kernel void builtin_local_size( __global int *ret, __global int *i_dim ) {
+  *ret = get_local_size( *i_dim);
+}
diff --git a/utests/kernels/builtin_mad_sat.cl b/utests/kernels/builtin_mad_sat.cl
new file mode 100644
index 0000000..1739a4d
--- /dev/null
+++ b/utests/kernels/builtin_mad_sat.cl
@@ -0,0 +1,4 @@
+kernel void builtin_mad_sat(global short *src1, global short *src2, global short *src3, global short *dst) {
+  short i = get_global_id(0);
+  dst[i] = mad_sat(src1[i], src2[i], src3[i]);
+}
diff --git a/utests/kernels/builtin_modf.cl b/utests/kernels/builtin_modf.cl
new file mode 100644
index 0000000..43630ed
--- /dev/null
+++ b/utests/kernels/builtin_modf.cl
@@ -0,0 +1,6 @@
+kernel void builtin_modf(global float *src, global float *dst, global float *it) {
+  int i = get_global_id(0);
+  float x;
+  dst[i] = modf(src[i], &x);
+  it[i] = x;
+}
diff --git a/utests/kernels/builtin_nextafter.cl b/utests/kernels/builtin_nextafter.cl
new file mode 100644
index 0000000..3945e34
--- /dev/null
+++ b/utests/kernels/builtin_nextafter.cl
@@ -0,0 +1,4 @@
+kernel void builtin_nextafter(global float *src1, global float *src2, global float *dst) {
+  int i = get_global_id(0);
+  dst[i] = nextafter(src1[i], src2[i]);
+}
diff --git a/utests/kernels/builtin_num_groups.cl b/utests/kernels/builtin_num_groups.cl
new file mode 100644
index 0000000..719d25d
--- /dev/null
+++ b/utests/kernels/builtin_num_groups.cl
@@ -0,0 +1,3 @@
+kernel void builtin_num_groups( __global int *ret, __global int *i_dim ) {
+  *ret = get_num_groups( *i_dim);
+}
diff --git a/utests/kernels/builtin_pow.cl b/utests/kernels/builtin_pow.cl
new file mode 100644
index 0000000..17d753e
--- /dev/null
+++ b/utests/kernels/builtin_pow.cl
@@ -0,0 +1,7 @@
+kernel void builtin_pow(global float *dst, global float *src1, global float *src2, global int *max_func) {
+
+  int i = get_global_id(0);
+  dst[i * (*max_func) + 0] = pow(src1[i], src2[i]);
+  dst[i * (*max_func) + 1] = src1[i];
+
+}
diff --git a/utests/kernels/builtin_remquo.cl b/utests/kernels/builtin_remquo.cl
new file mode 100644
index 0000000..d66c164
--- /dev/null
+++ b/utests/kernels/builtin_remquo.cl
@@ -0,0 +1,6 @@
+kernel void builtin_remquo(global float *x, global float *y, global float *dst, global int *quo) {
+  int i = get_global_id(0);
+  int q;
+  dst[i] = remquo(x[i], y[i], & q);
+  quo[i] = q;
+}
diff --git a/utests/kernels/builtin_shuffle.cl b/utests/kernels/builtin_shuffle.cl
new file mode 100644
index 0000000..ad988b9
--- /dev/null
+++ b/utests/kernels/builtin_shuffle.cl
@@ -0,0 +1,8 @@
+kernel void builtin_shuffle(global float *src1, global float *src2, global float *dst1, global float *dst2) {
+  int i = get_global_id(0);
+  float2 src = (float2)(src1[i], src2[i]);
+  uint2 mask = (uint2)(1, 0);
+  float2 dst = shuffle(src, mask);
+  dst1[i] = dst.s0;
+  dst2[i] = dst.s1;
+}
diff --git a/utests/kernels/builtin_shuffle2.cl b/utests/kernels/builtin_shuffle2.cl
new file mode 100644
index 0000000..1a122d4
--- /dev/null
+++ b/utests/kernels/builtin_shuffle2.cl
@@ -0,0 +1,13 @@
+kernel void builtin_shuffle2(global float *src1, global float *src2, global float *dst1, global float *dst2) {
+  int i = get_global_id(0);
+  float2 x = (float2)(src1[i], src2[i]);
+  float2 y = (float2)(1234, 5678);
+  uint4 mask = (uint4)(1, 0, 0, 0);
+  float4 v1 = shuffle2(x, y, mask);
+  float16 x2 = 0;
+  float16 y2 = (float16)(src1[i], src2[i], 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  uint16 mask2 = (uint16)(17, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+  float16 v2 = shuffle2(x2, y2, mask2);
+  dst1[i] = v1.s0 + v2.s0;
+  dst2[i] = v1.s1 + v2.s1;
+}
diff --git a/utests/kernels/builtin_sign.cl b/utests/kernels/builtin_sign.cl
new file mode 100644
index 0000000..ff9a66b
--- /dev/null
+++ b/utests/kernels/builtin_sign.cl
@@ -0,0 +1,4 @@
+kernel void builtin_sign(global float *src, global float *dst) {
+  int i = get_global_id(0);
+  dst[i] = sign(src[i]);
+}
diff --git a/utests/kernels/builtin_sinpi.cl b/utests/kernels/builtin_sinpi.cl
new file mode 100644
index 0000000..134152d
--- /dev/null
+++ b/utests/kernels/builtin_sinpi.cl
@@ -0,0 +1,4 @@
+kernel void builtin_sinpi(global float *src, global float *dst) {
+  int i = get_global_id(0);
+  dst[i] = sinpi(src[i]);
+};
diff --git a/utests/kernels/builtin_tgamma.cl b/utests/kernels/builtin_tgamma.cl
new file mode 100644
index 0000000..1f7abc3
--- /dev/null
+++ b/utests/kernels/builtin_tgamma.cl
@@ -0,0 +1,4 @@
+kernel void builtin_tgamma(global float *src, global float *dst) {
+  int i = get_global_id(0);
+  dst[i] = tgamma(src[i]);
+};
diff --git a/utests/kernels/compiler_abs.cl b/utests/kernels/compiler_abs.cl
new file mode 100644
index 0000000..549575c
--- /dev/null
+++ b/utests/kernels/compiler_abs.cl
@@ -0,0 +1,28 @@
+#define COMPILER_ABS_FUNC_1(TYPE, UTYPE) \
+    kernel void compiler_abs_##TYPE ( \
+           global TYPE* src, global UTYPE* dst) { \
+        int i = get_global_id(0); \
+        dst[i] = abs(src[i]);     \
+    }
+
+#define COMPILER_ABS_FUNC_N(TYPE, UTYPE, N) \
+    kernel void compiler_abs_##TYPE##N ( \
+           global TYPE##N* src, global UTYPE##N* dst) { \
+        int i = get_global_id(0); \
+        dst[i] = abs(src[i]);     \
+    }
+
+#define COMPILER_ABS(TYPE, UTYPE)  \
+    COMPILER_ABS_FUNC_1(TYPE, UTYPE) \
+    COMPILER_ABS_FUNC_N(TYPE, UTYPE, 2) \
+    COMPILER_ABS_FUNC_N(TYPE, UTYPE, 3) \
+    COMPILER_ABS_FUNC_N(TYPE, UTYPE, 4) \
+    COMPILER_ABS_FUNC_N(TYPE, UTYPE, 8) \
+    COMPILER_ABS_FUNC_N(TYPE, UTYPE, 16)
+
+COMPILER_ABS(int, uint)
+COMPILER_ABS(uint, uint)
+COMPILER_ABS(char, uchar)
+COMPILER_ABS(uchar, uchar)
+COMPILER_ABS(short, ushort)
+COMPILER_ABS(ushort, ushort)
diff --git a/utests/kernels/compiler_abs_diff.cl b/utests/kernels/compiler_abs_diff.cl
new file mode 100644
index 0000000..1f30df4
--- /dev/null
+++ b/utests/kernels/compiler_abs_diff.cl
@@ -0,0 +1,30 @@
+#define COMPILER_ABS_FUNC_1(TYPE, UTYPE) \
+    kernel void compiler_abs_diff_##TYPE ( \
+           global TYPE* x, global TYPE* y, global UTYPE* diff) { \
+        int i = get_global_id(0); \
+        diff[i] = abs_diff(x[i], y[i]);     \
+    }
+
+#define COMPILER_ABS_FUNC_N(TYPE, UTYPE, N) \
+    kernel void compiler_abs_diff_##TYPE##N ( \
+           global TYPE##N* x, global TYPE##N* y, global UTYPE##N* diff) { \
+        int i = get_global_id(0); \
+        diff[i] = abs_diff(x[i], y[i]);     \
+    }
+
+#define COMPILER_ABS(TYPE, UTYPE)  \
+    COMPILER_ABS_FUNC_1(TYPE, UTYPE) \
+    COMPILER_ABS_FUNC_N(TYPE, UTYPE, 2) \
+    COMPILER_ABS_FUNC_N(TYPE, UTYPE, 3) \
+    COMPILER_ABS_FUNC_N(TYPE, UTYPE, 4) \
+    COMPILER_ABS_FUNC_N(TYPE, UTYPE, 8) \
+    COMPILER_ABS_FUNC_N(TYPE, UTYPE, 16)
+
+COMPILER_ABS(int, uint)
+COMPILER_ABS(uint, uint)
+COMPILER_ABS(char, uchar)
+COMPILER_ABS(uchar, uchar)
+COMPILER_ABS(short, ushort)
+COMPILER_ABS(ushort, ushort)
+COMPILER_ABS(long, ulong)
+COMPILER_ABS(ulong, ulong)
diff --git a/utests/kernels/compiler_address_space.cl b/utests/kernels/compiler_address_space.cl
new file mode 100644
index 0000000..68b7746
--- /dev/null
+++ b/utests/kernels/compiler_address_space.cl
@@ -0,0 +1,9 @@
+/* test OpenCL 1.1 Address Space Qualifiers (section 6.5) */
+__constant float cf1[] = {1, 2, 3};
+constant float cf2[] = {4, 5, 6};
+__kernel void compiler_address_space(__global float *gf1, global float *gf2) {
+  __local float lf1[4];
+  local float lf2[4];
+  __private float pf1[4];
+  private float pf2[4];
+}
diff --git a/utests/kernels/compiler_argument_structure.cl b/utests/kernels/compiler_argument_structure.cl
new file mode 100644
index 0000000..ab7896e
--- /dev/null
+++ b/utests/kernels/compiler_argument_structure.cl
@@ -0,0 +1,9 @@
+struct hop { int x, y; };
+
+__kernel void
+compiler_argument_structure(__global int *dst, struct hop h)
+{
+  int id = (int)get_global_id(0);
+  dst[id] = h.x + h.y;
+}
+
diff --git a/utests/kernels/compiler_argument_structure_indirect.cl b/utests/kernels/compiler_argument_structure_indirect.cl
new file mode 100644
index 0000000..c4b062f
--- /dev/null
+++ b/utests/kernels/compiler_argument_structure_indirect.cl
@@ -0,0 +1,9 @@
+struct hop { int x[16]; };
+
+__kernel void
+compiler_argument_structure(__global int *dst, struct hop h)
+{
+  int id = (int)get_global_id(0);
+  dst[id] = h.x[get_local_id(0)];
+}
+
diff --git a/utests/kernels/compiler_arith_shift_right.cl b/utests/kernels/compiler_arith_shift_right.cl
new file mode 100644
index 0000000..03a4d8d
--- /dev/null
+++ b/utests/kernels/compiler_arith_shift_right.cl
@@ -0,0 +1,4 @@
+kernel void compiler_arith_shift_right(global int *src, global int *dst) {
+    int i = get_global_id(0);
+    dst[i] = src[i] >> 24;
+}
diff --git a/utests/kernels/compiler_array.cl b/utests/kernels/compiler_array.cl
new file mode 100644
index 0000000..5dce4d9
--- /dev/null
+++ b/utests/kernels/compiler_array.cl
@@ -0,0 +1,14 @@
+__kernel void
+compiler_array(__global int *src, __global int *dst)
+{
+  int array[16];
+  int i;
+  for (i = 0; i < 16; ++i) {
+    if (src[0] > 10)
+      array[i] = get_local_id(0);
+    else
+      array[15 - i] = 3 + get_local_id(1);
+  }
+  dst[get_global_id(0)] = array[get_local_id(0)];
+}
+
diff --git a/utests/kernels/compiler_array0.cl b/utests/kernels/compiler_array0.cl
new file mode 100644
index 0000000..3ab0fb8
--- /dev/null
+++ b/utests/kernels/compiler_array0.cl
@@ -0,0 +1,16 @@
+__kernel void
+compiler_array0(__global int *src, __global int *dst)
+{
+  int i;
+  int final[16];
+  for (i = 0; i < 16; ++i) {
+    int array[16], j;
+    for (j = 0; j < 16; ++j)
+      array[j] = get_global_id(0);
+    for (j = 0; j < src[0]; ++j)
+      array[j] = 1+src[j];
+    final[i] = array[i];
+  }
+  dst[get_global_id(0)] = final[get_global_id(0)];
+}
+
diff --git a/utests/kernels/compiler_array1.cl b/utests/kernels/compiler_array1.cl
new file mode 100644
index 0000000..ad567c2
--- /dev/null
+++ b/utests/kernels/compiler_array1.cl
@@ -0,0 +1,15 @@
+__kernel void
+compiler_array1(__global int *src, __global int *dst)
+{
+  int final[16];
+  for (int i = 0; i < 16; ++i) {
+    int array[16];
+    for (int j = 0; j < src[0]; ++j)
+      array[j] = 1+src[0];
+    for (int j = src[0]; j < 16; ++j)
+      array[j] = get_global_id(0);
+    final[i] = array[i];
+  }
+  dst[get_global_id(0)] = final[get_global_id(0)];
+}
+
diff --git a/utests/kernels/compiler_array2.cl b/utests/kernels/compiler_array2.cl
new file mode 100644
index 0000000..ae73932
--- /dev/null
+++ b/utests/kernels/compiler_array2.cl
@@ -0,0 +1,13 @@
+__kernel void
+compiler_array2(__global int *src, __global int *dst)
+{
+  int final[16];
+  int array[16];
+  for (int j = 0; j < 16; ++j) array[j] = j;
+  for (int j = 0; j < 16; ++j) final[j] = j+1;
+  if (get_global_id(0) == 15)
+    dst[get_global_id(0)] = final[get_global_id(0)];
+  else
+    dst[get_global_id(0)] = array[15 - get_global_id(0)];
+}
+
diff --git a/utests/kernels/compiler_array3.cl b/utests/kernels/compiler_array3.cl
new file mode 100644
index 0000000..152c22a
--- /dev/null
+++ b/utests/kernels/compiler_array3.cl
@@ -0,0 +1,14 @@
+__kernel void
+compiler_array3(__global int *src, __global int *dst)
+{
+  int tmp[32];
+  for (int i = 0; i < 16; ++i) {
+    for (int j = 0; j < 16; ++j)
+      tmp[j] = get_global_id(0);
+    for (int j = 0; j < src[0]; ++j)
+      tmp[j] = 1+src[j];
+    tmp[16+i] = tmp[i];
+  }
+  dst[get_global_id(0)] = tmp[16+get_global_id(0)];
+}
+
diff --git a/utests/kernels/compiler_async_copy.cl b/utests/kernels/compiler_async_copy.cl
new file mode 100644
index 0000000..06ec8e7
--- /dev/null
+++ b/utests/kernels/compiler_async_copy.cl
@@ -0,0 +1,24 @@
+#define DEF(TYPE) \
+kernel void \
+compiler_async_copy_##TYPE(__global TYPE *dst, __global TYPE *src, __local TYPE *localBuffer, int copiesPerWorkItem) \
+{ \
+  event_t event; \
+  int copiesPerWorkgroup = copiesPerWorkItem * get_local_size(0); \
+  int i; \
+  event = async_work_group_copy((__local TYPE*)localBuffer, (__global const TYPE*)(src+copiesPerWorkgroup*get_group_id(0)), (size_t)copiesPerWorkgroup, (event_t)0 ); \
+  wait_group_events( 1, &event ); \
+\
+  event = async_work_group_copy((__global TYPE*)(dst+copiesPerWorkgroup*get_group_id(0)), (__local const TYPE*)localBuffer, (size_t)copiesPerWorkgroup, (event_t)0 ); \
+  wait_group_events( 1, &event ); \
+}
+
+DEF(char2);
+DEF(uchar2);
+DEF(short2);
+DEF(ushort2);
+DEF(int2);
+DEF(uint2);
+DEF(long2);
+DEF(ulong2);
+DEF(float2);
+DEF(double2);
diff --git a/utests/kernels/compiler_async_copy_and_prefetch.cl b/utests/kernels/compiler_async_copy_and_prefetch.cl
new file mode 100644
index 0000000..7489bb0
--- /dev/null
+++ b/utests/kernels/compiler_async_copy_and_prefetch.cl
@@ -0,0 +1,9 @@
+/* test OpenCL 1.1 Async Copies and Prefetch Functions (section 6.11.10) */
+kernel void compiler_async_copy_and_prefetch(__global float *p) {
+  prefetch(p, 10);
+  local float l[10];
+  event_t e[2];
+  async_work_group_copy(l, p, 10, 0);
+  async_work_group_copy(p, l, 10, 0);
+  wait_group_events(2, e);
+}
diff --git a/utests/kernels/compiler_async_stride_copy.cl b/utests/kernels/compiler_async_stride_copy.cl
new file mode 100644
index 0000000..a926588
--- /dev/null
+++ b/utests/kernels/compiler_async_stride_copy.cl
@@ -0,0 +1,16 @@
+__kernel void
+compiler_async_stride_copy(__global char4 *dst, __global char4 *src, __local char4 *localBuffer, int copiesPerWorkItem, int stride)
+{
+  event_t event;
+  int copiesPerWorkgroup = copiesPerWorkItem * get_local_size(0);
+  int i;
+  event = async_work_group_strided_copy( (__local char4*)localBuffer, (__global const char4*)(src+copiesPerWorkgroup*stride*get_group_id(0)), (size_t)copiesPerWorkgroup, (size_t)stride, (event_t)0 );
+  wait_group_events( 1, &event );
+
+  for(i=0; i<copiesPerWorkItem; i++)
+    localBuffer[ get_local_id( 0 )*copiesPerWorkItem+i ] = localBuffer[ get_local_id( 0 )*copiesPerWorkItem+i ] + (char4)(3);
+  barrier(CLK_LOCAL_MEM_FENCE);
+
+  event = async_work_group_strided_copy((__global char4*)(dst+copiesPerWorkgroup*stride*get_group_id(0)), (__local const char4*)localBuffer, (size_t)copiesPerWorkgroup, (size_t)stride, (event_t)0 );
+  wait_group_events( 1, &event );
+}
diff --git a/utests/kernels/compiler_atomic_functions.cl b/utests/kernels/compiler_atomic_functions.cl
new file mode 100644
index 0000000..fbc16fb
--- /dev/null
+++ b/utests/kernels/compiler_atomic_functions.cl
@@ -0,0 +1,50 @@
+__kernel void compiler_atomic_functions(__global int *dst, __local int *tmp, __global int *src) {
+  int lid = get_local_id(0);
+  int i = lid % 12;
+  if(lid == 0) {
+    for(int j=0; j<12; j=j+1) {
+      atomic_xchg(&tmp[j], 0);
+    }
+    atomic_xchg(&tmp[4], -1);
+  }
+  barrier(CLK_LOCAL_MEM_FENCE);
+
+  switch(i) {
+    case 0: atomic_inc(&tmp[i]); break;
+    case 1: atomic_dec(&tmp[i]); break;
+    case 2: atomic_add(&tmp[i], src[lid]); break;
+    case 3: atomic_sub(&tmp[i], src[lid]); break;
+    case 4: atomic_and(&tmp[i], ~(src[lid]<<(lid / 16))); break;
+    case 5: atomic_or (&tmp[i], src[lid]<<(lid / 16)); break;
+    case 6: atomic_xor(&tmp[i], src[lid]); break;
+    case 7: atomic_min(&tmp[i], -src[lid]); break;
+    case 8: atomic_max(&tmp[i], src[lid]); break;
+    case 9: atomic_min((__local unsigned int *)&tmp[i], -src[lid]); break;
+    case 10: atomic_max((__local unsigned int *)&tmp[i], src[lid]); break;
+    case 11: atomic_cmpxchg(&(tmp[i]), 0, src[10]); break;
+    default:  break;
+  }
+
+  switch(i) {
+    case 0: atomic_inc(&dst[i]); break;
+    case 1: atomic_dec(&dst[i]); break;
+    case 2: atomic_add(&dst[i], src[lid]); break;
+    case 3: atomic_sub(&dst[i], src[lid]); break;
+    case 4: atomic_and(&dst[i], ~(src[lid]<<(lid / 16))); break;
+    case 5: atomic_or (&dst[i], src[lid]<<(lid / 16)); break;
+    case 6: atomic_xor(&dst[i], src[lid]); break;
+    case 7: atomic_min(&dst[i], -src[lid]); break;
+    case 8: atomic_max(&dst[i], src[lid]); break;
+    case 9: atomic_min((__global unsigned int *)&dst[i], -src[lid]); break;
+    case 10: atomic_max((__global unsigned int *)&dst[i], src[lid]); break;
+    case 11: atomic_cmpxchg(&dst[i], 0, src[10]); break;
+    default:  break;
+  }
+
+  barrier(CLK_GLOBAL_MEM_FENCE);
+
+  if(get_global_id(0) == 0) {
+    for(i=0; i<12; i=i+1)
+      atomic_xchg(&dst[i+12], tmp[i]);
+  }
+}
diff --git a/utests/kernels/compiler_basic_arithmetic.cl b/utests/kernels/compiler_basic_arithmetic.cl
new file mode 100644
index 0000000..3e145d8
--- /dev/null
+++ b/utests/kernels/compiler_basic_arithmetic.cl
@@ -0,0 +1,53 @@
+#define DECL_KERNEL_SUB(type)\
+__kernel void \
+compiler_sub_##type(__global type *src0, __global type *src1, __global type *dst) \
+{ \
+  int id = (int)get_global_id(0); \
+  dst[id] = src0[id] - src1[id]; \
+}
+
+#define DECL_KERNEL_ADD(type)\
+__kernel void \
+compiler_add_##type(__global type *src0, __global type *src1, __global type *dst) \
+{ \
+  int id = (int)get_global_id(0); \
+  dst[id] = src0[id] + src1[id]; \
+}
+
+#define DECL_KERNEL_MUL(type)\
+__kernel void \
+compiler_mul_##type(__global type *src0, __global type *src1, __global type *dst) \
+{ \
+  int id = (int)get_global_id(0); \
+  dst[id] = src0[id] * src1[id]; \
+}
+
+#define DECL_KERNEL_DIV(type)\
+__kernel void \
+compiler_div_##type(__global type *src0, __global type *src1, __global type *dst) \
+{ \
+  int id = (int)get_global_id(0); \
+  dst[id] = src0[id] / src1[id]; \
+}
+
+#define DECL_KERNEL_REM(type)\
+__kernel void \
+compiler_rem_##type(__global type *src0, __global type *src1, __global type *dst) \
+{ \
+  int id = (int)get_global_id(0); \
+  dst[id] = src0[id] % src1[id]; \
+}
+
+#define DECL_KERNEL_FOR_ALL_TYPE(op) \
+DECL_KERNEL_##op(char)               \
+DECL_KERNEL_##op(uchar)              \
+DECL_KERNEL_##op(short)              \
+DECL_KERNEL_##op(ushort)             \
+DECL_KERNEL_##op(int)                \
+DECL_KERNEL_##op(uint)
+
+DECL_KERNEL_FOR_ALL_TYPE(SUB)
+DECL_KERNEL_FOR_ALL_TYPE(ADD)
+DECL_KERNEL_FOR_ALL_TYPE(MUL)
+DECL_KERNEL_FOR_ALL_TYPE(DIV)
+DECL_KERNEL_FOR_ALL_TYPE(REM)
diff --git a/utests/kernels/compiler_bool_cross_basic_block.cl b/utests/kernels/compiler_bool_cross_basic_block.cl
new file mode 100644
index 0000000..9aeb16d
--- /dev/null
+++ b/utests/kernels/compiler_bool_cross_basic_block.cl
@@ -0,0 +1,21 @@
+__kernel
+void compiler_bool_cross_basic_block(__global int *src,
+				     __global int *dst,
+				     int scale){
+  int id = (int)get_global_id(0);
+
+  bool isRedRow = false;
+  bool isRed;
+  int val = src[id];
+  for (unsigned int i=0; i<scale; i++, isRedRow = !isRedRow) {
+    if (isRedRow) {
+      isRed= false;
+      for (unsigned int j=0; j < scale; j++, isRed=!isRed) {
+        if (isRed) {
+	  val++;
+        }
+      }
+    }
+  }
+  dst[id] = val;
+}
diff --git a/utests/kernels/compiler_box_blur.cl b/utests/kernels/compiler_box_blur.cl
new file mode 100644
index 0000000..26936e0
--- /dev/null
+++ b/utests/kernels/compiler_box_blur.cl
@@ -0,0 +1,80 @@
+inline float3 unpack_fp3(uint u) {
+  float3 u3;
+  u3.x = (float) (u & 0xff); u >>= 8;
+  u3.y = (float) (u & 0xff); u >>= 8;
+  u3.z = (float) (u & 0xff);
+  return u3;
+}
+
+inline uint pack_fp3(float3 u3) {
+  uint u;
+  u = (((uint) u3.x)) | (((uint) u3.y) << 8) | (((uint) u3.z) << 16);
+  return u;
+}
+
+#define HFILTER3(C0, C1, C2, C3, CURR, LEFT, RIGHT)\
+  float3 C0, C1, C2, C3;\
+  do {\
+    const uint4 from = vload4(CURR, src);\
+    const float3 from0 = unpack_fp3(from.x);\
+    const float3 from1 = unpack_fp3(from.y);\
+    const float3 from2 = unpack_fp3(from.z);\
+    const float3 from3 = unpack_fp3(from.w);\
+    const float3 l = unpack_fp3(src[LEFT]);\
+    const float3 r = unpack_fp3(src[RIGHT]);\
+    C0 = (l+from0+from1);\
+    C1 = (from0+from1+from2);\
+    C2 = (from1+from2+from3);\
+    C3 = (from2+from3+r);\
+  } while(0)
+
+__kernel void compiler_box_blur(__global const uint *src,
+                                __global uint *dst,
+                                int w,
+                                int h,
+                                int chunk)
+{
+  const int x = get_global_id(0);
+  int y = get_global_id(1)*chunk;
+  const int yend = min(y + chunk, h); /* we process a tile in the image */
+
+  /* Current line (left (1 pixel), center (4 pixels), right (1 pixel)) */
+  const int left = max(4*x-1, 0) + y*w;
+  const int right = min(4*x+4, w-1) + y*w;
+  int curr = x + y*(w>>2);
+  HFILTER3(curr0, curr1, curr2, curr3, curr, left, right);
+
+  /* Top line (left (1 pixel), center (4 pixels), right (1 pixel)) */
+  const int ytop = max(y-1,0);
+  const int topLeft = max(4*x-1, 0) + ytop*w;
+  const int topRight = min(4*x+4, w-1) + ytop*w;
+  const int top = x + ytop*(w>>2);
+  HFILTER3(top0, top1, top2, top3, top, topLeft, topRight);
+
+  /* To guard bottom line */
+  const int maxBottom = x + (h-1)*(w>>2);
+  const int maxBottomLeft = max(4*x-1,0) + (h-1)*w;
+  const int maxBottomRight = min(4*x+4,w-1) + (h-1)*w;
+
+  /* We use a short 3 pixel sliding window */
+  const int ybottom = min(y+1,h-1);
+  int bottomLeft = max(4*x-1, 0) + ybottom*w;
+  int bottomRight = min(4*x+4, w-1) + ybottom*w;
+  int bottom = x + ybottom*(w>>2);
+
+  /* Top down sliding window */
+  for (; y < yend; ++y, curr += (w>>2), bottom += (w>>2), bottomLeft += w, bottomRight += w) {
+    const int center = min(bottom, maxBottom);
+    const int left = min(bottomLeft, maxBottomLeft);
+    const int right = min(bottomRight, maxBottomRight);
+    HFILTER3(bottom0, bottom1, bottom2, bottom3, center, left, right);
+    const float3 to0 = (top0+curr0+bottom0)*(1.f/9.f);
+    const float3 to1 = (top1+curr1+bottom1)*(1.f/9.f);
+    const float3 to2 = (top2+curr2+bottom2)*(1.f/9.f);
+    const float3 to3 = (top3+curr3+bottom3)*(1.f/9.f);
+    const uint4 to = (uint4)(pack_fp3(to0),pack_fp3(to1),pack_fp3(to2),pack_fp3(to3));
+    vstore4(to, curr, dst);
+    top0 = curr0; top1 = curr1; top2 = curr2; top3 = curr3;
+    curr0 = bottom0; curr1 = bottom1; curr2 = bottom2; curr3 = bottom3;
+  }
+}
diff --git a/utests/kernels/compiler_box_blur_float.cl b/utests/kernels/compiler_box_blur_float.cl
new file mode 100644
index 0000000..6f4e1b9
--- /dev/null
+++ b/utests/kernels/compiler_box_blur_float.cl
@@ -0,0 +1,48 @@
+__kernel void compiler_box_blur_float(__global const float4 *src,
+                                      __global float4 *dst,
+                                      int w,
+                                      int h,
+                                      int chunk)
+{
+  const int x = get_global_id(0);
+  int y = get_global_id(1)*chunk;
+  const int yend = min(y+chunk, h); /* we process a tile in the image */
+
+  /* Current line (left (1 pixel), center (4 pixels), right (1 pixel)) */
+  const int left = max(x-1,0) + y*w;
+  const int right = min(x+1,w-1) + y*w;
+  int curr = x + y*w;
+  float4 currPixel = src[left] + src[curr] + src[right];
+
+  /* Top line (left (1 pixel), center (4 pixels), right (1 pixel)) */
+  const int ytop = max(y-1,0);
+  const int topLeft = max(x-1,0) + ytop*w;
+  const int topRight = min(x+1,w-1) + ytop*w;
+  const int top = x + ytop*w;
+  float4 topPixel = src[topLeft] + src[top] + src[topRight];
+
+  /* To guard bottom line */
+  const int maxBottom = x + (h-1)*w;
+  const int maxBottomLeft = max(x-1,0) + (h-1)*w;
+  const int maxBottomRight = min(x+1,w-1) + (h-1)*w;
+
+  /* We use a short 4 pixel sliding window */
+  const int ybottom = min(y+1,h-1);
+  int bottomLeft = max(x-1 + ybottom*w, ybottom*w);
+  int bottomRight = min(x+1 + ybottom*w, ybottom*w+w-1);
+  int bottom = x + ybottom*w;
+
+
+  /* Top down sliding window */
+  for (; y < yend; ++y, curr += w, bottom += w, bottomLeft += w, bottomRight += w) {
+    const int center = min(bottom, maxBottom);
+    const int left = min(bottomLeft, maxBottomLeft);
+    const int right = min(bottomRight, maxBottomRight);
+    const float4 bottomPixel = src[left] + src[center] + src[right];
+    const float4 to = (bottomPixel + currPixel + topPixel) * (1.f/9.f);
+    dst[curr] = to;
+    topPixel = currPixel;
+    currPixel = bottomPixel;
+  }
+}
+
diff --git a/utests/kernels/compiler_box_blur_float_ref.bmp b/utests/kernels/compiler_box_blur_float_ref.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..149cbba1d8bae1fdd4e4803970e06ec1682a40fc
GIT binary patch
literal 49206
zcmZwQXWJ%KmA7%{Tg+Pn(kLhjf(Rlu2xc*%h!M;=D`LPL#w;qJB7%wt=GGQ4Ac_H6
zZAlWo%>1fO?ltAzvybDc*;ie=_Fn5;|F!n6>u!AZKI6C>AF#ILT=)2Y7vBH>{_6q%
zt*70%UjO6r%x6CHS<iabi(mZWcfIRfU;EnEzW at F2f9XqKdfVIH_WIYq{v#jx$alW;
zoolYS=ErNh`s%B{@P#kD^{sDx%2S^5xW_&2=%bH*)T18dTIbkfkA3u`AN`oeJm#^F
zeeB~O|M(M5IN_LMj`7ta9`T6o`^r<#d*1Ut^q~)Z{No at 0;0HgbfBNaCA9d7G#ytGt
z4?p6FBMv|Oa2?M+{pnAC=}TYwhBv&yayrjg+pAyw>JNP21FZ7+CqMbg&#di#4r!nM
z^rt`dsZSZ8W60+}|M|~-?sH%M@|VBzm9JcU at x|Z#<~Ogr@=Ct^<R?G*#V>ww{q@)X
z{`bHC%U}L-;J|^~ZoBRFwdojOm2=NM*P^d{<ty26)>&t<;?z at 5<p`Tu$dVuZ=tsZ&
z<u6Tg^UXK!- at o6wFMQz(pY)_B8Ft1QX8`-67rp4^FMqk4XP$ZHv!DHJ{nx(swXb^B
ztDgJZ=NiM)lTJDbE>U>PTi){ZuYWzrZ+`QetsDPque~<@Km6ejIU+O$Kk<oAL=`t}
zjlj|IKmPdR&3W?4CqvCnUp?}Xk2J<rIIPGc{9$~@JKn*h(@s0B8C)Osu!rs0vquz6
zB`#;5eKu3^cYXfzpU+=+-v0KtfB3^6jz7Fw_=Eh}&wdtg<ZJrw_=;@6r>;vcz4Wrn
zF2kRwe)hAU{rcCx{@w3>_s2i}@o#_o+u#5G_kaECU&!Bi=bd1F;~U=~NVpj63gdI0
z^PDF?`N>@47YiAG;e{7ob=6hP^QS-k>86`*`qsC;^`<wy33efP>QkSp^MV(=K<v&r
z=N#d~{3S1WiD;g8-g!JS1|?pT+!LPg1a5xyt6#;R*@S1z$3FHk`WIqS(b)XOFMjbo
z?|BanETMDIrZEX&@Xg6c-}(r<5LiO6++>ECktYC7J?&{v!{0E^8p(`8U{0zKWn(A-
zbK{9eWBmKy|9*yj;uD_$IsR0Eu&a-5`ic(w3V)5+7hQDGC6`=6{5<;J_r6C_`}Xbo
z&2N75hd=y*_;0=S)_?rtANZ61zyJO3U;XM=o_fVAUO~6W^A|2KB|d0-_wL13T*#nk
zLL`ndND6q6kp{D0jN~}4g#h_xGp!~Z at qh4xAN-JqJOsD+fA_oJB`}j4!%b3QYWyVv
zFD|&?f|tGQWehm+#1q2{7s!-<+;PX52fFkRtou?GSelW%V*0w*y-uxTp7aEt4GlJx
zkw+eRB>fw2Dk;En<LOY+d5Qv|c;`FcDKUdQ3P+gE<1Ym9heBL at Mf_45e7LT-;tDmE
zQ|bo(M4R~k`OkmifAHWz`j_d-BY>Jk!6)PBF at yVx^ZVZSzRH@)M)pD`h!V&AzA_B?
znrC}T2t?E4nvQ7l{Xq|UkPv{zQ+Q3~aRY>aBlxF(2D6HU;!gum$G-xOHfW+?DxuM6
z-hlQ9`Naz|W&`Hfszs7WAQTpN3ZlUt5e0#hN8D$L5+v!k%x06&iSjk#AIRxH^5UW{
zxg#ivKmOnT_O}U4j{p4UKi?J~;>W+@?<&(3N%WX!Me1d_%$14neeZh_AW=&QtH}l3
z)gyoY^Pi=FJ;kEZ7IPs3Ut>APA?1#wt|G|}9Ee|2&lN7)lL|?1gh&5;VQuwa6x2Er
z5*^=ygB577Yfx+P_m$9S!K8eB{8bw(GD+ at mO7uy~RI=5_;#Fw{UsIGM2;({a?svbN
z>{(9#3_Jh)^W{FrgUo$r23}+0CbM-k{DZIZPw^pstfu&YMz at r&-Eqeq;M1@%^#7XI
zyvB-TNdU0B^U;rfbdt;D_*<6^mIlW at B8b2J?QgAx62F9i!Cc^VmRDHBLUSL1!`4QD
za@?jP1fncn at u&aUe=TwO<(Ko_gJ_ezrUTj<gkyB*U#sIQA<&l*<_BB}5(3*08EA|l
zW(|L50F(4=krmuhz)654tP6;EX at F3m5`;F++*fBLLhxPnHTUCB{B)K0!Qbw at fBoxU
zXXm|ZZR!%45xEqA-6jirX$7_A%wP4hgmp#1<m!VhSosoA`wMx{GlogMD6m{WIqs$=
z1n$G{)TbKrk%gAVU%U*n5dE9^r$7CvE#L<~_<`bvgS~@3!B78W53**@U4?%F=^}~0
zW(@xF%MuEXXXP?csV5Xd+l*9ajDa0+9aYg(KDv6u0NMb=2~Eg|%CqglRUsUx5ge4d
zQ{^E}a7t=*mGLAbk(G$+uDj08i`Xr<+!BAvSNWZPNY3L938qCr5OuUAqdxN)OK9+F
z)-sZ4#ne_}ACW{#kdMa0NLq!UL_iyMU?&P9qWIhL6k$b`h4`yoC>drsnOOagzx_*?
zoI~0!u at wch!3P|@weX)v$%3-tU(&?QQ%*TWF%bpg2cK<9I{tQKOUsM0qwPSX3Wu3J
zLJYzr?v{?ftB>u%q{z;c2}nr+3+3Axo#^m~h~>0o3*(5r(uw`X8*fx<@UQqIF9g!T
zQ(_GQZ6|NnqF`DJ35t`61e6+<2JMC$ZUEmrCefUNR6G_+0X_;rnqN})oOATqF9c$t
z&OGpe547JYL?$$qRHZH-4YQoBiox_R3y4Q$BSn<3Ed=oDgHQP&D<ew1kEAOo#)yTu
zXa?A|8Kao1rNOME5Qg1BAgrtDn56Itgp#EMc}mDUE*vsfpTR`9<xiPHfC*eMI!<s0
zeBzhdgq=J1Bj)5YC(jN)&`AxY+bSRg-#kJIg|_Cwk_gsSloY5+gjAA5ijNu8FdKoj
z$U~iExe!QsSIi{>u=+wU{88c*%kj6IZ at FwR1Edo8P7CQ@SQP<srA#GA;G7k8sGU$#
zuMXx00BC?t{AGa at u)5S{Jn`64Sy(RcmpwAeBsL3!)gLogf;`nGsKZq85)Lzf&ukDd
z(R74>MDbUAI`ap=W4~PP<fB~7YZv$$boO7|5aXcIQ4r&=Un|k at hgS{ch{!tpgD-u|
zaL+yWh=o<ei&m4mG%p0zA0G<`A<;iiB?8MC=_x)^APwLzVeMA7Bope(Wpk2f<sDvc
zOsWvnv~6E at W<w8uE&e7K9eF|FzGc80-}pwgP6~5Dl5)XEi6H1IzjG<gSH5~yF4&*}
zkuo0F*8~xN at R=R|i2_hne#J+^;=?b+NB+uUCm$zIzd0yAPCkl8x>fuEBrqj{4eV(i
zQ{kY+zd(z7`j-OoOE#(e9 at p-^`)*hBTbf9~WHZ`ID2<_tIc>Y6353HZi5g~p)!x;3
z0uVTPCt>lIu*{YVHhQdBhzU5=e^(jgj+y0`&9t&(fR1k!BGI8+t(}Eoa+&d{$^!Kk
zPhmw~`c%7EC4%B87Ip`dOFc`QM4&z8aUAfkl?e2SRpJM;V~@NBpZ)ow_*3lg at 8pS_
zibU9UAIEZrnWs&}RYQh2MOjP#P$*W`5?1wp>W@(R2quL<-C+{^wgZk75lh$#oqyB^
z*&$m!VhP`37=LFT^#^=~k^Rc4(rrR|23CClInE%f9vY19_z0aefzh>-JpB{77 at -H3
zR06ZyWTzOh#LS*GgU8KZ6BN at D4CU+C#KofYmq(_m2?YLFIrf0h+AaTb+2+{K4i1VH
zZMeX{_uhNeSSGR7p$nM=53dQu0+~4lSxyLSKxkOh=5E?1Bz_Z$1<{&;?D6Dd{1rFu
zQ;|f_mt_iwbQ2o2#lh7hasegIDt+l6fAvRSuE{$QRG&Ra-atX5qj|AnxdQHH8g55+
zrKm#VYH9qL%}0afnyY829r+%tZyp`<TTc1n2>xutpTYR6U^onX%7ke6s{o3>;-jjk
ze_jCP6^Yaxbvm(tf8TxgQ7qq?=QPM#f;27WX48DN<<EGjXLbBFMF|<nWh1tg;4cdD
zOX+h?09+FSz%@!M1-ipQYB!8jyk42vxA7PH_!Ga$JO5kMY at YI4rNdA4A;l6fp{f<Q
zk+B00XwunkA}$Eytp32R?BhlfVolGyR{3!*Sri=8mO)h^K{1teJuY6x)0Om(e^qEL
z3=4l+rT at fFnH7J=dy$O4;^X8$Cq_TG*);8Oiis*JuL%;Rz?!XQ=0f0VEz#)|N(K_a
z9Y=SdgcW}qu|P;DWB90Gx&lt{B1?fjYKjaj)-pp!Ws5pph=@qhe>ux+B~EtuXmy1P
z7W}0EP~fN=?qJA%Q4k%K+<oN3E-3oykF^}Fd!46YA#ev(&lXKjsQ?q!V&RT?hCg`-
zqFqCQ6-SNxDvuT={H1f^xATIpc%s1(W#Q1`?<~YG$(05qthH#;O(MiWlLZ3djwLK-
zQPAu`%%B8KL<m at NfiDCORQ6?-AZccmmZz!;dZHi}_;<(NCxa|ua&?uuI)HhW{+VqH
zaB|~_t6`3UfYS+Lu+w?8U13z}MZuL9WM7j7<|G5FJI1iwRk1Y{{g8oSe6Rk*-^|kl
zMFe?47)Ht?E=ZzEkdg?9#tSWI!{4SB{5D at qI{AB1Rex;09oMPC5^X at TScz67F$bY0
z5b?K!DuF-v<jM^2MS(HkU`6>tpaglpAX*1(mZPe$1Y8OTgmNm%o{}SCDtr>qO=d`T
z$}}6}r7i4SkjSbi8yE&JIQT33Y<A}Kh}N^d1)LY|z(u;QL~e4x8O&M*q-5kcZ5VGt
zYKPjjzK)3K3vqSKLh_6LJ?ju<Dg;y^#^YZKxH8iIOaJrEOZj#&KRa~t>}LnNq*yo|
z at kkjY8=5h{Rj at KY0<de#9<c5LCI?>w4R&LA<Z&IGDZy+i8~B?2-C37yW<$od#Z!^>
zk@$58(mZBULe&IuAuu)|=9F$lJD22DcJSA?p>WM3NHWs--}@J0m3_}@=CqcM0i3d;
zrW1dfFJbW~du2p=dPL%oefkf(t5zWJ7gJ;mV;)D!BQ}E|o2ao65GO>oOUF5TBAbav
zSypzSP#jc#CHmG|Zv}_);R28Wt9+K-%0l*E4yr%+^Ve+jsRiFc6(7;}EF~zU;JdO%
z8TZSE6p&f2ma_+`DxEQ4kqGKA`0Bj85HeL%1f_;CG at y(Ch`*(2UJ3{SFLZ2b2Fp9p
z4DS7l{*hsMGqc=BeL?JXL%1!3za`W<{E1daxP?GySmlIc-Dr>a at oyu>A9nB!6Khim
zp9%(%oNX6aO3w;E{?Iv5;IDpy at 5~84;A#SW3V~dZAkv(jq{0Rs at j~B~ZH$yeVV7L6
zV^z&pG^{RjaiC<yq;wVq$zm<!C6}hkdEHRKgh_}6S1GU+2E<j=Od=MT^ASuTK(DFD
zL(Q=Z*ndUAiH=pgW;RtDY^wza7Sd(8CBSihP$GzmVJ3HFq*~|7X5=}-1wnU**PgPd
zhP-StRpd?HhUlZ{SjDl53zlX80^rlX*%CkUaH;<kt4RUcqnuuNl^REM4S8i5Qc1*S
zUSu{|>foUHN?Egsi0KHP%@nTG$YR_iuVKK_szeY1UqNk)fn9!yf+p7_ATb+>JUE)&
zuyRCx79}d_&rL9yBpjtuXCB3e7y9&2vRI3?Xn2JE0_Sm8^AHb2G;cY(yj4WGqZhM5
z!@pyLC71y$VT14Sjy-7}{F)_9ZWW;s0+Wj@{$v2YsnkRDv-%G^1rooe6i~S0>CCSt
zIGo!8WHg at C#VU)6ugRIgWz*__FC&08tq3YLuxpkh7%nI#8sPeT!Q5AxIf>IL)D~lB
zM_viC3pfZ#H at iREq?P&k0-ZzvA8>keV(<6|1?d`wGqn at H{a51!%k2onrtVpb2-y!v
zOu#Xx*|;MFN)3gOH>W5+YvE$B`*|TKW<XmAJgZfC*yAQLtkN-IDP{@g;V<+GmpLmw
zOu}EIRX$RnI!U at vbY@V3q_A87)6!*VURy$Z<1Yk~5qynpB5O8TKr<Sb87~BYBfuA5
zS=yW;rOz1E$)f!n2mA0B3$J6&0MZi~UXYe3NCXBr!+>um<-R+JNhougs>;KD`sWLc
zQ9}EUVZnDL`|1Oya1&X(fU-mUSn(^tc$`xnr(Ovn?-~zpja7hatTK;QMQR~qSZ*!z
z6N#|W2~#m)6#_zl7}2uaQC#s<|Cz0E95?oG5OC|7*>WvmLU!`VE>QmZjfI_N!$C)?
zx>}{ZUZ7RE?TN^+l2P0heDHe<Ue7_x at 1in72w-H1${@t_Mp2IO8vd?6$`0rR+M!7D
zs`)BE{;tk)3M}=~24Pc?icxc5Fq;r?4Lx#_9bDj!Ex1~3PR4UYEPTZP!sb2*IvTuN
z{R at Exl>4O8wN*p`Mw^rnC=_Onzrv!-Dw57=$U88onfjQJJ;Kc6qd6_7ud&ugUUx!c
zIbVcWbrLT{4CfRsxb%ab`X<E`H-T;dEXF84juyW1DviI_>VbdPU3a<DiOUNDdl+o{
zAVTD8Q1A{hc%>WuRD?hH9?`hNJC&bKz~@f86@#_(zk)no7K399y%}HTDi?~RnT0 at z
zxg22xZ~y at r{55w3#kYM0zRB@#30JKnmQ!5(r4<5X2}s9I<ZHtp;b>dJY?gDiG at EH&
zLa~-rW|nR~3M-f()48VK$BG+<z7h)o!e4aMB2?W$Oy$9!>@^)fF%<%Z$g78AnC(D@
zns5jIQT!EmM)C+KvF1qn2cQ1AV=ZDv9$QfWS-d2#Et at -uit+f<Kgg=I0}t{-K!H3e
z7b;CS#Cd^!?DF!3kLG4AI2E6wpkMuAgGr<k$w at 29XRvb7o-0*5Hru}>0!I`F!SZ<X
z7jAQAGyQNR{xXXWabPW&Xqyvlt-k!y^tb#Opae+)h-{an9)BsI5b5KuFAE$>)gn=_
zDLahu6nR?!{R=(6RMahh(X?^6#$VP1U+(Kb&3FZYBb;)zrAl6vIqaq~p(wzm<36<z
zs{5j5QA=ZjzsFfpW0jj?Dg=?o1bJ|P5?o0Nz7oM@!jr929FS2tsS9~qfR2NN0Uq(V
zGHXTiGd2BNh~sjZocLl4cW|H?vNxONRYEh5eu2;tm(f3`gn%*35PEDeM_xmI%U^0}
zLQvx%-+9fX(Z3R5LSEQ^xBT6d9kAO{6?PnyamicGE+St4(GH~nZd<fjs6VzFviG2m
zI-KGQ`(=miLkK*TEcLbEGps66p}<7Ez&E*fir}{)%Ki8YD+?)5A}E#MSgWg!(#LX9
zZoji)O*oiQ3BunhNr-+tMe2YfuPr&S>2pB=v5-wcLp~+QJ{1P`_$xuvF9q;dh~iIO
z$&A0&wE at 9GS0+?Bhrbdem#aU#ApTzc at W+JNTrdxnR`W&Bfq~k=hg~isrUVHJM_A}U
zOD!Vk5ln;t_QVg1kKj+u0bhu{ycloJCbUH2=Q#2j1-4hZ3W|@e?(+pnWr_yiHNOy8
z&MKOS6CVC*j>E0KrRkr+c9Zx=KKQCxx!|keFXC2d50ZEBPxhsNC}`>r_(~A|HEU^-
zk+a;ylfdvdp<^3L$g4l`XAg$Np9rClvko(=5c^eEl-faXrZ at Y$kt$DRpIj*<**J~k
z!$*k^2pV*VKN|5jn|+o^T70ZU8{nH<`BM39y9iT-hO-I`vNsp^U3~;ZM)0MBO1prF
zSAq(GMd^nbbfrUtq)0_<gIAFs_;pHz>d$Ne46u+i)KRFtYlq#nEudV`--=%#z(=05
ztg^HN0KE7U43&EG9sbH1FL<r;XoM|8ZL;_?8+o{NWRSQh^)wH at 0S#7&Jc|jN`DK3m
z<%pv!ydZ3u$O!hBP+FOpRh4~l1fTM~>=3^*KkO<1!e(>FeNmpcFnB2(ms~=tR>X&4
zG*-l2OFiO|T=BQA`&2|}D!kSVU11jmH}irc>RSe|K_=pF)A0&S>X at hbWZyOZ$ZPtF
z2L2XJW;_LrgJu>-Te*|c?7!CHpe-0uSA<;wENul*1i>VG)ye*)(>6`I!fI21h_%aR
zcIl-IHk-I`mI3&OB_`lAtO;2~kQOqhkdd)@q!RJVdh_VC(N~(Jo?*t&zi&0<1xxg~
zrid|BqP3#s;?E2n926ye>RRzH{2j$BJNRn at f3#!?<nga=dj(V8sXf6*JK&h>h((Q?
zd?z#9Z2b<C`16Hw)G_tP{;T!=WeHzVzLJ8xK6=2CsK-kIvk{U2`N|p9S%@!{sg9#6
z1BFN{`#Xm8Y_P<s@~8=#K*Zm)Dt3=cEA+_Q4C)N#sLFcHJdA0JF{aXlzhP-oni!A2
zC@>!9GR{J3Z~Lzj#0=~D%K0CEcu7taXr5pMBK}o=64ii`S(=d<BT`<${Okrb$Y{6K
zD){aclu|=>SenKHNX87K*z~XdJO6uS#vd;Ahja;ys#TTv)4B01*Qm5;c1rO>2l(<D
ze;s?D2i+7GaTHng4HiOGRTMFnr2hh8D!Iup<$_{8Xa<Ah4><T9hgU;YDv`Y_=00jV
z#^3{5#E8>iX-grcK>TT5l)-m(p8!N$H2G@@Y(2iF?4<&suaz43SAUF at 0{9zmq at v-6
zZot9c#a~2(0Qmwz^RU<S<4;Sbb#mVFcm81s{!~r#Xc&e+yny3RGo_M1xXDL*0sh8I
z8R+QWxx!6F7z#;^43d;4G&lpEEL8x-CuKt6K??~Syi|>CCk_7M>1wtb2rS1O8Iwyi
znd|reef#!NkxicqW-uYt>W}5Dg?Su=+oJfhQ?&%sTIMf^=|A#a-8Z2{U9DRQvM$m3
zwa2f}9dZhRzW1_{V$MQ>j=9Djs|y6NsR?FgJe8(@#t(l3LMly2*GK3ysA;&SjtL4c
z2wTW(=!&*FBSt(mQuyqcN)YdaMnr^w8B6uq`I~}ps6RrfVi*sIk>*MKoaH#|uB-)I
zgM~ON%e3nJynp|GzdYLzue<I#aso%lMBIkroKvphU- at M`{_b;-N%nCOH{P^nJCwf_
zQ$8DX7$f5>ftz2v{qf6tt|;Iie0{aZ$BMsL(CS(|mOs=YBOLJ;(DZLA at HPA`0fG&J
zwpC+^%t(Dtd6rNCG-2nciZ*WG3#g6<!8DS#MaNX&n^Q?qI!tAUr2(2m-oeby=%ab8
zrQF$k(Ww5k^LkbTA9HYOK*3c+yuvWspFjKw27kx7_I*JVZe>Rb2)E^sXBf*Zs`Rl$
zjF{~dB-}GUw)&bSX7kMq*ZBKNp#8Z`-2K8J1mMF?{D<;a4WQ6Of%uWc6IcPopYixh
zVf at v9H$fw5_1qRf*s!QYuzQxOYbMe0QlMxXK(y))y=fkFpT>BqUr7-lV}Ru>+6saJ
zy_J~C9r`x|8iv_h?Z5FS5(-2EbGx2`rXh?BQ!Cv9;VWl3H5q>yr%*^ej_|q^h&lf0
zUnx-TR9BkO1ReGX?uvimzvSC`kY<Kt1fQHFi`8vyie7*5^jie at g`f`EPh*3cz(>S5
zn~X`(JWRzr{z72R;g2N!V5^XNmcc?`9<#yQgvR*RuP%m}oRXzRs~~J4!xSjtlNVO(
ztZ3H*p~|c{2&)NAA_VlW;<W`h$?z9R&VmzvoHZXwQ5_H|@uDU1f{2zJrxjI?2#v2S
zEd~4nDdVJM{KY~oWive}m?T6M7HSm>>5TaC_m$<4(R75sS~ePocKWvq;O{I%{K}3t
z<m)I1HDqA4fg)*LNk>a;R{tG-hCc{sIP)08NPP?$EDCs<M2BBm+=NLpt)!-Tji>kr
zR?;cF%CGUZMJwWFX2Zbu_kG`*+;R$n(BKb?J<+fc|L`C26A$|dSXpcL5nRVPzVOI+
zu at gbsHn~^}fsDi7a`;mbJ+P-tSN$wEf%f>+A2;O}OOV%e$^u~$YkvsyA}j>{;;-^l
z^LrzhD1eWc#u5fp8EgS6q>S6eUzWumjSeJiGguLGwP#^&9#Ie!eY-Os(W{uRTkG;4
z1vvEy7TJ4BIQ%<0OLLh!8p3Lzntb at -htp@TB+8wN0V!4Ek1*|33S5~gTQwaz1mD(a
zuvXLnRFmxjWJ#P at xx*KBDnSf at 9ek;$!#0|?kP1nY^kX)LA#Z+cxBT4~0<Bzts9-^d
zzaN6|*JObbq#?g8N5}&OAU9i`8d)Vht)l*j<LF;<*_Fyl1zDd9D#NPxv)LJTbw=^w
zg#=OI at u%lxMrk^tOk?<aL?TFkcRZ_BNN4NfW)l1vV}LLjj6bXTZGp`As}2|pi<)n%
z1y%<E0W!?_zd-1iR{d8H?84qFJ!=LE=ZnI~Dk;f*Nh%z$OEhaSl5%`x4{cjZeG>vJ
zT6&t<d}|4zH?6%%eC?i&Ui9x2)U~sa5U536B}MzME8P+R4s5Vun@;>~zM{Zvs>72w
zA(ht at B26fq7gE*LSHusUm`aDv?ZBEDcFOlxW)5;$$c!g5!?;OxQb00toP*pkZKojo
z4W at reW)+xrPj2!T0Vps*USa35zWW9UfsvZxuhf{+Zvsvu{&7fKfEkRDp$wLf_!Eg_
zv?wpQX1iA&<t!mtT3D?m#Z);dFz^LM3RqMMFk1*vvcDLkXgl{x0cTMmuzGs|?D*Rh
z)FrFe=s*5ap5B0^rQz at 7z-)fuFFI)JFj8G5OC({mRZ*!>GFvo_0gb|K>td>&`_<RK
z?xrXU873|!v4cR}*6%81tZOYQ;y57ekxe3QA*G3=IfzF50f*h$K=TwnfcVzq;8Qq9
z at CVIl1O&$tV-UmNefi5B<`Dq>OE=32H`gr33%Tj4%vzVu&Es(viiK7bB2V+0rNM_q
zM at m{w2=LbgqT{IgV<VOY_+zDkZ`*~1zs!J<Y^<e-Re#dI%9j4I1<LNmI}%cY;_up4
zLbUv{O$Z8MV@^nXq5qb!ibXrsn8#E0XxS$P$P!6Z!I4VF%O?DlyEfnS&ubdvV}~^5
zT?jk{j;}zd_$WmBl2`G;- at Aa2;fB8fj=pA=k5T}6{Bdx{LR5jgw1veTsb^YwB-hMf
z>G%su;`gmq2 at +WXkPfVpamcGeuA1K^C|?L%r33g at u_)~^gA!bcmU!ad`Nx%a)gO?t
zrETODMun)#BWk`PY_pjp{s{YsA^i&hcVxO8r#JbIHkp|Le|IDZdvGrGNJs_azMD*H
zPh=SW+~htff-g5^x+}Hd>?XVhOcjFKFz_|I0D9 at 4N>OFJO?LQ8I(P7Qr4Tk_A_0{k
zb4o7ro1tBx&9~w&3Ysy at ZfPMf*iRqU9scdb_5$J;3(G0LLO^NE;H)dQ^zT{W;~JZ7
z0r(RV{l{P3z)g{KbrwQfGfDh0XR~?mcL#sug`i4H>UIGsK-lt#y7ZMMO~?F{Ny%QC
za9|#7;BPG-eI*TfDn|1QVJ8Ghin9la(}3!L at ydd?7zDJ=Kf_=CGM?E~!AQbT6`3S1
zs*sG3vxGqa(t-RuXkE&5wTeK~KiRwb%GFvz;GhD&__|~1Qh at jw&~-Tytqn9HBtLFi
zMcrVGx<O|6`~8G#Y<9)pv`&c(g9zC8JG9V-TwtM%18os>l at 8{iA|WPqj*vG8Ib{hE
zx14#vXMp<-ftnJ;7!`?kR(G|E0V*E-<IgX8CjNd~;GNtg5>3Y=YFGSOivUNA-^Cx6
zz9loXS<3)Lvcr!AbodbnY9Skz!@?1TQCKaF|D=G7Xcs6K3}_c75~f<kV77G at C3qnK
ze$B<3ltg}kW-U_0B>swa_5c6n-y_bSN{14SKU}UH!Q5`H_{dz5RXym|<oH)!XbgNa
zzz)6~;XBRq(dkHY6f{_fl~77%0FMB%16qz;r8Wnpzi$;B15_T3_+5Qef*>-6{t>`m
zLGZ1;PgDN|4u9YJ%7kPi;wrz;t2V5aXpUiQBN+C$`W7W_3MI~vYNdd+3PJjp3k;S8
zMru}Z$Cjan$buyU*Je`|5k~@ipa8_WP{?!uaT9C$=aC25Jo=|b<MB~{0Qb=rAjbuo
zFM>ktikLVmLHeQ~C>$)8Iiha{JY6j+S!hpb;;CkX7Aay7P`V;%r4LMjwj3;w`p9?1
zM}d-+ZPq>_?~W at V)qjJ<5fEO0Pk3g74j=bBWD+))2?KwEXE6Tsk3UsZHdQCS$bBWq
zY@*KqSBVz?$pSV5&cgW10wM5`k;(|{G_Qg0pQ($8)is5h8hK5(3X$3(b488&p7Ph6
z_?t at o$5Xrj)W at GJog$p{1Og&DQCLV?E(?J<&Bhm;xg*Ev-waBV`<!w*qB{I at RtW3@
zwmkEo$81Kb9yF}}2nu0vjhiX}g at 8cJ9MmYV;!t at pk}x=8uyY{z4uJw>7%T|0pNary
zCk+Szo2 at I>LZg!~7^aC4mqktNU?1 at he<3IeR at X9#EQPEMOWr9&-obf9`S@!Lpmrgk
z#zH`oQqm(7MJ>e7c>JMoGyVpnr?0U}pEmHPPggfNMez1nrP~GvIR3OmV>(>3u3_Tn
z<CNL5V9%aC{1rqx<WV*-21)bFGI0Tc%rxGC3=3`W8WytAVXBj-!M=rv*WmL-U-&#_
zE3s!WK-Fa`VF<ePl-kN2{=Q=W%6|FBQIx4Hn~)MjaKyihKZAX%u}ugnL24%RB#zW0
z08#L2EDHF8Z(2<uvNS=)-y`CsY^HyYsJ9#k4b1qr=k_3^0zo+`gx9cx&pTg%sUq=(
zgE}5D4?SDaX2ClRd;wB_=>M?84x>E;fO4eqqk&VL!s27EROW{lB{kVRf^J<IVT`0u
zeAIT|I>s0&C|-W~YrhagH+_X9Ygs}7)}nk at QQ)1VHh|gLMjo0NxkD0=!fQ^;Nd#@t
z{rWSASWI)LED$g7S*{g37P16VdZ2uzKvRPFt2mRcGD1IqZ}|%cA2DZ!CS(X}W?-|Z
zp^d6BYBJl*AR_9I?ABDIGD6>Y^VlqW%j at z&*_R!*VEiBY(1*H7a->K|c2$B=2Azkw
zK)MQ%BqbhZGk_VY4X1EsHXE>26``gXmY466$Q?^-!l&tgOc*M>#s-owGtO*t5?I+U
z7Xeb4ji*c|!A{I&!9ss+!Czyt1f?t>dx^m8YLO`D2n|F^3XELPD8cU at mVnVJLdFsM
zugW6 at Yy>{?g>3?)8Lx(@JbXt|1jWv`agb$fBSJAHuw;*CTf9Q&aY>~3lRf6;zG3=K
zp^hBg6e){RH8Zdk1v4iDrrJtGQ;L~Z7N|S~!#e_IlGH$$Tv_f}A;4c;fVCeX?2N}#
z!VqgAaJ4RJk&U>smS99g!(WCvobZ=}@h4+hz)jfEw#&E%-_=cbgg`41WM$=uN5rWw
zG!=jJ0I at WNqM(@jmbI{R+~I*=R5bkAkDh1Q!&)6PpbCQc@|RWC6?c`vgoMNwxXf=O
z6JkveJ9!ek#JByqa+9+<;zE!ffry>3gYVd2Gr}20{Kd=2VrO+o0cVe>(S{vX at v&2|
z$5W2nQl2EFs*o{Qj6CJ>rTne$=5~J&sL1 at 5jz2S)<m#iDdBiVl>0jHX0Omew6PF2%
z5QrK_Bm(#vg_DZpEd&z5<d{$_{lp)3HroN6K=7A(N)wy8u#0~?hzE_a7V{WM59Yza
z%yt$Yx#F)8p%6$7?h{_*)gR>uRgJ&y3krJ_ZL1T5ZPcE{9*&?S1Vz>`TMXmTGdT-I
zO)R*{82mlr?B{XH^tQ-a{0){q*0Ly(TTarcKdNZ_?Y~T7iR=&peZq6zgAPobrGPSm
zHqM&KgYRbd-O>8Cbf5<z(4>Pa0c)LtScR&Hkg?EkS^Z(T6wrx3zj(*fsXyu8vx=Ch
z%6gBRKmO7 at O=6CcC{&2V0{_mR+^0PpxLnm$3fz$e_G=|hG?jNLppw{*Z3IGql11g0
zv;tE=@u6)Y6CK+G{@k}8N#V}kYN^DODfoMe4QdyAM6gO|9{fR8ZHkN3C>a?kxO|aT
z>_HX(vOoy5Mf$7w-R!IGutBFlSY7NqE)c|74PS$>{EuSApI^QLob2g8{!~PV{33pC
zl63V49FvHe5U@>v6wgkH5OruYfK$d`1vuA4K`it&ex-Kg at h3>9Ag#T?#%D$QCV$x@
z1kOS*3I`v}FTbqlXe#?SVle*9P-=L}Y~t~V+T{pp7Z3{-OrCm*VdNwP at wX@o`Q<)i
zWTpGeOaClkIX9h-NEb;4m at 3rxBdqD9|59M$;wyq=k`{k?gjo8wqIFX>dEjqmG8_H-
zDDK9CuT_6M<&FnyV!?6Z!9 at C7$Zmx^+L)-f%2!)}JH*c&MU~8`osazGqgdF2p->Ps
z_iYmvf*MREkse%?BiaxJLb6t;P0FDV`<G*?)s1&{0$kS6zYu8pg%1#UD%qto8>E}%
z=wE8!(6&-_Vv;5h<Y9o*mu=4c*ivcyqwNZmb=}lY_9~ACzAH^?_^S^l;ny?_rL&J}
zi1?Zr|MX9Iatch}N^=Z{f8i4a at Zlvwy0S?L0gZviS~G(W5tSN4V`>rd_;Zs}sw<`G
z;GhqMCh^<&6kf?<ezP%yRkmYS7#&LWdE{*1Tm-waLno3&XfodBYu7-&668hL5AS}C
z5D3pIkC0lziUdI3e3aeDvqvihSi+u45RE|rAf9Lsf42GP+ at k4-PRwPBW+!5&r)p%Q
zQ|0MuT_plZCujT<4;M7fil#+DpcWyZ5LA26&9t5P at fSf&6~d(YK$FP0qmo!i2skJO
za+AoBm-4~^1s%$WksQZ;CFl~97mm%i5jOtbs^kJsC9K9l<XJw-F~+v5?D*BC-{Jcs
zpud3l3zVQh#2%2X$Q~{*RZ(J(CL)@wWCJ4^=GQGT;)~^^z?6C&ie;PaMq>l<hh3PA
zO!Jr{&rWw-hkWqcL%A9M>OcOpWPUKImu+h7 at CRSY*L<t^$Y?WYs)0lhO{Exl;bS(v
z86d}1e(yd6CImJ(*tzD85O5ZJUi(V%!9icXaGbU&ft#?a>hzDW3a`1D6v+>N1xn>H
zfX;FD!#mCUtA{^4A at AQI96WeXMyNu3X9k7yi*5MZXN!IzU>lPdsR;)Hyi>aXWDM+O
zfe!3iW>7-dX-21h<ky6_NL+9Ouo_PMs4_;yFu6Htj29aI7UKIZ{wd!i^k1Lx4tU6O
zM3W234)`jA;zRuUf?`E_cKi!(b-rA1<$FymL`0-IIN3zRcis(y&pdY86sSdBq(iT4
zZc>ghiVyKCJK+1<H~7R4zN^$ANM}xj at mEy&E(NSe?QFoGJ(#OJLZG>6zcxn2BWdA7
zTf;{hP9uJqmHu_aLh}*x`hA;jq3ZyHzl<oj=7hbSuKI&N&Pqr7uSmgI^OTRSn5#TE
z3xOsUa7k4GT~cEGX<bBMlmd2vwg3+DR1u(ao(5m1j8GOR)0XYH=-QleJo1cWo+3}}
zLXZgMf*+0~g&a|%@b|m>F8;UNa*NZ2d}Kx&jr1oNK3X at _>|vD<6d*y70yHC1eB>8x
z#~f8`HDEO#g+|j63#y=JG152Q)mMfguVJW|YZ6=^CD8EC1tH+0r|?G at eA2Z;30cg8
zUpVmhxSAh)#m8Ev5_+y_?n?wR6MA~)JB9O?o7CPm=c;j;ry4a%dGG}b7OQ)l<2=Hd
z)XCm&S@;vYzMD!=A&?hD-akK3`7u|2D*h^xF%0&KVOsSKdFCNtyK#pNG>~Bw;-fsZ
zO$!Pe$iM+Z3Pd}phaD at ZHQ4!{BwY2o=~@V^75^B<pMXVH9iuDo<L?m#-1zuIN5IC5
znn1YXZ>sns47DV6GVIqIhMCq`v;+|sDWIBpHn23t(|qKhbO1qIRAyupWXjj^kFpGt
zgF?(m?(-3C{A~nilZq8J2|_<|L<v&o>EECKgrF=C1$n_LW>@^ZxUr4pd=zy2D?!M!
zjXi9$M|&#~1u5x4wbU8XeoFS~9N`*m%yz&$%||!229yQW?GZ4f`qh8qck#E4`qtq`
zQ#0kDgauH;-&Z8v`GGd at hu0gZ@bR4iGTnVq(9p9Bln8<-1hN2dn&&lVp(cAb(bln3
z;17lO0u?}9tWK*obVmibO!@e$HkOM#<HbTn5)@m2!;dXMYZrDEGS3o{b)}x#Yqm7z
z4%9ef&LsRTO%?9oF9n##0GW<SzjB~Tv8A5Qp$*Sz2B&|5L`f7xQ^TKz at tN}{{b+<F
zUc`(u__8nlg}_sVfO3SuoV0Bt_K`dQ at z1?*u+xz}=B~lF5olf+Oe?L3obWgcZ}2J8
zM`Z_pS11q=0$7Ab7I at H9tc4nXyMRFG+kBTJ(b^RG{p)Xc?E)o&a2SKOLTYm-01$li
zilM^*tKclwl_317!pB0u5|xv)gydML7!sJ$2b9#C0yt4f|HEI-$`?<eM6u?fUcS(?
z)$x~8o&^nj0BI at yv<kkZ6=asvj7PLd0gsyye^D?ecRcIVVIBuCdlukq)&#;8J?Tct
zWFVS~0P=p20UQJ_3qkr98W3#Fbg20#B5dG-Rpd4DIIA``0<q9^7WJ%uMfIzZEU*z2
z1&2})EKUF3XqYNt9chTfO-jID>ovr>8s_mA7iL(U*H~GdYjA<D$-Y9cD;I)K`I=%L
zf2 at GgaASiB-9g4NRmkuMU!y4bLjML#{fDb9ApIADNdX;EP at h4N^~5IJ3TFHT!YUeP
z+pl%VKv)G=69@{&Srjx8Q6j_w2Ng+Ef$f{<k&QVSYzdHob+zXTM6qCi=8ms~z`K~&
z0l~6;Fj55RhX7=yY(>)9gXQp2KGZe>9hSK23xS~MC_!GFZ5fUwy$I017XLONR~Tz+
z?Y~UWHDbo!mQ8i>*I|qjgg<wfA$&U-e2uWCe*@GX*=lM0r338SD8wI0BgtE!X_D7w
zQzaJNpTGP!ESeAyKgZkkeAM?iHA*qS$sT7>Aaz%T$Q{h}1wxFd6nvGC2$c>FD)k`S
zZLKH at mR985L|ezlLf~6u*Z{sF#sxJHfBNSpp(5iWO9WlPL0iSshQBDtO+SFcWnUvR
zJa<ShM=$ehI#Ys7%R=xmv5GxQgMFIHud$>buRK0gR7~lgdgCtyBYwu$L_w28#nC*h
zvLVWM+7m%FO$Om?e!dF?{?O6Cj*mKufJ`*GcO0DUgTzm1a-Rb6SF43UT)^i(_!2=B
z1W|tRk<=Y*h&=uba0h?o$nJo at ukcqDsoh#^_Bd<VfIl}SJK^D`uqd!%Eek{ee`QAq
z^zrwRFqrB=(sBe+SPB8`(<(d2>lm=*FJ!_;s~Std*KtI#r}G8>>JMY^7p(XbC;k#&
z+A>e$f<##8um3B at V&p6O at d!_;P8<c at D;TNZZyrquDnUka!F?ZHePjc_5C&Wn at CTp2
z`c~HpgcMM(#K_y3d^Djfm=Hj1X(fpAZNajjcQM&v7jPdUrN(j;$Z<CG_X0DBj*uxP
zPWVEs=m~*?St+3YXrjO>#?TDcqzqMynrRp5?^K>N at 2kk;AjI0D{);bGd<H)LqQG~Q
z at HY=Lz!wGT^$6Xje_KFh6KAa|R0v!(H=z(Um7k}jk943Ylt7jUR?+WcS1I7Wa%v$?
znFn5ppcD%M%|q>@iUGJ9NCw>RXsTWbf$T$!%u;(PK=zs_xTb$0kd?0D0toDkv1qIN
zsQkiZ<Ac#hGgpY>k39ZTKrTo|OgQTiJjKo<iC-+FgFEcOzp|sV;=lhQ^eMl(Ar^{o
z`u8mU;0u9{2N`KCj`NyHAg_{N#IFR&Vok?=(@IH_bJ*jfMB at cA>?AXFhW at R>Wz01P
zZ+-I{AV!+Lk<!zgQp|GFK`rtYP{m#|Z}~SfvOs`Hv<<>|kMnv2uN-M&p~*+}r&Eyk
zUrlW!b;J}9t2+kRd}Sg7oQ0qxV3ME&HL%Jf7w`w)jw~*|l0>Sj7h!`J>968vgAll*
ziKeLv!InSGBaf=q*2w^7$fo#%PX-kbh at hrGF2~<TZQ*|I^8RHK9b_Q2Vy`^PFJYuH
z*v&7*ImkzIN{8T!h{jnbY7BLZmk6R at X0f&|&5N&_q+)3w`)Npmq)9c|0Q2xy77%=D
zhh1~>@ll%)$WZUaKGF#?mbR6oNgeYL5BqHmrloc%APQ=cy#Rk7r5<BAI3+0A!!86}
z8KWJ_f8oAD3m{KB&<dp>R{x!!@yAnof?(I9f5KxAwZ~rvf6Y8flL*?y{LDiCAh2Jh
zC310rj{dEp=D^ND)9SbihmWNIcZ5J+2n2{GEurq&chpSdWrt0Z4J=_2GEx8;O)NO&
zc*$&<$DA3&pyq@<{`&OqMHqiSN*H6XM<jyKw<3=$q_)7wLa|2P60Y>G>8py&V7XJM
zU>S-3F6EE at x8jEdE)7H8>4+nJT0Q>6FE=&y$AeJBzw;-Zd$8ud#|vfrZC-w3;VJ&?
zVHgPs0r7+1p6jEv+^0J5IT(K*9ZobMfLhc at 5el2K%4Vd>;OfoGP2q480mnt at z&5+H
zk)p;1s<sOY0on*x_F1Kg2>$f16$QV}`GH89a2!lCs1M45PQ_f>nq2)+{A-d<U9v8Z
zSjA0+S_rh!e6l}O{E+VOTmCPA@(v$NXh2D%f8yWu{>4Ep{r9-o=@dbMAW_hy9tTxd
z1f&wHqyWu}Zv|gp1Khqq?V_Mx)2CiLh^wazKwIMA%sk%;jTq4bQ`=TbE;B<!MV;b6
zpl1fyc~KPtCLyn*f$t;o_)7tuew`y5=^z(8P7<aPeJgUoihS=livN;q>wnSX3}8_v
z;YQWe9)BHAY2a`9cN2fm5Yy-fLvqS;=N}O#d+>?D0Y*mf(HKQo!{1XLueskx9sJp8
zIh!5dot^Yeh#NlmSNx$)^Qj$b0~8$hg#&yFq$sB*Tbn)tXlq8+3{x3+L1{eF;jd=A
z0cLQY7qWm0j$w9T at Z|#R5<wFMeR)xv5ct7FF0kL@*5$Y;Lkfbrq`twf_>=-_kvqIL
ztP;eS#P7Or-)St2d^hyrLO%YkQb1A*x_Jn=HxXGtz#>bo#(+-)iVX5ob5tHv`RJyv
z%wTEu3!iyV3O?gC6%}WGaSBhsb)a^NHq0Gg`6y)k&1Ry~*X(hw%+qlb6Sk>u6e3}v
zb_LD-im;Cw4M=21P$7^A$WI7#BtlIVNC6Fee<l+SkC>nRWMDZ{Np01p^H2Q6LJ9I>
zXg^XgnXL+u0UNYc5la?e?&_mXR~^J4)rta!wqQ$ekQZD2{Kek at tJ?>ShZ=URK)Cki
z>noCGHl;~_i!vTn+pZ+-6~hvkkEEGRt~EDx at aMIlr)ohQcYrlH)UJ%g#1(%ZEhlH0
z?IY&y^sT{e5>kg!A*lZE2!GiZ1VSN-e<4taxZn{hrdV=P54ntd?*ckvq3>)AqZH^M
z%4`Z`bBRzCT<2pGMjq9gkNDt>m_ at 5U%;rw~L3RevY`*&H6=MWZ(`mQT$B at 5#9R5V!
z9_o=^_T3RC<TbMA7yTp8evJY6x1Hq(UvOp>uy~r;5(sOeQ#kOUb0=O`+>{-S7hI^2
zI!pMfAA*8U^O}BzX!!SM8WC}VwU%{-(i^n3>_N^v9f61+e^>9q-c9UKQhQQh8-nqo
zSi~Pg<Xvmf(Z3+Z- at 2@2Iq#}J2E<>H at t}_$6t();YVN4a9+B)l2rR)fTY!W~7Knwt
zz)jW~EEkN?DlFClUsGzB9d_<RO$o3=3M{Hc!B_5E%XZ_q)ejD$py|7#`Kl0<1-_zf
z^*{KoP-{990#!(p8nAl`3bD{97!`o>JBxy^Nda%@-o>Oj{jj{uWq+;w)vx#z1pom7
zEg8Ey&Xq*G=3RmbBVstKKSE%;3H$KZ at pvT&Pprs{Y;1-0Syrk1<N>}dMl8(cT<0s|
zZ$HJK{!>2tHAYrj7+^wIjaAwz?d5{1kN9W-hY0X~ZLkM{rtfC4kQbbCbvE;Dl^=70
zuL(iT&CWvVl}QZt(Mt`mxH$!-d{<2 at w0;Z}Amu{x5;^QrW<n7BwgY{{rkPV9z;Sx1
z{_{xCS<7oQ-~u`R&Ob_!QZFJC2#;5S2;0&mhaO|VmsZHvgcyIPAR!QITZ7^Qd&NiP
zXS~gh%`AtV;1Q<zh5OZ41J0 at p(`Q~+ at L}%<H?%RI1CPU`JHB!gcJK{$rx2)<>W|%)
z{tE%}Lf{VlI}7O;;M;=-5BeVyW`k4W{2b91;3^BGfYk6Vz?Zzhffu4M$_IZMp0G#0
zD>(S0;VF&_0q^h^P5XjidCk${U)fnFST6PsoHcJ)R#&K126f)iy}WQWzeE`R=Cqs=
zBxeQPx?S;SxyMaH<O4bKg&-yS%1!+ULmlVzPr8~wK&|O0JH)IRDMLLa7CLGX!cZeG
z3dolfG_S7-#BH}N|HJ+sl(zmt<Or(l#J?=?qr~35d+AVJ-SRI4iJxEb=OchZpaC0y
z^e_=V at lsU9S_pLF51^mFH2gaPSxfV{D|y2!gItxA0Lld)O>T?;`4)fmUyP(cO%@0N
z_)M~p`p<Yq;&1hejBElb<^iX6C8er at IV`9WvqGWysOePa-A7n4ui0&V^pyEaF>x#k
z_*Z#W>dQq4z;`0W|L(i*mIaKI_4otss`B8kBI($O{Zz<JNv&w`2=++<Otko`W81AW
zL|73dHR7NAWC8xw9}K~_%e4PuUcu238vMg6i1=Gt{ZV9;eIYhLM=p2;)A08qfP5Q)
zj#CrtQq_ZO<0AvC9&May6>}jFi^5SoN!w6Es!&8&EHr}eU`gBepYqq=94Op<0Yyf*
zqhz;|S)w+TC+x0usy{-&FV3RvCpb+A+78^&{1Qu_Fggeog4ujm{QtpU2*3f~RXU`9
zMZhD<4)--2oJMHXm{tB~ZTS}hc$2r<C<@BBxbp~J_Y=R#eG7ZP|LDjLFKghNTwl~^
z!&4kYMo0aD8g}pt0hMaVyBUAl#yq?gY5?7&e8tBdAE%^~H%Yrm{QMGVh=3wF0$_kU
za>3(b1iOE{VbAr58C>tU<Bogpz1M at Zr1DU^rV3SmbTlD2{q)m0>qH^Agakz)s05Av
z)sUJf=-5(Civ}GcfV^E#lcDi9%>Ju6|A<AhN4}0gNFU{;?6V>}Q6-hc?_2!ApJpxm
zHAT<<uA>S`J&Q^@@HI3D743khYMK`gfzYY8?BXvMC|tv>hNq4)A{RUh1ve8vMEEl`
z at sO_QTS(=>pX^=NBsk!Izzu)GASxTKU06&1Qb0#V5(0m<^b<YrC|P{P)N<P<5hNYp
zek#=JP_=0(HvRK`mH$;@;SP!7 at 5cvC2@<bL7Wf+Y=^uY at SV)>*2o!c7g_RzvPL4wr
z|0)k>Ic~#pwXb<86Kn2UU2(PnsXs!XwaLc63h&w>C)z?l*c7gTtm$Bmyhgp0jHIjq
z+(Oi at Lyb(80#0Id;@4~ioWabHbaJQq-?Q|8&pr15VkFI at t^N?aSokO-!0+a1>wh_A
z6(JS^tKeT25E%Y~GT4zPX;lkGScuSIvL`~#Q|{o8`SR=A`iED~3P-g|dGTQNA7srA
z>k$HzgJeHj1A#gGXi~sJWDmPwIi_l&pf3u_7Yp%Md at A_(>(ecI69U+YzorCHJLXU$
z=88P#1V4>>1&C{usror)#J?)!wT0ylHW;emoaKTQJz^eN;P7+befK$n8c($Tfl$DW
zr+oeNzwQakf6h#(IEb=PLg6Xo3jrHAXp+c-FJClag+(%w1Q80fCU)-NZ-ZFnf2Li)
zv-p<+Q{G9v#t{bqS>r*>@fQVOxnF|Vf-RKh36Jl}uVm2|6j9J;qy)rYs{|?9Y7YJi
zJM3+>BmM-Byjp>nCJ+NZfOuL<suBSH6$j4hFql=UtAAT^#1Tg*?6A;}rR9;tL0<8(
ziW&Ui=D(Bb%@=UA!=C;-7x|fjq{Z4oLLd>4#2?sFV9URaRVCp*Zbl;CRwz<i{{H@@
z{?LEoZ|@d36$W9nYfk=*hf%?aKlnwVBParFGmJZ$kzK)epBWx!C*{*T?42j8Ij;Cm
z&BrIfyTXotMMFp3K%VlQTlD$j3`X0cKm0i>5qxBlw;ST8Z6VO%7jy)`04qu{^^g=#
zJ at r%r)O^5^7c%jhD7e#o!-$j2OfH*5nE{2sReY!6pZ at tCfADRft{zbk*jD|g5d0Ir
zc;PQEbmGrDNvFbaQ0h at No_&?_Cku#;BdU#`Ai%E?p^hxDFDOSsV0EtmHs2{bYCir_
zfbyk4vIji!T_X>;=G>liJ!pQi(QNn3OOuv}zoNu7*pFNrhJI|J1Ts*K9SAjL#4!3-
z_NN3Pznp~Dvyi8>Dw0GnlKXtbP$(^AwzaNYE<56{6MtnKf5VKa_zMAf2%kmChWI=G
zU at o#+`q!z*6F>Oax?&5yEAl0U&}d>*3fPDZut`yVQ2<=?Q3&wYVYWi#L_~q}G6lX6
zRC(HD at z+v*HAlq&zq+AryNR<L<S92%#ea6j_)As5{V5q(c<rIwBoZn at fF&9 at wklrx
zvx^cm#~zwTTSMNnn(Aaz at S}tkO~Nn2w$bB>s!*;af4Sh_Rbfp3TrT3SB2G5xpLv?%
z!+_wkP+y*UR-ieEe21LMJHqZn-hH9bFHB-e=SmRTnh@}mol*dKtxchPREV55V@~#}
zLHf5pI;G4}hyGX9FJ(vbpL!9$xLkYfwU$e1?6fYV)qg;AgoB;bMaJYGHwH69=|J89
zj{wLX*^L9*s*sZp!7D+P9n7^g0?VK2jp=teG|V7;wj25<Z#BgJi at c;0BQ5<~!X6<&
zwm<xthsp3)Au%^nQ+AddIB)so)5rKDOxT>&q&ZW0LGzgVN?+rtJFZ3=Lyf{D1ju6^
zc8jixTO>yhjze}&HKdx;Q4 at Lfr`A!k%0umx55D5#KKRnG^P7}c0|gyMD5xv`G)5Rs
zcZvy~e$S^U!!T!n9kAAUl7;p%?^#4%3gGWSAwWL<U4=kFb8a!d*-8QRA1);0F9bRm
z(trE~$RQkmz6%`w1`E0{3EV>eKl!t^?G;soWt at hstB>HTIqePw$W0xC&8!KN5R?K%
zf#VSI9U^*Af?#wCl?C=eTdjhFE#=qRe22U}_s%=-6dDhTubS`2Nydu;W5l|dO|GFT
z+>F7W^3 at h$q79b7&Wzyefa5UfY6cum+4=vu7<^6c#2<XE5+nuufsAgsuh^QzawdUV
zxo`?%m2dGU<M>OE^e+ndL&2EpKQBBonimC6Y51FsYw;(3<WY at 3X|)Sf`Hf+WX1qXX
zhRM+QOL>k1!qiUAWYCX+?Zt|J$8xkqLCw*0G{r~RY0q`FadVmF1O}<f$#TZHiGTWc
z)wd#J at Q1WbGr1~0%y6xvZ!rEoVuG7^wc)z91;ehXOLg$~M(oYP>K>6ho|W1<yk-yb
z=3yR~q+))0OaEK`9+yWdq>)qhgYViQ6W-wuevQ1XTiKWUus6m{&9?=sy_i+tXtufP
zt@=O@>W{M at o~n?uXs-b3581cXBCq&}2>xDFy)KE7ja62HPcx!Gv1%p*s22p}HN~IH
zg3fpc43)<=!6XrhcH~O|CY2FFz(O^|c!Z;^qfx$(-Eox>QbSmuvHt%sh_G5`5;M at 7
zMHv=<8m9mF)4$9e{wU#Z1_}``j at WkjGHv+dY_P~$sM^jKfpAm7v78W;ChqKnX!*bN
z4+{>i$~F11Q>rSJ^bdZ;$6J^Z<TxY?6e5tTMWUdAuktwU%Lw}ycL<EN>JNi8zb!CB
ze22dng at RScQ&+XR(~hr1K{H-+b3)*w`Hk<$6lz&e<?*o&{(@o`aG*kuJ)AX(L#D}j
z4IQLJLdIMD3&EWKF&zG*|2#6G#Nn6v6I-e_o^9bR96kz%uY^F80>-$bS=6`bAAhQF
z_ at plT4t?V9z^3?n74;V2b<8d-1icYB2nm5iuoqx13-Ff+UYZD)NsLS+ywe%}kgEKW
z%QgPWAQWuttYU!s3Lru1r+ at reg`SR^6e60a+IelnF^3)VijQkMf&r?KEbvc8>4D3%
zEd<J}b)|q1u+YKGiXD)s4uADuppnGiLQ0TR6FI@|TEm~^oMpW1208u5A7>xo1zD#U
zZPUasUseCX*GdHII<&KasTCj0>EBgz{siAkfhG|OfxXyG+k`qM#5`h{2D_^S*WoYy
zqZ)r9))y=`u!NnMSUT+S_YwcD_-kc{Z!M$>opHt)usgUGg_sM6rtcIaFQkcMlIFcw
z!BJ5WR{bP9!=xUmh>M_enfQGx5C~WrLnRb{6;dbc;%Fn#-|`Qv at xf2wuv-OTKEgsX
zAQTrXY89Ns4}}oW7)z{fGphdhK at xV#S9!GHyK4ArHU%4me33hr=sYIeH6OVt3e_KY
zk=K+s4#Ftu#NFyX1|M)D4?E!QYYeNoZ<xnDOM8XDyBp?Wq3NXm*`NhNIDC{2MB;?W
zJF`)2c?wtjeN_nL2pa$#{i{Fn1^M9PFRz7wgB5nORol%5xF)TFkGXFfF#HW`z_RbI
z|9hSw&=~L32k=P+*nSAYU;UwZ*j;6T2ENenh#)N_4Qa9}C)^|<E18#0 at P`^ngVEzJ
zwwAM~dV&UjH8=HxZ}9N%zH9vPk)Cv76(OL1A#kn!6bRVsbQPC9d-m8~?NA`ofVhhw
zZ4j-c1;zc&|K`WReax#rDwPx%@fSGKA~Viz at e(%pfYd-XkA7<R74pWoBkSE{M#ml%
zfP*Yyo8s^Asrb{sX6NnvL+$u`9dlKb4D*O3;3Wez7$eJEHT-k1`h&m0$a4+b>PfUw
z)qLAc-%fM0W~7d*8Ng?WJqSz$RCvEjXdox`YEj{EQwa2RJP5L<B&-#YVL2w2bBF5U
zug^&Lad!B3{#2>t0@=IMmHtO>_*Yv at xKx%+2u$K5+RipmgP`LkXgbI%JIGs3V-kJR
z6*K4`e<|SbDGTCX2_k#vA|g=)%wy?kS;8ss<pTXPQZqoT(X)yW^EdMPMa2DK?j}oo
z1YAUz=PFI=+d&xSy~E#S?Ec2!1HKdhne3f>Dn9K3>EBmA5=@YF$c*oCFiA&l0rC~s
z*g&XgdsA~v3Vw$QyRas&sf*;emj2b2w7o{){{I!4L9NJGt`L+C?f|H at _u*h;VuqcF
z_#J+nXKcZ)QUL#sK*B*n!elm+TTz|Vs%)-|!N2+=1Z at OrqtM5{K*QUL7B!nb=DgO5
zQEG=h^1(L)fW+ at b+fRI6_pm|<b{lb0kG~KAULbrMf3CsHev^~}3ZQ01s_O`3z+?yD
zl<)AP>|^d|p;h at 6F0M`1^BRiOUKFY at u9_(ON(ThoNKx_Wv=2TMyvBhIR#(z7r+n?l
z>)(Qx8nkbpKC=bLBW5tCW)jx|VO<Hh4FU5q5`QBxv`~T%z83-O+7Vo9ViA9+wZ!ki
z8qu<i?1|s&o=Rv2b=Wx{YW%fiFAA_11 at PT>9sWYVQ?pr%`wWP`n}vp*L<O~-m-vM^
z_++njsGxrWlj-!v>ybSg8Z41t0<aST_mS5C1Vk*Hf6 at SF5g;eFDLyKU6krUS34<h9
zYmAa*W~iGs{@r0fAt)V4!Y+`7_*+q~C3}#q1)XAIT5b9|Lc at I{wXy(w9h7XKn0wd8
z-#eg6&IKG$@(-~9pR*A1T2UDO94Q2C1Zcy~5 at tB__pPhGrD+Ls;;;DV!>-{^{5Cb!
zwGb#lyZ8e#E!sY=VY#3G8ieKdPdtU7t4vn}*aHZYLg5bVzB0H;aBgxTz#mw%xoQ4F
zfIr|=K^ye%>W<ViiK$Y)JgQl!4it58E(Dg=kWc)u*z~>bf$t}7r!ryUyZLcYD1?Cc
z9fVw+HvKf at TJfQO8^Q2Lp3FqS9gD`F#ze<Kh$R-qKm9xT*mJl1mmJu6|Ft@$anN}3
z8#1wS1qY>40H1UVTCMxg=@{v1FjgW0cn^9?YpTX{$5SSmJ66}2G5pmZ`nMOjPpIJI
z2`_&o8lEv9@)HrECxfEkDg2=(eurM<6F-JbvbmdIxUEI2&O!l4-cLZ at zeGVeN&$r7
z^`M6Tgus1`NnM$NKQFfY^+*5lmj&W3$BCcU8aJ6VB%>Nq*V-tyk*=DNn#V1=W$0t%
zJqxvG(Kg;q<Gbm8cih}QOaJj_p#h2y_>f`?c%BY_o%)5qRSt at j`dkY5*4BUEzya{p
zA4g*MiC=szls!HQfh<sYM4=Q=g7DYqKf*+=2?6mdur>V&fwfGI=hUALJb-JW;J$F^
z<8O7*=eQP=uq4a+^bFm!ly5*|;_q=Q3gtS}a+!ecdeEE}@{~@K%nY6qGL1=9hWHq-
z_<)Hj+4GbRUG+<ZeAk~S7%2tp6qK*yNanBqjy<+r9V0C&z811v_P8S#>;<x*$}a at V
zHn4_62uyB8sI?3z5uCS0gbfCCjX#|${$9KAhkeDr at Yj4L_0oU**^pM5fpBm_?Fy7D
zl6^IC5gK<qJLq)Gqt!9e7_DcEMHBj}W<{+ at W*$~izVav#hT#t;2RY7J1YGqsFsD(z
z>IA+tX(R9yN~*oe?^jm8xH<yKCaCcr!B9(PSkX^CetE0rkUjF!L9 at DrT2vsST?jJ9
zx5FO+ko(zz;K83?v<d<Kb~k2l(CXaRc<PEzZJ_zMMK>QCz;fI)^DO8uSjtOH;O0S{
z0?{gldBioxo1~lOu`96+4H at by{PE-+@?7Sx#CP>^;Ku~{;KyG?9DV)Pr}ERkS8oBL
zd6_k}w~P}D3o)B4y|?=P8Tocz9a#{6HV8p$xw3&hV~lUjZ`0u#&iK>6Y9kiOzK(D>
z{}2H0+JD2v00i*a3Lb5DV(vO$*<s`9jt7mIYmT`3YEl1A1=Hy%_l=LXr5oAf&4vm1
zS!kp^6xH~L-L;OJ$Y at Y&EB<Bwt>ct({q@(Ay~^XY*V)*Cnb+XwJM5ZtON3U}0mtu_
zC!KT>@=}2K at i#f(r9k}M5exj4pmt<>aMS+FHG&7<%UAkGzLx%dTXl`UcohOykXL5^
zS2Tj(&4KA=_sfELB(|Vw1^})Z<9 at l&488)KomT9t?zox$nOB8050B^y>S@&hS9j3h
zwE-IJ;McHHZEn8#X3D?)_S*$QQt%XfS<i9UwL0<7W+s&dC!c&W@}i&#ar~`lW_`=)
zlL7vkBbHdOgj)C|i1F|6L-Ub$P5)Kb_*>m08uxL4C}{eF*PTHZN!La$h}Sj)Jcz1~
z&Y~ShgY1sqE*j<zPpzoqX*apg27)9`1T^OP%I3?jah&h<<Bx`#U)dl2KGG!SD!=06
z4-GzA0({N<+YneW1u}*W>;Z&C{W at eXpnvZL@h=3W8~#4hyqUet;jhCm?_bp)`>zrd
z|LXrlq58uH0<hNTKNQixFk^Jw!41iwS7><Tt7(BPE(Z9h`L-asGdJC_*7)mwUIX6d
zn1u|pUD7R=aTWzlpPQj@^%08UzeM8V<v&UD8t!*a2TnirICBajf7P_M6$>q;XKhvy
zcVb8n^^u`fzaiTTRH0eU%)>vcq<}()zbFWYLzf9vn{EBaU$gBBflj4$R<~}bVSx*@
zfNc4%LcX8>%5?!N99oZbGx#xgr;o1F=_cAHZ{6`)*@p!mX9N5Rl^Kq6cm}zuE(BqB
zQ`2{+5Ez*((YWD;8~lA=<#FbO#fqj?);e`8rDtsx1)MR7L0_Xu%}5x%9or6uzm6re
zMG8A&xbn*7zdf|S=uiufJV^gaP-P!>4gWO`%O8JDo(3!z=K$iV!*Mse4;`NPdk?Lc
zG_so|h5j}WJ~n0rzmzH88rjW)oBq4<oxgaHD8qnap^qN%+LfDJuCVJw-gRZLToxib
zObF8N%qoB4_sfGFL|F6M5`<?t<hKeWTHIFr%m3b*uO>jgl5r(n;m)L1cjt;L?*E at 4
zlL(B&4eEaRguTkI!vOa+ozl<}EHNIFphXF{B<dP}05xNLG`O20Qky7*dK(UX-}<FU
zGlKz3T-P$&mDg5b2AAW{JR$JWafLh4hBy91p8M{{JlQV+SQ`lb?%=?q^7|(iWXT2)
bOly7%;i&~5YIigrQ@*d<3_jb$PR;pWU;lcu

literal 0
HcmV?d00001

diff --git a/utests/kernels/compiler_box_blur_image.cl b/utests/kernels/compiler_box_blur_image.cl
new file mode 100644
index 0000000..42f463b
--- /dev/null
+++ b/utests/kernels/compiler_box_blur_image.cl
@@ -0,0 +1,18 @@
+__kernel void compiler_box_blur_image(__read_only image2d_t src,
+                                      __write_only image2d_t dst)
+{
+  const sampler_t sampler = CLK_NORMALIZED_COORDS_FALSE |
+                            CLK_ADDRESS_CLAMP_TO_EDGE |
+                            CLK_FILTER_NEAREST;
+  const int2 coord = (int2)(get_global_id(0), get_global_id(1));
+  int2 offset;
+  float4 sum = 0;
+
+  for (offset.y = -1; offset.y <= 1; offset.y++) {
+    for (offset.x = -1; offset.x <= 1; offset.x++) {
+      sum +=  read_imagef(src, sampler, coord + offset);
+    }
+  }
+
+  write_imagef(dst, coord, (1.0f/9.0f)*sum);
+}
diff --git a/utests/kernels/compiler_box_blur_ref.bmp b/utests/kernels/compiler_box_blur_ref.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..149cbba1d8bae1fdd4e4803970e06ec1682a40fc
GIT binary patch
literal 49206
zcmZwQXWJ%KmA7%{Tg+Pn(kLhjf(Rlu2xc*%h!M;=D`LPL#w;qJB7%wt=GGQ4Ac_H6
zZAlWo%>1fO?ltAzvybDc*;ie=_Fn5;|F!n6>u!AZKI6C>AF#ILT=)2Y7vBH>{_6q%
zt*70%UjO6r%x6CHS<iabi(mZWcfIRfU;EnEzW at F2f9XqKdfVIH_WIYq{v#jx$alW;
zoolYS=ErNh`s%B{@P#kD^{sDx%2S^5xW_&2=%bH*)T18dTIbkfkA3u`AN`oeJm#^F
zeeB~O|M(M5IN_LMj`7ta9`T6o`^r<#d*1Ut^q~)Z{No at 0;0HgbfBNaCA9d7G#ytGt
z4?p6FBMv|Oa2?M+{pnAC=}TYwhBv&yayrjg+pAyw>JNP21FZ7+CqMbg&#di#4r!nM
z^rt`dsZSZ8W60+}|M|~-?sH%M@|VBzm9JcU at x|Z#<~Ogr@=Ct^<R?G*#V>ww{q@)X
z{`bHC%U}L-;J|^~ZoBRFwdojOm2=NM*P^d{<ty26)>&t<;?z at 5<p`Tu$dVuZ=tsZ&
z<u6Tg^UXK!- at o6wFMQz(pY)_B8Ft1QX8`-67rp4^FMqk4XP$ZHv!DHJ{nx(swXb^B
ztDgJZ=NiM)lTJDbE>U>PTi){ZuYWzrZ+`QetsDPque~<@Km6ejIU+O$Kk<oAL=`t}
zjlj|IKmPdR&3W?4CqvCnUp?}Xk2J<rIIPGc{9$~@JKn*h(@s0B8C)Osu!rs0vquz6
zB`#;5eKu3^cYXfzpU+=+-v0KtfB3^6jz7Fw_=Eh}&wdtg<ZJrw_=;@6r>;vcz4Wrn
zF2kRwe)hAU{rcCx{@w3>_s2i}@o#_o+u#5G_kaECU&!Bi=bd1F;~U=~NVpj63gdI0
z^PDF?`N>@47YiAG;e{7ob=6hP^QS-k>86`*`qsC;^`<wy33efP>QkSp^MV(=K<v&r
z=N#d~{3S1WiD;g8-g!JS1|?pT+!LPg1a5xyt6#;R*@S1z$3FHk`WIqS(b)XOFMjbo
z?|BanETMDIrZEX&@Xg6c-}(r<5LiO6++>ECktYC7J?&{v!{0E^8p(`8U{0zKWn(A-
zbK{9eWBmKy|9*yj;uD_$IsR0Eu&a-5`ic(w3V)5+7hQDGC6`=6{5<;J_r6C_`}Xbo
z&2N75hd=y*_;0=S)_?rtANZ61zyJO3U;XM=o_fVAUO~6W^A|2KB|d0-_wL13T*#nk
zLL`ndND6q6kp{D0jN~}4g#h_xGp!~Z at qh4xAN-JqJOsD+fA_oJB`}j4!%b3QYWyVv
zFD|&?f|tGQWehm+#1q2{7s!-<+;PX52fFkRtou?GSelW%V*0w*y-uxTp7aEt4GlJx
zkw+eRB>fw2Dk;En<LOY+d5Qv|c;`FcDKUdQ3P+gE<1Ym9heBL at Mf_45e7LT-;tDmE
zQ|bo(M4R~k`OkmifAHWz`j_d-BY>Jk!6)PBF at yVx^ZVZSzRH@)M)pD`h!V&AzA_B?
znrC}T2t?E4nvQ7l{Xq|UkPv{zQ+Q3~aRY>aBlxF(2D6HU;!gum$G-xOHfW+?DxuM6
z-hlQ9`Naz|W&`Hfszs7WAQTpN3ZlUt5e0#hN8D$L5+v!k%x06&iSjk#AIRxH^5UW{
zxg#ivKmOnT_O}U4j{p4UKi?J~;>W+@?<&(3N%WX!Me1d_%$14neeZh_AW=&QtH}l3
z)gyoY^Pi=FJ;kEZ7IPs3Ut>APA?1#wt|G|}9Ee|2&lN7)lL|?1gh&5;VQuwa6x2Er
z5*^=ygB577Yfx+P_m$9S!K8eB{8bw(GD+ at mO7uy~RI=5_;#Fw{UsIGM2;({a?svbN
z>{(9#3_Jh)^W{FrgUo$r23}+0CbM-k{DZIZPw^pstfu&YMz at r&-Eqeq;M1@%^#7XI
zyvB-TNdU0B^U;rfbdt;D_*<6^mIlW at B8b2J?QgAx62F9i!Cc^VmRDHBLUSL1!`4QD
za@?jP1fncn at u&aUe=TwO<(Ko_gJ_ezrUTj<gkyB*U#sIQA<&l*<_BB}5(3*08EA|l
zW(|L50F(4=krmuhz)654tP6;EX at F3m5`;F++*fBLLhxPnHTUCB{B)K0!Qbw at fBoxU
zXXm|ZZR!%45xEqA-6jirX$7_A%wP4hgmp#1<m!VhSosoA`wMx{GlogMD6m{WIqs$=
z1n$G{)TbKrk%gAVU%U*n5dE9^r$7CvE#L<~_<`bvgS~@3!B78W53**@U4?%F=^}~0
zW(@xF%MuEXXXP?csV5Xd+l*9ajDa0+9aYg(KDv6u0NMb=2~Eg|%CqglRUsUx5ge4d
zQ{^E}a7t=*mGLAbk(G$+uDj08i`Xr<+!BAvSNWZPNY3L938qCr5OuUAqdxN)OK9+F
z)-sZ4#ne_}ACW{#kdMa0NLq!UL_iyMU?&P9qWIhL6k$b`h4`yoC>drsnOOagzx_*?
zoI~0!u at wch!3P|@weX)v$%3-tU(&?QQ%*TWF%bpg2cK<9I{tQKOUsM0qwPSX3Wu3J
zLJYzr?v{?ftB>u%q{z;c2}nr+3+3Axo#^m~h~>0o3*(5r(uw`X8*fx<@UQqIF9g!T
zQ(_GQZ6|NnqF`DJ35t`61e6+<2JMC$ZUEmrCefUNR6G_+0X_;rnqN})oOATqF9c$t
z&OGpe547JYL?$$qRHZH-4YQoBiox_R3y4Q$BSn<3Ed=oDgHQP&D<ew1kEAOo#)yTu
zXa?A|8Kao1rNOME5Qg1BAgrtDn56Itgp#EMc}mDUE*vsfpTR`9<xiPHfC*eMI!<s0
zeBzhdgq=J1Bj)5YC(jN)&`AxY+bSRg-#kJIg|_Cwk_gsSloY5+gjAA5ijNu8FdKoj
z$U~iExe!QsSIi{>u=+wU{88c*%kj6IZ at FwR1Edo8P7CQ@SQP<srA#GA;G7k8sGU$#
zuMXx00BC?t{AGa at u)5S{Jn`64Sy(RcmpwAeBsL3!)gLogf;`nGsKZq85)Lzf&ukDd
z(R74>MDbUAI`ap=W4~PP<fB~7YZv$$boO7|5aXcIQ4r&=Un|k at hgS{ch{!tpgD-u|
zaL+yWh=o<ei&m4mG%p0zA0G<`A<;iiB?8MC=_x)^APwLzVeMA7Bope(Wpk2f<sDvc
zOsWvnv~6E at W<w8uE&e7K9eF|FzGc80-}pwgP6~5Dl5)XEi6H1IzjG<gSH5~yF4&*}
zkuo0F*8~xN at R=R|i2_hne#J+^;=?b+NB+uUCm$zIzd0yAPCkl8x>fuEBrqj{4eV(i
zQ{kY+zd(z7`j-OoOE#(e9 at p-^`)*hBTbf9~WHZ`ID2<_tIc>Y6353HZi5g~p)!x;3
z0uVTPCt>lIu*{YVHhQdBhzU5=e^(jgj+y0`&9t&(fR1k!BGI8+t(}Eoa+&d{$^!Kk
zPhmw~`c%7EC4%B87Ip`dOFc`QM4&z8aUAfkl?e2SRpJM;V~@NBpZ)ow_*3lg at 8pS_
zibU9UAIEZrnWs&}RYQh2MOjP#P$*W`5?1wp>W@(R2quL<-C+{^wgZk75lh$#oqyB^
z*&$m!VhP`37=LFT^#^=~k^Rc4(rrR|23CClInE%f9vY19_z0aefzh>-JpB{77 at -H3
zR06ZyWTzOh#LS*GgU8KZ6BN at D4CU+C#KofYmq(_m2?YLFIrf0h+AaTb+2+{K4i1VH
zZMeX{_uhNeSSGR7p$nM=53dQu0+~4lSxyLSKxkOh=5E?1Bz_Z$1<{&;?D6Dd{1rFu
zQ;|f_mt_iwbQ2o2#lh7hasegIDt+l6fAvRSuE{$QRG&Ra-atX5qj|AnxdQHH8g55+
zrKm#VYH9qL%}0afnyY829r+%tZyp`<TTc1n2>xutpTYR6U^onX%7ke6s{o3>;-jjk
ze_jCP6^Yaxbvm(tf8TxgQ7qq?=QPM#f;27WX48DN<<EGjXLbBFMF|<nWh1tg;4cdD
zOX+h?09+FSz%@!M1-ipQYB!8jyk42vxA7PH_!Ga$JO5kMY at YI4rNdA4A;l6fp{f<Q
zk+B00XwunkA}$Eytp32R?BhlfVolGyR{3!*Sri=8mO)h^K{1teJuY6x)0Om(e^qEL
z3=4l+rT at fFnH7J=dy$O4;^X8$Cq_TG*);8Oiis*JuL%;Rz?!XQ=0f0VEz#)|N(K_a
z9Y=SdgcW}qu|P;DWB90Gx&lt{B1?fjYKjaj)-pp!Ws5pph=@qhe>ux+B~EtuXmy1P
z7W}0EP~fN=?qJA%Q4k%K+<oN3E-3oykF^}Fd!46YA#ev(&lXKjsQ?q!V&RT?hCg`-
zqFqCQ6-SNxDvuT={H1f^xATIpc%s1(W#Q1`?<~YG$(05qthH#;O(MiWlLZ3djwLK-
zQPAu`%%B8KL<m at NfiDCORQ6?-AZccmmZz!;dZHi}_;<(NCxa|ua&?uuI)HhW{+VqH
zaB|~_t6`3UfYS+Lu+w?8U13z}MZuL9WM7j7<|G5FJI1iwRk1Y{{g8oSe6Rk*-^|kl
zMFe?47)Ht?E=ZzEkdg?9#tSWI!{4SB{5D at qI{AB1Rex;09oMPC5^X at TScz67F$bY0
z5b?K!DuF-v<jM^2MS(HkU`6>tpaglpAX*1(mZPe$1Y8OTgmNm%o{}SCDtr>qO=d`T
z$}}6}r7i4SkjSbi8yE&JIQT33Y<A}Kh}N^d1)LY|z(u;QL~e4x8O&M*q-5kcZ5VGt
zYKPjjzK)3K3vqSKLh_6LJ?ju<Dg;y^#^YZKxH8iIOaJrEOZj#&KRa~t>}LnNq*yo|
z at kkjY8=5h{Rj at KY0<de#9<c5LCI?>w4R&LA<Z&IGDZy+i8~B?2-C37yW<$od#Z!^>
zk@$58(mZBULe&IuAuu)|=9F$lJD22DcJSA?p>WM3NHWs--}@J0m3_}@=CqcM0i3d;
zrW1dfFJbW~du2p=dPL%oefkf(t5zWJ7gJ;mV;)D!BQ}E|o2ao65GO>oOUF5TBAbav
zSypzSP#jc#CHmG|Zv}_);R28Wt9+K-%0l*E4yr%+^Ve+jsRiFc6(7;}EF~zU;JdO%
z8TZSE6p&f2ma_+`DxEQ4kqGKA`0Bj85HeL%1f_;CG at y(Ch`*(2UJ3{SFLZ2b2Fp9p
z4DS7l{*hsMGqc=BeL?JXL%1!3za`W<{E1daxP?GySmlIc-Dr>a at oyu>A9nB!6Khim
zp9%(%oNX6aO3w;E{?Iv5;IDpy at 5~84;A#SW3V~dZAkv(jq{0Rs at j~B~ZH$yeVV7L6
zV^z&pG^{RjaiC<yq;wVq$zm<!C6}hkdEHRKgh_}6S1GU+2E<j=Od=MT^ASuTK(DFD
zL(Q=Z*ndUAiH=pgW;RtDY^wza7Sd(8CBSihP$GzmVJ3HFq*~|7X5=}-1wnU**PgPd
zhP-StRpd?HhUlZ{SjDl53zlX80^rlX*%CkUaH;<kt4RUcqnuuNl^REM4S8i5Qc1*S
zUSu{|>foUHN?Egsi0KHP%@nTG$YR_iuVKK_szeY1UqNk)fn9!yf+p7_ATb+>JUE)&
zuyRCx79}d_&rL9yBpjtuXCB3e7y9&2vRI3?Xn2JE0_Sm8^AHb2G;cY(yj4WGqZhM5
z!@pyLC71y$VT14Sjy-7}{F)_9ZWW;s0+Wj@{$v2YsnkRDv-%G^1rooe6i~S0>CCSt
zIGo!8WHg at C#VU)6ugRIgWz*__FC&08tq3YLuxpkh7%nI#8sPeT!Q5AxIf>IL)D~lB
zM_viC3pfZ#H at iREq?P&k0-ZzvA8>keV(<6|1?d`wGqn at H{a51!%k2onrtVpb2-y!v
zOu#Xx*|;MFN)3gOH>W5+YvE$B`*|TKW<XmAJgZfC*yAQLtkN-IDP{@g;V<+GmpLmw
zOu}EIRX$RnI!U at vbY@V3q_A87)6!*VURy$Z<1Yk~5qynpB5O8TKr<Sb87~BYBfuA5
zS=yW;rOz1E$)f!n2mA0B3$J6&0MZi~UXYe3NCXBr!+>um<-R+JNhougs>;KD`sWLc
zQ9}EUVZnDL`|1Oya1&X(fU-mUSn(^tc$`xnr(Ovn?-~zpja7hatTK;QMQR~qSZ*!z
z6N#|W2~#m)6#_zl7}2uaQC#s<|Cz0E95?oG5OC|7*>WvmLU!`VE>QmZjfI_N!$C)?
zx>}{ZUZ7RE?TN^+l2P0heDHe<Ue7_x at 1in72w-H1${@t_Mp2IO8vd?6$`0rR+M!7D
zs`)BE{;tk)3M}=~24Pc?icxc5Fq;r?4Lx#_9bDj!Ex1~3PR4UYEPTZP!sb2*IvTuN
z{R at Exl>4O8wN*p`Mw^rnC=_Onzrv!-Dw57=$U88onfjQJJ;Kc6qd6_7ud&ugUUx!c
zIbVcWbrLT{4CfRsxb%ab`X<E`H-T;dEXF84juyW1DviI_>VbdPU3a<DiOUNDdl+o{
zAVTD8Q1A{hc%>WuRD?hH9?`hNJC&bKz~@f86@#_(zk)no7K399y%}HTDi?~RnT0 at z
zxg22xZ~y at r{55w3#kYM0zRB@#30JKnmQ!5(r4<5X2}s9I<ZHtp;b>dJY?gDiG at EH&
zLa~-rW|nR~3M-f()48VK$BG+<z7h)o!e4aMB2?W$Oy$9!>@^)fF%<%Z$g78AnC(D@
zns5jIQT!EmM)C+KvF1qn2cQ1AV=ZDv9$QfWS-d2#Et at -uit+f<Kgg=I0}t{-K!H3e
z7b;CS#Cd^!?DF!3kLG4AI2E6wpkMuAgGr<k$w at 29XRvb7o-0*5Hru}>0!I`F!SZ<X
z7jAQAGyQNR{xXXWabPW&Xqyvlt-k!y^tb#Opae+)h-{an9)BsI5b5KuFAE$>)gn=_
zDLahu6nR?!{R=(6RMahh(X?^6#$VP1U+(Kb&3FZYBb;)zrAl6vIqaq~p(wzm<36<z
zs{5j5QA=ZjzsFfpW0jj?Dg=?o1bJ|P5?o0Nz7oM@!jr929FS2tsS9~qfR2NN0Uq(V
zGHXTiGd2BNh~sjZocLl4cW|H?vNxONRYEh5eu2;tm(f3`gn%*35PEDeM_xmI%U^0}
zLQvx%-+9fX(Z3R5LSEQ^xBT6d9kAO{6?PnyamicGE+St4(GH~nZd<fjs6VzFviG2m
zI-KGQ`(=miLkK*TEcLbEGps66p}<7Ez&E*fir}{)%Ki8YD+?)5A}E#MSgWg!(#LX9
zZoji)O*oiQ3BunhNr-+tMe2YfuPr&S>2pB=v5-wcLp~+QJ{1P`_$xuvF9q;dh~iIO
z$&A0&wE at 9GS0+?Bhrbdem#aU#ApTzc at W+JNTrdxnR`W&Bfq~k=hg~isrUVHJM_A}U
zOD!Vk5ln;t_QVg1kKj+u0bhu{ycloJCbUH2=Q#2j1-4hZ3W|@e?(+pnWr_yiHNOy8
z&MKOS6CVC*j>E0KrRkr+c9Zx=KKQCxx!|keFXC2d50ZEBPxhsNC}`>r_(~A|HEU^-
zk+a;ylfdvdp<^3L$g4l`XAg$Np9rClvko(=5c^eEl-faXrZ at Y$kt$DRpIj*<**J~k
z!$*k^2pV*VKN|5jn|+o^T70ZU8{nH<`BM39y9iT-hO-I`vNsp^U3~;ZM)0MBO1prF
zSAq(GMd^nbbfrUtq)0_<gIAFs_;pHz>d$Ne46u+i)KRFtYlq#nEudV`--=%#z(=05
ztg^HN0KE7U43&EG9sbH1FL<r;XoM|8ZL;_?8+o{NWRSQh^)wH at 0S#7&Jc|jN`DK3m
z<%pv!ydZ3u$O!hBP+FOpRh4~l1fTM~>=3^*KkO<1!e(>FeNmpcFnB2(ms~=tR>X&4
zG*-l2OFiO|T=BQA`&2|}D!kSVU11jmH}irc>RSe|K_=pF)A0&S>X at hbWZyOZ$ZPtF
z2L2XJW;_LrgJu>-Te*|c?7!CHpe-0uSA<;wENul*1i>VG)ye*)(>6`I!fI21h_%aR
zcIl-IHk-I`mI3&OB_`lAtO;2~kQOqhkdd)@q!RJVdh_VC(N~(Jo?*t&zi&0<1xxg~
zrid|BqP3#s;?E2n926ye>RRzH{2j$BJNRn at f3#!?<nga=dj(V8sXf6*JK&h>h((Q?
zd?z#9Z2b<C`16Hw)G_tP{;T!=WeHzVzLJ8xK6=2CsK-kIvk{U2`N|p9S%@!{sg9#6
z1BFN{`#Xm8Y_P<s@~8=#K*Zm)Dt3=cEA+_Q4C)N#sLFcHJdA0JF{aXlzhP-oni!A2
zC@>!9GR{J3Z~Lzj#0=~D%K0CEcu7taXr5pMBK}o=64ii`S(=d<BT`<${Okrb$Y{6K
zD){aclu|=>SenKHNX87K*z~XdJO6uS#vd;Ahja;ys#TTv)4B01*Qm5;c1rO>2l(<D
ze;s?D2i+7GaTHng4HiOGRTMFnr2hh8D!Iup<$_{8Xa<Ah4><T9hgU;YDv`Y_=00jV
z#^3{5#E8>iX-grcK>TT5l)-m(p8!N$H2G@@Y(2iF?4<&suaz43SAUF at 0{9zmq at v-6
zZot9c#a~2(0Qmwz^RU<S<4;Sbb#mVFcm81s{!~r#Xc&e+yny3RGo_M1xXDL*0sh8I
z8R+QWxx!6F7z#;^43d;4G&lpEEL8x-CuKt6K??~Syi|>CCk_7M>1wtb2rS1O8Iwyi
znd|reef#!NkxicqW-uYt>W}5Dg?Su=+oJfhQ?&%sTIMf^=|A#a-8Z2{U9DRQvM$m3
zwa2f}9dZhRzW1_{V$MQ>j=9Djs|y6NsR?FgJe8(@#t(l3LMly2*GK3ysA;&SjtL4c
z2wTW(=!&*FBSt(mQuyqcN)YdaMnr^w8B6uq`I~}ps6RrfVi*sIk>*MKoaH#|uB-)I
zgM~ON%e3nJynp|GzdYLzue<I#aso%lMBIkroKvphU- at M`{_b;-N%nCOH{P^nJCwf_
zQ$8DX7$f5>ftz2v{qf6tt|;Iie0{aZ$BMsL(CS(|mOs=YBOLJ;(DZLA at HPA`0fG&J
zwpC+^%t(Dtd6rNCG-2nciZ*WG3#g6<!8DS#MaNX&n^Q?qI!tAUr2(2m-oeby=%ab8
zrQF$k(Ww5k^LkbTA9HYOK*3c+yuvWspFjKw27kx7_I*JVZe>Rb2)E^sXBf*Zs`Rl$
zjF{~dB-}GUw)&bSX7kMq*ZBKNp#8Z`-2K8J1mMF?{D<;a4WQ6Of%uWc6IcPopYixh
zVf at v9H$fw5_1qRf*s!QYuzQxOYbMe0QlMxXK(y))y=fkFpT>BqUr7-lV}Ru>+6saJ
zy_J~C9r`x|8iv_h?Z5FS5(-2EbGx2`rXh?BQ!Cv9;VWl3H5q>yr%*^ej_|q^h&lf0
zUnx-TR9BkO1ReGX?uvimzvSC`kY<Kt1fQHFi`8vyie7*5^jie at g`f`EPh*3cz(>S5
zn~X`(JWRzr{z72R;g2N!V5^XNmcc?`9<#yQgvR*RuP%m}oRXzRs~~J4!xSjtlNVO(
ztZ3H*p~|c{2&)NAA_VlW;<W`h$?z9R&VmzvoHZXwQ5_H|@uDU1f{2zJrxjI?2#v2S
zEd~4nDdVJM{KY~oWive}m?T6M7HSm>>5TaC_m$<4(R75sS~ePocKWvq;O{I%{K}3t
z<m)I1HDqA4fg)*LNk>a;R{tG-hCc{sIP)08NPP?$EDCs<M2BBm+=NLpt)!-Tji>kr
zR?;cF%CGUZMJwWFX2Zbu_kG`*+;R$n(BKb?J<+fc|L`C26A$|dSXpcL5nRVPzVOI+
zu at gbsHn~^}fsDi7a`;mbJ+P-tSN$wEf%f>+A2;O}OOV%e$^u~$YkvsyA}j>{;;-^l
z^LrzhD1eWc#u5fp8EgS6q>S6eUzWumjSeJiGguLGwP#^&9#Ie!eY-Os(W{uRTkG;4
z1vvEy7TJ4BIQ%<0OLLh!8p3Lzntb at -htp@TB+8wN0V!4Ek1*|33S5~gTQwaz1mD(a
zuvXLnRFmxjWJ#P at xx*KBDnSf at 9ek;$!#0|?kP1nY^kX)LA#Z+cxBT4~0<Bzts9-^d
zzaN6|*JObbq#?g8N5}&OAU9i`8d)Vht)l*j<LF;<*_Fyl1zDd9D#NPxv)LJTbw=^w
zg#=OI at u%lxMrk^tOk?<aL?TFkcRZ_BNN4NfW)l1vV}LLjj6bXTZGp`As}2|pi<)n%
z1y%<E0W!?_zd-1iR{d8H?84qFJ!=LE=ZnI~Dk;f*Nh%z$OEhaSl5%`x4{cjZeG>vJ
zT6&t<d}|4zH?6%%eC?i&Ui9x2)U~sa5U536B}MzME8P+R4s5Vun@;>~zM{Zvs>72w
zA(ht at B26fq7gE*LSHusUm`aDv?ZBEDcFOlxW)5;$$c!g5!?;OxQb00toP*pkZKojo
z4W at reW)+xrPj2!T0Vps*USa35zWW9UfsvZxuhf{+Zvsvu{&7fKfEkRDp$wLf_!Eg_
zv?wpQX1iA&<t!mtT3D?m#Z);dFz^LM3RqMMFk1*vvcDLkXgl{x0cTMmuzGs|?D*Rh
z)FrFe=s*5ap5B0^rQz at 7z-)fuFFI)JFj8G5OC({mRZ*!>GFvo_0gb|K>td>&`_<RK
z?xrXU873|!v4cR}*6%81tZOYQ;y57ekxe3QA*G3=IfzF50f*h$K=TwnfcVzq;8Qq9
z at CVIl1O&$tV-UmNefi5B<`Dq>OE=32H`gr33%Tj4%vzVu&Es(viiK7bB2V+0rNM_q
zM at m{w2=LbgqT{IgV<VOY_+zDkZ`*~1zs!J<Y^<e-Re#dI%9j4I1<LNmI}%cY;_up4
zLbUv{O$Z8MV@^nXq5qb!ibXrsn8#E0XxS$P$P!6Z!I4VF%O?DlyEfnS&ubdvV}~^5
zT?jk{j;}zd_$WmBl2`G;- at Aa2;fB8fj=pA=k5T}6{Bdx{LR5jgw1veTsb^YwB-hMf
z>G%su;`gmq2 at +WXkPfVpamcGeuA1K^C|?L%r33g at u_)~^gA!bcmU!ad`Nx%a)gO?t
zrETODMun)#BWk`PY_pjp{s{YsA^i&hcVxO8r#JbIHkp|Le|IDZdvGrGNJs_azMD*H
zPh=SW+~htff-g5^x+}Hd>?XVhOcjFKFz_|I0D9 at 4N>OFJO?LQ8I(P7Qr4Tk_A_0{k
zb4o7ro1tBx&9~w&3Ysy at ZfPMf*iRqU9scdb_5$J;3(G0LLO^NE;H)dQ^zT{W;~JZ7
z0r(RV{l{P3z)g{KbrwQfGfDh0XR~?mcL#sug`i4H>UIGsK-lt#y7ZMMO~?F{Ny%QC
za9|#7;BPG-eI*TfDn|1QVJ8Ghin9la(}3!L at ydd?7zDJ=Kf_=CGM?E~!AQbT6`3S1
zs*sG3vxGqa(t-RuXkE&5wTeK~KiRwb%GFvz;GhD&__|~1Qh at jw&~-Tytqn9HBtLFi
zMcrVGx<O|6`~8G#Y<9)pv`&c(g9zC8JG9V-TwtM%18os>l at 8{iA|WPqj*vG8Ib{hE
zx14#vXMp<-ftnJ;7!`?kR(G|E0V*E-<IgX8CjNd~;GNtg5>3Y=YFGSOivUNA-^Cx6
zz9loXS<3)Lvcr!AbodbnY9Skz!@?1TQCKaF|D=G7Xcs6K3}_c75~f<kV77G at C3qnK
ze$B<3ltg}kW-U_0B>swa_5c6n-y_bSN{14SKU}UH!Q5`H_{dz5RXym|<oH)!XbgNa
zzz)6~;XBRq(dkHY6f{_fl~77%0FMB%16qz;r8Wnpzi$;B15_T3_+5Qef*>-6{t>`m
zLGZ1;PgDN|4u9YJ%7kPi;wrz;t2V5aXpUiQBN+C$`W7W_3MI~vYNdd+3PJjp3k;S8
zMru}Z$Cjan$buyU*Je`|5k~@ipa8_WP{?!uaT9C$=aC25Jo=|b<MB~{0Qb=rAjbuo
zFM>ktikLVmLHeQ~C>$)8Iiha{JY6j+S!hpb;;CkX7Aay7P`V;%r4LMjwj3;w`p9?1
zM}d-+ZPq>_?~W at V)qjJ<5fEO0Pk3g74j=bBWD+))2?KwEXE6Tsk3UsZHdQCS$bBWq
zY@*KqSBVz?$pSV5&cgW10wM5`k;(|{G_Qg0pQ($8)is5h8hK5(3X$3(b488&p7Ph6
z_?t at o$5Xrj)W at GJog$p{1Og&DQCLV?E(?J<&Bhm;xg*Ev-waBV`<!w*qB{I at RtW3@
zwmkEo$81Kb9yF}}2nu0vjhiX}g at 8cJ9MmYV;!t at pk}x=8uyY{z4uJw>7%T|0pNary
zCk+Szo2 at I>LZg!~7^aC4mqktNU?1 at he<3IeR at X9#EQPEMOWr9&-obf9`S@!Lpmrgk
z#zH`oQqm(7MJ>e7c>JMoGyVpnr?0U}pEmHPPggfNMez1nrP~GvIR3OmV>(>3u3_Tn
z<CNL5V9%aC{1rqx<WV*-21)bFGI0Tc%rxGC3=3`W8WytAVXBj-!M=rv*WmL-U-&#_
zE3s!WK-Fa`VF<ePl-kN2{=Q=W%6|FBQIx4Hn~)MjaKyihKZAX%u}ugnL24%RB#zW0
z08#L2EDHF8Z(2<uvNS=)-y`CsY^HyYsJ9#k4b1qr=k_3^0zo+`gx9cx&pTg%sUq=(
zgE}5D4?SDaX2ClRd;wB_=>M?84x>E;fO4eqqk&VL!s27EROW{lB{kVRf^J<IVT`0u
zeAIT|I>s0&C|-W~YrhagH+_X9Ygs}7)}nk at QQ)1VHh|gLMjo0NxkD0=!fQ^;Nd#@t
z{rWSASWI)LED$g7S*{g37P16VdZ2uzKvRPFt2mRcGD1IqZ}|%cA2DZ!CS(X}W?-|Z
zp^d6BYBJl*AR_9I?ABDIGD6>Y^VlqW%j at z&*_R!*VEiBY(1*H7a->K|c2$B=2Azkw
zK)MQ%BqbhZGk_VY4X1EsHXE>26``gXmY466$Q?^-!l&tgOc*M>#s-owGtO*t5?I+U
z7Xeb4ji*c|!A{I&!9ss+!Czyt1f?t>dx^m8YLO`D2n|F^3XELPD8cU at mVnVJLdFsM
zugW6 at Yy>{?g>3?)8Lx(@JbXt|1jWv`agb$fBSJAHuw;*CTf9Q&aY>~3lRf6;zG3=K
zp^hBg6e){RH8Zdk1v4iDrrJtGQ;L~Z7N|S~!#e_IlGH$$Tv_f}A;4c;fVCeX?2N}#
z!VqgAaJ4RJk&U>smS99g!(WCvobZ=}@h4+hz)jfEw#&E%-_=cbgg`41WM$=uN5rWw
zG!=jJ0I at WNqM(@jmbI{R+~I*=R5bkAkDh1Q!&)6PpbCQc@|RWC6?c`vgoMNwxXf=O
z6JkveJ9!ek#JByqa+9+<;zE!ffry>3gYVd2Gr}20{Kd=2VrO+o0cVe>(S{vX at v&2|
z$5W2nQl2EFs*o{Qj6CJ>rTne$=5~J&sL1 at 5jz2S)<m#iDdBiVl>0jHX0Omew6PF2%
z5QrK_Bm(#vg_DZpEd&z5<d{$_{lp)3HroN6K=7A(N)wy8u#0~?hzE_a7V{WM59Yza
z%yt$Yx#F)8p%6$7?h{_*)gR>uRgJ&y3krJ_ZL1T5ZPcE{9*&?S1Vz>`TMXmTGdT-I
zO)R*{82mlr?B{XH^tQ-a{0){q*0Ly(TTarcKdNZ_?Y~T7iR=&peZq6zgAPobrGPSm
zHqM&KgYRbd-O>8Cbf5<z(4>Pa0c)LtScR&Hkg?EkS^Z(T6wrx3zj(*fsXyu8vx=Ch
z%6gBRKmO7 at O=6CcC{&2V0{_mR+^0PpxLnm$3fz$e_G=|hG?jNLppw{*Z3IGql11g0
zv;tE=@u6)Y6CK+G{@k}8N#V}kYN^DODfoMe4QdyAM6gO|9{fR8ZHkN3C>a?kxO|aT
z>_HX(vOoy5Mf$7w-R!IGutBFlSY7NqE)c|74PS$>{EuSApI^QLob2g8{!~PV{33pC
zl63V49FvHe5U@>v6wgkH5OruYfK$d`1vuA4K`it&ex-Kg at h3>9Ag#T?#%D$QCV$x@
z1kOS*3I`v}FTbqlXe#?SVle*9P-=L}Y~t~V+T{pp7Z3{-OrCm*VdNwP at wX@o`Q<)i
zWTpGeOaClkIX9h-NEb;4m at 3rxBdqD9|59M$;wyq=k`{k?gjo8wqIFX>dEjqmG8_H-
zDDK9CuT_6M<&FnyV!?6Z!9 at C7$Zmx^+L)-f%2!)}JH*c&MU~8`osazGqgdF2p->Ps
z_iYmvf*MREkse%?BiaxJLb6t;P0FDV`<G*?)s1&{0$kS6zYu8pg%1#UD%qto8>E}%
z=wE8!(6&-_Vv;5h<Y9o*mu=4c*ivcyqwNZmb=}lY_9~ACzAH^?_^S^l;ny?_rL&J}
zi1?Zr|MX9Iatch}N^=Z{f8i4a at Zlvwy0S?L0gZviS~G(W5tSN4V`>rd_;Zs}sw<`G
z;GhqMCh^<&6kf?<ezP%yRkmYS7#&LWdE{*1Tm-waLno3&XfodBYu7-&668hL5AS}C
z5D3pIkC0lziUdI3e3aeDvqvihSi+u45RE|rAf9Lsf42GP+ at k4-PRwPBW+!5&r)p%Q
zQ|0MuT_plZCujT<4;M7fil#+DpcWyZ5LA26&9t5P at fSf&6~d(YK$FP0qmo!i2skJO
za+AoBm-4~^1s%$WksQZ;CFl~97mm%i5jOtbs^kJsC9K9l<XJw-F~+v5?D*BC-{Jcs
zpud3l3zVQh#2%2X$Q~{*RZ(J(CL)@wWCJ4^=GQGT;)~^^z?6C&ie;PaMq>l<hh3PA
zO!Jr{&rWw-hkWqcL%A9M>OcOpWPUKImu+h7 at CRSY*L<t^$Y?WYs)0lhO{Exl;bS(v
z86d}1e(yd6CImJ(*tzD85O5ZJUi(V%!9icXaGbU&ft#?a>hzDW3a`1D6v+>N1xn>H
zfX;FD!#mCUtA{^4A at AQI96WeXMyNu3X9k7yi*5MZXN!IzU>lPdsR;)Hyi>aXWDM+O
zfe!3iW>7-dX-21h<ky6_NL+9Ouo_PMs4_;yFu6Htj29aI7UKIZ{wd!i^k1Lx4tU6O
zM3W234)`jA;zRuUf?`E_cKi!(b-rA1<$FymL`0-IIN3zRcis(y&pdY86sSdBq(iT4
zZc>ghiVyKCJK+1<H~7R4zN^$ANM}xj at mEy&E(NSe?QFoGJ(#OJLZG>6zcxn2BWdA7
zTf;{hP9uJqmHu_aLh}*x`hA;jq3ZyHzl<oj=7hbSuKI&N&Pqr7uSmgI^OTRSn5#TE
z3xOsUa7k4GT~cEGX<bBMlmd2vwg3+DR1u(ao(5m1j8GOR)0XYH=-QleJo1cWo+3}}
zLXZgMf*+0~g&a|%@b|m>F8;UNa*NZ2d}Kx&jr1oNK3X at _>|vD<6d*y70yHC1eB>8x
z#~f8`HDEO#g+|j63#y=JG152Q)mMfguVJW|YZ6=^CD8EC1tH+0r|?G at eA2Z;30cg8
zUpVmhxSAh)#m8Ev5_+y_?n?wR6MA~)JB9O?o7CPm=c;j;ry4a%dGG}b7OQ)l<2=Hd
z)XCm&S@;vYzMD!=A&?hD-akK3`7u|2D*h^xF%0&KVOsSKdFCNtyK#pNG>~Bw;-fsZ
zO$!Pe$iM+Z3Pd}phaD at ZHQ4!{BwY2o=~@V^75^B<pMXVH9iuDo<L?m#-1zuIN5IC5
znn1YXZ>sns47DV6GVIqIhMCq`v;+|sDWIBpHn23t(|qKhbO1qIRAyupWXjj^kFpGt
zgF?(m?(-3C{A~nilZq8J2|_<|L<v&o>EECKgrF=C1$n_LW>@^ZxUr4pd=zy2D?!M!
zjXi9$M|&#~1u5x4wbU8XeoFS~9N`*m%yz&$%||!229yQW?GZ4f`qh8qck#E4`qtq`
zQ#0kDgauH;-&Z8v`GGd at hu0gZ@bR4iGTnVq(9p9Bln8<-1hN2dn&&lVp(cAb(bln3
z;17lO0u?}9tWK*obVmibO!@e$HkOM#<HbTn5)@m2!;dXMYZrDEGS3o{b)}x#Yqm7z
z4%9ef&LsRTO%?9oF9n##0GW<SzjB~Tv8A5Qp$*Sz2B&|5L`f7xQ^TKz at tN}{{b+<F
zUc`(u__8nlg}_sVfO3SuoV0Bt_K`dQ at z1?*u+xz}=B~lF5olf+Oe?L3obWgcZ}2J8
zM`Z_pS11q=0$7Ab7I at H9tc4nXyMRFG+kBTJ(b^RG{p)Xc?E)o&a2SKOLTYm-01$li
zilM^*tKclwl_317!pB0u5|xv)gydML7!sJ$2b9#C0yt4f|HEI-$`?<eM6u?fUcS(?
z)$x~8o&^nj0BI at yv<kkZ6=asvj7PLd0gsyye^D?ecRcIVVIBuCdlukq)&#;8J?Tct
zWFVS~0P=p20UQJ_3qkr98W3#Fbg20#B5dG-Rpd4DIIA``0<q9^7WJ%uMfIzZEU*z2
z1&2})EKUF3XqYNt9chTfO-jID>ovr>8s_mA7iL(U*H~GdYjA<D$-Y9cD;I)K`I=%L
zf2 at GgaASiB-9g4NRmkuMU!y4bLjML#{fDb9ApIADNdX;EP at h4N^~5IJ3TFHT!YUeP
z+pl%VKv)G=69@{&Srjx8Q6j_w2Ng+Ef$f{<k&QVSYzdHob+zXTM6qCi=8ms~z`K~&
z0l~6;Fj55RhX7=yY(>)9gXQp2KGZe>9hSK23xS~MC_!GFZ5fUwy$I017XLONR~Tz+
z?Y~UWHDbo!mQ8i>*I|qjgg<wfA$&U-e2uWCe*@GX*=lM0r338SD8wI0BgtE!X_D7w
zQzaJNpTGP!ESeAyKgZkkeAM?iHA*qS$sT7>Aaz%T$Q{h}1wxFd6nvGC2$c>FD)k`S
zZLKH at mR985L|ezlLf~6u*Z{sF#sxJHfBNSpp(5iWO9WlPL0iSshQBDtO+SFcWnUvR
zJa<ShM=$ehI#Ys7%R=xmv5GxQgMFIHud$>buRK0gR7~lgdgCtyBYwu$L_w28#nC*h
zvLVWM+7m%FO$Om?e!dF?{?O6Cj*mKufJ`*GcO0DUgTzm1a-Rb6SF43UT)^i(_!2=B
z1W|tRk<=Y*h&=uba0h?o$nJo at ukcqDsoh#^_Bd<VfIl}SJK^D`uqd!%Eek{ee`QAq
z^zrwRFqrB=(sBe+SPB8`(<(d2>lm=*FJ!_;s~Std*KtI#r}G8>>JMY^7p(XbC;k#&
z+A>e$f<##8um3B at V&p6O at d!_;P8<c at D;TNZZyrquDnUka!F?ZHePjc_5C&Wn at CTp2
z`c~HpgcMM(#K_y3d^Djfm=Hj1X(fpAZNajjcQM&v7jPdUrN(j;$Z<CG_X0DBj*uxP
zPWVEs=m~*?St+3YXrjO>#?TDcqzqMynrRp5?^K>N at 2kk;AjI0D{);bGd<H)LqQG~Q
z at HY=Lz!wGT^$6Xje_KFh6KAa|R0v!(H=z(Um7k}jk943Ylt7jUR?+WcS1I7Wa%v$?
znFn5ppcD%M%|q>@iUGJ9NCw>RXsTWbf$T$!%u;(PK=zs_xTb$0kd?0D0toDkv1qIN
zsQkiZ<Ac#hGgpY>k39ZTKrTo|OgQTiJjKo<iC-+FgFEcOzp|sV;=lhQ^eMl(Ar^{o
z`u8mU;0u9{2N`KCj`NyHAg_{N#IFR&Vok?=(@IH_bJ*jfMB at cA>?AXFhW at R>Wz01P
zZ+-I{AV!+Lk<!zgQp|GFK`rtYP{m#|Z}~SfvOs`Hv<<>|kMnv2uN-M&p~*+}r&Eyk
zUrlW!b;J}9t2+kRd}Sg7oQ0qxV3ME&HL%Jf7w`w)jw~*|l0>Sj7h!`J>968vgAll*
ziKeLv!InSGBaf=q*2w^7$fo#%PX-kbh at hrGF2~<TZQ*|I^8RHK9b_Q2Vy`^PFJYuH
z*v&7*ImkzIN{8T!h{jnbY7BLZmk6R at X0f&|&5N&_q+)3w`)Npmq)9c|0Q2xy77%=D
zhh1~>@ll%)$WZUaKGF#?mbR6oNgeYL5BqHmrloc%APQ=cy#Rk7r5<BAI3+0A!!86}
z8KWJ_f8oAD3m{KB&<dp>R{x!!@yAnof?(I9f5KxAwZ~rvf6Y8flL*?y{LDiCAh2Jh
zC310rj{dEp=D^ND)9SbihmWNIcZ5J+2n2{GEurq&chpSdWrt0Z4J=_2GEx8;O)NO&
zc*$&<$DA3&pyq@<{`&OqMHqiSN*H6XM<jyKw<3=$q_)7wLa|2P60Y>G>8py&V7XJM
zU>S-3F6EE at x8jEdE)7H8>4+nJT0Q>6FE=&y$AeJBzw;-Zd$8ud#|vfrZC-w3;VJ&?
zVHgPs0r7+1p6jEv+^0J5IT(K*9ZobMfLhc at 5el2K%4Vd>;OfoGP2q480mnt at z&5+H
zk)p;1s<sOY0on*x_F1Kg2>$f16$QV}`GH89a2!lCs1M45PQ_f>nq2)+{A-d<U9v8Z
zSjA0+S_rh!e6l}O{E+VOTmCPA@(v$NXh2D%f8yWu{>4Ep{r9-o=@dbMAW_hy9tTxd
z1f&wHqyWu}Zv|gp1Khqq?V_Mx)2CiLh^wazKwIMA%sk%;jTq4bQ`=TbE;B<!MV;b6
zpl1fyc~KPtCLyn*f$t;o_)7tuew`y5=^z(8P7<aPeJgUoihS=livN;q>wnSX3}8_v
z;YQWe9)BHAY2a`9cN2fm5Yy-fLvqS;=N}O#d+>?D0Y*mf(HKQo!{1XLueskx9sJp8
zIh!5dot^Yeh#NlmSNx$)^Qj$b0~8$hg#&yFq$sB*Tbn)tXlq8+3{x3+L1{eF;jd=A
z0cLQY7qWm0j$w9T at Z|#R5<wFMeR)xv5ct7FF0kL@*5$Y;Lkfbrq`twf_>=-_kvqIL
ztP;eS#P7Or-)St2d^hyrLO%YkQb1A*x_Jn=HxXGtz#>bo#(+-)iVX5ob5tHv`RJyv
z%wTEu3!iyV3O?gC6%}WGaSBhsb)a^NHq0Gg`6y)k&1Ry~*X(hw%+qlb6Sk>u6e3}v
zb_LD-im;Cw4M=21P$7^A$WI7#BtlIVNC6Fee<l+SkC>nRWMDZ{Np01p^H2Q6LJ9I>
zXg^XgnXL+u0UNYc5la?e?&_mXR~^J4)rta!wqQ$ekQZD2{Kek at tJ?>ShZ=URK)Cki
z>noCGHl;~_i!vTn+pZ+-6~hvkkEEGRt~EDx at aMIlr)ohQcYrlH)UJ%g#1(%ZEhlH0
z?IY&y^sT{e5>kg!A*lZE2!GiZ1VSN-e<4taxZn{hrdV=P54ntd?*ckvq3>)AqZH^M
z%4`Z`bBRzCT<2pGMjq9gkNDt>m_ at 5U%;rw~L3RevY`*&H6=MWZ(`mQT$B at 5#9R5V!
z9_o=^_T3RC<TbMA7yTp8evJY6x1Hq(UvOp>uy~r;5(sOeQ#kOUb0=O`+>{-S7hI^2
zI!pMfAA*8U^O}BzX!!SM8WC}VwU%{-(i^n3>_N^v9f61+e^>9q-c9UKQhQQh8-nqo
zSi~Pg<Xvmf(Z3+Z- at 2@2Iq#}J2E<>H at t}_$6t();YVN4a9+B)l2rR)fTY!W~7Knwt
zz)jW~EEkN?DlFClUsGzB9d_<RO$o3=3M{Hc!B_5E%XZ_q)ejD$py|7#`Kl0<1-_zf
z^*{KoP-{990#!(p8nAl`3bD{97!`o>JBxy^Nda%@-o>Oj{jj{uWq+;w)vx#z1pom7
zEg8Ey&Xq*G=3RmbBVstKKSE%;3H$KZ at pvT&Pprs{Y;1-0Syrk1<N>}dMl8(cT<0s|
zZ$HJK{!>2tHAYrj7+^wIjaAwz?d5{1kN9W-hY0X~ZLkM{rtfC4kQbbCbvE;Dl^=70
zuL(iT&CWvVl}QZt(Mt`mxH$!-d{<2 at w0;Z}Amu{x5;^QrW<n7BwgY{{rkPV9z;Sx1
z{_{xCS<7oQ-~u`R&Ob_!QZFJC2#;5S2;0&mhaO|VmsZHvgcyIPAR!QITZ7^Qd&NiP
zXS~gh%`AtV;1Q<zh5OZ41J0 at p(`Q~+ at L}%<H?%RI1CPU`JHB!gcJK{$rx2)<>W|%)
z{tE%}Lf{VlI}7O;;M;=-5BeVyW`k4W{2b91;3^BGfYk6Vz?Zzhffu4M$_IZMp0G#0
zD>(S0;VF&_0q^h^P5XjidCk${U)fnFST6PsoHcJ)R#&K126f)iy}WQWzeE`R=Cqs=
zBxeQPx?S;SxyMaH<O4bKg&-yS%1!+ULmlVzPr8~wK&|O0JH)IRDMLLa7CLGX!cZeG
z3dolfG_S7-#BH}N|HJ+sl(zmt<Or(l#J?=?qr~35d+AVJ-SRI4iJxEb=OchZpaC0y
z^e_=V at lsU9S_pLF51^mFH2gaPSxfV{D|y2!gItxA0Lld)O>T?;`4)fmUyP(cO%@0N
z_)M~p`p<Yq;&1hejBElb<^iX6C8er at IV`9WvqGWysOePa-A7n4ui0&V^pyEaF>x#k
z_*Z#W>dQq4z;`0W|L(i*mIaKI_4otss`B8kBI($O{Zz<JNv&w`2=++<Otko`W81AW
zL|73dHR7NAWC8xw9}K~_%e4PuUcu238vMg6i1=Gt{ZV9;eIYhLM=p2;)A08qfP5Q)
zj#CrtQq_ZO<0AvC9&May6>}jFi^5SoN!w6Es!&8&EHr}eU`gBepYqq=94Op<0Yyf*
zqhz;|S)w+TC+x0usy{-&FV3RvCpb+A+78^&{1Qu_Fggeog4ujm{QtpU2*3f~RXU`9
zMZhD<4)--2oJMHXm{tB~ZTS}hc$2r<C<@BBxbp~J_Y=R#eG7ZP|LDjLFKghNTwl~^
z!&4kYMo0aD8g}pt0hMaVyBUAl#yq?gY5?7&e8tBdAE%^~H%Yrm{QMGVh=3wF0$_kU
za>3(b1iOE{VbAr58C>tU<Bogpz1M at Zr1DU^rV3SmbTlD2{q)m0>qH^Agakz)s05Av
z)sUJf=-5(Civ}GcfV^E#lcDi9%>Ju6|A<AhN4}0gNFU{;?6V>}Q6-hc?_2!ApJpxm
zHAT<<uA>S`J&Q^@@HI3D743khYMK`gfzYY8?BXvMC|tv>hNq4)A{RUh1ve8vMEEl`
z at sO_QTS(=>pX^=NBsk!Izzu)GASxTKU06&1Qb0#V5(0m<^b<YrC|P{P)N<P<5hNYp
zek#=JP_=0(HvRK`mH$;@;SP!7 at 5cvC2@<bL7Wf+Y=^uY at SV)>*2o!c7g_RzvPL4wr
z|0)k>Ic~#pwXb<86Kn2UU2(PnsXs!XwaLc63h&w>C)z?l*c7gTtm$Bmyhgp0jHIjq
z+(Oi at Lyb(80#0Id;@4~ioWabHbaJQq-?Q|8&pr15VkFI at t^N?aSokO-!0+a1>wh_A
z6(JS^tKeT25E%Y~GT4zPX;lkGScuSIvL`~#Q|{o8`SR=A`iED~3P-g|dGTQNA7srA
z>k$HzgJeHj1A#gGXi~sJWDmPwIi_l&pf3u_7Yp%Md at A_(>(ecI69U+YzorCHJLXU$
z=88P#1V4>>1&C{usror)#J?)!wT0ylHW;emoaKTQJz^eN;P7+befK$n8c($Tfl$DW
zr+oeNzwQakf6h#(IEb=PLg6Xo3jrHAXp+c-FJClag+(%w1Q80fCU)-NZ-ZFnf2Li)
zv-p<+Q{G9v#t{bqS>r*>@fQVOxnF|Vf-RKh36Jl}uVm2|6j9J;qy)rYs{|?9Y7YJi
zJM3+>BmM-Byjp>nCJ+NZfOuL<suBSH6$j4hFql=UtAAT^#1Tg*?6A;}rR9;tL0<8(
ziW&Ui=D(Bb%@=UA!=C;-7x|fjq{Z4oLLd>4#2?sFV9URaRVCp*Zbl;CRwz<i{{H@@
z{?LEoZ|@d36$W9nYfk=*hf%?aKlnwVBParFGmJZ$kzK)epBWx!C*{*T?42j8Ij;Cm
z&BrIfyTXotMMFp3K%VlQTlD$j3`X0cKm0i>5qxBlw;ST8Z6VO%7jy)`04qu{^^g=#
zJ at r%r)O^5^7c%jhD7e#o!-$j2OfH*5nE{2sReY!6pZ at tCfADRft{zbk*jD|g5d0Ir
zc;PQEbmGrDNvFbaQ0h at No_&?_Cku#;BdU#`Ai%E?p^hxDFDOSsV0EtmHs2{bYCir_
zfbyk4vIji!T_X>;=G>liJ!pQi(QNn3OOuv}zoNu7*pFNrhJI|J1Ts*K9SAjL#4!3-
z_NN3Pznp~Dvyi8>Dw0GnlKXtbP$(^AwzaNYE<56{6MtnKf5VKa_zMAf2%kmChWI=G
zU at o#+`q!z*6F>Oax?&5yEAl0U&}d>*3fPDZut`yVQ2<=?Q3&wYVYWi#L_~q}G6lX6
zRC(HD at z+v*HAlq&zq+AryNR<L<S92%#ea6j_)As5{V5q(c<rIwBoZn at fF&9 at wklrx
zvx^cm#~zwTTSMNnn(Aaz at S}tkO~Nn2w$bB>s!*;af4Sh_Rbfp3TrT3SB2G5xpLv?%
z!+_wkP+y*UR-ieEe21LMJHqZn-hH9bFHB-e=SmRTnh@}mol*dKtxchPREV55V@~#}
zLHf5pI;G4}hyGX9FJ(vbpL!9$xLkYfwU$e1?6fYV)qg;AgoB;bMaJYGHwH69=|J89
zj{wLX*^L9*s*sZp!7D+P9n7^g0?VK2jp=teG|V7;wj25<Z#BgJi at c;0BQ5<~!X6<&
zwm<xthsp3)Au%^nQ+AddIB)so)5rKDOxT>&q&ZW0LGzgVN?+rtJFZ3=Lyf{D1ju6^
zc8jixTO>yhjze}&HKdx;Q4 at Lfr`A!k%0umx55D5#KKRnG^P7}c0|gyMD5xv`G)5Rs
zcZvy~e$S^U!!T!n9kAAUl7;p%?^#4%3gGWSAwWL<U4=kFb8a!d*-8QRA1);0F9bRm
z(trE~$RQkmz6%`w1`E0{3EV>eKl!t^?G;soWt at hstB>HTIqePw$W0xC&8!KN5R?K%
zf#VSI9U^*Af?#wCl?C=eTdjhFE#=qRe22U}_s%=-6dDhTubS`2Nydu;W5l|dO|GFT
z+>F7W^3 at h$q79b7&Wzyefa5UfY6cum+4=vu7<^6c#2<XE5+nuufsAgsuh^QzawdUV
zxo`?%m2dGU<M>OE^e+ndL&2EpKQBBonimC6Y51FsYw;(3<WY at 3X|)Sf`Hf+WX1qXX
zhRM+QOL>k1!qiUAWYCX+?Zt|J$8xkqLCw*0G{r~RY0q`FadVmF1O}<f$#TZHiGTWc
z)wd#J at Q1WbGr1~0%y6xvZ!rEoVuG7^wc)z91;ehXOLg$~M(oYP>K>6ho|W1<yk-yb
z=3yR~q+))0OaEK`9+yWdq>)qhgYViQ6W-wuevQ1XTiKWUus6m{&9?=sy_i+tXtufP
zt@=O@>W{M at o~n?uXs-b3581cXBCq&}2>xDFy)KE7ja62HPcx!Gv1%p*s22p}HN~IH
zg3fpc43)<=!6XrhcH~O|CY2FFz(O^|c!Z;^qfx$(-Eox>QbSmuvHt%sh_G5`5;M at 7
zMHv=<8m9mF)4$9e{wU#Z1_}``j at WkjGHv+dY_P~$sM^jKfpAm7v78W;ChqKnX!*bN
z4+{>i$~F11Q>rSJ^bdZ;$6J^Z<TxY?6e5tTMWUdAuktwU%Lw}ycL<EN>JNi8zb!CB
ze22dng at RScQ&+XR(~hr1K{H-+b3)*w`Hk<$6lz&e<?*o&{(@o`aG*kuJ)AX(L#D}j
z4IQLJLdIMD3&EWKF&zG*|2#6G#Nn6v6I-e_o^9bR96kz%uY^F80>-$bS=6`bAAhQF
z_ at plT4t?V9z^3?n74;V2b<8d-1icYB2nm5iuoqx13-Ff+UYZD)NsLS+ywe%}kgEKW
z%QgPWAQWuttYU!s3Lru1r+ at reg`SR^6e60a+IelnF^3)VijQkMf&r?KEbvc8>4D3%
zEd<J}b)|q1u+YKGiXD)s4uADuppnGiLQ0TR6FI@|TEm~^oMpW1208u5A7>xo1zD#U
zZPUasUseCX*GdHII<&KasTCj0>EBgz{siAkfhG|OfxXyG+k`qM#5`h{2D_^S*WoYy
zqZ)r9))y=`u!NnMSUT+S_YwcD_-kc{Z!M$>opHt)usgUGg_sM6rtcIaFQkcMlIFcw
z!BJ5WR{bP9!=xUmh>M_enfQGx5C~WrLnRb{6;dbc;%Fn#-|`Qv at xf2wuv-OTKEgsX
zAQTrXY89Ns4}}oW7)z{fGphdhK at xV#S9!GHyK4ArHU%4me33hr=sYIeH6OVt3e_KY
zk=K+s4#Ftu#NFyX1|M)D4?E!QYYeNoZ<xnDOM8XDyBp?Wq3NXm*`NhNIDC{2MB;?W
zJF`)2c?wtjeN_nL2pa$#{i{Fn1^M9PFRz7wgB5nORol%5xF)TFkGXFfF#HW`z_RbI
z|9hSw&=~L32k=P+*nSAYU;UwZ*j;6T2ENenh#)N_4Qa9}C)^|<E18#0 at P`^ngVEzJ
zwwAM~dV&UjH8=HxZ}9N%zH9vPk)Cv76(OL1A#kn!6bRVsbQPC9d-m8~?NA`ofVhhw
zZ4j-c1;zc&|K`WReax#rDwPx%@fSGKA~Viz at e(%pfYd-XkA7<R74pWoBkSE{M#ml%
zfP*Yyo8s^Asrb{sX6NnvL+$u`9dlKb4D*O3;3Wez7$eJEHT-k1`h&m0$a4+b>PfUw
z)qLAc-%fM0W~7d*8Ng?WJqSz$RCvEjXdox`YEj{EQwa2RJP5L<B&-#YVL2w2bBF5U
zug^&Lad!B3{#2>t0@=IMmHtO>_*Yv at xKx%+2u$K5+RipmgP`LkXgbI%JIGs3V-kJR
z6*K4`e<|SbDGTCX2_k#vA|g=)%wy?kS;8ss<pTXPQZqoT(X)yW^EdMPMa2DK?j}oo
z1YAUz=PFI=+d&xSy~E#S?Ec2!1HKdhne3f>Dn9K3>EBmA5=@YF$c*oCFiA&l0rC~s
z*g&XgdsA~v3Vw$QyRas&sf*;emj2b2w7o{){{I!4L9NJGt`L+C?f|H at _u*h;VuqcF
z_#J+nXKcZ)QUL#sK*B*n!elm+TTz|Vs%)-|!N2+=1Z at OrqtM5{K*QUL7B!nb=DgO5
zQEG=h^1(L)fW+ at b+fRI6_pm|<b{lb0kG~KAULbrMf3CsHev^~}3ZQ01s_O`3z+?yD
zl<)AP>|^d|p;h at 6F0M`1^BRiOUKFY at u9_(ON(ThoNKx_Wv=2TMyvBhIR#(z7r+n?l
z>)(Qx8nkbpKC=bLBW5tCW)jx|VO<Hh4FU5q5`QBxv`~T%z83-O+7Vo9ViA9+wZ!ki
z8qu<i?1|s&o=Rv2b=Wx{YW%fiFAA_11 at PT>9sWYVQ?pr%`wWP`n}vp*L<O~-m-vM^
z_++njsGxrWlj-!v>ybSg8Z41t0<aST_mS5C1Vk*Hf6 at SF5g;eFDLyKU6krUS34<h9
zYmAa*W~iGs{@r0fAt)V4!Y+`7_*+q~C3}#q1)XAIT5b9|Lc at I{wXy(w9h7XKn0wd8
z-#eg6&IKG$@(-~9pR*A1T2UDO94Q2C1Zcy~5 at tB__pPhGrD+Ls;;;DV!>-{^{5Cb!
zwGb#lyZ8e#E!sY=VY#3G8ieKdPdtU7t4vn}*aHZYLg5bVzB0H;aBgxTz#mw%xoQ4F
zfIr|=K^ye%>W<ViiK$Y)JgQl!4it58E(Dg=kWc)u*z~>bf$t}7r!ryUyZLcYD1?Cc
z9fVw+HvKf at TJfQO8^Q2Lp3FqS9gD`F#ze<Kh$R-qKm9xT*mJl1mmJu6|Ft@$anN}3
z8#1wS1qY>40H1UVTCMxg=@{v1FjgW0cn^9?YpTX{$5SSmJ66}2G5pmZ`nMOjPpIJI
z2`_&o8lEv9@)HrECxfEkDg2=(eurM<6F-JbvbmdIxUEI2&O!l4-cLZ at zeGVeN&$r7
z^`M6Tgus1`NnM$NKQFfY^+*5lmj&W3$BCcU8aJ6VB%>Nq*V-tyk*=DNn#V1=W$0t%
zJqxvG(Kg;q<Gbm8cih}QOaJj_p#h2y_>f`?c%BY_o%)5qRSt at j`dkY5*4BUEzya{p
zA4g*MiC=szls!HQfh<sYM4=Q=g7DYqKf*+=2?6mdur>V&fwfGI=hUALJb-JW;J$F^
z<8O7*=eQP=uq4a+^bFm!ly5*|;_q=Q3gtS}a+!ecdeEE}@{~@K%nY6qGL1=9hWHq-
z_<)Hj+4GbRUG+<ZeAk~S7%2tp6qK*yNanBqjy<+r9V0C&z811v_P8S#>;<x*$}a at V
zHn4_62uyB8sI?3z5uCS0gbfCCjX#|${$9KAhkeDr at Yj4L_0oU**^pM5fpBm_?Fy7D
zl6^IC5gK<qJLq)Gqt!9e7_DcEMHBj}W<{+ at W*$~izVav#hT#t;2RY7J1YGqsFsD(z
z>IA+tX(R9yN~*oe?^jm8xH<yKCaCcr!B9(PSkX^CetE0rkUjF!L9 at DrT2vsST?jJ9
zx5FO+ko(zz;K83?v<d<Kb~k2l(CXaRc<PEzZJ_zMMK>QCz;fI)^DO8uSjtOH;O0S{
z0?{gldBioxo1~lOu`96+4H at by{PE-+@?7Sx#CP>^;Ku~{;KyG?9DV)Pr}ERkS8oBL
zd6_k}w~P}D3o)B4y|?=P8Tocz9a#{6HV8p$xw3&hV~lUjZ`0u#&iK>6Y9kiOzK(D>
z{}2H0+JD2v00i*a3Lb5DV(vO$*<s`9jt7mIYmT`3YEl1A1=Hy%_l=LXr5oAf&4vm1
zS!kp^6xH~L-L;OJ$Y at Y&EB<Bwt>ct({q@(Ay~^XY*V)*Cnb+XwJM5ZtON3U}0mtu_
zC!KT>@=}2K at i#f(r9k}M5exj4pmt<>aMS+FHG&7<%UAkGzLx%dTXl`UcohOykXL5^
zS2Tj(&4KA=_sfELB(|Vw1^})Z<9 at l&488)KomT9t?zox$nOB8050B^y>S@&hS9j3h
zwE-IJ;McHHZEn8#X3D?)_S*$QQt%XfS<i9UwL0<7W+s&dC!c&W@}i&#ar~`lW_`=)
zlL7vkBbHdOgj)C|i1F|6L-Ub$P5)Kb_*>m08uxL4C}{eF*PTHZN!La$h}Sj)Jcz1~
z&Y~ShgY1sqE*j<zPpzoqX*apg27)9`1T^OP%I3?jah&h<<Bx`#U)dl2KGG!SD!=06
z4-GzA0({N<+YneW1u}*W>;Z&C{W at eXpnvZL@h=3W8~#4hyqUet;jhCm?_bp)`>zrd
z|LXrlq58uH0<hNTKNQixFk^Jw!41iwS7><Tt7(BPE(Z9h`L-asGdJC_*7)mwUIX6d
zn1u|pUD7R=aTWzlpPQj@^%08UzeM8V<v&UD8t!*a2TnirICBajf7P_M6$>q;XKhvy
zcVb8n^^u`fzaiTTRH0eU%)>vcq<}()zbFWYLzf9vn{EBaU$gBBflj4$R<~}bVSx*@
zfNc4%LcX8>%5?!N99oZbGx#xgr;o1F=_cAHZ{6`)*@p!mX9N5Rl^Kq6cm}zuE(BqB
zQ`2{+5Ez*((YWD;8~lA=<#FbO#fqj?);e`8rDtsx1)MR7L0_Xu%}5x%9or6uzm6re
zMG8A&xbn*7zdf|S=uiufJV^gaP-P!>4gWO`%O8JDo(3!z=K$iV!*Mse4;`NPdk?Lc
zG_so|h5j}WJ~n0rzmzH88rjW)oBq4<oxgaHD8qnap^qN%+LfDJuCVJw-gRZLToxib
zObF8N%qoB4_sfGFL|F6M5`<?t<hKeWTHIFr%m3b*uO>jgl5r(n;m)L1cjt;L?*E at 4
zlL(B&4eEaRguTkI!vOa+ozl<}EHNIFphXF{B<dP}05xNLG`O20Qky7*dK(UX-}<FU
zGlKz3T-P$&mDg5b2AAW{JR$JWafLh4hBy91p8M{{JlQV+SQ`lb?%=?q^7|(iWXT2)
bOly7%;i&~5YIigrQ@*d<3_jb$PR;pWU;lcu

literal 0
HcmV?d00001

diff --git a/utests/kernels/compiler_byte_scatter.cl b/utests/kernels/compiler_byte_scatter.cl
new file mode 100644
index 0000000..ab56ba8
--- /dev/null
+++ b/utests/kernels/compiler_byte_scatter.cl
@@ -0,0 +1,7 @@
+__kernel void
+compiler_byte_scatter(__global char *dst)
+{
+  int id = (int) get_global_id(0);
+  dst[id] = (char) id;
+}
+
diff --git a/utests/kernels/compiler_ceil.cl b/utests/kernels/compiler_ceil.cl
new file mode 100644
index 0000000..cf27483
--- /dev/null
+++ b/utests/kernels/compiler_ceil.cl
@@ -0,0 +1,4 @@
+kernel void compiler_ceil(global float *src, global float *dst) {
+  int i = get_global_id(0);
+  dst[i] = ceil(src[i]);
+}
diff --git a/utests/kernels/compiler_chocolux.cl b/utests/kernels/compiler_chocolux.cl
new file mode 100644
index 0000000..218f65d
--- /dev/null
+++ b/utests/kernels/compiler_chocolux.cl
@@ -0,0 +1,64 @@
+typedef float2 vec2;
+typedef float3 vec3;
+typedef float4 vec4;
+
+#define sin native_sin
+#define cos native_cos
+#define tan native_tan
+#define normalize fast_normalize
+#define length fast_length
+#define mod fmod
+#define time 10.f
+
+inline vec3 reflect(vec3 I, vec3 N) {
+  return I - 2.0f * dot(N, I) * N;
+}
+
+inline uint pack_fp4(float4 u4) {
+  uint u;
+  u = (((uint) u4.x)) |
+      (((uint) u4.y) << 8) |
+      (((uint) u4.z) << 16);
+  return u;
+}
+
+#define OUTPUT do {\
+  const vec4 final = 255.f * max(min(gl_FragColor, (vec4)(1.f)), (vec4)(0.f)); \
+  dst[get_global_id(0) + get_global_id(1) * w] = pack_fp4(final); \
+} while (0)
+
+__kernel void compiler_chocolux(__global uint *dst, float resx, float resy, int w)
+{
+  vec2 gl_FragCoord = (vec2)(get_global_id(0), get_global_id(1));
+  vec3 s[4];
+  s[0]=(vec3)(0);
+  s[3]=(vec3)(sin(time),cos(time),0);
+  s[1]=s[3].zxy;
+  s[2]=s[3].zzx;
+
+  float t,b,c,h=0.0f;
+  vec3 m,n;
+  vec3 p=(vec3)(.2f);
+  vec3 d=normalize(.001f*(vec3)(gl_FragCoord,.0f)-p);
+
+  for(int i=0;i<4;i++)
+  {
+    t=2.0f;
+    for(int i=0;i<4;i++)
+    {
+      b=dot(d,n=s[i]-p);
+      c=b*b+.2f-dot(n,n);
+      if(b-c<t)
+      if(c>0.0f)
+      {
+        m=s[i];t=b-c;
+      }
+    }
+    p+=t*d;
+    d=reflect(d,n=normalize(p-m));
+    h+=pow(n.x*n.x,44.f)+n.x*n.x*.2f;
+  }
+  vec4 gl_FragColor=(vec4)(h,h*h,h*h*h*h,1.f);
+  OUTPUT;
+}
+
diff --git a/utests/kernels/compiler_chocolux_ref.bmp b/utests/kernels/compiler_chocolux_ref.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..e51a4a7376607733bdbccdbc1b971651c6358433
GIT binary patch
literal 196662
zcmb^43A}b?RX+X~=UK#g4iyE(2~h+ at K|ll*CkzB-6vPQloWKb|oXVVX$k|fMA=At<
zGt)9P%`#`rv7B-&(`>Te|9h=<@BQrOob$dypTD2&`8=HWInT5Ay|1;_wXU`9weNh7
z+ikn(w*2pQ{=a)(?9~6?Y1=jOU;fws-mk~cOWtf-9T&OU-7j*DdtT&P_rB<Lj=Jde
zj=tD09ec4GJn-T-I`QH+KIIa-pLWTcJ>*h1f7qpOb;f1(`jyMx_A!^+=kb@{@2o4_
z;YnA#(^Ic>=X0-om-DZ7x942zJ}<c839s1uF>gKk#eezgzy8Pn_y70*-u1cfKK^Z=
zy!Z3}eE%oD;}#Ep<Bd;w%?%#-@?SdcWxsUn%XWRhZ{F~PSKj17ui5jVZ`k|Hx7_h5
z at 4Wl3zW4Z7eAxS6^1-kE`Imq2Z~yr}|L4>B()WM*#=rgMDX;nK!=L at 9w|ngG?SATO
zuY2^1uXeXzb>Wxa at 9fL$edeWZd4~15#O|kFe7BP?e!~;2+r at T0?qb(J_M+E6#!6oF
zy1#tU>)g+(UgX;Mz4WagWdSd9n=>!F_hWWG at Tt2TeBPB0d&X4{f40 at T+TDNEXI}M)
zXJ6&6&)nsZr|*2=Iak>KiI=_I<NV1b_k8FjZt|dfvd_HE{VsCNdtc=0_t@#GhwpUd
zyX<tOgLm5bplw&Y)3z%du<Z(W*mi~ew_Se!{LE{|0o$&4$DOWtC-2ESz5gnQU*zg{
zzsNQ3<#XI(pXrlxb8mUZWp49mUw65EpK$s8pXknB;eaRQ=l)N;*bR=)73HEHaMA1E
zzmLEp$8mm{;|9n3sEhA*Qa<gbr(fz8kFYF0=gNnk4;42)`PKV8{%vmD<KFhkH+|w;
z-~Z`<UD$i^tsno#@BZC4&-(pO{qk at 8#Q{(HgPT3%x3721ODvi-yzD-YbMlwC>4SZH
z&hUE2WQneIpRCd~?-fY*;kDmf>pmB~_EEVV*FD;WxP)z&ys2ZStK4;`s~%xh^C#E7
zZ*G}?bzRd%`FwZ5b>$AaeYbn;<!+yay5b$5>`v`+$a(JCHI96)vvO{SocG6o_oW~F
z^uk`|j^F?H-~REl-t)!de)F#mdfK~g{irwXe(LL(+pdLwR&aykU%uPPufFN&zwMv)
zJNxa2J>yT9;Tga4x4-({e|X2Izw`AU{cOh{zJq`L?oa;n4?gqH4}asw at AbTx-pwBJ
zdS7>qd;a<^hdv!hEJYxC^M_qxj|X4;CZ}BdMkihDhR0{=e(AW2f~(uHFo8=4{EvnW
zK4j;EtlQJA+trSE&eiY!t5?6ruQ^!3RS$m_f3ovIPXj-GhQ07SF|He(=zh61d{p88
zh~RmbLk9k@*!aK04)K4e8y!bi_;-5l?<V}8HR1osWdcvk<!r?N1pa}4*0BZt+0MZK
zDX+Qx<KK3l=fD5)Z~N3+KJl#|{`-Z-|3Cf9&))FyZvfR%FZ#e8p7;)T`Fcmcn6Kb|
z+3clm`G_q3M*IW(1b!v}*w$^vznc>LAGhrid+fAJd4{VVzM~MZM~8ri?>Gcp`@TZJ
zD?0?d;=^Cx0jT~D{{)9G`>U^=`nr$8_H7^YR*P_>6JN>m|I)E9?GWHU8HLbryT|<=
z8v)k`z4oI|{lm|`?xX+o at o)U=|KS_^Pk#De|MT(>eeE%C{d>;mz^DG<Eg$haH$46o
z*SgR1uX5Nktv^2i(wDl$!!LQW(?<vZR6cW<!2OpdFr5EwAH!;{bkNhl1KMGp>tImV
zxaV_Y0(X0kPrlN@=khJ{hhJik(+dB`75?vYk*gocU+r||!?wVGod3H2-+A``OZ*=d
z0Nn8S9peAVY;eYZE at b%sb^OOVw!;4%7WjX{@89PI?|;JYf9kD&|LuSI*?(Wyd-2sD
z{`+rz?4R6%`@Z1)oZB7`{;lgC{Tt%u74P^IE6FX7_1X2fcpITM{(s^8XZ-W+=neNi
z;XlFgN_XCA7b|nvc0$1M9oH^s2srx1PVY`n{lka7;p2byrSD(ZE8W5S|L5ob%L#Dl
zxXtaK at U}f4`ug2YdKLU%|Java|Nbwn5b%l{pYm${d9Po2^Btb_2k6RiFZ-)UzvUAz
zc>kB*{rT_x^H2VB2OqwJfBN~)|JUN5{q|4$G@;Fh3pCfc-;4MkUb-m|w-A;Br9uEl
zG+2-*fCa5gV0QkzR`JGX_z;)}{%hXrc at 8hcf~(y1SwaKjy8OOpg<s|VPX6t>N9X2V
z<H((^c0_I&|L^wUKUcit#Cc}?BR|D|X8h+a-*u;}-3=uO4JiCOVV28<PW<OAemkE3
z0RDd+|L9!d9}SzxPw}6||BW{CpDV!sUC!qcG1c2Y;rBrof%&~pe*0hl<3i*AAHM(7
z*ZlQAKKjj{xcBq^eBZNvpO?GN{eHtLaS<XZ=YygT|F9+g1%mefEBxnL;{WkO<Zvwn
z9Ql9D0(i3{o_(!*KOZJ<dB*P?@$5f+;yXV5>F at m84xn{m|H<lc0v2KavnvHS`PI8V
z at a2X7m-y*>69P_q9T$yo9(?W}@j0ix?qg4T*XLgUH{bZXZ~gefeqF!+^WXi+ at BHmI
z#gP+U`QgK!nb0Ez5Pt#nN(Z0kE;j|jQc&N7fE%Bjd(pH(A~2i4b&qc5 at BLV-zvbt7
zd(Quw_kNy$;$Q+-Kk~VjQD{Ic8CUMF{387J<l?tSBd7oj#sM=(!~f0)uH%12{_Fl8
zIQahp|6#e;J0^bn#%uUzafSaUgVq%{;(s&wpYVUf<6W{d9Q>a(?S1Bq|C^lhntkE_
zh3`M>?f*yofA*h$f=)d0cmM95zy3Z{>Lw3*?RAcNk=0|Nm)ZL<m%2IppPKv#=S1wU
zy~+O%{NE>69rDlr9}_Fy^#PS4bqF|Qs}OKZQaM*wsm*!_kS=u=aJGd?7Em|z>UaM&
z=f*Q*K~kQl|MBOY{PuwNgP;D_KmN<l{^P%YzP&eW`2E{I{T(s%zAyZMBnZeYtQ45@
zmv=Z2A^$1cl7p;;fH!~Q`G5Z9Kl<Evzxl8KvEc(R$bWv}dp~{iC%$#=AARoRSN}Dm
zW?2H9FNND(4n5zs50-w5M<ffLLcqmuBoQ7gXf}an{#mzu9#`c5S&ZnK_xg3nzxI7!
z=<q at aU=&xr%QF&Oq`<d*Y=X;8PiIzmxEr^9{7)(HBKegXvyKJ+4{QHF;s1fbzl?SA
z|H1zq_<#6+3KI|rR{Up6@{{EEfk8;)fA>>IG}-$xxKsOox<ujs1C9S5UwHrjiEsV*
zr62sN6zuN5_FfW%fMTsIk*`R6lpo#XL5aDQA6=AxK=qgW$Lsk28UIHI|MGYECl at 3H
z960F%9Um(M2$4yXXCdfhR+g)~`NMdmq;h)`f*w~ZMhJQeLMtUiXz^I?k&!ahqh9y{
z$ob2!{%|wWApZkj`2kq|#aDhP!QcFb4Zr!X|M at xp|Ae=F%4gp3$?v??8NX{`3;!=6
z$T(sG$GuDf!ar}w0-pTN&%F90|M($k at CCND`P)DD-Jeh`&imuf%O+4S at t1w=dfadF
z)zq7$0Q)|{T^JPTrVpM%z>)>E9CUvx2G5aM_IZ4*RmjgZ?;Y?XR1Po10>6|OBS`MA
zH(&Zzk7QYZ+W3!u<It{l_xS%SFa7 at o!#|<p8b>bhfAUalO8;5M|5F%3;~!v}`~(lJ
z{H(;E9pL{N_)qYE*6+J(XTAN?|2O{g(SQ1v7k=O?5BcrC;eYs5-j%E*MDh=4TkB)a
zGlBzsU~Bv*`OQ@?#Gk_de&LPD0<fS%l2Q#Jh!%REyg8O~Tmof>fIV6Wk_bOCjPbTY
z04?-v3q_1-E%d5KJO?&-$URPb9mALSKkoNF`P+Z<4FV1w5{>8f|Mr{z`um^y&TszJ
z*Ldca{N-0I3z{)QZp#;J1dZt==zs<O!T!3x{2K_NpVvR;C0LO4x#@#{YbgXh{EdH0
zJL1Mab>aD#)24s2;>N%HOX|VyFg+A>W+_x4fw)5ecN8r&EU4wsAqOEdO at 1sI-)N!u
z3bzvSoqS!zixL7*pu?XPa+Tmx5-9xN1peLP`zOES&8~j;g#_CC=fdFM&82daxNkh+
zpR#?s$(s%TzXkpa{7eAzY4Nk9(f0p0ZVyRKeS|A5{}2B!+=%}RpZ|XFt3Ukp_kD@<
zao1<Q=QfXiGnUIs2%t&6_WBk0FXvE;)A--9_&FuN7u)rL+b(zeQp^sRLco+FUH!=D
zrR-(WLL>0 at 1>W>@a$iCKEtHg3qA}7aVwR at YwDwosN3skP*ynM-cf at o4^g*xrYZMyP
z<&v-c=s*3&Uwnl}WfzZn)8B!#*Akq+{>OjW68Zhhzxl?$`twKp&fgMtq_<KG{0G{v
zcg&09JdcVCjS1YpSkNhI0k5BH0S|onhkVQP-~Z)ze&(MqlrZ~~|NNhi{Nuk+kes{{
z0RIpFH-Fe0$gMmZ3F1n3ewu5KmnKx+@)7YxBLpN7UL*oBfyO^b7yh4t=O8~2;<R0b
z!wdh30!aaq0^ji|-Wh$hN&w~J;9m&<{+A_yUxa_ojsCw<ImGwE|E>>Ur;>{(_DlRD
z|KUHOK*Rr!<hPyw0{@l#GV}1C75>jy$Ny_5{~!MUf6#y4_oeSY`%k}k@~b~`==tyF
z*644R2;Ua1vN&^ajB~hO{D1Jj9r1G^{xJV-m)&RE<@c=+kVJUfWp1<WGJ9{k?CrK)
zu78gmwQ10Z4ykKA1;zD^d|g7o=5iPoRI)Z^%d;^7Y-F!TzxkkZB1lRhAM*OY;f=*I
zmqSrG=EZ+`?8`p*px6F2TOib+LtAR~U-{v`ix=m=`wN`#-GK0{x2FUq|2^(EF(2TE
z#vDflOLAdLgn%tr(EG4=@s|a?`wQRu+K>Ky2Zpx%C(84C|Ka=M6#eJKSAO_z&-qhd
z4gWqLP@$Ai$<ZYRxXq(cpk%>>&^=B|2#^TJ1WsrOiMBKOA#5i3MgH&oJn0g;$ZQ>L
z%c5se0LjIj;Qt9MYr_8t3Gu1#%q4(X0;T_~`~Q{rgWTSE;D3(q at PFN-ol=t4;Q!$R
z|6SIE{5#cg$EQsA at 8owY@*~Z;0Qi at +(SPWl7gqoO&;R-PAAkP45=jM3ng+ke=?Rg@
z2Id+3OO7HABsr?Z`Gw*qE{FVMHSmAi3IY3VyY#KLUHaDBF0)rmz%SXw<@Oz+VQ8e-
zQ3{Ajpss#*cVsGutrFoC3p(`ts~r9;JeCQ#tpvlHmn=^|r`|)+-JbK_!=Lq at yFBAh
zSTs at P$mjmq{a^Y)l4%D5_Wp(M{p5Q;{jY!h*?)ig-~JN=;kPkBKK$61e()~mzgtXc
z{gZu_&wPP!gOK>yCgArsI^mU~kL4o19rE-)roWx`x{p5j4?Y9TfAWRzedPzg*aRqb
zGOxFN>O0T-^Dq1A2mIz=-St`T!RUN- at PE_`p_CU2OHl=o0^ItMDFp2KkPZQth!z?a
z6lo&4 at B;_=+2`@W|6QM1>+}2=?ERCuIINZbbQQcuQs7Q5<`USH;)TjCCD08e;Ld+3
zqO0V0OZ at +G;s2!V;Qy&o8zBJxXY#*M`RwHP0^^@{q5gGY>%Zc~+duUk@%Px5{ndfz
z{2?G&C`(5lNN|)KtrdSai9c)N|0MoY^6RF=+h6LIIfDN-fjI=AMzRAM at +1(&do=#<
zk+SkN?>!~L>n!NNb8y%2+hGFF=idOPi&OZU`jpg|hM%90f7`xiy<NuwRMU%2deukH
ze9PZI^F3d9`G>y#roa0Zpa0fRejEKj|EwM#P61O~@F5t!R2N{-9#+O at _Q498QCOuL
zow!N_eE$7j^nnNe*2m<+FZ<xvbW?ohpa1RO|7*K_5mM#Pe)lJT`o- at fW>0_j=fx}q
zW!AdS<KCvk5dPEnZ<ey}St9<W_j*)OpeY1I3mqm<iNNve_<t5BCT59WtW`qcaL(4s
zFWq0sb&?Au0QI#|0v-}a;eVDul>pXTAg0cT9peAqnC-y-9$WhVt?-}BcR_w;@hATO
zBo|u>NxCV*e-5DkH2;5X^dI%Fw|$C|aA6BE)%@@+ at z?sx`z$_p!Sh(0(fpt|qU^rC
z;@3v;lcY1mAErIPzcPVaZ at csq0z!f2?08ut(<vl7SP4oSSx^#zr=_{&E@^IYD at h#k
z)Aq at -A<*SQu?Po>Ldk(=h5*=#R?4iHw!FY4pYyKIp7XBHsU!GLe90Of`t)~O%!r>4
zdM&^p3~=c45khdvp_X*-=LJ{4{2SnuT)3JdlnjKP`@QHdn1By_(FeYQi+<$mKO#f@
z_y24ZV9_o00?g-)AOGg_{`^Y<xBP{9-uY?os?zgs`D#`c|DQtDQ*=YYwsj~9ln@{&
zPb_Fo1Ws7u-^w^uCog{&(Ajd at Ih6B`d5K at T5CNj<YmNVsxYGg=i8~aR|7i)RN&uj~
z&VN$*8u$<Scl(O}mj_Fui$<^D|G3B+8}NU?lem4M$Klc{>2C370{>F^Y4H>OF}(@@
zm!9!|*p&ZP{Z|8nHl7Qj^(`r=e2oJXf8BlkC&0r+V4lv+dajDUEAfAW_}Rs;4dRdF
zJ+jpr{znvO7Svflrv`J4xYW^Z6G9+ID^XRGuXoHs3#z`jN(8#UOHqJx1{h}!lboj%
zez%ieO~?gfEQO+Yi%0y<ZO(j)?DEd%{t<$NF3Jw%3nBvIcg#!vlIQ1stpH>3e!%uo
z#TGdKfS;lD;dOo8nhEUns5k9 at _S^6BjCT{_fLXesHAp5d;~=l8Fn;^r{sT32eCOZ(
zliOEokg7{bL|)F{$>41KkII4)8=x|=;Q!Dn)GAc%^SGn{p+K@=AwVr4TIeDXI5Ap*
z<Tw21@$TR?@A>P3mk at S?<6j|{u^?7P^5U0FgSbRe?)q{{oZSM^UM>>oG6lZ#miXUk
zRDPTM9FqKZ#{V at 7|G%^u|D?RA+0;A-3WVKlR6d9DQ_BAk|7ZLsH{=9{|DW)Wg0>9E
zpGc{e at cxCbKl$w+>pvOAuO}$}zSjC!94F>ms`%T*uU{a34!F+ZPtN>=3IDg)cBwv^
z2r&U!fGoJwAq4^sgw(8iaBdS#bzmUB)+f$^Jz}<(- at oM0Y7ONcM~kB_mwTqrBi$46
z-E`=MqS(R-uaqFTE}`vKXZ#Ka%L*_(XqO|<jsyj`l|lPG8xb|){EvTyIOx+5o(8}E
zNr22z?PUFR9R)&!PA^6DthdVrRFF at 2#fL2^Y!ijJ7ewnlU-;hpzx)Hm2$cfW#uxv^
zSDy3Ue?XSJ?Zj7oL at 7C;=d9mv-AS#@wKV?uNkVi|U at 1T-kStgTc<2ZL3lmu4U)via
z9bxgrS8)O^N)%|L_D>})oog|D?7;u3#S8xD6u7%U4;=nK{hw3k=cs&5_|F{-gRMr#
z3I8|Z|4;MzQ~sNK2lm*7qf&r@|Lv3iE`F8&r;Y5{_<wBp&jSCVCm&7**Ua+^F~59+
z7#;Ed^?yV6sN&bFIZ~gzUi?~!|C_}hziD?}mESq}m6wI{hy2X=_ksyj2uNy-0#$*m
z at jsSs>JhD)NC at HV5D>y$AJ9Ftq%#XBNuNyMS at 7AOIf{1)HNwGc2%<k9$hD$IFm{_q
zzeSP at Z=5#R<2<*0>|1GHz%P#wJ{l*SFz3(hSM%_5U?#^A&xWq<D`Oq;vB$o&(_vf-
z(b649$rMvgeeFjz2(bcCC&}_Nul(@WL%RO(vrl@*XCC|3zn78&zr^A2XTL|1qWIEz
zH`0Q15%Bqcev$;rrE^C`ff52r2%1=sM4)ovHT)Al at 15kA6A%Yo*Ue5(Q1hRb#c4-e
z(qgT|Gg^R7!!ayxl>n;6H!1Ml;?mOvy&e1y<rDcKU##OlEzrkF&sX?Y&8$++jQ>!e
zJ5Km-=0B4k{9!46Hvb9!A6ou at f&c3Nr2fh5xEi5$3GW at h{@?%oUtMG(HQn#7&- at di
zpDVLCD(~?ORs331MketSIh>CW^-}Uj=i5a7m9%cOCH`+QCBj94qyQvP%Sil5X{@`0
zx-OOq^0Wv<usWy#H+W!|5kn(4n!s~lm1joLSplL8oTGHBjsJl!=Kx~`r at jstKmyN)
z*jqjFcfIhRm^>#5`~k^e{?B7mpbm=CZDA2 at uH#t at fq(XO;X+5f5U*}glz<?_=%5f&
z+!TV6wN+N&on#!Skp$uN-~JnoL#@!Foyv|(Mi6%<9JSB`x9ko?S+{G91iJ4Nk^+PR
zRS1X>^iX7gIx!~#@Q)^i|LpU4=PZJNx>Q0#g*)pS8A2sBFX`Zt5}4wG7MHmNP74H;
zyQ at 5_6hIfW5<uynEB{}e4 at 3EE@<YCB|37a5_(k|ff$sQ}IliatHRC_v4}~7$XUe0c
zjR*gaM25wY_Wv$Q)5yJk{e8dk=1<rdLRHu?=9m9U0DR|X|CuT%UJKmT-{Rwq5&!o)
zOSHAZbY^Fg-4>(szdJvV944^B|GM~7HM_X_RS3BGwo5rW1l(!}p;XW-C;`C#p}~Kb
z&QlaC at OR-)?$7+Ab*JJ}iuVa)gUr$d?(z)y1XSW)0zs^RV!6o*k_^6rC+zHiEeHzO
zk!qJ;!Z6Rz{W2UNVM^uv8~o3-;F9if9Omnu87m0&N|}|RF&tcraS0`zaZ8GieD3??
z#TY(?UzP#z`pl&XLiRm=?a#ac854;xf6kwIIsv at PC9t>||4bgd`RWk at ZYcx|6DT<}
z6 at dx=$pX4Q;zC>zlhoGUopt_GOdQEY_t&Kbu3JFe=;H<4(dE at CK)T?17eKXuuHk>q
ze7A at HV>kQ%>gIZ?Qf3YmXaoM|SU;S9bv}3V&rKf0(#!uZ at t^)rq5PiDeIF)?SW>f>
z2;cE*$pRVhNq_JeZpvMtmZ<o+;}QQ=Ms7{~Z1KN$zAVMhCH^-hzh$|uJ!;QJ{LdzU
z1?`;_;0kw0by)Tk{8#I&rU;&Y&iWa?Yfr`Jl&R<wE7*<+JTv^{ZrSlM=+M#%QVC5n
zCyWUPj2#}BgP$BD^!g`0v%tS(KG`-^;6EQBfyr?kdOll-6;zvX`1VoBH+`TuvggCz
z0Me{LR(tSyf20hdwsohcyi)?s)j0g}z;oWE*35l*XHl=$IumEenw-B+w)ZFg|9~gC
zSYAC8s6s%5pk_fM5lAi^{8tDN1^hXXOJM|bWDmdcMZ}G!cK9I!@!=v%vOM^wa&vV2
zEumu+dZYk00vw)OlM=v|_%G&@%=a!;zUhrlv;W_O|NYNy;!1kTG2y>t&sIKr!`DoH
zwuArMmH&_anf+fBZ=OVur97+S?-=vTf7Lume?~-kq}usK{Cp|!II(nw*!eX&!>jW@
zou9M#vlaf=lV9#SPJW9JP$s}GItva3x>KA?<6l#d-f68P-4P_eQ|_d7<T!1E;t at V+
zo8(#)IDfch<V2#{isikYhtwq&R3{jA(WD4GTyGyx2l at U9nc?|?d15}m|EvN2ApbnH
zfq%$x at VNpdTPQ1#fTY>j-}(^t1!=+xmoBOz_6&i0+3Q!{#18|!|MXMB1)MmTw|R5G
zdF;zrpKo^;)Np-%;s435G${ZI)FEJELCZwIzYY_)UEv=qJNBjE!TBHm@(&3#om?<;
zXUIUD`HcTmd9=VOfprQnQJ`!DfbEn3X8cQmyJ}ON?E!z||FE>og~V=&|3^a<Qr$Oe
zh5tK+{}lc=k)Kids^*7keujbJ|2N?OvA-wbl1xdmbRjMgzT?+gVwCJ{`aqwAVB`}p
zc(X0V&&a~Tf0O^hf5iXI$!|z|`gwMP|GgI`fcZ29>YtSeCkx)!+9t`8|MLIS*3sy_
z;+=LNESHxXbhmWxQThoT+GGOfsq90J0`VLOW-F+?Kmn@^p|S&D8^=*ED&)U_rQlBf
zWJUWAd!}+*eEvXw`L2%O2R)67$QIVDAWGCwN0WD-@)`_$wg_1USI-t4UhMgh*ZWuO
zO9t&d*5BWT{OHoZ%QM*8!2kYdCk5E&aU%qz7VyYuK}iH6hXQcnp9$n}{+v8(VpcLc
zg=sF%H#!-o#Mn_g3pL at tTcGW)g#QPI0&!*C2&W2=6qp3MhW~`@$o`e~4(Go^{ND!t
zA1~b=&Z^c81(FMg>uxT41^g at WFE)h(Y{I{_LO8h;>M;$6+V+7j|KI|4ynCAx%&+~~
zKgh^P;(U?2VA1%`h at VsEe|$o9K9A0yWWK=P_ at B1@Zjt=juy9gD&X at oebn8h7y7{(C
z?l}^H4gpjk6v$%QJ$j8J3;&fjX@~A!xLZ6tvEI*_ at s{)*I+UbfX##pgp9VAX_rXl?
z^U`X#yI8>#4q^z^&%j-e1MKgu$UCI|b?`qUw5Pz|QM<KkUZRdj*-%<mkixWhF~<VN
z1#CX8)tHoGQ=WJgw+xC7w~yP$zWfvLi%^`u$c6m-C?UotXRFBmPm}_L0wn~@EQkrr
ziNNUt|5~7L`xsa1s~Hq?)BB+ at M#e1?Np^gr- at ANElp7uX6a1&4Vr;Ioxwx`mjSw2)
zWVJiOKjs7ZeQe+VZ@|CXbZ2g41OB&1eu$sj$G^=WXTF7o0LH-lo-ck+ZGFdXzyDPs
zMioZ#OM)X-4DshamW5mB&gbs at ug=en$?t^!EybT{!$Ro&$^=>qh5y+ErVw!X{jyW?
z%6GBa>IlrujmTUGT|l?ADgKc}5AJS7db|45Jz$dJ8+I;`{qoV)_!i70w4?%oq`0j>
zQqViWCqv)^*N!f7WmLj*xZemq@%#mTwCB#}4$4}ME4~YOF!MUHo2fioe|rqj-}(@C
z=PR6yPxBh;ViA)t3x^H_tUA*)XQt7 at +t_T#|DosSON%6P)J1`wfJIP0!h%L3Fv+2N
zJ~aJrTA=G_{G&QT3}H~CsVooIQrZ*cS)9{gr%u~nP59SVJ#8zf5Kx8SBg1O0bTEz@
z<v;oF+_l&>-;#a2C&%H%e=_J`#PM1GEc~<L6u%CNujuu3zlQVQp!_uXN#{cxX~+Qo
zpE(KUggla^TYR^M at 4C@RNpQ4I(b;sN|KVr<`I{GDy9X1{60hT3v0jIy$~#q at YvKS=
zTuYs{z*XnxX7OhO{^ywwX?rWpDmI%AhuH*1E?g`~2<Rwq>05>%B?M4GQJ^DIO1S?0
z8~@0yyXi`0f9|+bO3+sTUA9412*8b#4rgy^o51kKBM_iNWd+5E)UbY)Lsm6TP?!&}
zAIOi+ at BI__F`td#5Ath#hk%aL_K|PTWRErkC-5|X$Oids#^QFnUu_XUK9Z56bXJFV
zL4J7Gs5L}xl5wz_75=5b9RiXC6bqUX0cl!TP_32aN_5!!Oh$*~%ke2uTJqd(Tb$&H
zRM1;I;*H^B$G(i2v)O at vZKeFl*jA98WeEYCp1qJsfe+aN|Glj>p1;A*`R@?_w|_jp
zIvmty{14 at 4mH8Hm7WkJ5!oN8=w_eBpiLay{$Zk%0^+&XEYCE|g&fj~Ge=DOvLyJ4$
z$$vnv;EUkFnwR)9cYbau{>=EF#Ggg-+vK0kmdDu21Udx71e61AosLi;0HwUjVMzhB
z&Ke!C`>Ad#%%HE-63AiolL<unOGZ3GK=#9iUhZ4tHM+w at g>eo9O^0Fy6w8DIpGGMS
zHR_UX9De)!XG<KsZK3u^c+W-h<A=-hH~53b{mu?2$?=5gIExuFhk2JDY6O$klWF*b
zSVYg{8Aart%ur#dqEA9ktZ!r-1OL at 0;4>2fd{<adCj#XYG(}WVxWIpAhla*KT7}mB
z-8Ul%a*PBh1#VU#)}vm`%_&*c`2QX;G*QYDLTenvHSf(SE%2{ptM~Nvh9=IxVGsFr
zq<wcg{y+Fn?@I2=gnuQliTrPe{FL|^{~td5U at mci|MNKwd6VW7)qEPhQlrg87X<&>
zvUH*7dwl5YKTe>Q{HF6~jQuI`=T=*aKQsAX;Xj=Z*G<K0i1w*`jhHnhO-mD)5`j4c
zq$0dmI--RD`IH5`_I=YjW$VzM4~2)m9HEUfPZWssk)0r+tepr?`@wMo at Bosmb9154
z^2!Kgud#yj!7tfy%2-v;g7!YTwuSJt$baZ6;a$?60)P2 at f+Q&3K4=UlaZK7{eslZB
z*O{D^jSRJsClRW$zlsZK+ek=?RJ*jnB3)&D&UTJFlig)t)WQTFD at O|p+AHKxSPb%u
z7x|?Wp8uz&5`TID|NdJ)wy#sMTbFxg96j=Py#WrL_Kg3e0ApLhiQVy at UQkuwT@Ic6
z|9+!npRoqLr at N7VL_7a#U*C-X%ztPn;98;>a4Ey9Y{vhT`Of4=R2ult_E_s#{3rW=
zrEJo9*K+WAf2 at HVnW1N15d3SC5GllqOdfmIdsP2*PKFa6ZtTO<`8JPzn74hclHbPv
zn)nk#j&9%hKUv|JORsf1Ad5DLP${Bmil{7Lu%OaHFSl=H0Tlx5o-;jZ_tQjYc}-uD
zD at _P!{IBLARMti-$OaG_0PTKa0uvXCG at 5El98R>#k}KN~x{?L$eT>4^`Bae-`G?NA
zL-0SoV2^bV;$7V1F<_Z9x$R@)vg~NS#bg4RYu9@@o1V=X%4CeJav0!r4r at tANLR(3
zv)b;gMgzXq<ct~oq9orgo3>)m-m7Q85teJjiej9MSQ$bZ4nmA~;J>!jR7j1mFmw;1
zw-lJdnHC8Af5LynpW4kQIxLSZ{D1BLy3Lu5f48GOQt&SYJ`n!bcRQ|>pPBpwOXdI9
z at qg&~n4}_(wk{TZ|CfAF+o2&&7X<%y$m&j1k!LkEcIHj#e6a0zx$S-TQ!N6oJ__Or
zf=m3*;^#{I>9)^0?Mm3A>dd<*c4PuG3)(+_QdvN<;N4E*<k1PW8-2 at 852&{7bmi%|
z%C?;xSKYSL)pA_q>Q*v)z|$tzTquDcguELLV+9p?CqqE61NHfcyk9y`>zt|4%xzjW
zs~XuidH!<yarnf>Q0`=-Ic(cs9PwHtT-(`twB6okhNN|PTIA^?FwK=^L8_xqY7GUF
zoJP8ZBLpo>pybf0B2YV~okJ+%tsey#@Gs9L3^pF at jP8~UeFA!rumu?()@Q8<3*kSd
zs)1RKG!#`kkQ6`_jKaAY|9*+{C=dt`i=+6DL6<cGG5K%d-?bxw2ZRK+FX}SN8vaxB
zb(HMc&VLYz5`Rh$T=V~p{|CNYbFZyW5aQCb)c!*J6NujTr5`93{K}g?q4`Q<yqpME
zv}gbTZ<Z0kSnK=|2iNewocXhs{LbW`CrOBu)oSnQ29h-sAP3F4a96}uEJ!0LTD5Jb
zD^15P+ji=s!9OFvz<-ge1OK**Tw~isu35*mwq3+=?QIvmP9LE|m6nElc3v=1&=H6`
z90zPemslddq at D@<*!~Ru=r9;aNil^wz$=}KRP{*r5riy4s}_7LWHOdAftqeQ%62n7
zD~6Wnv#K&TNa80qnn0x<b1qz3P#a*MgIh^u;?v0fGalH2e(zU&=<9#}r5`-+eP7};
z at dqhP@ZUR&Q)H||=+8um<Fg$=3QXbL8vjRNN9o#CCMXlg>)PDChX0z_gAnpXjsJ+r
zttTIN&U(+!M1Bms0{(7&Y4MXDXq3v#f9~)kjtk9;#`W+wqIMcfbdo>kPro={@Ah7N
z`3KqVicxFCLjG|=vY4LRk^HW<{m$DSyYjo4{CDRY@?QfFrSR4E=Ds&!i{B6>V+GR~
zrOhU=ltXDjE6mT}_hL)%^Z9Z66Y at 8}{<_;Pdc8WXzwM&e-*&NInvPv3(LTOCxQd_e
zqkfat+_5_e73^%ciFdNyHSm|)UmzdIBgo(45ut(`2K-_{8-`lUmFtnGhnuZ}(P*?7
zI9ZxNpAt8f)O%C}(ifE0AO=V-zSS9xe;rMBH#7|RfBkrd#P-A_eUcCO%@3)7`y40M
z`4oWVNHwi;s~eq21>*N2 at 2}zCmW_k+%dj1QzekQ(LD|9z|JDC5X&v}KYv4cX^m(J6
zvcmuD{HLCWcK%KNQ~VN1;Xh<j*yYo#l{8<+j=99r9KBVjGF9ilfBwJQL%!eJ at cXfU
z`q$Te?4O?U&d;3q%8w9ENd&5d!lhgcBrK@~Nkd3SK-liihbBL+ZZ3Wa3O(~=8hAC6
z|8(o^erm)4t|L}Zfgn*p8L at ML+g53~q5u;Z2w!4;e!T(weEwCpK>kJB;WzAO!0)>4
zVmGMchTAT7!)+IL+-N?)yKNx}<~VvTK{1UMIS1z{u&uy9ah`@;*CvAe6zTY=mI5ji
z*3^zJ<c+yTXW}i%j%T%Ym88!m&{1Fx1WknI0z_M7<-)gL7KMSoa^YJ(V&MPeS95U<
z1{-5Be*<A=Y{>qU;b3y$AM8h|{b3yrvhVwsj#c!}eVp+h{ipg>dfF}I!$V9UQ6NA4
zX9j&&|8p2D{GTBw;ypxCuBH;P>LjV^#^`Tv^3yfnCHdI_{ttP&G6x}-_a<#=fjH&W
zf35zz<NB8kVw4}`M_ELVx-Km8sm(!DXo|#0e$x;*%{&~*??nFB at n7Ok4SZWBzawCs
zTA9(|Wd#)oIE~RsHJiX*MdlmfGvJpmHiLhY+us8D4f{s>Zrd*IxN(k4++ at om9(8rp
zXzn5JpN+1U$Vuucoo7k-C-BGZj|z2=lm1CPEmI5MM1eN!=${gSVnKz9@`?!o;s24U
zDiN6S at uv^MAXIfl%n3&h5|Tz=&;<UJ1A_l!UTk0~O5A`qn at FK&DUaKyuN=VeSNK<O
zWWRMSF#&VWc6|T|D0ff^Ecvf~-Tfm|aA>_>qn+Vw0&Nbx|FQOe2_?N_(Wye$R`{Ql
z&yb%ujWC~*5JMzN{2BgVCbjVYhdf<PU-gi5sh^6Bqs_ at I)*WmC69mo7R1HUdD4$wz
z5vP!UGlx?UPeX`ojtAqtSIO at n|IECOzU1!w>EySjea>w^AwN!d_tVlZlu1g4sVb2O
z1h~+`1d_crp9k_K=I7U2f`3VP7Ct`=X9MgT at Vjrjgkz6wm&h>oejdT5pY>0dxM|cC
z^(>gran=I)CAlxa-)Sb~4DjpCAV~p#hI(zn|JHN8<}6 at Uvli0}`PF5;5~ik%c-4cE
z&iTrP*ZYFn5^p}^|26jYH~#I!l=Iq*Is1Pj?`%2%NQToV at 4lzto^VD`&8A5ARESTW
zs|2R)t?|F})UO+=Q`7$jHz*?1{@?!J8UM9o(ULl6;wR=4rZ-jh;wYB8UDogq{F2{r
ziAhOV;{QC1-OdXYZ5+l30um5nZ={}$E%RkAU+8%-EzmXr4N>Z45+Ylliu}J!C~;y=
z5{+~pw at Q8&_;2xNIq)sy-y<#Nt(rMud8oQT5-7=$H4GgJ7b?XDjcNQh$Y;ziU(ERT
z&N<cXJoj4L;`V2 at vqb(3`#mPWcgIm>*^yp*B!#-e^g6$hjE{VL2>aO1 at cB!fXOZm=
z at Q3hNv207f+36GhTMEu<#1(ABzlvBDtmhP9DpHi^uL{K|QbZB$N;JDjb}$vAL)gO5
z79rp^9+nXfrb(drkA^O74-Ejj&+NGQ#`=&_DKG^9{)2o6ovOwzC6%bAp!h)S*IuwI
z-(|vo^{cy&*gn{EgE`QHW<fQ(BlCZH|NF_-#Ajmc!M{0{=@rx;Qusgk+y(jBD)XJm
zPw at ZXQqpGpKT$wb#FyslHdoi9=&IxzCj7B){OgZ?w#8EbjN at P$@A~X_U-*G9BR at o7
zdrr0HBL6-lZO at r`QZs*URs&JT11~E1T^V at sf7d%Yf7;#kUag`0&jwpM%(cX_Dx)M2
zRIW;{oWalk1Njp3^XnahpSDxrA8x;?&V>Bo=c~R9+ZyfChTU854PdDmENRSJ9`*Y)
zX{`3_l)O19oGo%roF~mlgYXylL!M7hHdLEHNB+x|Y20=1RuA}CpX<27f1{$>_8R%A
zQ;(xcb;AmRoJl!J2uNRq)@ZxKvO6Z!rHpal|3NGK+jObc<8cE^e`w;LPn+=naIs8W
zi=10^#<)Q#a9Y2T0!;Yt{Yr<0>IVk*$-x8~A<Yd2{vVJcW_GL>{?q)EA(kV}=l_HM
z3r2pn#{aomR#frOJZ&Ci%%{Bbv+7^=S$|Cqu$~3`PquH`9s_yCpL{{Hs4esUL{A`<
z0QtAtPETr<w*Qg*PSY^@>Oy`5xK-tM?RL+VuZjFK*j6K@)kvUz+WOC{Uohu?LBQWh
z?hPuR-K~iI?!)2tMze<f7`kP<rMX)*dQK%S$G+=F|8k$a$2&*ocJ}W?S1fHm1bZZy
zYlOcA6EIk0LmdsLseL2=tq0s>sN-rQzcn9}ILxPO({qPLnl!3aBm0hH1yes>asi1z
zhX9-{LQpy)u=hlwn>}Rq|1<x2=<72R59e9pU)$t_|ImKg5#-0}SyRmg62B7Bu5-Wm
zuI4{IuR!t(4CMpCpiH1bzzY90|E=*K#pZFc6(<by at ZSZF3IC=1jBe+J>>1}jk^lA~
zsiaK)fBz>kCD2l|1z@!dMIw`AJdw)qrB8nQ-_-kN6JQLOkBLn0{o?m+!M6EY&nNOj
z`P3g6<$u`?I|lxrz=<s?UsH5j;D5vI7AuGHS=kCBnw3fUMa2TtrSaba{*Il0rv}A*
zqI1r)r#(OL7w3td({3Nz at wl-rC2;uDprIM_UArV-^aO)!;xNQ!KJ0Jp5r5U?i0H;f
zm_ysbUZpD*+h4i;$@6C#&x3=1P+29v(f?Dp>=GE^`c at m}T2IaJWBb5j+rnr}>Xy8k
zJ5h#^R*jfIdNbVpkqD30P`kq(+s at zH8vmMn=KPn|ar`SjwBhj(+Qxj2OM|O0|5PYa
zJxoBUePIxoMmQ?y)$h^xCj>>)uFV>8fD*v9N1{|laP4XSq50=_?85&(k3-d*aKs;$
zUNw$^|55YWUgkS;Njj2`n(;4FbLN}_*KJ!j80+D|YP9qiL~Nw(7r*yYm^W~S at Wu0g
z{(C<mjlSd4-$8yn>cVOuKiVGlIBl9XukEudUt{3;hPLMk|83wE_;T%iyOppvk$)#V
zK#QoTMx{8__ at Bv7JNcRL%rDlR{}B28InKWX|IB&X?ayqd=c}~0H)5p+EgC~Tjcm&E
z+G_7=YIDoOD327ZqxFr4o>b>X+d?&R2PdU)wwuLyTqcBv0L)TwNnu0$+=Bd9c{+^{
zqZy0`hKKO{v1ezDSXuR^)}y=lI=8!`z%zm$TVoD-n(#rnnkdj?`>edD`yUX4xqHMG
z4>x_ocmxChCOg|@o_xMIlEh!59VT$AM^+Uq{u#X~{O^|~B4w!2r^&g-)F4Q`H!2jU
z3Zs^y=RbS?3;gf(D at 1kKy6<w at UGHWE>-gvSx9|LWC)6|*Gug!cXN!QsqSjdsTn;M*
zwgnQm(b!<5r%Yd^!}WT?0_}_D|L0%+f!)4F-6B7fAJ>jGQGhWhYwOeGebb)zX&QV?
zyQtkDKPC3&8t2<RX&s~OZIr5$t=#nV06s;i>n!lUB>!9De;xeQ*f6TPYv6C%!}Bk|
zpA9wKeh=3w<j33BX1$#c%#DL~!rgMeUWBO)M-?n0RdvmxrvGL7fu|n|3j0jR at 9`rI
z{u<{#W)}5C_xb6T*~OF8GSs>zT1Wg(ds4)}_``GK4_EDQ{j9p)s#D#ewOb*!Fl|hz
z?$Bj-H2go&z3UXf*TH}Hf7<Gz$c6A|{<PQFU?Mx7X8wa7*f~OzPcGA$Z+9tpM1_eH
zl?h7T6UBBr2 at DGV`<L at i&qLx}&uH><83Opm;NSCK9_Y^{<FaWnCCv}SA04oz?oRk$
zlAn#TXQF3>#1emS$Ql2)4gP(aE2Ud1fpO!ST2KG&k7)t5rBMhV^8eM>e#GbF{2%<<
zk3R5~AJTgb2r_D(@?-APV$|>pd=5|2CT{^<uf!xe9=jgozoe~JcZol%<aZi)(rs^3
zse0gFa=M29Ur7FE at FPE%&s^T^eg+BelJjo`{*e56xNdxY;x*(C*!Ld2bgiUVIoB>j
z>gq^><EUzW+PY{~E!(n%X$)qSu(3OC->u0XZit4R3eCz-v(^p8-`c03sv9yqCRb#X
z1e_D%pcjEz9koyA>i2l=Fo9x0yeKZgf=UR5|Fdum?A?hmkb(b`Ud7RwviqcWe45m$
z)@ktRjDJ&qZ3F<MmT<#T;EGC9y&|FjzdhjRGOvB#;*EFUE^3MHQ6SH=PJ)x<$kicZ
zDGYz(3WEPU|Bme^tfcuT#jm>Fr1^FJ=duxRTgd)B>tn(Ew}=1z&UWpt)GFELtb0=?
ztN!IFkamH|f>k<5zA)bha}X4ShTia^qu#E`-j^y?M)@BD-?prLP2^|bKUx2R{HNBx
zBL8Kr?gDO*mV<$R07hUgIQ}=#{?_ at gS3L~d^ZYeg8e^X(OQ%d3s?*z)Ais8Jq(<5E
zb;st-+&E^wJfdk#JN=o4=9VsD5dD1Gs)V<%`#UtiCHZM8$QAS!&OJ+1 at 5dR8C)$+r
zFD2Z{yNPLp9y<bpd_GOH-*ja3v|oZW>+rT>L6rpz3RH!F8UK5nhD!DRFa2+ZU}L<5
zaaB$uK6E_J_%|?9 at dz`Ckk#bBvecyHHFS&Lc7fq|H+u*V-<{7T`=A8bsamN)J%)Ae
z5RNM-{2K$?n>cR%@Zf*nCq(?8?0pmdmo={e{;7&o{dh$u7XJS+>=gdRP0OOvCj~aZ
z&4U;o^`=kQ()gmk_zI|#dIW;E{QbA>b7TcZ at cE@4QPVF?8`Cu{KcakERi1<&(8|SH
z-L+Bq8b)1hKf^Ij$VskO+;6UYwemlgDyog-LgIgR{ssQ+G9R?R)gB3N at 1QB#b6K=!
z1^!H at 9B#k&XmI#5@~5`#q^rN26edp0{)HaITCe#uzmN2R0Z#hfsO9y85jz~*A^7h*
z?xV(P(1E9UO&gv6G{3RhAo)O8MPdW~npp(u2(3+FWQ{%+yTdY)g5r&=$`k at 2S#YNS
zNr58)>Bm!cyb4s*{$Kt7b~b5&&>nB|yCSJ}Aa4KX|NFm0LJb4HG#kCCrdo8GrN>Jr
zO9fZBZ3iwiSc=}Gl#8_{$bTwa8Cnu6X#BU+s5fLOs)Jp|Bq~+&Ly7+(Kj}G-|G#tj
z|5eR*JI;Ui3;>B4uJ{l9pT$mj59rNKhZ9~w%a!1ex!Cx#-}6N#pyctYkNhLdzvb`0
z^=JR^eH6&dRXv}ErAU^g%>F9MXFY1O$iK?h^eCtdyqd}XM1Gdy&r<7X^1o0%ktj}M
z9sf)5r?s61e5buL_?!9Y at R{qpUFVtwpBel&t9|sfeP+e^C&Dko4d<D_-+d`fRK|v#
z%3LyhpdPi;{U>7aI6RR&4<(NX=KgkwA8fD&1Iil6AiXjC^83e9yr;%?t+oBQW!b_!
zm_Hbx)^6PJgxL$0&GG?%ZHk0>9w{SP>ba|SB)PfSBWY`JjiF8m$R4qIgJh+^3;ZK3
z(B*AL8AuF8dAD0`s7XM&r%8YVBodkyW$p?#?)@$PG)pNjeQvwN!v86<U`8t33#^v3
zIe)C6$29d4x%M$0r+kam$R^ekP(+uX=ARV5B7TPaS6zF;Kk_qWzDYDD=ikhKB0ohZ
zi~$*ulr|NEy3<o65nKlh>jFh-)W6g?$UCwC9S*c0?a+1v!2d_S{x4>3zv1KG^qf1Y
zm&8Za*oH?Pu&&NkNBPgR|9Rk5T~WyYg8U5puae)4Egj1Lv`HB&F7k7M@!!aw at xP_>
z-yZV;{z>g2S5i1>o8kOLd*raKRPg+3EPc_i6y`Q<Seq9=gSL7n)bxxMMlo*mv=y4$
zUrh+lc%0y2=wM|3N%mZ8`|O9>*9P!<gn_gx;O`-d9#mBGt2rgn+~I}Wszs9txW)E*
zhXwUu7Uclbfk-HKJ{PXi2r>MBX5 at 0PKGP@(&#%|vbB8D8ajqCLkwg|?RGQMK$}cPP
zhe>{`?E%^gR8J+*kkjExM4*2XTYNRZ6NHifT%)Eqd-STuHPkm#quX0npe!BOzp9<_
z+megGRl0g$J~@0Z746yoH~#0$cN6m;$#06knl##(_`oJqBA^9ydfbI8(gKPCY3zCI
z?|ss2VX5vj|Ktm1(UU#D^!=YwLD3<Cn0K;$%1_9TwugBR()_6FOgpbf-Eo*p{0Bu-
z@|)bhl3#RpR{rNyJ)MLX(Erc)Ukd*1{O2ZzcK%D|Q_epXu37Mz9w at W(obYn~(*ref
z+Uq$BJP*xkvfR#GLNy~^IT*4#h*6*cu?Vt2Z8Td&{FN2dkjyI_5Nles{jZ#V>x$7p
zx(15*g!WJ1H>>LYFGbg7WUvZ;qH_&u$QX9FNnDT)H2yOkg%G+4|DFGeHGHi12pLe(
zZoh{58u|EYt- at k~(OZiCK7?e{C1WTJOWE(Nkm|cU17~1#J_`OxH~vY|1pj_QHOz~5
z<@Y>&sYYf6|CIuxK-PJ!`6tES6u+|ld8+Z{<ct5z<Y(dh(?7uTxASlEQ*>g+KbqGG
zHJ*k&S{6%$(o=Oj#zF{q#2YhkRqan85CZIW=~|dXfcT?X+9)vOP>5tce2DPG{I?+g
z?k}HTl1P5eUbMBo75Ue#x2Al?TK9bD1>-+U{9h>NU%SRKM6O3k&(0tIE9Z^#@0see
zL^Ic?ruuA7yW6V<!%UD(CyaXNbaZ=<9a79;-f_(D&Go@<aMI~rb3)?$ZPvj2`zdC5
z^k)jbL-TA6q;|nWDe(cl0djye9ZnHbN3M;E)VYl7Ikg|dk$I#=fyOi3x4{3D{{n4T
z!QE>9?J+Om<(PnIf(tpASY~Zyuix`oA`kCk!>b4WlT?Zwa%9vi`u}bx`#=}Y^W#6<
z{zwla?^oPxbLe3ats9U6X8ddZF|HxSuNFUB=}j+3;s0qxewNNZk#_<9D4(q*)_Sg#
zgu?%mKsRF7k<YbO9zi16*VSN4qgg1%!QpsJK&$iokZ3xvL98YKa0nWwLw-C5<iMx;
zG?(cse0!{WgtJ!uqX!PDaK`^!`I^1xtb9)7XNUNQbKZVNz86jV3;%=pFEvl4-c8Ow
zjXgC)G!@=W<R`mR*YQ6jn!(Zs?Fm*#Z&jsNRR+}n*{u$`eY)Xi>Z`8?gW4)s!g!K}
zwgR`lr)45tJ0Fx=wqX9{{HLA2IPjQ}m1h=kL8g>&N9Ir3!6Z7naT+ysCK&7Lu>#!G
zpg<mA-6_EA|5F9V|D*pz|E#73cxzVR=4K1<@z~U>A)ko}F-a(D{<(9=O|P9_eX8;Q
z5!KJ}Hu&dMkqzEn93RE6%iSI at d`p^wir$B=i;3gGsa*xDEg}8zyQ%ph#jgWQfO#6s
zhx}9{2P4fb2>I_;=dGAeoPW{j^8d}#+#08vf<oDpXoaeEcCQ6aQh&eS_zNt^)2vSa
zt&f at QDFv4Ax9UX^wINO(#35J*<VUQG@|ou#*ATo(`HvpBB0n?!*D7BV`JdVzmQ*eM
zko^CyJJdgC6Id{xjk3=s=ASm^N%mQhpC$e$|IZ<3gX);bk+{5t*#`erTaUXAy##(e
zU>bgO!qhf)s(2k^&x`esV9ss!CaD0R#)cyRRxC+D0)aPJQlC>D1;hE1Yk(65FdtqE
zMTbljopzy7!KNfKg$`Z{o;a>M#q_rA;Xe|J>FD$yU2u6oz%(HJR*yup1&BnJ8Ufef
zhkTF2K%#uF6HxYYfidTF?&YDn1OEq}<4d8%hr0yWwmz1woBwG7G?q}HdbW}J6cYgB
zY!Y|*Fw-Pcbl9~X{=Vl!BP-pW_}LSX!uq<4V=MfhG74UU`OMCL5`QNCAN<!e#pD#8
zihjhiIS`pX3S`c(EWlo1e%@wJEXaB``295PoEp$QKNdga=ivDv2-8Dwn*2xf^AH^5
zX99mGzg_v-O#WvU(Nt}Pf7=h$f49{C8}>8!m(E|YV3vI}_HR$~pUM9Q{CB}?DgI2B
zyF7EAr&RhR?0XhnQKjWx0@~U~pGhV?+h>~dGjF-w%L7RtS@;=S1 at U3-F&NM-oQ8RU
z;J~_5=_p9`r at CMGE0h(-07dC7s&DwJZCOA5kJZ#Z^jqDwC$d6sL3iRmBmXV^Gy1>!
zSNA{656C#fJtYvC$}Vg6w|2J1?dQplFW~XGUse<6FXFpR?OGT3$0a~TEMOP1T`n57
zTU&s9|CBMI$WMjN5QgQ1%yu#<ex>-!f-I)kl+NdRWSehyZs9+N at c%9Qm+U#Wx~+kK
zMSc>bX8hkKd+172dJ1FrnF6H(ho_mCcOi6IQhweVs&OnQLaPOs6eO_{;{>=OKj%0-
zMk={*!ez at f_zV6+{)_w!<$NT+qw=){`JZ&!BL9eV`G5GI`+qjnzc%21?(pBT)n~Kp
zxuM&kMl+3WhxM{ohX9we6za!r<yotlx)cWfAIrlK87y)(DrSyE9bWVts)fIe6^I2M
zq25TSK#(mD)YqL4f;68HU6J!Y^y$`|+p+j=fsNbhv!?LP4ys>}sm&#z(J9c-a611D
z|8M<={%<7pG#!*>IZ0<LD<uB#<jsoP#K7L4w}NE1I9EyYbU6&%JBjMeu4TdT|D{rz
z5$ZV|!WQm9)RoI9g+%<>`9SW1z#j0^c3LjL1DE)3k{R)TOfc(@m1_XJm<9aIzwy6L
zekSMdV{;VqAwIMgQHWaLUrH6PGKH0A;PWIMdA$&zv5g7X*skiQBYN%vwYGM?D2Rmo
z)C6qg$9+lLgHiuW@=wd1l~3Sb;lC=sOBT`MVUzzfDV0uD&YwYTfq%_xqxrv6fZ6#2
z{|3!ptJ?<hWA|b;d8WO&y81`APvyTU`%WqF=F0EZCQ#Fgwr*6YK at E$6a%4shJVy^j
z>FrlD>&_PPhXKsoI)VxC9>s<39NA}f{zp6;1F`<nQax!pQZ|6!e^TwZsVdOCl7 at q+
z%8^_Df$C{G=tBG)r%}VfZt-yLJtcs8{<RQ*1<5kx4*nMKoC%$?Gv8LX+_hAxTK~M`
zQ}QQAy$A{9+l4cRAfMIv#GH9Zwj<IdZWcKGCgEU~0w(;!w$)%_42}8w(zbozAIbY6
z=Z%Ip%FjmU-{7B||HLRJ{MQ}|l7fK})l(;v<tQu{kAXBQbE^d~0Z%{I3$a{Y|EcFw
z!eud0P$7voD_1c0{6B!P5AxsSX9NDVwpOjjCAR|Rj$5eq1|3WjRV!MBx9Hee`F|y_
zCH|Sfe9X?@dp66S-Q;W=V{KrZ at xRvOi~?<F_3S9Hp$fLpZ at DQ^U{)+UX`N>E at G$ZJ
z^Dgz(5Up&{%~9<)<$g!*SswKvt1#L-r)aRd9NeuhasH)DazRGcD9|kLPQNBrm`gyV
zB-9{CO<kh@&&luM&o1&`{hxPyiZc{qp!71KWM}Z<z$Q9~GV*IWkHF!l*X}qc%x8{T
zPt8268<)9)Au2VZ2T)y<Yk^@Lz*&X=6F;wUWNx%gk-I*?HRfJ-1|%I=;=k&`2 at rcc
zI6Hr9R)g5rSwHX({2vVebLLC)nOfaCtd#6CIsY*Oe@@Vvpyq6APYr#*diG;?hz8_M
zYs-O1RW`U6a*$y`meguA`4L2XnoqV4D?^^i&jA0TbD-3%QvT<j=Pi`aNVW0*W-n*~
z(zmAnSqd=sKX(iCmf&yZKRf at W@-w%3PX51(Un%}h-Oh6qShjs;QtK=SNry`g9db|?
zt-51j+NhXj7$U=BR?pa_QhPV%j-9*ZxnTIbn+q_Eg(pdNoF0;CdH^nz5waPf2>@=r
zmFKVQ*VC-K8T@{8-XDEVfyUiT<~u!)W+VAY^PB#E&CiR<S53wXD?m16h5c}3eRMU~
zJ<k8G&qR%2CLYfiVRCL{_EKv{mvSCa5q5ODv{G{pSe#SxQ~rw!#n&a_jc<>a>#3m&
z{5LmF)=;y{q)6C>#YyEiiBIZ%7ES$&?;ZG`oqsc*AU~defWMvp;6Fp45WHMMQsC;=
zYncnHrvjM;jRkp*EiH%;y5VscN(0!PfG9ZfU?D%oe^nk7uQdx<lH4wPZNUH5{JHSI
zPJR-qf`3y-mMw5|3&axt&3qQEo?~P0vek1Y|1JLXCYRDbI|QsuKnu_^5OnjiK(HYr
zu12QrR3X->Vy9_s$^}}w>_yJp&hgY9x6GpPz36v)*Jc-#mN=7x&WR3#hw~?eu0Tan
ztdeMiPE6oX&L6dKr?6A)=$rBXhL3-PKtT~A(Wmk?`X5sKWjHWg&U3rU4;sS^-PXzq
z6Kim-=?|Ie`O&)PXTD==Rp#dUAUQ&PHos)oGx8JKf4!rPuklZ*r|)uTvKt5T58J73
zq;N3YW(^4p_=_7iLCR<D^(Y^h^Eu=^)XT{?{;eU4sPR^0&!zL<4F2K#i%~2DI_lhL
zCVUb+3zR5O9&zhwJ7>N{r;~nfXgBR=xyU9U*(@WHat=<QEqy4T9{)5e7(@9i<{$FE
zp?_fN`7h?M75S+W68xLDvsnTi6sTaIT);7df6jdE8klRo%N<?|{I53lQh}yjy(188
zu!7$CvPg=DE;<E*Ze2rbDH36})6l|U0(j=McU1zLj<wOW1ON0HD?bKkluN;`b-ZL%
z=adSiG)P%Syvw2P6bChLOI+R^4T{oURWN<~-WIvOD!)5){&VL0D^yuwH^O+t_Azdq
z35=FG&L7<sr>1m|$18uH9r~C|m%w;_87l%TVEKt0@(hS26XuZ9>TvyIy+8gfPvS28
z_mE7ixba`&4^;S9uE1)vN*SkNUt5Y737Xq?{_Xjz1YfPEmeEI5U9vW5Mxd^Ks at _Jr
z-`Vbhkm^AI9E&U<Ch(ZIqCo0j%jNZ2YG76Q1O}KqsOIW(8t%CB5w_y2*2qs!^jcJY
zL;ly=9#-|!DNkwg6aQ~>V(`B?1?Vhb2LFuzx#l%zzE$?h4#%2dvf9{QAz+w5Z*OM>
zZ3r_R+GqvSUI27xT^fyQ*Vi?r1LYE}jNq71i)!}vrJ>$W9h;GHUXs3=$G?sKY!<h`
zit6L!fV37^uXi-{sZBs?#?NoKHFm8Y{o=o<$>at8h?djy$ac*9A=doEnpgrVQ?XUP
zNo>!EX?SC>asGW`rThSMvQ8ndMc_>7%*Fbsc7t*j%uSt(<=PXC;Y%EH>yiIGP7^F*
zZiRnAAq^n||Fw*x^S?SjYoki5zN*p{!V-yA_ at 9~o#C)Qn1WV=lfxqz|M$!0RY1C|)
zK}lu>N_0`iq<BG9<3m8*nA7DVoBC*Z#a}U~@}MF=HSHwiXR>0q$%RMxtf7vR__IMj
zpZW({`Jq-Vl%F_<I@`kk<`h_O5ByJu*Q-{~4Lcmy_qIp;sr<L6M)xN73 at t%~N)8%x
z9;R at Rj_7H_``G+D)1hfoKpG^>@el~AYdzaJn+r`|aW;V(U#W=6b%gwM$EJ4W3IVr!
z>{~S-D!a&Ag=5Q$nd3r;grz_dA}p&8OeSDE#`4zKmSS_3yQW<so_|v8C)uZ&58Axm
z^Cr;Lo)@@H>di^sG*3YaVUq$3y<NREPqE?rLwEOmLg-nY68aJM-swMk59>RF9R&<G
zcwiW#l`;Iv at bk;<3$FeZy at 3;e%%#=T#Bpg${73xE?CuhOGN=&KX!653G=(EPb}CWi
zr*?Raw0CO0+5r9*{~P~Zqp3L+E>=t-3)9oAn-HL5MCwEf#s4?Vg0}NfdsWH)&q^Ld
z`Qf8n#T=%!Jw*BJp10*h(}^w5Z9k*uvj}sYc^PcQsR902YZ~=O3f#LOrxZAVFZ>Vi
zPu*^#=GD%>GvAr~towf^kge{0^yr>4gk?lnO at 3%ASO}zRJ#u%=jb`sIytDi0LJx?8
z;+m#sE+idpYTZ4D^>lSE8b#rJFcu3=ZPsnb3dj*qSLxLXZ^Hyagpv+_ at 2CH1E`jHd
zYgRP73Fr4$EAS8I^FrAxTVrw2{72e*4jL29Uombx6ka_#m0X_LZ_>uO+H8_Ja_lkb
zNfO(I)*UjR?T5wsPRSkgD80IUu0635?a$bUwA3;R>5L`vleq~c1OJ^iR{vX(|7;5I
z=MjHybq4=j<p1evzAgdy72t#<>3Q%k0IfOyO*!viK0{7y|KCR1HF_6|$xCoJ3dAPO
z9`$^4Bi#(Uw&82(WXya(R-HrVK@<7uXCK#w$Dw?#oPPlW|1X|AN_%tv%(CsF16J at q
zJO9G}jW?yh7=C5JF at gE;o0<7<*yLEF3%3~HR!>lh70ky5bLfcBGk=N^jjdr*jbLjN
zs5a5&LXk$Nbf6wPo?>oFnNJl0z*2t7T^qgxw^p8S;lttCj1g0au~4Den<tkWg{@3L
zF3{=l!K(A3Mjk#w?KvTj-VW!Vp2WK5{Ar#xyo?Qxwc&Rzz-4+vQSs7qa*`8U<K-lt
z{)$2chmrkjMi6j<U%;PcW}&=#R;v%hf69U>fp+^c(scAu{&zXV`xUkE99IGSE^UGT
zZWzm6A>z4D at Mi3VnYi{AV_}~2Pcok8dgr<J>}cWqEA4ICGYdWo at K3m^j>HO5p=uQZ
zxCJ{yrAQo+jlj~|)B+y<MvXvvo|pJn6c8pV^F7ZVPu^n`K`5VH!XwsA<UdTcj#cuz
z5)7Lm)NrR%tG6aUh5wsuCk0rVzy$tZ==^syz|iEA`Itk42GL3lR-5AYnQ8=E5TPjw
zEKC44LJ#a@>?e<>Ntg+^r at R@gYCGBIac?t24|P$3=XT84=`}ZMOfAywF3F{%K$$=f
z6^{uVPNwrGgYz`<fxlvkJB3GKwwxQVi6-U4r*5BVxBJ9=re>rYpMu`-x}{lVe?6=^
zn4xf=%r|s5h5owZwRLOWvr|-7;L|w<=iI*T@$7lO?Cn(X7z<YHUxf*w3X51Vhu$jA
zX~b_#V}CmN-S2FS(aAUSCzM$bv4Ba&`A7K~+uNCB0?>BAKV_7Se?3}KfV62baLmg3
z*c at cJ+>x-L6JI3@)=anr|A)W+BW-U^JDD%Nx)Zb&`RQpVQ`xtefAG-6KswL^A6h4A
zkI{LP^N;d5iBuEwPpHCw%$scr)G6?&0(1xf`#$`qqj&i3!1*`%$N$$4Mv>W`ea!#F
z7WBwfjyz1D+N4(-BsXl0pVDDs*Q&?0?q+s*Ozts#Vp`f_0z4{YD!bF_)md~~*;<AC
zD=(TcKCirvbZZWWQxvEs6a8{@26cg}+*L#_pI<x*l`1xs5KxVp>bCwIc-%ECx?udI
z=u1ueB^TX^SIh^O;CNXC2kt%C4xjH&{Pfy6V+$*-uY30J7Dr5=SWp_<9>9XIL7c}K
zW=kpjlgqArDBs9xz+Un$r!Il3cS~hXTEO3Nb9DYZ+}HVDW*g^U&%tai#~dPlj?8gt
zbr?BsWxMO1e`aL?RhrW6)=Zw_N+DTTOgeVYU)Rs35TMyfEWY`}-$4AI?}8Twe(Hm@
zlFmmn(g=n9;QI|dpUHeD=O6KNN&aW$^B0kyYMzg16Z|i$06hq3Hh~8JT=3mK^B>NC
zLiif&r3TBRN8QdQP-TKu2pHRBHtmkDXV=cx+xFf!v^F|{me7x5OY7oenZUv4@;Lyn
z+uV-ASA6*E_Lk~D<o1_i#&!6V38cwfz!l2*Jut%-tSu#qs~^YFzXA57JWkBBIF;#{
zhTB?{wY*k63X>bBulgtm1c{>k^(a8BW9DhogJ#mURJ+44{|fhF(4_U*w8){&4S{mH
z62Qf~kbhepwY^nudGLRgyZTR{g&%NY(aE at bPGHG~0e`#4B)_L7`9=P-MHfE9d at O=0
zMp}*!d&V01scKib(DtIOc82rUF;bGjs|Wsv2}o+lTquo?rRuvK7LZF(2s`z)A6?>K
zQz+|*>B)T8r3u-}s9z8AGcw=u|4Z^e`@`Pw)n(r$`5CfL8EH&4ZaIU;y9zL?pxq1F
z$oI1~&*fmNO|s8Wel~- at VXrS}c~qtxdtm}o2!Q{wO(qk(Ik!m*U3Etc{uBRS at vd8W
zXLzJQR-#ZI=`~CM7?5_|%Q`lDwRPK?!fn#XvhCL50{}3jwAA}7l*VcoVMMlF4(&P`
z=kL>OQ4v;Xs*(abwrD|UL!vglI;{?K&YPia5F$f|x6lc_`jdH5Hkg|nIY&Jv19K~n
z-CH~=+`F_^>|^HfY*DC)0N1>iQ4a|LDv4RNbiQ$kP5!ZHS4#h}2ql}3CuBALNAi2q
z2jeF~9`ZwaWxrbQx)Y;qxtxFX%%sn)G at n`U8L*GwkM>N=r=b;5WeNc?0c+wGBn7CQ
zM6v*$L>8c{c3ECG4o*ctj9 at J2C~_!74*sTVag=>Gke`}yG*`Y><iFCT9h0BlIfeh=
zDxpBC0Fw$jW?{`Humu0o`FGk2)kSPJa-L>8a9*&Fi7k%&vP>ZOpLPn2ZDQRfUF3g5
zMR?`;Gr=QyP%c?PbJ{W%);F1eYSCl at G#P;vXP!4%fJcUGyx{$x{q9d at 7o;hX8(j6?
z*k|2OSD}b14PWVCzDw-(QDV0y7Hx|5f+=Onul*Cp#eBki^!dzce+19vmbBw}QSe}5
z(4PLKOfsy;7GOSFLv^`~4!vS5*|A>JYy0N9((4?>&y#%w$Mk%1{_ubKeQBYC{NL;$
zu1HbUIjnSDhQpM~h<aZDGxP=-2XKa*1Ahs{X}Pb)gEi*AWIkK^{FS1(!NESln$UHV
z0<<Ds-y(n#AIw6W7vF0d1sWC(dB=3BWYh`!T|DH)?T+n>$jFa7QqMIT<Y!6#Tlrk|
zylqf^+C1xL at PD&S6sUWFx*e#&Kh5?T1>d>Ve}-{;a$t5;2#8TE!QW4~n19aWK)t!~
z-+SbHo7nvL+Nlb*%5l=&8raWX(QS?YuK_6`$&*yl1=H%8M1(kJ?)v<9e|}zYFR0BM
zD5!0BV2q8xFnR!rk%RgHTUWWO=*;tTTnhJk*BR7_ul%rH2xT>N$h|}3ySakna__<o
zy8TQKLo4}JneuyGXQ&Rr))xr`O_q4eFr^fF)+bxW;g`L;c3C;_Uw(g?ZzP~DrhDMU
zmG9EzAF5rN=$0rZ^u&42;*TJrI+krOOau8xvt6&i7x0&77UlqzQB1ODJO8QF)!^TV
z_Sy3<UnINi93P*dXNCgZ{nvPSih+nJ)upZV?a)t1UgkqEG4Ud at f9U{izgv@^!v8Ay
zos`es at D;hZdxqDPpAEKI`7iphnF3{uA^g{oR-a}*8w$Q#f`2lB8UJzn4SQvRKI%U^
z1jJZo{8ueZgJ{(38V!_=xP|gR9Db452K>kkdnnNTbL~RFWd4BE&K4xNWg*!9i+6nH
zpO+>e3($fx|Hdp<1$uYijf)P+8$;tF5uhe1BAoWRkJ_^RwoiUr at 1iydX|<Y;_ at 3C&
zkAGc(-^Tpjm7h)MxW~v)gn%C7KTodKjG^W=w`b2SzR2D<YRc2q?jFHM=6mh?`h=P!
zxlgzv<@36~jI=|V%Mr*1mFfm3%atfu<Bz)S|CVQ9Uy$jY1^)D4)3x~ja>D1WWS`mj
zZvlP~T4H|V>omXB1C_e7nq|oXq}VF*?!}|b`uy>K(4u9&<RHAOD}ZGGp#vy;Z6H5%
zesmQ0ga7$iX5I5&);&0Yve(@6Hk6-ns?B_6{-Zd%q(Gw=P6&Yc`S71}x6kbSo4~Z^
zpA~*DDg<oAKjdqZaLgvK9F5rd at 7@{aoDBlT*C)BlgUJkW?Xp+*Kcx73%!KoTdZmPc
z7SEq!46C0#z{&*nJBuV@|B;!)GvK|@$^Ve)30(dYuq9|z3n4gCq+4LXxE=##R%?Ex
zgKa!nKBDM7U;G{m5)^n*fg at Ivu7grLrHy1vfw;?9lF;iN6Tb>k-M=^QV(v6~?9iE<
zKcBzsZ*Rq~hWw}1ZPy2s^KbHh5LATx-{e6O6HgGB$p3?9=h^sQkpD*!82MYwM-?OB
zuc1bqGe<FzpV|3Kc$byac+MjE^&&#z3i-(hTz(k~B&!2f3UHnf%(9wmSz-R)PU^RR
z>N~Ig$UoX-ff3<IT>(T0L*CN!vwFf^k)M>k2Kj0HFUfyfcS=HO70xB3?7MyP!vysI
zsK)ZZD;21FfuMah0WTbLtLJi)`vm?`<n8BWFYtfy5?6zH`So<<KZSq|_}39p_-8)(
zG!~KH#Kw8Q?gFg at FbG!_8vF82bbrSIW7R4kSIW_EsApR!^mH!39dR;v{u2LQBcIDg
zECUL>4Vg(P_Eu+DL!UOYAk*nL{5kiP-0jHciW<e?A6A>T8vMz5bHczM60SeFhA!qg
ziRn+nvhovVx>31>KF(jTbK%3+^#j~%(kZtf)ivZ~x0B2HBmevH6$Ak*BiFFI#K|B(
zJ`(^2m4b~X|6Tc_{O|o38@@PXgeQt_$&ylg&KXeGoPVdi at H{|1A%AwH!T&IU0{^TF
zJw({$6Xdg4y}-n>It%c1`X9_VGW<k2hWB8G>VT0w_dB~|Xvo{fhW}a+w14*h8<o%1
zhL^g8h4RxUKcDmP{}0Q226&5BIc34C5YWi?b9Vmiz-Q=!`lR769!^v_Me+YZek9iu
z_`TSS|NO>h*04mifF#1VOBHNP%Bm`Vo=|+yp!YDptjja=G|4}R$>;Yq at n9ImlmtQ7
zFoFG_NaZ7VZon`_XxZ?oe&l`;bJkdpY_znX4S)MwTb3U4R-O%`7#zMme+fRZN(@T-
zagh)wmb0z?)i}v&Q4aXi>U{D-=#c15Lrv}0pP$j0KIcQEKXLv&Qct+N@?qSgFM at dt
zjlY#&Byz1rg)Ei-Q at B>Aiso4gt{5Aq;?gAHA3rA-6nNI0X989rv<dtJNE7~>Bl)S#
zPpfwA|4It1%su*YQ)nOoAw1dt^^(7&Ma!O;MrvMUPZD&;&^+O2sr)Q5-zENgY*eg!
z>iH~qj76TxUh5}cj{$Y&{6Ez(6lj?R&mjQp``FU?H~71;XMReT{}cr}1gI>qDXzZp
zKRx6$ENJroL?{2s^y2n!S;(*Y?>r-pyUUD}X*B2ve}}JK-G*9BZJ3SgK)fNaEv2XZ
z)E06ciPJmbmE)<q4Q3A<RE{^AzW>u>N at TmjvD;B{XlX&EJw|E2(w&zkV2&R(L- at v8
zE$O6o&a}VA5J^=y;cIJ7t7`RJluSi6^Sffa*`+x5_u8Rf4<*zGYoC7gIh5>k$52H6
z0r(R!Z at -gV>8eK*`9Ddt;$R1PSSkPO<Ug&UkFp5ZNTkRI{AM57&T#C at q^Rtom_s|y
zC3$Y}SHKdp#!<g4|G#qn?nvW*+E at +S-1`Utc39lc4vXJXTc at FQ!<#RS^Cx?Xx#>up
zb+Bo-V;Vl^q2CDse9>y3RLGCieiQi-yo$L6|HJwBnU9#2HRN(bfw~Y-LTEyOTEKMp
z&pgRxgY&Pvb=AzKjlq+G>nU|UEjfh{uqFPB|KtOAE%5IilNn=z`e|RiQ(&H&wSUq9
z`i5Xf`EjL*=4k?qQ*u$uZo`a2 at xb>q8 at nBWqPWl<T)kzWrbtQ3_`NgMw|99oxk|BF
zOt5X#10n$-JW{kELL4qZNYQ_iirAq`{NqmAdfnpA7l!ExJsHAKvj>a$gn`J=$1a{}
zN1ou7(g5(Mu*-?Dk*ItEjod%ruV);Pg8R|T<LTt}Xyz!NdD?|ja`%0Rs}A#DYkSTU
zf|lgJkog!68P$P&u-Df_*V2<CEtMi|;rv&gzra(&s0VY46$~s5+F#(8cDWIld`Un(
zSffKgYQeN7YNsGel*5Hq&c8S4b=#^Nx9a(+-Cip;xK#eTE4Wg7+;~gnXN~-<@b82Z
zMni$-EVygIz&V+~06#}vemlC&`VM!0zB=k**&PA~{^>uP_|FRbH!ZhckF*O7Ym>o+
z`deBW>e<nyax;Xh9pP?P7GSW|ab63T<TC4=O&m4BKm_Ny(>>T4c(IWYGE#ocxJ&HU
zju at lnXC#}yZ93TjPkyJN#3}{U348!fkk}N3SBbE4z$yfIhz|*rLql9+CUymei52ZH
z<|E|{s%uzf#ptOzQ{81jz894vgd=5hhqU(|`HBJldfv@=*o}uW?>jmFVu at OSb~%*2
zSPI`8SJ1l*6feT2mdfX7`vKReVTV792Y~r*4m5g{ge4q+VlPyZ^o`E5vXvS9{bCLO
z#r)x4B7f5d2mf8;UOh=6A%GByccqMYl8EzCbSTU}yQK3(n+jga){FCRhp at _gGbBHW
z;UNDuhIp2NroMIGvgr9)ke>#B+ia5bNG|v`zr8U8lnDg<+jst>Z)a-eN2Ov2QwT^-
zfdaMuIr0A_!iZ3Lew at eqn}7j)|2|R1R!aMb_e?-Zh~FoT?s0&bVLQ}O5ucVq<KjHC
z-Sv2 at O2^~S>>gE?<z95=FoeO$ONaO72m;lCAjyJl_uUBA*#u5~?MLZy80mB0_a)M(
z#tF`fg5k|62dssFyYyel;G}Pa6lTaqhBF_|znT9uo0^1`FkR2x*040C at LX2HME0lG
zSc4wbi1o$ux7)u{G|zbc1^A2nL at 4&O3*=u*kCujt at -A@IL9wCjXZKT)AB3Fqw?uX$
zS}P{N55qsV>_TdlRt;klb7=5;q~`Ki`BHE5y;dNH2WnS!BW->ppv=?mk-`-M?)pqB
zD38J1Qa2x(zxJoGJ3E1U?f{v0d##-R0{;T#nD(&RB+jMOC5(|=oc!t%SZfOoMg9x_
zmb60v-riYohk!z9JL<6X4bFe=+gv`V)a&--OrWxW;D4e(`Gh)V at Ov}UgY#ixZE-h<
z^B0d8rkfl7pSGV++^+uH_ow`4d}u13NAjGmh||Cu?I+Swe(Xy>Xq>*v6ld=KO6aVA
z=+JBeW52+ocqd7j_rNePdm{7G|M>GrDMqTog&k>)6P>pR0X7I!2zc>de$^mQ*#zGe
z1DT!wQuFNEYbv?M@^>3U$rLc(hp3$x(bK#u?KO`=?PKOVGx)7Z(%#~SO at 5@q+8zYN
zdBZyp#(7Se<3xT07i-0(vt<eosxMQPw#Y-704jpQrTrk}e`5YgW~ZDt-ag0|J#!2z
z*b4vU{8`zE%aMSlCrRbu8bZKmhohJYH<owJ`Hv!?Nlj}yaBg~F&{9~DfBM+QvhS+w
zC98 at huBGi${HmB$*~&xWRWuN85dzv#&q- at bH1l|eR_qJ>ZbYi^^D{~FK++;ql~Vxo
ztOBuxxc3{z(0rpmVJ4jdha*+q&G`!oke}OnR0Xw&naF^+?9Rr?bZ5e~s}sPu?;AW2
z&m_O#v0(f!Kl^VbmH+tfpWDE7#_#^EoxC({TDN;gV at YtYE_xXjAI0Y=fa-8I+mNa+
zlhqxk1cn%h0$td0k66%p7Epb0c3oZZj^a43)dVSSr;~1cX7=jHkF23<_ua<eH==-e
ztyly3v1=)6J<1^yN{<Nh$y01R<FDdfd;S&p%Wqh{ke@?B{*8SgE48LnW}b3$vWcnZ
zGt)kg6D~0{*MfeCl4Mc=4)PtMo)o|uZr}L_^9BAqdVbvm!v9C|+vKNG?BIXnfSRWf
zLg!td7Pd6c42PecKVKawY^~w5GT#;WdtjzE;LORnK;$Qx?*#t#|4z7~RRU|G>ZTB|
zB<)^Du~{(xFrVo2`NMQ9*D;#_04EXdfHH at G(tO}wPyl}NCjak~*+Od2HyNX}{FUP7
z)$a}%I+oMlHOj#UM+ize;GR5KR5Ak)Og|GJiQzXqK@%6(ZJ3 at m@|n+g!ME#qMlyMO
zm+bx~9gYd44 at cnOx{(|l#@CsgMwH_iHE8Mi_lMjguSikcLI|op9PSIzt-F>!p9%l=
zEl#Ya at gF@u_bVy9D1esueU9qz4EQ7X$ICVInaLit#|;|brw>^6T6rs@>`NB#oR^Hc
zJu%-d-;a*k&U4CqTN^Bb<a&8{EYT1W+RMIYz1_A5;;k+whHMS<At+*)e+&KtIR*Yk
z{`|9v(9EUrALOSe(nn${{Er?#2<PN2qo(xi`t0ZH9g>Hmjg4}}{9Cr=qekXC$Pd|n
z&G`og%c^LU&(5kAWv|sGwDQyVch2((hpq9n6$0pKgwQz)SdtdtZ|A?vNxNOAr at GA#
zs-B<5dz<+1<kTGkDht5&TlVxV92)$K3+$*n7=49uv!9o_4W94naxzYdO?jsqjSTRL
zT at G#{asB%%*0Tloi*sY(dp_(9ubY}YmnNXjh};6Io8rw$Ig28?{BWne&m{7Q#h`Am
zITGasFwj3SWU&BKg&Ahzop8>4tTq at 2tGgV+fv}_8cflq2m;6Tg%pGi2Kl}E?>)8aV
zZ4WX#H1vk<q51SPYZjb8;BUdx!WRBRe)f$lhWuaa-h4&yU!g4qDEhRNl+Pc}!17Di
zs}+hlGjIei$^Mi6KnO66ivP#PL;jOCE|^2)wJ at LZ`GtJDTH^m58}MJ`U-Yq0zn`Zw
zrpjjoP~rc{@{X9mozK<hAP|U~#e8}=Sj}Zp^Q~R~mM+h_TFZRX;9dM at CO>PNVL2Sj
zUW>5l5{C2N;)LO9gn$U4RSQcNFz2le{z<Nnucpb2;%sgT^k(1sbgVp8v!KobO4SMe
zZyax5&AR#9OW!(o5Q`8FqP4>Rjq^JC5?zQW+WD_S*Z~XthxJ(*E))*o9EZn$bo25m
z%VwV01UzI7nQ`BxV=yrAS-G?SbRQW}Qo?)wx=c`A68}e!85iVpl~F|wduC<9T at LQ1
zIJ;wxWRe_+4~d2!{I?0LB%RP3_#cvH&-E%3s9vU!A}=IyqtsiPPcxr2&c6VE4^xU;
z*gtE+6XrQD$ANd-b(llI(+!{Vv>)Ur>L~YX&w at ay-}}ht{+S2t0>6$X-S|jR$bUBs
zwDTXdVFEwo_ssdp1S%s~bEmxyd{O*=57s6DZJtrNVL)X&|C;p9hs1tU2k9bsJ;Vq3
zkrU1MPus(VB|i=R;r}Dmx at +bp@nBnqfE90V at UN4fc;<5cL4H53{SF~2%~X?6v^7;g
zi9wZQ>N78WEABl;S3F0#Gx+z0-dX8w+?p1b=szlAw}?5gsZN9qf=JYxC<I*fF8JL}
zM%wu<#1e1!0EHR({lc at AZTnT?<c0X^xajCJ+1wp>M-H+LcAv)+ at Yx8!+nq!k)C><2
zBoT)~K=w$gg)N29DGN?k(q%09Z>1Q4qMNu>b!tO#m27IWQd&CeNLi=*945hYFrV=(
z<2BFEK{f3Z5o+@<qF7l{MnLDHfS>3JJPA5I?WYQ($j=_9F>^c+)AM{K&o8jA8S-rw
zFo#grP{{vA=ii>c at IR3Ms5KKv7QDoNkso6vg8v!;8VR&#R3-%QAsjwelcT4zP9p+*
zY{F<~?rWKEH~bX%8~=m+!2iaPIF^0lZ*#ZO%>0wQ#9+mOCjV~P%}%dWYjX%t4xXg=
zWUtlm&=`ivxaG=TA+y1s=eE}|Ou(iLE=#bU5 at F^LE_74LLaZ46vt{oH&110|NkI=3
z^%dRLo^RYEHsV8+c$kbp&q=2KRj^O1=iKdi0!YhVd2GJgR^PAw at ZXmv;0ep_we4Ck
zY!TYS1Tf_ at 6R$l0G`a9uLNkQWb9 at x=drhfh6!6b;isMazd>w)j?~Sn(1!`v!+FZrl
z(et@{^hRx^Om3UoS6lYja*nQP0)Gjf0YB!$lc4>*j5vSMo`ApP;&`6&38 at L@A*TSJ
zvNFasdM!q+xuPV+HSEYW5+PZ)2Th*#x{uj=qW7Rj@%xSDhbaHSe+s5(9yEr=MD3Z~
z{tW(l;rA2%TTAh`7Sr+u|LJb68TIhr+kD21?kC&W&JdV`_4H4yQl#)jBRgAWzHtt7
z6G%M+eJmgjutt8${I_cOT!pYD{!6MYuN6W?W8As3fQ1kgr#&_B^V at md<fk8LH1}#|
zmu~zsCgVeL?^>y at eM!PZ$^kczIY at GuKyurA1pi*tq at 6f4_}6G*i?MGhI*~-cmwJEj
z?}6r}a<m*YIl7>??|Ak5;f=_T3Z}#6l;vQJmwxc8+RITI<da_-+A^r*57Fk#6>+a&
z8_7pa)j)&%dXlfy*dZ}w8rhNElc{z;EsZ*|vxx!$%q)Ne0~KP at h8I=8=9Lk4<S$bM
zPwtSTTDkmkDs^oHKd4)QEaOyU^q(O=vro8Z;Xk{B6K>LIG?-6(MNfOES-3FfLS(x<
z|2gmaoCc3$U-m)62Fb;C at g&F5_OoLC?KT(S at 8|5SKW%4)|E3ecf8yzce;XV~KvLkM
zK(c@~fq6hZ!M}G&&(2?N<(~GVI+7EWAOND4C`Xk4#894aOXa7N_cGz7ayzV8WibA~
zq^i=X-1m4eo at dSiEV!jk>M8`Z2|&K1IQdNe<AN3&wL)p?819P+a9;}+<h9Sd)GdQ#
zk14#&Ui7_Oo$vKUzR^!1fEMZro>w`nMA6;Ci`;rDpZ>07c_FdEYL&COT&vwoBet;H
z$$le_qbqJSHP2IuKKbn*8}*~T)033(8E%JP%3p<?WNe_HWda@{EfJ{4z|F&;i~-N_
zERL~;!S*alDL_4f)7G$V2XbFr_2u_VV6EMbaf4lz%dWk8>PkA9vx%}ypdN5PZYbn$
z{qXvLd^7mt|I71O6XYKuH2)3HiJF=*DFyy8pTwp~Yh~uHj=$yn at AjPc8s7Vg4}IO>
zHBTTq{uLk62POFx<A(F62`rs|bN+(85b3}G2L&2%n&^bvk=R#5x at vbrmB0%B<1r0q
zarjyaIhlC=+VaVt_)M at Y=ReDy^^6i8exviB9~HD9Ki%_#`!)GlnedQ(mdaJLHQ(hP
z^<e=Ml<P?-#oj9fgtyG8D<V`!2>H~RJn+BRrJLv3sY&&-*E at nw#Y%ULIrz*=@5O}O
z9d|ZC=c<S2_XHnSfJddv`npN3N71d6Qh)1S_s;I!PI7CKRb|_txM at yQZE*_N at OcR!
z6FA+i<ijnj62BfELLY61o+F2qh*|0h|Ml$PbW`{2h|@Um41*m{!Wxgkg?yQX%sT!*
zlR4LS2Tz*<oFu!5dl|dk-O6P%=RM=?vqXmsE8y^REF0VA&}rS~I#+xC>aDUAgZ$Hk
zP5wDJ&XD+7)&C%$np)M~0)Ic`t43YjIODKbv5D5U|09a;`1E(q`=ig>$e_oA>Ps9$
z at RIrRiYXYaJO6@xgMZBgR`~DA?;t<r|LyKMBl!0e7#&%mK=q^&iST}BxeL^OD_P9P
z0}*PMG^f$de~y?NoqvfxVUHJv{IqfvD~@Ir{CAz2ndCS<`U65jb1qI2u`wZF(n3cR
zXy;$}$7e?JJ8#s|k=wHh-OawC=uMdbn%ao~Qj~jl8{x*C5*q4H4#{_2em_pbe+Kp_
z5a!>7Fh9K(HN<-Ozpkg8oN7tA4pdyL16PltTU%FD{x<z)48eVbRTs-5I6aAgA`26c
za8(U!ny!%KH039pAw)<nJUwHAap9;@s!gUk)T0ER?nQOyj)_ceF>gb3jj)pxAcZg&
zl@;zeSE=BP_M4#5trWy7 at h>ZALnwDKio6T(NA0ZM=0STJ{C-a4zXjnq5ct1m{JbJB
z<X5RTU+1364M}8q1f<OO!61kJ-RA}GfBnb5 at x|}|)Ld)NFH`b++PgkS1=9blEhqjE
z{)h9Qn2#~G!T+PVopH<|U<3Y}`~X!oB?kXP0^0DHD#NQM at Z0Yn=iftm%lUW1(ky#M
z_Cb3@%nF)2B0qEHyH>fV)0pxX`LDYJE#g!iOdzqcXPxmy3XU?b!CR)(l?mV>`B|<0
zNq$R~hi#sD=h~>)kv*Z@(JhN at 0$Ns*2!tWHr<c7g;{~>IhSk~P>#lG>PJs0#3%*9G
zY*<jYp8AdNl``*gsPhDJ&O{E2mZ;ZshO2fd5Co8P??~?9Gq8$zhDKiZX!c^@m^&Md
zG>x at oEcj1%9dMi3HJq{1NV~ULG2g;X)yBO^tiH2J{^yMD^zNz4P{D2o9V)0Rt-D#F
zJoumH_2IELEv~YpY-E at Y6<$fx<|1#^x#I9=@HhTv@~<=G(BMBZU^Rf1+B1QF`Gofq
z0Za%}?bYdIzoB*e;Mab1{=2_m`?G#;B><DD%J~O5)~DEeO|Jsr`0xq&^H$BKKm-3X
zolX~boN7l9j<@ii6d-$?AIIS*3ixR_Oh#Dud>9XCtG#l4`yzYxc;_YaZ~Pbej{rE4
zpYEjMyCVC;|0dagIR8fp>rN)wN)c2So1;u1B$mfW2q4QGoO^+j#A(k0es5`<y8VOy
zz6&MGOM8WNn2&{4Z-&ol6G$%L(_#YgkYxzIC_yKixY?S0j`D8Xmk!O_g8ysA)=~>o
z4yf(M%%REz9ShtG*tTC!iE37OB&x}3o7F>g`E%>c12Z%z^-j#hjeu=;C&8ldKR5&0
z&^oGIIP~>l*2)cHI5B}SpY0ryooM0?ItR<>oop>PE5goUxtz=I2Q3qoZ4tZ3e=*EB
z7D2GApfF!rL6CnyhP@<R;wUzIe(FITF@%}?cSCsNKh=;p{NeWRUH at 4Uv4_0Ke0M+9
zQqTmbJ#?^Mv=4mchr0WeMb3Wvr>&%XKe*k(`7gnL=4=SeJaB3{(J4=Iu_}KD|9MQI
zbqM~MPw<}*zyt*A{A}>ke3JHhz*#j7cG<$csLu8Pa-;Ka@;{RwGT=1iQ0!LwYw>D9
z;W`H8Z0m%Jou)`V at Lwj7Anqpi=zF*Y+Jt~oZ!CBgzjPbUe>JFQ9sdGx at E`MxWA{_6
z7YO`5CXig%FY~dbd0IDd83rO5iT=?K?~t?({@ESEL-`2>s;xKa4yymW<js9r`#N}Y
zAMgHa at AcE81BGuZjQJ0jn`AI6V__ at 1IUHQs2)M at l6>5nyGya=4q?AyLIapB54yvB&
zNY;1i5p6xvbHaZ{L!973V#`e4l``SW>>d2Op`rs3n{S!uW&SlLP*xDkJG?IB<1<<C
z4GFLKJAvPe;D2g+NZ36nYtH|-KV$+qrkX-W1Umw5cmgP at YUyxzQSEDJ{J-}fzW?S=
ze9IhE^JXQ*gZyl8{-HgM|1)8D92ElA at IPtk;1>{<9VLit_c66=&#2{X{7J~9*u8N6
z)$mZV4<N0PAI`tq2<M&$dEXlOsSwr%IG&SRCmix0^5Z<mktmRxhy!3;aZ}Mk<DKHP
zI}x5tAepaYUHp#&uZ`-?u)r^2PtG1Im`xylJ|=+S^aI*B>gs0;_%q=l)Xpd84Q&W)
zO{YXcKyAIGJ~0P{vnwCwY~wv{^Jrc|*FDwR_6-eeA}rJe|6Tg28UeIJpzy>T-1qYB
z8AUaiQr=lQd71>$mYH;5!Ghdz-kw;&?XUFe(V$+tlY)QKs75bnz<k-;#>BGmYU5*N
zqS$ltIbgnF?{y(Rgdg~qI)8(|_tr%>3;tJWmt}{4{$D|`#6T=)K3D<#*W=v*(sF5G
z^_bBg{p`OQ{C>Xw%Rl(^cm7R(pyHQIszDpUFq;2h{#$^b6|CXEYf07i6UnP;-!uNJ
z1dtGrKWX!U{1x~)=h6yVE5j9gt3vJlSvvnE{$uQGvcLOP<Y$BPZwfa(BwC>1|C5^4
zEV32;v%6p37ap5OKS+f8!O#)sD-oV+SR7H`iw!q|BU<5qx)+{DJZ;=g6sSH%mICCI
zd=Ka}0CTTLxnD7gGMuE4Or{AK6yaA`P_h8{zfNww&`{2h(*vzEjqH0C*QbwHGZlPV
zWVA~D8(S_WoS!zt8Im8I9N|W={Z1ls$tjX1J4m#}9A>F7Gu36#r|}{FL|BOlM73+l
zu8K8CPDT?DQGH!KFM#c%j*R!Rw`+dYUS%w)MJU^klg|P34f}4Fn)_zE$W??t7dwN$
z at sIp0!*1c<ighs*Fi7G#G8V5g-(y^(lOYAjl{~F=2EP}duc=?Q`FPSC<tLf%n)64P
zC+0Ief8llw|5f~gDC~VEKcjc9ljt6SyZ9(p(B{+JDQFxDw&kkZF+JF&{U>Z#y2d|u
zI+UNe^<}Z!CEq(Lcg|;6 at sxe|(!&2rnw$K81%i2_K_|j0GOI+mSx_eeeMgq~PiN)|
z|9vB}{&QKsD4Z}IQS`v at gvzf$)Gctm@&Db@(0>(?q=3XpqF(LxFM8elmDkeeOWxdv
zBs;6A-S|wz<eC-Zm!TZ0Kb<|r2c|RD!X^^!d=R4}0Q%}Uf8=NCkXg~@HUZp82HjN#
z<KyyhrSX*Ep<1jxJ}>45<n^!s_&0}npK|`ZSvIC6q at snLRmH<QxcWZ&KU?RSD_l#r
zKLy+vf at PoazaL5&|1bZA|5ey+6BxOn<#iQ8n1c9*ozAl%sE?3^sapUX{BL&t1^%#i
zD*bTX!SHaWQ#u(++2m)&|N5uJn(D|O4)FJIuqqTb7v0SK1AY>5=z+`RBxBv7cD>cT
zO5R(`{#|`e>XFmFO+9nA$xnh*9a9vT$ZFk6o)8G#GHT?C1yv^xC!D*m0sr)WLd4XW
z+`=rmLnuK<ooxrQG6Bxkg)kYv#8{k0!c7zmwY*B-e0!%M0D~C#I{N2DuMcAZe+7#$
z7H$8cz>V_U&oYM!YMqUC6!U at nVZ};dj`nhe11y>?PGBF7wCa$lmisnXCtN}z7Q{fB
zEFlAKcK|SQH`GfKUC$AgL>F}|{EtS^kj6{jI>x1UE7#J6l{+Q7ag+i!e)ey;^rgr-
z+<qf}{)uxo{(VBtN6KW>Oo0eCSodrKF1+bMWY5&RG+1)}=5)=NpI`jwXa9}-sFk$r
zS)6&@V=urznE>#gnMb(J$?r`5YyZAQiyyAW<4S at 111I^>U*!)c*2HS2D&fNU&$3U0
ze}Vr^<j49W14%lTnQvP$=ihmEZwBu~yQGhtWR774Nx;)|v|vHYiZC4VT5c2nlN78~
zh)%@Zi^6~OAD#Jy<U&z1in4;5S&>{IQGid*jl0spPC(BUVCR?aS}WMq&&Gj=3xzP;
zJ{;iUySWf=0Gk-5eoNWGW%dSsw at jlB<p<uffY&~X$K&4f3Go==#(p3C<6T#~n|qhM
zgCaCF35+vz0y!4UA!d??M~4OJV-dC6lMKC at h}0Qw@&EC>Bzcpa6v2Oz0v4TRq$iZ5
z4CI0O@(@)QwXG%cyHR8a4pYuGlHU#Z?}m!0r^r=QZdlI$WT#CiJLy&9VFxqv`^E46
z-8VS|j%dJjcK!taiLp2A=bu>w|FrPo)+he6%Dy19g5qFPolR6i(Jj*n8Pl*M1TtNM
z8H?9$Eyg=D|9Jj7!jOynjH}zQ)pv8|Th4!Yt;aff=N$6ib;$w#Hi1}ykmM>@P<9MS
z3FmTv at Y?q-(nNKk#02Wd-CX#hq_M3<)cR*KXJwSVr(;}HpzFTGS?!#`t!6($QBdc)
z;J+1^8y=5uTb88%S2`$gl5}5uHzFi=I=m<(Tyjt6X1Or)wDjESkx=a_Jf+3WMN}+l
z3{A^ig_y(+Mpv>AShBm&q=cLC7%9I at yl^rjb37Jt at _wEHEAaUp!4tkajp8wSE?=NN
z9+ouWf3JM9`^YEEV%ofPYcDoX{aI%twN1xLbLfU!Jtv!nqc%L^9;+5MJO2aE at hrJN
z`rO(BhGr``^|c>GjXLwSbYYcUv1;Z&InPM<Ihq13 at jtZmnf$EbKZL4y_?C_LoiB_Q
zscO}RIv%47zVULi^B)FYspUj|)?|OX`IfSOSzJ95G+L`;)nAdi&*sA$+|y)jk?gk5
zf`$o{*BbcO{NE*j;-byuC10UuYLSa_WK00ni3#}E1n#RIE);4$2lb#ds2ltDmACBS
zVzY??@FU`v38<L++XMyG0lbJDy2~Lh2bkSHAcR$aMX{Hwx|?!vk!yque|5z>hW3>I
z2ma_?Ef_*ClUz}V2|^NKRTbrc49<G^+(R;om9uUTp3_fC%0`&-|9b`eycYYF5&LSs
zBGj>?=ZyI|!!4fk|1tL_(AH%|m99F(daqQ95>!BVh$LXq3MxsHkcml`qDg`X2ue>0
zNK<OjBqEKJpdf;%yr&>#gNS8`AYun9*dj_NjXeqi!c%OpL2PQgZ^n!jJNDZ9oO}Nt
zv|f%q&e;FW+nlr4jEEUCV#O-JtIp^vOhEWI=Op=c&(*-c!fvQ%EB8n*D9m5ZpB7do
z^cLW!o10(yQo5u>e&nlxjoc=>1V1R|puxOcF`F0ZK1{&=KREnoB#TBGo{~Jd{Xe`S
zB%qN{(@GKD6ww^TN-gmsrWRPQOJ5YuN{>#SKYFDwgv#+jk$A#Ts-xYdMI5&+Mc*~=
z-yIjUSU6vEQGO5qcuPK4sMg*zy{iRL5sPLv^VP(EEC(sDoAZG&UR3QUG35qA0#}zI
z3{M*-00Y6zlDmN}w(BB3a3lQtrzqB6`vH%6$y-<~gu5_-3q-)e1lT6e;}Q%=hh+%Y
z(zA+TfHES*$Gh- at 0>C-?oqUgyM5q)$^2xW*)KKCAhos0=-kFE&zbm)HL&oi-oE|33
zH>)Y)0pgY}=x7}^F-#s$6|_ilRXWizNyL|de|q@{PYwL|{FRtvVaKp9pI at -A8{>bS
z{PL;G|1bEb3J|%W!f41o*L?`pI-LKj)<;;D2|VXD at 8IEQ=6lHbt70{-3IDEqHRXql
zDXBOZ^A4J<L&fX`{siBQvGBztOJkE-=ykZS;rvHKpz$B%2Qm<gJIVgrhBrBXNfvaR
z(qFV3sh|?GEM>aF9OBHWs_A&#s4HTZ2!7InSW52^CJ_jYT2>I*9Q*{WrZy+)eae42
zg-nelH1@^7uW*q-$ah}p5^7R^@PWT$n=LRC{xzCgtvJAp-RmqC-YNK!O at LfLtwD+c
zSj1(|d(LbA5Zs0|6d4K|XD)v`1{&}UvJ3tfum^ZJVG#I9Hw)MCWmtqBrufNi5r_yM
zwgvedyPEh2ST1iyiLlbEYz*@XiYsQlhVpLIP540<FL-18Eu1+jE)RzXCEWlF2ipC*
z(0dSGXs5%ZuJZr<R8M{#aD6OP^jy_ at MtMl)uNK*G{@- at Q`BOT~%y;GdL-S1LW8`PK
zcIE#^4hzFs$WP#3?n3wvDN^{Cth8Jc_?@-cJ at U*+mvAF?{&=m#e<(ji?Fihi)NeCi
zTk$vvT9Wn6FQw6fM<L%H^k&9?m;;Ui6%l<S69IX)`$hvcD;r%~D&x8 at C~A~4fl at QT
z|LB6?J(~jI%yk5z9zrNB%s0sCPhg&p$^QcC-0;RcfsN*To|}S2QoH-`hEXRN5zJTg
zSa<`<1#T#`fBZGDtTaiSp+ZB9*m9Wo_n*f;FCib;E2)gF2cQW2V`7*F{vVGWrY+LN
znQ`po1;CP1$YOGfnZDUtsJE1AP1P~T;_?`YS+Z_Eg{eNPX0}uK=M4}g1^#HGU2tB2
z=Vkz2edgoJFY<q*+e-L{GF8H*o~tOGTmOkStgvg^hV$3Szl`>xrTOQ6e|3IwIsf1I
zlfSyoSAIVoL6!N6-MLpmg{q=GOS^*bA3~y&UltA at C1AVLJ2t!VOoV?x1qG at Q0Oo!1
zo#FY3?|OPE!MWSP^S=79N8`W9k9s_!sL_X9O_{GcPC+}(9xhp80*Pw3SWM1;{8JOx
zJ#^Q{&151FwfoO-YpDBzTokS{z16%ru7WN&sh~xHcn-W1C?$kP9IvOGn839k7-+mJ
zUHV=Z(y=gsY{iiXe~!+H<4G#P1fMnmzyMS(b4{K<L0?7zPUx4w1Q3X at 6zbQ|9y+U)
zCdY6&egyb&T96XnJCR!@Xh}xc7{zRJ=|w70$pp9=QA{BqD#A--$GHjol+WTrX at jbI
z+hjPrJ&Y09`_Gy4h}Aco7vQ-O;74P5znSrG<<sOpqAis~2&dky$v@;r#E(xwz~b#8
zbFl;Be&dYGf_>ef2=NU|<~uQeiM@{!e|Do<^s0gX5YkKeFAYZmek at k(zRVOrAs|g4
z+w7y?ET3LX#;^pJY433UN_*WxJT^+;j=Jox37^rdYp2vR->3 at l&Vjv(^>GSYkpBbZ
zXW*X_DkVZ!R9hlI`94JKT3_P3io#=49t*7t{EtOJZ{f`kJ)ieUiI%Qoey2=;deCA5
z`n;q|p;+GkAus$*FAWo`h?rt29^}iuhUibmQWS|Kr<^a^Z-Vg&*XGkHn}Ep}duo$A
zU&cbOk?q3H-w0&8nHv>2CxTxn{&PEgxQvd%ga9mIHa@~S1Vn3SIJX$3tBnSHoS|A|
z@=O1-8u>ES<uBs5{dYUIckajDqWWLLe>nf at w&L at OZI-L?v1rkAsA%P!OGJ*qjZa1p
z!}(8#*BAJ?(WqWzPiMZCJ%{sG&I@^V^4NMc`FbY5Nq)-t2NgsvhLFU5YGg4i!Yl|A
zh|6Wxm<+?DN5G)sV{D7F1jkySKNR!93yJ at f@>4wzhcaLFtjhWO=;vE$$^`f)1xP%*
zH<-A?r93?@|MS`pp!bhZ$RTL at 5prQQH)@WVf>f77D-n<hxL+mkPhKn)$S1b65OCGI
zu at -D3XVeCdG)y43=E?mA-;?jX%3TSj-}}0Ed4brjLiQ?J4$~uXfH?6AT+wReW&>tY
zR2bM;14}hu5p%<DixjC~5yTtw<Xr(LLc{-YeXuReYgFvT;w>cOSGWU!;kohq6*bh4
z7o?(x0IO1LE!6tnSIjV$PjAxG3E0(0;_M1<e`E6SxOc<*G_NBT6#g;ZRDMuCz1y^&
zbAO+y9^01j($qxgYU_aS_iTk at tD~HA?(+)SXS50|;8*@gqki@(C;mhE7x}T4K4gFX
zbUvS=KsJF$Fl7q_O;9J-p~}0S9$Z)Qcu#xBm}?PH at IT4^qvji%l|;1owIwv+{Mo*J
z?xSf?r{u>aFrOP|XW!sq3+4;_?FJW(2tx;;_IJ?V>z`u!wEH5oeQ%QpfUz`zDB??$
z at S!cNi?aYlWXy*dFGO2r5)wd#97Vlh_%;D{5nko4fbeU6<V`HoyZ`zhnAIi&;mM$8
zU<mwm{}c3rG!>@VX<`#-!zDi9vqhFDeyJf-b!R2H9FnMsL)XM!<WH!bQGMpuDyNX<
z$uq=7 at K!U&H?L3>s}Ml7C8o*~c3C(sZY*u_#v+~3N;&!EnZWtMZ6g2LB4#oH-|W72
z)4&9V^B4Hd{72h^9x@%I(Qv3ZHBuGQ-e`3LUBHq>#Q7i6{CUFc0-z6M?fluOKDw0U
z`8kp at HY%c at XrqeSm4*Lmdw@<`1dCLN$R7CDwhJL#1Lq?I41yuTzXE@>9Zt+g&Odfe
z$@xbj##bcADY|LN4rjjM{2$3XB#q_c(+_4O^R`3S|ElBo2XAQtI(PC(+TvaN3f;tu
zLIMH>Ka#`?A)oTA-2_;7g#g!rqZSqv8t7v9Oxxg4E%up$w5<ssJM-N5{k+NRKKKV7
z|Ko3CA_q1Y7<NszcN0-TupTvZb;z~?!6Kv(*%iV#*8telHAfR2Xw(jRZPCI}%LZu*
z<@ZoB!#Ttr0R;}d|It at aA;7|{B9X at xdRAeCB-d+{aYUg|<bQ}iV4k33*ef^pMUoQN
zYz{Vo at c)bR at 3JR4vvmdsSu_8kHdAfny>X;hj5nd+d++D1&Nb-HpU1137r8t+X_q}m
zj|V<K`&}8%z%*v<Qlx|g`H!}r75P!OKWG<6m2(*5e1{1vsLSI>v^8l>gV)twBVVtB
z{D2~L)Toaua<OW7TW7w}ro~$Yy=>uUrz-d-3kdS_ at UX`qu09E3^Gb7Un!rWhj37+;
zi4V?4mhI3{tSaYJ5s22H#RNS3utI>_K~;FwJHP7P at hzS){_q#Q0c37X0Pz98p$zUb
z?#ka~f!K16gHoA*J at vHEpw)1RB4U8(`QBFJl0-CSSm%)y#D((&_MTjg6|m_Tn<Z+{
zHSuX*#B?D37Hmg3i1x7GUF-$>RR|jZlXrD%eK;SqpvX!@#<&^2OYaIxac0DCfTi<J
zVDBJ2@$WHWWdi-C!ok4*0{+2#QuYbi6Z at LYb1)w=6wY(J;ls(}aQ<xX?U?WP>;eep
z?=33XqMyz`MoM~6E&Mr#^L!nk$`UI07x@|cXH~!*I#}W#3KSv0Q9zh)2l1FRW)A3S
zV7ttx_D75Sut4I;c0ofJ1S*kVWX(67KjX`8_4OVr3Yo_ch+Nh)XZ$a3EZ<?wdg9c-
zhyoWekCbCLp6I4ZkO>ZD<M>P!dMNZ$5ulUDxiAv<XkRBf3qrL<3k$+Ku`XVP|MJ6c
zf~5=-7)=NwLU&{Zi2|Swbm>Fg=#lyg%mlwpiB0S!;v>2T*{*oL(~y!GhsI9Y=)GgS
zs%!fC32eYg7u;3v#!g<TL(+)!w{*|1T4k5P;#AJdvWw!cm{>G*P&mf(i(-*M4CjyG
zB>9P~#13D~M^e at LDii4V-(^10GL&y at oC%oBCv3BrPfT?tXkO(@zk|)}9q|30)189(
zhd3Yonb1zjp5gqV`mkTQP_{hhX6KkmOXFXXpV;uVl0EOAVKK>}%Iji5tBa9DF$dD%
zPud@&P)qQ~r^)RD{=h$LjiVd>N3!SW4bX2!V*2dS at TO0pol1CnXb&`=iZ=MyM(-p)
z4;^M$_BgDPI29KS_H2)3+*vaL9Y#R;%n^hvgYR5&VKqo&0=2iXnSg2mYZn^5J(v%(
zN4ysF+^S<ObAiPKuq@&!_|#`dqK6U1W8|~T=p=sXh;zv-0)LoZmZUASht!{^HF at LY
zIRd}abJd|3J#h!TpOON817Z=+oIxwR;Z#>j$RdP6u+2ZCDTwSF%=_XVgSBL_xB`;y
zm>WX?68Yi$f-x~b-5Pr)kSqurDdy7!f75<5pB|XdJWKP53I%;iG14E$#cZG5 at uz<B
z6jOAtU1h!@d)oP9J9vKF6we0;5r4I-A|w=mB=WOlzR|!ioWJl-p}ax>3<nb!S0F!z
z%vb;y_ at mD!5;PDVYh4H282>?j<oxY?Mz?bfIf>cDCEkK1-aH8};HRR;5wvg^IJ}@6
z<Tmi1P&eSGSN52&0~8&eEuxqJ<Ic#BR21M0?v#VP*MpIaquj|m7wMf$z#%}36#{iY
zC=vm{OmJlWfER*xbjXz|AQpj%EaK9d5JI?tB1-C!6mub1<q301)dZ``eAQqXIVPjz
zqASlNpABMlREK6~ai-D at L!qSv9GryA7u*uUc-!vZPy`{5#?9V1(|JPJV!t45>@LBI
z^|Rh%)wcHFjge%l)Vq)$hFYUxMh+|d*9=t~LWBU}e_}q)c_+cY-cm&+RlA}Xq}@GY
zKG**$;x*HH at BW>?)E$1mX96%R7fV at ZzTy1Q%$fSdLBL=1474L+1VDmCTMr!0-;ICM
ziQbxkG(v#00L at csm*s+xz72j7N%C2|hp6M&Cyuw_Npj(li1L~Fmh7qdbqLPL&VX6u
z$Mt2Lf6gxcdd!wdAoy550v|-=CkEq8P at n&aV0+GegDqT*eL&1QrgBQt)G&b<cf)q?
znwhZdlyqHqv_{w)ivkT6l=~vbzJORS0M8nEQ5e1oxe5~)b%9|5tfsnm;6h?PvC)H2
zXy2<5YTjucWLuRcs;gaT#Oua*UUz7?6a~yUN0o<6U4ZbRx>)G*%AMU>_IZ00D9gdD
zl!z#TlCHh2omh>XKj8*v4*4PbAS?GTpYdPdH~vSMNVR_#{F|&CKIZm}Yu*n$LjVZ+
zxOYx2?wGH84n&~fi(_18zG`ZfY{Jw>2A^L1Of~{@8V>tOu>yW!ih(No#zu9?o@?iy
z8ud8H02ZXnDw$_1_0tV}0>YsE=mspMn9l%z;=j63vZEvPx9x0mb-Mv_G86(I;3sY5
zZ4(7x?_`nERR+UZZUlH?zF)&_ekNrRT5&j!iQf|@@H9+G6F(^9GW0dZh7i%@jU at +p
zn~Yl{f{;iN3KQT4i%1g?$51S at 34GR9FuKH(2^qVAk}O|Q)!|_Rcm_Nb;YN-Eca5Xg
z#!2t^rbR at 3q$3Au^*CruULIZ)%0FlXio7warrfXi#+a{*y?|l9jlY!|W5_J5k+^8=
zF_C2I9oZ4G75*X(fuc+HtjsqK@=(!=(+xQ6WAgvt-^@RlPv*QE&!1J5%BNhI&b>mg
zL>?N8$WvmWp)Q=;&Y8u3_<_~b)51UAhE^-Sxo87V-ppU*;ru7^fAN0olwou#gP at T_
z(8HrEM&yUpCtky}Tf>76EaPophD!)gvC>D7yKsqTtD`*@@GH3MF%H2~o<9z^!VoYA
z(M}V*=;$~kdxrDJcu81z^RRc%>(-cV$WI7>g8d%gJNUT|sYHjoaP9*Hl0$IV6Nd at l
z5C|(W0ggU7cT8G~VmBXI4mlOktqFjC=fWXY2hEljg+iz`?w({8%v^fbFZ{uE9{l}~
zG^xj!fa_e%1c-)y$cmMKO>VZA8!$1C4ROJXO=<<gVBqi~^KdXP%4Fn+*A?o<;bOd1
zNkeU%wJDIx!CDbK5>^lw_k4vVQzqikF3}dNKoch&$oV6>erDtppWpDmWj>SVr^%;r
zelf8Iexag+e{4^<-b3+qEEB%#NpXZzVZLr&^!oQOC16Dxw4*`8+4x!f8-yRf$EgPl
ziewxp#{pnXq`<_5BtLAP+Bkn=xA1RSj54KYswWcbbs&GpWjIWgx<WLVX at 7u!a{epX
za~v0#&2?1nGys$LkA;$|@NUn!&+`dhoM;AbCy~cmCy?*`GxL;Kqd1f3GS|5HnLm#c
zU>Y934JCP)fa+pV6xb at FE(%O0Kp+7BG3Y=$RmTQ-nLu=^{9kvc&w+q-)5rc8oDHuM
zCJ_D7D`_!$(sbr^jG4l3XkVmzY&?~slz%7??)2KBw1c$na!YUF>oLVzwB$xnQ3Ydq
zd#eVs1$fM6iH-<K6Cq0TYG=idWDXv^{WdPqFy6p8#fdzHYw`aB|4I9gf*+HV4G!94
z at WZ~M!&7|QJCv{cV0<`A1>TRTp07Bt&*i3%c?k(!;D6M7$$S}3&amH`UkcAb{h<Hw
zQUCMJjKkvGG(rF=fFwjJp^Ni(!$WHRP;n(7l7)u}L?RGYpnOf<jL^XUWkDD4L;I(k
z*Wl;X<bN%D4(G3&y33w&{*S;XW278$c+LC2z=$Of(8-pW at 0#Qc{3B1T)AMWGXHqA=
z<lA1&p+6jY!YK(#g&YMa4XZ9TiUM^1u8IOt7b{e-e4waIAn8OYD#`0`ApAn?mlZ^m
z7`d>^;+YPMd*E-yG?){03!b at x4tU^i$q>9TbCkeDY^=8%Y-=mve*sa+i9#27tHLgA
z4~h=eVCfzk>n+h{qbR@?%fvl at SMS8b$!P-dph(QHP7jZ|17j<cTywyU`Og9HlP~07
zZ=U~T at Q=NjH+(q04#vyjWehX_lfU{<`TV;1&)@et(q3}p$b8#mHk|*tkETw9?ND$8
z`EPpf2RS#2ok#e8@?Vl)DL-QVE6ramH0oivH>gfcI8C6Ab29P`{!zP^=XcIKXumy4
zJzL0+GT)Ltx80s2^9|?E8v{1HPiPzJ4d<1h-Vg^7Lh%U$?dJJ``3>x)O=&;Wy|YXy
zzmyj;!c8Ch63zr<V1Ai^YHFB3)x}g47!7jKOQS?)#{?=D2)w}`lHEmJDGo4IY`uZ%
zbjgBvp3>MyqGS_r#R1>}su-e`b|F6;ya?uxA680Rg#c<{04y-(RJ1&*6b2~$MUgCT
z@$dI653GE7xnfoub|(Wj?J?t8GaqTNR|#%*ixG(&dV+dkq~`n!_^tDIsdMA`y{k^1
zU;Fn-V<7-II=uAN?(tlv_cP3m!z&B+zWMn-_yEKPCz<5O+tRhqQO=*34t|IZ9Qo((
zXU_$jQaM9PKnnF6EWwoEsKjV;2YwF<jF1y&A7lu~C=iE|%NF9|i!9>G^Vdiy=e)R-
z7y>EZV&^}4xiOYi%}e7A)mG>HC5~?<?Ioze>wIz_XZfMqz}2x?VF|Q1z*~<Ez(+A6
zU@!28RF(Olv%+}g80atmu3w=Qje|j{jzLr$1)2#k;;iao(E}_KSVsNGISV9}4wr(R
zB3`5eqp6!^jnbiFih4vtCFapdY4>?>F8g|*XtZ90^1reXya$g_F52TXosx$W*73o(
zmwLP*W?u2)P=U$=4-hKxj4YUsfVuTcA8MrAHaF$G1N_B&aQ>WSgJDA8#l%hofAw~b
zr^Kgl(v&qIHvp*hmxNB9JPxeE*FoJ`BWhj at bDO}=KX1YL^%s3}6pUg|mK)y4d}$TC
z>0 at 9%xHz|6)z2bL11c68x+~2;)83fR=}nH&z@{fprbY-53mTO{*9Y}#<S#QogfUya
z)Hyx#SgDTxmF%fsJJq~~>`9Lk#*1JDEJ at X2YcO^w5afrL#e1&mgIX?Em%M#mDbh-+
z8gC4}dbtRN^sOP$s5Ee&=gS1{^sTssFaf$F*fQKp!({?nB2=PiBNZz&V(gx16b+y7
zMjS|z#yA)&<7PL3P+joA*8iC|Li+4&L}<%pGO~y-h>Spziv%df0bTve!`^$FSxBJH
zJwdeyQka1Fo3j{CX$x~!0zO6o5NHzorv0AT%fPPB&_M>oj$`1r?uyZM at G~7WS(%*4
z4*2hj2c{{7hYvn+ccgx|c-+gFVg8yw{6JyYH#A&{`QSN|{KP)r*vn6kC_EYF^Ci!D
z%?JPCpXvwS_Wr-Q%~O7gL(mBHU<~KKoA#<eQw2erKw80F)91_WYwaT8a at 6Y&d?>@?
zBrF-bL<ZNqhV$2E!1aV5DtB>kId2b#jH1i29i;8Fe4yB1&KNan*g?z>haYY~MA~R*
z)FSFaNH<%^SDwa$zVCJCKjGzA8PzeQ``H9m-4WdcrgYdQfKyE_v{~ht;0JWerSJg9
zGgQh<aFJ*baxvjDSyp$&E&&Jg(P#0=9Z^?RUR+mIT5ak0qFRfPE3JZp at U#NAHeqO^
z-#hBa$+GlUQ2Ph?(R|E&KJLnyCfM`y4SEB1fcAb{@P}O7ceOA~Cbu+31M1j`iQ2D<
zf3O#7J>-3;c1$woyyJo~H=N2%;Fc$>f|1Bi40(tnj|m(ci#*K*qI__ at hrAFuU2>nC
ze{J#_X>TweVzg>l4gs-bTC7?!Azzb7LwwtQ_V&QVS9J`EsO)0z(<b-!5n>hx3<s#=
zlR3hV&rb4k{fE7Xx-ETcBn69yFIRs6_IQ4kD)5KGK)frW`TBa-Uww$pDYt&oD_~h9
z8py&QsR_ub5(up9dHC)4?5;7v{dl%|fHBRLe+vKO1T->Vi7;gX?t*AOS!XTrS-h#-
zAjk8d%*3lgupJTqD+6&>sbVdpg1T at fx9kl*czc%>#snmOzf3F?Cj=$Y9_PG4`|<oA
zccmx_-*PaY<KR!9fXPHY9ywqNWn;Vd3j98&jH1s|2+Hhm=k%f<dGo5_?Hzyd_pBGK
z4oU;nEwhjxAdT}UYe4g%9kH7X_h0($zliQlHNi8!B>20}Ic8h&+k_d4GPy>vOl1YY
zp8G_8vA+83J~^d>pGWPd9j)nPc_k0Rpwx4|kv)U;k at oVzNz&0O(P|hW!ik5U_JvPJ
z%i`0m=}lFl7jLhRAmqDLr`J$F#$X at 8V0C@q at Ba~P0W0HF(0vnt2xTr%ZK6#SRfVW>
z0lQPefvvz2-&l9BO<{|mzZ6@?7&nwpN&rjIL_A+<X^N1MjV3LrUZApq2nUVYjd)l1
zuSE$3o+5&}F2|*R@<8}sWm)0&ap?!ZuOkff-p(7*fAahhXxPu<3KtK at 60tbpA@JWv
z*&k<fM8y*a2nKNe6lyut_0cc+tqH~#Jn<)JgMkL at kRKIHFNG=tn>YXI2m23FCO}7$
z^GD at 7%zQNOw7Nm$sn!=WT_t%{%2TvI at +_+m>1sR*EH{!5vRAGCc_Kr`uh>hDJ<`~~
z2Zxh0`j|aFU;6E at A&Swo02RcpozJ${E$mmw4=cD=c)UKBY`*`{KmIce6On-;3yB7t
zvqb@&2Z!B-33O4^dsQGpqem#y;ouSr!R|?c)W~fAkPcQQ*BH(t at Q=wD6#`O<bQ`ME
z0iNeTtYTSML52eip<hMz_?|EUt&Vd6(C*6tF at DKHtA@m?Iu}FQ<D3EnpYZ$w|Hpm0
z$UnfAp0)*l6q*hGB at RY<zV(54eqaoNhx!73={D^0cpNCjQ3Hc7dCsd}J4X5&%p7z1
z8F%?MT$}`uiTp&j49*|J;pCSNe(pIRmO;>Jn{UiVnh$9&J;TL()C7WnU=5)Sod)@e
zgG2AtXUF+F+V1hp9$}SL-9*20?6%l-{?Hq?Q^9<g9Qfex{|y=`scS>dK_lWk4<~)Q
zJ^b|A9R6_rS)^V9eMS7diDGNKH?*~{`5$j$Aj1I at nCb$aiqLw51k at 1)l1s-gw;`Aj
z;mo}Q5qbl{U3eueA}-`rEznUhmlPi%K)-q90*V4#6DTV%FKSjGEut<Pf?wl{%8494
zU^^}@!1i%&#d$oTeFA?tf8Np|@bjth1_TJ{v4lT^f8Fk`?61HdCo0AyQXC-d3b1!n
z8nVA<yz2Kmj34|1zhP&H58NX^kCgws<1<K^ng8E^@W1`k at 6h=}7bW%;non)-jlouf
z`B2i*whp&K$pn^5t^oWmDZiOd at k~3Gkz^(K4KSxydX=Dr`hgzk&#s!6D;J#3`3TZp
zL{4N$4sU(pPrUtMFM2&b86rp9KeGHj_=DjOz!&F9<jcxF^PUliN1~UWd1R~>FyocS
z#n#cq1X?c8OJfKWa4 at AvBt#mY;%4dCFTjc`3h+t!;DcT3zVsG{0~-RTsk-pg`lEn~
z$iM4Q);al|h5rfx>UJLGfF1=l_+Lc?+l8|RUL#pB?D1w|JB9pm`yq99&;N0s7OX7n
z(Yc1~i`73=;p)O{mp&%&$0X{TJQ~rSHa5~doIj`6bqv$qk4!;m&~nF-KtuV7veykB
z=9&?GGSeOb<Ze_%3Xy8`$~mz)*e9x8OnUKw+Og{mb}E88tRQS5!Jp3G8{ekD7u?dh
zm6pD|pO-%Irh at W{`Mc)D`~NCv27*7SE(aMr{Z+q*;otuSuO$oMQP9GX&R=NXGMonc
zoTy;@N4Lh+?ip+xLhcK#Z}$RYw at 4E(5o+nM_RgOd)nT8;C=*bdoOEDyHJ1t4F?J!*
zsil+6$q+2RZx0L#*ejsK`6&thW>)h5BUcq^ANXIOzD9WBJaS~Ay{kqI_Rw0z_vo^g
z&Jza{p!0KJlQ|Ex=VL!j7jKCK=TzX&7E>W=Df*P>kF)7DeUZ)GI*EW35B7rdXLQ>|
z-~7tgykpTkY5qYALKq3=5YrgkFtD@=BbiD$!Eo3GS%&kr_x~-u6QBrMh312PNS1-b
zx at _-4KN)T6@@6DrB&xQ8c#Zza=KRfkmXF_dF_+t4+$;;%ubbNWXYyj_Pn*Z*Jd&<X
zLLRiAQZ>gmQL}@vaR4F>Z+xzehcC?graOH3d|z%-(t1H5dZ8!p0oZ);+ at OvZe#1|)
ztGA`YoDE$)LL5ly1Ll~J!+wD{Tu;s3>=Sf>*v$iNj*#5KDjOQ|<H(d{k}|;c)n)k+
zQ;vb(urIIPaZa%2g0dR$cJ<-ySFktLFXT(=8Q>4(f9$8~9cn?DN at T_3i02>R$CvJc
zpQO*DN7<qkC(%&fp)C{jgX;X#UztT)R^$mUe;bu7sxtwel1)|(12}fLJye;opWpIx
z$(nxUkN*<Q2l1SQn&{Bf{w(zt?H4U!>^%7Q6;^;DH1Jp2Tg->RcLe;Qfy~bKW@*3Y
zgmR^tm$H6 at eL9@a`?{BX{g1zmXvGfJ$G+q(xBB{*^C)=d+D^4g?^oWw`TT0nQ_tR)
zsfibNy1IJNU-#P2Lc>g4|MI{7*CSv2##=x6703mxE)d6~$M^`jksK&}Up|g1Qz&EE
zBT=P+!Pt#h>n)4$GR$F>iFA at Cx|m@!Ie+}fmi8op4?Z*b_66-7 at Mw3q`ttU6_(za$
zxBsah1Nepi5s6NqJqN)r*B7E?f<LCOBgn&kQ8 at tc^&a|z5B%QOF*nja98$^{bLzb6
zH`6|mAV0!SZ4%e~UXvdHL&4|?FMs<>-ts<b1b2S+FTkJiT at o>>!*fhEA%hmF1})mU
zqFtYE8YyW)xxe-t at ra!E7W3h0N6sr5A&6gk{zi1mr^)x0XA}2WDOcBh2>Cdqjww3y
z=KbvN{n_vT`QK6O<_LS91D~2Y-~j(<y*><keHOQ52l7Qxn1nzIwz{G!EspKhuhIPl
z at gCRT|KmSD>_u-tXM>Nm>TsBVh6qj5M47ihb&P)Lbw(^#SpyY|v0H46=O&?yYe<nx
zn5cNcO~{q`ow1+An$MiNM)tbz;XB~Xa0>Gc_ELDFu)FyDL3oV(4t`8hoZkm!_UR4P
z*faW|%JWCU8%r<6K3jZapday_ZX5^zt!_A+J3jrD-}S41Ot;%FzT+<*@ZW!()-Qn{
z|19RL2?-rPYWN?m@|X_?1yVMG|AQYq82w%BbClqzqqu_hEZ|SIpI at sW4)~F$^3oQJ
z2L6%u>hVUCp}}8SkH9~w>Y~{Z%@@95jxkzIKKT}zx!d{Q;NfJKB=t0A|Hzx(3-Fkb
zL+3ma5MQK<E$8oj2RpAzKepz1Zji5!rsLrjV2h&o(q;tr{qDa~7kJ1I{3iM{W(Xa{
zu}BoXC^k;!94%%_`(zF4qMX~Ju~#i4j&uOFAW!b50>B)?qe%PVD_MPgLsx7p*G%4i
zm(|$AH^8fa3*e3U!SGkGFShgPA48riwm;nd$6n!MxNOdjM*@HCDJZok8hfe<a0PzX
z`UCtFIvGw9jXHQ{L>n_7lxGrEbdTr%+B={5bH5J(ru0MJigQ-e6tanGMpix-<s^Cr
zvRjx6CW7I)kA4ZUn}R-aVt`*00>$|g{Mq5D*ge3H&My at X607SDQR%kxx8`ZVALbK+
z=MwwyT^;-#`5V at eWLttpX71O02p=E83e5-1|I@#y!S9Xl{UDV)bV%m5$@w3LeLDQu
zhSPk$ksq&jZ#bthkL at 15G%c!KB|^qcJcoDw<%b^hy|06n5r6R{HUX9cmjWw`211tx
z9ulI^ePX7r(gCt3c at pev>0~Gq2>&necT^wIZOrNoc&n6?t7mD7$#={XxVL~0ZV%?w
z!&Bbgun%E>7xokQlaG1niTEA-2h<)GF%%oM_Y98>V;Ai=^SSUF5a;0lU-T_M_s}1F
zJ<1Qkmwb at yPnw}*lQBBj%4aG68gi(@0oo4!|4Ns9D{hm{A4*^}3`95Y<oVa&A6-=q
z3AbzDue7%@p9FuH{{sH*_6zwF%?=VCvIfrqV<ak(@6(F^h!?-{{eSym^Su|n;XPmU
zj8`dV!TF>4k7Rbf**g4SJ01CYXdZo8GW#&_5$QY?U#-H2F52Wsso2TIa(L at B;TXae
zLsVjp(2e474Ud&(2!?mN)6&52#N3uS66QiCLW9XHG$s&^s(^=CR2oD5c=mc0n0I2^
zVSm8k8~J{<rU&?a<<bNG+QxMl{D3y)8f%rYKZUU*n&xWF=Na_#Q0u(tn|}6oPyHFT
z`r>W0Mg6?Tr)F;QvylIh{6;7NC%8(S5<h~;ut~}tZmWcMY46-jsY1sdjxmHUf+Nn~
z;E%Ld%%=p;sh>PN0GvmJC)K=2Bq!E=LCk0haqqIXbdM`U8bn?4te^kYKmJRD|L^|s
zpOJZKctZr^;T*vH+S}Xh2h|ziXRCscA6Lv9!5c3KuN;32o=VAUrFwM*3`v$Ya&4Jm
z*H}ysfT>~vF-of at t20C*PQ}&6nJAFOzz0QD=|V#qg$sckv3i at pRDmkMcdh17_B!Os
zBYs{^-hO@;^QVA)g5Syb0KZHiHrkNm>=e1Y186nVOog5p%SNsWTuJ)Oe3-&PCl61R
z7I(UR*q}-Y9x(*!qDUG;!xr+thyN-Z(=!j3Mg_taq)~W3ua0hXd)x5*t4YObL07yE
zGTgvFrM->zi@`efMdCyFYv3QqcWPP0+bO3kLN(10w|R${DpZX_S`B_)$$v=%ELag8
zg3 at n@eeoRK#QfL={43<^xiN2Nh`NietLnz8z at d_NR=t;!UoZdN<GH`Yt}$&xyVqg@
znncGy#q+*SJLx2^MLNJhIg06oCrP6*_+4CRZ1T#axO$8sLc;{o^M_EWYLsD5_Ie<J
zP1xhCOy;-TX2QG~PGElKIq>{o_`9!J(Tkc+Mu8AI_$<rbx2d;h1^%GBIyNzB|6o4A
z719D%fw7!(zweRS#&EnZ{AQl29=`FvCjUx)+4Su><cs*P3Ic3Om)je3ZX-vr<hiAM
zf3&wvo_~NJ2gTS`l{~n*^XJKLnNO?q3H%|gOI<`iteR%*d8uSmH(?7)W%HI)wGh}*
z8Vmf~Q0Bl1 at C0xUQg4o23+8PCJIEJr1cWQ77raMn2SabB9w+_Noqp5nCCpa6_5;5c
z^VHtqJAG?RmX5Ky43UUameeW4PNL*Op$jc#;=Mp1Ju|j+S;iFeDg2w&(~59};dsg5
z^PSRvlwdDgi2PUi`?#{QW2YB;pIKR~8ylx=gb(pK4o+9q*g4eBoJQW5k2IerP_d%d
zow`3IDhz?BN-nGp1afCqp_BheeuwxI{AY~E53_o>*pA9u(c6IASGF5743C2!V!$>E
zJ-`A#&L7REGoQU;M+1N8=cAgxNGp+Vrp#jDrHcEvBF4e<e>=|Uwh7SbM9R;65}v>T
z<WJuIF!J&I0e<0MT^xn>YUg8vkFPQJObxE%lwLP`@4aH4h!PapF#&c`z|&YkoS2TK
z(>#IbEmU>D=gzBBLhnI=V2l&o$q2mLoj~Bm{<R4#T79Lolg~dya+<?;>2}d`jyn88
zKHo3E`*IP#5<R%?bV@}Z=%f}GV^z7Hc6P)mdoh-QCLAIr&Yy-H3SQ(>s0tBGby82*
zk&mie;~(7{@u&NLcRpiTOuNl<h&YYq!Fh at eUWm=S^tNSt&ltqSva%eeJ%B%C at CE-w
z)s^7CW<F at t;(q4*>G>D8pU97q8Y^{W7=i<Vn|uGmt-j~AIThddfATASo5Y7QA5m;D
z`CY&_*f*YUwxid9eCcK$;%%4Sd$|X;wG*v&_bfjclQ0ke({qH_n~&gt2{`A%n`yFc
zY^)Rc#09aRl!vbx+1;aGNF(5+u<b}gdx4-RP&a{t0_I`2zXN^?n-k~p7yTOg=h7bq
z><jr$^Z>ur&f3Y<+I!@yo%0UbFToS%?`fPmzKz_L1Pa%|Mb8`m<cpA1WnPLSEAo#U
z(QYY={}jJKbu<r*qlh at U$*_;}o3M)-$PX7)kt?LmRC^luSqsp(a{gWO!4V;Nj#8J3
zn60lnvR#2++{Qb6jr>JNO+i)tjbr$~Ou+qJx9ZI2H{Si%%*;W*#RD7#fAE|I_OT5=
zc>Wss+N5c0%c~E^-q1b}UO%gwNSXQN%he6Aef_F;hrA)Rg$X>1o^8yQEgLMT(g6x&
zY_Id7tDGgrmTK?(B at n1m9MTXEM0?)XdGU%4Ap}(*C>B(us|o=}m=9Fnm&N=^((h=m
z`}iKR1AcJTF%?D3A#r55$BOwB(;Q=+sZ?{kQ|(uYYRu%}$>1V at ItvX4=HiB?eM-Q>
zk~T#y+vT)gtP5OMmEVs4*!D<d0qVNqtaINd^26;%Zx8QBzhM{rjNlXaO at 4Z{mjS2N
ze1iEbId2Wnkkpglm)j5IOI?g2+9I|@Tf4s4O+YM&rSJHs^MT3*L6H2V;lDx7m`qh?
z4SOEZ%2yBMhm)V(djh_oJ`kQWj(XCe)LY|E;~L3$|Au?4O+dq?iRr8<>q`m~-G&cS
z7N$TDXCzT6R{V_vp_~_&6~HISF7Yt3g361_3L+iY2?Vg#Siyarrzp@!do%Ox76ICQ
zmAzasi<nOC2JF`<p1YcBTa))V50xI4QvGSUEj`9E_#6t2B7Y2zNY_mtgE>H!0{n3d
zy2$_V|4M!b{*(WYb0`P_v_KFAu!6jN4g~{{@2AEdx;oX^=Jp29XB)ex!6!ah;Qx#P
z{z`kR)dA+yX}{}S9-vpP-D6LOYG<V}hQO$?_Csmp&vg?>7Nk)#Hi2LMqrbSr(|(2w
zhzHVq?*RXT`3>y1$Pc$KjO7*cbqn+9*aPz;xfZ;$$}sxqa5d1^gI9E7upGMdvuxHN
zoncdws$;kPMmFy&9S9-LZC8;L6A0o^MOMT$g51e&I+P=TR8Cr~pi<+q0z{$RSWt=Z
zHWw(JA6w|=P-y4I|I4pe8oh#1xKCxHi5q6QwV4aJ!d0 at fecsk5T7vV}@zV?>Z0E4}
z;N3WNj>jnQ;~~L`lIW5AYPU$?KZ?Js2((Hm02GL!$Ln(+^c79N)Fwf59+nvJDD1XT
z0}1}yNEu!+AE&+6d^+v7;8UJ|0>7u{X|Ruva_GvrlvNn7dg{6fc#G>20%*BJ{slI0
zh9n`!F+amT*iI6jLVj%0=Na;=1pAKp2KWwj9@=u%=E~ih_MKrSX#!vTEo5`#bjpa8
z4umwSQ3FweN0D$wfM4SMC^s=3qJz3wfi%)xE9g5DkA#CB5lZ~8>;QAvz4(T>vWQcH
zUTJ#n7%7UY6;G_ at wx+>+<ori{DrfQ}{t>-#2)Ym|+07jeMBs-<*?;cie>6V`|8Wk5
zO#mxE3k}T6BJlY}KHoMt579rsU-PMQCUbzl;eSbci}@7o?`KnP!Ed*(T2fOQLr%w#
zb+Ms<p6X!&5qF{qhb%x8=w)wxA43=zNK3&>!S49A;yDBM2aq4k|IR{MxccGe!*2&@
zwVNOT at 4+b=s1oiaJd7Ui;VZtA at 7FWeW0%iS6i5?zDpklz>!b at s^SQcE*ln#LOR?v|
zc`^P|NkQx*z`J at +C3RI<0m9={FLN(Mr3Sl(P>pRB7tC^5aR-R at Dh^;ITxBpEW4;8v
z+O6iyuB|vkrKY>YwkAGT=<{QmQ=UT<`2U<oLI`ys(ck#LupF$53P#Q&gny%G>;H{^
zyjH~JFoAgTTC7}xc>W66q`E9O9uKz<2O!}>{qy7HPbd$?^JD1^{8{Za^I6mWrN^mn
zWi7&A?>WjzU1?0oaTo%DAftd2ft+#x{%J7ytb0FCn&%<p&zN`W8iR>Ky%|(z3>9(0
zYk3nnI_XV={TlNbPs^D&uuieHj#c98d5uE{mWk837BT@&+`Ii#=@e3d%ty7N3o&hv
zflKsaWk#SDL at idPW}coJ!=EJ(nGw~VvQaWy)eAZ=>V|NrG+bG;?ZU76B7aU-_6oAT
zleaH^D~QV1Nu?QQx3NH at Ia3eQ%zudUF_r}UOP{Acq7WbMC_W$}(h5tOq}}<Cq`7f6
zlltEx3w9L9MGOySZ<fgSgeALu5q^;nu%`@Eli3FN3;(0fO?5`9UBP^^$!7>YNC6~4
zRq0l?>jyHX85sGJ8GG?4{wYJypo1hrvO%RD(G_s(=l=2^G2Tj==Z(K+ox=`&W(I%2
zJ{^9H;VP=1u(zHc+CJ>!N|%JwFrT-#Pgk$f%z}9{$(Br|uwZ#%ye_F0IoCL7RcB4M
zLuZCLqzUM#ohK<B;IuUjTy;{6I;t&5`awLH(zH5quFguXA>`JG`i24$<n at 5usvTeE
z+O2R*;jGur(2hbrQmkKH0YU at 5T>YT6rX}H-2kafzRY}BNf})SK*Uf3YI2+2m>QkJ<
zdxM833yr39#TwPl4&i@{OA`J`frG)?1e|$^xH<(>78X8#J&hTWAyK!?<V=p&oxhn+
zR=bM!dtZ-p-s*8`qdYQI38 at x@8}=&%1`Y#(QGUV%_NRQ%`=PXV#(Bs8!2E!{NL|5R
zG0vEukst5s62-*k at E31yKVKRGfX_p{LrjLavUbabyxbIKzEhgpY!@oH<k723m<Umb
zjQ9yud?*vcg)nwJ;Svax7q=~_d>kIByp|U(Vx{-OJ2g;4LfZ)MZc??<nHsewB2^H2
zA4RoN*fg#Y!ksC7?8ILwc-Aq7t2djKqsw|?SWVhXc;?obkE2j?f(9~^|3+lbEKHb>
zHW<<V1^?+zWn%LG)_>}V*p&%5e1seqTAVXGYy=1;+Yh&&Q^k_=@V6TH?fkpuGtvH@
z^Hz^jRJ!rr3I6du0Xa(+fRxzSIf;-dCu|NjBGK}ecnFLfln*&_jo&%L{v_o4?*{ng
z^H<0hp9ybo*pHP;Pt}4o at mg4o8Mbm_uop^=vI|*+itIWB+$VrHizw6Z&42pO5{1rx
z0#zQBiQz(?zsKa&3<U1Z>f4cmxY`PUr6Q)0Q}dZ=C|w(ZsZli)ZOs8qI|IbEvNVHx
z_r;p(TGN{i=B3<bl)of+d+FZ!v&u#}*N^WBNW`)RdPC5t(oZHD3;vz|7XJtT(f_dh
zB_(AD_90 at gke_T{DJLH%IgcDjWc|+Z4>2D)JP|yjz0-AG%70RTTbsuU{P8IK4#m^B
zy3^)<j0sH>C>GS*+T|_)2{M_&e?$Aqlny%lFfsj!Fto8c5p>k{piEP8K^M&y<jbpD
zppLo0Ay9lR(!FXl=RQU<wT=jvM$H$cT9CVGVzx%-HCs at t)z0Pc5!D~D-)MT23Eccr
z`rgHbloUTgQ^+tS>h)w6Nr#ja$lm!}84Cu3g)m3;gmsCHb>>B72xDt}ZZYtjleTN-
z-(4pXvGDB!?St4v5+}?rPQC*^kniVw=Lj4Q8JP}8M&Q(S3;w%>@n+o<B7Fe=);}Am
z;Ny1_Fc;#<81us0z?fFwOxtXKMYD(GwN87*e7v`-(SCeL=De2r0l#?~#lG(O(>w#Z
zHt<nDP3dyH$qY#w!^{-m0)xE0HUYC^UiY2n4A>t=enjev1N<T5EQBZOhB_$FLsO$P
z6Yc2Qi*$>xgR4N=X~CtW3wz<>K4^S!7;0M at 9j^hZ3Jo_<&sEw&cA-2JNRLo5j^Mn>
zqp1k6Yk(Rb2{OBrRQmDBo0>wLfj|N&bO at UrZMxc4W-HhP^dJ&_XnBta-a9$ATZTD^
zT5PYRG|6hpy at x+>i`33*D3&8B&UCoIAG}3AE&ZXv59WpZNF*2hukv37kzq&ieiTO*
zb^*sQPLlm%8eARui`$Rv$q_U4-f;e at bZwZA<~bmELi;1<g<-m at Ig^w%_%Srzm3s5y
zGh&Ptm6Y0t(oT4iA&8af-RgaASXsET{46unn-%zDu3pEAOg>*8z?VIkBF+KN-_8md
zz39|!A!DfbwDi#4NmC;2xU}Z#y8CyMr*HrbMJ{#wRKr`Ip%6#M!kVxJuB1<r`_Oza
z77`p(AbyJK04Kt*m4>}e>{PwvTYsMIe$RQ$JNQn1O3ccE0D4wkTY8dr(^KNZ^66$P
z7~#OsB3`p_>f0eA(6OvEL5o#kQM at 7o_wtpHECe%OlaqnjPG8ZtjdG_M%R!H=93g4j
z`B_um!GH8oIQ58-G at C$L0e{!;B;KdrzaB_WEsI)@$FdYVy7Tw;mfqoMwIA9a9X=`e
z^d2Y2rk<EgSxFU at M#p|KG)y3ZR4$*7$r$hRa<|^W{|f5;;d_BH1h+M11-Hl-_yhk{
zD_ql_*f$OEaKhSueXA$n=RrPGwQ299!wrbik4M`-n_svXM#Mka3#qv%_joQ+zqSMW
z1U+Z9$eUtEmbis{_!7j4Up~P9O;@_}vuU4Zng=63m`lU)B at Fst<OLg_T?*&b8Nmny
zQirmdV^7i_BNUgQ9J1a5Gv-}f_B_epVL18l?Si%scH?#kH!T+L>I{1RP8MdM%7T;$
z##@4Q3xpY at sAXW7qSFY8(L1XA7sWMnCv8d{(WINe4ijq&&H9obrOzLP2SKS4CDpZE
z?Cao<(~}qGQ?$Qw-cmc4?aYywkFE at dHq}*CT2k(>!h|(O+6Jsjtt2TPX@&rXB=`+S
zC4#p~C>(a(q2BM0z&<kT+2<$n1OHznkyA-oOL!yOg|v{{f>L-0_(ZE`Co)c+fe*}3
zVk0(t at bB_%ufF&5evPwb at zTs=WIHh9h#6AEcvUv3u@?YCpnaW?q3w{Na7y0cNKKIM
zBmzQp-q+C=$5=CdKV at Pz`tkeO^33mH(%sX3_IF?Q*7v{Xum7R&fBYunX;=Y6iZE4d
zmcLGvA at oR7Ej7typcPx5613z0jHE2mvGh?kAO1AHmuIdLKxiP`r;ENz6qu0NUEfiO
zUz|rB)Iq0>|LUA{#bJ>^w<b_2$(p$(?AJxr{G;Aub<5GzG4Nl^Ck4+^`$vbHa$Yw%
z)Q-+<@SDMJ!m}VB%vT|`>JeR)jS#@o({pn at Vo8Db@IL_Wh^z<hD+&q at e2c@!Ar#wL
zAwNpb;6Dmg;NQJc*5%xhsEtVB{Lg>l6>k4j=nXp@#Y`UeGMZ6AJ7XBxp7!#$y`M=+
zZ+y=OfAigc&6ztde&c(Xu*Aq*&J$$X3?O7c1kFn{|3o;T^XF3Xh{&BE%e@<Y2`*Fw
z*yRmk*++)?T=1k<U|&p`U^?XsfAifO$?@lZ_m8{a|Ik1E%NySF*FX6B_dMwpZ)Ys<
z?VtKHY(rqf6jTb+<M(530zU`YqrT=?n>wA-bTs70OwBBt)azc&eNcB%TzprBj{-l>
zd~v^V=$phAv+io~rE+o00G07i2nhdg{CmR`zS<#xd{A8wWde&BC5PEB0)(`k{ie!H
zF|wm+fIkKQiT00D7u|+S&Rc3{Yw+Wf%D{K~kpO&Flw6Wl?zR-89R;Rh^r*+BricGO
z1o&_ at 3HSnkMZgn~@8CG&-*riE$IvN(!ax3*8XU}rEqIU|P6_#n at BUT5|HE&3 at 9+J2
z4q}>+`Qd;5mtXp$zxejoyo0#FMxL8I`bU|tO1?lZG*HJOOXp!bDqX(kJsxt!6ef1c
z5CQ-#U8C?T`dy(_{4K^b-S_#gWh)$m&KUgo9l!XF at A{QL=Hiz#2k+9CzJ<w1oLL6!
z`F_p=(ovX~Jd58(SxrYdFqP5sxCH*u{Uz2U7vwgBp_#jRbtGsasLeV`PK>NAvey&A
zKcJX2EZu(W^^R0GcM2E&=^~J#xJW=*bawSEOh7~^tRPEo7{a(xt;Nu6YpUl4+qw1l
zi!qLVY3Bp~o%u|(zvaBV&&+wPb{+ at 636GIKq(#+IeMK8Unm~9V6H!wjB`neF!e<$p
z_Hgf8CtsNF4Bz-a=JS&lhSS*LKT>|;eC?ROgrf$ZI8s1GX39YT%-sc$U=MFU!G8PC
zzxjuMV%pf_Ui#L%e*0 at Uk&0t$II1s55&OcV`GZnj=Rc9;8q;9RDf$n#26uuB5et~I
zg+J%8RL)}}pl}!g7dQM9z~6Wz9h?NmJB%pfd8FRu9m0`MaDe6&{wevnD_|*-hB-vT
z>QX%Fdc_w1i{~Fp6U#SBnYevx?B({ewk3pXoEN!d?3CArsT%gUgn(3mW)rX#gt%&3
z5ZVLq1PCQN=2yk at b4Piq!7K0w{>6Og^yswTO+GE>U4j1#^jE;Ai*akuAC<n*hSx>)
z-W8)&$OddBVmxFbFIliDkgC!VG5ITzswlYZU)|NOVXyeR!*)9IEp#XTd3&wkC9Pf*
zNIQ~X>?o7ery$bElFWI4oHJ+s(wDyV$KLWjxW^XryI*1EHe1-(DGzQ*liA3rky#wE
z9bG_}m at Zj?lvPwv{+EQNi=PQ8A}<K7={o^A7n7j)Cju0Jm*R8>b{0H^pItSSrer#X
z8|e89|EeHV2zKE+4WUxAG=#+pDhdqAPR at S?e&<=mc}{ZsQV|RP9u_f$0B6CY5RfKN
zT*yPo4D|tc=)JuCaQJPO!l;AXY;gY3$h|oK4t~`Bp7TbN!y@>M?ac0Og=RO})4)H<
zNtstlS{c><T!=6MywJKI51hLz1N##Gkq9nm;16{UCo^Be+t08kEh0sVnbppTk|?r3
zzAh3ZDg{_fz~a9)<x$c?r6EfNsCZ_`2`K<Asf^M4#-IM3S8q;U+Xa7p at uz?1&!91+
z1{$38U|9isB!?9|kwD;0Ph{K?6rKR}l11G5$>a{>da`N_=f^jn$3PE?WusCMGO20}
zRMu2_j*7FIE=B{AL$FLBte_i0S%Ld!IyDmhTP?M7{v!Nv;Ot;I%J#KYs)jn236NKA
zL%?JLz3DWjB?#()cI61#Gd0wta`-hIo~fia9h=?u!0!%EHTk&IHRZe(d`6uM_SIXv
zQ2><i#`Hy=p?aLu<F`^&ROKJle+)s(5wRE+#E-ZcJLNm2z)EL?fA#<d{%5oo{*S=^
zMC6B$`qYcE?Sc0*z2~fd#lBRTz at t2l0|Jlxg~p)IGd=k6FMI2czwP}D#Vv%Nc=Km}
z_u&`5{@om?!TBBNoCFjxqB}iv6b|Tu(3l!F{Y9GWOj%WCio)=D-bso`D5w at x)qqix
z4LsH(h8ytM^|ak|6wf>!dzicf!8#V$1P1;yDcFF2WV?}kX=&{C+ddBExwz$Y#VPV2
zY^r_~10FE}?Urr$m$b5H0+|a$AaF*EF1oqmPc+!`x3ba^$cJC$PS4uQW9CyE8)^Kr
z+Fv<u4KKZ^!iRc0`*vo}tX>Z89G-vdKI at LOmHvlE3KK{cw6pv8F#a3hdF(sheg*s3
zSy19Y`TRtFu+ux>2}kG8)&%I$>O?4VVYHygg&7 at 8E{qC#{}=o^f)AV2PDFnHhFAXH
zpFj0yewPDhIa5Ppo$mKNSNYQKfXu|8gC{9F2LI};c+ at 9`UaERQl at F*0dzwdfS&XKm
z>^O3}k-)zWyK57uDBxTyGXltu_|F>r(LB~UkKBGCf32~LfsZ^_BqR#ZY8YmsW6Uf)
z6ath5bQ2im0KkkDEQWwBtS|pxeVYd<Q{W5O^V?kG+XugCzuTKfsjKR|v*5Ex{ZMED
z4^76K+E$+5TDnJ15Ae9VRdZK-vOqCXZ^I1yD+Q>A79>#oKN4v9|26DI>^rvy^S&0U
zvqFASog_RVj#(d5bC>0*VFEj~Fl57Q0pbXr2n5h<2nli}v>e=mUNFpov(S5v)O_y;
zPo>qr|8G7_;DA9f#F*0@&VBTcGRhe76O~mt?1hX>d4i%qahr7YZZ4vZ+<Gdu?RIXf
zI~o5&i`#<VoWBTvvHde8Jit<&1IB-tK!t$J0uDt1SH!{!QWpi`+iPH6b?t)vKt3t<
z0)9LH(tOrAZ|-LwO%A()kM{E4QQ+qxsJ&tAYe?GD!M|XJ6jF|hYwBZx1rY**0%Zy;
z35X(olmI&Z_tD-kKN$Why~T)*BHt~J)&HqLuq5nj{^m(y7KIiocpN;OSm3$<DJ>Gs
z7e4)!Y}onwm%r@=zy2=tPe9&%e%=4=hyR&DzCZHj_fp>Fd`Wl|k`6l^*yc(7mxLGN
zT2fjy0?|-J`Ph9F*;Ayxxa>7`f8FRcZB%pcpV+@(j<=)$1N;l^X>PxeUoB)T4cQrl
zN6Rrbt{zf&qRJc{*EC(zUl)yba|kFFR3=bzkOP55p)v$)VY&dkG4GC!278bXzd8th
zn9nxnJtX*`c9!51McxEI`x at fJ0q<)Ne_kCr5aJ2*tJ%vhD$64B6}56 at 6AN;*Te)Hz
zeo8>2p>c)(^6+)jUA at v<QKseEP#qOS7N2kAhiG>DkO5tu+jK!o6q<CQvTI30R0q@%
zN9)do*}4OI!7$Y;Mx!J9fBAR)3Z-Fk1aOXS|GZy&=ks6tPNaK|TE_Epb|<ytdwl0F
z;s0;>^*_!}kqc;!?p?o~M0=zI+9|(8f!0&k at E^U_OQUt{JFxQ?`LE<R^dIV9DFKaI
zWD=fHkyol~!c&E<<H#?nU*ju-e)|j{by>&BVhRCU7UWzQ{D%oFil|S6Dn<mnw^#gM
z^>{}k6CPWb57@(A2re`D-R-dM?ay6Zli-u>ZBz}ES(D31?TqcrcmQu_2Ch_iQI9=z
zYYTp;!nr!IEM)Dcxbzw2n3#u*G@<ER;6FN8atuXCpm-SY-0%<gOBtv6dC{;1 at B{o?
zhkqFP;#ZfyUF*$QtRP}RHHEHY0p69=*m;2m7w}1C2#<+Q28}EmWvu5?FC$Z?WI&q`
z`7%?xIXelm#D&ABO at dM~|BG?%^!!}&elO7ML{HFVi1cllp!*~Zz`41m-zW=UUyKwU
z`~PzO4gB`}3-V*W+2Zya at _kU+MD@2me_=bjKEIGZIvL<6aFv`;P5p=q{C5-ZT=z-@
zCON2E0kOd0pidU<_wfx2=K0xxy-x!X_+w5{T7kiT<uTGBN?j|#ryBcjqR~ctkOll}
z!3X&Z|Dg7UF>%P?=dr^RL=qk*&wuWtDej0KT=FbUKe+R=k*U%2 at R<<;+7U~TPf0+d
z1h9*Lp?xc39)<l$$PfJARv~QaP?9R1HS0}Y(856(Lfasq1VKkOJce!`2s~*515ap#
zBe7*1B2_KmO%VYFNnNA&crN#Rh3*I``Q8`Iyu at W+@Z%IWX(DAij0xnlv!D{*8TsY&
z!-~`4YY%>wy$bm!@O<Z4#ddmA!A9N@@~IrL^`47eW;oSd6PTiaO`t?k>q5g265e*~
z{grR<)i9r##SO>6qQZZHzjEF#`0T2kUGS;1SvNVaw)5YY2rH?<Bw5D|JOT{B3drMF
zXjL%3>IaGJEH^P7S%X9XGsz7dt5cR at 5{vL}{nPa?b%``?Gcdo54=T1(b?{DgV#(Be
z(yN47DEyeqoZ}|FFy}IanC&AgXold_fDbEo+ISHkoMclwyu2^+A?ocXIb993d6d*k
zW}4mnam0w!_EqhQOO>yX{TJCYWFI&GpC#<8)D?9`!9I|Gda5IBZQVbqXSk{4R$H}{
zbHHEtKaB}=MQG at v_TI1;WygD$|5tw7*uSuxiF1Q91pjr!$}k+PNjYz9=~~oI&#!aN
z8&iyw^G>wivvwbpItgcu-T12kIpLcc<qaPGLj-!5Fg*htIz!2l!VRe$iJS1BDRB4y
z%72IcDf~;?z3h1d{{{7aGhjbE{EmE4opBMhZwvB$ZRh`FH~=b646}J}6A at fBTWn#p
zPfz9$dtSzFmu1QUA#%R7mGY4~h%I*t428$r#16W8GyD*5PsnYz48N6ecd3pZX><;!
zs%f9U=J`5b#`}m5n1F_477^-P$bn$Xh-?cL7XZ1h`Z_nkpe(57Svi4x&oW&G)(y|E
z4!06~y4uNmIHUHqp#8yo#0?hOulen`K9&!ribMPKFMcM19tU>Nxb>8u`W<Fi-Qj6J
zOIsIxStP>X0iSsS{-ggV at xLPWfWKk>5bV?E7wpsLcks*qW6{t#UAYB&FCq+En1Vt{
zMj02D&=B1eVG#}xX%q?*y3kZxS)|?Tf93b&uHhw_Z8If`-egM4TCBPnWVxqT@~7^F
z(9M8-I(*zk*Yl%k(>z~31n~PhZUTE;XwikbA&j7q*zP#z-o{d|{9s(@OMP<V!u-L1
zb-0z_<IU`t<Po(qa^9uRyD4>b<}+rw5ckde$#!A3H at ozufd40d`~T&%N;Yvk;)mXV
z#0SfT)AF5x|J`lf!~f6tUt at j;_TAxELzM9^pC8w4%JZlH*KUQe7w>=}tl819g{7%`
zX>eWg1-atz$xc5rOeAp{HCb0?cVGRT1LyuFcJI6j?OVVf!u+D=EKNJ*?N>Y}9LtWw
zr?sF}R}mpc^o*NBCa~c`83;D9zyeWfqyy5a7w!EszdvLp-{%PHHl9~$ubux8d}=@M
zB=wVGP$}a>L9?fv*QKsS?LVUVj5_I!zZ!U>fv``69UL^Sm+1ZdzwswjOA+^=!MPX1
z9l1EwCI2n{(<c61_7;o7U&)vN-dFU*&I~^sz5;h5A3ydnO8L2x{BWbDJFeL11U!z}
z0;!_<A-S9>M4RhElYpO7hR7N+gT^$3RoO)bi|C9hBp<xVA4!~NqfR8SBJ+`<@G3s<
za&43DSG_uo;Yh$AO6Eb>uUZ#kbC!`mItny0Xnuwx1T-SFqyt+kAT>54>W0u{qAk3a
zulU>6uO0l{uLPeX;79N|<$lJcv0vPn$G+?Q$@`*P480D;1M)*-z`OqHLxq3t>3&4w
zLlh-FB+APTsstAJhkj81Vu5r{E<IEY|DSw|f%5|VaP at p!@|=ysUn5`O&xKp#U!A4i
zUoiHRZEa!ZNU^nTF^7#s$S5jI46H8JQD$=ZhHoyA>&7 at 2)a5H;HlQrg>P-Qj_{Cf8
z{b_2cU1NU9YP+{L?BO{ueD6u at 4xbw9%`^-_SB?gn+(<KlZUxSW{c2rk<i)9xc3UW;
znCzl|eRD7Hw<8IX`5f^4vPzg(t8-C1NVU^~&$_W6DaL&cnf9jUDOc8+e-p#WZE^1$
z{loT+NB!t;75IJg&=<ZQNu2Cp!oL<Y at n5qp58>b2A1vnhb<OY>*yHxyC>zK>uy86j
z^D(((2)>#*j191>(6E?8WDPxWFd#EbI9P;rEFq&}$Ke~nd-(JGRqL%N{6$kWp}he<
z_hC(bzAHHc^GR|#?A4sV<~gxhK4EY0uT9`sAm~<5dGTZjwun$l7jroEKhy2Evk6w<
zx71&ppNMbpdxlTn%-gqg4cec~XSJ&<oqtw)k$skGZ*<GEVfGQmKaK0ubVz$A{6FR;
zZy^On7!UkA|Mh&onsQnA&*mRk8QiQ_Y};msLOy#Uisvk_5By)axGbB%#DB7Ph{|$x
z867r<!Iaeg5nEpuzGNt722pzkqiq=fJYR+9^#&_{o8UbVzQTDxz1(}Eov<|kpSwOS
z+Lw9><_q?Yl72)X=7hIT*t==Los)9-o`}e62Y=o7K(Gp_>sYWhgv<1Zuxkz#CJx<%
zfh=x+IR7&MztzsZnRh$7Fs8MX^Jh6+ at H#+#EP4<8UrPJRjUM at 8ivAP+AOGWT3;g5%
zV=p%PC-hkJEj#`_*>8>iWrI&)exmmi>~lB74E~MF8p>+T at vAM>Yjc<aL{cUq#fmjK
zk65fD6AGslBg;;wZP#6|^*!qmc at 9AJR~D!fs=`hczXsq{ACLM-0^W6y!hAd;_spwX
zzGO^Igvd=IE7%wQeN)J<n_&X^R3|II<pTbG4UMSu(j9X+g at Jq&!LR9Uqp=@_oUka(
zXF6hLoUaY7g{v!%Q%k^7^Xdgq1}5B0{Qrgz{~>k=PWZp{$KC?}5&vg9b`JU;_^1D$
zRR(6+{IH1sFtj1v8~jJSeQg55x#9T_t<;kLs?j3VRQt&q at iz|q<!S81h{2jxb}{Ia
zDEE5L@&e#tFRQP#Z}!jXwfLBE&a0u`(LNfV40vf`kr}1C0Pqd-a`hY7FW$ap-cGQe
z{#lQ-ZkiQr+{=&}x)u0-YYY7=TPxrzpZzg2@^SukHqDUwb!f#Q+SBV?5`5I;pvHc8
zxa|#abGJj}dULnWQuE~q4~m|7giYu_Ph}%EJH#jaKm0{+;DlW1Ki7X))PJM@&9i6{
z|2yI*J$|A$D~7Z0?IV2?@>Munz|TsxHCpkXYl=-diB2gA{A?{Eje=lNZ5Yv#RQ-6q
z0htvw>ZZ_p<fguPLb!kJy75C$4?dG<-vj(=C*TJ2R`1;~ELCv#nqWWuv%uePriZ)@
z2X;GKTR377%@EEK{A_8d4u=~@k+-I|Ma~Oa at DhSSIDeSG7O^tlI$|b|7 at Lz{4+#wM
zM+0-vKhJ#(`?#5Y^VL86rV0P_L(=X-dyMM8Y)z_JG}xE+|L%#Oh(9S{ZZW^|_J+M0
z_Ga)O#lL^K?5i`Ytx<Hlz(7W@@Xe+ZPmSWEVd<os>gcGO{>#G{7u7f3Sh2x;GW8s4
zC!jOg(r|*|l&h!8zmNH?AxyBJ{@KA__st3p@}i2rySA_w2v%pao}Tj`2fu0mm at kJv
z(U$fiKW_3rj(_iy^$||;|FmhbTb9WN%r0OSO~?PA{>?v74rW6)-9hUA0spi3S;?=(
z9|)=jR+Nm>ZtUdi)f+<db?y1RE at M&F&L4J~Ap?gw#G<${bBLg`vI}e^M5hcH;WU=O
zfsOcrhg1+bd?QqwvD6Q8Gfb~Qt~W5=Prk{FaWZyM8hQAI&wI<2DE$!aVfFOMpBD2U
z6)RZ#oD&RTvVw+xYE?UKKk$EY!n+H8kLwTG&vQ%Xznw3Q@^iNM|NKYM<U_aHCC~bW
zKls4kmkIojH@%m69kjsF$4kXO#s91KBTm5oUh=zI^ujzhE7*r{ed|5&x3$>fKk>t(
zsPj$yYsVjwX-w9Ezb!!8Ms_Ww2b4qi<Hwg@$S)t4h at 3CKB}2WVJv_X08|SbEc=n0J
z#*nke{J*6Y9KgT8Z&yFPPMm*J<dW3cz^_)inA?dHAP5%iS8qSgAI&rT7@=JLKW5gE
ze9idZ75}v#MB=A9;luya`TTim{-oFU)=z!~m at oVzeo_=;&lF+8%|9w`miTid`CVYJ
z#XP_$Q~-Vl=!(U4bI|{*zbG#00Q1J`<u`AvqfD<LdUiMUdnSY@$m1>LI~@C78`^8f
zt2Rb`gid}7`0ZCF{xkivp7wMz9=@}%l?$3Og7W-_-Ts{L?t<U at S)#Es!Ed#*pVC#s
zMLkw7IBnryvWCPxsoY4==+dL%f5rb}Z*0SVO!NM{uciB)KA+G3umAH&Kk at dz_<K$5
z`|02PGv=5P6!>3i{?Ro1Dfun(@5xs_-%6*vZT$QS^F;s#_;*bpmSFYdhtHAcj0-P1
zZLHQm3wydzf5?uR>`Wxsn9||zS^bH=vwOTTGnphaQIjgPp8=EKg8A&eGGTuD=Y)L!
zv*BM$Fy+N#AxadT-M){Z-{t(r!9T{8Yq*5R^|Px*Ybwmh`8)Hiv5MPi)q#KX>J9!S
zevY=c8UK<%AIr`c_B638{0DyX-7kOp`yca?-(m(J!$a83k;!k7e|~v(KKPWwRppm=
z-tgZXa`KkM)f)UP%Cr!N at PDlslo5NVHF<Bly_&BS4%avP_R;~oy<h)^{LRxJjW?6I
zs<*p_WA{ear6yItJ3APk-A~mY-MyKf`7Zb?^W|n2`PI(=;EjA<x8QeIXSFofK^5is
zx8Tpois71!|KPEb{mp+O|CRm|#V=7HHHJlpaP$APY^}wA9pMN6(PVp_-!~+nr?8dv
zw*T#?AMxThe(jIEnJoZJWTh{ZP27Y0H}XT3hd;MR{^`vd9=^ao`_c{gy*hn4jQ at K0
ze)17*YXcqpL4I}jDoh@}k@>Vs06uhW{{(-!gS_7PF3fhncy at R`{ZH-w(f-AH&vi4o
z{d)KZkiSZG3;7-Vv~+Uyp at p7aV(_Ds4)D`Ez0e-iPSgH!{@|zle~3RRey%ByX1k3!
z53c{J_&d(8^qk}%{}cX00(umCSK0Q+p6)OF=2x=6n{qH){Ic`2j<{v`o0QL9`SRGe
z-1ee({)xu_jQJ?ppML=PUYGSktitXV|K2w}w$$~Vq|@e$r7wMSq02KLxN`Ta`xURV
zDnl$KiF%*AHyvXq-k%=Nr~J+n|03V8ecPu-KA6`v6}Aq6zbahN9z1{S;gzyfhtq}5
zFYvp)Cx+H4=MCCVv`z9e at GtS_cnF9TAo!1(f9U-2;jOjTFY)jCms4P;0RNRDFPmPk
zdH)w+0&D<hvJFK6_OTA~!<mLBwLRlMp>3adlNFclY<Y(a^!2KBnaEEAKb&)!8*pk9
z*xh{8`_-3z-Rq44sCjP##)5yoSa0>vP5)e{zdt3&>)THMn|I%5`*bUBbJ*c)r*H><
zNB-pb3;f%mZIkC8;P+Tv1#~mpUHpd$xcZ~|mqLK*HAR8oKjgn8zXJdL(QPdFXqZ)<
zW+nY6k8l+QVr;m&Krdw%0M#xE0Zh51BaX3AQhsU*eJMXle)<vT7l?K9&V~QaC+nQ@
zP#N;9>`iOe7pUi4YtD)D(U5@}ov~{I>_y$%g0~F>+MP7^YqTu}r!#@mSOFhu`k4Qg
z|Ll*n-=8h)p(`tGzk`2E_ at O-`+dYlv&z#rJe~bSkA)r)H at gMa!0{&~<n}iqSr^u=K
zdkmc1Gl5V+odQ6CXoP0IE8ypz$q%&2Ey~Xh`C;Z;Z~FoN=SsOv{I_&+2ERR62SY7T
ztj^+&n)7$?HU9Ta06OIH0w<b4Y|YDrt`ptu{qaC>N-OZE>!0_deqRr8_vSR1=TQ$m
zvv`giel>7bs at sv@-M%-o;Q6<E7?04NnAogQiUEE(|Bip_Kc>@>1(*dX1hg#J{vYRm
zwR<oX4X2Ik)?|-3>r>-6IOUT`RyBWY4goqg%L8LQ$A+E<x<i%uGWMq{KZn{Lc+b3l
zteB1YqHXQk2R|mzF;J_vb^hx`;ZN+Cz-}O at D8Nna#lB(FF)Fxlvqk>&l at kr&jBKGk
zZ{75#vAwTvJIzf)yZCm0r1hcdvyaES^me+F*^T|Nf#smv at 8GWujCAsw@K0TB{91k+
zn^}mtgY&D-#e#Z#obg}$C#1Xtl50H;|I{BP1O)}63P7tN;{VmY49)}2nLNy}4yK&Z
z*g$QIf3nY4_}6FxPRNbJ(8~lI0#HHE)kr830XpJ{2x9(mi0!KEwM%}Y?ZM<H at DFnv
z%Hcuq at 8Ule?uhfp9qDnM-ULP<D9^Ttcm;rdQ}8%)GZ3}P2-c9x|8*LyeuUq%_jgYK
zJfF8PUt3*_`Qhzr1jNb6|I{(JYD at T8;?g-O?;8AYPJ`b?-WZuB=kM8xmfAvyOL04}
zBr9kpuoME^|NO;bK3DrPI1fyo0d5qtu5#DsFujD777Y_TgMY{j{yaw+I1wfbkPzzW
zH;f1TS`9AaH1p5>8W{_d4HoA=DL>1=AF&<PdItIF^7}FHcl;Lyx~DQMW2JgHPW(3$
z_(Yt4U2V=%U*-9}WB$<n5fiBYHEh9<JJ}+(aIMeYZ?@mI_m#vs at 1fpLznMN)Vcr@}
z$T-etYcp4$e?_~_$>2ZG*su_O-j9154uikXkroB&QJ at o{hJR6@^#5vHyz-q<d%!k1
z?5AJ+Ohz2j%#VgcOD9%<j3Y9`x#aY)<;=-3`pF?6Y5}kvq<)Z(97?jFZ{D0>uH7P%
z{e9q3D|>bFQ#Gjt{8oJd{B%{6_tM7_A9VgBDCYplbrh&{AT1 at 9n1DXRzA(^lCY<d4
zv*YT-`?XP=ooOuCuHSb2?@n*Kf539`Ct=<?*r||D!dq;=Ml at F^KP$`I<}Jlv-0}Rl
zDVUGvCB|G(`F~#_O{W#Ca)DL|3;a_BW60-~E at 7kqxh-y=0v1PB(YL^PC3kq*&#<MD
zkyiMBxINz>@O#cSlWNomkt|4i!IpBEhE<CBXxfjN|GoMBv+R%V1pC4a*_70jACVv9
z|KqPFy|-T{fFBd^LVK0Hnz4x8`QxdGm6Hj`i3Q*fy~+?iinieQb{viWdjEIAd3#Wc
zvG=D@#HP3nRi|L}eblFinW$WK7H)q__yhb}4*#v#z;4>3I#+?;_{Wvm1iB$qAXq{`
z!@o~54e($6UTB!i>cr>Y^Z)r}_Hc2;Cr5BHx`9FWoKDC at R&wDWGaRolhMw(K1h9h8
zh_DWIJCA9%FsrfKed_sHmAz!qd^+;?4*R;tB334_>-<jwf8jp^cVFDP at 2kIee_C6x
z3*E)rDZhA1D>&tE+l4xBa{7$*92(%~0VZP<Ps+cHVml at B%k5XTYmw9Ctxot2ekzFt
zek2HkzvI75zyZAsq0)iCfAN2J0U`b{+aJ$=^)H9mb1oa>xWC~ifBS9k{~KD at -uE{j
z{+`#qix9vlW4d~n-uCaV7v1}s4bGLPT`Y-!l43Q5S{)MjSECM_^QXjIJrCp{my4da
zQTCEuBfJ;jw>LZZFVef~{JpYX(2yf=Tt!xonLuG+!p7b|&mcOiNyQ1N^ckW05VqHU
zaVNmlC+%qGS=qz$TC;bI`BCr4$!yG?1<9ub|HSs2$jMqu&0`TU`5^rA{1f=8b2a=s
zWh*H!Z^8<CIxH<zg|OlL&3x{_hA)Bt#$U}WVs@$g at Ee!DWlZ4Nzwn0)?q;N0Zru%M
zei<5pGzDeM|1=9)kM%Q03g%Oz{!euNk@<>&Bes0b>F|H1&cA7K3;z8 at zjhcLzuz-~
z9bB0*osu=JQM&MuGyQt}(cL$*W9<Fo7uvUgx84ZsNBf8CfUML$^6~Ip-gjYZ>-K9h
zxkb(*{D;9W=U at 1@Oi`*u+>{9z|E&usns^aE8~8u-UU+^Ko{OLP^V3mQ at A!+qf6({6
zj%H4je7;A{908w3AZ>)l1V#wZJn)!riNoh|YAnyMIscmTkPQ!`;U}H{7pm?+8-|_#
zlKDb at ZX{`I>-Os_i~rx?f0gzIY!U_rGi&W7zHamX9RS<=<5sZ!zo)i~eSCi8KfZlS
z_1ULSw~O|0woYKHs9jE8+`B3uH;PGv;r6BQR8`ARFYtHd at 20w)^AzFdJ=+FtasIn5
z#2EkeY7?l}G6A2g7b+0Bq&&a-p9}mKL&(u{=uf-jGhX#;@BGW!vErL&{@fqj?9v}Y
z0wwKL8fzp2W(@)wgRtf)uReM6feHRBc=@Q`yM^r2n19rKcQRi&e~zTDYs!B+|2O`-
z>@zWc!>Iv4DVsw%6sTVlHctHKA(;K|{rc|Pj*pqS>M;MA&-Ale%E^x*w2Ao!Kh4<O
zB|IJc4f!eZ at FOMfS8dCjrxbpc%-Jr>)WMJ4RUvY!&X0d)T(BZU3a~W)i}n=fzrr2Z
z>W&nHV#CCq3!e0fm%jCV6ZkpM?e<Uo8HRSE`Qz19y7J6PdO>p*$_N2v0v3hfNb>ys
zkS`x{F}gjI`FH1k-l+LT=1ZH|0)AUTGl65ye*(Ytx?S+I+}-=F?>{2D*hL^;JPW%x
z^s9Eiz6E(%y6wF=_I>vr6{TV|Tg*#u;b^T1`IFl(%-78!wqI`FoX3QJ5By8eDg67U
zMIxET;6>s;tDP?c{8oD|LU^aQ4VR9j$x)t9``O=}z|YX;i=X*(oK8#MGJ+2dU((Ih
zGzL~yP_wWi3jpof6cd+_PioB9#gy71zgM;MNAn+ZP7XSMlb>?_C*prN|6|N20F!_(
z7!)devo?Vv*1`W;8A$ze7nUE%7wb14e{a(V at jr($W2moYEEj=45%5K`gH#Cl6Zi|{
zyEh&A8 at HdSE^a?K&ywx(VR`c{2H_7E(p8w}i at y97;~xuk7f^Zr!Fj+NI=_ZoT}<OW
zDCMk*&${>Xm`w8KKmB0G|BK)F9$NRcWAWyfLguwmmtK91<J0ulF$?i4Mi!8VWDVpu
z at Qd~*^U*#p4LOM+SJwO&=5Oa84R4q*pA@!v$p0_m=Sj?Gq5Tv1fk!;vg#hg0=g=3A
zL-C{de-FKZ`uc=${}b5st3&+=+5<f0Kdq|^NI at jD@nnnq<8Hr at -w02(apLxSs*Brq
z8$a=JNIhw-?F~CBtzP}nf}zPeEDCk-_X%%f!qpWo28wuQ@>%vIa&RX{cK-2S=B#E0
zH6wl^fwG64Rv!{x&@SZD3);tF<v6%F0!fK*8+Xq??fDn*bG%nDpQYgIeZEZah$9t7
zw{yy#`i$2<jQ^_quJNDFztq2p_8XQ)j(yAZ!wPmGQ~>+mb+h}f`WHLG>;3 at L7xGYk
z(&S;vABTie;t3RDMm}J6o_hrRyU1 at MkKBI9`-{lQVgY{EhzCAar)S&=`~Cs>)b&qC
z2R=@Lzs_x6Pj$Z1B?AA|??uIyW;O<r-{vVl_1GVK%ZuLdo*#S5`=0Tt-$&}d-a}u=
z3`3gMKsDZ88LQ{@P1_-r1!%;*grI(rCTL{+ at ciuX1^n)I$m5No;9Hu1%06r7&qFxq
z|Be4$@P{X{W+>-hw0{r$JUu<?|G!;WW#M^yQ!CzYMv7{XtayTPKG42$@4*vR%DKx%
zQ9 at PMF+Ts0+dl;U3HgKY?6`fWx;U#6Id{R|KjwHEJRe^Qb9}=D{^<b6(bX1H-J+%c
zo)8t(ek4uyr*JgqouB<`D!g}m`YYM4#ikYPg6b6j7H$~?p>Yt5qg+h{DhiY)5Q?Z0
zWFOXmX_)o|YYGdB-=nm5jQ7vuy_T&mXY2gk>QiZN37!T1QWET2EMoh?jz_v83 at 3fD
zp8xjdjDFAj&3&!6_iK>PE<K|EqK$0HjJ3f%53eS`)-AA){O<O*;E#wvTu3>{OsRMB
z1mT(8e&;*|{;9+;)<TbZ<Ee~)r2sIW at ciif92h5^C)|F{vmKjxV>1_|o%S{=x!@nP
zGn1LxE`4qkzc{iJyC5%++ZR_K(^hQ)%S4ox1>@(50?U<04Jui7${^Ywvu$a0<J?BN
ztd;ggw-1$Q6 at 1<5Z`mi9|5-Z!!F+aTziCW7KtDA5jU|9?@m60MOEAN=zFyyX);Ak$
zXSla#Gim9s-K%$~SFXB?_TC=Qdjq09K(L>DJ}?IMf&7K at bnpl4rE2aX-<>?QW09y$
z$nL4G19W+(TAg~Z_Vb4QmWWm_guy?KF=Bf={hY{~>|~VBuQ5K6w{l|jwH|<br#~4#
zPd_I!*?6V43-W{Q-%IWq<d1XJ+fc-5B1)VAgsT at 30`@+&#3%9$@N0()r;rTIXO;H0
zR%aD_qv1j8&ZoX^9 at w`~pb$S-vgf4v4Des3Xn*CrhrrL at I%~up`oY6UE=bqSzNS$)
zpFlovo*ZU^`j*Uq_M?Dzdoavoh5U)|Y{5S;?`qc$@=xLRi}Q%^H_u<JX7Tm~dw*y9
zez~LJ`6=?^NGWe2 at 6$_(+t(hJ*ua?6`{U at MIK2Xuk`^8M++g@>QD!p>{hZf+phO<v
zdc`|wD!%pt`)WIa`$PzQyM$1iK%DsF(tr-=0sL`-LxJDc#4kjBLi6EGW~*mza?frz
z%RUNo*IDC#DF2E7iTNL9J}F at G49m9|w}Ddqxif+5 at o!!UafRU{H(Pl7E2ECH;QTPu
z74(hs<7f{LKlQ^4`4jlfTgvSp2ESmx_4$X8f57c$wmVj5rZ+}@0Dfsx8Tem;|E6qm
z)O0eSWw#$muCz)ZYUj+MUD>gKRvAreacH;{OI5Y*8B~8Llb}@FA*Z>BF%(WI at E8hb
z6Bvj4<f%P;aSQ&W{cGl<eJ-?T(}8T~Z{`!upU=B^e#HOo{7()3$+zf<t--&_6ORD(
zjQ-alRQIp%B76(-=F(SLY5~5btLk!T9NrtCR)CM4fa<4(kZh5^b^8PS;M}f0c}~He
zZz!JMk#E9N at +M*0oor5ZC(g44zhTcSg^#M6gf6Oof`9(k at cbZ$Pin#s=b?>LZvQSh
zv;pM%thz2vMp-KLNvryJY4MYoJuBqLz+t_%9g)ji&_RJnCBS)@fE>QrKL5n%7 at 1<u
z at 7y_exBz|*oN}LMF&|BMSTmo~JAa;PJ=l7-<MEyf{2h}YmHP&4y!Xn11MgjguZg;G
zK6~{}V=7lYg!bC;Gyv~C6oUPP{6lOXVEeL at uh;teF7m5&IsBC(^&z)kgx^p%z30{c
z><- at wM!ot6q5VO71b(vJTWUHh&|>QrZXf4Ned_98E^iOiM_E=I&$A}$R<!Cvt|J$X
z&l<Du9btrk7>csYMfXs+2mz{vwTpkMOi<vDgO!!@dV3?_59XsCjv8z(%SCz6iUXCA
z_VN(q{4E!>vhT^vXP5RLpgr>ZTflG7YYb1Xg7NNUBp-Sm!b>6CH!R|Ol~?yoId*Qm
zr^&B<XH(ng%7ZoF^?J*Ak{$UI;VHM at IZwy=_I~U04<LWn?Js`GXz#CE<a<qrPZOIp
z_<fSa&64n6;r2>VVf$CTn+Q2R--D{ECzH-hH{@h1np$yEkYBbR2J(?*e1TO|nj8w@
z6yRc=IYkQKgc_W40r<M~mAi)283`|`x52NRx6yty9|Zpu^NDT;r at cHMMEiyOnEAL|
zavJ8d$$9r_kHNnSV}J1wj1PVN0KDbNCyHKxpKyN2u}^5<xc3S0!aRNh2f}6KUnO{c
zA%E-kPXm6#o>xq!*v{#Z9|UGe$2#n}pO7E0Uy3+^{{%nh_6GRDkFwnhMff2n&~m%|
zbMC7q9L*<;4T&+LA^Y&Jd4D&s$!TlktoPm;oFPb(mew_GiqFx|Q3&u{(0*EUAzziU
zIJ*iOwgP_>JVpC+wpB8p#rd1^U3-K7so>R_&qnRngYx6;O7ci})9n}X58>HgKaA?`
z#%Bj!2%mUM0X{ZeE{uK8u_tx!XfHmq_V56n3$Kz+!^ki2o9Y+%jo$9|4eYI-_g4z`
zhmg-7+7g~oh0GG<<di!24<moUzilVfPL_|S4SoPWE;<N5U{;>%5pAFSAR#}uqQ{6T
zZB!5ckMsA`HCMIl`O`Dw_G`dwn~S0pV029^DS$$N{5(b%uf7kRv%numv!&o;@Uy+E
z)BcJ1jI>wI-;Xq&YF124CWB8Zs%~k&DPkv<CxZVJ2tVk$JHiivJpB1;FY1Kz=Gc#*
zUG9As at W#BAF`kt#gMXLsl-u8eA8dF0cgz>;w?2P^{2js*&^^d`+}ekA at NLcKFI(Z<
zyUVhUb9)o~A at vCScM{=8fr0Zt_5agXqGW0U;f=pKMpUu)Jf at Vy>;()YPMW@(Ty#HX
zU23EcT<}ncF&)knXu*FRjg*D3FafNfE>c|riZ~CR{}A|1`!&^ellDds^mE9i?D#*-
zd{(8da3*s8Yw)Mc-Z{?z|1sBXkeAawbmJZLou&J}bM+IUK79L(_BMdMPh2M(vL>e2
zE%GbREw|snzl;9~^Aqg(ai~tQokPe!<n}8fm*+3HZ^w1*F<Zk$oKecr;%>oTo?qbq
zc!B>uq__0*{QJ-S+RNYWsaL-9v;X6TPocc!5mnl>a;*m>^PvM7#HtBrX+n?`uNi}$
zv4#n_Su_p^$P}Q at 1&!13fVu$hD^BVJ`N4TqHB*N}qgC45RXJ}LJWc!Egfo~AQ7;#C
z(mbo$)z$uR8nPNIV}8!$ye=T3b|MtGgt`ZQk at G{S?q5HI at Lhkt3-yV{96@^re4Bd5
z1C*R%9$4V-$On^y?WeqXcHqZ4>H_x1kslFx3CGh`i*iQ=`|xrQRIS%=`{p_F`Ci$!
zzN{?YOa^D#LzEQlxiDx?dHw+Z^}mW5?p>b!>YsS~`@ihDzs!CXs#>rhF at H~;V&3Le
zBj?Qyv~@yS1J+~(5e1Y8#2&Gc0_W*SdBkU&=1Dp%*bn5V+joZpzrWKSIBL&%*R2lL
zeE6_>6xU2Xc>?q4v_BqZ(*837KOTNydnPK~pKm>ReI-N~)@30uhoPRny_1=Sc60dj
zLRtk~8V&8(w~Ku6Z^BdH4==qcY)ziu*q*$70p2%;{SoAwj;@9MowEB8x8K2UZ@&dU
z&W+y?#~9(Mr1K+nI^n%o+}oW0S`T2}4wI?=@<adR27daPnLP;eS%KezPY1u<vXIXz
z)V0|i->U!~4edk#Z|{qLa=BSTgn#I$yj5tG)-nD>=DeNulareE;}C)Y?l}KqK8I-k
z>A^oZkKFzs at Jd1p%!h6o$dBQCEkf=vnF;Md;3vQf^R)9h*!i>bYVe!t7vU-JZ{2?P
z{JZ#{0Kb8~*p7d#?Tf#K1jn^SKIkpCUu&^Net3R~dxd;+p5gZOsoN4K^MS|SP$CJ-
zq#_qOzopK*py5d5zvlhuWWd|MY;0Y;<I`Wo8C&7`W8_rqSd`~C?SYvn;T^+9BpvwB
zz?zXb;XgKuIR)?mc`|_*kZ#y>pU4l+<MNqw{!!=J2Y(5kxa-Dz_MLxcKK2#$z=QcL
zp5L^8LwlCOQ|LJbe#p-P{x!%?#(Co~Kz$$WrvkiO1fkymNaP=K`vv~V?FZrCp*{BG
zyJ)X3mbdQ?pI_LJpRpKAET50N?#Q1gXeT_rXO%nnBhZ`k<Oi=NUjJGj;Apk;COlrX
zbgIIuDOCvX*7=b-;rUD^WJJ}aFMZ2r-TS*WX8gJj)|3X+PI at w9>k8nPjH9m0U^OEA
zi1499;+B^yLUU3e4~Q7}AEyJTm^EG4MY{d?69T^y>WJW5&tFY$o%Rpr0}PbV+0WS3
zob=3h!7tiBDqQ>EAM_p>dAa(dnC=7N#(6 at 0qA?DjeBN<k_=|7P+$vd3Fw91GW9bEh
zUAJFs{|NX4|4Dl$=U?#N1-$<+KT_%KapafsW)}oSIT86=&u{Pt;aNU)SynVfv#g^1
zpQG|9zNkz6YHz^#-%FFpKl?#6Z8EFyQ!ac8lV;`iHFAVq=W)6g-3V8?t9iRX3zGqs
zqB^0&r~<|1pl{YX;eQ;EY6?^)Ai(>I206Z-Zl4MoI%@Q`;nRc!U}LEtyy1HT{3N9G
z;i%ck<3|8Lp)legPh%Bl3;gY|cb=Kx=Lt8 at e_HSd!(VLQfM4VM7}VFkoez65;LGX7
zhs|`);5YJl<s<tt=PB?z)h*6r=L}YTb=rRj|78eua|rfZw&SMd;q&_vz-N|Kh=tI~
z`a0tI`Bl>gH~#JXt@#A=Aupr1t(-r}W|q3{CE17ZQ!4T at V-1Dh^A^<Jpl+P2-YtTK
zT0o`GqxOHwZ36iLb-}(;yf6W|LF1pLY!VPb2mCt=7Sy@=!R4c0$eiaO_(zk^QtATy
z1jIr61%?3s5^8tBU(5#@StN58{Jo4 at gnzjG{Os(HZh)7}zU$RDP~S)UNLrQhSVp@*
zvUchld*IK|e<JwH^LP9g__>+zf5Zd=^DA%9j~CV1Lq2a(s}soFq51~-g#5xkYqX_3
zCVTx;8~pKCcw&?DSK1q0&6>;~_{aZ$<~`w!lKs`y$*wD4uSpAu{7<<JfLA+&n)C0a
zDDbHlDfr^>Ep&9<FLS`K3rB~Q1ms2tn}C}_;}wgLUASM!ZeK-&U{)1hqQeKiou0pS
zc<Qkf_`CDB-!u5zV_C6HgWvc+4*pK~4gR&&>+^1}!C at 4_;@a`;E3`Mj^P%E%DTDjh
z13!p8j{kx4g%p|L at LE4;*z*ePjr>zS{O<G1+fO&;{43!dv}fTw73^xE at oy9Jk5aGj
z&wOT`OaWh2BJ7+LZ~PxG6v=nXeQdMkD*}I<UJ+gW_mbcb^AY%6tmGA!*u0{`!504`
z1;Do}3OEo%U#MVj<VUKj+VLnN04F)sU{=}QX4(_rx8RdLp(z0QOm?6Da6Up5(BgU4
z^Dpo_=QZaq&%XhGx&2~&h46l}kM=`=w}100|Eq$(JO2s)BLqx=!2i^1Vcs`J{($`|
z;j&vUpKn6qCm#==wNr($IegZ%uGPL3p3HFm3WDL~M0 at -v3j7u5`3C+Fi_5Y?e(3Wd
z^G*DVGm{Gt3+Q&E`~;=B(j`hfFLyy}HU{SxU?%heF|h|Z^fKq%k7_UBLp<NQAFp_0
zT?LQzj5v@$y20<k%CI|C0l@$Ea;IF at j??W6{1AS?kFIX1^VHzqVLl*#0)JnEGXnqG
z?du(4 at 9Li2<Lz_0s?b at KCRg8)y}-Z0{}I}g)VGiT9t?)T`FF~@6Zp6IpAf$Nr!oK0
zLw;d?x>?Bo0Ds285#@#d4*tMD&jbUJi`(FzHNvbw?0+~P?NNPh*SI&YqV&OwP$09P
zf%Nn8w?pmW8_v1!^DlGGeJRn(^9zarc*u{tc~cc}2-w5FDNvaJR<OFFQ;z>TyZy*^
zPX>PzeA4st5LkUb7M>4Jqg+sN{<8po=RD5z9q9u6;ag<6c}2-7pxyzm&$z7V2<r-A
zN5H>jKDK3Eo%e0Q?<Wu at fGb!oduhLR44={j`j6DFnnX4`WIymD4rloM1iUvB_16dl
zdRFn2^7(9|yjQtmJ^vh=f;;}*=P7fzuIj&+y(NH$?c>!Mtq_#v0*-5e+pC#b3MUNz
zR%!>0(wOsKkz0_ at kMk<<SJOKr!4?sWNW{SWhXhdmKipk}fHZ*syutyP7wjAIVaT2H
z;Q1l^1Q*)r`Ey&^)4(q<*c;T-h_&e8?`lH^U!HL9a5zMJ0{kn^Gu(d3J{|4D!|S7I
zr<hlh3SBW<gP+&Q`J49eiu;P|Y at GjD;J>h4-oC!lZw|pefT!nwO61owH|G1+(Xs+R
zu6RU1cTVwaXzi1(3Toy5N4J}PoOIy&IB at 7Uz=rDcDiP*#x5fl8gipHJW1;$LIb$jL
zHi!!U_wu(BhQXm^a75IsphZ7Sd_ at +432gm;NkC-+g8J%8%uqon<TuXaY}eq2#YyUn
zBCi}~Jdl|R at -+NFrsW9c$u|p8YtMfi{K|2h<~Xil+V=dz=O_53{6w=;*s|WLueOw!
zfZqIs{{Vk}96r&O`JA2eZ>U(De^-8XLqNxQzc0*lGop#W#^ncYC~lEIJ#CO|o(cHZ
zus5`%X7}f|i~lY2 at jI#aQ#R=QH&P5e*myIn!Y7 at Zo4h{dLJRnid~AVO0Qk8V6b0re
zXyWGqys-z)0fULI-haGRz4HV3w*;CYKqj!cf-Q99XR6x?zxQ+Tw}#Gt5d3`b0>ANJ
zv?uVt1OB4 at Rpe?3?*e`k{*L?zZ~}kRJaZ8VQqwx}tS0||$oU_^KOe!@X~<8*|9sw4
z2Xozbv~yoyubT<>9r?k*vH(%f`8e_mIrg9H*Tn=j_%C<2BDx*_eq&=C7Awwg!{`$K
zyen#96oP}guqYgfj`K(1VGj$!4!Ny}4J&914VT3|U%?_^HKfc6=*@l;|DFGs6$dsT
zGrG2k;Sd9p?eNVZ@|f)dJaL}NcFzR-I4D^`If03S0<drh)*SMKoGJKS-WuR9o&R42
z|7ab)&Kmz!_8J)8fp_7&-_-Y44ZXwOPk8HL2J&~FbNI}9N(SNl8nz%4hyZaY-0$GO
z-eg;SPz3Xr2~Z(&ZL~N5T<CiGzfRm(M7~)*wp<gwF)YPCUosA}fG&&(9^Opv(8$^4
z|Mrl*24u{aLT=Al$S--{$e##*<U!jcC^`S|{Ep5E{#u&)$Ogahf7YJg;Ey+7$hVo-
z%4+$1#UkoKowffzBmDb00D$iQ!#x&nnQsmNKA&WFt^T$AiH{KZy?flzcDzbX@&9!U
zjpruDIEwrDb1R=){PTuaql`aGz)m^=b;k<KAIzLFQrqcph6)gI at wbHPn1Th@mBR=2
z*}4<f5e(LzQ~mI~;Vu3v1PmuBF4U-kX|t5WAQc21=+>^==MT+KU|0SfUT$8U0{@!!
z&z|2DuA-PZf6<=K_V<u43U|wR6eE=H;y*u&QvmxJo_}2R{GF!hHP(oP{bc{YtN(0F
z0J=Vdzj^rjUki#1e#4&E1IX`^f_%OaRqmynWQRS^*;mNsj`jJKjR|=5MSA0zBn2w1
zV|>gs*d+=`&kS`%*(>maS~wgm*2FLL<r+{pd~g^HKVYxPZ|ct>DPV!>qbX->pKC||
z4E$RaH`G_Jp_~Z$z<xr0x&1xPBlABBej<C~f6$)3I`#ff1Aa+8VVkQ at VenT73u<TZ
z at 8f^O at g)Qp{Nd9w)EfV#f7YVdM-~44!B0#9dI%WU$XvBMbKe(Qw*PAb`<1X0JikBN
z9ppy at G(DDww37 at E0}eB{vb+$lvVsWxk~<6oKRr9ZjpDHz0$LPMJ*!&i(c4Ks^&b4o
z>raIDP6tj=AV>}cS++xZN=fWV8KGe^?LnLKqYeEBNO$na$=78>#W%>|H=nOJ#+%s$
zJ{dlNsoQ>U`G_S>-?asQIsaz79|`zZglD8MRpG7JZ6dTA0uD()N$nhkZ31V6{~iJ+
z6EKpu2;Y9CFwc#>J+D)Gdm7|7-&oLEFz<EWeRbZ~2(X@^SrFmUNN7HAYXVO8BZR4q
zfgT1=AjFN+u_h9dg8YzT+`5cgySdd)9oi1&=?kS6aFs6|G>LUF_<0*6w9Ten_~)b9
z1j>bmt6#i*z`oc{A>YlMNfPSw8u`1QdJTR$uhK`^NuCIPxXMI(Vo|#BX4snC{s#H3
zc_seCijSGVzfuU8OkmdvI>LAFC)jsMbBp|~S2==w1HSu4JHx{+(NVxAuu6mvgW+JL
z(}z{pP4by&IhMAsHhy=HtMbcsfUDk(W7d;%W{v;?x1V%4|1&l4gndQ2ftJP6%?<Y4
zJ|f#<@*D7j|5=4Q^v=hdpCgw=ey>PVI2X5H$PeY#u+P`?N7UvMjSn>o+TqF$WdS=O
zAZ%Z(&nxa+*w)SKRtVjiz-g?YFz=i0 at J%C+B41>9&4&{b!DqyC${*H)?fI0m)J}=R
zJuX}*9_GnWpg!p~uK6oh2j1xXI){R->sP$fh;iG`8_#(c{K@<enE4Xp8m}v+r%z<q
zBWw<~bCB?CI8WC4{W0Sc7431)ZLjm at o3F5iO?i#lJ3j(`GNAJO6Znhm2=?oWh60&C
z*AWviTFhx32wEb%V**<iw3`S3)L2K;m4&@b*go{n at w5313-%N8*Z!oK0KRJ>1J)1*
z8OUJT0UyECdWfFw_@^JZs4`|UWra2YxX?NmkZ17ID92b<up8a#i}f4~{vPIzfPXNb
z{Jg;*WbEtICUI`GH_R)+FL>~?ksqa9+vmHDe?opZx^(;gbOnBEcdp%BWz*i)!9Tt8
zBeZ9|QdPeYZ!~qZ=U*Y8+)76;<p-?Kcqj^l2`Hc&|KqbOJtyip at bTvT97YJpwT{)v
zMd!)H!|8!wWd%lct at U&>FfY<r04U`9583*74;}f91JB4e_`~Nf$RCPvf0!j2EH|Ml
zU>7ok$qI(UG)d5-o9OYdf at BDMwCTfc|G7oJjlF2|;g3Awe`NwZf$8dAG2}sgipp!s
z2R6df?K(dZ at 88A?_^sNl!B11Jz)){K at FPU+E!IKLU*PYAKRC}qbr$4T!-G3I#s}}8
z_oxY+0THSwuuFs{D~MRIV+alKiTN$;2L={xCt#rLZ~HKZ+n=823i(w4I_Nz{7(Goh
zKm~$LGr-~>`qNl{WCzC`V;`TIUs8%_=ln~g3;wXeKX1t^?m)0BF$L at whaWUJy<azE
z9(6^u_!RqYAN(Hx|FUW)CM+ev73Xi at pE=LU=TES&cBX~hDa>^%@W-#d2tK|q2ZB>Z
zfp|Dtpl$;8dps*&ApcCS`dMzm=lf4AFlfkMU@(v`*LTS08~GJCa~E4YF84i7udNM|
zP^-AmVu5t>6T1Q&F?l}qi2A47-aE$GXKs-{>^(nq=g<E5URLnGd+jcItvIkR<k#Ew
z`{8|t2TSmm+pqG?2K;QwSk|tGtqtv2t=AN$!GBci68t-EKX}f%e at _*byaN9t!I`<x
z?$ZcAa0XGJn?Nn`WCC906Rn_w;W!MuQrjmvIHa~dIm3mw*E5XD$WR6n^R)Y_>6a at S
z;Ayb;mCf++zw%+$1}Ij+qZNV?9kPOahDKBo2_9E_VrkbSlCI1=FeAcgV>j~oZQ+{u
z<+|*$OkFzu$I4pqTj_o#Inye~n-tMC?Bg98y~So%ZXf*bA|KlCPF=vyYBuJx6RCNV
z5vLYsb$ak8;VD0V$b$_B)l;4x1$YDTtdjms52w-r<E at _3HXUedn$K+jIHN$v_L2Mg
zsS_Pw0pO_Hw`gGR5xLTE7q#`Nc0YLoVC?~nf3EfbR_T_9U%kO2FIZUtPdFazE~6IA
z`U3=VyVnH!fqZEu_1V|>Ulws##PSt?=N9&{rulwY#6!q;@^Tut5B_6o>Y0K6kTlVl
zs<PdM^Q;Na;_&79<<or8Iyh9Xu5^hTcPkj~A|IEZ)p*Xy2~W(3$J4VDTf%*Vv`k|H
z|MY(g_Uq8!ss2oO!i~&qf7k89b_kS({Mhk_*sfjPF$Nj!J+GK@=KIw)aBqgSA#^K%
z6m7C&J>l+NChXPoEZ?$wQ$&=Tu_BA-FH|4D89$gy=|2?qm8Lh=E`68Rs1qKix+U^V
zY`@(8S%Dv9T9ICIv>vh at wI}cw;TgzZ;<%%Ez6K2l?OK1L<S(lM-30ndRTMa~WPW<x
zkNFvnCs~pGpdobRcLGqq$6nEH&`VYr;Ef${`>JxT!7sPJMZUfLfW6uhI0NF2bRE-j
ztYWLKI2*Lay)H9wx)qFh2x3H$8f=x)G=z!>^>_=G6=yrz>wbJ&x_$ribb#ka_T87C
zZCk7b`KGB((ydUP+U?u(Gm${6&oAe%uzakY7j9a$LuuL}@Qd>_w|@fiO>0{_)3Ab7
zAixm173>Crv$g`BKnM1T_Y?9h7t{kRwm&__O{%+a9y^T<`0ew-Gaeq~8}`h4&A~fg
zewlObtD}X^xnE2akB)^rOTwdH$5asI2t|sD5!ng|2cuq4IdV4yXy+>07M^#}ekNbs
z5wSs_{Z$dIf&BDN<?y#YKdAl*Y=5}@oW*hFHTVPnj#<b};@cxlJC*0}oM-L!cYOY|
zi}}JV+~itd0=rhQONWX>dTC+_jy>BR3wX{2=6=&npnu)>wK^U7<vn-<f&4?B-_i33
z_?6h2?F90D?iCFN`1#mT%M|hd^K%|~+4H{c^0$BL6)%3~74P(|pL)?Z{fApUfnob`
zY_4`DYEL at 7mlzI|$=N|#!IT}B70^OI3_+eJBCmuv!oi5Si!D at WD08Tr117Lq5r+((
zm at kLUzAk>wu?maB2mImlt;A-L;*ifr=NYxFW#&fBqKV04x%7wCPW-@<^X^KWQFfUL
zzrkN_zw?|1`%*CCCffYq16<MNBK!{%NWU}|Wfcg<(xi{7bvaWjFr>Fo?_X)KPo8g|
zZ{*wU5AZu%Kjc785B?-P34XTOe!_LW@{@1=xX<{K=iKB`KYH)){?%{%>EHRzU;3kO
z_{rbC=l}i7pZhgG!pQwky6I!F0&T@*D!xcjoOLTJAdl#Qz<B{H7$&gF3*yO_6|5e(
zBX9Yfdf<EbKZbc8nq7Utz8>`f*e^wy<7}spzhV33_I=K>na?4?X9EAiSGTk$J^zp_
zB6rL5w!lA-FSKt*xX at l`fx_9 at M`#7>wOFmf*5~m2YY95Sckknyy>RKfI{5u}OW)f>
z&*d3fD?TsE;)iHY%=e4_d9nTIE`#kbW)_Ek-s6A#8L#?%cHQ>>e*Im4b?@i>>a`#E
z-!FH;lbFV=E$TX8rJF#EidwkPlp1^U_!J22cDCfROrV}NH^cewKl3f-dB{g#KOBA{
zzr%i)?HoXUv3=ox%$z(M at H3_GF!*&^NAvtCR)haQ{toOtxhr2YDf_p!g0UhAY1_iy
zYkfny3)_+7xEFl`{#CgIkGe^CBW|YCu&^)B5X`4Izp~w!@_nT{GhKu+o1ggkkGk?*
zp8W;i at RKii?YlboegFJld*>HC`4xNv-^So&_o|UN#Hh at e6SyA*dZnO>1r-Gjn82JD
zoKeg*><7<Gl2fu<&uuMfTG$z|pLzZ+@;7Y1z|RdiZ!Tr!YlHLeFWhOsADm}l`&;A>
z%qz1q#q|`s+l|RBj>R9vSWp4FTvO>4|6gy{^J-NUg(pQ}{ze;QiBHKu3?re$he%~)
z<s{IM*Yg>^i5L|XA!$Dlg_NK{(GMq$Y7_)b8#HX(AJDi#<0j4e*80|3XYGCVIrrR~
z28YAxdf)Bdy}$LXZ+&Z at vvENf=d)|k0`Q at 8;+_5>#&|>EAE|jk{>Ym{<R3L};9qvs
zy=Unh9<2<izqES$<jr3`|Mic*{{APT;K$$pT)q9<!Asxoc;Qp*x`OJs!+)oOm;x|0
zn5^Mipj{NR98d{VfWJb1j8dg=g6%8Vv#PDwzJmSy$ZyiVDWB=!ciBJ2{3Em<Qb&<r
zVqTsk>4&!LSxq1W?p_q+9PJn`+~%0O=0*CG0{QsZBzuHF%F=0o{0sauMT*HEWv{rM
zYWt}EM+(66_Lo+%krtk=zy0|eyU%`g at X`-QF8{QA^=F9x{TIH2G}?UZLoC7<@XOPv
zpnq5hM-?z9{yP`0tc3;tjCz8fBNKzh92y!jvAsDtLG=N9E<+924-tM?`kC`fsXu~z
z!#@cP-x*&%<_@)F%v#^-r(}(FDX#g4G*2gZh<xLDom|W>r#SjJCzT9!)r2i{9FGDz
z6<#2Ba}+jdIa!@?!6{1<2N)M(H6grnq{|mW<>t126ui0S#TTnPCa(O=G)Vk!_^<Vk
z;GYr*{txU;dFnoPm&Q}~Uq>LwHj7WZEqg2;dJ~!-&mNbjj^mkxuz=7S5b+<oLbx4@
z|IvIUK#Xd38+;6H^oab5 at DuFeFc(hFOxX7czlnT^oP31Clcau at J=jvstbTl9S3a}d
z&gtN<G*9T9jCsAcRGbavH=Q6bp&lAmz=j-}4kQ<NI<Q+o-6jI5W}B#rf`)4mR(5cg
zPhtmYhC^=0C`$-Y<Rjup%fJl&2KjpqZLIJ~_(!1>`oEt7A_`>RH}3xYirAsD`?GF<
zj)(97^Rnr4-uhE5P<F(Se8<GU4s!Djf^H;Z0P*uH+9&dxgdYt=>KtnOA+{ffedhcO
z`%3B$gCF=GlKoZ6rcG^Ac2rz40c6+SZB at GjKQ&Jv-+PzhV=LgX<)!XiBYjLT8+WnM
zJTfT?#HmX*Q9BAo&C)I%RDsY6hc at i_&J2ESmvrDy${#^m3}zn5jDOwe6A(3(=qWN-
z!Ujz?x{@2rZQm>1^o`dsn8x|KIzkj?)dHBN{Dn`*{Gfeh{;YWl(FnCe<R`+fb&kWn
zZDS_b+Y)`SeUtFB)L{r@&L2WPY#-frXEE at Dferl8sq~4nWh&wGl;Ag=6Ug^eF7xHv
z_DTC*o*w3FL8Y2Vfsk^6IMtpDswl8}4T at +$6m=x#vq{pnI!=*ndM3Di=z?$VgCC!q
zlz)hy2L59_`z3JB0zn<x|BXNpc!NVoBisOpXB}tR6$QeQwN=(Ui^(2EzA**{B;=wC
zo(A$s_+<OgIb5jFm-h+zc28o4eJ1>ck?-Ia@=vnIN;b|~<|{gNmEi;AkAgo7ektO7
z?sV2{$%^G}P2b(N#j;_y+N5k2uyIyJ0lW4sQB(!Oq;wF~flqED781yd81dIlG_oIr
z&*3n#fYQNi<3Ah7c}Velx!_HiM1%^Cu*kA{jG_rRC)DE=eH#Z~)J~MTI<WZsDTYr+
z`|kD_?T6r*i2SC98C7i)_8Iv=dp>$<rzmnqXn$Vtd$KMJA0=V>bz#{R^W|NwoV!i!
zq{UjmJhs0y)e7P2$F9 at f6jKGo-hs@QOqtJ`Hf!wWj_FQOGaWFkV}1t$f#G2H968__
z1qJLg_($<C{!jM*a}^w{BEPg91ri7m3*jX6FC6oT9j<opIv2~ath{1jWoeW$(w9Bh
zvO~XLvg3TxKI)(W<hP|xMfd<b4_%xo&zhjZ;Tb$1#|Z3I=g)!s9{4-M$KC!h+0Qf`
zvR}r~=BNSwm?IUg0Kb)NTCbrl1MC6#M_$FIfiNiKz(ZzayBxWed=Zpo)2I2mn?Yd1
zC()L*&z}zJr4$+nwKO7`6WilwzLRGvpFaQVy%L=SLh;TN5Frr58(K)CAdj$=#?CO7
z8kiu`nSDl5hj{y>4j-|?Pw+mkiAG&{PTDs at DC^u#>i2ZMA^*-6w#0u$_)X-G(>}o8
z!@pE>2<M65&oZ@~9UJGE7Y9EDKfw=?FHQxKe at 0-Bjl%b=$W~~3&*`xyd!^xeX*KE9
zejrTLMdQ^$X%^K>taBjbq>vFla;>Svm;@h%1H~iFPse|k0;&-3K~CO+^NeQ%0duG$
zjz&Hc?F4+EB{WxdgkN$#zbC%%Y~&OCUf~vIW>e}cM)&~#okD)Xe^d5X%r6tfsi`!o
zdXmQcN=*TNv+UfmFz~Zwqu}SGz=(W-{Tf_rS+cu-{ocpcWur_SxPJ74F4Llpjl#`c
z3t_wwUBs`qXqnu|2vsapGATy^|0%#9<nQ>O5dtX at n8TpCKmviHNH`}BT`9r*%ed(N
zN#8Rv4&j(35)kC;FP)A2(%V at 8`CVa~6 at FFQPDlO}+9&w^99DlYKYlf7iVd1zr%Lws
zYhGL4pn$YotkSdsKRY$Brm;)Z61Iq41MIO0AX+x}9k_^24f^<Y;QGKtZPRF{2DyVb
zG<6Qf%s}ugKV28~{h}@q!aD^#c!ah|fEU=L*9-FR<3F+h%PV&n#K=VyRDlq()5Ag3
z%gCV&F9sbmpj%{xOYF{A5Wc8B#xm6o%`P at RhID>5cBXOue?)#Q^@0351^yEMMRgYA
z at 1<E=_EUVaE~Dmm=GScjMe0NF>^(>13+x|%18qt)E3sGjhQsg5@#H&Lse%q>*9d^E
zNBg=F2vvR8D-fnM(JH at 40wJ-Yut7XXQ#Fi*K*Ykt3;wO1`I&Ym4p|OI6lmHl0s+;5
z76_tS#t*&|XN{u*^XYdLuqX0S+OV|O@>Yz^kqY<!M7~S?Hu&enKZ}<+WdCTZE0m9w
zV;TH$gOcotsXh7?q5b{q*cO~^dI0``r{2c`^-V`V*tC2_j-ywwZ`8)8FH1Y1YvP>J
z2HCuUKp8CBz%_$P0%J}kNy8E`6RH64Q$Tis;I2^}3;onE6b=dhoeI+6k`6^25ePXJ
zJRAhfksz2R{1y8ryfY5|g!tqLWPU?tE)c#}^k!*>u`?I)tJdvwoj*nJ%mn}Z_^-g<
zP(C__gUW|$GwQEa%^L-;GrufQ*>@g-2U6$$LvL+3{NBbRmp3n8-E#cnt<PNB_T2UD
zCvM=t#kOa!Z9V>pbnSU7EAM8NSdd2N-3f$X)Oi9y2)snKkt$y#%tqc2<uIcF=fG-Q
zXfk3jj-Mq|gWmb)0r>oVlE^VX6P%w3pUBUv7ox)Dik-5JRor_u-OTSJzp3_F`TG9g
zcDo8SPyg)NzF6K<zBohn>lDa1E8*A!d?+R-C?7h~F8c+p0I;pjS~2h+yaagz&fm0r
z6*pyI$>NTaHy=Fp8SmP|VntlwKX<-(OBb$4BTSCLKzMnwG at 57`@n&!r%!M?<n2=F3
z%mTU<*hXPrgh at XN@@GaM3|-_mSKlErQBZwmd%~WCUrHS;38;Fw3;Ox-q at 8g~pZ4Yi
z{157%91A7jb1W3#pJI3}tbBBhI(YjbS)ePLf8Uxgzk(myX3MdUwx77Z^QBt={I1hq
aVAbxPm2Z|_yNzSd%D21Ee*N&7FaHI%k}U`T

literal 0
HcmV?d00001

diff --git a/utests/kernels/compiler_clod.cl b/utests/kernels/compiler_clod.cl
new file mode 100644
index 0000000..dba7d6f
--- /dev/null
+++ b/utests/kernels/compiler_clod.cl
@@ -0,0 +1,91 @@
+typedef float2 vec2;
+typedef float3 vec3;
+typedef float4 vec4;
+
+#define sin native_sin
+#define cos native_cos
+#define tan native_tan
+#define normalize fast_normalize
+#define length fast_length
+#define mod fmod
+
+inline vec3 reflect(vec3 I, vec3 N) {
+  return I - 2.0f * dot(N, I) * N;
+}
+
+inline uint pack_fp4(float4 u4) {
+  uint u;
+  u = (((uint) u4.x)) |
+      (((uint) u4.y) << 8) |
+      (((uint) u4.z) << 16);
+  return u;
+}
+
+#define OUTPUT do {\
+  const vec4 final = 255.f * max(min(gl_FragColor, (vec4)(1.f)), (vec4)(0.f)); \
+  dst[get_global_id(0) + get_global_id(1) * w] = pack_fp4(final); \
+} while (0)
+
+#define time 1.f
+
+inline float f(vec3 o)
+{
+    float a=(sin(o.x)+o.y*.25f)*.35f;
+    o=(vec3)(cos(a)*o.x-sin(a)*o.y,sin(a)*o.x+cos(a)*o.y,o.z);
+    return dot(cos(o)*cos(o),(vec3)(1.f))-1.2f;
+}
+
+// XXX front end does not inline this function
+inline __attribute((always_inline)) vec3 s(vec3 o,vec3 d)
+{
+    float t=0.0f;
+    float dt = 0.2f;
+    float nh = 0.0f;
+    float lh = 0.0f;
+    for(int i=0;i<50;i++)
+    {
+        nh = f(o+d*t);
+        if(nh>0.0f) { lh=nh; t+=dt; }
+    }
+
+    if( nh>0.0f ) return (vec3)(.93f,.94f,.85f);
+
+    t = t - dt*nh/(nh-lh);
+
+    vec3 exyy=(vec3)(0.1f,0.0f,0.0f);
+    vec3 eyxy=(vec3)(0.0f,0.1f,0.0f);
+    vec3 eyyx=(vec3)(0.0f,0.0f,0.1f);
+    vec3 p=o+d*t;
+    vec3 n=-normalize((vec3)(f(p+exyy),f(p+eyxy),f(p+eyyx))+(vec3)((sin(p*75.f)))*.01f);
+
+    return (vec3)(mix( ((max(-dot(n,(vec3)(.577f)),0.f) + 0.125f*max(-dot(n,(vec3)(-.707f,-.707f,0.f)),0.f)))*(mod
+    (length(p.xy)*20.f,2.f)<1.0f?(vec3)(.71f,.85f,.25f):(vec3)(.79f,.93f,.4f))
+                           ,(vec3)(.93f,.94f,.85f), (vec3)(pow(t/9.f,5.f)) ) );
+}
+
+#if 0
+// XXX vector type in the function arguments not supported yet
+__kernel void compiler_clod(__global uint *dst, vec2 resolution, int w)
+{
+    vec2 gl_FragCoord = (vec2)(get_global_id(0), get_global_id(1));
+    //vec2 p = -1.0f + 2.0f * gl_FragCoord.xy / resolution.xy;
+    vec2 p;
+    p.x = -1.0f + 2.0f * gl_FragCoord.x / resolution.x;
+    p.y = -1.0f + 2.0f * gl_FragCoord.y / resolution.y;
+    vec4 gl_FragColor=(vec4)(s((vec3)(sin(time*1.5f)*.5f,cos(time)*.5f,time), normalize((vec3)(p.xy,1.0f))),1.0f);
+    OUTPUT;
+}
+#else
+__kernel void compiler_clod(__global uint *dst, float resx, float resy, int w)
+{
+    vec2 gl_FragCoord = (vec2)(get_global_id(0), get_global_id(1));
+    //vec2 p = -1.0f + 2.0f * gl_FragCoord.xy / resolution.xy;
+    vec2 p;
+    p.x = -1.0f + 2.0f * gl_FragCoord.x / resx;
+    p.y = -1.0f + 2.0f * gl_FragCoord.y / resy;
+    vec4 gl_FragColor=(vec4)(s((vec3)(sin(time*1.5f)*.5f,cos(time)*.5f,time), normalize((vec3)(p.xy,1.0f))),1.0f);
+    OUTPUT;
+}
+
+#endif
+
diff --git a/utests/kernels/compiler_clod_function_call.cl b/utests/kernels/compiler_clod_function_call.cl
new file mode 100644
index 0000000..ecfac46
--- /dev/null
+++ b/utests/kernels/compiler_clod_function_call.cl
@@ -0,0 +1,91 @@
+typedef float2 vec2;
+typedef float3 vec3;
+typedef float4 vec4;
+
+#define sin native_sin
+#define cos native_cos
+#define tan native_tan
+#define normalize fast_normalize
+#define length fast_length
+#define mod fmod
+
+vec3 reflect(vec3 I, vec3 N) {
+  return I - 2.0f * dot(N, I) * N;
+}
+
+uint pack_fp4(float4 u4) {
+  uint u;
+  u = (((uint) u4.x)) |
+      (((uint) u4.y) << 8) |
+      (((uint) u4.z) << 16);
+  return u;
+}
+
+#define OUTPUT do {\
+  const vec4 final = 255.f * max(min(gl_FragColor, (vec4)(1.f)), (vec4)(0.f)); \
+  dst[get_global_id(0) + get_global_id(1) * w] = pack_fp4(final); \
+} while (0)
+
+#define time 1.f
+
+float f(vec3 o)
+{
+    float a=(sin(o.x)+o.y*.25f)*.35f;
+    o=(vec3)(cos(a)*o.x-sin(a)*o.y,sin(a)*o.x+cos(a)*o.y,o.z);
+    return dot(cos(o)*cos(o),(vec3)(1.f))-1.2f;
+}
+
+// XXX front end does not inline this function
+vec3 s(vec3 o,vec3 d)
+{
+    float t=0.0f;
+    float dt = 0.2f;
+    float nh = 0.0f;
+    float lh = 0.0f;
+    for(int i=0;i<50;i++)
+    {
+        nh = f(o+d*t);
+        if(nh>0.0f) { lh=nh; t+=dt; }
+    }
+
+    if( nh>0.0f ) return (vec3)(.93f,.94f,.85f);
+
+    t = t - dt*nh/(nh-lh);
+
+    vec3 exyy=(vec3)(0.1f,0.0f,0.0f);
+    vec3 eyxy=(vec3)(0.0f,0.1f,0.0f);
+    vec3 eyyx=(vec3)(0.0f,0.0f,0.1f);
+    vec3 p=o+d*t;
+    vec3 n=-normalize((vec3)(f(p+exyy),f(p+eyxy),f(p+eyyx))+(vec3)((sin(p*75.f)))*.01f);
+
+    return (vec3)(mix( ((max(-dot(n,(vec3)(.577f)),0.f) + 0.125f*max(-dot(n,(vec3)(-.707f,-.707f,0.f)),0.f)))*(mod
+    (length(p.xy)*20.f,2.f)<1.0f?(vec3)(.71f,.85f,.25f):(vec3)(.79f,.93f,.4f))
+                           ,(vec3)(.93f,.94f,.85f), (vec3)(pow(t/9.f,5.f)) ) );
+}
+
+#if 0
+// XXX vector type in the function arguments not supported yet
+__kernel void compiler_clod(__global uint *dst, vec2 resolution, int w)
+{
+    vec2 gl_FragCoord = (vec2)(get_global_id(0), get_global_id(1));
+    //vec2 p = -1.0f + 2.0f * gl_FragCoord.xy / resolution.xy;
+    vec2 p;
+    p.x = -1.0f + 2.0f * gl_FragCoord.x / resolution.x;
+    p.y = -1.0f + 2.0f * gl_FragCoord.y / resolution.y;
+    vec4 gl_FragColor=(vec4)(s((vec3)(sin(time*1.5f)*.5f,cos(time)*.5f,time), normalize((vec3)(p.xy,1.0f))),1.0f);
+    OUTPUT;
+}
+#else
+__kernel void compiler_clod(__global uint *dst, float resx, float resy, int w)
+{
+    vec2 gl_FragCoord = (vec2)(get_global_id(0), get_global_id(1));
+    //vec2 p = -1.0f + 2.0f * gl_FragCoord.xy / resolution.xy;
+    vec2 p;
+    p.x = -1.0f + 2.0f * gl_FragCoord.x / resx;
+    p.y = -1.0f + 2.0f * gl_FragCoord.y / resy;
+    vec4 gl_FragColor=(vec4)(s((vec3)(sin(time*1.5f)*.5f,cos(time)*.5f,time), normalize((vec3)(p.xy,1.0f))),1.0f);
+    OUTPUT;
+}
+
+#endif
+
diff --git a/utests/kernels/compiler_clod_ref.bmp b/utests/kernels/compiler_clod_ref.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..71afda904fc4c775a358e4982ee6ba36bc303971
GIT binary patch
literal 196662
zcma&P1$<X`w(fn3TkIcqcXxMpHzLG^2tfi#2=49<fsi1<-AgI7&;o5Kb#F&IGw0lU
z-usz3^PY3>d*}VGy^{c)PS51?n>{=K{F9QspY^O~J!}1T;xdE&W$eGmM-cyWk(1Zd
z|GoAvCh{2{>etnC^{A`S7+72Ao15wC>uXF+Or0G}9Bg&;^s;Xp47|2C=-S?Zi#z?#
zZSz0Bz3}15lK0M)eRQSbv+EUK+>rIz_3}@ymVJCB^v$E8_m76YH4ygjSok|9BA%Rz
zc>he~vvZLjo{#$QJjcin&Q^W*`i!q{&-ms})%S1I{N{e$k8jug;bGKA7vycv&T$g`
z>E-CpF7sl|Z{Do>{w~Mpk1s}jbTQ(+(_wEP<3Go at mw$Gx_{o{T%e#WE?_=fOIh=8R
zSLWrtzQ@*k>|7YVy*F;}GLCk0tL$da2wvLe-CAxwJ>7Cfj#E*pZAPp~MvQ)hpJi-_
zK}?XIzq at 5jut|WYw!4Fox2vALm5!T(uAQZ>r<1mmt%;wzmYt=sx2ukmt$DDIslTUb
zLYQ?-uvucbYhkKQaaz!v8t0bs_{|HwS9D|@-xAutuH at E{*js%w-Z_)}XsGFnJ84hO
zw*C68tml`rKfFBqcaP@%__*_T?{xkCapfnsdOo?k=>Em|NB3<!arE%@%U7N}did>E
zpa0K)`@{eF-~aiy7azRxlVxgaZD?(&Z)t8|WudXLG_<qUwK6xbw>B+I_MAE0x^=pB
zOKD*5%#alwcJr!jXV0*mGsAXvC9nI;s`P3r_n9 at rud~*_t0AD9)fl+2IcQ01$jXke
zHFF&nH97P)*>~65&aLA8Rt<%gHF*|QIV?^r>+&t at 3M}gj)x}q3H5OSl6<g0NQI}P7
zF)v!w<e8Ue^6xRqj4?<E)kOO126^iEyKDQo=>)jz1bOO)dh3Pz>P7hJh5PA+`RE3F
z at w&E;%QSa~sV=rt9IPhWT1>V!n`C7=*_vf0%SMiqEKMew8BQ?J8>c<(wF%={V<wIt
zGikz@$rHy;nLKvdl(AY<`O-KYme$CcCa<uxrt(#JkGiy`@X9#tsk~WNPmk+q=wPdF
zZDDM0W9jQ*<>$#oCIn<@G|Gvtj-IZ@%*4Rn#?aa#;KGi;E4zbl9|ZOw6U>LbJqZ3o
z?)8V<I}-Y4f9L}O;kW|zyVXCu at nZezUiGi;)%^NR!hr>_S)4>YzYzV&C06b4-{PzC
zp5NRjA|yKAKSMyV2%oBNUoU%px!|qifminMUne#}e%k46+1C&H4Q+DY(&e<YCE?(z
zxP8lQJ1T73${c$eeLJdL$}+9$3e1aBtrEhVOVW*!!t??>>~j+Ig1z(tJ*?tGr`cKZ
zii&@27drztM?D`G12+d_A6G3qD-%Btjkl{=khe*EsAagnWp=!Ma+F_lnPX!~;H)a2
z^_^Zz+k*Bj4?nfF at XCSsdjqu}UP*lOSnIDIWIVgn`rVryzkQhd>Gk|iZxnrgtK^fL
z<)7WI`Q&!pn`e4%3 at tr7u=2!_Jy$QBd*{KuFF*VEU;ps?|N75g#=n_^or#@|zJ-|q
zAz*E(M+n$k>)Kcv2YG=y-#JyFm){+1hpd=IAXqn-$Wr10aC*0u`_8Ej>}^&sKPPO>
zoY2*?LsuzlwVd-h5n<C_4z at u)Ka<6YRed3mWizXsXi{T}bDOp@>zSnjdjf%YAwZOn
zF)z<BElM%YiZw_I1OGaK9>816%b6pApc~??i3-q<3)YVhkrf-nrv!zLznhka<5VY`
z$+qS|eUiD+M02A_=Ej^)mRK<3$fpyG^~dRIjhQ$>!T*FYlK}suu~R3%0)AaB-lK$o
zihl+CS}(w_yjj4{d%(Z0fxeNgm4Su1zM1epA;3}3&;aD?nHcLC83KM5Z!>nV;mT`F
zj7(h}t%H0x>KYp8nVIC at 8}L28!SB at Opqu*%gs`^;Nea`ST`Yb7eCY=l%09YGIFJ+s
z_6plaK06Dr1^-WnL!joj_rW~i=UDsO2Q1#nw}d}B5&rH;-dX+q8<k()EO~Mk{0HAW
z5OU{G;H6#Z=XQesoSS`qCpWomUf{H3Ciss(xGHE-i_OeZ$Ayi7-HqVivNGGUI at cgB
z*giYnG*^&slM-c{7Oms$Vh|l@=<TBIYOm|<qUT_(3GmRew=@g&)pD>l4fL93ZLaU{
zK^8EI3;_J5iQx|Ev7`Y1)(ZQoypZ_~UMo8iw=D|Xv$W`XU)h_-<8B|W|M+_9le4Wq
z+;98gLH0*i=KSIDygxkY{PFREA0Kx^{?Bjpe*IwKlk2^&pItO`c-is8+b^9te*f<4
zpMCV~$KU?uKmYpY7xe$PpOC-$sfn$%fZxi(z{XO~+CrDyZD*xpZDE&_U{;#$GrLNV
z*<Nm0Ul7pKL?C##Ran;MTenOX=yp`{B~HM6<mT?E?Y&W3d%`!&4^?1Kybu~JzR`bv
zolnOMua+{48QFsWhC;s4uCvCzr@^7O(P3dDnSvB!(_SW#0_Rs|E5VXsR+eE_ng;$&
zaubZwqQJRss1M|?<>kcE_H`BfM+X`th8d<s8D&HprAHa2MDR9}g0`RQG*>(LU%+py
zKfy=?+9#SCPO>m29Za$`<z%9X!FWAwq5X*h{xOpk at K2kflDS}B1;2`aA^)kbkUvo{
z!u-mcwZXr}$PoPNn;5H{5BVF}SR#k`RNu<n(8*rk+7g`ey1A#TG3rQHS4X2~Xk$fm
zXzS{-bd8O8MLE~Wys|Ir%D#Y0yFy;?lU#7`2q(dJ4u!mNm}C+0^c3J%MA11(0Z&hn
zCJ;7oJK(SV-GkcSy+sHBcsO6w)Vn8%l<FVuRep7A`iB>b-#v}~kso;TfdA<&-iKGA
ze{yad%Dl7({5!8~ciS`{2^6w?mTh~v{rp<Hj!KWZLid^iLclmP#x66~u`tyzF2o=z
z0Q_4-25QIx0qzDKPCCdQS9 at a!%G1f%*9}Fa>+Wdi?x^eGi2kvR2r!E9w}}rkONwyH
zPOvG>2<)g1o>%9wusQYM>Y)8A^3Lvxxw=2;;mO9&Z>PR{I^)Aj9lw8P_K)x8e{rku
zi`&JY-J1UCt;)~u^nCrG?%hkh?_O)Wcy#WGgR6%6x1Aq4eCPVrXHVbz?XQ0Q*Z=s-
z2>yQ-{JaSMjjSx>9+8V3Z1wD{bZsp)c2;^e7S3gvCV7bfo&{Y4UEkSN0SlY_=GAfn
z?7^+$l9`Isk&~!x3!`@~irTs`Y~8$|#VvmG>&Oni^J at GT)Dr at M3nhGb(QjT2s)?V&
zRdrn4?6ka<B|oR9fm{Ip^B*!TPBqC-<iE}l at xwAHNHWfe2jq}EI!6^b1cGjemnJ3<
z%o}IN$+zUo+l<nqc^jcYj7+h&MCXjx*9GU}H980$Fh9}ENTR^ph=@?|KXF9)OhVEq
zVn&fYqu>|(|E%&+WRJ)sB1M}YrEg|xY-erm;f(lE at y}6LUzI(2dd5b^?oKA&Zf0&y
zfZsMO0NUqU)DTd?|LReP#6il?*3n^k?q62?_zb+wLb{U()bc at I`RZ2Xm$x{Ae*_Y0
zU*-R*@9qln-x>t`5s!x=-#Y{TXQ<$Raz at Q2;2-iQ<M<4$%euOsa7!K9;<jZ0;CI{D
z8MUPwLgQxHLr^5>+I+9(>8>+!O|s)mbK+4xHmOlY$q_KWMRXAQN5{*VDgexbe@&pL
zp{El^eHS~^Aa6<l^H4usHwU|vD1$&x+k|lQ^cdUtFx$$Upt-dUH3hNj=4Tw;5OR1;
z{)N3!7j`GSIoSNo8;GCm&#vcwaTD-&{_)9zKRiM9FZ}Uo)u*>>-n-iS(d)gBuC`t1
z?>%+6ci_OfQ-ggsuUvTY=+XDzeE%PR{_B5-e?q|6)*7*@v9s1AYuj7H{|KR}<|d}0
zz7hht@#q|nrV<-ud{YtnCuDg$gwF**=R2)vcUe2zd3A^5(iQ~2<DzDe9KL=&$_K#v
z&aI|K;26-;7`&{F at 8VlRSI^<Ae7mBW=0<E>K<<d#+!eNVp56Q!#1#ob5&W?bK1f!9
zEm1%gAPTbM43op*d=dd_pQGSEHPR$6!L%gRY<fCJ0>>~dQWG6OfJ}9?hVwz at SVge_
zV`5=~k-kKMsUb-L+zylfE6V33=2yvI at UN2psPd6dl^Q|btj3q2l?C{>@N%{AbQNGL
zvR@^CRrWwKR{maq-^|_FCdAh^Jix at +0k%gD=^7jU1pL~%0(;2?3jR52>F7Yt9=jJI
z(NXM0 at 0==p`ve+>xS)1M)uVjid;||QF9{;#jUz1Zuj(a91dom*rJ#M(6yL(4^7R|q
ztSYXYTYc$gcO>+!NjS9HbN6Dh0K62kv at JqO>sEF7RyBG4^J?9y^6awW%!*P>^AarM
zLLG7wjZz|Y{oQSnBSr1F*bxgFXFE-Zx3QnQiN6O~z`&hCz?BoTKrf at HKuQ49qzIe1
zP*Q+TV~Jf=o<n_6?1lw?Te`u2 at y#QMpOnXE(w|?>`uJ+@=Qrp5>1pR5pDy_0)9ydM
zxA2eeFZ%t{ML#@R_{rVHAK&f1d$#@Z;KHH46{nAGx-hio`lWM^-+t at cFTeZq|N7qw
z{{IpAtFIebnv;>G{&lhi{2E)!X%;40<|b2}ZR~Rs-D>j9E3#1L at OIFW7KDm@R~;aa
z-mwV56S<`a&4WeYw6Y!W17J!95jI_QEF=v at G2|b#XeJ!OHIy8oe&gou at OASfj#hRk
zaY4N>hZv!h_HM6qt0{0SNwdpMw4*+P(sL6`i&M}-h$4<s4k%Hes(sXsihq<6|5Wpe
zOhSM+P%l#~Qw78J at H2(2;C%8VKnqqU80rE3 at dmm?#0dFI*(;C+>cafmBWr~GwO>;H
zyzTG6Ph_c7Z)j<b=GV8fP=T#)V`%`r7#raZkryny-A$bAH73S}HkRfdE>yuf`Wh6G
z0T<uGObr1<sUm>{|1U4_uPp7v{&mTN8*r1<0vS1kh7Y~hAO7&TDs{v`qI_mO7~mDP
zI*^EXy^ml4{L~cXpI+m{|Lj)Z!F7}yRN@>{j&F+Hvo!JWn$%O<sDhz=%pW)^V*PxS
zfJH?XwXoOB>9*-HPQ_^!Wf=ys!K47rK|9MjDO}6hRukl at W&!<BA43l(vtS=B2P;wl
zrjSL1zkZMx`o}sp#3VMvEH%o#EZd>6IJmRkZGOGi@>%#lg_rkNK0Mw0&E465dNTJ<
zPYb`gQ~c$f(l74x0DhSN^E)*k-&*wT+Y6uHS@`%`?}Ll2r~BrfKD_iq-^TMN_usm5
z^3nY_zWns-|Ml<x_n*K&QD9_aW#nY1tAJnE+I$M~z{C)=pex*K3#7<h*aWI!@9_1V
z03Kxs;GuoM%#{Jj6u(mcuI#YutVYJ*m`Ru{ZYD3VoR+nS&RN;c`(t)5VaYdc>Y_$Q
zDWQwRK^oCWzH at 7+6o@;rk7H3P%XxaHTXjA;$g8#7yS;)V1p*NvQIHZrT at 3z_J*XzB
z8Y;4g5lI2b;V31HAf%4qACW(-^Ct+-6~^YsxhVg?BY)v at JwiZ91TTvpRr3#nUm`_i
zevw$<U-fyEDp)CXF?uwHj<z^{R+xS+j^>^&Xdd*BXda|K@&>i9$bNkrEAoPooi#~>
zs at cNVgSY_v>QN<s75rM-+APPyl-NDX04ma*T!4)eaDF=&hR;>bmsoftYuHnIv!BAD
z<mp+FJ%Im{tDNM&If&-*J+XmrB$~(qiAUDP?p{KCrJmXf|J!%g*v+oQ3xdA<=GK6J
z>!xBXAjg7ahrA^7k~HJ=Xi5OiA%DFfFa2;o(;zQhUsqfpPE135bbVZnecW{1>>+>C
zKu?XoyH#|sL68?Jh$wK#h_flr3TUgO3U+C)^jzGMIk>6hc7Ma?w=zGzdi&Gocb<Q6
z at 8johfBD&yAHJ>n<W|j>Z!G at J<3-;-Y<PB~@tw=PkFWRKIn#CF=;8~5-Nz5EKX-ih
zweu(5euHoP;@|%b`2RBb52pb5pR(81QoxT%Vrn?iP(!+(>R<(~KqE{JOC$9GGYUUq
z(}IXiU7~r!=WG;J1Cy_qg;Pot5Dr``r)2_om$h?TH+H&ip6|M8zUzj0F6-tHHN38B
ze!dI*Qy@@KP#|-pxRAnOUJb$tlJRILcBkN~EA(tCfqaNWzs@>&12NK8&g+B*WiM*S
zC?iJFL{SP7h(tgwKxp8LYI!<Q?TW||{3|-2EHH7xu*nJd$qOT%=gZ`;fM3Bs+Fq%A
zDRoEJaDn^+{5pbv1Kk%^=SUz(*=uQT9qelt8DtgUW$EW>8|H5n;H@!NWWN#uD*lNV
z at K20jN0@uN*@XI&IDozGi2ffXe--~6F(HxY$%7lwEl3)%F|Y3nyt*g&7H(?4$o{tm
zNeaQY5Ak}?js4^ZmG;X&zC!n*;Qle(&g|<40?uux3*dit8zr#&wx0L{E0YG+Cm-7w
zyK9L98Gk{o<D#apRkH&Y)MI^P-&s<l6(l*AX0VL8@;DDE5&UDU6T>y3J}^J}N7u)N
z5HJt-*LHKz1bJZxLHm at zHVI*R-Yy)Cq5{lAd at b{mJgf4(s`Bk?@*@_vC2n7wcW!t2
zgOk`kw?Fyt_D9cdfAHSj=g;2!^rQQqe=_^tnc9zT)jhwt_}jM|- at Ddu|6I at 8mlobV
z+k4|w at 7beEP99!<W^nVx(}(Zgy!pwqPyffC{z?231$y?@T2^LL%#5`xOs1KeOffb<
z223<IK!JcLa0szO(LkM80Q0I`f$%xE at 2PiK*dU>SyxHCxy>oHw-evIzS0?nWPB^?K
z{?IBZrnW2~1YFk5bzU{gap_FnZ at -|9oT6H+n4bb{z^^nEP)(|FL|z~|<V&3r7ye!K
zk}NQkx*8+|TFXfjPSZ2&^OE>?k_C)1V{wWge>F7-{=J<i+n57R1^h4YuV{WHBfKDg
zY at gw>_aBqLDtm at y|1k4whQUv9ZR%t{O#Av8#EhP)xIhZ9T?hflAH#>EiLbjM3D?Mw
zH;^3!=LCX*zL~p|sfz>WbPA}&$PPa%en#;xCvFZ%bZ!c~jd4mjz|rsY7XLF_11{|(
z7Fa=7_X_x5??dp=`GWazK6x8f4=eADqckAke^ij?-X$J8dr|(x6j4Bq4qrPD@(2H9
z0e_4OOpJN8X2q!}e~a==m+~xxkV#e?MyN$pAoZ_dd<ZQt&Ith>cSq`CQT_oQ^a3aZ
zK)xk5k*^!(k43m*0i{N}m1NjfWYYqRT-K3xXid?LzJ&Y7ZhZXg#s^PtJbirYy(fgg
zoe$r?{O-e~(!xbwK3MeS{l*V&^gO-Z at cOCVhnIWbIM;r at fA)!k3yvRLb7pY+<+BIx
zT)*_;Q(6H34Ed|?(Y7|%u`-*CJ!on;&CGa`Mt35-H+d2%08`PmD%Yhl2h$SyK^1_!
zLF7oOyKWu}F+-O`cz)A-_Z<s8b}yztBY^^bLIC{7?OzeIYYD=M>q(f1+e6~$Q9 at vT
zEyfzLASDBK=t5=nG!SU`NMUQ|hS5rp<kCTPK(bJMBuN=_tHHmdfbuMdf at IswSnJd%
zmUy8l5u%F{LvcaDKNb*DA6NgUA)saiJWr+JHLT|q<^Kx#k5s<$29Z6ZHLnOHJSCO+
z0Y3{?7d?XuYGz{W=49gIZszKUq`?tF(ugSp&h_;v2PlLI5Ri{FvX2hos}u#6{+<>-
z?n()uqZYrvfd6UQ+S(dDExHMImRuso-lp)ibHQ!K#oeltpK)P#?(0XWk%tA(r`O6q
zy-M**>pAz%5ttvVUqa^L$$|&RQ9dg8z4k5j?pq1 at M{irGR&B0p=MVxmEz at CsN;#I>
zj9g?7T1d))j93~0bj0Wan}zw>WyI15L-W`qMHmNo2=n{98+tkOijkKyg at Asbr+Jv4
zL9n+~bPz|UoJ8xAbk7-izKx~MZ57nN`4{%weE$B8k3P8Z?7f>GJiYn!@y++2Tzm4)
z{_|%NGtw8ld!_f|yY+9K?|pW=@$TvF*UvPc>1#c)zvI}x1w)6I4E1k5KXmZcm5cAa
z^Xw15`{(hmf`1y~$HYKxrM~V&kT7}DBr_vJUpK?#2tuAL08s;epa|82XY`Ew_8u?~
z`EbQjPHyI?ywc;ov)64~x667Vd?}O33sk<_7Gn6Ijxc=46fSFKi+!|493+mM^8;Ph
z&*Qt~^;NS_N_;PG=39sbBo-GR at Y9&^YAy3<D8h(yD$Srq<}O$zg<Hghn8yTL#0Kj{
z`a}MT1?o%}7^_Dq0pS0U6fg|_k%rf(=l`PeeM$K%&d;mhe?|7I;OD3sJ{+aJ<?aly
zkv(W0mfGP0{}KWQ`r<iQn6Y@>IW5*9J{<5{1$rZUG*;#Ue#QLxW&CS_e_dTI!p+SA
zDu70um$%{J=e^#~FatvuoM7@#|L_v6UZOydfBP^FCkx4h_!scMbv)<hA<unF-M4mm
z>{^5b^66hq7NFn_UfLSDaRDs=eymN4n4h!&f|s;<HWWMLB?1YAkV$5&U1l6Y$S5_E
z`j-^IAOs<xALeTw;cph^M=#7I(9_7vMbFoj6hNDR6YKaeJx^!b<Vf?(SVF+HFwL$y
z-?_cgXWcx^pIaY&fPlaC;rk%}#*=riKY923TW`)=voa+oyY|+J#&<6_ymh|&;ibkK
z#~0qeIP?6Gwo`}DKTFRXT{+ah_S}h`SI!MRy#L<se*I74f2xJ4wxy{kA2Xw=riO^0
z2^t;nKX%f at spiI7o{sRUSxFi_S$=nv52_xB(iuz|+>m&5oyz$F_{|HTdLjG+D`R#o
z2JmQpQ9kJZ4f9A4L<FfJ`S_-!!Hr2r*C!2Z;GC#QIkA}^MZQpEQm3Snjh!Nvu$9zg
zf&N at G7qdv}h52>E;veQOOhNqEX2sj2M_VOD0DjYOKjUC8;~-DE*fhxK0)zia7AA;u
zrPNh5&xrCFZFs$8<_y=o1OgdQt$c;^721DUAPMuoLjEfL^$h9oN+3Y{HX(j?5kYV}
zJ`dubbYNg>MLkQC*T}^I353ss;E^zi3g*Pv(azY*mDg4L>zWw-4E~kk7v%&0Pt%b_
zT`*?+IP=H=)Cis=W?fRh;^bf5FY`Q?_5gJP0gyA{F!~DOzwm8ge!iM^dOMjK{Cn+R
z>eIgl{>S;j(8H!CWm5&fKeWKC8;dy-0+ePnf?X at J%}Y{IKJ)@;gu(oz00a*fC?P;o
zj4IeFE(8ly$HUPq#0Mc{5a!DugkfX=?O+YoXhN8AOpsG<l2uVE`agV8tM8 at -1sC?-
z{`kY&A3p>3>bmmo!{fJaG<DBU%ge1C+*xyVpy7?vJr6H;zj=QCwc|6-_Vr#pvG~&Q
zrRN4$oIJAO?D0L<E)2bW at 10+N_fO(q+rkvXhc%HVse#@kN;zFE^v{?H<B0`E1ssdh
z&_8G%R0{Pk{um3it0+bM at M(-9`xU9*<+ioUeOIsNfn{lDx2K)mK|0R3w1-wE*Wdf-
z8t)^ky^pM7dG)P?c06|V0{&zr1mX{^CU7XOF`7WWl-RvZh+CPCXr0bKfTlAic%<%F
z5XEV>S#iXsRdR$?awJE~_)xRR0HXj8eJ^K?y92C93s|Ortj(m=tI=V+VMO_>Wv at Ez
z at DCckzYKm=`6y+t%KwBIrLF+m(ayla413eU+f8JToi#%aAm14M at 8OK{F{1w!9^jY|
z0q2`I+Tn=uPRazS0*s9iMT8F_Km?gM+p8g<u{0m9e_zJGmKOR)oBo=q at oTTWW}6v@
zhd|55yfhu%4j0J)o1#u}H9@}6{>?+g0^kSvh#ztUhCkIV8Jzb({w&Yki(J>uMf0#!
z)k at PRu&0p{fQA2q?4c3tQD5XdJp&<RR+!APPLdLsMgVG`5Fjb&`nl-^dQuB$a707A
z>4oWsc#{q+A_Me%-ONLM4I}*R(_>AOBU}nnJSuV+0ZKiz=GMp0Zha&R at els5J$`iY
z;e!L`&(_TCNH54Q-L|U!&QSf$<8_z%d)~azbm7Q?iv!&k20D)K?;PB}aPZ)&v&Xlb
z9~!)O`^|5 at _-F7>%{$o?!_xreKNbErF@*dlD2 at lL!qOll0zD`~v1p{p1tE9WM=7!d
zltR%EwebA5ZomxG(=W&jAs06L<{{sc8+``X`3$TD_Fi1r1Iu|&%E>J($sI at 5!ueDR
zWDo*J(#pEIO0lpQnS}V1UfXKvnqfgm54t*+9K`emZ8*!?JW>)3GGLGF0r~JhQDB)6
zMhY<ScF}dT(YCeFaj;UR;A9GDc-jHOXH at w!>hq%E`%=&M1 at kLyFQNUHN@I}!68M4r
z at X{CjoBDa$MFv|3dSm8T`gmCSxHJEt${q;;TEp(nBm(Eu7>~j<r<7<5Uw5(tZ`OnD
zN9P|D{8L0w4(OYk5(4`6Ho7Lp5&|#bpHFp|EHcp7HZ~kHZrp2Q$KpfU&6&Y`j!kPB
z80HFNL~u#Tun2xp`){29`FVGb at +lFKdU6YW1QtEt^z$+TMDgp2YNfNeY8F2MjY at Ih
zKfgYpt08nnheKDLbweRph7iCDa;?Zgd8)NA{7(+D&x$7n!2ApaS;d9o0)c!ZZU at WP
zl`H`A=?KIBs37!@VVIw7Qlw{9p6!er$C=X;wk^8z*++Li|M<?QA0ht1|JBEj&fb4x
z%fOL}_Lhvof|B)1s)zQ~T^VS+e!TPAaq!RZTkDAfv-<b+o;bAZ#Nl;kk8Qtr`rys0
zcfa`Lzs0{Qdtm;lrXU~XuRGaLgZQ7I)OsrZ&7%ShlfoG-Kzn0LQh~}~XGbNp9KEBL
zYfHNjuNcf{T|1znT>wuSJ-o{6;BppJpLtaTXYT9$xDCk8g11kgJk{PMwlhuzFY+bc
zAf?%jL;M`F17eB1On#9Rvu`=&1B#R}QPKg$IKvV&0*rIwn05g6;NOORdS;w;N~CFo
zKm0$<$`t*k%@nSajjp3LMkpa5g at 8Kk^NQy`0)9dMsO(W at 9)t at 19{h^(Q9OSEzj~td
zzhH9FGZBF>Kg&AMhnWY(2-2k^hP+|^f%hPITr(4#Q=%yiXb143k-L)^J`@MgzAAxq
zbQp at GQ>LbXSNNYmpg^F|Ffx=9*vLTJ)abP_W5!LLOg9Srv#5yCmg(nrrVecd-jILZ
z-F_CxPdl>%+Cjl`?<kqm&TP-TxQE62V|OoQ@{N`aQGg<HT{njom`^+APaR$aTm=8a
z_M{l=`a<{GLi_9l$AT2*qD``5E#pGS0 at le9xS;xx{)|Qw5o7_;KcT)Dp$6f8!~#bq
zLQz5V0t_Slo$`_`3zDsw0-9azy=Ly+&pu+^dH(F?dm{c3KSOtKuh_k#qHShoaZ%CY
z`JJ~<)n7hZcjjQ%ozsn{4t8BW)^@tD_x!+;a{~*9j$naqIeVh-)>Ry&U&jAbG{5<<
z=AXz&fRSd3G7mFePY3*Cn7lS_+yosh121QWop2OsIpM&2HkaZ85dy;eT%w)5z#F(`
zUfPS)Ng3M0)#e1j1OMl}fg^Xa=-pGe5Y$<D_Xb!va?+rA`xqlwjQBFO!i+AHDjexr
z(u)`8dCxMJ)g7k!iQ}eBQpD0~;)owk;-KQ7nidBY-><WVyg=Ja2Bee1u|TN^Xqlml
z%ovt-ww+>PNKvonY^&#LujgW?gBN71uX;f;>N(o*1 at ps#|7Gz1oaP^8{t?WNf}e6g
z%3dZM0=z*rCkPnW-qg=SWRIgQ;J1hha*U6#^z#7oRKA#^(hIgQ1N>$oz9zmNMy^1`
zkL*BRKoL<9=qdb92>cZPdb(l(8EB?aQkxn{3K%~g%A$fJ8ydui;LKxIU}FMut|yDS
zfNKl#;S+QbrW^?Z at z1@3zK8;n1!XUU at 4T#)`5*AlU9g)|h4Tac$;f;O|I?gays{C1
zD4_GpAT;Fw|2f0NFrp8^V;LK4m=MZnDE>d^(;TcAjbj{6&(94<i0L56AN`~8_pnI_
zrwVW_PWP at arUjO~cg4LgKYjD7&+dNm{Pz3ee_np)?SUItdp52so7n{Zi|4eq^zWQ~
z?r`Ikf%>8S-8WA)4eseVKd|V+VCTt0J;x6%J$`uI(7^61=g&WR^vn3C&nx&>JRkTU
z5jz>@hssw+Yl6<Sv6CmgHg4>gabwLQ{4r8!GZ6wT at Q?kD6~hIjdL?P9MD4z<n^*v)
zKF8Mk(@$Z$$Bq3!-Jh=dnXP1AI*<6z<)2*-x!Z>$0qhw{Df{GV<cH_z(a?@z?j7=H
z1ef%I&kW}<Z8DKT1-evY$A;8T_s&TXnY4Z`bq9HeD8MFiTG2)@QuHyf$`lYYLd-wl
z3pwN`^Dl?|2?37!h);?FHwVr^EJo0<?K#5jBluT2UoChQ{G)t+(&zd)<clKG=$N at W
z0c^G4)i*U^=0}WB4`<T=FMLk(hyeGz6wjh`+#XX`Cy<ZfFJlt)$gC~Q!+=UC;CD=n
z^eoQ66hizHL<ZynWeQ>#{}jBV5(xc|1!N!vwU(j&gsD^16kzD%D&rrRFfoCcHf&vy
zKKp|D;KeNn%b1;u=<re+kXz9|*re3RfS*{v^MvH79dPHszw7#W<O1d&nEpcfGYAya
z+YAS?5r$jC at Pi3$_q+rqLaBvm1b~0+Ae?`O$H)tmz>LF5QNYd at 4@YD_$kzmWbCi=n
zPo{tjLVaC|(%hzJ(gk*GDPsig!Pj5h|K^K(pM8Ai+54n`%a7hZbm{!uRm)488#4<F
zrgzQmINOKvsXueD;naZzmj+u-AL>5akN%lAxPRHHex^V-oEqGH>FnvZ-~0vq)91zT
z5!r8SAcl{D?i4CSU2PHnT2rO?Wh#E`SeBTI(Lvf?&KO*#1u};Q<w6~}H+VQ)LuRFr
z at em8Kpt@>^8IVk4otl?M49&-2WolPK;FGJ&qOjM4SYQ^B6u?j}uhX5$e`5gW0SSuB
zg!rVxZknH@<z_!wqdR8I7`LJfmQQ}VZ(&A2d7f8JG8Ko@@>WzC5kbDDmBwtgj0xdO
zSLeDn6p;%|LVdJs%(bk|s0fVwJ at 9g+D7G{ihv%=(`77`q_I$_!qIMLYU$y#Q0sjk~
zGs5{wA)uB6$`L*nt259Cw+9&mu$c(L&oK at 3#`<RZ(Iq1u*$=jP8`=ihLsFpN1^@8B
zRdSTlCiW%-91<b`KNgUIqpjKk{t5oY|IyOYHq_TPG14(M)HOBcmm0 at id+jx90Yo5$
zF!%?e^sQ9im=FkGGZ*sb#!>A8eujL~PHp3y`-p>q+ev@`exd{0hx%8>o at dWs3PKve
z^Qr+q^8jpw!G**81QO7`MP)X%F!;Ah45t?c^P2{HGY-KkY6;AzxImCU`k!-M6orqQ
z9<O*g+o#7c2w at x-LJFV-;JLj0!FOM=-u&WI+P=5me at gMY_w-Qvl0~JB^;t!QnWe=o
zecRgxcF#S3r0M+Od8hlpf6s-1Sp$370?;+Ef6>tct4{Q9yLkHe{n!5y{-;`)sI4yW
zPr-}$nPR9JCVytbz<}0NGO6Hy%oqTJ$AXc95z1Tv;74^(1>^s??_4;n&-bqY|DavQ
zNG|PSe;+MK&ShKETLaQ?e0mna56HtF9cQDTOlLh9sQCOkIf9Nn at 1!UL{M->}hn^av
zwqDJpdico+VdExF1plM}kFs2kiah7+B!`4Z at 7xsMqD-Q|BQ4%NEl&Dzi<_CsW^<X~
zzlus(PG}8a2T=%XJRD6zd`xg5n3|>*0Is9rM?C+R+<s-wL2>(4*+0_cg7#lX{huOV
z<$tPOY)l#Q3G}AO6^9cs at 9S<69gOlp7qRSPLhNHg!9Q<<?X8oetm4Btv5X6I%S{IV
z4307aVd|!o15~&M`l<x_3I0|6uWe*NjA+SwOtegmqzWGSU?u?p$-=aZ+_XSx=FW}U
z+^x*EZ6(jDutygGc*W4@#_fUGkW9n~lU*bZF+91p3mZuUL;=|ZsQY%z2<&NMFc|ZP
z5I_qN0wi3-KXai*N#RTZ5ewWqF at Hk5wLKge1fm2W3s4kjn6wP`W+<9MfG!w?04@*~
zkV8{R?D_={fB5F%_uoAD>T||^NC6k#zQ1j-zqzMN#eYsiP35k2HAi=LUO6`ROkeYv
zL-SAdwVgPy=;Gkq!Tk%4>|K7WZ{4YZZD&s&zI)>z;eWDBxEUZ6Rq&&HrWontd8*D2
z<gbW-A^+FLyf)cL18hvgeDTs5wq$=I${)i=ghy9BZCsjGSe;Dd0(&;Ms-6${S38dg
z8__~H4}f`~&cLB;^m}-$=-tyIgxJw}{Q%=z+z$GW7;*eS at K0|As?l<HV3P&NpJb#z
zW-R|d)+IC1IWxhvAl*49*(oEQ<(?YnniS=kndq67<QyBu4jLJOD at mg$U at HM9v<4u5
z%3*vV+);iPeGey`F7S`clWKPq{|fo5Lq3B4QSw)O{$Z0-6+bU=zKVSHh+;vsvxM{g
zJdizRf!?SZ+w26Ck8OA$bD_fm$<x))*`ADGm!INLmSvlr=$e)2o}cQN6v+?~RWO(r
z+E=<@ua*GA`iJH(&L{c at 3kdPAWo$Uj$N>H)1Zdn41Y;+R*JJ!LDIB?uszI+RW1OAn
zAIaK%t6_Mg4j at O^P}l-~5k-e&&lkBs27bC4;CWP&?9 at OA&8=bt8mMCd;RvCEoJ-Sj
z{;`AT|HAzCIf-^z at xWd`Du7J^KpnPcC<qlq at oN<yCYu6+z37FpL5ArF(g7AI6A^}?
zzQ$Ay`N<JW+aLe-hj)MT{iAQcdhppNuRniA=WG3;{Y_n+#SOJt#YF|PW>z2BUOTvZ
z_Q?bD&K+q!xxedNf7`Kr3r`=JcjC};c0ryxy5eO2hM~a&S1<f5{_%Vue;IO6LO{T8
zEZd+cdnclQl)Nt&P!T`U0;5c at GzCIbRp@^-27N}r at 3g#49r#C$vo%8upChX&ekoC@
zr>JwWcO(%EZNlN1{``{c+W6!uvsgushKiq at Wk9RotrOU!fS=sqwSO5N1>mRKPKm*U
zp<7ihq6<nHuRV=<JT(Ql6{Nf7rFxX*xR+)*#7E#Xk`A16Q|uEWZKFc$;=)-TjV0_C
zU~*431<2mvSoE8Lw=>8`%Mk*G>>#$aQ1Guc at x_p*B7R1O+>{Bo7foIj{2WF3jDla8
z5q&WQq|vePa>K3>*>8&McQIq;2UQ;zhUWJw$#hDN#?J)*^mz#l6J;kX$agHyw#`YT
zDBulLzI>H^!4$&MB(gL|{IgkrQu;*+JnDjK^iV;FA0&{Lv4M`6F}0E^fz%{`texg!
zOCjJ=kxfaZb`ODW$g*}BEMZ$K!&IGh3|xh;>!c_UDJw0QB~TFC9>G6vz=cLNIV`AS
z@)_i_Y}f|dP=xtI*~=^hL&9{yNCY&(sD;@PfbC<P7KIQ3`4()Ai3-$mmF)l`e!N}C
z0>~lu#p{RoFbl!H0OR;jy1*VY@&Y at m-uwM;p8ob%kAL{?(br$z`{en#2ltlm+FsW=
zr>L$bySON)y0T)+%BnpZ>QC$g|D9(Jx188d{o8(I*Wxq%%T6Ed9XPo5)WC*gM|Pe(
z_V at Uo!fe0N=SB8UH8v2>$4GyIMz%*G2~_1jj(U?V;e!7$EL{g{s$<?pIZ5LW at x#J?
zl$xls8q*%dj at r+;eVEA;%BZYs`;j_~+A at U*^CN+%c|kryR>T5Hfh at r5%-rG*5gMdp
zS}<M*mO(fe&L~wF2E&04y9^TsdrzTzr9Dl>KPkYgs=%W(+c_=HDK*wPE0N`tm1v(B
zX&Vs)_#HD7?31G0Y73Z)kSU<#aE|Pkp&e{YFD5>e9x)AK9MK8nJ7)Y|;9r!#LjEJ0
z-zj^6I&QEs+aust^$#zOB40gGBSK#n{SR*G0$}x1 at S=I>b20Gg5F3W(cS?+;BTRK5
z86hjdCL at l}K>yIcc1n&y4$%d0hzoN{ieglr at 3k*Zx6Mr=QtV?x`F4ilkU%;Zo=W`-
z@)>@h|10JyAz)@a&DfBjhW1Ak&}-wTOrGXsGnJ<?__;ZirZYy1dVyFtf!Mj!EaZ(t
zm$-S1lA?TIe$XDo_EjZbLRZe_QyRg%Uv>gE7TM0KpcaOpO!E>kfB1o3Gs~EN0PSio
z4B5}*13Mx~0eU>6z~9|0+|PtTpg>O at Z)fvxKP^XV`T|&>w8Nww9N}-pO at W%yqMhed
zfB2^#Km6nGKKSvsPk;UWgD*bC{O{eev2O0{;`&<fU)WUFw0py>V|yD;?yo<xW5I=^
zGY9tcoRj&tg~t!h at 83%cc<t$dRfqR)9yoIB_D>}ch7W5*_G^&+;(0>*+-2=)3i*rk
zBjSIYh<_gIp=D(%T_j_Djhj7#a5!MJy<ifi!Qlr~C514CCoKTQ4%&&;gW93yMGLW?
zf=~1BALAU6j}`*|j9T%84YC8hNYuVKNC%cPVaS!I&xN*R)QTr;aBcCB^>J)G9Muw7
z1d#F(P at 2PX$x3u9$#gA9vx^D={7xAOPT7eh0-J~+oA5x6jK;|nT$nHZ6<a1L1R#G>
z07WrH4Z2Rn|3p0<Q9(-8^RoCECUye_|JYEY<o^%APjr}gxtcP`#xcOlDj^(@yJp4{
z6c9Muz6b>Ne3=FL*rdfcRpmR^71<Z0S|vro`5>IafpG`|gt)LtW1KJAsVdL8q1Yue
z-ZmnT!r9!*l at vgOSZmY*qWNo}(V=l>sIQBaXJR;>{KbqD+%@vS)su&2__$c7M7h`G
zdp4HHW{UbEiemgsRE_j`m$l+^(&}Q)hdLL8V{*d$Fp at faMVL_b((|POWY6XfZ0CkT
zDr<^g$ltrA%(XH{ls`pxcD&3&Cx&B$lDnl55bi5m0Q}t1MT~|r9nBQbG+PVW#PkAa
z0jP~&$Ls`;%3QmeeCC!}pZwb&pa0=^?|%FBnR|D;H>|CmGpne!I=iG8{I?v~+S<2$
z*1(>o6Z<+(9TNRBu&4Lj(Rs%XEIHA)<jB6oeS4Sh+qLOv-<}i4UrqtcIf(2r)~D6Q
zmT)LtA%9`B7xf^OFB+20 at 3?X5Gi?Y8{1eP`@WXyjNPrd?7la%dxkZYploOk<l$D`~
zWwdu8c6c5SlXO5o3!NWyW1lL7vacN=J1}QXwTtaW1)XtW7qSQNlYAL6v8>7oS=Ppp
ztH;fv{?&7`74>Lk2LG!@C=n1+RTNxR7(AoUH$PoX1dd73)B+R*cCld)tX)i)qmmS4
zW-mRODNu?R_5$!L!2cA&8h1x at 9U+h8BL#3A#s6^St9qU)`2&8#UnGB}G$ufxeHHx3
z9-Gt{@A6z^k3(Fz?1=PoWwwpivBa%YqMa&pUFwTrcv at f(KJdo#LHVG9C<h!Xa)=8;
zz`iIABM9-sjsPQ1mlqO9Ndc4q(lw?9Y;34wVyK0cK@>w at FX4Z@juvX1Ws?@I!XDyM
z`<PBkT4V%~9T^PeE^MT?i^8XI49U}B=bT=EZ1-5-iFWdAEar~T^F<d0FK$Ku&;=s|
z7y-fv#s73FN`tkKJqEEsk_$4TnT12}&<;lVuqljkfJDFv<8TzelmG}kLr-V;Uv|n6
z7xAIqbwywQKmSu*U;g|5`0)3?J$3iaywxjb%xWvFo&o;z>Z&U?ENj`fdG4u04M%r1
zAKSa&^x;`24|Wai?;Pq|I&`G_(C!sS4=&reZPkwL+xicW;vd6PJRcJShTK%cN1bz{
z=4Ie#nEYW6CS-URj^JN;ywhv))Ti-Nr$Cs at 7~`wER^>4Z<X&IIHG#2F`{*ATU^}{=
zMgW`X0x!!jIn6JIZ^1dQcpY5fv1f7C)qVJ)fo!!txl!Ifuz?0K-^E4dE)YJ<lf(RQ
z4qLYz@{^zxQm3Jp3mKddU(r8&3}=9`K^6JlnMna9+5W{@K6z<m0q{>Eu!{+GNRD<$
zjp1k;6KWOY%iaP0<x?E3cpM7b!B9agaX~Fi<hRz*V$u&S^mn$WV*5b;3iyAC{71k)
z!H}VS8|EL(L;Nr^Q8H4}<|d=+LB8yEPl~k5O+xSkY}?FuDqpvpB$~wzv7w&DnE?%@
zeziporI{{Gr7n#nqz~qZ at QaucQpe$5Z3Kw;Ve(Vb0a0LPLKc`x6O-MY4E4R_0+9!%
z*jZ at 85M3dt6lfo{kC-8ML-n#vNilY~@&bDnPhn~<!S=!VbW+M*lt1rB`r^o8N^svr
z3$>I<7fc#q8CXm-fBE6;3uafEg)#-l?s$wKMxfC`L?0w3+hHR7jo2FRVyEwFZxZOG
z?QBa4j2+6p80MleLj79HfBTm|E9)=6{p)}H at YlZ#y?%T4iltQ at ZACRzIVHtKvs-6u
zUsKz+ZSK&)j{e;(LkDLb*|qTeK*!*|-s6YZ0<dDJf9at;i??oCv2E+d{rmQwI;n<$
z>iJAF74XCVC?C0}dfE&;NW)7Rc%XYOvoRCKi-rVi6DPopY8IGmqz{U)yu4bbQ%o^x
zNcoRABm`tX<Mv+K<y6548+yTH0Wt!iA+FB8rN|q`ZfOM53-H{tm at iQ#@FFG>QVQ^+
zf~dk6DdCRzv{x7=hEi2QBho;O2;g51|4-1<c^UuQ;=t0Jpz^$s+7d#*GcDdbC)q1A
z(Je9BDLtNwz%DwJL|_ZLQezm{hW(g-U{kZk)!u-O*iN?KU+R4w2?1q^>#LN#BMq-n
z^8ZK5U#f$V0)gvkq>+7&2 at xW15+kjHeChBq=K#VHFc7<aL5d4{rlDA5PeKH?C(O^6
z at I1ZCb0WH%BNw$g*B3ig7dY1x+GNHvN=LEGSCK}90ONB;9?l~vKwHcoieCeL760fT
zN?`QQI9hvj0mh6OQ9w9BV|We#eSCSQL1_jz4lr}I(eU6LwFBmPs+(GNQRKq>fFIb4
z`OjmZnEa&RZ7P=iFE~Q;YSBUzzho1{0D~4}0i$Gb{?S4J1D!+9ms)^aKnBP5g!Z8_
z4MNn%#mL8%S^zet5FiS8Mv%UXy{?B7rVxq1JS*;B|N8&_+h6|r=l}XY|M6e{=g)un
z&*Qgl%v!prqOGN<dItC}Xla<SWo7lwb#;ffQvA+4exU8-fvyt==L{WU{%8Kc{-uKl
z7au*aXv at ZBTQ;rPwPVXsDTIL#LvFNs1^hI;APQ<az|XX&W_a3%vR9-ddjmO+9}nz_
z0-9n>AgC$8$j_a5Kc?;x6$Ao#5XC~fgkCUL3@=FC{{ooR#yScIsZThdi0F$^<nkqU
z2heSV|H-+S4A4G-V?VzJ*mEPWCiqXVtCZV>aOELOR*7MlKlrqGP^2N at f5KDw7&mU5
zS9zX)VJ3;duOI_0<X4o*(LE{JEg{N1HP(%j<Y<qK1h?cE=IGcLz{B6BI$3MmS!mms
zGa59U_{ajvdPVsNwqL4zRomxf<^Ol!=dlvV8#KQ|Nrq=(I<Th^jHF=}2+yCISMc9h
z;@UhNl2>IvrYP+&j=og|;NN3T4Y~;ZZ(o?odq^MD#r_SYA+u|!f8|?h3k at 7>2mwP|
zEBt>cged{k762XvF{m|-nimNK{`nXU0rqiBu`%bjCik&dju8=QT`{`JSUXSTqnXQ7
zt&p89rC^@HAxCCQ=2QWDdFDf1KH!%|01r2qQ$-43uL0Q^{G+2l0&Pl^KSMGYp|pdk
zd>MXYQw)2-ct9fLkNI!t?Mgcs^OFa}@u?oui98_4&z*44a<tKRvZWVb4{ziqDSOuc
z_P77<Z-4v0vU|7x+U1r-Jr%7p3uaX0l$I1W)Yh$EHgop|#7|@Y&iSVfwGQq@|8yTa
zF#puy#m5eIp??MrQZg^uxMAgvZR-x~l_58CV}<!OGTyI(U!yZwUvDz|Tqyk%@>ger
z0Y3yXEPnpwUsPR$s{jHSAutW2UlYmTF|(k6KW^`GpiVE0_N&{LE-0Oaq)~Pu?eRUa
z(VLwVyB9HbBBP#tYjF4(FXs(BOb^YE+kgd)|DY5UEnH;LSCu*N5(U&WXItqlMh6kR
z(yG9%(&&KyQ3*r}7&m^rM?tz<PD-GX2z+u<Jd$I)vXVU06Wmi`nU|n1;1V0|93ASK
z7!|y%o#q!$gdpX~buiYKVLzUTqBV6G|A=Ru7oI2eEGbg5q}V=6!)p}(uYg}3B?0)E
zEW+(a<e>R6JcZlC{D}hQ+^{!^3%UUI3_p}++T|s?q{X>qC!u-5yP8<RZ8Mx}i=3+S
zQAY$3rV!PEygsWcYH?fA_QmcURn}=Slm<5GvEZLtnCGPk{&_wGC4i9u<S&AjyE%$~
z9E_0<+1BT5qit=bV{5 at pBpdSF27PR?jA&%1Regb?`HN}wN~>#eGqnJ*K#njkO{0y%
zt>HFN_A>mBHHYkRtIiV|Y%OOm3@#{U1yO(yBCHIQ?eNqBBm(>&`42_-8}Q^4x?S<1
z=zkuNf~|r75ArDx7*Jsxh+5bz*xQsxNwigrigr%+o*8QC?XDF3SAze_g`F*XH+3A{
z&1yKft##;N=dt}Ar}`G2?34M2vjg3Idlv88xn%eDMeEls- at bL_?wyL^sg}J8__<kt
zpJ^Z2<fV<fE=eEd1M^RuFpkaON)KI?JsioNTv(7}9vw&*OerCQkU)Tz?g=(Bn*!(s
zK<vPq%`ehGJh+naW?rGTVjCAVGD3*<E^na2!gtY6VYZ4<Lwp8^1&0ku346GdXOo)g
zCz|qjp8yZ>kbPXy|5%_5w*XYSU|@Bm2#^Tynx5lXoaIrR<(ie`lbcE|AO!@J<q`!h
zF=6h>F&^m&Zi!LgpEfbvMHI_+0BT-69q=!k9nj252q+CNwc9J?FR)kFPssmgz%LJ%
zV at W?NBG6HUO(acTw2d>x2$H_B#6 at v?sC-$jSqU!baWH at A?Ao}s^I4&D>v$W9gMt@?
z6ED$AXQl345x;&x=)Ah9CGBprW>_Ug;HHutjO?Wspl at fb;GZE;V{J at PW9ffQ;)YJ0
zED~s(RB$8ke~sp*<Wo;)9eXQde-A857 at HX(QUJ`4l`RkXRE$md9~X{KY4rkrNf0tk
zJstc5egc6sA<3dTm%QLfsY110n8J~CK-Ut^*RTaCJzAXzg6cKlzOom_&rMpu%zyg2
zQTa}_GGhb?J7}7{m4T}Rb`XzAk$v&;Vb;?#UdI2{fg?@b3mASYsI15>Eh(AbQMF}N
z&CYeRkM6<znc2S!^S}GV!MUgU&_7+r4lW%$)U$6#&-%5!>((sUyb<!J;1$nDrBKDk
zL-R~F(BKRJevT*~RWx!0{}jIhex>qNqhON09z_i`DZD`xFl_9^p3UazY(kVaYh||W
zta5qU$&#7!U at Lr~&0Po^+03|h4zuMM7iGK(or6XqYea98*($!oPDZGnL_iCY(h2-S
zDQHN!DYV6T;4O-gN7C^aNmo0`O5lFnIBJ1W{7V3g8|R*t<d&7>QItUlc$8!XRTg-2
zk`n8Y8pk3Fc;}|NCPX<!g%Abw1=trRf?s<Y;FlD at MF9U4!g>nHgZ7^+0M8n=`jxLr
zYT#lD^ACfcE3DSDQtgHZ5(wZQk?&ZR?bcf1)>7^`JquIFIyHs_;X5PWzrF<6M=$FD
z>Mji>XdcJ%9C+SqVY63vQ^JPsl-<i?SI^_k2qcsb(ZS|HEF<rVT%1xK)+Fr!1AX{k
zasm1l{BuuL{9|I^0=+DOObj6tMqznGCxdFZ_q401TOoM`|CLe#OM9ybmXPOF^8AfD
z9`%qzw+rM;nZVO2dBRL-nq^fk11h|quQK*PkDe4jb&M`z7XWvS%2(}(QFPP%l3kGg
z?zq|10_=r>^R?(o*qC!dAn<fho({n at GDAUB!8F2N#{b#_dm9&Y3jQm~bElUUwlr3(
z?5)|cu89$#!MzI at exUL_KQOz0&$0{07Y`onKC*Agf!$qeR`sk|O}9(&d>HRnn4fzM
z?JEn<AK4=zfB;|^Op*QQMzwST_TWtgzno8=1R=B2&^}L|Nrglw at j=~`KcqsQ*v8YL
z<w>4B4Ir747Gc9qQl6pB-Yz=ANk`X#d~z$ApSev!L!DdWBBT5v9K1DnhQvx%#XW|a
zFj~o^S}wM1%;&l>1vgP!OOdo==wG~qe<cFOkN2*~^D52uEX_s>v0O3}9228la*~;p
z^UO#f5l{;d3ls$&>G8Axn0yw^qpJn}$pwOcT`g$g1?`W9fC~Q6Bd?Ek1h}4x@|gm+
zC=1zxjY-YR-Yyv4Eh`Z+2iQ3IEaCQyIIq$yQ8i22fj#&SYN>FpDR7#RM;F+&xy+B=
z)9$5d`&aW-DuS at i2H)xe@`d~C>VT~aJ-ZrQTguZ8tPX6cpv8bA%65ASVR?3()W3$p
z|BC)m2O(a at Ke+(Or)6nEB_+8vgXcEHs!dy|g&FKY$&_dD*d?B-Aye)xW!zuPQv4!n
zJuxVF>{4DLPd<VCrEuoKuvNLpenu=9gn<9KeLOP_ at 0yz^xtqs9#D&0_;2a;1LV!dt
zm04VOM{*F%PYFOF0QqwPb!{y4gT0stB?Y{U|K+=OG%lD|-rT6-zj|qR%kGVJ`!?6_
z+uVF)XZN}O*8bhIA^)MnoyQI?KR4L5f5);T`{%D%*1dX_vaw6KH8{gO`cehIp$6~^
z^9%VaJuk&EfcamL|0wj86DS4ufclX=<_vfc=3Eon;#gsnNNj{b<UsEnnIS;}QQq<t
z2-zLEX0|#~OZLQSQwK{(uar?@BQI&ClSn>A^Gi#;xkS~a at Dh3w83{#bT<oc#IH7)_
z3?T$2YE64l0w@`Q6c9S2Fr>1;6@=%dx>FG_BT<s&mY?cOQ!F_KDZ<E{OKu9yV%x}I
z_?bszsmgy6mqi)*Lke;}jBQQ?|9>~+_A>ZY=BI}Ow<zG}NR?_I9SrjWeo9(M8%gg_
zoUYoQc%JV0QtIOKByL`qu(3O=vz|miUO*su%&YZT+7_^-CurA_lwHdJKSe?8%DJFD
z9l&qvjXJ+8{KRJ0rs<(`YRL=i8j~lg>FZ;J;(yZrr39Ev3Y$6wtqA^A6K_-ksVC#7
zOoG{XvJD}i9}@&u%ZyNB7;+sMgT=>wE=lf<#cZVn^D+X#L;SjV`1uS{Grj~dB8sSG
zIw`=SGD{vf!)^<<Ko(2O5_;rui1KLk)JT#2lo+XzvK at ejKZHpwtnKbNje-{!j>qJB
zIZrawpnS- at Vv6#}L^cH{g};pdMO!y9{4l+#0sQApFRfkCJ9FpywtbuD9NjbX=<Wq4
z52 at zolJkR|#}0I#IJ9)&VE4|g3s$Y9Y*fo$8FG_8uYnZ2P!?3CAYXiMQUK`^<SS*b
zdc|JFKKg$wkBTLAqWrOQEn<S5%d({T%cEfC)=(w!AYAq>vgifNc4>A8?_DP2QamZB
zs}6e~%_AMgb#u@~d>7eP9dctFm-K<`A)62gTtHM7yaE2%J<8QX_8=N at 3HUej#}p=;
z8$;A%*_H4j0f-_}KY~khLn;eHDhk4COFfD*UGYNmQeE&ulcE_Jk_JI4k6DPYj}2pS
z>s8r9O|5Dnr5uoIS5%FPf0gse4(iFM9Xd?=QuC_dA3YLibbIk#Y3btRxbZB<)(TV&
zRV~G at cUg{KO%bRD|7iZ$m2<#9jbI!hpXIXxw=ZIG;@vw_ih?zr at oVR2_HQVCePH_C
zLGbUhY*xUgZqNDkG!#NQYDgT)eo5JMBV91|vBGcQpIkO=>bMEw<NbvH2?13UVR5sq
zTgTUxMQ4zU3~4j55BMn!z(3+g1wTgufxQ^g|E({g1;&y4#Vh0pZW(1SejORatS|-I
z$N6CoCWJ;bQSHKA=vXp1DL{D~gfE=WlhUbzsl+k=(I=CQ4bZext<9JV<x1+=Sz6>I
zjD|qZ#`X21_%EAYI<LKQ_2Q1hJ3EIC%{{t@$<J<VpNq%l4(wZT=|tDjeanvZ_3qkA
zs~7Nte6f81zmdKwdzf=jW&b2dPXWK+AN_;vuMRxFB>UAspi_)shA<h$VG52Too)sp
zNOlAQ0A at F$Jj`kiPj8c;V3#OM-5^OiAQqUd1 at K56B$I3+X7AXFcFJdd0<wo$6uy!C
z3uBO6 at DO;60D-_oqkE2k)Uh$ggVng$p%Ureac5t}|40aoA0JYlA6i`;Sd#6RlS*sM
zJwJ^}A@`yTCM8_5lbzDy?4v{J6uac7F*U~{(1D7&2mz^y0QP9N3(UXb_KZwH{A2Lr
zV at NZX(fzn^Tp*Rzv2oDt;GZMBjjD-RJ{w~P0Ecu`yUr{_ at cS%j3);CP<lw5nZ3{g+
z>qBSPByQ at -JH4~`#$g_YP;hZy{<+<OTNiruG$W1T?jDW4yf=B<V*Wx(*5GDrRU(cQ
zps_T=(3ng|16`-^Kb$7`e_?`327v$3NO*l*NyZDw0 at _RlGOn*Y!xMT3{H`-{a5ZuJ
z{h0P|E at fUqMkX4V^O=rKO(LKR%v}TIycy*W_{j*w0(TJ08u==7p#>>~5<ix^$$y1~
z5hU9o?XA#4l*0gC9*t#h#c(glSF!-DYG*qwdn;U^QT)$eySiph$MlAJ;s3Jf70Y{S
zwymk(yQyLSmIY at Hw+-&?VEFmm0L@>_pOxp2b?@J~V(^eU<fDLJk0=2AGU3BLCCe-A
zej4Q<pC#Ks)PWzS-IQ|aC;Sgl at P{YRcx;4casXta@#LvHJa_~RnG=tDEVe+kGF7#p
zo&g~;0)Tg3IZMXKH+8`wyn(@K at K1q2F2G4+(-8R-&94#*s#1nYYVtX1dpf}ta_QoN
zDTHx8!6z9LBMZ8q#rX>UM<ftgz^5eJyC^fXsz?$+WkGmjIZ@!3m*!uTi8V?TxaOz1
zWG4{_PCRlaA#xb}$`pju!g!cU2#D=7ihoW<nSVs{3^TupA($Uo2J}kYvJ<__vi+(H
zsd>@!95FnF{4?XJb}4m}wk<~aM07RrX<&01hQHtHxzK*l&c!gi|GG}!<+GBu_U518
zQ~Br&ixad^_OZ=~pO|Y0BG2rIy?H3{?GurwwnZ&!%O2R2duj(0N9-5F0+syE5HELj
zv;+|RzY+i-jVA+4wlKz0Q!y#+s`yauDR)F2kmJ6H{>R&FET$ZQ&k;5>ynsD69dSVv
zsKcLv|MKByLC82nW-RF&`+`7#_Nj&0#6)$BY~Y at 9H;Dz6$8dpgLABlNnOOp*qyWUH
zq<BLO5kWg(6#t!TRx<p<@IUxx1fpU6@|oM$)$Ls0e0b-Ap+ntgj&z(nxcK}an}55{
z9$h}v&r{IB$;h08M!H?xQ|_R`{FC%_81*60P>E9Z0{$uDd=3+Za=Ctje;yu17Z0yY
zKU#*z>~j;Sk0=57-PvG;|AU at k92A736)Aq1Gk0FmCKKaJTZjb+9|IY!$nGJmA!(M)
z=9L_N0^i7Y!8x>J=$l|HfPblW-5q3rDkX~SNowZTnaTzhXIuWk^z0<RbHXNt(GMox
zRSh(Ld_Y5)Uu}tZNp{GL!hoX8fZ}YxPn$TjemWy_7^HrM8Q$5+sxKrzN*m`#ra-y=
zFYwQ`8YO>y`KtjhtR7-SSuevL<g3diE!MxT7*=OFR~KMu+83tL?e(e5L-xS at 5Ifoi
zZ67kL3h?`HSP;B#dGMZPzAI-Vd%!<gp!j-U>7Ap<o}w!U^3U!rx_Xf3Vb*?pE#a->
zF<1759a+oYhDiC~LdtvRVlM9sJ+LbB#O6oeef`e&-%K&opTdLtRQz*i*$%8)Kre*=
z5_g)THNp~Cnf5vlna9>6p(9sRVZ(qN{Lh0OaO7l+JTrzdPGfd8mS=LaxMj#8;)1Wj
z{~Wnx9I-_B351CmyY>o_Xa~cVbnvCDU?Xan*q+oH+*}C+4=2hx=8AbD#1x*+I$;9H
z=N8ZuW`u(~IY~!*6#ooARClzO*4Kjn{PMDzC0)&1*UUY(uldNXnTL1wUOKk$3{%kk
zOV1DXoEzvpb!52PWoE3lO<#bYK`+Q(_55k|QU|HzFWoL>(-2olxm-WNKX)Jdg#lXm
zdn>_SU=_y3`9!^dVN3wgHsTmpf^DP at 9bu|n>H;RI*eJ)Fsg<PR)!RgXpc}<NuE-MS
zzoXKuB$b+rbjcVMi)+YD;X-joXx1YXF$%B?aL;%=FU7Ag+oXy7QaHM!@CW>(RRA3^
z-?BVO1jSjt)kT;>VYMaU4P^{V5D32cX><nyEAr`=;ftaGQ47>TQ~{z7@$lga5&t9N
zM<xGPeNG{Nq5WaZ%Zbu^;)vT1=cDIc8%u@!3)2w)RIHJ`Es%fI;`WH{nc?#rBf6UT
z)Nk#)ko_w{53NSqcrR)J{~-rfmft_YqrZ!<9m*cug!rj`|5Ec0_Zz=@oe(I0^LYJd
zH(P%5R at 1j{R6o5?{p5Vj`<K$5o>RcD;NQq#ioPE5MtUVvr*KW=&MKUy7QgBd8)T}3
z^%PqRc!q8!%s(po0W+uu?ZgFDt$3u$<E_N=nURD4DSwoWC(N_Sx*!SZD;^QUpEGjt
z>rgw~K2X6T3jlT4o)d}!wg8aO$uh!bF18G#%1ooBDLI{TfP0E^n_{5Bu2k<M`x9*w
zBh(P+Shl!oR$FOZjqrbMb=BIXwcFRu?%O$UU~l`-q4vSOORk)pH`Ld4eqhy=A?gS%
z=D;!hWyr at 6oXDJmzAoYx*(2o7tnV}#as&K=f0U1m`YS1tqs%<Zz#AWu6sR;OO~B%#
zbuNE1&cc|UELV(_$088;O(6u(j<#W6jQnAjo<_1HThVa_ at N;nZd2W*YrI^LcT-75Z
z2^k*ULsB4<BALjQkOs^nc5zAs*N}@w8l{I0;X_m4-z3PJLO^WK@#BCiv__(rlhKcH
zBP9UbF at Aj9tlG$i^1$W_-x-BIWx1XOOe17?QV!&$h18UUH&q0d<tc%XCQ?~!f1w33
zufqRIw|7+hsLDr`JxYg*CYMyZD)>iWKZ<{>PUq@;T3xcG1=*7k=Twn{=1<zXC}~SC
z_$Lb>`+3Emrwi^~9=vy1;P&2tja`9TdP4iwAnYsOISca_UfKuk69^4o-f8^$_1foG
z8@{*=`0GBp#)HAz|L|`6kMCrBa&`6}AG1#i{J;CF at 80?08>&3;j|7rkFe?A6U9gw<
ze>4OLa~P7gEYG(=mV-=6E!-RK2zHP>K7#28Hg at 4})8Y|@pJ!E@$2oV(I6Vs8iybPm
zmd61Vr{Y)O-J$u31+c;J1M*ddBKTW8(E+;tZt}yiiFlTRgJd5FjWk3-r(<nCL022E
zh8su4s^Wj*)G0a^rYip17WY=Qx0KY?6joN0v^G_*UtY6mW#hihIR9NkeRIzC&pCcz
z<;}A^{B!NC^U9o$p$dL}JCG0l1^f(oa!=XN$EbsHafZRKY?l-K!>x+1qJm$=|JcbB
zsTa`y3=qo0qeveX#*_d&X@^*5Qx%s>{_4bZo&yjEX^3x3_N<aph$}<Ei`r+W04L-E
zzDlB0Ck#oTxXrSgJ};33f%3!|qaDv>ME`Sz)j|oD5d5=m!p8-pjN}MKP_1Kuj$(iK
z<kb`qSyLKTSs2w=5n5U3TUp>&U+P_v?^9LCybzsYafh;#aECl+6i7}~CSZs0KkEFb
zwvWtzzUXlM9QgGy)s-b#fY~<Ko|+f at Gvr{GlNiuAJ!Zumk^P%`Q0!qeyq3-a at Gw8h
zM-luTgh0fJ&8QmW4a{G7abLyTr&Pcb0yEw{+xokQv;Or-%da0ae|InK`6ZA)3*>+Q
zjVgOkKI%F6pK73y5&-{)M2S(rWf?D{jIv((kQpkdkByT2QA+mVdOGVlb954+%ir^g
z58=p-0Q at qG!UNB%a}lwCpNNp`z*aBnKIS6G2sL?V9`XfH=W+A`{@g?+|DiIJE%#S6
zkB6gZt&~V=4FeBH{)>ozT43~l!9SRXw<l_JM{lKw+4195{I at RZscdg4uC4<AjDR+*
zS=zpLGkacU_U%}B{^+8M$2!j)U3Tfj+B+9y!kNby8tY5htGNB(AFAa3l3#}VyvnGL
zfM4<axen^6vxI;|!7%xcMge_uMhB<4+E2DL#Ry_2k#3L|jR0jYIr})G$&YM`WMY{=
z(df}Ab8*yA%#&b#(%2HiXI3Rwi3<qH<MW`G&^!<Y7m6_9b($<VZ|u?IicxBD8AWh1
zrL0U0Dq7JF{m*YCdtqpV at vHrJ_#Z!hd~kDRTt{7OdreGRO+-UkIHqV`8p9IaGYY)Q
za=dGbSo8=`K9IkNf8l at mi!kE+!xgV6ADL~CHL84s`33e!reW|a8G$yg+RRe3098O_
zZ!110ArQ5w71<B?sb>-Sp at -K7?O5cyqQh^^yzs$|vDXhud3$Obng{SVeRmI$Q}gUH
ztLdA&Gk^5}*^}|<HISeA#m%-~zYX$P{Gr=-e)#qg>-%qr0v>@iMX^A!2yo00ieyaH
z)BXwm2?g-akpN*!2!Mo^QAF6GV&Ei4uyCOPJm4n;ROD0Pit?camYaavDM?{Q4(2C)
zG-0iRB#SZ$5bmRSRDkFN<r$&War{^r1X9`!uo>mBC?B*6Q9x&(F=MT16vE=!@*(IS
zH(~N5?g$~!+_RvfwYj85 at IQT4OYP=Wv-WM7b7WWB@%<e`hj{GgvMVQhuAEdKV+it9
zw;zy*=cy<ksTq}SuQ0!&c)2*j04$|TB2|*|F$(+96QV<eqK5-fz(W7CosdMv2n4^N
z%xc03JOq{By(%YQK?7C~E*V#hf)`(iF(Jj|k?|_j5nGB#n$Qb<WL}3-Xdogug%)Ci
zsg-O}qa_j0C=c@$|A)D8J4-GUyER!{I^^PH69cw`4Rgil|Gmur3VV#7Fd?w2IABI$
zL~UuTqKKl~s-xR$BAY8C8q0$#^4UZaR#&QmU%|hGz>Bumu;(+};r)B?gM4)jiyy(i
zA#Gecp5c(4i23g^yE<V*7qSN at KcZ(Qom}`I-xApa{)6`{MfL~nSR8(A6X0h>p56}r
zVS98AB1e$__1(4~AEiFK$jbQq2KaCP{X5xT+<f%CAYVBD2W2UV;PJ1&7sZQ<OQEOi
zf{~2?++wO=mH%H&0q~&=y-%9RRIvQfQuYTavcxbc4COCRJY$}-Fd5`CjwN0PE>Mv?
zSV^Az*+BX(V%rO7mnJeghh)K|5Dy$+1PH5;nIGkbvOC@;C6b;Ie;0{6tK;J;xq!W>
z{H1Ijxo>L$v!Q=T?o4is-b^(F)D!^z8Gb9SngRaHyXJ!bx~*&GGw^x(@a)rv=bbyc
z;@T;ha}XbC*zFhab9WTxS3OS}UVvX}J<I`$Utm98z%LY`jQY#8&)+%!Y81%*r9*8e
zQ2=!D=eZi>II<g6Fm3>54u5q^MK~mnp2s)9*e6ADj*Z6X2t5LtWk?+^6jzu+fIlP1
z)#Ilr10->@Q8>YfW|t^ekFjUkh>!*&i#W#Eo>MGMWmcA<eSSMbja(~!1^7+<_&fY_
z^-_Chg)~=&&Z-TXSsBza!@ss9vZ;bakBktAA{JV!hLt}mQCSN9ho>NZ;`zL!`G=AJ
z3i&HtVCMGGJnUX{EX#^s(w?+!5z0Si#cT at Rm}MO)JD1{Qh8$Q0^8MG&!}E+dxh3}c
z0b%~3t(?cd-k<#VOyXN7;%@aNKRJ{B`SrAqE~h=anEAyGXuso6Pcolh2K++)-+uLw
zqssh0e2e}E|Brw8R^%KN%_#oSw at l3bEdI5pfqbfdaL8rHb07tyQb^_8IJr%Uq4?Xt
zp8JAFL9XWnrAmsI=2ugR*gmBh*hdt<h$8ML4xY?HGx?AhCPpYfBq0>=(+Hy?pr&K;
zAI`_tV3Eynfv8n!Xv%JM>zBv6hO+>9yn*3|nN7p^pViv3b#3#Z?aVxPv)k+15aLH3
z-EU^Z&k@<9w7QgTmj>Er&j`T<_%S>uDx(g7UmfxpCV$cYV~4>nAuvk(FHR^A*)@Rv
zXa5wnj2L36kz(3R&%h<-I!I2;PlP4d7e)h%hj4NMc}y0sLlktx&^&lPTsqi;{h<&A
zK|yNZ;-Gej5p*N at 6wHfD7VZmCKo@98d?zju>2jLAC37Rt1t}8Kk}MCo5%MtD%lIGW
z4dH(gkbET0Zis8Cj-OQ*)L0(aSROK`KB%oKsJ+I&vD~k&)VH=oRX!^CIST%NI^LtE
z0L_Tc^Yh at B`5!YQ^baY(sWOjgx46~wm|;WwAbTPgwh#z8C%1(iT~Eym_)-4h0~-K8
z%pY}jhYJ3b_s{c3ZzT!<|HoI;o?p)R>^iic{?X-GKfc8L-+iSpKgvf+00IARzJDws
z at Ev*{@G~og{^t_GZ-D;={$DNv#*6{~z=m-kT40(8e+D7sk#Rh_Bqb6KN99t5k(xoi
zx-j!)3vhb{w~uNL at XNhpBBCslrS`nU at S!@$j0F-XDAbe~dg1bSF%(@CDBHd~of!UM
zu^pcIAO3kf;)z5sd at Dx?O=OUQ|BB{D at X!92`sKYH`?qx**w#9*XZE>%{^r-p+vj9s
z3mY3z2&hvkAZ5;hM>+t0^)coGenuVCh8MDs!Ux!+{1x$!@c9M&qm*QJPWhu4WC2~s
zIVwOe)Ej}P4vN4J{EiauS+VkWSZH~m3 at fu_OGQ-<`y&`8Bs8D`W}7j8$ftY>@q at f!
z2mvL at rQ<RZ2wZKr0vCwOh51PdfJJ~1!a5)|^9)J+ZP<)oL at Yi`GybXtiEQL at 0sa^G
zS1z4|z=R2Di#jq^bS8B+C(dh%Yp;!;+ZfO=J)o&PsJ)t_$bOP9<gZi#;9qh3X#^{4
zxZ(8z{4Z&Kl)qwuD#Jg3p9T1-f0^WoU#}>iwewZkPb~cZyuAf at TvxKLeeYxv$1%hV
zF<Z>c%#23Kl39{vvCPcO%#N92W at g4XPU6^MI}9^%CUed`_nv$6zqM9(t3{5TGw1JT
zJ?-6Ft+smaud2TKs at 7VGZ_nzoXBlcIZXf0!uxU1KKkWEAz#sI^qKMNQqOb45^GBZD
z1lvjY;7Ht^y*wv9K9Tg%v9h0UCqFzUghx4lqvsdRQ{289H@^Jr=2u^e*1`3mz61VM
z3Lxm02%u8n$`lAmP`(a6vr`-N?M9vsAd>^c4V;f|cjp+NhUaGx_f;Xd2f82X9~^))
zNT!G$I5(&c2<Nt<if}^-1mGWF2%%MjQYKmxYvgjHQGTR92mWu<iEa(?W=$J&b1OYm
z7Qju+8YKA77(A%o)NwhBXAWV)<Nhs_y at nsz&KjP8A5SQ1KevO at j6%L>p11;qd}5+5
zcuCGndq1>LbvuYS{K{X<z+aUD at ism4oq0pd7KHz^iUNxXP&Wshl&DAqWU*hW!z?w{
zH3o!JE+i;OVT)eb>?8nho1Mz`F)UP$<^%uHe3ENL`oQ&htB3Sl3DuAAWuYX_qpczP
zP$DPu#s71X%Y`8@)cn@^(gmc%Z7E)x9t!+5;9o4 at wV?9c;E at FZL-OJ$l*dmjj~QJQ
z$Md+7sL at 4L@NWP=u-Euk&jyBXNOdbEylA1?^K1N5 at Umx<%JGFTADlmFFC%K+n8bB6
z({?TvwR8Sx0soe{s6AoF*9Pxig7U*&w*vl)Td{(;d;6jK@%IlTJU9&Pf%7nuKUCl+
z;r;ZnqWzNd0{$CMz`XYSU)=io%UfSRkuDBJfw(xh2q>=bA2kdrkXZ<z?+esPO4zg!
zH at Bga75a94_Nw-Wf6D4@U=`1ghX?SaX at qG#q_-h46tshXz)v`!987fJ%{V|95%&?t
zNadG7IAAml at +1qU?Sa*SphL1Fl0|#=2o~j&e!QlQ$?~e;ALMgGUwxevrJnfzKD`Hw
zADOpe9;;oIY+D2JsURr9M^^G-K#ch!5Pk-kui`unuyG;(BK0fqlldAnf7Kk$3MZBP
ze<cdUCoo&K1#9-wr)u4)A#1q at x)UWEGJn?FNxmt&Ub5<Gv_CKwg-29PSsV}XQ+z&c
zoIMk86c9pkWb$J84`Bkyh?D#X;S{&evQ%<G6yfLcqJjc at QeBxS;c83wI9fry4sE1v
zLOZCMJ%n>J0pD<d!$&=kkZF7vDG&ybG`>7}%COiG1tDXL1BT>c2!6%=14iUy1qS@%
zE|mXQoFAP><6o71n at cifHdM7s>;IL(U$0FIluxG-xioe%Z$)|j!32WjjdN&YNZ-8_
zkssRQw{}{{!IgOakbTRbJ&Nk@!Se(D*ju~f9~>4Fcz6uLU;OR0(w}anJU(gQ{G`43
zf5rKsJ+K|Xe at o$?XTX0O|BvFQOTgeCFCi(CRDng at t`-9L5&U20hIkbTvbLSL*Q5h1
zABq;OZ?UWwlqWY-@`40odjtEd#YmGsDv<O=ca28G!yn at LWi5yv@%T5QIi3w$;3erW
znm>b54in*VZY15 at Wz;ABFrgXnA68v3zprSwb?PvP_%uk=Z`rJ9=^UK@(2Xk^wr#~g
z3DJw02>9_-G&b<{MewK2MYUJ;_6zu>+AD5fKU3I}IxpgvK^CrT0u{_3!$f{zsRYC^
z)<0qLPSY?SwH<~N3#$r->30>aK;}@uc7Qitf)tqK7huDANRfz`k{M+tfNib at 7Y$W`
z^F&N^W6~}vFI;ChCn*x{f~FKwVB&9U7VUAiK`zGa)BlWa(A3Tn_DIl_;Lg`Ee^mGX
z*ukr>3I$RuC}!Tc$Y~?G%%6}pcU=0yiAmE(B+VEZFf^}jb7UVyeqjE150Ec9C-_&r
zpsFZr%yW%|M at c<ZJU`%P0Dc<yW0p*S at C1w)1oMwsJb at M+R80hb@5SSMS5FPuznmVP
z;Jr(OB>7z%eQl=!{CD?3cw%qwWz%y!KNT*aJs%wx%zyEz5_|x^2tH_ at 2F{NOJo#LZ
z|IL#-jIW>I&!q)IIvd{*|IZa*^;8`KO!zko0hm8-laeUnHf{%BM=gLX6;CdlhZ!Gf
zQ3#&gP!QgN+ZW|0^gcNpTaYZTOEiLyA?Iaz!1!R2JHSB5Ac7FMu>yhxpF=dkmC+8(
z;8vn$G_bSa4M?xxp9lT7hQHHvTe+v?!LPjv-30^SpBkvF;X}WWaGqvJrkuwF_zIK{
z$O@$~fFdtBFGEl4)zvO8g#y0_KE{HG{_iUDf1L|dm;l^KE)jo#+6a$ahA7t1*%~W=
z=HdL|hoD!g0LfwW2nqMgkY%wk3NSB?f_Xi-fY<`yC!WH2xIS14=`&XnZ$KEuML-eh
ztYe`0FndS}VKhxKOSDrvNFA<;zH!1OD`^uk0Y8OKiI1cM=w_<^i}SDK|10Ak7Swa;
zwAi`hFoc)|6QbsfiCQqe`^p)H%vU>q0;oafS6vY727-pnF!+Dn at F3m(HG-c@<T}0(
z at RRD&x{L{Mki2<b`mQBB1AcmSfIZ+3Ij|yd+q}?&D?xtL<!uos-;TNQPQt^Z)V757
ze003z`y0?6Jb&6p$908Qid=9WoWC*Q70>?^|No_c|LZ4rzj=D^`>&bSC-pDg*NTg%
z19}wx6~>GdsKNk920^~$iIi7ZBG|_T6KLV#plQFbcMu!qqdAPKi}^5R7|aWg%}Br~
zR8R;(${-DtB#!yQYF%`Gi{C{W0{>V6UJkV5;y8l}N&_AVT_ZPpWDWQ~pjG@|*0<3^
zAz%J@{zB0$;qcO<)r3F*_~HDBy|{gHUjA}?KFH^p*eCP3 at cdfvrwB+KRNjEk5%8;;
zpsseo|M|b3kAG7~1YD6^pq at oLO2BnlM3EgmSmTi$ja}_1YV+O60-#3N0!`6c|D*~=
zZ3|a`m_SyGOTjuY3c>+zBdfyabDsQ{AOh7P)g?v35O5=E#sn&v4djPG+^mNH%VsX^
zTJtUN{~VL$fnKN))f4e`wcy_r0umQYOkOoJVab%<n-^zon4i6QQRce2Cj1ixg!60s
zQwUInFe+l;U&xP<@Ki;<N_#c=7yM5s0`^FqJX7aN-M+Bvz7;&jubKw!hw9_-De?wx
zUqBQ<>WRLxJ^aLao<V*b{vXf(_=NWS==|kB-=V8P)J~B)rO3-mJU^Ici09Yf|K{o4
zZ@*%}z;})Km;9HTuI{+tpBrs_R5t<XhX*k1q}RC}$mfQlOj33yG;>42Dz}DX at GK)j
zc`!tbzG+5A6av2$17Xe=RWMZ@<0Tbjp5H<nOpD~6qFpnE5VwX2a3G~ja&2cD&<hBG
zF&snwMl<|N9DvonQTGkHgGkbwH^K8a;DR at AD)j>G_CY?4Lkj#zouYOM?UAoT6Nm&s
zvKuZ1&R><fR6#^wuZOC7nd?8MW9I)#6fn#MR%@Y%#o>E#FO-;RUIm;iTf{29EO10=
zkF^Rzyg<9=KSWGi1Wul1_qZ}#76?BzU(#eQBRD6p5(^kqRUnFFMrfWyNm((2NfXYt
zEVshac`|Pzz=NNPx`lx^ev_+$D<Bji^r3xG_2w4SF<2A+D^Va4fgx89WFC4u<M7)(
zk8J3+d*z at bn>6jm3S>FN7ESnSVggDCmDHdz_$Ae)!dMye<}Y=VPr&e8=4~aep9Srw
zbw7F2Tr?l*T;#kV2UlPPL;<#Vj=s86WS`61H2C9g?@j#ZSkX6EOMkiz_{)C0EwHD;
z%QMKQ!-s at dL>`0SL&AIeo2NK`JU at Hg>VZVYB_ahz=ob7V0g1$26aI}s03?X9pr<u&
z0vq9mGDjXq$Ni;m2d=^v+vt9x^5Mr+U0Bms?lle#KL!)#&NAS`gaF<qmO?m4)GMMy
z(FiKc-`52nNUn!1upA05j)(wn2laSq!n(r0nF$#AkNAJJUV*_`!SJ=)hwO2K6!VwW
zT){t at CptgiXMlWaUfTI9+GEiC4Kt%P_T{-U|2Mt-AJYE=-jwa|A2ntdEoPuVbS>J6
z5X6o)Y-AST&X!vg1(1MvhShU%DDPtXTnfG~v<HU|=h4 at P3rLd*0g<aGg_7t1_z$#)
z07|1Q`k3%5C+UxcE;bMIp>>wl!G?C7F?l2cLLNp9=HWkL2yi@|_A0HwnED$3RVlE+
z|EnxOx0IMai(m-&fx1RM&vZekT)>EbDeOMq?VC&h*$3o at O)1Cur|noI%xBZwqz$wE
zH_pcGOObciLWAIQWe4DoJhvH<pCVV>-Tly>;_q$<_#dB4m7G^v8UR0>M-DXjAv|Ay
zN#?6PKkFpp`Ay)z|Kqpy4fxlyAl1w!b!7xv#zzeyKzU32Nkb;#+FKH8QAD{5&|T;#
zx+oQSGGE}Wt6h>BNMpaKe}r;b{6Q at Tjf*3ctD7FeZKZ-KrDRq_3>Pj0n}XT$nJ}NG
z4weW(DBE;C<G#cInbx5nM(2!S;?uBVfK8i<4DIce!`Eyd;YhoE1%B!9)D9nDU;;n|
zyB5J8+Jg=N^6>`D^Q!i!(FCO7O_t1R!u at 5<e9`1Rok-iI3xf1N%3n#K5md79>L{F~
z0H7K at 6BrZnG`4XLfFH&P at newx5<}%mrbjiV>=@{dfpDz|5JX18E|o#9JkB5GlZ(&#
zkerlqN#}O5fs|E;H`=vg#x$2jE)Vtn+Q`4~e}n%wQ6NHqIrupi!BF{mGx8%<u&Us%
z-RB#?ue2a&f5fa2aVsXHc9Qd^Zd;hRc1G&91<YO%wG*jd2|kkWo?Op}yR(n-E}ox$
zHl!YrIv<@#`RGLXx7W4j7vwA2&$FmK;NQUcpR&KR=KSyeAkP22AHRF>)AxD`u<##3
zzpiysB3HVK5&p(PfTY6)97vy7Gcw19RNI;8O(KjCN+E!b9U=B%K0<3{s#h|ZEYc9_
z1b0mz0C)r+f<8<3 at l$RkcbS;ZKoO$(2as?pK?~u4xxi2<KA(gRl>`0f&5mvHX=Hh@
z3)5d{;wSn5Aqxpq(gd<mo#*2Jn at Y~B!LRy!B<&U0s}3J=jL1H?eLX4)UaA}L1 at TYD
z!D6A5NLZV~(}{*plwmsGnud9k1mW=EHhg6?e_nExq+*^F-d64U2hK@>iI3o)xh-5q
zd<A(fY!J>PMxpjpY8L860Og9wLQEmvC=Uq51j at GpJdm4^ePp_vi!I_m6o^28{)sKH
zRtCryzrnXtw7&-OQyu>*1ds at un}7(0isV!%Kbrig-2jF51MKI6A4a4yV%|x68-1Q+
zyMQ0TlLN?q&*N`1QALWpwE7%b9erg-<b^HaC)UMW--X+cz5Y(&S64`Qi at v@p;D2-?
z?a at hb`{cPA`O5igwy&7~7eaef!YiKN4E*o^`~xc|!<H$5spv25J>nv?3R(d#g9&g#
z1Azhut9+B@&<i1xBAIOg`SEg6pbY`x;9u%r-QzeWHP&?j?a%}Osszj%FbW3FO(w-K
zDIg_MzZrYMF8C0BN+{v}GUx)L_$AqE(?+;8iu)CRAY!dC3gF+Qmd#v6$P6q<wKVfA
z?G3VI$D3FL&j4Nu-x$8`aHh#erT?ntMZrr}^??V9@>$cPX8(^hsjg`u{IudD+ftcw
zwPi(dNq7U?h-Ekd96n!@3Bp?c;X49*nL3mlCXOOj76fMfRW2Q66chu^i-0$uAjhH$
zsVUNaZtx<`;38Nk2G0+ at M<{OT?ttcrXv_x6%x<7j1p0?hARB_Z5a6Wz&74*v>#6v+
zivL&muMz_I1YO<|{EO@<<j3Ir{}BAj=bOL}{v&6POjtVu!4u}g)OE-Y{mk at phC=(d
z&ZXK#kqg0xoHyp$PM8mZf5Dd*HTXsF`S at h{Pq(js_Q?&v|GBVzF#%QN733 at D5AwzH
z>xB1*Z|)mCzXtzDfB&f-^td5zP!d4MzqklYfY5LDsGvZ~1Vm4uzDX6Sb#t6E60~m7
zAv%LwZX&J;-rh-WRtPy7XFxkTHUn?QEragLYKN?FLWfv-6pf$+1=MVuKc9e&aLk9m
zW_ebqV08$0k_&FJOu<lAVD<-se}f62*hns;ygKwA7KG0iky9iiiXBSoSFk7N)wK-i
z{T8)TIe%65Qj=T^`&rZke>ta30J5Zyxnh_V#X)|ToPt>ZjV#+!1;$R1$Ow)N94t|R
zpzfmdhImP9P;xjTKm89pqX`3hK#pm^{iqj+mry-F5>I7`Na+&c(xLMsjv<7S1#_W@
z6v$%WpDYRelgkDE@%asywTfqZvjK%a(PLXQWesf_|HuX806A1~#R~At>&pDch<|ev
z0P4E2NBEDD{ZW2YM0l>}SI7tORYt<<X*4+q^Vzz9nlDz6bzyt<<(;&*1+%;8nGKQW
zH-{fx6Ln!r{QZNFpMozgmi&0jB=s|&MPLv3!TgiYHU8;pQ=CVbkJ9;JK2JpL0sKFF
zt7(r3{EvV6nM=V{GT~p8F$n<`DX at l_nF+|<$HC%1fekAqN+FCj_d2!_(#xi4tlpz0
z;z>P=RpTOjVYamQhy+TZCn-#mVR?@9lLT4S1-P@&CsZI_k^qtm0Df2mX&v|{f`ARe
zJtm-=+pGVDCKG_`Vxh0`7ozwH_=N?D+b7!v^W+W+`3n5?05G0k;spZ*fT0uszORlc
z^2KX^@LSXh`8nwWIWJwK1P<25ClLVrNUSWNBovW9n}uYZtfdi}c at 3mC6nRxC1Yw7%
z at mvksgs=``f#_qgfl3Dsq{9kFL9HAILUJT(r-vg~gR%(ETp1DETx{_+QZ5OW{wrjE
zW{GOqAJ~I=)PP2v+Olr209A>iH8_94ztq3<0Q-gq{=`Uuq`JW;klr%IUhAK#?4<=y
zQG04+KGk4vvVxQ?^O?GZ<^$(Xe`iU?sZH6Jb~2y0`=K?|d800g)DP{Cy}3L8({qD9
zJ_GV8^3vOu{NYj2e7?DU^Yc${e(@Rj7x1ePpgE6Jc$L~IoS&Tchi};=1^mPL&A|V+
zkAL}_Zh;p5!zvK33v%E;a_cKU%<ykW1TYisJK*6`Gdo_j#<fBYYK|hx+KDV+?&rd7
z71f#&7`-b at 2S|$)wMVV_Ah1_!%IOYCyd2>Jiy-2+QA<Mz?eSxw6>)tiCrV{?5To#L
z;Qm(Rzvh3ZM1j8u(IpG6S6B0YkWUB@%+ole!H?#zD4$^d4Gn&k`4andhd+?!qbP#w
z38A&)-$aDKKPd?ohyDZqVde`{An6#S5KIan{@=+8B}bD(W`v30lN83cCix{IpooHP
z{JHczpbjbiPX^7ekOy&|5J0{F)seQJE-|e3gVaevM4tmEX%|Ev1OJ>vB7i93CD8n#
zLnH-|7FG$6854D0BQ2^K{LjU|HUWaE684)b at GJdacRM_X`P2e_F_zZNS+s-!?IH7p
z_T%|8nap@#l}z3J;8_2A2m9XGllS=a;Lp$JesCP-gW6gA&9$Ttj-vUbJUDXe%g=9q
z@#!r(Imvd_;8>i$lKP=N3<3Z5LVIci|7XvB!T)0divJ4+g#V~10DoWtARm$}OzAb+
zeTnrneUT1O4(6^A1xO0SS*dwm+)XeK at -YW-^5lc6+{t_~ay{Wf!~!OfQ8=TU8kJiC
zgWD?RAQN4K at SJFgw7Br$m>69UurCbO9Q*p1KVH5CN)G&=xTcX0>^1mRL?Chj1Ag7$
z_SJzd^-Ao6`>9fwJe#eFTAL9Vh|ueG at b+{~Q%z7)V5B*U)gy^nP#TomH`N89`G<s;
ziiV^E{%(9POdB_ at 97Q06hw>Hyf=fsKD^)Gk8IFzc333g!7L*pnQUH81p_V+ClhB?w
zovo!&#L1dk0DeQ}Lb^L(4wTL*0=~(LxT at xbd#@S)X5@$WR6Lab2mh?IP4cS?TdM6%
zE#|4|5S5PV&fhH0RrB8~$d3ZQ)CGV#o<9lYfA_Lp=e9C>99f%rdh>vH4-L3~SmyIS
zJX!GcGM*ps<NS-hz9Ptfd=ln!=joTXpL}r(wgd9<{{#XBezw69&o8uJOZ{Jie4+h#
z{-3 at l;f3=*`sHUlKj8o3mtSy?m;m at kGXXX_{{{Tj2}b1*@E7TyA)jJR$hI;g2Di_}
z2l?DSa0`i*Ns%g)<E*3;m^3idi`$Ce$>uLQ=f$(}lAtdVkm#i`cu0u_{%#CRgBSrB
z;4T9dZYvrfsRw=x&IZ4&j(`4g;V^1QBA~t$ZeJ2!JpjJ|9=!{VNUdrD1yZ&wIWOQ>
z_$Tw_qn=NG%q;?A;Tj4dq)QeL?4YKAS$D)>;eoAuoT-mcA0+K%Q)z;uAt*Rn0c^fL
z`VXcdS0gT%?0{pU0GC2m#t3ld+R|RmbwCh?8IlU&UI>fC0=ABoYek<M<pwud7P}q0
zHwJmIX&_riNm5Lj)~+ at 4Mk)L1D`4RKP#yD!k at -~PKhhGa2Q^<!ex&DL at qZl-;4 at Y0
zTol^0=Z7rmp<bGhubGlmd$%ow_T%>P`P~k#hWX(00e_!syIHPb at aGruKRY-0v-2fC
zD8c99F?u`8e!Nxw?Tx#DT<}i_!1)sbKBu2eJpYr=P2g8WUW3{R_}L`uVI}bY{pl~y
zbPEvSTe={G{QOlofT*CbpsM%+4?>T at 2JeCjqAj#;P9c~;Oj#3m#53UMPT}W~ZZHA7
zlQgKSzH~|e=-3EB+-OXIXA}&)AN-cSF9xI+!owL+L8<jf-CsyADK>XmN&{iuwBGRt
z0ASpB)xS@@#)SDJRjilyFfbN_&sUfirbn{R&~;wEuNFM<jryP#*~c94RgSrIf`58b
z8#UyD)U#|~w_PjBB9zE!dw>wqzr?p-NOI)mL{Nb5L2uY^3rSN<!`qoz6_^9rfiS~V
zSrdTE$a!)fE*cjW4?q!wGpv=$1!Rj at SR&h{fq$HT6DG>JJ4pSD43|AvX$R`i2E~Av
zP1rzzHVmtdtd+slkamb>O at Kd32T%ajnJ<4i(f at h)N91HSC3_!(f0AG6b1-=IO87T%
zp6cK?PY~L)V0st+UzpF8U66mpe6~Y-`dr`5fcfNqayIwF6NO)0F8b;UlNp)M1^!b%
zIC}rvukL>J<j#{XZh!gttuG`57?4lS`_-4ie2jvp5`2XA3;6%`)1$wO=l}HC-#`E5
z?@ymS`{}oT)~8{KN~p%a%Ki*0sBnN9 at MVeu_*j^~STuV*uu+}2GyH at p>f9ZWFRfqh
z_ENiy4ir2``XlKebfEJ9azq{}d!hEr#MnR`4nzW?944KOQV|emsOCa)_X#V!Q|HK(
zQ>C!gzBP+h)$sRWp^E>L0tomu^2IYtVT-~s5do=R4Vl$06b}3==5KKR6uh37@>T#}
z|2nUQ^Q)c;A`UDF{Novz0#>*ETe$A#ZgzCZ;`Sjt_<z0*R?oLX8Q?-;@A!7!MkN<l
z&oLJP at PmA44-N#{BOU|JgU;+~*DlnD-{Mk`5kPO~dB6nVKP{sC@&9B=3{ffHLg%rN
z)s3t>HKrw-HB at anzbV@|%AyBMf+PHaf9d|>0J>AB4*Gxwzq~X(kh4twUy|Qu2J)lo
zzotyq;MmPM4_08bj;aAdnm=1IU_RRUvtlQ!SM at r(g{4by``MRv<h*~3oHzI32|_^O
z)5`^4T%fm8a^CN6zW>8_Z1i>yh6CEczY=_e_HeB6Zw7wSUdefX5~-g;2Ajkw at c;7U
z*|Q&h{q48k{{8oV|9^siHiCf_kPLzoRRyRKTAVcDp97Esg(gxU{ZV<*;ec{5T!n$h
z!zchh{*4e1w*lb{6c3rN7ZXT0fZ;Hh6fFCH(e|%+FSRoo19;|lArA;0YRE(Y?l|H<
z$sLS{&#&Q+Bs8dRAu5pIT)`gX)7n8^pt1lC4DJ0Y+tv0Wo?jFG7k2&<F2#aglY*cu
z_|S~&pmSb4KeaHT0H|)^;mAUu()I at 6Rp$>^14t9m at DhAAf+NKODS6Y<!<B*mvj~QZ
z4L>6JrHxju7~6uo%9_~N3-OdUKyPS)Ye_)?0+|#}^2<iCB)s&$q4~i7QAB|~(Sddd
zgdi{vfd})_CC)82Jt{N*O5n!|s^Firi?&ZXe^kzE!oNaz1;ej$zCsr=B46X5vTx55
z8}R%Pq3#D)_r1Aq;Cn~<To?W`_=^jJl>dkJga71*#~G;o<=@?SpB--v_=f at s;W7As
zD3DhBzeeyR?fv at Q@4iOxG%+8*|H&_Z`~2B2Pkw#&{jdM{74ZMte_|9W{}ugT26z_z
zvy%Q_1!m?Zph+ at spvHtlCMjTQA*mk~d3+j-2qzEnx!sT%?jwE=9Yf!1L{ZTIX$B at u
zpwLg-19PKf&bUZGoRpX0z9{4nB>X?0Mt+T<VFCb#rk5&zn0~2qSiXW7vL09gY)96x
zGL*SB=0)(VV_eKxs at _J;Q~UVmDxVc$;D7#4J{&w?1yBguKFQD<S#^N_NO8nVR)OYH
zh~^KOAuM`0;N&p}L{UkKgFJYNHz4sR(}(}?BSI&x9#pG~!1P{rf0M#GUINa;kB9{b
zp&*|(5E1w(4&hBF>-Gr6Y!OcX75lcMyE0A5&H^Vd(U2N<^+z at E*M@&$iin at 8+YRPp
zz<*_iV-9<LEOEiad6duB$k)$Eow)jp6C1kiU)k%-=DxS~^||^E{6C*HOjy$7 at o5Af
zm=B&G&8Ot+t7#vdc>L_|@BjGy{qOMqPgM&1x%T|z0vrhW`Rd8tub=29AA{!elcN2K
z`F!@P<h)<~^2^`<@y~xe`!`+MCLqFp2mz!3q7q2*`#k&uGm{BO3JHp6DMa*Bai2l}
zw}yzUZ>9KuI)9>NZ)@m~=s!xwAitv{S~ow7{)1AABp4_2Wpo!1zK${|EfDlbzeRZ{
z#0&CFp+~i~bfm6SbN<U8C!H>;xgGGUSYSwXi3qARpp63W%}ewvgXW{M-AbD03*%oX
z5F5dum%jQ}*r2X_$(o`zov4o^fwF%(4uNC6Gz8{=A&WrdD-tnOP?~uXL&*rRaTvaM
zcr|4hFyr>Qda`z|S}v6c2;tHCKQyv28&$j7BmOt0QUFs*iDU~%ND&u`Nuw}-ntvet
z%!Z(J1^l_cgnMlV%#||{9 at Bw|_!th1{$Jx?%l?2LV5`JdH~AZS-c0ycbf|JtTn+q~
z0BJ9rr~9GRXg>Y!9O!#vZ`Qf31MVF{@PYY=;Q7^+_&fWO-ai8EFa7R at 5SZ%t*ZyDS
zzu^Dw*H0zwl_5<&Ce6pde4hRC^w(d1{_UU7e)*>czxaQ8V~`4!Fak*yeM~}t^!?IK
zP_vI!i$#-T67K0UBo~I05bLEK(OE4=94q at -V*<LlOB6Xe!QAcf{Gww3b(){M$kITR
zz_18lPb{E72KB`alHUOUMk|^^=?#bv<`YB_QsR<S+}Mt}e!ZIiHax%1fARK^It_bq
z^|FA8()<Pa&?L?%&ZAnM_ at -j`s_nttxxeHwESkHI3M6VF+a{8&U<j%ZfP_nF0G3Eb
zfCPj^kj|6U;wz-=8{~mkhx4cqiBRmtc`2j#IAa~8LPSQC9~OtiKX45(leR&gv^tRR
zc8m#Z%DxN{zU-1o6_{KYA&4cin|L|m|6%@+r3Nh7L`6WYq0Jp95w72{Eun$vUmt4J
z$Uy#|gMV at UBKw$}zX|*m_%|Tm<nuYG%z4cHKd{I1llFpq(R{AH)BnzaJeDqG-9pmd
zr<Yl-6Y!Jv!hBNSJFM{kx2pU{QUHkpkRP6L{@@?kUpxOQnh&)9>tCMz^SA%?`+vx8
ziF$Aa2;5Qv&`BaVQC?BdRjm-FAtyvy-dqPY5|taZLGVw)>&-%Bjv{)8v4y2C-b~Uu
z8u-=f^!PWBFN8-ebpn- at eu<bMgbsQ^X^LZ^1IQ95;Y*tKQ0pNCU<hCXrziFj9l%W|
z{{=|=8P!dIKVCdMxrxEUi#g~FSEs;Y<684kHg1qTjhesAc6rH%d|KT){1O>7^jHdE
zY9g3;`;KkEKMi}N0A!}D3xq!h*jyQ at Whl%`Y0uLMi5TfXe{mFJj9p?VJ0Qz02|>d5
zxQu}!1hr0$ME2ALFV2t}V+fERR5;eh-~e0TSjq>ip+r$0UC!4Pv||G78~bLv*0}D5
zY;VmB9Tw1LW2{c?SU`*rfE-i}{|50>a%wo9l6{~wO8GRK+pAJt0lzu&p9_92i-Gx^
z-9paW_xc_No?p`555 at V%)8zc&F;;RY{r*Pk!(%46s{Hq>d+0x4-st?b3EcVWOOUVq
z|9d}tTgmyue4hRC)w5^Me*3rI|Ly;pK8*wLPvVAS6mO|a0RHob6bRtKf`FDxEl~|-
z0FwMm`rhe6WC9B_Qf28L7E5u*$%A|b?p^vq)1q`gvkv{_1!TLV#>hU}C^%-PNT$b1
z;(%Bb8-!!TOe~NJ*$$YknLD>5^pgV1qCHiFP{n^B^NQFgEf<UC{u+m*x_m)&erO)B
zH)#Hb8SXEReGG>;bH(JQv$_ZY6p(aO>vSOts}+Np`9cUl1tkuO=8r@}Tw|LXwXZrx
zO|K>ngcMi at IKC{fmsB^zOXOc9g4iGcjDbLJ at BnartOGxTXAnjd7bKy<(V9FLkmGz>
zP)Vc^%({!gUhEi-pKr$Mc{FCzp~3PO%m`osJ=Mver%NmS(>U|D3i^%Y2MGxJBvV~*
z{#y1V|CLn at jUhlv0F}XCyW0o(df at pn0aj*aedg?o+Xvo1lK<Ix{J&JYzPXmbN>(2n
zrPZPIyX&OA8nI}Y4}SRe-EYu8zclEdB7Rcy75*=>C;tDNr^ucUg#4g+{-`z2&z}7q
z=JV4({`u>(3g)9f6Y$Gkes9#J5tL_A;O8)(D*hG|kT<JU(Xb!_J%dgdOhB4KStdns
z9 at sunn>a2)khHgjqws6DPv<ASURVS_6{xesbZR7lfR!RJ3RzRDOSGO0!mS4z)Hhj!
z2$h5TOCS(bBf`}5;IHCGpk2a&(dUb=2KGwohx`lvi2|Z|zO>udmO=(Z5ae4+?$6f;
za?A!|A36t_A1bS4uuz`26G?7MFPRREW0xrs4p#6V at J~k*;KvWZ`3ayXy_69-z*k7#
z6cYsIi2{hCNIe(=)4ND-34*u?ETVasw<w}Gd{)??pEf3_MWnxM4y9<1;GE)bJ1PD`
zae*t~7e7x2Ac?=R=2ZpthL>jGm$qjmc!GZ=`y0VuZAl+-1vOE9(@7KfIiT!I*$eRZ
zzOt+D&AlYN(EhxKCrq?I;m*F2Z?2_&XmI|2`~CM1fBx~k at 4qo6zpD6){%@!P7$)|9
z`_+3te*55u?=<<L$?a3^{9!)-{10=_ua6BSfClxL7N^;=Kw1i*HKD57If(+y86j6t
z=>Y0C_{2X;(TXZRWgR*hqWs0Pp=rw`cUck>wA0^?&I#=S=g?r at 124i%AUV=3L~8^s
z6On#I0T;GN$WBEA1pmNZyqvoTAWY_}_UFh6QW*IP+U;|rIS|;(>ZT(2sFz|m1Oip(
z<=No&b!z|OF+jajv~(Ir5ew<BZr_?aD;@wf(#e{b$Qgtnn7m9|z%*ptn2t=H6Q2()
z^moIqxj2$KIa(1HD5JoO_~Ot=l3CIJlOwo9a30QpaOQcnN|2dxjZuMO0xgol-{Oj;
zMnZTxMh7-wBD{4+VgYJDo8z!cGMt|ha3e=6;XEyyHSW|7B1AaA7V2UMH9pM1kMmdL
zr at 8k370jnP_+J?LVg)UmWt`lI+SB{;&aCs>;QWIgoz8h6vVR=Y+wbm6dT^MWxAdE9
zW#3%WK>hkZ|Mv$!eUJD_ at k=*9(D|TR;G_!<Ar$<h|A_ym)$Pacbhm?Ub-?-m?Kgwq
zQ{4p61n>!56I`Wk0TK!2`6`eCJYbXAh_W=C?4Kpeq0ps?{?EG2 at YN76@DF#T=mYZk
z5xf*7lM<M9j|3L?L)c-E`~rRiK&C#m%T6XQW_|}bFVq*e);3etRM&H1cpJfjQW_rx
zx+pf)fPaur{!SJT&hh{9MdZ848A>@SUT72Gyk6MEgnv2svw=WNfoq~#K+%Hu+v>6X
z7NRSTMG+*tF`fbNV+EK4*Fmli>-j|bb8%>yAl0QZf{lZJi4=Ag{D_MnVKFYaiH|c;
z5<?&&bchUq;ZXAe`JG~e2 at TE22<V7TiG=f8u&i8qbW_A7>IG4OY!us=rVG>q<|8;-
zw+--k)7F9%ps_^<c29fljW?wDWo`(S!LP{=j$NF;Dgm1 at A2ZtXJn*+Lcl!$b!lMv8
zrP_6IN57l<X!Qa7gC3nqxPLJI)*ir*=P&>9cFO%j=5STy2jx>be?Y!8Kdb(KZ3RMs
zzIuZAV at iJcT?$@b{Q69o|3CiS{G-f|nFS*fkWnqsut5c?0bSx=<ut}3f<K1StTFx1
z!u+i|LQc4q1ZY$sf;-NQUN2_vvJj1-lEuRQNouDIR(n%@aok^^-b&=qc(!$G*E>b&
zpCK%FgF4DdngK8nZn`u*vLr%A0zwD&CCLR<HflW`+d{W0{i!N#H<&QyfXb~hdSEa3
z*Repzzbxz{A%J+HJU?IUC4GOTxATD{+H&eIe?bUhK(XjGg%{x*un4F=&VkEC{30XJ
z$FO}81T2~?3C<7Okum{0V5+tU+z8hYZ%;I|@107p;8IwoM#^QxV+46g^FJ$Mh56WJ
zrMyME6be#m6kR}#QCXRQhRS4T(S*g6XrQv}KvP6RH8p^~mqs1hyaDf}eEFtKkub!8
zYTyU|C_jMK0DhvIVMxKtknq+3{)(CJmB7zO83(Hu;{OqUU_OkP%iH1n36l06MfO4P
zhxwFze$fQf4}bbWod44=4dDOmlk1;;tOr&=3#d*3r04V7uPOWD{~`Zq{$D<O_T4{z
zGks3=14;lI|0Wd(RPcB{1(K!0RnwQKK&*Jy{w-!i66 at u*vIHM#o!Y}48VqTH at Q~hu
zWCpHYR2 at _fc6evm2ciJ8V_5g8r%3%|cC<mVYA$OaGY1Oi#+wNQVkXo>X@~QWDNba0
zoJZ@!3h29#XjP4{$w~Y_;Xw7ZN)*tXpRcB*P6d8xXZq7_pXLV;F8 at oN*PuOhnm5Mh
zvmch^ziO5owP1WZd+4xf0;{*d?Wqe(i#S(_C52g=i!M-4N6Z0-fGET<{+~3ND at Jb1
zHzgtv0`T at cV+a%nVT1HM!~aPKY<eWL=^A5|7KP83RtJ<H+98meC=&#@x1{vu=Y}Bw
zd&<Gh9jwS?3Gq_&r`_HBQ4{jT`HRn2<VX77H295eKg6{f3BNwi)Ei@}t9(A3rvm)&
zALh1%9#|1|VGC1wW0~Q_k|y`|Yv*6gB*(9=(&2By>c_wS^5FY#X?uX}<Mx65wND;j
z`{a=tkFS6BvCM+`{8N!Y!T)y(|3Cjot0x8Dr~ml%KmOPMF at 03^16=};X|ps!h=(+;
zf~6d3CD&TZ3;IZfKGl6)7H6gq)?OCk78Q<p>nso|O+K>nl~5fu?FH!4<p}t>o3afG
zeG#h5g)UICUBn;vvcAxMX$nn`b{x>nr63FD10O&Lq5vecieg!OFz}EzB-s~31bi_8
zlNI2NarJ;-hLP$E>;>?g6#Ykj<<Em3PtUY>WFJTlxI*D4{Sk$vqhKBa!x@<(>ghlh
z4Cg at tLbIY-f(0Z=0kpe-0wM1JdwHj22b>0hfEXwFey|t*AG*i^Uzw7MO^^7tnbH{o
z7s6LK^i6lp>)Biwkw36+;_YOOfE*V>6ljwk1vTmr;m`h<>=h34At`9#Xe}L&%wT1M
zY}2C_<O6=~{Lywq`PALcs=cj3?Wykhp9g+}@}un{?9j?^X82y(#)!GH1Lq%i{T)nT
z at W*E)?R|K>^vPutRzLXhd(vJSesJ|5|LVsdU3tuSsK!TEKYk=8 at YyFcKTF&HH%}>k
z;r}Unefit3U;p~6>2qp45d0GX;Xm}u=xk8|!+ at w-FmHYu8HD*J5GS<I`j+DSCB>t^
zkv3h`$}a8wOny<jT8N`dk0h~Wu|)D;Nr7SYYB at w%AhaNhg`@eYEh~t!h;H9>7Rlr!
zhQLShP6sxQPl<pk3vEVtY1Dw_4nzg5{5K2#(NssJ0P@!Yb}+95AF&86`}|i3Ka`*U
zLRACFf|>ILRbUDLJ>fWcVf$@cu_7XbhZF$QK=zT!bvy0zonS#Chq59NtGnA-5H$HM
zJUl09a^Qe$7dD8ir-0QmR(uFn-<&;Fk%ri3q(?mJ8M$z)xFDyT9&aUwx9t{di<b!X
zY02U<C{9WgZRBVT;7NO%T6Izr;@)h4d9wUFiXZi_7R at xyt31C(n~(wj%_Q^H&R^@C
z=BxTt!M_Ro23Ie6t_<@)U_1^xyej&_mYAzMqt0!Py}C2*+AahiJby8B+aDY at X`UeV
z!=Hb6_uH at V{J4FPfBDhFOCNoB>EQ=5K4N@$<>N=P{?8|mH4B0Q>HHV`Kl#V6Km1lz
z^Q>Y8ED}X_CgKm#T=&c<Z3GAjsA_-6LOL`~*L_`-PuAQ<nODteAQLGASBCRP_CX7U
zuG7yTkv-6ZGClqOz#hs9o^k#h at QlM}mvh&mZ0+{Bxz2-nVhfl6RRbzwyoX(ed4rnq
z<O?5w8}PrNkiehm-=NXUXax%Ipq+<G0pvVw5jrA>MTqmSMBjzCS3U7kuZb!8{W7QW
zO-K<@<~2krVgxn<2r&UHg8UbTFMX{PwdwX at j=WVz{6D;o!8gKQ2ov~!q5!^vN+OXC
zWdOI&830c}gzC473wFuRY at eOdDYv_Qb}E>ED<z!N7$LNEVpvnEkip)~StE#~!?FWe
zFuSCY=fYSTwrTZx{d&}W8gyz)@wZ;n#%O at l#h4>d#R_-{=aI}8{F~Um5#*I?yA_0A
z?8StCBigH*K*aHNG1qqC`2j!GuDGi^i=JKv|7AbiO1^i1RZWa2{fUNWz<=%2#~}aW
z!w)We_~60^56-J`@!|UyK79Y;M<4JbA_5a3=>lciBRxXspYWfjzx~7bIX~BS0Bo2A
zkMpl1EpUdO0V9xVz`uY8STWbCoo4>6CDud5={9t*<j%rUB#yh=)4>8=LCs*Aw#@uW
z48e^P&;|LKNhEP(d=MU%JI0~0J6?wzS at ixb<_l*gvMUg0aDecEHr->}_e*QvH<eA4
z2>L{SEW&fxKrt3Jn(38{I?8ef<iZqmjDNWxU*liryaw8%n>y5wp#Ay{FNO0zezVw`
zVc{Sg3+6zTjkyxE21&7i5}}7ZaY2$MrUqNKhZ+&uC=_xHF=V1AApp&XpVG{Ob;Ehc
zc5(ad`=s*SNs(G7g~``1%t8X<g4lGA at 0iogogGy3dUnq5*|u8@>3{=95$WGNz}+e(
zvJ)*>Bn8YQMUf^z)24_eLeaVDZ at kfvOV_rQ$>*D_K!IPTx^rMibxq*sz)<9>KtAu$
z;8*ys+3nY9-Hct58PFbRfAqzzLi_LR1N=o#E-{ktA42nF#u;#Z^vmDy{K%Uy9K5~2
z{{8pPJ-C1N!MlueGVY&y|2=Hs(&LAhAALv^AUi-EB?K_lm;9IHw>H?D&PxecPmiJt
z4mBH{q)r``{~AfP#!0nj;;9z=C67a4cCu#bE2|I#e*C|zTdsC;*M1CPAHg5oLiMTn
zauYeAh{;As9rJqvZ`MB~3znVo*b<BFgY$bL2T|@v1?pUs#Y-9>F^Bej(>mt$=v0_#
zIkaDg0bTHlxJu~|?$j1X3aK{YUs8B^p#P}+S7irAbJqC+-$)(&F{EpGM}^OSy$+#}
zckzL2E5OV+s1ceEe-*O>7{Hzsn5iOU2htb8vJB)(7VT)0Kq7$c$OeDTHiS;VFG7Kb
zBbQWnI755L{oRUtgLdm~u^vPEcO2N&p<kEQ2_Y86SzaS at EsC-%OZ(VmCOPy;dn+ld
zLxi7IYE+9*pC)eh%>zB!6G2?;IBpT*)z;s=xq~&jP-FV>nm5%@CmiSl8X*W+b(lb{
z9>gro{3{5*IsU61KM(vy*lY0f%*1xck7T~L_6+*y6rR8E^9#jKuQ0c_{G00<|CD;c
zGrk?<3+&%}_sso!r{BG68oXriqw^{#U<EAu&s<1q0kl9c+wsW at _<!Mnx(kk;F*OTJ
zTHtVErcn*~rW2AcC{g8gyabcJ*<gh|!pQZ!or&zEZ_?_PE;xtPKwx-Az$XfzWa7+O
z8k9{TInadwPIfBD1nP*NI6Z#Eai^kQ;9m at +TTI8??l$8GTMi!}v49=-)GuNt40<3b
zH!}^2c_{iXmlQw`vR&oyO at FpQ|KYVdUkkeb_%w`BJ^_az>tQxSMk57igvQub)`FuO
zgk>=(2g3|$+Y|CnBXQf7!~*b-M9_c*^g6Yr9h6u=CkcN)9pjWa5IGTzu>ukKnNpn^
z!KEW1A`bdbDeb^T%TD$hkz-lj*K_Cq{D0?yOqW3!Uc&}jmSnfjOmr{q<5rL*89~<=
zqCkgmKP1p*%rbMd#?LqD+`cs(M<ga~S~cp}mT(|F!0JJE+<<K{S>hWhLspWPo`;&9
ze=Xn_k*5mhQQqDJd(#2n$NAIbmiNK&{70urdj<R-9xM9f9HrieKmSNG1B4%jgNHx!
z-n(G_)V<p$@7_Ln=aymIy~WE at _wMi`tbmAc;n9beKYe`llSh=sr~;4z{~`V-ESmp1
z4S`$%m^}3_T7XoYR5N4^qzX}`0zg%d5PxWd;}&zfnTV&TKC82Oi0 at LnmZ07c%AxVr
z-K5o1JUsgz_D%uSyoB~}4B<ifq5lC^g9_w3q0nc10b6FkbG*mq`%f(koH^8b?4XW=
zBs5r!%&{Jw2Op+3%1i;)I$)7EmcCR at Ur~K+zhGP`{PGv;jD{dU7Oa&YQU3oJ=YRMP
zR8U#}hn@@8n{C%x#NmeZfI9JrGx&c at 0F4NM5u}jF at ca-(q9mbHO2e(2Q%0m>&Pi#S
zQmZ<^d2k at 4v?!beIP#;;Y>iji*P^sH*TE^LyVcPC{*z1Wr<ZjeoZ*t!v(vz?IDZGW
z73kNcCDVoCg6*?XEE2*xvAqJbDw4z7__z`XaQ>vg$o>enC_)VQkLW_I70gOd#)mk6
zRyb+dw5s!$d0v$`kMJmywrLLjT9B_zAnNpnn2THU5&u6r1??&L>^y02>DSlN9vq>`
zlioJ?{P_>w!{>u=aDL+U&EvOj9J_V>*iGZOb%Qg<Z{Iv|=hmsax3L1=3>P9tAQ8Cx
z-B*0h7ytMJ{xfX)RPYaN7V#hduku;Rg3a0kw3Dogc=Z}Hkrl at 1e&J%Ob(?9?Cx}b;
z0+WAzUFcDykA><y5;r0bS*`Z%02s_u-eOSsV!Ka|p#x;E=Yidw2W6oDdyUNV9+S at j
zoYr?@QTXzS!ShCP#&1eV*s=-Y2K#q`^tSJvLM*Tx*1vUfcq12EW`FY)v<VoEw<3^<
z?5P8RcKfRA^{2)E+KfUhOFdNGK at tH{04B&#8lWi56kw^6uqZmS*KImeMnwOiV at GPf
z%;&XePY*NxUm7^ooEJzw#SXWUKJCbfa=Qo47=qjPpH%F!Y at FYOB8KhQ{Gge`B3Dkf
zD(@ROtvqDTh|am)JLmPVDClL&K2uQvt=KYE(f;Q4R_#N4n$ed_QVdhIwIC_3+n_$M
zCl)YXV~rHUAYoU_JA;37S8tGjDz*1lb at -UTbCIuq8hvgvJrB7Ljuw6a?YT^!Thi@)
zB~LDs?Xs#HS?$>e_fNfh2W%g^b>ryGYe%kMJ$(Jj;cJx!Cy(B^hDBfqC+^(D3eMcW
z3mv-hxvT|EFDMd_iRV{87&&KV>BR8{{zEYr6VQ#&@E at v0+J73JtHPg+^MDg6fK<EC
z?mD&+!9UbTIzO3w$0QCCI(oYNWOrKO{3#Jc at OHhE@%HHdRI)%m$7r6Ex at 0q4wM`_O
zgo14VkL=0t88<j^*07KTqXEC)<dUE{BO+E!=GkjxZqV%Ev76 at vOfQEObS}&!FOW9)
z5HH!~K`oOmR-hUogay$B!E-G|?SHum7)-+`t}+vch(Mb(<d9l9K3^{#K=UDPALd31
zfGETqUM9066tJF&%#=s=VO{hd@#H%$>=c&Q9dB<nd_e4`*>;nQV&0w^^Y#q8 at q+`W
zmq)FdVl#YT*rKt4Q_DK`O|!`F>5|i<V}w7W4ciN{&OoRyDRAf5;3lep5bzTVT6;L*
z`6+~v`Bop0AAns+_A$<Fmxy2t0e=qsm_R-Yn|yXY|M8i^FD at 2*dM^3B!=$~b_YUIr
zAv~w=-_yt!*k8MH at XDnFmoLh=bYcIc3p^jV%(%#T#-Xd14{JjZE4W3xIQRa2bWtV+
zeDKo`)nTvCOjxvF*z_qyV at 3)8(G%hIY!R|Wg&dwLyU<D|AU{<PS|GTIFk8e8%9?mH
znGWD=t=iOOr#57Kk at T}usQiL?nd`?=KZ&8v`5EY$Qvd2LJASguEiXYn9^P|!4#(Ex
z@*U<4x1CxH;l~6(JDBGU9K>#!8#rrd<mxHO`<KUTn(ef36oX`t#IRjvLL*mOmVuIQ
zp}vB~Ki`FeO5cGO>J5T_BUTO2eaU}t7y36O*Jjrw65&_>N?4SaEXs)F*izboz&}@s
z|BLFIR1E99CfAB7ja14UEO8gia3pR*kVxu<H^v4 at jO&x?KeZIv6S;b-<D8*MdzVG7
zn$q?3Mwi87QuZx(nmasp!z_mFs9f98c?{=)-EF(Zb)rxL!|WE at IVK3?TPB9LWKNB@
z3$frWFXzS`+rsnf)~`oz2HPT3!9TMd$$ZIZD#(u!{9+MCEwn25t0lS52?Q+fFzDgQ
z!Y?n9_9oKyaC<NKzwq#Vs6K25pO3dcc=Zx!-*@r+-V5jUo<F;Xaqf(a^Nh2c;XFST
zi%_<Jr5qs~+`7Rh5I#tU(L!s)|I9Tjhs~H)JbujJk;Ch^VD2^>A*ud1A~h+1nnk6-
zQ^^FXqQ~&s<X5?v+)%i#1o1GLk%vmJTN<SJ%TzD5?GaG`@DtPF_PPqdF~El2Ac1x&
z$bj41PARsZHN<X4neC)Phq=QX7mnf#<`BPgA^7Jx<<P3cy-PFi?h81(!9O!SsCRdt
ztgapj(O!{Z-eDnLL4mEkUBm!*m<kz2o0TtRd>FtlCh(G=H@=<VLfjP0t3+64no|md
z?YC<!OC-^3W6_>;SojaK!<sbWowSZfUkz>fQ1O;cdA|rmUNUtQD<E&8MAFpX4Jrte
z44E&c9kphv$JW_Cdl#qdU(P)}`tbhl+gCSSJiYPa=?#}ouR3<nWzKNB(RmIN3vEZ{
z+6)_DgG`i_?9eO44aZWL-Ij%h=&$y4Bo?3okp<UdSyZwBauWzJ(qCQnIIOD;ft*)6
ze}(pnMVonPiU<|p7udfL=P@@2(%zhR4-fw2Y{IQQDKz{%xtwx$|H*rIVE7;(JOgZ?
zzWeOycg~z*>^gn2%FyR|!)~z%u?1}igae|+@!L1Z2rvO=4OB6KS?gAhoHe6-@`Qp>
zBl3m~(e+<x0#qenZ3x^EtN`p(!hZ#7jObDS(lSBrfH%XrA>tu~GNghT8^kgNXhEdI
zS_P$W1HvITID8tqaQ<#3y*-Byguq)2?MH}b*i0;Nm_Nd9S_$bbfOlCn$!=<i-Lz8o
zt+QR%O?6s2*7xYDuID!QxVkgo!Y0q0Opoj?o>^T&bF%!qr+CLld&Wn(dV6{J`gjKh
zphq#wi7&#pFl01J at T?LD{_7 at SGzD1>MTZiZ9Nn-!=lOpLjsyiF0{kD&Lz^g7ax@<#
zP`D5i^AV1Ky=?PD>o`jXBuNh^<Oj9ia%g|A;W-YohInk5UFAONmnS~`@WA_bcHO(a
z_1cB)cdxF!aB}UX)6TPoT9@{*F7Dl))dRZ4wWVK<Rh2Rlo%(iZPg_Oj_RZ}qo3n5<
zONy~4IQ+k9<EC_kc4%t|1bUGN&40{1zrh at IZ_mqP-W>lhf5;EYPvV_ at X#U{;*lqFo
z`!8R_v4iSeXHM-rb%L?u<niq%j>$NF)G+kR6UX=wgZGGOC^Nwp_;m~cUW64uhe)EU
zT({A4W(}D-sbKWT{NclLhn6G$$OLCnVCr8o1xD=!30qc=%J|0|Dv*!*hvz5sv)d-j
zhm{#<$U(b+%2L6km0ecsWI8IvuTXEQTB at ->iWHa*E)*UPyhi2uPb;%1>y6Gye24JZ
zO)s^dJ;ZK$8Q$J$@o3z>{p_JGYbLv{o#L`;qR*k_j9&Nl_kMWHXGl&+LErGQobb|t
zemzq?dZc*c|C3_fLxSA=d^~~!J^lTBgM$LY!$j1j4!|?t$shrleGT=6{)HxBvW4mg
zFd`xaApmbrti=D<ZPP-e19u1XG5TrAh$Rc~cINuD?HNx%<gz#|8eQcMKL6#(FCQKI
z<b(YmKiKo$t$^``{$mSVb9&gMMqAJ<?P%S`%lWOCptqQm$EqxzPEDMwn^|`v5w1 at g
zBr|2|NU0jxM_j$azxMh1Su-E;{4bE<*8U!e7x;f<pTv6ylHWU2`0-g}p95De;>O=O
zdwS>TlRHic=C>U`y7kzREk_S;IdX`x**NseEk_RXqpgf%N47Dr4rLMiI_6*s3J0!S
zI&t at wzGAc2uNk{w?$GH|i^h$~A2BSqtW+$T`Y$cey7^5t$paD%ex9r0zrq9z%bqAH
zo8(va-(-p_WiPhFaI_+W6U~#w4Tu8iQSGvl>1u}7qJkn>BWsZMb}sGR8PcBDy>m%6
zRL61ADDaOJfP9zL;`SXEjP%?!-*x>|_bsz<`+g_Z1YX?iJGRh!Xs+L=0`?_$%S`hg
zl#Txn?$<LYtD9$ZxLZVsXH0~v7a_pcE5P3`G$bS`UQCsTi3n8~amCU94<-QZ5u^Bv
zC_?(bBQHQVro#>Oj9xy<c`RTK^WnO6%I`^SD`Drt=cD~aerh?eTc at n#wh5ta;zHV`
zMz&Bys2OV$S$Aq~Ytb&iv$eaUOaoy9<=15wdm%sOGh8(1SG51X0RBo9VVpmnKk5FV
z!q3hZe|ah8);@9gr%!-k!8}kud~nmD0~-(SXKY{`*k?9)Dd!F2(1A_7`S3w85R3(j
zIDTZyu_JuW))U7zA3L(~$ibDncLM%#3+4@*F|~BUIGlgp at S!=SCA1Bo|7hng%Og<7
z)Ln4K6yW(L at M;5DhY(x|(`eP4`%5m2f-RHv0zIU6F*6a*5BaBvqg&b#_I<_<M%(X@
z(-qMM<U at GuXO_eE@%iYSF&k$`u9+ISc3Sem6^VP6B<)*<!}s31*!RfF;2S#<=Z_03
z&yAZpEI7Y+^w{FyyzGebT+i&TZYgozSzSES6Fee9+=BvKJU!igygmJVeS(96;$uRR
z6POPxr42P(tpfCwkIYQq&n5##rw at VDhq7brn+-UYNoV!y%1NDWtN$7wLdzU(pA}u`
z<)(F{p}hsgKAJhvd|Xyed=YrR;CpORqdL$j5$elmAK=--&a#cCb1PT-2F;to5*w=8
z4GdOm{tEw!?Hi>Y(fME6^Q+WAWfStdW+Rbq{~Nm#Z|*7n;$qtSM at t@^!GQx^V7&3r
z0igc&{=Mt>?a^c1-ra_=XZJciOlS7)Ue7z#o8LaL&v2~Htlht7&EDP1cWqy^W#i1%
zD=Br2m^Hm@;&^i2LBodRl$Q=DDwKL3OIzzH0BUng=>k>cAL1%Lv*r*`5d}1Yr~=DG
zc(u<U$cOpMq;<OY>EmKWT;_izhau*Bj>v`Wqh3<g?KC(8VMpb*Bk}nGGls-&nG?Hp
zZs?*h$UCXW)&l-6XE*h{zANbJwxH`fLWkx?O(^v$8{jj1kl*M6?~?vrd08R(y at UE^
zM3&_QW_Jt9?&cOB<r3)c5fkC!?L`*g?(0Jc at Qn)hjfwJ&i>`0cj#Pz(F%3bDKiw=5
z)?dT~PC0nV2iHxDKhQ!rzm(hl`U(m^Dlwmg3aUQ50{`@lvmpzV5(B|D;r~<*NqBMo
z9do-yt(o?Mz<%+!wNHt3>E9JPWDyhGG2BnK$!pS>XBJ4ugEe-rf)5D!F*$!T@&ARv
zUn}O#@t?pRj(7GIesZqpvkS<cxbBUI4`=`b^|gE6S+jfBns;`tX6)L*SXFJ9e#8Mk
z)z9*_cXqDWwH??m+p!Jg&so1_`l{vQ7tSN+Et at o<aLg!}Pfl6sz>?zrg$3gOS-5~z
zpm9^Ilcv at W(c- at bzkaU5f=n!$W&_djSX!PIUsqeWE3KYrp2$8F?pcT!6%_tM-wvrR
zY#;Db<f3oKYIH6RA8v0usR)H9YTdNx4YR_QjEmVgEA7O(gm)IF99f-tXJ7X#J2GzV
z3BJC=v!uVzm;(3QOu+A5p5r+v3;yphpr;?leY<-P$nfZv<k2NDxOaE2m<adaKxYqk
zS1(UDZ*MVy&|sg4FyH71q#=)pP;Rurs5Rm-0^KQUd|Al^DjNaU;U#UN+S`@$m(Tgj
zU+A8y*Rm;PGIUYds(?V;q!G$6fzqNR`^8cH;_v+F_unDI&V9SI4)bm1V%OZ$shOL7
zBdbnLS*ny`9JK&d_R`M3QsoQhUu(jv0IyXbGY at Z$_UgxRmv<!HJ5WN;!`%Z#ADzZ;
zYs?GOcWz&~gRyPJ_N_9uZC$=?%W}iB`2oi=mTld#jOXq8dFzs`n-~i=y*=;kbu-tl
zn!0 at H_yu!^&zuJMi^h)5A2|%o2k;LlE at Wj4HnXGu4e;y5A9V8r&*tDaprxijfcQ_V
zKQ(>2J!w|KcQI3y`Y*lf=s)OqkRRF=NN*|QN at 2Gsn>sH&3<x_&I{1Iv$wjeS=S8ib
z9=3Es;_fA>N7p1DSdnpach_^9dcAv~-=}9ByCu5iWIFXscF*e-Il3rz@{q8yfjq;1
z!b%1P4eS+O)ITIQE23zCM|z at 1N}Nkbpi6+CtG};{rw3VpyPvOjc&JZgm`_x=S6GNg
zNRWF-pq94S7t#p%s{d9tfyy>e4bd-gf=@CdKSIWM{Ph*42B1T-TQ^w%liF|~FAnLK
zeJ9nWgI6zG&?z16*MWUhSvVrhuVKsPZ`7}^Wq(O~)go_#e`AM#t<L|20bj)g5^wD(
z`1owmr{_}NJ(PB14}Mz#ew*M~Aia6%mQ8vr*}Ty(Hf>xYW5Z(ev3aAs+`MtorVWe*
z8`dw_xPH#MHM7^QnznM;<Ry#7&Yv at U#?-RO6N|}thY!syFB at 1|+`p)xU%_DJK|ucD
ze$4zr|CA+AWEMbO-32F6fU>E2RPq0&mn06{GM1XB1dM!5zY1y(EfDlJBVW+upmSUI
zvVQcdP|~7|i_f<nlc#8ZA!264%E{>43A+}h9bXr}V?p}q4H>uh_Wtl__WOtJ{JiX<
zLhKVFU9!6b7xn}E!3BMT at _R>(D)h|l<vqB!Pf<Vbyeyym-sHdN|AARu{kkRv_Dl!-
z_<v^)@bBs7;|=CL!-74+g55%cT!Q?a1AHBPy!3nlzO at 1RiU`TP7_)~7tLoq-U|#cE
z&A`tGnm;HO at Dlz*w?D-}sv$3n>KA`MQ>BjHyuSPV+0L0stpYsS`?<Grv}s{$S)VpY
znd&7CZ=#A+1wT$+`j#t=KMQ_rp at fFdkIyE-|35vyV#hWxzjW*7C0jND^~IYuF539^
zq797o3mI=S)-e|7v7UqVhT{$E=dWKo|LwK&)~}trZq1yvt7orSHFMSS=^%gUqKS*<
zkC{7r_>5^orcA=~YuZ1sv}8a at 5#VPYgnZLxP0)Yv|9~Gz!1*DuWWiPZf0Yn`U9cez
z?<9PKe?kB=$dE6jW!J-zd8t%;q4zRPDI<ZxF7;f$NyYRn1kWEuZHpp439r-QG4?ac
zqSj7>>frOiKZFNizvqp227Ga at qlE?FcSwkI%}Ng#m>HPc%dK};uYx{4LvtZN9s at D}
zzgtGCZ*hN*tS<hg13fd+{BpBg!h=0i;v8LFJ;Ou5KUpv);6X+Z7(i0&9vt8r=+AKU
z at v`@HhoOOgzPmXTMW{D>R5pP>Un3KXFnWG{VD_IF4n;bkjU+zg#lie1-pNGTQ}5p0
zcj^3&QztspTt|ZtP0=hU9Th;$7x9M)zg58x&a0B2O37>$-~I<L6;mpBd`6i6dxul5
z?^c-K0OmEw1=8!*Fy^ggtez(atM!<>X7${)GUlvaHD}GLIjdLBR%7PM<ug~Un6YB%
zwB<{uEL}Wd;rwy)=R)|0O`A-eOM^deNV(2=`xOrETae%2trn0Up`EyWCHvs~A at -62
zsLEFr6EOLF4oD;k)2RJ2cge%CCDXc@{BGTmB9~oOvJ|#*deFU0XAY$tq|Tr@!)fE8
zx0Ci}XutEaanK&*O=`Hno;<hbjosZYZ0Y^M(SDzvwy?JDY-QES($d1op|gXXOKiAn
zT!dS87x#WWJo9?_W_1ZG9f<57R at g6USbjw5z>vJ`u>3v&ndzYeGX1+H2lwjg84>C(
z_;-f_xp;Yke7B$g*8o44KtCs6Z%1D*doK at L4>xN!mnPPo_|~9K*ELujy*ezb;8tG#
ziN|xCzi}@c3ISYm=CJ<>RKL`(2nD)!W!KqLh=gw++)oH-YG<jsotuc~ukQS-;{Q*9
zUndC02r}sX<H@)7LVmj3JG216uU`wo1=|YM0&jr5YK6d?=anmXp0#rMtQE_7p1ER~
z9y69Nov~usv}H at CFJC%!>0;OpJ|B^D?7Z0{W=^NQr(7kxgGUU9^XHVp`HT7$765*k
z1gF}bWvg^1zc7IpD^SX(P#_FJKg<dNoG_UHZN`XoxP8)I8h%)juL%>rBK??=$Gjva
z=+WoEWDWd3<r~sokWWnan^+_{@62*)yU6<<+vX(hS=#md=APHzp`O+IgCo}V_ExsG
z7B)7Wl?mARc{_y#`DJx+PK(F+dv{L`%FPNH+y~n4+9MhNPv+~B+sm(@uTM at d|NK7Q
z8EM`<Qrsd#y{G~R1;YPJ2ypZDab@`Vx&`{V`1?5f`Ph57*}1vcxHwxmIaoN@;{=F<
zG%8dFzv)a3R`B9>P#OGuRE-Z=Nwq~&ngb&f6J83>FZ<?epMHGw78K~r)|1CJ96qpi
z-)_4uu`nOpehtjWL~^QUxV2C3tq1{?VQ->OOma-QccAdYliHupUL`o6wQ7X{+sl^;
zwwLL#WI70EEM2S*rY&6z=BF-MESO)skOAx`ESNWb{#*#ps97^0{6nWsDw!}2&Odn6
z2-MEpA!UHSe^FuIg2DCPYKh*ZcLRa9&@joguS)oT{SWYuA&5q*+KJJB8o4`2@*5+&
z6H>UO?FanR=U_c%kVRP^%mMsItegbZf&5V0^?YZ6=gxU4hgYNRbicga|MdFMclX&j
zIodclSlQWGnoPjjia=oF>uKZf?b9R0uUD7Q!hUW&Q at jRd`V{u{E$rvjzh~^|B9zbQ
zA$b8kQX>lbd38zj>)qWuJ<&ZZSo0sDKz at RM7hi8@A8$u5PX{j#J9jr*cUK!1Co2bg
z3p?A6mX-tputyKP*tppPS73TolL@>4BNFicG5OK|3sXudi-*O=Mkgh`EUI7p{VXI%
zr_G)V=eD0ZzVXPRwfpz3+PzDWAGN2Ck@;6(*kl6c2hRt;z`k;_Q28aY4<qgF0jLX5
zHz9o5lEu at OEMiPuylARCFO;!l(Ue6CWq|gD^CvG_FlpiZi3{d2Cd`{Ne*T=Xb7qa1
zGi&6`=_96t{K at 4L$Cr#BOK&F$FW at KPHG2NReFx+GMe~$h6lr*9sJ4XDGhdkYNSiR^
zr?T5O!~*q?;K3LO_;ucia6!Ei=a1US3|uN-vO5)Xl$hR?m4x8KycIh3Ll%yqw(GWG
zI`v%ljWhgCuk${z3}HXy&TdyYiHEzri;Jz3lY{`H30S*0*@p!>#YK3fC;0YEbxMkM
z?Ve1xPef@>Kz6sV!F?mka>EDrjUF;6x;!r|H#@3mfL}^{cutmkkiUOwf_DD!e+mII
zBn0?4`FIKbU2*<S)=mzV;NRZ1la*CROAGqt*ea2%AJaBrzWPC}R#0O&s0sYF`G5Jp
zUU?-bG9olOIwC&q#qs<n-bs7p{wo)EoIbhf=%ID{_X_xdy^tTnsy=@Jese=GKd!~w
zSGR?v>${5{pH07ezyxyOJ$c~*u+8(N1 at l4pqy_UP&7a5f#QAe4&YR2ggt>D7ykLIL
z>~V8vYuJyTHDmPb86bc7^r=H8PlWT}_6tXi$R9b}!1?j~iuM403SLY^Vg at ut8Dt;r
z{1JRm@})q at YA`I4Sxx^mnShBJaRB+J$$@SM7UgJ01)mw#b{05)s19jwGgfR%jR>AQ
zGGfIfdOJfGkMr8S5YO+iV;+ at URnpq-8xiJ7yN<uFli=UkR)qj-dpj#TTT5G8OB)*-
zh>EAXTTHlfQVhrsE9e)Tn-!dsMZwFzWPn$n?g6C(efszG9gyiaFw?J3kHA5_{rmRx
z at 7=?%dx}bay^uhWfOw`N=Irh1<mut)<zescCMMwQWNB|_VQWLKLAu?cbLaM*I${3Q
zL|83fqp>>vIa7-Xs90bCymt5o&u{t_vJCyZHGZs|RQL~xjtYy7iA?x!WI?PJP71K|
z%qiLf)*aX<HD43?QU2e6f1JEIylXptVc44tA^G+`@L&AV8G-r&<;>^J)z}8)<LAzn
zF~=~*&7L(5z|WaAcJ at rc{Op-}jG8%p<cw(}rcD_(b at I^36RGXe+dzd&^|lSAw=Jiv
zM0tL3`+WuvBDI%-7cH-P+ZPtAq3Z+jU-kx)l}xn$W2*c<ClFu}Y^*GME3jUNRR=0x
z2>#4%MC7N#p-s0~LI8~oXq)(d>bc!6Y=!XqpMBfs;Ig1ATO-m_f)e8VBEvm`0$qK)
z!M}r>o1L?>ts^YRUYUR$xqxeAsB=hwYg)W>e56m;B(Ib>&+IO6e((N0z5DhED9?>5
z&50_ at jUQDMHZUt;R8eq7m)NqrfV4#4*eDOuUT-foyz&1oKEi*TygVE|J?vbZZHP6F
z4&dL?&JO=?ZUW4sL5ktKn{y##f$E^uU`7q&o#NGHm0k5Vt`6i-?Vv5iHD(9!Q?z8`
z1RT?W`F|mwukjxh85$EE9v2stl=vrn`wRZck(<|do;|hs_z|jIQuD3e+bj&H+I-&X
zCQzB!m=ON_17y#%I|mfV!S*ac`0SaCv9r{WgBfEOKz-&6hB)~d(?-vnK5E9ak<+G*
z#M at 7qtYMGOFPkt<6P`lp>Kr;~=#boURpBivMCugq=MQ29coF=mv#>fP3;xuToL4kY
zn7qz;wc2mg{7pW;wgXHF!lQqR{=>v}+ss62H&nrxvF<Qu7<1JFrk0^?cDuBV=dAY*
zQP1l8_#`(dvTJ%^T#PTh`k}#+tKyd3-0Yp5?VOx!9UYVj*jw4#Irw<mdU?3SM|vj3
zgyv;?_v`7Cm*v^3OH_GY%&@`X`F*2G21b|W`t|D>Ql1-_*E?)zerQRKe`c51f&sXF
zT7cYrd^o at gFaiD-42=-r;N~j+-^mfKh5zqtZPm%j5(;F90-Zatgc{ceU{_UyjL882
z77RlLc at K>uVk~;o0R?qAFRR2T*sE=21l-anrA<a!BlN?RZs>zo{t_G&84?u*{s{pQ
z@$u2g|6Pf|vD-Iyojbkx*kL at pcK$l~t#J4<tM|G7|Bp!ib4;M<(V4WHdj;VDd**aC
z1mUBmPa8dBI?tn~O&v9Tsz80}6rM*+oy-_Mb at H&ulLYpYCJvc20iF-?OUI8bf$)qO
zrNBRI5RGl+rF1xu?TXr?!B2ySVm>&0>2^T(ZcraXAbZ8_)A<GkGBE#|#Lwy`fO3xV
zkNBfoE0KfPsE+xMqKL)@fqc66(fN}Pt?YhjTl%TDyI<Nq;K>D(Yl`XK1^*BK at d^$^
zpFyRR5a8ls at 9ab(tW3ZGh}!#lIfexIq$SYR at 0On65*Hbon-yNrFR~=Zr%(6b5rYHr
z`vjHdgpMc(D(Dw6t~4koE37ovzeieNX4il&$pPuf9)7;e1;7y8{Cp+QU}&Bm_O32=
z&Q3Otl5UF$*jQIG0gKLXp^jEote?+?GIdR>f}mkpV8Oq}u+gh)|F3<%a`kG_MKEvL
zPe)D06qDg<itQ)^(CZNyj6wbL$}8|6jsNhtSXfX at O0wy?{R<C{-MP8r%qeO>2IsH0
zanVg~+R2;1Ux9NobEr7^ygauy6G*+exA at Un-1vy8Q#7_mOqtBUs}G+tY53$x@;qhI
zut^h#@jQ7FfQR7>nK;1!`|;z%=Z_s-Ja%;9sFBQMQK>HF-BK;`YpF+rAGgm^fzW=`
zPKy30pWIf!FXF%Ie4zPR+CGizBy(r01HQ@`45umjr$u`<S%&|h{ICuci;r2RMKhU2
z=ChRcrfDDWcRjy_s at 8xn&zs*n at E-#IiHe{(#{*>^WV*Xiw;~GwnaTtl?eNlWu5OgH
z;-lQt;(hvOknPgv;FXykSUezLa9{u2teCRggwZ82B{^N^O-L9vxa+Jji9-jcjx9@{
zG%U1xT4bLLC>9d|=!K>cNJ0R0VdeiZ0n!bXZj)=+m`p&3kO~By>}@+*Su!C-GGcvY
z)MQ43+ZKl}2-f+sm<ASsZcH#$JHtv_6f+L$vM+)xEI?U}Ad6x^w3TDLjrufB>Nq0L
zDnMWtfZv3F65*)Cgt)X+^Q-qSIX-m#3i_uof8FY@%DxrO-^6pO(i>B^&!2(4$sE#d
z?JN8A!q7<*hEALy*ydRdWDJ=wUgLbogmL8)#xu&sjV%N4<HnYb9gV9m9zCjf%;=&~
zBS~@#Mh at 2^4~-45{edMSa+){~v<J244K)o4*n at eQ?FIP}!M}lFsuznrs?66M;o41A
zc{YE8KIUGdAYlb`u(u2KX4VoSKh7W76NSIq#jW)7P~jT*w8Hc2dl%KcOK4KOe`Gil
z6+Qg@@XXHc?v8G*4)}Z*XB7pUBujO1_M)XTD%3qC)+afR_6Fbn8A$y|J&}d|Q>TxN
z9g-h8afpmD#ZhBRB8TS3&lnXwydZVOjEF&fqY4KEr6hU>2GaZ{R-peQLVy^W;2*`+
zm~I<PKuT{`mIf=Zw6OE_WL<sn*n0Uy-6^N#Un7#~`WBGmNg$KB5pdo>dY<Wa*2hAn
z)JmZm_FOc9y;_WsD=!Cx21F<R3yg^W;+0n*KMeeTczj%BLOh8;e0tiy1ooy6*>(QR
z+eZ$H^T+c`&rkCj*nU;;gZb*U;6Gyssn>Uxd~nJHY&jS=Mn9L19b+7$IVc%3N{!LQ
zqem8x8C5hI*yHd=4jwT~S{jB9p|)jk`+&c=0{p!P<+1TSL7WaB$$6VJ62c=(oe1q$
zYaZ66A6WPgcR~65DuA#4Qh>k`F=|GY9J3KTTO3LsV>32c2LCiJqI}v+80>vuDgNJk
z|I(0K at 0hN+=^(O8T5w`~Kx~wENHEO_P$1-b2>}KZfCxF`q8X&XE at 8pJ+1*0=W%%c1
z`($?u&&?*`4K5xKTrv>kM~p6xo;alIj4?eIPVTjAM!$`VG8atlwr*a+=+d4W7bOfU
z3`tG$3kmiP2!IRG5sDBb|B<_!gn){4TSoyKsXnW^gQb%LhG6UE-r3I9#@9=fF_kFs
zmGxG_cy(DW3BWVe5dw*r4E`0KMNi<ENjLlovnntIjelhkTyq^7 at cHWf8u==T5Wb|+
zidS9{@XLrJ1W*yf1pc*AU<=M)EpM*yFKy3Noqx>?=MRK^lZSuqL9^0N&KKP~B9N{a
zqYTGmI2eU{*J$UUX!Iytec{Lv at SMTJhf&W3_Jf9&i_b4Dk(QpK!pd$x5Ad_7DMc=k
zI+@|fE=~gehA<z%PjuEd3%4WUrxE`W$8}^^G_^YZIm1n-R0RL$E~68omXPy8`&qIK
z<&(uako}psVLz?Z at A&GFyL(KSH$RA0{NFD^`G1;oRJ$hR#ApJp<N^#QdiY}_Jfp(=
zyC%EGMELdT9$hpLohJzKe`0y`v=M2Ohi5FEmOgoSpA8E$7fs3CwJLw_x{{OIhhE&r
z8hYlBpy)_u1QP}52&FXO<mN`KfomxfFhv0oUExB?3d9g75OlV-wsLi*Ujl^V;R&7M
z at PWPRl@gcE1!RR2?ek$cYQHVnSdBQ#`_<Z#L<c6qur97#d78$#dSW104d>s$Ot`8H
zx&A5~Z~*KpMnXI$5UorgtyiY`mHczZJI<b3wQsjM^B3@&0B?R=DFm3kr_%X93<3HV
zE7FJJk4|^LeV|~(@PZM;0Jgwej)x1#)k*a{eDLt00{G#>@`nz|A2xK*kn+4CWei|1
z3Quv7wDHr-Df0ec6ix^a$nTw(OXsRoc-fQz*t0%WqlO?B at QZ6wlYGVVAoa-hDAnh=
zSF}1*Hv!Fj^fQ}~Hg<Pl!B3n&%QE{<Dd}9;i^d+Le)r9 at +}2GEyu78x8x++oJv1fJ
zFFL}T=1lMpIrs7;1i*rn3Am9C!%|#>0{}l&E&qNQ0XbQ*<%7ZpW`&O~iX2y(G^Vuc
ztg-1+M<y<qn6zMGx1GzozCAx<$MQbMx0u7;{5T{o#s|73QNT+~z}*cKGcy4xy%|am
zwl-Fd4s>EzyE;=NrV?l8?``kxAr4>FO2i6;&)1Vn%3$J;ETPs!t^8J>XWd&RKWfwf
zL%=$u&q}?M-xB<jAgHLJGKJT<9oU6{UzrtIGxsGTAzntjfL~ZpauOyGo0giA(WAzz
z`hq9-TsprR at Iwg{=STK2FrNxY*W%=BwTmkFuZs4nk)>6$w5z-G%FDnrBY!AkNY$ax
zj+3W=t1u7p%bBrDdP_Z5O1iL}!UD;2McWsJQ;<I>H#;vEsZ(f=0sM{F;RyW8T~PZR
zi60a9CEH`6`EZ at 9gZw#XxbNIDjekBw^#8X+EvKE5MLXN|N at Tva!|b8(ABtSH-4Vba
zk{Ad72meSw_+%+jc`6f7Q2=n_qCFF1{F38*d#3qxO9|`K6U>K?EDRr-5A1s^m=rsC
zSnBFoQ2j3J=ViRJvj641|6vaIT8 at 1~L$nECZiuduaZq<47cl6qq6itSK$YRB#M#<X
zEZ`(9Lm*!^e!`_F0YNa&tajEpVHy!tl}6&&!8!98MP%j}*o)7XwZ#PgZ^|(jP~)E)
zA^5Ln$dn}z<Bn7=Ahz)8UxB at 8L?tI;2r;S2C_;(dy4H4W|M2{Z-8&a-*{CyLl3xS!
zsQ`Z!FdJW1WW?rCzzB6>hv^M3aM0z(UR*bBT#wwc63hWU1Hu^qo-^X)0X%3gQGhQl
z(mV&)YlpAp9gTcoFC#Zcz>nIgX at Ap3SV3L6K@A~4Txwyh1Y*TViQuokuC~NdoJUds
zRmyn|`1z5{RPE3PZ-xo5_X?Yju;4BF68 at icx!d-LW3dja5d$6P4);5`w#IuApOqo?
zuf#abf5iW5iQdZ-6TmYg(J)ubJv1n=TZ&ggG^%E7X>Q`kA`T))7Iv97DrIb0%8D6@
zbH?>}XJx^W%|kBl8~^^<|NZ;#|5*#>tDN=?31(_AbpaC*65UBk4=N*;0-Ui1XJ=>a
zAaQ{*G?}t%XpqEHlr;FH+BZ!!G%(LTUo7T^w#H5(Tx4_x>MY6xxbnQ at JVPvn-Igi4
zFxx_JAf*;RF(k`sGM$7NQU<-Y1}5;@tK$5X|Bp;cR8b%?Dlrigi0{@lrB_CcSNJ(6
z7j54%bNw3g8D5o`Pt8{Fa at c+mLm>GD!^(jdfNB}QyXsKq6}Q)z?^h%|M-6fK=E%>=
z&0)wk$1JkcT)O%d^AXw);HA|8*sI=tVLk|Y3hkoo{So1>ZVuw3)Pp`EX8W?*1N&@3
z`)PY%y&C7G<5-Q2Cg<AjLR?1ou$08Wgjn={AJ(c02@;1)mjYEPOu%RbfRjqDPf}cH
zR=2?Pq=;dIBZdr0n=mA6#mwZzQ at U<llCyn9!NCn9?;HpA|L6DL|8EtPKli17SSY!G
z!2}G_t8gJLy`l?A4bET)+8pdT!+B~GEVQfVD&pb6xlDY9?W;W>bvWRd1+O^9D0nA}
zf5MJf_5=grrQn}IbkGz?rDM=4StgMf!2v0 at w4+d$G;CoE^T7n7Q<E`)=+qP;LTRZn
zsVT8t(h at Uzr1#FM?NXbcU$cMD%yp|LuUIl}@d87`k4f#X1p6xF=U)$g45Z}2i9Q7e
z4CBV>Nk+6}C^9bxKwXA9DINQ~N0A&O&&e}6e2x69oPp?^6uHQDQDX%Buuz`4q#&Px
z&SO$A0I(uIMzsOmq57yf3y`QmyjBmw2c47rFAS#oviz(?NpHI;#jdL-q5PO%eDmY5
z^pxPF_`tYmpO9cLa?${Q_`eDPs!;3Y#Y9E-06+hvIIrjk|E?*C!wSNR21b<S^_V*$
zd-a^uWz*7E%_=&!W%PTepNsK|AM(Ffyf7Y7fZ%`EsfUx9`f9QQDZ>dVG7d+;?+8=U
z3r(|b8%rp|AL!fHfS0ud6&;e7!~#~;V~ZR#2W21<0&xBc_TXPKvc?TrH5!g2>{QhY
zfIV(X at Xua6JnLKlPxabsQ~{8HbQXXuM5QKU1u^NVF=;7rUDJ~@d#3lv&K^9-{5qQ-
zPhPQf?812?=FS{8Yx<BGQ~0x`;mxq5gBjp8buoyX|1HSZ(V^R|{k?JqW<l2n36d3c
z&(kiw`m_G2JZqAZmutX$?m%GA=P(+!ZLNEI#Pf6I0YC8<!l^PZu>$2-4DN*s%Thm5
ztYPnFDdk9&Q<EQE;4zeWv{6(T0=fiA#2d(}>~G7=kq&K`?bWDLJM!OVf$nTUD0@=$
zO|u-*&wbNO^XqRqPRPm#PfZF^`1cJD^$Ldn2PypPMg>g3Fvtsh;-aGlW`$*RjTu{-
zwQNSOrPI5to0qwFP5JrV5FR6tpZBln|J4W8-|810MuC{@!yv%Aiu7bG!>Mo}^=N at T
z1CE4suxJl+b!F)u;w;bqA9wHlW!F{Z`!>#2&Y_e_IaQTZQmLX!s;J62=cJq^E6Wj#
z12|x8z!)$XV{BuB$ruwFxX?{#x}p1axZ~b2-W%_Y at y2_<y*KV3 at IK!;_ueN|mgI2z
zjIFJ8*4Zc2Io~<wcZM~Wb-)Jj4AAf#j(^wrTqC~3yiq1mAeaxEv)h%hBb)*xMa0Qu
zK_Y_)K!H$MNP(LJ%=Ddi9B2^c%Q at H8I{wSC1r10+6H)*js_*G)?CWVA8t6T7bol(4
z<JYeozyIo~hweY|;B}5uw7Y!p+VKajjjQ~pz}u(7ZKiTf%dg%z^7zC3XHE{BIn{k|
zM6zH6rtiohiNmo_y(1lRX%9i{Bg{MCb>@i&M|k?2Rm)Y|V=fpOUcOa$slabvW6;|w
zru?1!SjrO22T+#?#A81;mT8EIfQ04FJKO~D>*My)zGe;^-qF~$Jb%-*!?dYqM~3Z>
zpHIS`-z{#cm-4SXkXu%gQ?w8AzlW8H(*H66;gLfR&!R(p`AxNr*Ur{Hd4KIE?jQNu
z3kSdULg%ZW9{$_6M#Ff_nK3`W=qqUx7o-NVvdj?R6bDkEk|aoxc#)km(wRZwqx?a&
z at K5m!nIp8lCsH|Md{IG$c`kryYj=zg|77814zQS{BV{8*ha>`+2~2<oS6x}*qw(`$
z1+cadS96U6{38V*zp)+`#JQrS=|FR1Ra;9%YjaI!drenILvMG}U|-w8;m#w6x{e*`
zKYgO_%*nxXrw7iR9z1_0ruhSHZyxS=;8zupAGgvRoc-sYw)FP2_4l<84s;F;b`B49
zjSP2l7^Hg+Ng@&tLEX{LHNjy|LGxRXU-1W&zZ@=)c3PZA`X8Sc at H_s=T1Itl5%^<R
zA7?a51mLR(0!D-i0X9=0jzRnVc^R8QJ{$CGx^gJ<OCK8zzlyH5lID7te|}jhJxNG@
zLBd1+<06oQEHFb}IIp^*^4L(<GmlhWIo12zqo?2b`p_ at leC+@D(`W#XIWzj*qnXjy
zmvpx&HIU;q60uC2+X72Tla;n(M}}$$DW)<LK<g3~!AT;(4|IsI0|PSwY>g`X8#{8f
zj|pJL at Glb(sC|nCq5tIt8~!B`1n6c6`SJq%hchmu%Az~(6cNHBzzQ_fmDbA^9B67N
z<J{cHQQ6vD+166i(N^2t+1TIH*x%baGQ`nw<Y33qLt5u$MgFR7<KWXy5V|qsySz+(
z){bC0rlSAP{q>!Z#~<oGb?opH4|ij&u3zdpG-84<*o7>ZI3N*zAQ#a%X`l`jm}9<w
z{4c(03v%kqwC at n`Gq}su2$s|biY+V79FTt?Fa8r6f^j53(`@YKTSMM;C$ML86ByUh
zUE5i>M+{^x8?tX$qxPOX^)!D-d-`&OHy>1VcN97Esjg5%9*Q4K|7W59rTp#4&4G=e
zjdMzh%FiEde&|BO(+|~s{3>k!{(t at DXxxrDlk~o0-W~Ia1r0U4dzc-d9wQTTK!8+P
z=}eVO*gBmI6;p8l`=tv3Kl(q^`PyAqhbey<2xCVgNEl at U{|xgQ6a^ANl?iY<#0=6Q
zr+DrxL_;jd=#U%)G7g?N#spZ^kVHVt$6()32lC6C8cG}L%9|S*l(#ft5h~gw1(hAG
zHC^pB-5m}6J at tLv4TF7=@>kf?@gHe^W}>kTCc=Dx_N7sel+lB*SYnJAY1_|V8~n<r
zyB at emI<IYLptY}8wqT&2qhoM at L$VMZ!$TN|qyrh5$$o<D<;Qlee7B-Ks_HanYPNrA
z3RVMq6bLzYENSrVX(tFB5$2&c<B^{vaR`YJs|MKZ2zQ$*P at 3(NZeSJ6!rYxKb!1a2
zRsn3fd at vq(^@F`dFdt%`73KM~qO!2R+A;upbABWI)2N5wWYJJ}`MD#l4__=lHr)BO
z=P&>6dt)LtX)^vDCmkm}*Y7GcYV{a|hLnsW4VSso4{QNd6P#zUVGzon#%`q74gdTE
zxC7{a-KCt&#?S_N#4M|HI%Kv$cRgjG9GMIRXF0|5=co%S+b9Egvk2gygS*mNrn>?b
zWTqVTRc4wW{V(J<)@uOxF$Bm$Q~iOKCJ91Y%Yn9*s*bkm&NjksO8BbI$9DBiLc6K@
zc>IqI{;(s^XtYl-GrAU{>kn`De&x9%pZP at pvyXONK8MfJerTlozBBDZ1Kr0CyC6V~
zTo!a5;uz$JgktWh6xQs6e{wOX4$&TuDlou-lG2!=G`(Zq5{u}KfXREzGYQ*Myc>#u
zv>dSuZ2iLd7?4?OS5gtmepT#I#qMk+FFY8Jz_PX`eBS)(3JNl5NJZH{;FsnH{1%5a
z<}X=5`Df+jm7W+OLD2HReO=#p@!;>?=B37jYcv`EUQ-`OPmdqu5gIMX&)P>H>D(Q*
zc9<peJ92Z<3C!l at uzU=wN1sgT|K*DrfO%LD_{SU|6!0Gbo&!WJo)6&<@jsufAwj!z
zzD0zj^DRx_c`;>*-3vejNRuH2L_zIP><$sIq=5gRI^TJxXb-R_FIHbyT3b_MWA2tT
zNGOnk5;F=&1m=K4khX*uf)J#=B88tQ4r74-hL9gG6!B8f@#{AS-+le$*FJmrxyRej
zo#?#pbW?X%*NG!I1=s>N2Ur9E at 3PQ&a9AQ>5&>Ug9tt{>tt$ebSD8m5Go-rY_Cg~q
z$tdP;YCll^R^B82k03<Ke~PfT%Z&esFY&Uty_EeB3!?rFQ!;aP%7Trlt4ng(h?6bY
zXao`Au(+iWFtgw#r at RzmlU1}2<^$|^7vyVw7E4sLP|KX(+#E6jIb|gWE*x*VdbaM7
zOYL8LYGUw5?{dR~c<}o;o2V37iGqCfk;4#xf7T9XXYF9APR<@h8>p?q1jq`gb0#7n
zhu2^)4e$70vLJ8)WDev48~!B at 7zh^u7Y7^xOn}6}Jz{=AECMWu+99(AsvWYLI`$U;
z`JNqPz>iqw{73q~4zvsQ!oLj~>&UZ|HPx3jH!$P9tsMCRe<I)$G(X%1N%2EGXCjg#
z4=CwaxpY?2VHf!8xD=fK>rYR=`$peaK7I7Xr_a9r($VLiJoxxSeV5MlUq0W`)7^e}
zr1Qj4 at E;w4MSvh70wY5P{)KYHC_CYc<r_2Q&o?Hnh{aSSS>X4261h>B03yjsd#SOT
z41wQVpHD{$ELm_nZFAW6OKq>Vu15 at M2Sf=pSzvamrNeFZmBS85l{!;_Sy at iCKb#-%
zi}uimia4j0{b-3gt8^s at YS$_KpPyGu^?p}t<CFJyz5MKW_`hMmkAC845ujw6gRXJ3
z586pXX?myR<zy7(W#nc{=cDl9Kkfpf|G~exz={HS^FT-`QV<4+<P@`=BFYN)69W;C
ze^DR`hm;x?{v$8I3+J2yVG*R$WDZzmApD1^F(X2CvI6M;x|$NswbjLSHAS`6+%2lF
zEn>2vj)Cet$#aDp+r<Muemnu%1Dq#ed+K-N#N_;6elqZzZ(jV>xBI{JDOgbFxswAA
zUT)~@XdUct?(S;t>Fzvr%xwXTs14ZT5g$H?6krITJ-E8$xm at 83{FXX*R~NN_wwJjC
z at Pay2UxOIHBjm@XraxlaTQm~;o8P630Ph7CVhQ}x%x$>9J5ThmSsO4bZEvOmKd<UQ
ze$|0JMEg<uRQo`9tQ4QJe_N%lE^Q_PTCS+R{rd__yW1*<dt09W_>o_IYcx1V1Ni1=
zlHNsKqsvQn7w^y9w-+hcLGL(vCvxQHp!`k$FG-+4&>=w1Pvcz_pxLqr3Xr-NEEm`g
zL_kqcPYtsoX~_ca!vEnv@&c?Qle_>NVOS7e0Bja10RN-|h=l at vQjm6Ll_lRlUq1XF
zLm>WBSBnS;|20*`HP!oTtM^w|A`4#aCY^8OKOXS0@$yCEfnUfU1Lw=wM}D$n%qK2A
z`^O*j{P30jZ+&6tTVEV_`BQ^0Jw5dKr at J4x)brqF+<}f$$9f;Q+;v=ZsPp8}j-!X$
zhX*?kjkFK;<8mt6z&B|@e$}54;c?~99$sRJszn#=G1v?INv>|F_@@v0gl7<Lh5SIY
zQ2rnR=>z}sH>_D#Q^dg*<kkJ%MEi+$X0y(>w0Jk*-<zLltGzOODb_B!bgEG&r4AAS
zGXXdSI0&UZ?S+lCHCIk2!P4*EJle;6h4}X>tgpdl at yRpy3;!8=^T2<4K`!0G=dhpk
z%4HnJe-_~m<L4?0A=;xBg2KEhe`W;!m<u3AB+d{1`33O;2wa#rp!VGhb`zlLAa{x_
zly?U#Xs%@kA{KP7N~UGpZD%F)n`n>lFDnq>-wXk1Zk8I6^GYWCUh@#~e?InDJSPtM
zlR|yG3&s$E-amY||JUCf`2H)W-uhzqvyb+@@MPx$7dx+CXghgC?(o5(-t(v04-LbG
zz<<}N<Lx6u-N%n8&VWhfyQO8Bm=Cny++K3)Vm>nh=3{Pe5ahHtr$RlbeXIGIYN#gx
z>|@*^tP1Se0t5e-wztrsm4#XA|I=EzyrC2?Ap6=;V)&p4J}<Qoi|{^F*;!hOZbkU2
z^E4 at N5il=66li}_UH*Zx>hs6rG5MZ?-z6e?yM2vyIehYp(oA~imhR6$|L@<MR*=h|
zO#Bm6%%+E)Q6T64PJvLc3>5Z3N13u!6x2A6?#6ip$cQ$WCMj&<0PJNEI2LKfJOY^m
z_X6Y#lO03R8LbryvedB50U|(CCVaZP?m`5F|5_>k{Z*AkX#VP|eU%3oi}^%QXAl+q
z_ at se9rr|@n{vLs!H|qMu>%BjHZQ#eR-uKfthTeGb(09Jv|CuL8zVdwU$L}9{;mN at V
zuM9nWb>Qj+f<ir)&vTHu5coaF&zD9d0qr5?qX at seBs71(e8Q4WeJ8<sx&Xd6K=sD}
ze%w@;7sDmw2So&E0YpTUeR$cKI`dRtUS%1rXlcJp*IC*R;z*+T38bV^Z(|kygchlD
z4n;sLNG?EbZpGn&qMr7)2QNf`j0R(>?prwNZ-md1T~U@@UP9MsDpA2d;HP~wk$>?Y
z^#7{m(*H*Og%d2G#eX~mga|0QZdL$U&|Qr!3*bfp9ui_6z{7&vBM!U(EuT at bbg+ED
zOg#7(3&Ocmc8sL3t)sm6ZuXsYUl=Q(Ku~>cu|%M{xV9SRv#*-ohT|xINr4CF7stTw
zJjX;JoE%TFPi1}#<<HCZ{PtV at fBTKWcV0X9!>^rw>x%<ley;oR2l_w#c<0sgy^lT6
zd+}`d*^@ozPT~%9ojcWi>1<5%8|<k!BhK$Wk=OR12W}_GuTa00bXq-+X#W%g`*EP2
z*3c~rc%T;q+zk9<p(q4G1eVtnL3`lOIFAHU1p91|pSj(-U6EHJmhRc5Pz0=Fxoujp
zx21k>Lru-mp$PWzgIkF9(J$q11pmpdD$hPpva>{u(|7I{{#E#7$WP=y at _z$_Tc{@l
zJe5E5IYfah5f<_PAPeSEP at _O%K_miD_?8HO4yhu at JOXCO3*3z?7z<Kf%pKuS<MGoY
z0y^_sn{!tT`LC`*`R}i)K>riTk at Ao7ypi&czz^Ev>AizLHaQiXkG>}EHKP{{2j_nO
z{r<mwbLf}fxbpWuxbo|_4}Ry%gD*dK at b%C4f9m6>UjFpqrym`D<Qfs7-t(t>AG}Po
z$E&SWY8%pieH*ssPFWJzK8Ke}IpMJ{MC9L at kI2uIlU!2}07a1OruV()Zt%boc&&oW
zN~aeP;9p#vv$VW`<?xyN3KT!g&!zDoA;fJYQg><Xtp*txk^&N}I|D0VENBn80EkmT
zU3J6x<HOHC9*=w<j|S~6obk8VTUV83TgL1xF3ez0jl%rxd-FW)3;*Ho1 at q{C*ZB$+
zy23Y-V=i#u|DyJJNPxG86bLm&1mMMgFaZRGEGdi?xYH?+B*OAyCJs!xQ>@?~UI4Zr
zOpV=csWHrfY=Nmh^&K*er&v&34bHCzJY(QbB0uKyjt&0l;Xe-TiJ~;7TXFtRKkWbI
zo9O at he)f&?KYZ=f*I(>??y-T-eX{$}>wtggk!wBoogTP;vHjSg0Q{CKw7MxVp9uV_
zZ9 at +b-Xt<?!C~h-I at 62H<D9S*fj=(hIR%7I;}W#a9d}R>0V*J7xC2x~Pzyx=^W|*&
zwKq>{ALIjjTAEmglc1I|UFBp{*90Q4E7O{mXR#cN5 at _n5D+arpKk?uPg8%%QirwYK
zv{D!IDa<4Cvn?<C-j%9+aOKb0{NKe+ek2Y+OPoJ&0R(m3wTzhXZ;u-6fp;Jd<_HHa
z0AutU$0BozJr|H*0%n^dJX_Hr903ao5e`KKL5gnk0wFg9Msx{;7FAV_QvMP7SMiU7
zQ-4Bu#KSc~F5*!=mGM~KboAmE|MJr-e|>lO*WbMM5AR(6!;dcf<n`gNf9~L$FAcu<
z)Tyt$aQw4RjXd_?(N8^2T>*502*1<?Az~Gct58;P9zp>Y=ZP^N<pcviSI9R#;0?#d
zJWm7R6JCm=%_2&o90Y$5I;sK?N!sCJ1(uZNvDu1)pJqN=SZ_}6K?>=u$rW|QURN22
z0KR}k!1gW5$)Px(O3||ZuF?2s<`yda_?PncDr#-atEt$<eqn0BxYzKXC-P&JKQMpL
zBK+h368S;-FV|UUH_UTa at J`H#3IFhL1GxylNrd#ju^@8+f-)f#K3vGkr{^j)4AI2|
zSYE(PfL0s>erG|}aYYett(wH+GZqBzRX?uVZVQyZJGp)q=P}wZ at J}JPH7V3X!HFb@
zL4@=11{ePP;|st40silWpTBkCoi|Rs at lyYbPZ0&}{p2G at o_qY@laKUYz0X&25$aS`
zCzerFvMOu~!EYt~VBQ4ZDx+c<F4z1K?D;C9 at t6bqwr=ob&iH)JkblA>v;!g+tmQEK
zvQipL*B$TPp0%5mvue4|auVx0<qNEAITa$1MuBmh2(WL3wyq;(aA3H%q_^Y!$A4aJ
zr6NBt|KdWx5A#VY$Z_(6&IkF#JULYJ5M;a5IoSjLNP*Us<Lx2~?*Gc+)g%|hxd4_0
zbNsst;68$t#>oq|xRBza6h(xoVeoGzKrBcL1l$p@>Nv%M+!u~S;P%_3{E at _X{Kt(&
z+opikcwonmr}EtKt{M2__pbieUkv~1o7eyR&h<b3_~N^7j=cHOp|`#;^u=e-y!zRb
zU-%S7CR)seqCkxp_yJhx^IBD>t&afqV&F!?jq_Mxo4Ei%hBuD+kBR*F$r}^^=oQ~N
z42vunzt^mp;D6?7Q6LrtEUPTsvUA6#wCx-l>Fuoc&N^$2ZLp#+UIgR_m<eD5-y9am
z5CyHhbZWE+#4GJvIQBPU-Ay)|XdC{w at 6FwopQFfUSoZ1s2P8QE0r}E+APuyGE{pb<
zJAepC3W$txm$L*!M!^~{$SF1#052fkM>cbSQ7{9cOqn~yfeDZ=Ed8&zsMUxP8ifww
z2*~@x5eVv~WecSIkwF8zg8vwxB=AoS|Knl!X6Ac;^^FUE_q~B1yaNBf at a~&~U;E6!
z7oHh<`MJJl9vyh at F<bz^kLDNiK}FDBz?TS_$g89u^JnhA<6jiWN_v9Y9%DfcY(d((
z6UXCx;_(egfxK*cBN!UeN?inkFn9X~VxbFjcC2i#+?bI at Baw~Uw$X2S!`3bIQa}n=
zQH~TuRzU7BHI~MLaD=IdAP|~gQ(4m0HX8rT+(Ov<OZmGLHq@|#JbhO(iuMxom-64M
zw3q9D&a+l1`6d0Y`XBON7XL9{*khgoJa<j`8~!aLW at vY#;Nc*1fh7*$|6a=iYsNg{
zzy*lBV52~m8nY$#PKp#15)o2%7(AE=+|IfTz+jYs&mh=ahfg0w_?PDQV+#8JW^g{<
za|izJ?W=$N8B3Y2{qe`}|3g1~b>xlDAO7~s=>LPSJntD^{$7+n!j9VK at T$&;_AAcG
zVf at EvzrohE{bX!sV*JMhXDms8?T?;T{Ml|$0``KWDaxE}8>kB+Bg}5Lc)=U!w7+Q+
z&6d?&YV&4VZf at 8TNkJq6a)&J<Do2=PF(v>WUee#$aA}N0 at Oy;+oazI+%C%E)`u+mk
z-mQ7r+w*hC`9kdkc&I)iVBW4AUcx&pC$XHbYkQ|Uh=7N8Q20)V(BxoS6evu1IsOBW
z!0JM6#)3lb0@!2_7li|m_c5n9WI?m#4p?a%c>z+N#suyrHAXm;YPTTlKdRs-4*XN%
zKjUHeX6Ad}eXakU*9Lz0Rq|gW-~ICNH(nZe>FMFGzCbxN;CI?1 at GImi{7cNu=LP at L
z{Dk@){NSGkK4E&--ChAWx+RQ#M}}ZuhDoJhG|nfVx&1cbge3Kv6h5KW1#jDslDl&~
z_}{$Qn~iG_N<nA{;zU5<puiD!6OdC}RNC73UYh`a{i5djJ(Xp9r2Jw2`5F82>3qdX
zAK`yRLcxzKe-ys^zf$-pTW32GhsEIE*p3yv;R1x_K=?<oD+CmJ#Fq2r0%inSOaNYh
zxd563$*@YF at d7y(&Kod{1*rfaumVVdkzs;DBzzG8K9X2aBKe8K|KyJ9&47G@=U)EH
zPwCfm?H}K{^1JUJe)o+d at 4P<p`in>2{>nW|7U1><>shR0n|xk1Q?)*ms)h<mnx*+;
z3xcew6G5=>uK}Brn2*TMc(-wO=Sh-_$uXaJg?<isXR6o2TPIaVUvyXyO=Z<ucH>5R
z%+gv==D-X=f(V!|9I_xe!k7S-0~9sZc3eF-S_E#P3Gf#$sH at sd*;`ql{Gt6 at a`#xx
zPYQC)A?9Nd568d!Ux)-h8MeUj5BRYN&{t7?AyE3?QebW%z`t>OZ8L4;NBk$6kqEd`
zOcXSHZan_w7n>BwFCZ?2O(8I7UI0SjL`Xu!F&6pxFn}Mqxb)|ru$q<R*U;Nv9{%PR
z$$z2$wVnvEwJznV=Qr9fH-`#9;AG&JfX6W(kMjU>F>td2<AHsmc?rTq0ir~Jk9*I(
z06r&8(K)js2FtZLV+;7-&`|2zY{jG?Q3T`*;0~v4Cma;dg1jPvbZ~iR>uCHlb4x_P
zU%9lc3FV(zx}WXyr2LKisM?Kce*?dwoq%5j|4W5-ReJ(;D{tVgxwr1>0$p$}wh!7p
z{sXY1_>YN$u5q?6iI6)SX#2ngaG^-h|AAlZ$zq%W%MN&UEHD9c<QqoJKafgyd%e7K
z%Cz6be9ZF%ihYU?4gLPRBfoq5fq(hMp`X7A`9J!zHvvD)haf++2jr{vl?6c%JS+B)
z{&$DhN?w)Qvc81 at s)3~MEj1C!Cwpu{DHs>@V?BU4B9fQ@{uU$}z^F7Xd&ipf>)2z3
z2Kz1rNmc+6pvM$lcSs6YI8-di9N}!O2rk at P*4p$QiGaVXl>dQ}tg_;Cb9<@w+>+<Y
zKg54P{#E=B_@(@f`Ah#hy|IFSM>5EFz=!w;?VjGUiU_ZQR<?`yk1T>KcDV_P2#Ezn
zGmxd=xnaE=Y9H|5VFf~Ws<V*w8Z!NF%70YMlTXM;mA4z?{EqD;#A<TVnE&Vt%qAwi
z)C6~je)pYg|Mb&Czy8+2pS%Y77l%ZF5cQ(=&su~*`&HFuPQ6?k2fwnq)*_gABS9Wh
z+5+IjJZCcCCp<pB6pV%R@#m~Gj=DGq8`~t&CJQfMbzePOtGE=55&@40g^oZ*dLj$T
zrXxy0S;>2We}Bz=4K;fzr2IYRpI(?J=3~rX`k!cLM1F$IS6uMlgP-z+#r#p`()=b7
z27VccNcr<nyhqHuW*q+}2;6lq0G`9)ui#I2!lQX(K_K5*(7lUo;f!^VNKpQP=8wQ1
z5dLI at 8+zlAKf0JFer7@e89$&DZ%T%K{mtut{n_E)eEaCHzl||faM;0*n`4^a13rMq
zTzjqhf%fQt_RHs`*vV79>c-<~UvU_}87j5y><!;;UJBUc2lBssF?DguWh`Apr>qtE
zyH>ATJ0%eqiv{f|C at 8EbzvUv}FG$!2<!{ViG0*h9DF1Ajzv?{k=q>oeFJ;kAk)Kfc
zYr}LW_M9F3hJX3OPV9{l$sKl8&t;B(fNkK{mBPQ%B#_{t8w0t(Z&t=70{$Zk<gY-8
z2`gavGMNB#3L at GcEBG<Z58xwhY~UXc&++rq9mmN<Bv9j6lPiCI=OD`e-Pf=G{zn1l
zN1|B=iqA_0ARdjgeNXT?=eLzU#5~1(?ywC9UGv{C?VngWrYi#2pv0TfF}6W4bVzL|
z?!1$JaSL{DXPePP5ioan^Cp6#8x<6lBM`743x|49gvWyD;lJ;eihzSZi22iW7v at i$
zwv>MspVslOh?Yk_73w$UZ;q`of0g%Goo7sq17?vQb7Nh53+kde^GqU?9Y%p`(m4|T
zFOU}g<rLdwSQlqA at sq(Tgv-kAv;;9y5XeOs^AGSJR6D4=+3`OL{0?%UJ6*JocYT}`
zB+#UU>#zLj#|MA;*45vBk8cmoPpV5*ZGa!AMzqI*oM6Vvyrtf4>57LsV|pF{M>>CE
zFyHW_<48dw(#OANEC~M{5nxFgu~0V4SiLqiCIaRQSVV|$kcq(7EukZz>L45eRfmR-
z0IgAQ1S<P(O;J!}N>u7xQ5uDPr2M0>kB2=$eyG#D>><eW#zH;hc at w&w#PA=Z`eOT{
zE`EsB2dltb93&S^hLVCHm|Y0hiy2d55=)_1ki3`#g)bt(LG+Nv#8PLlJ-+f!faR@|
zf=OQX!T<R6;orW^-wW*l{OW^83J>Hfv1^Tbh;7>Hb at 3c8=2v)AoF|5558A};zc-_s
z5dn9E at 41JtA-a^L_VVnEm4$oaL?Cd7LlN-2SX^E>&Jj>7C?}idBy{PCpqn(9dN?S0
zVlLG_tkbcCuZ4Z`wi at _jVIR4@VV at Jwl~nd4s;^SdG09I9*b)DcwzpKT5gy%j=z6FV
zRUeZSzt}PbPJ{q9Xu)I{=W)M4?uNM at SQZ=snF+@~AJPv#xfJ`v%6}59z86Aq=<mME
z*F~u?`1c4u%HK4<njLw}2cEBW4dEJR$bW!;cYA>r6`t|p at ZP{*uX-~gfN{9}c9v at L
z`Q_Bydk_1OEwA1$5inoCB0@?HcsPh1h%7a1B4CxGVK{UrNnw@=vp|fDKwe2v1mMww
zNu?lqN?u)6UiE=J<t00d_oeU4XPqx~&RcS_%=1;uKV<$Ya^MgM4T=C;fHxAZ$frTt
zIZQx)a9tJE6sm=Dr#gVyuXLWnyptmMj3|v1I~Th^LFQc|n3tD<wl|-G3z(swgQuRO
z$r$+$!B5O50zW2T9P;x4;Gb`jZZM)fR at egtlG{s=-xfH_=k*2t3iyO>Z%F&$JPP<Y
z_(A6TbGvB~V1+U)h}+D?3zzLlUzKVsXyb;sa8R5h5Mx0W4vnjeur?{VZUt!W5g~c>
zU_2>^uFS8mroJefn19KB>YP>WQ;;j=Z_M8d-eO at N>v<A*zKZz^{|<G|0;D*Jsq`Su
zX=VIO21;I(UZI;Hq+>#1{;Vjy at p&kXi38GPs@`7~K|{}*mkq)LTVq8RwsoD=8kzX$
z(Ma<%NCf{__>Z{y`z-<_x%kqcJ&Jb1`K^8l&98uus`ymG5pn)8X#e|z`J{KbIT4`0
zG!b1qVnkpry+c<lT{W&F5L5 at 5BcQJPVMbtwRfq0E1lY`!9=W;2MdL+;B9M<a*w<KF
zP+Q3&FTlUMWWT_lmyPmwx7VxPJn|#vPvmDs5cUCMAV0*U0n%MpJB#Ole_O*M?G5<N
zIh6^()>{pa^M5aLz;%^Ha7rIZiUo_Jh>&pZ=`$l*`T!|Qd{R~btE6g&ko<=t5OMw}
z=C3~_!6%Ks`@V_*UxmW^c6e-`z@{3!xZ1ztj*pPfl9In8ne!)M^8LT-PDkQ-d<Qu0
z5%YzyT-s><_S;#x#>UxGVnNz<C0HZi>*Z-5fiFORHmm?mqzlSR#{>Cz^8xtFOLmnO
zQR+sM69WF!xusF+wq^y3e1n9qnEz5}hM12taPfSx8dv@(F=IX=IhX*(hJV;jT$0Ne
zj^;z~bFqtq$8EsBB*IKX;QU&_50f%0 at qR&we+-1?`55Myi-tw`4_$x&|DzJV`itU@
zIH7p|L_pv-!XJR&I#vn%3hdtw_{DG(*q0SZ4)TD#5B8P_eto<+n2$R&!lu8ASdcAN
zrG-ntf;=fURxHR at 3aCcfOM|ptcqhG65P{76T=tHql_;C&<(HST(0e?zC(T29i1zQP
zD9vVH?6Tq=MSIg(q+F1jt~$>YEpoJVj)*`|?L(<EO4XRZIKN at inU7#>O+JOy5Y=E<
z;t;8H$3O4}<aQaa;Q05abJs;cuMj!KQJkOt-cF+A7g$M~qzut8UIdci(h>MW7dQd@
zh(H|RM~~w~;C-?PvVG*QEzU`ufJgh~@EYKSe9!YnoZkTt(!7}egT+7ZK1u|}g?-Wk
zx8H{BBLdto1T-wg1f*`=OhzE)2ycw4<5VN<;n2<I3vadc!gMC*Km^##nw^q%7Z%W2
zF1M_h=DPdqs>gE*idq`->#DW3tNH)|AHcu6WFK4FrPJGRZ+?1S_Ka0(@8HY_ at Ea<E
zb?%7;55~sbQ8g9qz>ZY9D2+iqTD>K$Zfh8&<awggev5NTOkDpv_#^z|CK$_-YY-S0
zz^}Rsp`Aig`-GgW)RO>|#eDn>K{C1E(cp+Hdl-#>pV8mz$G98`=@`>SOj~MTK2$YO
z-au^JHmB1j$m0A&I1zy{!5^XS0|&o<fSV8jZMVb*WMuU2x|15|q;!C4M5&G=9S|Q2
z@}!vUz_Q&oaL=G2Gh61dcVs~xiv_%`F1 at yL%8GN#OIg6q3QC$t6wq{?aa~nz^#La7
zERn;$!v{)eY(>mRy-ir*o}UBrH~h20eF=vn0p=4#`(624Z*wsp?pk at Xb0HuNL<5W9
zB{~l2h04!5&qo%bBU;iWNwK`G`~u_r2+^GjRs76A$TzMfi-Q3Y_=SHRth)iFuKbaR
zkn_0z8z4Lazx4kkCSXjVh)Kjmjzc{7qw$zx5}U-sRh*N64-RkO?TQ#U;WyethWA4P
z^zlE&)J1?l&2Q*^<8}P+R)DPp$crV%LSrUib3%c%6^Pn;;T`Nr;Y4Vsbt%tcEA9P-
z^iD(sXx$0;^D4?XtLb`GxsYE~4)U`Ol<d;N#(ns_^k$)}VH$34c2=PLy~BfbxYDmr
z{8PXau at 9I}9L at z%uiJqI84<$m1;#E833}d{zcGBU9jn`M at M9XRl3B@I5d(DrlBIAV
z!jzc84>Z3#j)i2n1pW~Jf_<3t8Uy^v_;+!*X^HR;5S{~JNw6I;z$Y0FG{3+v!hfe+
z-AJPvD#i!ghwqW8i$F+(R3@!IGbr0*K^gl<(&8zkK&lS4bXdFz5DN+xOUe<*0Q|!L
zp5643qbIp+fk^?jU{CQr2|`)%9$L?F(8i(I&NTBZDx?|RE_$1z`S<Njrz;nwKDpBT
z*4s+Ex{&tbrwmp&vIHA#?{&^mSBH?IDBx+#96URv0lm`X5zamG6VB*jBR^8__K*-B
z=>H%QY|;_pUk}Zvut(2w5p&`sFE|K_O7mkBROA!nyvD$Pvhp`llsuW>6pv{RrZ_p4
zAh=zKi32)cu5Ntx3Lq)w6UxGe59#B6qUnl&$+)Be8{i2Jxx;s}r(|+2AX+2ibwR#H
zAPfg#1?VQn;rPc2>|n=={9M|V at 1(`_zP&p3 at 1>+?H>QCz2ly{lsB=dl4sYHLJLp#A
z${*xA`1K1~z{i!pLj6|ffVP+JMH`1Pe6e?s>992L2PDT@`nx9gD7Vh8-ovg|E)I@=
zy@(xd0(ilo$icv`ynuy|Bsjd6nFHRM7;ISZ5VZG<K{O&ip?;1%q?sF0{)w+Jxx9=o
z2ul^@0XEzW_M$yH6!{qgW`5-u4}55*rYr)A|9d$T15$goeiJ!>@{u4W{kLxOrl2%h
zUVs$^1ztc at Agvl{z^|1u+LkMWhKfi5{T0<#nm*EOT9KQbsg9#+H@$oRURsYr^3}#4
zz!&CYDb&oL&0Mmxwuj8eOWhp*RJ)<`Vg8)Oy%p{BH10fTKR^Y#>S3iIPgt(wK;>*l
zz;L{uA at yDKZBUiI1wH8DW_9~6DZW#)JOY;vuCa_jfPeEW9Poh&un?%lf5L^0QvQa2
zkJdWi9sgs4e{$$f7wVH<AIO6H*DIDv^P>g{2?7S(UiW<C&B2ET+Ee`?QxO4J59Hqh
zp%Mfsf7^x({NoNQ1ETVeR9h(-QJ`R%WMl%=GD0iGND8QrA_a20cS!{3ub7ifi$!(W
zg%KeI9FQUapP!pqSddw${aon8%Vc`Kjx;uNu~cu+(%hJja$ag|rR^=G_62 at 5a0uY%
z2)C{4q_myMgl?>ZUk)#6O?!wL?eiF~{HfBPJBz%h<`E5F<wP)?MNfA4#ep5+?c(D?
zINe5gkO+l+7>oG_%3l}@OMNB<<Oh3!`?(7Bm at -sU^FP6DDk2bi0Rj0T7iNN>b)6j6
z&PY;l&)ot3Lkbk%FTxuKc|?@F03yKVjL3onfw*YS9{I)C0=6zPzaWFHi*mEm=|m?P
z*^@@=_3SKs2c>#h;X*Rn`#Fp43;B>7HL^g33i)1p;LU8M^8?-jCl}7e)j0%O*YMoc
z@;!k$z%cXSLKVpc^UM$qGUktIxFZBV14P4&h4;MGj$rZ#Fb!c)C}`|}-SM!GDx8h^
zTeU+H{#_z;{?Hf#m%IN|u#cDADT{y;9_yWW7p2i!>1I9=j(`_IAqDXZB;)Y!j<Bs1
z^KIF|KST(RSoq(WMx$v*xI;ZRTd<cn(0YA08yF!Sv}%um-}iHo+E;rMdAlBXx5TS5
zykTTA0>5aF(|&hjBP9=3iQZV3S~YF9*3Eb6F8jHtX%%Nysq>JOzePk%=LbT>1(GAP
z7uNIH at b4nVa}g_-1y+b#!Z#`GGdB36fXpZnxM`t?;z-l>CgLIUpKUyW2zUzEJYVk`
z3LPQ^ApA#bd_qG2{z(hoGiSE*pCtUpOh8&1M93TJVgm3B$PP#fcFQAh?>H at M7YZM_
zP~u>Z7Pfeik2rr^se>_}U_U!tOK87=KS)<e?HkUu^MY|3)BM(}Gr)h)r9?nw`Kp-%
zU>s}C;Olc)*(4DVw$b)#+ThE0-7XkYl4wvN7Fms$p^?SmiRKX`Eb>LK#^YH!U&xO_
zE`HZCT#-aXgHfXKUb7=G59gOJzi2+Cp8r`zKtWCu2mJ^5IsE3nkBy!AYiXwm0^1p=
z4%WK)(ejk`DddY2`(;W08~%N<a8Mnj8acziJH?EV0(r-_X)j|PJ9fmtzb0sDLd?@?
zPe6FA+6Tff at W-M(#(acxAyD<Y0=d(8(Hn3s4ez=d at JE__{#+s4%U!}P?T~A2nr7ml
zT3-$m3M_ at og`8sc0=5?fB#~>ZxDa;7;y(fT=W}|tHxa{$;CCqqMPN+1a9KzcqW4Y;
z9Pn at e>^@xRhVjoUup)Adr-Ql=@Wz`@U<H7^2mc-awta~@dfjt3$fqujGn?xH`+Har
zXDM=|V8+7vVIph{{G0w)jT{HacaH$%`=;&cDYq*#K)%Y`sPM50H*4u>J)BK>dPSL6
zHQTx*Pw4_V3-!bmbAn0J!_N7IRT`9u<Ou4hcWHQ&f&k>ke_Tuia(l?Rke+BFpc-JL
zzy(1qJ!jm`Jc5H{xmbBz2)_f57{N5;i>)cWl at QVyrTpXZA6bN?LA-RBnRqW{VN%S4
zYQ80U*-e6CU^ZsRbdsmN_YaQ}0l<z>=%y%8u$GPQfxlFTNr8}$^1t^U at DKQ93ufFa
zK`<-8@)=T2EFZ8$n3TU<U<(8V_)i!9B?6QQS*4Kl|BfBxwsa8Z_wpWKZ~c5I^$}FO
z&Q0E~)zTAGac&Rn;XFn~q;;L!!)H9&;|{L`!J?Yd at TzI#R}+RQYYEjmJvr%5E1}>a
z&W3Pt9`kmQ8V)@x6dVR1U;8|A;1-!=AqdbOcu|7#S1c$F|Dhm^ga0JJk9Rjw5U>mH
zfgq6l{hN<`gd?~CjW{a+_2o at xu3t4{O$y>4US$7+AJPQ>OWfi_fM}0GUPgb!`2jqE
zFNOUL|2{SmP<M;F?{fVQiVy*mKL_H#S|Qev>F&aLYK~1LeBPXp{A-Os68L8r&K>-|
zm_=%T`4Sx==B=5P%A4_dJ?taSLzq#u4T|{-|3>(wgaNq;qvX+`F3uD0)iMt|Vkwhx
z9w~nzS%qFS>IC_=vd at 7H=MnRfIG9A}S!NpCWJm;PX>QcW*pUQE*Thx(FgE3H`ky~x
zBK(8u at c=*Ge4-#EnwTVuGu^wun-~H}mI&N-8{hN%O>5_GUQ7PP!vg#*_d-xtE#nJM
z2KxugZIVCD`1k#Dy4ts#uahGFYB;}H0&N`Qf)Ip5t+k610YC+?Q6CE(vW-9F3)p7g
zU=JxEEDti#&&pC!BmhvURnvK~ppN&-H|*Npi<wo`Cbdt5$MU?(gnXy^#C+75*4lL%
z@|E7=AoFEDue at Cs0pl&^nVMJY;53k<(5Pc{p#aaKG%f=CA?n&~=tZ%sOTX=2ZMt1i
zFLgPvVle(#o)rRK_}7cfM8?$v5Cg$MB+6s{3FId%@=V5mB7moj|41(4Ugs7`!6JI&
z=VdP5xs~67Z=3VN^i4~4Z(q25Bch=%(2_x at j?t+B^?08-19h5&Jb9NNQZAIxTv4`w
ze20h-^$%LzDJy{Tx5y95pMi>_`1MhnMjKolSSu}A0EEDm1EXMpdR53QTP$oN6zC1Z
zzXlwLgW=yvj^g}wNa0(yQ~^)yh`YLmcBl at 5<_EoK<maN&Ei4HXkv<R3 at WD{a;ygxa
zB&w#&LxdZ3vA;sf-<P$TT!;>d5lQpwZv_7y@^ZP**$?%1l}8|<vxARegePGBur&eR
z4hDXN_%#1F4!1$5CxY}148m7)(ipzcbTz+Uzl>&R<@u}23zlT1%}HH>@twUUWx<wp
z^Ea>K4*~o!Y$s}az)!u?y{nf){NgWT%&)^&8hhf0YGhU*;QyBL6ZollAmL>t5GsDK
z#uqAw0}mhsxo|_kzTPefq84fqBe;Tp;^g2Tx<Xino(vq6lL2^Z%TMb$pbpMOUpX7$
zVaC at j-ectrN_83Ahx2&AGtm6XZAsRQ+lbgp3G>!QRK$7ka{;sAUthb40Qz5(=xsx?
z!QPS@{x>qoAH|u!*92Vn=Rj~U3eNWJiMLS+Z(W|09Ot=SC+r-_mH$MgZh<4LzdHW7
z1^7o~LJ=5q5chVI3dPdwjOBSdSM1N`JbzQFc;=${vsW#fw_(j3+Q!ZgIsa|9p?@Ur
zOBafNLjNeQUA=tfhSi*t(C+y8P at z8fFsAB5@*`DmzJM)o^QIOsBCiD^oOS0N;2#f2
z5m7~iX5tIT9i}80XA`6WMKc82Xu~Kv-=6e2Nh^}J{0dgIAk3rTZMz~91mOYLBRdZM
zK<!&ZkylV9voyaNtRYZNcn|?gNLhpv{97a90OX3$DnkMIWvyT`PF;+*3;eG9`9loP
zg1rNqztKZpzGb0HgwY|{4if~W0xc#WYp9&KcKI>oZ`oeMe+*-zlz;4 at P)qA;5om8f
z?Z-c5Li{HQg^9!HPvSF6_oPF0AUxoI$*yg4*RCX^2mTjq+psuu+k&m at iAA6p_^R*W
zWw)-Iy?w)sbt{nq{Vu3JB47*VCQ&0iXuhk__!m=3G$Ny~c~58D?bTbrgF^D-{D;r%
zGvHqc0T`-+Gl!91oN%a6XZU9y1egFl74d?tODb at sX{tK~d|hJfYPahZJBwIfZz3QH
zBp+dk!QSkJ^1N2hCfJMf*xFmxsz|Y`|DI`njm38SAoxSL#&y0kAN00sW&j@{9Q1}{
z#zjDQHsqU8u+C0i^<>t~>%Kn1mw--?T?lux(u+u5M2$>Lcr;-CVYN>TS^@J(j)KN6
zFerxFJ08zBFrJPGxI~0982@>e=kHp$eFI*=io&c_W%<hsxVsVm7x1sxw}%6FKq(l4
z%=q{lRwDx7ALR2jN_p~)vBzKH4Ml`c4PfG at Q6T(qJS%?kgB-^Pg`oWeLUCId*l!)E
zJ9&kIjp9FZNC7A)s at _2;Tk-<oh9Dpl5nvt>Fn3ttO7IV=P03pVOS;0yk~k7oJ>p9)
zBceL$*lC5GXcdJwRkY)@2SL+;I2gBaoevE|$@`?McRrE`PY7~h)uh;{%Uz-|#$-6_
z59Co-?55S3(WAuu2<Uk=py_=3arOJ!i`Xs?Go<{5e^vXa+6^oT&kil{KUqC<sQ)AM
z-T?Ba{*>rl!oet8u(q}skT1*KvHHN?jqOz%+bUNU=O7M90j6PjekNlWDLRC27!jC(
zfmpi|wU3Grdhs3kKKb%VpP^5bESQDk0C(aqO|k-9`N8V{cyV)Wuiy^_pTK}$+?-!N
zq>hmBvX{LWkyPKk`b*KYXkBXpk2w3-eF1rh&WM06H3Lu=d}JS}N`Z=H;oqPxg5+ib
zk%8DS*7aOwPvLb?{xSzpAS3)Zo&oaBQPn4bo0)lX{S2k&ClLPcwc=HiT)zJR`60X|
z;HLJ4ZC77+qwquN2)+SiM0pStf_^U!q8TU$W(Wv-!poIEi@&5=wG&6YQWeNYA<Zw)
zyldm+^VCs2-76E{G4X?KKiIalzcIC at Xie2V@V}|6X7zyr(H>iWgdyPIGrRJU%f_Z!
z+c(VIl#1*d>}OyLZ~+hss#YLH1SL at ZaA34zJl@6|Td*iOj{rEwyZ)BUJM8r?!oMwk
z5&uz9v<reJ5ek%~&;tGgL*V`|npSAH5Re=J!!6<<w4=a5ueB8OyQqCZ-L at 1F>@lOX
zZh-A9uo41Z#N<WV-u%!2 at E8|MY at z&li$K<l_MnL5l^Fg(yHS^*7rkRUFkT_}5f&lb
zU>|{Bl+`VubiN(Rj9>xvQnDQ`GF%pSDCZUD`I_<<8YA#0!#hzfbiE(R;E#vs#PFW_
zmGQ3=|E$nj*=Nf<H^>3(QTrTgD)y!nX5svTUO3O3)RpM}MLV|4+n7pp2wA{iUa)u9
z{QR9r0o+w)+VD?~jGPWBNPdyvOXhn^yfM$OkT~}dv)cD2O}-y at BTobo5E!KBtOPpP
zyci6)BhMKSDjh7EO{hfr-?hDvDg1}wP)`JyJ{J)RwLRc>wXcE6f;~m<v*g92`mp_o
z>X2)|+QRcKh9l`i?MvGS4LbBmOySEa0aS^q#jnKTjLSKhA<ZWxF9PFahKmi at cM9_k
zYz3<&3x8ubR|t_r*uYut9e4-e9}W<OJp<(*miim`lTjCmMgaZ@`O_1GL;y!GG7UdE
z?iJ!pz^dWq9jE#>_td4ZPxOv0z&mB{?!`N|LSV=REK1+Jsx%LdM1T|r8AgP3z?2s5
z%bJtE3C$++O0^gXaf|h#rXqKMZ&hDxcmqyoHgp=_e>kWA<FARIfB(jYe^~_20vP#`
z^DB&rMKholNZ~;nnEH+Lh-b|tA_P{E5vg<_?Flk>jmebx02$%1f=n3>t0GnmK~)Vr
zODxEFKAOja`FxpJSh=fKgNMTB!}ysmS^C_lnkjY*&bZQ+lF^SM=<-JaZ*OAeUnswb
zBi~q!357&P;_o-p0}NdpI0r9c;Ez at N1kB&iZi;ji_+1bTbz?%^CppK!d}HHyiJM at Y
z_~M~qTHaE=b)ac;cP%(4{sYM2LhI^FxJzCPi?E at k0)n)uqk45&KKREk=FCB`lwZfc
zGgK4gXU5tU_pDfoEQp2jlg*tC5kd!|*5J>82QLyt1>f_B=0DSr7W^^JW9rdJvcXA=
z$V9+=gdhsajC^5)f<MX}VT8h6WAlzxCM1N*BTyJ8FcUTt84kq67>>MY*%x~?Sr&`x
z+`)Ghgm=`7QbH#Iw2B4zjI(z{fZ&56R)2+n4ObV3(IMn3wISutLw>W1|0YDY=7Jfk
zfnn at M;kMf%{7VFM*+(W({^P3RMBt4^dn5?aVA5+wUoh^w$BAL|EPEq2OiOC_FKaB_
zHq^4Yryf1ev30O1<3tZL>l(|}R2HspEQ1|wXssYeKv0xrdUMyVf(XrBzZz_V1hfz~
zarU<L^Rl+j*|7yj07j%=9Ifc9GiWmvS5u at f^Mk&j7bA@)<hY%Zwlox(+JyG|Ls3K&
z(U9khYYF!TkaC3Y)c{ABGYJAKMRtT6{<U>lfPcj^=OP_SA6WIW;zimmYmUOp_OiUb
z99ws^P3TBK=uK_x+TJ`|HD&dA&IWryJ^G6r(!qCZ5)nMaU+rwiD!z~cuHj!i)D7!#
zlU!lnl}bJ1n2*Se!O2k+5}^syZ~Q}}BqBooSOb5H`16ELMEn~u9`#<##Ni+Pzr3wt
z=b3 at smk;eY*$eE`k9F<3FoFnxc{v69vylS4<CKEk@`YC}WtrZ>w2e!%(idfHnY(Tk
zck!3!?MYiuxO;w11~F2c0;v%X4H1+`Bs at vj=ZE|7NC$#oqM;%{KDL6Qq=qe!uDft-
z3%|&m8S at Vv0mHv(d(ES+jprZ;pk2g90eof64F47^#kaK}k4TPr6DWMB4zFzdO1UbG
z3unn7+TL}z7 at FyG<Cf0qrSR=Lln5AHCC-3${F^ZEj|$s~_)ic9yJJ_zgFgy;Mwq;z
zd{!bdr-uCK9T^zoN_>$q(H=h;hkSpj)rZ?xjkILnf4tzy3po#;%sAdH5jfJheWYz&
zLn-l3aE|6rt=^9mP%J^RfQ$e>LTc4MB1I4(z|XN{7a6q7IT at QELNPpJe!&Ap=|o4p
zObDScY7MCL^SR<3|Cf3{AK}AT7C`1eY)79^aZzw6N5J&3D`)-$Sph^Fb?qh~jtCK!
zbax;ap!t0ffh7)*AYtC*2muLRMC5RWV?Mw?vcT(GM>2^XcGf6OfO-F3;)|@}0YBb2
z?%Q+`h&v1FJU$x!%n1CE at +XC7<Uaw5lhBVOog9BR5x{X$5dZq)jRQl#v*JNM<~V%i
zq?g+Gz|nQ*2eKbLQSb!#Kb3Z*1GT at gqk2nk{f6cPt4eb5i`P^X;vnEAtZypE{{{1;
z3<CUTrC|c_l;>?&jZr{4Pz7?n?1mwjK}``g5-XQ7=695)3ZRu72#Wi0-q&HIEiL#X
zk+eW)sAjDlgt(CDULYz)&2l00MnR+bHMGt%HyNk{?@{<iYDAFa2dT_buy<l({<Q~P
zkuSZqB_pKCu|wzwqxY7W2+5cQ9Hidu;)(VARKCYJ5x^*n34g;sInbnPpU{OgJsc0|
z8yF`7c$Ah-0&UXWm=uH{A3c-wl<4l3C(m!VdT7^$VffGPONX|Pw4(OG`L^Mfw8I_1
zp1T`cE7K0O!-x<HYytXzQTnE3IXh7JL`R8>@^-ibM2(hZXAm+X-7h6ZJY>}}{DRrr
zH;^De<4xt~_yDenv?Y)W$0h}UP%s4KAdnf^0yA40p!N{~Un6gRJ;+Dxt1^d&!qk`|
zIU&RG0c^)Ev&A(QQ<XL0r97W*=~qWJ?-+x3_`wpspZLl6al%DYx|1jc31Sci{Da;m
zG36grJ2-T20P~}t5+?<ra793Uj|Q7RerDZ;A>h6JQ2Wla0|I$p0|!Zg><5l>mLX`Z
zWCmV at MOd1ZHk-xTs}&l>G(eDmy()-yZ9_CjA7C2hZ&`<n$FHnXM#~rD5rd`po5FgD
z>0l{RG~|TNLi{Vdr(@YESHb`i`XN<(hw<~E9Ms5(l0>f30}R`aAtFUaZ-Rl9<#^~G
zkRvsUgGqJ*A(AtTSs{}Zq+c;Hh at 0e2pTTc82k)tWSBZikb0GYa?M<roi7R!RlKx*c
z8tvoFgi`Rnh`{<wBdMo*w+**$8*Ih|<UVp*j_~QeJ=c!ref-?6izAylYbcOjSd_iE
zV(+4ooH;u-LwM$GN(KCchKP>h7eI>ejv-5H4(vrDun6!3zH=ar2;d--_lY?LMABHe
zXPfv$5mYWl-SLZ0{g=AsS4#VvKjJ!{56oR*63W5Yqod}K$|8VR;nSqUc%4t`N}hrU
zAT`FF+=rDb;m-{jj^0j`UaKecM(!Um4l&Q;xBPFM`U|=s#Ht;f{7?Yku#78pGyDVE
z@$kHC7T})-{&^h}f%gUfYmRrVJ=?$QzG0Mq{^RG1Klkw7r!Eu!LGx!_IlOA9X>mot
z+}+#f5&1umzqG!1QCZ%+?DTor8O*12R<G!)UQ)e}+PNjW(=ZLV2G{}$y4-N1=qM;%
zn6`<)5h5S}z#=Fiqc+|a4&Vz+@{16X^g^RauDb;f3xpx$K%<X2n;}pbP?MG_(qCbi
z_koWc;qnfweT48I#EzuT`P&f+lMcy_1}5(e?3E4whIfD8Tk!YXikC=G{!v%MIOXr+
zkm!DnF9;LJNb*DPlL(}q=-T+;v3<{81^oLyb*=PEA1{3NDj8u2&x+o<6+N}UdwzcA
z!lFGX9aRL2R`xeAgE?4Ixp#T%0m7#;3e?E0U#-%hZR_DhD14<v=go#G!HcjIM2GN^
z!GL}f96QoI3+KfvfB&tRfmg);ZXygHtmA+SARexdEk6|8YM`K~6h4kH{;WF%d{o?9
z7?FjH1bACYW at xu?Jq+KZgBcz|lyDz3fa=)11c950n7bbKzVYA3`#M&_OKz{Vbhd&|
za4x`)!atLN%NfL8#utHU*n;;?1Y&in>o1RNed^+YS3j};`3DM~ya at R79zBZ}OkQk7
zcg>ok9jk_#mp7M#^VNr1i4?6q+$M?0+p(Y^6N|8<s!+8M8JlOZWH at c({M;Q>2hGjg
zO4x@$D0M_jGPmIr6CfoF9{qS=Lj_=#K8q&F6Y&&QzeWTgdgucfM20{?QClM{b#0D-
z>1|bADiEYKG9pMe=>um<G8WvN;V>{N1;PdL0O5MvXKwC{Y)<JL;?qv)y6~bH`7tSw
zl20H%2{oSqFLFVU6x=!yu=jQOir!`VgT&>Tp$KpO_}T5BzE<(|r}sT~J?rX`?E8=9
zJa~ePKuTv7)M(SgCpKI^vYNXcRVxP?5eF;+%3of<?(K`q^T-`9t=+$H{~j`5l8Ewr
zgaWdpMPXL)tN7=}HM$!XOYmD$0Ll7F7TPm#qX0Yzk5B_Vr7%$l&hUr2)&C2kf#b;_
z23IFVf~{Q;fZ0=KNt0Gl!yK?DO7B;CJjW()4)9}0jZBZn6YPT|zJBue;~q-#Y~uZd
zYKK7ihjpHSXF_srbZC71Paqm&JY-fNFe~ABdI8e0k?&S)+p||nUVNnV3y-4waRIWf
z9tQIpA2_!5OdoO4txw*!>5-Fo0qFdtbwv<<lEsTkb3r>&z!*tc*;l``W<SYa at V{_>
z7H4b$IWNK*G!5_&=&UX4(Cvzu+<g~nALRSuGMs|gw~n&pf<zY>s-Tyers9gd=FN=6
zdHfgyZ=ftdH9}zs_w)giVBS3f4UHo)8GDpj<NSW5zev)VOK$$gXJC~Lxdy$IIo<v)
z`iAx4C;4jPOWmMArq9P#_ at iZEa*ucnoKHnwLj1cpOjQcPCHbMwkMXyZCEK67y7!Zp
zpgjejxVY!~vHZvHOMBt|w9nj+2&}(+aMMG_*Iyi7-d+j+UtGBtsINZMwr!}Hun%z|
zlEpaAB#YP9mCW0{or=)8JGWpOD1=kam+U{mpNvfl3U<MZ5DKE8%KlIu35{Gwed#h-
zbo4Xudm#=;N4yBAzIx$2{a)|$Z7lEuY=;m7aS6kyNRjaw<M4NB&bSc&>jKP2r2j*a
z at fY!@>-q_Av{>PBk}0z`to9{iOLuKwxNU>hR5G)CG2fvtF@}k0-906Uv<6zTa8cSO
zE~8#ci;m&&tXZZoL&=DH{S8TK6Qd5TTf+C7p!@^!13ssV{|Q-8Bm&d$2qGDY6NCvZ
zk=CP)1^Z|c@=weY5h(uLBe(!tKY3xt%a3Nf^vH&5hu0iwUwgVY^<>YAuA24D<-nda
zF>W%^A-v<wUA3&8p;(9<*~+3EYNyGCsbqA2Hc=ogpI at _L)|Ry(A4|cRL;&$~eara2
z#6MRqyC-FF<N{+C*x8wyQha9;NzsoXE}du*qKDqAK_c=UDvnr at B1bi|akAi(Q#t#q
zP3s)N)t?1`=cH|99r3(%s}O|6>6 at 2U6|Na+8E=dEXnq0x4fdqbss%sG*B#7Sznb)1
z at L}9rG0Ei*336T_U*MMu91s3Ly-x_d&;&S8Bi!EdK`030ewaz{zvc0B#QBR}c(Cft
zPgT73G;}Ea#fP?k>I(da_z(Ecf8su>gUE{k`@NsIM0AwU=!TX9Yio-(wpUXW;ib`p
z{Z|%cQ#j2-Bm!`FgY`05Y08o9*aFp8QQSv9LZU~cX#0lQTh}q*CxGP0SS(wFP#_vf
zz{V~l&2W9v%&obbi2SMGc`DaT3++i4qp|02Ohti%^O+RZ&Yw$$1%n&Ek8p(Wi3gXT
zeC+V$3%#dLv>iFvG(6Ba*jL-rc at Jw7DD0dylefTqz=H4rV&M0h9|J#lcAjJ0K1AJw
z7U9Dp0u$>0El=K8{Mm;OeD%q?@4uMw#g8HmR77wl)RTFBh`8v1SDxJe>H8^-0ROok
zJ%e{lX#^EP99w$okqb(OST#&J(Av6U1|-GM|NQNQKsgiqXK^v{PqJp}*ED~wf})w*
zs281+z7ZlsL9e4%MU|r(jdDF(pYQ|S8ibGeDz^^yfX5{Q&NKBJb)kMSXb%STT3k4v
zF*TylDs=wJp4wgK2IFBLKb{!*{^-TWA3b>KzWy^OJC7Z19vQ43=&kAPs_be%(B4wk
z+B9q3ss)?Yg8vx!(fn5GCgq<1{&*c8Mufr(#`gsfnfNE(^0A5J*dJpe69C(<{^qAq
z{<YuzY}#iZ*m(a at 9NuluURF5t6Bo<B@<jDp&+UKi{vD@!sgY2b5H&)>trQ5s|M8dC
zog08A5d~UQoCD9nHD0kV3-{Jnc2E at Lm7;W(kO;6SK4qzA#Hb)bBFGU$kQ8g>J72sY
zN&%qfwPt)V?HQ*RxQkwMqQR|$eSrC?Bi^ngVl&<|$d!P3y2h>Qt=oNJBp&Kxj;DhE
z^B at 1{!OIu=PM_#Hex&WtaMMtKU0-)icSjW>(AHAk+Em(DU(`?=SLf+l8rcTchAY$O
zNw^j2Mq at r{#-13NjHFk%g?Dd61a`dgSmQfis{H!Xgg}8kxiCC}onL*t@{MN at fwGq$
zD}UvQ+>f1s=TIQA?p*)I>qk;gbg$^HB at qTYB6qy9uZ|ShysR_ at h4$|u{!b!+ez`L#
zlORS)jkE<w$%|17!Ez5gTucDqM<Jm4(Cvgq at qC$)tzW$yL5Ogx8pu)n|EBm)0Q*2u
zPldote9d?mp6)!lciEnFngy|rW<gFyO6vhf^_YMkJvpfeoc-9tN3LA#J9`TK-*RZU
zVX&{hzo(|Bv#PVLqP?ZGwW+wNK2ZK%>JX6su;77U%h*x<2~Zak4T(VT3gf-bEfItX
zKFruwAoKO78s7O5 at y~6~T;Bft^=(gI%J{-Zn|}UE)i<7_BD(OIt3 at w7u>Qgj!GB=C
z<?*vP$m`Azf`77OWW-oLytKB6bQs`YT$V?sY*|BzL;!lvim>c-L}O7=_S~IYMfF(~
zf|B<p61Hjp%%kfN1Y$u at P#PVx3@`#e1HvruA|WumVIA-hre_guDdwjO>`AYe%TF6s
zh&O9wmMvc1SUPa_RNtAC{hUvq96Wn!=-g?}17}YUoj-H%!Z~Qn;VT!9UA=t#`jvAZ
zedx-Qk0B0I!T+Hv7YEOs?m2m^{qRVm>Hn&(j*8B<a`4~MSkl}OWP2U?oR`OxKPr8E
z0^^Vlum{eQ^nY~seG`G`9TNv*h``RTJz4Xe&lG*;L9$>wUwtCuOCPI!`?FYtvM+s{
zbQs?5_UEo`dF<@E`v###c*nQ~z<x>1zNPggEBotL4m7AJs3ezi2(kmK1{%o}6YW9y
zV*-!@<bs3Hs5en37e=yp?yhZ`(Yk<T7+f-CK}kH?o at 6UALvHLxG;4;p!K8RHguniu
z68Jxqm?u&?S{&#Otr+IUH86Y#PtU1isOZk)N4icNWdK}toH*)(zEdX#5RKD151&6f
za^KlQ7w<cM?edBHuip3QBNIr$nMWQ3{{!bv^RgXB4z`R8HVpLE^>$TvwO4ku9%yS0
zm48_0Y+;`WKjSF>B&8h+!o(sFGXzObza at 7AF^oR>s6j$HEd8ZNU_S7i9bb7Y>+R=v
zzVdk0o6q7ANbO%9!8^!&?Gxk(He5Lf{<l1Fo=Ff+ at CQajrRc8nLlj8M9q6d0YJwVR
zR*K>CBI)paDj%qbR#9|emQn*CKXWU#fLs9SFw{6{0>b;+)(sKx<=z(Xhx03aOcgzg
zVMp;F#U7JxZXj+Q=0~ISme0(gljN%9GwCXmmA1BO- at 21Mz>=fw at JQ>y;nqVV9PNij
zd=ib_e)JII?qf%~k00$icDVb*(Y{m1`%fP4KYeoO>}h1- at TCjKuU$Fy!1YUyKbj;6
z*Pi+0$%pSha_tfpr2FJCLO|{UgMVCr%Fea}t<7PnkKtc6KROIN%JxnT{|?|u5tzh<
zruE`ek&($iKqM4pFGKa8-TCU1yTA3RJ>UCG)f>;E`K#ahw7Aey7XkmSZ#)C%Nj=p=
z<frhd%M?g}d^$ql2<LwEG=4FQ0(_Y~;UF)TCcLB70r|U#2q79oifAjrG6ABX9Mpo+
z>kpoT^DBe6DHSt;EdcXcB&EJm>U&9;GzsH=7o$MK5VB6Xdy4>n%dtJd3(C^5s|dA%
zTh_6;>LU8=RqoBX|9I=+k(Pr)It~p3PFz%u)`LTwx$6(L9UMXskPaq0j~?nea)@*H
z at guz_j`f>e7&!+)IuA8+b8zJok0S`zpMC1W6OW#F=zjG7 at O@|H0v|ifE1>^td%NWS
zwznje`ozE=mO6}2e#Qjk<OtMH??+N?!>tJu=>tR{pI|`2XZ;U8zvug(-Tm$78h`q7
z`IjFj7Rq?%D~}Nl%6$Ek*aa%$cAn|S9VmV2V<Zd6d6D_ubNwjFpO$efcp>t?v9*E#
z5us54zp5mUh4Vy2*VUDf3jp);Hm)Hk!~l!HnbZJOAHq+uG&6MH#q9+%j&Lm%!8G6n
z2U`6$IKQlesw2F8Q&3$qv1dBoqZ5Gh);@$^Kl%k>I~X;RgDY7mv?o3Hp_9!AhX}|w
zjSLc#;eeSm4-M!{l%5&I>UCzOWq1II;L+ycL1du~F*!JljX)59bkFgleJ78}9Gp9S
z_~QAaS1+A<@cOBT?mzvpht7QLp_30?KXmot;Q2GXr;bCbBv!)%xWHrq5CMfcrSOAn
zR}%iGqx>Urm|O(nVJTUN2}1NDH$0f?yF-3je)YBNAAcTIU-!MwRlN38{g1wo^V2T?
zduUJ1x1Ogolms!6e`2AChT{K2&7{Wg0x14pRGhsaKa=VpYJ}Dt>!d(}icr-8?cGIP
zsLCE#3$|(*$zNy>jxYgIBLBDsM1Cj%B|u7!e%|`kk=sia27eH_U_mkbM>^i>f>4{H
z{Yb>91M(aQ%czG&!|wx}VFx{u<Ea&e^Ea+pT%5DDr#|O_6N3E+cs9Tb*gBd9`xKuU
z=tV_04D>Y)^hz|C9Oxx)#a#)AF6&1ST1N)ku?sMzLnGZsB?Xv+!P6&E^+zsWIEtJ6
z;5Eq4i3hJAxq4~%!a1C4 at Q=As2(-Vay1O$}{=x3mcc&yUA5eNj_y at XE1z{uzaZ+%@
z$oD6P(lov&;%{32!<X8A`v%OP<QMwC{zotE`Tl1R2i#%m;*bbZ1BFjtDgMku>7RcX
zM|fp#9ffcNKU0r)5%~n|fIqC1ZlVxwK6!Qvgc1&-77lKMt%vy|4#Ywi7VhRQU<Sqn
zcJP0p0nE?|oCY8ie^Sb#e$?rkFt|o<tcr$aocIDP4G0nLwa0#!aH!XGeSp}W=&f(R
zZE?ot)g^h*LbgU)QkF+$&i-ewL1~(Y`Z>U%5N^P391!e@%-gxg0pHNy1MKVidQjKQ
zH}>n|rhz~lng{!l1tg+vcmNUTI4mi^5a1mQojo;j;r!8Smyg|l_1OJa4qm-DV)*Yp
zc??$qQ^Kp!?mozKDd4kM;E&;76e7grjR7(c0bV2m`NV_p?Resiy<;N&kwN<t#(UG&
z-+aC0Z(oJy)P3*8jz7G$`<wCt;QYleK7tp3X#oG5KY9vZfB-20f1KY{gN++5A7tSq
z at gLX@{GZgoc9>6N8C-~iDu}HtBJQc9YoZAMrd05Z3qW-cik<kUI>e&?*QBUqE^{l9
zQfvgAAN=!>ZK1M|b>b1)X*aFXpw%g{5?^(>93z(EIK(30BTt0M_v|r5o6etld6rIU
zIn3SUa2M{~b?>r8bGEKuQ(mz1RG&0F$hRT{5Gbhk_tYsG(_P!wUCX(rv%aspuBWTM
zx0|D;yAz`BXXfjByO0PTMNAqIjlLel2cc*g>~F;!m=ts#IfNA89TO%Rx$hkD(nD7-
zja<Gkbm1&v)$S9=I*uNKJ0V923EwgCAJCE;M&ndfaRkv at Ap+r>hBnBhfOGUNK4|~@
zZ at 80-73lt_?=s%~t>>EF{c`2&&ouw?t6AUqG|n$e064Q!9)^>7b^vz(i@@qgsvT$n
z1nkuyv9ks*n68Q3l{k#FF at V?uTHX}&qWwq#FV5J42%rFQhnZnaH#zcRB*oM!N-d%0
z(lt(rVB1*(VuLTB{j=zxLLa%f8v+6&ikk?As{5Tkcl7*wI)f*RZ0ao#JJtN_n6que
z!n~ann~~UBUsp17bxPXPmm7xqo!bcZfZUGSo-SZdG)A!J=oPk+0`gNF)!iMOYr8v{
z*QDL$?6Tm`LJF`5vLge1ZFmPGL!F04dXC98h6 at edcXs&V`9oJOj9ffV3IG=vuNnP6
zgS{sCs{IJSzXU4~fn-XYeDbxuAsR=)FM6Y-!A*-m_>O__hIieZ#hu%J`#My=^N-)^
z`p37SJ;eVz|MYFtKIITu-+h6*8?GGM{OFmAS3l{Prv#K at Q9J@bzP6 at _W<lvk<qqQr
zFD%T0-oS_`hhQNLiXCDzYjY|C907bi)<O~&!Xhl)od)>TWg0(s<_y{Z5-i0=P(g|>
zpso=#NnWa+$w&lv_Tu>%+F4CY3#QZ+te2S<s(~mZd|FS5E}o!V0nD>m7^)u3^HC{O
zo4sW%+J1J*QvMLg&%%OTTRwV93SSTvN*nsR(cx%vVHm)hG6&m^aANXcp3E$sX;o)?
zO;-otujy*%0`BTjW;hUyu66{0N9%jKcukB&Q-4qMU|;h<U;FT2=i!66#(hMG&YT4H
zB+lSJ$O2VxBov at PG4PKfKZyto@iV3^m>mCZJM2YnL<D%^bgfU)2Ojrs)6c&`3b^mz
zf70=XZxRA+{>3Z(|M3&@Uz9-Xdi^QXJ|%DjMTraLJam$P4?VI}8hx}QrM(i`pL)D=
z?Wvv>oz*zJl=@QzK?wv at pTWG{+o-u+T$;P2qCkscHl+eu$Pa^gyS8zN_S>FutPvwS
zFh4te_SW_2e}^0`mkAJ&9Y&c8x8%aK&5$-5rCaPhY(_ at ydfZJ7z%7faxkU0KIyC7m
z at hOvD?s^^>B!*A7!x^hnIPgj+*Qbz7>jP%ov!cCnd40*omWqJe<G}X2OWP~h!(q_#
z94P<pjyS-#Ir6JPKJy^lKwjA)aUfSkxLzXADbc9vXk}1~Xqb#}Zs_giz#Oy=4RCZE
z9PT-G7%MPf9`WFPXGnpe|H-D!WVLBb`7er?|5!Rd2|v?CV|2Z}&U-EbNuPG2yF`1k
zfAnJCzx^0(kLTO_FF(xt)hm=hD;)Iw7gZYi%9C&*%6_2zsVBQPJ#>O~VXF_e-~vO3
z at CfjT!MvKn6=u;scU at gE%K?_>?xZ6MnJ;_+8b?ETd}A!~!g$9PHQEW<AvT2lS+XHZ
zfjM9`#|&+&Bo<A`C}R`eairuak7OLrg5(9;0uv+xVVOynmFe85v<XPd#Lp6?iLn}<
zMYSYO3Y4DUm28vU(DR5h=8Sw+3fynUR(K8$Y{2kQ@&p at 2V7kO=x;o(VK-ZKxNN%eN
z6~5?=0lwOB&O>0nf}_2KvjM)Xs-vy4y;ZW%-l7*lG&<V2zP7Wy9wXA-*(gKM+uYaN
zh6q at IRK5Up6z9(n0vbGf8t*s&e^}(4i2n$&K1hO4(xcP5D~B|R?M!f2W{4w3V<vvD
z_$#L}UPjC(_ZMGA`4jW(_~SPVe)siVZ$3i_Q0s4AqbQDb0qLK6aPy<5Spp2&H$QR`
z{O>&7zooZ<Y%fUxmcW2;a4s)+potV1&4QpYB)MSwt4s4zD+>v98}r!&=OHPEn9x&{
zEmq|ku*=MfW$GzSvE2IAoFPKoB?QWWbdU>+Xb+|VeT%S=2mr8vpN$uh2(3CFb%W<%
zDFPokQMZHEQI|Wy1CX<0DTW4MTi?#vPUfLEYyr=hLbVwS=R4-%_VZZUKmiZU?v^Z^
zw|3=<y;)nk>pY}G&_<4`QF^$F`>+9}4;YR#yp+6=oDkcsRqdd?wW3Xcci0>91O1Og
zkg?Kydka^Be6B<m7}rP&+Bw(5h`PHPd%9b22Zjba4-R`!Xz<J_Qozt5DgVSeH;?&q
z9*b-kmSQ*@AB2;0q2Q$^!2IZkMoGa`usz;22_GK+x9iW}+4F<X_W!q^cKrUW++Vz0
z^X(T}fBjm+Prk?!$nDQwArMO0C+i$(kjon3w8QPGmHR+Dt1!|I%E at KHJ2h{ti(k=E
zMR=dIKBYdaQNkBkT$<-g<5eA+osJ7Id)o%-d=>(*ALy2~3JTFvck6oX7Pn{tvfxqx
z)q(cACyQdAo4R7o>gCcKwyjcxUTQ~q7D+Lmf#)D2(&}_k#+8oz<v at W4@MaAZ at zMa*
z6d at xH#8=tF)L?waop;K8wn@&qv4;2d+o?<=b!GQ&XP;{o?N~cR?Rl|a-pazPtcwSs
zHx`OfKqg at LM(;&+LWVCvkp4GrBiM_{pujnUXQ_Gze~5fEyzBW&K;EuGWomUeGZyUI
zTDW_lwMpaF=Bl<9KQIIw4Lw~=eLZdk at CAC6AUlpDVBk;me3kstVVX7pAtnw<SQ>r7
zv}W{bqd`9D%;Zww#v<8dO!VRNe*INMAorJFh63gO>`U!`_a?~S^MlU;{;f}(ul~k!
zdp~)3_r-(6d<s|^e5f7Ac6n17<^bA5Jbyv{P7uDVu9&Jt-7Ux at 9R}xLTD_0+yv%Lt
z3$$VN+#Oq(hxx!~P~aT1*;#ClN~XndSO8+J(hv>A#|vZBIe+dfW at c|ng*7SvWj7cL
zP9^$z2JV1us)diNN7$cj<_zZV3Lza~n3?$-)-2qzo+ok*q5*XMQ6vS%;;43<`*;T5
zA>4TOEM5?W?~}X^;&$)+xx5tgX8!s$3-dGQZe3sBr$9Yt#plK9iQ$k}C8QIEYeK4n
zuGRsi5vuJBjS=7t`Juwc5O6s11?=|L^48{ZU at zo1OGet7rT>|1Z7Of!XhaYyTAG;Q
zKm;%WHSMkST^$&L#_q1xfxeEBp>7iaOaMp|+MWDcotuN- at INM!;~_NW1=E_eSDOwC
z8dEe}942^37sQBDG*0-a`Tyl>J^%89-hcZMnD6`dACv#W9iR#t=2QEf7f69+T|Tt_
z(lAXSQjc}w=aT1Ld$NZ!b#BY{WWZ-Aav%_ at J(5cEM1-ssj^YPGo$kOA at L5%yix-eW
zzg&93ZCrzrC-?&<#dcPwa4^G?NkTx%{30^T7Q^#FCTbZG;6SlcHp8kAC=hYQnQK-=
z80IqOb!Kq^7cX6eA%GpRxNm0aN_2Gq at 3{Z?U at QqIXn8lg7qQ05Zrnwne0&G3u6**|
zd*(ssc5k0c7>Cqe=C&D#WXjT%`VwOA4aDAYX)Tzevuk at pKJ;Ex#~fJmZ56bU$7)d>
zsdPz!IJ_i6G^Vw(tyx+f3<GbV-eRgAc$>oKj4Yt-dFVh(6N|RWnj6a)G&gb=6Hsmg
zqyR%8ThQ8E+tF6r(caMAi4|xY=<ggJ>N$FN0_8tG{=tmnCjmTTF{LS95Tfy>rC?0_
zN0VcTK*A@?`PrBD{pCBve|rA<eUyLJw?AF?-OsTWzV<tx+4jsOYW|6TZu$6`tjmWX
z{5wwc?7nm`<5(B8M^JC6*gn)ks*4IYC_N+}s;|E2+AJ&+ollTQ%dS=byixva>Po7B
zmh9ZB4hCD-&xQ7<uE2$)1Za8Ajs=_7DcX70UF<Hca478ySVU}8oK<7U2%v>{Tkyv+
z1pt1g^2Lh at oThDxadIHdI!Z?`?Ix%owVQCeF?F;!Fe87K9k>?GpG7<edNzM9(aW`!
z`&RDF!V6f$C#)=7Ub9~u#)9w~aG>WyR%4;~ZjWcyc^H$Vl^rk~g?BpJjOw%*)dBD=
zz#gRy@}=iZ$%A2*Vo{1IN at J>CXS6z#hH#w$d`n{~$Y;e?a|0Kn{59F!P}bBS5ol^a
z1P(McR<<-%V+h(>>pMFz0nI(#?Lz}SM-G9F81oNlk5&GR$@~-0aua|b{W>ub0HqOP
zZ~0)92qb(Gw0+M%e?RXxulD`xk1}6<l3Z}fOCQ_u#gCEjrNSZqvGc5XhxU-?#ph*%
z7*@Wp;Dtl$Uxu6Miv`bz?UTs`>Z<w4&OlXC?E^KU;D<?KI|O-fR2guWm68jn3nCo4
zbP at eJOrNiZ1rbQ(GFsLU2%1NkG<{TTQ8q*c^-i+_ai^3e5FuHC)yrW}x`2u}ZiI}0
zy4->JG)9=u-b~bpGJV%wtf-p9WkiY~`K+?1%hs$Jh~BFG*&GWtrsA|p%2q80`7Ae>
zvt`{fQW(3o&s)0+7EwoBk)R5&hf5g#39v9=Mhu78yUv2T6n-qKV=){HT{^c1=Zeyx
z=MD4XDgmlt at 6zYOJV*`zZ%SUQUJvPvw&!S(!e^}t$OrZg__D_O(x&>7hB_87mLme;
z8T at lpwKUhZx7ByFHyH~`aC;;02Sn(7#y>a=MZgEf+iyAkdBH>xNWg#Zzy7H3AKvQz
zi!#6Mzk6fbCog7v{$Z+pGS3d?ee5irFHmO<*NV<6IREmN1HPV%Necc^_4M{s!9!gM
zch}dK;><#9(DNu{;-8dzF at wVQoEJ)-%$GF(+Es1~sQyL&qxp%MGtXTHunRag0A?Uw
zWRHSsp_F_9n}o6(`@(tD(hzS{D^Vjwb14~GyV7wEV+YUNML-Z7Agw_C at +Gs^uSS{Q
zyI?Nf#@y8 at YmAa19q{?(wMEjFptP-}+Rlolw6)e)IEA=611WYp(DN7qKbtLZ{40#(
zVSJ*R;yD4;k5Qc<ssrJN<g~|BeZYJ|p{T$RAQ7TB0=bbK&Vqe_{N_gCzqx@$TP2P4
zcCM2NKo%P7IU at y_fCG&Ul}(M+5TW+ghRzNWi!)b*G5-ks9tDbavYvLPDFIG5WFV5I
z;FgPk at Sord#6I)he|U?`FOeUTzm&ICz41)pGgmCme|+7UK9XDneCUPFDr^u=F*7uN
zeM8yW>isE{eeT*0{*?u$$iKWmTLWxf3ppnMF51J^FzK5x4S2yUXjQ at snqeBA%VY>x
z6tiOs`WZYEtE5H(UW5pU=TI8DCI!J+MjmbLDyTl%8{8sR%XX)kdY6Fk5YQ!R1Q8Nz
zTC;+uFQF6B_Kms*VWFC6;d}}YX48*o^SXIyo96M6XuY^|Yf3{2IEN%lA-6OG`{?Xa
zfZCTAX~7vuL3A+LB|d`)Sk{U3tF*n&A~||Uf&l)JBhI|CxV at 1ayi~}!`KnO#isnWc
z0)x6RFH}S0(e3WlHsRh%1dQ9q6h1g-xnffTD|Sno>Wk6*O%0_w*B95<VhGAO>UA!!
zud8TksA_JiX>F-%Z<F#5Rej{}Ml+_3W5Bo}B;VxILqT{C3_&9Pd86Q?LjDK-`@4XD
z-?P`KcBZNgozFTK>U^kkCe#n|sd=NeVKI9lwO7)JV_ALi!o9oM?U4Y^f}9-y8)gEe
z87wZzp#+q$ClrVv5Bk|x!Gm at +h$GIqVGZ#dT~AcUBK(T9pxd{uLvWZxX~S)pyqBUN
za!kvYfL at Uwp0#m};{R+ktle_wq1)$f+b}n6BiKgUOW~6^SfMP~oR!O$WNcZUy<-WR
zcW+(4G;`aE{9TLp?#{V-6m<<m!M5x9D)$zfn-B!C1+d!MY?|L~fg<XDxHtr{N`jUa
zu at t=hz>Nj=K1oj20yrV^n?>>kd%2~coq>=KbqDZ%z*|}x#a>|YPUGQ1@@IXL%Ni`y
z)2M~IO$~y5V;#unC}|Y(OB!k!7uD5B1nO!^>uNd5>T59p6^#v5O^vjX3GnX$A1m^d
z6oeA-A;3SF3`Ky!G at Jrk(m2`mV~Rk*- at l&o&P%lYC(nhd&wcn5fDagcN7a&wy`Y-7
z{kq!XO>I at EeK^b#l&7nGyx{TzqCj+Kipy=KL1`c}OLlG};KM;6h)@qqX3_QyT*k$?
zy|b1rMqP6kmzitO<YG0mX2QmoyF0vTE!RMSQ07Z_Z|4>8jyV=?S+}YvXGMM{YX44J
zCN7%4bmunc`Ybw5tXxJmYEi*1<YM;Pm5a%{rEgweU9`HpmWp?;x+EdxA$PzjLf+c!
zRzUc4S at 3fhOXpFE1LqhKYI8b-9EBvOok$L2kLPe!aFR1PH<BZ&k9vpaJJmPjd&I_7
zy{rHvAE7WW!1#~hzqt`UBidtUQ5{Eq6P#aMh=UpCi|T8N>T8Q?t4r!@i)*Wk>uQjK
zGKoN4d0lN~V?%=S4~v{b at GlCnF}?zyJh3(Yb3<htY2C>Np%hF8Y3Q5|?{MYg37-=F
znc?fNTt at JpMZW0y_4f^Jympwj8`LdxS51Bz%ADA5rna-ZfOc)DU(Occ&%?JxE)?XU
zbcgM*v(n~lTh9eVCeh at gH#CLLO5^U`G~8P-Z`S%%;zhYTxSqz9TKc*sg#p at II-h2V
zqzPP~V;U%@;g8~bqh%1vf5YlI>^O{<jSFl&B6xKEu5AP)=io0aUxJcPEiYJIoD02Q
zQ<6taesN(|>ae;3o__cNYJgchOOd?d^VC%ur4isA^DTyaU~dO3C=dihz};1pxj2lN
zj5NG?vO3#<NRH$vBss#oaBgTvfjiX2YD|ZR at fq=RX2jAPID)$ka$v<?I78z(Lv at Vp
zfOhd8CPP_3=S%H3*3q<Qe|?P~z#jd-zorU7D6Xk4sjVrktuCvrafAr%DE|ojash$`
zUm-BY!7$+WW7<d_=LIK!oe-iE;yDKXsL7k8V4`SJ_?HH+zx9c8v^N3m1R<d=%bUx9
zuK3B8bubpeb=Nk?%>1nF0DePbITC?Oi}#A+g}RdlT2-7w<lpr?RSgR^uSG at U#-g$5
z=Of0hG(jfZo*6}BR;MVUNC_yiL(K!Ly|%1dz9$3AA|=mOxpU|6A_QkJ4ZIG%FtN==
zTQ at 9Y$6*osHJq^#OWAj9(^|OAlKt6Y^_x<cRqRbI%indXe`Qno|M;K(-~Vl0a!x#O
zt>@Hn7L~JpP}P-0X$- at nBF#-Yni|DMnj2jlKyqb^oC2pqk_E;{3LJ((a1I6`^210b
z7uXSz{6MQ4w>LgRWU>L at w!E={yK+<kw&7pM=dMjkG`K9HM&{T`5Sr at c4m6ATOWT9|
zx|;ol|6=$LCZJBo{_0AJKviXNO;vGqm4iRl-XQ`1VcIw59*#n61pW`B2!zT%!asxQ
zhyY=HkWZyC`6K8$?&=~IYL(=&WCP at ribdhW+u`TvXEZi(80ZaH1@?q@;6mUTcNJhS
z+O{zzZzoWv5)3{Ay at 3S*REb9VW-b86T#O)y^W^R%utV7cX;v=gxu6;)kA at d}*|3Ii
z4FzUIY~~|4ncHTsTZLaRkF^8jk#}r?>XVjQSG9k6Ryv}zjm_&16fQeZu&$zT_m?00
z!~ga_{``Ob at BjS&{9ph5fBwJ6u3w>}2+PJ<Atmxd%`o~O#SW5T9q4LvLc_4Rg6Bwt
z0FP4um_w()Z9xEU69lRHxJZsCr%?Eo!;;hlq01IIxzhjO+%XT5aZX*;qta3P4Kf7f
z4Ryl2nFbdVWw_uup?iyOYYuNM<R9=CHPr!rW{mvQ?60lbUt3*RUAeESLLyLAQB*A{
z5dKm1zQWhR&p8(V3ECURDaJ$*_`vYb$1p8Dkv_i>{6`T{z66%K?|$M!_NT7rzx=od
z4{<qB?}kh$dWuIT!79pGp>-M;(4~!y;Ma at 8;Eh5>X02N}cl(BUJGWvf=4 at GOd?rPd
z2KEBgr^(f(RANCe7S1 at T7M7U@wim#N_N2pMfI4e27!a931bEH4t5VSIt0^VTN+(uH
zloFh;+P8<hDLFgVl;+Q)x%b9Y(o&>iA^BP7hclkJ^7Fs^<1hc^ufO`YfBDUS{M&!|
zZ~y-5fB&yEJ at bx#T6F^XfwYr&GI}qauT+sRAD}M89y5{)z-(6nW-%OK?{}HE7>@Y7
zNRGi9Uo`>bMpvB4SWHsHh5?ZoI|qQr5Cq}Mm{7!tMx6pX7S&YF3&DZ#Tc{_H1=v2a
zP+x=oFRZQFS10^S5QKk;z!a6gbB3`+APN86ot(Yg!fU240#k4V_<LOgP~NudV`sCU
zyMOPipKN*Sh4!~U-}dd#1vS0wPem&d%E|5~jWkO*S8ygpG0b^$sDy#NfXNjFyNObw
z?eSjky!-B%toTUZL_OGwf?e>O*(e`^nQ)%8O%NWWi7-9~d<M=VQnY^cEP6qtEX7#x
zYG8gbtHbPAKwyU;&z5ydin5oM<;|hp{k%EEFqf4VK=Rku7H{usTv at Pt-I0#Pd6}ip
zKltN6{{2t>;g9e9`A_fu)1Tk{%b(x*$3K1jXYU-oe1TRutaSqaDm;U$qqLztAe`8U
zg5*ZR83TCkg6GkPi34coS&n=uc^{LdVxDtkO%MksInH66;Y1|IG{00mqJeV?_@)0D
zG!U+ojcBOnlknN}G5opCf7}Xqgr6vo#eZNs`|4|eJ?FxjN{N7xpM8}F3M(swYAJsU
zd!q2iQvSfe!JjAsaR45Tf1i1uq+n9~!}h1=1^Zv>_&@NqPgZ^Ak>+na-}aps8(w*;
z^;@6a`{gGJU-?AW55I&tAWwuW+(U6Mb(MGDts*u0&l8X|HbUh9Ek3;T7iuII6`c&L
zAxcT1CWZY=7b#KePA&~Uai1+4g@%_Lk;5Y2x-oTO?hb-BJY9BS-kiDH)-T?dwJ<wl
z4z?zBB{3WhBm!Hosih(%XXm`tE1)_nTPjvGlxCe9Li2CAa`=0{`_1?N?zcbq{qO$&
z?#}x=ifdidYh54PD7U&>>Q>GO0YU`j99tP75hWpV4kj358~Ye+<AAYA27}2W=NygG
zv3>8k=bUxdteHDM&HOPl&$o9~b#<$iu+Pk_Vb$7ecXf4j1JC>I_xtv)s>gr->yv-{
z?eRbU{ocR*cKGrImb=5h+(l%G-0ns%LLiLm2`1qUN<(cT2Q35zv(Tt)jE?rYHOLnU
z$c&Y);mcd<BXV*X5o9)sP1ocbI@;+pw6{^5kv=6FwTT2eJA7zCwd_O=`XiDED;Fd&
zAMA<wU7d#W at 9L;lkstCa+nUAyv^H0_w^aBVE1R2i at HdM*CjZ*`*tB5hpMG#5^yT^2
zr?Og`rpBk8u}HvF!D!~+4nGp8KJ;G4sn5Ev9-4FcVA=7HsxEz5{_V%}ZXE4 at K8OVB
zt{>JafPDVE9v#I at 6CIX{Vdkk%65GRAb;e!IlRUU1;(WN%@mkmf))-KPCzw-sC+t(A
zk)09Yj`U=Ld_qw^6&r>OHut0~*d~*W%_IwuL4jgsY-XxHk}Md{AI)u2it-8jZf29K
zi&A?#5 at t<Jtty(iX&`ge{8^iq6zt!5_m`jV{r1cKfBohDzx^iLUw^y))A##Mf6H?B
z1>Eu8H2<=+QrQ at I7B_B|Tr{7CCxP2JDhOkZbb^4 at ryy_m96d!P^&IWb4L%{<3emGW
z8Ys)t;#FutUD|ee3G)~s at aC&$)5<KBZ1S>`urDn?KxG7$FgZ*<#YRPx%8#f(GGD^J
zuK%c9xUEL~Pjf|Ub4635{6`b~^_-W*ywzd9Y_i~a6#ilLWh7u>Z|}UE1jfjJ at Lwe8
z?`6Hzkzco&Z>^|5`BC|)PuR+if7o;7P|xLqy^qe+UOQAh_{HMqgME+A3_Krfy7P?)
zL5&DX3PvOIP^?36#me#<p1;E-Dk%i~G}2YMu|`y+%*--To1P5h6pI9VG=gw&K{@Go
z8wQ1lB(LNG)H9huX2mA!8OWx~XLy^+ozwHE<U>1#C$YF7qq%BwZ)aS^%=Ce-taXcW
zW;a&s-duEH->sj1xb^c7xBv3fonL;s^Xp&k{QC3lUw*pu{OR7~M_KL;|J+E5^~nT(
z3OFiI_dqxjV1 at _@K&G_xRZePVsYWU)N2+-!88ZB1fpX&<uL_dV0;id%3hmVDE&k<O
zI%Psi at ej-r|Jg~496H*Y*iZzKANW=LH(F7IStI4UkeEL090mfJ3#jdEljN6N7%kv}
zI$A4QeHAS}t1zf)o&njeazPsY5d51dzz|T!Ede|BR)5H8$21U_A0H_Zei`_Y08e=5
z7H}2kJ}*7|e&?yr=HLEi-p!-c7r(5zu)pu|ncjz|d+(oYx_ at He+4+ITXJ37dM>{JO
z at KA=Z35Fu*Pnf{kc-9QFi9t$90C*rr4!|GD@@7^wPtC#1zZMoIlU51wlyqDr1 at O<M
zE-XunN%nfUJKW4E%-ibuELTnjDKOdYq=jwSo%K-+7G%3ERo=SN{N;0twy!8ywIKhq
z?bCQ{+4;||fB)T$A70%2@%x)U{c!W=A8!8TM}q(P#}7U{dYJf6 at sr6fb@`RL*Cml3
zo(ZtFIt*S#_{Uuvtt!GRq$TRgh at c9R+R`u^t2?UYQ<h|;uS7&gKFEgKQ4_ND?X3j=
z`qmcOhPKv5MAxpc7v?*g`8_OGAPrHA7I-OzSq30d623*PXAt=?`75Q)4ykkE{MowN
zt2)~%+gsQw)K=c=(~)0-zYh5JR-8`&|1fXG#&PqHE<!VGLTjJW4SnQrXR!90r?UM{
z>j#gkGxT4BhrDFJzc%;Nt?kD@?zwun>ioWn6Cc%FKG6H{)WSO_YA=1&aO>#6v%!I<
z=X^Jh`mTSy?Af5GKnVdYye`<Y)c$o at T}D!n=pp7qI94Zu>$$`rxxy&vM at P|dP!Y||
zU<g1R5v*b0nQk68o`=BhDaeENXi87HnV1|GizS#En3PGVcg>pW$jhR_L$>Q>>bYoI
z at y^w$3tA_?x2|~mik?R&=YMzZ>UYnseg9lk at Z*c?KfJj1<BO}`KR^56-ku`|xz?3?
zqj4!>`#>+1PyCOtsxnGKwD4)QDoU#n!L%;=T at C<gy%Fc>nEWg9jTtLbIO2Kq3IwK~
z>O0zm`Sw=nx3!88wDWIoBigIT-yxwM=4a1_`4%=7t(lvsfKBprNzWOHkga@?Ec at xe
z?Hidd{Nw*S+bY_c%iD~ak4V6*a`^w>1K^kV&s!G%Cj9Vbv1jWHHw1*1fC+5?|HGU)
z<k$Ikny31G>w^6M2)1ZI{Aa5^@_y-|_bX0(TzT at 7sxzPUJvlq?+L79eU)5hb-2dpz
z;-}}DZXIj9bYS`Smzu90ZoPGE#djAC6_`Rm1VMjT(uSFlT$p=1t3M0}QKZ1^A?CAI
z8AY&CqIep3llCH|=*$%CJ<P}DWyfZu#7~{*VK|sJDYLm6+v8 at TMcIt(4ZU&2)AE;e
zSL}Hs|I=-?`*u#+y7bEPCs)6FDk^yK{Mz^50sp1vPtHELyZgw&rCT<0ugf{h2UwZO
zY6Pj<%<q9)38eUw*_|>;N=LU^0w(sPu0l9|o50IQRBMzU`3Tdmw91f3TH4vpThhu3
zgm$&Hu at phbXDXKc@K3+BRf4~AK2040zXW`Ree0Y#EYxZ1?r!T*TX#20*JPX91OJj5
zsM?YI3?wE?-Bcn>wX?I0T%e+})gJi`_!Z&)|9XGqSMY28)nXeP{KHT>0{<Z-U_$!`
z@~?j9xB|X)u>W7c20uH~Hue_0F~FmaO7_1~adPhh{LhWA7u-Hxede?JYljxyIS%}d
zH@<GXd~nH=b4#BM!vFH;7us(f>$rV<<&(kJ^jPqk1bnRsNREtmz4rR+et~dF3l|bP
z9nn1DF(ZXdR;jt23<2cDvFXXKob)(ugp2u^GBMKa40puDPtDElsE at BI<jNPaY;Rpj
zQb%24bJet!^V4cdG8)RK?%kT$Sl)U4aP1dw7oGh0($mM6*`7TSA-s5Y<-4aBo<2H#
z at 6Lx`ALbDf6hGzO3;m0D)`NI>me32gow7mzglN^88TztjM&+#{5LBSZ7gvw{psxZi
zZ2;|>dDTi~My)`QR&TNhp{=g91^DY)q&48j`3U?H_FKBT4Dwm1Ik%^M?%a-f#zvn#
z$N^o*Qa!2AQZ+S1$07%+K-vgZwX5QPXPe=Cq>SU$;objVKQ#E8>IhhP<`2BK;IDU%
zAc5dd4afg5;tKw_{i|)KdMOL!{}%{^pZ%$87w`-VZsyFBf5Cq4)x&cyAHw!jpZ;{w
z-EaFIoNByzw0`i*rOyW!KRDfd^XO7k at aSyEy>C}MIyd|F at iosba$f{!w}fEFo<4D&
zQ6Oeg7D}|<q9RS?cd(PioJ=LeyYco8ilW}QFh@)@k-uVAT<LUf{u7m)km;++o!jD_
zJ~_Rvv|#nZq?YRRzRr|6O*7Z`*K%#no=r8Myjl7F#*2?1qJm4$9$$X`gze(fN2l)I
z{`lC}JTL<O^<5X_S#MM$DWNF-g-nxt3DhubwR*o=ODS3q@>Pbb^IUtjYv#EUkk#?B
z{EQ9YS%lEiOsBTF8S=&Xx3_8jNq7zT)#6MDhjXy+<Z>-_xe8aT$hLrOK0A4fE4fgC
zny`@al&&V}3EwJJ{I8zfCM*1v?J?jt at iqVm2>$-~&%2=wPe>+*lR$`rZQKTo0(Q1X
z?FXJ@{1#{g_<1XB!=j`mv$=;G4|xRs%5OieKEIFPKljqX{wL?^@&8v2_TN86^4oOj
zV9V`q2JW3|yZz0Ir-Pk$PIO-TdfgA#=H5Ly|K2G>1xg5Lfj{9fVrg_=TK(393G%2f
zrh~K7D4fbprp)5qiG}$Tc_{4jsi=5Y+ at vgTL0(eH^vss(w3_0um}u at 4ow=+hrMt;J
zW6I18iwoaaI%92bYF9)1h5b_&c1&H=0spc+c?9_vpFO_t_~Gfhw?F&#IQM;`_>cK#
z+Sj*mo?JyDPF}*hwh-b>NGDk;Lo5Ya+V(bCPNTKJyQa6{Fr%tt6=48gpJyofEWd$#
z_~*<mCjZL$DEP5GV)a4VAYWlWhiesk7jdmtkJ{*T_by^**TMxX;Fr;X;w>3*mnsD5
zUyk{2Yr+4A1Ha;57x2dv{AENiwy{cJ9Q?y}Aic)RQJJ?62>iH$Uwqn_M}d*y=iS0x
zYg1OvP3&tg+_jFo9af$Cr0Uzf^R6CQc<Y<`D+g=O?W6M3d+T`9wZpz^hnGA&(|Y4*
z>(wKxzrWIP?d#RgFLvKPvGJ$t3+|uZ{N2^pCvZKv8ViPLCFkX7cjmic(NQr;UMHpg
z)TBsPY*=I at tve?JEyS|o2&cp%YHpc3Z4!3`ienA7uPR~s<h=Q<HJ|N>FUn7w+g$SI
z%4th_ayKoWG^c6e%J~-_J-GM;2|PpsgO4Aaxp!y(nUnC(%^BL%UGBNMkOjkf{z&j9
z$b&jY1w?hwW+(j1xFEhlR3NPs+pX30?3a>bN1N0hY0VFE2EFi7R^70_tp!cNzeu3D
zS<H_(e<^s9`QrJ3AFB`267v@>0CH%b+ut{jn^r9uU|X<s2^$^uupc3a3KlL9J2bZk
z2{0-twTk~|*@N)!5B^4O>jxlY at HgStDhQMS>{%QJc0x*ExPt at s2l6a(2t2d#a_C{|
z0xlc>S_LDt{=fJT&trd!>)B_#xq|!oPusMZEMU&ree<pyUU>U>&FN1G{(bjOvNfFF
zkMrrjeWLZ|v6d@`mOmNnynTGt(+jh&AD#Q)^t?MKH~)OI|MB_lf4RN$*SlH;A%*aI
zSQs;9e*R-)`0F!Y#=-nyD$T`W&Wc%(FDIEWA-;5aZnw`fbz)d}xGN(C+n?E3kvgwA
zwa3SOM9bgbm|8w7uctYG&*o_Z-MMQPW_J6mQDE at VgERN<9=dRz8=bN8p_OOd68wAS
z)X$wG05gBu)`Adf;1h0Jn>9$H2o+RSYj}7KxqK>kLjtTiQ*FDfJ<|&>)xxuunr0v5
z*Z7)hn|%`hF+WD|4~8GAyL)@*F76lRmn~hid|B^`<$Wtx^sQPc+sYNZT)2E0THqKo
zf+OORUgSeb78k_NW6oCve<}EAqQ)Hjk%@h?8=>LgRKyOIKxmT3jCbgfLJ46k*av>x
zPWZ at uu;;11Q&vkBQ2gf&S?{i1aPwI8$-OmaK41L!?856u8!jE7^0WB<DT05?)x*mk
zon8Lqyzu{Iu<PbG>%P0Z;L*9wKVIMR<BjD%USIR`t-b&4Cr$6`G8)Jq0=w=EZC%`!
zCo4^y(u4^Su?}pHdtyd}BZimG^puo}S at C(<;n7i!Brn;nr(%{PE6rP7l+iyst*R)k
zqA+PzekKoH;!a$>vom^{OSi4anBAyGfk%u2=N{ZWcI`4xP9*tlW#+4Q0d-534NKXu
ztwq)euvD_eXYntJP>Y8p_%kACQ$#DnfzcA-rPyL?t5siC-Edm9 at Uq(1gsiHY8X+J4
zf#2l6O`H#rzpD!~Pi~8)A?$N!1|s~zWlQ0_f7Qx?HLI7bTf21qx at 8;I>y7 at v+BN;F
zS8)I;;P|fIMGPEd#8iZESxmL);BPvgp~2r?^H=Xm<hPTr`*!|AqHFF9;(r|Q>obIk
z at PQ25W4l$x5rGG7L7z%C7PgIyz4b0PFr at x7ZBxIeyCH2;AGf!~|J0oMY|)()i*6mS
zJG-y(%AwvH$Cf at h@4I+l>BBR?-*)Bj>hCWT{7HT>{~KRi?R$1{`>%I*{`KK|e}Bp)
zCt(p06T-qw6-Xo>x=n}(k52G7Gg9z8*1MEFJ^8uO@$L!y2 at 9k0!<F)m>~t)Ub8-#>
zab>3F56qd`-xVGi>CDN<=<D=W%$hvEEx&Je`kbaT?mk*mn%CK=5`l+<kM5tmeRIuQ
zZ+0x{_w~+~`zOrrmgT{-+bexdtQM0N6(}KqG#xCB(V`1DXIx;J0a{>!wS%@(v|#kr
zWhUr_PqFF@)X`K^BQJ&g))uV-GyWUFU#gv5v$f|ZjB|fljE&r=dHFKPU&dXUH>_W=
zdDE&bZ>-+BWzDv&YqxKuU9)uydsb}T$h(WztVRXg%!f1q`A`vhE#7H&KE(e}!QW21
zHvB{3e_08P8-64Zihmo}cHoEh{Sp{*9t-R-b`lo0PTSZI|C3kF^K{jheY%~ex-YnX
zbivgl^%uUZKler7?c at D-Px`JL@?H39+2eDqmk+IcdST_`^If-3tbTkR{x|>S<{LlW
zSn}-B$`@BZ`p=*AlLy1X!vJ^!Ykr2nkL at S(4cd<!q#_#UQlFB~QZJ3olSd;(#<?P$
zv9ZYsak-g^Gp1xVRwfio4(BNo#RbW&HSUa*yq=cn%jdC<D5bF?tFA1mqA+!4es)(A
zDe&2QcXl5-(7Je0!@_y26P9^W*2c8@%9|QkBv9ViATL=e*4E5wu}WDpDO*juETI=I
z;NjulYFTVapH{!Cyi-+k69TF7HCp@|Drju1X=<wVndXNHuMWw1HT*2b17IFPv0&Mf
zzSXOiDz;ZC=GX7ozH#SUo8EbQ^Skf7u}iki at 4mh1?VTIm+Oc-~HiV#5u!`}bXK_Ed
zgU$JfV;Kg1&AinP2S5Ae7;U2d$*oNSiu|FRkFdv(Kp_8PWZr&Q!u;l>C0)3nscRQb
z8t6(~)Jh>Vb=|_c^ZV=1f3e`oValG3gZq7#4lcQWy5-`5_M69+-9O!R_uEyE&iC9s
zx$fDeMUT#H`}NMwzdhRZw<j9 at KnaKn_!9)Y^-|tLEc~Gn$q at G=qdjpk37#<SWW~$y
zaFSvSk1IWek;Rdj>fw6f)TD@*XwRf<EYQS``sAjH$e5Vq#tP5G%!$p_ETYS8uE}kx
zy72hHH`lJT_ALPZ%GqsYzD8z<N*n6Rnwz9;YAA1Rw6vggQOWulw9wkDH`daNw^3S<
z7KcN!DH>@-GQ3sU)W}X+_&53u^+=#v^RLXmIDhSY=5%o%A>uX{qj6{EK5ovxdBd`e
z>sP(GjX1yQy>~ai^Y)hac5VOQ{Wte~u;atsZ+*Dut&jH5?%4Ce_7DEN_5EEOuztsz
zs9@=ab)*Igeo1?U2Nj0{_zz5PHQTBkf&ZZrFwXo(%OQaO5l|2LRuKPoq{r3w&TXRj
zGj-h}_~+ at 3la|a$T{E8t`_`S?x8U+2DnE at EzG^)8#ga#7`)?j^z4rC8hi5ykADw;U
z*xK(dcV9oY@%yX2PX_xRo_qUmkJtTj$Id@}a}*G&)utgA*cI(oYaO8Y59h&P#-8w~
zNN0Molbf7);t+ypfh7=irNn<W at 05vob6XOp<;8fJM at wPJP-;;@(zLt`vgVx3?7FhF
z#)^!_N|-OMuPya8&=%KLmp0ay)Yq2OR+sx4${OmR9U+u8)|b=ar5+tvMTrV%TYS1@
zT_t9zs?|p;BZV3=gnuO#)?2c(qM;rMRMyv3HPl=D>#{#JAGz+Vr(2%YwQR}aEgO4R
ztysNl=ZdXwtlqYj=Q9HK&V8Tk*t2`*#~;4)$=+R`efr+#pS{12?Q`1qKL2#rr=PsD
z_haOM5Z>7JE-J9#hY$mPtJX1;eEpWOe{}w}j?`&2sHXFO8MiasXVsa<T+9p-f+c}*
z0UvZQo`)fTu%EZATORDoql;EANZZ)Q-Od-?{HFfQ=Z)w0FTQtj at vRdrmk%zze|p8^
z^Bq^eUj6LCoLk4&J-;;X)`_jZ-g)z1 at 4fqvfZ%Tl0b(tfhwG64GUq$=T at qnRrr}Xh
zntWPjhvTx-p<VNzG;?Zpb9H2_BQiRgJ8OCKa$*xa=@o_UiJ7j<G$fERGe4!OII&=I
zc4cu^;q)oRh11JR3!58eRFu!EsVc0hEUKw4X{alyt1b66A_1gPhA5iqk&KKEt<4M>
zvZ%&tQ3rzv-id*uxk)zOqQy|LzqY2LuC at aHb^P}=NyVwPRj#${>E_09JngafjSY*|
ztQ>fA3-GVrxnteV9b5M9A+SUK+j~C(`#*oNZ}*q`_Z;~0!-HRac<{hS2M^HFXV31h
z_Pf(l-I;0enQ1KSw9R$}^6!US86Ha%bmXm(;n(l_KWKXO;TZls`+qP0K`_6>%edxB
zGGFgppJz at z4>QVH)W#^lq%e+X(&yXYpUO|)^<&LUev$v)JJoUX*z$X)G5=Kl*FGNH
z^y7`bN9U+~uKxL^#k{=}f!iO01cKnl{9DZHPNX9y${8CL5w6MCZB(2qCea%a6%`Q~
z$vO&#gQ%DoBoH?_CnnCtI?~j_g1GDq&y?K6yqu&NQ`5?3O>L<wXs9k|s+(R_KC`-V
zMs-DDV_jiQRdIcdF*MZHC<!!_GAJ}RO55TSU0|FTBXrxM)X^dX2SSkHqoKa6uC}bE
zx*Y!NYAYM+8|HWG;tzEv7Txh=qIp|4 at O-+yZJSqp@b1c8Z>`?3ZS%*ww|%sG$KDU$
z{`eyz{0Cow{Z}6yI=J`9p-;X(?8!=x%Sd&nrNpJD#AT+rRZAx}HR&~O?dz}h>-a3K
z0N{t;a54c at jEjE`HnpQGOXILWV=55+F8;0G_Io<c+M at W58gEadXLg;tsa&4q-s9s&
zKp9)**%s9NDgHDKe%XBSz`(5&ZP&hTzj{QH-|NTL|8RBgtrHu+yR!A?TU0)G|L2c(
z?5%!OtVMEw$q549{u0-uHgP*an*~2rBk4y*Kz@`f){&eb9Y>7A8z1eAjdnVnY00rk
zUT<!eGr@}@5{swDr6grl7AH*3O)Hp^K5a_Qtm%0bC6kM0&8(|tP$(!Xomo>k6FH!T
zhT5W<suE?B;J>t~UR2;~EN!eSZ)qyUN;Nm)ph|TT!G8J-BGpx;)xtkpWxe<x>YuI4
z2biepeS2%i{CUgvyxYHH%QDD+_pS9G?ArY2T|19_g}2`Y`TM`nkUKL{!8?{8&z6#i
zsgn+S=%gko38V(v9ut0Rsb>J;et-=~0^S{YAn*?X`m^JcKoI}D3~ijoF_~-kKfi~0
z`)8ACix~popF|+8wTkDqC)E^jw_A!rnLCzeY#ji8-{6=1H@;c=;7sd<1FN20=(u=r
z?TagGpI+SX{PLp5=ePcNgUY7`d{8Ia8;?JMRg+{A+R#FfH-;x)J{}nSE&e6=Ckg+N
zteuE;IO5}?Vv#_sBhecZ=Z=k!bEhS{Qj?vDURQD=DoD=H^G?d~rl%(6O-z|OX>xU0
zPC@?E(xUw8ih}ae=@n(PGin$bDrZzx6xG*=A{y(8>S{_F>tvXyuPJFzc|=ovQEhce
zQ+=^AQN@)NrL{F8f!dndo-V4O9b4A5FJ9EKd|=>%o%1)ZU-7{^16wz*egB<JyWhjW
zpis)cOmhG>li==*R99NEw5dt{PI`(XE!mNrC~ayI9j+>}MScyHtlq~A%YSPy-huqf
zyKEz4Z at sGz4m^Xb6w-<tj%T%hDExX)2nop9>|l at D*SD&+GyHq{Nj1f3t<{nRENDRj
zZeK-W<*dZ2LcCDQ>UoR;6F+{V at 7mEN_fEA8ezpAJ*%c4Y&c1eZ&65lB?w?-&^kVO$
z^8?Q=t at -V45cc+$F{G|M<k2qyqPm5;y%QYmP01Mh0iHsrU at wtBl9mz>*o*&Bo8})0
zutmF^F)XW#bGeA3o;ct~BMbx#2XU#%vZW*ep(iaRAv4{Zm62XBCA(-w=G4hK)2HPX
z&de*CIi;j%T6sx9S;>s5@&ZIrQHCg{SC-GLt(sL`Sy)$%E()tFk-#iuQdd*oKOg=}
zsw!Kyts at 0)-LSH2{mSm0Z+J4(T^XtI%FGbnC7q|uG-%h@$8l35$WKpk^GppAc{=I<
z>2NUQt1aB);x<0kA_twEYG6Xaul$c`V1_xsqCI3sNx*&vTYn at W{4xBitJ-bX^O_ej
ztLJpve#!6QKba>}G*x8IY4pzXB`j+7_B7#w603`n>q~Qafc5J6l!FHDeA|3(f9s_~
zR6berw(`N*o;%;JdwOx<!?Rm{zV+sB_cr|fu^srJz9YdC!9A>0A`pc1*k6X*gFiQ;
zKnr99u at 1-wdz}Ip{5u?E3eltn at orIp+a=g1CZGa_22|ioNkR_dH_}q#(^C-weYD`s
zNb_c<gDY}K%+5^8$x51-m6A6xBY#Tn%;^(F7c&qAmPtvYbXsY#2&BBUxVZrdcyls6
zoFpgHN>TCZY!c_Q(g^i98R1;pcqa7}?V58^S{8Un*r#LgpT<iq1o)>D7Vngt*IePF
z?SvIA72ZJ%2Z!$Q1b=<1&_jTox6r0&IR4omY6!6Y7J(g$e{~^`zE7#Xg`M2CZph#6
zrS{-|cxW|4Kvqu^@F&dkF%}?!l*aOm&N?Q=QdZ4PTHMhx_$BbST{uAHbLG9$J at -y+
zcyV>X-BbNf2H*J)ne!cP;~s2esQ at XVTS)+P$Bw;mq#b at 8|BX=~0tpEJi~{%{r3i`t
zE at yO{JKF6c5pWRvRpgKL#5)r_SfE(Of&{NKIT0baaYSj!@foS2g|rj^#w at uR9Wv6$
zJ=t{J=B0EH3oVdmrEA(f*%`!V*|Ow#Ifmj)RyvD1Fg9Z5u{T`%tPjhSk87lLoTt^m
z%S(y>$$GyMLaGP{31mwAx8S$x`~s3$IaKfuH8w*C8Hf3?q%_hH5CEZl)@+>oTYr&Y
z{t-KF%_86Gn73^V_yI4)e?sLf48N8 at W>*8baC~Pii2xEvZ?B~sl)s at bd3iTA(j~V}
zbX+;I;@;^wH^0IE%)fhT%P+UL|90=s|2=f(iz3tw2>%x|SwbmUKvbmgJYN0<{(!QN
z_#d?~=N08}X!t2Kp)!Hr;9o=+<915$=dpSOe<cJWKRGh9$-pl{Nc2LNj0nmODIp{?
z7Rb1O9J12c6Q7X==XAuPu)(DAD&lIgGXUO`lcCAS)ez)qr9+(0PS@%HdqX3757=uV
z2>;3m(UJ=&+7XD83q?5zry}xas2jPf$R7Z|%{C7c*#8jz5yIFcU?dlY42QjCM2I0E
zbP5~-dyD at +ZWQ3Ty$L+Sf>EGRia%*>)vo#yR~=iitDzKM#H0YV(4>LcNMPyB<Ex)u
z=(=)b{fjH}@1Df`?D+SGAN|kYMhN~$z?qyNLx9UEwNOa}M)CPUql3V&+`fgq?nH1+
zndy8a_=7#8j6;M*<d-3U6gb{3&OgCJhgO2Wl7p01k`hReHThzSPyxI#C at 9w<;3*#>
zFBR?1v=q&xs6&}~&AbHsoD9ii1^YB9*Ps-Y&kFwxC=3lb8M22@`E3tAN4XuvIcFCB
z`BGkzASmqlYJMl4Uu+N6PIHpWZu|AlVN%*a{tZ5 at z&`fQ%kV$UPm(VUvOs|`+&v2R
zmIVHwA%JJ~dbmYrRbg^NS!#175}=JOpYABmca#;lYKtg`GBw8RFw?||{T({_?YVwT
z);vGIw0xMdzZLx9KQ_ at 574MeK8H)sf)*J`~>>%2MUk-`<at7u9CG1B>=@O_of0tAE
zkBJr`;C$fU<&;oQz*o*67bIHnddP?|Il#{-Af-jz5pU^wBLe~XrZyhBg9`91%G<<e
zOF^EPugM4dIO4n_U$9qw<#rVIn1A74StGFL9;ZZm8~>s#!Je;^ATMEGu$NH)>~$xc
zn|6BLlJf?@?{_}f?_q;Kz}qcBV0<2d&mnJ(jeovtd|xr#Y5$K(fCp8_&B$X2fPb<8
zJP!|cO!ZYbN(-W=Pl_p=;;b%20_4KEi)XV~j-rqhe{O%f>HDkOe!aWvzrGkb_`^TN
zc~FE&$OL|AbuO$tOfc}O<`31fe~9yuJQw+J?L41V{A(4ET);p6pNU|?J~^*sz7#(b
zJOEDzAxIYB_2B%az?hOK{9}Qrt0Z})0tt1<0rGL|DT(6V$xoSkQaLP1t72XWL3tQ5
zS&8<<YQbJ?kMK{qQry0BJBok6miTY+ugW`O@`J)YDo}+`!JelCsvjUXPznjZ>3nqV
zIRsZ7*oV+HJ~)F$hd?RWWo7S=?<<D<LgQ5Gmh4uXAG!0pM*(iR;F_A_EiItnlipr~
z;b9~5CGs;0M9<8NDV&NIq8!T89^;xTm?=)*G9Z=DXBU_JaP`CgF^c&S{<*P<G9)_k
zOG^qc#0AMt1wRRbJ|Nik>wvF<KL at CxB!-qOK=eiMSAA-pnt!SGBzSZcR9k(m0{BM@
z8hf<qKo`)<K!EuHLh at fJ)Tp^vuvamkI8WHe!-Ku<sA!)`S>C{2b%5Vt*?ydlg}oK_
zB`>yYj|%(Lg>=|AvDfjR$gl6)sUkl`a;tJ;E`XOhJgYr}K($`lqw&zbb=Vj?W8;4u
zLxA~{?DFyV$2<g}j^8JNsI<gbZZJD*3R$pJfx4SOJ!`HnqqCl=VI&Y!G!-Kh*HSsL
zuLEhsR?P6sX(-;kiR5?b57$Nw{+fTL0N9An5z*1C>QR1Pxq6)ulifx|8K%e|_RXA^
zx3vE!>|5|N+pAJtF+6H%1S&ua68z)ir1Il-IXv-fbdZ2i0#fD&=1IwECHUixND5?*
zDS at a<0B5F5mnfwWq<}Xnmbe$#CYWcYaU&xu+S7q~HtBF4`j{E*cBHDKY)`1LZ(?r^
zH%8b;AYm9Db<<i|*r_--`PXw#emM-!zXsdH%paNco-tx?9i~3z=W}>D_`k^dY{-uJ
z!-hTQON;_9Qxu($?1{-vb>&a=mK0!t(mU#KJ0gMZCcKcdYL=s98WM=*X?LBqEDb^$
zyrf_J!Nzy~%k#1D4^iU4S($)EAxiT=I`URxHF8j60l{2 at t+Qhl_6_*O at L=-Qh#)cF
z6oQ|5>i??jsf8fHAO11_ at b8V+Qvh^W3!&Fk3;fIr!#@^C`gF7lQlkK#oMi at JugWso
z{NT)`fTLI7XiJabQFkaM;9J-m9WK~W&pr^hud%13Kg8{z3&p=E#V-T~CaLoSzdV*J
zsMN27p!qk)f|L>BzeSx%nx9PeSnrOpGiLtz<^C at k;pFCF!}5>B%-BA%1=8<Y2aj~Z
z5VD<+;*HKoc1%ns5!Nn<Q6OV>JsXKYN at E%PN6*M37jTs1$G6w8I&@-hJJ~^eXC2F=
z$HG5hQx>Xu;>4n>P4h1;vE6U-VO}<2-iq^9 at CSYhJ`5j95hM|mdi0Sp5J=@m7RYJ0
zBOPw8<%yT1*zJtrwsHya!auYpN$^+LCyEfr0vH8YV4z$O)2zZjNh<>ZE(qqCmQrC~
z3YZyYNfWEDqdoMR9l}220`M~g#BfgTYos!0mE at YWP5&O1_NuavpZ}CZ>imK5TLItd
z_!k(A8DkSRKbh<q0nVXssWXfnE&mq{Jr#Rwzi0Gwnks<sk%i!wz&Hki38 at K&1b8?#
z4-cI+MRMV~63Ay#fYlM+vKdhYxsj8zBBx{{1abk&L8QafOIa^5ecQ6362S9Vf2fUP
zB!vGsx30_sr}!Cx*&o>b#wJRZ at mTyD&PTFcneb&({EO#73%n}{FOYL9EmS~9&$a0i
z5EUl|0#-rr_;^Mi;a`B)9SQ!70we;dN!*4){ExVxM8*a9S97n%Y^-3fBe~ciJ%J at D
ztwB4$L%R)o$mbrv(xxSIQ^!F5&Dy at ocBN`c;y|`bn<kT7#=ZIp{%T2&E#})Izd5@!
zW`=FN`PmCe=5RaBGmMU_in0E0(I2#*);yIyW{fAavpo(Kj4lM=pTL7klj5Uz#tH*L
zPP%hScHHzlZZP60nMP?ee%4fX!K8>u84(lHB68EC at +XoGFc4(VZ%Or4QW4_v;UEcE
z at YA7M?n+4lKVARCmH?`X<hqihmhtGKD54ODPa@#gg$O}advxNUnHLG@%0K2uVK25y
zm^Z3Sk=$zz_|byf8O=q+2_Bf|H^8~>$1n=e_r`-gz#|H=Lm~u`g9rf?n2T^E^7FTl
z#R;k-39PY4Ie$&NRDLAvix5<YQ9$v}!*tjm&9`t1UwM#Cf_}+O at Yu<{f_e4_&p{B|
zLrm7yesf|M6`1)i{QD!no?ZHXmw%`ZmcTH3#>&5CUCiNNWEJqPT{1 at BI*F~rzq$Dv
z<X at Qoj`SpMHs#=k{CQbufk8pq$=MM+mXYW4=4CP*;D6kWWh4kxjhGh;l0X3eS?PFh
zV1q#If+P!2UWI``s0My}BA`{E4Zq at Ch6X*=C6!OD7Zv}JKuiqTgxD%IG)VmCsRT+0
z`s?^ciTrG=1%iJS{OM at tFY({V0=yE#K~(WCLO>Ui|B?<%I>2V|Z*<hWty->t76Pyr
z^Dl}pu}=Vd;oQPL*~<e&WDox)sssE|?MaN+kEqkk+gpDMY({?gA2a+q_J+jI9+pS#
zn`ba-v9KAoGpYo}eyZRjO}s}{fj%IF7K}4+_W;|I0T~4ns0bke#sW&C2!R{5ksVMY
zLIMIm4<VgFE-;OG0k==q2qp5oytZoQi1jF7hhO4<cDhWtCMODzKu8=WN)w- at RnuYS
zjF^$+3jYE*t)UAU0>ms4_Vs?DU8WMG75MeE0-B=FK)~WR^+f_d9p(JB5G43xhw%T(
z{OGW+#sUfZ!oR{^_(vCv0&1t&A!~7(ny8Y*c1TCUJ7*x;Yubacw+Vr_)Ibm|3wvCw
z=ht<9$$0}KzZv|4BYz<OkQqpCQs7H@*Q7U~GxV?#_Snu4OrtHF4t*=&8(;P$Lr-fV
zJw^!(bJ(jq;fuR5d)>I8u+)UGj3j6$_|rl@{A(59i(>OKDHBCa%VkoGa*(UG*zGH4
zrBHl(bxKn?FS%X at 2?X&^3JGrv0nC2^VN{$OTot#HvEprXR;x{paITYL4ZN6qgL#90
zb%1s|94V(#nXmMj0&@%hs6bSP+^B+53&MJldc+C#dLRIM8IMScvHcSBy at I`p`7wH>
zJ at B(p%vb#Dj#{oDv$Xb(F6`jmb*jq*u0Psq{!_p{S;cw9zxF?dG`u?Ohk{>LJPQ2Q
zw687l2bv#El#N^955YeN*x2*;Z66F0QHYneGlT$gL=|wn{?eED;IJPV=O_?L0<T1d
ziv&C_5`l1T;GdfwIVFo3VKyp4I3Fd1)ELHs>{Lbp7f*Pckw*%^?11J!uC0oBvGk5w
zrq9R=g80WdNNNdt%A5nI5YD<aH47~KM=LX<YChEP5rr_X`Iih==E8{l67%_Bv|QoB
zz at ZNF_t_~6o>}t={8WB)<x`bFS$$1WNR>bn=(8~xG1V*lGYYUJ%5Y!`L1h8#l=zPe
zO4I{^1a>tdfV!ex@>a7WbH at h%_D*K1viI2jWW)am_6gedi09$q2r#B*cxf>?!n|7X
zD6QfA?U6qLcRD8c|5^M8ifC9YM-##y`N7{Sfqw~m{ZBEGTu&<eXQxu<k!26Frg(Y$
z5D(iboQeuqBY_<fYee|s5vX}tQPU=h1*$1xnJDnPo64Lug)E}uY65R}qa^{B0n17o
z3heMNm3g-+{)=y6Q|4bWZ1!cpF*_#Ai{VjMII<JMMIGu2FRdM9f)HfWSG!Q&QT)?V
zYejBsU{4iP_-70Pa$2?KO|ALSD?eEXCmkgOuRyLx1Ul>_P1YS0K}kmxAsy_HEZQ+E
zoXl7m{2Lvu2r2Bd$(%AXYr4q8*^(1<krTqnb}jQ60Kc)wU*)_;<k#@q`8Ok~6{vOO
zw_0nz(Xo!Vcg7X}^})7}|B)oWv}%+DLdABX%Bb7FOn6;}0G9&~8J?Mp!;dat+0Rt)
zW>H)M(_TgS*dB}!|3O48d1zz2i$H`}@IoZQBm$V9*vgssA{jNN=P`GzCBRxT(ng4q
z+*411sZ~HS3xN42)DzX64(VX;^^BNd^3}Cns at gBi^AIJa5zW6$^{NrUsC;7hWs+Ah
zuP^(;_FDr1x?mv$b$;9qj~kHdU(_W4dd(+eQ&Ivy5(yv>IuhzR66d2tAsqvII_h1D
z{Hh~fNUdIja8ZO>L?pDQCQ4teXE3lwdVG=k3YptgctgIxFFsa1fz*opqrtDtzXhQQ
zu!X(V3FbdAdcULv`u|M=#Q#?!!v5rlk|7}36P}eKLx4zNN=$J+{8Iv@{)r31i at xrR
z`BOyLtFndj*i-)dI9^mBi$z%}kuTLzo`RZ{Lb9B`WwG#|nk;6U2yF5%&?=)YMo4F}
z%J5M3lo3G{JjE2LfUiZNg1@|F at UOfOkzcB*Y6zgi_#%DbAK>NU7f~GMht?zWzx1^W
zG6n+0Kl?TIB8uchkQQ`_(mI)iTRK_ at W=HZ|oQw<v@)jNOLVER%l7K{et7C?Jb`m<|
z>RrKGN<9jG!8k<Z*S0 at 6@*BZlE&KVu%YUGh{u!fyU!Ll3I{H_P9_mAm1qA<BBEnyZ
zia-Ldx*fzKvS2Ynm>ja*g50>7leGoH{P5hOR~anWq9XM6nj?zDnNb7F#8 at Dc#nUHI
zCdDQ>a?;R_ at Xz%xl8U+^QzMEqF=D>t0<s)h8Gh;OfxyrOFI5Rt_A at R}1yzMpW`4!<
zs6{?>j6SlGolbxk3&fgF<@S{d6#sZ3SqPCJE24ErJ0bukGP584AsJ$sv{H-k=?LU9
zA}HEb(Nb!gy2F0e5m&D|dI$*MUk?QQ(_#4a9ZOW5a|HO2gDOPpr;b{-$An)hpF`j$
z)LUWS>Wnr1b2f7j8DGcz8Kc8FPH*G?3z}b{_l)vIFC&3JMMWqHguN0TCIdlqgrvjq
zPG-cy(h~{q5jkmWM0JoRM+=LK74k&|x($CVCW?Q+$Vr*FCR~s#8Di~p!6cTIl0JKi
z@>x@)`Ii!qR4i4+UZallQD#Q4S9VB-0KG<<mzsHw)I!jMf=YfF9gIOljUYzlQ+B#!
zqD^W|Qt)T;ONy>^r1B|6AviY%0_A+ at 6aV2{3=-=<wGedBCQUY at H%Y6YPS!kJ#}GoI
zlzJHNcqyeGSzIBGk%3af&vTH~442f*b>!#zZp-;tIqz_hpZ)p{pTdI;T8nvm$9{mn
zA4pU%X|{9vKQh8j^K7G#IUfFlf0FqXqf6jr5&<IrE8!E!0%Qx*+k}4!o5228oiY4p
zVT!`i62mf*RXH?;=a5Pwz_r-O1hMe^_n0VNl0M5Qz)HEQndHR?0aFxRkc)RBiROX=
zZY~P3+O%MSq at JULImRBmwGlEB0eOicWKbaf)0efK>KNeXcy%zTwDd`eu|1>}yoIuW
zU-)-w?4 at r`f$2Rm1*T at i2<beJOkDyd0bjCUXjlBpMPV#RP`Z$g8WC_f9AHdiAq3 at r
zbl4Xcr1)oO&>d-05~Gs5{LA2Z^c{Qn#~cE`S at 2PJIWVf7BfxL)KLkiS_EtYMz=1do
i3)_&d2z at pVQzsmSe_f>+n+k^gN#-vf>AS`~1pIHHha`9a

literal 0
HcmV?d00001

diff --git a/utests/kernels/compiler_clz_int.cl b/utests/kernels/compiler_clz_int.cl
new file mode 100644
index 0000000..0f17f86
--- /dev/null
+++ b/utests/kernels/compiler_clz_int.cl
@@ -0,0 +1,5 @@
+kernel void compiler_clz_int(global int *src, global int *dst) {
+  int i = get_global_id(0);
+  dst[i] = clz(src[i]);
+}
+
diff --git a/utests/kernels/compiler_clz_short.cl b/utests/kernels/compiler_clz_short.cl
new file mode 100644
index 0000000..1ecf7a9
--- /dev/null
+++ b/utests/kernels/compiler_clz_short.cl
@@ -0,0 +1,5 @@
+kernel void compiler_clz_short(global short *src, global short *dst) {
+  int i = get_global_id(0);
+  dst[i] = clz(src[i]);
+}
+
diff --git a/utests/kernels/compiler_convert_uchar_sat.cl b/utests/kernels/compiler_convert_uchar_sat.cl
new file mode 100644
index 0000000..0c81ecc
--- /dev/null
+++ b/utests/kernels/compiler_convert_uchar_sat.cl
@@ -0,0 +1,4 @@
+kernel void compiler_convert_uchar_sat(global float *src, global uint *dst) {
+  int i = get_global_id(0);
+  dst[i] = convert_uchar_sat(src[i]);
+}
diff --git a/utests/kernels/compiler_data_types.cl b/utests/kernels/compiler_data_types.cl
new file mode 100644
index 0000000..79b06f3
--- /dev/null
+++ b/utests/kernels/compiler_data_types.cl
@@ -0,0 +1,80 @@
+/* OpenCL 1.1 Supported Data Types */
+__kernel void compiler_data_types()
+{
+  // built-in scalar data types (section 6.1.1)
+  bool b;
+  b = true;
+  b = false;
+  char c;
+  unsigned char uc;
+  uchar uc_2;
+  short s;
+  unsigned short us;
+  ushort us_2;
+  int i;
+  unsigned int ui;
+  uint ui_2;
+  long l;
+  unsigned long ul;
+  ulong ul_2;
+  float f;
+  half h;
+  size_t sz;
+  ptrdiff_t pt;
+  intptr_t it;
+  uintptr_t uit;
+  
+  // built-in vector data types (section 6.1.2)
+  // supported values of $n$ are 2, 3, 4, 8, 16 for all vector data types
+#define VEC(sz) char##sz c##sz;   \
+                uchar##sz uc##sz; \
+                short##sz s##sz;  \
+                ushort##sz us##sz;\
+                int##sz i##sz;    \
+                uint##sz ui##sz;  \
+                long##sz l##sz;   \
+                ulong##sz ul##sz; \
+                float##sz f##sz;
+#if 1
+   VEC(2);
+   VEC(3);
+   VEC(4);
+   VEC(8);
+   VEC(16);
+#endif
+   float16 f_16 = (float16)(1.0f);
+   f_16.s0 += 1;
+   f_16.s1 += 1;
+   f_16.s2 += 1;
+   f_16.s3 += 1;
+   f_16.s4 += 1;
+   f_16.s5 += 1;
+   f_16.s6 += 1;
+   f_16.s7 += 1;
+   f_16.s8 += 1;
+   f_16.s9 += 1;
+   f_16.sa += 1;
+   f_16.sb += 1;
+   f_16.sc += 1;
+   f_16.sd += 1;
+   f_16.se += 1;
+   f_16.sf += 1;
+   f_16.sA += 1;
+   f_16.sB += 1;
+   f_16.sC += 1;
+   f_16.sD += 1;
+   f_16.sE += 1;
+   f_16.sF += 1;
+   float8 f_8;
+   f_8 = f_16.lo;
+   f_8 = f_16.hi;
+   f_8 = f_16.odd;
+   f_8 = f_16.even;
+   uint4 u_4 = (uint4)(1);
+
+   // Other built-in data types (section 6.1.3)
+   image2d_t i2dt;
+   image3d_t i3dt;
+   sampler_t st;
+   event_t et;
+}
diff --git a/utests/kernels/compiler_degrees.cl b/utests/kernels/compiler_degrees.cl
new file mode 100644
index 0000000..5fad995
--- /dev/null
+++ b/utests/kernels/compiler_degrees.cl
@@ -0,0 +1,4 @@
+kernel void compiler_degrees(global float *src, global float *dst) {
+  int i = get_global_id(0);
+  dst[i] = degrees(src[i]);
+}
diff --git a/utests/kernels/compiler_displacement_map_element.cl b/utests/kernels/compiler_displacement_map_element.cl
new file mode 100644
index 0000000..ee40ad5
--- /dev/null
+++ b/utests/kernels/compiler_displacement_map_element.cl
@@ -0,0 +1,11 @@
+kernel void compiler_displacement_map_element(const global uint *in, const global uint *offset, int w, int h, global uint *out) {
+    const int cx = get_global_id(0);
+    const int cy = get_global_id(1);
+    uint c = offset[cy * w + cx];
+    int x_pos = cx + c;
+    int y_pos = cy + c;
+    if(0 <= x_pos && x_pos < w && 0 <= y_pos && y_pos < h)
+        out[cy * w + cx] = in[y_pos * w + x_pos];
+    else
+        out[cy * w + cx] = 0;
+}
diff --git a/utests/kernels/compiler_double.cl b/utests/kernels/compiler_double.cl
new file mode 100644
index 0000000..a84f142
--- /dev/null
+++ b/utests/kernels/compiler_double.cl
@@ -0,0 +1,9 @@
+#pragma OPENCL EXTENSION cl_khr_fp64 : enable
+kernel void compiler_double(global double *src, global double *dst) {
+  int i = get_global_id(0);
+  double d = 1.234567890123456789;
+  if (i < 14)
+    dst[i] = d * (src[i] + d);
+  else
+    dst[i] = 14;
+}
diff --git a/utests/kernels/compiler_double_2.cl b/utests/kernels/compiler_double_2.cl
new file mode 100644
index 0000000..20ee614
--- /dev/null
+++ b/utests/kernels/compiler_double_2.cl
@@ -0,0 +1,9 @@
+#pragma OPENCL EXTENSION cl_khr_fp64 : enable
+kernel void compiler_double_2(global float *src, global double *dst) {
+  int i = get_global_id(0);
+  float d = 1.234567890123456789f;
+  if (i < 14)
+    dst[i] = d * (d + src[i]);
+  else
+    dst[i] = 14;
+}
diff --git a/utests/kernels/compiler_double_3.cl b/utests/kernels/compiler_double_3.cl
new file mode 100644
index 0000000..8b32404
--- /dev/null
+++ b/utests/kernels/compiler_double_3.cl
@@ -0,0 +1,6 @@
+#pragma OPENCL EXTENSION cl_khr_fp64 : enable
+kernel void compiler_double_3(global float *src, global double *dst) {
+  int i = get_global_id(0);
+  float d = 1.234567890123456789f;
+  dst[i] = i < 14 ? d : 14;
+}
diff --git a/utests/kernels/compiler_double_4.cl b/utests/kernels/compiler_double_4.cl
new file mode 100644
index 0000000..e5e46f9
--- /dev/null
+++ b/utests/kernels/compiler_double_4.cl
@@ -0,0 +1,5 @@
+#pragma OPENCL EXTENSION cl_khr_fp64 : enable
+kernel void compiler_double_4(global double *src1, global double *src2, global double *dst) {
+  int i = get_global_id(0);
+  dst[i] = src1[i] + src2[i];
+}
diff --git a/utests/kernels/compiler_event.cl b/utests/kernels/compiler_event.cl
new file mode 100644
index 0000000..a901b05
--- /dev/null
+++ b/utests/kernels/compiler_event.cl
@@ -0,0 +1,6 @@
+__kernel void
+compiler_event(__global int *dst, int value)
+{
+  int id = (int)get_global_id(0);
+  dst[id] += value;
+}
diff --git a/utests/kernels/compiler_fabs.cl b/utests/kernels/compiler_fabs.cl
new file mode 100644
index 0000000..016deb8
--- /dev/null
+++ b/utests/kernels/compiler_fabs.cl
@@ -0,0 +1,5 @@
+kernel void compiler_fabs(global float *src, global float *dst) {
+  int i = get_global_id(0);
+  dst[i] = fabs(src[i]);
+}
+
diff --git a/utests/kernels/compiler_function_argument.cl b/utests/kernels/compiler_function_argument.cl
new file mode 100644
index 0000000..fe6de28
--- /dev/null
+++ b/utests/kernels/compiler_function_argument.cl
@@ -0,0 +1,7 @@
+__kernel void
+compiler_function_argument(__global int *dst, int value)
+{
+  int id = (int)get_global_id(0);
+  dst[id] = value;
+}
+
diff --git a/utests/kernels/compiler_function_argument0.cl b/utests/kernels/compiler_function_argument0.cl
new file mode 100644
index 0000000..6bc2e92
--- /dev/null
+++ b/utests/kernels/compiler_function_argument0.cl
@@ -0,0 +1,7 @@
+__kernel void
+compiler_function_argument0(__global int *dst, short value)
+{
+  int id = (int)get_global_id(0);
+  dst[id] = value;
+}
+
diff --git a/utests/kernels/compiler_function_argument1.cl b/utests/kernels/compiler_function_argument1.cl
new file mode 100644
index 0000000..8842b0b
--- /dev/null
+++ b/utests/kernels/compiler_function_argument1.cl
@@ -0,0 +1,7 @@
+__kernel void
+compiler_function_argument1(__global int *dst, char value, short value0, int value1)
+{
+  int id = (int)get_global_id(0);
+  dst[id] = value + value0 + value1;
+}
+
diff --git a/utests/kernels/compiler_function_argument2.cl b/utests/kernels/compiler_function_argument2.cl
new file mode 100644
index 0000000..24e5795
--- /dev/null
+++ b/utests/kernels/compiler_function_argument2.cl
@@ -0,0 +1,12 @@
+__kernel void compiler_function_argument2(
+char8 c, uchar8 uc, short8 s, ushort8 us, int8 i, uint8 ui, float8 f,
+__global float8 *result)
+{
+  result[0] = convert_float8(c);
+  result[1] = convert_float8(uc);
+  result[2] = convert_float8(s);
+  result[3] = convert_float8(us);
+  result[4] = convert_float8(i);
+  result[5] = convert_float8(ui);
+  result[6] = f;
+}
diff --git a/utests/kernels/compiler_function_argument3.cl b/utests/kernels/compiler_function_argument3.cl
new file mode 100644
index 0000000..9395cd7
--- /dev/null
+++ b/utests/kernels/compiler_function_argument3.cl
@@ -0,0 +1,71 @@
+struct sfloat8 {
+    float a;
+    float b;
+    float c;
+    float d;
+    float e;
+    float f;
+    float g;
+    float h;
+};
+
+
+__kernel void compiler_function_argument3(
+struct sfloat8 f, __global struct sfloat8 *result)
+{
+  result[0].a = f.a;
+  result[0].b = 12.0f;
+  result[0].c = 12.0f;
+  result[0].d = 12.0f;
+  result[0].e = 12.0f;
+  result[0].f = 12.0f;
+  result[0].g = 12.0f;
+  result[0].h = f.a + f.h;
+
+  result[1].a = f.a;
+  result[1].b = 12.0f;
+  result[1].c = 12.0f;
+  result[1].d = 12.0f;
+  result[1].e = 12.0f;
+  result[1].f = 12.0f;
+  result[1].g = 12.0f;
+  result[1].h = f.a + f.h;
+
+  result[2].a = f.a;
+  result[2].b = 12.0f;
+  result[2].c = 12.0f;
+  result[2].d = 12.0f;
+  result[2].e = 12.0f;
+  result[2].f = 12.0f;
+  result[2].g = 12.0f;
+  result[2].h = f.a + f.h;
+
+  result[3].a = f.a;
+  result[3].b = 12.0f;
+  result[3].c = 12.0f;
+  result[3].d = 12.0f;
+  result[3].e = 12.0f;
+  result[3].f = 12.0f;
+  result[3].g = 12.0f;
+  result[3].h = f.a + f.h;
+
+  result[4].a = f.a;
+  result[4].b = 12.0f;
+  result[4].c = 12.0f;
+  result[4].d = 12.0f;
+  result[4].e = 12.0f;
+  result[4].f = 12.0f;
+  result[4].g = 12.0f;
+  result[4].h = f.a + f.h;
+
+  result[5].a = f.a;
+  result[5].b = 12.0f;
+  result[5].c = 12.0f;
+  result[5].d = 12.0f;
+  result[5].e = 12.0f;
+  result[5].f = 12.0f;
+  result[5].g = 12.0f;
+  result[5].h = f.a + f.h;
+
+  result[6] = result[0];
+}
diff --git a/utests/kernels/compiler_function_constant.cl b/utests/kernels/compiler_function_constant.cl
new file mode 100644
index 0000000..ca7e874
--- /dev/null
+++ b/utests/kernels/compiler_function_constant.cl
@@ -0,0 +1,6 @@
+__kernel void
+compiler_function_constant(__constant short *c, __global int *dst, int value)
+{
+  int id = (int)get_global_id(0);
+  dst[id] = value + c[id%69];
+}
diff --git a/utests/kernels/compiler_function_constant0.cl b/utests/kernels/compiler_function_constant0.cl
new file mode 100644
index 0000000..5340352
--- /dev/null
+++ b/utests/kernels/compiler_function_constant0.cl
@@ -0,0 +1,6 @@
+__kernel void
+compiler_function_constant0(__constant int *c0, __constant char *c1, __global int *dst, int value)
+{
+  int id = (int)get_global_id(0);
+  dst[id] = value + c0[id%69] + c1[0];
+}
diff --git a/utests/kernels/compiler_function_qualifiers.cl b/utests/kernels/compiler_function_qualifiers.cl
new file mode 100644
index 0000000..c904c84
--- /dev/null
+++ b/utests/kernels/compiler_function_qualifiers.cl
@@ -0,0 +1,9 @@
+/* test OpenCL 1.1 Function Qualifiers (section 6.7) */
+kernel void compiler_function_qualifiers()
+__attribute__((vec_type_hint(float)))
+__attribute__((work_group_size_hint(4,1,1)))
+__attribute__((reqd_work_group_size(4,1,1)));
+
+kernel void compiler_function_qualifiers()
+{
+}
diff --git a/utests/kernels/compiler_gather_register_file.cl b/utests/kernels/compiler_gather_register_file.cl
new file mode 100644
index 0000000..773797d
--- /dev/null
+++ b/utests/kernels/compiler_gather_register_file.cl
@@ -0,0 +1,10 @@
+__kernel void
+compiler_gather_register_file(__global uint *src, __global uint *dst)
+{
+  __gen_ocl_force_simd16();
+  int id = (int)get_global_id(0);
+  const int x0 = src[id];
+  const unsigned short index = get_global_id(0);
+  dst[id] = __gen_ocl_rgather(index, x0);
+}
+
diff --git a/utests/kernels/compiler_gather_register_file0.cl b/utests/kernels/compiler_gather_register_file0.cl
new file mode 100644
index 0000000..0e6d487
--- /dev/null
+++ b/utests/kernels/compiler_gather_register_file0.cl
@@ -0,0 +1,10 @@
+__kernel void
+compiler_gather_register_file0(__global uint *src, __global uint *dst)
+{
+  __gen_ocl_force_simd16();
+  int id = (int)get_global_id(0);
+  const int x0 = src[id];
+  const unsigned short index = 15 - get_global_id(0);
+  dst[id] = __gen_ocl_rgather(index, x0);
+}
+
diff --git a/utests/kernels/compiler_gather_register_file1.cl b/utests/kernels/compiler_gather_register_file1.cl
new file mode 100644
index 0000000..184202c
--- /dev/null
+++ b/utests/kernels/compiler_gather_register_file1.cl
@@ -0,0 +1,11 @@
+__kernel void
+compiler_gather_register_file1(__global uint *src, __global uint *dst)
+{
+  __gen_ocl_force_simd16();
+  int id = (int)get_global_id(0);
+  const int x0 = src[id];
+  const int x1 = src[id+16];
+  const unsigned short index = 2*get_global_id(0);
+  dst[id] = __gen_ocl_rgather(index, x0, x1);
+}
+
diff --git a/utests/kernels/compiler_geometric_builtin.cl b/utests/kernels/compiler_geometric_builtin.cl
new file mode 100644
index 0000000..34ff761
--- /dev/null
+++ b/utests/kernels/compiler_geometric_builtin.cl
@@ -0,0 +1,11 @@
+kernel void compiler_geometric_builtin() {
+  float x = 1, y = 2, z = 3;
+  z = dot(x, y);
+  z = cross(x, y);
+  z = distance(x, y);
+  z = length(x);
+  z = normalize(x);
+  z = fast_distance(x, y);
+  z = fast_length(x, y);
+  z = fast_normalize(x);
+}
diff --git a/utests/kernels/compiler_getelementptr_bitcast.cl b/utests/kernels/compiler_getelementptr_bitcast.cl
new file mode 100644
index 0000000..0320abf
--- /dev/null
+++ b/utests/kernels/compiler_getelementptr_bitcast.cl
@@ -0,0 +1,18 @@
+__kernel void compiler_getelementptr_bitcast(global float *src, global float *dst)
+{
+  int i = get_global_id(0);
+
+  __local  float ldata[256];
+  ldata[get_local_id(0)] = src[i];
+
+  //if use get_local_id(0) to index ldata, the issue is not reproduced
+  //so, just set the work group as 1 in the application
+  __local uchar *  pldata = (__local uchar *)&ldata[0];
+  uchar data;
+  for(int k = 0; k < 3; k++){
+    data = *pldata;
+    pldata++;
+  }
+
+  dst[i] = data;
+}
diff --git a/utests/kernels/compiler_global_constant.cl b/utests/kernels/compiler_global_constant.cl
new file mode 100644
index 0000000..c0e23d1
--- /dev/null
+++ b/utests/kernels/compiler_global_constant.cl
@@ -0,0 +1,76 @@
+constant int m[3] = {71,72,73};
+const constant int n = 1;
+constant int o[3] = {3, 2, 1};
+
+constant int4 a= {1, 2, 3, 4};
+constant int4 b = {0, -1, -2, -3};
+
+struct Person {
+  char name[7];
+  int3 idNumber;
+};
+
+struct Test1 {
+  int a0;
+  char a1;
+};
+
+struct Test2 {
+  char a0;
+  int a1;
+};
+struct Test3 {
+  int a0;
+  int a1;
+};
+struct Test4 {
+  float a0;
+  float a1;
+};
+
+constant struct Person james= {{"james"}, (int3)(1, 2, 3)};
+constant struct Test1 t0 = {1, 2};
+constant struct Test2 t1 = {1, 2};
+
+constant int3 c[3] = {(int3)(0, 1, 2), (int3)(3, 4, 5), (int3)(6,7,8) };
+constant char4 d[3] = {(char4)(0, 1, 2, 3), (char4)(4, 5, 6, 7), (char4)(8, 9, 10, 11)};
+
+constant struct Person members[3] = {{{"abc"}, (int3)(1, 2, 3)}, { {"defg"}, (int3)(4,5,6)}, { {"hijk"}, (int3)(7,8,9)} };
+constant struct Test3 zero_struct = {0, 0};
+constant int3 zero_vec = {0,0,0};
+constant int zero_arr[3] = {0,0,0};
+constant float zero_flt[3] = {0.0f, 0.0f, 0.0f};
+
+__kernel void
+compiler_global_constant(__global int *dst, int e, int r)
+{
+  int id = (int)get_global_id(0);
+
+  int4 x = a + b;
+  dst[id] = m[id%3] * n * o[2] + e + r *x.y * a.x + zero_struct.a0 + zero_vec.x + zero_arr[1] + (int)zero_flt[2];
+}
+// array of vectors
+__kernel void
+compiler_global_constant1(__global int *dst)
+{
+  int id = (int)get_global_id(0);
+  dst[id] = c[id%3].y + d[id%3].w;
+}
+
+// structure
+__kernel void
+compiler_global_constant2(__global int *dst)
+{
+  int id = (int)get_global_id(0);
+
+  dst[id] = james.idNumber.y + t0.a1 + t1.a1;
+}
+
+//array of structure
+__kernel void
+compiler_global_constant3(__global int *dst)
+{
+  int id = (int)get_global_id(0);
+
+  dst[id] = members[id%3].idNumber.z + members[id%3].name[2];
+}
diff --git a/utests/kernels/compiler_global_constant_2.cl b/utests/kernels/compiler_global_constant_2.cl
new file mode 100644
index 0000000..04536c7
--- /dev/null
+++ b/utests/kernels/compiler_global_constant_2.cl
@@ -0,0 +1,20 @@
+constant int m[3] = {0x15b,0x25b,0x35b};
+constant short t[5] = {0x45b,0x55b,0x65b,0x75b,0x85b};
+constant long n[3] = {0x15b,0x25b,0xFFFFFFFFF};
+constant long p[3] = {1,1,1};
+constant long s = 1;
+
+
+__kernel void
+compiler_global_constant_2(__global int *dst, int e, int r)
+{
+  int id = (int)get_global_id(0);
+  dst[id] = m[id%3] + t[id%5] + e + r;
+}
+
+__kernel void
+compiler_global_constant_2_long(__global long *dst, int e, int r)
+{
+  int id = (int)get_global_id(0);
+  dst[id] = n[id%3]*p[1] + e*s + r;
+}
diff --git a/utests/kernels/compiler_global_memory_barrier.cl b/utests/kernels/compiler_global_memory_barrier.cl
new file mode 100644
index 0000000..99bb940
--- /dev/null
+++ b/utests/kernels/compiler_global_memory_barrier.cl
@@ -0,0 +1,7 @@
+__kernel void compiler_global_memory_barrier(__global int *dst, __global int *src) {
+  src[get_local_size(0) * (2 * get_group_id(0)) + get_local_id(0)] = get_local_id(0);
+  src[get_local_size(0) * (2 * get_group_id(0) + 1) + get_local_id(0)] = get_local_id(0);
+  barrier(CLK_GLOBAL_MEM_FENCE);
+  dst[get_local_size(0) * (2 * get_group_id(0)) + get_local_id(0)] = src[get_local_size(0) * 2 * get_group_id(0) + get_local_size(0) - (get_local_id(0) + 1)];
+  dst[get_local_size(0) * (2 * get_group_id(0) + 1) + get_local_id(0)] = src[get_local_size(0) * (2 * get_group_id(0) + 1) + get_local_size(0) - (get_local_id(0) + 1)];
+}
diff --git a/utests/kernels/compiler_group_size.cl b/utests/kernels/compiler_group_size.cl
new file mode 100644
index 0000000..4e2c333
--- /dev/null
+++ b/utests/kernels/compiler_group_size.cl
@@ -0,0 +1,29 @@
+__kernel void
+compiler_group_size(__global unsigned int *dst)
+{
+  uint idx = (uint)get_global_id(0);
+  uint idy = (uint)get_global_id(1);
+  uint idz = (uint)get_global_id(2);
+  uint size_x = (uint)get_global_size(0);
+  uint size_y = (uint)get_global_size(1);
+
+  dst[idz*size_x*size_y + idy*size_x + idx] = idz*size_x*size_y + idy*size_x +idx;
+}
+
+struct xyz{
+  unsigned short b;
+  unsigned short e;
+  unsigned int o;
+};
+
+__kernel void
+compiler_group_size4(__global struct xyz *src, __global unsigned int *dst, unsigned int num, unsigned int c)
+{
+  uint idx = (uint)get_global_id(0);
+  if(idx>=num)
+    return;
+  struct xyz td = src[idx];
+  for(unsigned x = td.b;x<=td.e;x++)
+    dst[td.o+x] = c;
+}
+
diff --git a/utests/kernels/compiler_hadd.cl b/utests/kernels/compiler_hadd.cl
new file mode 100644
index 0000000..fe50195
--- /dev/null
+++ b/utests/kernels/compiler_hadd.cl
@@ -0,0 +1,4 @@
+kernel void compiler_hadd(global int *src1, global int *src2, global int *dst) {
+  int i = get_global_id(0);
+  dst[i] = hadd(src1[i], src2[i]);
+}
diff --git a/utests/kernels/compiler_if_else.cl b/utests/kernels/compiler_if_else.cl
new file mode 100644
index 0000000..7ae8f99
--- /dev/null
+++ b/utests/kernels/compiler_if_else.cl
@@ -0,0 +1,14 @@
+__kernel void
+compiler_if_else(__global int *src, __global int *dst)
+{
+  int id = (int)get_global_id(0);
+  dst[id] = src[id];
+  if (dst[id] >= 0) {
+    dst[id] = src[id+1];
+    src[id] = 1;
+  } else {
+    dst[id]--;
+    src[id] = 2;
+  }
+}
+
diff --git a/utests/kernels/compiler_insert_to_constant.cl b/utests/kernels/compiler_insert_to_constant.cl
new file mode 100644
index 0000000..f94c5c3
--- /dev/null
+++ b/utests/kernels/compiler_insert_to_constant.cl
@@ -0,0 +1,6 @@
+__kernel void compiler_insert_to_constant(__global int4 *dst) {
+  int4 value = (int4)(0,1,2,3);
+  value.z = get_global_id(0);
+  dst[get_global_id(0)] = value;
+}
+
diff --git a/utests/kernels/compiler_insert_vector.cl b/utests/kernels/compiler_insert_vector.cl
new file mode 100644
index 0000000..0f0e20f
--- /dev/null
+++ b/utests/kernels/compiler_insert_vector.cl
@@ -0,0 +1,11 @@
+__kernel void
+compiler_insert_vector(__global int4 *out )
+{
+    int tid = get_global_id(0);
+    int4 output = (int4)(0, 0, 0, 1); //black
+    if (tid > 16)
+    {
+        output = (int4)(tid, tid, 1, 1);
+    }
+    out[tid] = output;
+}
diff --git a/utests/kernels/compiler_insn_selection_masked_min_max.cl b/utests/kernels/compiler_insn_selection_masked_min_max.cl
new file mode 100644
index 0000000..5b4be57
--- /dev/null
+++ b/utests/kernels/compiler_insn_selection_masked_min_max.cl
@@ -0,0 +1,11 @@
+__kernel void
+compiler_insn_selection_masked_min_max(__global float* src, __global float* dst)
+{
+  int id = (int)get_global_id(0);
+  if (get_local_id(0) > 5)
+    dst[id] = max(src[id], src[7]);
+  else
+    dst[id] = min(src[id], src[10]);
+}
+
+
diff --git a/utests/kernels/compiler_insn_selection_max.cl b/utests/kernels/compiler_insn_selection_max.cl
new file mode 100644
index 0000000..762de2b
--- /dev/null
+++ b/utests/kernels/compiler_insn_selection_max.cl
@@ -0,0 +1,7 @@
+__kernel void
+compiler_insn_selection_max(__global float* src, __global float* dst)
+{
+  int id = (int)get_global_id(0);
+  dst[id] = max(src[id], src[0]);
+}
+
diff --git a/utests/kernels/compiler_insn_selection_min.cl b/utests/kernels/compiler_insn_selection_min.cl
new file mode 100644
index 0000000..6800eaf
--- /dev/null
+++ b/utests/kernels/compiler_insn_selection_min.cl
@@ -0,0 +1,7 @@
+__kernel void
+compiler_insn_selection_min(__global float* src, __global float* dst)
+{
+  int id = (int)get_global_id(0);
+  dst[id] = min(src[id], src[0]);
+}
+
diff --git a/utests/kernels/compiler_integer_builtin.cl b/utests/kernels/compiler_integer_builtin.cl
new file mode 100644
index 0000000..4faacd6
--- /dev/null
+++ b/utests/kernels/compiler_integer_builtin.cl
@@ -0,0 +1,23 @@
+/* test OpenCL 1.1 Integet Built-in Functions (section 6.11.3) */
+__kernel void compiler_integer_builtin() {
+  int i = 0, i1 = -1, i2 = -2;
+  unsigned u = 1, u1 = 2, u2 = 3;
+  i = CHAR_MAX;
+  i = abs(u);
+  i = abs_diff(u1, u2);
+  i = add_sat(i1, i2);
+  i = hadd(i1, i2);
+  i = rhadd(i1, i2);
+  i = clz(i);
+  i = clamp(i, i1, i2);
+  i = mad_hi(i, i1, i2);
+  i = mad_sat(i, i1, i2);
+  i = max(i1, i2);
+  i = min(i1, i2);
+  i = mul_hi(i1, i2);
+  i = rotate(i1, i2);
+  i = sub_sat(i1, i2);
+  long l = upsample(i, u);
+  i = mad24(i, i1, i2);
+  i = mul24(i1, i2);
+}
diff --git a/utests/kernels/compiler_integer_division.cl b/utests/kernels/compiler_integer_division.cl
new file mode 100644
index 0000000..146daa0
--- /dev/null
+++ b/utests/kernels/compiler_integer_division.cl
@@ -0,0 +1,6 @@
+__kernel void
+compiler_integer_division(__global int *src, __global int *dst, int x)
+{
+  dst[get_global_id(0)] = src[get_global_id(0)] / x;
+}
+
diff --git a/utests/kernels/compiler_integer_remainder.cl b/utests/kernels/compiler_integer_remainder.cl
new file mode 100644
index 0000000..73558cb
--- /dev/null
+++ b/utests/kernels/compiler_integer_remainder.cl
@@ -0,0 +1,6 @@
+__kernel void
+compiler_integer_remainder(__global int *src, __global int *dst, int x)
+{
+  dst[get_global_id(0)] = src[get_global_id(0)] % x;
+}
+
diff --git a/utests/kernels/compiler_julia.cl b/utests/kernels/compiler_julia.cl
new file mode 100644
index 0000000..21672f6
--- /dev/null
+++ b/utests/kernels/compiler_julia.cl
@@ -0,0 +1,144 @@
+typedef float2 vec2;
+typedef float3 vec3;
+typedef float4 vec4;
+
+#define sin native_sin
+#define cos native_cos
+#define tan native_tan
+#define normalize fast_normalize
+#define length fast_length
+#define mod fmod
+#define time 1.f
+
+inline vec3 reflect(vec3 I, vec3 N) {
+  return I - 2.0f * dot(N, I) * N;
+}
+
+inline uint pack_fp4(float4 u4) {
+  uint u;
+  u = (((uint) u4.x)) |
+      (((uint) u4.y) << 8) |
+      (((uint) u4.z) << 16);
+  return u;
+}
+
+#define OUTPUT do {\
+  const vec4 final = 255.f * max(min(gl_FragColor, (vec4)(1.f)), (vec4)(0.f)); \
+  dst[get_global_id(0) + get_global_id(1) * w] = pack_fp4(final); \
+} while (0)
+
+inline __attribute__((always_inline))
+float jinteresct(vec3 rO, vec3 rD, vec4 c, float *ao)
+{
+    float mz2,md2,dist,t;
+    float res=1000.0f;
+    vec4 z,nz;
+    int update_ao = 1;
+    *ao = 0.0f;
+    for(t=0.0f;t<6.0f;t+=dist)
+    {
+        if (update_ao) *ao += 1.0f;
+        vec3 p=rO+t*rD;
+
+        // calc distance
+        z=(vec4)(p,(c.y+c.x)*.3f);
+        md2=1.0f;
+        mz2=dot(z,z);
+
+        for(int i=0;i<9;i++)
+        {
+             // |dz|^2 -> 4*|dz|^2
+             //if (mz2 <= 4.0f)
+             {
+             md2*=4.0f*mz2;
+             // z -> z2 + c
+             nz.x=z.x*z.x-dot(z.yzw,z.yzw);
+             nz.yzw=2.0f*z.x*z.yzw;
+             z=nz+c;
+             mz2=dot(z,z);
+            }
+             if(mz2>4.0f)
+                 break;
+         }
+
+         dist=0.25f*sqrt(mz2/md2)*log(mz2);
+         if(dist<0.0005f)
+         {
+             res=t;
+             break;
+         }
+         t+= dist;
+    }
+
+    return res;
+}
+
+#if 1
+inline __attribute__((always_inline))
+vec3 calcNormal(vec3 p, vec4 c)
+{
+    vec4 nz,ndz,dz[4];
+
+    vec4 z=(vec4)(p,(c.y+c.x)*.3f);
+
+    dz[0]=(vec4)(1.0f,0.0f,0.0f,0.0f);
+    dz[1]=(vec4)(0.0f,1.0f,0.0f,0.0f);
+    dz[2]=(vec4)(0.0f,0.0f,1.0f,0.0f);
+  //dz[3]=(vec4)(0.0f,0.0f,0.0f,1.0f);
+
+    for(int i=0;i<9;i++)
+    {
+        vec4 mz = (vec4)(z.x,-z.y,-z.z,-z.w);
+        // derivative
+        dz[0]=(vec4)(dot(mz,dz[0]),z.x*dz[0].yzw+dz[0].x*z.yzw);
+        dz[1]=(vec4)(dot(mz,dz[1]),z.x*dz[1].yzw+dz[1].x*z.yzw);
+        dz[2]=(vec4)(dot(mz,dz[2]),z.x*dz[2].yzw+dz[2].x*z.yzw);
+        //dz[3]=(vec4)(dot(mz,dz[3]),z.x*dz[3].yzw+dz[3].x*z.yzw);
+
+        // z = z2 + c
+        nz.x=dot(z, mz);
+        nz.yzw=2.0f*z.x*z.yzw;
+        z=nz+c;
+
+        if(dot(z,z)>4.0f)
+            break;
+    }
+
+    return normalize((vec3)(dot(z,dz[0]),dot(z,dz[1]),dot(z,dz[2])));
+}
+#endif
+
+__kernel void compiler_julia(__global uint *dst, float resx, float resy, int w)
+{
+    vec2 gl_FragCoord = (vec2)(get_global_id(0), get_global_id(1));
+    vec2 p=-1.0f+2.0f*gl_FragCoord.xy/(vec2)(resx,resy);
+    vec3 color = (vec3)(0.0f);
+    vec4 cccc = (vec4)( .7f*cos(.5f*time), .7f*sin(.3f*time), .7f*cos(1.0f*time), 0.0f );
+    vec3 edir = normalize((vec3)(p,1.0f));
+    vec3 wori = (vec3)(0.0f,0.0f,-2.0f);
+
+    float ao;
+    float t = jinteresct(wori,edir,cccc,&ao);
+    if(t<100.0f)
+    {
+#if 1
+        vec3 inter = wori + t*edir;
+        vec3 nor = calcNormal(inter,cccc);
+
+        float dif = .5f + .5f*dot( nor, (vec3)(0.57703f) );
+        ao = max( 1.0f-ao*0.005f, 0.0f);
+
+        color = (vec3)(1.0f,.9f,.5f)*dif*ao +  .5f*(vec3)(.6f,.7f,.8f)*ao;
+#else
+        color = (vec3)(0.5f,0.0f,0.0f);
+#endif
+    }
+    else
+    {
+        color = (vec3)(0.5f,0.51f,0.52f)+(vec3)(0.5f,0.47f,0.45f)*p.y;
+    }
+
+    vec4 gl_FragColor = (vec4)(color,1.0f);
+    OUTPUT;
+}
+
diff --git a/utests/kernels/compiler_julia_function_call.cl b/utests/kernels/compiler_julia_function_call.cl
new file mode 100644
index 0000000..7b3aa46
--- /dev/null
+++ b/utests/kernels/compiler_julia_function_call.cl
@@ -0,0 +1,142 @@
+typedef float2 vec2;
+typedef float3 vec3;
+typedef float4 vec4;
+
+#define sin native_sin
+#define cos native_cos
+#define tan native_tan
+#define normalize fast_normalize
+#define length fast_length
+#define mod fmod
+#define time 1.f
+
+vec3 reflect(vec3 I, vec3 N) {
+  return I - 2.0f * dot(N, I) * N;
+}
+
+uint pack_fp4(float4 u4) {
+  uint u;
+  u = (((uint) u4.x)) |
+      (((uint) u4.y) << 8) |
+      (((uint) u4.z) << 16);
+  return u;
+}
+
+#define OUTPUT do {\
+  const vec4 final = 255.f * max(min(gl_FragColor, (vec4)(1.f)), (vec4)(0.f)); \
+  dst[get_global_id(0) + get_global_id(1) * w] = pack_fp4(final); \
+} while (0)
+
+float jinteresct(vec3 rO, vec3 rD, vec4 c, float *ao)
+{
+    float mz2,md2,dist,t;
+    float res=1000.0f;
+    vec4 z,nz;
+    int update_ao = 1;
+    *ao = 0.0f;
+    for(t=0.0f;t<6.0f;t+=dist)
+    {
+        if (update_ao) *ao += 1.0f;
+        vec3 p=rO+t*rD;
+
+        // calc distance
+        z=(vec4)(p,(c.y+c.x)*.3f);
+        md2=1.0f;
+        mz2=dot(z,z);
+
+        for(int i=0;i<9;i++)
+        {
+             // |dz|^2 -> 4*|dz|^2
+             //if (mz2 <= 4.0f)
+             {
+             md2*=4.0f*mz2;
+             // z -> z2 + c
+             nz.x=z.x*z.x-dot(z.yzw,z.yzw);
+             nz.yzw=2.0f*z.x*z.yzw;
+             z=nz+c;
+             mz2=dot(z,z);
+            }
+             if(mz2>4.0f)
+                 break;
+         }
+
+         dist=0.25f*sqrt(mz2/md2)*log(mz2);
+         if(dist<0.0005f)
+         {
+             res=t;
+             break;
+         }
+         t+= dist;
+    }
+
+    return res;
+}
+
+#if 1
+vec3 calcNormal(vec3 p, vec4 c)
+{
+    vec4 nz,ndz,dz[4];
+
+    vec4 z=(vec4)(p,(c.y+c.x)*.3f);
+
+    dz[0]=(vec4)(1.0f,0.0f,0.0f,0.0f);
+    dz[1]=(vec4)(0.0f,1.0f,0.0f,0.0f);
+    dz[2]=(vec4)(0.0f,0.0f,1.0f,0.0f);
+  //dz[3]=(vec4)(0.0f,0.0f,0.0f,1.0f);
+
+    for(int i=0;i<9;i++)
+    {
+        vec4 mz = (vec4)(z.x,-z.y,-z.z,-z.w);
+        // derivative
+        dz[0]=(vec4)(dot(mz,dz[0]),z.x*dz[0].yzw+dz[0].x*z.yzw);
+        dz[1]=(vec4)(dot(mz,dz[1]),z.x*dz[1].yzw+dz[1].x*z.yzw);
+        dz[2]=(vec4)(dot(mz,dz[2]),z.x*dz[2].yzw+dz[2].x*z.yzw);
+        //dz[3]=(vec4)(dot(mz,dz[3]),z.x*dz[3].yzw+dz[3].x*z.yzw);
+
+        // z = z2 + c
+        nz.x=dot(z, mz);
+        nz.yzw=2.0f*z.x*z.yzw;
+        z=nz+c;
+
+        if(dot(z,z)>4.0f)
+            break;
+    }
+
+    return normalize((vec3)(dot(z,dz[0]),dot(z,dz[1]),dot(z,dz[2])));
+}
+#endif
+
+__kernel void compiler_julia(__global uint *dst, float resx, float resy, int w)
+{
+    vec2 gl_FragCoord = (vec2)(get_global_id(0), get_global_id(1));
+    vec2 p=-1.0f+2.0f*gl_FragCoord.xy/(vec2)(resx,resy);
+    vec3 color = (vec3)(0.0f);
+    vec4 cccc = (vec4)( .7f*cos(.5f*time), .7f*sin(.3f*time), .7f*cos(1.0f*time), 0.0f );
+    vec3 edir = normalize((vec3)(p,1.0f));
+    vec3 wori = (vec3)(0.0f,0.0f,-2.0f);
+
+    float ao;
+    float t = jinteresct(wori,edir,cccc,&ao);
+    if(t<100.0f)
+    {
+#if 1
+        vec3 inter = wori + t*edir;
+        vec3 nor = calcNormal(inter,cccc);
+
+        float dif = .5f + .5f*dot( nor, (vec3)(0.57703f) );
+        ao = max( 1.0f-ao*0.005f, 0.0f);
+
+        color = (vec3)(1.0f,.9f,.5f)*dif*ao +  .5f*(vec3)(.6f,.7f,.8f)*ao;
+#else
+        color = (vec3)(0.5f,0.0f,0.0f);
+#endif
+    }
+    else
+    {
+        color = (vec3)(0.5f,0.51f,0.52f)+(vec3)(0.5f,0.47f,0.45f)*p.y;
+    }
+
+    vec4 gl_FragColor = (vec4)(color,1.0f);
+    OUTPUT;
+}
+
diff --git a/utests/kernels/compiler_julia_no_break.cl b/utests/kernels/compiler_julia_no_break.cl
new file mode 100644
index 0000000..5c357b1
--- /dev/null
+++ b/utests/kernels/compiler_julia_no_break.cl
@@ -0,0 +1,145 @@
+typedef float2 vec2;
+typedef float3 vec3;
+typedef float4 vec4;
+
+#define sin native_sin
+#define cos native_cos
+#define tan native_tan
+#define normalize fast_normalize
+#define length fast_length
+#define mod fmod
+#define time 1.f
+
+inline vec3 reflect(vec3 I, vec3 N) {
+  return I - 2.0f * dot(N, I) * N;
+}
+
+inline uint pack_fp4(float4 u4) {
+  uint u;
+  u = (((uint) u4.x)) |
+      (((uint) u4.y) << 8) |
+      (((uint) u4.z) << 16);
+  return u;
+}
+
+#define OUTPUT do {\
+  const vec4 final = 255.f * max(min(gl_FragColor, (vec4)(1.f)), (vec4)(0.f)); \
+  dst[get_global_id(0) + get_global_id(1) * w] = pack_fp4(final); \
+} while (0)
+
+inline __attribute__((always_inline))
+float jinteresct(vec3 rO, vec3 rD, vec4 c, float *ao)
+{
+    float mz2,md2,dist,t;
+    float res=1000.0f;
+    vec4 z,nz;
+    int update_ao = 1;
+    *ao = 0.0f;
+    t = 0.f;
+    for (int j = 0; j < 100; ++j)
+    {
+        if (update_ao) *ao += 1.0f;
+        vec3 p=rO+t*rD;
+
+        // calc distance
+        z=(vec4)(p,(c.y+c.x)*.3f);
+        md2=1.0f;
+        mz2=dot(z,z);
+
+        for(int i=0;i<9;i++)
+        {
+             // |dz|^2 -> 4*|dz|^2
+             //if (mz2 <= 4.0f)
+             {
+             md2*=4.0f*mz2;
+             // z -> z2 + c
+             nz.x=z.x*z.x-dot(z.yzw,z.yzw);
+             nz.yzw=2.0f*z.x*z.yzw;
+             z=nz+c;
+             mz2=dot(z,z);
+            }
+             if(mz2>4.0f)
+                 break;
+         }
+
+         dist=0.25f*sqrt(mz2/md2)*log(mz2);
+         if(dist<0.0005f)
+         {
+             res=t;
+             update_ao = 0;
+         }
+         t+= dist;
+    }
+
+    return res;
+}
+
+#if 1
+inline __attribute__((always_inline))
+vec3 calcNormal(vec3 p, vec4 c)
+{
+    vec4 nz,ndz,dz[4];
+
+    vec4 z=(vec4)(p,(c.y+c.x)*.3f);
+
+    dz[0]=(vec4)(1.0f,0.0f,0.0f,0.0f);
+    dz[1]=(vec4)(0.0f,1.0f,0.0f,0.0f);
+    dz[2]=(vec4)(0.0f,0.0f,1.0f,0.0f);
+  //dz[3]=(vec4)(0.0f,0.0f,0.0f,1.0f);
+
+    for(int i=0;i<9;i++)
+    {
+        vec4 mz = (vec4)(z.x,-z.y,-z.z,-z.w);
+        // derivative
+        dz[0]=(vec4)(dot(mz,dz[0]),z.x*dz[0].yzw+dz[0].x*z.yzw);
+        dz[1]=(vec4)(dot(mz,dz[1]),z.x*dz[1].yzw+dz[1].x*z.yzw);
+        dz[2]=(vec4)(dot(mz,dz[2]),z.x*dz[2].yzw+dz[2].x*z.yzw);
+        //dz[3]=(vec4)(dot(mz,dz[3]),z.x*dz[3].yzw+dz[3].x*z.yzw);
+
+        // z = z2 + c
+        nz.x=dot(z, mz);
+        nz.yzw=2.0f*z.x*z.yzw;
+        z=nz+c;
+
+        if(dot(z,z)>4.0f)
+            break;
+    }
+
+    return normalize((vec3)(dot(z,dz[0]),dot(z,dz[1]),dot(z,dz[2])));
+}
+#endif
+
+__kernel void compiler_julia_no_break(__global uint *dst, float resx, float resy, int w)
+{
+    vec2 gl_FragCoord = (vec2)(get_global_id(0), get_global_id(1));
+    vec2 p=-1.0f+2.0f*gl_FragCoord.xy/(vec2)(resx,resy);
+    vec3 color = (vec3)(0.0f);
+    vec4 cccc = (vec4)( .7f*cos(.5f*time), .7f*sin(.3f*time), .7f*cos(1.0f*time), 0.0f );
+    vec3 edir = normalize((vec3)(p,1.0f));
+    vec3 wori = (vec3)(0.0f,0.0f,-2.0f);
+
+    float ao;
+    float t = jinteresct(wori,edir,cccc,&ao);
+    if(t<100.0f)
+    {
+#if 1
+        vec3 inter = wori + t*edir;
+        vec3 nor = calcNormal(inter,cccc);
+
+        float dif = .5f + .5f*dot( nor, (vec3)(0.57703f) );
+        ao = max( 1.0f-ao*0.005f, 0.0f);
+
+        color = (vec3)(1.0f,.9f,.5f)*dif*ao +  .5f*(vec3)(.6f,.7f,.8f)*ao;
+#else
+        color = (vec3)(0.5f,0.0f,0.0f);
+#endif
+    }
+    else
+    {
+        color = (vec3)(0.5f,0.51f,0.52f)+(vec3)(0.5f,0.47f,0.45f)*p.y;
+    }
+
+    vec4 gl_FragColor = (vec4)(color,1.0f);
+    OUTPUT;
+}
+
diff --git a/utests/kernels/compiler_julia_no_break_ref.bmp b/utests/kernels/compiler_julia_no_break_ref.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..e17f666005a4fb2797cf84a14fca429674c9d659
GIT binary patch
literal 196662
zcmeFa2Y6h^m8L!W?;kg(NjtkcJDX<KGxj(tQVbx8oY4Udbj}TQPRNa%bIzH_07)={
zIg?_J5|t<_=V(b|%N`5=+q$0KUP__^Y1xkfKE?agty{P5#p$|Lr_TA#R}l#h{J}r|
zgW$gh`2SbI%s&$T|D!+nli(TugzG|HIR5K@@&~JFRRSwk0{`Zp{=sTmmB5OXz`y-x
z|7bO>N?^rG;NSi8|6?_+N?^rG;1B=#KVD6%5?HYk_ at jUEf3Bug39MKN{PDm1zgE+#
z1XipB{^Vc%->Yd=0xMPmfBLWgpVhP~ft4$PfAjzT>1tY)z)F?CzyG)Y-)dTwz>1Z?
zpZ&XkvYJ*Uuwo_fAO7&4uBKH9tXK*B$3OaKt7%mND^>#k>5u>UYFd at Rij}~h|H;2t
zO{)@Eu at d;tfBG+1)2akktOWkz-~X%Cv?_s>D}g`z*MG5^Rwb}fCGcPV?BA at WRSB$E
z3H;ap at NZYsssvW71peE9{CBHqRRSwk0{{I#{o!g_mB5OX!2kI3KUz(z5?HYk_{;zN
z$E#^o0xMPmfAtrCvYJ*Uuwo_fKmW_0uBKH9tXK(r<G=p<)wC*sl`Db&_GjN%O{)@E
zsS^0>|Nb9V)4fX|Ve^_~QPRD)v)aPfEP=oIAOCSR-J=9D-R`oHVHzpfzULmBTD|>i
zmcTdv@;|Mndyzof{zJQeyi5y)v)e=MSlfG=4<5~`YYdgFW_~v%@U6f4^VM`O5@<bf
zwsvwNyaj1Ww8UyF9~lWRT+RP(O5kt*=YL*Jzn%orrAcy8oGfY6#tn~}ii>F^u&|Tk
z_|v!L(gdMRXG`0!*ZAsPUylU7{f)m^O~1ATirShpk|VQ=iz;>>bPtZvPQu2AErt2p
z-u at wZaaw%&)by|2`09;cg9N_wjsLQmehmr8)03m)BDa71+2T7tY&>uz)Ph2<DxaE3
zPuxgJYV_Jr`D*5OQv%=p>;Jl%?jnKc^$%`&;f;!^>9H5z$~0<2HTN$si(=P1bDUbI
zEmTM*%c>u^dAn|M3;Bh&eptD<C;aMa{&!6R-}{^Ywwk_50wu#Ei+{H)TrHa0ZmMm}
z8yXc(H$40uMOt*AskUr<i%{a}8zMvhSEVPCQ7EO~`{rMgsn~N^sIYqcU6jB#|NHk=
z)0as=oUqYiH}CyyIV7L*#l1paEl;zTl~ztnShBPuPu&&@6BY7oS9U>Ttx6hCi8yw>
zIBq?enghp#3crI#jY%Vkk8l;{xC(sf2@(G4iqgIwg*ro=xXD$No1U~;9Jk?1Ut5!H
zk}K04#f8>9Ut0V|TfYBGtNrd5e*atlV>NxL1adpO+V(D?-gKV3+H>uhqOl38d3y(n
z7ItRYP5J!;d?3Xw4dM67(~}CjI<~&{Hia5>`q+)9vKm_}cI*wW^Sh8&t7SDavzyjF
znA_bWce&O-{9RK)e#gZpc(?8EeWDP>KEAwM($(I5;!K7pHd7Rv<*>vhM8`xttTC#6
zHC1`d4YnM2hA2*_mrLR|WVx)fue at b;X3Ioz>B*6z*mb`Pf8#It4nO$Yzg$gUlz_W9
z|G at IH&g~3cYCe6bde=VTbp0dWwfh`#5f3l@=(A7-GFfhG<IY_<WrgImD(T7PWlv9k
zU}7e`&TluLE{^8~EKW;dYtybzK1+(-kg)NQ_=tyDuxk_|Zy+!9dTLqHiRI<!#Mm7l
z{WLQzMxB|WQ%gfv at 5s0c{Jzq{{DvCJE5}Av3Q at Kz>yA3Vo2L(a`>$5h9TLdz>})xB
zbma2&k>_6zztnNzI;SS9!Q^#m<tb*PqG9KrP=&zOT~5Da;?~PbQ4EFn1 at b%EOBZ(J
z_V$PB{B|>=&%ajG(WWmcO^IHs$Ve&fYVSF5YWUK%hJ^*I$0iKjiII;fBypN-W5Mj=
zruC2LRT8ZtEk&H{D=V_OvMkv;wbQQDWH9&XO=^QlrBO*kf7Gsz|6Z#S_nkgV$<oi3
z73oQ(J)NPeznhr{zw<v=(;X6EFzh*ctajJZ9p&DRuIdBFtxj`MZ%@ymLp=u%&Aj$r
zs7~(qjNO&R>ENj|9E+OjswSrz4xjWiw}k5awlXR4o2-7<!{7fVop#~fPsVS*@l|h9
z)Y8a`K%N%k%5~*5*01@&w~YEsol+DXwPEk4%bud#ncJ_nF6~cAj*&=`Qc~ia`98Tc
zQ6)=CihOLtx`zj!e$iW;?=LOTYh^s5aoaXeQI0w@^{XEDTQ7g;yWdz%;S%ULdZK1_
zE+c7Ecwu-xBYAVnfx{gK59gE?gqN%H@)`M+;@B-$Z%|GP+kg1ej&oOCwYA~ZzW%(z
zq~oD_v$p%(WvsY&d4a0^$1>F!^+!&*i*iMA>siQ4lA}^2sTx_5)nRfsHd at LnFmTbs
zWhqexr&VK6W at e<x(vufne-|A|nVygwxu&SQOYgL4<f(J7zlST3$0^ejwQA{Ip8H$8
z^zirodNqYhK$VfKl*G-y^ah0yk9 at cL@=b4NcX$Q*Kc~`!2$eV{yxi`yPuzHlPk_QK
zhdCzV5i-5ko^jXJhFANV^O<rnPaJ*j<=)Fr=JXGJ)zeiLgTZQ&nGMk!9!ieiBua~y
zXtCpN;uA=V+rV9VMVd+ymp?X1p5eV}uwRv#N`B^z4~jb54cU5mMq1s}WR~5SnZgoy
zeQLT0&tQIanO-eTiQj1V+BmJ+vgNB@;I~!&$oKzdHH9RQo)YEC^VmIBO7P@%T)Ii7
zdf(B)`5k1UBG+@&SxpX~Jtbz{#I+|l4JCjO6 at A^=*;+~z;#iiGWQLx8F{iCHROf5X
z=xmmxgv|wG6Fk at 6)&Esb&&U)_z4ks=Q{y-3EV|;pzKIuJ7b-KVtE35{xDA|^wA8cY
zS^Lm;=3aWkmE)ABMAG5W`pWkl;%fKFGZu#>Gb2?gP2kT at iwQ0<H1=%f4!b)$COV>a
zVvDEHFHMRRTK*k5KKg at iuBMO#w!HY(<nyms?Z%i*k5QOaR+_1im(47YPfm#3yx~#S
zbcLPm{-PYcN;LK4)1e#5n9S;mkzutYmb at HAND>#56gTwD%ViUj;nlvjywdGf%0<%T
zNLgxhFr`F!OA3xHFT0BiG%88xHA=_EBi28X6dR#6Y05 at M7C-q+xD>PLQFXSt{^%LG
zI8L3OAW7Wx*n{70nw>6fZ+6yHSM>K}TlG3cTK at 2O)BeNF`wwF at NS8}$XJ)i|h12hJ
z=Xv;Qq)D5TB&jBYobScrvG4!cGI?8$EA;f=e&&I1J-V9yK>`l1jkVsP<>j{X*Gnd6
z+*K8VaN;*TDoIa?jd)m*8dW_#t(T`-v$Zp?z7sAwXP&2Z&t7bv6dH6HSy>vXT0Zp5
zOD%_vg;)D}^62ebKls$z+{WWd7x#u9y7bd!hICZ8%8_A(B%%HMbuOi)#QGZQCtvyb
zpOX-`Ia90XyY@`+wmmXMdd%jv87WZ(HRTy;v9q^cRET1P)(o0-GBgruJe0Be93Vgn
zYAY}kNl9u2%OVV_GI2uhvEw5bFXJ`{RsQW});##Pt4WXmUBVm41=65#ShE9#3biaG
z8KBNdF&i?K>58<diCeGW9;zJ~2wfF2x#dNpSD!e$yv%8~&9L{ApB7Kfp#KbBfBKG^
zztK~LO4fVzX=9cyJ!z9pE5lWdVupP_x4JC!+#MhMSffbe6g!Vps|t)wgf7KIuCtbx
zZ(8&Hw3HZ&-yP`dE1#S$937V=L>RT{EMs+<$ykGg`c|91c63OmNe|r~%H-Bn51qYG
zP**8Q+{`C1c;;;V#CZGeUDh0Ter+Y+Li6_Rp~}C-%wrFIdo_h5Fn;qnol?wc+@>}2
z?|vebr$nt)sL)&2xNE9LFI}Oq|McS}&2?mK?L9&rjw*31+QrDZ3*;Fa$uu514i;|W
z#WzEBe$yFuZH>{Q$#A-OP)gKeX)){2!-1jl^3udjnW at oOrMQ$NlW at ePm0w$7b!CO#
zDlRFmZ0Ekn^$!`muDq`9f}Wm*4?Y#HZhz}TcdiRWN7+DMX=}sC`HPhA`S_;>jZ~YN
z5^5nlQ!zZ)I5X|Z_o4;yF&<f7ZrQfg=*aR_l?QFAinQ>`zpeb*hrhF$1PN3O4xs#W
zE-eLyM*y^h#F8ONlt~iP(_(9OE@{j<%F!R{w~UhUjZKHDxqNo==>Hsn#ue6AwVpcP
zcjMXFH$Dv2`Hg0DMiuRY*crZZqi)+``_YrLZ+|rW>`UV>zBzRHx;a}fidhH9$DQwe
z^!wk8TK7QA`Ug!$WqD5rS|2w)`sf23V at 0XD{CrDsfH%M6Z4Cx_VO^yxC34 at 7KD)TQ
zEL_zo)5tK7+)-ILt(lzk6nHfm$v}xvq6}*3w%6Zr6z2G<%k>&5Qu at -nzRtpR4}W(x
zApxUNiE$%4OG{p7Gw=EPWkD>dG3!9fa5OnAt~_@^TZ_r4kR)yP<hrPkGci}Ob4jSF
z7RQolS(xLflc(Ya?L2?2_xiK*?|dv&_>CS*`g+phBc at +`1OG)}>+XoP58Uy%$h8k_
zSo4Eyr-kW&<#}0O4 at ORLYOG$9t`x^<GE?F<Jd~EONug6lu6r;!ZsQ%d3#UvX7<hFW
znOUEKMN}xvGOLgVV)@crN_x9>3XxtV#+oXZB;;2XE7PK#g*l8cOaT^)`b+Qn+6vb{
z^1aoB1a|*)xps1L=*(G9Q<L7J4ao%cRigs}w!W~V-CdYdHL=C0lVwN}diL+9PUDGl
z?H6v4VU~C2IJ6nbZQHkUT0PL)xOHpqm7CcA=im7x)Y at +-GjQQ*eq(Lz+`Of_rswjL
zJcV^f=vhh8>u^!24Jy6OtaoH5Wk{JLROtyAtTa}$-fF_opPCYD(q|?|2bCq_msJK8
zOa9b2EJOcW_t^I4`<nDbl$p`<7Xyto!d3b(8Jj2jj>@4^Z+QS6DKkA8$GTRV*|l$J
z_SxH69$UlA)WC_8e2k%*Uw>x9qu*amNB|r!6EwpV`QFp#LNZavQsfz_U>)0!p3r6{
zx9>lwl_grOx_zJglsau^ue6=JN(TEzWp7t$TjSN`WlnL89bI1Tzy563r6(BwL#_QL
zGMz_H4qUj>d-h`4+_v`PXPiBQZ6|;J{y{L0QfhK$JBkZ at bv60zZAE>3MFWGbre+ip
zg*Z+sP5`9jC@(E(ZImfxAU`Fa12};|s8muMVJXq;GSZX6Ut2DU%_}bg(qOk6^zszp
zk|)n)(lU?4hSv<wgQh5IsAl{J7Ughfq4{vtVAe1Nn2qxAnqPB1V$Ba$lRPb&Y2E3y
zcI?`j8oMDR5OI8jR*U+-$zWDbz5W3!+{4Sun)G;n`rV%{n;TkccJBuiM}56oQa3(g
z(nt%Y=0U;XDs^@B4Lo_P{p^+5H$MzDc;7Rij)$*4x#iiH7{F_`?Z~dJH+bE`Q_`i$
z^n7<kDc!zwbhKvc_NIM at +K!!WJ9VCr1nQv7*xgx5rGyWs at AwIWT9RK=o}MYrlq6#9
z0obg_NWln}8nYfJLin3A1<;MRzVtf7xKN&DQIlb15nk<%eDGPKn2gjY46w`{7L$?+
zDoqB~B#lyhN9C{WbmL<WtfrBRS6SJa4Vf*+PP>W=LIR<O=#4701z%+eh2>psAR!O^
zY}u$5bL!~m at waz$Uwt~5_gd>FCu~+-U~aK`ctD&K8JJ$6|AT*{|A!j9 at 0sRZd&Zx+
z9kp>yU~q8k`PXQ_@%Y)e&1+C#?1B8;mgchY at wy$m>GtSFUwk at xomQTj?R9X8B>>?7
zPM^(aH7PSwQF5g55z34dv_Zj>6}nv^P0*w#fbd}|oPFk&P>xR|ue?wrOAJ-JBeU(D
zk9n3#DZzSRF{_MP8IZZD=U;L9?8SJN&8j=<e?6xJL98ZRpY^k|ICl^Q>?I+AD5Qxx
zT_&nR&D11?{^DFB0>&<0uIz5(lo1|eB#6h>ljnRT`E9%RXw&0Mw(eq-!@gI!WAEV2
z+xept^KX9?YViJMq$yFI$4}8_Ej|3`DFE2OtrKH5py#_P%TaY0^IMLb?7sZu7oQsu
zy;)*5Qyyrl1F`e{Z~fKAbq`?y7&?32>9?btgW;DYVY-jNgP^zQm<j<%huXmxkdYF}
zVm7z5Kqxe*#AKKULv_BG0Wk<Z1eY0~0QG64=gb91fghiXKae9z*!aa;e&Z$U9@@0x
zQ%PShsFi_}r_$mgLedb$Z`7*O832{Cq`^zqD9>wZC>kEc0opjVg;P&=AIFjBUhTW_
zoWHDa at bPnv6Jw>@c4;z_+<ET0{YM9%e4bV3?CbA^+PsgM)<Z|jhKGW$(b`rzzD1lV
zmKwCl37hp!tFx*yzpuYyetYAQlT=8MNeDv=e{}rDM^fT8ic(`S0TKBKl0lXh8yC09
zYBOwH`ygX at L1za(TzWow4oRy?*BO+20^lfwcE~U+0CMhL+AEZ_Y}@85^tn9Q6E|*#
zKkJS>3t`|TnJH0<^uz-{S-!lyOa)wHm3>`GN&Fp^zlPJz>mOd>iFthY$3Jy?ZA+j0
zG~4eANrR!!U{uMHBh6Xboj+Q}Wm&ytyz%%sX>wH0z9p)8yLw&yBjYc=g^`nyaOU}!
z&n+*PZrg1($kmcK`rg13&t>PhM{nK=wRs;iSbK!la at yM)4<0AKe(l4AD;h0YtH)~3
zaoM~!Z2q7$(d3QU1}enGZc2#RAQC0WGDUKgOsP|#CIN5~#Yf=AGFuIj43WcSiH+Nw
zm8C82>&<psm9k_s8XRXvlUk_|OA<DM_NS?ZSKhMQjjWr at dKtJl;Z02XjH>=_J|E%q
zOOJuB&b*2MZ^aa#lc(4nCX3rf&=8I2GE*ce(O-JkZ>}(M!y_v^?fUS?%*EMRnk&o8
z?FSBpq`^wfWYJ=>BeIXevW}MK#l at WBJXJ=D!)c-fTy*}#+~lk8^;~%hRKRHrK8Fv}
z|7{KvHjS1OXZx-_&B`>?;C;-br^ZaZ{1y#Lq$$3x9t|$v!W_&gD!E9l5D}B5)ymM^
z3??;!UHMIQ<pX`*(n7g79#dqROhiP0(c`oR3f$FI-ugOyULIdJ%lves4*euum4Qh=
zJ~0Mhv)QUwNaFbfm>*#S$PmY4#wYBTN7HpdR#<FCj6cGkR#08a@&OaU-TzX(Qe=0U
z`KC~WFeRlWY{tFPzH<lW1?&d(b8~mU{r+B!ig<K|C$(Myrg8E0cM><R35f!83PZoq
ztPY}@2m2{EY9zy#uKEjodR at kWPnWZsJ3MV2f!S at -ufLCx)0^kwcW>LaK>v4ovYTh8
zF|+hud2;T}4?=C;$4sEROK44SPcY^ewlucyKd|T1<vl-Ho`3U$t?z!a^x5*<tM4>z
z-_9jRuG^HYC#V at rf>tFdXl}?I9uI$?OmRH+A3mA7gC{WFmUXo)zWH8aYC=v;rCy(z
znHt4ffE)P)SOwq$Zr!^Nk74b|Adz1{LAJg8y3iWqfH&U*UNpS%JMuW`a?1*Xz@(H&
zvp!Rsk+k<`%hX{CU^NlwY`dfWZ}c>J<C+zo3R)URE?!~qm&-*VQ6!}%;N>JS`gI*T
zLOF9p)3$9oSt2U#)Durxn_4|BEhY1d)31NfcIJ}BkU<^1qQ&z&7(&M`TxvgavHQ}E
zg?By<wRyiX)l*Y>Q}eWDvRj<_Uc#)T8fA7_siU!p!o;B8YJ(^#N|G8Y6~(7Z5~Sip
zu_!(%F{<<MQAeKF>UEU%cA?$f at jjU1v3F63^O_ at QAFVwrGB%P&sO6~uhp_yk3Stn(
zGz7sZbqcCVsB2V-F#HOw8I+=~rM;|xgwwA&@(88?P!r4r)X9)0>CGAdgepm_FObW!
z>#J_O at 8tm9S8~d)F6}>e$!L&kr13emRUuKxk~iZXWsL^u!R(8#Q;xb at zjVkz*t=E=
z`XxQf;;gSPp4&eC+WYV%=rWS1W7eh@&1_{r3-<rh7uz4dH2>BQ;}fDn&EA(x&D;X*
z0JHBpcEZxwBEdzcR;9$O$9{tA7T>fYGgTc_fikIs{T5u1)}T~tGx3GVWGT_n5so|$
zf$(TbVC0l~mGD*ooLa%B8I_#YjSXWBCS%UasT>=#paqFz(bz$aTHV>1;y9K?1XR-1
znHo$OGc{77k-Z=PWY>Ei3HiGmm;UZ&*#G&gSP18r7Zo?wn5 at QNK&3REsS_CCUGBZV
zmtr at sUCAkkODC+avSjZ^pAKHU8WIJ+3qLwb0HWQ|C at 2TM$gzHO$YRL!^p8ZwY;x4p
z6iv at hzxE!#eqLDtS37nr=8aEb8!u~XYCC<Qdg<`YtMA6gZw at tk@0qH}NmMM2He>Ol
zzqi&k&>&_RxQ4Qv!MVU!9>}Y!hLyLpucvx^3}Ocqm9C>Fx{sYCXuW!J3jC72Fc;dZ
z{<9ZhYcZKMrG339e!`341j$H^CSTdp!4X>xM{`l3zoJ;Dl3*sq_GPwcP`4N#_zH+>
ztm^G#?a+VZ2#x at u5uC#L6#;CU!s%BXA<)npl&qjx4!3UKiq5u&=op=hMTDoajBoR+
zZoI$cagpm*ayt0gGQ%~&EIZ%+AS4Hq%gS;u%Vt19&8Y|k%Qvk7(nDt8*fDReBQU#N
zq}SOiD{@CBre1v)rFYlcA2=MQ!4oH7K{To*t-E%k|Jw`vQ!l=uwdg}F-+QKdc21>}
z at A$jrjBE?IVpRI3#U1Sj4`Z0^zww;Veq`i&u{>Spbr+0`QDUyCbN3CAVSAd;3pDK7
zqcCcTSTq=wtZEZCJ)$ycS-s-y!*G;s)loC2I9I6Ouwz%Y!;F2BPe7{>**sP}BYXmK
zrL?4}R*@EC(aXv^nuW>+m1x_`ZxHqvde)a_n&)O1?O8sc1+jw2EzMVErV)mQPQ_P7
z7}1yBb>9o)qt>tF#A>dry}5d at H$#>hl7m7c*DA&6x{OW)`caOSS~WI8X6}VonkL7~
zx9!GHU at a?!QDNexx3C>GPHw5{?U;G$8GBnNqu=ziFEk%JJ@)kN+1K99^0`7S-(yB+
z(x{7y3BaKpLRz-H_esg{@cjEf&KceknAu7p26K at l85e-RrI}Nu$L;UwFW<h~-9G{o
z#TTCrLeK25(3unCHz#a*gl_ at O90mYt`iuM^x`S<Qcr-<)%dM%<se at Ahah<RLnX<I3
zg40u at 89I=X%WGAoMWrQ0CC5eNSCxn~%9`=fFFx*$lERvDAVjPn49YZ%K|cG++rVzU
z1s+cM7TWggxugDX;xr*@!%9vy6I=REoxVm?Y-v$Q4rmUn2!OjQrSWaMcT>({4Lm0q
zpzNJHcU0}#M?SkGkeQh_^302#d=KCUmVtrVa${BP$k}r}hmX|lKQj5k>+^5_uxxZR
z)bc%Ma+(^UP at s{j at iFZ4lP|sLZfULEy}xeX5jG%*-Sn73lW8w5Y}gZgJ&o5>Ff>xT
z_h7s at t!{U)<g1d|nFZ8=fUnr~4+4T>V6UB?LIp~aXYe^-eu<2DlzX%7Mv&5IhOCL~
zUOOlVMh~N2&h!UI*1?}HS8rV;RtUG6H4CCd2@|U&*Y{Nqr5vXN?gl<6pwvP&?6-JQ
z at P(m1fw{WNz4z@>bVR~RO=@ZU{Oj)#1H$mtvS%qIhoJJGrG>zOSg`TyPg0Isr}Mx;
zP+oX{P=RXp9H1~OP?+1?)PMD6P=npE!|ln6O^Tbl{W8DindN0h-N_f<Ac4#bwS12m
zHHO9L2%?Nj`uik0b#6yT-OjzO$IjFrJRTppR%_P!>uYD;{E#{s22H`>aNXX6EvGJc
z8|r`Ib6a=sAt*jAIl5}F5AY`=JYKvFk9 at DVsWxiE!;$MBT>H?s{pCgUb7&t>_)&+L
zESLf`nW;fFMiQ at +C0H$L9t3L^t099T4LKx6uS*vvl=Sz1=?e^>JqKzCg^C#jC=rU&
z;)g#Ted>8%ffve%-0Jc#z3cuKCdO=Bv5EeV$KU36G71s%9+Cq;M{ul@#)E9%^P|rw
zXH7Tt%xzX@#JU2LuUk4qAu+-=bMu{NE)eM5d*n#AS(z-8 at TFh{U3}*whQaaYUZ&dk
zvoD5PzL$)(FmL*mcbJ<>`}@RlslTbAa(2G`#N+k*52F|uY^K7lPTIG%cN4=4lC5^<
zUIH+s(quzk?k{}qmS<nUysuKr at E~KEK`rN&o&yK4YmsR<a>`m!f%z1a8p=6|L4#!i
zaS=Em80v#18VP!f at F1|zFpF07cFHw!aCf-3SZjajJJ at Xcpq)(=qgSMQavapLxUwxq
zd3i at m-{Tid7R{I5bsr0pVmGbWM4xBwt{)%S{_0yHA;6qKJP2kV;xb_Epj>CsyL~o{
zoW6Xw*{m+ADQnn&gmSh$YCUkc_2?;J!y^|i>E+2{orXaV+oOMQwEg($!D~;YiV~+@
zdNb7cy<|)PGd(u!mdP58qcni#4 at qgm{=>9sv|CDthsh}1ZjPSD#_DZ5>h>Jiym@`w
z at iV{VLkVyL(nIAyLp4^->ao$_n5>pCyKP$k at P@SyamktMV(>>NVrE1IV#;9k+PP~d
z9T-fwN)(+Kw~=Z)-g+M}NxCu}A935Eqm&T#Zp_vPBa#32{)Uy+?leI$ME at 5qsg;tF
z)&^gpmtZ1nZg<qb at 2AOen^$bI;|$8y*lapqz6T*hM?4}`Wm<{LQ;Mw)GruVvn{oi~
z41;9K+ZwZM#zTL<T)*!Sr}Y2s)8`uZ9S+o0f*s8-D at Z4PQkKXM?d>1#yL6-f@(po%
z>XzqUrSd(dq{Qf+^H%^Q&<^lUf>vs`?`S at BEO%s!(Ppjy<b3EPUmt8#Sp|9J({m{N
z)a<)>?U#J+gWvlmHHnVQZLFuygL$*Lvl!T+^aQ077qc-oW at F^$bw#a>Lfo!emdF%|
zG_aRiotDqlm^7RtL|Mi~Jd_x_5r{YoB3i(>wB`0|-N#OBdG2M5OVu+o;jc7w`V2#m
zP9+w;pe&Put2=+ZTs_bO<07A7=f3^n_3wK=B|dV+rs9s)hKaG3xtW~$ny7UT0u at FS
zzUF4o%Mh5b)~g)o4GJe_eMM(08Mn`xTar6`>U8zuE>2nh4qSPne(wQ(cN{u+ZKPRQ
zjQ?2Cvl?1 at FF!GK<5>tW2X8zRY~<b&nt#*w#o=pD5=Q8*C at UKqZ$5COWNJ=l)|QWs
zHXS_;WXBi?B*t$dc)xDf64uw!(J at Ow-Y@gqsLgAIYPLKtQvkv8Xof6uy#?NcbV*Ji
z$J5 at KJ2>oW>!4azHp4?K$z)PG{0>&Zgh|qeS(@M(VRB4}S{uLd;lk=t#6o%5&=77!
zZX7swks}DY)RZ{kal$btkSnM_+|D>dAwD{wq&VEk^9h7kzVG?egs7F7=;2+54v$~C
zj`64S&{44{L68H=kHw-fo6v<5TX!r{NK`n+5Hf=E_r~&aU}Tijtdip4C!S at bb=VCs
z0v-7AXOU46*zur-kZBcN=dQ3djH{tx=*e3`%lC2|dg8glw&vhF*ewO05B_v={J9{v
zt9I<AT%Kj}4R6V5YpdD5vu5XBSw>pV`K!Oo6BAN_`9wYN-M at L{fp3%1>*YDEEx7Pl
z{-CrI=8R?{wDZ7szCp$fyeA`x07jtx^nV~C0OxW`^7tYEfe;ztt|&=K2rdegX|QIM
zC5w{-9j!)_3Y>rQuHCeN+X7gT&?ZL#4hPXF9)!Z$a!Tf3e;1{Q<$%j)n|k^_NH6rP
zFJ at Sxugt`Fwd2E2!J at Oaop|OpLU6RSaSSegZ3b8ohy at -#cOfX8q^OqpSu$-4a~_|S
zjK8&&qd8F2f8_}}8<PTqfBUwD%~(p&3e3v#g~gVmr~0ow?eFXkws6m>dFL*n5m$Lh
z>Bwlqp8cYv$o!V3lDX}aE3!<6f_!t1m#rr&7lI|d7q6rF{|e8Qrp89C-yE at qkjV^b
zVp)3=N`8J_6}FxJqsLg($0x_7W=K*M8G*JYdOrOh at 375fVJjS%6@}p6=IP1Y;vBvQ
zwI-vWx&(c4)0*!^Z+N(L`yQLmj>)M1@$)i`oVN;wUY3^%uQzf12~b0Xh7pfEf9nOX
zRg_;~wN>EdH{$2$Slah1{2{-hs6|OJD>I?xW?3|@LO*jZ44;*|_8|xOZ!t&PT^6{Z
z%qHc+t8Y<=dyD8WGD9a$8WpKzfZTH|=;~}cdJ-(C-Kyi%s7#9!rMUfeCjE-V-Bnw6
zSZeBX2Zp$Gj|ux>aaRY8VBySbZLXeMaJP4PD@$ize}CxaZOSuEdQEXzVgEqI+(P}n
z!}YuNCMQLI=|j_E*DEs9Km-}BMi#tAn at MMaolqi4i2((X5WS9BAQ<(j6yf_uv1bsb
z9hLx at S>|-TR_P3$VisexXVHq4m>n=tfiQV7Ul_EqY_ke*1&_dx)U$72a0#H1vVekv
z0+E6sVu_L8+eah7HbDLhF9~E6hf7eW(xwA1q%imn@)TBQRih)|?u2T;iK93<c4ekL
zAARb{bprGnJ$GIgC=rCfwpN<VWQQl4AD7K6 at WQKga`*~bckQCW)KkwkPfw639v$cC
zt*x$I+zITTkAl;=XP at WjEAV7nRK>GfYj!QUdj at ib#wfhUR6aB)wBQI71p50cX6G at d
zv>!U!eDEmc$*Bn{m(x{KRXQ<UIyGbVx!8~Rjwi~bNfwvYT^3;LuHxRFim|ck>6zMv
zt at Yb?)NS2fH9Z5*p|_^W=(47Xlgj%07G8QCD84}_qxZr|0z at smL4uvt>50MaYRGiu
zx`|$g-Voy_WBAfXKW1MHeU at G(O{4>twbU0kR^t?dM7?}`3!XLTwbK(evU?^C5?Pul
zLqCe;^TFf5$U`H*NGO?p;WfSm1`{IMmVUe({`C8tPl*$+$i%G8=mcVO at c8kN1cG}v
zs3Z=L6^D*5kV83vfmMB7Jx7j_hx55>_f9f3J9cxdoS7?|n&DT*^3N%)arEZ7L9^rx
zjn^(60w(9`8Km$YQ*K=qEx_mCtFI;05hN!an3!LoS(#3qoETZqKTtS4T0FOiI~a8+
z^hCJLEq<4`rZUjmQ#mzVzhhVPepnz*4L$V&b(pZ6y+fhOWJ)Ke+YcX0jo%myX3tDv
zAu#joZNBL6Iyvz9$WsY(MiGMS0z at 1H5x7N&{Ic8iC5_br>59vfWzAA!5KBwkOrSkn
zxT9BY04%W-<{1nM>}(x}k1|uVA2~r+$5P6IYyS32d~w3FglI}u!6og@;ZMK6c}Z&g
z%1rEUxb2lUFxvMWI)nt)Kl%fXB_pE{bi>raatw}+pkxv@){PELK6Q&clm&ywj*@9R
zd6r}Sp8dsJrda5)=;JiYnEB9mzCmc%%*|&^)pb>S4%$2W5|d)MbT28dqr+WNNDCI9
zE3dshtGYJ7xpCr!H at Z%r7n&vP*HK-a)6?hc>GSvW35A3}Vw{J at O`%H1FP2?Zo!2)|
zwQXnL6VD43Vq-U{95(V9ZV$)A#OSE?4-yx={-JMw|66}aUq$l|TEK>f+P7~D?vlD`
zjc_B!`k86N=WIV<IFS`_xb&3hlBODjR!|9pa1M2pDk%{|G*UCvpCOkJu*QZmgpPu$
z!omQWNFq*L`0yt%v_pr8zW{qFj$pPPYn&KoMh-qJISQgtK0tq2krB?ldlTbV-7ZZ_
zSedC~-~R5UrK#&rj@^8&a_NX51hiRr%dtE&zgG|T1q+iS>C)gC07L4v8Cx!1q7c{^
z$2$7|<P2O`yWV=AQ at jJ4*L>fslZ{`zq{=S{%<q68NC8Uo-Xu(T4xby1ILnH2ySkuf
zVW$a*9fW2x3|dionzON4nZxVJ{N;g?j at GK-K{lIUa|%#N)uY43?aelKHeHB_ezb1f
z6YDpuQMg>Rz*i8x{vmkX*~>C^!$UBFMy>q;%89cmH_%YU+LPE%COCL4dJpU;zF^(M
z-w~c`F{@FK81RXmN2MVg1~U;Q*(L=OflvqS#Zgv5vl4ka)-={u(B~4K5G0PMtt9 at D
zy=j_GUEq~G_4PKpA-Dtp3q*v4PDTs%Tn{TL0winZiAqoiZQl1|x+rl4CYH1W_Rhcf
z8jD|;1I1bu78`;Dkv|q8OO^)X2EiamMkb1Nxq}M<)En%gv(G$7A=plif$<4QPEdHT
z3+XeGfIvsDd%&Pb9Xo%)P+3g{Lv_8kyO#`!DA!DNrd%NrPJj6$fHx{DbxKcdHEY%K
zk&&v|xq)j>2`$8nQq(>laqfZErrODg<{dlRmi7?{Ngy*u-L50YdrqA0JAH2O!sUUp
z7x?7M`+9(O3t{Z6G3n}Y8y`uETALEPAtf$?1kHQw=EoqH0Qm+olRY2v$_m?$oeK6z
zaYAy;x($zfC*rXmFzjQTVZevU$5Y_LS%99;sl#F1_wlE~yWzb>9U@{h2nVv6VgAAL
zi3`k<t;cXmo$84#loKK?PKoxgK?YL;EjUd~%0dgQg;`L`<We{#gp&Jyl!@7uV8tb1
zC+ at ysSV~xV@#i}#D>$m;X~>^tFa9sALr_yv$Qq3<O@<$ldBLoake4}K96c?qRZB-e
zJ9q8gr4dID9y>-~0{2xnGH7k-paM3TqN%xHeQ{DyL(bAeDkz-(l1FqNXLAdc&3-qV
z(d0GOgQ>v&6T01EH|5n;!d!}Xta1AybXd#|!JvcO97ql;x9<wo3}q&7zqaM6=g?u;
zmW~doQiwT%nuZYq_-Lj|1_fM9+-6`84AB_DQ1G%mb|M^;gItJg`4|!L==Z%ve%K%x
z at QwNmJOaU>7=waI6TK+(ATn5nvyE~v(vZr5GKEl%y#VkRVA81_AA<<a;&rMGYUslB
z$}}h at XaVrgrR8Oz5%P$=ZfvBYw=2Ba`<Ty=B(K1P*$0$YPGyPHWnTBtcLWI#OG4BJ
zF(A0(VS>WiLpcg+K}8Xn%C1&;!pmCg$tyhGG*KcQOj%F_TBd#1E~6 at K>e>z9j#)<e
z(8*J-?g6T40;LdAks(2tgUOLVE%GrUOzFRr*z=nj<XQ!lvy1Z4lbd!g6%P&dUbrUQ
zuG40e_IB6J&eqJ#)GzM9;{Z_ula#+Czp$aYxV16R(g1{m-O32#2hK#?E`dC_Gt$$O
zGgav at pTNlm&L at LSz7#~vB*DxNs4uH9UtzT*Mz2TrW`&De76T~}Z5Z}(1wy4;JTh9?
zSc`uoXd_ZfSps9#Wc7*}U#ApJ-MAV0>-cIaI+}skGUJ#XS*Tt_je#%47E0_G8%mBn
z`3!R+Wb8JpzJ6?&6*rCGDHd7)L0wo=R@&agq^!jx`^yRKSE`mNNm+pj*Cb$u%EA7^
z>XN{gDM12d1O5DbF25t_*|8gUfA}NHapgd6KqkwOnO|Ob=qJnMRXMr7wsy7yCJ$>t
z&!NM1s}>a~H8Ij(=-u(|N3Px>F6k?4f#{IY78L`PG}}yiUFPPs59qRu6#g=)xTmXr
z?|zh at jP&H9?#|-D!HUUg;YPNYWV^A- at p1TU8Gg(Ax?8qyXH%7`k)gt-y1bflQbBzc
z+Ykp at 8%w*|2}l9LJ$mJO&*7s*&Gp3fV}yb1x_D%)WMX>i*2_#KpR-BG(?#)xQ}bq*
zm9du&x%BZ*_`6U7LHcD%6D4VJu%;6Yfi(ce5~AiYmpO8rQ1<|VLv&qxb{%4urO*Gs
zoFczjmyR0G#8=$emIY)^!v_?}CxEw$MG8{@H6`Mp2La<J#y9*3piSnUyG^-0-^cVy
zm_YBb6O;>W-ru8Kn!3^wS_)o!x7Rv+`ZPMK at aM;Fe57`Mfv^iOpUeX89OtR!We3y;
zdS(0KHtKl&_Tq-h!J|jX8%j#qGbnFl3;B|k23XVm`EHFkhP80R_{i|t^Fo`E(Ho0r
z7G$anTT=^MH)fmBXi~;UKE^~KRQQF*%I&+U0}lh<uGWJ`3%a`4#*~t5kF9)U7_<Ys
zOV>|L(!E*X=2n(8%uK^&ar__tC~7h#F=%JVQs8(b63tmwLO4Lj{sTS7PN07G96L!*
zhK-78PIwsx0hY;7V|nUoSsbC{m-Y9KJbqS}k*M{$!7!k!U{j4;|1g?A<9~3haGE`Z
zKBf<oT8!uniWDZnl%!}HM0XlIc08vfk4Hlsq|Y{jsbCL5v>=utSR0DBO!6%h_V$W0
zC0JQm0;7TwK0^z_`!F3;cC|rdvGa#N5lZgwQIVdu(o$}3KZ7JgliQm;arL_J=VPI3
z*trL#i1D8v5rP_1T_cJC$d-orIqLA^lE68Tw>C8SyLyUdx05e#Z<@INB)Ew9h=*~0
z;RW0I?ngqKQSs45Guv?VySw^8)Wao(^$-1-i9o1u_ah3k-shnX^qUo1CII}GZJFfM
z;>;@U at 8eUd9vuOY%&r`5yLMrrg6+0?W_I$`cSFt6ljRvHXdTX?yaF7 at lan2XkB#4Y
zMXZoD96X*NP6ag~R3^qBa1L8TatkFacsD%yJvt-?0c<s8ZH+8TLF1H8&ta|y at Ftc9
zX$;j6;SvjD)$<u*ZY`)P#;kx!S>4wu%g)A|9MqlC)B2Ac$JE2xDW|d&W>LLC0csSA
zY1S9T?JbytsFNm2C~m06 at _^^DsJ1+>^ye>D+ER~A$!s at y3;n{Y-ru8ACR%~1>)@fr
z$#E98*O!<1^8vqQ=v83YpzcBc2YC)7EA-Cz$iQ<F0!bY_zup|XP~XwsZ7C at c<c5or
zm at l(h4Dn7;U4_5ELp#DHyqjd$NDDYLTpz^DvVvwbChA<MaQ7pt&f0y4>1n>2Dt~hm
zA-&Xx(!|%)h_%OCTEO^;<5lkQSiBD60^kLje(l{*n|SW at Mx`^~hXs{wNqf(nTX^s9
z3{|z-Y-7*G>tH?=CT*xP8Hq-zb2%c{Jp^zL1^_~dF<=5qrf*}M_vX7{CZSs1<a|y;
z9pPpOiq21m2M$3UlSzdF!xw?VgRKmM>c)sQ3<$y_AP2MOx*-z-zXt)4LYB-FP*7iu
zR=@LypAO%8jcO*Xl<|QjFt>wz5N at Q9)Aq&f`88#I$Bqky_w$$`CjNirBxX|7Q8*9#
zPn=x1{j%_fWBtoaizc!I>Ow4g%;_M$yn|!x_?cT)(0%AI)rL==bUF-VWEzFLchFW{
zE!>N{bLTrhgcOK9=CD`b0BYO0Q at 9iv9g&z2Sv<DIH#mmh6E-<^)<%EGc4rF}?tX0C
zxm)jX1_%F%NmpeBfmFDJplB=W?FMqdR~fP4(fq+-L$)EmxuIfYgm8PIK~dr+Mpzh8
za%w87#>OB&Aq<~OhCl#&BXI=Dndu2}n?g?~yakwkT;$r6)P&gRh*X*A;UD}hS22M?
zLxOrwmxde+^*(e9n}B<Zau5^>61D>LA7(d{7EW2lV)n6>1OOB<dwTr#p8fm0xlXNK
zj)$UoaYwe-&J=(_0LwqCa at qt$7qj6ZT)iy2;LgH2hrwBR7V}PiMG=B!e<ik(552(s
z%BV6WD=M)oT$V{W_~b3L6pYov-!4~(3FTnq0r_KPTN9<IX=chlGJ#vCc6ea;{3WW*
zJ$nn|Cz-60lE%X)Vcit&wdiE$mzN7GijpJOFaV+s83RSarA((2OlHO0HqXE)fs;6K
zFcnIYB5hu~P~q-Jb{!2&&H`Pqmjt{`jZ{|1lJe at R7;Lw`@t)e}1xUuGLjLM<Hvb}8
zP-u<4$yj4Lay_7qaR-b&`E0x>xoBc0!>H33RgHW1XWFbiS8h at n3OH!2h__<1R1^%<
zBuLnxm at oj1^VpSHMvGBF{|60=LXs&>!k9yBOPVxAco3E)7QaLaKzqyfPd3<uv{I}<
z*!;18;ZQa>vf?+d!M$EXOsGy)J3U?2+lAV1c4ZUDMo<7#0BF$QHcXg><r2Dm)AS_Y
z6w}R?o6iYPApjX_CPpE4Q)Pe>3h(2Qi0+k^Kr><hgo_@}4u3m533{6;zoCYa2gVPA
z+<~BUEiEy~Lw*jW`F1*+T)OAOAJz1AlELK)B~<mkqk`PLISxf?<ka;i;8LUiqgL6f
zs)S3rvPz<9YIpCmws#x!nGlC!nWTR at a$G`%Uw8z)fab$kD);4J?L={^9vk5<pbLc7
z77Pp$!iMI9*<WZ1LK4E#JtYMdLxY4|&AsuyOs_HK`jf>eqSQEi1i^@PrC1ujfw;xS
z`FR#NaQcJZ3zFZaM0+brhp#_1^ZNVq at BL`t<_kf3L(Ent6+J&4TfHHZ&@&bky1YCz
zhPtT<yd?C0HhX1zBUU18|3MeUBM?Ns%`ajiPEFj*AcN_wqPvYZWb%SX&Q at AX%r&N9
zzCK<9LnxPePCdT(+S{yrF+Ky3ApT4Ei`otzftr#Li7(w-oF^3C$D>A(zM_&Sar6A`
zm+9dspS6R%{Ou{xYjHC{gu-YB=_T91G222-kk!!4nvUTeeV%F-lcN9dAu?H|C3wDM
zHrvLC$B5TM;Q<MTmj{$DI4(G%F)9iojf>t;GCJ0L^pwG(MLotznpahdv&oh36)N22
zXmn;PvW)hkAgaG=aW{Zt!iwAXE_Gjeg1e0Qd4+xbdXqZ0p|)~tbo$kIDP*T2Hvjck
zmex#8U_uuf$90F{1#2gPROLOL>`GR#>p<|5QZ#(&8n#H#Zq>W at 3zhFUn*1IR4n|!D
z12WSV=1^jJ=!dDX>y at _b^1*(#0u1(lwFIMqyU@>Hhq;E&0U`*R%IWNq%B8@<tNXi9
zW3mhKAXMiwarm8Bfgp~~6vZ(GunMNKue_M?pAQERHIoQ&WCwo|6g#Q9zZ*^=Na0#`
z>=a7w<B=uM%1O{;X8YX?CM>T2#+cc=St&~w#ew_9`hhFQljr7$zjEf;=M}m6j8_D7
z(Es^CnHNURJWl<hiD^?ozTE9*!3Z!0I}$cVR3mZ1CL&+9T)m#t(J6>j at 3upU({}2D
zr#K%*eb#y`tLguqqTF97bN1si6cxFuDu`iZ_dV>B-A9hGy&X47l|kx$e`lAwq=3P{
z|NLbN0hqzoo?BC1H#0MQ8JMMvkgMPTn;JFu;%g}x()_^@K7rwjSGeRY3&4Naa{7{^
zqzDi-C0~^$Z#;?l9YYXyA*c?8YGq?%qU7iYzw-?=e-^yJVnIYRIMa1mtMWMz3b$$f
zBhWLdvrUCn#lYw2*p7;FZnyiL==|1PkInC5dIf{Q$_N%Lw%911n6}#tW}}k+kIe^E
zt?)QzRiLDJE7(ErtKRe1F4w6tR!%DJ?KSya?0C+AHgN1XOm5-~v6ej`RO#&pk1+DX
zWQ7aN;kN90{}Z%g`16^*k&n}5K~0^!dX0R|(qZ~PE?}+CTiROB$WPxRG!p(;DsO%9
z)q=i$L8RWs1`LVqr!QdEK#OLhjk3;GesMr$zfk6Vm!BktQSY+nP0SgxbX|v!)-LW6
z?$Wv)RTC4?K`{8&&CgRvgb8d>Io0L(f{ES at sy8W-6Hh)(fLma0JIls~*%_+gZ0gv5
zFg|Ksme-Mz8kd|9`3qlz9W4<^QEdf5(2W0~`mBJUjAKl|{=>Y9(ZF9?kSR;SMab|n
z{lra1?}XTh6qy8bD2bV|>&nx3UKrxxQS^0mTD^9L7c6Xi4p2?fGJAFdy2F3Xq{A&x
ztqPAr$hK at P#4p4nhhE@*W%TOI6_qNc=W4f%GxD2MqQgI1uAbj!cH2 at CqsE?oflVKR
z5{8H-&&8O}FU6K9Cbb0lpa5gKoPYLtK~@<5$q at g`a7R;kMRi2#Wu##1z>i4;I#&}D
zq5?xf7Koa?hZy1r6@)tub}6(G992R)cR3mh3$pTaRd%a0kl(U%C$U|yy$SW56{W7m
zCJ5`GgJ9<rU}-vof+4+RU;uz+QDg1)w|_`Y^p=@hFK&$5m{nX<)Y1U<o<gio+u#2Y
zBt90m^)62jU2?iDK>djV1`7ccEmSUKu>8|kF%!X$NB;-D6ZG~fQnB6#>dL7T6Y&To
ztbcP$@;TkK_5tXl5d|Xvx=>IB0uI5RGU8aSV%p_#mTWC%Ra`TSQNmLQsm1}}uPSFI
zYMPrB3h&pEQEBC*xTtl&eX(b<s)fdO^4g8$sI_cFu2qTQ0<z-AVf>e;vI_$)R6Mp>
zu57wA@<GXgk!;6nZ;^-LuyW5qxlXBayDa()t3{PANz_W?KuY+Fe5eX|si>xPSSw~1
z1li*J3dYo=C)Q7Hq5tRCRtV*HIaci0tF~F3#le*<Y;Qeh&I^?@v`Thtfi2u$Q`xY%
zlR|t{?6Sn_8>*1$=U=7-BK_*&L2-ttU~;Z$VV>YMmf?Dz8*ZzGcR!iF{mSSQ&)ntF
z;g{I`5(q?TU-#MNW#+i>OXTtV0?|QY*e&V*e1>TI1O;%kWvPYA3>}z{pbi7 at PYEk-
zK1SMvYl1Dt*k6eWQNThFbU?@eb0vldh8>m+LJQcA2vcIIg~yqRMku^rN23-R;1!W@
zyI|yIhlRzrKVYL4oVhr&z`9uTyx66gwS$}kd2VL&qPj|CA{WP5eNM2Q#DfGuT)8fW
z`jD)&E(cb0OyULQMR4cp(&G&l9U1~1reb=QYL2QZLLlo89E*vLz^CuZap2i(-M)?f
zU({3^YUeH)jX`PiIc8se6U87 at jbYtYU+)a$!DMc$tO#O~qu2EuIXdz5E$Z|hJ~DXv
zaiMb6&;VPKu}p40aTa1CNNzQL|M-*7^q;*DYV8+hfI!e2 at zMf;z+HGpeayw5_kVoB
z26g~6XX{YZF<|=hJubIJsLX`;=nuXHu>;BvZw}c6nmmyO&HE3d0%2hQ4g`3EwF$N?
zD74TsL6$PG1nR4V7BDMSbhco%hO7ha=#F=|$5WF|xk6I)<b>I7E~qT-K6r?&9vde{
zr5c4sC)Z~iJnT7=nasXL?i>dnLRm*MGQnnI%lGvxEu~6RYx=wV#d(0-LbA%VX06}2
zj%|-R7Pq0WVkWY%(^f@*!HVFNn1pDyWvtq{M1A&N$BGWtny;YyzyYYGirbn(?R;q_
zQ>$P_sx_)1OkgX<zVnwu)r at XCQ2?&eK>6e}+y1sLE>1l49J_3QK^ndI^J-aEeMv`4
z at xo3%Z46M3%5t+sOC%Z#iiJ1c4>k2mWi&yPJ|Md0nJE^evrj)4eit7#a-+jDb>@^6
zT5Kj5fGP2Kt at WdWLQPDXDbh6Tr9qA?qnbkcKdK<X2u!c+FbEccZ8y=2g7r1hAc#($
z0 at WVNUZDk~y5seCh$>|YX5tVE at 7qzYGOdinMqT-BEyP)v?B?ySy<O5!Wov9UIkWI=
zmi2V<tGWDk*pD$^5VD6%*!Hxdt8L)uQFuI9<nsFh#G=nft$zqWnjkcmd;35B3E)Qh
zzXOa-MSxkmZpSXMR_*T_D43Yp6tQOG+6O=pcnf at BX&9X8|7G1Bcb7S=StdsomK=lM
zONhFmyed at RT3Q0y!CG7dwv(QZd#hv59;Owc0;FvNr_MAkENHA|7P*y^lS-`|dm~qg
zF&TT}=}<erWQGV7+=3`<f%-~+fp`CpJ`2AQb&<XbTm;+*`cF2FEdqWsk}bOQyplYj
zCLjtjk3RUF%AR&{;%4#?p}-xNQ(hFL`m~$nl6WB^fJ-dF=AVCwDVXseo!{5pOCf#%
zA_9U;(MpN0_~*@1eqWN=pk5&fkWbgCvy3q8Hbrm;=7ogKkFrGt1jUUD^T-_Khjknf
zP at KQWM4g#RBum?#y`a<cN^(K|Z-41EsnrTkmfE0{SxmYt19NoG(q5;-2>G+GrV_tD
z10X)u42J{Ek04kB7&Zb413ARh6UPJx2()r{mwEp9G`jTYji>Y5TA^4>5G4!s<6&r#
zrQ$Oh{yd%w7hY~fpy%<6J(q7%p=o|@2S^Nqn&DL{OG8Iu)r at y3Xvp=tfc)M4p<jBH
zs4gH4EZBj|vb*KZx84u0#$H`0{|p at jjne<^J_1L at oYMc<5yMqcO6B5)DyY%fo`C)g
z`$|DaTix^&0}kX8uvmQV2u{K#j1{P)w;Q^Z(&joWPAL4mFiQqn7`t#07Z?x9sjFW6
z{0|I&hkMLh44M^^JQbxd<d0vziW*SdQs29OA1nu0SFpjg at 7vF?58)E?IE<{FyLYc!
z`*6_tWt77a7q at v0<9}6mJN6$zR!U6<UNCGa{H8d?9Cm$WXG=kQn<vLkw0O&bBbgqb
zP*bc?TFT4m|9F1Uf408zCK#~Vv5~vWTyHfsF77bl`I?#@zx`VEo&!RCQKpoT-of*i
zW^cb-H at U@CRoQvuc=^^HSQKl=NAqecg=#9jQfJl__4ng+W+TY_o?akBcYoqnT?My8
z|7Wbmhl~D$-5|UseV({227H*5_!ynJZVY0aTFpv61Yn|6p1<`X#)O%hPou`ObDlyW
zrVtY}?_AW=4Un6#JC*>jPXm3c?CF4Nn4lYsPBlY)pzMUl;R0i7u;zLTn;XJk;NJ6D
zM(s*SP;BFEf$j;yPeADaQDAAn`-z4R!%z3|lSFf{;|Uf9<UDZvgu?3sZ@^v*1E(MN
zG&W%5VN4r4cRps*8pMT%1}Cp5ZUYL^(1{aRr^hc`#QexljHcRt>@;;`I+eA$noT9v
zKlUIFV$>&GrNk7lg-XNJ<lSWs6leI_O<!$w%f5rKhX|GNXZ0RG)qdb`@6luIufgZc
zHv+{XdzE(X+sD8dYO`*~?kt~^n6E8Q--gI;?CKMtOTTi)6!dV>&oSv>fnhobZy~p$
znB~&v{a?)oj$a#B7pES-4Nl0UsK=;0e(5q4Nqax|1aw at M--REULgIkX34={JvovZc
zUVzfB4&nj`$DkT^PWnG<URKk><JedSIu67RF_BPmzmBXrRze~GeD>wHz}{e90I`Fr
zz%NB?3mj-Bw|)HPEwEnx;#>%wh+!GOd at V5}9Uu*Rer>sNlWiOuw~RQQCYV1V2|-*c
zZ6*|OgmU8&?K^givGFjwpUljXS$O`X?lTvRfnuT~scFs6G5S5kNuj9Fkq8*UA=|Qb
z;Vv at Qn6x07wN6{0uXph3lSG|R8G|_=DffB`yyCPtG>3}Ok=Db<`%au>`^WIs6s%X%
zlAw2Bny4NbqECij{Z;cpDM=H2#km-Nm<@A_bHiHz0>{FF4$rtj{|A`I@}JY%p+59L
z3{xzxy7uhuKXiz=2^PXKCC>H@#3|^A9ZOGWU)l%mPOn#B6y>ME+cNz4Sqx|l9`ygx
z=32bQ!sGBDuu}tb1iRyfzrelct!Dj7NZWt-lf0&e=Dqt^d$Lv?J$sJT99)+WJ<v%O
zKmJ*^MNR)l at +<*npL+qB0M~DxnIxD|s at D#mI+Yvn!<3s46Tu~7seCOhaGF*2b`C#&
zj;Uev%$fR~d-(MsKk2)4ojOsQ*8w>o1Coc4Kd-VFMIzY$)1rwNru?fCpJdnZQ}#eU
zRN?C**4i5yt44=g_Z?{8v!{9MR;AsB{fD?<tf_g`W!TT}Xh&<&$u*hdPdw9q^0cS9
zh22>0sPHSDqR;T!K%L1z1%Njs{C1*@0WAj={?GfrH;@-x|6>2iv9lmbP1qz#*hHxH
z(8-g5U}S_Bk~+qJSRC0?8y at xAiE+$6>?TQYC`$m2 at T>;SKKcy$KerJ4A|~3%tj8V9
z5`(B=6x8q+xc9uxVps`DB8qQW+TXnIAic<!=h}Mv<*{?;P=4eYsp^arBw)4a>Ho~U
zSb at OvyNhx_MAQEP5}3=%aOe}^MK$(!po2lVpWD`&$`&U*9V{puHr>RfD*$O2|98Lh
z;n=NL)3wT)LnobW9o(X{2iXGit4eWe;tyrs?>=zwE;0wqKk?!lo~rW3-FqYBV``_S
zD&TFKo?80RX9hkcrPx`R0|_}30i1zfY^V9y872knBv2~=>ic4aU#W!N80`OrKK?Y2
zZ}h|P+XKyYteb-CUq+9Td~ZoUQPsiz at 3UdRBvP22Up)17Ewj`3b3ukDiBUm~*dNg4
z at E!A#Sfud+%f<2Ze+;2Cj)4LSGR#Uf13jz-*vR|yLJ8QCq4Sq8P-E{3e}{X_+W{G_
zfMoVK7<t;xUBdzy#8#OU2Y<XAw9IFwSzQ*V&yMpe*#FfMAP at vA0TO0t!V0IAB{iHl
zzvK0{nKckpa{MNOP%tezE6da3H&*v`O+EPxAC$wU?>u+KmZiZ$PBl$_p|7iV(_=qy
zHZ-zWrc1EVHb<7y_yP#M`6`*KO`4jSS-s1a+uG7_;7IkBEw~{FZ-?^%guKql`dmY=
zYhIXl=D5DtNQPVt8v{mBz(SBee6hl>T0;M4qQQ8}8b>Zm#yB6|0u&RW{-0Bl?=LMR
z1QK at uUjeW;OjRI7vvNFW@=yfV4EAy_!3C1!NcL7{P66r=G=VzI#96=(!}wp^-_K9;
zdH+x43t|z0^tg+Ug8t9izhQEG=<&1R?{JTKN4DwrJ~{Ke;MgT1f>jgueDsrv%U5A(
z2oC9G0rVf at TZ1GXo@{?0hhG!$1FKYw|4?@46#6iJA|EVxE at x0s37gko#KY8YD=q>#
zUDeY*|H3QzrTNSb5TUT{W35LuQ+Wl at Uy%QTY%#9pSC<iYz}^se0Y=VW6w1GNWM%=7
z3?4hDqk~ZNoQh(6qx~1JQ4>=MED%*g{bQG}LAlnnbl{7(r$|yd4;_Y_ji6w8X4)4k
z{Hi5F|A*lUe=YzgAj;t_l(aP=F<oW~<3IKvhzjYb!T#^f23yF-n8vn}iIIE at d_Js|
zxHmmRB#Mu~D$BPMBv)};iBn_ciwQ^t-6*rAO%JRT{Rf)^eIA-n?&5YFE8w4t>Z at j+
zdm;QC?lo^UJAU62mLK{*Mg|C<-FY5XWLbnP`RzbZ*!>p$pZ<y3<16y>YqDhnRtQyk
zk|WOp^AG&P$j9z5w$4sj@^fLxWD_e){c1Zj-I0(2?RfLOyy9F|2Pmtc*3o~y|E<3w
zKp-SlLcdug(*H3P!mfrD6fZ#N>Kz&EvBOW^GJ2iZy0K?^1G(L&&I)yi+Xd1v_0)6F
zl0&Y0$Bn}2;MohHfV5Uq<;3KdR`^v5!Sl0FMgIwg`DCVH;0kZy=lx&)5B<M9KpZHl
z3;iE=NxBR&>B!{hwK+vT=0|MB+{@a8{_if#;nOBq20K+2(a;$w^ncdB1W{x25&Az(
z at f)SYZR9S at u*LP2mBWJ!Q;TnX5dIGLn0ErQ`h8Emr_P|#Fv)^N1f>i=A;UGUTa-_x
zfR at EYdZs7Wh2}$C417L`GAYn`cOaKpyL5a4yElkv_P+z?pA at qmofhnkG;yOO6>3Dw
z(#Jn_xy-POckEbf7#|)wdmeXfxJc!43>xXd{;v|VJv3{9x!bRVR|wA+b#)S7j6>O+
zrK6uW at 7*t4<s&NXYGXeRpn71cTlOCcze~uYQA|H`+mh$685!FC-X~wI at N1O(L;v>^
z*RNEF5J-3<g8sw2#^N-mtbi_!-%9BJ)E7%20*y_Ie2i|4i0~D1ugU8~5iMw}WnN<_
z$j<Yj|3JVJ+<74bxO4)QA)Uk9g$IEx)nuZ0?t*}wPoS{5-fWb!&<KBrd(5Lmu7p(B
z-cmj|fG^&VrJuX?BH at ZgmkoM^;@<A=!$;_ubbkE5z|<?c+a)F=&R-D4I5FAx7DGgE
zBcAIw7=hE%Q-}nCengfQ0}T{@F at k@y*~GBGk8Uu0^3>?1E66j`>kCO0elyIf1=VGI
zT&W40**pjxEOhmb4C6NO7{0~^tgq0ljorK at RPdGL*H2BbDrw!ld+ga42QFT{<3>)~
zcJBfCiSv{g;p|-R7c2Z4CG>y6{)5H{(3J5%ypcdtaQ#bPg-;d67~I74e at +?yKkxrZ
zAY<wO4Czp3up=1vvMnr%88}t;HboV*2MVA?!Ue|cOms8bXTqoY^Zu`q;0xAUwA>Z^
z3EUQcMG23?Ko|ZF_n3D(vVZRrlWg14{=PHkv0!7wIQX+=?4Q~BenL>2cJ1ju{W$tR
z$`3(&Sl$SDcXag=9!Oj{`lmbybI63ZVeXmdARaM!97MaY-y-%3 at bGR=HoIf+6?iL3
zP+a%E|MB>>C+?7^T$zqfjR-y(hkFnN7y8v5b%fJ&xukx_Zd76 at r(j&~K7OirYK}_)
zr(q>k=@jEPo}!RVSHF0B^R}&+Rc(O+UrB*62d1j~^Rou~zbp})1FKQBM#kS5-g04m
z)zABXww6yXtp8j2UL?{KnKT(M7=u6jU<8VCucNHwbHKTTm at oQ2E^Je_9`7W3-Z3>R
z<RU0jg8g5S7KA|bbht_ixeE{l{ufUm4|iL3wl4e~?lJFiT7U18v$SabjrT`yzuvuf
z5Bw)+INM%&%~?_eo@(g&(<7I!gHFfz1Ne<i&l{&E5D2llx%D+=tqts@%cKu_bK8rr
zu=j-A>BMA;tBd|`vuc^38IC;O?7XIWj76P07pvyCL7bJWQHP`|SHlIR#r}_rO`H<L
zFB>FG`!cbs^$IvVF}(tPso%P7^7&VZ&8H at -#dK*BZeIuw$Dg_dxAPsh!|>TKKhL+>
zI6DKmgsmXwjtal_DS%}9f6%uDEs{=-{U^LB{9p8cn9p$<0;z&eRT%$KFDI{F2ZMx%
z9WNL|cTRza{?EMy<5Tv+T&7nj_|Sjc^>xJAVbp~Vg(x;i6#rNM|2%L8hZ%PX{h!UM
z=>O<i;qP#dd9Ta%`<>XPykTLhRFXLN`uot)fH0}->%tuggji=#0&m#)(NEDTb4v5=
zI9bf9w(VQ>`FU_Pu+7BC=`$m at UL%@`*<t4!?@Yb%;l!)&flO=Kxr_B0);Shs_$8~l
zT8n#v6d%kH7#@*lc70>GR0$7(#~vj?k`|AC!v136S3`MXesM{-19_Dr!<~nZrHGTk
ze?sgT$F8GRy at NooUAy}(TphXoROl8V)4qE*gv at G#YS#xpI>4V+Qg}y&U;C8tAGbwL
zSrNmp-l%do&EZXffB3xrr`c=<KJfq5|NS;#AxvlKlBDFA^+9zg&jr;g_xgMKRa!ab
zHLY68QV16q{x3LK=>IZN8~{-u<%9tLeEje2AY_}nkTb3aR?WfwpREmlhkMNX-1gt^
zL>LR<Ef5qVUJxwo`GOV2m+Qoa$;u1bz&)QX)9q1T*@A&C+O>DDNUemcr=Y#HXWtUS
zsc3Iv00hC33<ZPD24qF9O2=i-FT(F4lckKEJ;#PbjQ at OAjY|g~d-MTkdsj%RII6(z
z at _n&DAV?mgAIePVYIw$7Sq6ba&6Y8U3ITtLq^Tyes%~ODCN6T|@pFOpmcG+xTlVe?
zzlFR`C8?R1kjhen5V)EOf`thOxTDUmeTv(c_!s&%3;?tY96G!ya6$Ngu^#Y&<KUzJ
z<Fq3F5o1x^@Ibmk8Vt{g-GG0D>4ROux!2Ry&Kim>^8hn2vjl;l|Iq)@f9U_g^{-LE
zC_%IlMkF=}%k3M$uohfI6zB6e2AuGBxW~NT<M{nf!<Vn&Csk#nln)OD&FNNM^TGm#
z&7cpfC>Jk0e|}IuVSLWk(nb4^9m}7b115x-bnN^^uGS6r(E;EzRygd;(ar*YL2oa=
zARRuhI0wyyII_BhtpK<999j+^ml$;6B85;FS|RYy4wsodykN+e$kM_qgz^M7=GWJ-
zF;mlyopFgVB1sZ#AzW>ona23fq%eN-xt85~LiL3Vnm<&WY{tFt@|!k~jkwx7D%{H{
zSV3Y{3TnzR1rRrZ5hlDf{;1FUe=u|oyD{PgAjHs3HOy=Df86f$e_{bx0-#KCudlNU
zufXh!ud$Zr%VLXFKKakb{}=`+ at DhXo<Npfwf2|ai2{=Xmz%YSzw8{5n)T9%17XA+R
zn9sq~{Cl0|-}=x8_EI4lynKVP6ipHfIbAnM8`#tUr9Xc at BR}dZP8{a<(eoGSz<e_O
zM~-Z{e3eaG8b${ppM<kKr=<n>mcP0J`%I=J0X`@g5rYww7A4>cpf9*=I!~W3S=bRS
zQm`@53SnQuh=fZNmI;|c8eSokw^mizefFZx4)$&Fws*3%;^fU|?0(1O)3;zyY23Pv
zKY=MARG*Byz*|1hN2YGe7$9fB4=ifJE8Jt=te4@>f_MaLB%yQc1s~oZ at h>POd;&~x
z1+^8qmBlWXh4G)oGWwD<Q;dm>{vXs{9LB2N4(=@&8OH<!L%T-7%#u8I^@hPr|4081
z_J7Dx8G<mEVUc4$HH=8ufAac=m{4${6#;%WDT51*``2T!ll|T&Hi__+2Re?O?Am_-
z&)49YbExh_K0=<)uLgZ9YgmHpkge03&Hl^S4*~z6&jTTg-}ES<+yK4k+Ynk}{4DA2
zbd(iC_l;8$pgS`H`2Wu1r)ZPUs^`Mh=;VZOkuu=3m0|D`$al*!MNIBcw}n>-<zbwF
z!2k0_?(?bQB)&l|b?n^>b7p>hb=Tn|&Aa!q+k2=!8FV=UlgSVpNX#P{qgfMP;a>9o
zx*GmQ?3u-_4bWw<!yS?A;SDmiq5QA}z%7L>h~3AK5{$tZf9Sp9^i)wwG%i1)N1aY1
z!9?6!GP97D9OTpu_W#V3z7wZlZc!`5=#w&WJpCVUOOQd1Z;GfQpB20WQwF96qHijP
z2Am%2;#=>Bzr(%e`DK2u6aBMo at 4mf1S*}^w2KWa)tHsyeVlHM!HpsvU#lq~#&j-{W
z`wZ|Z at C@L%2+$xFi7+bwKUg!0TN<!nqs>AvSUNb6*HEL9i_l1I78NE7>_7b%ucI6D
z$&5bxvfA$t7b!m_d*|U_&I#mZC?re=DuX(_f{=&j*;`h`#)$A_Qo;hf at AyeF1E<g8
z7)2=>x_G5wVPW9Lv*Gua_H=TJN({ef_xUS<jy9I_;T7&BUpg`Z at df$}AqHSv+2#@q
zLwJK&%;@d-HOMeW0Mcdz;EP}jNWPaeaiS<00`1iH?F+$(V0dwT?u5js)TAgZTJ(QB
zWz5A;%rHCC|1-q#czcl{v~qk?Xix;5v1t@{QHbf4jo=IGDrRrJ82%3Tn9uWje!o+0
zW8K8lw|D*BXBUV<Vk=vaZ=WuYpTD5hWkQ}43<O{kXP=$^j}?dzFz^iYCHC|zX{w!i
z=6O(OMODSMgFWSK4Hmx}US)!6 at mCVH!R+jEnIILxxIOvu+d;#HPKGeEDyzapO8;ST
z%_qhZBV8`Ve5bYO!z&1RHkE+D%~x60v||S)zS4s7i77B_n8XPZ1Og4Jt!XiMDU{$p
zFY9XO6#O1L%B4wy3-r*{d(W^V44shgx3a&75tt4P8%B7u7_x%>pG`yj_M*m`|DU|~
z;BMo}*0lf4tXVU+ at 9p5EEK*|5Ie;XXGeLj^13-`f7(f6d2!J`~oO7nAEXzR-vgIsU
zwq;9BYUj{)Yo22D;KNXEUw at _?7OhpQbWnBb5LMW9&JOQ>H}eKcI~oz;s&bn-D9Ae`
zz at 5Ya`~x_OLBVmYyX&DKe|HG45 at LmV*}!pA(xgKC3;7SHh-3&E2dtO^)z8QvkZB at f
zT!r<47uq^AW1Sf9zw)f}ci3ZFU8LN{8yL>Yp&_J#d!!0UMN1>TIM!%rFac76G;3Pl
zV5$KZBv3b`#4u5>e(@bs6FK9i-p;uXJ`tceC3&^|-R&D2m17e-&d(*Nfq*C=8(4NY
z=+xzEas<$gnf*f2(x8=aex&Hbyj-YQaDZT+GFL-F?%Y9ala)#Spvq!yK7E!WMBGBd
z0w76{#)T<L3dm4~A-3(@Mdu3%696URNN}7)VB;*zCu`oh!yenvlB32Wig=cI*-1i#
zmfU$v+&+TDCPn2H%R!~W>j?f0Iz+5po^yb|JMnJH!Sr6Z2pkU6m}^}RKOE%emJa9h
zj{G;Stm0N>J`v{s2%&-)5d;`Sc?Bq<0qsnTB$TU!r8YZh=FVN_fAF8q-(ipKlH!7W
zyn!5+Mh6mC0?Yt_5XVCM<_13{cxI4q18?3D^iMF)>U^v!<ew>;SA$v=0>E-?1b-%Z
zUfJof{CvcAc~D%12a>t~35n5|b>Kgdf4I)H4OVFCaRJeXQq<0ml=+_`ZkX7_-58b<
z12E1xcM#iHi|Dtd4L0f#!w|Cm-94C)IhBwQiC)c%V40h9z6uQudVh{+tu-i1=|%bd
zZ at dHZvvZ$4wwabiZ3Nae%6wqe!kFhgW>$6*@}Hh8;Q^u|=9Lr*(kl(iN{=OI?(cmf
z$oC{UTySR at J6qt8<XV4^W5_>sj&}5)V2Y6;{{r%dLSU5Il!iheMmQewI_w3E?#K`y
zt^#L>-k1c at Zh_4C3+%nEQ5EjvjrpI*5%fMhVc1KM-sYtR$Q)*F-lDb|H{SKcQ_OGJ
zr>H2%KZ1%M5BZ19xM6l0%o_n&(p&5kqpP2M2~&ikOl6s0gtd=f4M1b-$};VW1`BCr
zrKWOB2F8rZNOgXs=mVvM$sloRsi!8LfR`xBbM7Fvp#&$tL)Y5OM-~DIOpJZqw0RdW
ze%q*dJv0;&?BlpFUsG6IQN~AVev#xT6ql5SYit%rhrKu8XU6}}V_}xIPmZAi&ENjW
zd00GV$UmqO;)7s8`PxGEF7;AVqS07<J&y<Zo&as0ED5krjA74mZTZkJCKVAG(f%EH
z?#1MkILg5Y@*fpc*=*+-5+b1lEm<?HCJ{kiTtx;M2u9u-ekSKHu=jSUx at aG79Ty&F
zsbvW$sS`L<(O!6xIavu$P%X<`&5idze+~7uu&fyPI{H5tewOdV*ib?(4Kq^&=;@<1
zS7xWhLVk<$r_fYI5yqHsKlD=2DbqLJf}9y1^~&}Z3c>K}A3uJ``FY|dWj at qej06{;
z6~d)M*&tcT4?J_K-$MHUNYBgPo2W!curIuY0TChK#Gqdzicvi{08h1JaBALBcS-!n
z#8^HsK+ndFEk}pFH!y9`=$Lq6jRrIedUn^Cc+8N0Sg#=m(>GY*Kfx5 at dE#Uv{}J{E
z<R6Cv#ECr at F5<)F@}!(}<R5qmoTzwKsd=5090UHJzXdK1b|#(0h{eH=Mb#KG$av0N
zRXf<HQ09<!y?FQYUEg7kAInOL_whFO_pfK){{%g@|HW4UKQPaLOToj2-VXAU8=t)O
zL0VEYxl33FF#JPzTsk~XXcB)Z^S_^`ONcb4V`~$ImV6l!mvn8dg_c^zNzF(??8yrz
zYKeois;eFRKl1P9c5K)46fxE07n8dLAqlFoLSMS84<GrG6b3 at bBT|y^YWjGe#QTKh
zf+x1Jv%UMu^EDF_7!HmL^Yt3q8grGl(M~;6X+kt`R>#=~(x6;5iZ^&OvS46fz%t!6
zEK3949ufShYp}A~;xFQPGQ*&;__!UR*dH};;Eph_Y@#csYt)$eq*NgMgsl at Kfy_?G
ze at uiw@((o%Ir5G3v&cU{qqQ&o0qR at V(ZQ=H at Kq*7WfjQl#zuF2hdqAOYE=7st7vOs
z{_lM1S%i}xa_rSNpeDdq19LcOO^cs@$F$F?$`Zgl2A>H}1OE?|3YmgHaLH^9XhEd6
zQ294H+}}7dLI)IMY6+pB_FukC)P~g|IWdy_RxIm?qy*>ZNr?*Nf!8WCLu#L%f{lbg
zSV47#b04vd-yS|#Je<sp^LM{YqmaB%l0FoiJRq6It<w!_8_?m3of$`ve2r at TANTMj
zN}_`SIIVqu at BU%;as)zV!i71xsZcTF4P)ML9<8#Y6+|oA9jYA$zP`~0o`ir11WIM5
za>@nzxE&7ic152L at OD);wUAW@|1b!sK!1<K*br`$_*Yt5Tw-E0>#0!VKpF{IDDf}G
z1Y5$4!F_>x8ol-k@{g89v4hdqZ#sX6y|;Cx>V3Q+oYc3a)WzUyH_<=gOkVillio|0
zAPH$XcaeGxtKZ+-2`QGM!6Ks79j!bK%t`$4WG$uUQy at Y;{_?B1KrsR0<D+V4=cq|R
zy(;nuDD^w|^cBF*On20_K>qm?DVh at J=P49ANsTFQv;i>!S;V9VW<X`Baqc6w0sND3
zR=>6m0WwGU&M8U-FB<V*_zY_%Cjmc5qC>>aAPw-N(gsS(yO5ceQ$0GWsx^scAIRP?
zIEbB&5(wS^D;VbwFdpZTVevxMLA%2XgwcfjgXAPjnq?FxGa&$K%@h13N)8DUYZ<6-
z_v4R&01pcEq7;H)0z?Obvw}Sp3PeemFH0Et7lQmt!$1LXA+ejNhyYx35ULP*%dgOt
zn5&$>!`|EavXXtgA at Ep^Yv0~m`0`%OKyU5*BEJIjIhrJI1UPf<oq2}oi)op49G at pg
zu(K!!#xhaVP>;qw`}Vt<s<M|L0MAabuWiyHDJeQWHJ(ym7zHRld3iv1!z<vcR4J&p
z<@`J;7>(ptG}p7I;s!1q)*5*Go%@JwUOJFPl(9=q6}}aYsphAy#>a$U+uE0wVL^{g
zPwso^4Y4ygw~i;C25-Q}rBA;hMhnj;Z;*KQf$TH0Q!whWe<=kHCP!_zaf8ky1Ng^v
zfVB(wfwWxoAKnz8&KSjTv=A<&_#NO+EC|w~=Wc(<wSN9yctpWg!DJ%1fT9CaQex2Y
zB*=fbpTLfr7 at 3wDmm&>kv1Zzji;Iv~mZJ-iJ5%0ZCAA;Fkn?wV0Bx;CzkfHOB<_t{
zxDL3-g*zYPAq4+y8ykker~A2U#E&?hot0E#(3AW{*(2EDIKrX~&mQt$fA%7PoaK){
zEl|nXWa`57+)REi%6C#Ej{wc+3)jeO#i5kK?_xD+47$jK80Y87l*Rbulwn2oKYa!H
z7gUAL4(C2%8$Dl9S`7F{7)q;wp^iO)(R{6nly)E-&|W#Nk`*avLrcY8U=B=-1}T at G
zmF(!S_ePd1jcP2gQL!>I6;}-o;*fD37Vu9>e3%&grLGgXki<Bun(RDAEF*oL$=B_O
zDF66}`3XX!!%d5;kOJ{|;hdo$8uAZyJm4REXw(paSO)!vv%FKRBg6~px3<Zbr2YkK
zE4h1}7cSx#a{dl`Z<p&z_v?m8)Ge<PUQEkO;vV at Cn>J68-enybgl3`d`n#lWa2)J9
z%Qqn~R$fXxbA+e?U}M4rw8=o<{^vbeR)W9R at j{cqw!Dh5#+Y!|Gye}f`+QzrMrDJA
zUyb(#h*wN{GFLe^(%4ZCc<E5CMqhp%&z{CqN%bN}2S<anmwcT at ZmiChrEzfZg_qd_
zk}Ry$ww}AFYi at -0S?r7w1>YuZYKl==1M>fgcitypT~==uJ3Np*DhewjB#O-Q6gF)-
zeGbN8=aJ>g9F!j+_*Imvvs>Uuhd=|E1osP3YSa9zpZk#j&tvF9_Q`RAgYK>eA#W!l
zK;>eFh5Q8n4;mdh9`X;lN at 7;p4)`+`kSFs$5d>=9kxwM}ppv7}!AeXOm2FMV-(m0V
z3Yg^g>4xVY_fA4uf;1+Wdqlz^=fMd>Fc<zn;jUX7*@N9BGRySB4_7}k?HlZm&ZBK^
zgzcZRaGHTzlV!&9!<Du)aYT^+^aQxRSuBQMc&VT`w|;V*O9%%y&Q6C)!iAA{HZoa?
zftcoHLKBC&K6m>gN^!wsX_;Ga^l>!G>g$vhWyOt+#{OPZdXfh at g-c&$s%*RPxW2V{
z@`KOB&S=gQgBIKPPk_^F8tZYVlStwiZSM^V_2%RxVW^_p5Y=KpFbvMa639dTv33c5
zq5Q+g&Kif06i`G`l>hwg5B=PaBL7Sy1d+)VJ$dX=_?*#yWN at lOnGOU(5`@o(&<x5y
zz!I!2QjM75!T<2L06cfU_!@taxI^7=KL8SrQ~$;JJM6t(S+3o$8?}{zH)rI_j064L
zBmPO|VIjMuttqd(j3YI}L+s&pC?&mGnazvPxVRWAmw`^vx3}WV@%A|h?270Z2sh}1
zjALUen^karW+sFG#Gn{^^*XRm$Zz4a2dpx9<yq&485bD<*CnuL<R2|aC at zo?$yC{N
z`mA#|u?@o;rAw)uH*@=A)FgtSxci_))>urf=Pv<rc3gtP2M{$MiBky9A4zES at JQ3f
zX8r1#qtD(O_-B~*!Qms at JPHPcjm>#j!7nNe#d|>NXaz7NgFYiAn*Q7`Wigrj{XLEb
zcpSx&WeH&Rj!I1i4u|}+ydwY9Q{&|Vt<Cd9|Bs6eOHkwrHII0^lO;_4MBJi at h?Q$`
zR`U{p00gNxed~Sa at 38lFRk?1zZVjueOf}T`MT-#bv9q20FU#Zvq5NV?4M*x17uXBf
zMF8qTCVNK9`Wi>Fa)me)f(^+z<}GVC#WG@~Q6L}U5CutadQKW48*^VbrGz;^Xc+Z_
z6sOfszY_kC)241}qM9D^k8*|QpC7lP**@^fb>}`}yY1|G3OK^>%tyd%s0twTNRlnJ
z*EMdQGW7R3E+O)3pP%C+`Y_}?(b2&uCkjoGqr=`CR1oHl1SncUq_L+H>^);LAv=%E
zY|s2JI{&FGEPy|gqHx`S^rjlx(Z~K0;BkysfLJgIbOM;UwF53J0TGle5$1mxC0xSb
zl%Nni#xK6LhPhdy#(*F2OO#gY0Z~JrVi*`eaV0Lms>jsf`~@CJ+fbq3uiNMwZ=oua
zVF!MUd#szD!jn+HxL9h`gJI?fEaI?G3fRRO1FJSKLi_f1+r`Te?^N{mFz4{wAl}7#
zb>rMLrO)k~+a-ge&~}gl$*ct#{>(df<gye1rLYm=vR?cA+g%S6Iw0)Fs at 5i1ZW=67
z%xqQdEg<}Nb>rjgN1qp)3>dS*sqRjhz6|7Ba$>Zush)JOn(=YRC301M!}=!nCPygF
z9!8E;041bD9Ub=GAe0Q~0;way1=k{Ael!zpjlp?jPGSGTn+mlB;cpNltd*F<<klrc
z`JFiYFv8D9L>Me6#OaVa0tXEV at I<>4^&e&frhW8Dw#1Y;`sAWh0iVcBfT at 6R13Uxp
z0Klr0nI6wdSJ~R+`~@CJySlP`zix0o0B=T_5kdf!<s`qLRZ{$sy>WbkBb}EnQ<hP{
zF4h`QelP*LE?me}DG51|&#SkYvui9uu(+ah>h&8r8db}=OJQ*m%5!Eavg2YxECaps
z at 84Ax=1jc$23|_0xaphkI6ut1(qdJWj^Hx>ADo1VnG|=9WjZxaPC0iI+n9l>8e?39
zzxc)A*NuZD0bfvSvvG99wy;=KYZiNw%S>TkXnFVuK$;jCX at +BO-V)C~kUfblaOW}u
zAc`Gl&oc?Y7()p>$KW7Bv3x1lh|h=B6Zr=*%j^w-Hn2bfzPS2P{&AnSEHCj2z$6?R
z>_gS;kU&o+CFCFE11~Riy_x(`Cc*im{7 at +#7Xg_R_|};A)AMEgD3}tUM<_2cb at N@v
z7kE$&V^zgI-t<j&nNl|L`di#1tg`^sNa;eKv~O&2grE#_7oJaGKSVh(kb5sbAy+Gz
zYH;@f*`g2f4}9)vLcn#kgbz4EmKO0Q7H;h5rN4hkXc$ZdeUSgTTX*Q-ys?ynEXDti
zRtyn(db+e`sNXm<=iEnZM}+#QEoRb+`Pi_sS~)Vt5<{H`LG$nFZaH%fZZxqc);A5(
z*4T3}D#RPPn!0mWJo`ZQsPROcF=mCwqA38A17pC(H}}NBgZ<qg1YoKs{>7rHtut4)
zHD at U@QQBD)&=|q$d!0Cl^Am-WO3KuKAu__`5B&?^e`1CB|9LVL0><n`{@JG~;4&A2
zzXBH%fwnqRMuFUV>MRFIe&={bUJh#E1GzirK}?3q{kml-b4`N-KuyNqdXIaAJkZ?T
z-uu)u#OOP(JkJrhsz5{&`6{yrUP}Bt16Q79%H=r=g@>Mcnm+Iz!2U6R>yEawlYB{z
zkgt at PF9ZKfiNm!ozb7<IaUVuN{{bFP2giofUSNJRmQzp?e#LaSE;AD9#>WP(zw7AZ
zXh3uW^EvX*kutl*cKSSojl64+UTRyK2d=#q9_%G{#;-+#lB4W_<bl!&^>-6bJ*YjN
z`Me4p2oPS|v;sxn<;!>=9fNzjJjMcnq5}SbNdx3tc}oLHYVe?fAt6zkY~LO5g9|1z
zwgVw at z*j_m1^Ex~#B9g&gP#XdyB*`#PZ}Er9T_$<q*z!S{9RBJ$UlD(l at +i`?a;v3
z>o*C0IljXKYgAX6_UV?HpHnw83pdozt2ekuq}?*uH*obD6V%u{A8-VYHGV<#b9|EE
z^YQZxzi<uk4>(@RSgd^VC4I=_Ak4b>{>Rl5lYAt^Pc#AU2(U5a#S=}|)l at Bga2G5z
z$$FG2q>uB)_$XI8TP=fUsR{wi*U!!Ly?WERkJu*GUt+6+?VOL;lC4)>#48B++0fUk
zskegM1_>bc#5+U-J%K%$IN%2a`Tu|a?p{8!;-Hz}pCL;Wn+4TH;CM`r6UPLT>En6;
zwFl#uj8QsNv^3}%YyiTu(qd3l)OuCJ^d!ztLS0#DaV|$5WfnrDS){^(z3?sI_7U(8
z36X}LE;JvM|Ad5S_~ZeK at KW%^SVu5^d0F_2XhF(i1&+Hyy}EX6WH0yigV&mkhW)yg
zwKTVEpCQ@;3Y2 at Cc=H|RrIA-}u%G(qOO8yw^FH7-+;@Wf=cEw68GrRU7AOYh$O|t`
zymp;F#CGxQ5dyYvZ1a)%ih2zYDpFt$Ms!dO`Z{CN+zh}uR&7!&>EqbQ<YoTXS!);{
zD<GFxvn&-9kfVchgFG7K91eUAl1RlKNTeYD{e9>~A))>xEOQX`4B9{%cz)PJqy~N-
z`KSG$Hlo`wnL{^6xI|T1isifb;U_p`7(dYcaInt_IN*?T!BAy!)Ty!PspyS?0~;jE
zs4&}?6{7sZ4~!&Z0&M;Bp0B41FAhgQ&Ec0O`3oz6NVj18Mg~&RM$<O{c9f!!m`I>)
zu{h{Y$z}ov7-Fgl4X%UP+aEuudvuIbW2)Y-8)jzDmFH$Z_!NdKruUUEzC)OC(V)t5
z%aov9`r<og8-BqZ`A-G{J$d6TLQeRL5dP^m-;R`o;rRq}wf5;(w$0PljctN8 at YPdI
zgXlc4H^e}1sV*)p03L>%3}1cG at h}0y+gH|@Apx#{)dcn+N28FZx1BoW=;PcVv!3KH
zNr)#0 at ujdQB?SEk`6pE&0IADJ<e=JI6&L1B1Nj&Bk{~8tXme;ksExoDF*sCr!d^TX
zLa~fYXb%qnWVX at KA(eB>8R-H_foeqRDxIOLok~m?0?o^dxRD938(Qi?KEo2mwcrL}
zz6$U?84>CSfk0Jv2l6lApW{LaF#vl&e}h?wnF{w2$`2|c at dC)S$%e?+m+oj#x`}u0
zm<RhF)D1e1Q)@Qv*Uh at T3ePae6K;?gJ!EC2)jBfxG*w!T;6-2h;(KNl0BNH9tI9R7
z!!iHE&H+K_>^rx!O4Z=lH8s`iU;M)~x4>06TOgQ9mS;iDL|8K?Hx;Zela;Bb1HT9Q
zzvE%5YYgMJK4gKw`2#mvsksW^DDEaoygB+fHzEQ(H1)RVAP)}WO=1rvU{aC<`6tiO
z-}87<dLjqOg_K75(;$@09(Fq+1=05e?FY3%Khk>kJaH?gXk3n{<%~@BdQ2QeS`L>q
zH$llr*cbbE$N6KZ?&%arcR_xV_EIFr$V!b34)J$WR8`>lVKV1cg7XCC)mUj1zU9Q2
z5R at O}KPsHb-(OJvi}ElK=*CTvAC1NZSz^t~2GL<kDq~HT+G-6Qtq<x3oyW1%nD*s{
z4~NRpkbz{$)44(BcA|%PegJ<W(i}mn2QZJnf+b#*e{i;tKfp_=)T(eeu;^FMF7j)V
zU<>%ath<}5;-%p^1#*Z=$aVw~$8 at LGsbE1N77RTIxx>32CJTh2y%`TG$-jA~YGMro
z&tBctNBju&Ux~dgD$t#e7$EEg`A>{S{tFG|lpaXQN)~&X2Ks3LfnXoxb&SXn at -Lox
zAbX5o))XdxCI`#tFtahk65XbhE7Y~LK?LFF#Q#Z77L}B%;UH4w6Xy~#NlObM%JXqQ
z!c@<i1t%D3U)fm+aK0h`Mb<iCZ|MJoz<9aHr$GP5eo<8DK>h%76O7-yOneTgJ^Ue@
zKOjG|GKElhu|dy~2fo$Sn)l_#FVgnZbC4lpOLBwM&7>+2Gd7uzw(${;kYK_dZ4=D|
z?ivK1K8qiHMw}7u5!eREKN6nIP at k^e0tBvV<rE)5TFOYyl}3;lLfIpM)v8Fw1Z5c>
zBpfF6|9>~UG!#+g?ZZG&n2hv?zGhb+J_bd at 40^J}W{C=L<D;xl&YqGGi3yQaeZ7#Y
zQ#c9v7cY#F1k<2?G<!6kSV=IRM)B0%_c(GfenUfinf7u1w{4$BE%!eDC~lnCxCra|
zR%S)Hq9~WipQ(e;c6pN>{fA(&OqPr>1 at j4nCnUT8yE=aO;R3b7+|z*_4e|#t16mL|
zKgz!V@=S^rl%J>|QiL>ZZLA&Od{{(?HsVB*#71y0B?etyVGgs$=xc9+m)`r`-9LiW
zQnN2Ne3*08Kv5Tv9>@*iMnlxm*f+lVzH|E&M{*RI?9opEKkvwY3MjbM&%XtSkM)OJ
zZ{d@#la&g<(jeRMU{{S#O69ra7?L;-WS7zmT5|=g%UHn})HpxUejQJeWG=BySebwq
zvm({Zp(w{&vUv9kM>j_!B!)UCCm>Oe^gqeL+~Pd;P)zfpf&54Q$)$yUR_qU3CJl-L
zuy5Hujo}Q;X84V_#It+c^MYgVGkas;@a2bJdJV}WAVty;#p%+^%G{1VA|T%|eyMp1
z<#|U7;0Ka7F?Gp&scf<eZ%?2n`N*hDBhSA;>O at s*1BEbPax1K_NAtn|NgM<(F7i(p
z5#^un%v8^l#~sabgCj`QP;VL=LnGpc!*vG#JYd~D-r5gdZmX-^mzw}Gi4Dsv%B!6i
z=LS(P@!03)rtk_-{DmU`o7v;Rz&~F~mY*zzIOh7-_qedILaVMSgMkMIKg_rCrh0Ps
z25;Uu{OF&-SmtVq5KGX`uoF{h3;Y8aTdWs-k6(5?Nq8OxuD--a6dqGwHz5W**!IOG
z^2A#<HXPj?jbKTnabgm%bcEjt4i*{8*(3klg1)0oS)ubjc{m|OD)z at HsNdYCJ^RrY
zQGsqD-Y%>T#^E9H>>l?_1(u0%3hfchB{I%vtaP|`A$CqID)c^aFd{CRbwMzGvjon6
zlz)&I_=E+JXQp7f;suq&gu5JhgzzydBgPQ`D&!xW5~E at B68}PZqgW)$56KizzT=}K
z(HPDj*65uPVvY05Ak2|}%#eykE8&LWYp?9_)_(AECdYlbkxr6FB)3eBJ<AOO{-oL$
z3^x2C at E>vnuMT_ka{&3^e~^Dz8t~Mmro at u`tGCzoKmVfAW~-kZ113%Um(FC3r4hv~
zRUv_3W2%~MKz3oa<ZtnD@{Kp?BW}ilKCzLn&NC16vA0i8@|s|4Q~c4<&Cy`~r%hgP
zgs&?N3LUbK2%sclu(qX%`5!nzVyaZ^Pxb*d%V@`j`S8A=S9_g2O#Kw`>>l at M;Qd#x
zfy@#3mh~k*0p3&BZ?Xi`t!;UqIE2%O at o{SH7{6)wwM>0IJV~5C$T=7%K!en3m*MF(
z3i-kShX`o_Y=}>a%_z#}TGW1=KPW$A*WVT}|4A_gCIiGl0`fB<662Q<Y!jpOgbs-J
z4uz_?x&i{~J>J*9yS(03w=Xwv&OGG2N_|p%BsWO$S%p?DmXX4l!x75Ku_t#M&x|Pl
zI;$ByCp9gO=@)<I=DmA#0EG*<<(Zu}m0vOynUrWuNtGh-)vXPgu<sRQLq&z5Cl1Rc
zq%m6O7idr~3=N at XXaI;s^XdwjeZVcu%Nv}!f1|Q0sO$(oS5DQAkFm$wLP;!~qM-M%
z4yc4HUd7uN6>w5$udbtsK``6@`rEvi!`I&tJN)cDNoN?RglMr-APQqGK$!;xO)9ke
zu}7t8iHwZ2<21(jMdo$(THbCPYtXV4l@$taL3$kUsv`#<I`GI}aDHOR5<w0Q@}>|B
z*Wy;CejghIF97ziTtJdnjg6yU at jQ`#{A1S9VOAVEV{TAh8Rq%S!aQhBfA&rNHy7Hi
z_4{!H{7DVmiuP9KA8rui6z?Kw)J$sxZ8<{OQ}#?a#Anfb2;AVJ!GTG3D#`EobI5+B
zgMEAyj$Gz{+A&c<P?SKzK&BxnuE;+qO`QLPnEClI-{`}J_TF^rG>!1^fZ_^G?eHM-
z-+A^diM>piEmvL;yY1S0xje?o0uutqaT2n}BMLB{;1_yP!{#X*@8Ttb&od#4b`&)z
zeO<^a(X_NQZEc79yNMls_MUJX2`12dp^X!GCE1EOJh!5}X<;rtBbi~tV<LDpfc at +k
zzj@%A$bx5`#Z!c|v&;b+={$WJlx+QlC#eR`^W?Ea$3~R2G;=v9S>}IKApD$BVSZq!
zaP0U5`r;t6PfhSz5ko=e>ArBWvagrvNTJLkzo7TZbENtF?3?=W3mfdVeYt`8kr&F1
z{e2lZDcm4Ss&RO at ac;J_v=CN9j!-I#Jz@`Zha~_{J}f2tUSwxbc$Y*-g*xBc(-r%d
zlG9MY(HSb*oT5CrPD2O`TAQjS8!k=!|Ga4Yg8b0*VFNz^-7XC#M#{d|Qcz4KAdC1B
z$&(fP+`kX=b;&7K7Ml&6VtQv!L=2)u%J8YI7URe$@lf%qNdFUPKC}UgX2>(ce2!E0
zF3iUz++VnAFB{Iuine9~Qs9sUf6K%;{QuOo$AOcs(<SC+1qS=&$kPOdt8^(&t?I5e
zLsti`W`rN at 9es%qu<i6k&yz<WIl&?j46f|N&>%1ITLE~3C;$(e;QYb!nJCGt(4IVT
zgm(?VPx_9w4+@&jIYkQch_R}elqi>@EGyc}ef`L_%yIj2TmSwZ4;e**SQ0mg{cB%c
zhpvj%881CY>K7K+1AE5#&$Nv03Q7%gfJ{dC|EU62)YjqWbAl{LV{aFGI!ogtasCJ}
z2Bi#YdSLBEc3X8 at BcU{YDOLpfprto&Zqa}|gyaH{rOf}>zZ2Kr0`ZG0l~X^s*_KuS
zEODx;ryCRm4Vbke13mI|n$nhL>WdLkbzI0wB(@hm{e~qVE-evXN{H7nM~9!+0G<Ip
z79LuVpM3eA%TFS`r2H@~<GKOTnNV0jd=~i^BEJTmslNv`5<E88SKMp(#PH#(`iE=R
zP6hhAqcs7MMe}UB^tAYWaC<WOV_}i}2<DTBc3FEnj|*=<ejy${#xDjhop}c{Q)4+^
zH#!8k^yl5qPr0h8p?+U(Q at 20H!-h+(q}Ip{lFACT$k?@4 at M9C8;RuiYq`M2K6>Xgf
z^_5U2E_!mBGWca{jg1TQ^a+a!fya*}p821TaPi5 at R5_(;h<Y%knfWzs?HC9JS~YGu
z9N_fHF3xX0dtT_AC;_5O$`blN{!cus{OHh?bLt1T5^F6So~qFq)SH|-JCQrWqv3uh
zWGW>*{KYjUKlj6q3yJwg`nmG4<H=`3y^cwf<ERrvsVql_pV1(F9;#j#R|H18tVB4~
zZL_mNQJc(o=%)xkcU-%{$_QN;%0Ibs%p2UA#$wC>^Ml(5D2UZ`>brZszV7%xF=MHi
zZ0c+!En56C>56P-B;*|V*VbE6et^-sxg96l0+0jBKkimAR4D)S=TY+_fPB_AH7tMn
z_0PDSpLj`gW5d4OCf at rPCnO*rrc-VZPXe{1@%$jPga9}~b%`U7{+Z--t<?;%0L32x
z8LA9A@?}aa=BA}Z`ov|V7HO2^dQj(xkICtYlvYev6+%=3zZ3B<UEe_0nKOkIrMNGc
z1L*@snmwCBTY~%(9s;-m#HjD7E3Ezy>5FIY->1vcAizn`mP;ie#T{LlimYf!2<4Vw
z&@zmU<>^aFz;|2)YyhM*AMwP7`JHe-`iQ6N0iwW;4nL!T;SVOCa!yqAz?nnMUk1U4
z$(zpIi36h15uyV80M0?*XssC at EUGNSh80|$LXvwNFH3kd`8a+oh(($LDgwa#DPBt*
zaD*RtEpGu%IkG$RE3{}zOdU9-!8TLK21-?6B#`W7mlWBj#*4}|<lJ%9&$ykRcu7lB
z<G$RYB7 at NIi2~zG<OZoKOa0Te&%V~yR04tHNY~>}7S)=lr-O!xdyRzvpn`pFj!+Kd
zKdozPzCLd0r6pwZQ8f$@%SlhS)SNVaGN^PRDp6OIQq#6_d~*Ed*9gta^D+?<3|{;C
z7J~y5C4-U-aj=ni2=S9^diqJmH}>`XyQeJ at pqVz#gnA#>PtM}ck4ugV_7uWi)#DR6
zDvHpQIj$85bE1O8kEH4YjmCU-oc(zXV$G!%6KXl4h<1lgn4m5hz4kJ?y<<T9GblgU
zq^xKFaws~6?nmAP0t_=bu+QejdDz|{`P|WDa?mOr*OJRA%0K!)@de%*0&2>ZHk6$9
ztu53i7~Y7K(Vrj-cyivL!qP%L?4}lzV~_{lXl-uVmm9>~-It#Nm(_Oe0yjuBv+2zF
zQ~$gNo^$oHuQ}3t<yk7Z<DJ9o734oJ)6m{B^WKLrIcRLPZ5!(W{vL`tE9B2L7_iDL
zNnAvRB0IlIPu2K>N*zlx$QJX$3OVm;Qza`nA>cx5-Q<U#GdPtcVH_2Jls%o*-5rD&
z$_9rqld*;W-P1<wC6W+Xot;KnSt<4`J%c=sphr~>4w7-O>%zp8*zlb`*uQi;e&8?Q
zb9VLl=^uUlJgC!3awtVu2*UPUyae*CeRC5KAdx=DIOH!N|Gd|{(Y)8>DU<fdazM3T
zK~}A1(BMLO(?mR<Qsx=l%i^`<FChF#J{y*GT&&>vIq7n+VR;2TA0IX969NxK82yP0
z;01zxsG`YE_L<|a{}PS1mgarAkxx4D)_d?|Qr?{#L<?=ba2fC$EagZnM at WZ(&x-i$
z|CRr&>dw~9f8N8HUuv&wTVDsKqU!D|x0-53h9UVOf|*^YP*zt`kfNx%5;YZCzq*an
zn8un~BX|iSn8w+8Mh4Rkc_s~JOOzi336Pk&t5>Nhv`tTO{0BFfKu~3B7M4j{5F)%=
zr?qXZ0d9w21utuB#hTuA6$R)~nK%fW3X^}1wH`{wjKcg~-TvE;ZYPhDnM;;E)D8IL
zDZ+)%2Y1#^+ItL_x2&#+gPd at 4K|w<K7hs>Y)hIutmxBC3?ZJD4ISlzB80OgcXd(rK
z1(^`2c_Cgal}3{Jg61QH!wO_n^ed>YRCRXaI|BKJ@{e*Tj044PTPv at IpiC|=0eoHg
z{M-Nb7WUGiy|rauZrFp%Uwlu+*x^@iaDycVZO4<(0ArwtA at a|W!53eSjR^r4t#7CU
z`2&)(x~rYzka(BYTao`XRZ-d4bcMZ^0u!h@(NV!UDrJGuKzc}#v5J5)geMIbo<#mh
zLPx*CSuH+EWtARsQQEl5negGy!B3uRp@?=#<MOiD=l*@5#}P6F!M$)QJix861=xeu
z at 8lu!A`5GblpeeP5@|wIg#Ss7hk74_nwGjMa6#PP?cW_iXYz14fO9fSuY-pcwFl)N
z{Rh6mten)r=U*gx%e9m}Wlv_W+C=1w|0N)4$$6wIaf#VL+Akq>oI=1~(SjnQLlZNT
z3n&LuLmIOMN)xUnnHtO<e*$a?lfQuT$w{pm9x<<<26o81L)sSzAB3Oa7bMvErfQ5|
zfN)&PCG3B>t)s1VUvBA&ENW(fmLI?Q9ybV#w(Hp!srF7P_v)u#b7c7C*O^)oQ6WDC
z`3K_C)4}oVylg_QZR=|V_WJym4$9ua#ew=16Bj|r_yTiv8ZZWPHQ+Ah|N4thGtmK%
z1LA_tEIvu9l!^^ZNL=U?#zF;3C{}^E22LrSx_=++b==4OD4u*yh5ER{k%E$Z{J>v>
zeNV_VDgtd4L&LkSB0!dqmIzMl=%fEd<uA_q;idTrKWL!mQSg~z(V=019-vbFy<9L$
zQTTD9GH>9G=dmyj4oq?)%za(7J>8Dt5d!v%iwxx-*jp`xUHTHJV31pkU!eY^x=T~z
z<I at uGmtMSgkAOHep|}==C-<^5`AbrgBpAZEB}MXDR^n4EnrKZdD_{<1-hOZM+k1FE
zF$Zw|v&v8b8Cu1kaz{VEPkUR(e%#=V2PA|34+SDONMWP?m#+)*&;0+{*Blvn?M?6u
zM5Z7o2Lgv7VCwDSc#blsw875&uOFQle&sq&{?@hCk_wG9DMnFVR$w;5a!)`O5;;Q2
zNm at M#!jxj+7pHJffY)(-w=jsf6<3y7r>6i{5CR}5Os!#Z at EvD&H3)BM+uM?48RGE}
z9~T-R<b6&af_ez|yS!Yx>k>YahRNiA;_yRQ%CSkY_jhnUk}l7r>anV>HX$|M$KyB|
z2Nd#7Rpg`;7YV?;ty9?GX>z=g*{Jtih!2zdLMHvZPq-X at m{|Fa=RXNdf_b19Fawca
zTwCZlsF5T=00mE$Wuz<NxrkG$;A==*`uH=(!PQAt1=BvS0M5^()cBHmTM$ZDgEccP
zj*XEEH3buIyh)@FOM%N-6!1&fXJ?(i|1Z(*>}cPY8;UyhgGi*EzH>Ju#1C_I_~vc&
zA9#t^KKq7S9)I(eP;du~M3Y^Re}J03T^Mc<K2t>(^h?e9X>bVG3)sR?W+kR4LC2~z
zRp(IU$7BExiPJBm+N3PbB_FD!Qs5WOtFCf9OkY1wW>ov!EVbk9vonC!n94?9z3%9+
ztKs1)s5;T{(c<x79~b2F;G=)#MUIFLD{g5`%FQw?uI;)i)YmmSCJb-6>ybyWQ2zF(
z|FNrs_>nlWvQm$-M7%f>XOZhcyr!ypJ7*!9BM%)w0-k@|RxDMBJ;l5 at h3gXMkDt#;
z&l89E$jp!P6GxeV5gi*LQVfAMfnY)^tO&3QFjtWCMNeEh_0y9~DYTVU<;2aqE<Y)7
zJ0wd8N8<K}%NO?o6mZP*ln#MP7sn|96pEk~)|yd at D74yj<tmC6BmAOUS7*n*+ at R~B
zTry94=7UcnV<VXVJDz?XcpEVq{1V*q)Vm)F^S?SD7d`$T<R8orm3gT*QP$MZzO`94
zGLc)5i}wRJ2wo#<4=IgRNO-Qg0Nc&n+eu}stQrde0_qd-e&GNaxOvC%Fv;PfY<fM#
zd<}Xq&*@o7On0ka-*a@>)i~khj;iAq;8oPz!YL28qxf at zeO%M@`pBr at q~fCJB<Yby
z{%hA&d<^zIN&J_5^J9<w+1vH8#8R!J5AeAHL;2L-zrkM$Di6F_h>vSXh%aF^f>ONT
zB+kP)&CHDQ4-XHeh=4J4pT9t0t8HTgpcKdlpw}mlJyu+$6O{kd7(mfHvAW3#tbTHw
zxe&FV)FB{(B-V+4nlP3C2bHDp5pD;bb9zQR at F$di!i&o4ifCYVkwW1l3~k&^D2m8G
z>uj7PMAh2HqC*@RMpIUB$G!YQjqa|_eYrswMr~jG|I_b(5=_~|YQ1f3lQb^0P2`_j
zp1=DQ^FPQ0j8o)4uP~Q2Jt;et+$+eRJ5Fs?&94xVA$@~3P=C0{3QX0xRTb12h1H+p
zFN6lNEjDuMnLo=wQ0F8&o at 7)Mzjy-WhLL}ge*qF;Cz2<E{5$&WYWRitQ~ey!BX|Q&
zfwyEIpAyGVfu6?#y<B$ncm9Y-OES|v-H&q+1S!=4bZsr;xBpIzEL)MK)R!``<Lr%#
zk4#p`5Pqr*v^;$^JjkP at wbkq75m<JqUXAA`yHJkfF;|`rR~R$DulEUHX at ILAd-%_}
z%4{Zo(j_Pqg`<Gj3K~1litI34m#i05#}L1gkngEeQ8AVrc1V+8I3zI5<d6IdOF(ui
z<a-g(q3}}jhrss3;*MpFYmUlaEKfuMcozsRlZNJekH1j6r at L!kZkpyMCJ;gXKln5*
z9h!o&hV64}pMS&rzwz}yxn=Bvn3zz3zNWbW{fB^N%|IU%ZMj8?vgXFl?QQy?-xB1d
z4b&~OSXpGL$tcy3jSB>tgh!T!?7Dj10?__Cs|okD<4K}mgT6qQK>tDQr|vw%8hSb%
z9qw;X8-?2F<cUj at VmW){;s0ds>IQwzpD}(}8sNi;ONzxD at OC}m=j8(VW?HF++eFBr
zi2$=*)!PGP8k9bgCh)PF4XA23W8thw%T56bUfSD_3RKqI)cxY?WL=dsHAX}Rd3m42
z$KHA267L8JXc)gFo6LXo838QR9^AZcu7|wbj|ratq$si^K=iRXn06vxvLebmNeP{h
zQVOb2ys5&{0`$!OC!W;SRwq!~5w-^@m>)s;AyESKtjn>3QL&Mt?nEkqz`P1|>KFe&
z^H<l~QK%riTKMpjrq$K^pV9+A(%aL$FE=n_O&eP<nK1unl&Ay_+tcSMdrg3bWOhmg
zO}u?4HZ~l^75XM&{)ZH0us;bFO7xbNCQuDL7UUniXxHh}fZVb*s-n7DobyFyLw2#!
zIyS<qlxeX;jAI%a6ylXR$>NhF8k<*DP98VmQNjMT7^zZ6c?<LK;Ez0NA1_xQPZ!Fk
zk_n7MhJ<%eGz3yXL4*Z*vIJler)4FRAkR_)LJyQF#quZ#r!bo}9UT=DGoVHVh0R`9
zWYEK62cal=3UW=MwzYZS#=HFK$N)Fmuy4`k70xax4)k-!#{%Ubl!g?Ch4l{G6SLjh
z(*-ym#6o1gAgjk+4hf$BWXVprycXq$**j02&n%749~~0qpN4pMyb(kL1>AB^w?J<$
z2_Xd=WT^nIE|BTFyKQGKQQeZ4G*^+1MNHgHNO;en3U;ujvkT8BzGV{10B(r`{-XQ7
z-kyEA?acpM6c3ud^LM$)RG?8>S2rl)$%KX$l#!h>efw@)d=%B_Dq9=>CI3VH6x at XT
z3i)S7;;|tA7`a_%&w}HU>B^ulkV+%ebv2Mx+9t+W6vp1VBLs-YMk^s2m8Bd%_}5T>
zcL37bo}N5aK1u?y1JwSNukKOCg?Hgc9yQfMANtS#8Q|ycAK>Nf=T*|(Yo492nVq*R
zE)xsuefhd?M3`rApz{c53&?yn(I{(8MMrB<bveG-B$yd85~0Z=if5Udcl3`6qIhe|
z!0T^w1RtZWvoqM=J+rg~&nJd0g#sb|1!;yihA)gK7DW-o{_x>Pec|vIn5&}^Y1Bo~
zn6{Z|Smjw;$pT;!AjbjuCr~2(E#!at&3B02#wALiw?+9EkVP2 at l={k67rJ}7g+~TM
z=fyma%ma}ku@{-g(8yIQH@>|`CIwgs-iy9xuR6Z`FW2br?cJ9f&W)z^O{8w>y^jkU
z8}aGYpE`p>1EqzPnkkfZfqX{D--yqmqTmQ({s)18<S<DR$K<gf|DeAJ?n7cgAvWL*
z1TJA|OU_C`F*bI#0E8o;KurOFE8u?uy<KxkiYodCD0GEy+%`Ky0s;^qiqoNuG_0)r
z$fNc-aq!?nf1*QhkXJ-(L~uk<XiTKo|FOUQ$H7PbOuL{`i@=jd2 at bQetHU@rplzy`
zmlTkXgMFQopQF at kbWII)vvYJleDEPzb#*|17wza^kMhp;{@323O{S!AY at Dn~JfEsw
zp(HWi5akE27p5o*dF{wB1y9lcG4NR+2+G2Ri1GvM0p=6Xu-q at oKWi)KXx at 5~8ZdrQ
z;2E5agBS%ETrm<dyh5TPgd&ej{+Xm&w6#@?Pf`Do7fN6XO_%1#Giv&KC~u8pR at d1f
zP at QB*SyotL#L<4~{Xk#ezT9x5t$cG2IT?HFwz{JW<)mTzY}3LV_AK&`<6`lP at 8gq&
z!sS(M&Hs}Bp?-3#_*ntl;{)We2=cFz_nbdp+t;0EG$8-*f1+|wK92-}+Www`Djn>6
zb?~cqv;cvF#I<s0sPV#+Tni|OS_75s0!S=AAsV%W3Ku`}s419&kh>jwG%jCRF*-q@
znRGBRe<4Mo7>8+W)G{+uGdWe!-KDBE^4{Sp#Qap06q2n>wK584x12ur at Spz|COPrk
zltLw7yr3YT0%KK7s5c}MT~}Z6_4fo^3c8ZYbKHBy*d*VFdh~EYLikfRzlicf9ULfv
zX?S{_zzN1&4GNC5bmo5)^_}eaF>13y5tgql5uBFtbX);bZ at ekq8b#Y%R+h*!C5;95
z0`d>whm<<xAFYf&VPXE|ef^{YA^#xa(4Cm at 0TV(5(fPy`+ at Uy5S!Bt?{E=t%AW!x8
z5A4T{%8qj%eFl;lVvy3l0r3225$2vwTodHK<QB=fYphhlH&yM;IO-{4g;@tj0TLz1
ze{L!rP;ntkWYyp&R at Ru6b(Rc87S&7RQ=|>^v$nC3V&>t7I@|m_^d`8w%SXn<hY5mF
zTVL0-wgy55Z6P%)xxBR*#Kn(1Y6=}fdf-iwxI!h}4m|Xq?1evSG9bfvT*;0vGF7Q9
zCXL++<`aRpE-duD_^M;fn5+y>*MmVJejEu+N=#K1M}+uLAkQ$+?|R~>m)nulj099W
zP#k!f^aF#gCyr%MS4A3zeZdR$$lv~iOrnkBM?wpdq$LR%h_$s8AcMseorIt;z5<d0
zK<~rQ2(KM_d!9-`1x$j!;@3c!m+yWKy#wn4Zhu|@gdbxZZNIdw)iASwt12ua2-r4H
zSWted%N2Q<ET(9c6SwcOjFNYQKh|+mzjR}8U|?TvY5BQ>FTGZ3v-H3CYT4ijKosO(
z;IUWdt$+1B-Wcwhf}2J99r>@RVj}vN{A-HPf5_c??63cubszcfy?6=YXr;xHS6fT|
zBgN*B|E9%xC^1nyaC#GHqZT~zFUONiO_f6Q+Ptv=H%RN&DXuc~_AGt=oukA34KKH&
zB`qyzK}p%^oJEZB_B*<{xg0!k<Y7`vq;eSv<c{OcjnslXh)~>)KgL0>B`$z&ZyFs5
z#lIOJgCU$(R?L@=jR`{!Ip%WM&E17;TtIqclj+)8p{v6A$y5*=7J&H!{~I=bN=b<<
zkHT}&S(%BXH-h=J&dk8}2~8H>d$3PM<t5M`QSDv)CiwG7S_k$_!aMR0=M~C-YMK<Q
ziVk66enNb?L`e`$@E9mE2%UqJU>&I*8I|P<G#Z5C0mwPu*Du;08XVl0TXbAx<N5|z
z{f^5|Ye&XyljG)@IZ!%K4J_RGh`JKoby8*u@(+$3h=M5pINNd5F#jU}bYS8tR4IBd
zJ#HE5E3jEnr^#wj+pU0S2vD}JEQ6Uhv^G$#g4h`lILDJDi2x5F0SM&3|Jkb)cB~m6
zbDaIbMp9lb4jJShV}TAS`ih_sf3c^>u}4@?WR0!BbrNvtSnWSJf_Tu|?I?mB7Zo5B
zzL}YE^n{YjI68(y1_nb8%Illh<D>;+z~GHr+Xy*wXy|P74-3MXFU;-sde1;#(l$|k
zNc-j0z at j&g48f0AP+p4F%p8vL4 at G3%P`~(xz(ip>5eh`|k$;|ZMpiPDKY at m@umIft
zc(fqDLeC+EKfk1a_XUfCL`Ycm`0Eh9RSgbO3R4{ISJ)2^4eiT~EF>xh!sNg&s~ep_
zKB?Y978r^><tk7|xodDW%xUCgq1NKrVEz~6zpS_n`Io2BAtNJ!l^tR$%V2MT-JYf`
zQyMC$Lxh_YbZ+OVQ;CUDOm_`y>+nkyX^S0CQXuf0oTy(~)-~DZKl)r<Yl8gBarWOe
zFe at OK;yZ{P+zvk^HhfMVKK#gkQ6MJF|0K2im_kG1h424^8;UgcCi)5GARQgJs%~Kk
z1~Br?#e;$2!9bTYvl3xYSC*F at KY9T9=U(u-3r`6)0Gl}?QCeDGhf$33Lr{RQuYG<F
zMUI-V<mrn9aXdYu>f)FzvSj;$FsXnnS0X4s%>208u+0maTd_y{gM4uWu^cfA at mgVa
z at tjfqF-h>pVlv|q1%KuE+P^|$WO#UAZa8WL^H5V%J3Xx%o#YoWO-}R6f>G=`cMcCB
zcby{3B*V_oDab#1Fa95LHz?XG%>VLqIuNx7`Aq36<R309O>1j$tr-+hN^T}J{@v%#
zgM|hNL|N^+ks&zh9Z!<H1C$~v?vWwFn at B(zMrFs at f7bxb?0Wbi0Li-Ee&;^m^F5D0
zmXMwpMhPK*H!{Cc<=GO2!nu#wCjJF4=uXMhiyUz|_*eEwI7~rFsnT4sa-MsMBmREw
zC{zL<Ga-`EpcwTH at Ww>|)1bUC7vne2YU7O#OOS%k=e>aNtx%_e2f)5CkLOdMR2>_^
zJIbP|(yNev at voCL40IDPGt)a-R%B!#b at T|eaPOg^e$tGTIB6uh4Ny1c3QBXrPQ&Dn
z!>9Y1t3=jNs7REEkB<~b`*rrCBP08An|Svlko?R%<((a6!{Y+++Dq3Ve*glChk+Uv
z+;yrVdq at 7;$gpGnCs*ZP^553VyhI1w6eO_{%EZ-!{7Yg&0WRifib3PItgZGx`4nLq
zT%&N;qbf6fIi4hZ-9(?O`}-iEpjZF`Hge+~$Ju|^5X!jBFX2SZDk;vYGBiGZ#nF?n
zugA$FlGt$iun}Sds^mCJ10uojKo8gzsFyVJ at s}v`yh<F0Y`<ZBBQ-mPJo?tlPb2yM
z-mbX!j~w_LNw~cD)N<{3;!1FI1U4 at qA79VoXg&?|b7+i7`6Q*F{75KUASgc*W84mq
za`HU^LZGey1eKBYUWbt(ND&cml3CzIB>9xsI?OX9)1{`z2LyOZQxjNv2seZOBq<D0
z2lK-lrzps#>P=-&7oJZ8Rbq?s2Cuy;j`r*9$3{o@<u-NuE&;@b)%D^Uqh??Pgzeys
zcL^+FZ82j*;KN;~D{}?;?`jw1UsHhm6Q;~7Q=|Xj%ojSOON+Hd$UlxFg~dWnC1K?Z
zr5u!g>-zfe^DkuPrc(v1^~`y~VNjijPm;`Tg0n5B&)~#s-q_4HRImp9l!tuc*kiI%
z6 at jq$w8TRX{YR!o?YIi>sQ1Z3e2j`FcH~B?JIe&gCX@@}U}TUdl21U&IyWa?0&Idt
z0%hzrwg{66!hi7zP!j<@uF#SbXpT*g<g1l~FT6z2)qtpopjZjg3t%Z-EkMzLb|-6f
zX<13IWIHK8^F-O0{IRM4?I7x~TY!%>b+w6q6r%|=IHl`wBeNm-Y{XwEBT~C at 24)yu
zACw<1#O^4w3Z%qv&f8X23BFi{2Jjk{x3`Ex{c8L1v9W!*S!QSPWWqy;7rnT<4<5pS
z>$eCpiYZ{(`8nJ*)A-K(-%g5(Apg|#OpnilCb3P>|LK7Ivt%&O^ApQV=9KI-Ao?k?
zjC`X3c;xuYufng+($IGP5*|GAD8(nq%Vi!NY2H4gZ)xm*{u)TjrtLF7<sru;OJk*x
z#}7Re5gA;)unI!naTRWJ-;;*}gS>I<M at EN`>gDTk%=PG_(IH;o)?n1ck<xzgaYuj5
zNgVHx!e!;>$TdZ6k3Z$-d7RqQU at BlEB-<AWB$<VzHuLy+L~1hg1M-i0Kl;)u*hi$L
zFcb#Dj`EX8wMQd#d5eoB789x+ODYf@()r=gqvVtLM+sxKZEoPzLH=W6!a!)i3xxa!
zhxqX#m-qBw*TVoqUH}R|)`W4OACDQyWo3<aCV&1qSd>z`)o}~IPGe$xd|z%ExfxWB
zkQt36?dG?%18<(c`z2Yx$Ul36N8EL0QNB3;qjr*<3!4)LuOR<B{(m|k|A5<(e>hz;
zDk?Jz6!0}AWu>Yb8{0NFCttq-5fFNE`^C%1KfY`6NdgeHEiTztR;#)@p%TKOG5+4&
zpZJh*8$uon at G?cIa5?Z7$5khfAHWJmZ;47vj>*mhML^k8n9pHBXF|5l&K*7UFj*=A
zzHZ(g$AOvQb!j<$7PiJby{7A#7a-mb3-O7F2#kyh36Bo*@byIbL92mri&Rbiia^L*
zT7atx?@fAT6{byCWC$iI@=w at HQ)3_?i$#xuL|vP?J0GL!6FS760<OvBCtMEV$w8k1
zv>6s2fTEb177rL>^1Y8FNpW<@F3MLnwUGQpoi&^f at XX-q1Oj1OUIBMO=&-t at H9b4k
zalgM>V{&3*Uv8?JY63mkm6a_0nI<^&GA7=-jaD=H?nebBN`Q;pH3b=|ZHoS*wNdD>
z5a%|(IP#B at 1A?6n=>Ncbkbja}6H7F*vJ#j!lXKGa{R7B9)vkpK*E&_l<4 at XWri|Sk
zT!M<OvDY#28b^jLQ&S3KwRL6vr$1rRvLeI$l~!wTL<m=fNn^xop?C0dKk9PmA&7v0
zbW$ubJ|-9lrD=F*;N>^CD$wTyiak~>f=zI?VPlJTyvSted-*!HCtgR=(jiodOHGiZ
zCPJl-rq{5vM5ZU>V-zsqGqJ<qk63bqaGt=&h36+Nj?7$WyBe03F<0pWz5*Z+4kBI(
zoN4gGd$<V%T)YtzuirqoM?=G*3c>^@gCtqXXkZ%vRso123yhzD$_qm7OkPIA><p=P
zM3AwUQHQuS at n(P3{p9}q2i6Pb5D>!ol{$$ckDEjlfz at jC#x2lR%sCvPpd0f)C}rU5
zRI-4mpLnP!|I|9C1M**PHB$?<veC*%)ShCyElrVQoLy+!+M?PuL_mZuJD<EFz#)eE
z>64fuW!-5xdw~#b$HmLMDIEO&_0QY=7`lB at cAE25i79a~laNS=<m1~XuLtlCe>W^P
zDoPrKf*lm%OMk3geM=MU6SCs`vgQU4Z?|Y^6uc0uSt+?$gqTx{3Zx1-#saDc)+oBS
zzpp#7Hi2xUtvRp05s at y|si6gc2ZPBU%nwrp5Dt8~xRszH=e>qijATzxL!e~wCzLcd
zqn at GsH!aMAe;^-?WVh7JM1bOarPLBNTpR)6!O&l`K=70bv?}V1<MsjFxA5t=93=8Z
zbxY^_{ngr2`}7~V9^6^6wGLqrZ&9d)Iz2h~@*6mx$>HK4^SPk^ApZ?kWoZ%qJz at UW
zl`#Jk^E!0kZ^%EA52tatt%f9;Vw;uxzARNi-PYOmQ>Q>vLj=U{-u2Y84RbThq{5i$
zLVz^&>zfp9ubG}{ede0@*MH((s#NA0jgV(X#YHA&r4XSeC;(2I;@5b100y9eTc)Rn
zuHSMDn3%5!ltiIa at Z}p;*Rc07;Yo^*kV=wdndt=zP)Rafsl2L^RIkkP^5EoT==}w+
zj=JFZu>;ijAk7e)m*s#liR&@9`}=$1sK=9;o0nBqX9n{C#uc}Z;MclvnW-Lg30 at TL
z{m{XOS at Otap}ph($yAi8;784nrHS7VRKK>jm)uY65mpDn0nlY2 at LWP^58i8;ES2<m
z^d-j~{hE#G{rgW*Q)AyeJ at x*lEl)njT`qq1t*N)O=h+und69pP<m$_I=KoGe#+d(&
zJzbeuN$|~rod)yc<?o%AE`^Z~`PbD}N5+JMPsk`PkXPufXCH6h-d_CR??u%W;NH8h
zTm=r)w75WgpXhMo_SuTQKHKu@&wI4xb1Ph!mM4pj2w<Z;9I1=CmL|*0Z2J>ejvoA*
zxBF41ZpYx+%3S<Bl#Fk{*Q761)tWk=elDe`Kvtp8r(UGZTHM%J*wBz?v1C<LB&k#c
z0t7c{XIpu9S7=nIrhf>fz3c3`g};A=OrqEE?h^zNlpj)2GzCPs8dq0YR*I|3ajs%1
zv*dvo$5Md#gd(T7dXQ&k6}*}ek}v|zDd`E~*Go!`i%*J)Nl)Ryvc%8<Csobp2<n!p
zyJO+A?|37i;3kgXxSe0QF*7~0UpLFvxvm#p?Z5U~&r8?2$I%<_K=t2#=}A;j<eww*
zavfE8sNjQs%lwZbv__)Jj{J9DxDb+<fIG<8(LC_f6;RV8k!jjHl5?|)>+M|IdFIU0
zN1qY~MHqUYzecVf8WBoM_2?Kc9Z=rkx8DDG50;`Sq}794_VGU9<>~4l>_?$!hC1}<
zUnnXO6d8Kr=%dFDKf)0>LP=T&irjwTQgN*bwkW23 at sFnH%d<^pI7Z|ai^5WuXS0)5
zAf5^i at Fd7Zbtedsq^go+wW^}grZQG?7Cjtoyl!k53!3N{Iugmt at SLFh5cWd<Y1}-8
z{MU^P;wcp>Ahb1M>V`)I5-!AIvWyJDN|#+AFKeo2G#vgZS@=(rg<2##K`~%I)GsD*
zoL?lTI;{YEkfjJ$B}9qe?bqMW&dl!Dt#W!E&RczF2e^0cvG4hpAi2U7*|@j>jX6gY
zm3mP6glH*sf&60#uYLP}<^TKzI_$`Q3-XT_2#1WitvxX(qkM3PQypi{EPwnN#VMG|
z`d)Yid?{5MC<kEOI91x-4%Uu7KW~FV2eX}PCGpWjevz)Q at WAk>5VH8A$Oev!Ov*^6
z3 at dpq<P@}DcwB9(6ZnYw`tJX82_>2YWxi*iAE%BTKg^zL8Mu1Te at KVqBdlEP5qmtD
zG?>!yNuF>$3{g3-2RV9EgB7=D^*}!_NO at Ze>1lXAA##NLN at LKm3`r!RfOe*D-U3@*
z)z*ZzLy{UpB`Rcv#;SOEjxfF)H7*K0pQ40dr}=Z#+?@aP8^Q-1Y(I03KEKsAH#@gq
zw>Ww3)cc>H4|l)tD)-oN`6)PBA*Z6YMNV-(NAeAo$bWTj7n$jl!$T!l`Qm#Ro=J at D
zI(ME9=>OI2O(@l>@{&wl8E%=BJeg%}i&LFv&LaOfNsxa$FuYS#xX=%esyn+YN5|>#
zv$ss8JSHjDad~2TBBfHI!u=qpijxF`I2Fos%rEF5MYq&|=d78Yb#&g<@bYnY9EpsJ
zB78tjBNZqJ=9(s_I0fkhnh8Fiu1lBsh}DmHQ{Wp%B at r&c?cdh}jF9{Sbxk#P2bn3n
zBcuQeW!bCsxRp@;QGU28J13b6P2@*pmFv?r>a^@sd<EiP$BqCTURG13GL$3ypyPm`
z(-W8|o=@Z0nBz<S`i=Ry`Te>P at P(*K*U at fSUgI8zUwno1)z(v|NnOt>RB%LTG!*F6
z)jeHQ_!8v5qjm9<uSEHW1B4F9KS_>)QK>7=HJM3%&(f%E=bz+M=h<@<$c8Bq`KRy}
z^Z&@TSD?cx9T?{9UbYbL<G`31Awibu=W(oJX2CI<91_L)22Fc=)#!NrnTtmcJp?Tq
z-pkNX|LAy$qnmRhDqbRyMuY1J3G(*yaf4+G_ao`;^f`9o7<&R?lW*Llfn?$c0>cJq
z2Z^N+5}C`k*%`zh;fElUK7jKP^>S(%=Vx|oZ^Ma4b}*VhY78#ZjC?8qq{s|ac;4U&
zpg$XcA5frJxDe|>6eA$qa#CjRehF&?wJmtX#BRUUeqnxLzi#{-YMUiKF}k3}#63bn
z!tB?$vbyr=R~dOZ9D&RV`A7c&tB?Hi7R-J4sX||>Zfxi}e}N9 at KjgO}|1bf{tu~lR
z at +}teaS8JO!Cl<f#DK=%`<VHE>dkk=Q+wQ#{Y1521_9m>;_nVir(-|}89dyN9r){i
z_y_tt`q%#eQARu$)=*+w;o<%WIlgz?kJQ^@ql7f`GwFxW>PCe7$EL(5Xv&1JZ?XiM
z1s8W$cei7%#}8r+X&Y=VE{Bo-tgHlzV8T*DbO3NNj|B*Kd3$R~ZMA7+n5xxayz!1&
zC=QjM3EwFpT~kjd`O&olJ*B2f at O4-mNon!0wL88ub~I)$8?gg82Owe<iVS87W-qyB
zNofg=p1(<Baba=4ZZKA5Yt+#SMQ*v4dtCnP8_K2#OY-dxQ)L+(;k^LL3oS`iS33=~
zpy_u%gh&?oN13Ms@?TO_29TJnnY4<^n2c22$hi2py3U`Uzx^RhS;+s$&G(T1`S<UN
zr}nrvPfk(oltB<|SRlHuU3U!V>vqJ=<v{h)hODwYxlkz{Cm8`sH_*|f^isNxjlwbF
z2J0q(3c}o$jcqzpY!uHA?sup##A}(!kxXc&_(;t!9GFNZ$`6H*NJ|ILQNO%WQfKA`
z8M$$*X?Y1JC&w4wzl;6 at S6*y#96Ah&5IE|D^rX_^iBws7-O`FUIC}_`c$?@WB+hrV
z;_U$?HT}V7#M#k^SPL9If2+pQ;?h3e^4fd!BjcUVy<9dvW1Soat_%YeSOu`e+%;=7
z(?0V*Km`^8d>Rus-xcJ)p&t3C1M(05L;cFCvRDz4oRpx<b3CigbLVGo-65S2Nx&OV
zWNrD=Zyaa$(jdr%2UQ$_!tP!!2OOgXdAp?MQffMzBd}sQj?;i0mpY-aOC at I{v4>y~
zs?w&5Pl|nxyBwjxt3ixl>YY1|3)55M&|XLs1^fVjp<#BKI06t&@HzUXdI<E0<(1T$
zh_!JEGd6x6W(iCH>)3F7dXgkbiZhv)0*{!xhYR>9*eV=@(;yRpatSCrO#VI3Jdd at D
z at dX_&FG4-cNR9Q*oqwD5((=;&-4aT*)-#tno_VqM)On_$<dirlKA_iw?T5RD&j+Xg
z@^9$vhAFqarD62-n{us2AjUj*o({-A3%z}Lm2f8?(~V}wvqC|ddh>0f%*g-1Yi~6!
zEpC2y&vAAy4RT{a0*E8vT1RLdqe0jb;_Dg}6HYE9=z6jm9jAUu1D_{&hKj+VBS#)R
z>2}N~EEp&VX}nyE0uRp9Ix$9wEtAqk6=mk3LGl_faG3o2uD(nkvge=?gT>|Yy?bQ1
zC*)+{7MQ*DKKjqfXWvK at W2(o-oxcWdBIKX-g|q^IqnN$(ckYh8{XQ<Eoa|)6Ue29=
ztM>Bp%0AwjpL!m~o5H$U!`w2y3l{ge_dX<1MV_C at T^Cy|c_jtNe|29kIejPt!!Nx?
zc}L{G<Lo&)Apa1d+m}~>Oze6}$p6G^*LCf!oa%q|CiDNsKkn`7^YcF9Ho?6kUMtN=
zCNau+9ONI4Ac%%I807EneCo&B#L-}yh40AGjVjel$mWq@;1jF at d4)3UR at 4=Moh0wq
zFD;qJ#!!C9V&D>pVweg_YmETN;r34{$m1a18#c0I0IWKObu<uu3VATq!$LFm=DTFL
z5M09q15<%UWLe*K^!yDQE7*hkcZ*Gy;>?7)EkmcJ&M&|3)<5r2=LKe0?izFiK$<Fu
zbO!o~BIz3K16Qvh|HXED`{~nk5afSj!?v^xebBC_)Or5G=(Sh$9qous?<;Sj8?S#O
zjJfws22pLKKQ%+ep at 27oVRH-%{s$ksOt0k#pfbnt|F(fefIABV|Jcz39&Sey)g{Ow
z#xFBKP>?rsI8bD~^e9NEf^eHRpE|8=ZqPQ`LAM5n`seb36y)G510X~}1X!a1cCu=K
zc1E$h|F471BkdRAZ&_P|s)!0uYhQdvVHZ|3UOECX_h0gx99dmm+us{(2Hc==Wvg{_
z)5G&b-RLm6kf-k5<6yC^4qgI5{s#w0Ytl8?dY*n3P!JJbI at 1C9?>KeJiXE4iDL$nW
zo+rfy^Z(Fu&l6ljHR4Fq%JSCEnBv(z?xAZ=l;?<pK+XUWv}3^V0C%dxK=sd&h+uDU
z(T-C;(jYp_tPakh@!aEqG11;$Cjf1t4h=m04ETIJKPW%7!vi=fsYVJ`$G)&oGc~2L
zS%`cE1o?!72U0*8pf%nz5=hBj%+YFa`_JG0NN=yb|L<}klRu^ePEJ_qWJPjh9^@Md
z$b<<Xi at yJo-|EQP+WP+9N(M(2?LDNERJJvNLWBqrC*JZWUvk$fn^j({z$tAK>Ue5d
z^eGBSd0#XT^m#f6^1r=}{10D!QG7~Ak31$ey3St&7Y&4l`JW?A%gek|;;Fsw%@Y%S
zFI{JxKq%0?U0SaE>#vI=ljlfwVR)jHkJKvtDSs|5HWc_7l?WW2eS`fmOL_4_f_-rN
zkRJqH1NSR91bVu_3hG*$ArR<%;_1j(p*S5zF7pE_P at zVdEYJ1}_Gb=9s!4%#jOl3b
zW-%1 at a_!InYiomm3tdl6PaxJtogJbHj-J1HV|{&N-*572L$0|7)Gl{Qkw=uD=G9f&
z%>S_cS9Z3Uhlc=n0U at LMxxjO4vtbF+f%K)$)2Hi*ojrF|d`eKXiH)uc7r_Ws^mH at -
zbA)tw<X=3s_dVQnq|7r8!Cy)MK+fqrW>lCjvEU3<AqPYKPF5}m_wwT#j!+bv&P$ga
z-3UA(y-d-80iK5TCMtFT!U3oNt3U40+UXfAU*pgq;L;SeicCoePH~6w7Le%~5*9%I
zJGG5K3ax$hPsf;I1GEo5|KwEk{6x}!$U)!_fe)kv9!$}|hj#V<Z9i^oZ2mzuLO-^1
zm-CAi1mAV`TJ9S8hi!wj4$>9Dw*c;K**=|FQVeF2WEMIQ35C$WGCN1snD~?qJoG2A
zf&8NyRrK{D{~Y0kLjMs@?R_5`833iZI8MG%sJP)grX(VOB_J>~Ks<=s-}&tQZD4Y|
z`@nvjPsylv*4-Z9?}2bqp at 8=tt`fXqXoF1tFo1zL9liM;m%xmNnE=*k__a5Qc8P<4
z6h*g(z|DC~u}z&v7)p_I+tg(3#02GaC~QO&l7KSH0bJSlU-BCs+1%XvBW%%G8QkXN
zoxj7|(DnRFcr*A|WVK`|vdFnMkB*YBs;M)BbzxpDv|6>+8vHqA at U^V20^>*i#i#Vx
zL;oo@(0`g&mO-5X7~=@?zxn;Y`iLF&vX6=IBe7Q;A;8a#I(IOxI}b=XMe0hZS};?#
zU_@~~b$?qR;Y^CAioNqG63<P;!%)#8|9FN`s7TiZ<Y}FqHBU{G7l!kPWP!Z8I?^P`
z2p~#`^27Wu4#FFOB2+g%>O3ZGMnLl?&cfucZLF`Fn#1kG;t1oSq9_-#tX=(o^N(9w
zr~WwG at QrsNacVq!5s!4kxyO-z(lqp~O^~y}6iR9d6wRqc$^vU0RZdtYAV6T at CLoLa
zi%;p%zx^quu$VRh0&-p|;Rr3t<zvhGI`aRZo+OFtR3oyVe?lBk;1Z0FavnT#C;1l?
zhj?(;S?8X#K|wGlJ0C>(VfMz`;~(Hz)zVO;Rl(9DO#a=SEoaU#`Il2_?(wI^OL$Wt
z0&QGdr>FQF at LmdUjXK|XOxmEe$(j*pPY`}<4N0K%WU7f1gkR2I9Ju<@u1kIgAGf!*
z{wN#a-2!c~X?6kI&Ahl$P+OChm7;5ItQjB2WdUD`ePI#O8+dN>)p^iFGyj85hb?^P
zcmLN at ijpgMVgv}#gewOIfU@(k87=lZ<p04u$%r5i>X)Twr!Zje8 at B?zT?kb;4^9dU
zOor6z)s0Vc93V%{+Lm(%M>{bw8Za}SPsb4&z!IoZ1TBvchf-t^z0Hzma{CbZlD`0`
z1C>wgk0hhuks1l#-TK%6x<PO|sF8K!W6om+26&O%g4ql67@|%w8m}OK)FcuLV&bE-
z0nU{uo%{bz+NVyP{^M-RpMA?ukCFq`hHhX;X*Q*h;ofLR{(<<S0 at cmTkjRbv!-azU
zlgfm>Y#14V+}`n&fPvBOICB=tnySGe^dCO9U`BoS|MhWn{@IP?ukVrP&gFr=C#egT
zU7WvbsHjk1vcob9a>e6R3ft8|{0N$k+>@beuQ<+Py(-mt*7<on!?=L3Nx=odXG;*g
z`OLY}=Eln29!F=uLLi`^eM9rX6~^)A)fLqE`k5(59~wb{o=^dx`9Lhj3k9Vr2MID#
zH3<L`Xd?JGocsTN+S}V_{x};@|HQO-gnaVG+w~Wp$~RU+O at QRrOibW!0auT`2EAu~
zZ7s>&YhQk!k`_;4yUM{qpgy~vQv2yMa6VTJ3G&aW)~zjaXLj}3%g2~-KPuLdyaruW
zL~<g29 at y%f2lO~`7&<{h0EY2Nj%ORHA=q^8K$~<(7}zlU9mlC4h7%I)h139Dy#<jr
z_jSY7pt082mzMOsy(m8|=P!x<t&<Z(xU>ycz;9Fm77xNzg%6Vq0>_v^{vIF$g+C-q
z!&qRd$74)cfvKCfz at w5xM!md|H{Npe|6MgspFaD?+2A>$RPM^>-$MAj^5ysPstPJW
zp!w8Hj6>Ie{F~t&d;3maZ4K&c|CMLSW6f77kP5s&yPi_psck50s)mQrf6|HzAvs_D
z=H9M8d-*5{_r<plXn{dO!h-_5U3J4_&I6L&92w>tpA-uhqIg_ksB-Q=8ylIbL*$!_
z$I}WFp&`CXtr~P+m{dYGA~;N at YY2;ob2V&jQy0=SHtrY%P8fn*byJhj!C?h(+}sb%
zwX$J;Zt~{4VmAQTNqKTYV?d at cmsnVdiTefl@|qy_F$ofC`!*~tIL7?FHO`zl_s7}b
zx=+u`*``u$do$`vj$X^X195=^jT$TD&l-n^Cf at s4ZZ;FC$GJf^2Y6jb1x?-U&QB>#
zUEI34RoPNsH9SJ$RE5ddw!Mw~JNMaRo1Dj_oD9GZqi@||D5wj`R at gNrOer|_;}Rq!
zVR1 at 3v&3TI+y`hh2C3r+2?Bn;?n3&>M_+Id*`}SDm(2>;u)bN^+DbUX(HSCi5*tzf
zD4 at v`Te>S;g0YV#LyS!977-D^yANY6L;<9?kX{FS|FPqTunv%aX|fbtG>N5-F at J}R
zvuDr$aW)X1+^p7WCR26upZDP9<0Coj`1-2)`jCI%zN2s5hBc0gE&BSpba at sl1uj8Y
z&YYhTc$nt3HMolnqhrXws<{Pqh$45+efHSSROVuRgZ2 at KtZfZ`-mZ`W?HaS7zTVa4
z5J^}PX;h3finG8WLL-92Zt$fb{A}V!fHx>e*}3UBBqOsjf!|}Lwx8OD!iC$f7#@N3
z4&1flPhcqVg49lo%M}?kIIgEMg(AJ@(&JNazXweyb35hpyuB&Fmx1pzIV}Ng- at dY@
zZ0)3&EYp7L_G#2e$AG`j#<_DB{x}=tGrFmHcut7b4qd&LTA0th7gkr8Mn?@pgGI)w
z%HHmQm#^nkSHs0eQQ(xEG~~Z^V}leA=ck0_2;c#(OT*YWf&_jN`CtCxd*?oTY{MWy
z6f88ro#N5d%#Fy(_Vsk}a6PnZSeR^!o0=q$ki<vB&~osxzxhW+gv3PBjVu5R(#c!z
z)24!aWJDmAFSmo|HX$>GX&gu!9#nl>OVgS2padyP?L4@~Tv^@OHuK?Uc#3cZbBgI5
zZBVIICCPIVv(vM6Wqy7hN}U?bCnGl<_kP3TVsXzPC8c27W{RMC4t2Dh$NU|(&!4~e
zhuZpHzCq}A{o8xxjrRDQOzu6uybMk=<LD^WwJN$gx}SL=v$7ImXDvLgiLn3|TQ}CB
z=0*k_4+`2GvSG{X>&U~!85kZF+zwv)i|-vB9!LY_Um6!d4X^k_2?Kgkgt}CH|HydV
zl{P!VADtu(4E7Z}BqmCzxQE-5kKqwP2!9l%T?=I>FdT`LgreAhgM~PvZhk at 4)KuQv
z>pU`ySoEyL{@o#};uLi;#K}J>JSeR&KU=58eM*p;s4>N)$P|Vth;ERAVjYKu2Y~-1
z=<Gb^@3Vd3!lggd*7C%&WH3>m6y~d_<akxzpqv!QA;HN{vb?^%4W95+ogM~DQ*Squ
zYF1I+=0EOPMh00j#0LebT3AekZF&mY9K+ZIKR2XL$p6yk|9G%Zvbd?4lF*@4!KUDa
zEQ4%!ACF`A{|Rpo7Y|QYj+4C}E|s`@ouo~9cfcD^KEjrc at UuWj65}9n1J at A~535_|
z_#1CQ;8{g_S66pwTidQ-3o6QhI*h;bfvQ}CADFYK^hh|B?=m#%jM9?8KraeJvYsOR
z6c at n5Y2P{%pOMVWj|&LNhc$H9n7_}D7cV~khuWB>Np*prP;Jl!MTJ!^tN|^k8t8`)
zq}XC6pRw`O8L3LmGa>Q?<qnQ_<R6bW>0RQ3N>Sv5N+N1UhfxghJ)%f}kVO6$KmF#x
zKFQot6@{unyFuE37add{tp57{)83gsHF>RZ{C~Q?-0AIY>jEm9Kv+V61PCD^dqT(p
z0Rn`mAOZpsWEDkRAfV{=O7Cs!)h;dwf@@u>#k$wE)!MuDewf^0GFqL^)CGLc%rozt
zocH9sZ@%;9yyraUdA{Glk!P;*-XH(4Eb7Ck=ta~o`RKi<*kvfWqhdx7PF(ylm^qoK
z=NYt(Bf|t_684Etl2M%z9xacSPyPXyHJn9}ee&oQdmRn11KDSHuQ;`3>J%AsxP9{7
zu6&0rIVpB!QY;#>I6MtD18yR;#hDSYX%2%l;X|-yMRqu^%U>P&Qc6agGkmaXL&JDM
zmo8sgGrAv-P<3xlU1+4FaUI&eO at AE=1LALMPE(|qJ;l)42R62n;uo$b*NKM`vS>W#
zft^Fl6W|!>IQaSKgQu?+Nv1vB6Vq`1knjb)1MJQ8&ywI*ud;aY`yYJxr|>C*!vgp6
z#)F55?I%+}V>ct-!Mq(360`%%RxM&rBs<r`fYi{iYA_VpA&XoR<&c7+68{gL9}2`U
zILqCHk1EtEl4VjdQV>>S=7Y+>tbp}Ezp5Z_cGx!;)Q5&S4xGCf+2?#Ne|7k%qzvC3
ztQ~)O_!Q}%QI6X~aLoETI_ic;ysa$^iS at hpgaN^cK>-r=>Xyb5e>vfB;d&MYC?wWw
zY$FD^X2%fg-%PcVhYhFVD at PJh7JT^Z&l0G~|1MWwz$M}`(qD2R{6$a>GWaJX#=?1`
z_j)`VJ892TomT*VoQ$`C*{ZAR?KK7hr~p6Hm8-gp9X%BN__OeuNLHj*wKTF2=35C#
zaZIr?HMyh)klTg+HRC)_yF6Royl0es1oUA^BMM!+^Gu)f`Qzau$0TLEvYD>eZQWA8
zZD8!@Uy3(&&l20Vw$z43aDWqavt}^V at agAZvgO1{j*S0M;_SKmC^U0D43tWjzak+9
z?mid{{M&c3nr7j- at xVb`C9fRGn*Ob|gM$Qcsx?YHjj3{3uGRGNt60iBaKw?w#=pQ;
zTN`d{FLm$$qf9{%4lbarr_WXI43%|tKhqToApA|5LW9&pgoUTHY3y$-Y5DHxy~inN
z!P~9Km-2Ect}Zt?ZOoLCQ&*;@C$U{<ud5 at 7f@Jw;`kdz<j~pGBnkhZAYCgQLw_mud
z4XokkyVljO9t!!odtCK(Y-t6 at r>X2aeu5)Ri7bBi-2I_#Y(F1U<gy%tHfq^ogv-eh
ztKPnov|olq5(kEFKcvB{wX94T9ja!9)KgVCa$8jeyj2OA8P8uOORq)4kpx5EhGtg2
zSw at 4ay>qS^8{bg3DY8<T&olV1-TPNpTadHMRxFKAijyhQkUE7#oy<of*0!F%LVT>d
zvIHtThIcZ&993oVJf*h0Oaa at qS?lnXus`St_~PQ1qdowV5Ja;DfZ*WV6&Fh3=&|Ec
zv%0a*TK4VpZXQ5$B>dZLHPv`BEBm%MYFERn*?i~-_1#CtIhx!>YkE6J?>vMZnvaP|
zu{lQFYzSGIljpx`+m7L at H<1x-`}?OuH|~Xdd$q at SMaGgPe<q9#@)Hu?+3L+wWxzTp
z&rX-IJ+?A7&s2!SDz12IncG at fj^`Gp>&SaR3z%m<O`gO(@3?UJ<A42PZD@>a5H9lv
z!NX7d!_uga_TGJzn48NaiZ7DsuQ2Gf)qa}skXxDayNgU{Cz&+4P at n`V_dWhME%heN
z^L at _$nq%V=QnRij<1W8%O=tvh_V8~n^tgO|n~4autq#DhS-0<F>QQy)2vaB?e*C5E
z8uO9Yz0#mflP6n>jD!vQwr<}%Ih9eMCOjT*VYs(fd(6(1Esu$!PbCWhZH~sMRT~O4
z7K6sDSE`k8BqGd#Tm at oyD4h|>#-kW{1F?y5OyFk~;War7{@k{v${*Pv$812Qh)b|v
zKyoyvSkZKRc7WH7$6t<U(a7zG;r7NNqsd`H;DaY060P)XIRe(myb>kLOChq)1ymj%
zpOl(a23zG>>12V0uH6p*_DrqX6KpTv+;0j5oJ~!T98wPf8b{&~dJi96vuB at obu}MT
zGSf138aBLOkwq^awp&uL<OOPiC%0eye{bPFU)7O(e7cH``Y<jr*1vg6R%S|8Rtn2l
zd3s`6Y66pdwcAAlmc7<h0fdJluPaw(5Y)#Qo|Tu4i=OHF$gTS{h)ax1lqIC3CZwdq
zvpbfq%z)Jp*L~Ocl)K8y-vq at Xejsj7*P5Dehmb;}Yl%yi+;-^VOM3d?$RcE#Bn3pq
zBQLtJ%EynNkeVTY62CHL+xc(E=^MWFApG+Ue!pvDXMTlG>+{*xw@?XL{r;bRfkYSL
z+`#ZCq~BDg5^kBFOTdG<$bbv6bkmlGp`B?OH8Ir#SFXP%BuP$;OHQEk*tqEB%NDcx
zc;-TE;StMCE?dv>sqm=`wF;#G@>WQ^N=}y*I34(BV6Tc!h=VvnWi}AEW(m}=acl?#
zn9T5wAft!xvg=_ibwdlotbWt+$#8FE5F6|U!Z4uA at UC4&rQ2T)X#h|Dz@?dRn+1BD
zn3$5FRSoWf;)#&;!I>K``uT02e98+#XE$va8{>_@@JLG;bUfJ#g;LJ&$kf->)yqae
zN`a<!+csDbU)0s_te45+&84n*SpxmU#YJQMe_<erPf3i9kIBf%gs_wu2x9a!NL6Jj
za<bq^MDT?icET^U9v5WJ%+DilL+Nm!HKuYDQ3=lp32_u~^FsWELzsyTlbmq-LZbTJ
zc6(I?a=`5WQc05U$el-Me*_PG8E&(1kCT(r5;R0_OB>c^JKb>6yy)kX9Y(%Pfu)d9
zw4{3z#BsEQSUE<PNL&O_#}<dt*3yP*4E6q=u1#kyy{N0-U!Sc^hqRo25>?qe|M)^<
z;-Z&CFUrcxD%;R%EB9!4smWHRWu at cYl`B$G(-JLC3+f*EuHueEU+@>+dggrOZ77TE
zOO}2>4e2dxg;QWhn3)m}KYwlB2>s_Tr|0KF+T&bRU0l1W(3rnzV%l0)2TMS4rPt)N
zM)tOV%O_4wO3!qrg6Np&>VfT}4}N;l&(Ak#&;?_$$-`i2Xd>Zdu4QJPk}_nWx;1NS
zH*ca`*0R29`rKTD*HJ)SB}bh#*E3-l_+~3QJ8?ylr?Vn98m|-!^Yjc%hKrIH9HP~<
zhxrYX!?`a;7MSBP^B<bILFM{gBe~i<{xwj<vl~)SWF<Kcy?bwaJ6fm+4abw=Tk608
zg{F37CkwiKV(OGMt+=bN{oognyAEEz8;L-+qqv~DhMHWBlGG<vK`yKaeUnoJ2Fx{M
z!;5nN>90A$hs at Erx`xQQxdyMJpmkV{PJ6zdL0Ls&0 at 89du#0#c(1}McTa=U>$C%H^
zk3*iTSGEUjZaW1>nTw&DLiCEINtyD<8-wbwD%eW&f~m$&6dyCCGUS}l_8Qy?w>i-l
zB;B`vb*!SfF*!96rTf_om+Feh9^QfS)bwd-TIb}cwgU%^4l~JLa|k4=l)AubQ+;E&
z#!>EJ6{&GM_doe>V`ymf{*!RMB0rZx-_$I0Z2fR#e!l+D;qcklbj&TXnJc_R0U<-?
zAKGQ~6r-Q0(W{yEq-Lfo^0HNWt;Xr#>i(`y=zJ+Kn8SR6&f`j1d`6xs&sn at YAqF`-
zPQhmdy)6;Z&gK?o`<tgum8`4db-+f3JTsLizr4E_a2&qUbe$G1IKAE2^vS{3^wZvA
zx6>!jNYm03sr>Mok-a;weLsglj;GYruzv1i at 5FR+T9V#d%8<Br+t$60{uw@%maC%B
zd31s!3PC$&ZfR}Cz}~UBFTSP%Jhb#|D0Qn18mrIyt5+#o-vE;jr=YVyw`ljh$FZ@|
zY!HwdAWKUkdY>HuRy{RHepGk>VV2>cHbCqv(F^R1D2WMg3!)B5DBwqnKOh6tS>vk-
z?fTVgy#tjePo0&lHGKBDx2d6SXsG|vcVQ6pb at k@P<~cw%e0qRz`a*9B<Z1Z5_dIwq
zcZvcs)4T5e*fhF_)wHr8&)C!&dG<AxNiCu0G`*f<e3~qLl_gP&2>vved3?cEf)J?0
zW5fK1H&nQR+F6{C7!!-G*rNBH)#apl;tNg9NMWhVl%Bv>#(4<Oi<(<Y+k&WfkqC+7
zm+XM>*Wcmesnh2qZua)>-ZPh0?b&ZxzrorPboC9)0a9qz at peE<ogE*%e<T9Woua_=
zAG&!z(AT@|+neZbMV at -CWmdTQQcvV1P^Cw2G|=DAvrRpTY&h_HCZ;3Xgv-TMWzhQ&
z=fe`lWY;5qzzUZfmj1IB3HC-1S!LAaX>$<>d;YucWX<U_UrXGqRX#(B%eT3|YG`-)
zj^Ri&a$N52<5RgdOV9Wu_3$J_o(+C}c-y6`#eUzGi!+h+Z=hUYHInd7<~z)X`XZBW
zW3U%>@6uu}P39VOUeDh{VTp^_SATCWO9Q1rhsZ^F(>j(9P#r3)w%GXPrmD*4zxB at 7
zoH=`5*ozQ=W4WfcN3NYEbfOK;qR5tOM|P7u%Oey#G7(w-#>&bZg<6+~-l(m-gjv0%
zyacjwo4;~tOf=7Pe8Tehl`EF5h~j=o<cH=Zc;H~kYQM^E!-v0f=BC46X(@HSvAdn0
z7dm_Hg0Pn$U?{e5R%h06+%$PIvL(^Tb%R4{qqb^bM`ZmQE_+&AZPh+sR~OgC!<pwO
zvLJTg_ZOD9bq*^E0>r10M8FKcY42WWj(Uzw5;f;*55D31oTr!j`r=t(FGj%I(GkXn
zZG!rtp^owCNVsZ8cJtBGHxOC*w#t at OtH|Zy*+%?2N24MI-rKaU?a)^QF!Y@~>uqWF
z)CP1GeZ&60y{$W(hu1xK{*thlBjD at XLId1HDATcP@bboQ{Vajp7GIgcWv>XfbsU`_
zw412u_4_}5>o+z(Z{X_--w69H2$Zz7(X4*#li$)<v{@(!oWF2c*l$F at T(|Z&wiL}4
z3IZ1{UJ)h`kSqchFMTUaARt);E`2j2Odudx1ira^RhU3PvItzh@|`e&fMgN4^6fQY
z0s-kFFmwHiFoA$n5%~7%4PgQS$s#cG-A!Qv0m&k8_1Z0A0s+Y)@ZI&>!UO`6Mc~?v
zJHiA4l11S9&F_T?1SE^Vjazqx2?QjIz|C9tgb4&Bi@>eh_k{@rq>I3v2e*U?1f+_<
z?e8B769`Bafjf5}2@?oN7J={Y{UA&rAXx<N-v3dUKtQqx+<Wj?m_R_X2;6`8M3_K8
zvIsnQ^ph}wfMgMP_`_3S0s-kF at Z--9g$V?tiom1C{}d(=kSqc}Jo%R}fq-NY`0=NI
d3lj)P7J<i4|07HwAXx;SJpHdQfq-NY_#X%t%ZLB~

literal 0
HcmV?d00001

diff --git a/utests/kernels/compiler_julia_ref.bmp b/utests/kernels/compiler_julia_ref.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..2082a1e9b568636fabc6e9b9fc3a7abcbf2e131a
GIT binary patch
literal 196662
zcmeFa1$bLan&&<9?d}J=JG(o~%sos!GtGTD;3Q^7S(as4l0jyc*)lUTGjn1maT14_
znVIP(7xev(PtO^(oZEdn_D%N_D^JBwojO&ebLzZR^}_#s>m94F|J;B1IpN>e`TrL}
z=I6!#KmT*TAzblKyf5a(zrXn3f6kIDBd}se;Ftc#&smaX1Xk<_{PO?&c}ud4z=|D#
zU-^aq%aSZ3uwqBxSAXHZSdwJ~R_qA;+W-2mmSh=$6*~gI{=fg5C0Ryb#g4#l{Gb2Z
zk}M;zVn^UNfARmZB+Ce_+!6St|Mxd7$ua^fbp(Fvm;XOYvW&or9f9BemH%!@mJwL7
zBk()F`adkmG6E}h1b+9|{--5bMqtH`!0-L~FIbXg1Xk<_{QhtJFH5qFz=|D#Klsi6
zZAq39Sg|AUhrjiIEXgtgD|ZBb`xpPvk}M;zQb*vAe*2d!$ua^fb_D+TcYfKDEF-XD
zN8nF>_g5^*G6E}h1pf5*e$|pJBd}se;Lm>l*DT300xNa|{`?Pq-I6RLuwqBxFaGd1
zEXgtgD|Q6_@{fMgk}M;zVn^U>fBajPWEp{#I|6_5+h4OJ%LuI05%{Y={T)kM`Uv>R
z-9z>9OYg_h!y6ufzy7n|wWKAEKw5i8<?QB?-G}=gzFcBgmgaAG1pemFf6tPZG6La=
zQTpOMdg#6PJS;m)?5g4PrG&!V+JncI(zB)Q8yJDV{fpnXq}LvSqOCickDo3Z9}{~>
zYG@?m?Yus at xutSuCVOi0Yxitv_-01n@BZ=+Ea~+|Kob(+?YK5LG{D2dF{8bmPKI9^
ztB;+{sI5|~eM|Noqa>@l=k+?bw0bim at b_Q)LrZ$?5lAY?PA<+*sjcq4`?TZc!|cgT
zuGSx<*43s}l%$VulFM8(o104J_q}%imWE&T2>ip>{>YMEV+4F$*1I~bA9?t3Zd-Hn
zu~YS at FV~&ARJQw|hts->&0CX;^8(T{G(rCUx}da)+1Kdb(&WvIz(4-gA6wFo7y+fq
zH!df${nWW>qtVdaE!8aS at AI@@<>R;}Cf87N{9JfLTi4xZjpuLpdD{2gdQdSrNzIbc
z(WYakTQ1#_T3IqbYa{SafBh$x^hG0}i;qaiH;8xpAHFQzvAbs9A at R~-?K>f%0kLTb
zrIS;Xl<hs-bn0To;nTXPU?v46?zSJTd;eR>1EUB9ViU{XpT!aQn?L<0OM2A^csZ<z
zNQ|0z{yF30;p at p?n0#@pyzEzn#6^@%PNkI>^<23r7KY~-JncTJ+qPY+_NBzv-G=6+
zyY`QNZWJs04E}Z9 at IJ38ceiER@^M=0Vf&Gn{c3-IPno-|LgvgXc-VaK%ExxG{=nUC
z70JVXwY%+yUe4=YS?y=P at Sp$o&n)ScBTzCqmDNz2SXw;%<kO8tWBY|`RO`O=Xy{{O
zSafJsTkG^^#*E5RsclMkzsz+*UQd at k-#}r2!lQU_py9;%38PV}^D~lxVv`DUoi==s
zQd6al4v#cs6pW5dEj(w{rcGLn+}mNb!rL*Wyx7mn!N+l}m)%EB)*pGgT5CfC<FeBe
z@(kf|;Yx+OpSOdj?MKWS@<F;lKW|45+YjAsKKL1V%`fv9|MGW#Zb^$rAS_0g+uoX3
zRwCVkj0YdR6ff;of7jb_jhpoc?MIGD70CFy+tzH`ZfK|>uavuXo;urh at y4XlXj<o|
zoA+|E;sGGkgq)0yQ)gW^eBiSFJyQAPL{N~wI#4D(UWhKx+hL7NDXZSHmAT;SX6@^`
zLAq;}VL=E`xchq8QXZR`tnhK7ty!I)&C9R<{a;v;*$9Nhgf$&Hn$yy_#b`9W#V)`l
z41>SFm)v!Ozn6XW+;*u#@BNSA{Ch54i%N{5Fepfo*VEm9|M|q{Kh%j-|IKF_4jjQ$
zo!rpi<+Ls|GB~5AvUqr?VtP8KttBQkfep*YWrL at aRiM&K=IzvQ{H*<&@B6vikW|4c
zDBR!2$=7wgE-6;4Q~S%^Q~};X6X$i(i&W2UX4b<sQIg-?sg%2U+I}eA{n^a?>p%RZ
zC7F$YM(dYVU)^}<m|1!Asq<r>8GRg9$K__mro<)Xqz&A9Ak~3jls=B7`;X@|*HZ`=
z)OqH@$TQ>EOQTfhr<L(?*$|zUXutl0nDnHPhtJ2q_>uI5ISQFm`NX(N;jRf*+O7G1
zfXs<kmifBncebllK2Ug2NI-zvPZ{W|P<lru#jx`GdD>z4uwVba%lh~8yE^>69c0ey
zc-f?U1N9M?ep)a7V}JMG{_$&;WI6)+(!%Pkb0J}YriD_z_3GV_P*wTHO?5lwvuZ1(
zax#Yg!9afxxtn$UwryNiZJZvy|77AbBgAG}?ak-4ks<tOOlI=<bK|V>M?Fl-*(<@(
zx{gaXW6~02Zq}MWAFv!D at lhI;H&Y<Ht1F|UL#vhh%bYbDIg3D8d}L6V8asG)bA!s?
zQ|@8wX8pdupSwz{U=taC`iZ-v6+bObfj9r+U*;G8{h$8Il1xVc#@^q at aq#+W3SDeh
zcU`$vI<rNppzj|k8y)%3$8W}HjED)9%E`!F)))8p_<7g}dFORb>)zF-CSx at idto%K
z_J;F59(Md9N~+<<FWWEP_ at ZAAjtPs<$A;<?T&zFzle=kjnux44e_t1MfVZdpY8$Kf
z#VG)sgB}9pu5fzn0%FhEtxb{1v1}Ge`B_21O2h;tVpT|Bd{(l|X>Fj=)6Mpy;1H$4
z+d-xD`l1K;X_bHDpa0sDq!B=mf$0jZCMDteI2e91!_STVk3S>h;cma?-EYAB!v;sC
z#5e5NAvGi;bGGWccqP!!O`DN{&LlWg6_l33G at 1Hb=;Wu8B2tq=Vj~)lpZVy6 at 3vgH
z at kP%d^ROF!__1MlOfGZby$T2VdoEoUE3<SjOo3HgG6j5H*4eE3ZeDu}vJX2#baGtN
z=}W^egcq!wnH6V&O6kcIKno=Iv=7tA`ns$~R*K2Xj?2(9Ymg4U=rMjO<=_05zp*4~
z1hyHCJr}P+|IXGQQW&0^7 at M2be*TI!MepNj?`*ru$H^)(ISw+AyRM&j_)Ka at hV`v@
zXfR0Qo4a|QJX%C;Y@|T{pBYW7y|H{)dJ1|TUk^K_pBthmx=NT9)H43Qt|)V)$1t?F
z*;&2o<K+;Yt}h-L2GJqja(7(E+{x<hM#$9!%0T*gdOG>JTeIusbazK5L)hz7es0yf
z_ca|pR=aa|{y=|ZdU8Q;PgrbNcuXkbKf8dpla;&k2C7ln!+uptNj_76r;>jCr=R)y
z-+t4Q{$m9AI;?Dcm#z*y`82D&ExV&l92_^hRd59!j#e^0Xkv<1<&9L>f8(y{&;<r~
z)y&PMmlc-oJI0zBl at wKX;3)hyn}}((H<MTTd)DpTUAg-JKi7Bvx%8tst<6eb7v3Ty
zTm#46e*UVXi>)?Xo7K|XdG4}U&DCyAU~oWkWm)I7dmc{fLla||L29KZ){VsMRJJ*>
z8UivI>}68tQYI!{uP?|B4)%w4@^V=1?d2qMT%(jZc{#3)&q at i9yU0E4q{=_t%(wpa
z?<`3if%K{}c>9XUiLm4ZO{h97Axat<g|Dl-{c3HPM&W7KeDFv at ramz%*;W@>aqy&6
z2c<{*v6JPa!v*vEksRx{ZSTHz2l_{eD%E)d8E=;jNZkH%SI9dwToW7;02|NBj}k`u
z^^)NsjatT~kHebqG=1r&8R?d%yIn{^w2SR3b!cFEZB_B;Xw|kI4Tq1T+ZSjU?k><r
z=Cnqv&ujWRTd7svQgbPjT3(z{Ri+Eqpe|;PR8CE at 9|Q*}0+gO1Iu&EZvq_bIikWZ!
z+uvJ~Gy+{`FNB7xxpcC62lK92j)`BX^x|)NeQkP0F@??h4j5`H8qVKnI(tQG>+fkd
zdjDy5eRajYBPu`F-t(6RA3TTu*=qbjKT^%FE)!!&k4T72sIJZ!9KqD(<GR7yd7YP|
z6%XHf_$VtjhFyML6CKW9L0g4--@{gV9+{t~x6D<k_S09C7LATpZkZeZ_y-SfXsp#m
zXt4H1Bt*gcMI}Vi3Pw at kY0Jw>J(y;)TN;ycGngGPU1$|(5~y%zRZ(l?6#9Ao=kJ=f
zdc*ne{QEyxk~jh~mvt<0oySk6)>bE%7D~h7=k4U{X|Ggx)b82uukf&X_ZzJ0@#zVb
zN6#V`OVw0z7l5EK`sl{9SK$^mzA%nF{cMxbh)f~X`ARde`t%>D^1=12{q*^^<EQ&?
z-XHte*mvVz&xI=y at ewdEO?&pCin00VJ4|qAG*lWn3R{Jj{rm5H)7i<|YW2H8`h?V`
zro5ry{yUG&o|bhR$RDb$m<8rvybEtn23gpwvUrINJt9`erU at 5BLnLVOQOR+dAVrW?
z&S<}~)tfB*?!W(|B{2e_5n5fiIwCfdJcO~?XcULV-TDIzogQ|pBK0u{aoCU4ey*&U
zmD5w at dkzg^-umPRH3JoHP3N!YwKTL|z8w~+t=_T)J_P;e_W$VWD;?+5%2Jt|P4DIF
ztw&GxKl&s*J=yH%9If63!^7^tzJN|LBup*$b(Q-#W75)U{ov|(YfpzYN|g-R-_vQG
zS#$9cIa(!m#o#4(u~Pech=uU;NJE%KUfCqGt{OlfY!X}$X0jlypRdze%*{ZF*hf-|
za$ni%jTL_H8~<cUjKF at Qv1(=}ue})q5PCdmOz?AIMMaO1)7I?kypA0|BrZ}{Ro8at
zNa6f`WLr2KD*L%@IASz5p1RO^^jPbayBQV5{a0>GekKUNI~FQP9ex#=lCjZ at nu^-(
z^97UB!;fC at 6XH{ezvbbumTgNLCP*|9DGA!RC{S%k>v(PgW=PD>)~I}ZeOyrLg4t%i
z^RnvT0Cc^~6tkzztg8wRM!B^nr7#;yhj<reh786pv&zyXUUJC707|{>R}bF2SJd0Z
zJ`x at u5grxH6j1qlNHyPl=KJ6LXG>xPSOMW`;?fexw;nwqjS1R9J{)TBru~PMUiLMc
zH)pgohec?HZ{DptE;z+NX;fCYZOCn^YdLqN<I;`hOSft_&yGEOj^<xn|E1o(icCRY
zZ|(LS9jDHfZk*}9biL#H{gEf1ia!M9tJL!Fq?m+)?6lgd?Dn?&{{F(@;hesH!M24Y
z>uI0XP at i000zo41vM(^-!Ek!otwQ8ygFtYQdpnvwHbbHCumKCieit0%C*FdwN4!OJ
zGOcNvubrEV)<>iKM*s;4Q34d<Zb*a{MH#!QY0WpBf9G5OVo8XBd<D77y6)3weLWqd
z0f7>LM56P at t7YTo#)6L4iN`O%gGI)KqSaxwAH4qzPD!j^F*;m-_(aErYf2x7?vtnM
zj+_KhOoIQBI$ZWlOhz)q-+%p1WV*h7?}4P6>iPpm#9#4OctZKWIkMYYO2)=&w$C>o
zKHhQea_^0MI5JQNJ-jY5NFjF}y!$w#x(pTt!#AiNR7JS9A?mVC0Cj^Y0vBic<N_|j
zaZN&2GHj1nt`6`LI`p(Nt!9=-e8wD%We_n0K>+ES3c(RteiwV0S>-o&`R=#BZb_`_
zaQ;|!7zz}3(trSN1PjNvPAM&*@En+j<ank at a$aU)?@-gp^UX(3pxzPdpD-G0_aE-K
zc-_x!JxV|P1qATJOF{mXI$ZV)08Y#ht`2L<rZ=Lip?~BNSKE(*!nLgVhSuiN$w}r#
z*M+O#A2P-^W{ypX&tSb_mAA?dcn`8nP^gMRWcIxN0rWW`k--X?i=el(V+z;@hie5@
zlFNGO;jtj713Z;7XSkQJaE(~*=enMS9l=McW|qM?7#gYy at b_Q~$Zn{GWAt=b3-nZw
z2%N2w3v<lsznRPTzVok^gm_!Iak_M9fT8HWc1s!%VV75Vqai698>J8d87 at NMZk=6Q
znL9Jrc<eO11k3xJ(I_^lnA_2L=|=0`y{M9UZ{COb2mee3sl(;XgvEuo96Cy$rPCWb
z&tIuKe4_it18;X*mi?5f@`Ay^+WFlq_ at mE04~UJbI&dttyH9+84OSocs{K=1T2uRn
zBjdw?`mg`+JBYooC0v4VgE@!KVd66d0Q0j-`#7&>-IksovS%gNg|Uj;iiL>7WaRGF
zQk}&afD at 5%VQ at kCnjuFpeL&@5PmfNDqAP8vYH^dVyyUz8_TGw5y6DhNpBkg$!%-nh
zqk-}~Fu+^k<A~b4>(m*_W0PZQw(STDSD!Z;OXv62A3TP_2l199wkn1WFJAAx_Y5Nu
ztP%8|Tvja5|5q@=dA&VwHNsOB<W_FohL=tG_FdriBh!-7>g$RpCSZhmZ$9X}{Ujtg
zvHA2RO+u{n7;ZKndb`<z_VH7AL?%W7R{-tl<KqHo!QEjkWSQC2fTjo;fwh_x;O7<`
zrbaFXI3aezuz-j_UI_GamAYjLK*q7D at lwg+44hJ^PQ~1zbGCq_+;r+hCq=`5g0fg#
z|En%}|9k(w!V?St{O8!?7ww0S#Al~VqrrDaF$jDM4K_?Z<xTVR=<_oxiY^$9)d!B&
z?mgIb^Wppg{fn*ghlaW?-y{%XtUh{l!E18p&LegQsn2E1l#Y*!z2yxIw4b|Dy7#cF
zt1b4~U|nEXOeos^@YpbvoalL2Y+1Ug?6~edZ+AO?rFUSE5(Wu*U+h69h(GJK_<!j%
z7_+c~Y1Oi<rUrao(Dh(AMmtJGFYH#{PHXW6qg85IA#<E at 3y;vi?}`1;%HPWl4obXy
z<zMu)&_CS*H9-nsuEAO5b+*T6Bq30vfO=)CudeWe?|);3Cv22KY8jB8v3rjj_w18K
z1GWcK5uZM}z(6595_~V2V67ZwDWJ;g`CUD?A4C7F at M0@NXJ_}-TYdLGhW_EkS^t?Y
zQisc!iAajUjfD;)(vpB at YqSbDmLPOEfbN2oWI`i at K=|Or8IzWnT3!USgN#3(EYLX$
z-t^@7f?N<jnaz!cj`oy>23CI7^T_N>xbdKvFc={}rB8Zw1t?b5e5L^EO?)E!WiDs~
zPzdwWA;E~tYtZ>f?-d#vfGRbmI8Q2hWk##<MRCNyA}>cLL<&yycB|sjlK|I+MFq#E
zC%v-OS5)}nJKtR43H?U(#_6K&4l>eEcsj3F`Z|l|(Za3{%7OQ1H`bA9-nFaa{8fZs
z;#~FKegyM_gex{oZ>)#qfc{&LpPqavAfKgMQqRkh0irDSqx5qRP<lb<sbxileLeL%
zcXgk?Jo4b#;Oz(P$4}MHZKE)~x;!p3B{C^GxwIgyvXmVG_*upLZqp|LF9b>%e17Y>
z%SfY0ItT*(8bxAW7V3Ry9#RMPj~<Mzgc(8G(6GP&nIkjBv>&CnJ&Q?1Oo(ZrSw5$|
z6;25!8a5`Hm-P3-YEnlKpCdF_ht2ALrI#PQ`>hq8qEq5Jj-JSEu4fgMh5~m#I92#t
z%$-fUc2mxDsM)fGOzply1GgX6?LS<)aZ~TDha&xp4U;R&`)@z$fAFH~{FTX11>`gI
zFZH=x8R)0y-ZOf`<s>dErEY#_aC|hjwt}&Vg4u2EcB_5dY~(&pDDV|>H-MlxEGTf!
zlDn6Vj^Os5kei7*3)(Y#p759uwg3u2Ch!+hjLu5))A&avMWY9R8-&}@1}R8P2X+hU
zghy!QF6&c^bEU3ein6N9VC<!mS7y*PLG5e-1zqh_PzB2Te4MdC0KU~>h>s3=Wvj2E
zaMgR?Udf3?58i&S(HP+4m|0&V4F$_xP>`Pj1$dy((DhrC!wZRb8x9>Ce()@JV6b>>
ztmnpkk^aS7i6w=7Hy at x~@4a$!>Qm#yCj$NZ`gus*E=z{92IvPBW%2NE`TQPDWC)>$
zyj?f=`8fIexdjHw at XR6_Nk~Kx`$Bj^qyWf|k3_2(q*H6)XB1w{g1qidU<?sS(HObJ
zr(z2L$$-6sOE_~#k&M2))X>}jh!o;y3NR7a0+;~ohCw09i0EMCR at fe~2mZ#VB~*-!
zNS9xfDH-TfD?N|`Kw{%AnpTpJa2*teC}GV)gz)l34VS%q_50sh$w^>z-K_mRZJ7n#
z=PpV^!Ms3B<8M?#1Qbp={D62jZ(tDKJIaurKQPdB^)`1g0f at Ka3v+vK-0!;esQ>1@
zsZWf<Pd|hH1GN59w at c6Dbhh{1d!`ETYCCZ{e{90t+m&@5RzFG~n~<HZFUrM!0ZJje
zrHKd(sNBn^rmAK)S8d)>v1t>=0z*razBoTTF`8RR1vy%+LamnLx-LH00?2<oc_dl>
zG7I=ijG*|eRMF=Vj08L(Vl at h0B!ckh;K|1y!v%@W#lI5|o{&MAW?Hy74=6|*3=?G4
zd+uUZO?gUL5&mMD054#KMAJfqU)<!YC|UEtcUN*6z4H)M12jBz?WQyih+_cM*^Z(A
z<brI<S^D((Sz?8p-rnK+PxV!mxjo$&xkUOGZ^h*q(Eqewy+d4xi5JG<yN{R}7@?$|
zm!7GZnFY+#ar%6GSt(0B{5dXHz_zP*?rA%7k^XJgyz3+P2#$+PC at n6X*&J70U9 at RS
z-H}t=LRyy|0J|8nGwc(J9dw(70K)PMOONF at EII`Fl$uNjv3}{qgn*ZGvld(ce4VMl
z(4aC34D at B2fZNHaERlLfIZR&RZX=bvGK2XT$OOta2D#_Vx!B}b%ncq+Rv?8yiYDe|
zzOvP_7q0#Adn-Ayju~ny2CiJk1}cq%(%%c6KMW5ax3H_7az1 at _Q=M1=waLJZyM6&O
zyu*@93Q+#AcZj!emh8X|b at Bp;g0W|xi{NL_L{iU7%*1A;7H!_fdQLxyxf$&z&r~9V
zU%S(M=2GXiyA--QSmC-Albw;<(-TospVHV^KDVRw%%$2xCvZks{OcIb;&U=!^H5bW
z1qgm3?1pIPKm1;1WeEyNGH%WrVoFOAveTe>01Rkpf`a|=UO`Njd)l#LWBEl`z^35o
zu$sU2YrZG*aVZ(-UHo%qCFne1x7Y%X8jYybN=AkQ)p8~Ry<r_7c8Xd3uj10`!|$);
zlvP{F0uBumv0oYoLC{nC3K$hX*S-svDaQa*y>X*dq3_x)@>#9TMMHydI4ttwt(ff0
zmXl}Wa<hi+J_d&gMu at vZw;xIkmzaV10ftH^;Ofh<wVl0~KQh{W?sDIq$AeEk^K`Ke
zjSWw!D6QSON3BmvuC1xqy1nh}rG(1L_A?iM#81N!0Zs-f2Lw7iG6?aO(MU9;D8qtK
z0=U|)a<*Az_2GBe5Sbm2J(&OSSRKoB{>T_wP;@?OfA{9o7lnQt*Wz*G;jjj{b!dnZ
zkGUW5yZB1OWWrPRU%Vn#Lkb89RRSx*aSRdrN3>nGTOYk+wNevE2E1M1e;9$L-Fu{Q
z;1lz$;r`j#drqID9K=`8+4E8b#9Q)NElorLV)2L0#app?*$oGe=5}=s-Fwo1=aESN
z2m(^WC1zlF=%Hw!AHZ{1svei~ro+cEH22?o=H+Tb0F%td`myJqM_1KE88XUdx3ru%
zGy1WyVs^`q{ap+M1aFjiI$-R>SB1SVNF#T#`3MqqwOdWb-s;`h^hA}yjV%Bl7S#U8
zzif-un>M0401;Z$(<%N6idF$WXSWKt6n+G_00*jlU-<w4p>e0dFBmIWbb<hfMm>u-
z1O20ULj-tbtK}_Rx9Z&$n{>JW-W>}jfOd8PX&l(%QGjF0<nPpz7nFlqk?xY|I(Lb`
zS<Q`YM^8ZB(7AXwzA&$L&w<jZY51So9rHk=DTfOZ?=JCge4YW9c2<7GSWQGoR%=W3
z_WAzX4{_A;a9$skmPok8fcV(z{YT-=ipD1z4<9FZQDRX(s;VFR)A%Z~xD(s9pr;FB
zMl+Mz(G?XR1}U!l;M*nBo3v57yv{b31r$DT{$Ld%;=+VDZ>}3yMo=ImWv80{3eGre
zi);i)Nf=fD5t`nW^5Er|NA!uFEj%iSaxjOu31`<=VavmXS*rOJW!A5LZ-pl;UuXiQ
zK>!JZQi$)uEJ(;mqFnB_AwE4(sz8RohWrI2gI^)Q2|l!VH?gFsa@%~}u08#?9*jTz
zbox^x)>U8zrfpw4Ph_5WLt1`MS9EcazO1-pVxr^hC8g54;mqZj%oIYGC?a%8wY4c-
zy*WKS_4^LCow*QOlt23PvoHCJ2m+`){R4d9N#Mz`8bka{{D|lfL;zQ(4Gwl|qv9hF
zTG;}a2B3!U9SczTgaj*eIu!~Zd at 2dFDE(YOfVa1+b)-I)lF;Z-uvG*FlJ1HbZJ-Qp
zpM4~?I8Q7=BH%}vgZK+47v-AOU-rulYu;b6$=}0<y?dw87?TpmAjrHN@%%+4jyDG@
zKc672G at o)-r}WYS(@{e3<Pz|}(5?HU51#{p5bq|Hmy~UpYdmnc=jv_t1ybS22=s5-
z_Vx0ZB5>x#>`Qa_oSe>%`aS#km8Me{h}%;#K0f-=7-7h4I(;#@s-k+wPB@>MBd7Xq
z-2IY2XJhqVWMKh<Etpc2pQvJVky^~SZZ0;EH_$kl%+<@=CAlaE=AYRC3xqo`h;bA+
zp<!w=*bXA1f{1#D91Yt85DuV-2q{EPL8V_jI)ZcnJ7oGu*$p*JC?sz76r3;E1-PqH
z$?{qo(F-An5k$hY{<7z-*M6{)6A~`3pV!s|7!ryi55oWfVADbQQ#RO72^l<JOh*aS
zF_(t6*6~LlkKBJU^4uuiO{yp>-Z;~I<V5S4i!A=Q%#>}Kf&VdW`+E7%sE~r5?&gDs
zLsODcD$6)@2EcR6sq;~(37oPt`0zz&N at 7}bb6~KlY~v<`0+^z at -Fs2hewm*m=83+w
zotp8vnQQ at 3`WUu9G+=B5K}m7YKRsvn^klTPh3908n7{=V$R{E$983|>qy^ZUhwaeS
z8(0$Id6)vkhlz|0ReC#c&;U*ZbPk}DznGZa9M+mX6?od<U?qw;eh&Fstb^GlDlUvX
zhBnj6%bvHf`fw#D_*h=Q^Ta7o=uKy at l4sco3GoL87U1ImV^0YyTjj*K=_obs-Or_=
zy>;^WXDIo{KM|^tG-29;@u}vcCt2|(J{G`lwY&FCfBu8Jrak<mdAJ>1MQF9K__x>Z
z-49<4Q^7H0JvZ-D9+{QiaN=BEUtitc11$c at 6(vLWo_?8Mk@<PS>f5Y+&wj&4jt=X9
z07a!GL5G0Ti2R?^Py?RF$#K2)ns;p0zGH8*IwC%t&?Tq{P=~?-VGhIHfce6>g-2?U
zdC>`byV`*80aD0%t_YOl|BJE+vo*0(cqA}*A(27Sv!Q1Lf(Vl-AdbB3Dd*S`8e#}T
z2L%@-)%+?lw(CAx$!YNF4VX{#pANRG3FSwSOg=pvsbHOVw?1q%GB_YrS`QpF9VK99
zTyg}==%bH^QFT7~M7&F=wCurQ01^O%Pyr$T5=7m!;cMrM2KvOd$>qgZquNiMR|Wd!
zcC-<jl=9HT*p&J@&=*y6I~ooiL0vz5{~4VBkNr7Mxu>qM2)il)ubkGu at 38K@SVNkR
zt2NsnTpuQex~*H{QsWSRl))-ZbXaI|0&02g!2&_6Xn~jliFNhC3qWyVU+5B|Ia#1`
z(<a6c#i`@k?-Nj$0ExKRAmv6TL~_YfA>^tw3i0uXB%f7NK at 1kS9ku}ALzL%tv|xkd
zTd*%A7*c=ii at bIPyY;J9azgn4w-1sBbtU6~BQWYvU at a<NXN}T>kPZ~GxQ*PtZ#qi#
zJ9l%Lm~X)G7O<ssD<UH$t*fVc_x?fjpEvGh4-7RQKO^0J?MzyAMP5f6&2_QiIP=!-
z+EcZ2Pg+&^;O&RwFN7x~hFkHL?fAUZ?b(k5TFcQBFhZ~VIcQs@@&O10L#2xe<1a`d
z_-$V=2VC9Z-klxR!J at DOg3Q6l#X77E3ucMN%O)m2m(V~}2ahB6!v6?{upmVw60x^q
zdU+8;hp|BJ>&A9~^~%$6ZR3s|2m;ZGkwpIFpcxFu$Bjl%6NFgd*--U^ffgS!E;SyM
zDTaW)^A~Y4q7b$RPXvPLp#=qQ`pS1%mO}dtt5<B|BUaDOqVX=AoE8TmJT5H2*BMv~
z3~gjg2<tyu!5DoE+ELR{f)D4ie0my15PXhwD=H@|C^mvP`Te&ZqM0n+y1n`2IqB|e
zXADgZV%x;R+ at j&(%$6pmUgN$4Jy&m0uGA>vN{TpWn?Qv`=%S8TZu)beK*JNGKz;)0
z&u(qb at 56U&v}|e`BN~~4fqrzkiA8z3_(+An7Ycl|F at -&yAf+`bFT2&>gB3UJEfk*@
zcaB3^&%A*C*$aq>#U8=X=_ at M`0Z>(8iDUH$)c6q)j4%Rt6K8jK&3tZT${=EJXe=FK
zKK8&~ykRw(Po!zqe*qU7te_;jsU8Ew>}N(@Vob^4fa$L<bKZK5{Yp(pXPDiIWGIaQ
zn>&mvh8Q;Y_|$mH`N|1dDN+S7gZ`fk6xe>^OzT-8FD7+TLZChgzc3czp@$#W9y|&%
zLAv|enauiX+6HPB8TGZqBn(f8f at piL+!8y4=?V-{6;Di7Y~9vz<u(9}jJ8(kx3KC)
zrRy;Y=XQ0#IMwW!M?FP!xPd#5oSdu!!h;)6Uy7@(m+I&C_ORUmqGnm}_jW`MHPlsQ
zR+UN>$i$?^qxpwH3iNl!brHW93I(fym)&U=3hOmcespRA0U^~I+-MxwbT}Ck-!bBj
z?lKw$@0+X?LP{nT=EP>`kz%m2p)W#}wCRNr8Cd)+N{F+{w_wVMC11r~2b;AkHVGQe
zn#%gQIYvOKRq{8dy^U|d`p;L(tSF`gxh%CL&uoame^SzZ at +?tzVD-hjzTQsG>)uPq
z%>trRckt-YqZh5`uZ1PYo3;H(FXQvGQ6<p|B|kE6;p9eaRXEr5Ub`)J6`qlr)z((B
zai(I&uB!RnoIy`H^ahFyJ&e1}hmfD4r?+&|W^B{A35%_Kd|a_0*Bm{Q+TKZthpSC?
zd#lTa_Z+R>S at -@oQB;EJK{CpyF4yN~utZ=278~+6wX_gJF!V3%l~KWLnkactma-|F
zH5yMX`~*`#<?F<z0}6sU=<8-9JQBbXA>!f&5ZYKSRBB&^uM6Sz!2Gb<V|L+-B;{q6
z^!M;9Sk2&_P*77JxP|oV%bRhuwOW}eI64&1TqLaV2Tukbd at K$E<IneE<x$C;3Oidt
zvav^?qc$6&v8SI>(sS|J!1X&s*Ze_SUsqtFoCK6RJzKSN at 8IK48c$!$9T+fc`;%U#
zRh11bJRUZ$qOoys!c7MbH6J-H_M=56O^7C3XJ&67GG<~<27%ymTbl~HJMsJ~=<Xoo
zLS{`xY+54I0q<J)5F$CadpLw;q*fd};bOlAft161T{gTA_{VA8JC1AL;dIL&oeB#G
zP2w_=KsZB(sYSU6tsDm?{w~fkfEIA|1+JM^S^&e3$N*df=7%^iVjTq7%+^*;$qb1N
zXCr|4nF7Q=!M6e^#n}BPa7PVCPNEJHVpc>23qf(+t-->bT<8JLA9(>hQer_4hTxxc
z+`eReC%bhkGkMs3)N}eQe9o~27nRNn*H~wue-sx?0hXNuIJqA^3yWJmGHf<PD0V36
zI&*&b-V<0I@|>uP{|G3uvhlHe at Wuy^QCNHUWaH73Vq1K&G@*fbY>Ag&{x2F%Du+ae
zW;E7Erze59gZP<rVh`%*Fnw(eVXV?COMxzwPfb?M%n}i+etsvu%uV|bv>ZADNTcn@
z at ut1|IolV$TEnU<bH>c=<+z3u9$jrdL}QPjO5k*?w_YyR?oR7~@QE(E^o&CaypvY#
zLm)V$THu{vfv|Z&t0aJeNjd3A3cBz>E}0I}tD)FoBvBnB0^rpc;P1%{g883(_9-)z
zYRSd<oE?ToJiHLwhk&nhw?1PulEh8~P!I;_)I?B5Qn$;SakgK-0uzf8B*a%hzrpJl
z4h`}bQ5WS;VrCMy8$c1@*fS<KW1w%?zTIqya)*W~so%8+*l^RS^W-_`6Nn4Sx~6>x
z3N~%wq(};jX6M?@Um at cg8VmzKASqldx%~18Klh}{a_Yxsr)PC^pcwDFcDrHkeyImy
z>2T6SL2q~Y<YeWh87LpPHRw})T`ikJ^NBN3O);}>-ACOQuM!KrsILdUnza}04GNzC
zje<~bz%|t&DiG9!fQXFMp at e~50skNz at +fmcK}0wVCX0jBJLu{$0i*LrV&%M7LWxon
z1|B%H=`W(dkHDopB`zpB3{Nzy0D$X!oUK^l!=po3-V^c-IBDYlOFxXiaMr5AP3i#)
z0y-%CD|4Faq{8LRxHxQBfvNlQ4Tid6Vw at F5Fxf8*0(xd_UY*B|Pe1#FO&n8B=dDNZ
zLO?*xhNx&_Dyy-sdTv|U+<e{9Gu#C*z>11$gYa3IeFN>6ZcvDGV%OC>Wa6u;<nFeF
zyX1H{F0~1<{QWWse=e3{Y9^Hy!DHjbRk?Xf at AbQ4TOyWZ)>f9H$w9E)KHquaDlWCq
zRboy$ae6ar%86>2T9S|aj?tE9gYckUnU at 0|!GvE9iP7OKpWD{#=V^~eJYJ1VVFG6*
zm6b&2WDz?QwLDf}tl{|Qrh<G3;2 at WEeliztHyg%k0k<ifZ3GZ*<0r=WOg$(OBm!1@
z>D8Du^>bTcpGF@%#c~%MrU7NjF3FinM1er202cul<YvEya9B_~Vl_M!%$wK)Uk8%`
z+99TDOiH}e?J{Ou9jsSi0-cMJzkc^#ygabZh$Db6c3N>R%Rc)re at 9*#+pph`Ns592
zHXEYy&2#0OW@>isF4?@TU~U(8ecf=6T|+c9O>RDM)jF@<p|EP-5sa{8a!1A>FhZ<j
zZU7jMhTN>fFS-Qn$y5!F3e`pHaC@)bwxeopyI2|a7^6VZ&`|OCIJz1RohL{gsi3Em
zI2BpAKsME}!R0hJ<h8dV3sld{aBN50;iI)%=Q69y3GKzQpWD}0KD(u6*Iw8pND=5h
zL=KbFaP*W~t6<%R$iepbxZ4u)G^42jK8KLGz@%}pWTA%Phu{fX!WO_msEDx;us$cP
zdU{HHNcIlEQ7D3h6O`1xoIy<ga6t%4YymJ=$O6=a-Nb_oCjxBBY%7?9O9%TXCoUNX
zBK!*&ST+~2&*lB==4i9h66)yA)8{hE3h+{_ot+V1pL5U4$4Bcn&mw=Z@<aa|0mj$F
z9E0-TY=~-h at 2}ahv*FP3l<q!QXg6n8eg}j*VDsO%cS!B-E#9`9CMun_^YTqyLR9&-
zoh-k2>7pt`(u_!qHtX<<F45R<D>6-=QeF(KlyHk2)JO?f8r*wxy1O`3F~74dtF9V}
zGNY;#`fopWV)E%H|JfmD_PJUE#SD$nVcSiuD$l_^;pRQ~wE7+M-RCZ$lhj29BNvNJ
z*w?(VJ!$+1sEY+0YDAz$w~s$#VrdcbwcN`=;pgsZPxLAu_E07WDp1tOh`{IysK4>~
zr!Y3ek)uPf6R?z^qsc?_(P>E$@sYrR*a9$wvAHA^<dlz(VS3<{Va&%upB^@BD9B&p
z^B|6atmes4nTjRL``6vccBQ4U$1gdYB8A{iL4G)Ei?7cv+;Qwg>)w4Rs9Bn#N=rGt
z3voE5z_56Hnopc1_)p*6r{R?~=onERf)OHACff3_H2t^MZz!7EMXT`4w7$DfkXvgH
z93^rB#LtR{hhRiv)Z#uDmk_ZbB0ZUMmd%3xe(1J*W|m9hIplVB;E)UJ0#^VlQZqX{
z{Zeo=uGqK{rIyqc>p4;<t0<N)!Z={CYdd~w{Q2jc at C8nr10oGQJz`}n8hux8B$wpF
z#pTZJ#>(c5^NU)B3KYlZjPfG2!ks8dY<!u*1li!{=MKk$_Q2oU9{Nu-q!JVhxVV6h
zmb*JMChqn~)|voM;ejKy>L7o3u$BXdV$zb>2oRJAz`|0)^Y2-BVETf^5=3ARo7j}t
z=H0u+2ZR3iVKPXJj at HLW@3o8>4`;g-nBe(Ymq>u0d404uoDDJk{4)ria0Fhy?qPX(
zeYYQB1x_o;TRc9vz327!We<(|rKUsA?k?6az25e#AcJT_Iwquy(J5NR78kXgyIPDZ
z%JH*I5QIdSbAAhe<>EdUm&9hKD7F5oAZ2PLd({A|J#`2Y3+_6-qJ#yXC9!4yf%MKU
z?5&2DMiy$Y)>1!2FUP4l-jHf&s%Ku{BR^v_md)?Q90o!)AXpWfXOJqBp~S`JLyr7z
zJ$?#D7=k6jBBJDkMA;CvDlc52saAjNOngqJr^^Oh6nQBK9 at Py1a()hfA}#?_fxd9H
zexDv1w{I7JqHJgYQv!Lwbx6~K(Cx4W`!DQ0j2r>0xrOD04TT<%8bBV34N*|A9C6e#
zzWJO^C>Ac~Ul)6im6RBE0y?4D2Hp at 9=q<iG`Uk`=b&wLwAth~BZYv`~dv85}^CXg?
z+4x}D at 3?%cXnfo-Fyt4khI2q|$A^byx`0BXAg6F}FsiYQR)G;A0fF+G`P~@8KpBCq
zXM=$I66pU+jCnzSUq*8yz|_LQ0X7k!)WrNj;lqhSbVbZ|&KItj+YW{&y`~bqD;_su
zx86=H`yTK}_^^}=54RmVx$!e2w+y|#^adZ5SXCJq8Yn%3v+ZiIYPb(0B+F!O!SPXe
z{+91Kj8_W~5%_<!I#@)2cS=n{W5S{mBL#8Q-3I5-{Pq^48<EvVT=kW^BVu#@Z=g;C
z7L-=eM41lPRBfCFT*3O!UVw7x5cU@!5H9v?1g<t8G5F|O;h=CFNHU~~zs01$vl0m!
z{-4OY(gQ44#?#edMI}5;iI4+s-*Mf$u&Ls^6Xc&g7x!(Pc_~5q<8Sx1yG)SX|4~O8
zrNrX=(75ob?epo~y&)NC03<Nn2$7Hjya+jqeTuNmx|&8$AGe(Tfuzzx7Tb=icfp1c
zR~(5FF#-I5)Z359<PQ$PXtDUG)mC##b#g}+zEQY<CFN(0-g}%>T~#tU1$&cJoKO5%
zjB#RDoK?Z=#APPuv^3Uj-vK<E(;jQ~9!w}J35$zBeZ;I8diX-9Z2J+=GG?xD8eOQ0
zz at Zwrl#qassF1M4=-`+zVL=w$TLPhc!l9#|VVCrBw-bK|(F5imjXh at p0ANE(g4;m^
z(1ix1H8loc^YyU9h8vTUi7E+ at zYwaWs~wf;L5@*Kh(sV_EfNPDy(lq=0G)Df2y==V
zgnTXj3c6@^;iT*|woW8&v2Ypxdbv5Sw1nM?H4s)od~v{&u$TF5&De}WLzNVkZl2?B
z=cVhYL)rSx#wVdLH><6ML*YRV7&<#LT3cE6*`|@*P=nw|4x3FAS%AD^eh*7GYRT41
zx6mT8P9|g~L;o06&HDVJORzDVOr26)nbkJ{W&nj}@jxGyWAbyNGm^_ at Hj_6r*4OXa
zE%w0fK>TM=Ohx^@I5oiVumUHQ6~~tp1#10)T(at-?SxfB*<La{h#-vc4y%vx4ignS
z3l at alt2a3>qwVwsR$VY@#KG%3e~IJcwE<qt3$#Y`2CN6UK;VCXePRMghyVf?8se{#
zIl?LNFo44~IyE>7PLqi*$eDinQhY*Wb9A``xn;!=%wfDsN<4pwybbc19Rw9FTL5!G
ztY6sI%iLk~@XY~kEfy~0UvGD(6_s$@K)<KY%S6i|zBm?17FDA5K`mklfi%gqo;n|_
z at dX}cHa_s-oQ;b!6gXa%dQkT<Iax&TW3_}0M)6oRJ4+K)q|VRJqiXBi;N2&vJ(0E9
z0{Gnp`q!KFx%iS0Z3K?P^q)|aZ|LfT@=>tVZQIV7s#L}(R=sU|&DO1KXN1jR?WK?-
zs$oJ>O7hDm#(OSY7W-631S6P3_8d`~(_D|kPV2cV+=2qxM8e`D@!#yZaZjvl_Lrjs
z3On1F*R0sWPT}Lwbm%A!lJHjoUZ}YNwImV~#97$gfsTmy at DQ*d^Sav5RZ>X-m<<q~
z>?!Of;P)aEA}Hsa5hQw40jPkOu!z_c@)Lv%LZHT=0R1QDXCY0C&x02#TL44B@*<Wj
z<6j>S=arNAh}eTT<PPRJyRBJ#aZb1ctk^ieqv602u_S+Vj0}!c<3vP1b<u2ms0IR=
zpb8kI at M*>UHm$Cj!|&KT;?fe)y>r$ZO~MSB$O6rWk4?NZvT>uwz^4X4JJXF=Qf7TF
zzKqMsfWt|xu3+_s?Z-0Jw09qvH)=vlc)>IrIGm81L7YQQRHP7QLm>XrLe8%TwoM6m
zOH_`y*0vrz1S-3H%N(GEk-Lw$MR=dVTlf3#KcoNQM;}x2MG5s6L_YJ0kr{+pP^^|#
zT at Dt)`onKS`A{r-9{^F1pYVZzM#xZ2q4ZXV2f;7lZon=el=!;x7n}yiXd+)nr^d6?
z6KjZoqLeci_$#<w1j>-b0NuqTMN>jT7ut2~1m|>M$P-JJ at vqF&W#y#78+X7iqEA3a
zfy$Z}=R^nOGJHVV4<5paNgRrt{(drG>D$g;Za#a(Y<&7|J;?3u0@#K_VpdaqY*tEs
zUoUDRwrp&mIV}zFQ8bCItRx at _8R#D`<KD9u=pPvw-UH6Ttk1=lpp;phG5+RHOv9W&
z{J?(1YO%Qn@}We_sVcA8I!7T!Rfr#rP{q_F0t*X1G)6?DsTanQ&2ya0+jmiT3xs0C
z0T19khBRC?$t?a|vl2|Yf*;EGC^U>&P`Zm}F-N8fKtav|Q+i+}VU>n%c at oTFVl{=r
z(_ig}-2tExQyB0nn5$q8zaXmK*aT0DAI*Xy)QYnS#3t;aAc#-_F=9yHVj+lhBxS at 6
zfJV{-ELX<Y%XLL1kYM1!!2gJE4L8eK%>Ht>>F1xK4&?|K%AtS$ww^qT4@=elqh{li
zKR(I1TIp?VAk$*f_4u3gp1S}y3wskUNS#fMyZ6!r?g(LX^vTO<ltLLvP(F!r)?~a(
z%=%n>sjsSl_+#_4b+KVsYzb5d)<~?zqMAQAh)O at Fy#*;o=5EU=6{zm9Ou<}%#vFU_
zl$uac|D~&{h){iHIkU3&;#CS!-4nbKB at Dou#Xq{Z1Ue){724hGx+>HKW)(2bq8dV7
z85W^UFr=X4Vv4c*$UN-DnpldlS?Eg&(2`NY>8q#+uotjXp!O74AWlSeTqDGPSfE2_
z9!D7XA5cRWV#Gqs5WrE;;_?6(JH*1}`YZQ#TRDlZ4?wp7o;Ju|d~59QXvo=NL9Mg-
zj@@}cxuL6zzc{dPm~Z~f+<He_(;=$dxwjqJFeM&v0+_D!x*DJ?$bjJCVQg~STkwvj
zK57}bWkR5kN3F-VgZ|0Gho_Ylns)fge8K2=RAve$06c$*FVuVGhFA at t8d2bMQ6Z@n
zCAeWy$R($sg7Zf`K62+FB^*v&IW?&YRu$nCFfoqEiKZx_q)6s!J^8{2{Bq#Nomc+o
z;zAZ=6f)o_kdLrKnN@(36tE3Gj{2PRfy>tfi-63DebCkVL#Za7k4#wDCw4Ik;eQgd
zQ?dNw!bZ$$;bZ}1WH)PW2_eumz6j>fKSBhol-P+jP?#)mm~1hqK&76SCFAGgzCsdi
zdV;b}?OQf7T)lOx_|^bU5^~aWn`#^O9SHDtKzyS-v%QVK9NmivET*v)mk`q-s at Z=;
z8xw}$$rp at CPl7l#YFVJt3uPb<<N00fct=v75Iuw_!5XUwkY)DtvV%kaesVWLC}&oc
znRfU^d8NW5F*kGU(Z>Kyr8+p&aI8Rlb{cS?ktd&kxd+u>H#awU^KSjAOEaGu+m9R-
zD;M^3^<Tc8-O*0uTUA5|$E<U_QQzh3{a0^Ez5Un>0|L835FT*&#5p&s5B~%I&*}lY
z-m-Te6M=XFY^K-*QK(9l!MOo)W(z=(i*W%vHM%LHN5-Tj at Kmrsj1ndQVx<ysmmL8=
zG9i3KxK``|`p5Xo9?DEa%OrKXEE$E&V}&HJF+FE5 at Uk%f;wy7J1egQ_E6hohV1F0O
z;XTOY_V;&Pzb6kwU$_b%Sn(ErUHoLKxaj1HQUJqz?ghoBjPD3}qj&^_4}Yal`xQ at 4
z4cvPwwt^cM#0_s}Ur&2qr?uG))lzS-%%C|8iHoFi*O?3Xy*+r at OVtp%30Iy}lm`IG
z-FZXF(7?deo6JEtH?}ab8fuox=_yVJVEZVUoGh7`<j at uZSOrIhKx0x@UnYZ4&uYw(
zUhFAqg<H?5v!<;8HsC0S&Y!!4NP>HTJ_$_0vBE$vq?)`AkUy2u6B7f4a5!w2LMBWt
zL=$q|z|w at +LJ9PrURD5|gZV+05qrQKmRy{NQ2?x+ARR0(#rk?GRz{lP(9+>SW&x~%
z_{z2OJ30IaY%R(+N>E&g<w=!gWO4_Gx^F%x*|r<{X9W{)A<%I;Kx}3*@upP4#K^Kk
zs}GhEGXeAuT)C*fujAyIsO(HIa@{xXagGuVQMyJaMnOnEZ1m1n9Y>Fey?xPNBwU2w
zis|XhwpJGZ!i}?1O{~Dgyh^F6fF^s+T^zpiuyS%jaK&2qh_G`YJX;SPAr1+kWgOe1
zGgHvYa+e?v!e;ane(R*1G(j7apEZ8}G3w3wEn7@`z%&fSVkO5>ms0`>6u>15!tCcp
z5Voc at LA?s0&at!mdJ-}PJuubK!6E`+V#6HIF3hbUwJ&FjGoeZc`oQ%C$3{@dTrf1$
z!d7v98B at cw+ok9I<z6c!p|Tsgc^7XlAh^;iBTu1lLn9=WkclhI<1g0RzI#urcJIfx
z#Z9mfdBF<fgaTL>l^tj7vK$H8KeY_r2KpzZloXT<4RVeQCo19sLz9rS6rrKZx|rk`
zJ}YsA at T<j1mck#AI7dEG9|M=3i(&WDHC?J+tc*o~Ux!-SjvVVebr!NDN&_A-W6y;S
z%ST5BuiqkrroC)t79AtdBjPjUj7 at T|>G<OpKjIg^=vGuhIC6AiPTI(gI~)aWR*m3P
z`0cU?fD&g4z?=vAxxvHdG}XiH!0=1;;e3EhAnI~XC1Z}@z_J6Hl+9NVe%-8*%cxBJ
zAB<=S5sVey2eF293c;v at IEDMdwvHA^>T_8#O1bw6NklV1)MB5_ at 9Gd=nU#kKt7xHd
z);1l4_~Jr!sG5*#eA>LhA!IZ+>-RJJ2RW(JFh0G(>V1 at W972I9AD$oK7kVa4G=D)>
zaK>EUrE5gND&D-!&d!Qh2bD9ktk2K}lcnRxG4^_30H!~;IIoKf=jcX#SqTm=Y+H>-
zPKb2?6y<lecN{;(IuGXqC<rw^4w$?M3{PQiw^%JGT*Kmzk{0L!3L=oMwOh9?{*^CN
zB6#(B*x<&+>;~Y0YRj}0dLir@&_AaDK>vxEdPtWAfm0O#U1NYSt*kFA0w~3q!W3ep
z!zO|Zh4EK7Rs&ahKevsa8gV*H%t`?W1pQ;F at o}>id%(a4xQ at UV!uMKMiVg7dSqTXy
z6Uv9r;bmdP`3v$2)+M<xn{mcz%XAR at 6rKQpiFm0F4XitG6q7DSOc!6T*v1w%ku_`H
zgZ_cm5Fv_4Xdra~D-yDR&QWe)e!?j}cXB2?B{8+W4v$*ln02=eap{TB3E)!bzqr5G
z^ye1mvB&X9Ea0t2PvYS&Rsb#2B)Ie*<iNP*z58$?APgN~W_$xVp>piuGpV1Xl0tYS
zB3NM>LyL$<fOP98%@6_|`iHg|E_A&0J9e1%fX!F*Pr<sa&rL_ig~N-@>hBRRf`D4^
zji!}xtHi}dup|5V5L_4B6q%^xSb}fMT-Q at h0BZC|V|O270!EaEp-L_-6no$;Fo$8L
z$ra+XFDJ#S6tb0&HhpTW-MVG)>P<#cd|x6#0jVnL?Vfo2vDpZO#zzuepGdZK$Idvq
zJ54-!2~s7ttgP$i12zIznFmg(>gaI7fTPC)vW0_iep?g4n(#)f+PHD}&Lh|)<X_u$
z?_<kh0Vm1?$6Z1H!#D5ZWnVTjWcG`umjQvY%9)ucjyf6~#J at hRv4Oiud0Dt<!AGT*
z7RbDv04$Y^jPzZ-)i6JgSEFfj{I<~Z#Fv-i<HOqlb~U~Gljeay!~a0%XaS)Afy>uT
zdjO??&lmhZ^pAp+Z3ugT+{YP at bzIunZ9&bM*4M=e^dFfL4-}kk2}}W`L8IXaO5sdl
z+#-MgA%ziE2%QpMU|{*g=5R-xEE%7nXC|6<xb%FWzwb&&=sj{;n_&LEIKF)0l?l-g
z4vomq=$Xw%fRiTL&t8P{Z#r_^UG5D<u{*<NPz}unCpVAYe-d4g$4U-K5V9$|zPf(v
zR_s28#@g!5o6%SrrZy9nt#<cb!V==HA~;VOQsI9lpS*znQO=wFqUj}o0lZW|IDj3(
z6QO8&6Fg7D?!EX))oz|G92$bJ#+{I58TVeI(VDg;9~>Es8++%eGwnx at ho>Yo?Ad2l
z;U~HT`ME&<2`tFGtXbRivO<wp(S at l7E?&VFfDQ`B76+?$(E{OI54^#&3A++P1X>^*
z<?z|WT+Urit4HSvz=JJ at umjM);0up3*^q(~DJm<CI(#GapGmoyf{4AW6suOsS3<)6
z-gf8+OFeR>^uA~zIO~~DCY6X8P+Q(ISIqYuErhZNR3s-J_TGNXT^V>SPy48(n1q at d
zu<_V at i4BN?npl^tQ8?SyZQF*8iG#3lpRCz?h*(%@4RyltC^>1!%eX{g>#5zm+3Xih
zFG1J9)udLHfgMtYsDZa}=3_xu2U{5DP73~9kwL=Q5QRBJ<2P+6=83*rIXzvAqDJn9
zTl(S(KT!!%ClAlsi}VCp!g`rD2aqGuKS<HpPX)heL3;J~^l;t~ppxP8jGrSA5vhrP
zpd1`&cw9IK3TIZAfs}{_H5#FX@>&0p!l()T6LSXoXSLVq<4|Ey$l3xB8s<OcRj(}d
z{~8%hfZs|;aapM|pBvS|0hJp!ith{mnO0WB;)cfFYy?2;6R)FaWYjM>kVW1<C_rDB
zE!IJ;0o%_$lGob<C1d&G(<7|4A3BVw2#3Um`JF|Zx91EF5e1QBiHH;-oWSmBm*3h1
z{d+hHHn`d?o6UYvx`b>v&mG_;hlp{MDyQ_aRH85$y8l$ARd8Y{zPd055DDQOq*hV}
zFV3i>D1t3;C?p>7Qu%9V5Sn1y;?v?e5sAr;1B+=_Y--RyxKP;srd_*ONwA1v2*X=h
zgTYPiMzj;AgJ~0XLqfsmA~cB1z^A!|Z5NMVI82SkFR!Z;Ll}TM=pP*sAS<vF)M3Ce
zVSp_x?(b>dv)8o4CFVKj;H^&(Ds;|vj2ZzQIPc3=t`6`fuptW?;-T3HD1uZ`*%{Sa
z=Ll(triG|$C|krj2*S*Wgo^U?`dUGPR{O^4W556pUl$I-MzPbhXK#8}Hy#ABIhnwR
zXeIcDd)Wab#-|C~5gP2q`JHCJC|$xf5WojaDX#87DN at S{aS0r}{eTLg(K-&ZCY~F_
zkWpFMarUCrO3L`F6^*-gBZ-5?NyS39<c}+;_W|%j|6UF(%i!ot`xM-M0SNgx;3e0*
zdk^%F0<(Vmc21%vU=j9f_#b3j(<W#^u>ycrBH#m+k at ST_G!_n&M-V2MHnsyaNYH<5
zY8>`E;8iq7vWEUk2K(8>vm0woJ6vi$&|mwuC$y9panSZiZwmey+a*i_svATDsa(v+
z1ALQfss?V{3k>pS(@$+~?mB&rTX4353yITOFz}TJjzP&lA6fBO(y>nBpi$V{g^RcC
z>hBSX+_X<f2+kHSa at Z%N0IUF}cTMy7pb@<)HizhhC1{gSJ)!>>D`0fXYiouJ0%g~K
z_lapMDGv~$ZtGT@&TveS3YU at rdlukrAD^DU63qY#_HGku;Q(J0{@_LsOW^>)xB^sz
z3&O{fNQnfUfYgzKO`Bje#}J0)ok3$l;Rt{WFrm>G9Bus3PE0+0DWHI$e at w|L8RlV{
zqh!NIUp+g60F_dd`$HX?JkM*C2dR~BeF6r_QiFsgAgmVN7YqzmQGgI&x)#5FRC=<$
zIB)3bXI+=B1D<F55bL0(R`@uw{%`tRa8nXIm4tYST7M7QBtwcGcYuLDEK{}nj|3$r
zN!=<CSA86CV$Er+B?=;fWcR5v(p|GmUU!!^G6V<4=;SzkzM<vtF|h(JitsaShmXMg
zcb>h}ar&HDLoN{~(WN8216S+4cx7>g*C~M&@wO+V5BeW09cDd1_MDQy`j7Inc6Js$
zK-+<XxHJNmb|T=vzo#GqIIIqh43Zk+(S{ZjrjgA85gz28K>wU3 at 45k}Na#N#$dC1(
zB at 2ro@-L^!(6(%NfY4!VZ3tPge^PHt&jf1%Rzl*aS**0W=n(N`<?hz0rTLhB;Wih)
zeojYQMr~DMezt#P7#s_TWw8!YF!KdGSl_LOs4P$l;Sx&_QD}g!Qp<`;hle^&oB|z`
zH#%<GEyz-WC%^)s73a(LoWZl~)x%z~X;a&oi<~TpVvuut;RnQ;1O{REhY5#&15=8L
zVQ~-mosB<u%1qB{s0j%0SzO_DO0 at D2tvsip24;_ANzHmdsVi&{J`O1bhRTUCykNNG
z*e}8J*WDiehoBJ9Kll)-A?LIr>H>jA|HEcMP;1aiO1TRG!~px at i-es^r2pX?w`V>v
z;;KN~+~x+h1E3u+LeRg|+tM>3TGd;hSX(-d9%tx?pDDg9;s7UKv)YW_dARuX2{2eZ
zI$At3f?qbu3e?(S9n|{?IT_e47t}bYrrim-%(TMtOCqRR`PgXpne&mk*{Pj9rriRJ
zFX(6?rWx)wNWoaaOz%p0B;4BhU9bd(#yT{9;D~B=@8d4?ATYq8Dp<9S6Q?^)pO>0Q
z8Ju|$Qiv19L#8)2Naah+Ak-9fwRfL51^qJzd(ZyRPh%Gl6h1zV;NL*(WK<L}(@`0r
zuHmF4OaKT1Xbjjpq{rYS0z8zlhI7d2=-o##S*dIX!us!KO`W*x431+K>7RXM;L=qv
z50qmU0AkU7`W!kU=wIq>>6y@=z_&iJGH?3C$ksV<?KUsVDhlVxicP>Dmea+r?;~@=
zDV}n0YiNhq_sMexDA<Pd=BCb*rx7rP(62agL~21Z@|O=vnDol2DI~=DBPaFs^*_{Y
zh!XW(<@gvU{-7`+^!E?l{f|$8S3=v#a|FQ0dmTUY at h2}qqEeHGM2o^i;{itQJ#IU8
z!mK%L5AjbpiZ{Qb6?Yzl2(t>WeW~!Y at 4s+~_XWI1MD(F+H%+ at jFN$-zNdJXhZ9q5i
zm=@i&G8^hJWC%Q`<671qsTC2upmyS5V0<L<Ra8a_^v_Pp`VZcfKr~TtI_Mw6I+LjL
z=y6|s;e!G*DvF{1-t(6k1hm#tZ%fbUg4J(#Qu;W-ax=)%YjS8cbb|hQ?A~MG1X8(}
zL2*ZDh1jfAF8S!l2(f7i<lUS$05dL}n8NXv3~CwS=)<UB<X=b{O-OD_L-oui(8zYS
zYs<H8H|-W8K~zNJ2X++W{?xNiOz%p0;*$_3pXh&pcF;<JHN}gTX-jN0xEfANAzT9o
z+i~cy)I`h_5B5`m2%G@^c{cna%__Y1CE&Epp9>-_LxGahtRHMr1iupKzraBBLYzQ3
zy(lC|!REy-hTV`r>&RT_HaW9HY%A<d;aY?*b`utJLwz;+A2dI#{}@(?KF4u;0{zQf
zU^R0Zswtr%oE3UDWGf~Gs6VsESjuHsi0181d^n)9ApfP;gs;Fi7AGv$ZNLdqxtPJd
z9WDajE>4=`D+K7YU at W=i<LN*M9sCgSy{+9bPq$#vfd{ZEvNYkEn%~}x?q&GaeYwAP
z)vkR~x0u+d2B{DXpAh0GH}F!C?wV%sBZln<K~b at B8ep?h<qJ**ZKqt}HH7DKS<%?T
z=QtObHX+aAkBtmmDCC5r3Y!Q~J<aO8_9fgJZE at 7)eTC?bKTIvi#o&Jg`p?gTRtZ#&
zzW{K3CW0o|A7cdTKky8+pu{5*+om@)FucgNgiqvwiBpY7q)7jK7f^G>J)N8>z>*Ru
zcQMpd$lPqoX155&-<&kGaL8-Wzu99f<uW`}`*tS=ne&XGB1Tet)1f;L`!8Ni%uZuX
zUi|LL02yHx99`_t0<n&%V<I|^o%D3G)kXvp>I9xYv!i3=!BcErperG40FZ0}pw@{2
zg6bRICcUZAv|GYMVIw9&6n}{y4(r8nU8WVJeCgB_R$Vllc+eBK$6x6URGzy?wHyP1
zRhLQ8xObmaU(A$_4x_~lON<GM))83?A>FLPQZ8AFX%6wDwiTF`AEp+T{TPlYk~#AF
zhMIDL{&gy_K;R<a{MErqf&N{D10^AHv29vIeQ-n&Mmo4kh8OT5h)|LKanEE6;JggZ
zT!8)&d5BR=KP4MC0jNvP&1l-UpYMoT%<M6iav7ludb<<61j=OOI8JsJ-xR$)oIffE
z_|L`fZs_PhJ59{kX`>)Apy#12c3W&=Fs=c9t}-8&nz?N-s8D`#UIqvmw0RIfQBPOn
zu3eK)Uv^%;VcIR96747^Bpw4;G8CoJX-q3f`NFYrf(jDMt^N4P%+?lU3N*KPR1M#{
zhi(L$#mN1qc!Wvy$>4WJw0trFN^b(b4L^DjsFs^nSYlq7<2vDRMg~nd%;JZsC9OCQ
zSSDvhF%F>g0VhEGuzBQBUE+p-OTI||cua_GISYw>f#Wl<CNTaf#kt_$1p0TkA$}3+
zpr)NWvAGa*0z4t{|5>$i`v(ZqEev%`DD<CFm}B-BOSz2H1;6#Fbg;kWz`?kz6!A^b
z<AGIR(Po8N{O)KD)2qtC at c78_40Q%_NgXfe^?03-5FA)+;~JY$>A*gr?v75300vK-
zkdlGEmVNs+zBC3W#F%!ANQfRItGXP{oZ~0pe{cpgtsv!@lJ)cR#lu4*_n&}!fxqGw
ze41zuz_QkQ_*nkXuvDK6j!{q%8MH%F&psuCOR{N&rR1^FG9T#yUIiHn|4_5u5O{fa
zbUyh1V%<Xv1pUJTW!03!_G8ON5eoCq`VYuQY^&C(l>y%1A8?#O|HhzkE;jP70D<#z
zASx&_wGeL9&yBBxjslAzE*OBK5ya}YZ%4_NUQulJ7)!bg3yFNI6M(C>gNIO|uzT{R
zAQs@&In$F39qa1icMlHN5Fr`!D_RTuxd6R5*{&vFIGhP47-B5cA3i}LYz&HS1VcjK
zz}q08l?@N_Lu at x$ogJp#vhoAh;Q{!d0FV$y2#I4_LCm8@#0L=Q4sMT>RBoArJs{)d
z>B!>A+K%&D^_Hz1hhf^*P+ucn@?L~PoPJ@%Ys|F5lJZH>XgKKsUWHu at sy6G59guQD
zqZ8hi;0&-s#5lqW7*zn^fApV(0}|<<R}kCE<?h(U*j8Bop?^jUb(~25Xq(Xwqbp!|
zfj~3eSp0<;(P1Gdpf(ZUy`ctH7W{+RV=Uz|Dm?V<PR;ud0{aAn!x-|Wgk8di0<{C&
z1^9=>?+(M6QCk^Zh^wh1=r5K&nU^D9ij at caLngt-!$VmNG4!DNz(xZ-LnMZ}N&xUU
z_Ih|a6^@RXb_-+7u8p~qSwJLMmPdjxn^q9>LE&0J{wR6ytPx8HfrVp>D!>Z}9J+lp
zpLILtf2d(%6oJ7h0W}AkL}(NOu>4SkrF~qaRFsVbry>L*1ew>`Xx6!)`yyhS(t}M9
zo*#Dr=pO<m!VL5e02Km8{>2e2ELJDB^}?mg-;=Ek`e%51&tK%+B^XQAf9SuUy#+uK
zs1nYCVM5WI8AL-ig3;Ueu>cY}si?2p>@k*d86BZ}ixUbQ92FU7=^f!-%0`Ewe^#D>
zD>tNaF%tl53PXzr%J!WAR9ennX4ywyH~t*M(<zSn<)|R^atOaT2Ev`zZ{33SgB3of
zu?9c%u9K(JTU%jqO}j1b?PBUd|ETy-db2#D8#JvT<^hK33v-xyX!*pF))Qwq(gnag
ze&VP;IG>{Z_$kwd;2dUPk|T7)+sA|&6d8>A)U?79^H6EJpr6q}{E%zK*r-{D%zc6W
z13b}y!T-Poq5MH0D(UYf5*Ld(+Dq>R{ZB+fl-SnAZZ-1)ofvYEV3E0U9bX1mAn2b+
zxhVx%tP&7EePT@`w3olkg@%kd8!kB5yw)ZlaAuFOl*<^-A9#Bc>N^Bgz97qp_?jF8
z0p=6_2b>`+rP;fCdDs)Qwsdrq$X5b7B{B?=Hm#-#yF8lDjOM1{$Dgp6v;Gs2yZzL;
zit$m at bf~7$esequz=q~CmnT2{&u%fBqR`+&L;rkYzB|G)utu}r<r2Arc`EQZx9)R^
z>q<z7k_@^>&a)#{EkT}5Tj4)WS7HeY!x%$a!`=g6kWA|=G0##Ae~z;o!-&w-I6rUJ
zA)+qy4+sP%5IiSi0{x>CW2O-Qfm6e<XD#Uet%&w1wvEov3y`*jXxMDZc;tbO07*ss
zPyBkAK at 2al6%c4_zDUGK5H##Lbq4DLr+(mZVD=14yo`+sf16WE9Q2RZDkCYrCemX2
zkz=s3(B$G5XKUtgih}7GZZSK;l47Qwe^$HaKti5DsqyFJ3(AQug2u0P|9<j5-cEce
zHUh$@0|4v0aM{V;Dz&y+>KULBc?eqo2$kfc*}%m+J||tOAZ2g~<k?W>czU}~2=sK~
z(Q`7o2yI$<@yOkW$OXhyl<ET_Z991Q2bZbwNc6ZiAbm&`mY!jotD2soALct|j;<4@
z%=(1dp?_FGj8;fM*tppidBK{QO|1XkuGYfY)(b(`3D_mJMfpiE2NrWS6t+dye_;Q(
zDg!c6D%{ygc at gFva|*cN0{sgg4);>JMHPT|yxB7>@iHzt;w?@B=aUqLk%fSP(rc!b
z6|h)gNt8;Y4Ekz#Y+M~F5h6Gte5EFVOB7uH0=%&KQr>;x3hN%<PH2^zg}D>OKGB~r
zehpr^;o)K}^+pB;jK7?+1pO1f9?ll2nYhiSb;LYqXY at kw`Jst1lqeQX2=!BOREnHK
ztBKxOHa3P|fYcED43+}%5~XY9>}G_NmV<|-3QNxbTW#5YP*i?0$4746GwTz|hyIxb
z0Hj&2k%L6G5Z)60A7h6={|opBysgEyC_kZp)&aIcOf$XbF9B at E%FITIwyk_*2(>5l
zk4(XkqCO1=C=?yR2;+%>Y69mMvu9Z1CEL<loLIvlbrkqSixpoJI0T+k@##sJiWa{(
zhbp!mJx)1d8j%e7F4$xzjYh&mpbi2x*LU?MC#~>lU{k49G&%+k3}gj(KcXn^?Zl2S
z?Uq%JgV$Npn2D^S#1h9~N|+SWI%0n0-V>CB6_b<1wxR^bdDsJWpb#nnSOtJ>mUki~
zNDZNXF&`EggxMEQdE5h~yUUVcw$cyMH_Cr3u#5XdQ3?Hnc_8u$TPg-J=pSwna|y6F
z&RGx+Ss=Wphiz_08_lr@`1`pN1QLM){U^p;aEZdv1`G60Xi8MX93LsJ|CN*Dc#!3G
zw4!BYexVUfudV7neRlC<ETtqNHtOw8oZib?-MD9;_?ocF*$p-L&kD at sqIXxTWgIy~
zIq+S=_``cN9yr7$xElB(=pSyJOKdc(=Va>l>_?u3q>KByaR3C+h}#$CQUa_9B7$j1
z3EshcL=@)wqCBaBl;H`1uJNO}y}cApybziQ$FIkS6Xy+V0I_!v-o^Ux4;*G8=26je
zx}tPTEL at hqsH*6Pg&NE at wq3J61=E$%1M!CyKnT%RTY)VMj0XyQ4=CSpEyfP^P%`YQ
zje8H!+}qtw?&Cy6AwW>rK~M<SZP|kT3l%6BQ9_0y=fY?~|I8`GH0VFGp*Ac`6&4oA
zl*z2G0gGk!7)!iNjEjDY6S_5AqTs8cKwcA3jx`GXCqAmc3Cv!clb!2!>=3HOMzCeL
z+pmFf8h!d1B|YaaWi>Sr1|K%nSLxGr`~+ee<y{xAf>%fTA(+_q?t^2`?r1aXmc?Hz
zL4D084tW at w8qDf&Nn~1rn_=Xtp4%?n1seuDe)#qSEY4J5QxI<<2G(qz74z_BJS{*b
zZLq)8aOoK$vk~49<tHl!0%>-AwOOA$1Bx1G6@@3p+3fl%)&ZsrW at 1);0zOOhk9k*Y
zE11zaYhLE6lDk6x;QxsfhdUU~m7EC4F)@NfeC0Z;1Sn`u58?CWb#?%;h)qib|DRD)
z$q^oAkFmr{cD1)S0lNaO%&H>3W9z}g#9rpGLgLt<Ml*YHw9p(gL1FKWdo1rTpU at bW
zd^IA!fxV|I{`TH|+JEsf^v`@5e*6+y0O^l|U0`~#z$O;vnRP2(5<~)ZCG?L3SJ2zN
zxDL_Vh{WD|;R<Rc?jnivm+%NE_K9lFDb;w?ww*XFHbg7id*QN}N4U_2C|Osbf3aj)
z{$kWa`H$TSE(kzQabJ&Fw}c`gA}$HvPb^=k)R-@!x&W*Io(^kKxN-O$!Y|5yjaDJH
z<&;TOnt08ilo073l|C?XT#BH7PW0eQ(E|u-7=DgF28F^QN*U#ac)cNC!#xr;&g?Ok
zdYKTL^j0S{hpfQjJ7NpNdV+O^g?i%A$7U}Mv{>%vNg)O=*a<?&a*za<oHs<sZgg}m
zj_cS#P{eUe0Be`0tBt#hO^`+gNu%T>wjlzkzO>M+TP|tEm&J9RO<bRsQ8d`UxK8KE
zGuXd~)sNRacTtk_7y8E?fMaU}VMHN3o0tgOE9Ft1aCjW{Uw%a at TzUpN#Agi$A7~X0
zr)GA>tWQ>Z7Jq0Ji5}yZp|+BVfJF=_2$auavOxc9v40Wsfwn5O9Abw45m==4AB+T{
z<Dq|yU!3#-o*ai7*eZ_WgsDSnAc`a3LeQQS<)HF~@iTjjC0^<i<KEW9uFb3AM&#{g
zBfcYUgQ(_M|55(4Y?{3|zFm3UofKwuv<o}3m%WFNE0+L_VSBhF{4CNjMt^h^d=W%B
zY+D+oC#zr0#%a`p{1%hQtXnPx-|fv?;QtXA`HtmNlZ)$goII^B$mYl-(^~)okZt=e
zT}3dL%9)91PPl|sX7L<*@GQN$95Dfnu2g5~8MZ2{8}x(Nj_whqv00xuJ}(HWUZ{ou
zya8~Ej0t6M04;msF{%rM{&56`5yF|8wmu$qkTmoksuMgWkbmKJD2F>@Y?&_+`dB6!
z{=XQ%P^IEN$?0Ys^T$vlBiC)&3=9Jv((Eyoc$u6O|F$L=R}70p8^h~XdPf{pz_1|>
zNF`E+qe}_AM!>+<3)k_$0)@gci at q`!g2(cKfUFqWTd545jl~?<4cBb+(l7vQ&~=+<
zd(NB#<by+>)FCH_qCe-7m6^X>qSi)F(y()vR7c8SRzQJM1_avVi(u6Sq(rD^=zrkW
zeeo6#hUP at fW1>Z!NSJ73e0+RN+b%H=*>jWz${#WS#TWO6;1B%=seK530?ngm<Io}&
zaFk;xKZ)uitp5wj9}s;sN1jsnx<LOtGX^!pYUDD?`9=hn;B)};Y#-=U86}n!_)p-_
z6vAq<yCLAPput>GvWzK3pYXOOFtqR+L|859 at 0H#WO(v%ip(>Y3#0<uF_E`owAv;}A
zw(Qys8k1W%@%3N6hJXnmx#`d`jt_v~S&{g5Rhu`1?E(FjU02z#Z4Om7r-GVx%l85=
zM+r+De^GDpaS<d5bZlBp%mdF$DJ>x2vv|pqpbx<|N|3{zbC(MHdZZ>eh+!rZFEMQ+
zDU_i#)hA#hkm at Ww1Ak5@L0Ug}70wh}+#!Mw^e-s?)8ct4;5r~5*eSpP;^vlBUxO3?
z^N;DAwgCUUT&)p)Wgd1|46&?%6lDuW_=WR<{(*V4ojQlfo8yCFDM3 at 9H3AwzTP!t<
zLr!ZmUxBr2 at slj2B=!Gq at 4mm|y0$#A{{{A}@yze`*q&L_?jGBd`ng}!(~~F$F((iN
zh at 5i{L?S>ifFKcw3^3;$z??~uqDYY<B~dx&{FK9s^yjLkYs%mYZHbiB0I=?=b?Vl+
zr|KS at yUz~a{oVC-!}Y+H6T}&j%rw at 9?vW+~JxEz4z=zy5AGNA&P9Fa1=HPoDuRM4F
zh>^9+Z%?bYU#!@*>*Q~4=2sNaPCY3Qxu`W8T9;bVfMM8g6u^QKjvSVtR({Kw^yE2S
z`SvX;NQtdaJ`>q3)JAVB&MP-F{E@<5+^u$eIq&S>@Oegol at NN%GjIK`f8;tZP`Jal
zZ{Q>eQadY)#4qS<SW<5t(~VpI9G-NQ<r`L$*pwfT3?!xG|C}jfC_n69yj8AEjGeJ~
z(<WdBkAMN~DRzM%)GM<radzPR$xj!T<VrHVLW&-!w8S~Eh%MW;*xE$a?8tV9TYtv4
zJhP}_!Eil-=}n6fCsHaabdO9q4+UZ|Q#$0XRhLFDk9Eg+{0v*4e;L4F+p{l(yOHgp
zGl5vnNm_T|0_5AySKi>7^Dh(p+Iacl!MEO1t2*3YgL7lOM9Y7iVVV`8*Rp9nK^;CB
zZb)oYv1{wo&xOyh8pOY3KH3 at -0}7uf^D&>>-JJ0tWTeJw^q)Qz?(pp!JU?9eXx{l-
zgtR=xw~mSRG$-WzT(QKK3jAX#c#YUWf?so|kG1~Af8`^%7VuSK4t<6$D)=iENTwM1
zPq1_TQ-Rb%;uoS*F{r(E?%BopFHpiK%uHZefc^79-TE`W<(b6`>xb(>8z<+b<!*WM
z8TUx|XN#)yX%uF(?c6rxu7f_S`<<LVX$*x^XF`7Slg~Os2z%Z1^z&ZvLRiBT9+WsR
zKb#e`->;qjR}a4TVe7tq`h*XFpCg}q<*k2i)7k;yEo%u+!pT3}4EG5)cD(q?+6OP9
z4-KD at Gw6}w5oJ5CzHosi7Wznr<E~fUfX(pMkECF*yFF9k3%`AXCr3JGp!_FAl~omO
zx^{iYn4J6!f2v^l{KCfeW}6xjP5wI{JAE9?f9#C$gg^AYOzPB>*yKQ%&k0oegdhmc
z{<Xc*A+b;f>pwMyk4T9qmap|+R*?@(NcgK!?imb{<<0q)O at hTke#W<dyQHyU7$4xW
zYcD=TdvTA5aahE%6v>~Bk6e$uYdG at -T`SjJd(>tvY7?yg<Y<<!KGKAd+-j69s^9zi
z+Zucnc6^2y#EUf`FO{D}BACoyN$8QoqC*M2wG(+3f*qV>+q-+s<tvfhLT$Ojsv<J9
zy_J1-k}2I-L)346>~Y*C8?Qgc-4yBxDW`!3&@0U3)~BCmbfb0&eR^A7O%co8P!ts;
zZwKH1C~{a8Cq=O-D!J*gc0jtiP0bnlzZ5Xazqr-BnL+T^!gitTIj=MyDt)m2(_$@h
zNCrCv%Lw>^@f#3<R!ZiNH>Dg(G8&NRB6~md?gyB%JQ1yEigS`9f5vTTFI}{7xE@?;
zp#Iyw=DBi at M?d{du>SY#H2;D}k#|i@#m|{^^sAdrV)+C@;O$v`>58}e-+GVy(O`u+
zuMv`R-1v%>@P2Up4V*l_?Zy+RDUr46aO<IVGdGR^E)7AIE at 7-&`%vIjb+P_^)OqNT
zS3I8zTO%NHfNi4y3SA`)O~V7_)f)43dwxS7-L6;q3C0Z51;2-TXUMQ~r`!wVZ2jjc
z`Q2DU4$yx<p!t79sp4ji_p^f#@Z2f9pq$3w5K6ZY{zUqwC!YBl{1AZO#LMJU)Bjlk
z*i)(ZG=KK55V=Ii=FJ;@uT9+lf-=U_D;H_VFS!kG7dI{)riWB7Ov at H<=mwz(n4f?;
z_Fs8|k$0^SE%2c;v><&fb$Ldi4s=v+DFfyoWWu$?6qvf|JcJT=hq}zNvv)l8%#bm|
z<ExxV4YRzZ(^@um_Q79&7XCD{!Ct6oUG9vcjeFnu5P2rS$n(>(eM_L{Bt?Zf6N4IM
zRVAUf9`mDL{2|o7Ew760nuNT<EcQF^fqRb}mR27-{k|ad0K=9e_SXRUKpP~q%?4M1
z4gh}Yj6g3_;1gn}moI5hf5E2U0LNvy*k5S%M&|r+uyn9q(@W_&M2hLPP4NHwUW8Xb
zP`<)15kQapCAX#Bv}Dn6J@{KBWGQzZx<UDad=7{}O+JNW$XyrDFG3KZaI=qav<{p;
z9od1TlC|NCy+hnH at ItpOV*uiP6(m*s1q-P90$I7K;j26*y~mDvt2CbfwYo*p>Rr3`
z{P}R7Aq~kdp&up?>?6uQRG7GM^Tu^BsKmaLoImR?UDmKucr`N2zcdr=+jRgN0Nbd{
zOZbab$r25Z96N2yycuIl>nY at E)<2XQ^>4-c)q)xj3!FdQgZt2!#LO6{P!5;EhU<^V
z&br^_G at q}_LC&SjQ2s;7Uz;Ae=84d)uq>~2?_Mc3X!c}Kil-1qfkax}C(h3PGQB=!
zGK7E0?P at Grx_G!A!0>!BmPhCYSzD#^3sE#%|B<(xnh<5(w(Z^HWJX4Uf4YX0;ZPr0
zz#5@~h8isB0KnOTi+m|DwY0Z`r-D0(%ZP~XKlecBDzAWc8y~r*ar$>b>T!MBGVnzy
z!<(*N4fly`@C~Za6gty3IH)0C(!ZYb(}jWGsU*iqXnfYF2K(2mkf;RzqhJ0}`*s~X
zX3`#k4JiMW^_3V+LnFf{$4(uSnGrA1-Uh+=rOq*ac^J5qxoD~vR<C*Bob}AxBl8iS
zEq?AaEMD0;$-z2Li8=7$XN0`<Pt_5^3+$c5*-QXfJMu&kCH61#N;0WyvDk^-P?N|d
z#E-p44&SaDj2x%AX~}RsU=@yi_FEpp at C`P!HS;k7bcN4oa8rP$Y`O82c41`^T}5=V
zs;$Lan=jX#NF^>H4i;zZ!rZ5bZVUwy4D>?ct-o{$QBO?NWF5kXibV?NA?~KZ8mFi%
zw`IpRLQ>*bxKCt*pV0aboe>DokP;$1q}r+E5l=CAn3I$fz~JzO^fBHf_Hy{lw{H;a
zeaDXm(etD^tnBcBD0<X0TE2A)1~yu{Zk#`;-UNJYh#u|0`7>j at r~#{lt5YsN=%CA~
z{S09h at 2qNKT+XBEvZW#~qWo}yN{EA|3)X)|93$G4@@Td0-Q)I2E&D9%scrk#@GrTI
zjpfUh4$Fh?YQ>sHYdd^{vRQ$Dpc%twG#Fo$RVu6Y{N}~hs_InxKl;+!{cpbOl_cEw
z*b{>v|0ZbXrT_!54#+FZK$r&dQ&Q6YH{U6#uhAiVP#d(dB8xQ}b5U>SiXGdy_;x(~
zOt?>EgTSQcgw7~2pi#N7hN{2*%2jo8<Dw?f%0i#2>KML|r=3_n_SMbsnQz}<{O)-6
z1rz8nU7-PKHF49&0@`^SIDazZtX0k*=09F{u6rmr&?W?iU55|3m(28eTc3HJ4-GL9
z;ZKHVq{M7yUgf3idFfS&LNrO1i_HSN(ZcQyk3+!xnHivoY>{MzFB&*;ocQ7tYTdny
zjqvSn?bZ=I-ox at x)!ltjr;DpfLpLb?vhLzTYDh`bh`i;&_dlU~AXrO8!CjI)_})hg
zJ6aC^=4QAL+A*aVxlEn0eJd at b1B2JX=J&vRzxmpA6m9qt!<T5_LigIfeY3^Sf_5nB
zMXyF79@#C_&ML|wFwwIMu{q<3^U8}(|5<hJoM+SdqVj at JXNq*F;Wdac#Y}}X2%q_u
z4L3_U7kU-}5u#dk`m_O6eWLku4yy?jJA0DQFy~Kxb^_;*v=?|<a7|kqM-V41<p-F=
zZbkEVEj6Czlarew!6!32+2A62qUyHAw4|ua)R at B3Tx8eKbih>fe{lpAR8 at X)?dC at w
z;p_#k6^2&G{#)MKpS-+f`Lbbo0IrZ5Ad!n#4}@-z2Sza$HD`Mc9~^Saq^L9U^6btT
z*(s~eoC$T1nxw%k1O2OU__us<IU)iQUW`nG4UnIwPHuht1}f>$C81ZTzM%$@X#G2o
zSvl!nY3q;d8ER+bXZj6G*7U2j;fzwJUafz?7<mDWJu4X(s;K<8&Z)5)v?H&l{%|uP
zIw<WO`smxg0x7Xv#GNII(n)Lt5NoVgFiw%Ixag_TQ|=YT;Q3b<L)xP(b?68}oAIm0
zL3w?Zw0Bb7y<iN^E6N6A$jVG`DDS(lubV%O&EB-C*Vg>?z7Qw9+RqkM434}MQ%YZ2
zx^^`*)bUThG|7T%po4azZ+~~Uj?lWIc~~Ckwaq8m0fwy`q-t9KTfVN+XfcOxnf%oD
zAMuK>TVwkxZ%G;O)-rGj{T~cc>>%h+oQuE*Am6`9!AIhb_6zQ^{mG}<%T!-|LWid;
z)Ziz96tZBL6}(ThrlTK!5$+alWENyGa+j>?O_&)BLjMU~qbG}vN_(XLkpJLtq5hy^
z at DJK7Q(4KBH*LYS(5K(>mD>uE6U{FpNQhy^_`AfN)$@W)ojYTKsMeaR*WFZZfKtfB
z|BSJU^Rv9VnD!zLsB$+yzf7FDGbdyf=W%;7Z)s=&&L<_tZzDH6t>pRFk?T1WJgj%V
zk at 64r$@m2+R3)MBfeWSci^&$z4dumojW~<G<*oh6%iCI(56go_N~LV*Xjy;lQ8&nv
z;=oreolZ-o4BxW#A2VZoX>GYPUa8hPWaVdii^(6azN<VAl}(GB5eP=y3Z-v72VD1p
z@@ogsKJ0krc{C|>t?;l4;f30W0SAsB<Ms^fxV%&(-pJ3x-NKEm!fauqz->NboRd79
zUgaLrkO$730q;Nb+neqC_l5dfGXT%po+<l9-0X>TiO6pcb^B(o416gP#06vm|2(cv
zJ|Bd@>#tsu1P2ynSOCtDp=x*I{$&E#5E;LluRj*Y?U at oIlR|P3g_H7Q<x_rCOsi`P
zRvK5BL$Vmn$K5G at Evu2JkvPewVEo!d+V}0%6RxTM*bx-F=r5pFzS-^k)vMZDR}9NT
zjR{yRQftqf at 3}!y01gd`4TmB56TW4sdC4iUicE>=6aGENj!}SDU3xg&L9kL1Zs at H?
zgZqW at Us9I4sI!&#TQq at 9vFnAGU__5vqW?IV1E)@ElVh}54${Cec=n9&Wkc(-b&uW%
zcZ+OTU7|(tGsigzEaa6cLPKcXvCY=7{kfMq4jc&ew`@G8+LjRiNpWq(noAGcr#9bs
zD%9Z{zp6gKIVqul6S%lE7bJsaVLhua0M(;<yOEXUrC5^HST7(S#1j!RQ+^;H7Id^G
z&6~lVoily>oEZ}Ue#ER*?&JJ9`uXo&>qgi?oS&XncOkkbO<?8VU`a)OL2im+D{4yE
zyf$K;eedbt-VE%5-Mf&_eB+z?D;Ku4v=7IFaY`a7NX>KZ29bvp6sC6#?hi#?!neHR
z#aFHT_QCxLbEnYK_d?P1cdxznxDNbsUgs~Y;@b)JCma3u)#RmFfyA?g{Wr;KXbReF
zcuX7xTc3E!+uVW-fqOY($U`<>xk4pVad_YRpN4xzHt5wzTBtEjvQxYQPx3c%em1RN
zyYBK8%OKRBUPSp1I?Nic!<=bjS=JKdMUg at szVRz#GjL00#>3=PFIj-~0+`35oiq8~
z(z*)6X6B^w^906kP7>gsux!Wfo#vTKK|LL&G5dG^lKKS2 at 6zJ|^JqSDlaYTmtzYAE
zrY?UzF=DFO2xb`UC%Z8F=*OQ+smser43H1Wb9+$j4fL8iwtz{dg|g<p at lE~Z3s<(a
z4$Fgt!Sif6 at tnKC9nZalb6Y@`{3qwbx4ix3H{<3`-TvaM1lP*_`>;-lE*<*fkL0|?
zAW{Z%$Yi5_yF?%!=>g|_acMTT+mKcd;S3iS9#CWF^DoM9(eS^MAfRNqohYcBRhk1!
z6WKGe-FNDg3cq|TPSXFqLeVImh=ZE8V`EYsDb$~hpd_odr+`zPa$eur?(K%_kA*sX
z<5y2N4bA0ty{6T@(Ub3~ZfXR{M$3=s4nwJUmb->tV*+ at n!QSXd?#>1$3LwLgw3m#K
zQ<z2gvw79F0PH{X at t2{WWS6A;P at i}M$bV)+LsxrZ(p--N`A at 3wCbjS1ud_W@o*j3P
z at v-lsZ2HDG^_MT~Xm1;qhZQSID_u)nayPjDonNz|`c51#EXpwXk+(c=`dCsZIbpV>
zc#cOf2A at J5c$GdD()sH;TD`TN@%i{)aDdyUY4skB4ObqKpFVriJ)tpa&Y=e1kqoJz
zE`asFsMh}-n~*qi=+j$Y={cMy&Z}=itJgq%4?-p=rWSzwN9ly&tLW9C_NsFaG+_m=
zuW}2ha>5<HSpz&9Jdfv-zlHyn>t0RO`O6l^OdpGVf?IOon$=b*`OjPpupisEaQ;yK
zVMH+iP at DqcA2%z7&r@;O{B#0;`Ib#PUwSR{d;C)ff6Uud&@3$IJX-RaTbnp}?5)NW
zK9&)$GppGa!_UCCOrCtR+xe$l)w!~LSRND-K}of=Ff6%20+~qfKY5~}rYwBFO1fxc
zYPF1$lO#*dD=f;2ntX4#1F)9=&dwKJW->cz0gH$7?eI&0 at xXr~!ot|2ED<9jbd~4;
zu4ZlWO>PvQHgtq1#Y4w;w0y&w at Zduls9Mxobux9{46g%c&oUdiKo_(&^_)DpWX*uu
zVc|<GkA#`yyiJUrA}l3OEju>_W-Q#{8#JmHFF at v|ekII5elQ8|0(NyBZMj9+=r2&W
zt-5rD?GqTknel*pi#k?#v{|y0e_Jgt8OYq)%U4oB-M-d*a8B}B?Ro9((2qf-!kJ at B
zB?|m^xL5`F2!C>kbHJDo6b5YGvRQwI1IwCv$rO_I@(ph1pLj`E$I4-OSkji<nhO_H
z-F1T&u=42rr%utp!}klv7&Yl0`GboFdNH3c87#KM_}MxT<6a4WhVzjx|2X*J7vB0$
zp<wkN+4J(N{GX7Yusu)~%F;zo8yg-r)DZBcDoBli4y7tky5MT0uMX)JehULrSeEZC
z!jR@&yXZoI1k`&@AyFqKO>^=y!kw7_*rdIcIS9YO|HF#~avbjP4H}+(vYoAJ{afeN
zZ7Ws`9>C>psN(s>p#en%EL3U<hd<1lyJH7g|0oLaX4kef#Rm*;f#w7G%nNi%&DMWh
zVC>=`n=&hbw$rh9cYa}}n?kq^No8_8R+K0RaQ*9An#vn$_PqGAU@`s&|Ap`%x4qHb
z*)c2+t9thfFLSKP%MRV3ZP)rIy~Fow{l~}7MC>N>i at 5f@^d3K6)83+%G*5^#u+uh<
zQ2(5gd|<F8eO(fA)ned#v<vuG(v&<S$bxjU#e at f!v{F)*+kfn+05K;XrbJp0QTE?E
z{C{U&4gz|RbvK at -&+EhI3Av%|p%^%Ko at ty@lpVe{2n{694ZQ^wV5N4QJRSb at n>D1>
z)8zS-s3=fU0~a1zv~Er8%<=V|ZQ%jsh4FlPO!V~l!;=633ToTe^2_oQlVgJ_X=(HL
zJTVlhR?vC)Q21Kbu8~n>3jsh!*d5q4+ at zG8Q(yfN?9+qbanoPAoWweupZ<MpE=a2I
zAh*5I)73dF5C4VJf4Et at v_TL*bc1AC|EZHJHm?ugugE5^OJ!5zlC`Tud^SD%5{z{3
z`3I3u>Eq0n$DiQ*U$TC!xAyDm#dWO0W$RZT{pfQKi)vrC@|`cf;u%pIKp!ksp~2ON
z*APqMO9ufGAzJ_F4L_#);DJzwTVJVRnVAVIPn at F9v>!Xk^3{j$oeI%)^yvJh4MQ$r
z`Nq!}>!dwGx0w at u38FBh&p-Wb+}!D`8!89P8-6PE7p_&n2(5JFAPfZSU*wB(hQYgX
z*LG+qKHjdueX1k?jCv~3nA^GNa)&?pDts*l7?@I)EWd;$%`YUn5gR>~jYiKGWbtoO
zUtq<qoi5=TvK??8K$a3I;X&?1qqn<jSRN28L=BM}NcHY6++vG+IwY{5jSb(gI$U$7
zj;UDMxM=l2UGrkTmt>`TuUw}C=p$ahjj6G8!#c0_Zpa71UpU74C;9ij{F=e{y!s{=
zQ`y2=-fTJSdJ=T~r%!885=4gubT|puKJqA2f&t?EpFChDx&Hc9mXscw5zlu@=Z~3k
zucgugIMmcQ<SGvc!XGECmgvd%t~hW=n;|@;+h2V<^ZvW>gIQ+TsWEcpcs_%28y|g9
z)>t>>+W5qPv=c;4;*TAzbKh=&d^5}t=47a7ZK3&RXD1hw<Sgp#+W+<kk(cuZ$R?)e
zI7EJFM}pc&wrx7Xi1r13SFRqHIA2(vZ&Lt!Sg~c3EhciD+urW$=^mDc{{oz_2tJ$3
z4HB*VHZo$c`h at S7Sr<2Fim;Adn`~D+OL-%kFR!US=nA20!kvTYRogO;4;r^a?|(${
zAN%A>>!0&SpSd%}cMR?icRup@@3biiYtEi+UN_LZZdKRmvrwa~=5U`O4elNOL)M at 3
z2~m^0G7n`M!jkd8OAj2<-&;_81Unk`4*q%e3;*q{-TvGegGWvJRl?k9wH<A+85DaS
zdrklp867814Y^9q;y at e8N|2uwDE|Z9cz)m(+#~RR+kpegiP0ifz!K_gQuQM*$KeoI
z1o>$+ABXMLle<#PWuAgZ%YvM*++>6E0{Lgj`mgU=X-p}l2H~%c9O|~W`+Iwa<)Mt1
z+9EbkbpzcXS02#~R|ZKQzF)bh$`R%kW+_ at h)uFMcq{Qrd^IaWCBy6|PU*XQY_iR0D
zWBI0a``>t*{!fnC%@2O?i9W!YyIy)N)OpjRkA)hP1jetx5LIE>?mZYhM8U!X4r$Qg
z=S5AbTiN0~EChw$6G1q$YAyc8RsEeujtsek<*S^^%6)sGbeIV~jh#JlNS{CXmf>S?
z_by9|YnOXdaD;g-_nD%CG5gl5Am7wp1W~YD5nchl0)7(+<Ud0||Mc`Ys#^Ji`8=@#
zSdk-$q)<mao}3cWHa#5x|19N%_^6VyoR*DiJ$)3RE!VDNlHvK`E>rxA^(5>Id>A>@
z?Qi$>_7BH{^FcK(PB{)_H;6ghy6rxEP(&bnzf<q~IinJ$3p$7k at xTY4H1zdQCv-rn
zPf}?lC(oTT`5q0<AJynMaAcwGe(_}<Y>QuB04>+25WHR;eJ4+Z8eS;|AYqn0KMD9c
z(Brlzp9+6EqyfgpA5vCd9XfA)YVe}VB`m3}Sb6yH!rrbSmv{>*z(y8*@S2sAdTWOv
zXKWcBF1w*vt;Yu-6Vn0>P>wlIKINyTse$S;<f_DZGv`bn$3U=0aB6|Q@%&qv-2U=^
zDgSW(6gDs+Sv)-_{`(As#!*#)a!B(r$zH{&mu*~^6d%P`OwZ>cw$zIX(g7+Kuj*qy
zun4g43a&v`5BVjx{p~=1->^IucCRF&sg$BxHf8I-)xYe(eq^4Z`<*lSSJ6>ZitFaj
zoqAt at 4$V$>p5~8fO~YovDXqb;NWIsfA at g<fMbL|Y|A{h>0D>&JCk%vxzq=_Ki>N`*
z(803=BczB4S~FZC<Z8fV`^xL#4nrEz)5me(=auAz&ReC9S<}V~`)1{(tyCI*NyEV9
zt3$5Rhm}h4m^JC1)a2+X_x)^0htS)k=qY6j=Bvq-o1cy;-A#d8H*|N at u3OIt5^NRl
zRb at lui*`3;1d+km+4oPMc#k-jm at J$>i7iFT;tY6T+LlTGf$c1+C{)+a!X9$D5O9$E
zk`_x>Wcgx=!GpBw!h`&!C10~W+iGn+*1Ut&+}PL6zr<tEdEz9@=aA8E``c9m{loHL
zJX)Wf`}gpTQ$A5J;mqvVzYnG>biZ?_-B-7EZFPGK at lNxnZwy?2f-@&JW`<0q4Ogzp
zE7a5FYCdYz;5*s4u6@^bTYyK2 at b`S-q2l7+^Y*WS at JV>_&G2M0_jt$w;b=_|ykK=w
zZ=}hDI}B;0739Q6Pf1RVTd`-4k2+7B!bBwI)v$VXdPc&6zFu{~5|UzuT;;7k`Q?T1
z8?&d33Cx++mT(^#i;M`0lVAbO#AD)jrl!Vzz4%vdd-+Xo7Y_76*MKwt`AaUAZWF#-
z1B4HIk4%=@r3+*`N_({CCH2_X<bH~4AUp}65tT)1GbtJ#d2Of-^-B1k`0@|_9n|~g
z4Qq6>_>+>N<@o}<u?vJ|qy_P#a-1&Rw85M!d>jB!ckjG)z}tIf^{Rnkc{FWUYqwRC
zm)gk|_6V%pw+EgXyeD+O89Ax2>!y0<_`B43S#|z=+woH}FAA#5iF(D>E$r~jfZT)q
z(-1huEq?Gz>)%$s|D6vyAGj#vY02vT$o??!Gzv<x^)F-$L?oaP at UBOU86G^;NJ*E5
zIZ57A`I3ds;J at -pt_mkv;Q{=hxM0!leM7Day#>oDUA!<MVNP_+OxOto4od8yXH1+u
zfv2USzKT*Ozf5&tU<Qld3f%VMYp~x<n>W(K#kCbglShwnXzv^Eguen^GiC{?mr*k&
zK)Z2!GJXNSA^Lic9+m_RWX`*VJ%D>kwr}{taHDETgXk5ggXw~)u%#*l+;#Xcal{({
zN(V{8^T}N-O1}A#Yf{@n)ilKJZ5H8i?p$Nd>Q%$?AdXIc^+(`LVrTy1dK!M`;QsdA
zyTBDf_q%Ar2KWS<vbX!+djG`lZ*sfsc>d+6*x9Yyx3X<R-FnYo)F8x!4=6u?{nkG>
zKK)00=irB*&7OR(2wGfXOsIe8mC_P0fm2^ko?!oChfuqD<(^%UeTK9X6QiSNOyG)y
zGzfo`AT#s+yUQACm;>an{6V!jNaKW<=?s(9j6_v~L8b{<@QKFmm1{3O96fbRV$?)H
zCb4X(RaQQ*glt6M<hFwc6J}4K8E$*wRSJoyA6n+r%p{L$0Q*U${HzUswdXFV-V0w5
zJr$~- at aLtW{DY`<?c3dbU=Wi$5-<`5`<yYu7e+Q at Qu78gX+?608dkQ)#13l at l1V|~
z;Y4Cs at pd}+5bWB4@?VtMd-$L<y~v^NP}>a;%cGf<`gNW)s0k(wJ_nXB6d5{&(EV~?
zO5Z;6!N*n07Uh at b-9P4M$A5P-CNWlA32_QWg;2Ndv*$H}@J(MQ4T^@}cjWM~PrtPO
zJuF8*|DAGm)9=3<jv_pbqB)EDyFmpy`B9G at Wi`l-q$jf(!+maT1l43_Pn<hvsuiwI
zT-=;VNpZ781TdlDj8$t1L#Bld5eHNzuWiXdPus4Y7W{(lj;1Y}TlViyin^bcCFMsQ
zCHKpD0%K6Mq#pKo{k6w at V`9|(3`}5GZRP-9Q%dq&el3JlYE^@qGLAw&jM`)6!-Qk6
z@`%O7M-l#<pFE$Ge~VK>3c_1nN;Gj6?X9;HI+L55>}Nm+aVB7Z!6e_dcQ=dMR_D<W
zO(W!akUUvCpMDnZdijnW0H}af+VYJ4+_1Ot{JOPkhUMX(a`Lx<iXz`?`L->fwmnCW
zSpUFj?w8~b_Jsu%Rx+f`vP~OObJ76pQ?k>5Pb6#PR+dCg3t_cv?JDZ1+zm>;#ZS4i
zcX(uUlk3L=qk%pPet>q-d-^or2oE8-8X5<1V)faxkz)>N$IP5C<-VWOMv{_ZQZf>S
zq3P|NhYxohInsCf49d{F+NzxDiXm5#=blaa15{Fdd$W`oTa^$7Mmyy^6q*V5_v}a|
z*!J8@&QSGN?A$I~<=N4ny(!92)3lK1$ETh<)w?h`AcT*PkFxJ at NCs$RY;Q~J`EvVD
z91{m8|G^%bcWe)T#gGOv0YP(n6Za<k6)VH0j5dp>G)*n1uZzXAl2l}HA?H7{ODX~J
zf=AJXoX<lByc2KNuU$JVj|FYZk9_nwHS);EU&yCZ1qQYUREC${{eqWR!`8oDz}~(4
z^>+kb=Vhc!xaTK5$B&=*<IPzUf3;%&pu&VRCjLr)DJ|Td?R$5Jv>GnEozK4DT3WhK
zr%(8$IC55gIu{UcXaAYA@&tt*j{N#lyN?d4XhA-+>9qgc!5*jTOuhde&c at 8#wDg?R
zoYH)qC*JduY2)vjG3nmK^d!nmQuHM2s&4rbVdxfNg>|cIni{3bTKP!(<<c%))8Bpc
zh?0#nCy&V~$%~ycWzx7`!V5_*-tp4w2Go{H$!mnLqW8f|)DMp;uoIwlT23m>DzK5`
z5tYvtAOI05TeJY%;n&Hz84KH&t=zS(|M)REUywhvmp^wq&Wri7n|S_-nv=h~$q;MV
zxkH3b{YTaig$FYp%0!?GolyfJ{In5JmN=J0YW~8=xACJ5>(&j+18Pf1tFF0`poSk7
zn&~}pg8bj}`rGbT>Y~*v+f;kgqc?v3qyMX>W!cnmzmU+!M$0TMa6Tb1x^eTCnN!DU
z*R5E>C=lTV4Ceo#+W;$)Y1SAGVSe+H^-sUZb^}_2oZ0{0M=oLfa(7t&+G<z}oNayL
zN$o#(2tv)8a-U?b`ZcRp9y%mj7M7kF3lGpN&1CN$W}}6zv2=C+g4Sj5Gcab<{`&Ui
zcmnNBD%VdL`-_sr3+uW%8V34^_jz-saP at QkEL*=u9%#&*U|}ny!d-*utMA<T$rHzL
zzfgNTQ)?c4aNeBBtX%{S^42+>u;H<7mu%f?gJAgvsqsDS*1UsY;oaq*{ByTs5Bgg8
z$8UJ}VaktPh5*so`e)#Xh~dkXi%0ok7m!6zA3`?LY9xqdX2j9%{@lp7`TY9z8;0Xi
z)6yi{owu3)f8hKD{KHZpTX$^V_ttyvSGIL#NkK_zHbSTB_Ezcb<L~|l<|jhG!8hI>
z`-{KlNMYE<2PpvsoN~B0fFdM_fl0LQ+%7MGZoliT4}SHN|70{P(DS8Op~5bq$&~77
zD321i22&c7xvOZue_^U=9lhty+XZUcSLinQ)lIL<Hg8(GVJ$-yLVHnPw}Ti*69gEu
za_=4~W2(l4$1HDJ6g~Ampc-d#Dobiswh1U;kU*;yGk1Dy)Fh_Og0|)bD_0P<9Y>C^
zLun?Ie at 3>AW7gEM^JY(iYhrX{WF-}p<vG7>D{h}^Q7Yn^ucmqJ0O4<I6WUYrCH&R5
zHUi<Fncy)0dtZH%{Fmy&>~*APB}w7$-oKaU2Zx>oPm>H#bMuSombL&$>{|!CLuWQ_
z*f1=QibZwsKO``!vDKFzw*ILl^dE^}?w90`nKz3oTgYbfGcVTn^-P;K0p6H at WBU_N
z!BWndaxZA8A|`RsQy7L&(_#nKKMWfeDESZAaNv{QFd>b`--sRS(8pheXA*?cw!ZV3
z=Met*p9VQBtme;u7w&LtgZ<k$(942=Ve at HvW@2QY*|vtMW0I2QRxWQUUD_D=QMk=&
zR%1>a%^9i`8&+JeW&75mg$wfMm$HZz&Hy<U0+ZM>FMdvPS{&!3N7c at y+uT|At74}1
zfkcDsl3?*S^mH!Uxl0B*(0-`u0TX at zhP=Ov{D({nfAx?Crz at es=WP84{^x>p;46J3
zh#}da{1}bF3-iX~<h&{3DYeTmuSApkjvpH`;GKKBY2(IWc@&fvZoGO8 at NC~3Z^Paf
zl;$Zdw_^J?wY}Ug;XGsV7{FcP&hohX$Nwq6cK(W;JFNfm%0ju=%MTx~8|aUkI(GWl
zp9 at M7p<Ra#weQ;}|AiOSE`amX9^s!0Av|%+&le2zM^2*+f|9V|@@4hSCCe=8?La6U
z+2Pi9c2Rcu!kWNOUXtt6w!=sBzHVqoO}>ZEgu6Z{o>-RGGI;RT%fn~p&KNg0YD!?$
z7G~NbLgy#m_X`3Uj at mwDHxc+-yls2++V$#dSea}GEQ at h5)2TNUw!*41PN(vQsvbPI
zwew|hQvMk}WHlg%T1b?C2`}z0{G~%0zKinX5kR=Xxytrw-MyRULz|M`=!X&V9zDv>
zi7$R9hlui1*;r$XVJY~99K}NhymN0iZ`w30kF30O3strklBk~3XDk~FwR!6nY=`bw
z`rf4ber^{KB---YyICc9JmLG^`vmL+3I(A}{n|CUWiO~5clSSVAu=4gj~;E=v&X*@
z=ob)LNGqwhaMr}Tbp!rfdE{v1H1cEgpE$Ah;zcnp2DryZ&C|#Zf3lrhkO=^vnUxs&
zlqWybh?zca=EPsApTgbBClA_Jx^&T>9KlJHDRdq%Gd!H(KAEYpy(dor-hdb}hn-K&
zO6DvD>JAF~wl9x~o`$E3lE448Hv_dlE2;0yx$2f?ED*GG%T<yW&p*!($``^P?OS;8
zA&r1H0Hi-V$@-W3j~|9{AwQHsky~DfJtNq33eqv at LFZC_SivF`g(bP-zbeAm9fk~e
zN8fJQym?q2<QSzz>{b1s-m~WjRaRIDde09&alb$;<L~_$SM&C_KbkRn>fBiq2OhdS
zb=+O{WoDh+_Tohi;c2N~xq{`(d?wZyaS){SElo&_^J?c?Ho8$=);;!QxW9&6584;$
zXBUtd#W-aeM0WU-ZBjRC${1j5_HSed=ra14?SN0x`sX2mv25J1A+k at XEoB}rx(s^Z
zY-dUu>%1x=+;j9O#e at 5C>$5L1YNV(~&%B=!F2NsTiO9H6ny4;^n52f3_}MED99Xhp
zedUTKo=<ZE`Nl^??RQ7Z)((jLQhsjzc4s`BUkm?W{WHDEa~{sF1A}SMK6UdYDRVd3
zO3XauKc4{0_r#aKufVpEml}AC4<GW7{>hQ=(8;Y^whYSyEE%fABon;-4?ZNqb?}`J
z1nc*||B3shpZxeo{}D20!hLt`e(r_F_3NCBnKzq7CSOw0N>*9n)CqUT#7pQ%LQn=8
z&51;gQU0kwmiLiQzDzI72~AyG%(Sg9z7{!+9OE0VTv2_Awp`oVEbjoVZe)i)+2(k(
z^7-3qTAN!B9*XS4E at qw!MFnB0=qYd!g_XsT9f*BcP*gbr0f?}orj46B^L`zI#ee*G
zMME`?uT3|e5_nRF7tnh4v~hGKaSeq(^v|md5NNVm1j3|6wC>+u-L|~6p at u@}JbY%5
z?R#LqP0gf%{ja-tG4k8PZ6K)NvBI{OowVutqhtkRHaR(lI$Gw at D9mCD&~ucF<(k|5
z{7bEyH&A{6M=Aeu0c;r at XyMVmgT}V4TZiQV$08~uW7m9k9zT&=oI?)>_!<1*Q}>In
zIIW_L8sD{dw`5)}IGVf#Z~aq#B=*LqC$*nCJ7vP%Qu#1=^qxG~d+HRWqGR74Kp<K@
zB#)?QXzGa5$T<{{Qe_Mopw6(7!mq0 at JQ&&G&$VNtr&TOkAP|OW2l79%8^d<)^l=mJ
z`KjQM_3s(sFUrVH28z=S-*{U5EdGBOkMfl(onbG}o-<tvrze+<FJ8Ry(Hm at e5Ie6n
zEKW!aZ(Rom<=5v`R}?kW@(HilxTdy!MbDXY3c0o(I4Ez0<`eS#gs at EV)+zsPKk~PQ
z+XB-Tzl1f1M__(KmB2?s`||Ak^q^#hjQC}Zo(sko#1Sz0i7$R1a6SuCFRU6kdE738
zpea1schlIuZQHOspdHA6o*6_Uy$@W-F38;R^mD3Hk^lGo;zum6jN*J=nzpSQEq<zz
zgO1JrAf`|L*R5Gw(b3@<5gq1oXFHSs3X0jvfkiv^?VgjF!TE3MR$qHOA%1q`99A{f
z@?g-r;3ZTq6 at A<C<kOKI{#-jHIfi+dTTyIbufB544-5AM7~_meO^d5swwNLfCZx0k
zn!)6lY5Y0FzFlec`3w3_9P_g&Q^w)m0mJA$aa=YQzxswpABW))+X`a4iF1;YV+d-s
zY_J5dYbsls1BJXe3$OvnNqtWzxV51uDk0C$f at O`6<d{w=Ka_UhpYRV0H$rJ&R(@_y
zklqU}1>Q{g$;e3wqRfSvB{gN1eV}1>wD76gNqY|;@{JO{JYsAy;c_-hc);(bv19x8
zVR;CTvhQGtRnBcca#TdsQf%A4dEdJqjsMk;shZ0V9tM at cPs;`5psB($7c0~Yw0!bJ
zN>2KW#DvtvO`^lxCacar*mdFrL`v{jH7y)CeJUn5XUdqLn!1%I&u~jd&S7I`8_O4h
znsmjc<=K%V6WQS}v_THwk)R-|mM`tS at K9t=i7=3FWlf99mM%(6nFrg<MX3rH6Sec;
zVAS*ps+Vzr%4OsBWQ3xw0_tYGY`*cd^YCnxaE^Ubk&>OtKg0706utB1H}dN1taH9%
z8AJ8GT^&b{`CbkIx(d&~uopLi#mR-$*wqToXKRc6VcKyqGxBA}So~-_dH!=!49>!Z
z!4MqOp{%a5exMK9Cs3%+zO^?~_}SD!USx4LI0~YS(wfpC!+r;Eckb9RERU+i3rcIs
zmTljTpJeIQEooUvpl&vCSpAp;IFm+q&9PJ6F#q7&?{Puwd*yWtfU}Ns8$tTaY2)X{
z&B-my1P!u)S6#T+aqRe#fo|C`&}Bf>6zqF``d<vvcj+n=S$GcZ`$$JOKl->7c<e*`
zIkfBWr+>A9jFE0{5oQ%;MMqCBsHq5FBA5%|FM%tlqK=b4ekO$n1Y#rE9zB&-PqCr%
zXC%*2IB(5^7lrm3dpe=r>>b>vy!tHYg398e+DcmnQQWL<-TF1 at Rh9HNfmisn+O7_Z
zKlF{VRETAuolw}zoN!CpWrV-OKS_gOC5<<T_I|zcMHzAxQ`@l(b%4zmiI6@{f?$=`
zmVrZ9>KZhtpvqWR8_l1IE!CY#RoA*Ka^&x*y>oc}aoPuX+D#h;eCwnoUV8$`Dk$cz
zH{MMzFX4Z1+bpt$txdMz&fPogzu-D_QN|t6{*-ZdO&oidAR3?lD!Gjp9z?KUVe_cl
z1$Mvmn&McJ$8!p^Ygez9qZpn<G**Ciiq<LF25UEP;bQose at a7wO8mS4?O9M!m{wYJ
z|2;nqUBycyrvU9?TFTti_*tqzuGqQ>_%pYx5ZPvCP72j%_UtJVxEj0K`_G;QoKSSw
zHW7&Nvi#!e(z1qXOfME>O;-oa1iOV08`j)}d9zY85-fE#d&jX8p|4}8dO(7(Z+;p>
zRnc(IGGmtTr`m;Y#BSo*DX9*EYdJY7!Q#(LV}?`vE&i5mTl6ej+)#<gy&$lBnHb6h
z;83Oiphcp6p+Ka1NtDjYObieET{d<N(?1HQJ460__~S1M8|$rq!A;??9k0AKWBLR%
zp7-DLlSKnPIG4mUh4s1q at b9q#;GD_2Nn`J#gh-F2_A7+lcm6^9yT!kJ(*|x;&Y#Ts
zhP=vRB6r at 5@#Md(nb1U{s|{TJH=e?^;@fw>{p<f<6C68t+WZyEs4H2yX%=C2ZYo_u
zBv)b%syDxZQEw00^!O9uVXIn~=hsvQbc-d~g4C>aAP0=)c@@P9l~yiks9w>uptBvv
z3z)R6u&TS8 at +0f8dRb$1)MWK;=qlDf+tZk4;NaWur=-pcFmE}@WmQG;yn2ot!X!!f
zOJP&RTQ>zT;ER$Hqy1o<w}IMY at oVI#6%=Pls1#WX{lb!}Qdu?tgep?ec|3ZsJst$1
zmcr7!oV-+a$M&b5K}{CEqwlh at d-(nx{QURFe}D7Pho8&L>V5e7nsaB#_ASr7JafiG
zYy(+U6|`R at OMnX2zX!oCz~qz*CSCX5U;enDqKNjg>f+_qm#<RAX{X?4u+1%7Hw!K-
z+^`{P?o5+MigKp}5a_96p-fwMZX^5$&Ys(N{jqO0wTm`wa$!kLISO$SQam)k at ULCP
zHe7f0TGX_$)5iZYB{eoYIE{<_8>CP at d<9reCK?82;Gc&6p2h3d0PrZSEAs_K$?{#h
zmTuWh`JsUe;kE7FnUR~`|IigtFvJVeC1^oC2M4!5 at nl(TnXnh(UybTv(>jb0Y<Zz8
z{-2_TI_A0BM!cGFu`}H=g-2%D*NZ=0!6WW3i$C=9YzHu(OSf+IY at +|N>^TRx#Vmf?
zF3sOpEM!$3JP^K}@3^sN_nzT;tVho9`R}Fl@>RB-I)|*x`rr8EbMunptbcb6LMfC<
z{)=WxWm2dDR*jM$n74DMFX-;<K7EECrtjkAzAM+c5aG>)O1qC7nL73tnfaMLCr{1q
z>6tq5-g|!a^TN8SxU at u`7Ou`6FT5gHCZX(`O{|pszRQoWsR0t==FLpYP7&=j)bt5=
zM^W$dGoxpWXYJ04ni^X9>~Xe+2(|j!#D3^YTMi#>KX$zR$g#FVM;t4U9OL<)I%Co=
ze*B*~A#oXPymo!l<4?98J+WxhMm8yTjSKApJ_2%}z<4O6Yr#9=d06}4MaF`Sk6mw^
z18==2ZW|Xj+a_!A2S;Ao;OlRRUxOIY0KsLACL><NZQ-hZ9%C_IgVXcX0Y{xGJ}x7}
zmf`D=gPGXS&;IUT_wLy{Tn~P18p!JN=gI%2dk2YnzPr^|A5F^3vi`^4_lt(kHp`y;
zXO78H>fEyv@@H{xCl$A_p|0h?!QO|iEI)cOIzQhOSzYo_r0;FGdM!njl&SZnWhPbi
z^|OK}O}bA9^{HET?b!bOOZ{gb*!Jv;-*{F at ehI)X&(6=_u0%;hw@=Ru{5C)x^diDm
z*%#3(597eObNs84eK=`v{l?O!#qxravr=ZyniR`nI_~bcgt>WnDLkJI-7D+Xtif>W
zDzPV|78>L~6$LJoqejMJMQz#A{y-YAXe at p?U!1UeUwU<EUk76frIKF~n7wp<26b_!
zNQzPyrPU>dDru;pUoGhC3EJiP0$YK at r=bcC7TU9+t*M|STL8l3%M#V+`#SdR-8Wp1
zlEww1V33X2*y`4A1Z=SWd(K}>D$1w-kH7cl%eQRwAov&9;ynm-0Lfzh(aHo&iHp7O
zmp_h*o?hP8n$fh}6hTf(#o`V%=Bzo>Q!^96e)wb(;^z?594vAk)f!uO{qc2IuYa2<
zZQin}pt2}5Li?HXu=<SO!17Iw<}E}U%cY6)3aHOd;#a}9^XI-UH7jNMl(9a&|Gr;%
ze5mV`A6mV at pP=yMS<}*s^JyTmf%x{*OA7-U!|Gy0<@!*|rD#cZUVHH&hCij9Mbo}x
z3kOcaiX~gFUk7Fg)SkRF%s=Y308UWVxE=B<i|4OslC9Z&@>J-DaUya1+iJm41bMMx
zY<=to`7hw5a13D5pZopa!TJ6B_7B%XZ6g-zifx;BzxH;=rEB(FvB<V#C%Epd|B8V%
za)d+cUlbCjQ)7EG_@(tPX+68X-n77o7BtjVuU=DFQE2g7na!Iv$oYbcC~RJqU7Slx
z0nXupS<u<G>f)u|2QRO?e&butXPl}=b0!<4V#&gJv+rMX?eWlnlP3IX`QCjk`}VaD
z4t5<szV6y%QPamu at 8W?0s>e_GC%@PEz&n%@16G8n1jNX~rq4_mcQ;3BN?xX=4*BC+
z^b2X3iHJ?)&QtzXD*$zX_FVPA19U>br`Y&86!?m&Vky8GnTghapz{}Gh%H*l%hwL@
z^Wgt!T(ink)_LS;==TIDy8!T(Mla$!m61x}r1_)cHu-GoKl!u2vy+4S2Z!syy~7?P
zvA4hQa?QpqG#sjO)4stmvu3gW-1UlWTP5+a3*drCCsr`|FJuF>Q`(N7a&Y>@dx4x)
zL%~4Uf9^ayyja-SyM8n;F{Zk=w`|qgpZ)yDwOuQlckH;0bBNd$C6 at u`H!Xt3v2MeI
z%QB9eH!CeSLjYIw8Cy7VDy*SFuA-_Fsq at k?O=Tu#W+mH?G(e6+8T3BNFE4<3=7bdL
z@*pRsC(etRF*j<ml?gHwGk3<pcYjU)5&I^t9bA<7jwFSVAv~YmhYr%0be1&1bQP!O
z=Tz{bZOcY3BcvrjgJR_?_U?5aVQ=_1dzw%uQL*@qC7Q9Ygt~;MzlIvN$V3SD{9YOd
z1`iC^gVVcmas8q#TgiX-X#E43FWGl+{R^+N0q_3#k7R5G at _*+xnk{~Yl{>Z``S3G~
zf&O2&akES2&YL}b@)+uO)5i5ZXU^hf-SYJF<L~}4$yv8*)slS&vMNe+8$0H%+c<}4
z3ArB)m>4q+^8 at 5hc<?z>#z;}@KKp>oTz>V?`GWF-^t3qjwo($Jf+LZ$bPhR>ik#xa
zgId0 at 7LtEnUT&bSXC;(Zm#%;0(a^OLc><r$;Y0Xag362-ehTdf0B?Cfq{;>I<>HO>
zAn at q&h#q?P*FoCj)vLkcFUl5B1F6M=g;lt?ro6VNi$BvA5dOg&p at HRFkfyK^B?{pK
z at DDYKMGOeK<C*8eJ- at HU!2<_}@v-K{Gl#zX<DpM~yZ6^$5dNiQxw0*)w(Nu%7(e0O
zwmrK%6f80(K;Q`4vGw44A5wIo9AyogmY&C+O-fHFU)<1n{N$qb>rj&=S5{8E_os<z
z2 at Mj2lVj0DEZ={i?Z~m)IEV7n+0mf^)zprjGA2AYN0uP9Y)xly0fo<NELpc2k+l at U
z!t#Qm%Hp#6Duh3sNB`RoiwBIJG{zHw;f-~}0~WfL@>5!#4;ey$OMHX<gJB^2t!J?k
zrH28hxn2WUU1z6dY_*G_XJjSkDi%|gk9Uq3M_0nJBi80wlfxeQs~G80z+5P}yz1=P
zozFh68UnYEs}v6CK5-(l^Y_y}c<A8pJ?hu49sKw=d*A-x(C2>;d4%>+4rzK?IwaeK
zDHAL+K#2Ao+vIeBHOf^PeDhs7>>@!j@=OZ|+>Du%el=m-yn+JQ0KTJ=<;|1t`*~`1
zD*u0KK at PgY@}-RpYgXUJIZT;1V_{c&Xh1nHeE#9VS-}MaYGEd|A50>*tRVc+Uv12u
zGYu431&Yq2N26v=jEjrPDlL at 8t3ros!}zzHtVFmSB>>Ec((_0mX#N`dFkSnPAGKK=
ze*dG at r%x4Cmyzcl2kH=*tL#x(1Cc+2 at Q3!a_}LLHTQ<QKs+X!9s=NSS=aR_I-&gz4
zp~J)Y*#6S%J70Mdi_Y%1KLlb2Z^NzeU;fj7;E22Hr+?qRXLqpvcUu2DA+j*r?0w~R
z>z{<ArkWOnJlSQ1RlR+oDZ-9Y*4%_+0a;Mv#*J0Iy-`!|i;JC6vas$p&LM;Y>`iDu
z%*<dsk%KD at kdzPw2;?NgHu9st+zw#LS&6LCn3Q-uC*Ob1>>2md=Y_PSCGzUfOacr;
zZgP1|8MYz;S<qR;5n{^vTfJ60ln&|uzJk(*S}-aa5hNi=&Q*Ksx6}N&JuP)O!_^O*
zH$GP<e<@=bpiVsQ)=R$oGlvf!8O8 at yL2c;eJGO6r_9b2p=`ddBlvnXZRIgblpB)9a
z^=}PGZiSBC^U|wJg!_*krD>R!%<|%@_LlJc1PNjdwZgCIc^Se+-49)vJ at HrYmWX=7
zeZGAIybYMY|NMiYp at LGUmc>8*n?U`=m004=@V$i3|J4SIfc)p$nj1Y$;i1f;+z=pV
z>yuA&AMpS%Y=h-ml!XGF+mp;k7fJpLD=Tbd(H{Hc3l1DliYkp%9m<a-tpaBE!NFU<
zT?ja&`L}G|U^EI3^)k00JtH$nrI$W)>m}dInIlJz4(~&G at uJq&-S2$@XUMK3<R?eX
z6r<_B@)-SJj)3(q#3?ku3yRo(iDC}Nk0XDU4&Z3owlzFINENb*a;A>|r6BC$&6}OK
z`12}?zyQL1Zc9Vi)9Tjd&`<<E at K1PHMd48(=9d*X<0B+R;g9}814NDHFQlssS>eJ3
z2?<dFbRjQQ8JD#5cp{p$E4SB*mE!{e(tG at vKsE#&#`x6q1Q?<6>f!}0O)LUs8L9E|
zbZiI00c_!0zZVlJ;ZON7GF@)%rOO^4no at R7vMs}$-+IaSb>`^NW5fFxc=+0;m*3j@
z!fUcQ(z24p at j3ay4yQ!V7Bls~;QR@#{}r3o17g9?^c*{S{5N<Z>hM2+M26>Q=EQqA
z{HKinrKiC951n7o(*^kx?sHojTtHpNg8vK9azgavHCL}k4l4zC`PR)c7K09XX^|iO
zxwgO=&kvV-xI=bPj>Rc4S$x?_wmu=NF*Bfm77JF?UWiS6&@Lc?@O6wVBS?H+v6v4*
zj+h-VSjmfO`3=Hjh8s{2>}cbYD(!oAkvzl>?-R2^zzbVfxaarYICkv#us at dX+}VEk
zi1okx^n(K at jzO<c at 7*=zfJmtIAEW_xK{l*WF9y>ToZFGle%t-v!_l)Q!vBQlXV&C<
zk>pGocUNX%u>M2mF|9EZ!hLQ_gL at p$m7x%xsDGsXZ{)BPB!#-<2s^3%HSbg8r+>1o
zG={YelOO(66wLbE{P+_|33I at YmGKHP6XzERNHPD{Jaif990+&*{1RbwPY2rb&cS`O
z$L_(sk_e#p=}Qn(;sxO`Lk;<H;1kRZ`jucx$Z=|tRTwEL&tohM>Hqz{#dbLoj-E$u
zbX~f(^YwRY8f&cW^2!2t-L`iRX10LO{Ln$rxD~wI*B@={@3H$I`tUOyB)LRR&aBB}
z at H5DJ$t=pD|A#(;sFyPs+3nl6F&1(ghQ`500{<B~rsS8Txl=(mLnq;IB0s&g9l$Il
zXJscvendZ6*xqdM2WrgD?NT1{3o^LH2!9Gcrc>yB5LTDq3ZU~Z>R!3-@)cq{Gzez`
zXDNVO<d~s0{3kfHhfB5v%xa+d at 7zxFk!z1V28iO;OTNc5Cr+Fk2}k|v)upYiM?U>c
zMQ!PxH{KDfbk}Wr_RL>c4bKeUF2qm%t3SSIRbS87bPbco-G%%%a&oMHj+g$2uVobG
z)UR0s@#52hsxtdaWVdhM2K86^Iy4SabTozn(2>K2ut2z%oum#$espUaUkbp#kay%q
z<Ub7uB8Y6aL at 7u}bb&MNI%_XqkwicVREa|Zk?a6{SiZ$2Ss3F(gGd)b;3-fZIi|Mx
zr1=Dze_;mmf&WUL3(7?C;vkh^?ZA-!-}~E>Cr^!>W6eXCY}}ild}i~tYsY?nlm5dI
zMB*VQq?9rZ)XPw5(fZ%__6O1Pq9{CqT;chdHD%1~srPl9I-8cCMQm0ttU{v8BB)%x
zG~DO5G!}HUu`|%Nghmquh?_kza%7pm4z8`x$)c)~$WMo~K_CGBBTur0t<N1VyzIx@
z`0(J#tikqxRumCj+n(Lz|Bjbl3teLGfY?zNX>m_`-_avZdUh~ru$3am)P|<eIS;*U
zLAt7Ek|2BwsS*?gE=cd#vun!}PYt=`2k`dv$&(}Hp!Q=#S$**mE|i0x{HAr!9x1fq
zJ2YNVPSQzrFli&*$BylJ{hgAwwt2C$Ha`4tcz&$^SyRR?-#3_&n at NAL{y|@4&CAk7
zpAzo&?Hfe8%A^*Op^ih^&z`vYp-Yj&BD0kmgIXLG!ujO5S at L!xJA~U54}KoMHhe}y
zcD&L>gg?p8Ke^`IIqphM8+;L~FFw?|bB7GdP=D*zYFD&NfLJa}=p=Lmla}8sa!g4;
z0ovhf&0nxUat#`7;T72g_)kEosaTQye<1Bsr_PL=18E`5xg at VcAABqkUT(JhYv2|R
ze-wq*KN#==CB}~&!HYO~{M}5v18=_vuO6DBnN#k=!!Poikd>+)R>!XG!o)t!nO}xb
z?)FY2-XWfUW0p78frDbN8Zy2b7PO$Ux{A<wxhF$9gx-2atjVr}2g099C9v%6ap_sf
z8Z>z^S%4^Z(1u5 at +Y=?xggc7`%avvjS<({docA~=ejyMX?xTTp8ZCea&7lK!xYWX2
z)-DhQq9Ki?13i)be>m;ar_YX at L!1{4;ECVd1VP{a%A4Y13S(hPvHqd6tbhD|_6V`1
zZ7;kc|6S25Tv&MiLsJBDIqm*?sybH2q$ZSA<U4#6cvF`yR^<KmPNPy9fDq;N^KqV(
zE@>p;RVax3ikMjw)pZ4R>o|Pa`Jjwfby;KwZG=>`dI>M#^8s#$!e5-3loC6?Vg9b?
zUcmRF8v9}a-!o_W&OIO|vhK<wq5foro(gJgdGZ<F`_M_G%}fcpVt7pa5BQ~vJV##x
zhpcu~^MPY|+h#CSnUAQha1(|5|DYQF;UnjO|A!FU`P_ at 3KGtpX)-6gyDxt#YYu&L;
zg(KCgPv5+0MK!PPn=)m*0)+ at 7fF7aN&60G08B at l}rk@=jLmybSs%P7cC-%MeCh8~u
z>)Shx#Cwujc-cvYm1q+XUd@>j`4#yU#U2WYR}`VpdC6jt9kf-^VvSZWstcXxw-oB-
zpIOq|Az?ohilXu%{|_nyKK=yFAJbiU5N3kifpg3&S}^BJ0xhUkpd4#%s2eaw>B3rO
z6rU$xo2&sm|DtjVyC91|yQh-45yE5s&>CmYJ}`0)@fQn5IR=~tw4h~MHoJH7jWQri
z!{yEpIQHcqgJSD#%cjkmYLQn|6=AA}y3}*}q%pH+P0lDSkeSZ)XKUau#jlP(9BP^&
za2sc`c4bR?db~O;Dykb6W2fo>L&lGtGg)2l?7Z}xf(#$cnKcn{L}VYnQ<iV|jG9LY
z at lkZ1^;fSsNu}|CW2|NS!1>D~>pXZc+?i2K&nNb`KmBa at BsEVJdlVU=Gnj?&(bcbP
z at h#k^o)`JT3M&*AWq_3A7G*mF^Ao=O2iQ1w?)=C(1oz|95?Fkk9;beHbMgAM?%lGt
z{yPTu;ko4q!WYqg at Q`G&sdHwijR+yY1f~?}Db+nXb{1+-IxWVhy|2Ep`P%h;ufHt~
zoFM=*eH&+zVxw$2&yQTHrrmqM{*mnr8DB~xs(-FU at H30er*mgdf>j801Lm<TnYy93
z(qSyuK>2~#@9if1gGv*}j!GgH=URL9`pUsUnosyEs4=`-^1s4o at Ok2m$7pQ><=6zk
zu5MjU)O-9be!tW1fGe!7zgJJi{!pEOQiL!6VKyFk;KIl`#O1fY at jehE2JaouKEG%k
zd-noL6TWWcEtakwuoBcjY(xFpSTlL{bc>v-u>PTkz~S_qa{oOFq|TWaMT at pUaQ+~I
zQz_f}mpSVZxQ#PuOq9+^u`{SQ!2DHRov~4q;ns$H1->}xhrt$5lug-~IdyDKRe5G%
zwr*M3Nfh#R4_*4YovikXL>}4;8wVvjmBw<dKn}WP<A!UGf-YOSk%JTU`(J-++mp|P
zPjVd#X)WpRrbqd%+KyJN{v2rR>wI=}c^=-Rr8{<V^)$3K=M?9np#!%IU;e{voIn5I
zh&nI=fx#%UKtL_%?Q-uDBvG26frb3B3n&nYdmKj}o!=r{+|$8WKK+NAddk3^mzpqj
z+Wr3f^Xtm2e=H&g-v3x}8MPfleQx7qs`lu&N$JYX&yc+m6E%53*UBN|Pn&oz?oGHp
z)DVz(irP=Q|6YB991~(WKTTV at ip5X<(?%e`rM59kRr&*R_U!kaKHYWVWcTsokt5q3
z=zeG)Z~<Y4^wIo<RfrJb9~jzFz3RGF22WGd!mqcOEDR51zHYukFfqTP$PB9(7&+z-
zvwh*h#SwM%o_!#o$GmcF{pHIQ%}e%t at EP^B>&RhtA2LiK(QVH>j}^q;-MVQV$F=ou
zlTb?7EZslu?%4EX$%cfRq(7--9EJ)i$v_l1JN1X4&uu)gS1F0hs+BMzmvi>?@jUjo
zjz4eiw0ZMpO`kCl9}Dhi+$@+JLc$+nCoLmE7O;%qys`q8uZ at qgB<D*`3OJDa1+L at o
z8ZxYB2fRVe4&GhS0iTlUSTdM7G at rW8_LQ`^q?CE~N0MJYBd5^D8&7%AxQ4bq at pQnx
zd-BAPF at KnEAAInk5p}4lOf-SO?SJ##?9zhW?|%kb!0yBC)3jl&^|1NzC!6;Tww`)m
z*_ytryfk<)nIOl%{DWB<ci&wxX~~RDm}-R^u;vB|vyxR6h1S0 at Z|_XX-n9iN3 at 3og
zY_Dlsj`phK#Hk_QqC#s-^wfEAQBiZIYbfE3mVrZt at J~vP#r%LWNTxib6N5J`Ck+C>
zqNW6^XOl{zR~~6UaA56~M<U1M_JkGW^QR-h2>GbAvH%x~;BV!MWmPTBY3T`AxhRu)
z_=0q<EJO}qPvKC-?S}ai&q?HfKj`+wOAn5ugSQ_O?1|sq-0{rw at yW3}-~Mp^(uKGl
z`p-Rp6`^(a&h=NXFWJ4f?c76%pfht)<t~x)hd%m(tN-46e<8h`w1 at u}))(1SS#sC&
zFBa95%M%Zhb8qWRlHp)E0$7RhvvK|xlod>!GM0qD^;_<{=V!87)UQEIbkF$vP=;EW
z%^TMyC(pHol`gD7%Rn=sz%!yP at 1Da4H#~erMUVDFhx#vEj2sYAr&zE=MJFwOF)s~i
z@)%=qzn3)B3ZJPC88|!@nlH<P4zj0^{HzJG0#r|K`{u`PM2`7GZeM)p@`yTw08lFn
z1j}#b0^R)58)XeOfS_swb6m>^UVHiBy3JdEHg&rHzL}|SUm?zm at oe`CFaO*B?SGjb
zKTntmuM|sA8kF at fKwMN?LH-LI-1eEwD#=$E7lt7 at X>MkAN>NS4^vU-XEm<_=i)Kt6
zmz148W5&d((<dRMvOQ7D6B44?Db+2 at x=x*$mz&M)v-O!5ctqjQ=<4FUN=&MZHe at KY
z3}vEz=g-ss8#`K<(nX5bV?MlaA*(o#eNkLrBR$jj=(Sl%3W5h2G)0-Pa0^%Ui6eVV
zhK%_`e*4g+hey=GUy+%cif~m3jK;F&@n?85aI{+gZ8AQ#ZN+we;M3oZOGrY1V`h-j
zBM6cmsWjog{kQ*S?2Ku}wUvpf at s<QY*Xqkxz`$_*t-ExI{J-rp$+D*W+XC>4;QYy?
zx-Y8Fsw}<ri+=vozn?gLQWE7yb<u)!=w;CT#p~BiON^g7Z30IwEhP=#cu98O at uOg_
z>mGfg>*VPn<1l+wyO0q-ZR&WQ|DDgiU at PG+AlR`!N|~ubpWfd`y|?(~l(D3k-X03{
zp=u~ou_Ox*8S at AJ_R{4mBkgECej0*BYSQkPU+a9};@|$=-!yI7*#E!<CDEI=ZRtDv
zz`plCjVdYQDl{{!10WW`pp93q{N3OEdmg{y1yxFLah at pdx$5%O?N2_9iiiF~{@?bQ
zl#^vl0A}>~mZD-4Ng2rn3+sn`QHBaa^UG2)lO(W1H1Wox{p>t-CMrHArM&bf|L|XE
zK3g7t0!0HuRm#u6#Y-K>Pt2TtKdlK179YOMxXhA#+3|{yZhG_vcpI%Is902*OIF|n
zC|Xd}xNdFZ)@^KFunMe<@ccj&{H_!p)d7?-BKe2>upj>0%MV{2X~)2&D`4t94?L(q
z_JU1Y6**e8W&rdBU#0cmd- at D$P<&0Dbz)|$|E7T+&w?nxkAC!@0|j6~733I+7s&sI
zAKCWg)8$JSA<4wDdnaZxudZ5ERE9uyUaAEw^u~cBC()rsOj=&1JoL=G^yHLzrL`4o
z69iVP&OI<~#-!M!Sl-$hb7vF&lyjOt;V<U3>5=PF#?mS)X3d at w6*W~rFl&CfU;eds
zG#mDhDXrR3<;s=hxlK^&*8G)iO*?n#!-FK7hVWM%LncdMO}S)w at CHu=XX%}|{X0G8
z!&e>|X@}ZC3eFz+@{fC8e|y>SGj5+>z5CQ at W%97)cOE;w at u}x#6%<+FKB{eL!jZV;
z*_XE6c=9Jd`+ssu@`~%LIoo}z$m6PqAE8TBG%tl8IQhq$cVZ?fKgbDzu_;0U>soP+
z=oK<Udw~KO0k>!BJgA1aq!^zDi?cL${P=sb=2uLgHeurAaonMNx$z0ng(?lzmO+55
zICM1pJMWL0MX+<{#>da8tgrHzXO<N!%N1m7<)+A0T- at 8S@saDH{y{*YFtb>>x}r=h
zsbxzRN)}cZfaC|94v+cIt8wMZwUKrp1*Neo4Zs)b-jgdT%9b>$c-Z&grDZ#IaEYLt
z{qe*}_$qx`vwSH4 at TRAp-~8xfKl#~@6;&y!t3r5-L5>S(;PO?);3`%$uetCb!v8xl
zlPDYw8yh<_DK##rh>;Pm3NSO4S6|&3MJNjE=GU%U4}MVE7^JbxOqi$t#3|!{KIWdR
z{7j3MqGFE-B=+%ReE##2Vw2JmFn76D#Yy!$)G`Px*_u*;U;#4NP8PRaL)jw~)1jLx
z^3WA#*kWuG4J%i)9XZPK1(}vItk}Vwxbg31%&S+gkF*1*I5{m|U0@|RnZONu4%`=)
z*tC5|&-sUz?cKL**Y55I9?a|NuU@=h*Nd-IH!rr-H{5s{S>@mV!{6sumlxDjq8}mp
z0*1iLkBB2v50E4u|J}_yG?T1=r1V6C2VCp(X2mDPB%~!KWF#kMr6%QOCKu)vmaFh3
zzLljs)A(_B>nRqTg_Ga;(%h`#TuI6TxKK}-Wkq>a<wXms17 at xEmW8VamQd*f*JzN>
zl2Kkl+2d;kij%qm!{#g05$5M4`Acg&MOnmx at l8%pS$IjkxZxeT>+fdRM;>`}1Rm?3
zcy{@w^~=_+g7z6R{@&0GH0?X^fBe_~`XB%Azl+Mt%WG{fBM+}!t!io{?$$i=7(M at Q
z{_by7+RB|@#$|*-u6f<+{>zWR{o{g`>v#04n|Ej?86C)Gk<J-EAz at BpVzlQsEhjaj
zC?~xr7uWzjyQ*7AT~bSnbIXfzigH9QnCgK27HVxrn~)!bf9U7Um@|FsxL?)u_SSTF
zRd;n1H7}F5Mb95Q{vNI#Y>-ByCN1jiNGd6cikSr>F31am<oOZ}F-UFmVu*3oLvTCX
zp<DjWhP`&}u at QJk1V+}qc>B&RH=bH?_F`xTqLbsXghVIKs~lLp{P-D0LFfK`qGJ|A
z|D`Ki9>4Lg{`J4gtEtRHds(fJb2b-H at 1?6s0xj6MNjV7y#hshUO!ZUB3yfd1XrV`d
zZ$BX^CN3$qaDE9MS_Uc2Urjoi3{WUjmrp*>d}_<lmeOS8__I(Ve_np=d|s^CQB#>h
zazcZVOL8zE8Lhmo90TOW>yH=IRY5=%l;oB#tO<1fHT|Uv>(B^GX2B8`Iodzt_VvfF
zjl5%FcY8)rE<gXy7hVqEer|1b*}Ba|%bJ?@A9S*+dGX4<yAhrFk9VFqCt&&?{?EV7
zuBt$LTU1w>R#G68)_w6|^8erb at BeG(p at WA$`)zor+un$Yn-fs(=cgMvx4v#}>?}H%
z=s+O`=88gv6wxnZDNGNJgdiGQS;*|=lNmR80%sQ-a#?H3t-p$b<mrG2os$sLvUOvA
zX?~&9-R)aDj~rn#FsSJ~OE;`H8ZOYp<XGTO*jGr=TZj5*dgl70H%8{M_KD|E{DrEN
znt`~~1l-PZ<D(aE-_d^Zj5AoomHRAPSWDFzeEWTi<bV3t|0=b#C at v!f3?QqrY(Z<&
z%5xV7&Yb at 7T|bjKHTcmNcXTGvJ|p~e*n0Advq@&#kOtu&7at`K1?mR;&zX~f>`?8w
zr45rOj|&K1wrxqt%Sz2j&#SJ8{DqWxnoj^)Xl<4buQ&zYKED={!|Z|#5jSF=w?|Pw
zXg4Yl_x_?){gERKgZ873Juxzm4Uay7 at t~oz6%B|P$f}-Sw_|VViscr6-{oteIa%1%
zrW#{?e;*h;&$$TK|NQU%-Sn8K(#8cjwN>Ii%Z{F+D%^YjxaO^!_rCwh9i7SIhT75v
z^8?+6^9R(EW}?jW{NnWdOni*E&;=%d(<(bw0_Sku`!Tivi+0y5Z=|HfXBK4f6iL<3
zDlg7mP~#(hOIf-psc{NYV}KOT#nR7{=__n24ShZG;<0zu^mJ4EF~SWz_|P4_!S7}8
z#~y!jWFB0gEvL`p#T|VAlmGEw{>!+Ml8oy4O?&tETzoh at ArfP)tH#x<$VOVhf%iX}
zl$7*8{EL54+*qGiU#AXT)#e at aA85M8YgTQ4{oU||cc_t?79V6KFRm|dlw?w!URCLf
zX3m~EbI$bmg1pd|me!P2EU3^X%<)-CMHk+Mogl+gGZNu8Q!<m;1r-hIus28|W*TF_
zKntLPu=F2>bIF1#Y!XVBCT1p6uH;4bp1W{|?&y0T_VF7}jo4$u6VLXZIxXUP^vge%
z^$slEccAP1L;Y7C4Nr*lki at ijPC^AxaNz8I<@I@$RrgGtLVgx3Zd|r;z2uj!LkEt2
z at dv)d)lWPZzVOa97`8K`rd9X#slk_;ml67+c?r=B1b!Rk7fE#|c`VU2gL8*E<W>}U
z1QL^DV&kIh4s2dVO;K&72SJWNF{Dsm7h^#;wE#-%DmxDyQqEO<s5^HfKai1cJn{5M
zK3dLRT>spwd*A(V=i9&Tzxvp~wHsSreJ4C2g1;UO$SxcajXf(jU4P6+ at kNEXEo~a8
zLiWD#ZpYyMLmz+1FB-n;PB#Mmgyz3!q1rUbxf#B$Vo3w%CoZ7MhU&EHYI;$qM(U7X
zGCMY^xV)gEzDkygC^lvWyg)1n at ScHl4=|q>bhg7bS2Wf^gAciOxW0Yj$!A9Rv0~S*
z=51RyKl`H8;H|H{8#x=*-Cb)gK2+P?NdcxTZF~ATpB67~Za#8CW95NC4se$5{`WtL
zyy`n>BgG=9VSyy$;J+=at&oIO*V-gE6aJ0Cn_f{i<YypiP}SYOfa;(9LjHp;<QL~4
zzF4?vv$TQ*J)J`?83}KneCpZJ!wgidU4QF5<jpVbI51ezvYeT`Xx~Ap!GHgw|2)6D
ztL at Bro!bZZtLy+Fu;Z0CZ at u<AIKx+;$Ny7Ns4Bha7>iiGFjBjO)Ofzil#E2Vy2%-d
zGv>^I<fQZ17towmu4rD^+17XJR9)M0S#RIL at BATu#Zyl|H+uYq8CcZclT}l-pnXNo
z@>cY%Kl{}$YFDog_2={96=~?}-txk$e_ at 0>{n4Ves~4>vXxq0BH$`S~USVBT>EZ_9
zw6ewpCEz;c1q at -Tk@YXD1yGZ~N0vf)yVF1HpU3#mJpa__@#klNN}Su-`!|34?>9dB
zI9&0OuWr_F+!UIzxU?j7*kk9{tbg|9AHp0K)>HtqWn?EyTh1v6f(0s~+8ua=f;C^5
z$={3nw{8FaAHuKwf&7N2pM7EU_{%fUbLL#q{3 at i-5+qfVY}hIl?1wvPjjIP>HlRis
z at 2abVYM0knwQS$|L;lU*<8OQBxfe%|zd8fU4xhkyGbtfq>+`R)p1b&0`;T_`=Q0D&
zKKIh- at lTuql`sB at Jx9C!bD4qXo_~4t7 at dI;I|I+Z at XF{hIs+qi23~ma)zM>g21e`*
zy!g^<qsQnBjMy1?>E+i)kI at +zu`}@UD{qV*qcbpaXW-R0UmiV1XJDkxz$>r4HF}KB
zz=)lJS6_d7^cbCi5jz8~z46ZIF**Yyb_QO5^WD*7bOuK347~Byd!xtb42;+rc=PS|
zM~~4N7_l?();k}J9-}ibVrSs(cYZy3jLyJ_oq>1W{c!Xcoq>@%1MhwG&gd~Z10!_?
z-hKb$(PMN5M(hl{_rWKl$LI`<*co{L*Po6aqcbpKXW)YmKN~$pXJEw6z^_00eDoNd
zfe||cAAbDB=rKA2BX$Np`sB;eV{`^a><oPT=~tu2=nRb98TjlsACDfRGcZzT;FHgP
zJ9>=Hz=)lJPrvxx=rKA2BX$Np`||gr$LI`<*ctfzt3Qk$qcbpKXW)yk{y2J!&cKMB
Gf&Uk?dImuN

literal 0
HcmV?d00001

diff --git a/utests/kernels/compiler_load_bool_imm.cl b/utests/kernels/compiler_load_bool_imm.cl
new file mode 100644
index 0000000..fda49b9
--- /dev/null
+++ b/utests/kernels/compiler_load_bool_imm.cl
@@ -0,0 +1,12 @@
+__kernel void
+compiler_load_bool_imm(__global int *dst, __local int *localBuffer, int copiesPerWorkItem )
+{
+  int i;
+  for(i=0; i<copiesPerWorkItem; i++)
+    localBuffer[get_local_id(0)*copiesPerWorkItem+i] = copiesPerWorkItem;
+  barrier(CLK_LOCAL_MEM_FENCE);
+
+  for(i=0; i<copiesPerWorkItem; i++)
+    dst[get_global_id(0)*copiesPerWorkItem + i] = localBuffer[get_local_id(0)*copiesPerWorkItem+i];
+  barrier(CLK_LOCAL_MEM_FENCE);
+}
diff --git a/utests/kernels/compiler_local_memory_barrier.cl b/utests/kernels/compiler_local_memory_barrier.cl
new file mode 100644
index 0000000..39a94b8
--- /dev/null
+++ b/utests/kernels/compiler_local_memory_barrier.cl
@@ -0,0 +1,6 @@
+__kernel void compiler_local_memory_barrier(__global int *dst, __local int *src) {
+  src[get_local_id(0)] = get_local_id(0);
+  barrier(CLK_LOCAL_MEM_FENCE);
+  dst[get_global_id(0)] = src[15 - get_local_id(0)];
+}
+
diff --git a/utests/kernels/compiler_local_memory_barrier_2.cl b/utests/kernels/compiler_local_memory_barrier_2.cl
new file mode 100644
index 0000000..dca4a9c
--- /dev/null
+++ b/utests/kernels/compiler_local_memory_barrier_2.cl
@@ -0,0 +1,7 @@
+__kernel void compiler_local_memory_barrier_2(__global int *dst, __local int *src) {
+  src[get_local_id(0)] = get_local_id(0);
+  src[get_local_size(0) + get_local_id(0)] = get_local_id(0);
+  barrier(CLK_LOCAL_MEM_FENCE);
+  dst[get_local_size(0) * (2 * get_group_id(0)) + get_local_id(0)] = src[get_local_size(0) - (get_local_id(0) + 1)];
+  dst[get_local_size(0) * (2 * get_group_id(0) + 1) + get_local_id(0)] = src[get_local_size(0) + get_local_size(0) - (get_local_id(0) + 1)];
+}
diff --git a/utests/kernels/compiler_local_memory_barrier_wg64.cl b/utests/kernels/compiler_local_memory_barrier_wg64.cl
new file mode 100644
index 0000000..b2ea906
--- /dev/null
+++ b/utests/kernels/compiler_local_memory_barrier_wg64.cl
@@ -0,0 +1,6 @@
+__kernel void compiler_local_memory_barrier_wg64(__global int *dst, __local int *src) {
+  src[get_local_id(0)] = get_local_id(0);
+  barrier(CLK_LOCAL_MEM_FENCE);
+  dst[get_global_id(0)] = src[63 - get_local_id(0)];
+}
+
diff --git a/utests/kernels/compiler_local_memory_two_ptr.cl b/utests/kernels/compiler_local_memory_two_ptr.cl
new file mode 100644
index 0000000..46589ba
--- /dev/null
+++ b/utests/kernels/compiler_local_memory_two_ptr.cl
@@ -0,0 +1,10 @@
+__kernel void compiler_local_memory_two_ptr(__global int *dst,
+                                            __local int *src0,
+                                            __local int *src1)
+{
+  src0[get_local_id(0)] = get_local_id(0);
+  src1[get_local_id(0)] = get_global_id(0);
+  barrier(CLK_LOCAL_MEM_FENCE);
+  dst[get_global_id(0)] = src0[15 - get_local_id(0)] + src1[15 - get_local_id(0)];
+}
+
diff --git a/utests/kernels/compiler_local_slm.cl b/utests/kernels/compiler_local_slm.cl
new file mode 100644
index 0000000..52c078c
--- /dev/null
+++ b/utests/kernels/compiler_local_slm.cl
@@ -0,0 +1,24 @@
+struct Test{
+  char t0;
+  int t1;
+};
+
+constant int two= 2;
+
+__kernel void compiler_local_slm(__global int *dst) {
+  __local int hop[16];
+  __local char a;
+  __local struct Test c;
+
+  c.t1 = get_group_id(0);
+  a = two;// seems clang currently has a bug if I write 'a=2;' so currently workaroud it.
+  hop[get_local_id(0)] = get_local_id(0);
+  barrier(CLK_LOCAL_MEM_FENCE);
+  dst[get_global_id(0)] = hop[get_local_id(0)] + (int)a + hop[1] + c.t1;
+}
+
+__kernel void compiler_local_slm1(__global ulong *dst) {
+  __local int hop[16];
+  dst[1] = (ulong)&hop[1];
+  dst[0] = (ulong)&hop[0];
+}
diff --git a/utests/kernels/compiler_long.cl b/utests/kernels/compiler_long.cl
new file mode 100644
index 0000000..e69c5bf
--- /dev/null
+++ b/utests/kernels/compiler_long.cl
@@ -0,0 +1,8 @@
+kernel void compiler_long(global long *src1, global long *src2, global long *dst, long zero) {
+  int i = get_global_id(0);
+
+  if(i < 5)
+    dst[i] = src1[i] + src2[i] + src2[i]*zero;
+  if(i > 5)
+    dst[i] = src1[i] - src2[i] - zero;
+}
diff --git a/utests/kernels/compiler_long_2.cl b/utests/kernels/compiler_long_2.cl
new file mode 100644
index 0000000..92be93a
--- /dev/null
+++ b/utests/kernels/compiler_long_2.cl
@@ -0,0 +1,20 @@
+kernel void compiler_long_2(global long *src1, global long *src2, global long *dst) {
+  int i = get_global_id(0);
+  switch(i) {
+    case 0:
+      dst[i] = 0xFEDCBA9876543210UL;
+      break;
+    case 1:
+      dst[i] = src1[i] & src2[i];
+      break;
+    case 2:
+      dst[i] = src1[i] | src2[i];
+      break;
+    case 3:
+      dst[i] = src1[i] ^ src2[i];
+      break;
+    case 4:
+      dst[i] = src1[i] ? 0x1122334455667788L : 0x8877665544332211UL;
+      break;
+  }
+}
diff --git a/utests/kernels/compiler_long_asr.cl b/utests/kernels/compiler_long_asr.cl
new file mode 100644
index 0000000..901630b
--- /dev/null
+++ b/utests/kernels/compiler_long_asr.cl
@@ -0,0 +1,7 @@
+kernel void compiler_long_asr(global long *src, global long *dst) {
+  int i = get_global_id(0);
+  if(i > 7)
+    dst[i] = src[i] >> i;
+  else
+    dst[i] = src[i] + 1;
+}
diff --git a/utests/kernels/compiler_long_cmp.cl b/utests/kernels/compiler_long_cmp.cl
new file mode 100644
index 0000000..90dfb60
--- /dev/null
+++ b/utests/kernels/compiler_long_cmp.cl
@@ -0,0 +1,29 @@
+kernel void compiler_long_cmp_l(global long *src1, global long *src2, global long *dst) {
+  int i = get_global_id(0);
+  dst[i] = (src1[i] < src2[i]) ? 3 : 4;
+}
+
+kernel void compiler_long_cmp_le(global long *src1, global long *src2, global long *dst) {
+  int i = get_global_id(0);
+  dst[i] = (src1[i] <= src2[i]) ? 3 : 4;
+}
+
+kernel void compiler_long_cmp_g(global long *src1, global long *src2, global long *dst) {
+  int i = get_global_id(0);
+  dst[i] = (src1[i] > src2[i]) ? 3 : 4;
+}
+
+kernel void compiler_long_cmp_ge(global long *src1, global long *src2, global long *dst) {
+  int i = get_global_id(0);
+  dst[i] = (src1[i] >= src2[i]) ? 3 : 4;
+}
+
+kernel void compiler_long_cmp_eq(global long *src1, global long *src2, global long *dst) {
+  int i = get_global_id(0);
+  dst[i] = (src1[i] == src2[i]) ? 3 : 4;
+}
+
+kernel void compiler_long_cmp_neq(global long *src1, global long *src2, global long *dst) {
+  int i = get_global_id(0);
+  dst[i] = (src1[i] != src2[i]) ? 3 : 4;
+}
diff --git a/utests/kernels/compiler_long_convert.cl b/utests/kernels/compiler_long_convert.cl
new file mode 100644
index 0000000..e5f7939
--- /dev/null
+++ b/utests/kernels/compiler_long_convert.cl
@@ -0,0 +1,19 @@
+#pragma OPENCL EXTENSION cl_khr_fp64 : enable
+kernel void compiler_long_convert(global char *src1, global short *src2, global int *src3, global long *dst1, global long *dst2, global long *dst3) {
+  int i = get_global_id(0);
+  dst1[i] = src1[i];
+  dst2[i] = src2[i];
+  dst3[i] = src3[i];
+}
+
+kernel void compiler_long_convert_2(global char *dst1, global short *dst2, global int *dst3, global long *src) {
+  int i = get_global_id(0);
+  dst1[i] = src[i];
+  dst2[i] = src[i];
+  dst3[i] = src[i];
+}
+
+kernel void compiler_long_convert_to_float(global float *dst, global long *src) {
+  int i = get_global_id(0);
+  dst[i] = src[i];
+}
diff --git a/utests/kernels/compiler_long_mult.cl b/utests/kernels/compiler_long_mult.cl
new file mode 100644
index 0000000..5b96d74
--- /dev/null
+++ b/utests/kernels/compiler_long_mult.cl
@@ -0,0 +1,7 @@
+kernel void compiler_long_mult(global long *src1, global long *src2, global long *dst) {
+  int i = get_global_id(0);
+  if(i < 3)
+    dst[i] = src1[i] + src2[i];
+  else
+    dst[i] = src1[i] * src2[i];
+}
diff --git a/utests/kernels/compiler_long_shl.cl b/utests/kernels/compiler_long_shl.cl
new file mode 100644
index 0000000..3786b77
--- /dev/null
+++ b/utests/kernels/compiler_long_shl.cl
@@ -0,0 +1,7 @@
+kernel void compiler_long_shl(global long *src, global long *dst) {
+  int i = get_global_id(0);
+  if(i > 7)
+    dst[i] = src[i] << i;
+  else
+    dst[i] = src[i] + 1;
+}
diff --git a/utests/kernels/compiler_long_shr.cl b/utests/kernels/compiler_long_shr.cl
new file mode 100644
index 0000000..d4e859c
--- /dev/null
+++ b/utests/kernels/compiler_long_shr.cl
@@ -0,0 +1,7 @@
+kernel void compiler_long_shr(global ulong *src, global ulong *dst) {
+  int i = get_global_id(0);
+  if(i > 7)
+    dst[i] = src[i] >> i;
+  else
+    dst[i] = src[i] + 1;
+}
diff --git a/utests/kernels/compiler_lower_return0.cl b/utests/kernels/compiler_lower_return0.cl
new file mode 100644
index 0000000..fd9846e
--- /dev/null
+++ b/utests/kernels/compiler_lower_return0.cl
@@ -0,0 +1,8 @@
+__kernel void
+compiler_lower_return0(__global int *src, __global int *dst) {
+  const int id = get_global_id(0);
+  dst[id] = id;
+  if (src[id] > 0) return;
+  dst[id] = src[id];
+}
+
diff --git a/utests/kernels/compiler_lower_return1.cl b/utests/kernels/compiler_lower_return1.cl
new file mode 100644
index 0000000..bcb6b7f
--- /dev/null
+++ b/utests/kernels/compiler_lower_return1.cl
@@ -0,0 +1,8 @@
+__kernel void
+compiler_lower_return1(__global int *src, __global int *dst) {
+  const int id = get_global_id(0);
+  dst[id] = id;
+  if (id < 11 && (src[id] > 0 || src[id+16] < 2)) return;
+  dst[id] = src[id];
+}
+
diff --git a/utests/kernels/compiler_lower_return2.cl b/utests/kernels/compiler_lower_return2.cl
new file mode 100644
index 0000000..9fa8ad6
--- /dev/null
+++ b/utests/kernels/compiler_lower_return2.cl
@@ -0,0 +1,11 @@
+__kernel void
+compiler_lower_return2(__global int *src, __global int *dst) {
+  const int id = get_global_id(0);
+  dst[id] = id;
+  while (dst[id] > src[id]) {
+    if (dst[id] > 10) return;
+    dst[id]--;
+  }
+  dst[id] += 2;
+}
+
diff --git a/utests/kernels/compiler_mad24.cl b/utests/kernels/compiler_mad24.cl
new file mode 100644
index 0000000..04bb2c5
--- /dev/null
+++ b/utests/kernels/compiler_mad24.cl
@@ -0,0 +1,4 @@
+kernel void compiler_mad24(global int *src1, global int *src2, global int *src3, global int *dst) {
+  int i = get_global_id(0);
+  dst[i] = mad24(src1[i], src2[i], src3[i]);
+}
diff --git a/utests/kernels/compiler_mad_hi.cl b/utests/kernels/compiler_mad_hi.cl
new file mode 100644
index 0000000..82b09c7
--- /dev/null
+++ b/utests/kernels/compiler_mad_hi.cl
@@ -0,0 +1,4 @@
+kernel void compiler_mad_hi(global int *src1, global int *src2, global int *src3, global int *dst) {
+  int i = get_global_id(0);
+  dst[i] = mad_hi(src1[i], src2[i], src3[i]);
+}
diff --git a/utests/kernels/compiler_mandelbrot.cl b/utests/kernels/compiler_mandelbrot.cl
new file mode 100644
index 0000000..d15ccd0
--- /dev/null
+++ b/utests/kernels/compiler_mandelbrot.cl
@@ -0,0 +1,47 @@
+// Used to ID into the 1D array, so that we can use
+// it effectively as a 2D array
+inline int ID(int x, int y, int width) { return 4*width*y + x*4; }
+inline float mapX(float x) { return x*3.25f - 2.f; }
+inline float mapY(float y) { return y*2.5f - 1.25f; }
+
+__kernel void compiler_mandelbrot(__global char *out) {
+  int x_dim = get_global_id(0);
+  int y_dim = get_global_id(1);
+  int width = get_global_size(0);
+  int height = get_global_size(1);
+  int idx = ID(x_dim, y_dim, width);
+
+  float x_origin = mapX((float) x_dim / (float) width);
+  float y_origin = mapY((float) y_dim / (float) height);
+
+  // The Escape time algorithm, it follows the pseduocode from Wikipedia
+  // _very_ closely
+  float x = 0.0f;
+  float y = 0.0f;
+
+  int iteration = 0;
+
+  // This can be changed, to be more or less precise
+  int max_iteration = 256;
+  while(x*x + y*y <= 4 && iteration < max_iteration) {
+    float xtemp = x*x - y*y + x_origin;
+    y = 2*x*y + y_origin;
+    x = xtemp;
+    iteration++;
+  }
+
+  if(iteration == max_iteration) {
+    // This coordinate did not escape, so it is in the Mandelbrot set
+    out[idx] = 0;
+    out[idx + 1] = 0;
+    out[idx + 2] = 0;
+    out[idx + 3] = 255;
+  } else {
+    // This coordinate did escape, so color based on quickly it escaped
+    out[idx] = iteration;
+    out[idx + 1] = iteration;
+    out[idx + 2] = iteration;
+    out[idx + 3] = 255;
+  }
+
+}
diff --git a/utests/kernels/compiler_mandelbrot_alternate.cl b/utests/kernels/compiler_mandelbrot_alternate.cl
new file mode 100644
index 0000000..ab6fb07
--- /dev/null
+++ b/utests/kernels/compiler_mandelbrot_alternate.cl
@@ -0,0 +1,38 @@
+inline int offset(int x, int y, int width) { return width*y + x; }
+inline float mapX(float x) {return x*3.25f - 2.f;}
+inline float mapY(float y) {return y*2.5f - 1.25f;}
+
+__kernel void compiler_mandelbrot_alternate(__global uint *out,
+                                            float rcpWidth,
+                                            float rcpHeight,
+                                            float criterium)
+{
+  int xDim = get_global_id(0);
+  int yDim = get_global_id(1);
+  int width = get_global_size(0);
+  int height = get_global_size(1);
+  int idx = offset(xDim, yDim, width);
+
+  float xOrigin = mapX((float) xDim * rcpWidth);
+  float yOrigin = mapY((float) yDim * rcpHeight);
+  float x = 0.0f;
+  float y = 0.0f;
+
+  float iteration = 256.f;
+
+  bool breakCond = true;
+  while (breakCond) {
+    const float xtemp = mad(-y,y,mad(x,x,xOrigin));
+    y = mad(2.f*x, y, yOrigin);
+    x = xtemp;
+    iteration -= 1.f;
+    breakCond = -mad(y,y,mad(x,x, -criterium)) * iteration > 0.f;
+  }
+
+  const uint iIteration = 256 - (uint) iteration;
+  const uint isBlack = (iIteration == 256);
+  const uint black = 255 << 24;
+  const uint nonBlack = iIteration | (iIteration << 8) | (iIteration << 16) | (255 << 24);
+  out[idx] = select(nonBlack, black, isBlack);
+}
+
diff --git a/utests/kernels/compiler_mandelbrot_alternate_ref.bmp b/utests/kernels/compiler_mandelbrot_alternate_ref.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..011d5836c1fded74ae487d074331e51e1bd5107a
GIT binary patch
literal 196662
zcmeI*$?r8sb at 1`z&6_tN2}#IE=E*T0;*fx2lfe#ynF2W2%%d=~2?2y4vV;lX1QuC9
z0I>kXf<TZEQUHMvuwVrnSg~Va36uqY0jzmH&vX17%GKR<`*!!ex9|PklAeA}S65e8
zpZcCtr>eW}@A1#L=_h{bCoZL%{JZ9o at RRZHCx7DMm-eJM9&&7da$o8HtRVf=MM^8s
z_YpK<KlmS95f=&k2i at zzHNWx(oIL*zqTvGXtenF`HE$36ALQ09FzKyZKS*D!`J$)C
zf2;e?$1ZDN%|PzCZM)`wpSN?Sdn*m>vujp+t&`z at tFAv6P7SP<%>6WMr~L2d7P2c(
zUiiOP(&BfzpPpLbRd&b!9&UDV3|3O%70kE$e`e$N&|fRO#F6qpv#(cp`gW{uDn0oI
zSBU6No3tbTciQI3ox8#lH-X%9{HK5Vr+ab-vL at W}PWx_cl^+-X6MA#CrwjnwpN;vU
z)PKT*b0;WaZJ_R`J-gt4M@^m3iR(P&!EA2W3+(^jm9$SQ*ik>Os at kLAf1MalXw?SR
zJBNezpZS at e`PrZS*((-s>Hl6U=$ze?F`><?!gcY+EYAPpEu7G0D?Fu##b#C#j`oK<
z<RQQLo4?5f7=mPXjtRKzw)$DTPuEl7%K6{6r&d_LiFyCQgr5L)%>Ufa{oJqo%C8`w
z6+G-=50f*~1kP3vHn=SR3)=MxNuJQ8e!iQz75u?}n7}Xo;xGRE&;L9t2>#C|FrT+|
z@;`yJwVl#rymfGhf7pZn7k=Rvg8#D#%!gkM3-Z56dsMPEk|(sM#dq^q34a7XoV<i~
zkq`0>0k$z0h(ochPPE&+&VvqadxJ}L^cw0}8~@w(#oEe02&^r4x(p}b!M|C+ul?Gu
z_41!3%SyJo{<fN21HJRxuoVCETcU<-yI^hQx8kiTTymRoQXTw1^q~*^rC<6bQ4mAu
z4gpy>Pp>Yqad%sNF4F0Ttz;$qZ>#wgmfuKMyFfx)3W;?3|6l#pU$y=tRkMIBnL^al
zzG(O8wu(J0z4NcW2>&yiv8~QmSiTF=Ryif}rJOJ)|G)gpzwC!Q{@@S(Acp{ls+2>+
z*#tI{d2s$$2=i7=+KTg`!X@*iT=EZci$8z*r+ at m}zx~@Dhh-ELw5JK!4byP$H2yVm
zD-9^T5wq16n9u*5TiaI8Yb!s*^H%vK at THva69R9OU)Y-kSOxMpEI0>zBxMNVB69?S
z-Lna7g!6#>uMOsH+p`tqLxoG=E4j-*wlN=10e<5*euE&VN(!(JBgLNir at f7^t+2pM
z{wLqjwy>?O{1DIE=2y&@yA}W8<k60Bc>nt4M2?&=3bSLQLp~#m8lui^8>ajOoloZB
zP$wRQ{|Sm+)hQEL>OG~Ty(=gG5&R_ofJeJnNC-rb!XoUN8k-=?$@oVlS#xh2+L;s7
zekhWsU3dTdPf+QqPH6+P)zKugS7`H(b0a`_d$wR#*b`3&7)Y2*>Hl3~tF~p~3Cf>_
z;z7=u!~cW^Pf+HnPDv`}3%$%|W(7Z<OaC7ZAM<=Z=C8i`YJ#wb=Ldf{|A_z3CeWsI
zpZu?i<Oz+L&wSR9oDT^b`G-2^5BuN${ojuXZ_EYS{JUJXVZ1OwS59ezx00ii`Jd4K
zX=+ at _S>tILQ*sFV%n$w}jEQaff1FFfzX!ogfFanG34SThN+Zf at Lm1P-s?4-rm;lM1
zPuUy)(-gRpvnm*7?p8E*caz&BIpDX2_htMq at z3pB@DT--{Acjv+^na%#I*KL>x(_}
zyzS+t at xSd=rm1cvXHBDJ=&TCG-rXVRpZtSgv~Sug`1!rx`#pw`{y!`w4QD|UnA{!P
z(z4I;d*FYv-qvv95XO`9dx0-A$H33wV_xv{yTALpvF49|$>=bWe^;Dv3)6aJpFD4S
ztzGj!O=BxLYXTwdQ%cTz<#gBSz=P-T{O|^OkZ;)s`M2D1i}+s-i;$9k<)enIu=jH9
z*7hEq)-~H=xwrBY_#fZ4X}Vg;S-rhKC$pEpDzkF_i9N6- at C$gZy6P(AOMn0Oe}DV!
zw|gDV6hQJuL`;FxWJ(jLE|k05-qGaV8IR3AOP=}f?a*zh7*jrx8xqo22e&YescvrZ
zk8=+Hk&k at jZ~fM9{mGyFi3h&;fB3^6ZkrFkl7E7#vf82Rj%j>ZrdMNQGWQAg$ZPG6
z|1k<#XPL6Emy(Cr%lxDiu>mlLFQhTg%>^I)%L!M1#~pXXU-0~gfA|OHU at jbQ#KjQc
z+^A#>|JtzaZBFjEky!4n*tYzSY}jP|9Q?#>Nf=W;As-SFenRjMU?dCd#X0d{H{h4U
z|Nqe+{ZYUlTc5+kEFg`==~079(gcRC9{FQ#B+E?hrjh*Yt=KO3pRAmNpP2o-pwOny
z(JuVq at WG6BD?B;972!nuV-`^I at BIg6qF7oAW0CAi27<gqyD?kc_2kal8{1<pv=#qj
zDpY2&W)6GeR=q#6aGSR-{CqWT|L_n0P at E&4!TIm}&hNk;+qPtJ4vP@&m;C?5U;G9C
z&osgWFz<Ae0_B-fISbg>o{{&Z*qqK93DO>lEzbWOwH)x=@%=u&WE-~h$tgtSgI){!
zo at xP};3ZGnNU#^`{OCtNddy=UW92hU;JWLsd-bbdZ91%^?;?>e5hPWKg0|v6+C1_e
z=k(Ve*dB9<W%-|@kOQ7Ovb(n`HUa*O`~e(39QJ?qXMYB4<l9>LEZu%7zvLw^F$#!+
zVz96 at WJFL;`u~x$fNb`do1N2TW8mCFneqH at Y|I>O9Pr#R9ldRtq^K*Tw=V^7M&heu
z-Wt)nkVdp49QvET`I{={FX2y_jr`?b{w1qn2xNmr3;|JjUa{M%-kdRaJ*VR~619f{
z7o7hwUA%3XUX~&=39N)G`2Tq2liy|n9R6SZ)n5hPz)sGG1U7<s<P-RRV}VHogUb5j
zx{VfAhc at 2(9R8iV2g2KzSc?CddN|bS8~b<L0u?{GTLEA0CY+pqq#OdwXJP-cm%VHV
z_$vPy&v=HMSG?jC at i>h0XGdNBT|FDNQP`+~IepiLa}P&H^51UB91R at s+>JfEZGm2v
zO4Pe@!cVw@{{tZqdhsukdEDb3XTn>d-q?No;~#&`HP>+dMv#hsSIIW?wzfC3t%sRC
z*hXvDM=vb@?LM7ww3nQOtyd`F at A4mOKEfCwO@sFCAroQCq$a=k=lsL0@>*p}dfVKa
z*;dH$n!tSiXWsikPH*?-gri+%O3a4jWHN-(|3er5x7~J|VE&~qeQ6i+MvmYoo(1&s
z?^;!Rx{dG6X{cppC+^zGH|ih5f8%tAX5Rb$PjB?&ghRckRDkvF4#Cd~IBnkB11vB0
zSpTsE+MvCA$cdsRPY~En*Z+6<*Sy}l=w>$bGqWGtjP35|O#Wxy_5M$9^x%X;T|#<M
zuQDt0W4Cnvf_Bbd<l`BZ*W0>;w{yG>;Y7a_8jGJ<b9vpWNwM3#oo>#MmS%S4?g($!
zJcs|8x4i$;hx%?>ewU42sH)5o!juzH?pne>bPWNl;5pBE&doR9+y=gT^oAR5;QV9#
zCo3o96$w?t%H8g*l{rJ|n%SXkP<M26Bma%-&b;3}pFY%U6Y@(KQZD)Fl}q+2IT20%
zh3>&WPkzrm_jCzw<XAEl|HS+^)_=18(gb=N*_)a7m_o18W_D<UwA~$=%>T at r-Sg?a
z{WUE!87PIsrUHA+ZonDjhw}$5{&{cy-^1UxyyYzo+PjCm3*;=PtE9{SG!uv$EN{72
zdo#OrcbpH^d=dEX?WqZwW$%}Au+c?5!0zT}P86_B_$&UA{KO|d at xvefa2N7Mj;{mE
z9ZLRHo7bvZm6khRh<oo<;7tCVJ_PEH@~81X|2FqoLvK%Qn^^*1%CJeELkPeiCkW|+
zS8=F7nYimn;r~7VG6ckTjt$_;LlOLV_?7&tFfUPFJ)6Ce{3xkHr<0W*GJ*Nsx+Bhq
zs%`T>bk_Xa+*=LXa^5Xp(q73y4k`c!)TGNU>MUJihMf7OkW7Z~0QZ;w3-|@___va8
z3h?>Qf4+pgAzy#}^;+V@;6Fm3(ggBy(Xh4^<WVhGNti&~^=X*E1pfDi?)(dNVcs^U
z0>0c03=m?a1#ePd7RcEOLeLwTUGf$1l-4#Ts(BUxW>WCaldI<|U-?Rd`8 at RJfBxqN
zop|`=bd{)0(uQaT<_U6KI&w5DA#VtZIalS*QtV`gfD`6_Thy!aCF)%{;Sa}Xu|3|m
zffjcSJm!G0 at +F*bys<@*G9J__teC=fBjGla)4_~?Cg!c4<a|glUkIbSWQ|wqjM~x)
z2rlFWQTdvYhS`QcZqq4ROFo$)puvA{@H5{h at 27?e=B;+Sv{yON`?i<?1EdiJya+r*
z;JEepl{W at VfLFmE{A0<B{h$@$2c>AYbfYRYM1|_)b at A`1?jQg09}kg#>#euOH!^Wn
zSdB_p!QFS?ttDhFk<`OlU7BFK(FDRkwBNZJqn&cfA%Jo!_0I3&UiNm8d6N8B-7$W*
z;=Fe^;Sc`91W*JF=<??{^w#~~{oUVzP$ttrjsg;jLXd+!<X?B)b at 9eNJ|)q+U$uJi
zi(l;M=RWs2^?dAOA5*82W)n(!w)>s$e5bO4Yp=c5rQ=PBH^2GKPk;K;o#-v-SHAL<
zh<(H(9`P^#@-OTnOpHa`c;k)UDfL=~qtU8>JhwR(WR8|Q-5qIp@=pVyqDsT_`B%d(
zXz$j!75|Ie*RCt6`eNj6FY4XQF8s+q&Y^`{U#xKcWgH&hr4<n5C<9ua-%CEghN6V?
zAO7%%&?P+o`Op9Q*S`++M?LCM74Yp{&kL}9-+lL4J2h}Hhr8~&>v_+69{bWlSJBA7
z{_DSXb&d40XpBvXdL_hBX2Pyrx0ip4s`Na+m%FU)BIm^TuX<tRZkO|+oHqZ^LbYFA
z5M5&|Oh6{VHU<Lx5W<&&lfwtq4}S22zx~_4wHu7J at g9E^+xhtzgVF|x^GCi)T#FFD
z5fP9NZNabEY)8lx{O1smimFsSpMN#%0{E)VA^xjkb{Dy$omNtH!I<6bzA-`xKRJU0
z*g%?hHARIPjKwgx65DX^;J^3Yd&T*_VS&Ap5<z+K$wxl&k>L4R&wAGV_utQHbJybu
zA72vfU;gr!S*1ZC&eBxzjK)AZqM+d4uIAZF@*|OD-f+VWgftUMDD_q<e36dsLb!O&
z$?#t)e~esq+!(onzv5qX?WwD%n}Y>B*xvZYH^$GB2+j=$f^&zsP!!pM->x5R`1r>^
z9yG?Mi{p8oP*QtXWuE98v6!KhoTHsZFk#KhqYB8>W>fpL7x%~mlqOKA{U}UeB>#)t
z%kC<vG~eDGLwi-G3xCBwDo`C@<NwY(?+nbu;a~gO*U09Zrm+xGh7-0RV|0-7&2N6w
z(NBHqQ;Fr?1fd$jFSq)EKc4~qKwZAJu~|nMth=+-_*mv;8g7A&ocZ4!(&KAx(_S8}
zs2;!D<v)WTk+66m$pH*7pjBZksxgfXr;4kue)X$S;P%^ZuS)J`_vJ5td5l&jAYQQ!
z$OC at 2pq(bjZiFF7DKH9_tALX3y5gTcOKp$u!A8l&1D>kFUjJW}X*BQPhf0Mv<ngF?
zOLpNeoqzD3CJ=#*CC5iU`q351e$2$sAfc!_bdX(hlW%|f+l<jCHn}>AcKLwUBvX=j
zn at DKK;Ty2{e^$d-*n4*hT=B0v7Qv&UaoOFY=Dz`a9_sSERZcJb760WBU?meF7U8={
zzy9^FcZmP|<R?GbJ$k?#RCD;ey2Lzj{)RWaL3^J3<R?Gj2~UVA1L3BdZekY-xQjFY
zi<tJDN|Nv)VJpsi3lG7c{3Ac$5C1PtwxVcW*>(Pbw>jgppZ)9uqTYLH&kOv-5YKP$
zdeW1g^uG7KuPhepQJM{Y1vq~e!Cu^W=%-R$*&TEGw>)=QpI_Ft(f^mtSczO}xL2-v
zWb*D1|7GxB@{bKG<guh*B9t;0n)2ENUR at OAF+^{}7>F4G{$u^eb`1Y|XAx#fVwaVV
zj{jcZGjlTP-4lo4ubh9$KPn)^PYSBL6n+2u-|uFwB<FkI``#x$@d+(|(TiTxZPGj5
z at eV$pUAsY%kHOAe$K;nbD%E9Qgs=$zDp?l$tgXv`9wIE&_@(NpbX)FLy)bikBm8<F
z1Cj6`#S)MqKp^p|SH0>z?|Dxbq?PBGynN#u-{@`RQ=j_OaQ<ihmx6iQdP>?Wc_!`E
z=?(ZB&OiA#i?mu|7Vw2He4&@6HD{Xq_BPL&RV>~{<P#BKDymdq)irjv?daa}rCVN5
zJ_`TeRcYpwnqNfDKJ68v->*3SODq53`2&8d;`~4U4FOER3kKC6>gq*n{h6Qs^rx-p
zKIJJ-5#6~{x8LAjFJ$k8(983L%muN}sv7)HXyGnSsg#+!i_l(G(#w3AS at NIcC;WUP
z_{9larRn6izV)s3vpuGT1_ckYEncx}cYVVAr(F<s0rR$XChe6_al6QF$$77w at LzKJ
zmjiyQo%}rPBO%}NxExQEUi;eDjzQ}v$^`i)_3_wuTmJRkw*B5)zJzlrx$^&IwY_cF
zTV at 4(?k<9Qw~}7q%giqPm^WbrJfAP at k;vZXlv%!Jb`*pUHS$9r`Vj0rAajou{1lS<
zsq~qhmBLcklzc8C5AnZLgD2FJO6v-ho|oFqejE}4ep{{&27+Pmqg{k=%k9HM5*~Zo
z6H6w)Lqr`*zQ<nNz7^4UH0*wbc}Bf-{w4qPR`x}=<0fFxd&(lrmzAuI|E}sHr&RB<
z@(}ZxU&0Rn;SDMzZ#7#L#J|sSkuNs3{pd$OdMt!*Y$q#rv#i_D#_E&*G=Wsnng3pE
z-70g4eE9)<sqL;j!6>?wbaN8^aQ^s50 at S_X`P}C|SDfR4ub0H)i(L;-$NWmeM)1~C
z;F-^SX8Qk(f0F-l2q^X6+m&0v&?sDb at A-1C|8HD<7l(S)6`843WR}|Qf|@ybN<+xP
z4WT4I;MecLKc6o)u(pYI9~i#yg)c;`*PD$9>p^#smU!mN1oF$Z90E$^gbpihcl&fH
za^^E%)==`F`Aao*V?A9hl{u+W8U|kIyg_VrC{ItJDloKLc5cYXkCgu3?=T4deY&2Q
z<#&adb25TpFQU6SL%>EDMixj)7ZDD{f5~~TTtW*%;7K4P4{<v`ze|3Xe?HJ;5cx)d
zfBeUPJQ>J`Zp2rUm!~_wF4!{{h+YV9km?G}XO|JWeL52FF~t at kKPu_+Kc)eb%XHP!
zo0FOh#nLn6I3L^4|9sTT8nPdIg$G>!<>1HF at vkMZ+G7eZgv}}Czw2G^^5&|q^^F1<
z0;O6gZ4Cc9dNMZEiO0x)FX!FNBtL}YA9$$q7D}2xuv%igQSQaNoteE%&;}{^w<H1v
zG5^z^_Ow$%y>Tz5Jmo at AXv0>ggb9>=*X`Mh$$zgNhB8Y9l9OlZ4gA2*@gmS}o7<(1
zR{XoPq!~yM3|R2=TU8zpHLy92Ltp&j7cB&J`KJy1vx4ZX?7`kHuH5+K-J|gTy&7m_
zrs`6t_=ln)KrhgCV7U?UD5j6bpHkLY!cSI-sv-<yhQYty_s!I4K;FI!cZ&Z=lt2}s
z4SFyYqBs4Oeb?L3lY#G^xReQG{2vu|FEk;i_uku?skamoegfSFilJ(1PclnfD>=%5
zHi%6VkYAPT-OWp6J<;9Bk6(@w|M)^SeoL)Q&Iug-zz06?r7wMn{@uP?_ELmFP?EzV
z(J&ou<R1eQaOyo}o&2{UA3B=MmqM3+_=WQ!lrZ=5ob)QJoA at q$l$pJ!lvYrd3_0yc
zcU$x4 at g$!Fo&eh;Z^2uj;yvH*|MNfpbG#9xJ1Bt(P|gMCe~9gk`6ctET=7rCNalR#
zoFK`O64azOa|jA3A8XffN_jL-DTT5?%Ia}C at +D7udB3;4?QK2@@BN*JkvJV)vA4hd
z?VtVZXQSEX!trXv)mL8~J#u0B-$;0)KnZ*$SNz9N8{=;TpO@$_QnDIC904tp;kEQp
zc~(_e-&Hx~ZdRodYv6v^kPkdMdY5gmpEDH&asD2H^9htpWBZJM1VxL4KxO>j8)!8$
z8(@z)Q~_V^mhhAD2|_R<knc^H!==X|?_}m~5F7cP-RPh^B at cyAa^5RPF*QqU&{r*9
z2JmzG%i?sTwHXR;x#bqa>;B{agY!Rz at J5-E_O9IJADmF6XWHg%ph%8w2r?mB;%(QV
z at c&G}iBUewTw?mlDHZ%#CWI*IbOVqtp-cvkl-LEE?YE%$7W_Z<v5%#th<|bjXmowU
zqi%KRQ2xJhYa<VJfv<8({wY=pK7(h=FR0E}b79H7$4}EM5J(5Hb{!J`C~Uk&uM}kz
zAUG?^SHPFMS(OX9E>pS)3;r7|Mesu#p+LQ(kD}M2D;p$i1$m?Jg8WBSjceth#(j-E
zRH5FxJH&rL%aeyc=YL}T!S;2pdmYrn7JwZob}_HKRSQ<&y=9q>+S*lvvl=E4 at W*wX
zqAJ$pEWZb}k&u%tVC?ftLH at dv_d-LHCH(vJ|CpR_0uld@<bNdLjbgpDSD7XJ<jd~=
z0sqe}CyKab2pAKSOPB<wZN at nPxncpWQNu6LS_tK}WQOm`!b2ud^6xCcziXL;oFv<0
zZi)gW{>0ZYp|q0!?8*iM=}YGe3-Z6QF^xMKc_@|B7E1mD{)~Tu|1<&g^5K>s{JK8!
zdFB`nfSL*CipjTRXWgC^C?=Cp$dQzc!6H!4$S28<%PHo>4}S22zHRpl$zxDC$ucxX
zpP at 9m3izwwNB=gE*ht#=0{h{=aW7jPYGa>A+x+Jc09qJxL`>iXFL*)x at G=i?SH5IL
z2;@2o^EcmovtRQDWPGt6`C$~Ou1ugLKj3#QWxVbA{`bHCB&i;MQ=j?FXXu<ZXyzjD
zzZKz)!io1rA^A_|U;6)&f4zWYp5IS1=|RBz6xZmCdCAm_E$A!-V4q!Vmqp0OKYMYC
zN>s&UY|F7AWLtr*Lo7wyoAq2w!5{44Oz3Jd{~#If;oBwm;Qt#)k3Y1L`LaMS|6u~)
zkCaTpSU`UL<-ejBKzcX at Y^=(c19cVw^2AlnJ@?$h3M^m0<~6T*=R4o2Fndv6x5k_<
z$qym;SH at YMcxF`>Q^;q&(HGms{|oZZI%b+c&VPFiZ9L(Pk|o<4<staH{D<@JosG%_
zxr9%DiqV66i}t~)@3#EJu`u3pX#5(vzd&c0kSq<wK+uIB|4ideZ+esGzu*1tcP}RP
zdDj^+Mxb~C{I3Ll)-l9CB}-S_|3lEo6?6U~pMUzNf6A^Qy!XBDwLW8s-UFI4zbl&#
z%k)PW4H;^4mJis~%(4JqCOPJPQNu;}=CP}*GRN>L(FsRkt5bNV=(zN64S%>o|KH`m
z-Tv`MQz0XTP$PX-sf3@~0jFprf}HA)&G}pBWoM0%{fvVM%5d=3x4xB45lRyvGYXeG
z;V<0BXerBBZLs+1k84v4L(msG>v;JWK~?;Z$Gcr}B=cEp$oW%m@(+G)ht6RsTwwzK
za;`~P_Rh2=8ecN1;o8f8t5=`KDBu#2f`9V`(NtdOf(tRv(gnxv|98ZHQaxT6a{kGG
z1e_KBqWyAuI~hyASZf7IgztqG-I^vqkc<mFp1)x?x&9M7(Ui)|KQxp4mmS at 9jFrEg
zvpawOTk+p+`S_!yHpa-~;g7JBXD&k^eX$5&_uY4&-!L?HR{3S{FKw8E$6nGRmpFk+
z{^x)G$10HLfO^5uTm?V6dm|@vm at m&=C;wxBFUxF<d?MhtmFOIhk|)2WrRJ?X^MX*B
zJ6j#%@Z&1BVQA$;gat2mbX8d^(B at E1I)6P_cIe*tXA5&o!1`zD|2H;!Oo37lBjsM_
z&#^?JWIkV5PUitX=J9FK($sb1I?n{a?!W*3SYJYZBv+hJ&*`1wJ;Pl8)Gs=yJNeb=
z8#yU`_)K|K{Eq~_ESB(J;r&7XQ*wm;;t-zM!z^U_rCFYzTt4|)7B+(mi(_R{EHruf
zZP`m4X>C6KG79UI)8Id?Z==nQDNusFQ7*%t2SI;%hk7Fg|8&j-U~j?mU;p)At=`{x
z=bbx6h<zbH(!KZIyVGkOQRN0iePKk_OPqiB|EjMyqLS3j7iRkZY{14gZ!AzLp|P9f
z6DSbp=}*ECuCRaUe}{6-hw^!5Yo37lw}1P$onm8^TZm;8u=OWRcY3X3soYe{JcuJQ
zEC&D4l~rGFL?x-4FD%0U#s+UJP-&odx5PeV at KYnm#r6W5u!0i)<Uf{u at Q=n_d;X-+
zk6yZ5%=j|%f(t%>rVv(e=D#$Gk-(=3TpBnpr{F)rn+SDE{=@l)|Bt0e4p|iRU;p)A
zd*IL#pXUqGfB*M?@8NPsaS7|d;O7?3{3rhv{0aGxaE1K`KJ21N<0+L|-U$=PE%GBd
zbZIX7u!ngG`9J>SKlX--_oyX*4{L8%T=Rv at hK$rgP(Dg0X8%?IBp5@&{IDl$m>>TP
zHF9KrdGD!^hLG?RkS|dt$i+51e9Wza`Iu_S0lz~G<knknz3sN!tpDr{l6cDC^WnW+
zakUrn?jQJdhyK!QXZ{&T!ruVCJXFG8^3UOeTwrNS!;u6Yu$Lndn1eN$cfb4H`y at oT
zdtUqxh5zsW{;%;@7gYQw11W6uoaw#i3kUT7ala+r4Y?veb}zgCOa34Km<PELmXd>c
z0*510A~+-z at f2X6{9E}sKlx3Cn|bMiw)02D5%IsVsY3-8gg^Kf^T1w^!|ikRfH&1O
zBCvum3cFs>%)Z#0aFIWFFO{q#xPr?0^LXj at Qy5~V%%AW1vxdn-fcGEDCT07(Lbq7M
z)mMjlJ%0p0lo^Tt$3G1VHt^31B#*khkjVtdOaT90LN0q`KeG2i_j92&Uj_M`l5Ps;
zulur>+q9JAlycHLUs#0y?p+M!xbZ|fl`te^$x5KcE9_tTKPJ559FY4C3+LWy2EV0#
znm6+@?6M29(fvc>UHAQ8bZuAs&;R^Soua2slK%$k71%H?oj_7u6^q?GS_u{W5&UP&
zZ-!O<A!!Rfci(-t*OGVfw%bP1&Wk at c-gu+lDf_+b?k+r~pC6LvyZx+TrvLA at Uru?0
z70mR&4^&9!ZdDlS-Nf6gB$Ju1v6b_;<^Q?*Ud}mxubpqi^;}?a4fw)NXZ1RN-QDG9
zi1{)<>76gk;lJDXHvC|w2ihPc^Mo$s-5e)I0z7{bF^{d?nBj{5y<t*)(w at D^59cpA
zWae4ewFZ0*p^tQ2bZB&X=^ncXm7EXB^RdqwmgT>^waS?X=io<dm_RS&p{~?elz9OC
zD@&bFS4qIn7OeK%amO8|x`LcWynUhm<j}6c9$A0%b at XO>yb_XQ=ij~LEs(2w4Ca$_
z+7PIiobuQ)CI;9g<O%@W(JW934gntjwn|2_YkJGow7)So5gyrV=VJ3U;8BY{%D&UZ
z6&qm%2~P?`KEKRQ?>%3b<Nr(G1NFGa;5qJ{9FW_k5Ft9<^3?&kL-M8AwGE_Wm%T`F
zl#tAOl7e{wzpVs*%k2OD at Bco(*UmL8q5=L*XJr=$52wffBDy+Pa!MMo{>;URNG}5a
zXa9dn=q`9K7sUUI*_c2^ZlyVpV>iaW*ot9<H|O|&LDE)R)kTQ^ll&9{`*NF6UrZ1L
z^AXaQc9F8_fS|FQ6vv^+iOGV~#r(EP+8Sri>p!ctg6L}<ryrAq5|1P&g>s%dB+sAr
zW({-ZzuD$eDDN)hym3khhD&XPT?FTiZJIzZ5B^AY&+GrI<^QzT|Cwh=e##9K;Qx`F
z7EuXZd+AyP>{XHp|L5nwtL0zAPWbt63{Q!DCG=VWZY$@{1iB^VRHl);PS3F*Mw1v3
z1VZAX^ZP$*vxU=s|EFyNl||Ss!S2Pr%uMDhp)!F8gv_kZ?|-fh{%Fr>zyG<>1foD$
ztc1KRSLEkzX#&O+Ccych-~V4H|0n<ce at XZlImU%H`FS*%F9rOk2?YP*AD_B-7Hm3j
z{{CxihQK?W-uGV?k;c&8TV_EMz`rSg_$L;E7=lFMtRUW|AUJgX{`as(aeCkX&f%X?
z<m at 0_eOoB~KRJg0`~%)QMYaqfl7RsHmn`A@`wxfZ{_ at q&zyHt}1;&pBr3obeg8x_o
zMSjeMBPR?Y_!k<TfB)xzcHre(qp%*aWT)fwWBR&ugCX>CQfB6(tNFs at hhI+g{d+W^
zY}*96y8TqkkdP)2{M!n3;Ei(wL7CDP98yL)|Nh$nO+X0B1WxSt-)4qDVK0>l#O at IP
z@=FuoPk0rfPLN+c8VD1J0+ero^!)pu2Q-26?|=3V5WW0YnO$>W1)M+Nfi3vQe+hrc
zGQ$K60b(S>#QFE156J&X{{HjshJeZhy5j;9z<H3L;ZSJ>!9V{W{2P4FzyE(I{!jJy
z{}<ukxX?@cP-YGXF$yI7A*2c5UyArg<a7S}FNcCZu4 at R^7e-{=6hW+hth%^2LMSt1
z*15=b=KR;`*^IJ<)8tAIV|K#|dQE_aV`#v?*@4&5y&5D;I{*Ez1De2z{r#_H`DZm_
zn6JvD34}k1Z4L)afVasn^2`*xBVi%PMBx1QANOnsuRH0#|9Frnh%J<XP-y}&DB$0K
z8^dnQ0+ at hgA|M=M3xd)GF)+%U|Nd`7pT=KDqYHG6K8o%uecHz0Aw!P&!h-S7Qv6RC
z1$u{o90)QB%7vhq3tNu%jM$9e{P*7*#4dj5g#Z5gQYKJ(gOT!h6Ub2@`1djL{4Rd&
zYhU|_M?AtW?mqUhkLBFT_b$l7Eu+lqU;p~~7dnj^{16|XLo+!9l)c>c|MPu*)-cEU
zJGc7#?@?{L@#Bw{3K=7BjDlhmFa(tRTMPAdQbP6q_rE{o at xr4X^(cj}z4qGp>5qip
zC?nYwefjm{_HT2IzuXCw^c#IKBTN2uU-ohvlB9ROFrWW?1)^+ByZz&jrb0#vLqk9;
z1W~mVYoUP5;HSjtuDk9kcgM&k(br#p{Y^LB^wzh&m7gbIo{2?D{-5~7CyuG@<jcI^
z1uwYfnrn=P+yWDzrS24<O-M=FOnFEAYgPLeMjjoBeHI%U0%9#F__w8bvoNea<tb08
zek}LB?|rWsu{rDwH{8%h(O-~P;3Y4430I~zXL0`F`LD45V-qmZj at r&Yz=(N?TQCsY
z>W*XQpAq$%;Yi5a#ggqY!Vv#7Tn+)Dc~QE_FK#Q&W%?0aNxq2X?Qeg3{%Z6iANj}^
zz34?B{NM+z at bL2reEj1dw~i{AM5{2mHD=kd4I5w=Z+g?4%nrW$-S1YHyJ)+H-O$pd
zr;=B`1doo(E^Z^y3){5JMg0E|{|6ZbhD at O1AC`K-5P){kOF|fNX at o{HS%F7p<pf#I
zJ@?$h;fv>A^P1PZ^PTThSTv;`kgK+YKTW{3lyTPi4-n7*Z6H5}WBqcf{(mX{d4u!}
z8--r}%lL=p153TYV`EYj1a+%7I7d5BC0~m1>I_5yU+txV*kuCp4dPc_b(K at X?MLJj
zHDB^;SFR!_Y>k<C^*Zahn1ZE-n{U3EuILB<0so=+pXvOaZt^QN{Qv$<Ao(XyY@}ZP
z^#Y7RZbpW14jj*R<x9)~*bD*fy6jocdKO|8gMH)^MD;nE<NPx9^(JlYxzBy>w8f=U
zvXsw!<}-Aj{(l1h)8d at ov-ZP(T)G|6jXAo}^GAU;|3PQ?WNf3|Q{cxv?s2?2l7nr%
zlZhcH7O0!>vIWItG6C>QN(SLkbByV>r5Pxom=jGLy#0QW{~Rif(Pt=an*Z-5d0OUz
z{I`dIeVRbYe+~iZ|6v*M>jE9YwQ~Cs{vmBEGh_IOTjWC*`9=rP5%`^JD?rM^s!j4s
zA*~=x;4zPRjB9mg+^6K>+xJ3&k|DqnXecd)fatY!aSeYs4fWo$_RPOFH12EUp;S>r
zC{3V at e*%8c(!VX*!{OU{FALQHeE9P;6Z|XhZ-*HyEb at eP*xFTtvxeX=M}ep<Ovza<
zd)dp{oSf>>4}9PQpZLTl%!8i!%x8usOa66SbZY~KUXrI}F2(=GDL~o0#;uJ!)F3|&
z4e<{`ew!z^MK2nYdCokr514HwISO$83S010UXqzdokcDkepk-Iy4!V`l7|bYiud^Y
z;&WmQrJvFS_QwBw_|<TE`n!1wT=F0CNYsalwN0SppKJ)AVPry=+o$&Q;lX^6S&?kl
zQHAjz<3*g6ga_EMtNt=&nGm9+)0vM)34GvqPENI?$BV{6uK;;nik9?I^x6gCpA`(T
zJu<&x0$u)T7=)a;*xNRJc=BnrM}gSQtsH#>{yZfQg-|lzD at U>9U+`}V-~-rGrFyIT
z@&E<@Jd*AR{<BYq80b3E$vKPre-%z>%+Q^V$xn54h0+A*HheGl%by4QZIYAQ at c$M6
z73wj*RGGP(RjI`D-#5PTjUKUW#mVUv_6eAHQV3-6jeDVF>e6M|k3+pb0kEM{R>FTY
zZ|HtE=BLIgq2eEeoG?9uFuZYKnUrEUQsxkpQJ#Ym0y)cWdGyK|5Bk3>kaApIM at yWZ
zG3ae?d)u?0{p>ft`OT-t_Rt-9jpVbR{cIey3L5jTd=^ZJ`{aKS_*GKI|I_?`X`UNt
z?=4V~AG;O*Py{fTr7<KYx(XXREZG?~GL!Hi=sP=Q$&i_V8dSvuJV)UAqzm=OxUakJ
zI&Q?+XC=)FK=>j`Fep>bng29|UdY>-T@&c?k3*`aa7ZVg9ddu1QE^*3{~s3`mhuu=
zkLxl4{cZuum?Ay-$xjvr3^~kG$~Wcz(wDvz at uyoh0&)eC91ek6DDtTNe=LE{9|9&@
zLBj;-HXx*D+D?*(;eFspoK=n&8&4?<44Hs_X9c>RKQyvD=}AvICDe!R#hu3ZYpWw@
zRU(8_qPLCwCmZvH#p9pF`Hy>SyZ!2DWdb<_&@B{UAK+2D-4fK@$)yQsz~w%_6i{Ix
z_<zMKUU3l~2Ym61U*vg`e5!~<A?$)2os~UU^=$0U$3ALU3V!uu{J$gq^Ok!R(#=c-
zh7ekXHw|+&RE<4y@}D*`MwnnG75^?BP7ev<A74#A?P*UNa+oKUpYKZ106k>VDHKcp
zW#4ssR!+h&Q#eNc<Cc5X(#=dwCjYR<f5Jb8_VH!fc9A9!Js$jve*{0?2t6^#dvE7m
z?|PSSg<ko}S2Fp4KXnq0C{&%jM(FnGvGC8hW}4 at i(|h$(W~MUfHvB*QN^OtFdwj_u
zL&)yd1^_Ta-;tS#UxaTVU;XM=dxj`^_95hpUI>Mxy2kK7hKiA8cIyB4!++dq34B*B
zO at P`%+v8!*(^D9EZgy)5CI5yYZt&`>ueJ)r3esVo at YnI+cgw~*_n!Qxa#E|QXF|6(
zN3y-K*n;q at s*L}4Jp~xLwXUu*Csj(x6rQSX2zg3FXq=vhvVTJe6VUq@;Q0l^9)0 at Z
z2+smu_`(;m0&@YM&!;(@hH(A$*L%;?D<9 at NM!gJvO67#cDs5*ErZCj|+ve|q|9uVt
zdHboTt`NFSGJAze|6_K0>!~u!j%EVEKWFGYYQevdz#F8V2*3EnFZMjtukx~p(;z?Y
z0{oVJOm<@aHQD*=)9mP(!m08fYU#osIb(R9R;B{JyPGBu{Nwy`IQ;9p{ZpU%RAYfJ
zh{XmGA$;_sA3YiVec=)>Ih4zuF%E`KN?n!8?{?x$=JWJr;a6L4{BschpZD0+Ugnfa
zUQjOku~#llK>XufQ~nV7rU15Pg*>Fh3a-8OTKpsD*sb8{Pk*`?kEN&o?*>1muFCGn
z{z at S`cc!p6{ts&cw3Mo=gi_B7%4Jvf%3%UA1PB9S6)3)@M?McJv4xL(<Rdc0MaRy6
zwEsgN`jA&0;%%Rt{H8ZZMO7V9b(!6n*yrgNhyS?ct|lX=Qurdf*_%T`*95!?BSJ71
zM2a^7<oHJ3uj!tK3AhUbf#{AQR3?y$s`TIOwFG#MusHlGtm2<s0y?<=PepZ=xds!6
zfxsvb2^bP9Fcz=^F at rB<zV)qdorVc`^V3&vVFfV-4p%Ue|Ln?{!k+nGzX>pe%Ja<M
z%|7iFatMfNAQ+_51VlkhfVVUXm>pOnJpmK=^rt^<%Hv1IOmN(+dq49()0QWkJ~R+4
zZUw#MXJ*?3f`9Ov0)OEPUpPAWx%%EVd&$S3#;%QVZT`F6G at -A%r|iP{tFsaRtjGVS
zHoCgaocW%=tRZRd3c<f^3<0(|3J8Jl50Y2C>Q(P~&wF}7T63nE`!~Mvjoubo=@r+3
zpZ|BiVFIC?Qg7t!kr1-)W(s at bznlUbmkCgK)faPiyX0ri&=3F*5rQ>CQ^hVt-~ayi
zyO}G=`QG=w=U08S+>c{-oAi!%yu*r?XTfLwXIk+hr&k`PyE_N_^4tWz5~?8}{XggL
zaWGE02t`i(;`-3h!{(c?GhUCddz<0+zI^N%LqN>*4FRE+Qe)(*I~M8j9XWs1cH^JQ
z|F3We2$fcP?(SCoGGVvEzT7Q`faIThv?40<fApgt-Aj=r6kpBv9y(y=Ti)^(cnjO$
z?OV3 at z3+WxV>}46tJy{e1=zT;z+7Mq|BJw{k~9Ckn(Q*)&6$9Gc}mHADR+keficG@
zgyu+le;2~v&U483<DdNGCriK%E_=Kc4|%Ozd4y*Q{DwEYL92Y-{DdbwA)e(C3|>q?
z0e6wBKy*^7tI~gOuWg&TJNS><|A!hYg%9nPeYCAyVxMx!fBJv?^N?7wTG$-|uDa?f
z at JQBD4$iy=_!aAKfBV~}DxTJfd^mQ=C?Fr_3i!o%ul8xMRa`4t?1H6$U$N8X|5!qx
ztxSMvY)gKYPwZ2u_z&kV{^3Hw<L%Ija8ZO8q+<yYa$o)GSEIn~#b2(hPTA at 1%U}L-
zBx{e^%5$Fc97t<?1om!0zG&Z#Fb63GmTUY{KuK0l2^5lAB9#7TTR-1hey7fV$p0S~
z|MXU>eWP6V*GM_BFNHJ#Bn0`u;Qu+yJMX+R==Iq2YhU{s*<UCCkE6=)r6}S~<$Uv-
z-*og-pZe5JY45F^kz!kWBs??Wv|{<%#!ejy)3DWe{yzpdx4<YW{wvM*^1N;4O8D1|
zZCk$Q@|E&8?v5lsi<RVuT=Fk|5F~_0#lLy3pGoxPphv*o2=%5kmN?bG$u=nRrzidO
zy at 1nSG47>w!A$KbU(7R4$2qVQ{xAWyjO`ez;%JNu+AJK3VM0mwc;<i4khd?lk@;?c
z#CwcTnLx=uD&XPc7r=wZADu)R4=<Kx4)@-BuOH0Juc#Cbcj}9B?~4ZEg6;e7zyH4b
z?u+%71+kB+;QHk+f0^IT?=&?P|H*UAVr<c#*oQ^LxFFMSK0BHvDWud}sor)^jXb(*
z=ii8bx*^c|hX7hFyI{Orc4AvDO(6NV5{M8W at tJ}O<a78)Lq5P{5^RIC at TFLCh^55C
zf*<_g2NvG#qI5y>{fTOyXGVo+*9Pgv8*hx?taB}b)@pnr-75tDhOPJ`3+`7s0q1{u
z{O{TX+WaE~_K;%*0e=KMXqS)=q+rReGVn7%_=w)BX~2onAO7%%ep8F^{O3Ra>tFvm
zdQF_SG79VY<{gF-uAWU9Q0}_xuID}Pc}6JhaUqQ~y>)esWFx_RP~F|eQOyq9bQcMK
z>HjNlGt$F1itWMqZ_EEt3;~l(Ko7Q^e;n<a03P50X+)Ve;>1M2UkHlmIs*)4uw*Nt
z2!tRPBY_{K;FJspVyF0;_;a88oO(X?v5%=!Nizr~{qDqfzVn^R9857>S^?O5^Z<A#
zG9vL6+AYTVg9W+5$pj1m=Hm)GsxewsVP6hyaYz|A=#F~%UmSj&c;>(195x=RdSt8J
zjaHB*fD?FN1LOdM6S_<ik<7hY<Vm-$Os2~ga4BA50_FwSHVP;y0Sw8iQbSazPF|XU
zh&_C0T#=u<x88ayyHhOAQcqN(J$K)Ix0a|7x{`V<<G3`zR$~(W#J&`gf9Gn9M#@p(
z1e|}{|MyM-j%5g#GYW*Uw5=daAozz+EDT=e>wzC>1RlDAy6~~dKS2)u5zDtLrm)>e
zm+jzzjnji<V2}A_38n;lr>HRNjJmYVMJ0j at nW4zH+lD_3A<8K16s@%zw;w9%`j(B}
zX=8!?IRDe;f4&Lm*@hLQ34k+rLkPBmG}}NiG7~dG7=i*=vIUi`q+|$b2&#>N;45GG
zO1k=nz|WWS4)sKZYL?=<1eq=!IoeZt`yn}+t#W56lg|IB;h)C;5e)(RF at a!1Y(R(<
z9$r9>K=PIB2mK#3<`!3(@aaT$fq%~281ebff4+fzdB_YR!mwWW%gaT>68JFZYMVzj
zUGvmQh%zVO{5SG{>>*H$vt1uGA!leH07F6&LQsw_-ZB__5cdz>NgzY0OaT92HajQ@
zZ_Dw<j!`4{j|%fD<;Anv74zNQC>ijR6*vv}C-Z;NhJdh_h6!}704D)kV%8Os#^jR_
z#KsUHp0|ei;SYbf&3tv#lW3t=@*kDwwW?NiY2TPL1V1fp4D2 at +fYv?}58qBhjoEl3
zt12+T;SZhCYX!+n7xIlc0c4s$$v@|BImmi`MR<Fc)i|r<e<}FOd+*iH%uXMIZFl)?
z_#JIrdgjgU`SjlYnwD8&kaC*9kkBxM<TI>*3Gn~ofBXyn at 44rmHt^Na2!Uc+ttxe9
z{e*1BP&>Q%d5<ad>TPC+Hb~pup^f}EOkn2y?*H`OUYnemFr?5Wr<;@bl|u5F{PW(y
zzn7D5zWL^g at Qu4()Uhh168vZ7CH$`5ZCmE#9rX%B8k^anyMw$@^Bn$FJM)(JfBI10
zP0R1%kq9+}lKhmDQYHXeo?i^l`TIC!BkfgztFOM=i5^MdzjXe2ts(fkx6{oTQq;_@
zY#_SRLo at k5n?RQkISu&pP)Q>>`6qyu^Y?t#t3mNrLq&Ld*NK*%Jb*R?B>&~*vJENp
z-bFWa2!8n|%zq;UI!6BWRHGlK9qOWzXf=eA$<hQsEB-eG+;-b-7=GzXU)lz~I_j}<
zJOWn982-DB at 6Bmw=1Ad3?->8z=KpL00Y)z~4fq{u at E;*iL_uDAs|auJdZp9j-I)J&
z`7fK)+veWP2K)}4`JbtQgPh*((+Nj=$tij3%B2Zp2n1UEi{3r|63KX1)3-Bi=F6kr
z6!L9X`RY-5m25+AYkM=>s+ie#{O1AFNdJG5Lx7HJ_w0nDz5K{b>bgS0S at AD=!N0{!
zKh9I)-H_uWN^d?3f#MM`J7P_FiM;wyJG=QCl`x0 at 1Ck$?UW$LU&C$c5&fVC#6AE+@
z%ACZn5|Ym_f$;zM_me640T)APkROM<)frzC5G)@t0UrW%`Oo%j6gJ-e%#J(rKU0D8
zPv6+Z6ACoAs>qMslK+HX{9_tx{l~*xp9w&EBmXAL%*3og)I??ru>>0R=cOCXD-Vsi
z at j3cGIQ$wg-v4h5fsS+t(1T+-dfPH3NL at KmOd$}>#ZTPE^Dkd%AvwNnF&qq;fS-~u
z?S(y`FKY729RIHd at sB!7{=1Fo%^7pQ#}5DE{GUyr#HN?4%uMoAKq*#{&w*RLM=}BY
zwvku?m;R$4{m69qmRoKKTkr*C{LqS$9(!S4B1qx<ga5cnUcD`pchQi~`~$w5=BVX>
z=QcWe@}V|njwbws at Y2G50S|_S?qVLl&k!!%mTX~DM8puvfq>`d?PJX!^ODm&1&iNy
z*oy!0cRHu1y38CZXRG*UObFyg=4j at y=Z^3F at g=u40k{fUBp8ci&~AIlr(gaBHjqQT
znhSX0LFA*DQ<zVtOO{Z4vBJdKjTwJaN>1*nL!sV#-Cgj1Hh~JHHg(-mfC<Db7}CJT
za3IYD<lw*hvtoiGnZbY9j?<$CyM~o9!B5rZ_U>uG57ce>A2|e^O`zguya~iCAWQ)8
z;18tJ1PlQ}qdV at nBSIiA$azgjTqIK&g#&&yNC|)2`B$yoxO?WmcQmOoCu`~8CvF5_
zLV>MJAgmzB&n>(o{sDaaY6=rD7ZB>(njk0u{vbcLWBA|pUMBZWg~u9pcjy1z-DE|r
z;lypJ*jRoe{}~8 at HWG%zna391BLDn50)8pW&!;1wQAqrMIRE57DrpBl8=GAfnA|mM
zpuO9M3H*-_fzBpS!L!i>f>qlq7VzWuqSFM#`IbX at ds73epb`0BnjSy&p{4UL;U5Zq
zs^*Q^oyLC`yp`nan*Xy2R8WmHf#jc%{v6&syiow^VFgx)Sb<%cQu3dtr$KeETQzLV
z?uo$<&OPvdHh~hYE{ENmfHoQKH39Qtb6(+)CuM8_{AKWy=MM2-Hff|h4Sr{>#MSpU
zV;cWkg+OuL$=X}Pi6aRaS*#0um6OmW#?=rIqX6tVf02Lq|KvZ<%6h8$N4B#nHmxIi
zsasFx-uQRR(-gRpvnm*7?p8o{cZY_62!S#RG7%8}m;5WR3;w6|!g at F#YRP2&FWL|Q
zfSJsfr+0y`a?*7t%rOMOTT1 at HF9b3W#AAXus$`s%m6Vm2%@`@4D*TLMpZp*D5U@`Z
zNOXtz2fWA!{}zJ0|3HwFQ{W-~M*?3Jo525&zg=7Y9R4Q^0cR5^(JI|?SFTK;^#3>q
zzZX75J~0utYZS;wU?u-qb9w3U@(II_#{KhuHi2X>$?O%{{9F9t^BIC99AX7_Jq~6F
zav}tZ8nW`d?s(y};Xf4rXA?*Q6V9%X{1f=|^#4IS=P!|SI=}?tSpY$%Q%e5xisOZo
zhkri*(?THEl_scnRi}&xsZp|vedbjB<GDmV-gb)#Z at Fa=F&z&6qqar^h7L_ob#&`-
zZD+<mbND}-K(Lp<S3;M6F^||r%#U!<4%A~%h;57!Y{4ub<Db3pe_YsSYv=QSHi01*
zIzGQ5KX=mvuq_E}{HmuH-hA5_VSkbz1#IPnT{!m)e{wz~9Grg*n=sU_?UeDT_m)iH
zE1~2+z&5=#$@RfYK%Ur_!c6DCt!{_VI*R;7_ at 6lhoK1jHROH8Qmwz+d_!eHA6U=9s
zN{AYI&8?Anq2LGJO85_7v90pgR=&a2#zSNH7x~8ue>(q)`Pj{>HeR$Uu&q9i!o#;4
zxfK8Nhk&yQB)2If-Wk}N0`vSC;begn@?1iNcYF5&!VkH%@vlkScEk$Hw at GUpE$JmE
z)xkgVt^D-zU!AxW{M#z9?NN{G=z{z&H3XbZAYl&vBhH7tHJ^O8B{Pm@;ZkUrSas+k
z!;iFe at _!m80IdqPF}o$kCI4c6&YuY|gfsk0jWWyfzu*uMH at K~LT4DJy%vWV96F at uo
zJ at AUi$NEq3UlvQbs;aTOt*(|rZdLWHoPWC7wwu;jzQJMdq2$>R0DBL-V$O?vyE3yt
zDfCv=&D>T+t0H#U#w^bN;zPj6m;ma!D7JHgZOnr|VxicU%%|M0DvoYTzVgfRwzk at i
zg8xw3guYwnDPus*GJ$u(pR`v(mTw5#YGZAz?xH=r;C~lGz=@dv6dRy+4^_06yWPUw
zoNdWheiyK<u+HP+|AJdVfDQgG;X^rR^4mtYBmQ?c1e~4;1foL#Ps^WxeVo#!<@Amo
zDgUQx1#@g+GV>Rc{6J`T{O@`QNMAIw-;e0 at 919k2b1L(q2|ML~ZziDE7DwWORCv*V
zukQC`_&=M#wgy{~a4~mx&Hp}!fat+(F}Q%`FDB}}cYS*NpRJ%_(Y*{@<jg(rzyBei
h?9c`b7wS-{le3%}IC=i#PA?Sd<;`YCpM_ox{C}>cccuUU

literal 0
HcmV?d00001

diff --git a/utests/kernels/compiler_mandelbrot_ref.bmp b/utests/kernels/compiler_mandelbrot_ref.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..494bf8b74412e817f585ac28f6de58b7ab87246c
GIT binary patch
literal 196662
zcmeI*N$f30b@*}e&p-c!5Rwowka=>9hd4OFvB_YE!At>T9A*dz13_UhvjRdPfD^Ha
zgbauc77K=e5K<%%LISZxNO;QvBqYe5En<_!|MTAQJ1$pu*X`Tg_ujtucT0NxPFGh~
zSD*TxQ>UuC at 9(L1-28~2e#E78vwzoI5`HTF{nR5KcWF=h=|?>FQIEL%FZLDLSNcCI
zNI!j%(hBr_1Wniv{s&jYMFRg}_j+*6ue<>#&;P?{xWGFr=kQR?+XMdxxwQ*Sdh6B?
z(idyK=;`s_>i+Yw%NkfSkb7?1uKC~R?VRb}N(1}sn$=$GWcc5z>(7N#1FI!-KMmU{
z|NFUx?8=iD{_mBv_?_;jr&f5C-SNMNn_V1(l~i~I^X>kh+4w#5*9tFjr2Nn9>lL29
z9qXG)PrktwBD&Ki?TG)Kws~^ruJFW7Aom>qnV<QYp4@?~3Aen{zFS-6$Ho7I-dyb|
z1HkrYV}2<0pYZV92})QSs5@%UF8JS3QzvxdI!}2xn;Z55`~P<(?b8Z&)Q_vG_9*yY
zC&m+6wSo1{;h_CzfA(j8?&p5)iUnNyzt;*nXZK`GX!ELYUA!@i^S^itCv at 2gPw8Q?
znU#d2{gID+<Zt}OZ!iIdAlaQ`0xr9)eirZ3^;EcW{<rO^6_#&e-hVLRCqNzZKmYST
z|0}=pE68UBk9o{v<jgdIvlWC5F3bOdcD+K9Cp4*_?`CcVfAAkB at Qc6ri;sHLqgX-k
ze>Q>nyseY}38by<lqTb?gG2no9{j)X3%?NjpG{ys{AyT`|3%uPlC_aMp*=0Wo5xD{
zBlzLuCA5otkZ%aEjk!P^ifwhG-R5;3c5vGpT&knjP|w=<-?lH-R{mjNZMoBBI0+B_
z%>sV)SAVsa|14Qnveoss)#MuJo!^F~_ at CbrHEi1jYb(DMZ&l%v+mw^);Q!H&e)KQ>
z(l3dE7(#al$ijJgb%~9;+v;<XPCslVE8%}z&9AWhM!MPs653Koq|^UD_OXw({v%bh
zfGn9p)YHCb_vp5YJuJQRuf7QXGn=uk&R1Bz3({6OCG(}6Fem at N{L8=Wr#pWC_kTZ!
z0EeoSL&MnwHj;U8{#OX|R!!Q9^P$2e^QBz!4|0n?fAS}P@>{?4TONmH6cn_l3D^zO
zaPBnzHF7HrD7+D~)fSk~|D0RfR?llIKg9D^`6ckBobVF at Z<Alxn*~?}@;EFw2Ye)D
z2;w4h1cKeO32cP(fc&ow=55=v734#OOW-TH%Rja;A5Q^({nvk;Ag4+Sunr@|p82P}
zjj*k-z)b!p-_f?Pt*!hJ&)eo#%$K_r|Ka4(j&OMY+T}!!oG=QrW1~YpBa0fM&TSi}
z`~;m(=HXB$9)$l1ie1$y6Ikj!rKG(pC;t)rB>#X%yI4pFM3BNF?3x;zAj`@4M<rQv
zZyVZ~6V!evlBZpF|NKu->8eg?1GCl9B(qm&^N({QKzMt$U{}}^PX`!Cm`v&aU1F=Y
zW#I|RpN8T=&YHvjga%Jg=BiFfD&`Bl%x7i=Kb}kf9}XY$d_Lx{zWQo{u!rXde>ne$
z|Ia4SrgWeDuZrXejhWAU){vYJ2^;x`I_D4j-}}AaiwSSc1={?(T()7nFhN&NX at j?t
zqm%ic(Ee#^T*+DEX&F;;2>Z+r{v(WuZTf$lOToVf!AyW5*p&%>DbGqH%4$Ox)55CE
zv|gA1$(~Qy8~@W3xRSFf7-sHPG<J8B+ax*Qw}tm*{4ep(?OX5>1(p0~@Z;R9r at F+n
z_D}1JJ at dTn<)-n!?Nz3!ZY5_;qh;u<3dP>tA?Kg`gI~07+AH|^-QWFPhLHY0EF}$R
zK@*tV9oy2f&+>cVf3n`zaN-cglk<ClFEhu$&*5WU at bf#r^E<KTkAKPNFp_^)oNx=%
zdSstGZ+op>^FK{vD>-WdA?;I2&U at u_*Xh86=kWaS26>Qg*$4Tz-g>L}Uk;0ql7Ho+
zhODsna_!dk9-Y=T+hV!5@)P(U-?nMGTFF_xy+0?jm%u8sa{h at uuqE&dc&@tYD&$Ll
z_jiAH=bd+Y9nKU$@<v2VfzxD46R0kfyW8H;<lY&N%|1(>`S0z}ZK)VjK9L&|(pLw!
zFpjBiZt;(E4*v;Hc*1Y~=5PM-AOEojzW9IK;~r<555JOsf~vCGq3e!md|9SfV`DP+
z3HHcq?T-I33R!2FvagqthuF*fq!h6MFo!RsG0)8fAN<P+SAW-Ccg5fE{QJNEd*)y+
z9B;(M5a8UXWDNh>u<dP5?zoXy?ycCi{EuwdWc?ic#BE6!Q$8Ud5)ytw at DE@l3+%-?
z at nARLm&5=6;UE5Cz#m(m!^A8gjm7CvgG$l_hOQp at V{RnNOzx(U{OqmRF8H6UoP(d3
z{kx#hrq0nW{NeDyjCLzLIlUF(MEqkGQ1b8n2WFyJS_)&4>`DfLyhOV(Tix~K&e|K>
zV=lB6|6?jtX0m1ud*W8TKeBL}w=VpAHE#dl5B at -$Bc8$eZ~yjh!yenVWN{9Q5bc-z
z-+1GV{6EtO6TrOFO$wA}O64qIV|zy4mtu1|Ya~c}D7HBNbJTLcbI14l_>yhd(kG`7
zkq>$;?0c#Oc!HNaZ6m>6sPmJb{NzbbdXkmTFoEl?yYBU`f4%9jlD>;XzC at 5zB?{V#
z|7i2bdz{l>dtiIaC6?uXjzSK2?#S-ms at MehGx7&;_;A?&>7V{7u#s<T<+F7ArTofQ
zzS1Zl3W~wP(vT5BJ?Z~P&H}R8V{Ud%myLmQ4`s&lzp*iMv~j?5$8_|zWs;(<klwx&
zz!{0Jj(KZD??M{Uj&SI&|N5`1n7 at QSWj6BXfBxsJh9Qs*7BK`w<$1+!t9o<B-1VG}
z+ep+N3S4mh$8_<wWqMhP%p|Z9uHgUB$|t|g1UUS^{L8-#yn&sZ4+(4p^T;Rg|HcB7
z2nLn)$8{SmtPX9w_c{DKcMpWOFR>K=Gxcz&(>M0-wgoDFa<>A$+)X$+|42Cmn9sug
z)vtc_5b#z09e3Oz=e4hWZ9ER+{Mk{Le^<|jZ4@?YU{2q);oQT~k^Hw?GDiakJa=Qy
zZd;(2r4se7obVH_;QwF<gkJoMWS;Vrr<m|os5f?>`qZahbImoJzY(P3-&L{=y{+xd
zZ0liW54O?T_0bE<f4fg79PK41Ve1u2_`CeanvXC>NYkLbd&orCGO5Wg{yG0JtGrg(
zlHNA=X0{b_ye2T8|C#rGkki|}IpJuRnG&-hIhhQh^#9Ps|LwQmE|`DSt6tTGypbdL
ziDv=5{JU1wo^IoNa~f)y*@?S$@{Rh(@ZUJyp_%u-|I-`&IN?w)DivV8yF>7^0#2Lv
z_5jO^J=T9Lfi`IG9&)0n$rA*&)Aj#d{xz at nF1ncw{mksgHe<UxI+OpIcfJ498$CGT
zP?wNi)T_*j{Map>zo4D-7x{RG<@L5M;q4r+Lpaedg~sA%)?8k<YEtZWZ>O6xq@|f%
zxjVw!HP7LH<}L64^r60+mfvNg7pf|=gfQhql)IMj4_!k5D|q1xUwF$cx3q!p9=+j)
z8#w=1|H;Y;c|}6iuyVJ1Yh})mx at LB08`K>g-N=9Ax-;*0&!-Rd+JyWPhLlTwdgYS6
zN=`(Rf1!Ku&y&CBJ at 4rf-pH|JD*lQ2Z>;}h{iO-?HnKM}?=gj5rOoWn25GxHG at 1XI
zH at oN4d;4ozW-?F;iA at FenB9Og$PecaTKx0g{J)34?|Rp}8nky0c^Al8PFG2n|7j)=
zH(1_sul8nk>+U!os`(=D-`i6YGRxjC<zS<WdVt-{&zvY=oA6isBl+o1fBGjr at rf?v
zjT~PGm^+mGt2VDywJI%lyb$-^tH7E3JADY$9pz8sfBtRmvxeTD+BUNUzLa5;Jckf~
zK~50T1+U^zfiiK|k;4Cb{$&V=?;IPzmxm(w@$f78S7BbFym~f!Bl%HMg-$0cKV$;)
zyLCsL4^`Xdf9S0Fx4E|(w&lEAzNEd9gB(-<45&$$UDR2+#0)v}OCgyI;X&>%{}=EJ
z;PG!I-xT0WU;0uBc|*Sb`s=mCiNSw_K&1)f<)UG2E6Af-u97f;xa-p}feHNY4c++{
z>cYHjP6d3q8yFzON(<hkz$}on6@;KSGP~p};3=(bOjPqM0?ee~pC?z(H@@+W2J?C7
z&;IPs3_9`f%jqgno1_iV49pYcxOC)bSVG<q6mzc1ou$~x3;`$1|F)=C<xAANa>5^u
z(PDeNZv!pv8hFeBW93UY;do<<B4s?NRah~F?MA|FCZ~fL|4htVJ;`~m at RhH8#e5-*
z?vgcLsWWOzD<HU#7ewW2MjB=t{<ux2Xf63<hJXhDy}{3XpS+(MDwwz0?b2T5MDN>T
z1`Lo!6!0SO5P{>?<5%7oFacf#fAEhbFZP30gddcm-O`P!)DRV_lh?(+r at DXiM}O2y
zzRcThyDh$viL=6LRKg10 at P;>N30X at d^{`f#CfIH?fiMv5cdo{0r<`&Kpqxs*^Sij0
zy<KFUB>z=+jNh#|@7+!Kga0rA6afRe{5cN2b^o`2`?nyJ$uy9ofP|tD<X{i^*IjpA
zys?i at N%Zblt^V;J|Itw~zj{9T$xo_NNwWzhJ=^{6cfVU%!L`?3>(cS2#5>;cj^{r2
zxlVlk^Pm5^*S!w0kAM8*|K(r)g<XV+v51>)y2(4GUaN34S{0DzHpha@(Q>D|BP~z<
zX&_WoX?Q;WYS;zs-8#48f06szbtP3_jNI)-y_?yEKl#Twv~cT-70$nm!vnmu0)iZ6
zK+E%c$p_d_lyLszAOF}3{Dhaj^rfHw{O6(m7k}{=74Yp{&kL}9 at 4fe0J2h}Hhr92-
zTW#!13tdGc|LU*)%GEW}%c3zhCF+$BN0|w`cHLh7DXP-*{9f*|x{I6><G<>Kk-J^a
zhjQBdLkrb at bwPBEu`mId1lt%0 at Iwe+3Qi6`VE&uG`5U{zSR3#0N3orsk1;51kT`$j
ztHiYk at f#5V`Op^pn$32EOu>H+0ja1;)${pR!!CfY>Kx*~DrR?)JKAX_RTqre&F&i`
zl<<=?NPrEbc~?_Zn88>KgDbHO_YVFKeBcA(eBZFZUP+0dy!hn)`|l5)U+{t#eD8bT
z<FvW!@q~{riT1C3?Q5*kpb%$is(40YARSRq at NZZ1Y$f at T$TDxZ;RZsQ2_=+zD;2&-
zM|UAyJm+NiFO@$=E<0|FT)|)QFS_>BRn*PF0v>E{ed}A}XGsL-h6BO5LtH3|Y{75W
zk2ZYjQ=bYN<I~0QJWnX8J*+ZM^o>}|P)g3x&LWtw=H*cZWNNdiecFqA<N-<(sMLNG
zCNPr!Meb#Hl~kH<?~b9pD$|9(;vW^L4zTh6@|V9nFcXLKx at 7ZB(^v>8!wFlEF*?Zk
z_P4+7=;uE7xx{jBf=~_Nms|bdpU(h)pe|qA*sP-r*4^1^d at S=a4Y$BX&iwBV>G3tU
zX)ljfRFB{7@}I$vNLW0O<NyX3(5f&N)tJVHQ^nQSzy9^_fB*Z+JnwnWt4i)?_cgD1
zO^jA1ATN5+ivse1-z{jT39=hu2vQ1+g5 at fpq`R*8r_WN`<9o1Ca`Awts<7ApS7jQ_
zJNThe;SG5_>fMrE_)F&>{HF;-U}MSgiBEiDMY10=F*Hahstz4w*WBbg-}w$>^odQb
zj-p*Y;5EsVB;F<x+Hv>>EdHO>Fc$XSodQ?<>yAb6sAybv_o(@A0H24tJa3iL3xCCb
zIRseAM94ee`OYrVZ+`Qe9pXPf``OQSj~*}w)f_&rE-_D>zvV4&(Vk~M^O;Y3+S6jn
zK)Ctlo7sf|?&8e<BBnj3k|cac*oyPs!b9*U|Hu#c!~ctuttgsTcAbCVZO-U>t^=ap
zduh)L{KOE?Z}57?GoEqZefO2cVm(T;!LI=4&m!218xQ?dsw=x=PXCtYF6;Bl+BW+C
zvKcFpOAYtRRgX;G9pb+X{!9L`VTC-G^h=6D=0dxfE6L&2ML`}z^tOkAm=WMV)_-ir
z at UM3kVWuQ@S^4Pr?*%?HC!^jyaR~m(`Ir2o0z&+xpt?)Z4}S22ZstmIe)z*5e&#cu
z(ehWk;uYN{z5o61=kwXM8x;8%?A&!sercmpUG_x?i}0_KWwFoNy8P!M!cvW2s-8->
z<!;prGj}(_ulF$!2 at g^%0T}`W5?)~V(1$+M1!?6uCNJOo<~MsA`Rr#uJDmTS|D|Bw
zww{vqN}fr3b$SE-hVxJU%_6Oqm<4?K%U|wgY0a4?zrD?~W)+LK5&1*}n2IVDSaprv
zZ9BTReCd`Kl#jyycU77>rREorvrl`4==Up*|I*5Tc>aLjsyP3Te?tHh at Pa}0hq`*v
zT7TvjzVHPry3cynvqX39)a^I;*9+M at A@uS*A#*|Ov#JLF6I!^7Qz~WV?jp2TmGm-S
zW|sUX`3XPY2!3$_S7|!=zylAgpY1U%G$?qGZSjg-yXzC?Kkb6B3z)a9Gik4cirYnY
zOU`@cg#VJ$zZ~#e?d0cS9|`%E$K`mU^w0nN&tuR!iZVgINqs!_-IjlSw{5 at omM`I4
zO0N8WS#56{_Lf-zpSz2o-mRn;_%gE#Kjuvs0ng_PdnB^oDv?>fW_A>W4>j`RAOAS)
zJs at +B75o&E`l<Apot45;*pz%OA`kJuRD&nflS=Cfm7bT{&3+sb0)AVr4+er^@S|OX
zZ_Dk&LlPc)+Y?JBze7YFOTNcm+`bjjcr@&Og?UE3bp9p(^j7vox8o*Y(0j at v%$Jp{
zjsLFdBBxaEvhon~nP0*W0O1WPByTla6~w>Ka*;1KwjKXNCF?f?R_tb3x1o*IC;w>z
zsiHIgz1F%_<`DVv1Nc(gU3r30bSvrRB>dt0 at s9+kd&Bd^FMhE&#{*w4c7FQPpN5Ku
zryGBzVg1;bE%Xs_`u~i7lK*lDDD~glm0Q8kC|r8)`EsxSZ(MyBhkDf&nW<G|mfG%u
znmKt&L&(Anp(H=x*YCkUpD#ABwuyEh7{=TFtiXs+!gB($XTD6pn-7M7-Vi7|rP6k{
zPnRNRKJ#S_CI6YfR8u$B)74U$lPX0i at B+vNvDKkGJ%y^k&~8P3!k_%}|9*!- at bA<0
zggn11%$$=E1bY$P%^3nV!Z5NxQo4w6DE>>%d*u>Z1ma(ck#~sO`T1S)Bgb_kX at fAB
zCq%wc;LbbmJQ>J`Zp2rUm!~_wCfG9<h+YV7q`E@$*=2-opN_<POtD4Ck4n1yk7>Z<
zGF`Rw=A<S=vGfc%&c`<NKOgn7hU~{);R^c?J?+(!SnV+d7{cb1@;~^&4|;Re*ZM|*
zau%FcFou5}JsF$o#AD>Ym-B9Bk{?3y4|~*k3nfh;SS>N$DEH#s&P at 0T+8_ZyOT@!q
z5c5ChInOyI)EoC=%2O@`g*I$;3LR2@*>~NZy_o#>>R~9eR3JHdrry90{2VU=?Y6mH
z>S)EkOG}!81i^p>Pp^7<Jk-GEG!FT3Q42v`{%HgMtROlod$6~QD>puQ_bB{-uLc^K
zsk#&@{-Mb6>IK>kEH^?P#q`nmQ_4C^_{l0!l{SPK2LF2BH&dqpdHXKhDgGl-0#$@I
z=)qKo-pV1Mx1%Qm-#u|D6Ug{KD(qfpLQe0!w=<LZ6cT;{-3E%GYHCk1OI#~C%78YA
zO%sq`mF(TkOJqIK-3Fle<tXuwFJ$Al)Y{~nz|oI>^rK(>>R0LC?Ym_!MQ{R=93F{=
z>2M?e7?^-l?<wo#zYY1&(PX|9y8Od0oDZRdxtHgpS7F`6cj=?d>^-Hlg0f`DX-B%-
znm>;xSr|V7wnyHAw?M^vzTdy+o_perAl*R;On`DOIR8UzZ_F>5FXf7V8b&hbL+1oZ
zj+CG#y_rK$K>1j^j#J8`c}gji1yWXz(~&RvNf6%ez3+XmPr~2+_P39O=LCwq?|tw4
z at BjYqxDj*Vcs0Uvkm!*M%l}5g8wE<>E4ku7hT0f^Blx^Tf02^a5aI}EnGCO`kIJ*E
z!uqbtDR;9fl~@D!!-jm|3Gh7U7W|y4D2Vg-5S&k-WE$IN{39q at Bm^qs|K32Wk=X!y
z%%KYSa<_z^j871P8G(Fn!W=F=4tXatcZ1l-_v}Uo<tce6gp%`KIf|)SVuQYF at iVr5
zPJa$OCv&c$@YY*zHN5UW{y#YXV+e1QDQWM at UH-udMS7-f-Uf=~*oGhzq9xvT9SZ-?
z1e_S<v&<!?ubfiBpJhUbl1?`O`4Vc|KS+Htz?V1Tx1jkJ{6G20Po|}ae{u+DbbZ64
zZguET{=ac+BM)_fuX0NMDOL(TgJ;VxsLoe&VadJ6Ptz+9NC&ZY9TNX2Y`jLV6lD}3
zI4jCmz?ZvOl?%BpQ at RKX{w3<Yvfzg{LV<cmA4RW4S2jr43i3wb1^JJv8rRB0jr$sT
zs6xGWcZmOhmM0H?&i};vgRQ?A1of~5U`L8w%q#!ycfXqzcyC#zqqcU{;H-uT1pIMb
zr>KfGIqOYtdQ&eIC!c8{)Gr13>rUPa4NaEt at 6-Qda=r;f{6CWak%Tvj_0nEtmhh7=
zyZ;CMKewDH;+7%cO-wFf5}dXf=LF=61++#Dzd&mtl-H6OzAFn4nLx?EvjqRHWe#%k
zoDba~1xoyhuVX at KCI8u#4F=Me&KDNse`8}BcQo=)DyJ=!{0ICQ{{;VO0_f$#EkXEo
zedP1ZF&qFj6V4TrZ^_QOJu6U5CZmueDH(%Bpq`OWk{_2-%!wcS*vEX^?iZ4W at HqK=
z8l%rp8eIkaRq&&K8%S&<ZG3_K at ZY$Xtq!%Z&!cVra|i$}j5#7E at UoY^EPi;Ihqo(V
zvLXa>orU>ZZn?#;d4n^)SdaWL3RG7nP?8_;yOuI9dC5yY@{y06JmKvd{NfkCNawUc
zGZ%sXtq5-vPP{h?$$vWk(*KwI>jfn9{C=8AuL0htxJGBpOQvRQL1!rd`|MV`EJ8m1
z*^5(DqADh1TaE=G+X{3YVkzR at tmk41{$K}ZLRXXd2g!I3-!8ca|KC7*{GpA^mj!zH
z4-)`?q+}At0`lvx{1rt^dN>7atjhn<kA4Jo76J0aRgMKrR$%!W&;B at _!t6zP-5PVc
zBtL}UUm0h4;+a)lOd+57Mqg|j|1Zct>zHW*Isff7wDE*DN|tPIl!xH&@*mE>cQz^$
z<PtvpDMk<OE!qdGzT5H>#}+XxhsLjwf9qS{GE7L8hGHP-!jFHZ at wT_U&GX+i|BUl~
z>@g$82oz6%|CPYcI)?bCWa*0ge<T{YV$NUWQ!Pb)_`@HzK4XdA1DZAuro#&OBaDU&
zwK>ZN>}qCNfG?9A^S-F<B7F1M)|=r~q7#n7R;Tbz(Q)bD8vbyF{=dtAyZz&jrb0#v
zp+@?wQVBn|15VLM1Uc0ooAbBM+uhea>Sr88P=*74w}?#<N)sS63YR<KFWkF2Y2;XK
zu=siV?YC14L(msG>v;JWK~?;Z$Gcr}B=cEp$oW%m@(+G)ht6RsTwwzKa;`~P_Sdu}
z8ecN1;o8f8t5=`KDBu#2f`9V`(NtdOf(tRv(gnxv|98ZHQaxT6a{kGG1e_KBqWyAu
zI~hyASZf7IgztqG-I^vqkc<mA-gu+GVK=${6FbqA%F91All+$*-FA$Xzn!x?fBswX
z-){N%qop>+$m8LUu#;ylLm+*z2w?Z#d++`C-*4`$^2^{~+As%?y`)7haRQb25Wp&s
z=YV>_&|C#Sx_cuhbC at sBT_^uzfG^8zjC>;Cx0UD|kdi0ArlsbsJoAE3nLAq@;_%}t
zwqa=HLxcq{cXU-*EBN34{ohbdI)6P_cIe*tXA5&o!1`zD|2H;!Oo37lBjsM_&#^?J
zWIkV5PUitX=J9FK($sb1I?n{a9(dq^SYJYZBv+hJ&*`1=#y7q(*FW`(4(d*Rb^1n5
zN*_K`UKRf%fiH_C{8xB?*#DFqVZS(pXZA1)nSN=O=O>p>zLtf};KJfqnG_36UVdBl
z5=UB_kH3t<I^{I at PwU%gvttUBU~iPmu;*dWU*4hKNWnjyGXdCJ at cg%b`!}oi|L_n0
zuv3KC7xE+h>%ac%POo)Dl^YQCg%MdVasJ`|tG?cdN>VppnCbts0UO)Au|TDS#%_{N
zpg^3bKM6y)!v3ZI9m+Ky%IBG5!Smn${oi+rja6<TmQld=l>VO49Hp6RnFn!1hQ;7N
zy0Yr)ji at Ab^MytD-`L=d1u6~n?v~hx41Q_^x!7J{6IM{dpZv$N5B|}(YtNsA{L?@E
zlgnvX=9~qeKT`-RIP+f`#Yo`O1TGDnms9W`;Z1}(CI8|4!~e%pB!?^t at +T+ufTATn
z&ljZs`mg`m!{v_R64rsi&n=w!PyQ?T6Y?S93i}U!*hQ1ZQ!2H*6DE*b<VSMo(p>a0
zkMYvxfBxrx?hO_1QA_?F*50nT<_nn(8L5S!e3VYi{;dE=FouNrVNcdDKmHkN<jDN;
z-cunBA>k(=U!qKqi*0!Lm|F$&G1Za-euo&yZMWU#%@gZCdxIpNGTd{|J$t+2YA at v7
zKk(}g{iWB={4<b*zX5!CsD!`dpTh^az|xk6BMCfUFGnIU2Wv9_ at gM)OPeO#d=f(d}
z`2YOR{}_LDLB)SEkitgKncjQ8a6tbb_gmuKkSp?I_p<xH<p1%Hd5{}nDLI%Ya5yq0
zf<r<PPXYGHzbWwf$!{v$%u5%voj)p$i2sdE9V)OO{K3DN2lj#-Zl9|Mys54cffa;N
z*!7BL_Ql?Wi~PZRsbn3&6;#fj$4j at L!VoiM{(R4$HB24?y#G)(Dcj!_y2To<zB<(F
z`6KwD%t-t{{%KgSfqzyYdDP{FOeR2P0{Hh5a at iyMk-ZnXp9`(|D#+)QbW=Eg-Iu-G
zrllmOl#|~1!Xo^4?_wy&jVIEngdrhIRsuC%VgJ(qG2s>GfZTUjIQLdF_$~F*yqT9_
zmtB~R?jI8Gy6^v at YrEoo_uc0!2|aa^{5Mdqz=m<@1d{5iSnTG}N~qwE;6G!2Gpy<l
zNn7yo3vXUa-o at K)8%aAa{@iraO?s#7_p-aY at RWXjNS^QZvxb at ezuSH}<qcLa(*r+H
zA)UKbVW at W#Z?BR}X1>N&&fk{*=jwYo=ls2Pz7f}RfyFi8g%h3C>-=?hm!Bc#%lxEw
zzA%UXZsXhVgP9&^gOJP<x{!BsoEQo4{7J+-wsvENEB^O}$s6DJ#@-&}hx3;ldJCL0
zccB4aL+B$N7aba%Ub at FFLM7)z at _g*GhGqFLZ>@6X!8!O58z#^Td8jKj7G)kp|H at J)
z)KwDjvjwX?cinZDsjeWW5pQ3pKRL7um?zX3eI31-9<PMt*!g!ac?;y~9)tPhoHhh1
zCZ{}hjEMnu3AqBmb~Fo=f<u7Ezpavy?3&(kHSKTAO at t@(;Q5qk8t|w^A7$U^;);#1
zf`li9A)jC7r}v&O%<=yv at PT^VWAGgJP7cWJQiu?pKKbf^+#&f=?Aiv>vCCehI7&$7
zJxRg5fZtXEzh(A4Kii!~#RWNwf74mn#lgdg at qa<O at _d_HX~6n37bhY;dHy~BI{W{v
z*tj at _FM|KaznF~)WaL(w137kM?2D}!MtF0M|1W|eT!i>P$xk7$FSi->#RNexA0d5d
z7b%+#2pY>taU6=Am at GJ5%x|ltt#S6e{<B(xioVuy`Y}l;@knw~DCfCD^89IU)-Y%O
zn{6(I^6o;;8>fU|xYS12MR4BOrU?Y|;E!bYy#Bvh{!e at TpLv$#r`#|B{vXL{5tY!j
zm##&?UL~3Ee}4YETK+ZcgrEP$@RZnBLa!CzwsQVVpj%Q-Wg5Bb^c)LfG>H*GAS5n2
zzyGr~TR83af7&KcS%lpZ>|X54%w)b2Dier6$jtiu{^#1 at kM^AQ`=1+4APSVlO32%C
zMSkv<CSXiq0-XQ({r`3HfAa7DmxPazV_ayHpGTAVQow(jK=3dA at u`bv!KMS}@4wb&
z2)xtjeg9<<X$<YXWfn96{F?%Ze_|nsAxIR?3gT at Ff<x!;e-CREr}zEu9R3+a&JNPm
zw}sOGlXD2bKj6JnWXljD83 at 3C$r8 at L|8Q9DFJJxq`wxv#VEkB6nn3a|_>Uz}<i}h%
za>5XTf1%O&_kRv(2VTB43hNO|b~;W!rmssk7(y>6WoACQnlDU#_~k_JKSTq{woQ<$
z+fTI&326eszpYRQ-Z(c9lqqe&A!VfV at 4p?;1cabW;KY9aZDt4*_EMQZ><;lSzcc~<
zgjW&j1o_pYfiQt6K=~F(&%gh9KodCs{%7w1(aV38*)<1N!1)6n*n)rjm+*%yGfcn`
zAVxAwoPYoMfc&52??3Nu2&hb;J1#H*oCo<C4wY6A{PX|8zrokzcmSM#|9}5haH_xm
zzX<=vg<jf+GIKbHQ6S+DAx!}PQp7(ZpYz{;*+2H>6%E1q!icP!B8b(GRTuY02xVr>
zIv3f_oc}sKn^CrKnq28&%x+jguL;m_3=Q}<JMcQXSA&E}=fD3|0=Z}T#Qy%*vi!4}
zG0azG(gebv#5RWmCcxX|7kOq1-jT2nWFm0>`;U8u-%rz60uqSo5&aTFKy+W(ryHGT
zy4?A~g8pA)Hnx0Bfl?J?<WQh($$we_JsWUi*o|2L6Oc><ghOmWP`V%nMw#>9|83~g
z_<O2<|92_=CyWBULqKT)mnQ)aEd<3}m at o2-*o@%(_um`DE`I2Q|Ni?@CNReBS7pYV
zK#l^zzmJjUcd at _l`1r>^-Y at Px`N>Z<xRmc*kcC at DnK!@r&GRpG8a4PKK0b$LjLzJY
zzAJmP9VE<;d9sE%!H;u2|1IPHsJ7ks at kdLAjFE$X+o33ks*M67&yxQ;?zkhCLxZc2
zeB>h&0Q1Yn&bs#6YvZRs5`LqMWLNa%C#l=N%{Ae=$9sz3=!+Ry@?V-j8<M1VzA&Hv
zd<CLxOuPN#kB-5<EE6Ws;6F?trUM!LloZ{4_ub|07}+HH`s=U1`R1G7`ObIp^90Ph
zM5N^Z=}&+9nA%Rh%*$T(vTLrn#$RFM7MK7nh5tV#{@KEK$Qva~w#Uf9zinj#u@(gW
zNHlL2hSg_1>sfDl)0;}<KK$Vin-QDC-f+VWWqw!o7vyEW@|CaT%GBm8&Obc=74{!8
z0Tb=0;rs)Pn3uQ(1F@|hId=ZLAyAA34Y0=_8iRe78RDOY<5 at uPADS1XoBZOoVq2yk
z(Us(jSl;)(_vNofKj8^ac*QGT at zIZd)CvzjufVsy^)2hDl1a1*qg&OVDQtjUyzOmo
zGduXf4}MTx?xOAH`e&?2^e%z6 at hBsWnerm>&k+9y83l$+pyD5vSTzKoUG$O=MqC=9
z(T{%gBUa#%Svf(L^Pcy-hr<`odzJJ9ANYX6!h7|AT(wDl3UMuEoOS*K1T;YN;16GP
z=D%(1aWp;rMxmE~N|r+5F$D&vUf{7YDGI{B)f=3n9jKBo#dviFqJXdV(m?Do0r>{;
ztFF4rDdF}b@(Jd{vsL^v6ZVqzTui}I!!5VmLRZ1RPKii0dM!J*jl at i!pQq1s{!Taf
zl^XtksUd(uQaNoQ`6uKo;4=O-|9Sz&AU7jJI0ueryYeOG0BnYUc3t*@7rX$miorhe
z38MNO&Cwp%SKF`xw)T>jyky$q(kWTW7r*#LI#2&Uf&Zj;zOWzuqn&Mw9&@yfeI9M|
zpPpGvf^D>W3jCC(JcU<Ba<Hv;GBE_j0(BE!wxF0yCIEg($<pV?5Mx_ffdYy- at nawR
zn77|A@}EPcG5QRp(bCEA-yQ<?X#yqxIRvEthb0;_Am>`SeF^`Nw$(cs!$&ds&_%w{
zL39Lu-DfL6%EGEm@=GDDAWYy%PkNGTb!XhC<l)=*LV=PYz!GREElePKEuC1yAI^9C
zS;K<<e+>Vw+qkchhf+lip)`RAfr9^lAGGvui}rB%w*ERKsss4&=V>PRSN`4aez(EG
zB2QR{tz9)ZYY6^w6o}fwl$=#9y0)1)rK6V4KJ%H+m<K)o`Ogncmi+6u=+*`dN$-4N
zDgHN30m`N}Zf)eD2KjMlh<_0B+dR1~deNB7bLN44z-%kYQGoMT*n+3>lFU5nEOP1a
zyK)xR-LA`&JX|;>q^I2rpA%y!{gfuKH~#0tuZGLh-_29tlK+rLqCQltZ2~3#<XrrR
zF1JtZ>BEEhAhRObuA>U$KgNqVD+v#<V>iZ^+-8{&qNLNAk4FiXPp2_+N at sbzXdLtk
zkk_SXNgqY8T at e0R!4TUc^BX46<)4N@$eD}1ZPSM*pH_Pmh~3=E(MRCVQ}R#<3H*={
z#gc!)zbSwZU{8tU$@k&`3jTQ{-4Xm}pAIq5b)=JX7We-uoY0t|I~|js>go!m3D9l$
zUhbDa5BS?8C%57MEB-6mV|=MHb2qC}iRZs>ed}92Vw=p&X`JX2F!7`i$l at FKLdn#n
z%d#JbdVd07L#M2S|7hOO{cg-pja5R$KL|NtdIn*5<G?a0#c-s|At<9f2PFh at mfiB`
zl`|gpe_0^qxVny(I6Y&~d*A!s7ryX?Z-4vSPlM+%ci}Y>ul+|!tDrIe%4flpxKI8U
zfnOzM{6EeAm*%;V_TB;&`LSE^4 at CfjSsFufqN}j6!;+m*BQpsPgTAv<mJFE*s6kas
zz;gtyPr6WljQhIluH#0GefQjRj}?IMMU-GrrkpeXX$ZZLw==sY(B&V8R88TKPCh&2
zK9o^$TRQ)T3JptniLA$UnSg$`0A);(p83pY3IoPC&torR+4HMk{c6OYZrKRP6-aV8
z1ZttkqxS!?1Ui2Rm}~_N6QJ9Gke+EfNgjsx!6R{2IbLi$r7SRH0{Wd5=z9Lp$nuP5
zJmc8$9 at Bnz8so36j-XYE5Kf8SHu9fr%oi4qe-`II?y>FmtD}_(<Pbo&P=tMeN9}e?
zP<JPnCZGYA`}|Tsg at NGzwXc2cMR*+Wm9Kn-=SlLZA`*qL3vzT;_F&bsu{$68s9`Di
z)syl6j`+`8?o~)PGZh#@XcgWx%+*je_Q=V9+Q=ATf|*qOyL31`B#3`}HTj(9JZFsa
zJb^O#t`rT>LnfU<vGiZ|UAJfDBn&f!W8^<>xmPXS%+zG^4}1J4{9|YzU#4vrX#&yX
z!N2%N at blsqzxV{e-gpZi{NM+DEA+b8y^hHT{Hc?0M4{^JHA1&fkA;86HPbxDoZhRS
zGBcG)x8eWcS897a-s4LS8A5iqHUNMb`i{&@{33h{`TEzt-ZMnWvkxI(^g<{k)is9y
zF;t8!vs3 at SAO7P`OW?b5X#&(9+8z&co}R+UbF*7hDET)Gaf4T1eYI5}R*=r~gujjl
zzgsrmx%cEhm6KXcJrlaUIg;&-#TJBLRb~9Y>nXs{t#x&kIjK at grtnmCL&#GaLgVy2
zl>Hk*n1J5L0M9QN_UO|OM|c+S@|VAy6_^Y7d_K+LG=%G~zutSE9&?!Q81*vvDU}l%
ztF)axn8Hx+Z=1gd{`WZq<n5=Tx<cqS$?O#>{g2u0t*6Q?JDLdu|D2)ss0IH*0&kEa
z|I?rTwCACIm6t`F2KjLp;J55!vJ>;K$<AM&W=GEyPL=;qOBepg8N>6mG8ORM-86yV
zALp0D;a}tJpZ)A-8w-3vEH;P;;Y(lo(#i1e3zvAwp<MQiaWHgJ>Z(+Jw-aYFpQkSi
zzuJ1^pM&`SyvMHgGN)AXf^yl9y>e*+;vest@`uPb1+X<M<RK+iaP76%;vYH3ZUxVM
z?sLU>EIs{yH~1-aRdz at AR|?s=GljkJe^?WsrBq!dlzLuJF1xZ<4iktWKo}6KK=Cy_
z at _9&!Eqvk=pO7goI(Gh}{U87M$Gz$hZ~NrrH@!hBs_KZU%k0j?K2N_m{KqYKH5oaT
z!WY at i-W(FTCg4pN5rVNGQoIQu$2anRP4_fRz+D&!M0X6KGJ#Z7rT=cPCBSop#o<?B
z760TC(82wGDypl at HJCsQ1V({Kz>rvhv49nb8GI at 8zylAQh6#A{(^qd{1u+E<S1^+Q
z?8=$Kp7~$D2{44p^UUAPKJ6892#9GQ7^Kn!L_th|w=@cv9atkh0TcMb7rtQ1<449!
zaNMkWKl4A+mM5G(G!QIq1-;~FX4?dUfAE_EfBDN_K05fh`rbBs$;Y6^u8nbR{=3~Y
zp|88A?85o0vl0KS$N#4`y1LDr`JTV5A!+Xl!M|+`0k$~`2!Zeq5-){*=tCds1!>Kh
zX71no<~Ms=Xr)(N2Y&wF{e}sIa!S3CvqwV6zMCoRjsJ2Aa9k!p;Z<ME+3k{_IYUDL
zJVXfA3{4fg6s`G(qks6rANo}vE%)Qt-Il-q{qMJ;<yr8V|Cv_2$mx}b>F&<KzC1U9
zuY_s{NdM3IdmN0DE<%wLzqmeh^sxCR?2OkV?A~U)`qi)Y7DNmIG1E5$gj!0Ck*n at l
zq{nyU{8ihHe=7gK!XY43TIspFTlLF?-3t41w;TeJf9}zWsL20`Pkdr8MV3%}HQ#&a
zfSK=l*Sp{?Y=gIN+3vgVzOpeMgxS?>qk{r$+*n{PFoyp{;8)3+|6WaYneXOIz`i`C
zWWJQULx8}TV-!Mjr2dXliBQP?cAi7NAOGxUKifTez#Naa;vuh<E06F at f#33$w`h;A
zo1gZyr^T~8g29UkDBvz~6^KqsbyfQB?X_()cL)Db`~Og5rSPHMvX8cvOYBoF`A`3k
ze;yJ`RtvjBz*SdW1s=&-$^mK5OZye;?|kPwrYfG+iF`PA$tWNn=Zg8oct7@{!B%mt
zXt4{H0)E9#oBv}8fwnRMrm-#gSw68(q2fQBzxam>1&_Bw6SELR5ndCGB}B-5{p(-<
z{`bG{(DR=6ysG4Wc3<<F*C1JY%vN6Xq8CA0<0G(l3-U$#ZiG2VDX?7QmjX(%dP<;>
z)DofeKim5G-ts$j{zLx%xcH~HQtcb%vcE>kiG3-g2_PZJ2L}JoVa68$NcPzDYhU{s
z!Cxo<kE6=)r6}S~<$U|w-*)tKpZnZ?urIH|NU^Ow5}uiGTCsd>W2X*<Y1nE!{~rUK
zTVNCw|CQ!@dEPd2CH!l~wk_Xt`AYd4cSn++#Y*x+F8LQf2ol1h;@>>i&m{VC&?8`P
zgnCmNOPp%pWE&Lu)03b2)Te?;f5o_ja~HDqlrQF)r{f&h34fRXTgG+_RdF=N1#K1%
z#W10ydpz^MXUN-^+sJ&kK;k_{s7#>b9~JQM at eAO=<Bv`vjfWRYGY5ZS&ktt$;oR`0
z3Wq!OMfv^r-yf(8w!ini at 7;Uvy|Lc1IR9`p67k#lou;PZKY5N>j4j#|`>==@7i9X)
zXGgOng_L?L)!Xi=kw<s!{2TF4Hw0S$5J0PC7mSz7PHfAi2_*kk0ucfvK2uPEd=4LJ
z$Oo8Af^Co%z7$Iiv6OsRVBy^^N*5&m#v5<+d1h3Ic5RSuy6L9)%{td2XsyO4(!E0P
zZ`g`IvfzHD6L9{g$N#QPpv^x*U=KM~5b#I9gLVn|Knj-ZDg!?QgpcU0ng*OG{qc`~
z?DYx4OJDlZ&wu{&=rwWP$|$Von|ByWxOz5aK)L(wyVYid(jFJmNYh(a*GM)J%m>xo
zZ5-9?uuXT7 at R$C- at -`zqe52SNod34`AH@(b*#z`p+xf at Qt_k1)9*{<qX(LWd1pI}d
zh^{lhPzFo35{f_waxoJ4Q3_7Ua3FT_x11dHDW!To`N>bJQ%N%jCH?Nicfb4H${b8F
zTv`FxzvCV60K5}@x+}gyyTw?4upn1BnSdd{d|Y8iHAbr{?8~7o4k_aX-BB<9i^H!I
z&-^!>!^T5Zk8HKO(F)Q8Z~_l(fE-|OLYGM*lDT(_Jn8n8$#mHQF2zeAH!r}pQ9wxv
zU`SS#8lpmV^3n`M?BPS>iu~NY?Y7(4onmp8dZH5TdBYptpd~7VuB0BzI4(`F)tH1o
zu`h+>-?<v2k#ZC`0q5WL|GiUyV;KVGi~?aSZ7T>92>u}y3xk*WdhkaYfrqZ3E_`hA
zPmqIu#PaQmDQq{=WjlCq<MbdI*c*RY!cTNECD=Pfg;{6RrEM-M5nRX&MZVoO{9y=D
zMq#IDt=+i&P*K;nZ1heW3+%`FpEm#VO+e2!tRPJQoWUDHupOk?28xlHm=VGd6u^=#
zsB9%ALr6nVZ43n8_{KNV)i(rwzMOZcCn{946xSulbm_>^p3>V7$<b_;J4=~#{znb}
zH2#lh2-uGa1RG)lLZtBU0&)bBuVg>$|DZ9qxXOf2C$bCtbLPf~@jt6#1`%OcFZ|`@
zqG1Vqm~*wwqnfUH>Lf&&6L9_;`9Jm$D8|{YkD8D(G!TFxAqgQUM;C7yj6IC|hwmhi
zAyg)Se=wUJG<<$_DBjpHY6SmLVP2)Ycs9FYzPlSG1Aejsrvd+D{x8}P5cbkAfvy$c
zBw$O-x<b;Jd=i4#7y`ue)-e61N(Fg)*OO?WSMnc~=e4R<b!p$2GXy^^Z4B%;7J$}1
z6A#}`Lyg&ZBdaPf!Ql^`(rX3DOc(NvIRRvvK*>MnZ#l?%ejE7eD64T+$^TODm-pVQ
zpP8LL1l#WN+weQuxb)1M-Sg?a{WUGK#31D~fgzz`2+3zy0TbZ=#sByh{BQf`wj%_J
zX|<}<ne`L08AI*t=I1 at 8(5ttZ9oismcZW9e-!Orh_q+eodwXqiX2Os{mz-`+;#UgE
zXY$W`2me02y5*KzDi6PL*NZw<rBs6dth|KZ)w^xWoV=r6VMt>$J9KxDH)@{4ziMaR
z^8QaB>bq(AT|5$@hES59a#G3!K+E%s;W>XFr);FXDsc7HS3A)o3H+DNKd&_efA at B}
zIYWw?*_91McY0_h|7R2E5+bJoe;z7nBq#p_&~pBs&w4c|-fE}_Z|^$M(vt_!hJfV1
zyj->+h2Fd9W)8tG|AhH(gh0p0zn*IJ<FrFvR1&R*P%>GX0BFVkhJf2|za7J`dey7i
zz*k2-R*px&DjCCnxADC>4b2=W{OBFy|J(eZO(4MNWu^hYLk<2T1d1rgYi||d?Om^Q
zdb}I+-!A`UlX~0So7sThp)>z8HE at vA+kHCWXfHV>Z(X at Gfee8_i+|C(=U*Zj?`ryX
zrp<hL)SE)S?J8eADzB1l=xuFpW?L0A`;PxSU>fQFPjU#*aqXU+aI}{nnMqw&NH{D0
zMKAcbnCZuPO1v9#d_?K<0U=O40%k|7DKC*%A8Kbef1?uS at P9z^<I+p<ueLdQIMlft
zJ9k2XE<%};_*Fvk872_^AOC(bB|qR|2o3V%khePHYXXAhBPQTOfG+>po{hrB+n?ES
zXZ~j at aQ^8VyLdu at 23HmNv0L(=@QZ&;W3B&qnCmkENN?odWSN<mHHezXY$29FqyD^f
zqj}|_F*iO({|AR(1IGLRjUmvH4gq>_Oh<29rUa=gCyFTqqPh5q+j#!vD=j3)w=IT)
zArtUZ5~jVd=krBPUYX<n)gb;+XUTuJF}*os?)TW?U!4E536$9Ma+R4$ehMhXD)KpS
ztM^DIfZsL}E8x<9@{^yK4&Qp~tziqkpo||{QPN{C%u56*oPY2iSIMilh4L;M@|l0Y
zchelT9Pr#mM^8S~#>~-#pAcSJ*e~G0u+Ux1<M$cDrQ4D%Y>J2&LOBrd{Jedv`D0#k
zx~E|A+YVdtKmJbV^i-FbL*;B0|BMNN+{hfw9QNGty+6L>wk7~qL5l=qkqp{xFZuM#
zzrY4^s8 at 3VFFc5R6mtsm$#lsQiZ51}Si3RfZ%WC at J#{G5d#}3-{?8^*fz+n1I|?v?
zm<2-`*cc9^nSdPpSASMaP$V<>58H8i)L_ at JGA8(`+T7kf4fuh&E&n5jfU^ly{ERn&
zm<5Ch03Q5-bee!6KxlN=U3WzY<OMme35knjDx+|~uLddMZ#)00wHtTO{P&I~Rpw+Z
z9sI<N08A*bl?j9u1o^pzcf>z{k6%q;0_FljeOnU*1;8KV$94?=+uqCM-l_0d!|v|<
zzq^~Ps5P9pEfpKfZ{$A%A<#y`a5(eW!dv8 at e@DPCW!-t_oycbt68|60KlzVJ+QHAp
zW>*C!cg-4T at 3vtA|KmfTvk6r2Y&3yj)%J=7JoH|4nt(Xpawu<aYG4&KBL7R%<3~Tb
zbp9p$L%~ngyfM4e`0s+ZlAK-he>Q;%s*xs;{1eij!<&aU3P3%q!0Heyuq#ta{`2%S
zsP1*EhK<=hG5Eo`2ma3{P@>i4u$vRmCd0iZU|wv_D;)Bqj4gn_41V(5A^yuIjg+Us
z at 2r)$`rc+t<A19VD6TtMduupxBq1Y<b%C#P657PL8UkVzfIa6g@(=%?{O4I&PgVcO
zc2>ovbwn?9>&e_3|89Aj0#|ZY1;fnU3drv6&=3$IP)0!}0^<LYe+72I|Fm9M59dQI
znaux18v+0 at llk)WF7Q=Oy6%KIh5&d=$v^moKn8+%Ob|zvjI*+mvhuPSBjr<tpHb|S
z|6?Bl_Gto%?hyZg7y01dLXh_#2y$`?JjDM<;HzR2_#g7OYs;U*|AZmnYyu@(rCaXG
zl?jyoALror!l%e5Cc<`&0{IB6<UeaJFFjs9VffLwfBw%VknAOyy+WIRi$8omLy&|+
ztiZ0v!3;r8gg{Y4R-V@#FPt{~hvNTi0!d)P*%gw10)L+VKWOLtC2~#&m_R%WAjot|
z$$wsPym0dH&*y(y2;{ob1of`!l<^=nN_Mf&oQi)um#D|vZZY94w=5#2!@+;l)@Z=c
zp$V#vZauE;%=l*x|7Q~j_7eC?=<+Y-5!;CQ5iZ(+dJGD&jWL2Pm<43~vp4>a3;S&C
zeE!cSFyunV=U3$CZkhnLC4r4!_4LA<ZyO`*Px7OHt(>q6=bqtD&WD79^RHnOhT65A
zG9LBbk_mhzl>7(Srne@!K6nYp6Z=w_>HN3V?GRc=k-rH4Glzh)2{4L^{MhaCZ-yJ+
z!i#f)`7BcjQA4k}H8L+0{J>iY|KTgPRsPz_H at Mn(Xbk@%|5)Kq=U*`&yIIx7i&h1;
z)#p)o_;w?g;(z`Sa5jPDHig7H1A9|oo<Ad;ERaH;OQ`T}?_NOoA-6XEHEG+9SYi1#
zX^o>Lz2u}i_(#5#pI-i}6SsnYTLrc~>Tw-ikpHEIfU^lC%)x)e`LMU<lh3wf#?dTX
z3Jnvh4qasUk+x3$Ps0SDRlzo9x5T*QU(C<>GXaKhhJUG1W?B9h90KA7xAjgdEI)?%
zs!U}9Xa~OsUJ?0N{|WxfVkuWuHFmev)l$f<s-BhePgmP^(>lvHIP5)?JR1UF?}1m$
zd692dW)>)g-m1Ep+p1_)#4g*I#ra=+2sjxNKwTHbc22O3dGJRp6x)*dl-pIs(QV0B
zep%kuR at +hVA4;3hck4W545(Qq at J{%X_Daa|4Pjettc}%Ov}YIm?_vlzF%y7d1Jv%J
ziuQ81TezFEE&0mt0=5;_d0hNoa4QI~!QUl(DCbOm+vs-0|L%r>(=&lUbO_*S`4g~@
zQ`)qg-q9oF|5UADjx9`P{$i3J2<?vlT at L~2i)Qxw5uKi6!QyRBWnMI4r~L2D1oYbC
zNL-K#FB<UG{hkc}XA{`gU at H<X=I*Zf-{%kzJ-96f7qI-rM7{T}Pmlkz6*Mfmmw}6%
oxd;CDKLnH=+JNCg9V&HlmQw>K&wt$Mg+jf&+3e`E(5r#}4{~^iGXMYp

literal 0
HcmV?d00001

diff --git a/utests/kernels/compiler_math.cl b/utests/kernels/compiler_math.cl
new file mode 100644
index 0000000..695fc2c
--- /dev/null
+++ b/utests/kernels/compiler_math.cl
@@ -0,0 +1,40 @@
+__kernel void compiler_math(__global float *dst, __global float *src) {
+  int i = get_global_id(0);
+  const float x = src[i];
+  switch (i) {
+    case 0: dst[i] = cos(x); break;
+    case 1: dst[i] = sin(x); break;
+    case 2: dst[i] = log2(x); break;
+    case 3: dst[i] = sqrt(x); break;
+    case 4: dst[i] = rsqrt(x); break;
+    case 5: dst[i] = native_recip(x); break;
+    case 6: dst[i] = tan(x); break;
+    case 7: dst[i] = cbrt(x); break;
+    case 8: dst[i] = ceil(x); break;
+    case 9: dst[i] = cospi(x); break;
+    case 10: dst[i] = exp2(x); break;
+    case 11: dst[i] = exp10(x); break;
+    case 12: dst[i] = expm1(x); break;
+    case 13: dst[i] = log1p(x); break;
+    case 14: dst[i] = logb(x); break;
+    case 15: dst[i] = sinpi(x); break;
+    case 16: dst[i] = tanpi(x); break;
+    case 17: dst[i] = rint(x); break;
+    case 18: dst[i] = sinh(x); break;
+    case 19: dst[i] = cosh(x); break;
+    case 20: dst[i] = tanh(x); break;
+    case 21: dst[i] = asinh(x); break;
+    case 22: dst[i] = acosh(x); break;
+    case 23: dst[i] = atanh(x); break;
+    case 24: dst[i] = asin(x); break;
+    case 25: dst[i] = acos(x); break;
+    case 26: dst[i] = atan(x); break;
+    case 27: dst[i] = asinpi(x); break;
+    case 28: dst[i] = acospi(x); break;
+    case 29: dst[i] = atanpi(x); break;
+    case 30: dst[i] = erf(x); break;
+    case 31: dst[i] = nan((uint)x); break;
+    default: dst[i] = 1.f; break;
+  };
+}
+
diff --git a/utests/kernels/compiler_math_2op.cl b/utests/kernels/compiler_math_2op.cl
new file mode 100644
index 0000000..6e970b8
--- /dev/null
+++ b/utests/kernels/compiler_math_2op.cl
@@ -0,0 +1,19 @@
+kernel void compiler_math_2op(global float *dst, global float *src1, global float *src2) {
+  int i = get_global_id(0);
+  const float x = src1[i], y = src2[i];
+  float z;
+  switch (i) {
+    case 0: dst[i] = native_divide(x, y); break;
+    case 1: dst[i] = fdim(x, y); break;
+    case 2: dst[i] = fract(x, &z); break;
+    case 3: dst[i] = hypot(x, y); break;
+    case 4: dst[i] = ldexp(x, y); break;
+    case 5: dst[i] = pown(x, (int)y); break;
+    case 6: dst[i] = remainder(x, y); break;
+    case 7: dst[i] = rootn(x, (int)(y+1)); break;
+    case 8: dst[i] = copysign(x, y); break;
+    case 9: dst[i] = maxmag(x, y); break;
+    case 10: dst[i] = minmag(x, y); break;
+    default: dst[i] = 1.f; break;
+  };
+}
diff --git a/utests/kernels/compiler_math_3op.cl b/utests/kernels/compiler_math_3op.cl
new file mode 100644
index 0000000..95b0398
--- /dev/null
+++ b/utests/kernels/compiler_math_3op.cl
@@ -0,0 +1,9 @@
+kernel void compiler_math_3op(global float *dst, global float *src1, global float *src2, global float *src3) {
+  int i = get_global_id(0);
+  const float x = src1[i], y = src2[i], z = src3[i];
+  switch (i) {
+    case 0: dst[i] = mad(x, y, z); break;
+    case 1: dst[i] = fma(x, y, z); break;
+    default: dst[i] = 1.f; break;
+  };
+}
diff --git a/utests/kernels/compiler_math_builtin.cl b/utests/kernels/compiler_math_builtin.cl
new file mode 100644
index 0000000..d5c8392
--- /dev/null
+++ b/utests/kernels/compiler_math_builtin.cl
@@ -0,0 +1,82 @@
+/* OpenCL 1.1 Math Built-in Functions (section 6.11.2) */
+__kernel void
+compiler_array0(__global float *src, __global float *dst)
+{
+  int p = get_global_id(0);
+  dst[p] = acos(src[p]);
+  dst[p+1] = acosh(src[p]);
+  dst[p+2] = acospi(src[p]);
+  dst[p+3] = asin(src[p]);
+  dst[p+4] = asinh(src[p]);
+  dst[p+5] = asinpi(src[p]);
+  dst[p+6] = atan(src[p]);
+  dst[p+7] = atan2(src[p], src[p+1]);
+  dst[p+8] = atanh(src[p]);
+  dst[p+9] = atanpi(src[p]);
+  dst[p+10] = atan2pi(src[p], src[p+1]);
+  dst[p+11] = cbrt(src[p]);
+  dst[p+12] = ceil(src[p]);
+  dst[p+13] = copysign(src[p], src[p+1]);
+  dst[p+14] = cos(src[p]);
+  dst[p+15] = cosh(src[p]);
+  dst[p+16] = cospi(src[p]);
+  dst[p+17] = half_divide(src[p], src[p+1]);
+  dst[p+18] = native_divide(src[p], src[p+1]);
+  dst[p+19] = erfc(src[p]);
+  dst[p+20] = erf(src[p]);
+  dst[p+21] = exp(src[p]);
+  dst[p+22] = exp2(src[p]);
+  dst[p+23] = exp10(src[p]);
+  dst[p+24] = expm1(src[p]);
+  dst[p+25] = fabs(src[p]);
+  dst[p+26] = fdim(src[p], src[p+1]);
+  dst[p+27] = floor(src[p]);
+  dst[p+28] = fma(src[p], src[p+1], src[p+2]);
+  dst[p+29] = fmax(src[p], src[p+1]);
+  dst[p+30] = fmin(src[p]);
+  dst[p+31] = fmod(src[p], src[p+1]);
+  __local float iptr[4];
+  dst[p+32] = fract(src[p], iptr);
+  __private int exps[4];
+  dst[p+33] = frexp(src[p], exps);
+  dst[p+34] = hypot(src[p], src[p+1]);
+  dst[p+35] = (float)ilogb(src[p]);
+  dst[p+36] = ldexp(src[p], 10);
+  dst[p+37] = lgamma(src[p]);
+  __local int signp[4];
+  dst[p+38] = lgamma_r(src[p], signp);
+  dst[p+39] = log(src[p]);
+  dst[p+40] = log2(src[p]);
+  dst[p+41] = log10(src[p]);
+  dst[p+42] = log1p(src[p]);
+  dst[p+43] = logb(src[p]);
+  dst[p+44] = mad(src[p], src[p+1], src[p+2]);
+  dst[p+45] = maxmag(src[p], src[p+1]);
+  dst[p+46] = minmag(src[p], src[p+1]);
+  dst[p+47] = modf(src[p], iptr);
+  dst[p+48] = nan((ulong)src[p]);
+  dst[p+49] = nextafter(src[p], src[p+1]);
+  dst[p+50] = pow(src[p], src[p+1]);
+  dst[p+51] = pown(src[p], (int)src[p+1]);
+  dst[p+52] = powr(src[p], src[p+1]);
+  dst[p+53] = half_recip((half)src[p]) + native_recip(src[p]);
+  dst[p+54] = remainder(src[p], src[p+1]);
+  __private int quo[4];
+  dst[p+55] = remquo(src[p], quo);
+  dst[p+56] = rint(src[p]);
+  dst[p+57] = rootn(src[p], 10);
+  dst[p+58] = round(src[p]);
+  dst[p+59] = rsqrt(src[p]);
+  dst[p+60] = sin(src[p]);
+  __local float cosval;
+  dst[p+61] = sincos(src[p], &cosval);
+  dst[p+62] = sinh(src[p]);
+  dst[p+63] = sinpi(src[p]);
+  dst[p+64] = sqrt(src[p]);
+  dst[p+65] = tan(src[p]);
+  dst[p+66] = tanh(src[p]);
+  dst[p+67] = tanpi(src[p]);
+  dst[p+68] = tgamma(src[p]);
+  dst[p+69] = trunc(src[p]);
+}
+
diff --git a/utests/kernels/compiler_math_constants.cl b/utests/kernels/compiler_math_constants.cl
new file mode 100644
index 0000000..4979cf2
--- /dev/null
+++ b/utests/kernels/compiler_math_constants.cl
@@ -0,0 +1,23 @@
+/* test case for OpenCL 1.1 Math Constants (section 6.11.2) */
+__kernel void compiler_math_constants()
+{
+  float f;
+  f = MAXFLOAT;
+  f = HUGE_VALF;
+  f = HUGE_VAL;
+  f = INFINITY;
+  f = NAN;
+  f = M_E_F;
+  f = M_LOG2E_F;
+  f = M_LOG10E_F;
+  f = M_LN2_F;
+  f = M_LN10_F;
+  f = M_PI_F;
+  f = M_PI_2_F;
+  f = M_PI_4_F;
+  f = M_1_PI_F;
+  f = M_2_PI_F;
+  f = M_2_SQRTPI_F;
+  f = M_SQRT2_F;
+  f = M_SQRT1_2_F;
+}
diff --git a/utests/kernels/compiler_mem_fence.cl b/utests/kernels/compiler_mem_fence.cl
new file mode 100644
index 0000000..c17985e
--- /dev/null
+++ b/utests/kernels/compiler_mem_fence.cl
@@ -0,0 +1,10 @@
+kernel void compiler_mem_fence() {
+  barrier(CLK_LOCAL_MEM_FENCE);
+  barrier(CLK_GLOBAL_MEM_FENCE);
+  mem_fence(CLK_LOCAL_MEM_FENCE);
+  mem_fence(CLK_GLOBAL_MEM_FENCE);
+  read_mem_fence(CLK_LOCAL_MEM_FENCE);
+  read_mem_fence(CLK_GLOBAL_MEM_FENCE);
+  write_mem_fence(CLK_LOCAL_MEM_FENCE);
+  write_mem_fence(CLK_GLOBAL_MEM_FENCE);
+}
diff --git a/utests/kernels/compiler_menger_sponge.cl b/utests/kernels/compiler_menger_sponge.cl
new file mode 100644
index 0000000..58af12a
--- /dev/null
+++ b/utests/kernels/compiler_menger_sponge.cl
@@ -0,0 +1,187 @@
+// See http://www.iquilezles.org/articles/menger/menger.htm for the 
+// full explanation of how this was done
+
+typedef float2 vec2;
+typedef float3 vec3;
+typedef float4 vec4;
+
+#define sin native_sin
+#define cos native_cos
+#define tan native_tan
+#define normalize fast_normalize
+#define length fast_length
+#define mod fmod
+#define time 1.f
+
+// fmod is not like glsl mod!
+__attribute__((always_inline, overloadable))
+float glsl_mod(float x,float y) { return x-y*floor(x/y); }
+__attribute__((always_inline, overloadable))
+float2 glsl_mod(float2 a,float2 b) { return (float2)(glsl_mod(a.x,b.x), glsl_mod(a.y,b.y)); }
+__attribute__((always_inline, overloadable))
+float3 glsl_mod(float3 a,float3 b) { return (float3)(glsl_mod(a.x,b.x), glsl_mod(a.y,b.y), glsl_mod(a.z,b.z)); }
+
+inline vec3 reflect(vec3 I, vec3 N) {
+  return I - 2.0f * dot(N, I) * N;
+}
+
+inline uint pack_fp4(float4 u4) {
+  uint u;
+  u = (((uint) u4.x)) |
+      (((uint) u4.y) << 8) |
+      (((uint) u4.z) << 16);
+  return u;
+}
+
+#define OUTPUT do {\
+  const vec4 final = 255.f * max(min(gl_FragColor, (vec4)(1.f)), (vec4)(0.f)); \
+  dst[get_global_id(0) + get_global_id(1) * w] = pack_fp4(final); \
+} while (0)
+
+__attribute__((always_inline))
+float maxcomp(vec3 p) { return max(p.x,max(p.y,p.z));}
+
+__attribute__((always_inline))
+float sdBox(vec3 p, vec3 b)
+{
+  vec3  di = fabs(p) - b;
+  float mc = maxcomp(di);
+  return min(mc,length(max(di,0.0f)));
+}
+
+__attribute__((always_inline))
+vec4 map(vec3 p)
+{
+   float d = sdBox(p,(vec3)(1.0f));
+   float4 res = (vec4)(d,1.f,0.f,0.f);
+
+   float s = 1.0f;
+   for( int m=0; m<3; m++ ) 
+   {
+      vec3 a = glsl_mod(p*s, 2.0f)-1.0f;
+      s *= 3.0f;
+      float rx = fabs(1.0f - 3.0f*fabs(a.x));
+      float ry = fabs(1.0f - 3.0f*fabs(a.y));
+      float rz = fabs(1.0f - 3.0f*fabs(a.z));
+
+      float da = max(rx,ry);
+      float db = max(ry,rz);
+      float dc = max(rz,rx);
+      float c = (min(da,min(db,dc))-1.0f)/s;
+      if (c > d)
+      {
+          d = c;
+          res = (vec4)(d, 0.2f*da*db*dc, (1.0f+(float)(m))/4.0f, 0.0f);
+      }
+   }
+   return (vec4)(res.x,res.y,res.z,0.f);
+}
+
+// GLSL ES doesn't seem to like loops with conditional break/return...
+#if 1
+__attribute__((always_inline))
+vec4 intersect( vec3 ro, vec3 rd )
+{
+    float t = 0.0f;
+    for(int i=0;i<64;i++)
+    {
+        vec4 h = map(ro + rd*t);
+        if( h.x<0.002f )
+            return (vec4)(t,h.yzw);
+        t += h.x;
+    }
+    return (vec4)(-1.0f);
+}
+#else
+__attribute__((always_inline))
+vec4 intersect( vec3 ro, vec3 rd )
+{
+    float t = 0.0f;
+    vec4 res = (vec4)(-1.0f);
+    for(int i=0;i<64;i++)
+    {
+        vec4 h = map(ro + rd*t);
+        if (h.x<0.002f)
+        {
+            if(res.x<0.0f) res = (vec4)(t,h.yzw);
+        }
+        t += h.x;
+    }
+    return res;
+}
+#endif
+
+__attribute__((always_inline))
+vec3 calcNormal(vec3 pos)
+{
+    vec3 epsxyy = (vec3)(.001f,0.0f,0.0f);
+    vec3 epsyxy = (vec3)(0.0f,.001f,0.0f);
+    vec3 epsyyx = (vec3)(0.0f,0.0f,.001f);
+    vec3 nor;
+    nor.x = map(pos+epsxyy).x - map(pos-epsxyy).x;
+    nor.y = map(pos+epsyxy).x - map(pos-epsyxy).x;
+    nor.z = map(pos+epsyyx).x - map(pos-epsyyx).x;
+    return normalize(nor);
+}
+
+__kernel void compiler_menger_sponge(__global uint *dst, float resx, float resy, int w)
+{
+    vec2 gl_FragCoord = (vec2)(get_global_id(0), get_global_id(1));
+    vec2 p=-1.0f+2.0f*gl_FragCoord.xy/(vec2)(resx,resy);
+
+    // light
+    vec3 light = normalize((vec3)(1.0f,0.8f,-0.6f));
+
+    float ctime = time;
+    // camera
+    vec3 ro = 1.1f*(vec3)(2.5f*cos(0.5f*ctime),1.5f*cos(ctime*.23f),2.5f*sin(0.5f*ctime));
+    vec3 ww = normalize((vec3)(0.0f) - ro);
+    vec3 uu = normalize(cross( (vec3)(0.0f,1.0f,0.0f), ww ));
+    vec3 vv = normalize(cross(ww,uu));
+    vec3 rd = normalize( p.x*uu + p.y*vv + 1.5f*ww );
+    vec3 col = (vec3)(0.0f);
+    vec4 tmat = intersect(ro,rd);
+
+#if 0
+    if( tmat.x>0.0 )
+        col = (vec3)(
+            0.6f+0.4f*cos(5.0f+6.2831f*tmat.z),
+            0.6f+0.4f*cos(5.4f+6.2831f*tmat.z),
+            0.6f+0.4f*cos(5.7f+6.2831f*tmat.z) );
+    
+#else
+    if( tmat.x>0.0f )
+    {
+        vec3 pos = ro + tmat.x*rd;
+        vec3 nor = calcNormal(pos);
+
+        float dif1 = max(0.4f + 0.6f*dot(nor,light),0.0f);
+        float dif2 = max(0.4f + 0.6f*dot(nor,(vec3)(-light.x,light.y,-light.z)),0.0f);
+
+        // shadow
+        float ldis = 4.0f;
+        vec4 shadow = intersect( pos + light*ldis, -light );
+        if( shadow.x>0.0f && shadow.x<(ldis-0.01f) ) dif1=0.0f;
+
+        float ao = tmat.y;
+        col  = 1.0f*ao*(vec3) (0.2f,0.2f,0.2f);
+        col += 2.0f*(0.5f+0.5f*ao)*dif1*(vec3)(1.0f,0.97f,0.85f);
+        col += 0.2f*(0.5f+0.5f*ao)*dif2*(vec3)(1.0f,0.97f,0.85f);
+        col += 1.0f*(0.5f+0.5f*ao)*(0.5f+0.5f*nor.y)*(vec3)(0.1f,0.15f,0.2f);
+
+        // gamma lighting
+        col = col*0.5f+0.5f*sqrt(col)*1.2f;
+
+        vec3 matcol = (vec3)(
+            0.6f+0.4f*cos(5.0f+6.2831f*tmat.z),
+            0.6f+0.4f*cos(5.4f+6.2831f*tmat.z),
+            0.6f+0.4f*cos(5.7f+6.2831f*tmat.z) );
+        col *= matcol;
+        col *= 1.5f*exp(-0.5f*tmat.x);
+    }
+#endif
+
+  vec4 gl_FragColor = (vec4)(col,1.0f);
+  OUTPUT;
+}
+
diff --git a/utests/kernels/compiler_menger_sponge_no_shadow.cl b/utests/kernels/compiler_menger_sponge_no_shadow.cl
new file mode 100644
index 0000000..27b059a
--- /dev/null
+++ b/utests/kernels/compiler_menger_sponge_no_shadow.cl
@@ -0,0 +1,123 @@
+// See http://www.iquilezles.org/articles/menger/menger.htm for the 
+// full explanation of how this was done
+
+typedef float2 vec2;
+typedef float3 vec3;
+typedef float4 vec4;
+
+#define sin native_sin
+#define cos native_cos
+#define tan native_tan
+#define normalize fast_normalize
+#define length fast_length
+#define mod fmod
+#define time 1.f
+
+// fmod is not like glsl mod!
+inline __attribute__((always_inline, overloadable))
+float glsl_mod(float x,float y) { return mad( -y, floor(x/y), x); }
+inline __attribute__((always_inline, overloadable))
+float2 glsl_mod(float2 a,float2 b) { return (float2)(glsl_mod(a.x,b.x), glsl_mod(a.y,b.y)); }
+inline __attribute__((always_inline, overloadable))
+float3 glsl_mod(float3 a,float3 b) { return (float3)(glsl_mod(a.x,b.x), glsl_mod(a.y,b.y), glsl_mod(a.z,b.z)); }
+
+inline vec3 reflect(vec3 I, vec3 N) {
+  return I - 2.0f * dot(N, I) * N;
+}
+
+inline uint pack_fp4(float4 u4) {
+  uint u;
+  u = (((uint) u4.x)) |
+      (((uint) u4.y) << 8) |
+      (((uint) u4.z) << 16);
+  return u;
+}
+
+#define OUTPUT do {\
+  const vec4 final = 255.f * max(min(gl_FragColor, (vec4)(1.f)), (vec4)(0.f)); \
+  dst[get_global_id(0) + get_global_id(1) * w] = pack_fp4(final); \
+} while (0)
+
+inline __attribute__((always_inline))
+float maxcomp(vec3 p) { return max(p.x,max(p.y,p.z));}
+
+inline __attribute__((always_inline))
+float sdBox(vec3 p, vec3 b)
+{
+  vec3  di = fabs(p) - b;
+  float mc = maxcomp(di);
+  return min(mc,length(max(di,0.0f)));
+}
+
+inline __attribute__((always_inline))
+vec4 map(vec3 p)
+{
+   float d = sdBox(p,(vec3)(1.0f));
+   float4 res = (vec4)(d,1.f,0.f,0.f);
+
+   float s = 1.0f;
+   for( int m=0; m<3; m++ ) 
+   {
+      vec3 a = glsl_mod(p*s, 2.0f)-1.0f;
+      s *= 3.0f;
+      float rx = fabs(1.0f - 3.0f*fabs(a.x));
+      float ry = fabs(1.0f - 3.0f*fabs(a.y));
+      float rz = fabs(1.0f - 3.0f*fabs(a.z));
+
+      float da = max(rx,ry);
+      float db = max(ry,rz);
+      float dc = max(rz,rx);
+      float c = (min(da,min(db,dc))-1.0f)/s;
+      if (c > d)
+      {
+          d = c;
+          res = (vec4)(d, 0.2f*da*db*dc, (1.0f+(float)(m))/4.0f, 0.0f);
+      }
+   }
+   return (vec4)(res.x,res.y,res.z,0.f);
+}
+
+// GLSL ES doesn't seem to like loops with conditional break/return...
+inline __attribute__((always_inline))
+vec4 intersect( vec3 ro, vec3 rd )
+{
+    float t = 0.0f;
+    for(int i=0;i<64;i++)
+    {
+        vec4 h = map(ro + rd*t);
+        if( h.x<0.002f )
+            return (vec4)(t,h.yzw);
+        t += h.x;
+    }
+    return (vec4)(-1.0f);
+}
+
+__kernel void compiler_menger_sponge_no_shadow(__global uint *dst, float resx, float resy, int w)
+{
+    vec2 gl_FragCoord = (vec2)(get_global_id(0), get_global_id(1));
+    vec2 p=-1.0f+2.0f*gl_FragCoord.xy/(vec2)(resx,resy);
+
+    // light
+    vec3 light = normalize((vec3)(1.0f,0.8f,-0.6f));
+
+    float ctime = time;
+    // camera
+    vec3 ro = 1.1f*(vec3)(2.5f*cos(0.5f*ctime),1.5f*cos(ctime*.23f),2.5f*sin(0.5f*ctime));
+    vec3 ww = normalize((vec3)(0.0f) - ro);
+    vec3 uu = normalize(cross( (vec3)(0.0f,1.0f,0.0f), ww ));
+    vec3 vv = normalize(cross(ww,uu));
+    vec3 rd = normalize( p.x*uu + p.y*vv + 1.5f*ww );
+    vec3 col = (vec3)(0.0f);
+    vec4 tmat = intersect(ro,rd);
+
+    if( tmat.x>0.0f )
+        col = (vec3)(
+            0.6f+0.4f*cos(5.0f+6.2831f*tmat.z),
+            0.6f+0.4f*cos(5.4f+6.2831f*tmat.z),
+            0.6f+0.4f*cos(5.7f+6.2831f*tmat.z) );
+
+  vec4 gl_FragColor = (vec4)(col,1.0f);
+  OUTPUT;
+}
+
+
diff --git a/utests/kernels/compiler_menger_sponge_no_shadow_ref.bmp b/utests/kernels/compiler_menger_sponge_no_shadow_ref.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..133dd1d09a0c16373f3bbd76d6a7f392524f916c
GIT binary patch
literal 196662
zcmeHL%dK?HZIs|79D*Z|_x8?!_g*>>r{zGjR0P^N0Ikd)1PTR`&3>ITbEXf4t3frp
z_~>HIy`S`N|M{0c{nMZR_|ISDzyI<F__O}^&wu*oKTh%=y;oeHr9dfA3X}q+Kq*iP
zlmewdDNqWO0;NDHPzsa+r9dfA3X}q+Kq*iPlmewdDNqWO0;NDH at O%aS?{EM6{2^<?
zQs52+#Qf#|JA|#84_82)kI#osTjP}iS1AC`Gq|dF)hPuYs{k9`<HwF&gOviC3V65s
z$YzU5F9jZ`fcJST^1$J1q*7p6fzapw{U84-KjD=GmwQ!WDexQxLVK(8%m2?=Q%!QY
z0-^II$mUOe|JR>@%QsR5Kchg)`5K4+b6WZTGs~(j7b?)Tv=H*&`CQ?`!Kzd#aJK?%
z-F>WIle=fG`lZ0W0{d=nRoI`cDwG2EDd2rO{?8kq8%FLMzABdj%L;g}j{gr^pBqN%
zpFqposl at vf@Lq-U6?no<<i3Yg<x*fuftHPz{Xh79nHsXlrNHG1w4AST_&=xdEm8z<
zJj9njrwWz=g9?O(G{KgK|NX!IM}7=hj%@x`uE`plwrHimRSFmfP94?xBmPgy@>k=k
zM^&9tpsPUQ$?g?9KlgvPRQbQVsUlpifVU<4(BC5Bo!|05Ql`M=FRg;504w0#D9+a(
zf5nlO^Y{JFUp*eRa4B%10&Hern4e9ETLroEFZ938aN(1yR4E_|7(eq7{^ua at i1YXT
zukECcf?8QAaFqgZatrMI+Sl*SRsPorrRG&{uR3p5pk?^+c<Yxx{$#NK@!Na6e#n%X
z5`XjJ>g}5fguYq`4*FjlJMt$$jh&ByFVUs~mHtizyu0*Qw2zNOru^S3r~?d+0sl+2
zcW$s=y{3S--<0uux<p$3mpF>EV|@|O06d2y+EF8GI#kvR6<`Yi!*T);oC1mebK9c}
z&!8ArAt?X9(7iiP4qc?d5x;S||C+S?&sjN!|8tt$qC0=Hc9f~yvlZw%YMjt=srUbQ
zO=ZH>-9#|!Pr%u}-G5!zOH%}x9}Yx1`yavkfDTap-*?EV6}<PnX+0;8bp4;FUwF&@
zmv4bqK6RD#t|<k)&D6I(J{4Ijg0IX}uP#~rFSPm-Fy)Q2$)Rm-a$wktgXpV(uP(&!
zzkVam-fz9Gr9k4STkY5CYs|0aY>{{3>i_yDP|Fy{$8+;c8E=Z*?aN<*oV<C9KLJwb
z_;uF<p}?AL*e$34uOhMu_6ur-kul7RpihB=6)?sSx0r}Os!xntga)sU6!B%l$WEz+
zdE`+T<KU&&(?kI*S^?Z*;(TQ1C;sP at uVB0dU~mlfzoe8;j#R*#q3aXx{LuftauU&|
z31RsP&jA=LRsKKH at OV_q28mBv&No(RRSx55Cm<wj2D$!h3w{@LEAZ<I<c<nWk~m+l
z@|vyN9dov7nmAgRcz85#Xa5WT*Y{rYhf5y`CjM80jTG at 5m~*FyFUt{QX}<E9$&8g*
z{`p-6@?HB|6AAsVrqxfwA3UPMApZk2*xm!_{<{Wv?d0Awv#txxuff?;W*B(P#JflB
z+odfK{74*mt&4u~;o<hxIlR-5#=*q at a-{{Ce=ElPQ%|^LB<c8zHhAI8$+{Qpn)_dF
z!*&ae!a5w(n)u|aJFqnJWnXBg-+HoN*=)q at z2*N_S at _e`Y4OM7T>0|igJb-b8D2H*
z;06;K48|Pqf4=n?MJ~7KeU<$ylE|w}^%IXZ%Tk}1VE5Q^7yLiy=T at EW0A0f10Npy9
zgrBg)ONR8Tg#G+g9%&`2|MOhF{gz8*P97t~tv80`R`4a(diXP2+tC%bZj*TE+YwVG
zHTmkVfBy#`886SQMerAjYchuI0r++SKinH<kGHU|Yg58+O434{uRopxL(bNeQm{RP
zyan2M+EnChgFW_jW=CDm_}|`Y08?l12=jFNq9B|f`kxDq*OcOHc!SXzz;w|gZl?eb
z`B;-2JQ$YMT_RjzQo4!Yd!V@^6^!k1G&Q-PU~?ND at vau|S*A<35fgv`Q2$_?J@#o3
zU)JF_qPNBvCZ&}HS^~6b(pqw1^$?iiC}`sTXdaaueJ;8P at V7p~G++-NYm$Qp(`Csn
z^vCQjbOktJ3T{ULJP?vY!*kGQ<pq@=J}L?NF0+wbD7lsHTJvD1J at 9GRqqj}V4 at kKc
zu*pL#1512%hSsA at T<wbBY?qL)3QNuK7QqLa<lvDYy8&3e2Zq at _`fpZ}5?b8^)tvg7
zlnSr>b2!441>-6#H5-(Ik|H(bQ?aR_R}wtfZ%=!gSpkk%Jp;7|I9;IpaMwQ9n7nmF
z&DmkJBR|JrQ(2G7 at zdTBkzQK%X(l;!o at 9x}8+=T%_=@esagSS8Z^g$e`(FGIkGb-F
z{+GUfFo__3s^6aWu5b$)^xi-u$>J+`iGv2W9NvwO6gR!}h*yLFW!e0~3`;EsTLpC_
zE&DX9963*GgP}KgJFP^Hi-q{exNGk&L5eGf%Z}jWX?kUxKl|$O8A7JCleo-qq~D(Q
zC|&{EwPh0K19KvREzmW#5TxJ;?I!<+Z*M(kEgpWSR7Sm0{4}>5HV<|uYU>Xo>;buw
zBd!>jEWYx1#L}2VzzAPBz7Zl)1Q>vyHja^g2|!=2rqk+`#t-w`)1CwI)pa;xJG=|r
z0%%s~F>n+NIvE84MiNagJ)(lYHLuH$K0S$O(}ciRtgR&CisMf+%wh9DbJkyiumlJp
zNIa(e5%(GnY62L7KbqN)sKDIH5w8;hum?V|73p>i6VXv_rGj!4$Q4o!v)pr at 1BI6X
zw&p8%mySo&PUC#jUDNStZsiE$DF;Udo}Wk1h(VsBx9BTJ$(2ueGOiTJ=W`5m*d$Q6
z3v at eOni9r+yUY~laIP7QeHcy-<0*5^_GoI_=@GXcU?hwoKxy#591#?JnDHL+9KRYL
z>2A}cuq{1?Rs7XRgbgDYDP{(AF>xGGXZCfdzyR$SFu`D<X#`^kkO<<qMdCvYbJ7^l
zHUU^@!ZBCyqyZ=eU<mn<t- at Hd%naS5R_M|O33!o$ZWd_#5M;@V6w9pw;h$u at hr9)X
zCjgsGIOZy`F{%M1WLznktzs|?V<!375ziU#C at D(DTaep&&O>Z-%oq?n0a#PQF<0<y
z2w;`)mV;^x at Zl2!lwfAqKQ26cswwK at IY?I#a0K%h<2~ddQ20W?2HwGNg#dLpM}YN8
z8eR1SEvTPY)eP%M3&iy~IKuzR0rMfYIb#f{t-FTEh_8Vi&zoGBT!4(nN5$7pj%omF
z3M^#lbC3uf5CJ&Ddrx=;B;8rJ=Ax7U?CuiaJ<pMy$$4hQs0QFU*G8lf3Wi?++yXqo
zIcLlONp;;gj)TxAY<nT_aSgNKTX=ltgo)=cNch)Ywfrx`m_}#V at 4K&nq+VWJ<)CE}
zHo0;*vW8o>M?4>O at Rnb+EX!c8kS5QOxVDB+p7~wpoYCE at IvasoI1yV@0FH?#M@{hr
zSUm(h!!pLS%M~^gNBl2Cp5egnzG8Dzk}iwzMT~FZC=(BlAS>{k(D at P+rk?~6t%l>T
z0DeAZmbWPWu6YjV4oPz`YaZU3U`>}#6K@^CSKw*pD*%Fjg(>9;Pm9RFGE)90KsZV`
zz=2<U!pQ2`KO=nQz>ol12gfex^7R+KspBW)`2~Bz(;_^iVtym0RsYNJi~jlb)(|rR
z at K3_=SG=-MVm}GySKtYEM;7`@3QxrXO5EK3x(UBHKa1SLx;~?Mi>z_p*N3qm4D&1S
zgqtEeeT~|zp-hY0`X|uNcju<POIhC6hp~SYeCV%kil8Hdsa|lnW*H4ps{RRdiT|-C
z2)hZ)zPd*lpvxH~Y)*bjI`lMPytpJ9GCv<z;{W;+u>2K(j93#Q3Bd21gu}}k!8*VQ
zQ#rzKk&~%Db_G2R$OjN|LNM<Iv;6-V|Ld<B{e<`mbjutx%jzEClbi{ff{@H(d<&a7
zam?ot8WYUXJQmFI|C;|Hpl%0857_ytHaOTUFUxFd<cK<5GMEZHAG3WI at SKB_XiAIR
zdTIH8)Bi2OjqPz{KDNw3v#FL**JzTJ7vxDU!QmUbl_jgoF$8U7f;h^pQB1BRh~G$S
zHh66og!KSc4*~OaW%9{EvnFs%T#B2BFim9k2s7|JYZzk#tks#yl3t##LHYD*=#{?u
zwN74mxEGltq3tCoYOCN%)+0wWZq@{v0KU>L9JvJZLv}Eat$3%}V6HSum|h<xm;YzK
z0*S~i^J|<FTg&1#v5Pp)T{u34wYW*)33o70u6U=~X08k%70gTJ$Yp0e at Mb>iW-vR`
zV?z#)eofw}rm{~#L~?;W;M;JR<)F^YpUb886J-o3;-7CSzuD5`Z#SZuqj9D=8nQq7
z9chG(DiJxF%5n^I)q&xa2K@||M6 at q|UQ%|gh>RhLp$J at X+yifBvSJ>4TXMwnO(fir
z52~-Yvf>s~_~y#=9XV>#5vFja$b&UEX+{A(a?Llpdi?FIm|$5nBHoZD0%i+ at JMuww
zmwcM~ax`Qx{kmH-m^dmZFt@*TG~&pS=O6dLo0(7y#z4fokt3ibz%M9_a9NK{ip-gG
z%&+i9fSmuRTmNv07;$u9Wxm<fgKy{kswFsLtf&M8nc2c-JFO#XhJdqLjRxcT1pXXM
zd;(3zHe*PH#Sv@>gEn|A4RXN}hzMXeg5bBnDU8i(T1V~@V!u}IGKKjSil@>OGA2(r
zn^%5djTm7ih(@n9_Ta-Il-CvuRluquD+gvTt)pp#<At`zocc`u#MK(Wv;b>$2D8i-
zLP?o3XoGjsa?P<&0Xb7{;V5Q?+wnneq?n70VC_E6WQUAo8IB*ABZk~MhKjYwh?~j1
zm=a;~JB>Z~Y6ukq*=ZQ}L98;_j&j0%!92cl9^t;Gb)L9(i#c<U7vG%OKhsOf0}MLh
zoir9|2V<wE2(Jbl4k|WT<44p~FrGNY%-!y9TgA<^IJWp27g|o}>iJG at kGwh;cKkM6
zrP&KO0yb at r!MLVi#P at -B^?0P!-As#Pi$54QI(uzLobW=<pu9 at cWrZoNJ(|6=XkpF4
zAZjM#4VGfsxYc<8WN|6ROlHiS5DQu3(!vvr&gK8X at 3L1ij7)8cE113T)d<GY6Y}zG
zNlm$elS9Bw8H3y^&Sb_dKH@@FZ2XV7ky?(*SHhql-bRDGIl!iJn!okGh&;zf&<@M>
z97IMqAddq$xdnJg#>#IsVkYAjA8{qi(bSi?a&rF*=WX8Zz8Bhd0XEfT?i0`p8{e<F
zP@!dej+;^Ch}%|2lhUI3IMguy7p7b(-+Tp3k**)!Mlkw7;V|C1HRS!HHp1tA!L<r-
zat>t97GbS#D~t6vUjez&ECI<^;BEHqz86xfwvZ8VsA?j&9x;r9TYDwNTdp3DC&kyU
zu%MRzrL6HkQUrAU at HPUrpiYBUh+hsy8iDhHd6EZ?`@F?Wif>+_qt;=ejQ_dO+w7gc
zmz9C#ICw2a3tm>(qDu&~E)T+E%i!{nP>@GL5P-h|8Wg^Q+!C+4g<NnZB6k3Ed5FF7
zMjZ at C0QT4#MybmI&*O_5|H}i*|Ng5D-9BSTwOPw-80Is8hiQ$(9_wN$;yL%dg?oiv
z%vV79!t^$HXCxGDGbkQNDzN1e+6S(95 at 6q#Jtj0h4q{*P!U)gc%NqX+LHP3dPPhA4
zd&QO`u#kXO5pY_BJdR!Gw82{p!@%dFsQ_hiWCZ(~7e;shE-Rzz5nlm43SWUY!wVy<
z*e1?hv{Rf{tazsya(Q52+yZcS&^Xw|D0K(m?p$9+)noZT`ChYPn;72MtfT3?R*&-*
zSbdj<nH7Y5?hZZ&yErU+Rgk;4YU)=&Z<Q}Nam7onT5>JKVGIEa=}6&iCK!AMvokPX
zF;@fTF_6N+1f$4(fV-P6GOb4VPk{0z{t}ZX&opu+N9?`D=@MFri1Qv3tc{QbfB{+r
zFaZXcJPf*UkTHsX3?$uUT8v at -1V}tF#!IdsP7bhi)-z98xaB<>%mXMk^}7VapE`!a
znBY{w%gH=UtGM^SFkj;H at R=>4e4O3oZ?B5*5<{Gf!B>i}no8>UVWfowFKn?{iYH7;
z$ydPKhQ at eF&`2RiS*s6f{Bl#7M!dlshu+ii_|w$iIr2O^bw+aWgb^}0W<n`~D+L-+
z|0|Xh0WYz7_)JJ7I_M7~2IRMfymsUbcCl}PCwyR3-+eP;hF^OEM3Z5pf*A=B`3e9F
zCp5+zf~=1U&a&|BXE4?`0{lq&1RsBX1mYVoJ2`aIM6*pC%|C(OVD<2gEH9Mj;D<5R
zHv&F9+pX;&z6agDaJ4d3I>qKHDHYn|_#gyf*%ACa7_mJ#pC9kOj;z1I-KNS1jrEZ$
z#1;66#*epp_&|tbG(`LkpuNJ5*xd-YW423bwmg;;XH5)Fvh>O;sp`q?_#~k{&JK2k
zZ4qG379ok}%SB}Y%H)W_Nte%G<?rgwW77FJm}_XFm5JoXv#lP!E*Hey8t>`Ra7K>F
zW=#ubnycmRBNNVYcuwF;ifFZNsgNcTX`<Zb6+j40a&R!0MQ=mnAsAMGo~>Kmm#3ku
z0?-tgTRDdHKOZ!6>Tz}qQ)D51HpTM~wz_|sf4+%$znO^P^9Ico9}}9X&rE+M5ia{h
z%yR;NcpmB7?Wi2+=2N^$4vuu?GL|z(qn;e`lT^+*z6JRHN+L<4PhMe22A>>2dr9}a
zsS;F4&y?GP-R_^}72t^RTX<ytC95}GxF%n5-wQFfn<~qRz*7}INmeD%Q3eL~COJ5Q
zSBHT8*20{Ky|bQ77{Os9tvr&x%;Dh|+WB;eEDv)@Vru}6o38+OJlOF3G=6f3Lo0I7
zWU&X#)%cO?3m#A0Wb*KerwVfVRN}2<nabDKpz7>zCBh~-7>94?ps}JqG8qQo;4Ds-
zGFxhvkNE*+D?E^|Ru2a=QZw^l&-2qlSrGJY_YsgE2xe^zKEMMXH9Hc!+T>!J8fPY(
z<W$URgd2xG3E(0R!FUV6;9%eb3?@FACU0qthqZ=;Q*DoT at vFm)Lmvg;AkGz at gE6Oq
z at xe@@9LIAX%gja4Rr2t7HGFa^z^i%h2nvADjsKM|K_)*3^K-Dx?s&-RGJlSch~WK?
z*PUv6eHWf70IO%AjQQorG{GPCzjo)bTiDFmqWx}M9ym38!Y}`ek}wRb`VjwPHU&Ik
zhz(zkA?>$<{!z>CGKuB?mJ^Ks%?jkUm3VF3^z9Zme6#Lu`qK#hIUHG-)(C<vhouhw
zCs6oa4ni3Q5TBX%VYCD2_8Mn)OFe{u7cp3#O^TRY-LDDi at l^kZkL4hH9+(N67^}?d
zfTkcPAAIXgyZl&Rs{HT8yu<U_Wy;c1WdDkXMEDg?7|DDE;D5v=B6G^|wZH%GTho*o
zn2hb*H`|4k&E$N%u*+I0ucR8 at S3A=G{+Sm>ytbzJloPtuOz}q@`K1OwWKNdXd<Aek
z?<;VJ_`KhwKGRtIB<0tye&v}kyb6wE`M>MHaaWHsyG=hyz}WXSMGG;W{&agGg+VvV
z5G2<`<S0SRQ2zJ&m<a11>IptG5qu`#Q5jz~EqtDUq!*85aFXS(BsUD6>VN;(B*Mb(
z(~=60y<!CvuZ^0RJikiXVYY<Ry^<m=jtr((C;bU%JvNL(;Y1}#9HfOUP7UU+p1QqN
zqGYo#@qePgps@#Ox9%}7&J!l@&5O+5PMN$*p6x!%_p+Slf7XO8!EweT9Oge0^D7vC
zX4<Z?#|fVq7+rKQIUe)xA3RL}oWMcGAPC_2k79k!SB4*Vc#AnZ_9eS3|9{al$;PqV
zg!7pzOahSfZF$?rlOp*Q#$b at A@U3L=QLxOWku&}T;B{;IApKi_#|Hk^Fwz$@Fi7UP
z(CV!&n50EW;*x7_Px3!M4J!F3Gwqr9r-z at C^y}NvFRYAl!0&%n{_Db;VeXj6{Icba
z9?Jmc$8$aqF*D%!f!5qY`r at d60uJ*(UiV#q{W4e{$rwI7wu<urz%BCKaUJ09E=heE
z0JrLYIsWul0MB_QSlD=I at 4?_FMOb*+RpV)E^EpynQar8v?=@*fpm~dMNqo at l3GI?G
z!Xi+BLCCx{cwzVQ|KO%rbKt?;1zKY7!K;O)UrZ56ztX+@{}tJ}seYR{!g$c_O5?;X
z#<v)tn{pumO&MHRKPe?0ar?Xe#}k$TD-XO}Z6Og&8H9DhZ$ZeM3U>QWReJ(iUeq1K
zaDMbF(0%3<L7gy_@=P);eaU!#{rf-or&SY80b0y%Jp867f8EfLLEc4}LeNhEKk9!O
zyZcONk~6!v;ZnjZbYu`RFAs7@;K43z@*KAc&UOqX?FL)jcjCY6e=~U~0`?*xB=}%=
z3x?n;NMyWSn0{+8clgNd=6FWHspDpApKe at q#?e1>JTkQoCXcrmWb&66craIJBTnve
z&{u#Vk5A&6tlKR1)pjCh7(RK$jySWc0e`3ILasPdjcP2K#KH8&#ud_A#f1<~t9<?p
zX^<-fVM-F at c8U|STnR at BiFppY3I!R_EnE<SVc8@&(y^7!<}_H!nur{=S1aDS1)oPn
z(1UPV$qnNi6b<?K6?~Y<2cPp5sn?o%zl}#)4j(l3AWi34dtI2teHDka{h$;dG|a)Y
zeHl^V*2Rt69!#AFM*yA^K at ULlSFH%7XaT9&y1Foq$-C_iHul2P@)fA6IcM{h7uVWd
z%X?v5iugEp at wfXCF9LV;x7S8my0yA2_~Z>KUM?)rUwuBZ at 6uZ<TqOuJ2e_&->b$|s
zn{R|xn*d8xuvtyhZ?*Ae at k<_<7t#MCBH=*u7H88NZ%c2<DDh2K<Ns3%|Bn&uvDIbM
ztIO$$AgwEYON)az%aUO50i+9X0^Vle3*YNi9nm~lqQCMjx{+lkCyCvrY-z>alrF)m
zkw>}(L&AlAcyp;x+dP<W)8FRR{B7dr at XA;CSOi}m-_h&95zjXfR0c2vIlkGqcf8#z
z4Dl5h0xuNUaPlM9_e^%Xza5E4{Sn&dIia2-W8AU#s_7LN*+s%(V_$B<+2Z(ahQPmK
z*_^)AY{W03B41aawZuDoGVATuY!VOM-U=plMy at b+PX78TYk*A!^8F6pUjD^_{ldzj
z=ch(R{XA<^+e-f}1rjreVUpX{l^Qj?9duxr8wOEOLC7(|-`Y-1`$+|iRq|u_3pott
zb&^}QcS7T<Ps&xj4px9o#n}I*4LzUy6+pGJ_rd-->1lB6ESPopNut$Tj#R*W1*RN+
zq#*UEH!Hwjhd1j`Z!ZN(fl{CpC<RJ^QlJzl1xkTZpcE(tN`X?K6etBsfl{CpC<RJ^
zQlJzl1xkTZpcE(tN`X?K6etBsfl{CpC<RJ^QlJzl1xkTZpcE(tN`X?K6etBsfl{Cp
zC<RJ^QlJzl1xkTZpcE(tN`X?K6etBsfl{CpC<RJ^QlJzl1xkTZpcE(tN`X?K6etBs
zfl{CpC<RJ^QlJzl1xkTZpcE(tN`X?K6etBsfl{CpC<RJ^QlJzl1xkTZpcE(tN`X?K
z6etBsfl{CpC<RJ^QlJzl1xkTZpcE(tN`X?K6etBsfl{CpC<RJ^QlJzl1xkTZpcE(t
UN`X?K6etBsfl{Cpc#Z=95BL<+g8%>k

literal 0
HcmV?d00001

diff --git a/utests/kernels/compiler_menger_sponge_ref.bmp b/utests/kernels/compiler_menger_sponge_ref.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..911289fdffb7e376bf0f205de1eb3b1243f5731f
GIT binary patch
literal 196662
zcmeFa1-#YO(*J*d|EuKb?(XE!4T7MEh27n)fB_0B1_rj+g`!}0cXzkmPH*>pZt{Q6
znzhz<efQo6(5v?<XZu>udG>|FiSPc*tk2ARW at gG}Bfs_SZ^?fn`M(x<@&EMy{@=Gs
z<bUy>{=L3Ve at s7t^b<%wf%FqdKY{cUNI!w}6G%US^b<%wf%FqdKY{cUNI!w}6G%US
z^b<%wf%FqdKY{cUNI!w}6G%US^b<%wf%FqdKY{cU`1(JALk`;M>;FThf5P+=_$r>j
zqLU6i<>bS at im#mhn&~I-b$$W{`G=l*@?obgI($fb-Pid?P5*4^C-5acfkh`BqHh1x
zMTebs%HgM<dc at R8!@tC at pZ-$mC-C)r0w<psAs at GY+9^i>{>7&qdCJL$cDJRkfUoD9
zmj0=}geTyTFKpi+U)=uUQ;!7vXPkc2nTwC=PE(*S;W4Mb#MkZ#fP4pjkZ%Z&bNhmP
z0sri?&X_%<qyB66qo;qM^b`0Gp1?^94|d46aV~7XqoKT|rsNFk_67N8pE2j`Gw1Yl
zG^8oefAFx=|MYA01RU}swh!_<8_S2bR&_U3wAGbDc+L{HFUVhV*4%T>nme?!Ax(k4
zMsH#INBKfe;KT(7JMcsG4~6h(oSQYMe|vq|kmkysma2}1GI9GL|IE1p{<DuhcgZos
zx*CVH*LStnexYxh{zvI2 at IQV6#~!nfLw?NdYn(fHK)>w4{kZ}>;jzd!;6Lx2V>g~U
zI!%H8$8TZ!+kc at aFn(-LZ*E`Ho5Z=f83Rq6YYC5c`{yk=2JoMM?r|qCJQxZza!At`
z`VrFqDE$QfH&5Wi1qb!&_D}QaO&{kv!sFcj`R5*c!MVp>aNfKN&z}bc%E=gzra=Fj
zH!}TQKj#xzc)~%+ZvV8Ps-=njc$|B*vVHOS#_eBl-f<xRqVwlpbiw at L-HmAq^f}*z
z^r!z1p1{Hr4)ktcGn|c8MPAGxC9N>M8IN;4;SuB;w-53!zVP^^7al*Ny9o-^(Olix
zQu9Cft<v8z{RGzZ1Qr~BpmF=2^BhV(hr~`(b+H#Sq;UJNom7NJkblAP0{)9mxa8s!
zMh<C)0%Z*7m!?2#dLPn%|KENB3ywd)yL~16l(EQUg8#0@^48kYHMsqAj!7mw7Wo4H
z1(z;eFtVpvDNt8h3-sT9d(+>q*C%ko`~#BRKDqtOLH$~5OS&2>dYUV_0 at m#I9pN!0
zfN}_rar=V&%a$&@?2?6>Z9GmX5QVTb1?u(vNdLuu>j|7Ne}8rRNujPNc`^s}r>d2k
zF~DiqOp+&o?Z at 3d_1{sQwZq%0yP7H>JeP{w7vx`l$%$87dg9WHj#mnlE`<HJ-r at B3
zN&N(lpSQnr`%$PH==PB=A5Kc&AwMQ&sAw5o-Zaw1xySlASL?qc+G|F3)N*C0+XwlV
zUwYydmz{Ja=kk*s1*(Svbu`zc{^8PpntlRb*%O$5+<pQ0$#6!YuId at IW5pM?RK2NU
zhU)eSRc+%cTgFs0kAm%+#J)*ynhX#1UoMNGEmfnt>Xh&Z at -IC}z<>G4S6zPc)mJPU
zHMFH5YmjJx+R_y0D|?UAUpUnhIOu>K4Dv1K0r~OtzEdxojum11R=O-D-Ma3nwOx~I
zIwlJKTLu5>_BFAuaW1v3oWTRc?K{F_kbe@$zv_xbS6{j4nk!EkJ+!qbXRvC4I at 4O9
zRBu!I&%TN$5O at 2+d0J{qOm6>>Q%s9`*sf(lUCZ_xhtFsjx>5a*4QsnLsOg+k-9Emm
zb!=tJXsK$s#C{m(UJm#J!gJLX;`TxQHCLT-?Nz6a8P*z5pjv7HU&Sw*{+j70;Ge*}
zWA}@L{~(CEX7z20y6e)7XE^csQ-D3-ZydI9ea|%hXKm-?YP|wl##r#1#C{a#3gIzq
z-w_^h`v&>fUVZ9y*PJ$XcpDT5rlb_8BV7pd?^F84m;D6h9lNhXzHpueCrE88b6`Ib
z`<)Ht2=!yVimp)+Jp&{MoP%~~Peac%@ZT_Wy1fEACUON-wvHved5KHxE8+2OKO{WY
z0)CKx^=ZqlIc?dsr_b7S(&(Wrg9ogy6eurqU|UoA3iz_$_&)#jjyq<b0Q{u)quN&H
zK*?&t)pat->0z(p;@Kp2;5INEKn~l7^O!4Oy1xPp1(GOO)0<(Os~Mgc;SuDE+XwmA
zUwiru*Db#I!ugg0bu|vk$mwdUZBJ96J`dL~@c|rr^gc=8$L&W+&fLs_VV=iiIFHm&
zcfg=bFj>)TOn at t(eFA6~7G$n~+RjOYw|Hz51&_bxs#D`}uFdcy5FXq<$iM!&#ejeL
zvNLYH{tTr+wh-1<$9?oA{`%=J)n}i;F?07e;NLfy at W+#!NqHW66-~R=fWg^=GB}vP
zD3Y9(1$9j>%FW0a*pI`-!AE-qw2oaH!gKv~;`VP?cE<AS0somd-Eii(5p7VQ5k?C{
zA#70p_0trn&w}<#`NfZ(vzLND;5<>1Q^Y(A4_OpV=84Aggn1r1Rt9F|4j7aL{s(2|
z4$jOK7Stvz2(kq12liV}q-#x;Ew!bZ2n`eaSGx=kga at C0&z%=h2)Om;b8lF-Sdo9@
z4QJl8{Hztr&l)$P-BX~9?0mFvX$thEz at QI)k-2mBJbLb4#~!`6=RAyGK&u%N{%Ax)
znCCfNIFFO=+oqMlS$P8oXAd-2fS5p5-r%f!SWt0ZrpJGGb7gBC_ at 4yZkH@*EYKCXr
zkcRO+4P(3OQ9;~(%lQx<LH-Sb{1rEzz4FGh$B*n#3N*aCDI>dpLKs<~*2bzn`1YlL
z<uCjMcG+oD=k_i5$>)Pi at X7dvknksrB8(&ru0{Qvvux8!Ms^{vH&=kLAg%yRAR{Xu
zloB=L|7q{dF08h0KTPbq3=cV_VQtl8y6PqjZ5)LPqNNJLW8A(Vf8|X}ZoX;Bgi#%1
z9R<qFDay<(q7c^Bl*a!T#zLR_hjVA|>A+943*nbMr}A at h`^c4(2!F4f$F^%N5%qFr
zZZQsj;NYC-3Q!Zs&d<mx#7qSFNp9a}c&?EQ5Bi7v%z@~CxB{>OYyr3Lk$=mIb8cCA
z&URZ)@f0X4x0sWrKz$CuU-TEAbJQM5;J4*1<eKDC$nc-Ez!H86yEe&bMiJ7q6-XN9
zVkuFtB3-)Y9f$u1=Yuly1`N)MOdu;y)tjqv`;y)?aW2WF+{^(ed_uy5&%b%a62O1!
z%5#Yb_ at CoPwwL5)jOuBD0&xYTDbN>%Lm&Egvya?85&ZG;Rubot;XEp4i*cSa=0HnS
zqRdzx9nK(Pp7ZD7{6XX3tb&0VIsFG^Vgi!kbYg}Cwx5vL*Ely{kZ%Z&q51*x&jI<j
z-F)8dw{Xsf0u^KrGFc!A0XVb+q$yAzLi6YORgXGi_eAjbUfy!iZgP^->UnfZ56p!8
zjMH$+a0c`Ycz!`+P7yCCY(>&#CuXoR9>@0MiTyKuh9`mW;P!6={DS=R?zr{*J8rvR
z;^<B&5Y+^<Ko}iSMw$YB9z^t&&pq<+-3<8m5YInn&tvB9Ra;)*Q$2x<IVx|tXg8Vg
zi;R=FfG~l4CS|ProD8qwy!e9o=oxVPpwS9AMag4D`>NhtdDGbl*pl47N$kfnJjU&x
z;|Y&-`yl_;^Y6Uvf;(@&VAAMLC=fph6o at FBpqp@;c7SvisIMS<O~2<6hwU1HfA*ep
z=j;VtZ>uXy1^xsLKc4?^R1M4?SHe${(@db1Bxg-oe)ix2#Lf()QqJRKY$E1C#un)r
z0?|InoMEliG(xJ3$GUwI`%=%9l9nd+t=qR$KOj5-^6$F+!n^OdaMGAAC=h0-6bSIc
zwV*)hH8E?##k&9Zhab921pcG;m}62s1h!=LJL=1V3YTx%HPP-#ha{;QWa_ at 1!zmMJ
zWkdr_TdqspavndN!MAHg0?sQ=CQ_iEkz~%ujv8irdKr(c=Z0?orn7PTn&AlukNA8D
z4{jgi-*pGzzlhS<<gr~7M+pUzLfDXIDLM?!f&#(KS{f?X{r5Qi8>V^!haIwW1pXs;
zpY2jTM;);nf=Nu^fc>_!dd@)4<_LdswCmb+-2~e6=+!mT*ci)0-->dcn1(Y5brJ0&
zdw?cMKEJz;dKOoJ$aoUnz9ja8I9D<}N_YhMhVTgT#qA67 at 455hd+)k<=j}Ek1b_mK
z8Quy7TEE|b^(im(A80608vm)lu}=Tlp$G32f&Ylzj*6#x^0Ef)u-yz%^~~GPcdRF6
z_$Ac?q at hVp)!=52hm(198k_d5T+|EaafPk&!W at kh3bO}s1w=BQnA?|<R^awchQ}cv
zs;|hu+adqnyO!Q}_tINdEKv$XAy_F;zX5~#4;TyuYOb$Xr{C)IFBf|PqegT_;6HrV
zBahfEG1Vh_&VA?Erd_M*DQg&3THoV5zYu=d3zB{vzwhSIx>20*B&Q?%GLS0lRdniQ
z)2L`VR!R%9!9OJ}&F#n8exln?$nYrP(ZE66{$03zLH>RBTyp<CmppLqrJe$fHWaA;
zz`^|oW>5%juCGi}pcq8f-T!gOK|6-vuPZM|27dzKH@)X0%NvK6H4OEs9->`8ew at TU
z(Jq7cL&8s^dTbP7*tZhrJXXeLMEfQAS%kXA?HdhSDz|^@$`o-fK7WG|%^M7FhBYw`
z0>UH6zk8`7AMihT-(?$&?G7mrg)r3D+78f~4guC(%<FG<@PRvo;3u|)w=iQfp~4k{
z->Z)4PoYbttZ_KqTTG+XK at DVevIg}dqb`FQdL{fagfn%X$8nxmhSQXE)$P07es69+
z%54%RjP9((^KUq+bs{RD&RRwO{r6s~$Orrn-GBL%aowH*(Gf{I08y|n1UIEw&^l at Y
z2Oh9}4E%@fk~Me$v2Am8F$~{p8^Szil at TG+hl1)-dk at j)Bg+hHyUgl|Qa!yAe#3c8
zl9Lf7<TH~wPhy7CiuRp)(<OOAw{J2$lGv9x_l^q*nbAMs`MClnn=3%w{)6|4+kfc(
z%N}~*@`oR|e9HJCP$06PWPy|dkpiL}z-ZyB(^0^>2mb^1-!2*aM;^YbNGtnGddGr4
z5HpuIj*wQA)-k>tQHA%gpb-3y at Q0pXR!+n-{B{T at F#`S>w at hvmNkcT8K^qlKyO!_O
za&BKVY+;hevHi&H`#2W~M1I!5!kob+c^Okjwc_(1 at W{VkkpIYoS8%3|?|}kM9X~{}
zKyE0+fPooW2u_Cp>k|I=-*?+M_;;3U&tba&esY`W)*{;Dz+Y0^Ra!R$k`L7nOkk2s
zU}&GfpTy@=k?Ki~b`vuEGKUje!|f9zC^J{^_r`fBY<basl;jE1n~8~i$!!+pP(>CA
zoFLy&{Ri>+2Kf&^Ajp68p({D_=I#XrD$W@^!L<WGfk**G6sRtp2>Qkw!G8N}lLGvQ
zM&OSE-gp}e$q at K}GXcE?Oiy~}qyhcb!(^PKjU<2SXgAF8YhjnkJkTV-2}L2Li3#Xr
zk`$cBg}U*Qu9xv7x_y`7kvO+BKPygn#OEvWA2G;(?BT08k3VuX6o{L`QlO!&y!Lak
z(88rh1AU{>zwh2#Cx9R6&Y=hIeAuD8c+cM(_!0K>ADBr#1QQ at CG`E15fJyR5E8>9l
zzpdR{QL1Oj(YCy0hA<2GW&HB-eoBLCm{DC4DU;F+^E}$3?l_N=u{i-}LT*2-=b~gV
zRV{J*_a<d{gz5)`2cPee5BQ&W^ctl=5I?0r80PRU7R1!^f{sWiP-AWRHyQ(d^M~Ji
zudNcm5Aw<IaMlw1nR%r&VTC53J-L_w33;r5D<CP_HMQMXc`L~9J26{9PKM(=W-O0R
zCJFL95$7?zT3*A(Wih<HM(er0s^#3i&28R)uO#*fawEcHsJ;>&<MYMsKk=x5|H;R$
z*>FP72IIOxd)N`lTr7&++7a1Qm&X4$$%gjYa~9y=$9w+$B;d_~$Qbp)T7sX}-K_j_
zny`!sWY}9E?8!CwkLNjwcFi2-^XD;s#7TP0;C(OPmm!=s+Ev0IO(xM6^?>u(P?y~P
z%5%pJkxY*CGj`VcBu{F$@8aCv2#-hplaF2d)Z^Dqn>bXmKt>B^hC;Ls?WiBt$(mpp
zjSB_B%)d!*e;@u?yE~iq+9L({Np&(a1pFVC%=wL;Ic!~r_GsTaB4i}NFrVH`APM}E
z>Y?$xr=>CgzZtx*<t;yfHkihywJn{=WAi)#=g|x&kpj((fFBdU5H!ito7-O_;lbxC
z@}GMAx~HGG4*Zk<(L&fblLg8!bK#&st&NrKO=$}B&9JCFci%E4_zwz;TrS&VIe#4d
z%{9fxyHykjdrV76KGR5y31kurV+h0o2p*DXkK{RNc&G84N-M{gx0LWFX81M9>87!H
zNrTPv1e`}RoCFJmrA%y|IIMBvu%?u5-zD~=I5(N_Bq0BpCzd_)<gz_?o~aaQ(ipUG
zW+;T|h}0dCs)b8aps%wH?7rI;aqw>|*&aiC))M at bz0mC-Yz`-u(0)Y|;viblGjf<o
zMJr-&k~S4KkPad)K%b1ScBvkjL#w^&sR+N3aR!q~qV&GuJYK*_GGFUi#kqsU?Hl!`
ztLIv_A9wqb+w^g+Cp at qn4nCg)@}K2Ab^Q?s?I09rTu6bKizPcEbwN^FV-<z4hMKak
zGY0zR&$inxn*;tm)bsDTl}5Oq7yP-Iq<H!@n`yLR_b#4aO#to`<~cp>Q5nC2pHvSa
zhIVz87UtNFUDLYd%Uit?ei=w*B at HIjHDVsqqN|}Uo}Z~cDqT)U@~qbFU#%G)@Af_N
z1^iE4|J>7 at 8#Dxf0!=nrAU_nsXF-($HPoi@|1~nQU3cCr0sNVR$jPja35e(4fBV&W
z{@K#Q=sAC3P6o*wOdtgR!3XRB?HQDjo3g^?dsqbgZUR3pIudh6g#Tn+Ibpyr<Cg=%
z at 0zw`CXek~iJDfNdfBl33%zt1w=e2Vm*m0iGaB92bA4j}kubv}KHmfm4daJ4D)J5Z
zZ+QM0&hi(YT|Rx%FiU}?9iU?j)6pFTQZ1ZhLDN~FuLt~h-f7ch at RRMq_ab2M;6K=_
zIuG0B2vgzhEzgg84{49;nFr?-rP4M8dQO+>36#vqsUDFr?{?TRI+Jag8P4M~{3JPL
zMORCe45Xr6G0u5>yOz3rFI~3kO_Stl9=U1L at J$#BjT=u%cu+n}8QHSQ_zqRUF$>7M
zeZUX$IWInU<3^K*Z8)(93goqL+795i1JDuNR98`7Q~LFQKp*`ncG_Vk;NL|(|E at xN
z_9WZ0=T`gdwe`OHY_p$oe&hKg at YBY)TJWdrWJ#J>BIR9ZJbQS>^J at cFVv;`v`1d$+
z-tI>nx7*>z+S%h|_}v^%ly8%VH<8RCShlsTK+=$$;S{%jw-xPoPTH|;>{hK~wrn1?
zS<{G_jl)<CGd)P`OIDu at 58?+}#`rGNMz?J|u3d9SSc-T1AfNNn^EYigdAMeQq#eKv
zg-|V=r$A&u2?1If(prfBjp^;U{fwP<*u;asqByr#@E@=P;4i9bx1C%L{3>itn9><$
zdvw_}V*X_C%a#g>YNhwKckoM|Q=4`fFtXR26ZSmnc#nTGnJS8Q^D+mh_y=&}lh=mx
zsM{YhW!J9BJ9SLlzJ2^Qtz%}jjNaT_0W%tgZ4{QYG|sIm&ZW>y$PDsljI&pO5}p^H
zwa5qjFTb#2;|+#Gfu@>5m=1+79g(^wyB;kZalICT>#EaN!2iGm1pGVB+-2uYtIP81
zDhlxVk>}q#@caktfK~_5T5)xU^za(+BW$j(C}i0R1Cu at Hmj>P-)wvq*qiv9=cJKgl
zo0x#Fa4GEx@|*(x{f<3(-=k05d+tKP|Lo)UIBNdxN6f?jn~q(Xy0002@|i0Bp;$mx
zpCqTB$)lb>A=G{O`I~?};2$z|x9$yg?wqtk$M|jK3K+eGy8<@WVy-6kHO_6Qpw2vi
z*cl0Ec|q33W81kSl<=tA2l<>=UR=5F?wdn_%JVZl1;TK&9YB6 at HyW2LXnh+0{{#4c
zOToYEE}QjVe?5X+z`vK$9s~aUO~8vR0im+=BpMTt=?$ihF*j?F3Y%l#cSWwSfj8On
ztFQ;SYGNlRbD$S9hdnGL`45<X>i+Xi5&R!>(mqEo+<VS~y=HR-%;yT&>5#bz8GiDa
zS%dpy0><;(fm9%0Bn^R>2hP(ndJAxlx9^;|eb?lj!N0u%CT!O}&RhYb<O*Or9-POx
zeVf}P&c)=>Kf{8McfMfaTu*pjenH&+D=!N8Uwvui^6O6DX!3AA&18XOC<NLhC=lBL
z7`H3!04+5<_H-8Xe}R4Zo{U)r{3I$_(=d2o{|Nm1Yzz2HYP;#fRf)1OfuWdy at 8MPS
z9^)j<I=Ue_;7twwv*t3-gwA&}pU`R>@cbe84_<J_K_{Gk;PIy&Fz=N8k6UE$&lRx1
zQy>R^>0Z$ce?j(OiFPgFkLELolFg>~mlD-Bjo1YDj+4g(aQL`=oWH*U+Wi$Uk|<yk
z!0*$W1i2g{;)v=y!oyV(BLCHwZhq}$&Mi<NN^DeqqmD>z2QXSVC=mFk_J<a(uBzmJ
z1%tl%eHHw>?YcQ`T<Tm#-m@>Bf1hm&Dq4!F+KQ?>M5tfiLpLI8gD?RZS`|)j_ at dws
zCezwB7C)|pIkbnJyyVc6&N^h_83!*|EcoXNIBt=-0xSipD#_jB$oXbCRRn&`@Y~jv
zSd!CBCb{e4!pauA at NxJI!rK;1V9b_n<F at XYu$?i1UGxgz`hc8B6u=cQVy2d~!o+@<
z;d#l#xq^H{cwQB^ugJgo^;d4;%-CQAApnzqXa`^xI_&@>x*MTDbOa-W5DFx7;VRP<
z=)Z4+lI`48>Ri6atHMs|Q_L&C1PUv~1d461$}rk;W8j|~t)-Azg-Jtu at cc~F5A*y&
zd!p`L+rxFy`STR~$1J(*sMF3r;*@g_Uv$o4C!KxBiD%j?AfP~88I*&$tw^r=!TZ|1
zqR}pd|8~IdT30;bhx6nVRmrIToWiW!B8ZJKfz2_2c4GpyW%+|mpBmhLTu%d60~`qo
zlrpj38{v7)fM1dS#;dn-HkmR43d9vKW&99kq0<gPL4-BgP$06PRtwiyH8?YmLU2uG
z at qZr%efB%X>Rf at av)_QhGOxyr>_DGcRNY=&(+TP*W<{M`Y~zYgsSS%<WP7yiOSibM
z at TLMkgQ^7l$DDo1+%qqpv-qN;PQT#DQ_nl%lyl??I8m;EgHAA4fT2Jj6Xz^HiNU|@
zTZxsoR!8{B^W+xSP<PJEu_lm}SKK_3TL2T7Wx5&%DgL48<9ixOpJE#PZBk-Cmf`VK
zU)}!eFN at EA;}t>vo3Gu**<|WSlLbNxCmoR+PKY`pB at 5aiSs)6*%*dq>T$`pq|1E2b
zfuERnZ%Os5!T~{Af(fWTt+=McH?XscE}Y(w0Dkf#rkSNb>xxv{(+l|L&pYqR<IcJK
zm?f7Ueb&;sXIwOU at rCXRSRz-zLau<t2OWR9r$83}1J*~bpR&B=@;njY$Mb8FGrzQ6
zbVr%Fp$TN?muM_ZW=8QpVQ3S%qY)jo at FM;yWnv$~W7z)6fbay!H{gHkwcFl${q~tt
zM=Axf?EnR330k<WwmRBj=zyRQoX&#&x8VP+-NQOp0DkNOpYKh8!F{676p3bLN!<{?
zmL&xLg5wkCGc#I;JPalffuD&z(cA_&|2zPH?2^mooqGl6*mEvRyaJ#=C!fs~aIjnf
zHVWSFxJCQST?l``tiY$O?WTx!E#cRhR0 at 9jRtm}+*?)ohR9TP`A#Q=}{L-9)vdZFI
zXcb=^=Z_YYq!6J2SAb*t*6k<6xe0{l%>emtzkd7MZ`^U<UbAKh1sbO90J((~P$0J;
z$!OtB78FegQ80zzGzI$an7|&pr7rSj=9ZwzG|K!;y#>~XZW}JNmf&Y-Pbh5DRHq03
zoHH(h;o#)wEWYsQGneA|k308re+BTj(G_5$V7UUqD3}q?k_DQ5f=%@(;di4rJ>i#*
z#h9Mwa^hcBAek*-vIqeD6Oh8mv-3*S1Qh>Nfu$BOaR;)aZDVI8B=&8b`;v`wE#Wa#
zUkMLB-yr|?ciy<;oj30||LnO+fwT~uS6s#MqjAGRFdl{wfS=*N1AspMUBXm9l`kvr
zL7XPTx<!_pU;-Zej4QNLYUdxoNUMbl4)R5=aAK90G|Q|u<N3ibNG7VqvBU5&0iX`;
z$Mb`Ky#lf`24ENb6*eMKuv`JjQSgb}0%Sp>R8K70m3CdvdE9UkQSTR5w`b*-$_kil
zVL>TPAh)nQuc#7;c1_w5{=*euOIj|yX$a3s&22_hU)}!eLU`VOL)<>dfA`Hh-+k-O
z_uje-3Z#W#C{S)u1y_I>jjLKX=?EtJfCAxU)?2?{|MkCJT~XA>!TDAH`X<{c@*V^a
z%*>~CSA?BL;Q;cz36PqmOV=-_(Dl;_etJ?6Eu6UE;I#q&K1WLdmonCY^G}7$!0O at l
zz#EXyKK%lG{yuXTFuH+Sm?n1k!y`{43O at I6mk9MyFcioa!lK%4Qh94kcfIM=z0~#U
z%48Damz;v~th^FsK at kz+7Jvo0TL65j3Gk6CK$Q%ucl%29J at Vf%$QSUxeb at VM-!*f?
zQA&X}oH!Js#o at XM*Thpvp(A*`_4{)u1lLrgvp`?11^84ycq93L$U!>^_z&DMGp`J{
zFD4*M5_7z;)2W(e_d2Ogh&|H?TWd>Y6<x4+I!txy+!9m@)N1k7cx-S>8lOlO6M)sj
z?SVHSC+9<AhokssAbDqFMRWz&L})Au#-N};u3g;>-go7#DI;3YWKQU545qQ!u{=~X
za*Han^UDGj#73|v9pp@)91|ezBgl`reOuCs+`h^1;PW>e-8yMllM)_augDkhzjHTd
z(`lo~f_g0+1_<fWxo`yCmIAfZ$e8qg1E4^)=`8413;%Cv8~fI?He_Jb0qXe=+z~6F
zC(Ddw$nr&AN%#bkelw!{0O&m?K&Ti4KRa1YJ5p)S-bbIf^TBg=Idtx>haH1ZlUmhY
zvyTU{Xn42?sOKsdg4-A_bS`LD{Bz at w*a81UxM3pHM#1w><=<K@#N36kRL at -(v&MR4
zdkxATOaO5*0)A;!mk|xNX{)fJC8wYwr?3Ll=^{MCf?_6+kz4YjFX{TKmS_8>q$Rmc
zLwL}CZZ@%N^U2*vfY8Eu!eiXNApZl-yZ3B1ZM3IAXyFJtB=pEBWG)<qHXVwB?UMy%
zM?j;=f>xEMDbQDC10rmW&v3x=1O7t~*_n at aIZH1^UR5>2(pBE$M>L<N3yDrYYTJDe
z-EP0bcG&-j9S=Nmr-Nqie8}8g4?P;88gd<Uo2YjT7dmPGd5a7eS_~JW)O+}%C7_+l
z2-qKemec~GD0oqn2$d)}(n2hZwX5H~w7f8z>?o73*geV>psg!t6;!~FjFbEi&L8}v
zTPw at YR2D=hjs^lM;1st1+)bAASQ$?Ww-4b#)dS`?8r#0b<RLRBbn+dyoYJF&$0Ps4
zcklV|y?ZyGK6>VcBP|7*(8ISgCm#w##+5>Fb#1K{f*BB}S<vb<1^TMs|1DMZCp9z5
z=qkUNNb6j66@|ydi at c${XHm41NVaj!+T(z&_B?Q#y${}YpF_6W_pt5vKYWJ+FoC1Y
zMQ}8|DqIA at g=U|CjMH+V=ps0af|qb1$qQXXYE%+IS_=!JVBEDY1aOu3R1eWEsh*nB
zeDF`DRZJi+Lq`z?y}H-rmo>mWFaboHrFj|3f)EQOW;m^eO$2PVsug$pZ<#o^Fh>jx
zJE9AQD*!{l9OB5o=cD)T{pkIB57}><O*b4>S(rs3m at JTK|Ih0`U=Rr(ZHK7=|7Iu(
z?J#7UH49o%TJV)Ypih6{gq9XNsQl2KJ^0y7Bz^0R<*cO$i at YKDVLstPu7=i*s_N=l
zyYIi%o(F8b*Fj<h`yRTzy$FsXzJo8}-gnoF04`)N0uvM;e;VPf1jQyVbfo5m&WNsn
z{IW)%qJcRnSx<rJSPxS at h1rAABojybIh+ZtD|sb#U_L9aluv^KX_u~d`!>%Ls5cXn
zJk+yHNlW8gB%pj9?5Lt3tGXy#u7J_4AG|As=fn3b@;`q6zK=h+Z}G{8ZZ-}4XKNuC
z<m2bb_E1%U0>ONOENC@<rG?-$1^Ozil<r;nxm4J!2_L(n!VWND74II}Z%$HZHAP<8
zy&kNeE-kMpDJ!q6uEq+gYHIvNKzzYhGqtewx$B3tR7Dp-Qc#TALAa0$in#)GOqMA?
zWXK9FqsqV*R1O+~pLTT_)Zj*OI?i*I8_^)Wy67L^JYLBbX*dn%aiMNh()GE0Th(&u
zO^tKQ3bMFv=z=ND%fz>n7Zv0i!h_HM$RHo^fAYcoP at v7GkH%8?WVCR;p2#mESs>F9
zTw7nS9l`zj4-zeCb;<hQ{{OxT0QB*%iMBHWKeXR(=5qa9FdvorWDMwcT(p5*wlVf5
z>1S3a_%AIlHzrV}CQw~d1FhvE$jux`yv#_?_Il~|LKj3(Y$E~_6l-?W2gMW!4w!!m
zg2~K5{rrF+5+lTh9{-d|iGqESUsF92?Yarf#`Bv|gl;C4$~bj0iAowwm#(YodOgES
zD}71V%XmV!?-Tnad6~tz8T>{X<XYq#!lP~<<bU$v{hxmLz^5NQKnMT@!qsab807OS
zaC{-SuHI-tTVzMDYC$OkSC$p_akzfzzyALFZWkqdJosHpi_(7JYFb*NI#&YtrOtJV
z-ONJ5hoMzv6_s)Ys0mb6$wg38ttJ4u#h{q=*U?xWiwF)s)<y(e1V=C2?^wx>>Szcu
zOV|q?A_o6V3e5=cFG>tZK7E&7*r2H%2)|GDXwzaipTxL*9Zn*Rx>D5*^E at WhWuHsL
zd0di5**=`dr#IhoiG5-FsR)ll{{0~TJDiUn++w3KWI at UHK!FGW%&*B1j2vGGu4`!E
z=v+kFVW@)DR+gmk|E1$!r&nph=jb_m`h}!E)gNR#CDnhze7lFYw>lT=r(3&*mRD8<
zCQt_cE30D{K}}s<ZC#y94IQ=9!LxTEH56q>35pjOm0b=&u0)7trf9PN=X1Ch0Mfkk
zuhwa_5%_~tk2WoaeOrNy(++3w(tSeL%_enkJg$QP)=QV;Vuqle`}SR$*iUl%LiL64
zh|iCZ|J{!t{O%_Yfq$}~w2aL#9l;cW<=4#2bvsg<>l+(6XhCs4bOaMC(GHUi0lr-P
zEBFZkYRU at gD+^m|OV%RWdEmkm*udUvoeOzS+mK=9Rn?IRltF~bic8BXlP&_Wg8F*y
zdUFxXCN-qlQC}vb=w|VcP_w`Ke-Y!U|0g!oP#P0(;1^+o-8%8GOlI?wsS^6Oh<0Oy
zUkY0{u>z9Kr@)>z_RS`BO&`++>{Yt#InU>J`$Bkd`v&<Be(#fqzW3=vTW&m7DUdG&
zBY4ipA_dy2h2Vy!COOT`z8wZFC|S^S7U)Yf0YAM8_o5C~`nisXR#C4u+j%IohgGDy
zgfx`*RMym1RM(_3fl_M%CMdRa$Xo<s1q}`L4ULi=jb8+2G+aJc0EQ6v|B^PrJsJ~O
z-*Em2{9&F`J9guJTZZ#UuWm&6ku=apMzWN!lr-jy at g19t@5Fm!0&pHxZ+f<mj3<TL
zfB)V%)eqeMC*t-E_#giMrw<=-;C7oE3Y0ylzb^!Xf2=?Y!L-9PHp>wTL<msNP#|fC
zNmHON5&u5nqY<tJ|B-vlp~yRDFTfv5_yql2i(Ix7_(8mx!|Zl)$=s@{+B$Cn#I2SH
zm6aFEEl^s)El{OgD2fQ&MIfY?d*5FKQYM>yJSzPV|2Y5k2_TT64j5d~GN!s?Qcc$e
ze)oh=^*GOOM{z><U8*NF;U{C$P*I5XOiN}=X{aj79 at o>DLc?ZcJj(V>oEuATVlu*c
z9MxCCqi!GMfB!oV|KK~1y!h;Lr9fdJ82)1^km(3+Y-wp~X<<Pg-bp&*T_L!<B>zjq
zK%f0ml(&TTAG}j`#y~&A#EomV;13f%VM~jq`U`V2$Y97G(u at H*sQH|;=AOIcnCjYk
zZvsT7q}C%7C{+`vj9mn^wFJd#0`?*>>=y#yBLa_qrsIkzlH^bSK}@2kY8zM6Ik~oL
z15bNwlHYEfh`|5sQ}Jlm&7`t at E2g$pSDsI$j5MYWGvRkp at Egu!)thVK_EQiZkNh8e
z_mLmUc~mJ-q=lOxbKwYqX@{YXMi#WGrM0<Lj^7SrC{R(F0(~hq>qQPW<_%V{dwH7|
zHYX%}G}TX63*3X0zMoRg(6;UoV`}Oeya|AR5}p`Hq6t)1%0-YE6pIy58Y9)C7lEO{
zLIb!6P$nq<@yVZx=Fze&)!^TkcOQQwmgKj2PKMCR99lfTk9NJ7O$xgv$$1MsFQxgJ
zMY$QNIgfYyM#hs+)k+!XLiN9Ae7?GU1O7*U_`OGe^gYG at 7_y++5v=Vnq(Eth;R2!%
z+}zsM+}768*5<dvh!(W6m|W180)RgLMNFMH5IF=2A3wmS*MyJBc0zt+E!P>d!$HkM
zMvbkhZ}cXBf$(W$J4?&TLlY<}DXkC_h+PDp%!7Y&o at xU1jS>lB0+0dlZ~VVa{zHDM
z+9p7LsFXR{BT4>*JSW3BX<&?j-$c9K^ONLEs%-_jeJ9|2|81jT3#wXiwr|}2#~SA<
z)qg0_?HlC(==+cT`1_B|nla8$piv1O!OTUJ(YV7}TiV)N+U2yicj#P1w4ejlUyl%=
zEKPy_W9!vAZzyu`&AfgaHS#u8{V at FA5<X-*J@{b@=bv+IU1M`?Lz6cFkPLmLc1Ac%
z0w}=*$}s`G2y8 at 9Luq)>fc5z&;9qZn=pvAKuqDJlp5K?rT&l-||2lSfG4_xg4#^z!
zpONQR4YSTC(fJJ8rLIjYPSVgT=ZT9M65akMHp8<T<OBX6|KRbh!2iZ$DFlla&J0DN
zBFus?R1n~wUmpt8+R-7Wy~9zUGMqo at ukw<#7U(}RfMk(Fa?Hy-H{Jz?n{_polkGS1
zHc9w|s{VvFcBYiqH?<^~fJ&n)sw5+n$^<GBE&?@~R1tx_2;e_WLX3qQsBjMLsIPGO
zBtMZXG at hO88;xm0kQ__(ytsmB*NfSb3cIoNJ{>Dbp{_~n2ld?Vtj_IQ!lP~<<o|^8
z!^gMUWPCyv6yXpdfG!AwF)|d0D*y__Z_4khLxBhZsP_>9losXvM+oTK|2Sc2t!e2>
zO!zQ7jqsMEr7kCLi&Xt~6>reSe&KoZ8k$=}6R6f$pr)>}y4ITj)JFwE6a^qc<rS6D
zMUWT~NSRE7;<^SY2`LxiBCz2h4B0RQr9B?}q<X+V1t!&`A;<~!Y^lMYoa7Y3zgo`Y
zlRQao|2MyQj(cb7s1~Sx0`h<Q!zVbi57}|njImk>_8q}uu#AQt)u~xfU=Qmf5d{4s
z3ySksEhrQyodx<&EO>2VUR3>zv<3g#)#BxCXPkcInTw(QvV@&%C$z^5EtDA!W2bK1
z*wWUE3Dj0r*HlPdtXf!51p*<_$f*ew7MGM)Bwhpv=a3Bfi=eLFW=DNc3^v?F(4H`s
zlkzT^9B%^T^PPs at N4qkR&9|-ud7eA8OE;G1>7DZg=}k%O|LJ!xZ#uDS>kWr;cmewo
zw)6eR#OI6K7v%r+M^F6hM^D~=*TpUbh}vOfF5<Xu69Tjo0s#AlCQcJU5Tmi6g_;F5
z6eyhq{el({3Hv{P%u7p`0l%gF;go(h6OEcQwW+ne7Za$fs_`aZ0)YwyLWw4 at HWz`>
z23Rg+lH`&kl=7}wv*?oi;9mr342TOnzX!h=&J#&`B-&jQ;SV^Ecl#g5*uD{eW+0!~
zd{Xyz(}!=l!4P@@e)sDamGF4v|Ln(4{#?#eTWvBfAq#5eBAV?OW<egX=a=Q;BM8F$
z?P&C>5`=$HpprBN`a%|97P3p7x6Ul8rpGF*^SVV9F_8l^Og!xmV_w<J<@U2Mw{6Vi
zY0d2&O>HSnK#BqhCV+0oXyim40TI$$puAEq0x6Su1@&q#0;v;`=ZsRFPv7vsy_fhw
zC6SVuJZG5d2?YFr-?l6IBxiD-Cqc=R#CaH*sI_D07U17z!(oUhHX76JkS}iEfd8qV
z|KzF9e)81Tn~a|&LWn2}nx83i5ure2LCucf7PudWv at pkOK`DQHd%g8bi_;;%7cl_8
zs0GafnHjQ<VVyVZYVk2Ifh{v{Rpb!Hyd-?WLFKKT-7OuRy_-OT*2NqVs)C<TY!Vh^
zO2cXbWfkRcq39xTsUh?dWdEd0Rws~1$c~2Kw|dS58Go<fPl$FS!msUGHp%J1kATf+
z*vRe2lRS?$R~1q0qk5&a<Jywknvxu at 03|%u?HlBO_S2_- at zbZbo;e;0M3osWTyhpv
zwV?dI*uI>a8VI3|MyDel{HL>^Uj+T%`j&5I2l>!@#BbpYpM*MZb^C;>*0Gf>qbr(5
zs>s0)@EO%v$Ho at FmW~w_ZCyi*33T;h0u9x5wlu6Jz;&-bLtp|W+yZ6g#sq9cP=%eU
z&W$<(uTw?@j`lch!y3V#GTL=5>QQaWbgabm3`uTZs#+$o&va8MpSdous-hgyI8*>V
z;lbyB_LHX-{J;3wGuzCZ00koLX|teHWHdB6H$nij9Yz-9fq6M1pp|1Nkjw>TG*CJV
z`UUXsCzg}mG at f6FHb>fK-_^ow at Vf3PwVjj21lq=hF)vEdF0+A}?LyFgUBbTO0Y`%W
zm<c4t0*y8GF%wW#KVhAZg^No{i%KwoVoV^s2nfbOKB-YIEItYyieCgq&m0GT(6=kJ
zCzwMU)3ceGRLRk9thVI|zt^ydjOSr1W^h%lciy-i%u_xt%AvO_BXIkc at Ob3^@@LO*
zw%HW?k4Hd)3XVc>G#AljLD7N=?5nD%mCLD=M45KPuh*}CS_tt4 at ZX!f)6jm=HdnNa
z#^Hncn$Ah!zi!CX+OEkp9TR<>mzWp59Il(e$TF_^!sC}-biySUFBm&zI?lhXizBxH
zevb~^q;NQ90?0%)#hOqTD=HQfpo7d<L50#GQx{vWw}`;^aOuPb#LR9)m5ghMgI@;{
z8rl<r|J}QNyCUG9HKm6Z019V;dRe5)37jWLZ%UGf=10f&mFhpKRNo^1r%x;LfBExg
ze)aQbk3MW?C=ibk5-3A~%v?B~izqvSO%{}#CzzL0QBlSzFGma7Z at q7?-*2E4g3}?u
z=d=M)xTTVJLi?F#TUtL9p3h)^2oFBLx?>{JGA;r>`Z_N$FW0*A78%rk(eb*CcgzOU
zT06QxzF0wLHzF3L_X#F|#4Ef7Fai8|*esy2ur-0QGBE+ALkV#)*-=f9*404<Vw`{V
z;E%O#$v`$!-m<;A)XPX(lDhQKEA3hk{saN1XxN<F*Lto`Z~n}rH#Nf(1HbY4ihRKT
z>(8FOW%-%gm=J(x6%GZG(a>YNDPGVH!xgDd0B=xQR;Gt11_i<d(p7-Z1%D^+)V0+6
zB*;6-Dw{6U?6QWT>~=w2St%F6_<|g1Gx3Wmit-qmFRHd^Khe?!>||_d?<Dwb!2~+G
z+PiyjYupjAS?Eoe5fYVeR$hV$q$~{+2oz!lrKP3i#tI0EU0kfGAuNSZfh6j_$1c)r
z53_pK;Q7NmXFS!T(Jo_rAmq{lMjC(WP{ufXHz54UoX6(&fB5+7-2Tt3+Xwb?J_G#E
z{rVTrQ6n=HXdF;CLxJ2}M56^|N3f1YSIn1`mGUS!#ib>>9f>-4ngV?;{A)ii+J2{S
zi)epFPBDdbroCA!$dGnaT2AC5XdUZgUP at gVgZfkFjjd(8WZ~tPp4i;h(ToWgD**ZU
zD3DJ<2aAw!*u(-LA0=}}wu~H4X#xqQVKsq*q9QQhF9M=qzIc%!LGVxPaMa?9S3`T;
zxQ2L=KLo!oZ+&oIY>Y{94rxq0fA5^fiW%bIm)s_Y43C`9?JM#>6XgHq7tjCZm(Opz
z=>(evr5z@&1w{x!C`}gBV7|1lurMnt)0`~Z5ua`c`&{V%*0)kB+|V{d`=dGMX4=1A
z1Ou^x%p5#6&i~vcETq;IMQmxYG4G`pFSu-}fS(sQc`*U8f)1>pp`{Iugdwzcc8LkJ
zi3uq3&A7iJ=Kih51fW>HC{R#TTu at kq74U+%0HXl^{H@~u(TA^Ed+-NIemjlOrFv|6
ziv$kB4{m|7yv&NiteWB+5B`*#Cyx9$+Yga%2#<67g8bjgd12elCTbQ`+hG#2ptO9F
z1@*Ac;=k;y?CdPff@(WhngXq*5ukZU?&|W{ewKX6bR9G2Ja!QbmWzOi<?&LNjd?Ex
z{Fj_~#ib{Wn6Lrxmea<uR={;Y(gyIGBXt3A%cM>AZ87ncV at 6*V`J||JO`?(G7N9hS
z`Gh9G6=3jRLV}1&!JW5X7~}kQGHp!Nmf-m#@W=C<VTQk=Fq^_Lkqc=Y=E6}v7U{k=
ztptQWRY^Bhk|&Aq;Pwsjpa1QzUijUwUf6E4iJAqa5FBbjbvq2~kr2ScKHL45larHf
z2U|<n`%lC9o5q%XQfB*Uvy}!Dru}0AgR^wnKU~NRVaQT#b6D!qm{(V^UwPR{BgRig
z_R!eMNnr&(G!Xm`?B^%G>fB2hQOpDo2vthXU$djMOln<B(?Qo?yI4mzSn!($-k`!8
zWqUmMbsF>9fS*(ksv%5Z#qzT?)#C`iYB)v7;{}{}{wUN9s#?ELwr?^#CeD2hx9<s$
zfZre=@c;hTFCKfuu9^i+(1J=k%s3;27}eoWpPikP4f6FrHy1SB4(0*Ah8GF6A7Qia
z>S7b3X)w%_9&>8~X5oe5LL`D<K9qpNQrD#>=7sqH{;MuO8O>WmOKYPXwE`r&))15t
zX=pI8zu=#b5Fx&!gag=JW-doez{*5rb_Ab;36LE%Jg1Z_Yf#~p(G7lLPjBF7i~|Ww
z2)s_Cwd40A&o84m1JAGBD|D%As>e3!YR6WP<P^fcwwx!3b3Ne!_HusxBH$PNAGzzc
zn?@8UDGRDXh<1nioSa;a{MS at hK|2_$G149JYrwtxYw2e<D;gWBigaCtpJb9#Sj7$$
z*Jf at n0?&n%_Djs0MEhCJd*$UPUwy@*`sS7fIjznR+SCwYR?yaAMjR;Y1 at i<KkSn4L
zE**|^O$H`F_>9~xoZb+5{)EvDX1lu2^W*uohnGwa%73Fn>x@^p62Y%ysZxM{O`Jzd
zx*F<gZeNo;q&L0W4+)P){vUqx66dDtPJ;r4ApjlmC?Y5XGaB9R$i`_X>;?LHoIDKy
zxKFFf(?j7L#C!k$ewf2S2W(G63VxMN7C*Gy%@`>#R*+BX5+Rnm2(ki&o2C5{^FsR#
z_^-NR(KT0|Qs2~!?4PrGD<G5>*ppd`V4u~0z+h5&jC8PFlQnfa95^TJXK|i?89ltu
z+aBIvZb=;cI<AK_4kn<<Ov2bLCU;AcpW_B{hMwPnUz!$si*^$TzohqLoJZ=pHn-oq
z+gG3e``^5%;Q!-qU*<>%Acf#a3yOk>xrl at S?8w$ED4~$TK2QJ4&+}SPhGM0K5WNH6
z{*4YWWPo!~Zl;#5yv~8f7UPQZ2ASj}iG7em`i0cZ8fpJkSDbwHm5X{tkEiF0W30d!
zg1-(tDQam;fIU%$z+RBgFbA3Eu)_hfT^q0Tut%Q%iEwm at YhaH8UZd)a$s2Aj&Ceov
z=x+g9s{nsk-u*-;vl(GSvYySSdJN$=>V1>phw!rtk6mD$6So)7A7nU_-M-~Kal#WK
zpJstS{qB|RH=m?gP!j at 37L=qh4qrRswH=JB5Lcg<pO=@P&yoKMWF}sEDApR0ub<#s
zdQDDp0L;e^FwD#=6<433gd`8xhm9>l`@?L1oc6<fuDR-zp3&p#8k^inWd$ZWFgaC;
ztR3u48+-qOI~_dNOz%k;*Lls8k1 at R@rfN>?;q{*XWp+%PW)|1IOB&OgfDB+M$XZ+Q
zN2#7D+Wptx-WtBqzC)+))wAL5L#FK7HF>AbNjpTGM?>8;yL}-%fB5Z7;`Rmk0{%b$
z-rzq*fkX&F`fK_mc4VW4mUbA6d4YX_o`Qk`@&oCiSZjlSmh<}kyguRScNO7>4gHo4
zU!ln7ymQd at OIKG&``Jb`Zb&`L(3SSXe6GFv)Y^tdcOomO6Gmk20(g-L4P<VQarnmD
zi^C6w7TTR$u8m#6f30IaI=bWr-7Ca8IWxLph0ZOBMmIR{Bjy(oW`1T_epWK=S)J$i
z;5SWM<F=YTW{V?6Z+6JYnFkJ^vEQ(b_8vNI&mmKH>)v1&u7DJUEmzfwl03hDk##VH
z;j9A#{7QHf`G5Mofd9|Ge|3i~Cfh8icEp?QNK}Lg0W=GW7Sv-N*cTKQ>hVLdxEj_5
z27UH(QYJjz47bB^$bL~*DDnwtKO!GdxFLIk7cmiHbZ4#7{%fx~^}4H1qm0F=trsic
z6L|03U4S`6*MZ|X16joz%xaDeEp$WMuF-Lws%jq9Sv#IJUL#uo5+?-zYvJeyB+Uu(
zh9u748~A;mlT^=`Ee;<yYxel9=W at o*I&#eBhmG3w;1Qb~FnnXZ0`@Rhz|My7i=H7V
z)O}&qzuu$&amN`WIa^H~y6J?jRsVc1!R-t9|M2Qx{_yI&*}HGI`J{v_DDjts06`X1
zF;5j({wpft_z)nyAa(Vojq^`A$tP&(Jt{%lA0|APUT76=U>o{`6)eC0OlUvM=eny;
zU3SfB#I0%qe8lk*zVXrA2(jzH>?dLyuPi4ro?li}#OJm#y$8=913!amDMFzp6_;-E
zIj=<18(bTsczzkt8TBx#sx2Pyt_J*n`}6C=rtb~H!8vFL^J8Zn1^&lvHD~OWTmgrU
zoO#fQ8T$|0XdizCIKpq0Jf7|A4 at nCoCb07+qqd(uoGXB7q6uyv<jeWvYx8ICP6$AR
zB0`86V|6a5ABtrtkYqs>^L&*5ii<hE9gGF36=ms(D7_kijB%U4zhgep=w?5(-?#MY
z0K+KZd4cF0XlxOk!zBx;in2}!Eu7MRn9p_BoYpmBG^u+%;2*LrGvCYtQzb=iE#pP^
z+!?H*zVA|2 at y5X)k9nVDT;VdE(u|y*Z;kb-alI0bE^$M90KZ)`ZKv at kW_wbCpOw}y
zdH8(ylwINWF#MPaY<cAPt>=uJbrd(ks7((Uxygay6%feSoSwmix)hEv0o{VM?X+Q-
z0EU2?PT4+$$0Gj^ul at Cpa(@1!C$`^WQi2e|%>^X{uvt(KdyrpTTvA*jClo^T`u6wj
zzwk2*ePfsJYD{kFW!Wy%ej?`MwEZMJStm+rC_j6UfFIfq^SS1<W!IkGIeb)gEj at bH
z1PI)qqvR`YyZOA^Z#n-CR<YlH!QFRUn6RA7jcax>?;}?|?h`(bU-!%t%Yw};%ZXlT
zCsFIezM{E3y at LNPm+HJHR^*Cjd)OnElV8gEX_7g{1a|3}y8F;+dlBm5>T&p^H$QYN
zCa~3<oWcDu>Mb_tnLf7NUjgy-zNu=Nk}f|jjSozmQ29`OX>LPV9^C|<@PL0sJ|F+@
zPp at +{1R(9NSy0vu`=MAi1Q^pPus4|3k0m9d1 at -M<>D2(eS-EFEQNq*h>S9ZypIc5l
zm=?uGcGUE$bGZB at lkha)zxuRg*PMR+b&F|fm&SH;Foc^|EV*^%Ik(+>?(MgnrwgfN
zE$N*X-E-H)@%==yoCvx;p{F4p^QK7nh)2zrVGgZzWfJphKZ}{(;KuSt%`B0g->5pH
zJbxVg<oOFKnh+zY3FH>al529CgtsspK;BSUsNYm-PvAdO at W0X6j^P{c2UF_Va1WI<
zgrTmc_p5b?C<?lKSp+7jdlM6R!lU3<<ns~gwd0nPp+MXkIut9fxGHQ1gHMtL9n#T&
z7F;FJ=A-li2>$EJ`>*%ybO_KJ{!`C$aO;XZ^U<OJAIbT|5}t<nc%6gNewYum|N3iB
zzhT*8MxA2<E0&+N^2W1ozG=xVE6-ttXbk*!DD&~O|1xO5gtR>kEXieObjp}F?B~Ms
z$7Xe!RKJ(^M6~CvpqV8B{2%%a6t;(pfVZ%+h5e5SCXiQD3H*RJAaAHBKnth%7b(S*
zo{h$JOdio9xzK5QrKswf!d6RlF<p>YEB_V?qP@}Je_-VH|76`h$p71)-{2_zu`)iB
zj`;kNnu5|A-wsAMy$;1HDYgACrXv91cex1xD!6dds{vBtU!DKjFdw)L#Gcp|=kF7q
z<a|`#>~#*B at PzpY_^(^M{Q5I)yy487Jos0fbL+};Z at cBZ+iyKT1?|80k_XIM#<Id}
zO%qX{MWqufbqVb!+vyZOw6WVdSMS-*H)V85w2(q7yfTnK^8Bg5kFckxs*UBRY697Y
z2;~&WEubclUs4SSJ^u0h;D6(Bo$w;bg-+l5pa1u^D%sTS`@&Xzc|m1SHX^#(k{lGI
zn&ctQO>+B!{J;N2&Q7y7*kOxFTrsdL at LyO~S6Ei>LI4p$P{`AvSTaUf+d}1Ig`bPd
zcCfS%BH09VU6*G*>}o;wM%WuNAGH0#?K1|FW??z0irjoxqsp7f_J;{iXg|zn`LZ)^
zy#CCaZa8bjjc2dK^DFq3_JjZ1FSx50+RvI5CG))9wEo2tJ~rl6d7JO&Vq&3=D7Qn~
zf>eJ@*lC9Lm`*Ogd&{nzll3d6d)KEri)%Wv3(C|4GIEN<1dJ8Hh4P9jxCO)nN^0=`
z08*1e8VGAHbnI4hQL-g~pTgD$Z{Ou}`^tGN+fQ=)2K;aS{jYBt{7)vj$02A4P*l-a
zRNmls#Pc(#5Q6r9(*;Z;u=E0Rd=@kv0wm+#<a}h36>PSpwuBwlNjV>xVVIviI7QAU
zq0}2BJeB#}c>NhS-EgL5J}ZRzB+`DE&s`TMW&5vSP85`$NLDYMUh2G}@JXTV)R;GA
zw$n7QYa63qJQrzueCxUtxnu%=X>C_dVFml&*#a-i-*XDH^Gm!5<f;i2R~t4`iwOY8
z;)=%6n;+(Kq5BH>Rm@|my0HwWrZ-)ZCt&;D?Z5f=zr6X6zsfmz-o8qKFaffl2q6ke
zYq@=h0(3__yhw!*OoZ_MpSys=?laoK5JI5oN(Mk5{}a!AcsMeLc~HOPoR9RjNU2vQ
zS$XE;8 at pgW$eV4>$0R&M<`dC=od3<je4z9bdK#hkQMUi?#B9GbSmnxu5b`7j{0Vj5
z-W5K*C45YsD^fU^p*?o%qRy)F!ZrtfX400`56La6$|+c_2^3Z4%S8Yow<aK-xuUVK
zyq;XBf<LV4YDqU`sO#Cjx_w3dKmPjGKmYHoPu{<G$1OJyA&?V7 at J+dZU}CZ$b<$Ay
zj|w4Z2Q%b93IyDCFj<Y!$I+hf>w9 at WQU|!bMz{&g2k<9~-0VCD+t{@_=CfRwkHox&
z`QXw?pN{FOW9q&E|3$Hd>_N7lHH)d_omS*vJK0mo+lYA+6F$<$8&CBof?xFfR at E7R
zA7NX0!_d6q>fEAAXurD!iZZebv-3(c9MGf?AT%aGIABeH{y4NugEF!cBn=_>lQ>VZ
z+kfjH|0m$*{OfOTD+TgG2*MD4Dsr<NFNE-OaS4QdBB-sYnkoR=LMB3_Lx9i(yu804
zCxdtshOf at w=X}EH&9R)%nwbx at -!Pw>&h`mUB{O&`hz$wP82Ila=OYPEyO7$fDC(8=
zuVu_ at M)$<Bou;3~E}JIXDV|@z&pZ>RnnXQ}ZXk0-(}?_%S}}pbUQNJ9#8?EGB6 at b%
zPvP+&NgAA(CnWrq^SC5WvfDS{e;e>e_}|=Wq4{=@F)T4FuUNIv<3 at J)i4Ye2C8b&d
zBmaYlg$2RsENF;-C+|OmG3Mdkir4_#FOT^^W=sSv7mX?Ph6&G<BA=A<PD}fP=~bb~
z!OU=2W5Va72S`^UIiTvajhRC}ZA_b$G&}IKfugc`R6$vN+yqLqa!bIuxdo&>Ig5z6
zumYOInlp$0!4dwAhSNs7PR|hLc`WBKNgmJkL$|Ns|M%bD*?Fre8Um;mnigs9mjQ#s
z)-(i=xwvDZxwv61j4UXfs{IEJW<hWWfWG`XR5+{7XU)vV>3mY;d`zjA^pVZ^#F>wj
zdT%|S*p03eN$g|}w9elpJmWftlp-HS7YgksneP&wK_`1W=1rOKiL#v^Jy2bmr=2ew
zkCWyvCRtIsl5tfA{L;W{#QYUa!wbtA)C7<#<P=tB7nB2dH38f&L9xd_1POC6{y)OM
zlQg^%Bm7aGC*V9L&Q-P_y8VCs{T;yX at V`MQgb*upM9XNQtq?+2V^9rN6%Zda3(63%
zbO_*0KHS)ql=GSMxtLFPQw4KAS*L{v(<D3-nGe-2C_T=fz_wTB^N?<1PZs$|w!dxM
z)~#c<Y#FtA0RF@}Z=%A-#k}!^k7PSpW6EU&4U=Z}f-H0eTTdHC!pC;6yG|DPe?e(o
z0VYsdS67-_U7TZ0z!U`_-td2i|7wH(;*kH)wwX-$*M{?`&*!5epO35l@$SN7_DTo=
zv|R#eIv0Tt0YnR(HIUU9BYT<!|K`7T69TNaet#1J6nPBv<rl%yqQg%=C0bgPtZ)uz
zc&4m&v6GIv7{s1jJ=Lz{oKK{4&{FT+YsGx%WHeg(ol&5nLu(fkm=$W95%$NsTAav1
zVqUNCF`c~en76sQh`N=uKxPe;Y2*c&GbeWY(G9kH{l`y||AGAEiwV at DRX~2gCrd_@
zTOhAg@}H&_%%2b=@P}LnN%*&7wl#4c8|P9ov*7=`1^=pl2>1p6$L?+M??M1zuN`xI
z47Jd-eUSxaJD695>UKPOD|A6{UxvN^-BT?snw_w*%a3&M3g^o&S$G8_9Za?BY9n%E
z+N}h(M)@qxKNa&q<R&5?0ly1- at 4e(fQ|e7-KEtN(BQi6iw3Lpjsk>`Ci7|m~oX)|G
zF|o|Y(te7?)Ol0Jyg|0}!KSJr%CBe-L at x@e^D=+^i|2K2i67lS18-?<H^9y-smU*`
zrNE?fm?a}BCcr8SGXGNlBJC65Kf7SSK=_Xx6qy|DD&e<<Et}qV;5Tt at g4<W{ulnb^
zZ at +eHLI@y(BHhstz-ys(HO7b`P1+66TrWZhZLdHJ?J>}2U!1(~kVPjQddkVsy2fx(
zuUT4j?AqvjkoQ*<<-lsRT)Vnz*Bv5qOOf+=@Ct3|h1=lX;W^-(<|#0b-WU~uYRS5%
z?1BQbW8(Hk+Z-^T*KVWROQvy7>gJHiv11$pkwYYGW(lK7_`rV<VIo4n1Ry`maQpEO
zq=z>IKi%skHJzYcOrW?1*(x<A?l at kn323$x9RigvUXuut8d-LMgqa<aoQyf9YEUsx
z$~;d3=kabI<kK1>=U?v`{6`^xnH8Crk;TcU3J`_>Wb=dq4QVz_G13!82tYp_dy!a;
z(Pv at re{r0D^14R9w<Vn9hT55}4J7Tukq%+CizV+$?7uMcfin;}HV&WBJaW^P(P9Nq
z9cu-mx)-GxA4PpMuwNwaeC1ZM{f|6wxzPCB3>GPFGQN{w)~_Osi5#4^lWZsZ*3nl`
zTqEJ*=k}QC4R-OIAKg$~-EML_l>i=6P1~BxtS+rn69Ds6V5xj at 5m1U^eX8%+U0d+m
z^uFahA=~$E--CbEzuw<v>nULfptB;exXkQ==@W;BApj3*%<$GxJ<Y?r8nrc&5C9<r
zlQakcJPi8m3w8b)_MTxk)|qvUZda)?pTgV>h&>JOxIRD0O-DLtW8<22J|gdj`2_O*
zq?`}<$Cb&<Pc!zAoHka_Hg;C~_-%TcE4f+VCww#&x_${FA2yVMf7~)m27XR38yn-G
zGaM4+ZHz1Y4hjb|pFGHR;{5IUEjOGN{Tr-aOrTIq0Pyp@;6iEwT7D(h^v6Kk5NY^T
z&z36HV+y;D^Ekqv2>!tB<M{#qs(*w3se=D4C;N6tGbpu?yesL at Fa)3-OhbU--AytJ
zB0s;QS at 4hlPlo`jX>SSEHA+`IzFkmfrj(;_j-(D(Nmsj7I2)1Y>X?s__orY!RJ%;h
z2M=aUAfG8iyrDAuGp|^RJ4S5QK7L!|K;WOSj>18t?KcWHWJ at ZO;1j?n7l9ezW4l@?
zbp^EF%iA82QkR)q6;Jrs-E($s$<Llf|4dd#OrW5G%nv3Y6sWic?T}Zstr`3&%3Buv
zYr}a2`3C&pf7h+2#zKIZ<Ncsip4i5dhr87nb|~EFp)G^}LpvLoi_+0jqgrT&!u9bi
zD9%42;ZI|WpWYvCtOHbV8^T-A9uBkey<MVkM&!9x3g^^0pVGP^q*N#;>0~W6fxrro
zTvFl})iL-Vw()*e-f46WBs?1`3Xu?VL1+skSAf?x2ejYTc_WcS2!2ERncJg_7yZy4
zy4MRUno+))N^2QchVNwY;MZ9t5$y>pT<ZB1{8HZXVzxN=O`d1fs_)u$s1rIZ;TNB8
z-9E@)_3sZ>t at _}k<Mv4i0Zjc at O2EttCIsNu_e0@yJ03UVu&zdCV&VT83y%<jEKnaG
z2SM1Y>q?P5wAPlAy(j0Hvawf05t#!C2NK#_w5$F4>!iKKDx8<6RyfC)4_)m^IiG^E
zMkB41imI9bTqte at k=Q0_lF1!4rFnoK6VO&HnhRD#``w^s(RNCyD~x%~zTFV~%xZ%U
z`GMr7nI)RcDPsOL(w-3f@$wd)f7PnrY(BZ0(i{E1dv7_8kG!TSUPIkv at C*Lu?UN7!
zY%+C}xdLQX{EQ7o at Em+QBy*wJjz^#A at b1Q*j(VoU;XsTQTDIf$S>_MtH_l%Y{&0Jh
zeX8>h!(P9%D`mnzp}i$a_^0gcO4Zni&c}2$UPX_gs*6QbAQwTzg%~;)1_k)xL~Z|@
zcaVK*s4VI&+fS)08r_zf_9w)=vXH_LDwMe;W at 1kY@S9mZk>}T@^^o)T3Vs{yQhm_U
z8!hm=%pA4H=3{r<SZ1Nbk^erhcjv>`Us}<72vDHC09gb3`MJ=90KC5=x`hJe=H_-Z
z*R+~;NJ4-<i~mz`{-(E)uow3(NtHqURpgm+q=^lCrLlLBCj6P_6AOFSknlJ2OzvLl
zCRrtnbhuh{l_&~~z&_z3VB8`mAo&d!8tdpz6rM1j*g|SM#$+vNzszm(<2rHjKH(!1
z+ssZ18C_z=wMh at J*+b!HGW#~J&j<dbR1b^rh*s1D>Pm7O%ky{JY|Qo>4c}|l1VeZ%
z=kefQwdzBTh5+=-+o6cE9c(O*h+Gi-hY)}wg;oJ3%7X0n(L-A`1n6$Bi$Z{!z8eB~
zof~sL5qv^#u!4lJSDn9(H0d?$T_(Mas|$O>oR6L7a~VT;9&rhO?dlbEy;T=GD at b(_
zh!x}(S^OtVG7<30=uVhVDDwG^%l4<H{Z`}<#k{?P|9Jtwc5<1S%&0p5L-3RBq51%G
zlPM4dS=B|^=qm`WNwG2u$P<18eu2F^AMLu0guwh0dVYN`fEEJyhzamTd<Y;EXjm(`
zP(pwq?e(3lwP8DC- at F2F{)<mNf~gL)bdgR;8TPu~#>5%UYY2NydrL~G!?+<0RAwno
zG3C$WU%PrmU2hZx at ryvYP-0O0rtfM*;pybfZjy=9ImjM%+sv-n{?AGKbz+-cND+&9
zO(&O=G~3~Xro#IgrMJH(2fWJplRUrC^Ssm5P)-e+<P`;IY{7TIlgM>GALiqc&x?;Z
zyKS=}ApjX^df{y^fSC)eg<vQU78Ha4vLJg at Pm6{CU9Gh$gwXAHeGvZ|_QL#Q)!rq?
ztiHFArp5Xmv+BBQvgAC&us6A}H))=aCQ*4`igTrz-3 at TIB2P&wilP94eFf<zG8jl}
zL||zKFAx-KM4(C0FU)+Bvi)(|Z>BT{v|lH-nLR|2=a-q}A^3OLXvFTDjo~9AYBp$y
zuq~PMrv|_1dD`n}p3fy>W&TeU$~p#u4VGQ-0scMs1^E{L+k*e8d6_bQ-d6#1H4G}C
zlnb&E0%-`)-Bu?dK%-rd-52p6>fFwllOpWBAR6GWf&@M`kC;huwqfXW_WY*qZCq{G
zD at jy4FMWU}{2zbBiabq$wNk4~d;|>e0a!8O<b<GD%K>k#E%S*Ip0=6YB|O(i`(rV$
z2mh}f_=WkrQkIvo$#_{D16|*B)6r at Ip9}mXInf{idrW{S5bz%~B!d6Ufp~yqx9{-(
z at uK<r5&}@^z)ZprfbDn)L1iLJEClFuAwV-B at DLXQkQA!#lOaI7y-OO~>1|91duuu-
z=}Kz=-z1uZ%~W{YG-75|+xTdzLlE|k?5I_Rf1q=V!d}zKZe{;*=YMTcWvgl8qq-zD
zRw=Mbowq;p?Kx)ff;OI`F`@)eF4JpWZ%c}t&zhN!T}~8c`+KMTy<|Io{|dDRP^!GW
zwj`I-B_<%+9?kQwj`oP>*9<?s5@?Vx0lrjCS-xiYlL@~^{;E|UbAIsYLmC3`ufkpc
z-3}Q}MDeR(P(-7JCIrC$n-D<SAscG?ToyESWBZb*v7I^R<Xb9R$FR?<Mi#qIt{XD7
zp=Vm-u#Jr}XAAHAHSA@`Iit>@Gz_YW=2<1_+(3)er(~YP;9!!Q%&?`vBn4JiW7V||
zMrqk!t4_j&OlnBvXGN7}lGUBjqAnG=xvs{<Qg5n+r`I<B{KsYquVX$*2_F;lnhjjZ
z2_F%T8s1J2ihK?eAbaCx_2|R~Epo+#Juyj7LU}7laysW9aUMm!`S{7IRi8)*u+<c<
z$StRj4nu(C?U1N7SddKt(S!g^gnNBC1OWeMoPOkL#yE3<%1SS>0$J$`1tF_e(>bZG
zdrE!JG-$ka{-)Z?L?Cn#nzBeW&&pPN%L=mLKOq0&3yxRk9}cqu+k$XuWi?j7_;i(7
zW(?Gbz@&!61fa*wqc#`kuhVN|y)AB%Ptej!&L=hVq0Sp6JZ-k0+>V)2zB<|;C4Bzy
zD&Z=N0|;GVYlgFBk#!GLonHm`1^Ie*Ga&#%pn|N#5Fi|iNELvB7eXNVbZ{mKApjFm
z`mOi>^{Eg*XZWXHU~$2GX1$svFS_1Tb~{RAky?Q)WS1nosrK5Or|KerC01aafAT!5
zq-w95WM~_ECCH_PP^>@<fiM9A%ty=$MkFR+QbT at pxsGuQ<o#=v^GPA{`N>o83JOm<
z>G=JLU8!k*F9{z=I|B?c0jN9CD>Np1P=D9G`z3;32#<IB4*#Emf2{({+;DUl0@%6e
zCIs+8poyb8$s6<DjTmA>06dJFh*H+4 at b4$tCg(gazF>ZKK?P{H8-9Zgrx=1*fiZ+o
z>I18>vj5D1$vMyX_6nKmpw-^c`Lnu$p=y+Utrg^2D*#I*1LJ!u;-kxbwaX;@dlR`O
z<a|QrL-2^}MlVh32I{`ev|)Bub5g0x$=hBrJ?z at d^%{9gdLbox<zpd}3{kHR3{{;f
zY*R_+7o|O^!M|$Nr at L=EO+x^g2;}CX*O%s{3<0=&sRC$$AgBWLxe#EDIZqUrsBX+*
z!>?KL8 at GZ;>SJ=AJXl(2)e6iE^F)zzZ|z+=%nk5gchxD9-bC}@tibhl#oAj;&c}qk
zLBiinvI>|FQU}x9vNp^I{7ctBo-A-z0`Ka)z0iI$y~H<jsp5z$fK(Oh+T)&IX7z9!
z_)YhsikUwL=T8RzryyU??%RQX2?4 at h0EQy+!z70QBohb$be|MjXoNt0GXzlQ?>k&%
zq?MWH#xPHuKii9(_AJQ?23tm?lWbM$qvJs9D~qDASKAwtr9QE0Z?LiP$z{34HGEU{
zxzIVHlMESYqGLQwW3RNg_=G=AUJ>*6VXy1zRh^Hic0H6-?XtrhLT$f_<*;AN;R~~Y
zamrFxNc+Kmyp7i;e0ul%0r*V=msc{Us&M&$HwEYM;9s at s?>Ak&$W*~hF955-Tstt~
z?dH=*Cxie at 1R?}L_RsMl0HPqO0E7T&q5B90N*-y&(iT6`DzBv0RGPd3GldnTo at 9Hg
zEU<9By;087Y_CX^`T+HCX;-Ql&dDQ9+&rJ8us4)CY&(58oA22FWt at LvZ%fF0RN-j@
z*t`rCp}}Xo$j57&!%~;+=Q8p(9pK<P8D%&v`1e!VQhWZ?;P>S%TiZ3M&Sdca4Ry3R
z-&wWF9;yIT!D77tn~W!D>MaDI?TfBV26Jf at fVh|tfGjB6A^QUUt at A%q3SLP45j>N+
z)EyQo^~o!(H}XpnA#+mR1+n(V<Vm*4y}b`y?xhYc>`lPGjP!Z&*&EFa=M}QFD_mWH
z)FIHh#k<;V*gJ7p)6`L|+V+TYk|L~i{;t~PC;3D<pPxQWUI_fd-pfr3JlZp8JkCE<
zxTU21IDZFz8Ot9fe6+}$OnW5NZ(DbJ_x#@N^8)by(t$i8JkI$?DIh*G3IW_uP^u>y
z0_a`<X$N)-;u(G=Q|Sg~B!&RBeWD8Boc~;Oo{TBu`hynQG3I7_mx(}~<baJQ83TBj
zWSD(hR&RqH;xqi0-e)J->M+9?{^P?8dz<9RRELCNZox>Cq_9^yA7y}v1hdfiUw!tR
zHZ~^6`)#$$bv3^F!V36Lc|kS=9?wr931LPws6R>J=4rp;KOEo?FrSpE{<Q)BZw<Ud
zZ2Q+f3gAU(CcKurBOwGJsNqNmFm)uo08u;em`*|fhGlWW5C9nT5h0MDX9#b%{fvY9
z`>8(YJbe;IQ!x}_Z4z?u0BTZL!RmFMiGv-2Nwz`3i=1aP#+lhZFR1emw^#VRMWS;v
zyGrBLUKjS>tJBM+^U(~H(=k3#!awTj^*W!Z+Qs#!B{>@5UD)g7onGhQc2DbaiUisp
zd44mTS?ALR%qJ at H#>D)#$n^)8)%5UAz_x|AD}(`c-vXd7XbP~$hQKZaAbZ?f2w;X~
zW&04o2!X2lLI}VZ6F=3bv_NJxsOI at 1!d^4akT^6U4?_jktf-SMb#O)gHgT#?iUlqS
z?Tyj8>V%x9+1>*4xglwcvvvM6#&;qUO(pd)ds|$!m&sQo-lei^GO at UEGr(4QyAl%q
zPTrr;+hP=+lJHE;e4^29pO5w at fqxZ%SA>Uz- at on^+kl*@jH_0?7eDW=`nNm(dgp|r
z_Y8-EA`0Dn`WQms<n5?BDa%&@I$LV`NC at DaKja7J54QpT;TZp%qACc#>7fwvPeKx2
zA+R6VPo)UtCvAsU@(zn+k$<nw-|nq@?y2j=`9HgyoKHB+5REiLn01m5Ox{X;;yKT-
zx3QzX4EDm2QfyuZrKr^;{0VzQolh^-u9sBdDLJ2b!c(=)iOk2){uJ5HRli at 2$M&w<
zyhy<IdjOc5mpw{5%ow at D#v`|!GIRzV!T)+^)j##Tz3QKDulk3cw^se*tyO=2YyKSB
z4(xjYOb9TF5CCmPI1xySJDItRLm4xy#q|PI<Nq6K*YOb8JAZPX`|iC>@<=x&`Q~GR
z7=jEsqXO06)S+aiF(f}6<G&iUL&DNhuk#F<kJ(!nEwIp>=ZYK7q at aLd!eBKm->cNe
z<vbY*A^jr-S(pH6eEyX#ZHb(JD0S#n=d;$#$7q|An2*r at RjYm-chQP!=cT>7)))VJ
zSMZ#0{`pQzO)-W{T!yw8x4+#+BX*oIYSz at Dn@s3pHZ?e3_4hYd{Vh2E_r at wce`P!B
zBqIbGztxO!z6!?s7=-|%I~D)bH^UIXuSQyjvp_n}v)2x<r3+ozE6-F38O0+fgD at H9
zKVbdUGyiCwq3LZ;+E}e3f2($2V{b1x&y_W$`7n7C&&mdEqVGuRW42c$w|7+)=kiYo
z0TOebuB$yE?3KpGpFfkJ^9gf4uAe<<Y)N1~M&3!xyK2>E$pCgP8b at uswEt+`b<AlS
zJd5`Zfz4h>d=48VH=jI&jP8z`jM{3$VXOZ7#;U)*{%<{hdHvsidF@|%{`}fM<-98A
zPp=C8H=UrX!3Y6nZa7N5)Z}3sP8{mnfuTT*<c)^_>v$C)bpGLB6F<*0E5D3tFK)s5
z2U7y3&nuL=*}bK at y)K#gCl0f<J1o at slbmGX(Zr#R6nq`?x6Yr{UB2Me$S&PHS>UTy
z at aabnBo(|;OML);Le4W`l3O^^ArN`4q1qMYd`wr at s#QOBSoNUwFWwZ-oZy^8NBuYF
zsJ+Lwep`SYVH<@1<u$evczFLSfHw&Lhn!db at yA#G?#~}y{+m00_~o<g1<>ul8Unzh
zHkvfd3xTMD>AYy#fe}K}3*bY5b$BU8-1#4O!Fe*(Ds1n~%qvydn~XFJr&`HilURFi
z;?n8_=AR^WBhZkZubjcKdWuu4asG_7VvHNNzs9pzLFD`cohJpa_(&f!&&r9MUCz at h
z{7qx8<UH3h?0uQdjCNfAA6{Lx>IVu=b-(Vlz||k?lf85P>+5+`peEB4Gji6Hp^>8w
zJT{Ovs5XB4PvW-?stvFcu>HrE|L(9YApiZ#|M&Zs^!)XAFWU3l7ylyXg}?mfg+Kr1
zg`*GOd24BhR|+H{0QYGa0%!`9UI56gh5+0MRKeEaaX?GXl$?L!0<UO|1;d<AiY at Rm
zYb-v;RIA>dzw&vkfS$hBUb$s8&L6b{Zr>>CWgj$#khs9&y|r=veyT%K&NCe8;OCjR
z-Y#NZ at -slu9z!SOwSVFN%Dr%)74)*qx4I;k=tHQx!9Ubpd3%Dd2G21_8&v<zq1wXx
zcQ3`UZQ%V|fww!)|LNE6{OY+sx`Y4c%symChkvO8P!SG80EBRqz!-{46)Zsrv`+GW
zD!deY9rI7&{8uyEVU5mzWJgUj(lE*SGwsA^%%ts$i+J_UpQ%1%WtU!fLQLw$4F50S
z{M}TC)#p6X5-Z+-pF8+iUW=!-q(Wb(_~`$Mb;uhGZz2H&-=03UW3$Oaz(2g5xOG#S
z;=Qld7uI82RO7lGs(JDJpFOb63y*Di at yq8F;e7o4FF4QW`Q2yFnDg{+e{N3 at 0*quM
zn63t+RZWFJOawv*K?sZxLfe7iz3XZfAX(?^bN-huU0^2pe{Sbb*B+}&SzrpQXK(L)
zZm>zXy$<GISC+4QUaesD&i at TF$vIRz#HDV%I{)N?SAx{X=R5(t04(yN5%3 at n${+NF
ze1uUXos|DJ{KLs3T2}r0y<`|WcOCia2-pFt72c_^4Z@%1ID|j-o1Z`Ro1fY9>z_WU
z=T|>@LeDRM{Df(Tk5vJ})nNS*!kM9<OavkXfE2B(LZC0~{CgYhL-`CoLlJ=kx4-Z1
zrB>&kl=CM!Ls<$YPl}S$TiPdKm~E8vSLYv0_354Yr!II=V>MV3Z|OZ}?=P%_<+qzT
zp^IHee-LEKF^<>1?){&~zJ>d~)<q}yYMu!<MNwX6_mtg+Y`ACllwCcre;WWBge$P$
zdU*wRDCBC|n077{m=*OwR8PPB@#DYvk)Fps`_W^c{ZP-NKmWm_uReDJS<p?VNeIA1
zAPs>j<**%9hk_~vA_U+MS&GD2C#wLTkNLZ)ZlwBCsC`V at 2i<`3nVgJ)Q%1HXIe)Xs
z;t`qcP{yWoX?q-0R+#gpIsagWe at x_W)DD!K0E~Bx2`_+_JKmAn7lhtu;eaJQj1Xq<
zzs<DaAkD!t@$*ytx&PvkXVxF!%@=PZ#-w|wbJ9*gy=TKchi$a)h)oU}KI4F)8|};g
z#0okm?~LpICFjSS$MraDKR&FbipPk_fd82jyNt}QYs1lPX#alp{YUit^!tze^m`9;
ze!}@K=b=OQ-*&TU5(0pK4FRaE(Fkvbf||VmW+-UJfPU-u>(4}7gh1<92=KX_KX4t=
zT!|=@1$MnTf111iiHZ%t_G+9zI%jQidHRX#NP9}bH-*}v_a>LMWByE0!0-LS9`6hv
z|Am8)$CAO70hl8Ro-ODLz6jMc at IQ5Q8;igc|I}v_K5g~?Qvm#vCurEDk&_xayh0^6
z3HS&0BQ`m3_$CK>{C7>>xntrE_-%iF_Jc=5Y_nSsv;%$*ZxH at t&Uf at Y_@nPU_ at hrB
z{Nbk${O}VwKag|(!TWAKbHkA`5oppdCSnnVNeD19+6&-A0Pw%=g#c at E{&t7gHD-qw
z*Rkm0OxZVu^EcZ|sRGmRD2bY!401K8o&Uorw>KuLeNr~Lq$>EvnE$VS@}vO3I68HA
z^3nM~4;Xpz15N}dk1PA)hmZc;oX>vvs5zcIto;l775F*@<xMp2GrWa0VVnT}b_E#t
zZ=bN8@&CIy|9>DRz(vqAZLjVryLV0ArDNib?c=u-2d=<&*cM<LY#Vr6gd2E2 at Pm)<
z=X_t!NB4bC&xiMY at 56h)%lSY~*b773Z at 3-UhX4!(r8}%?o$CciPWuqL%1F<p3zO46
zI0qHQVFkSve6PLo6h4PU4bDF+V_?+bn?mQGO6nO``>cWaza#TJdDHb>)^}W;n|L{M
z_*;7nNPhgC2d}+s0XLNVB7^&HG`0g3jX25gJ_M-TQF>rLDqC<Ly+Nsot<^_i8gh!N
zS{45+i==1Y`2Qla0*@;on~i1;|H6N8`#66n5W5V(|B$J>cWtms=cFC^oVIb>u=^<v
z?EAm}(S4kh at czyR_sDr)&ZqC+E$6+vKaq3SC-2_%u{ja~M0+v12?40B>uNCH3qWhw
zIwk~)od3DUfmm!`SM-whNiom)n$vU{F2DvniBeDF{F9ozE^+gm6Zf|N2Ri>ddHc-!
zXx~$Pf7O+VPy6s*oZI)r#hGJJq4412J-43QTwTP)M5s7PbaWl4Xr_;ChdDq7tj{#u
zz}k_a3aMW^6Z5uaU-a@%_~LvWU6zU=FwO<hl;B?|kjMXyT^sC5z&muKeIWl1|9c1c
z-`?PVtCrDQ#DSfF?HIg2e&?=_-?{T6b3T0g4tw6Z<Ab+um-FWBS1vtXLjd0kqeF42
zf}w at eDgYT#&bkx=IOl&X9gfT=f!NUY(wp;FQM3tH2S?8TrX{x|Pc{5PO<q>#|J+T{
z>RzYwH*b at B*Ua1Z(cAXj<UQq`RVT(r9GV>C-^5J(QNL$=pnAg5U3K99H=jKdGathT
z)QG~5#-P-!;>Kl&MAF|HYM}%p`Qr!ovM-w<T at 2gt_-`4#W$W0j;WqG}82)GC|Mwp{
z9sKXXpYylv6Tttr#K`tn4uH+0h+{i~H$m~n<2yGP(SmyRy*F-q?~PmEechecZh6O?
zeRtnHs)CK_q8G-m2J7jNDu8JX%j61JXF}j`sv&YRO<G3I|1yU8pM3R|i*$z_gV6Z|
zK8=pxn{GIZ{Lf0juWBEh|1Aj}z84eu8s~rMLrH1RHFo&E{p!u{ylUSU-ks>pdi_ at 3
zJM#|S_Wm2Uz5gcX_STwW5_F_KtT%h>_7C5>LymKFAH97?XfM`e;)dfbNMBexiVO;y
z(xc2F^+&4G!ukgFr^T4U7MF|tSN`jm7y2#O8fNg1^Un<M&qi10|KUF~4<5JGT<@;=
zrTp)R)8=<K$2<o?wVqqwbJ(V;!jqXWw2^?FpNCxB_ at 2g(- at E&*S8jgmm6e<~U)HnY
zjhEzjA)JN)@BzOXO!orNAh|Au0Oy@!$2*jo at oP{Z7`|uz2p+-(rhcknLWl3IH=p~T
zjCUaI`Tb8HdhLZ9Uw`o?fAsC(<C`yY?AxSo8SmZOoL6st_}-;tV-#{|P$vv+g2r%S
z#uC^|WHr`s#CG(6C3}<)#6AK!Io76D`+_ZFJj1a}aaa70>)?v{^=HpSpmlshzg>P=
z1N^6H<YpHC6Sn*1PoBiC9g-9AY=1T9vDI(mD0mw72(T at --!ji_WM>_ipE|0I-<0R+
zpD+(x&#N!o`0De^^}O=jaxa8qA{H)XwAl{qLjW4&btvdMa0P_UpTv&%b~98hX at Th}
zDb{$Ua{kE+OnaN{^XUioz4-Jp&P&f+ujl1wuYdX38#u2#r)T*q?oE01dHYW3`{mz3
zUcB)VX9eX3ChJ1rnXaE?EO<GAgqlo*6TM%8E5>5UK<iy at oai{7;GAk`Uu*mNwOjQI
zhTkRjnx7<uvEn%d^D8SKyz9bgqubmsD4xN4i4fR47LRRS at bp4>>*Li&%`^AU|HWtI
z?clud^s=erd;Cyb34zT}TnzzaHFp0&1N*PH4&Xmr<Hc^H6BitGiKcxnkp-q}<@_N(
zy)3hc(mwYS`Cjq<+jl<m*wu0#zxvt7uaWb_HP6Yp_PHmoeO}IW&p&nD3+6EK9%Fpt
z<(2Y|Jd?skVrKH3^<C~=ju{I8c>M)?t;l2#g3ZBMO(R&Jy=4d<|JqzPD_(kL8O3Or
zjF5+6P1DD;PZ`zffaf{G7ki;Mn)zrbhyT{*g;;cG;MJvhRJHgq at Zl7*_(?ExA{Y0|
zikHA?n<IY10h<>ou&wachs at KKXa1x-e|Z<4katAin!R?}bc1o-rV3_4fSwlmI|u=~
zWG_IqWI at -75Fngqj?@`eugrffcR1d>Vo6Nu9G~jRQ+ at 2g%N~F5aybuO{=`F9$a(mR
zCpnK?$$3i8qgOqx$5 at B%TL*aLS4Vc%LLMLzfsMq>MBYc^vea?$(R(vq+<Eg75{wXR
zvlk<e&IN;iDK;to$)b=>1UVi{;R~w0P{C21b>N>)6Y$Ru6Z+LPzBar<-EYhZhu?+Q
z0e}M-2S^5)BRXoqKL!&1g8sJ-QOz^)zz(o|t;hDWkBbXZU-a~2_TfME=vDf5$XoL;
z=Zc-T+sF&y2mvraTLo*WF;y at o0)4Y5VujA1k;@ErOK|?IvD2CtI~-YKw??V+qxWC>
z;N2HLc#oWi?pgZKy-VTe58r#q!}neCh at Sf|<#Qf=fOFYndU`XEhp&Xv;N_BR<SO1W
zdym+w#NH-%tUQ~RWSx;qnMudtdi=|RJcs{=VKbUWZrU<tR@?Y(NvD{M%61`^?Cap(
z2~qbSyq3G{!n5b#z{$oWe at ARtJ#+Xm1hd6+=&qf|4pGhXd79%KONedMr+9K43)X~1
zkLzi~vhYs$D4dm?2QK5?k at x8SODB(Y+p&kW5(wB3fOhyMnTW++fNwMfO0mfZ@^gvQ
zysjkeL*#qq8v0!By7j!fZ<BM+ZRg)}`}y~B?zn(+ALq^sIrnq!x`=bpIY(0wCUG>V
z|9aLsR%0N>My!EgCV`EZd&FEN54)=*xJ_=pVKLz(1EK@`m*D?tRi<;3 at w_tJX;7xY
z|7PHyeeoXu<Q_?<b1yhnrrgXiG@%E*9OVxdlf8V7VHbqzkUEW1Xw=0DxLhn1R6^)I
zv-8gu$<9kFqy^8;UE?3T$Hr-My~;6Ht)SWfJH$3mb#VXnN3_?H1w|V7^7G4aO*klV
zQ}>F?l5@{ebz*q4NC;;_fFU{*w5eL#fxprCk5BbH9_N241z(tdsy-KOa=i7Xv&=dB
zwiR-2U%5oj9XFrDx$_pzxp#4H<(zl7w~pJ-?`kYBFOtPoJbd1Chy*UkSce$M1Dw0%
z$n_E4AjU at QJ)&=uyGI_m|5A?JCSok&viyaDy%bfpP+i3eumz8Q)V!px>wBg*4%1aN
z;D0+5W$OPu{;>`|$KE at hq(v_b_7s6@{22W!NA}#GC<C+~g>MMu&|@*|U~Ir_knF&m
zfM<U3G2Qj*v3VN$WGt#Jwj*GN*nZ&di{-H!2W8xp_$zf>crbNk_%tVkV>KQ_aR~wJ
zYP at fH2*9)-Kh+cRlf1)}^6rh-op$4Or{A<p&Wh_7>sfij8G3GBekSLZ8#!the6*&K
z!aBr2&J_a@>xdhOxjxJd;vReAC1URpZz;TYSPJhBVFKd|gl;)w33*pRd1HY8!L{8}
z1^>f0VL?Xgn5{%?5a9oXr<O%_6gMc#4U{1~c-dta97p*Wb4C?Os*|Mp*zWqrJcV$d
zmhi8l8_j)jwOsSj&_ZX?7Q=wqQAcsn7R=(Pt4s3u#fP<3kL}j)-Y~4KMx3 at l+Mv2O
zVBaaXv%~fUJaaj>oqx9+aalMnd3Ve^CGXeG=WMgZ23iHvc6jKM-wyoE_5Ue5+*#Ln
z?G-0qd*#X3$yv1QDs!$r<$7~&xaL&O@@qM#amY(h4i;9EIgoOX+^QY5D{ffqOyi8u
zI at ZQO<OcCJlFCeYkCbRB*Ww32j7rTK7{F$^(0LK?E^9J)w*1oi?7~VC*B<|Pet*%}
zyWWH?5jTq)lqCk9A($7exdC;8|52?Gd5C{b;y=_c>pmuYYx$APF&K_u9Jpx6q+ykJ
zUbte}>E2gIkOtegJ5*a>8;<IMeXF=2d(5q^cemc-JuOwYtyrR$JFZNxd)~WQn at -Xy
z*s#t<0%2)~|AvPEIDb0aSKfHm<rklD`O*`v;9RocN<Eh at yoz(#!mBSkk#o)EoRhA(
z;-tVdPQFe}<Elk!8U;CnyP7I^P&YX1(2L_nb8*P^k>c*K26D4pA991Fv=QEph-Ix@
zqHmV76nCKn#uD<bC^m8Ti*<Jrst8W38}$D0jtiJ#H at v-uYN>^m=L28p#V&^(yW0`-
z_n5t4_oGhO?TC5N*VNn1eP5DY`hCTUdm4tf)%c&&zA%QbzfRz#jiU~I^(`!)oz^gH
zW1<*#5pvBn4Be=1$cD9DQ>r^Ad0+!?k8KiMI4-?MMs?Nov{rXCma7Nz*Zob)7V{2z
zAsjy{dja~d|7{Zje1k*ar5DV<`26FRUNDby3FpH3mvS!R9DmtG#}ljaaFksnnub`1
zn8wv=8rC|*K+MGvS;sPSap+oJx<?rwAzQ-+Ws*Q%F3d{ERb(T}7UNMXi*xwCTqxa5
zmAoTFi#IQKmg2Zpg0Y08%lNLyWNdg67*1qC60KMZ!XGwQ7jvCC{7Zs;Xj`?TYM!$R
zZA(5gw%KX(UH9E`_XB3_dC)fd9J<|pN9=ImQ9B)SwBY~9`FqY at u!rD({;r1~cmLfN
zOMK)#uzS(jSOEyh#&84rpD=pi;w<k9*ak?li|5IcB(5Q^3&O#9-4Mn9ObA}%@R<!m
zH|9_H^P0}d)$J2JaZSKB at c#eXJJYAC&LoUiML-OZMP%PDJ7_eRn9;;6Wz>udsE8oS
zzVDlWpyIyo8k0;WGgFzVnJ at EU=5L%|zkN0?=$Mq1MC{a4r%n*=J?H7CpYDFoz2^`G
ziN!x|6Bn)T6nd at r|NO~o0Cw>~IQLx`MgX1;Df(X%R{^w(d;VnM+b4_PK3)6{JUcI`
z@$7t7#(Q+vM2B%zvxC(5^LI->3RW*1?gl~JAd3fqWy#vRTYlkwS-$>LRsVD&JR>!>
zZLj8t)RCWVD&cH-7T$mV{a6CwrAb_-gasvTB#G<3v<LHt6tBu?`b5f2IJ`Jx6noSj
zVCDACwXw9cv~>Q<NYBW~*u;OCne}abM>_`5|B2o)U;ndC|L41AmOTB>i2mCq7Wnyp
zq_qeTyt}s(9G=_J;wW=g0Pe!dT+bJ0pc?)2nPixB`rj-1|L|bt$LOE6tRvI{<{i2|
zr~fZ_Sf|srCv12Qv`rMecK2^L)Wm3mrQ-iZO20G!KVHKd!>_~F at N{f$id*>RjsPz?
z@@J3cpFKMF&110e9QdgbWCyA7{WnrOT;T|72icLDSwOR$lFDsDRsZsg0J(7-Pf8N=
zPvz<fQ7fwX6i33EsL at nv!t}4d--d06U<Q#fB<QsyK>jcimoKjGVlV;DzFgMGoq`w;
zc$8<A<S*+^A5<4fGv?uL(3J&#7~Lr-F3B$}$}1?$$;;2q&CSZrNli^nO9P^R#GkQA
z^ndttPrUwz at PF0+BHeOzEN5FqL2X$c`fs0DME|Ep=O_ at -_tJfiN1F}*2<1?HXBKl-
z;0Z<5yD%0kC940}cJ#kLqW^kb%PJH7?=5*B{eM<eyJwlOJ#9-V*LIh_SGwOHuKX3a
zewgYn_+ISp at PSX{Dwy68%Z&gpQPJA?rziL4o;(mdeK-%EfiOGHX?8425WjXT%yw<c
zEyJeB1 at tdZ3Um5TTAy4{wX3N1Q?aZM_DQ^C$x+I*i_xCKnol5KqafkXUdy#xVaF9V
zUEW~gkL|7p!^HdvC79xu<&NeNm0gO?&GIU_z7NVOt77GqC8gy>u~OAP0_Nv0(tksH
ze??JteOtfyfA@&<|H+n6|L3Wm?<Obm*%CUdj;RZDM85uKTZU$u2dDg!Cr1*vF?}GN
zCx7x`ZOQKK<vVJNLvt2?_AHtQ5u$(S!q}nC*T47)Uz5bKRnlw&Rj(>+)i!s$CrN2L
zS;wfWDc)M1FBSj!MH*vqIoBuSd%*|cl9LjuX at S=IO>v`H{P6DCN8p~|@%>paH{HST
z%My at I3fv@sZwFI5{PN*dko4>lxqYIi{|yDz=%0}Byx{$K6v|YF|MWa8B~)AKwOqRu
z?YM9up2ou3Bk#4H839+XDiWvq0r**?JJH<n2bSVkX>n;;Nm+TUyrQ(C62X^MRhL)S
zlvP&qf~x=Gi2jK(KVPQ*bn$;wy<vSK*}<1+ME{+u>pwLmneS6DErO0|(SIBMKQ>Q+
zI5mv^r%w({Hua4MJ%)A~tT~YBw4H%~orax^eScOZXBThvRxQ+}ol&cvAxe7G at 1$Q9
zI5ORQ=c^jF17TCmopDL)`&8Os!IMRtO+hE%`T>dT+i*v$sO(qWzkhq`{_Sb-;0~Ap
z^V1!4M3N(#AonCez!RVqWJM8?G+EwgDcd at Uc<t6x8Afy-aebFRu*=Nu=Sw)e`&r{B
z4u4X!eMez&NnuG0S6`|Ba;N`_n%WA<0{p)ss(-Bu*|~XP|Ks$JrK`82f2u&J{{j4e
zM*ANc9=b1_feZqSz at q<&g+TvI%1-|i6b@!*S%q_LhDcW-0*==(O7>*TVuhZ#x^zU(
zSOo9*enkOeHD<o0JU^=HP}rjCP}t76q{M5jf9j$pv2$^hXx^LE;OZT*7y;JC2SHa=
z_^bc$&W(vXHzx1i^l<OilwxI$JiIgW at Gc1J$Rj^ZT&B!Xh0#@YESFxLzMY+*<BBB9
zve_g|88^Rs-lc=QpF5<_{aaI8ckC>VmBsl#`bYT@{V(f(XhOhB{j0Fa0*oE~AL|@)
z{m(dh7X6RT;q&M}B{_-HN!gI(mO#<J8-elvQT+cb`fnbXYU=m&&nxgcvLfdeA3{S`
zXXad-Eu-hapF<^M)Dba at tGFtxlJ@kBumeeps^`?8*b)U5Huat85TlyXJoqPr2!R?M
z(F`IxH`T#aFnv1qtLx-#_|2PF$H1*?VEoqg@!Nt4;BsUF!6YZH(@Y7-WXETC`az_i
zxJ;2`32KUqk+ at J0IL#WZFS=#TO0LXqNUAB#<${i+k3X|GF`T=$G`wx+uAu*M`me35
z*%J7FwEt)R<$zcAKj|Ac at D{GIPk4#`yUs54%v}M&5~wTzjm<Lxi~fg1|124u=o`oX
zMgLtxj1mp)1A3@#)N;rFa6U6F1x?cIaZ;>NM^BmkC?U?JeLde(J&UA)R%*AE+O3EN
zLPJwgoXu-$$TWP!Q3C34^O}VC%RO~ls@&7D-=-1ZXQlA9OC#4Vk6c$=8NG33baVQ9
zWrbPHRwRgIil&KU)n$q#i_)$&W!18x at e0DnPBd#Y#D1ai%FXhM<8^3<n%nAj?P2(>
zs22UZDM0$4sQz=~*MC_3Njq at j%-1K|54Ln3YVAI9rWd*5+l}2Lbn?vulc$Dekayeo
z0s}9$AL`#Nfd)%Jr$*4fjKJuhKWyw7bNU~qm1^i1V5WHfWYKqH)v%sRRKx7cxkss3
zF6JrpT#%JcFH{xF#mqrfN$%|%;z$mms=bIf`yx_`>sLlKe8f?rd1?46SOP;=mWH-g
zuZ0i7{VYlU;$OaeVes<B!7CSsJS+{tp)h%A7*-v(ex{HwKK~MhtD{;|*iMh1A%p12
z2_g*=r8&qN4QM2Hq$P`{&&u{Jkjk<4zMXr%^!>k*2C1mTTmSL(AN2pC|NSr1{}h9*
z=zjwJpU3}u=dXb7*-Kmti(3Nq^)Dl^i~!vuTtqn9IfVYHDJ-j!T)|=M=|oS^*Dy+!
zI!m<;EIKM?cnkE*&h^XjlFlvLkyHACQ?(~-jS=yZs9hM`QkD<Z7}wJIfu+TMa1ktk
zK7Bg&FIL6d`G-QC<50<j)k{8TD(I+{_SN&nrHr37UgBt#nHoEtl$@fs>B}vviw2#2
zWFR+q;WMboN!0hP6$Pk;AG%h}b!*qg51nk=zH at hU{`K`AtpBI&JKh at j|KX_r_l!FK
zNB?Ji{p0^jy>qJn%Ulc7B~V!cl1l)yR0@`W$P|>UO$Emjhq$v40Xt9TTv&Q##gdyf
zJ$^8+<{a_o(4`Tx(2^*3FU*N;N9}nP9~D&nfrV2RqVp?u=9Pbl{<CA-0##pF=o6gl
zixq4>f3ElZykJq#vpCnYAn0D0?LOzg*Wuqz8NZgZhD<0GV&{95=UBdQenB81AQ1SB
zLzp!wY1}q2l?7FIxmm9)Y~<tpTnt73gcAMdSMDsV-c6LlqC at p@h1-=LEkLdYNkMne
z`hIEn(|rePw$*X{%h!MC|N9!F`tLb%rce5xt|1zDU;lysU!d*poxckB6p$-(QtYIK
z2oSvW(s0H``JQ8PVgh|WD>leGa^zAy14CASxO8DK at C|WhG3SUsJBya5mZYSke{NmN
zVyV-Ao#?;v<HDNVEJWv5evJNeOY3rC+xUfxivz0ab7#Be6*FD)Go5pa>CV~d4#8B%
zSwZ{R$@VWl+woeIU at xL1!}dI!JMxKw!1)Y@<H1>wWX)U;mlgag%cB3p^&7H^w-8EP
zj>sZ at aXBx<&f=ok<d-3Q&#Oc$c9 at i-*MGk{)}s3VqwD_<xAxRW^w099r$bd^utk<4
z&Q;z;>!7!ljzXFWg=fOfhdnF6iUT-LcDC%?W3H#%l>@fo&yFik$+O)sv$?1?t9YwA
z1A-U*V-DgEyW=J8R6R4<E|_SWo at is(rzq3^RF&kE7Hlrc-84CNS}=NgLeTnAU5%;t
z^)dkS0*%6?_zVjmbp8aQvN#8C^r9wq)HyfZnVwbr?#9f7#3Z7O%jK2t;Bvp`V46h1
z)-T-1Bh0DUZf;dga9K5~EXhH8uF6ZT*F-C=s@>brjQ$(i`t>KTxYgI08b8B}lLh|E
zE_>@Zxr%Q6qYX|$cEpM!Zj2|pb7vc}F%>cAsFHm#qh}A}XE-WA%5ZFPl19}NBdz0t
zQ($aZ(K0&ZVPvrR^+w!Y?L`boEF3T#FHGt`W2dLaydY{Q8IY&P{rI{-lSCQZi8L*R
zD>X!!IgXqnn?fLx5L(tnLaRfoe`L!?jJU!@pG?zIUX&H;P=9B|>qsk-AotSWTv(&2
zstq{}8)Zw6D#&_vit{#+k7P}#Th2>PbJ>Z*!!l+(XBKmgC^=5dNIKLr!bZ{_2AYQl
zPQEA{_VeG6fgnbK5$O(BsVEJ;O^I2J1Ls|Ct5znSCh!v~vLmHj@=M|Ji;BRoygp%F
zd0`eNxlCYw0>0u8Q#bMPk91}h)qiF|RaF1^6(2eMZzm&YRP-R7_l6EEXW^M}=*DBd
z8wYH_PkwfKNq***vb+(Iu_!sfQ2)uH{wBq57({#P*TTR+?+Gy2r)V1N^ALpC?GSOn
zFo-BY_m3X_JSpKF+&f6CU$8Se*bIU{Op~wqC(<NS4w&VGpX&}E1*A!f>Yqgzr_yCY
z^$yh?xgI~~!l#MkWea)POukR;pRb(0QsHkK`+FK+3&ZvzZwdoFoyP=S$9k9HcyHJ7
zq=a>S-N#o!kLct@*pyeXxv)C?*WShfAABgTFeihG;C>RPz2JZ4_xr(%-y--YZobEa
z$!juW((tT2RL;U7Ji9j~E_R&1J_8+RjtJW7LFY=e*LSwpceOVt_!bq*BkSLF%ctvE
zKHab`Au%JjY*T)vwkXn*6xL+sS9NzZbax#6ncz<v=%W(Xy at PermUMMA2>f?nxx=x6
zU!OF4$2G~o>6U{YP8~e$aOTt at keDEX)P32u9%3mq`Mq>55~XLy;`HC&d!nuN at QXlO
zvOY0^=a(Vx7yV9K>!AR=*P5i-PU?5gK=X<H%_k0cXgbim0xeAkmgDP|CP5l^mtOY{
z3NOgXXgT at y|Hbc|2Rl4tps8{H at uPbcjYs$DCz<);RY7(}<FT(^4r9+4SYr&-AO76o
zi~7S~tg%zG(=i5&0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N
z28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0eP
zW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@z
zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em
z0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c7
Q7%&Em0b{@zctaWZA97SnL;wH)

literal 0
HcmV?d00001

diff --git a/utests/kernels/compiler_mul24.cl b/utests/kernels/compiler_mul24.cl
new file mode 100644
index 0000000..b69dda0
--- /dev/null
+++ b/utests/kernels/compiler_mul24.cl
@@ -0,0 +1,4 @@
+kernel void compiler_mul24(global int *src1, global int *src2, global int *dst) {
+  int i = get_global_id(0);
+  dst[i] = mul24(src1[i], src2[i]);
+}
diff --git a/utests/kernels/compiler_mul_hi.cl b/utests/kernels/compiler_mul_hi.cl
new file mode 100644
index 0000000..28ce0a5
--- /dev/null
+++ b/utests/kernels/compiler_mul_hi.cl
@@ -0,0 +1,4 @@
+kernel void compiler_mul_hi(global int *src1, global int *src2, global int *dst) {
+  int i = get_global_id(0);
+  dst[i] = mul_hi(src1[i], src2[i]);
+}
diff --git a/utests/kernels/compiler_multiple_kernels.cl b/utests/kernels/compiler_multiple_kernels.cl
new file mode 100644
index 0000000..d5cea68
--- /dev/null
+++ b/utests/kernels/compiler_multiple_kernels.cl
@@ -0,0 +1,7 @@
+__kernel void first_kernel(void)
+{
+}
+
+__kernel void second_kernel(void)
+{
+}
\ No newline at end of file
diff --git a/utests/kernels/compiler_nautilus.cl b/utests/kernels/compiler_nautilus.cl
new file mode 100644
index 0000000..aa7251a
--- /dev/null
+++ b/utests/kernels/compiler_nautilus.cl
@@ -0,0 +1,66 @@
+typedef float2 vec2;
+typedef float3 vec3;
+typedef float4 vec4;
+
+#define sin native_sin
+#define cos native_cos
+#define tan native_tan
+#define normalize fast_normalize
+#define length fast_length
+#define mod fmod
+#define time 1.f
+
+inline vec3 reflect(vec3 I, vec3 N) {
+  return I - 2.0f * dot(N, I) * N;
+}
+
+inline uint pack_fp4(float4 u4) {
+  uint u;
+  u = (((uint) u4.x)) |
+      (((uint) u4.y) << 8) |
+      (((uint) u4.z) << 16);
+  return u;
+}
+
+#define OUTPUT do {\
+  const vec4 final = 255.f * max(min(gl_FragColor, (vec4)(1.f)), (vec4)(0.f)); \
+  dst[get_global_id(0) + get_global_id(1) * w] = pack_fp4(final); \
+} while (0)
+
+inline float e(vec3 c)
+{
+    c=cos((vec3)(cos(c.x+time/6.0f)*c.x-cos(c.y*3.0f+time/5.0f)*c.y,
+                 cos(time/4.0f)*c.z/3.0f*c.x-cos(time/7.0f)*c.y,
+                 c.x+c.y+c.z+time));
+    return dot(c*c,(vec3)(1.0f))-1.0f;
+}
+
+__kernel void compiler_nautilus(__global uint *dst, float resx, float resy, int w)
+{
+  vec2 gl_FragCoord = (vec2)(get_global_id(0), get_global_id(1));
+  vec2 c=-1.0f+2.0f*gl_FragCoord.xy/(vec2)(resx,resy);
+  vec3 o=(vec3)(c.x,c.y,0.0f),g=(vec3)(c.x,c.y,1.0f)/64.0f,v=(vec3)(0.5f);
+  float m = 0.4f;
+
+  for(int r=0;r<100;r++)
+  {
+    float h=e(o)-m;
+    if(h<0.0f)break;
+    o+=h*10.0f*g;
+    v+=h*0.02f;
+  }
+  // light (who needs a normal?)
+  v+=e(o+0.1f)*(vec3)(0.4f,0.7f,1.0f);
+
+  // ambient occlusion
+  float a=0.0f;
+  for(int q=0;q<100;q++)
+  {
+     float l = e(o+0.5f*(vec3)(cos(1.1f*(float)(q)),cos(1.6f*(float)(q)),cos(1.4f*(float)(q))))-m;
+     a+=floor(clamp(4.0f*l,0.0f,1.0f));
+  }
+  v*=a/100.0f;
+  vec4 gl_FragColor=(vec4)(v,1.0f);
+  OUTPUT;
+}
+
diff --git a/utests/kernels/compiler_nautilus_ref.bmp b/utests/kernels/compiler_nautilus_ref.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..9d2dd96c9637e4ab834b2eede4bee4e1ab235e22
GIT binary patch
literal 196662
zcmcG%_m`YilK1((Xa9-avuA&McV^lFjd$`=dGCE at miOMto03$Ls^q=*-W%jW2m}(|
zd(+Ugp__(=HZ;R at ckU-5p6BLMSq1d$+3gea%+1Vlz$fB<BW~P#C#T>0KmND>A^*FV
z|N9Ra{7?J8|M@@ucX`GC>~kC2^WXmO|MegL{%=3R{^Q?%{2%}R;~)L|Pk!|8Kl{m#
zZo_{1quYP_qdR`~W9;X*iQReIPwu*1?Cv{$a?c$<z31mYy;tqNJAd}z-M2k>_w5he
zBlhsUw~xE`j&b+hG5)?gCfxsXY~lkypY*`br#y7m)Q9hy_VC>a<HQoj-;;z*xF>be
zeQA^LOP_py`jq=Krre)7_5PfM2Xhl2Do7qzkTR|?Wn59}_+l(=d`a4b()0;sSjL2K
z_T&hbGr2Nna#ik>YAkO`P2SYn{Hb+V!L<6qX$^(b8jG-mrs9OQvZSt1D%KrN?FpyN
zs?C~Ro3*exZ(&RRqL%!{t@(qk1uMEs*7TLH?Jr-~U%q~N#rhc)8)j5&oLRAHW(eCj
zGsH`5O<&o%=@onpU%9fUbah|(^6rx5T_r1f%2xE0 at pA3-(3<|x>i&x5J!Q)}OO|#N
zFX<>=)>*o;FErF$w!F83!RqOeRsE6So{FKKisilG;oi`a&ho*|vZY-W%ljh3y^&=-
z;iWy{MV%E3T1yAo%jdR~4769wYATstU)WQV-%*)cUz%Q1lv-7o63R;|OrM;aJTZOR
zxReR^B#YghH2&^s58s(M{_aHiw|y5j@&4N<-go=M_x$XEJAaJb^|ODw_xAs||K~rx
z?~Whed)MvBQ^uuE9hW at i;k0Svb5f?{rcTLEpNbV`CKP2Rlw>D4E6+`F7Rpb>Dht!G
z>f+4$@*J!&l-p3AQ&*ZL&$29MP2s%ea9(R9zqK;n+A8z0j_Sg$+G2Y$=&dj5t}X7Y
zE)=UNWZYd>%)qRxrm&-`z*$=)uO*z*63%U_%rj%$s at 7bQ-B_O4P?lL=npszxQCpG`
z%1bWGPAtt%2x9-!AN{+-{&vG&$q!<G_Z>fl_WSR;4SN9lPV9yJiT4Zh4*O|8gnj1J
z2lA62{+F?zV%XP!eZFE}Ftt90eL|CB-&~x~UY6Xg*!NduOs~oqfca)+Ua&71Y%3V*
zEE?`CUe#N=y0;Xzjd^I_G%K`O&EVfMJHkge#p+(+-{4;%{FlN1%HA^NzjRfAe}%sU
z_y^mI*UpFxcb5%yl`ZcX$$xhR at GtEuhySJBxI=ijFEV8OcZZjBhZeS%FX{}<Z!6Ph
z`OL=RzPiHh>im{ac3nw&eQ8EbQCcWBsW at XQE|8rx0WX;Fz+DgB`J-tM-D&Vod654W
z0{??|{^S9%AOBzf=l?P3;d|2(CZs6vnTZpz{PbxBY5=bWAxRGP^1KwYio6soT##l~
zS(J{|m1RSFQz(ytSwjWz%ecNQyRjk%@&*3N0<*Ttf;a<vtgWg*I0t)xuM^;nd3(aV
zGe>?$bpfcGwO8T=xjZ2s?3Mhi#&WUdP<Cr1x2Yn#wm7|}IK8qUHByj5w8zH89 at MdW
ze*Uw2u{(bT_V at j3*iU{?m>-3`27HZ9qociHPpEg%zQjfQj0xo#6D`^k>ML^;dkOX5
zk9{K8_f at 9PtjQ$QWAhqvf}ws%TLHGbs~B6+UA(fpWK~beYD`?9bj$28ws{sNUVtxP
zn`eiCpLqfPf#2i5yA=3`{oud6yL44=`O4mMg8!<%ilq|#OO~`t at E`6jC-^VxDqGnX
zUeOnF!GBqIg}~oczN{NBs37b+{)c)im-R*#cZCMK!wWkq2D>8*J3_OYOO5~5P<CTk
zMnh=^E>KyJQlTzTk~J+aby8-+xU9qp*~t at gQYK|5i)AHE%1N1=l{C>AFZ0u;V#QgB
zr8&uFZfua3<s at T{c1M1sAPuW3%BU&H#Ef$w2X!+yZmh_~AU}?Fd0FLIdsP9n^EB(M
zDZ&80CtzJQMa}@;8KK_D2W&6ehq6H(bJ#O(i{uh6T0%MYudA*kqq-=qEIZ+jpZ(;H
z+kW!%+kQfjzw`E=-gUb$Z`cd at hW(vC9PKAPc;^pdpEB`YCvvhA9&{q-yRZ*sO^RWk
z>#&zlFCs^yJqo9}B(bF=skJnz4J%7-FE{Kx=I1x&E@;eM+>*bnqX>%&^=nZw{RDH=
zPWgrz<r`-pbr3dX43vL?-&Z~&ehhwQ3I{(w6XgT{C?Dnm_y_(K%6~BUFYPP^ei!^#
z^!ogFSHS<`j#4l9_l6NaE2dX1 at 2?#0s}%lwB8xjisGxz43gZ9buE>J+(2Ry+^iNZH
zW at 8!Cy713LP+gRY3zTL}!v%DZP?D8Uk(*qaomhfpi4|uhl;%iCN3 at jZCYyQ*J|l%`
z_L5IAUOMA_H?Atqs4dN^F3!LhVD;tM&d@)Mn?ku}j&nC~s5{`}-T`$7zhGZm1n at k2
z>rqDqooelfC=2q6x-lOlAKHV~RG!7ZEB-~<zpGGgVp;aIJ8zH2{=XINzZ-i`+oMIn
zUdW$vf7Y}IzYqI#(e^O!Veboj5jnoFZzxJoF`w96oT#X$bX25tR;2Vs(h2q0ocf#v
zO?fee(<;~xbs%q`wAkbg3TG|Mi^BJqSA}1(d6ox1{DV5d-@)&KKeA_4ZyEfr=`V-&
z72T!${9y1OHvW4MIb{U at B^vw at Ka1OnE%+n&3I5A_L&H5Gl)u7XM(`i(EMMGF2KFnb
zSFPxe at xN60C-@ux105mwpW9l7{vrO80`On6wm1zJK;Kpuk`APn=Om(U!}%##C=W}n
zEKI{-m56Pj+o_juL8=HC74YHwR7`_B-|ne;`^Z=L8LIOI`yl*CeO3ENpcwWBe;n9j
zzVwt#HHt{G08IphcEg^R20YL1+9C|{n?pI6MR?UVGIs9-v1i;=0r{f;`FBOe6v;~p
z<t9|*Bot>%anask|AX3o(gSz?i`ZMV&-So?h?EwKMSD>=<6*ucQ<=AD?_=Lkl-O95
z*i at X@T#|&floH{SExdP>3-&#cG{e5XDjj(<(1faY$!r11tc7}$H$L-aFz;b6S*<X?
zB_{Gc{+Se%|CsXGFe7BjNBJ)$=Os-x_?LDREp0C%_!IfD;jYpZJ>|f^yt{01TahXM
z#qGdfj`G2T|6ZT}?ux;VGO#E3JMm-uOYrYQ{8Yj}Vc+;)(2f at f|MS}`;6FG8-~!AA
z%;}MQ5kld-WUxoynioVw>xv2O>Ig<J?%+Jamo(`rY|^WW#P}BXG^rDKW{}v{l*rQz
z!B1}69Lg0VGNZ$*P&Fe>MZQUWQTsmdreS>eHR08?7t}5PWgr1R!ViyO?<*X6M>yA~
zz#kUoH66}z<O4r3-&twql;ZTs at z_f~J4PjEBFqP{pZY_U9LhLB?DG_R$~aQVQS8ez
zCq;6mAm%G`r_>fC)D<Mu7h;KmeKFW8^MZYHYnfr6(j88tZX?)hs3)2ARK1_f!aT_=
zs(#p4^*;7K^D1vP3-+NcvqM{F%hUMB7fks8KZcLE;1B$k_FC`<eoWynHu#tL{1g0#
zy2K>-ca$t at Eh6$SY$<fXe`#l#1%J(U%LxAPKhzUi))QLV9a<ulpGqn}%loT5 at zYz0
z_>bqmgZN)Qv#F#@Q{a|RR&zxb{MTSbX{aFbyKsIo`5lE0_^i_4FH?ZJfbonYShUwT
zFSCPLC_lwSj?X_LKRv*_sQp^C`m!trJk1dNRCO%L)jU^<Iit-19~>C`nzst%057yx
ziCL+~F;4-<nCHnDgLzPQv>W-nYz^n|uf<}1kbJ`)^3A+xugpJa)k`U0-a!Eq<^_8Z
z_IFOUd{(fhsun9?rcAt#>ZL1Sg1wM0+FnAvRWD0K*i5X*njFfeP&u_aZ(4Q!w3_^B
z4ttm%fxU)$u<w*|Wtw2`hkDIt{bbg#*SaOlFKsV$nXJkiVR(Zm94lZd^RtBcZF9m~
zXJaw=CCOFU&o^4|7yhl_DK$?ff-vyA;O~?V`~&|`XNg394gSE7?5ECy@`3+_t%U<E
zg^SvXiTq0g!Qc3&+Bw`C7XHb6yDQ*dv8VDGq4K$;J8a3X at jtJ%jQB75zeD0bDR6IX
zp`^fpEWli#wj>=DM2W*yIhYG%Qcy)?qR8+LJUxNrW{29+%<nSO`F!fKT?S1RlKk?-
zf^0Kxk>uACHf~_?9Ku^8R7AxLcze1x85r<JyYX+p^EAB4d at a<&yk^0WPh}vp9<@_U
zWlUmzdG at r@%&8808Dxl!F4_mMk1yjSO}ICCf{1y;K5dd$w|BzcRWHjjNnNLebEZUc
zrdH-ot;!SZVcx at DLVbcMoLICkP3ovf?Zif5ZwkkvJ^8Gb>%CA9_RHD}t$-7!>Yco?
zP!IOo=Y)AG|6{<9><50P4B#gtwwg~+`K;})kjNhh{=km`yeS`rU-*}rPe%#x&#up%
z*O>3|-&r=)O{w22buOXQFV)Ui at E;WZt at 7#dKiCzf^1nce|E0$N{I>Er&80IMi at S9R
zpuJMc8XD-lLJ;+BsHiW?v??DifGDzBA94tF6q^nTQ>%;kRCEs01Yta;WXiKm(g&VY
z&c#spHN_cbjLnex{vgMaTy%a51$p0sJi8Pi_$FiC=c%C{r>0^9`7+?2#Tox-5RNg>
zP%mT5N}W7$0U at 6ve=$-p8SJqb_R74GUzj!tv$d)T7U}~ECt=(@3FGgPC8`Pc3if^u
zn?B`%jHwS$sE2thFX`dJ6j3#$857GgCV{;Pn at H{m>}v}&+6S;l*teFYw3Vl{i<lSe
zb!BQqw71eFt5jCQ8EDEy;Yg_0XuqtZki>RnkJK&42=yv&jQJgN!`rbK{9f>PwS6f8
z`S4TxH2$gZDEuL6K1BYtQt(&)yGsY#3Z3#9Y=eJ<P_Zc=fxok4QCrbqN6GxAeE46`
zT*!EFJMY7Px$#ftYfD{z at E7qT{P+6&OXWWd|62T^_%GO#_ReW3i{rmNlG{;5xmy%3
zV!);VNs47 at Koo+wfR?+1UcfA1f=9zR`XL7aW9B4{4V+V$)aNM!S=;j9NA25~K^)R?
zFWnay>P9=jJ8L9vt2wseJkAVwW8UgN0M8_7l^?LLF2v1+d=L8o^Fi{9(k5Y39=aPd
zRWl9d#|iUTim00V(<ZYT`(RGu!&q+8!+A;L@{`31QpOj0VxFZ~VP3IU<|W$4D;$J<
zb4ju<=7o6=dl%}%lFTCPXVhfQtPzDXyH2rh%8g;Kp?;{NkYWx-F-NfXi<Xwjn!FM0
z=Z1I8jqI2g;VJOXb&-FB@<HT#@O%8r5*WeX)^;uUOSRv at uNBT^9ise+{DT_&ZF$#%
zzrk<H2l(eU<~#luwUsREE=T#myaj))_M7+-{?R<L?A1%~kEr;O<d^tAyQz3qQ!&`j
zZY~l2TT1)ui);y)6rdBU%4_rFuGB&i4Ai$V$k7l=aYnsBqCE*h8hL at F2E}0PMfD~M
z<5Ife>FIgr1@^`6Y41BwNpfv$39mh6h1WAr+t~Yrboce9`F+}RiSQ0=264>Cy|idA
z at OyQB;UDH9zf#Dju;a;_;GiU9GG^GjXY$1R)22L_j!k_qW9mbh(;mvg5+2G<@R-j{
z8kgso4`Q#(qw0eS$ArC#`6P1Krjq35Qo}x_t;}bBl){-&4fC=}MW_e+IrZ5K1beCH
zn6TGSFW4{d671tuy$kiie0b-)$lie}Yz+8S`MaD~Wxw!mvLEHMMwfsMekwfcXM{}l
z6ZzNlSBzFZ1b^Tc{#oHt<!@>4!qy_-H~!~07ZUszVQnQA{1>&CE^I3?!B5#!Gv5%w
ze`)s!{#o-{+!aRl1o@}`0T)33^wbm}f#BcIf<*-}1&9*X3W+fTOT1$NR%sW%Fqk3P
z!&qg8`3RE*hA%kR at UnnFs%s*j$pVIX>d%pJ&{X!zJNya*+dgH?*Egss=lspkE>9cq
zXZy};MN99CMbhKfr5SN`e*B%PuZjH9tf at iZZEV<=WK40)%OKsejHwU8ykPG$KSrom
zg;SI^p*U><$t<BB>{0bK`3aK47A6wj>m`RxY82)v-6-=?y7^9pGrc-980zQLWzVh8
zCe*|HqUJnP^@Mt at VG8z;xwfy=)~Ch{^<ckmVKoN%j4_G-8vH%Y at 8F*u>uMMQf1d__
zUD&0(5C59*O7I7MDfmmZznGQ at 3Z4@D+lr`gTJWdNgIVwg{`pM>F8I%HE)f3PN+|UZ
z{1>;E8vm3%7qyoyY%d*XD_zu4zOcP)ac70LJ$Uio)_j%!65>B?55)hu693CI{udDT
zDS at _zv&n)b3t)XeoP!zv&_XabFA(<BDU52~H-_~olEXYgv<+(ng=uEy3p|}KFp!_A
z#`o&`;!uH~CiySs)9$_G9b-QD<QwB00lb}A+RKxFE}n3XF}4ZLUP3+rA2TuU!#{<>
zKEONk$oH8C{$jO))QQCTY+v4}s+mxjIzdsNSdu=Gx=pFC>RqU>DTrZjp?(DRQm#~m
zQ;{md-YJ|&nlP`Sex^1gNT?5D-;$@Rw5WOw^_ at j4x{6Wbg1uL(_llNI-dL!I`Ta`1
z!e1Q+e^B;oSHlSS1G2x2nZ*`%QU1VBSC7ZP27kKRRQ41vA_r0BW5J&aKfzyDxTy9^
z&Bx$}|5<gpF8HJN2RlmPU*Rtm_yhdY;WpSQ at gMP{#UIf>i2wPmWyU`}Z}5-)C;n^Y
zGq0;E&t#AA9~S;u;ztFU3y=sne%wTW#y}1^v5ndhtH?3<O&am63Yg}(G5(nsoH?iP
zevbV#|0!v>xrx5xyv7C&a-D0$q4;avo5r^N{rt7OB$qd{kL;bwg5+=>>)pisDL(%(
z=40>&us8C-zR<VP%nSCK%$lmVx+T&6dqTYm`}k1b6;A7`%8-^bFVuSq2j)>YgnC`2
z&0D0{54Ps}tF#j86?@4^gP|UhMb&F;H|7s4s@{){hToI at qWrz!F9lCpdVKgr_9OB|
z`H1Z46Zjqf2EUX21b^-DEH$YE|H%GW at b}<ng|~>bmuNpvga54h+?jQ`a~kpq{-}Lj
z=aR at jGWeHS@OSaw6aT9JS at SafDgMAe)?Zgh=R;pzL05HNdn5;I!-V;4vS8sq!gL at m
zV7YLd3s_7R&EtCkUjTa+=d~6j*?}1iMNabvW(QG6mQ&ljp!tRTK>J-j-d<V(y~eit
zOC02UyA^5eBL}t(pq=-PbH>DZv7%JEcgX7 at pVeDiz;&S>7jVp%WKO}H$Z-MRVebvn
zCL(Ey(>2rw3OK at i)?|8btZpd^$1BmBs!xhj_3eRB-&g4~|Gf%_P!ID<TJuHKOQ`o0
z4ot46{a|`otZ1p3EKz;ed{H<6e_&CK+6egh)QkM1;rEn}G_#5355R8)Pf$1bZDAMM
z3I6ms(Ac2x3;!<oFKnUoD#~YZYoRUgTJQ({ISqN3M1IYD;eU2Rp1`mC540A$;BVqb
zdLBB<6 at Jk_H2Dm6(cu%anh)3;|1%njrq>ts*5>!u3;&&!xyYW50ROzC5b9h&(?iJx
z+$<o{NLwFq0aMy|fnf}U&c<{Ea|c|20TonxGO%gFN=)u)-eE6s3I>jR<yq=c7RmXg
zHW>Z1Z<qHKbvzOBsc7+(Hb0;I80{)`fZVVTl5aX^H1>sQ6S1PSSkcm$XNgK$&T^)Z
z$=YgcL-7x&dTm0;_?}QN!d_aAW1)UYTRt^R*K7%dg8g)`rvt5A<V_&d1GX|>eQ<G&
znei`?e~}1&Y}fqCQSe7b%6>2S3;a^viRHYYZt$<7tHD=3+T`Q-r at dc-KRRboO9A`~
z{C;nP!e0#hC?DXTQJZ7@&uPpj_%j!v{K<9)TCo`aQtj-l0RF`t9{&RY{+D!1&jSt5
z at Q>#2uPf-QE$FQ+=&H(P*{dy_jS2JW0-6Qn3IDzeK)Y2)EFGrm;!O>aT$gErmYIX!
z2D(f}zYuK_YV=D44EP~XfsECW;^dR>FW%4Rw+Qpnq(nD`kc`Pngg<tFiF~D2I~mw-
z at qbqg`?9QQ*a-49)Eo1Te5-s0b&j}zGH=*JK30%IznLt{8uQkTFgla<<c(jz>5ioL
zNUbs>80snDjIHXMMb%rVr<g;i2R2J)U8sloO*6`AOAvW8SHd{V at 19>N*emmg20ilO
zKMsD#|JUI6I+^|2rnl6k at Jl}%@Vnse;Adf%$WK2%YrCrRi-3PX`Cmlvk0~GFUn0Nq
zKfNZ~hre)cQvvW}vl|K)v=)=?0zB|L{t5mT|4Duqb<q4Q$uIC5|8ts4W;PVTe|L2r
zhUUiwg8T!&@gJN5EEmQF5JGgqW9kCp1q5Lh2&}-u(^$2T&JF at B&K;zW!uJJ*U);fc
zmlH_to!}q{wokHn4Wb=$Uuj=vNeXWU$!BcQo at WeuA9xq-8PL^G<hL{ce=Okp%)5Z^
z$OnGv`NlkL3CMew#s=jL9SA7-?yxaWkEO_)fU5Uu^}$Rw80wv>_mkNXp?=d$!JeX}
zsd`A>y`U1p;T+}<57zP=0l)IUe^HGDe+~NzzXX4&cFsfai*1`D!GEhSd#sZg<@5dU
zQ{EKXrM<I^%`CvrI|e^pZI<%_|3GsAp&tGv@@r$K$$ks|z>lf&k>GFq&uJ`}-H<=G
zsc>PNWWEBwAO8h at DgKm`@M_K*GX58|mCtG{R?T0~QzP(WXr9(kR(nL^KSmZ{{0ChC
z_`O`1buoqCa{>C~LpffX5H6s*W*ltnAY-gddUA-BVk+v+9ZatCQZ<s-YZUY#<Jtcq
zu_S_bpxxfLv3qIXq6JUsVx at V>eL+=03PB#`D{>Nf!ZsEJ-o{{WW&!_S!Cvb5Y6Yni
zu)4wot60LkFXPiXM=>9hH-4?&mZ*ZYdNNt5TgtL*tbnt!yO;vb=uoeTZG{W<WU?;Q
zA6`-m`3k at AACo-+_?aEN$UjQ?Y!m*+fL~U1wYC|^d1H~^YWog;`Z<R>i%s?@{8V@}
z_%|0Uz?$;uZSdhQCg(Ny5kJ7+PyBDl2l!d_d6)%%;Gf at 8Z2VLCLG5ECzYE$*fuBV#
z#6R(0bKX)4{+Q*wy*2qk{+r4(S}L+k|7h{wa{-osmG+nl>Zr<>H>)K6V`w4Ng^6vW
zn%E9zbc$ler(@Xk$#=jnDKI7;Bm?yYZM|b^fMGNHvCwM+`xS0%U&AkDfD`f5zeMH*
z%uuH}zalpg&g0;B%<I5w>4AI+``;by9ri3{VH7#d#%A8+jf?Z6ik5D}thYYZ?lEsm
zRD^o4hk3ysRWD1lw3A7w-!iL0mS|^(Mu++%OKPz=_zyYFA5%Ux%n=6vh~Tf0--5qH
z{yDONOC!H1pYMQQ_;)QmY~!-X&o)MazjZYr`&rnvf)9~j;BU^SvB8)9#k>RmPWd?a
z0Ur2g*5}QZ;Lk)L{A;zx%KpGl3Dgrm^V#9sR<@w6Y;JRjX#S?+84XhK!Ib~}9)f>m
z4)GuUo60hbe>9J*|EdJy*<Di*bb(IcU(A{We1V~bl)_YEI|g8Q0a!X9VbaWefhYO|
zM=-}R at _G6bf#(bQ(sKmH at -y{^^Ygu5;r}jnD}y>u`;F#4_Q#ZDPIagQzr94mt2<1k
zdo9j9o#Qi4 at t>tGr*raCCZKTQun&??YFv^&DW+`#%+IRLo=uff3Y9r?8*<n==y#pT
zCh at oqoFMb7dWy+vT_zi2-msq&BC*}Gpi<<`Vv#q{ZrG0ne=PVjHJI#&d@&dN=lRO#
z{{#3b{)_CfJ?y~0Sekq!=QaLGcoqHv;KvC5bhXjj5P)BTzbPM8I|ab6%BNsf1C~Fh
zsZaubYY8@=&Flg^FDdfS+r~uT at jtV%2+beIKQ*7u%A7V at oy#*+0#Wvq6xduq*MeCN
z7XD51NK-_0zNNjgexzGJtb`&}l>B7Z25%w<4q<Xk_{{}8F|Xu9IEF`<J1G3(5twr;
zuxEE6=H3BmOusnhDSR1!i6h_Ve`*kZ-i#;T=iCK+*V|y&$H>=c?_$1{gTP)aLu^J(
z7N)7|2<C%Zs9azDD0x#voX2G6Y;OrgOX9qSdfQi`p<b8|Nn66)FxVekR)2h1{fVLa
zlfw<z(WNo|CGxBCIV7 at Q%#@G7ul$b%f2GL&0Q{zW0+Bx)i2ST-S*c$X{>aE*DyKKZ
z;Fl8{41VG~!QTo#66zKHc}>#NY4Ee!C9+49PY&=K|Fi1z=eHCA|BO14V&Q*geg2$A
zkAG1<B7Oq=w+R27 at Gz^fXnI{i9RK9J#(#5pCh%kQ{8RRKDyXNH96|Y46@&{gFIa0R
zB~YuV1HWo)simOyE!#Et4N)7%BC{$J;76ahOjaiaDd1r6PfcDMN?po;Tggv0@<%^G
z-RUL6-om?K at 1D@k`<SWv82sAapv+6_rWwFvuD8LmS_7UZ3g2{2jC{r3;Ad^u;yil>
z<F*ZsVBVKERBvcS&}L(pmr%c^w?x|#;^mDoPpGFG;poyj!F~wrg?VSZ?}GpL!@p-i
z)o!u4$UhqXNKE$V?sb8Gx@=U}CEXzW#Cfli8IeD713Oz+XmXI+zE*fV_-$bq{(;}R
z+KBwXPm-&$KL_Ol{4?rukvgh&iu!AE;NOBj{9__`O!@o#6Z|Fq)84G`8~+r1sQJ(E
z^^fqcWuNAX82 at Ae-a>$?AY8zN5P~1qzy&D&uv%o>z0C#UWHzfvOau;o8(0{JQcIA5
z-%QE(vRWJaGD+*1k}Rh{KD}oc(HnDP8vwlhaG(511*tUQNMdWoOAO}ok|$t{{Z(DB
znGMc)$AAw$4SvYCl-8b3;WKd2-mqt~D9 at T=_MLIwXMVK25#|;9puBOJtTL|(XRt<@
zmr#FddBZ85{|)#h_!IW`3{(NX@*jX-a$evU{sRS{|JU%dX|ZHTH?Xs5(cri8j*5KY
zUn9Q+f8eK|AO2}<fPV+S1%G7EJcXagZ^7UAx8OgoxmZh`mida>LH`*4mhcMv^##QL
zApgMc_$T0Frhjbl*CY^6EB at mGtO(-*-i`o09l~6|DnD#}wekz}`h%Dk7 at t9jBFnX!
zpPF2UeEUZGUVCX13j6M9Mexjr-$J*WYj_Fj#<tOJPXj(LWkL>>8OoB%c`(BBK1zPH
z3G+Vo7U6mN<V%x7fPBdg9QNheQ!BEkhI6Nxo{wv at 9Futq_3QdeM-=MkNueI*E!11l
zlBh1s8}^WI77xD{{Kty?p7II6FTp=h at EH^Sh$nl-i2R~_SmgD}JAufro3;dg-NU7u
zc3TU9pYo1_Un0L$cybMXx_Y#{p9lQ2>+_uQ0e+SJ68wRGW?dfePp`|H+f;<|pWRsK
z`1i$+$N!w>;+YMFM0*YR9{=hBg?+X8#y>UBc5m5>*e;z9{^FOe1#1@^$3b8eKW#@C
znxEqiFvvGU+eGrI at C*577Q^*P^RSm1!$0$d2^I4Q%aN6QX}O6rB_H at bE6+(VbM8Qk
z0`KrFNSg%7W<btMqn&r4oo5zZ$Mo2%q~XbUH1oMh<2_3rpO-wIXz$2(11W^2O|+yS
zfc at 0+EWzF^lAD0JJ%gs<{oWg`So#aH)>N+*n<|(@()fJ{vL;I=8<aQaRy9Aes+p(R
z*zk+;3GnX=e$o6Q`)m0XKLmfJ7x}f?zje;{!S63}3I9Ra6NKM3Ekgci_+3AzwX`8}
zw7e<&8~o62 at RQ^!{Dow`ru^Z5j?e$x=3=tlfcTec5Ae^Sx3fV|kK><$Kg+(|)e`@0
z3h)Jw6oQO at iT0WW6Y$9n;G7=#+G6UEsV?Ug<*zQF3SV3Ri{sxUy{LLyu4S!ulr)kA
zR+nF`Chvd`4t(;bLAwDTfP8#Tk{FPifwwUqe8=F2aNdle?wDtw%tOAyFKL3%F3Ey)
zbvovK?1gzTAA8_8@*{Z(m|Kl?O$byAW4$+X!U*pe^9$*{@tB8IC+UG4<{w!t<Okt5
z7dX4Bd4%To;1~Wa_*=GX at I(G6_^U=m{uum_9|ylIa>X>ibn*luzZ}s+8?$Uzl<m3_
z`61unNBJ21wqqUH!@`!qPvobi$7=hU;mT64mG at QZNaVNRPpBu)MfqFWJH1x<Z<P2C
z|CsTQ+9%sJ{((Qhf1&9g;y*P{TlS*!hutou0Gb6`z>iG<xB&2T5EkT{;RRA-ETFtk
zVV~NjNOUFwO;?@ZPeKdnmwBZ~!n^U$x0qr<sGDgfE7cokg=th8k>vt;oSAOPOPL7j
zY$^fcAoIMW<=!mreLezyBcHb95%4D)_CmXnZ%-rNd-?%Clrs$*jeQ*Xm3avmC3=>k
z;+Usg6URJKTta<N(hoPBUfy_SMdN9;?}7j9%4Q4~kc2k|e_fpNA at axISJ|&Q at 4o`S
z1b+@^^LMGcgf|AiU)%BF?-~KWZr7C~Iw7C!>MZhFKM(L at CVLG2{_5<$>MVm_G{0Bj
z)YUFO_)EdR(Q2Mlatet5!0-5<-&z9vj(;>i at b}l{`|+QezvzF~yx`y3e&B!96yWv0
zQ3%2yoJ_Vx`LE1R!V3^N#<p{Tu<ik8S0H8>OL1P-r($yfdfr~T0+FS(fl7{)<qKJ9
zQe%l0_{|smC;90_48l_<vsG63cjm~q_tPdn;68HLLw*c?3H8FfS&)3j4trPghk1iP
zoJ$%WlR6&x8t at H!dsgKqn6}Zz8*k^7Xd8|5j(H08R<Sfm5Aa}bX7J+(&Q2|FbmE7|
zZ}1!cCx#nT_K5h2gP&izcR;qTi0l~wzwo~^mhck!CHS+*>qq`E;P>0u$}RFc__fp{
zNA&1kT`%(MjxA~C@!>Bd+ePym`~xjTM1C|s<sF4Tn`#e{ANUFKh<xHakssxwHP2##
zzbPLr`%w1u_ at 7aiKdZ5DmWKKu|5W>-eI);~=Ea-zIa38<3ZTyc!Q&*5uYz*f_R>(A
z&M5~L>LDEXjsKtv;2laeXCOd@@NX_aY*&#Z6M>b6RN;H>fD4G2(Rz-n<hWW*e(J=a
z0YA*cFi(&MY-dJzkbD~_PrT2(z<`fE6J<k+V}4BX^MT)A_M)H1G>-**$aiKsKZM{J
zgZ#v*d at -rp=+3F{V&1AZLFPx0Z}H#fANYgj_~(ZJzt~X2 at u7yp#=pvb$p8NdelOeg
zs`{dNMD_&WXS<fcZ`rO!et{nY{sF9|h*A&mqj}=s at 2Sdy|30a3=1#Ar;aQfqSm7nk
zTg?aMkND|Vn^B)H{44xK``JxJ7XMwf)A(l!ur*)${NZ0ppvu2>{;1&3HWh^CN9_YY
zQa_THh=nm0bJa!(AxU^?A at h0mT)-)OTl`|aaC3plcu&mh!Ykx!twus|Zt?`*M3&$P
z_RLBc#}-;gJ_BBkwv>tYxsMn?eunNq1bcpt%KPt(`H-K_CR~Mo1o_#X!Z-MX3O^9=
zi4Pw3kYBB4dfv1Rao$Qd9`h=1T&NEYys-bh at ShxRRP$xe(mI15{;^|24Mx5XfAv_A
zzbY>BOK(pg@}qfTvL~=_G1kVW2a==teZeo0-voaUevAAIS_FPdJwf>4KL9_dOYn#M
zp2{rX at 2keL3I0~z=h;`2%lkq2aRK<B9^jv~U0lGec4_>FcB}vBJ{NX-Df~<U0>5 at X
z_%$Cn^R}@py|I+#CyF-7#(&TS;${KDJ7$fPz6&Inu-A;3)hp3UE-7{`mlSZwUQsxZ
zZzW0}d*MGjaU7=ajJGk*v?&jWO at 1H<dC&#C_oqGNeWiXq+i$_%<c*8`LA7JpL%tfT
zU4fXNJu0`=XkT5BWLBA%h*`9^r;uNeSXY#cS&9Da$|elmf{Z^OZ!JOc8UIW0FE{ub
zJ<adSevSNf*0=8^ysCWm3 at HEJIv1KpY!v*JBjJxY_`Mabegwam)Oq~H+_B-;^LZ at W
zCG2xP8;iLHKTBFferh|Ak5TG`{~5JnQthb~+2i21;7|PTug&%07yf&z`ARSN_tnw@
zL{=M%|I~Tle+H#~t at eYuE%>_l&sIm%MKS&>rSlV``KP8R1*z{t4*%dSQ-E^;asj3Q
zzQ9U7A>A<IsKy1DER26w^R&6Z$~!#CVXX*n^+~Tjugg+~y6qX~3C6s`z`>u$2~m^o
z!}y569yIqpA91LTeGMn- at a;kPN09F`Z*?I at eksNLk>s1&LFzd2YYLNU3X{K!{KnGM
z`r_oVm~T11dJKDHbqh8EetbcdPf+tPKKUK+dwt9PrWJ|&KK$0k;3d2Z41Tt;OPzl^
zHW%{02Yxw<AI(1+eoyoG#}X3xE$rLjQ~|*+i&?gwCFBeIEMN)z^O_5h_YQt1dx-o}
z-WR73`1@<bH2CKNKW55 at XJ5@2 at gEn!FGliT1pgRq&&q!>DhU3i?I$d4KUhO)T5VAZ
zR;4;0!a2tkynVvy7M^AaFD{_Q7l1m=^Ha?T={SN^=5>k6ynv^*6Kf7D39Rw&!LJKa
zjB_;L8~Gd<VgpEa at TW|=U#Y&IfxXX142*Vef52eg$On68d>KDH&J1|>gnZU{k@}^X
zqsf<o4 at Lwq_`%*;EwiKsd>8W}U*S)wFHX6<uFct)*xQ>1fAA at e@I&ys;O}o*k-q(y
z?D653;IEP25?i|WM>lY?Z%gW&Qs*b^M>w20a59N)SC@?{7WwrkaygJzi=3u;^jJ1K
zkXcV=^VGg*9)({!8CcIk-gxk{nA==v>$$?YCcH%c?#e77U*)|Azw+N*mEBz_)>WD1
z_y=<M$6WG@{x_+k(LT1?MYTr at K3)po3O+3O()NJbuPaWir9Kb*1=KB*%msx1fC~Ts
zE>Mv@%@P5?wp7<POrd1(0{SH3-?Y7cfwU`FVhi~rO_pMXe5u<L<R6xEa(n|?8!O}w
zI{1Mc!kr`VKJV!5KX-EJkNe05oH2#r2t4KB9kT>Ejl_)gFI>RZd1-ha8S~|z)X3*)
zIwy!d<kuF7nbfH(65yLk(|9(Rm83knvEzH}(z>=d3%bC$RV`RB_)Fy1;1Btj^sQ;@
z8vJYUuNfQu0c-E6+NF_y6#Q}yxjT)}j-vHS`gRnpE9q+wn;gZgr!fP+)_EYm)P;SE
z{C=tn`GvIZ+e)t0^HDn%_8t5zX`y+X?D--1g at 3H4I;W>f%=quE$+e{}Yjv<t&quD>
zNu2i!{<+<{;AJk*Qjv)Pzge|b_00u{|D=270wQ%hkuS4=rNdV0k=U+#NvvFn3z!zN
zSs+-_VJuahfETzDJ(Ya1DGvf_&=CxKVCK3LyVlAe=Y2C?PI>4~EcmIxZ%^LmP)%GQ
zV+!Ta82Q;8A*<`Z20v?C*7*<fVjA!bek0#<Tlja_8~KeT673sH(_-Y8q%@SIG>WBu
z5By_(WbSZrU7KfX+b*tcyPzi39xZqtU0QG5JO3K|)p4?C$9#^is`Oj;N5Id4RCfK4
zt>nsLu2yxlu;aBch{y?cZ*oLWEbLR#kqW=2x&ptPRpPH?!9VcxW{`YqW^nK$d;G|c
zy!Vt3vZo`Q=?8!1KjQJ<U6o_jTa!oRH|wd+#em$btBTrYjureZ+jVQcxB&3iEBu!2
z!oPC?SLm}`z*j*WjG+AIN$|(uU!J;29BmK$HVepUIof+h%Bkg at KuJ@JnUpRmQF`R-
zAeB4XDD11wu_yEr+wF2UBOIz7{QgHV{vG)+Z(q-VA8V!+QO;fyGx%k%R`NI_zbtc#
zXIWEX<mbn#I*xn|_$h`x<hRf?UXcOw4tvP2FG@!Lj|uss8#~7`nJKQ0GzUK}VEj|_
zfqz-&(wx^4UY>`r!MdR4*PIvlg at 23uJ0V};cbY#K`2~LO`iYTk4DpLuvXZ5J%iftJ
zR?L at Wtfu@J`GM{=C12o2>H|N_n^DZy<y~3NvTBbdwtjBwX at 1~0{<}o{h;{n>JN*Oy
zq`)KiR~P7rWMhthrT``as{Q5ywEficU#cY4rgd?F82`zLobN~k<ZKY80OKEc%mu80
z0Ttw%w4&hxuH?di_%8)XuWsor)Pf~^avm&2d(1J+X_=gaZ;(6qT~xRC<*0mrYTzSi
zH?yzjdNL!QlQzxx?H>8kx*u!r5%RM<qm4~set>*Qato3);HRK-VBV~yLdb6}OEa^%
z0PL{_HJ|@6fscRl>c&nr&kKU^8~?z6!nfnYjdAcF9IR8TJ+N48KeniL-=bRJhkPIY
zDhL18xs_YzRHFIq99lb#$|8TPjX~=9(!Hi(Uv8QUY)c=}z~I$$*oUIWGMLoYzD>wy
z87tPqATeLt7^JbMv0z?v5t at g{Z;5RT{#q~LHU1s^j(>q)^*`_{|FX_y!C&IP&%f#%
znF1i+%nF`(0R^A>k~FG4G5$xo0RPd0DkzW(iwiIjn7r|(02M-}g1jyTZ8NsQzLhk+
za!ssmFUz=`2W#;2bY2jI-ym1c<-lZn3I8^5aef5(TueFsZil at MGC7TK>VtkQNLu&3
zuAcNs20!Ez`RUul{KAe`=LCC4K2m2S`ROg?RE(wIqu9HNASF)TfB(yv>_Ptol#l73
zGb@{&0srwKv13Dx7WsYnNeV{55C3}?*6dN+Jy3&bsi)GxPqw>hcEsTKtD3>Ztk^Pc
zAnbbwl34eGt7JkxtG8~uimCe80<Ny%`sCBGAmn4Vl51Hls@^Z`jDQ~(aQrLbi20nc
z_%G-Zou7;Thkqh}K<ekThqExMJ+{xwwtA89TER2u0xWxx3%g}s6GAQ*_T-I!9)gJn
z$pXw&2)POmRTpLfa#%B0uB3*K5$&fw%%u-^*{R45etBO5yFqTD9`em8_$UCs9IDLu
z;TYd;KgXWD<M=o7<vC5xTejYYxPCUDd~b!9xzCk4gXA}rrTH;Gy;-quDor(G7EswQ
z;=iRlt+hPu`+*OB8VA2IZ_l%<TFziAF>!&@W-FRct!RdSmb#8E6T<}#EEfJ<<X8A>
zgYfTKP_uJE_0IX#JLXq!pI7bRw-cD%QEc8a?pR^pweAFK_+ygaU72aCSJu5?YglL=
zZPyX_=c*b11b<6ujeje3n(}w?zgLC5AK^v$2jjoZ0`RXvKD(1*k)H)H1<>BCCj2vZ
zQ|iR{?`x$V=K at F|DFhX#B7~&cqsgG at 9IK50KSe@w0n2c;317}huw1|*zcpT34adQ6
z1Im at GQb9NuopAMugCA&l)6AS=!hLs4e&FXAz`KEs%{%=0;@%+kW5Yj9$T#@mp9L at L
zY8bP(L6&#@I)7bp3dX-NV!n~D at TZ&9aoC&wX;J>$Lm3 at dIHRp1T?uc$wC)G&;<|RV
zSla9O55O<{2jPeRli2d+6U&>AENeKjwBhj5hVO!Z*FcTI5BUcFws}?C=2mT-71=m5
ztS8XQIcyX;?SjQXF<+10^p7IZm>*lcVu{LC?=9fFb=%(R?B1$uTe<>%>rw!IfH(4K
z-KT*~jGnaGyg)r?MDTZ!e<c5;w<GwMJhxH|{)zC$zncQA!ygx5Vb`=PF%ACt4{a_$
zxHBPSi7>$sc_S8Z0kjQmFy;a at 30SF9Oa0t_A_pl@+p)e%Ys(o~%zQxeR$01A9DlD|
z`t#tOxPXtVN4`Y<hwqyF;Ln}Kyx`%xCfs+sxPwj^<~V%)X!!9jT?m%b^$mL?pQn{T
z{iR;<0+za{`P=dqPx^U6T&j|nVB}j#Ge*7!e58(&@5z4Phk3Ks@^r8_YY)Ny50K9n
z`0%@dSMb3FfIrCp>6I<Qzeauszwv)!xaqjsp(PE6mel)^UxGiHXDs-uw<`P_W=7V}
z<l^1%x*1{aRTud6f;qWMT5c4T at +J$oY{>P<*QHx(m@)FTdI|j6uE5GHOH|oCRi0TS
zr$0wqbd-GQ*cUVMfgfYJ7XGc6<AT3d`@NhOFYqJ3ly@*K at 5Efd@oyr>W&z88TSJ))
zaDgTo8??7UtDPSIggacop8{xdW^F4m#=p9Ni5yqw0UO}Q5y%3V1yI!1TI1l46?UdP
zh;DHe8^$m{B|tv(y0Fi{{KDo1TwuceTy%a118BE#5dP8R^NzuvH2xkY8e0NW7x0V!
z^g>9 at f4nYuO)O5E2>fNrzmd;BxFx?<>TD=UCE)WfFc9!%E^q-Kor4kWnWj6#nULR7
zmdZqc_)-1y1N at JIzx~2mvoYZp{vkge{^iZUe+(OHI;wVXu>Qbc{Ydz0B<!o~**33w
z6JdW=#NZe575+8-q1F8%?v=KS)H!mWdv%v|lybp}wW}?VUFSl+tXOHUg2P^-eYHe;
z4ESxi3X%!hUSjL*Rq^5Xv4?y!%Js%Sl^l$czKi at ei09wAfPN$VLq74Jr{%fk0&O97
z^@>@khia!4JaGZ7_NWBX1uvTdT(#3&fWipyGYdEu;0s)OtMXo2YdrpwWnYQab11w(
zd(do&)`uU_B4+R#$*}GCXE5>pJ1_&@O$X)+qsgE4 at Ld@1Lq0CxlP`HkaODg5DfkQg
z{wd{>1*A{nAJ&m?nJ?AO=CXA7mttmdvITr50*`#fUZjpP5BBX?DBZAcD^F{yNNXu0
z|NTDx$AEvG$A2vHtMb>#5Bx2sR$wZ7eC31qIX>Jh at DF?NA6eFPcv<7&rH%U+*Y8_g
zr?SU`AM!ELJVE%Uhu2Iu@<S{8xIdIzw76QGJEI}L6!O7d$oEd2q8m*P-l1qCYgM&*
zF4|k%4g_sks1;SOhQgsO$C+c^@o()4R>>I+{}}P#m-ps19h%;n3poA}LKyJ#-_eyi
zt+HoQ-*i4Ih$I*OW2tUVf(3aiU;+uiSR#N5V$D=`SNTl^R#BnB67oqoA)nk+O!=oi
zV at p)<&%hRNY2yKY(?SNbr2}#N$9aT(YMk?3#=Lt%zQC{DL6&O-$!GD)mb!Ra*~iE?
z_`{TawDJ?t%8$3UB_$nM)wLyEBOiCb7tlGa0iDwokwr<??mI>Hr<pHwM=~$1Z;#nX
zUl<#H<^Mb3SN=uwkA&ZXzeRq9zX|vcEp0rwv~lmEx;=~PcFeCK@<aYsg at 3~=G*5)E
zubKz(@5A4#@b?h^%N_Z#?T2#4g176|RVj^maJ8V#zXXc&&SH|rYt*6OSwvg1gI}1h
zFW?<#?9U>GkI6rhJ~#zPdaEvABBvvg#Y`>yYa)OPSgFUVJq;ykxB&lIt<Dpi0{lFe
zrX8>Q1 at gTHc-{I(-5yjd{^JFNP+3UTxEhz+!hb-_c;y<FZq>Nr_U8t_O$vx2^8(0s
z at DuQT$R#_DGd_iO{|hAGJ9Fd{`Nxd;9{hotC*<3Xbw at t>A2o>huR#zpC*~#87A9eJ
zMOZRRT1LJ}oz6(6U>_0ejeOpL{0^A~QrpDRV(>dhP%rpS_}8_cUDb+7!AC6?`Mu!Z
zG75eP{v+UD=D~kpN#lXRhW&#Ly9VlZ4b*O(E0JF{kHC-SSu;JXf`_mllCTf?+#J_Y
z$}K7?b-cYNlD+ypIfQYKc at Z`y#kCKi)>AJ;V?wc+pjZXWQlGcL4&G+=j>Fy!_>_+<
zla13qar{dPpl1A|?OQ7{9sdl3f9-9PYLD<Q?QKp4c?}PKhqLCn;sVwK$<w(2Iv at CP
z0XBo%;*r-#;8!(K+92mjnz#VL*-A9_v;rnii~lBs<VpUk8G-R1gx`6D(auNX at 4d~&
zC at 3?&#w=-qgniRIJjFM))xrK+M?QbQ9aloN-<{P!so(4ERPup8oHLc)PM>^f?;+uJ
z0UyYTZ^3|%?C*m7P&yZK8TRceemMEl=fC69`k0M|pLZ^(8T`t>x_~6SDtlt^!+#5!
zM`Vwue40J at hmbvD7WsjH{~*?|Z*jxk#SOr}Wo~s0e$hPPRsBXj7p5b4<O&rdf4-FE
zrR$!gm4*Zh<4%EC;%Q;lKy`X!^uQX=<f&BiH1cW7x6WiakS$>59XbWXdjb5%xd8lk
z>IyF|0Q}DQ+u+|^z*RfV1w8&m(@M_|Dv0=x$Tvx#L0(ECHU&UFMz!45a4o&{;=fJ-
zhMY+bD{PvWv2vwhPtnE(!CAmLf{_f{nB(7tecmzh`P5+_9N<Jj^7(tL&&SB;De&u2
zw03R at NAwu^QugsHKgd6 at x3UkL7M1*DNqDul$C2O0^cu>rfKS2;_C$NKU7|g*-;@uU
z-)>sxmM+e`eRNZondATB`VO&mBg}(;wM2d&e)w;V3;vL=@C*L|_=W!?W5K^~P{_x2
zET{$k&2y?Y&93spet1=%!0*WC{Cr|Q%TnaFnzu?+CzyjA`dRwKtVy^ejWtuDNE1oQ
zDK;Sd1`QyAlPBqC&~OmjkP_ox`}55g+($MA1SSHjZN~G at 6kz;&Nv`h#{3R?<VphAh
z-exxi$eNem!Aq@!yiZm?{j-kE1*F;!`8EqE|6Y=-M<r-^lm1NlDy5!@nHrB}sam&p
zVV_w5_}xoO2YC8;-~Q0uKO2AV?YuO$ZD3BpN0|F42EVqw at dua>jwWB=_sJKj at 14x1
z*em&zeIOs~jeJxP<XgfE`7G)B<Y%;LdDB((t;q8|*mI=6T|DjhXK>ZGI2X9Et^+#@
z{K`Mro1GT^#RX2OdGJf{Z;8P_4E)Uo{~?L|O=y0L{QCwQA%Bm;zkPn~w)wRiXIE{Q
zRkd2eepm$$S4Ed`elktSD)K49=OVnB-4N2yZi0cTxK%<>2-XbD0SLAwoc>;Rf>1eB
zk4WQq92$wmw5bx8q2wqr*{{HuQ{WeDJh$zK-V~rN;NWLqbA(MU(z at m=BAZ`a7GN_1
zF5rqh{4VE)TI!Te6)9!w@;&66 at i%L=N74buf3Va;{10XUmf?yE`20(eM;q0wr0E0<
zpn6`Qg?g9=exA$%ZX$4w0Q1<xiZ|bg at e<mBT*tTZQSj4AI7pz|lRv=B^>(_(HY49A
zHCgS|3n>tF#C&R=+(`udm?NLG7qd=gE%l_j3TIOZUCpU9HZ)6NQ;cYD6&{ZCZ=^I-
zl8i49?Hh{{c}L at aLWA7Eo<P`tbW=BWHQvM>Y!-;YzuF_;<6q!!JtZb#Un0K;zwmzy
z@;&&Qec1#2O#=UtMhE})1w#JTd9_>S)vTXYwQgqR%Kk9-M00HxM`+TG#)7OVoOY(O
zaHjklC{7{wfm=X=SQd<Q8+ck>3C9=E7A2QM(c(q#E<G(YblLW8Hn+-ofU<coLrziV
zEKNO8iUxag1bl&?W-dT~g7NRXAP7HWW8QfI1AB+3?*h`#Z*qvIO)(CB{&+V%S*hP#
z0Qf2OdoG}DKUNFE1;h(ROaXK?ds(o9-=+Xs$fUyKH&~jOhgd|5G0c-iD=FP5_7C6l
zGt4n>gYowX_82eC3*6J at 1^1Gl2KHhPh`B~Mk9_~M69m8YwgrymlyiG*ZzK26VMe}Q
z$TbPUBT`?nhkSOg#I0)4!_ZVpC%?4x0J+}MmBb~ac4HCmw5sw!@I!uGK|&CFaRl*&
zL<j%lTYIrMFSxR)`^v^{KmNC!UELNJ{1tw20muJw3H~j|hFb#gH~Wzv_?vwA8}}?~
z*uJ37;NLt~;9onl67muG=p5P)Ox{zmVWtCnO1n^m{N`dTvQch`;8t|_<ZdiBOmQ*R
z^oAl}=G-UZKapRyb;y}xlQR>><)%z5%9zTD9~|+)r{)Em9KsO_7$++5jnaOgi%__L
z?n9UD=Vo#6$MHX=7XZI}nf7zy5yrop1 at K%`XoPoN at a2dqS;uD<7&Qg3laV_hME}Eo
z&;_)mnI&Cs=d5{wb<_kq%_JcE38~|M+&#BFc-K!c2BX8ic?9q~FL1Q0cibT#-AmTs
zMSCOPB0o=N9NMIrfP%&!=6c)sQw4k7%+B9$@LSna)lRI`Y2?d)eOc0_L|}dUDU^DQ
ze8ZkQN%gL}sV>@sy}O4R at -5mM_SJb)YSe1;r(9a!i8<^a-`Z!6V7>tV2ERSeuj at F!
zR!o$SiXY?u<O=w2CHQ;r`}`jnYCb#!{LLzR#)f~(yjtL2H?xYu4%efz_Yj3o2Lfdr
zO=oB=&f??*PD|!)Anu0astB%!8|tgVmi1O~C8&d+TXB2q3ONIlGXS~njq6T0*`5on
zaDnWk2|39V^HL|3=Ol8(8OMD%FJNCe$0 at kEz`TGXcW^5VAta_}at6I182^ob_jKL?
z_L5fnrt^Z#FK!mV3*xGsxB&cHISBn at 1%E`HE%?S|0n*Q=SAPN$Ju{T|Sy%E3`&!#~
zg?-2WLwEo5A(+4SwmANS;)gN(3;8-PI2W+F0R9=+*nqcy at 5U1L{eFIPM!diV>67ob
z-kvz}Y4SIz!yJdmugIDr*z2Z6CVH#w8~N6>5BXqUSD3`Lq+DHOw=_1Eh|VFam5WMa
zml-i5NT{zXm}boLtj(W_H5MgckF04oyExJdu5Ilz^QVB$^Xo8y{}HuwYdg-Z5j(r4
zUEzoSR*C!`{4ECmVc=iZtg?s5--PVhv$%2hqDCVB*7<e7zh-)5Reyv_5=n1qJeKoA
z>hpo0(j^@TT#381C%jBdF2>S}5i7VVg-ap^+AD0UEJ2&-O{=gRiLCH*05b4%?}J>v
zS&?0ylSJ^(N}7<DDvl80ni8%rk%RuYxH*f%(`+KJynr9Y86(=0EXS`o{^MK#{vGh&
zHQ;OT1u_V89MeTS$>7Xb!5qauH6L*Ss@%5Jg$vk%FD at X3pe*mkAFtZ)pNC9#X?+D+
z-q&W!ad#V;C=<fIE8qzH_ueL6aF2KaLdf8^C(P at -@RJAc5_2wq7nt$ReRuqbCyw9(
zzWpMewz9_4fOk*Gw+<ip$8wV%)|l_Db1|tI`BZ+4d=o!b-iLh3`;Pnw#m{`|{}%A4
zN&MIQNez4MGm>aul!zmMeIV2e^L1Fk)TZKursBl5vSco&b^_+yns#US!j(-uF&Eg_
zec8858 at q%2pB4T)&a7 at fjjd`wwW|H(s`jJ9Ek}l14iB~X at HZb=D)8?eY%=(_EvVZx
zrv{zBqAxVu8zRFUAjy?x<6 at 3S<5t9>-tfxlRl|Li%d!4ST!8E0I53%`GTAu}Zv<6<
zMDQS8x~uacAA03foQf<t09>xY&F!o%Xs^oWcIK+0^iW<(VaC+V#0hvoZptKFK&~>E
z`=I5XP(448t2rf)z@(HUsc{YmPvHV)|1JIzX_QROFKng&dt2=al=^jds_z0gg6-q8
zo(He(&EMy1E&%^l3pMyz<fVkdI<FO2th{N<TYhbyB`wk94t^YgDZpGn;MYVzUEmI0
zKJ1GklST%=O$Ut49Ui>%C(d8|-y%C)n0LV5LcPhJ82qyOKx3OUHV4a|R_cd&Ti&Y3
zri()w+c3zd&RLzGfbuc&xsa5XkgoxMT6La~Uz0zLmqdHR-frn7)PsF}Apu{Q7wikf
z>I<eh?B!Ow5VzW;K`$}fc>x3G1qAjB>$`A-%h*OS;1}D_eNoMWU-<7hy}ASVh5wc9
zCswu}U(t4KMcdKkZAXS%4-dB*{5u!cZy%^f=TqTP_`|EFS1#$2`w+PmZbg6PaBpPC
z;@0(Z>NYQE+%UIc)r{&@Gina5?2Sg>iGF({`p)U7_rGubf&Kp%{`}IB=v#;8wU*1-
z-ExC7$6aP}*KKPgue+|eIh at y6kz1ObSd^KNkuW}O+Bkdxr{G>r?gPaIG##M*hIi-~
z_o_p7-VU2kWH*YxGX;!|XInVaX~H|7mNDnHnd!Yn+|?+HYp&E!wV#@mRr{UD_cw8P
zyP3=djC0QgV)0)l0zRVWlU%@oWbjLoQ=2MzN<&VdnCVoy6>V?<__svBI at aLd<^rBZ
zK2LymoE!P}QuV)Vc*OWE^!B^<eqVZVyp_d&X>W5aoveA8!=m$TV~Z{C>hhM5PkUQ{
zd^w*7@@oq at s7f5c1$-O<?1}a!_%*9dB;Z%)PSI%3>@bzW4%k=cPUcOpZ`Nq<-{hFq
zQJw<%{Z*M<V|sN<KX!gy*ZK8b&~8ZE^W at 4_9kdhP6@K{dd1PJZxwT?vu{E7%6n<zw
zzM}Qm^46ovTLIpJ|Dk0q2bZ-RSlYaQN%P*p<~@T=+Xosp&#hf2d2ZF3nN^$S)vupZ
zyLo=Yj>RoUR`ncP-FJLV|DhG#PaRw$z(@ZW{q(}Cr&oS{b9eNY7owj&8vXG6f4z0?
zgQrh^^5mY=TNXZZYSXWtIr-M(hkp6Y>Cav|7mfZZ8vU<m^!?ACIk=!b6v|5`!Z(F-
zfxo?~uql++6wWKnNiNDtgnzuCx;TRy&$$w=t|S8?<hej;y3|M|{&UTuoH09^e_SBY
zuFuxR81 at c+_;;>h>s<Ck+tAW%jm at sN-(0}zJT?pX{3kjUWYvC_y6Eb()h_s_qC$1u
z%!>RT{K~&`0jJDmpouWGP~)E`E-)H?_=k1~xBV<OcFgmW&1mmuz{-N_sW2a8CNi&d
z?LFqLw$vqAyuZ9_G2fBT!mcH}H3f-Pc at pq35&4YeCFD!|ug(+03*xZ1P!IEneBys|
z2`VV5y*#C*G^y1$xw_Y^GJQr(=99bUJhf-;le=a=zJ2BsJ7-?oHl25_Zkc{*Q!j>7
z5Zkdw)^(X(+}Lw*L(c`Z^Xt3Mtm!<xy7QC-|BjQZI*tnbt%rwN4-FaoE&G?Y>{`^g
zb7A9-g$?k(b5YZtC9V61It~nVoL)cu{Fd1#*7jfAHuvu@?TvnVDf-p*8%I~~9_l{6
zcE*Km^RDk*^z4ykubf)>2VCIoQ_<gEjedOTPp_Q(=8ZGa=<lP^x1-SyqtRbSqrZ(t
zKmOY<Zoc@~iO=7<9*us+tnizghw93*;J>Y^u(h%P_?yG|wPiWQSxITr#%Co>EYC~f
z3-A#xv5oOx;_;6n`VRhM(cTfxz;?3RliZnsl~QfNR|S<sezG}h=_j_swi!B~>A(^J
z%X6*TX^s5^M%&op75x2%ANo0Uqi*aJ9oK1N4VjRs!Pz@<L{<Ux1Rm>Zu;l=&h~fea
zm<4QIfN%Hrt=wmXL;grv<?nWR7}?|P3vja!0|!6YyO{6QuYB^U^IOb!6 at Gjnl+DK8
zX^0;Q_(DG8Y23yh4EQq6pBB!ZgbP&WOvb8mCx^2pMzSYWW>12AEA=?$(fOD#U&-yg
za)B>4lRLlk+OH>e&AzdF&eMD6-r6_s+5Pix?w$Mi_8Bi7Uijw8!M9H>dH3|v56%re
zv1<-r_Sp8BS2p)w*wA}<bN^%8W<0uW#-&Yt7qN|f7dG~t-_ZLAw!Zh=`rfnadQPnB
zI<ma|@NoN~;r1gdI*+gFKDD;*<l4RqTV_AGZ_$<Q^KR^49F2bQhnsr|@2{L$^WK$h
zFP_<Oe%G>n>ldw=+k9}<^s}4iUfeeS>dpl(o>=kGqg%dwZvQ{uI{DAHPe<Q-<Uij!
zAC11}OCYq+-=onl)e%0v{>YIxZ(aV?E05`?ul at 1*y4tdA_;0Ad5sKQXi>phr(-S77
zOdVI8ox~JStNe4ziMjykfLtLV=k1KazZ^f#IpmnddE-AwK4UxBB#wVus?dUeis at V7
zUtJ(D3sCJzL<t-GJl)<FQTwA-yMP~)W at cUFrNM><GwW at zCuCY3#x;48pGsv?5Ac!R
zHf?Xl5vHo)0_HgG+szAjlP$o;xphs*Q}@5vn=$frp&9t;JB{5*r0osB at 0!`HtHGN2
z%d;j^?TI7b0zTwdWKFUPPeeGMQkgrYJYzyd<^;pum<M|)>EunR%9%_(N8`Kz?_pn=
zVLD$0PljF5&h?IF)2lPCZk_SuE|~(J-aGHszWL7{nE%GfC9fS@{KkpF7Y;3W=k(Hd
z&n)}RmDQg<y5`rHSN-AfwO?Fc_s1vJe|>B7x6f^RYVU$4cF%j};KEx67Cv`q at y-1M
zPwyMJzI*<SeFHZSEW%zqHuT()r7s*?_RB{%3$g!s{pQgX- at df>H`g|OcxmlNS2q0R
z`TgI#a^&4h8$W)0=Q~%ny`U~IJhx-#((V%*=A2wV>*DtLPaj(L_Js|<dusPLuO9pA
z`9sl9m<6u>`BkQXkD}54RL=jZ&u^m9PosZ%<%x?YUVZA~>rY)^5{Q2J<ezVD4Hcv{
zM+zE4dGKFXo?DWgoS8JKAS0o&D1$7ZrZ~fwK$)x^DF2cX2jf2}wvq4Pw=>BFe!t00
zSB>QWH+#qGoU*d4JrB0p#Zwhd?2JB-f6a5f-sX`mV5u%oYk0FFKc!CN-!e@~j>5n1
z0ssk_dWM6X+kk<+kgo^$*j5)_T5qR$0Z;P+2fuSA*EPpGu6=^JCWgHq at Qr-79ss{c
z9iM!GKZ7?pz|GstLbVfj;QBcuzntwYS(78VqySUGWWkC(<cG5-6Z|1xv7cCxIT7*=
zdn at d~ypKJrT^{r8<;l=)))P+iXs^qjRVOz*Vl%2UF&m#*+kJ6U|F!Kiae<qA=e=-v
z;p-=symEB$YsUxQII-l_V~c-zY2~jjulnrqb-2LqudV&V<Lkb-z8?7h>-p``S9V9=
z+8=%YaP))2(GQPAe{odoqodJZos52RGWsFo<IxX}zj}P|`9lleIz9C9<u%wxm)895
z`sVj9tbXT_RlmNr`5$i_i at tLTuwOg3{^he9-ng{=v4g9J=XR}}RljMVW%shqvzzB!
z**U-*@!K1_KfARb2^9U!wdki${MWmep1ycA8vUm~5qSUq{PBI4PwajC?12}qosNF>
zO7xrOHqL86`80;}+iFTGi?garbMn%s<)<fv^3y5{xyRX)Kus00b_V}e5rTi}KU|~;
z{M{P%J@{+$fgf|Idj%p}DUcgmC>iCtr7o-XyRJ at i1iS$9ow4R?@CRKWSnaoP%2JUl
z^&9y-ZJCv)mjX<>&w8HO$qu at 92tO`h=l1BA#kReO3+U!A=LJZ2+x9LVH0>dt#=kvH
zVj21Jm8$dY*HMN->X?m5zOC(AlUq^R1mG{rWKx(2`DGasA-_CxQXt?9_Tj8a<r#u~
zC~IPQ#&`?$RCNUV+{vw_$<%YmZPEEHC5h;Km<RZt2$t?>H_m6*<)HSt&o|DFuk1Ln
zs`HY#z^v;#XTN-O at mr^sy>n*hg+l``9a;Fw(M9i{8~*L1YrlAM<6m!W{rrgyzrVKb
zs~elXcw+ruZf=ggzBl^DK5>D!4u}_g4DCmv9~>2X`(X6l!_jw+Jhpw-vj+#BJGAim
zLyO)zGyLlDr5|5j`_bjKzj}1TZy(?M$zz*-eQk at n!09iaKlH07_q=p=!|Un-+g8rs
zv7~eL?E1BH8nz6yoZ2w!sY65WUf%NQ)BB<yUW$Ht{qOHy`1ajP- at K3DAMwBI=MG#y
zcj$?82VT5(>h&9EqtU<q;nfQ at Wx1VoWu0~9jgi8JaA9Wh<h=BRvfPwNVY)AYz~1=J
z;^stF5Lim^;P-=nKc!a>eq9t(;9Yf;0;ySG&6m9`vaykEO4joe^a8iN%e=s)y10Pu
z;q{NZ(aul0`VB2gh`L))&Iu9tZKcUSMbPbe;WS#Xl*1gRK7<Q+U&a^v9YHoDxNVO%
z7r?WtBN^UfKKUABo~LZF at ySQ+k0gJxt#jG(F68GYk1L|RKW&1MUrLjYPd-(Bl|54l
z_#wd_onzQfFziL==TOg?Oq>V%hQetW%y(3zK)YqN(<Q3s%pM6jI^Qurm;0=Jvo}w!
z?lKp6blc2pJ7zt5VBqDWgRdT6qAsxTr6Y^pJh|lKiz`1>7x?V)^|-)aZf^Pd*4Dp0
zyX~JZ?TWs<OJ;#r_e9 at 2EcUBY67v~+a4h=f!9P5;gIwUnBZDs=8+_&X68Qh%{Hj+^
zEXDAG-#xMA4>z`d{`AgYi3=Q$zJKm7FCY8#=7E>aZhYyHEl-`;cyi~;6YFQ~Ti&yO
zdC#t;9Y<DAzj1Krg_CQZKC=9mPwe^n^)vr`|MEXRc=X#3uSb9Tr0)ZNV{rb+&c{ye
zdFImLXD=WA;_WA+U%mY6$G6m#=e5_Awp5i=mSpFpC+4OnkPBDjr%D#UEuR#NDzdpM
zS{Kf8xKzmT-zTT>7Xm-)%eE-Yx&wU?wk{0w0PmKDZM9d*q_NHiJH1wR>UsS8y{TS@
zzntXYr2_)LHg?)JcBTNt0|r;{4{20Xls(xtZe>Q;#t~?HGY;KBwYUK0pJe5Efnm?n
zk#7U|Pn#lVc-nMe*c;?-%unN_6o7Zwi at W(5F7PACkY|*qy!HmavB8l~*k=|X<}3LU
z|B3m?9uxdvPgX0~XHF#YgS|<8LOmsY3H1`^lT74yR-_8^Qp1r8tR3MDxUqe1L++S1
zt2T>Id6EcV%onHE_TU1i*K`9asq3x%3tl|3_>GgxkSojuuO1ux;E@&Yo*jPw-16T(
zy6$(^)_r+nles|j<=xRYEb<?bX#dWk=)2fqdGq!C(bx8U{oKy2^J|Z-?09thtQ&jg
zJ-v7SE610<b!Pbo7goJ?V%Y~5R=;<C6)y1AGrRuu?A|YK?*7yB2fls%#NXdK^W}@j
zUp>F&+0&b at A6>tF#oYI=Zhhw1imSU9U*5Io<c8T7whugYc*U(_t6n;@;nQc1eEZI&
zuiw7(m$$F}?Zc<U1^)Sq_n*6RaL0xx&mFjNZr^LyPk#99`RL!C|NBQz)t2YC*OqnG
zSJaf{6=o%8Buyp-fd8r at R)KSxL$YMn9Li}4vv4f at _tX;Y3#T^}&uA<j4S%pT$gS|&
zq2;zfz!NXP?C56caMm4OF)t|Qin`!#cRAZOsDjJ|1b%H2mJK6;EnNmbiGX$f`{#D*
zwnyFh=<%;pfO&yU1d;_f(_EPIJTY?w9eZa1*-tPpu!C at U+RkDpbr=}=2EQZU>*`76
zCf{)q_5<V-|4Y&)gmYNxmDU9d_$u`$$6O$5qG3+~6Z4BXvSQm?nc-d94)!BCA85{>
z$2FZJ&1Jg``l~WTAgNh`uy;wbbAdDKdLG?2>*oFi#OHU;E`Rg%(Ca6b{^G)_k1wtM
z<no$dUtOy%u>P~hH+=of_J6#z`=7YLD|@1E9*DkoB>K^b==(>--aZt4>)=0M+56{b
zcF at d8{ga=M3y>yX-#LdL{=$*PZ=YTM_SqGr0B at dI{>9TfKD)6U7x>fj`~UR(!N0zI
z^iMAx`{Rqp- at Ls2spIQ$f&J?jMSp$uH#c^_aem`-CstqFvFO_Vp_|86U*5gs`oR^S
zJbn19*Uo+O?$y74^yIg{c<OhrKX&!RuCLyC;?l8Q&s{ls^ZbD~Z=8PS+>XD!bz#@C
zuD+J4_S*9LP(ejuR#wW?+_b4-(LeM^<TT4-na4jX$emUB at Ne+XXe^nDHI>X#bL2Ci
z^@tukY)*5j9a`?-cRdeolb3S@&hR%m#1j{Avj8i<a at 2{R3tKO@)cnl_e041oK_VB1
zO3$#t?_59+YL<yWOanFa+L2ZWcz-Sk at UQoCQ4s=uo|y^a2xi_7 at h{}%mpbz09CA5L
z#kQMC8P>wS>tQC(<!?6ffuERPm@=NQZ{%Bfv$h}+ at +sz1+X-S%<kwIy%y(3z66dMp
zP{Wa;Wo<U*0{gs1?xo6J*itaBF)z+c^Q#=n=BXKh<pm?)M;h&4)_QQLZQs(C6RW#V
zt?70yz%20k$z`~}+h>M9xw6(=;G>JHe)H(M&!5=z&GS3IePP$%U)-%;uqXP;Uh#ro
zo{D~WJo at gD=o<&A=YRd&Zcb*Pji37ev6Y=?*HIwtyRvoW6T9Z#+CT8>iDkIJ$5+<>
z{>iPMJi77ATf6`8^sdiu?)mEZgP{KTbBBNb?2&gK-F^M=np<bK9 at s#!^quHu*S~%9
z^aqdac<a*ECl0N6;mpPxN7r0Gyy}h1yFR&j?3?!<`}*B$fBWEx&)>ZE!Lt`$eEiI_
z7Y|%Nz30}218+Tk<n<>`zi at g(XML!%AygkKH2(855{&<rNWSu)*H)R=UYXZXmET#N
z-!BcN1pgA at --jO;V3k=+nTPy^9U-yKkU4@~U}R5b4O{%RO^%L#2GW4-dw~^&<WwK;
zY|mIO%oHF^&a%BlH%W0Y0{h(M7<}n`<0Co47Sm&Ft at GbbY&Lo=bUPRD`L{cX<YqcI
z5$JxI*hO``G*<$9uf@*yKKTQLe9!e9`TQ|f;emXY<U&5B9*Ufn?aIDI*}auWC6j<J
z8LkQ*ggpaRatZaud}k;PZQoaw!744x!+DT!n8)Tf<pmAdPlk&jieTPb<kHkY69nO(
z_>Y<Ru}OplDVC*nENsLDjx6sux1sOy)|pqg&7!bLpeAocx4(aWB`)yMrPaT at yyh1d
zWjgr!*&Tm-Zs%WaZU6Sg-AJ8(ytF6!{;}vA2S|7+`26GLz0p?>eEZVAPafOM6<VzJ
z?pxZ53mh75JGr_W7kGOA0L9W5jtstacExY5ZT{oUoqu|E54F%QpWXY*Yg>PLZTlae
zKlI6yd*6R-*Bh61+&Z=C>cO?@0$)X=e~$j~X7s%ae|`Pz>le4bcy0@;z!!E8J$rWR
z%NKWjeCy<|UpV*CGiN@$b>^)nPd$I- at QaU~yl`yy(S6&<h at ZQ7pe|I{)evs1EGf&+
zNKcyb9sK9RzXkv427hD8oR+e=t>u`(KhP1vz<#hhf&stTtfpeI#$x9MtP#*qYFoW*
zd)f#u5Esa>l`p9XsSDWRFG9#$@FIAoPPBcFtO!^+)H*-S3(N%^kaz)yT*W2=e-`*I
zFL3*1f-d00A2<tLkH+OFEjuaNejUHs{z!5b-J37j3WZIoofP at C$jN>d(fLAtfsyY8
z{D|;B8Ice6?d7S0Jv}+$G-!wU{_0E^hWYteQyw?<%x}u)xquUl1BTi+jF}z4K4!YY
z3-<gFew6$`H8c-CrC-d~i)|lh+&aI0o4UZ(1 at z}M99`LYdCSblch1EHDC|FbaM2s5
zhTeN*CA$3=7gtljeE00~-#@<bvnMuv{^aIwp5H~Zmze)1vIjdX_S%8}d~px_12zXT
z(9e$xY?)uTdvO!XVVAbdytZ>LD+PGL^M?oDyRhc>Pj36-=FYF4+4IfIhyL>7!7raX
z at S7)h|L*2~b%EV4pWk}x^k!V(=$2(`mduVue<wQs^PAtkbK&C~hhD$D>+!>DFYH-<
z_28Q8$2L87WW#e8_Pl)M;PaRE-+E;4lV^56c5>(WLtD-t-ulf4*CQplU5(+I3iMBQ
zX3Er}tR$`fWD);c!i4<-3;x};h44SCxokGpQWk{Yk-xArJlI_+)>FB}w*|DMnhWR?
zFR*0-YpAnT;Gh?{{cGj|H2)a<c9 at ULg-r-?wk=-ZmIIs%=wZ%shO?dU!@$nG#S7FC
zBwY=f$swM|d%L}hZv=iTsFF>aM at T}UW~lQsfuD&+Oi$M0k8$wx2gkY^vZq2m#&RB2
zP1FwEn{+JK7bVfdP?bwzlN$acRrTn3VZM(bUzanzI%~Qnv!L$L-ki at Z%-DkFd@~b2
z1aQGvNd{)eGv6*hM14nNetLH#U762}!@j37qbHKlU!AqGKeB0F-4<M6LBsZi;tROI
zp26lvHuhiHHtYKCdDnK#dGRO(oF%vbMVn8qu6zHHmA|~Q_VXKCQ22j+cIVg6?ee_f
zoulFfZyx&RtNWwx9EJa{pWpl0Q#(0haJVP5qA$E<UfqFZZO2x1p|x;<r}hnCFCQOz
z_xzd<FR%aY6Wjjy%$`3zxBrW0_OaCU#d8NKhyL=(eQ#aa@$&g?R}ZXuWcTu8TZgu<
zUI_i(%Gbw_|Ki4>=g)1sa$wEAwet^eT6|#rqGMZ^o!Gwo%8^Z%4sCqw__nkA)*afq
z{J`d+PoF(jUYOO>TvZ<~D$UO%{ugB>M+!4o8g7l`w^tQ(*A{iw6n57X_SKj4H<Sqf
z0)P1&jr<EV<_~m)Az$F{89_cSu&65x|Jc0NGK`H0h$Yqt%mrj3U~`Rk$R`ck{*^}F
zZe=;-nd*=fMg0RG><$adh;ad%0 at MXOFAx{-w*XL?0aT}j<fy|`Hw$<fLC^~<w{=gX
z5eb66luH<md3$=yEA}?m at HZgLtSbZZ@mX85*1cL%$YPC~gIsvhqR+k+IdZmG+VW{s
zX8R#~Z(GY!y29y1=2=pfr+|}9Cd>V6pgy2a8!*OTp48Qw7pgKXZ#AAR_zU(mSpZM6
zz&wJ1Jw9b-ah|7R9_;(7u*?~?*~|NA#f+?*RkLAE%~o7spwWB*7dW-H=knHB7dOvf
zI=HcS!D}an-Z(w{{`pl>x=~;F?X``6y0znvPi?~szPh>nZ_n?JzJBnV7xw)96-q#d
z;6M7tk*{Ce|K6pI957C+=eB{yLn5)JpI+B at W_{m@)jc=%4zO7K%%Q<|9$E9jrS-qL
zzU`Zr4}baW{y*H>_oo*Q|JR#m{_x!453cQg at 7kVs9^3oq!PRGW3?YQJET1>0uRR*2
z)cGmRKc7B->c)vp$G0xsFgShj^p;fvy<3LoZW@}icm3eut-~jGt=Y3~aNDYZS1)c4
z7iD)fMrtbxi*wT@{%0q%E=FHaM>XUZb=MYm3H-&tKi%WM9R86#3V+za5C1Oa+hA#L
z)#5I`paL`gdCqPsv1FM_slRaG-DHg;u+acBImAR at JCyaba}`4B1-=V#lD{A~rVChF
zYEPRBymY|d3v3wy5#G{USIL2P^9b_-Jje#_o>QZpCy6ajqJ4mT at 7z%&nGe4#YSZ9H
zIz#IwolcxO$Ubz=VPHe9?8DWb{I;?bu%BI at 3-BP#RpZ>$U{40z$c7<%@C!_&i&}S>
zFfK^*EkKLEKt4z_eNYiH>_;$PMHYZ5^OX|kede>|^zWK%Gj4oXIlXdeSH+6{2z;)e
zU9)jcEtKK{<ORD2n~$#SI=!y<!sZz!T3$T5<mKa3?<IBp at ZuWQu<(TsFRuQ at r8RiL
zmrrm1^5*vFYX>18`{!#1|Mud(f4p}1&(H6pfnh~oWc}>gU4t#hR`;CUF#Ynj*;lsD
zxw>QS6MF|}khpbl at YPc*-n+Q|i(7j>ySaxc;P*H8{`SV6KRkPga_H}$J^HJs55I9`
z*ISS6JG*O`2)}Q`;HpJ4qn}^@=kH$s>ci*I|4*OZcInWDC9~Rlnj*a|)${vWhUfRL
zT-d*2pnv_+Ih%&(y>WF9#s99x%9 at J8{H&C`jHJ at s)VlJV=7{j$Ra at LsXZ%a>NBPet
z@@w#4&>`dxXxO*lzoe&1thWm6%@%jDH!ZTbJ7NOKTwr!{jDK$*jXHug4&ef9w25;8
zcgSa~1=PRB!nr`;o|gp6M#+fb-%khZdW*@{AQx2irilFPV4QOV=Rvqnz>mDmW%iT(
zBc{E(gQYi5$(M$0xl~uyvJHL;ylm5E?;eLxaTE!s at ienb*WfQtAyCh4 at FYE#FLNE0
z-AIMtA%Ru(A{xfj3-HgZ&GDG8%|<Cv2vX+dsc}A|PlCCG`d*Lu%$`atqdTG>RSWPK
zpYpz4Vh;9pHY}GuteaD}W at gQBZ+KaE#ZXUZ)r_hQb86Sls@^<LTwvGY<|8Y*4h?sp
zST1g!`Ph!Rw+=3P>Dbbjk1u=k%!&^#toh{XhWE~|#tYs#xAGU4WL5X~{|{ep!QW<<
zrg?vmcblrZ3xei=Lxz|kW at eCW$&xGvlg!M_5K|I|IjJO-;#7*Mp{8M`d!}c$VRm+A
zw|8cD^8U{`k}6d*yZ&AM^rIu$6-n29pPSF)xxYaBPq+T}r(6H_$=1Jqy!CIN?)>Yg
z=l<&6T(6~=YG*{?%A|urxChIghbwJQ&h>tLaqx?4qY6K}Iq{nZ^S^z4>2Kdy`J2~Q
ze)q=OKfJf~ySF!g{TM at N`HOq2?_XcIvoW$Y)ww;>yE5K2*4z5*AD;aBlQ%xPwQ_Ez
zdts;*hS!wl)m0Q&bd~L{hE{uhLv2}oRngDhx=iNRtQGt}lNghemROd1MpvFgT^!0E
z{$u>uq~+tRD{$2n2>uJrUn=<TBY&s4>^sa?{8x^!@P(yctYSebF52vq0{>nhw*#>w
zDDPN`fS5`_YmC|j<eX>b+=@}RUU%4cytVKJ6zK7n*0{3v at e96V4k=|WuihL165+S%
zm76SnSIUkcxg3yA-!$;fQIvnvf2_8+kq2$_Pg3OPpNHonlX^+?-(l2I=1snvet)`F
z8PkCXFnEn2^Nd{6=Eb4>(c3t%Of6=PF;{FGsmxKxaNet^@dcng3LhIuz{mLp!TBUF
zu`ABl1caWKgy%n$`t7IAsKYwpJpTYicua9I7`7^1O~}M7nQEz_&4k_)`mIJ?l~XO6
z5oZNu`Qz?N>hq~pUhg$*^clAXjMQ*mopjuuYkXs^?Y*t8k1q86^3KFBZjKSd{P~R$
zq~NP-!#}+~{MYxVe*gO1|M*~C;_SbFe(t}&zy2>DZ2ZfITUa$?ja5sX_0&I~AF<wF
zYJI%k@$Poddpo_9gMM~(<g=@zU*Da^Ui#(zxvy?b{p!IYb#VkdzqmE`^VgPt_4w?U
z_f|f+y at bJkcXM=OqW$bd$Le at zPqU@3&6Sdz^!fdbjmeIY4yOtBXQvhCWt10YSC{5j
z6y+FeN*5-F3$s(r+6tabNjP1Uok}fGeR+<lI^SATK%0!YD%W0%@-Gnl*A_JEi=QJu
zL7p<mFZl1%`2)`CL5V(lr5|3WSO$dz|LY6<sR6QM{u&8HfWiqg-I~5hENY5{Y(Qgp
zi~r1vg#UQFFFb^zm?B>L<T)u&+W|pKl_QX80<kr4jJ4mY@!R%FaJb^w$`Khtw=0JG
zwY_ at ir~UK0l1f{stMF at lqXVdYk}VRnPKe3a3}}+WCpkbT4aJKcLe!n;C4>GrsZiMe
z)xsKS)MUV3Kj%%Q$)*yJq&P2>e5E41xcUi?STV!XT*k~Rrd<iB13HlfroA!q4ZwLN
z2x<x<SGBGNfX{g9hMX1SP1S4!+#n01?#l7TDmH>KcjbJ0-C~D!sZ)2h&%j1-e#CNR
z!f|WX{n}E?8`v%9`+j<TL`lKdx5vM at GQ_4pJm>3M<1(tb^3U(D|K+32KfSZ^-=3`h
z`Q5cYKf$Ws{^a`9a+iLkTfaGAx-#XuHQ)UBZ09 at Mz2K88BVXK@`270#XV=Dmad+-#
zcV>V6X!-M-Gfyv%zjtx$qw6#8>`pwrI!i?K;m-KA<^Hu%&*oI;;;?71&DP;=@VHDh
zRb^ux_J-QhvcjC~jMR+Oq at 0Y@yv)=FO(Bv}oSUw%E~zaqD9AcfnwM5rnq#cWH){&u
zzrD5)<!|?q->oh5cs0LZeut0w{myD=?`Qs?s~Ys%E1!q*2s%x|9cEO8oK_)@^c6)E
zUZ@(mOm)H$1#(D%oCPGhFXbVpA{UGl_&R^(N!GsTkXJc-k8u%Mu<r;0N*-3D&;7bx
zSv6dxgCLC@=`71LlGI5_-?~bnBNInH&bt9A=KKC_;^-Ofaa%}ap!xma9oe3n7=Xyr
zuga-U%u|)~S2LO8#7rA#-=@u+YcA*DLacqv6|-Qk;5?Lu^9T!&8eXVzh%JU$6(;g5
zBi$5%{e%}|uUPjz1+kg at hTowG&- at T&hKad|@}xF)B{3#Wu8%cpXtN!4R}VWyv*D1V
zf{kF%UdE0<6Rz43 at Q$%twgybwL*{eCmaRe4uC(D_TWUoLetv8G>)R7}ufMuG`PKE2
zpWdLbQ^a$Ab$9Al_on{%wje)&{eS*o^N&&l{`_R~@7`KJ+i$u&;k+{Gx;fW;b;^Bp
z+Wq=^*V|jYA6*)O{GVPOe}8wFiqKy at T>j~u`7dtI(H%g}>z#`e_s$NG6uYxNba!Lq
z>T>_mQ1jY&`|?QJbYBw&e}~&-(pJ?~m7PgRjEX!J7ZV+KI+C#eL|@D6=O=2)3b2JL
zin6oQlFIYbwPiUC)%guodA8a at M_r*)TjZ!y%D+%4|8`Ru=$58_kFB!TR_SHFr2UYq
zddQ^#{f^3hM->?GqOw;;L{&tnrJg|0HyHtc9kr^CptBP4$XpnMiM~k(bHa<HpZA<!
zZ~t#robOaGk%WTY&sqMFDn{fDlM*RC<2}_^>Ul98R~bnB%JZg<GI;!EmH$5^tuL<)
z#y<wZq&ZZyh;kkoqq_2w7^6g^1jZX}*ObUYd$NSBhGLHo{%9EcV4IOdVKK8iTI=%}
zanNZjBq~mjXUffio+WGwP#wZUY)N%FoL{kBvKl`c_A=5+j`0_#x2VG`SQk(ESgj6U
zmTdQqIELzi?Sk;)fGRcjm_fvtXQDN=JZ-?i6p`{CODRJY`fO$Wvfq5HvAV}x(%DeN
zjzCW?4Y}AYGp)6YojS<BGi2TzXyAqhu3K}BNWuGbX<Zupg_MFXu8w?pZG`);Z%_X8
z#@KIOn<WHFROf$wyhDWpZ7hF!Z{yGJZ&ArisoU062jpi9xHaEGtINIRwuft7A6y)H
zXJ_D}%VU(fq5QwRGfzd_CpTuFT$)7xzj1#2{>Ct5ey}rsbA9;yY|q(=cFKfM at 8jLB
zkxo}vquHvjHq at 5aRh3wE<vVkIND7 at b_tyK3wPg+?LXef0ky25R!KPr+6kz|L{N42>
zE?tpZSM1Ujx^;yuhLSc at S(mk<+gb_pzahU%GblMPnC})Cc5A$}cUBEN2N at B<9TpKG
z6$qkgPDO!~|I3wz8lXZzDkCiI|8I`^l@$>}39F(Ae+Wog{=V~YnHeI at a$bgMq;>~?
zr0DsZZ)<zuz&>x at C_A4&qO30%uE`U4p81mV)W?dUNz{j1tFjw)1;ocZ#uDK7l2nuc
z at t0en2ody&c{P;-C<<<D<%~G!X3BxJq*I^Ep%3GZV(cF=u2T|QSC9y+nO at F#L#3-Z
zu0l<F<0;nttcJkfVKu~7Y*z!9<nT$sb{rFi^~s_v-z+}Smyyz{FYp)&nJXd$Q=7*b
z%`Nr$9SzLb5#k^wFo=zSo3c at N)pSdZl!E&8J|hOqT8}~Q1vZ at 7*Vo!Vx;XfbH0D3t
z9Y7*Jz9hWbpWmAN)xDWt-JkixJ8S>)(f0rP^!#5wIZvJ2Uq0LYmrpMI at yYhzy|YQF
z&(qz(kFSirwcYn{z3ahR*XtX-?_C&vdTH#v-O;C)Cn$&e==$s at H|O8GJbh<v;O^O>
zdz&K!f-W!hZ%lMd^*E>d8vB|}{VkTBW^=nke`RIp#>&9M?Xlad{kK+n at 2>aXS?#^Q
z+KpV;4VsLU`0|2GT}7U`rU>P4uFiMV6*cNhAb(@M;D581{FUF3-(J~kuY&o4{65;l
z{9$(u7<5+s-+)J~d|_fi!ua=f2lz!mxxk|7{#(OKy=Oj(jIb{$Ovpvp=g$?0qO?)h
z5cPRojiCaorN}735!Z5%1+f_p;I*lgi>>|we?%Ui9gDd6*q)^LFCONzE1~MWv}d-G
zr7GK|$t5^OhyWL<(@gF|!RsR7C3RWK0p5`EjMyU45+iQSXrpGlsb;K6Gw2Yim8=j`
zUO66u+%7{4nefJ}GevdAorxp83efq2y&|Smk}Bp&ddKv6S<O?5>ReT;k(ehbhe^th
z^qZlt>R>5VjwR1rz*SEtYTb>TTFMAhV68D%4Jl~R<s%LreF0J+$uA6~A!p at 8lV-BH
zhRF;I9XdudFslJ6*cdQv4Vo`cIv=dGKU{5p?_A%L^Zg%R8vf$?*q7JGKfN;Y^_^+F
zTB16?d%Q$o6Bhvf|MN%Z*#-XF2j~9$bmt#GyztvMH>h^_^wvD;{k`);@0=Tabhh{L
z*1)5U{>NK`@9vJjcWLs;mFWjtBe43?eE0HD<H~UJY_Dr`y8F(?=);|fk8Ul0c6as5
z`)eOupL_S><l~)@TgyEcCR;8}w_cj at T$%N_jMYundcCGJBPF4xERRA^o3;eyZ>uYk
z%3qMbNng at ou0Zp*n at Df@G{3#7Pm*6UUl3lPv1Y^vTmWec{U=wHp7?BiUa+c;RxJbS
zij$~3M_foX2u=)0DG-Cu0nAiH72WYZ`yZDRS}J&XE at wo*ZJ9oxl~~v(eg&@7I2 at Mv
zR=J%zM^chpgr0bTxEGukBl2hkg6)d=#<C0w!tEL{Va%;9z|K*@0j at Yley9+E;J+_W
zz at 8|SgR6S9k<YDqq)`L;Cty))Ep)=b9&?q?HkET25d4SplIr425W#2JJ>mU`MCwo^
z4T-OQQ!$b)hGD{XHC4u6Ri&IMK2H>j-#1~(liIT|L1}2hW~0A@!WDKUAq8kEeIY{y
zG14&A*c7;LtuH_d7`%gxG+?h#QZO#1V6I&^-C8&65mK<+ZNQ#CH)6Xs)A-s-`-9bv
zH#WN8JJ(O^?njq~3I6}py;-Vy{`%1(fgReosBi;hc>n(Gv-GntvElFE-TK3mo!>lO
z|LX3-7q=J4`F?SC>Ej!7RQSMW)c%_nCSKney|X^>_}tjT?GYZny*u&#)tOIjE_`}x
zk$wS+<vzSN`_At8wfT<g3!S at Dg87>xt_zdRyHm{<r(3jDC3ZtiWpPenPFj6sp{1_G
zT32kXEppYDv>40X_3*!>wV|xTQVIDx%;nv-svdh4Y9I3VIjV--H2~WCnNM%dXj3gv
zj)2?_ggN8~A1v^@!+u}bUn8n&q at O$OS5C3U7cTI!R7n9>zIXrksGJ2zu673%f$_;s
zva;2ou`<rF&lThrLx@!gj`w^?m3PDY=Eac5%m4f&+JD4Y$coGcQ4pA66%+7aelE;!
zF%$!6Pkca`J$~}zC;|0x;SFITj<;whTC~$`_4AzuO2Otj^z)tiX^(cQwQi<O3wbcD
zCmSmlJXP1n3^=5`N8X74T?<Q04ng(rgUGw^yM2LTpHK_2RlpfRRN=W82~|u;R#dZN
zu<<U02v=rN*~|N43p0btY%(>3tUFC5SZiJ>V9b;*pD)WV1xg|?jpR)cI~S%AyV!`k
zda|WfycbX1VyAws&$KmU-5IuBoo=LK@%~EtYpWgaUl at A2JM_hkN$~T#v%k1I`{k|a
zuWn6qCBpObyYs(%utbFOH?OaL{hBE3{PH&5uE6KF=0CeN|JB_kfaU+;wV5ZEC!buN
zdV6>Ljh&H)n}ctj8)aC8*cUEMVjaDIWs1dX3xfQYXWOpKwJH9epJ+w|?ku&pI*iyq
z#DX-X`L_CsCR25zp`y`H)^4qCvsASh%i7Hq-L~pZYh}B+yu(rf`3Ho-BWOR`TsJ15
z<qHLh_FTt6vw-3}`@0{?B4R?LFF__gUclHoK69L6K4E{Eoaism<S21qUqB+bs+5`N
z!K4$-JCaW1%YY)Y at 0x;i$aSSQ<<)n%2HQO at 2G6p;s6Qf#@zA1TmS&<Tz!oE4n8Ysh
zq<ERs^C(6|es1h^{nSzcNXcu7BEOga#uDbtKzLMy(h>tsVIQ(BPI`3noyPet<3g8l
zx!1JPYhLXWSm`y<(7M=VSnf71bsGo+5 at 1~F5K{qfjvM(m2umze%s3K`3F!tI=@n+1
z5Oy!b;7T#CK<rb at E1+eSt|hriDXNPO4z?|^bBXmdsu`sei^^W=dl3OvsB$6K51vck
zl&g>(Ul4l%T1!3T%i_KlpGEEw-1E)i#h}@cnju%!cyrA}OYLN99fGjXsoxm1oEvrA
zTJX at ZxHDqEIp2D3x#P{Pz7H;qes~#-y}dK={_e<UH>SS6zwq__#joznfnVHT1fSlR
z{`AJo2UjNF-5pbSD(}(i0D9kA?gsbPg){qTYY6^R0*wgVKRa+?s#RfUym at D$`P at YF
zrP;O%Q!Vq|=G6ha)lh4xuQutba?+Ct0lAIUEoM!Vv9iff-eJ at 9I_r8IHNDQ7!A9+X
ztJbIaiERq<54mBum-!Q|+KE=(q=H8`<->SO-Gl_Yyn>ogs;+#V&jX=QkXd6P6e?dV
z`wQ^DM7&6ic2siVi<;&r(SWF8%lHrAS!G|T{l!0|0{a2 at jb!X+bqo_-naBbnfcRh%
zAZ65h<I?)c at 2JV62#QcxtFZ*~WAgwd0_c3D?cqFHVz{wZd at LT_OgkFh%Y4Yc*xjJW
zzt(47 at 3)*Cu+Yl4Ib>b$Gp+SCtn?U&t}l1i?GEav8p~lm!KmVNM%E`X$E+eJ0jgJt
zQT9m;=wM74RA;Oipi_@#CBbt!=#s7_f#NjQMH6dr8tdLg#$c8)04mE^PEC6bpvsFt
zH?V3z9*RqZFPv2(Ug68ysK^x$*~LhA@{}-f<txefu-)@ph&cuT1ek8q at r_TlYT4r!
zx(th5Mj92*kGZbTwcc6kxVzkOZp?Xp-23p(a>s-99`Mfj;rC^D=kuGhfX;XD`K>uZ
zJ?~$dpuL4Fiv8^iV-Ge49&Zo7wlQ#Hsq4yIJGimbeR-|}+}{}Fx;@@}cG$f<;5a+t
zUKwyM^x9^+%#&@#(U$t9e*1inwLx3i;%KnyH7I|QVpK=CjaBXTI*+Bg-Kyz#>$(N`
zYa#zolWwG0H`G|y>!|K?@Rn=&X2E!ij_=pYd>`kh+UnWa6=vG%CtJ0CVCX92hbysA
z;D5-CjF*a(L65ae?7XskS_z0ReO!qBiOa0y;`urXHC)1f6?=qlHm^LPNz8|I)#h*j
z0RvRkft4JECZ?)tvN$vZ8$+dKIXXlgQox at gF-?!BY;()SDn|38 at bPU0)%C^7$no>v
z at 9<(1qU|R=^#Ixn=6Cs--vINMx*OI9tf+lBzdqn4KPvJ3sAFTmyw)p1C?d7mSO3L%
z4`y45;C~$Rip7lXe9 at FzQ+S2}W$?MKD2)aUdh}p511;&-17cl1Ra=w>{OgqRiWke*
zGXM(ylixQ~WXpB&6pIQ>1yozPie1aSpi;T*tVl1fc0`!CV)y6kR`*k$dTapc^l8SM
z(R+OFLKDISJ_KP8yEQ0*vxBysQRkJ})~mCvTO$ti!1kzXce3f?WYgW1?wgAp4>$VW
z*cqak>)qW^wEdeq!{T~Q*fxHk=dUhwUY+l}IMW7pCR%o<#dUk4<?Kk~@_=)`$HsN8
z#|FkcMljT@?{jN$X+e*(cBG}=WzoCL_4S&v@}iu&ib8jTro~dzW~=SA*A6!82O8`9
z-P%4^ts*~CGu)&dY1Z~Tg<2bFssl>7 at kR6A{j`VkOsD{}?Ro`11iJNc at f0SSYyZ=@
z5YPIoBe9u22T}~)t(IL_fdHKXaR~+JO+XbJRhX%|d>OLf%vPcnc|<K38qB!tW^E4h
zR0*>aW2Bme5?=~hRAm<_{(fs|8-JD;>+%W7vdhrm)~KcGBM%E-*!Bc7Wnf3x_N4!0
z9)$2FfF3FutV}^Zkl7A{!a_HLYcO)m(EjXzb!*rzwY_a?$hJLfyD;WFH)_AYh`(Vg
zQ~t<)G6Rj?D`t-qkT1<jU`8ub`^vHtnajsq8i}N;{1gV%0NS)G^OB!?D!Du-Nlq|3
zLkAy241B+mT$P{7i#1|Vpr$AdXbQbhi|SgHe+Ejkr%NfQW3TUbRLlH6;XZQu!tY~6
zCOtLKV9 at IW3RYknNUK0<MNd8VzD=-xPV9gUGwtGIS?n=y4m;Ne?JIqjm455Suw!G`
zd3CN0++6Cqx7Pc-N%L at P=+;UPcFU#NcH)-T7P`1uA9AfpEcV$~hg>Uzu9+^&cw56<
zuYIc1GU{pQb!kD5OWR?qQE=!=RAGZzli%bpH>3OwwNyk at mE<{%npSIFhh5uYuj_T|
zhFT1RP5R*${b;LxxVhd>{?TULaHDvS$UesZ^UPPe&dd1 at JwBZR+n>Trn@)&^*b(Z$
zm<acMgJE`0SG8JE_y6(A9zjGJZ%ctFgz&snTtbE;`~f;>%w%{nHH6dK^!e0rQN9J$
zDcoA`si%mShKrp+BeTeMN6cq?cxYJd(jf at UTx~ZpL%WDwo^TBXt|E11Ea|kAa}VL+
zIrlQKDZ)EGYe(e1(FW)`zT7#`DZm?t^NRM&D_HBdY>zm0MjXs;-5$1IoN(`sJ1<VS
zE>F5HjM;aFaS|=m)$mVxcdd~EiPG%Ek}Ltn(Uj#R31lbHmkr8ulYx3xJynsX*1b>3
zUrDaWONG)^AYY&o5fD<qVwzZ#>y=_%JjJ41=czQM%|?WxtM$dVl at y5RpLqKskXu0}
zh)gI^kscdfVT}}oS~MgNJ1rH1?%JV7 at sOu58vys?t at WeL+Q~NkRGVSC-LTweTj(~=
zbT%yZT3DIuGA;GlHb)!L>Wc8^r&__*cr%s^m}oPOdyH_BD_VW3!#vt*1QYG%{zhG&
zTi0b53cS^fC0}jVl at iP+pR2FTXU;=KewwB at v!*!HWiz=f28*G#qBsxz-%wlLXsT_s
z)^<5{{Y{3U7UM{(QIg*<+1 at bKVH#`IWB-h{=$Jvrzu#~9Pqpc%+r$<RW;=lQt6%DA
z0Lwil3_t1U;p^ew8395;pab9>0pi|3I7-if<hvJ5A}Z)Z4M|C23nI>7E$cRy5P~Bk
z)7el=IJ(<h++!(WEVioGqF8IHS%Ve5(MOq<;mWv;GDRkjeQ|Y&u8L1D4Ssl`4}5-k
z at QW*h%pYLZ6XOnO$0K~rAH?Xw45OC;5fED4F4P?~kS=W{dQUx6#NetvfyHi<F!H6H
z&y1SYJ`0537_?#GD?3Ng{`{Ep(xm(9Ow;w*W<ny at XPe;v?wFm at ubn{?&9<NJcyPV5
zlcTeeqZv(Hl##$hn!=2Dh7!=1L~CkkHb??YDk}pyK(6N?6sasKN>}8csmKEqbV>N0
zV!f&$9g>4ekS{>RdzFHG3boAJK?(pn8eg<}`zU{v{Ui(y?L9^j?`mr(Q?YRoA(256
zyv1IJrq7{ar3qV6yr5jh4~d^tcUmgRC3V at Vq(@mj;I18XV_Iui8EVu*wr+d%xW_Qv
zY1$lv_D(oI(xRVeYrq=?9o8x=6VPs{>ay2#+G|kq?Y5dOht^}!v|2Qc#!6jzF7vD^
z3ern*QYmRD%S)%QjoBtur3F@#!C}@r%=MKe`Bf$PHoXSr-(sn2v(@#u>PI}LnQr?;
zhncN}4F&SgbegBy8z$NeW3Ba&f5M|j3Y769zIVCHD~-pO4(I)Z_s2J|b(e)WG%Vl>
zNpFatA7KH&2qT~*LS1J(T7fo!SpiZiI$lXsneaH|A8iyxDZ>oGc2`lOJKk7Lw2%}e
zgkNYErMc_9dJ5F9O*tMew|;qTm_n3~FAaTtcjoJRbH9GL{8z6n5mNZ+ow<*$jDLM^
z_NyD?6e#}k)+iItw)%|}v<%AdEcq$2RPbL$cZIEsCPW`f$H$xO5Sw6AEmFVGB`h32
zl&PbPd<-6}9XJmzj5~>bT$yTw_BZERU_MnY*QVW&pPGTo<F+efre9v|g869)k!kUf
z8HrKZVj`IrIjJ#Br!2 at wC`ea`FUm|T$xa5vSxKNYCk2#bgXFT at R8R`!qJLey81X?C
z^3JHCXM!jBX$s81DbE9EHisQ+1GeQp%R;wF`Z9d!!jfV42T~7IcUdbHAUQ!oGDJ|l
zSziLTTMVTw#?n?}8Ii+oyT)TGZ#I;YNMgmQ6%}RXYWhlYWnGPU=+YLcGJ`fVVaCdK
zg6)>74vXM<kE0fJSgSpzO5oHL1LBh{rplIv$~KFp!(Q8NtHo}&YfG)#Qi}O&N^>+N
z+116_G&YvzrBmLSo1T=G6kAzU<*=G8My*j>t*tJj5W-TgvFWR63TU%w`<jdc&Bn1d
z^K7qUw%az at VVdo>;wIxbBZ;$}rs;O$q=#)w&qgmJpCb5!Q3ve>^L-|+is`NOo6&xL
z)we1`eDfXk^D@>=Kum%7 at M4#OVW~@k0HDN5kCA8R+O;HBs6r%|Oi}K1YmLk{YPf-`
zB2L(ek~eOnImd0+r=5>hJfB?|`t`kOie`WFXzACluYGxMnaaR>o1^!(#vh)azPB}T
z>+I;wH43GMAMcEQd0U9U=a>2!^hXOG?kBqp5exzvhya|&#p7+tFfVKuga^Xkkx?Dq
zII2=noi~n=qvkTfc{D$!&V_Lo^D3de)b>r+gxYVqz0gW!3(Tk1>*j1Dm6LRrf3nj?
zYfMIBbb4Y`dV)Y&LR3c5X~uB?nzD0J<8o4C^U~rKXw%D2PXL9PNyXVIu(~MAhs-1v
z6$&zvXy^buTbK#NdO>DVQFe;|^@ZPlieG{J*yPOHT<W#VcbULUhY{7s){jYpB|tEw
z-&q6D=csp20}O}xrK(y0s>5?C$84g6QlhSqSh`h&m<k|2b at h}M(_kyYO*I89Qfx-O
zjlB*OwKP;<#t?z;cGN<3qLHoUDyL4QWfjOzS!#<QyiHrm^foGX>MQaXU_$jyRZ&)D
zVOB|QdVXd~_L;=A<hV0QafxxKD=Mq(R+F`%-c(;xQ(019Q|>bB8ZEj;bFIg&>u~6X
zJ?4o{+f<irzR!shfe7G4L;j^c`$CU(uG>t=bfL$L&4xmN5+Z{mEg!TWVGXu>CR9Ji
zc`p-Wh|j#z(?EP1toAk_3nI$hZ3K`Utb$(ST5ki<zjXl<dBeFjt;`{kOgF6d7}k4@
zXZsq~dJSj$j2OwA{YI({DL$v>_O-=kI_7?PcS<n%`sB~<Ek3<A_u$+l^&V#@yQX>@
zhuds}9$SB_tOIcx==z}vZhfMYLXk&1qm+~|cJ-%M`ftrRaX)9<b+{o!^N<1(8H8|&
zW8e((mboXg!9%=z%zO0w8ot|*4Qvhxw(pDz5a`~WaADqGnQpp1C*~F3S at hgpYP+}8
zc7M73-je6;V(ax8H{~%fpLSYCD?eOtq{N;|I(;%FHUcEao;njB$vD3B#OUnQxa`!}
ztP}wTH07ly2&5(C3NW}HDM-xoB0;{G*T=E$TTJx5So}&3I1|sG%1nvPJ`*qhh<}}@
z#Ivl+_vKjXHA`6Lx*D*|QGgf#<H8sw5~33pi?ynkAfXJBciE~@-4x6~d%^r#cuo}!
zJkJO8QZ-b8JR(la-WOBHr5nx)u+|hd8p=VFu>!dCWtN&khqk26TGMW=>2hkZ=Yg}n
zjN~kA*H`4#m1Z-y%1~9HXwMicjGU6(G*o>?N*uILjz1lDIwB at 2;@Hu{C1vF{iy*&2
zYJPLQ#%a=0_RwOhZ?o5TyA9ngJ<5N)!#dyZS{!gK54u-}h at Co#lrHpIaY+_>EQ>ut
z8?Ygw^9A#j<<n_+&g>D{90-r{_iO$Q5!|+H66@<Xt at oSH_L~s_AJthARHs&i(BI~u
znTipp4$#B!TnvP#ymnBO*U}$%eps|x+?aO3dFBbfzS4?G|LglRU)`J_W5|5Sw=d6L
zSst3|YwC0v+nsuGb?Cd?+#4FrbuBhM^4{h$anspo9`9+I>~UXN9=x;G_tC|nzrHj2
z*4Z}xLkk_k9wT5y>{=>$V!0}#;SJ>C<l at EP%izpP*tbUnlwpr;kG6;Zq<9!sPwgU{
zC;QLMYb)G)=<g6%<Sj5-y!Gc-dSHIcsc>-m)KQQSeIhC5RAS621R*`?bb8|Hw8Ycc
zt^!Fh>0XF+=JjQz#tEdvL0xz&kSdTRpcYw|Pk9&RQz>yY`YG@$^2Oe3W=cHkOFibZ
zLw2Gx3bUOJIHv#`Sb<<*zpJ*#t^rs$(#Wasm;_n{NFkL`LVz;2XbLPf1&Zf-j+`jX
z0=hD0k7okh6Py&rFY7CEVYR+850aZ}3h`TkrM4I}R2N!BSwac%dC(xob!v*U;5_EN
zvhDNIlW5(_NRFe2B`GdCF*Z8t)QJ<vjvfjN&CM?`)N8E`dXv6Zrzy7 at Y8(xM4DBvs
zr`y<O*Y!0u3^X^4wpmdAbA8T*e&^DFYkj!!>`2r4uzPjTxi;in?6ofUSy%dPtNk{j
zSV+O*b7qgAy;A<ZfVK?rSxJ1KA9E1g+ZnNK4qCQ`ERyYJAKNWN{D^y;8 at A&8QAQ5i
z{q^J*MywadY!^l>m&R;2XIyvY8<~v3WPnF2El;+)DI@><+W1$uXFs?)bA4st=EgW(
zZ at n$nW}DtnQ^p&#8EVYBD!iM9x(ad}HbZTr&ERpFTb-s>XM at MtKoi`6$38#UdS$7f
za5N+MK04RMe~y14+mp;%isA$+6JR?xGI&J at OUFaDGh|#@_2_wlNjJ;~H|APy&I{ZA
z#%wd@{oO^6Quz0mJP%jfUSDl{yykhd-1OT!gN-$r at zE!uP8^9mek3;XSZu_x7>T&3
z6LC?;6QWNh#Y6xmlF^i%8ZUq#oB;^}2m(aq8~3wUQI|#fShG?=e5Qh+bUa#7AUQ7G
zi`ev}Sgc|N^%M<&3dAG{P6Bp(0RM^DOtu*S#t-qp!N$5iXAK}dN|FdrEu+wEEC&v4
zF<Kopu0Tb-WO%N&G at A$vF&Ty0k}Tn;=ch4!mJkijh_);jpw(+jvZ+SX(VSabVyP<y
z4VvP*vRrKY%EAmx9me(WAt2@{aZ$-}k%_U92{DmTCy$*7KN5NJ_|YSW4j&3jN=~h*
zuCki+W_?|KO at +-^+i2A{+v=Mv+773I2AS?gV{emjsMR#$F;8|{7yDhS!%gcWO&g<-
zzY+bvGT=b}FZbIZKl&djSnVg2M_A8>>Fc$5WMtdNc^iQa!rBD)q#1w#Onk$^L-_9{
z{0M}%T^P0D_rZK_P`tDeVbWZ}4V<tu4FJwFX8^*}RrlUj=NoGtZhm%i48tCa<&zt8
zuWgQ8T<F`F>e-qboa*<qyUiU<wkDg=)}XZ+wQj4?Z8bPdI?^01PIHUH<Z)X(E(>p;
ztRGb$UCmZ at fmWN2x4%8vhLHZ<gGomGvC$xs_#n(yRW%9RNatOT^MYuw$O?NINh=_N
zInzyo_LBJ+_KNver(AayTJ9~iQUm;O#q-wLjyKmlzqr=_r$=Kcu_qPnqfdq_&YzAr
zcKQ at x3kZ*9FNioUaST~VIDINU`V at 0Hd|dTXG(Guw0*ggOY~Rab(S#}SAQ~itI01BH
zQe2cktU#iGU`}F;Adml9MSi|(ur^?)Q~>*bTA*RvqbFQ5AR;y*8sm$};GYV$uQWeK
zyREheE8SF0A-zCDbpg6v0evoPn96*`b8R`Mdk#?=^f|0%8Uwybadv7!W^zf+nezOM
z+S1(GvOHa7VRcDPMPVj=D|of+cgS*bY-D`&$v6;oGV0W^lgEyn2tSO$b0{n%C@}Ek
zsZ$l at WexRpx|&LzrVP#BY%{dj4IT9V^1U~kM>`xCKfR3xl>a2kzt=h2V_z9+TocN_
z5fLDRyfNZlA99`@c2PBVc8ENMLor{9fJo at z=wbcJY>waqhtv?$mS%uk#X2beqoa)z
zZ7#{y9*BYI3-dYn<MM<9C4YU|b#ul|4=E!B;5>!_g#X}N&(m|=bX7k+*YnYC{|CE+
z)QWt0XW<D`kG98m7y5S>hgK)L*QfhthdZVQ+lRWE==bbwws*HW2RfSvI-B}C6dGA<
zb6c8h2Ci*xGeB4nfkv|yJ<w#XZMSQ&`UuPX`OVocuMA*c;hc(%Y19tb!q~{zzcA#4
zIX7VDp;#ZaUmSN{p-oA4D&1LV#juy!zU9tBGn{|Kp%3eAPqsRKb9?C7hl?qvk4GFk
zd@}q{#PK6hC&Qyo9*sJ2G}4PB&|WUet8YE}6q~~F(-FsGqfW+4L5Pb!1yK`XA`(tV
z#Gj7vQ&%oVvLY7+u_c)W;S+^Dpr{^|5F3>c0|eVaJUFc&ei4Hi at B*??xWK480Qm{d
zWB<=eOtu?`n{;GFv42R9_POf1>>9!~IIX~~FLmp&e1rin&6q;71}i<^P?-<mF<n4?
zWr2cGQ%uRF7ga at cqtk>-5k7NBin7mO&*Y{hvWsETW5Tgmn0-dA^AtN;T2f46Oavbh
zpXaG#M~;LA9}W$M_#weT`}gfTeE4uiM!K$6Q(s%DsVHvHR=Lbt8o^radXHU?<wI-0
zkjFaGX2tTK>bB4HI2QU{^L>uReh0=sp;wX)WFof48n?%r&W$&zlDVxB*T#?#0TS8R
zJexyy5}LSvIDN_n at Nr%QIxqm};^82to3l-5LRfKkvE}xB6G4yLb6nkb<{IxUG(BF!
zFi at OlAa?J^7kZg0^Zrg36JRJ8|Ki5flZ)d|ug<)4dFJAL&!xqIb8~$wqwULMowI|U
z#nH~CvF_QSj-gKXV269St7)jSv9Hb9>k;T`w!!l at ml=OYqR!bMAfmnvwF-7awbNM5
z_KN34u9lfje|S8 at G>><-x?WpuMG*MMUz36QJBzJ^Zg at Ml=e<C~-$ltU3X}f93P+rD
zK0SxPc7L$b^;b6rpMAK*<fzz)@MDKVjvom<dMNnVk<b(2hxoEi9Xkw89y=Uy{3u_a
z_y*;d$Rb}Ts*HUcafk#b1jNdzW3f at E5QG>IDR4USL~JxGr(y*BizlC3^sb*4FZM#d
zSpCW=|DyjUI^tw>#EFYjE$BKtJ~n;8?vDdF(`g!OsV5qb{X_kLs0ssaZKq8GJm$(K
zW4Wuo)CqK at O8KMqfw`s_O9o$6FHl$yB<)e at J{0LHC8~;R%L{8O3ZZ&oc3MtaQf6ub
z`x+Y-n-@~gUd9H;Vp at _g_4x$&438ZN3kwbi4GuUI613;lSN86CH7qnFAwDiICrhiT
zsHrHat1L0si#mVWfjiv|eJvK6VlexMJeI+hhUp&XY_C&U{@6bYeRi_RB$qM%QU05w
z?u*kNS_WtqxHR2*d8T!H#Hna64IZ2D`@CUo5#N)$zn};D5M_wR_h6;%(P}$Q{f}1L
z9xS(VB{Gj0jBSH at WY`^qCjtrQ8T`xaM<_&zIOiICaD~3+nMXTgk1tHo&VaSEHQlu}
z)3Z9>u{_#7JJ32e<eBVip6+j*>}#3mZNUl}?P(tBaQAr}yxCTV*zDS*weL1-6<7!K
z`v4MuRQ)L!&_z{+B{?aCCMe*%JKw|{OQu=={QA%b=X=<Un8<|FEkzY+74{5n2qqcx
zDxdCjeR;W$G2qWWTK=E!EpTSRsiUEXLjsS41%)390WhD3N5g{AQ7rOh9S#iwLLv at _
zA`WcaLKaRS3r9~09D(x at 3f`5Y$O0=-r;Y<Cs(_cLRw8|iQ4uF1P9BRmA#mzMxEII6
z#iD{(SCG#h4?lH0{Ny({itW5J-nc&KkoJ#lZBQ7%ME@{;z?3k73}j%3KvR96OG}*?
zu}Ul-%pR0Kuxm?z4A)?~m!R_*uv}l6k1?;WDgvl_9jGkQ`cPL{TvJ{^DFQhuP+pW<
zQJh<xmzkG&CNq^VW_(iIX|ZR;M#1@*NZ$1^KB#a$#DM+#_q_7*PhR}d55E86kAC=*
z7hecCcp&`fk=U5%{G80{@}ioGqPof=zH67Mw!>xYZ?z7$+xuJ01pND(jWX<MMftA`
zHDUQvFErn4qh1dChZ2jeu_lT|&rLL4nrWq9;L>!<<rxH_^}>Xk`aOakXns<e97d!3
zKGdV~_&B8Rjk8^^uXS*)*;|`kZ=UUVye1EUTIUcbnA643By=oZC-w$YVwjbIw*Tzf
z7`FYx&4Kr?&c1hL_N|LEuWe7fzB at z2{@iR2lO8vwx;CeK&Q5l(O>`}ev`_XnjdVJP
zJDh{<4xHaMrvU*Mj%}NxNBF|^ZgX9eRp&C*!FDnoW^E;np7mA5b>#*0`wNuiR}^NI
z6EV(9&(BCEJc$2DRFI&e$Ut!>a%LPA?}VP-T=#r=x&QAUP5tSOStcGc{qOdin^HO|
zGmnJ at 91RT&4cs4iU~h21{-A^V6hZ<IgascA4e}x+ at F2`r;A><3kdP6vYacxnf)Wcq
z5_bIP;p0aSfn!Gmux5{gqu8{E0G=J>6gYO2;0Ab(y8r27_=)4;>Xqtx{Mgas;oykE
zvG60n{{r!>d;#{)*<mM^k2HR)L_f%Z&UTq8p(GzV-AUDfq1#?Vii&8DvV59_ at l!^i
zzQt743>vCL`9W<l%Ad3p+bc6RF?bBs#ro=EI;}8ugsLwutdW58BxDuJigH0=Zf1UV
zI>^mTOG%7Pia(tcAHzNc?fF>vtd4|*@R9D@^U6y<e(}W at ehB$rdFdxX0SAs83XMG-
zm6Q;hm6lSNlg?k(RTVSg#MMxP&x__CXtkjE2U<+Hy<_c`@eT_)UwX&pd+iH-j-`Ib
z=4cblSC&8S52}FOaA(YYe!TI*MB}+J7jZvqel$PUK7l at HPl#KF_}bst=z43jo5?M2
zZ+5 at 8-GdeJ_GTyA^4+a23<E|aeQ_DW4}q_5j(&ZMZn&{0yTfmvAAPhv`t-)q)0 at jA
zs_txz-99^db!BjOq3`@$@A`QA>S){gc*op8Gqa2qhuaurH{R_YZg+Gyn!4N#Emm!_
zMcZntC(h|{7_jj$>@n}1#u{sVl|fT#(3I4a<xAvgO1-Eq$%Xs?tC9^D3o|bxNd%CS
zWAQp;BacU)JPJ-64Gk9xJRmgiK+u7`A%Xit0``XqRv*~E=jEV-d!aozu=mvidtcf6
z%1a0L at 8N3+4m^M?z;K1I;6N!30f$0^*rr(w3kj6W4?V&j;bXocxg;mnkz_bJ+^d|A
zD!ol`Bf<x at 0)Z88QR9;Ea6Vj-`Q-6qCj`9f$Hlt$DJcj?kA(|7_gmrx%HYT5S?;%E
z_5dn}v3%ybt&{`+%452u+0$mO@|deA7;ZHQ=DQ8$ZhbkKDW|^NQ7<5rzov)*;|(<>
zMxZI-yI|f(T}2U*Iz8%0Q-*z_DKCQj6(t2QzqBZ?I6tQ#HwzTzW#we1ok>neNsNz=
zjZTO?eLCtCTN at wL(ZivKLWB43-2?OY at 7oh_U|(o(AS--s at i9@zOL|H|ZboWlaW2j6
z{6|HRn at vl=lZeM)tGU;$A8GUEye2v<v!Ym(Xuq9;x{cAs^<kGXeozHO1BeETBGsv8
zidU)P#`3}8C83Y2OO%`VHmz-(Q2g$8FK4qdx#->PZqE37d!rL0;nPd~pI+=o)dNoV
zAldZQ^-&U4pWRvh{K58<TO04(SbzKa+M`R04=&8z+nK(-IYAiz at -lNxA%CAB|5*D}
zk87gaIo|2OXCLo!jdnUoX%XQ^qVeUMty-iT at E+Z!T6Q|Dn)>Qus4hvK%@rljj4#})
zvVzRw+_bX%Oy>O-37kRslQAsJqC_MvHtGb-2f{x+c~sc#VZnz&0uBWSD4qxG-viil
z_q_5GaB$zN2Y at 91{=KiT4$w+0?tArR)&utMJ-B}_5)pV{AKwuQDkSJ2iYr(_JPg2V
z1AKQ1>fzzA5L6i;lt)YhgtI%Ku7yhfhQo@$sBt!Z9}XWq@(qq0K78cxA)Y!4jsWjd
zM~)m85YLJi_;L8~Aq*ZuofN%b>H`cO%$~`16PWI at OthQE+fCB)5m{R5%_zd5#*!2j
z=_-;|9&1gjrG|3i#)j%9a}5Vf*mM=ln6+pt(8FjXi>}I8Th25FeT_g}RjH=DxU#eW
z{#TR~D*hK0<QC*+XJ at 9RrzR)H$Ab9S(<t`SQ4xqgl8)>n_<TNmq%a?40 at xkU4{Q^p
z08$cSXl!A;58pcxB!{7@%~9{MiBca*JyHH7ye2xVV{Il1p7DG!e%6NED&~*zvpv>`
z+q*sLrc`x%)CvDNXy(eaIDnGOCQ%VwT?~G_!Z$a%pPVB^Gw}3$|2tdVZ*O)z+3Ei5
z^1x at 827Y>N81sg)kjw<5&F$H5-u&RTix<{sH<zZ?=0?}&MlWy7UEi9!vOalbZT#B$
z`0cH!tE;1zmWD1Z4PIOv#MQ;-SsZGe>1!JAa>`7uwbNzr*mP3o*ENyYvI_o7g<t2E
zrjA`-4f89DvP<(bU^w9dfO;n(P9z~WJsBkrNRgK^4Xhvwn}+~6!34;U<|ix}as2R!
zqhXLAwGa7G-99D%3Q8WH!~9o%@*-9zmM1*l`|3+T at t+-e-=3FWefcMQU-e$u5e^86
z5ZJ%>Rm1_nf4(>=4gtY|;9v-QL=XrF4G9Vj7Emj}L4j%ox9%_!A;^4K(cVY+Z at B$D
zt6{RhAp!XlcIZ$Tff4!hou|C7;01t;Ki1B0vyM0?pbVJuv#Cx|6$U0d%)>2)p=Lvm
zvyPI>Zbx00gW at q=H*o5xqJ&`0W-5wnTP(HBmRd^dT}F*XTh0(d#t$khR49LqQ2x5=
zG71v#Qme`e%Zu|%3UUkcvU4)iGt<u~q at Q7mTS9znOzi3C)6tO(@QIF$@Jj&#aN^hz
zY(-QDJA(3taHFD69mi$n8)s){v>|m7Y(V^b=y3E{MafWKqkf>tFyd*T+IghaK(!lg
zFUAi6|J6Z<jCneVdD5N$|1o<wbnF^!3p35vXIrrOIfIpiKHdEo`4pJFf4&ce|754<
zv&)03uJY$MMt^;G@=x!rKl|T5o9u6Gc9<MygVSbebXa>jJ=0 at D%d_K1!P)uI&AH*-
zmGNsEQ<qjocbA6F&G+NvZcX=4qOdgL!R8t3bPQs!wOTry^)1#q`FU1LeIh<mQ*9Z9
zx7AmnSo9h;)<V>KX?~_+K65QpPDh2ulVT%*FGwx|XoQZ5y+_JC)XDI$BcXxVHo*b=
zux-Gemw&S7<sZNN;}>3i`NyxmB=E{hFXC%~7k>EtpS<|PAHVR!mwx<$;QuQxVTxjm
zA{qz<cnSRY1y+y<ANjrfKd^5vU^_Sn_U{WgxE}-s91ILN7#tK36sVvc1`^6<g|J?5
z5C{wj2}Te?LqiaR at 6tQW{}cNBk9c)Rh<YwGG)z4uh#sck|1IwgnqNhD2=d_SlHMZJ
zLkkI@*qGXQ(B-HFQu)_*JGE3PP=VR$&~`Yq#FN|XT8~Yj)ru8b?J!jH9a(f04BM%%
zF2NwzRu${2ODRFFsVGMIS4*Jzi}G_oZdOK4Rz^lzDuDY at 5vNX_JP{Qc0rMkIos5h)
zg%q4TaV#?8q}mJE77+m~9~nJ3N}P?rGQlD;fJ9KKi^$JNB5`J~FK;o|G&NLp3YitH
z0rUt^Wi-~-Fx_bp1rL38Oup3t`0tSVAA_IZr(2mlsC`^r41NrrH#d6-?=YkeJD<@m
zgy=uNGW5mOVMg9 at zy}A at ERA&%c(<E$4fQpIp|mwsz-}>t?heoBK+o*N(AkBFo#n~h
z)v1fC6XzC&w&w=cC%V=ryD;(v23r_g&8e^b&89Awq0^~vGSygx8YzSG4K=025b&hX
z^A&~Jm^XCsR~F?E93wcKot6mgQ)O0&L=Pz>BIiIx6mb=a!yo1&A{q~fNuD@*DEzR9
z)d0L#Klxw&$qSGl8Ur~0(u+Sr=cD<dH===(S5HB5$$TLKEGp%X{#WbpfA5}GUVWK8
z;^jRUMUwoOtk|xQ{{Z|yu>YWfe8>ud00O{4aNr;~a3Cm1$O1ot&GN at ja)|3!^FCsS
zg@#E8!V3r~Pzd1<ga%8fr+hE)z6Nbi$uY70!6qG7B0N-JQfv$$4AxGYrP|+D((A5=
z_JaBLI{F8Nb>YypJ9KoEP*?0URH3Q(zHob)w`r&;#pl&l3i4~KN-4sutt_c5DX1zd
zDlaK0$jKyVlarO6m3~I3{ltWr(@`KgDiY2M+6(4KM4URw3ir{Gr_ at G3lt2UrjvXO%
zKu}11xg<x(65`EK>_jCA#S)~LEw!SQg76gWFjUsDg<;FlN-)=B#k<GM!`WGq)eczx
zIJ}rWc)LV<=-i}#8S>wlYli;}=0fv7+37{?Gv at 2_E5rZ#*@Z72Y)%b!40N at 2v^Z(8
zaas((s1y9JEGvfpjV^nW%P}!BI5R%Hu{6E4G<jilYG-kDXJL4IZg6vklkU4`2buw#
zCpU*0aT%*@y7GpaVgd+;>Y}>xJZw3l2blEOb&CA-Z(`;Z<)qWgsj{48b7YtuwGamQ
zKtyKna3~+n5gB_F5#u0l9FiDX(82v!DFD+2VncfrJNVHLzW4p_{eJ at gMc{|u|DM$R
zKR^o93)B at UAo9kdvWVb0z|@hp&?`PYzxTj?0oWcGa3JvD0f;Ri9tyTAwI3J|pqMYI
z9uUZ0Abwar7|f4+0QX_O)ZX7PTyZ-z><~|c9Xc$*{kISzq~Kc!4h{1P!Z)uBb83ql
z^@Q<@iS6Lt0{X#Kgom;;k>T=%dQ`Lr+P6!)n*MPtpC*&WWvGJrd}XFu0hASCHv$pF
zA+h{*%-gIesxB>{AYZz@`4w0`g}H+KnUFvAOmZRye_RaqPDD&}R2-&{)cmJT9#_g=
znLvm at q^$G7IT9jp><E!GR2g44nG~5fkECcMH9jgiHiCLr%D<_&pg)2Fr26t~Q&k at R
z3+<4EvvBHh at Tc01GaU_N{Z{&{1bi at i&P(M_s1x#I?UN*BDx;`foNL17`RvLFM{obv
zPw$NPwT<+(cec1XT3pRe3utR{xNQv<gBH=Qt|%!jD$rDxJMET{f!^84k?pnlmD$nl
zrHKoxlRJwetCKzJQv~)gc-qkUI4K@$U1NjB-B3;Fm=rnX+?>!s7Xy14<{S|lPU{dg
zu4D<*lW}u$GgGt9B;obMMMt3IiLMY at gzW&c5UOKxOOj)ILvrDw`ppud#-*(Sjp4JG
z at Xyiy8|ME=GGCHky_nZ?gPwmG$bG?Q`Mjuh1T?=ga`*=*@=H}O)V{#Jy*$LK`40I}
z`}{z9_%3J<@q>dU?S=IsmA$a*{UpZ{@^SufXc#!8Sj}Rnf>;#mA%27&3Xup32 at MMN
zLWo0X*t36s{N<HFd!^`?r{tJnu(mo1?@I~qkk17?<Q_u;G#Uk(O&S36fiU~cwTx4+
z>nrIi$3|5Ff2>oCA0j`HpIxA;RD}8k|BLfW3v&x{GGM+UKOQgqN4>{HN5cQ-EFWq7
zNc#s1C`#Ht<T!{3;r4Q)wg8z`IUEyt9B+<dLTanxB9EoUMNm3U4LMyxbPv%G>eA5;
zTuKzT&0L}SeBnR+Xv91*`?qACi}D7 at Pe~6+e+rW4+BmJlOn!=!2>#}+?bmh}7bp7r
zI+`JTYopz4&;p~b)?&o$sReZ!9QwSn;)2 at hids!&S9|ODP~X<-{PxPs?)vQ3!syog
zuu}fZqa8#w3GcMqb<G%Q=9)&6hPbiP`S8E8D2otHfvoFhUptc&i+Mv5kV at Co#8?vd
zvE+mZkAxp44uD^Yf))B!7#n-`k`|P}`~XDE6qHsM^!~y3o(C)6lXw9;U*U%s{6F}y
zV7^!LE86?b9>3*-G?9-X7OjK={_~$EFS$=_2e0lIgcmly;=g=|@h>(4zvfru50F37
z-U$@jfG~#me<=?bFjC7a^)6{Fw7OL0VS?e3*ow at -Az?uw-o at b1Lkb~bhrbP<T*zPi
z`pzV$P5|=nKfgWs?AhClNugp*m1X*}x<!uqG8N?H>M~S14V46ZpuLRwREn at qy$Ji5
z>dLVEAwOYHW&9J9B)wHykX at 9UQC67CSmxsVtnBnuK&(F{F%HDXM8ki-2>2|2_z&$*
zMVvf==EwL!1c(ol2UNyC3}D~K|HZf^j^XEj<ncrBpPWv5LL at D9#hD2dVC&1XsnBM~
zEfe18KBH}o-Y&&|$~&3c!1NL|myhXoOnRh9jIl+3db-2;s at K;>F0D<@kM#}rwzasd
z^i=9<tAWX&tF9;mn#wY4o;pn>H;^CWr at ggtq`zxsY+z}6cw=E~ZDw#|ZV1gUD;Ziv
zp?<rK2#+^zU>2snrLGMAb2d$tF!HksvV_9N!l$5%oH*G)Dp+7X#3!v!o`@g-w1;x9
zy!_Hne*EGKKl;%NKl<She(?PteE<90{0RI|;0NFT9?J^cD~K)NCof{9O9&g at 4~!Y^
zl~v=v`XV`dWVG{}@DA(J@)5=lqNms{$WM%P-(Coh<-c#Qz}`LJ)dTzYBMVsgg5rq5
ze(@u at FKvJ9e+(i?et8>sPzgbZuv`49J1{sTFh~GR9_R-TCHcQuLC?z-?|MjBAP5G}
z{Z?=&^J&S;fM4C8{rfjp{`l at XCy;W!TwO^PDJ?29X)vUQ4O`l&uTXI4D>!3CK`~#&
zJPG&<XRWqOD+<_1xZtS?XN`HYr3G0c)mxZTn47^s^2{^IAT=qDJQuoOUD*Q!gbN^I
zKCm6IDG1A78vhh*ko)G_hXXJ`@t*{-<UjS~;qg%?B90w`|FNfzCPp7mI(__1+$qr|
znwKIb02HJ$Ps7UKN_`0fZRqY~a1Fg4bU!ipg48ENfSGqn(LQsE{_te$uixDG at Wui;
zsmrV57uTkiCI=`sYiqK%H at o!On)<q$%CeH8g1oYlLjJ#|szM2c&17hAaSipfj}LS%
zPY<up4zEoQZp;pzo$gzk>{%FYo9b~B<e?r(82pAxtbH2UFnemta%tzG(ltLbnVMe8
zAn{?TfguUb`<0adCy4`N{t*WzNQf1I at eH+IlJx)n_rDL@;roj(@FOGvaP#9Izo_u)
zD=$k1dbP1)ssE}1mEXByL;(W$fd}_XV8eVXyy at q^T30&}uk=NDyq3RoY2mroy?vhi
z2jtJbef#$A-M4T5e&GfSAqbMpCl3*XN{8wJLBW!@g7yIlfx!m at gZCc{^y5H45ZE6;
zP$^U*<Y15&0l}gF3FOPr{J*|G``bqgkpK6R|9^OQ{U6`odiKjpHN{yRm_ol5B|U)L
zt{1XInHA-!QL9X;kG4FYb47usB$w at 5@;{51bBP2Zz#$ZD0r}Z!B&xE~y!=N55 at Ms3
zAaE0VTJRt81NvEFqJa<!W|+stM6v1f8u(Abi<&67K`krAghcj4>7Xd44L at -t<mA!N
z=o5$Ge|%(kW>OUW)XWVi$x2|b22+(7`Ni=TjKAYl-zG7;m=o?8 at L0rv$GMLB$D6&M
zUZ47>k1ziIz4M>mS-HPGacyn%*7oeZi!0|>CMO3wJDMHXKUh8ntwyias8A1An at P{U
z(9_;L*zFk`=;W14ll|L^V^=q333y&u8o}W`zc9Ex+ee0Lw!ew2T#ws8-o#K<2=gh6
zr2>{>S8N^(9?G9Y4UEYCd&^wIMbwuh5m7t>90UmAK9&VRMHDT at _Wr$6$L`s)2QG1a
z<>i;*6xThkz6!Wk at Wx(b1SUwv;n_x>hc{OxIS=zy_KK7)kS_}emXUlJ&lf_$>jmKt
z>?4>D2=DVUUohVr-sIm3yiTsL^OdC|<NzB-M16#W97F*2?%Tg_|A7Ms1NIXHIvB_e
z%m<3<2L-o75ClPH!Cp!4z>tH1AqND41p);2As5_u*S*gk3_|m(E#R9glbIp^-#l9Q
zr>C3$_WAC=e!lxJAD#Q>kIwz~56?l5s=`bPI4Nc$w~K+Q0O9%8sPK_RK7#qwQz`Ou
zrOrh1KS!h>3%w%1$V~zlOdug at f%~RJ04YdMNlZ?N;hLHhPwS%MIm{=k%R}}BFZq!R
z$R88Mi&GMyhp+ at Fi=`Y|@n4iiM^Z^19)2h&>iD6E at X)x3aFl;mQgl&9JcDJ5GUCc}
z5*d-i+%OD0hTt*lOrFn}%?t#3pl&X-J>Km9n>Wt>`J+pJ`|kNKUt52?J9B$u{K19!
zH?FO{b#v>^h2?WAlf&IDT`dlzfZBVS>uIsH8g)%}Q%AFNu&ZUPuYF>mV`-vqWvYLD
zdSG{D4B5ePAlr3$W#q=$@hdAM7ZwK2%4mO=tDX!6Ef4z20vegiX>-U<C3}TX6Vjp9
zF_OZ_h!fJ;LG2R)#}3Ba_tFQ&DNF at P8)YWQV4w(V`|>`Aj~+c5ew2a%GDzY^<vlT-
z4u^#b91>88SL937;mFz>bydYVIMfO%=SUHjsA>oeq9O%|!Uj^tp~2#hgoTjCJ&JEi
zX)Y1Rpg at 0kUyxtAy_oh&`3sL1&f~Q}_JaZZ55fb;&mJIdSQ5Jce?^!pO6S9K#e79_
zRK38#AZQQU73aBOai3TW;i_;TC{!R22w4a~3PKJk{MEe~j+~am$#?$z{w9Z0{N>Z#
zKR(&~{ab5H5Gu<{V|OMl!PjKdmLUZSy7D}+WtZjvzB?~UuwAntzv92F;m;!T?%xHF
z0!lprf{>k-3^Gy^;WL834P|cto~x1u$e$b^gG7k3ZBfE4Y+&-dlzHO at 3TIGQ2#Wvo
zO`J?TeG>j3I}}7kBK%K^KAxEv1^==CnI0pQe{NE35i?O4oyYLNOvc?X^oh|28$<S+
z3+*3Wo#LR$KYV!U=MOjDzrOh4?X}l0&b at wd;nAg~H?OTfy0Uir{NnlL at wt(%$$|E{
z(VosG8%-#*Sy6J_+vXbU^~{g<EROdsjCSp=PF!A_ytF!YXJ_`|#l^R-tv<fI`0&Eq
zt&Q=ktHaduZ_jkEjkVA8HFml5Y^hS2P at g6W7)WMe at KeMt-*ptWUnKs|@o?0>3<#oH
zgNcd|9)aW{Cq!g~M1OeriIXP<PJk1q#g7Oie}kw<9us2&D!oY2U_x9BNQ{fY|5C=M
zv@=D)FisXmm-02DBaUNg%DPPvcE;%z at l|Tr4ts0ZguEO%L}3r)2grhutguj8GejC!
z+=!sOi0g=uW*`wBHUNk(_`m-EoX7G(^MgHm*{BYP8y+GX0YPYf$#yT*ze93G at 4W{C
zpU0m4fvoQZ2L$#Z8bUh6c5pB#j9ow>DD*J+^=otg at b>EOUS~4-#vk9?_#dBK_``b}
z|M+z0+5dV}l6$7IAcJp*_FGE&m8N1ZP_(b6EwMNYDNsNJAip29t{?@BWgtN*;H^JV
zRVZl)LVl(=mWXIx=9xsU+44s8EXe)^n2)NbodLF^?IFDCYe-Fq;UUp}(wZcFpuOxN
z5-oM;|ELp(PaX+5ekdsV#35n)h^ZRU1!=LRVz5#Y#y`U$<z&b-IoYp>nNBphFp2A@
z_m-Kjcz1p9!&}R5T%5bRHTm|nm4_D>-n_PY_uSmWODp$xIYfJYb8cvHtb1mtV}7)I
zyw5Yx;qLV~sKy`fZCRP<T^jE`JJY{4H-M>gd36k(e|LNO(eB(^SC`(ty7Z2`-dG#C
zCPbibYpQEuuo)|eB%Pzaf+}&gPTXGjPaz+T{8)OFKb<;p9P*>M`5!-UKK$6R<HynH
z$GM4!j659^bNaMEVqy}Amp{q!CnY%<WTdAlq at 790Oiv@#0y5H4NH(S>Cjbhr6w;Ct
z(ozJ7to~mR#kLD%3H^!FzRF}N6qH$t>do))pY|lhf5g_$f5`9kbEW1-5T4ikm_5Rz
zCrT8E<s&q|Fzl6iBXqk^?>yWe0HoTN-1ZXQ$9cv4JqH2-%m+doeBgJzJ3>$>HvjM6
zTxBNtKR(?C|M1S)Kfk~I&mUi)&6XA|PRLT0zuE#&{_vlMT%e?YD|>-oBKQ>rB?v^Y
zRUDh0-75%E9Aqt4x(I7$odINXax+p$-=o#xxh(j{&XKBKYI_z%7n^Jiz&s$WpGs$F
zVhnvT%Itrh|1qbI#6}#2|7r23^3KF$CK3gT^D6(6bVFGNGcB3&$Kckv&W6{w1{uKk
z?Ad3}p8cO^&wl&t*>8UN?$y^WF5ldmT^jAA>*~_#__ at X53(I3G6FuwG{qrN8Qv)6_
z-07YkY#VH+CfPMJ;32Siere?D`UEEq?=B9WpYOl8IB;Wq<lgoKcGSmr*1vdd^PQ^;
z+&?-$&BTVA>m$@Tk9F8cqtNM07=dzGDtYjdPz!8`_&z9qY8t6gBqK;xJR%|@Dk>@_
zCN?1frYFJfl+;xIm!6T4nVFTFmzSGM5mk0hc6LEQesNJ at q4%1Hmkvsc3yNiUmLRQy
zs5#8d%Fo6r%TN(H6_=ox5O7KYVhH#m)Q!3-T_m>Sm`Ei8-m-jIaxV&usZWz-Y?SUG
zxfor_XJOO&Cc=-|FJ0Z|Eguv<%3qNm&O?6Tz<O<XL3JqwA^Ta8#?1b}Q0}E5gzO7Y
zP*jKQ!GiqzzY8T7&+iMrd%XO+$18vT_WGZmZ2eJ!;18oA1o_JZ`IYiV|I^i?z{x29
z(EtbnSNN}lf_7cP*9sgk_Z-qGM^qJw)E|<;1hVtxOaVnZx#=88#F<=Tn1dua6)Z%&
zVYqDS6xI&jE?%J`Km4aTI*p`%d^8Qzm_5-ak1$UFxA*kPBk(^Z=45K at sg#%#sj(+>
zQ%>UoaKbxtP*MI2@?yRvBCs{;`lk<fApGve;@0x?%Jk6c^x*o;;JL+-fBNF~#r2ts
zYtxf`qTgg at unkNPv_byy-e$BtHxqp=W8Ku`yGFa*oH)5L-FIPe=+g2C=W(2y?d4RO
z?WxY|tAn at Jhd8I{*4p5Mt<g6wOn!2E`Quy5pWa#h>cQsyt+9*qy~C|05-Z{`0$l|e
zbNFA7lb)HDOmLV)Albmgg!uTlIP^M7Jw;IdOh!gVUS3{)K|x_5EH5lAEiErEud1xn
zR99=Nt7>aBI&Cd;06 at LAR$Hr~GmhA7O;x#8Q%Rh*N<ma1iYhFwRT6}z$<7d<BTRvV
zCfqb1_-Yig(wMn{bi|W}0IKCs?FiA4qMZs0iW>rVgsiDrp;lAzUzPMI{)^Hc;lu>t
zwh-r0el7|hn_mWV0w6y at OMF!fbtwhPdjE#`2ZO^71bHE)AXI92L3=;;90>Y<L+uM#
zJDfv=!Si3=-Td1(*O(DeRg?*tNddrlNqaBzO*KVoI0GpFV|4*>AzTAwgsZ&CrDGj`
zSyP-1D&-AVhBna23#y8<6_5gM$mVlHIj*WmM;3C at lW6D1`i1k<C`$D%TANYz!qkrv
z&A+Oqixzmre>&pR5~2xvMjkul<Nx8L(<k6R_J2ZDIBgv`zf4cX^JVt6ttOAzba=iy
zqb|gJb9s7oVR~nMVR>eBXJuw<apKbYv<%k_|Mfe&3*-I7aAt-&>9L~Is=L`LTCO_X
zJ<V3SPB>+(-(!dW9I;J_^2%5T^*oS&ZLCe4N;%QKIqspwU}LQL{FLX)T*o6?T`rD3
z``;fvd-k>5X#Vlpvp+ohw-0~+?lwcKCOd6Jl}(&nTvk9s5S4+&XlE*-Qj$_rlFtY|
zpMq|O?NGgpAIbUJni^2A)79&=z+^N?=uJkw88qlE4SJi|Xg3>~iQ%vq30pZWM#h3!
zjar?i0x&2*L0eraYP2dT&=SeY3i>h%vhmc|jQsdU3eF at U0_n-|G%K+w5WYhe at Z+$W
zFxzn72;af~h*Kxn!0=v#<INsGS(+^3!FeIUOOlu9rsRKs^m)Df_iO(DNPbj3mOO-4
z<li3{<|Th%=)M5p-39grga{l|_(mf9qM>e-b at Wdkp63vjfB)h<#WSV3XJCF!NtU3!
zQ26=ccu+Z?ge#{7F@%aH7tz)3gOU+#c`jg*g8~vH0OuvBMiY?x0uq5NkmV7Ho?@EZ
zMSw_MF^ZtQRQPm0GV&r`F<<ToQA~co+6Uyh5>KDvA!A_}3c;+H=k>n|dnU)6V5DS1
zWO!=q3G9D4@;aT-b8ekDvWi(}&whIO>dxxg((J~{{LcE~`Lm0QQ$uV4)Tiw(kKNpy
zzJG4!7jK-O9_bnBVcvqJRSZ&SXtL at VCqj22({(7kXQohZGliN4YOP7;&h$6U^tqX=
zMWHEUMVTx?a}7roe0g*F?)inj_NK|<-ie`}`H7+1m$yH8_raG>U;pgg`#*j9 at YkQd
z@$4_Z;EWrRi4+Y|C_<HNZB=<yd1+xm9%f8QaZzbWaYaQr>b<5$Q&(G~uh$t3dW+d)
zF*P{sR-45HoHmQwVFQg$YqQ(#X>x)Vx4jiK+C38F at 0uJYDpVO3!Ehu%yEI at zDh0ZL
zQ*sn&O(l0(k|&Bw^F;xMK%OYW5PJay7(NjYHj?5$E*nt`8OI}79m)PhDu;wVZ7FO6
z#Gmli2~QEm5(PZ6CQXF;Wwf7NK*ckIL}W&4{$Sy#N>fK at enozz=i$F1|2{AC1^K^C
zd&uu){vK>0- at Sj)e}jfpgAkc7%3<jB<+=4 at K97PJ<6w{=5v)e^(CWpFNt~QWQj9>T
z5EF7_fReLn9~j69)I(%}_%<E^PO%>{+>t}Z2M{Szo-#>)3e;gWAQH&f7RXO{AGW8&
z3;rjZ_VS;hNsN at C)Cc}k^M>0?*e5>f7-?V9Ud)qBPlzD?nG_wKn-a|=E<<@1XMZ$`
zLrjYAEO(;((fq3mGv_u|&TTB8U7DVs7+9Mf*_;=tUVPpsx6Z=<iGj|+uGYTxMyI)+
z3F>xZotU?yr=zx}p{|@VS21kLN(F3vr%T`Il*NH|s_e{+6{4s9+I;)7|MRoWg|X?O
zuJQi%nUQY7r+sa%slm?c=a!$oe&fl5Ywz5@^5)%353Zkk|Fui^w#H~(H0i1dtE&8h
zvA)h&uQlpndwqjZZ?{>TcB_ at jQmdu8(bd}QZfycCADo?@CeYsE29zf$P^tvln?%^Q
zquCCc?F|BshDHXbG}M`O)eUu(0 at _NGwvu{va`y^Uu;7woph{;=NkNK|0{k_(1^D=%
z80+Uhy-UQDPK%(Es9=Qu{O`o^<KYBh5d-1KBMXN`8G}gChElx%`7wAXR0x(~85NvV
zc0NHHZj`F$3e^t;A36|pXup6Egzqqa&%qGI`Txfi{;U0h(YQ5588yWj+OlkDZ>Y#s
z1!K$)2gb at gBPS$k7)w>`(3L7s5yV4gKCn9g<b at G!HFDmv9Jia!Y##-`kIc<CVN&i(
z1e7eOcqyK;f|_x}C?wKA+%x_N@*@ICAeNZF5CLp{#eW8f5%x at ti)8YEwET}I$DCx0
zYIe$LBA*$Fky%MmIVsT`e}MhN+3t+09&gqC_KnqNfBI^DX?AOEX>)a9cWagU{Gskv
z44#$Ae(ayy+cO{B-TK9w7s&;5wz|7KRJZ9ECEB3nSk(#+lrPQCqJ^0<56Y4$QKnFn
zY&bT&tdgpv(3DOJ{0p3m_wVms*_hp49Nm~5!igY8)af?Sw|jnN;`+|g+jlQMx^e#M
z&dToQ(&qBavuFQKhohL>!WbWyl|(aSZfkaTc$(W<8ew}&qpR8N>}YGDxTveW1=_c_
zG`6+4d0BURi$pUyIECK!CeZD1gB~A9UUauO<a87Z1F}3$6OHqBW35BNOv}b|pn{S2
zNaHqvS?RK+$x1v?jEBEQ$ilk?C^z{(@SjvB1zqd{)G at +;8MdNqkpwman~sQbHG)Hj
zj!?7)?Zb|QA3Az0?8vdu!{NbUM}k6+1cn|C3^^PS0 at cF~3c?G6UlAVi9}GTxzzZP=
z`vSw%Ua&VH^xN?53vz?la{#~C%Y4QE`m$_eB~v={xl$yf|NrTF3%|JUZ2$jn`ToA&
zdw2I%)3}g?I1$|4-Cc%Zm;uI^fx%^Pw;%x$h`Vds)RMaEws*JNcJJ=|p6~Y?XxiP&
z<Mh)BB at JO-$Ip44*dQTsE3(FF1=WMRmKDc1aXxfy$q~{=grF=bQT|F`mX-`x-ZYMt
zi0nA#*Bp6G9VnbCb-*c*XhQ@<_lGCNZ-`JZ>EItBBtw|$#Q1}M?7!sA6Vyq>JlKCV
z?WR-!UGUhm<FIrAO#TFU9+1V)LqW&(0e*%bz(4%e41BuYoPB!#;_T$`Xnz;;X~Vr8
zZ4PU*y at m;&o+iskhyC<K=Yz9jZ(f at G>zm7fzfx0NUXssvCuSL1IcAyYU&shKfQpSs
zXCeY<1yU%$A;N|PKL$HxF4tdN|NZovw{KjW8<_5EIy2P`ZyTHJ?X?vRHI$5Wea#jo
zqDOmLX2<%DkMy-S)eShCA-N*UXsa_iECz<F>#fxdHdCFo##E)V8VyE+c-qX>wWccd
z!dj!ZnG90&Hlq-0b;X)Ub|46Xw6<z(ok_>jUZb at d%8V67NOgIEp)?oP6sY77I8sWb
zutCp$O+iLH8%&7WDJEYNdz8T|Du4?>1?0xfL5kAS^6!7v{&RVpB|d?FImOOWhv-i1
z6ly>(j+Vuit=l#UE!etg%eKv{;NP at mJNVzQdE5HU+g{nUO=`i`mp33=)@|JS^2V)L
z{+Bjv0sMUOB`MMiC|`gUC`CXQ{=J|$!f}Yg(Tc!Ws00E-_-T>cM5sH1R_SLU=ZsW?
z(9A+BhAW(c3W{(Lj0q)0_)76(*f=r5FEQMY!DECxg4YS*I2WM~sz9Wk;9pQ(MF;aj
z)rimnDy4w`U-7S00Q?K;ygkf0h*2LnBuRTw0p$Wb54l623WqSsuTX)*dqTVqK`D>%
zr})op5f0 at PC5Lj#3O+;EpD(|8`~1T6*!<MU^l1O|XfGq0-7U7kj`|U2J*}(r$Gh*J
z9=$f#_5StaJxykvrdV5ASe&0lOu}V(=J&#b{2;7|3iYSK%~EYzTo_I8qV!ns&$u`{
zMBHp8#BzQA<R4$W{^-)|snPa}v%Qd+aH at E?rFwDDu{_em&R0jB!P#hTZ?HOB8#>#X
z8tUy|KU_H8-#pyu=xeKUHq~}C*0wj+w$xji?B?b=OQYS?RA=VNYxSbhW@@w<8*Mes
zb*5H_1!=Y$89k~u>k)@p-&kAaFjqF!(wH{Txl;mhkXctuUQbdlsNssl9z6nygpk}+
zmWz?%Y at rBZ?<_TzH3XEMg<>(78bIR)7D{SCD<P05R at 0-QStIjb;-5AAi}elR0H7#S
zI<U(Px=Od5H0`!-ciX}OlX$wV8UGE~fAA0ZH{k+=0RCq&|MJFdLN;xGc_XszB_$iS
zy|iK53+uNCc?DU~2;~}{{iRX?@x-UB-<%U4#9$<x%t|<zf;{^gHfBVV8N+Ba0=*{@
z5rUh5-jmpg;~G36_Iy^rzt9D#4rl?iho}R(u%-pFQc8CiR!<*A0jI$KEdG at XkRi|>
z&<=qf1|Kchze}h9;<49F%{+S_-s^wt0Myx%TX-i?P_WlQt|w6c5A!+Xf5e?*QkgM+
z+RO+zja@(AeD}envy0OU$A at Rf`j=)#jt at DR&p$4TKTQiGZCB>{Ub`^y at bu6Z_ZL3C
zJx2;zQjp7p59=+=IY+U&<9!qrhzRjdiV0)DiIHzsKE)_(x>%QhB2|F at uOIyF<40e;
zb^Xqn$>Y5aN~6ujl8JWXPj4);FJ`OO5dZL1wUq at 7P7u0uwzt+==|ucMyZP*NKg+`7
zy}~>6wL1{zNC&%`sZ)_YJ6q~Ho9$gKbwWEDtVm0psm)<&bC}!e5mQ&Qt*f~fch+8S
zT$7G^W3yGSq~2KWFqTu)qL5|Q6+)!~p$bAqU!I>TBrlcJrZh)r0qd4|X|d>dvRpJ4
z<!jl^q+~}3Bzl)V<idw#3cQm4f`2;8Vw7tiJ58*zk_OPhSiwKwcVmXvZP(WAEVu94
zwqw`U9Xq#d-?@34+or8<8$}4TLu$eHS2iKr)(OCGl>yIY1%52Q0{;sBCHVQ|i@%fg
zTa|XG-zC0Ssgit3pR$eE7-n(?gC!yP%9Ck%AsK`^VLTPREh{8z+_q3Br9}E6+>s%7
zSV<ztBYvv|Xap*-c60#zD-{6z2wPg<AMgtn>lK=7xJ(7jFZr(ufp`kS&;7e4SE^6}
zC6INX1>^#rhxQ<70ZiJ^$V)G<&+E|cK+gkVz8(xeF#jLn%Sp9k6o0r@!zByXKkvDI
zc=y`bg^NowcP}rUUzoVKIDUG1U}3cL)OhEGncmkfOum2f#D}+L|N7S1pWa$3E6Oh|
z%GZ<>Qb?qV&W1~HfDddf6e?j_BVi<RfRn^foKaJfp)W{cnVQ<>opZBq+&ulxowGNW
zCz$-4?yVnes(N&)`)?mVfX1pYGlA;LP<IO|z`R7Q$>8j0Z*T7y7#w_hb?Vmg*wvGx
z%g6iBk(r^+>7mZC-qzvn=8<kRLcHj0s~>bW4s<s5cQkZ0)#53fO;%hOL#nG{?QAf2
zH(6<FAjEY at M}0NYW-~OJwDmO_#9mc`z>aIK$ghE4MU%^k1Wx3X<t7WsNmdJeIVsW5
zm$87UR6t%^U|Q){{8J8Mf(0#Ln*A7sP!BO#A at MKfE=T~_>(~cTu{$H|GzNBqe>bLC
zce}6PfBSFnzhTRc^_%em68x+97g5m0ZR<8|M=<{DHt$%sNr-R+N`yNQqA<^Y`W^V!
zv_SlSq`b0uyQJt3hQnVSjQicQI4uJ2Kt!Yj8vk at DAU`SGCo$YdsesY~6hY|%>VPPB
zz{Q!B3mrjTiu{&x6X54I0pJJu&vLd4 at I&e=OF$5Q0&kv(412aK6<~uK72vgU2e1e8
zWvGddxTmlm0(l$(;1Bin;FylOq{I9(Edb6CaMc$+bJu5QT&_Rgxx94a-2B6<%dcKr
zx_f@^_SxeE>R09m?ktZ!xi<UZ?Gx`^oBGFl7k_^HG&!cWtQZwA=*o+sR!>c2ZJ%Wq
zGUCGQR5D_6#u`l?<W!xu3N}OAYw{moUz#25esJZ~>o=B{r}~(SXfl?znu>*AaD6?|
zWf$}RhN3D>{@agk at u|^%XJ<!S|G>b|$k_LvJ$-V0?#}7)J7=eEEKgoIF}yI|y)f2&
zYO-%(yk};(bD~cy)UZvA&l>A(Q7?Es)aj5RT*F{T-C%oNUu!Kg*ltIN;*@kbYLJe)
zss at v2-l2%FgeftV=LweV;!K317UvQ)QVSSvXRQO)IKj&**AvJEs9J-6QUHpgG|Pf~
zsf#kof)*U5b9d~>A at I*OD^o_;f3}*$B$9l9|6Q=!u*|)CkJ~Qy9Xs8(?bx{${EH9>
z`>%}uzrp{yO)~6}D)0*6|6lO0l;U5WLTi+O`8C<F#f{@E+^t|MgrgM*tp3kPG~lOm
zDkf*5`~bg_)F=UdZb$M|T7V*;0!kMY_!a&+x}?CrdbWlmHC`O at 0HWOZ5I}v#@?-Ns
zKJ`y_7%BB2B)lr^<pmoq2#UaKr4A|tLJ=qs at mml`<LO*S1b7ltarlNaPxvE}6q(lt
zG6KYHCYbIxKn&#m{NbzbKDzet<C~wodE?X9ufBPG at zKTUhvz0=zc~5v-NipYKJ(L)
z^RB<W_QM-zD6>#(EH5jrF;o^8<mF{&u;fA at R9cW-UX-IN%_F01vtv}tIX2N@)o at Mb
z`sw4-BRv-ur!Fo|09t5InEapYFbVj(zCJn9>T<m=U%RL~@nU?Sb7pGd{Q2`I7EVqb
zpW!nf++KL?()63x7w(;(zPUVkX at 2<J?BMC?e*DzZRNu+T-V>wFx#3Rw)Z;zPESHUS
zH!`6;(bF{Qbd2{jj&~ys2uo+<-HyRFTYrnCr_tneRKp|MVW*v~gHx`drVO>Eg{P#p
zve2l>sVd3T=0od2I-I1|`rz?X^SxB9aRHQr=-n{WE}Hm3Vw#beCA1*W*ApT#Kks7<
z7kM7_ID7~mn*#?Ai20;_QVEz=+6R;6zWwfd+0Wmn at c(P@^DF+P at qfntOX&W4{3~~`
z;t`Zytg6QEv|tVP>c#raJ2q@}D^3YRbU87)oLHnhGaBJUQE7T)W^4dwRoNVomsq*4
z>X#hugRoAhR6yZhseq*SSLgPG at t5bxyrKfdwI(Ipasv4Ql<SWjU_XnDm2gGjA1*$1
z{(wq8)gCZU!4nZZUn!7gD~=|?o-IUCHVO7 at Q5t0&$YZ5m#MlybB>W3=N|c@`%+jZz
zU`ysgYR_MUD>lblE9Ah>r=P!l`}+?b{^g^G-#xkY!M!u at +?fC9-l^~3y7-R|ue(0G
z<@)@l%k|NjiH?f$GJ{^HudJvxR2nKP3iETgEJiF;l$%+jE7O(cTMe34dlg2NIA^x6
zp0i5dymNDLdhFcd at zZl-GsDiMsotp`$83+#yPrRM{pR8zFR=gT=7zp{eDS?^XoAfx
z%uby>y?pN6`3n~>^5hFXy?^SBD>L`cPP~3)?(W&i8%yI?7e`Tq^K*k|XZlYc?;}k>
zDVC>tnaw^i+(Gl2Jsr~L<9!fKG>vxF0sfIr`%qgg(%)>B!VX%Ev)<5Qt6UXbt3^u-
z8!?sV62-x0P at 0{{PB&7J9xHa!MEoz7I~4v|@t|c1{+V5&HKy!8GfUtf0>2gfAMt?A
z18P?AfAHV|KA1_}yKmoqM%o!>*>}Kw at BZC;_Pg!gvt!quZR7$wcF7cA=ca9>0766*
zqynKWZoK%N{eRX4yt3I1StmsLh2K8;%HIjdSHhp7E_QL%NFFv4SB((vV$(1J{7Mo-
zy?DVB<ReN2c%e>Aa%GaMeBv-);4!p-cpKOgdvL;xr?_I~cR1Ml5Xk4=6UbNK=i~=T
zE3n661ADADW*nigkI>{r;AkS+fhAap<kN=jX9qi92rmxGC-|pRMzetB5mGa%k=QHV
zwNmj8vZt9)n#s8t4%WnQtpH~S<;$6VX^MaP!1c}BzkK at YKR$o;%hxY{@#@*nA1;6Y
z=J}tVTyTAQ-Szi3T&}N1m}xfE=qj|vn(AtUzPd`UDJ{kel$R9hwWSqhg@*DXdrbvP
z at yrgL7-~B=)pdH5HBuM#)qB^@-?_ZJG(Eg at y#LJc-l66yKL69_Z+!Lm0xw*j-M at Ki
zlz%^c>vf*zPtD%GaplV8i??szLT=r>!6(0XaFSr`@#X0|%VYP>Ok7(WzI<Zv+TzIN
z`Jr<&edlNU&rSF7e?B$db#lykVz`ZOfc_oRdK29aDfOeBcC- at AOQ~i76HnA`({Vdy
zMa<>wV?s1%t1Pf+a}lU)*h)qP1RsT1YZWSxDR%S4W(UX at b6lZfvkCmK<-g2AFgwa9
zDe;ew=TX+WJ&ztfdgL(kOGl0zW{By)K^XmT2H^j|8vb{=@7w9Vcl%EF{|*0`XrdJG
zzl!1Q8 at BFTk8BaLVe2kL{Bre^t6#SE^}l(shJ5~q=ok1G2kf$<2 at I4X0Df}e+=L)?
zL0jRU;Yq;H6CsLFTA=XHY85%A5-KgBK8IMj<q7zyK#C%y6nav?{-{V-#nmTy_=($3
z6fFf~0|_kU9g<uHd!8`BGuTYPqln at KV>U#=k|mpQbOh31CgPMZ3r!$OIGPw80^JbQ
zD at B>Saq-2O2 at KV+q)%E}TajbcWJ3N1|5dv&AFA_f6LkR0_1{liU%u}8>h<s5y7cYi
z^ML=ycP_X-zUKP&uIry~xm at 3Mwm6J6H5FQ|*<=zbP-W0+%F4 at 1Xh<2WbS6WEwWg8^
z%#gE at V*bhTu4{`!Hx~!49dACrH2>zK+t<#Wymes_`+onz?4$FO;!phNHy=MB0r~ag
zFJCiv>U!hOg?ra8-oJhQ-kqCwZ{NIi<Jzt3S3Z6Ey6eL$AKspS=i2OR7pLx at 8NanO
za(!`#8qvAqJq%_us(N~|i|5jKCodqEo9S=D*Ni#sW1Wa?sLg^vH-wC|TL)XsgDs|R
zhoRG6*>2T>d`=@Zz^p6xkp%%!MIOCuXbs?_psAOe44Y*nY_93?VQVgc at hz5H!9Vd2
z_Fs)dkpF^zCilF>PSYVc4UQf at r0~xGANW5klmM4-<e<ml1BX2J?mvkA-zB1;J!Ao>
zz&5wtTX*c<vSZig?Yory-?$Zouizi(g6;KN+`vDwaoes9N~8*?PyVV1QXSMM<&)p#
zCcrO!3dmQoY1>W?*ePKvP#m*M4KGXz$rjTBLePRW<WohbkRtAMOF<DBEerQO6ozoE
zQi31k(|8iSCr{CYm1dv&O~UL0eleLQPo7b$p<<&NSRh{|wnX(Ryoby|!JarrLY-A#
zDQ??XhJ`Mk<zFUmm9QE^6^_|ON|7|~VVt8H12Lv#3*_=kW>qoZ&!hI}w3QDw>ig=n
z-29qsHB7Zu-kE6<DE#q>>#J9PdjH0cPp|y=&PCTp*Ib|7aD9JY4yrwAYHZN!4F*G%
z&2Hyk7PHA}G2;k~)q1$CEH!$&xvH(f+SP0y?rNMJ>R?ms{@HQXXIwvg^wE>Yuiv}&
z!JGF!dgHe1yLX at 5JgGqc-|yd5FU0fbuj!Qi^7G$#d3kyEtw(nrKfH7Q_Kh1?F5bL$
z>CTNScW+!q4ZnVLihlIlSEi{=-9IySduimx;?ULkfeX_;bQaD`I_cRlw!!2QGuZP(
z&5I+g3&X9j%ps)PtX?AHPTNSkWkgaB(TwP8sOqY#Y&MoUs*04r$70jv*OX;pG$0TY
zRK_V$sDPldj}J?a3tJ0;NCDvBilZqeyMg4t#6RS}EAfxC|KOkKN6fEE{4>OQ at Zh0?
zhdd5R{O>>LvG2ek_q_*p??nst?{wd{eb*kT1 at 7Q~Gv&}7yLqt*0q4>MC?tdYP1|>G
z+=lE at A{0SrfzXTpO;DvZ0rpC^Y~NLyreM!y#t<cdA4!$LkFxpdsqhc@!8{Vekyft*
z3i)f`XWy2s6UJ|ptOYzE|A-Wjf9${tQOUlYTUl2pja7_%3ie>0eRi?ZF0Nht$`Y^k
zj~F$F`GhTab_2P6K*22}zy~%_Xmw>BCLuo~u{axg*c5F+x~?dLt8fIg(2O+J6t|j6
z!T(rm^;k>QkVCuJYo6^e+&tbWK=|eTzrB0)m-ny!^TTUDllFdc&Gi-G$9oGL9J1Rh
z^@i#iBQMNmb6uU?YOxRnSxhy?D!sYJP;WKToT38X*Iqw8*nVzy;O?2pN9V at Bdoc6m
z$M3%P=A-u>-}~mn$AAC&=}(`$>iY8o at y9Xw`P+|Q{>nJ0>$5kmpIexEaP!jbYZva^
zxP0~E*(>KyU%zzr-i^yoUcKe|_V(xZ7oJ|5etdD_^$QaZ&Wzq&9=<-`e`T)s(rgcV
zYCO+PIhV%TPK~zC4>ryAIc9ntbNvm|J#`ZQwWICkkv6j;U1SZps}6o?T}LhPPZ`MP
zJ_vNdY-KXYBxx;Sa}_GU>PJ>0TdpC at t3XV|Q;~5=W&<X8{h5~z37{4#^519Uf8rl#
z%~bq at CWwzid=Ll;Em+9{_Wg=~H}`!zcJJM>YwwQT`*?2OwRfwV`<5LDim-c&oBL*7
zyX`^1zmhc-c;*GJ;a8}yV4lxNSwlWAHgDUBuPK-IKPN6ATS`W>AIL|NLOtVUzytV|
z+2^?i`w*}FNU##m{XtSdzK at 5yH*(0G3Cv^rcT$I^AtjK{ppNX-iUt<r`V#rOcWj1s
zm78eX1c8E;3|Apv!5*eQg?Xs1SgBC!Me@>tICemhnU#&mupqio5Q=i-mm$Vn&cJc=
zE<0JcfV@=66E0YwO`2 at pT!u4y>MDktt0voPCflp$do0WS)-!|FyK_`yi1hFN{O;v%
z9-aLD^`)QQT6TR)S at LsdN1LVAW~i#M)&l=Jd!6{GwSs?xv8Jj at ufqi}jnF8Xvu0cX
z)yPwmJ-C2J7pC66Jn8!DXJ3Bw^otMP`tIYm|Nia!u5X|I^D~A2-=d%0o9{nSpL+Z5
zg-gqG^T$UopF4GadEv~-6U&RU%L_9XPcI;E-M!@c`0~fMXWzYc975^)%R_fg4%}Sm
zV_WUYZ1<(<uFLXy;ka{gs7b6F_tnqz*0I7r*Dr{6*~&p6+U;x5!?NCGuRx$)Y`19e
zk1XR at wK)jq5}>tYH=o5E)-#m~-~uEcT`(#@3P1 at oArhhkR=fivp)~;i{({pc$j=*E
zr$9eA{f>Dar4TCcPZlg<AF;<EHW^k^0NP^*_pBzu1VXp~x7|>9a6Ab`z#Rw`*tT;I
zvek{}-mOCRY}>VO8>%6HiAFplyQRwz$|BWa#mGO4c?EmnT%?e3gM7?BtO(frq%cn*
z68SL!hn2wx_Q;yq4?MPa4f#x$`Fgk`z at B9j1mrVy3Gy-cOk;8#L?Qpsp6vqmyS9RS
z4x;Vcy3vhA#jP8*ZF+@^Ie=fB$k{F~Mk(UH)w2kj6zl~d_SVfXf9{f8(C~!vLuNoe
zHd63NgMXM6vH$s*$rAr!j)nFmB>51AQ_v%)YciI!najHE6%6O&0;W4nC%Vn2`fJY(
z+pkVIKDa_2`nl_qt3Nzm`ti->pWZx0<>%hHX`8*Sy2fNQVfO1A<cHmECk?2g9#m1T
z*J(}FdYh%jQEP<i$JuNr3s at ZQxi~+3_sqoW7pMO5^z2ukyi0ih$&*K}zkK$~SMU7t
z>7!NX|FZhR<@(!~y#C;w$F6_=ofp^7%v?Tw;>6U*sky27>G9)ZLzANeV}m_Q^T(Ix
zr%ug|- at Cl@^BW7F-I at L1#`N2lCmx*{zPB`Zd$IrKeDC!WJy&PDFVA#cns%O at Xj>d?
zSQu!SA8^dTvfgcjXnLa4GTLgS6NmJ|xJ$LxQif${Gt-_Z#Y)&Ja-lV at E>4F!nDu<B
z2drnJ0?^tE6%h5$6&Jub5QNg;pF$9$AYp;N(3*)O4go&kpErp01@;$?9wG84@;QJ9
z0RAcj!Ue1qf__y2_k9FHDi(6X1+01j at V|YRP=_76_iyKu?gw_b^I}DmBA^%2Q>^$4
zT*ki@@{1L5+YR_hx>*KiD+)=C at CNw^MM5Ml2(y1M)O&xZH1*-W2Z4Ry(Y*+x#R~S%
zB3~H%17h|DfqsW2ECebB#xfCwe4-urNfh#dJv{ReRKmiF7g$3+Yy)DqTCP{KObYDT
zr{;yEJ>14f6}5$sK!3mw(^`B?1eAm6$#L1K33*U4WG0v7GNKGCzG&am%A}!V(&P}+
zLb-#Z at 2u7I*tKkCO?4O-`)W`2S#Qm at U72vavE2R5!v)vh-*kO)(e*85&&RIMZgx96
z%oZ!)$Lu>Cj;5xj=B6gQ%|;enQ*F>`HI)_R#6NbcvCdM{TyJ3-p{K<@JL0^&Fp3Mf
zcV_&fJM$#ifBoi at PoBK`<5%ywe*WTrzI?;=-D|%h|Cv{B-n;VE=O6$4<A1yU@$s$m
z^I|q*VrY7NXmX^VA??w at p26Nu2KI(}+NZ|`PM?^(cxswr(l-z0KD|Bj&ZV)(=SCi#
z9=g5Qdv(@%dAjq`@phhEfj>Lmx-{H4*K6ng?@V{?WT$zugY`7SAkwJst=Bo_kEPAT
zS*S9h3+7UXfm><$g4|oG0HjZBJdp?x1(68L5-5XPijP##+R(^`*@>}0cE_S1It$^N
zgFh?Au-SXFzXQLebOB&rxc~}5Xu_HbkOklfL at pp=p##6FfOH3LtL^}G;58~BUkDWt
zB7P|Zy;zZ5`-qf;?4YJ3(N0?ZjF4ro$#%Eh3idGp9!es84+8t>0FP*YXhVc3<O6=J
zy)^i{St{|8)}94hY`zM0u=x`CTlcwb2KKwRZ*<$T9)XQV!5-v8PO^Q|D{d0`o7Zz9
z=cO$h*Krw2-im_KpDR(~J_y7DXn~;7*svZ-jqT!!0nF#yX{Pvi9SijL<yb&eIE#A`
z;2$>WjO6%&tW;XD#W`uETz?aH-)P^npOVfvv8}SOp+=mOz{>Id_S9*In)H+H#`#|B
z$^P0)<BfMuv_F_{d;4tfr*{{A{@|AD(;MHtaqi5*l*weOuBjp5X%OIV?CI`mZfbPY
z+bw3JXb0%DRh1Rke>sO)MGC+K4s!?-eXZx_hVdP at mc|~Q9s9?-7k>Hv^B=x=@5is+
zcm3rPvS8OYkDo#PZ(crq^U<Hb{pzQ`{P~mDE-y|FOpo at _7k0KacC|HiceM06TVWGr
zOth=D0hyZ^T$~=6pBy|tKkoXU`yX8!fBVA7Yi9=3Wtm&^U00^t&yTk(4>!PK#G#p!
z1NCz~we%pk0xXiC*6Pugs=oS)-a4(bwv4k-t;S-G12)$bvBJ|_Q;Zf+G&7ZDYK0eo
z>n~wV1t<iGaR}K6BMVN7f!s1ACR|YbMTW3b%rzgs-~eB)nFRQGqXMuSLu=0>8!P&h
zLM8Zx4y>xc0m?xt9p1bD(4PGV-S-_t5eSEN?K!Yhq{bp5+9_X4b=WUoA8>O=_)kJs
zbwPR!<vT<Kh2x;PKxOGSLYBQI8BxCR!GaiS&Dvw|k#L`b2+LDQz|lQCeLZ#~3i&G9
zIU=n+YlaAvBT7I%t0-<;UV(>U+s2n6B-y&*WrXtzL_3_0QplHAb;P+Sc@|2XNP~_0
zS>&rb2(SmRJjVhBjTE*40|WfRLV~!L0qa_9RCrQ+bXsC8a|lE}1z9P~u>*cofaNSM
zq;L$Kn?ZJcA?G9zqFnIbWh>_$A8)Oi?J_U+S<epF-I#89xY+U5neMmG^?z{p)UC5K
zXHJZFwl$kgMrxjp`ntvjM`wFmZ%<cyYcnI7HmjKle7&xmv3%(LnM`i5n;F7vsW*2t
zT3MoDR^i&I at mDX+-d!I3ShxV!51+qFg#Y8`@3?;W!1Xn4g at 5_@`!{^*%9;7M9>4nG
z`|tAl^5Xb-Upw5n{avlpU^`nI8|$oXP4%!zw>8?8Fu6T7(tCWQx4*NA8Z0BDq%j{{
z8hrh9 at 9U@gUpw7 at ccJUn3FpO$=2L at pC;RP-eKsy=&p6FwKof1%!%h03#>&CQ%7F%5
zzoVktrr|8CQUs+14OIm;T`m{HjiMr&Oi_rUDCJOUL8t(Zfa78bQS6BM5(Tjn!Axvi
zWC&wXxB#IALH at yk5WRX62yx%R*T)+bKneJedLYW7B*F&{0{%n4Q-MAE4(<`UfKw3a
zfEMf$t^o(ZMPcN??tO=Zto%}a@*rOzRR*m=HSiZgL_$r8byXDdskjQ+<qq<(_JAK*
zGxZ@}`$9Yga|puzRKSrvAYWPgBYU?iIkbE0{+*j)8rijV{mw1OD~N#o76E%?>&BNi
zz4D?$KCnk#e*RC~(BY&M=c3g0G<70P9g149`SP%-ItaqfD66BaPEbbXhZhv!&z(mo
z2P4Bm;2unfjbaFgCDxpDvB&po at Xz>ePBKSQIDuy_&!w%y><#%{hqb)RrtP+sWAw&b
zs}=sw4B0P_H{6_VemLLu!KMB;&JNx at 4W`-~>uP~|qoc0TVMiCb7|!W&c6GG2x9|yT
zwZ5WKTgGOJxw?`G{CZ0@@xL6!v;e}H!FD>c_s<=Fe0k>S^;y at 4mw*1|gMa+_qrZOk
z*55vR<DXx>;rjmHsKDQU`3cxxyL|rA#S3q}A$-L2U`KyvV|QCagUw8c1^(^gS<4HU
zbz2;^7DsJgXEV~-T-VdyP;WNW=t>!=VBjA<qK9Y4UBBGHuRT2JyuaY&(BAD69hWAW
zmIiF({?i>b$J?ui8Y=qi8VbTJtZ@*t%~;q{Bd+8$8uA_byt>L<j%Gr7&)sB5?>Y1X
zVQERGpnHX?ly;a at 0d9?ju(qtCAl4#K0WMonmxv4v3=P5&_(Al|iHG1of6P~azptOK
zuP4kb$Bwbf&p!W=qsI;(If^ep1%xgfI7BQY-GRs6140G%!gF)*Fv1H&cn9Gi4!R5N
z5F&mlKf@=bh&bwZBD{%kC_;9UWlP!RzW3KS$LBz}5B1Cg0A2~h^N@!iK8JQAB(@+Q
zQ-5$bX{_K_Q<(o1`O at HTe&t03<ZpQCx%DqSCt&}=pE$Ar@)3DG?T=iQ;_?EgcGM+P
zXvDT{Rsqk-DIECyppFsLAMU%c{FsiQz<{vO;PBAk$nemZ$Z*ADkeV2q#afnF7zF=G
zME*sx_yhPWseG1XF<s0pm8P1KrkY~xe|KGlvsTmZ(2cejraMInup~kt$Mvbk*H1a0
zp6mJQ_Bf@*seuj*Y_r4OSZ~Ad_Bz{;p3b)Z?hY(4tmaiZ4b5M642^m%{V$9^Er8A@
z8}Sbu(ahnTp6b22I7}7j)pO(DzP1dQfB580Is)H3z4yy!uhDMcGr#+I?>%Amhx at xP
zUO0dG^5t*7`ts(f5&nlJy at o%JKh9jOci7B;zu95q1-f9jRMUWKuD7zjR%fa1YIU$*
zY^f6aFVz(#dQG8TQ&3q}!2TDjG!APOyUb+eu3zrLZ*%i_!^s}wLN{VM-ewqStl$VZ
z>d<Q|<3P4hgz5r$F(;eTIW}#!r96vRh)yEZ-*6V80yKq52bhbdDL^a)=_^+z*&T-H
zl@;c=DDL|R72vEJ<AS7Y*se7d2=Mpw_d^$8BqB-ng4p6Hp25?L=aHkHhmRgR<UyN^
zDY~Qk4;?<>apb_EBfQuzwP2sr0u*7-exVnuZeqn#D1Y(Hle^Ks3LUpKVE_Y(4TKnT
zMI!y^-qOI@$Ig^OzUKiqPr)L)%lqIi*2x9(1-sw|<XPCOPzRg8`4!FuzMzl~_z`tp
zMB at LC&;RK^IVptzeomypRL=ntzz<{O+F3MWeuypsKYOB#jAQxz{d at xh{DXr6SOzET
ziHnJhize*nh*AW`KPy$NZ?iKiEB`5M=2H0t{3O4|^4wZo0g+F$N!WktKV5chZ+*pJ
zLnZOgR7VYF at XS!%`H{NIWA(RZn%}?J|M~Tyx6ch+J4xKpNYuevN^fUNe^*;iM>8_g
z-__ODh&8sEs|*#TmF2|-Z3%d5vKy)Y!*)yl3*jx}my2UgDC2IN9Da0e;;l;)uJ7-B
z{q95Z->;wC`S!^z*Ov<a|07i3i<OEfb3dPc^B4ZCp`oFfx%qP!F8$?)@8HfgR*E%V
zb`XjSaxFCmG7gKeioCnlRE_sRYV=yTrm4X~y6dQ|v6~GhLpck- at RXJnX0yAgDavJm
zQ;ceey<iRFd=Nyy6p at vgk&%&}nJNCo`uyn$=cN%V_Yixy3}xduaxsSjxfr6ffTLHO
z(c$z17vCri=?l{chnSJz?gQ7R<V|5t+=gc+ajJ$Z%#n0tpu3Na2!UcHM%?-d<kk<0
zfC``pLDCll1_lJ6184&G%YA(nzl*1E3KUPhj)|xDQBUt9$Gkj_96JOh at ZqBeJ%p at k
z#4}1ER0E9={(=lb2oco(A`1CD_w3!T>YS81Rby9H`1e!fM1cLV{cgy?-CK}-ZkrJI
zZETuvP~knWm&ku<>johpA5pL;)IlWp|5L%9r at EU4hc@6R{t at 7ptg0lrk}GdL#IEAr
z(}wjBRx&hB-9TA>jDJXQU~E)GY;;6ibR@=~$e*;AZNx0GwJj?Ds`CXo14|s7eHZxG
z<PiLm{L<oVHJ7!TOR4`$<6kw_Vwh~JrUbe?XgfP(yF6ZhYr6T#xt@<N5B&0Y?%f-+
z#2(J(I%iA$a8LVyv!&nJ!jAA at cN@=EM=jNUn at MjF>*OUMt-)H|WUJ|DFb}lXgMWrF
zCwm(iNVq)L_uveBloQ{-cIqGBJo)*{x4(Pu{?~8c{NX9hwGUk`s-54y|L~G>1P#q?
z=Wo3>Gd|GP-r3bRG&Q^M;5EXeFUtxti*hp{Fk$EpG84v7Nj(U_MEBWPWicA6bYl6}
zYSf#mD$G?CwMIQpgw0Ksh`B^ol$QzZNqI?uq=P7CelI601L6qqpPG^a_)}6+Qq$7X
z)6=uFb8>TYONxs)b1>7c?=%&3TT6r%=yPGTu#{y8N1(|vm1aQOML2{C6m$1MoI4b^
z$qK~9H|}1=Diy#NaP*4OG_*pLsZj*({zONFMuY~F#GwcTw7jzzH{}jc0i_Q<1V~=q
zUfw>Q-acMFzC1m>e9!{q at KH~+U{w)d02Hp_;HqBWGQ?+;zo5S?h2qlhgw`9v80y}A
z`vvS_$dsj?NPiYaJSg%=*zY*HZ->Voh}5<z*zeu33FHg#3)rvQv3Z?>{R;Tk{SNv6
z$uTuBkEj;{{PJQZ=Q6p%1Nfm1Ch`~H-v~1d;D1GdA9g=Bg-Dc$`T5Dnus={TjVt`i
zny0k<*>HEjT>xu=z<&Z|PnP&3{zc~({MT0%QTfF9w_8Q<)929j*H?@*8%CS;vrf}O
zkA?W>^g!)}(YotX4G-p9KfOBm*9VhNE)3l|J;BP!P**b?L0m6lQDv~Jh4m|n{Cypb
zt at UElQ0$fKHAY>jwW=I?hh|$9n<fn2Gl9$!{lah?dzA1<JUlZD+Z8hmpTBkci??r4
z+xh(UOEM_>@x6Oz0Y8gc87T>tx~75SOQx#I(sG@>slBadXyMGIhp)Y%Dab(6xh%j<
z8Ccc}^Kyy`@+iMjg4NT5sL-Gb)p{*nK*eJ=Qxzi_cmZoQx0y=Ii}OngvdfBcOAB(q
zKXFt^VP1Z2RzV(o5*cZ!DLGI}q~irLvTz9EBcr&eh)?F{<?v-j3dlu?-L)kx)%l!G
zvuZMG%f&IlT5UE3Qf_O?<28wl8glxFWf``H*_wpKLXt>CbN3KhA$$RMKT{K9xc-JB
zutACzKt_im at V4UFr91G)9Y9_uokD>67rb_G+j+y<$Z1fi4#G8f;Sq?DWSE35tVT*o
zFIKffgimWiTJdj$bmNc*#IRs~HPzj(iaaaGci(nk*A`%p?Afsi%q!S~{2iNCz`td~
zOIs*ou73%$|MK&HL|%ISk1woZ9^`XO5ae?)5aHmI0za(s at CgHcbqaP3{3N`@{E!8x
zgcsva at Wamsk4el=!6z;{oU&(1LUd+IJdqFh&(BDr>|elD#H=I at hoOrySl^J9pB%F`
zx85M|FN6Owz(3HSC- at m@(u??~y_)*ZsXi-R;Pb;a;-9;-%^zLv|LVrjKi-;u_59 at Q
zaOdnuH at sLgqdhYt-P648Ygem?@WnZsY_L7sYP6=xQd at O-U5(aZs_1F94t3OV<Y;D~
znem&`6CE($-ags?Xn6pfKfH31MVnWzEIhrl{N`n<_kX=~YWm}QOXp6`78c~$8(XL5
zPe(>X6qJ-#n(AyV-K{+%b4wSiN^=rpA^;2=hM*-rE(XgD5emPhq^OW#RK~NRgJ3s@
z=!lU#Nf}XE0}G0_1kr0t at B*yx!vdu6Us{xxo0S1ITuM?xQbIgzLQuv*pG6pyoFrc4
z=D at j<%Ab<QAC#Yi2hkR!8S>&d8p}OUM`aF<z at o{hF5(hs21!A6NxF_}n|aCHTo#K1
z;vRR3@&&vvC;|qG?qo(X$FO2h1lWxzT*pL^#|d{pLMLh(;h{JMlp#1sP&ft$@tThy
zKF|fU0G3CX9=-7h!X2m>NrXu&`NCn61uh94^MC{uIlLl#@^?bT=~;;jJ_bD?VGm(H
zgb8ql$UJw)A@^;RclPYqC}jIaiacO`=hpSxH?2by=H>In%@FiT*em2Ko4<BLQz3ut
zdNL=H0lzBvDDcA-zh?O%h5`Jv%e}q5B=~)(7=V8a#Tx!8_^;w$L_VawAfK`)Tie>g
z46(;roXOZ5Z7(uk##$Pxi|B09`R%I*|1h)Z5#pb at F4JPKWqF|X^k6OIw>OVB-J5NG
zbEy*&JlA_CKfE!0Vx&VH?dor1-)do^Z*H^)k1){Lfbe3lvw at XE_<R7r!>of2m(^Of
z3kTY2VUS=BQ{aERojccp{C2j}_1VQMOUKX8k6t-B@!HkJ3o|`v#KqH#gjl0a>Xxp%
z*Dpds5}%NmTUb`4rLWLrZ|xgDahB^F5g~!JJn(~}0uUCOo}QMU$472nZjO}f(&9n{
zY82c-g{A~Y0MtoO5cpdFKjc at svO<2zk%HW;G!7PUts|8?m9QhGCWCfd0q!6 at EftTD
znVy!0QY0nhWTituBn~{KCzD|j`B+O+xEsz at Xu=^J0mpEw3ONZX908XQ$&1MgDhg5|
z1f%m#|D7o;B2ow?=u1+a&db1AC%`zDmc%9K7|It^@Pti^i6pWmxr3xMIx-?EB0Mqz
z64Q{-kl<&vK&A>p3w(W*B0!8M6hSxzp$Ny6kUmpT`d4A}6zbGxg<%YWAEuX?WP>fi
z?=avOF~6$t$W&KU^(k*E*sJp9mh}SjN;bUwJg|T1IUx%9JUOE&56J%C=j7dRz>nEq
zyAQqwev$UBggqkiSKwC at gMdHK-%kl|J at _Yd<h+&ue|)qE`%~hxQ{(x07Ra)XMuh!D
zKIzKxo65x%(OO*|_$Tsb^0V8nrR=HjFN6Oo at X!3iQor@|fc28hf1yBs{bV~lkUu^c
z`}Y0}0sJUSRede&p|gQIJ=DRbA?+>rta at 8*tk$w%%Lzze-vYaW6;fP1TVUM{M(!LP
z?`>cX^W;d&;!xwsLC4wA#?Nn#FHQ|k4s at It>$$o##hBbz4^KV3e`m0_i_nE!o`bL%
z>8S}x$vK6kMcOJ&Rjs+f**894lAX*@Spe_3k2n8d3?m~Wlc7Ca`A8>+&CbpuVj;4J
z0*<?rWVn^YIR&}Uz9}IJ0{>(I7;{(<(~}c2Qj^$Xi;s;;PK*cYxC6l#nx4vw)Z|2z
zA}Jvb0=k5_Xuep&H5waUoR!3RP!0&TR*S>XNUbKrEK=iCl^rua2dO*j11u5Luu4|S
zPJKG%I5m_dT9dhH_-pFbByM<c-b&i{{Qr~UqVepcc;t67(Tj|WiHePmii$)RQ2LP2
zP)JW#)PcNN<jhhLNEW;>m*fjV5qS9c`1n4f4oBe%R^-^febRyuA97s(V5rYQMmJ%L
zRTZ8Cu*mLWdSMenz`tGA^9lQDW~svdN`({fOXO41k>LLi0RM;o_kaHL|NS3MCj)zg
zn1`d`n0<uvI;#aw>YTp;KLsChUUo%Q&P&)&pBIsJGk?f1!9O6ubu#Lfo)iQA;VUEO
zRRzzr$cKRk!hXvB){5LZeF1G>MqCvB0Y8nN;ik$}{2K{=&dB_i_~-g$!|mzD2XoC&
z&p7|~VEk{d&0e1EWu1y*rnp-ww`(VQ`DM#cXMKO0owb+_2VCgY?R6}b*FgIZy;Zy2
z(9>vy-l4zAIMiyMAAs<`ey-PcYM}1bQ(bgy=~%Tl+9n6P7N-VghdVI)=T0xRH8*f6
zI5jB&!<(3xl#-s6S6r^GuGL!{b0^O--O4VBp9DYeIB#x1U{F+a44#6l6-iA^RjQDa
zon4SGf+E%v%1U5CEF^j%aV{yyAq4>Z>@MeKrgEVbuwhKFx~%g<jhmL7s8j&tC&tHO
zfs+&C at D2$0PmGI>jSNeSjesLGBZ>QN at vtIS7bH+7LJ_zpE3ZXoks3T35ivo>*dbP^
zrYxH-JQWEh(n$>jr%*-$WjYL(Fke|IG;SbP%1%on&Eb3FtQ3DD%^mrSmRb-Q6CEj>
zLU@=|1;KSqq(r753P>_%#w at 5p66ogxB_NyjrupnCs8iL4sIvacM~L at 9HMa?8tcUwH
z0Kb11EXrH<@7zMnziZnDFpn_3z?10()z4COo)@3{1M>VI1?-i8{9nQUhyMWi3j7 at 6
zL at 4{v<P}%%*RPY~4WimFh8$$6pIvDh<X*>)O0zG(Pu~Rm(?+CjCcrP}+=wB07qV01
zh${IpVpu46s+^a|2g^_7V=iaxL6rTOc>w?Pd>Q+}{tvF;UnIYCPJ#cWehb0R`JvkD
zla5=*8}83GesH1t`#Zy~CkuB at 4T@XU-Hn_vLex^ZBL9c~pVe|_gAodJxS#=lZ?jo)
zMC;mZmCiatx1)+3lb(A0NUM>-o4IaWjALSCz}enR1FOBMex%Pi)ZNBW;D_fX&MqzB
z1vnN=9Fmlj1f+}0DoV5lldZ8lKi$t8u6|EUodUmq0Kss8ub+QZbZks)d}4A68pChN
z$jHpd%*@H5fJ5GzLwZX|lM8*=d1#;0sFfwhrzFJiOpcGHdPevS3py%5F<GiW0{L}X
zN}?bgmC>fGGe;7T at CD#MIy{)$&D3*9X$2`(Vg!6>b>(S&wvvX*EKa41Yw21xjIy|p
zu4+UwHON2<*r^d7xhxy+Tv3pY6A?<38pqow+(DLb2T}`?GE*pMBnh4|sS9{0G?d(*
zBZGWDXeOuD2#q2{$`C5N0to_I5Evk`2AMdlDFvMc;UPGFAoM|eczFqBSkng@(FoDL
z5;48wzKzi}Sj3e`%!_EB_(u)%sBD)32G!Mi at xT7ChI|Y@!qIR}DkBQ{GUgG;SKwbM
z_{*9n!M_4O#UFBBC}LO_1^nJ#$Eb`cVaQE_KY#!@iSzN&_yd04f}GSiWkv`O#Hhch
zc|yV|8ori_JiD~~6g<VigI!D6ld&HvKj42v*nd6XM@~3vmijCgM(h_y?bjyiZ%#Sx
z%``qa-TC2pr|Z+ at drJePvCt-TH=5XO>}|Gi{G!RCg9yE&4*qi;;BU6-06&|*()jCP
zb!&kyy;jFAEluanT5V6gZm`k7qz!@A&_G{%TWfut&0cF2o#lF4eXXg^Qq^RuzJ79;
z=!m$5stnagZH4aS>?8<bibk}JsE_bLtvnzwI3&zJfQm^-NO)vSTtZ?p(9c5Bk<6@&
z%&g3;EW#nmIK=Z<bpWHt|4BB1F_)Kls`QhHOQ=9}1jZIcz|<3ggET^Mr2-_RL?ir0
z{4c+8RRtm_@@FJ+^eqBDd~H at tvpx&Ti)KR(x0T5YY~`7jvUCz;izX9AV0HpUuxN8o
z1WeO2T98P}2AL{O9A8kBlS(OrECY|gG#6SR2q)8%sf<a at jm0mZ2z-;oY;^xohv-Q7
z-<2YSga)tV&Z~+*DM{!B4g$R(c}5MCCJ1Hl@<fC>Agp4^ab=j3*M>IN2G{^U$lsxa
zLA8zR0RM({FTC=iXlwy~5#;>gKmPb1{}<sP_$u;OOZ^i0s^G6Krg2Ygt=mQLPuZWr
zHctF-^_p2(#@iSa5iJrSeq3judq^9RHVQQm$<Zy0e`azF*npZ0<1ZL!NwtbH2sK$;
zqUNJ4KQ&K<e`Y?Jd7$hM{)Z&~C)=u~JF0(!|B)5^-<@fAXSsu$IId5Z?w{&sZ5+&t
z*v4)E>X>?jqX3}YTv1q4o at db&auL8$qiHZ|TC5e2DsT$`IuVPO)T4+1ti at E?SY60B
zK!bI7c(~rtV6oP+P*zi8WS^2%GMFVQ%8DgRb0H&q+M=wo{B)2&m<LdqbfW7=g&hCR
zX$wgIL&GSbM}<d5M_~WslVai%W8xB%(=wCOGE&kqQqwci(m6$(MuLDI39j^L;2#2#
z!$X7UK#6)wSP&IR>_7OA4iDic%xnG=AScfX58(xHBHi|-=D=&>5dM>RBUV%(G>u|r
zd<3O_&eminML;i5l^@?)mD666*QC!uSTePhXP^bR1KBdjq<zd<!Ed!7lLUeHj!8x8
zrGjxWGchkcp)@a at Oc^c6%S_JCOu-kR3;2c1)WnoTD!@VuRDgscpap!BC<1>;L<UIw
zjDkags31uZHB}+%m;5Br1d&Ot3SkdyX~^NdZi+<~F8y6%fK7~U?%2FuggvXm3>$+D
z>t6gXmFiO7ME>v}{~sa>KC09y`&<}&s{IQ2ggpxURDJ+IDS)c{Q27 at l{X2JX<dG?H
zz>g^8uYsRQD%>tHFx2#vk!h&_eoAT>e<-9 at jeoi{{sR9T)g|U<+8?GtA|EV20}sG&
zfa0g4qSvmW#XsJnpK3Fl=&C`^4Ax#4v0WXnyDsd1{e!utcb3~Z1?&23>EZGKJRuyp
zFlzH5jH>0-OLZBvIdG;SG#W_jc<&HvWuah^(ihnb#U^c at r6Rw&l+iol-Yl_KWhh{f
z#%U?(?d_w<Wv;bX)tE}kG-aA{ovyOFy1GJJ4zq+-Q=*9aVOhi`!?MMji<jp;#m^Ju
z67>cK1&2pQg at Ve6=<ujm96)SBaul~Ol2YT7Qji2G at d-(>aq%%Ru~AV`TnZp&1`<FT
zO#<F10$vqiK9l(zX7yog;FlpmBF{n*ctOn}G#J2(Dn0KAzvLZJT7VaT0g at X5P(wri
zOV2ke0ST+fjjzm!>9Z9#8?xJ~QH1RJ3ZVsfgnC_0gCXBmA%-Z>0uEoA7$_>uT#1WT
zwE#YCWz(2rVUGi+Kxm}mB0K`RAaaD1c&bJ!O(2Wmr=*<Msv_X3LR2+XmQ_V%Rq6ux
zXZk{PQSk;sq$2pySU9{#aR#!k!sT>MXc6`(VNhR9EHk%>0RD}yytolG%dVEF^GM_?
z at UIp5DR=_=HSlv8lWvy~c`Fm}6aN$ZBU`s@!uZ3I1pe8TV_Y1O0ly#b3&=;X{NSH?
z651#kNur+uFL!R5F#i0w81lq`R2HUF at Dv4~iae^FtU3zgZz{p^_tsS~(AZ-yXYF^;
zQ87 at jg_eJ`NykkJz<;vGbav3n2_%XCx?5BA57+Sj#qzb;&L(p?b{>*U7 at Oe<RLD1!
zX7fj9CPs4U7$KA;0E0r%q|GP36`EL<P4y2I;Jae=l1z{{y}mLRF1W_lPK(`Pvf7JF
z%PXsDbowfLT|I-=RdTJqq`0uSFfR)$o{}Up(8Pqe7*rsF)GsoE@<$NW@!*h%D13jc
zcuM@^1>zE+rA~=UNEVWqOk5NZMaCE%5fRCi7>>kHLLpWL184yQX at EJ<&xf)S0{9Wu
zRZs`=EERL|E|7QN0tk>4{+Z+i|M(7^vKZ_Ub}5t_0kA_u5XvAB^uKW9R~IJLlN8hz
zHRv+hszsTozCv&gpasyvGfIIwV3fjC#+D^}c_>1*sa(`6 at CBrA7!zg}Szp4lQ`V-q
zffnS7Dz}*LRl0y*AT*+gN(GgS2B$y~Rm{V1(MF^*GGGfALy~}BsxU53yhiYYL`vd^
zfJcyFwztO~7II;c75vG2cfu>Ud;2Cv^buB66!O_pVOIrVVvSPI3(x%#kW=BL&Z)}#
zJpW4y$XBP3Uw-j9CC`GNhObNk1pYDpEOSYU>^*P=ur7!2c7Xgf at MC8fCKUG|V#CuC
z$h at Ml{6s!@UW|WHRw4v_APtydY%wOBlWVLlqTAIXrhQ6<<+qnJ*4tHEhUEwUgAOfm
z$XJtZvZZpmU4OFIbh_UR{;vu9ukhc9{pTjQ>x*UTHoPNn!)gmM$_vs_feO)F&ZO3q
z8W)bh2g@@%IR^L5TZTIj<!(tHt6T%$8^v%Y1gHm6A-8E#o7<fAO>I_tgSD=qvdU<+
z*Q@<9HjANHsVJwNRU}f^yc|Mzw1CPC1rXc-|4{!63&Wg+Qv8XCj3)Ud{RQw8j1p7Q
zh<}n&Gh!2xqGJ=HW8=d`j1&d-Wyr+u3!{FBAHnpA!a{(r7)zGOhpUYj{P0l$e*SWG
z%Nt!lLBz2<X_0Uo=mo?4JVm4w8YFKgh4Ah$>cg~yU`kKmHfUr{Qn)57wnk_{Dq7H@
z&yre at tF%DPQ4kc79VjiZ;tn)fW?3ns*UT{yk~p$C$v&Ebe-~ubvbjl`K*g_6Y61B&
znF3lMDyYeE^n*z1(FLL-D&$ZUqX-lXQC<Y_3%`c)@_JP-_$9hPZUrF;EV2kJ;_&K=
z<-~0p5h9=MGT<lXXHi86mx@<Ldj9ao|NMUxHrFbg>V+usGxqZ=^5p?>W%<{ydlA9-
zGxNhr7hAm?*#!R(1w$9MYK1)6p+hh)3jFbrA&CS(!qrBtfj>Vz4u+HBtVFtvhLTKC
z?bPOC{E0LGf3uNQ_Y$@_*l7a!Sbi1xVEOy&G~>;cldXElAHe at YcMbUG{@sOP>(w#a
z?Wy`lCz_s~Zhx}W?E33vHe_MNWTryKTH;;6?=a$+7!@M#_xZp9g20487=S;b3`MU8
zQR;vx<4xpSg^7jP0GNmvm~nk at p{2d6v8BDG-PzRIVXJePEwv`I#b|_NrCML9(`w47
z+t7GI06zsu6hU|aLJ at K73m6mKhD34yhyo~0s+2TRV4(uZY00UmKsq51{|)aD5*i*7
z79LD2PwhOEb73e at Fb`s2UvIITNVF+ at t^~iY*HL86Bk*~D{__zJm`wP0puZ3HAIHHL
zgMTT3Vv-?3SSRJ0(-VY4WG?_MfO8BjFyzNK=`x1uN|Y9$2n0oB2WWw+6rl)^(pby0
ztlDfwtkD8vS*Ecpi+xqRCvR?fo(M0M7VuN$jSx9P25$r}l2yJ;AAvCd+ySiwmO&_z
z;0{m+6oJkfGXpBkmx>^+N`ZVacOmi}p%-2rdjy3hT>9`T at 7~5XI@^d!wrp63s6`dV
z)x_xX^M6t^463THvR(C5?Jb~=s3xy^txkk1 at N+txX-|wldoJ#~+&FQ_!S|zw5Au^&
zE*Js<7D&Y!owWRbpT#1;PpFBX#nNK=K@@W)#c*3?CldK!H287ZEAuh_tSqs_-9!jf
zRY2I&ZZ7GrE$gq>4mJqO5B>-0HKR=x6V1Ar4#Np&^<sC;Qm+y4UmUhx9<kn>us at h>
zcxS2gt;Gh{*JlZ$==+0bEKgQ)EKeK|q&I<FDDd<M^gg04_p$v-7{E~s-WnRX_-i6G
zX29~(6DU&QAV3BD;XL`aS){r>)6&`1<Lv3{aCWzKI9aSG6UP3N4zpQ_0+10iqQ>d2
zOb{&^Rl)~Ql_$%i42}jwM at Ml1ECIFP=AB4%Q&UpYQ`0lae^b)ZDTgW*2#bhB1;QgD
zL&Hb_(4BC!KqwH!b4rC2ll*+p0*cI7epaeEL5`pT-p8my^GnEVJ at 5{^mIlg`i~z?$
zcAz39f+a at Um~$o&%Ak!U15{4<aR6OvLBxs{<i$J6Q-u~7vf8V2l{-KSC>DvTX=M&#
zugGT0fSDq+z*w50GG!73xI1v5WrBuU#JUttRi+H#D$x<iGBt1p0O%>x4CQ;s<eVAb
ziBN<Xs^u~+iWG_<wxyW05cxh?ygIKYbRjfI98!^7vP3 at aZd=@UY+)On$OqZVx|R(1
z8CM3<3gJ9oc<xWn{pk<S3XLsf9aGI*@O$Ao(9R1b3i;wcz4$!2fWkk<pZidU4scI)
z4?lBhd0@{I1RAVSM+E!B=cB+6tB(SIW+F~DCZEV(T2y!`%X5>7d;mYKE(#0w$~?AK
z9fo|s&pEkvQ*no-q{pTiYSfYQjx_0rd<N?^V@(y4ExO}v+ at v$iJFAxaOs9IP&kvf<
z4H&PCSZ+_+-&kn;_*~mhk0$v)HySnN1sNC|e!RTD2rGUZsYE!*%56Sw!?E{=5D8El
zSMLR1MyphO=kbw5ZU`z&@`C^3mITo<Gh=UGo*Et*>FVxoYj0<#9$F#R>W$S^B*J9E
zw637rRVqNagX9h!NP>DgJ_c=|HJiw}$M`r at ATcqK(M at VTxq127xp`SRxfDXvGBPOv
zB_<`u#KwVtsRBemLIp%B5fM&Kf$Jv>Mg<7(!86t#<g;7N6I%q08+M7fl<U~I0m)?I
zK{&+k;_DHjBRm4tBsq~4o)8nxoF}C at 3KXb64v_^(7GyXN$K|YwoOpd+99l43U(!*N
z<22=?1q_#x9W;rmX?BxAj1{2;OxDTv!LRiqy2-SXl@=&6QkrNgQzr9*?g=e`f*Vtl
zox&Qp&;r_{V%A7%fl>s%JpwjLh;)(gS<fm0<jJs3?G=<eTOnbPoFtprNoOGuA>e0M
z1 at r=AQPPpYzk06Ca}x8f)p^ucN<}~y#P3>pEx}I}NCrO}An;Ll-Z_^5{vizx at HrL)
zjj*4%2pkQoKtvFhpRFR!3}N~Cd1fU=!9vWjAsG4KrDXD)pxRKJj?=W1=h$^DE9KdB
zxebIs)dejzg{?+ZpomqD{<`vEYL5+C_B%MsGSW~!-lUys(am)jX4-U%T~&)+hO_;~
z^8?1Kqn2x<mRINM|9riBrlV at O)y%CH#?N?Li8hmCBa&j->hn^kZx8O>&Gk=?9>V*_
z#nNbTJTye*Wwa{PMbTtl#PDMmk`zn-E&{#aJ;FP{&_Y)fJ-xa#+27Y=HJi-FYGbv5
z!TzdBZH1<oDNV{j`8gTzO|Mq`qUjN*B*teD>=XDTCo-?Y*h4|Sm<Gzt&CSlqq4ZA&
zOuooTms&uSgqp<0i4VL6^8}pIqbN#~R~Cf=h-v^c5e~?gim;Lqga4x*2UQ3JlNBm}
zA`lDVG6*5WR#yO-nn(wTw~2)?v&^<pqvr33%A*CmWjV>wutvyhiDBGN(Pl;4N|Od`
zMO at +OGUX50OM0wDC_;lSi<u%?$qkh`by5pR5R9eiY at d-Juyn(45tBu1Uuts1(g7F{
zF>n?y5|kF;ZP5j^K$HhbMv`NB*DyqsYEcJt6L+BA4y6bxc*7mQIt9%j3_LI}2oi>^
z&@XI+gk&@4$X<R?ir7`edO!bPe^f$-izQ!ssuz4lmU>>~$rmI1UiCsf`8+evjD2q1
zyaBU+XrDXOZJtLCay<~<FxaypP(s22yrC2T{E!(EY_nm?<q>|8*~w9WUkur%#gb9-
zqhKSI9}B$|C~Fk>sj*1oUx4xNw3Kw1i&*X>?1Ak{ro9y$WE^eOPBd3A+|F^j*>>H0
zr~XuT)naGm+5VdAW7a#9wujSp*W*#>5sr7;dL0IHMFBrafDMKzMv<F{Z+^c!nu{WE
z?hwX%KkuUfzMfRb`PpI*mBS at T#O(?TDaTe<?PSC%RKyeq5iAW*ju6 at OMRdws-`(c0
z3k&snZ5cNlnb<GN%VJ`UXI^$Xb33R5D*(m$IYK)Ma><l6rNt2QR+2kw%gahj_$VtY
zEh at r!$Pu}`JetBxN8l#n;|Q1H68IN=gIF3#1XH5VMO358n-qn>KLkFczz8Y8S_rg?
zf3e9fDs|po!VyRzizGW1TpY4ZjDeMoK!iisE|LNqH}4&70t!T25iQM#*5}1n=f!jx
zbBF6n`f3Z&0z87#R6qx<ttKBWkdsB(b-EmtCW{0?5_7 at Ir7ub&hGg6tEx-&C3~-x+
zVu-xf6i0$aXv7UoTrCMB{+IVIL!EYw6ZLbc2$4b&#2|4P9s$-V!X7OD&TX5Ce70}d
zh_I6mR+Uh|A*Gd(KYNQ}j7P*msDON~fuAqq>#^|9DuQ~gp6dUG{deEF-DCeAzytmT
zY3eZ#PAYRi0VY)h8cz-m3RZz=?0<+1Cc`0L<vh9qe_?to;4jZfWagF{8WE!cKQ(q%
zR-2{q?=TlrZ)c~Kuz!#{q|*3<e2o8yLo?Z2G25Y^cN*r}D;J#lrS7VePW_qQs;eXB
z8)KG-)3vUzmWEqR at Q0ilZfY`XF=(`4C@;{44hi%<;&I@>UiZVO0r~qridP2^Y@@%g
zFpSJ@(M3hnKrir+d6uj^i24Il2TU at H0eI#LIC7esnZj~bac)LMac*U4p1HE5uBM!x
z8gmq|w|#MM&gFX7VbL?j$qbvOD6h0IPg7h#bVS!o5VMz+RO at v$Rr)GD+|;^CT?KU{
z=!w*e3aJ;Bl{yVdQCPrWGXp}5daBddnG~4fW93Rw1i`!#s2flO{+cQ&fX1A30Q?gR
z!Dmj7-rMt-=u~=psuCgvC8<P#{H0{F`J0GHIL#P5cqEA%?i(sasD!u at RhCJ1oM<Ud
z>^9|&H<tC+77p4=SUq!^3uvOD1<h5Ij6~H`G?ZnUOoAXb4vNzRH(hR$(1Pp)wTz4w
zuz-VkL>KT2^3RH0)q+U=bh>o}W~c)(DqdJ9f_TBP;|M`KwPTChwoPtZH$gw5L`FVh
zKLt^-Ju$zG at I_RwKEqRek{9YL>21m4k0|&*i~KeG1AZ3X;V=~V7xD9f75sZ02Km8$
z#~@RMPo5)FnEm7!)~f~22EuwB;Ahni at I%U1nibDafGs?7B`V1n2d=1N{2TOntZxJU
zPD^o at wFKi2@<$shI7JHb#~OKEK2%>i(_VR^LocOr(P=o at r9aiBKi5}%W!Q9Spz76W
z>)qLwbCc~)u1rF$M*oZBr=XO!3)MeBPBOS}&u+?ATzRH`wQr9*SKjE~F`@<-M7t^^
zm>d%!*`)I*CfEIZmGCP at R+P}#W!Q}J4oNO!#)X1YJ*zM$gR=s<vI4eu4dsO<T?zM6
zYYk-%qqeoS5 at l?!)s1ynAohVV3)*uo;z7V=x0)L2YU}ORx>`%Uy%v^=#)f)cKvhv^
zv)YkbORdFJDGRLSWyPHHP%Q5Jxy(XSLQhSMQ$s$qw`jZI%R)qrR3rs70?=-Oe^{*c
zGouBQiD0#Y-i^N$sr1T>I(>?;5L(6f0x at eLBO(@Fh=_<AsSogm636DGL=(LfrpJ_I
z#Fk{l7>iSC3gSC!vPbJndMx>*$!I}GO&(gna2?VpyU8mfc1&ECq;X*cVj?y%wRuS(
z0b&+vYwRNv6(}tLDk4-)i&H%s98g9A$QOwi5w%nYei at +xT4ElU2BDn7{ww3ph#FOT
z75pfB{^Ii#^F?^0gkQdh at t5)}_?2q#6h1;!L4W-%7=JQf at V|5W7O2Y!o at M@cKpoH|
zriR0ot7 at vQ2)(v6`(Xn4iGq9>B4Sv$*TApIPT<n0E<ed2htFxLkU9Z=jDKrQA>emf
zG5#e~J5{xRqD42}TtV1B)`%8pj<@P&+baovPIgtD>M|^K8%{baFAUUN88)8n(S3id
z^XgpBJ69&Zda!VBd5Ak%n!=pCtkl#b($Fw!-~<MuZ6PYR`&rNDz7I3o>@2Xb#<Yo;
z(xuB77$|Cvp`omAFt;Peub5t5`CyiZ)ebUJ<`WPRki^9zNg}pS$xKVh$xLT-jhKgt
zP44coz{}BUj-pm;i;cQse1t_`Qfnx!<yl$8>58`6ios^%*)hSpK0egf+tuFJ-8s<P
z)!Wt4<7}7G*5t4^z|~b%SzXC?f!G&gi=VlRvcg=Hj_a0Uz#u`C4H at -B3s3=Qtmq4)
z0+c;f3XJ`if7yeA%SW<WF-(Jo6G at R$%L;3tm>r6Wz!g$p;U~u07d1&z15B=L7OX@>
z#Ib;ui)rOK at s)Xr*3wi*dGeT}q*rQzND#~gC<0>@LJ_L-sG15bsK{d6nxzBoOc at H3
z;U;1e6D@$G3oU@|8<6mSR-rQ42az*ckQNt?>XAswu1zSRwa6}G!|_cp4JrZrFpz*!
zO7u$P(85YQqri-P=fyLT|8weV_<CNbf{*eJt12KAVI}gB_}}fe75pFCC-6 at uNg)vl
z at IDOqq3-9rCIY=ABzv$5DDdZDF);h-v9OSpLF1pDz+agcQ2JvE7_zdKXA&#YTWqZ<
zfVhCgZMIecKh++pofv;=KBxf3f3!g}>L{CP){Zyu)GRvnC)z6j|58`wr9tDxfvO9=
zI at f!1On!d<`qF<tUPcibEjre3*#W^$GImANkeUf|dRRgQ`+efX+kQsOA at mTVxB-k^
z1+lNhtOCNUGUDqWpqBV}GQ-B_MNK}8l_yb|l!X~loMBvnfp^NAMCr*%iDbA`d!#y~
z<z}VjWu^0NlosX?FO?VNY6`P;C3#il1=ZTZ>hgS=)U>L}R?ONw?yGW%X`x at N)j%IN
z)YmoC=j7OZZ>OLV5}Wd3L9&WXVN11+yV%;|JT~P^@-ho^(pFM<Q8NrxtLqdDaRF#O
zD!^4E{?-Eehj0fTyf}93C=-?Zz4 at CkX{H<>)g?s4e&Mtq0*H%HE2 at zq{Em&l_F{xp
zzo0}kF$K96%@Ha;Y!ftSQwM4bhU`TYi~4KHlnYP+gx<kQy+|eq#^O|cexfcfp)4y_
zlO0!_9s at kkCc*=>0JNY5gj*O-hLj+w;BrAybg+o1WoVHUy`lveWCZ#Vgv?aV=d2^1
z0n9x4<x4L-uSCK71*$zSJkJwB9oDZZ3o7vPi@%0OXn|4zl@|!(zhNB=p9=q|z~TMw
z-bW7jdwL+$(mAON@;QOcVFfP2r^EzjBnY-Wz)!>o3oCy+bi6b(t}H7~Bf+oDiN^u}
ze&R#S0(Aq(3R-LOJIzI?K%b4uPnj%uiiDSf&$u-H{8WeQiYM>_&E>Og+POCEi8k#i
zr|#;oX|AQ@;gspsvm>A1JMrTir#`<k!vaffRarrH8j%UrcxHnM;E8()W3YRy5)lV*
z+K1yN%#}l5z*w at 6FMU%cl!N>N0)6SV1_t|y*FoNX0iND`A{Yq>4h<yl3=LnCFfr02
z3YAC%`z?Ghy2AtyiE4Zt)lL=_SyW*@nV3B*J%#H_O!61xq!;F9kUId~@}lgD;v7R+
zezivELRA?P1$lA<y13n14*%QJd*`Nxds*RU?izk0?xn(6;jkF&rb at HeVlJsH%jY6|
zac(-ruFMps3-AR at K8rCqQUgU}MG2GvU0{y}K<Npgtz`B0K=;{D#HrC;zz8sI$&W||
zd(06D&IghpI#2{fa+*aH#8g=rn at r1qvNpHIBvU<oOiWoWxp22Jd$LJ0f)-FOvJ|ul
z707CpGZj=#sTYwZGj5@@fOZ>~H at VMVm==u|02o570>R%d_^WBjQH+JTTHf#QM+?X<
zi7^Pt6yG2XsjZt7_=WL*`6ZIsl@}_`;WNl;%p>ajN<q*MqJFdh`;T8BG*b3oJ!ye4
z at F~OobqrB}e+o?;Z4vlCAo1_z;qT=U<Z~n<(3``WT){@T1q{zB2N$3kQ{XR5ixDi8
zB4~_R1Aj$sLRC?UNg54iZgGxO&)SIpO$E?*^xMk@>&k{4nsHU|Z>=Qk8E+~dsW0V6
z$`5w3sSM+f%(ZHkyDJykHS;Ycu6L*5RsQku$^Uu#)He at KaJRR%N+XCwit;E!GK#<!
z25&1-J#R58!21r5AIN8`j^#UFzW^_okA3}p`~m<xaQE>G^!7s$m@^9r42|#)3iAyJ
zM*M?9l>~-_BSBJ>I?%LIy1?{KL}V12AQXXymsAA8q=a}H0kQ07(G*}gD=RIT!>j}_
z=qUyq0BZ^uBF(5M%C0QQsVvT7V2Q(yjD^F4G1^*#Qy6kKvA^8WU}5#X*;d_X)w9KE
z(iP)P_>H2Aks8myAsM3JFo_Hy at fW#|kC$wjdBaNp{uP}wJcevh$x-^Fa>m|Uj;aPS
zbg!n4SH~|!y$It$;!jKk9SX{&f+9L2_yW>Zx`YJq+WZt+`7|_}YKmHoMQ!@@<INh}
z0aa6Ox1j}$Thl&Z$_^c&SY#_tHx;LlO>1-F&;o8%qXk at PM+?w}{M0CP0sLo*`vsw#
zoaXSl(t?DDKxm7Ic at U;?6yVhpJR{h18TpgU3R(B^ODgggzogIm@=LGC1Q{QJ7D(`~
z4F4$bqafg4F}(3q^v(kRd+9ar<ZhSO;e8w}Lb&-G9^e at r;u{y{kHm-jb15FRrDz7{
zB;YSdjVjI%;8&N7u>62umzz*ilwvMTW6l=vV-48O#zl6T3VUj?|0P598t%LZ<KL>A
zZmXPb)r~cjjX6q39VHWurTkRqJ1XYd%IDk5Pj+gj9EE3{Wgp(0`QpyB>(dLaudjS{
zZ+3pDMF2xzP7#u7iEP4(NSCb(#tC?fC2<q*_fo`7-WdO1VISb-8{p{^;6;5sFw{Rd
zEFdI8iGOgokAE=2=htLSBZMwU*PsR%7<iT=Y;>(6M1T|>6&EX#g#=QD*l5<_sbta@
zqdUe~K4N&rNAogM at +Bc^X<i2P)p9mNi#YGgZO1HT^B5PwBOG^HE}a<aZK*}r<>_v+
zu-aqQm!LAGd1<PtM5}`OIkuWoAtTcmaM3LA_w|<}#89{?<Ihz)p#ahdsKrB`Vkc1w
zIS(8^1V|*yqF5w{&`6`GGLd2kMTkKWD9A)msH8v0B#D at 5EXrV0fUy=qTn}-#DUY{|
z>|oF)6v1iCLkpVqs6aNogF5zZ{zVIz%0>%74&|oY<Oq5Yxk(Y}u_4J(K}rj_la&}5
z$S4j22?FrzUKa5T##{=3UK7xbyzu;U2>(XV1%dyUsgbTj3sgk3rUIfJCVIiouYsR}
z5{Wk8=dcS0>`(#l?|pbb*B%4CiGMse{vH$R3-XbKaR2nU5JqZqk|Oxd`70ErMNuvQ
z{M60RaRvU$yacKTfZtr2D(7r*j-qttG#7STiu&y(gLS1t^<|{JD&d`K(PBn0{v&n8
z{3PevDrQ<Vvn`s%4(&vJ!I&+__0H6X*QZ<`oN;||*7e=RA0IDHbTOb)X|B at dXJ-)q
zFkvpn>BGaQc at VCX#`3lk?I?B*kT0Vh%zKcJKLJl52>0|2 at CgX<2JL~NJ^`WL0U^GD
zVMst|q+f72pI?&|by)Qa#7Hts3Jap=5E2#)I|764V*X!raz%U;85tYH4uD9XV_}07
zS`bTw#%w&18fzn&FoR_zGc8#pokDR=DpV at k!c07ZbO-s4>f-J?-JSVPc_6ZuWAyda
zWy~xwa>keey(Cpar$|V(Tvmq|p$sPc!~PTV<NMev<O#nyCtbvLxm-MloJ7(u at NaSk
zFFw!GmDtLa8z`(WlP?R_6Lxxhy at et$Wy*?2B!j*X$FW=>2EF(O<UAo)m0>f;Vz`k>
zau})yta(#SnnCFf&;lllPy`MxGh0|+k%1Nv5#bBK28{-ML4Go at 56epqXD|;eWyOc4
z#RN+&2qebF7XW@`z~Ny)0J9R{j=fh;UZ}927fKgY<d4><U<rf&!gC at cP%1!<EP7rq
zJugQ6rKskb!oRxS%Xw2zkG+iF1$iG1 at jb#7?ATD>xKQ7O2>;ZW;FPGqwAf%eCa5j?
zTSWYy9xXDREH2r_VfpzB68M=)QUSlEG|gI;Mob9!x$V_uDWa>`TU*?3D;aT=k at HTq
zR7|%C<4@#2Y%dzEFP>;96~@1{{6t$h_#ZH5%{LYN_02P1-yU;)0sfa<u3N6BOYHE%
z?NCud-$~R7iNG1g6yum;oQ!mjI!}-Szn2dsP8Kb&=OKhQfZ5wW$jdLtcNO+t{vlp`
zG9c79DBLG7Y)$z5QSSgx-ynpqN4%x at 1~6$P#6Kv6Z7+n?ub^P2^Tj-yoM at xG6c!<Z
zqzJSUK^@}o2y$s%@uL#5u{;GuWVTo;Oi~otY?o;A(`8(g13xfx<4lZ?v{VhZneB!m
zy3$PAh_mmgfM}#L(hyDal!_3E0Qi?Pq||!R0m)k^F%QTUb*E&eS|#2&1idXZ4BP|r
zgp&jpDYn$bPOezIB09p4;z}qdP*tYZiZ7tWf+8fwge5Uh5gX3Hn_Qe{$~S}Aaz;a~
zx_oFo+A7m{2m7u0xC5t2XaPglwz3qZ1(cGM7F6WKp#_C05o=n&NK#r%P<m|enijB%
zf(=KY+{B(^*hQQJ_z8aGQ at vPI1pXuP%Bq_X|5cVl1^%T9tW=65y`jQC4dpfb|Nor5
zcW`C-mEZTTcNu2LA(wGNPwX(Ak#l;$%NZ{Kc*r?6&<%9Xd3vTN2hI%1A;qu^%jGU<
zZ?d)WE_bynOIs at 0rIpGhx@ft|CA(~wWtSxTpZ4dRbMNn6JfMdxzdCd0zSjs3!1wz*
z`5bc1hJTjavH6Z|r at 2J`$Y6q9 at CbW*r-yS3;|2DX at +McNO1xpni!M96GH&3%bYhC1
z3-DjxoMjflOXn5=|0@@k-n at F^-5VS4-)3Z)f&UDN#qYj)?mMrZ{oZTme)N{ukl%S_
zi^Kniub=(#o98(EfBrR`-wWS)>BQGA&p!B{{`8ms=-Ute{wM$Y-+b%AFaP+#fBc&V
z|MpK<k9F(P7WgOdLa3Z*4A_SPG?f58iF6JP(~^kUZ#KUe`Q;I%fS&oFU7*gfKa|X&
z0*2Frh&)Xpd8F)!5YG%IR4|#)8p&)Sg{b?06OmC at T6|{>E71x at BLGn(YC(BW7wT$z
zNb52-0apdF4k at y1g!kzgK_d{}p^=1Idio9NH8XX<pkVrQIbc6{`6AxIIVrHAympRy
zKfF{bJi#PUAnbN(9yqsYBn1AzSZ0Z^<0THf6aAn)5|@!{GM|%K|J=(=LK8lKX;geL
zIszU*02BvbgfE0$L^Ku8nw0^RVUUBy-O#eSVM>3gWT2jbtS(xKw?u_GLR~uV`Hw%k
z&EJs&4HkU;&IT3N#)6m5&cAeS0TxhzdUa#!0{eVd#vBV)r%FrXg at v)f`O!SbEKRs(
z?HlsBf_}u^IGcwTJ<H$I5n?G}BMJUrJn*8{#i0lc|G2{>5fCgN*<_?bajD_owmpJ>
z_CK-?m=*Aq!Nh1Gp-ZcCi{nLB_rlXvte|OD&kt`dRM2Id{P;M4{|c=}8<bSdK=Zq2
z7hb-wM0q*!F&rY&=wH9P_05+gt1jTbe+F~$yZ6taF-bKNSkuG*>`&f4|NC#B|LNQ3
zzyHd~cQ4QWlkZ>uKmWzgXnUvl|GRJ9xPR*sTSOoHKYvXL=qoqQlZs;1ulAA?m7J!2
zMk+AJ$H5+^2sk9vL%1`YWx6pYJty`s7Jg2y6}5SW0J$9d#Sz1NGG9*S%0dAZV}y_*
zSBj_eCW%ZQ5ia0CWJUP;m{<tWB)%QIGcIUT451gH0$K at PqM@j5z*2*%gsjM0pboT`
zT)IVQp at IlHF?gPh2^TiSJD{%tdjm^@iFvT#fBwhcXUP|fjo58XAv$Ah at qY>9fPMN0
zWt;*PqcVg|V9%^(uHal}(uQqNGZSc;Ps=n;<}lk>PNvsFibz~Ww_zY*6Uji5I5)xt
zY%1bP)K{=CfN(1X7&O|zJ7y<ZO%Wsh at JeWzrzysU9!R&vNoEbL{qS`$Xko$oH&48I
zW!YG8ZDZoj>A5>+=Gba|er1e()@K$gTMHu_vqP(s#l^Aw()b`O;3PM(gZ<D!j(yx)
zET4n?hY0KsA0{MZq%fM8^UH^Ue+XjuH at BB7F;9fq{uB{WN>qb?R)Dejk-Ae_4|M-;
zxSWlS<m1RhDb31w-jyn;BH%xP%#_()y|pN%BY>YBzL!r-QbTh66#nlVOvmbb{mLq?
z5J|)LZ=d|eOIsh^lUTt=_qINIX%h;3>)z(qZ?Avz?#4Iotbga_&F|me`n@;LVfp{?
zwXF}YFMfD+?!hnr>{tKr!$11Q4HlqZxp0Oal-KXS{D1w+KPI6-+apoIO)0;ToD_p`
z02L+&PADNt{85eYOOO*4faQ;$i%W~2TNoN0ERPBW4E%+Ww4VR|$v>3LBV`k{jxdnQ
zVhH7mu~ZK6h>$iSz=eDY$>vqp<b`y6J4%u@#lZLjdk7Oqt_?}Q0K)tnxIjWm>l|d@
ziDi3H2h1B;M;)v!U>7l&he}tPeX#$TUPT)zqXYig&)=sax4<SN!k$T)%fX3F;7iPx
zRGPyaYlmT*EUoaC7WoV8+<bo9UcpRqc32=xDTgDGcq$wfb%0U;{n$=WNqmW<wx#1z
z$QY2Aw&bLT>B<}`5-j4a5}2hHm!c^mR9JEN>2yj`pibF2r1-&Wr+ at FQ^B>$iVJvv%
z{QT8*cKeQ9J~7VlI!f<g!C7U&$+ at AGi30eC1wrr|1r+=*V(^&Qi$)4aVEE^%;ZQFT
zU at Cy<DB!oS4>>RJPfktn-?HueXW=9GXa6a}3i!d~z)&_?$;T^$BGbd!Ib4A8L6p?e
zL;-EJHdQ(?EplpZ==|z9;J>myg<iX{Idl8;9BS^>i_33ZS$*gFI^d_moTMS)V!#gt
z1o?M1KD at oo;s4P~CqKHo at zI_2@4mA6<2TNH=ibIQZmzs`cH+Um{=NVEpZ^G&kUu(e
z>crX8o9uSEd+XZwzws7U6D_^h&Y!|&FcXMse5 at d~x5o)fVt!+J(2Z3du9&+ at 7^gHc
zRvaG1!_Ai~;^Ynv<w_L=KZ*brctk)2sFW~`f`S%EWD9`bV}TGMmrzNjbID8&Uju;!
zNG{Jf6o?=~=8fDM4<hhz0s9PHfVWObh7h45ec}`*QK3XZDXmi2MR*6y(B5Eyg1<ln
z*8p8W*9rDEs}q<Z at V7sGmmTh;y;$H*rlT(uVt6c5`Z at OPzz5X^cw1M;DlTr=K*Yv6
zb`r_<F1>OitBX`Z;dmsGjwaHm14slB%r3%BmLRGTL5!jlC8nqzqNdaqQdmo$3q}4^
zWLYJxjJ{-i3R5GvQBwTi)lDLMu;ATmE7Y3a-lQwpW5KzlimZ2E89Ti&vN=DzJ`J>r
zAeqCyMh=qUQsLj^pK%1#?6<3ais%Ji$L9BgKcWR7g{1}v`^z$;rg|!iw&B0475vj~
z<M3Zd4wN#H;aqHVFpf+OrNuBC%>(}BiNcy9pSQX`Q{I><^R~|{RW6;F0RJ~PXYZVu
zzkd<mf9dthE5rfbxqjmPTN at wTK1ppY3G|QdZGL!r<AYo4AKYAf|HkS&SC>Axx%#cU
z8{c{P<Tr1xy?15dmDA%tef{KvU;Wt+-nc-{2qTA*d&Z`*%;@Xy+-KU`ga7R>@6pVD
zar5Hob%Kg`!BQ|o39`*qplVE8v53+Wu_sD1G%{8i9xV-z73J`+aQNqnBXTWOuzxuD
zeHAe5v_K*Y+D(cH^@2J7kwm6|2n&+gSSlM=Nu;xgupsTT0KZ!zuFQ!Q(HSYgU*@Gi
z1QY>If>k2Ps1PB7%t_EH9Y&qVARu!M))u9m(2OE_49}ljra~KCzzlh|r_oRMPyg_}
zrskH`wvLXj9yYei-fCT~(#k?cpw6yFK+f(hUC79?QTCHIcl4?B+KNX0iDkY*iq2j(
z7WEFq24bmrDu+6V%XnuSb&hV4p;bJHEiv>C?*O}t5>ryi#Gt6Pmia}KqcSE)g<eS9
z8CqZv8K}h$#1o4&tN!SXv+rGB at mVnCv0!cd^uo}YMYjD8ah!rEVC=*Uo`WxPsuTR=
zb>Rg>kQ*g}rwjZ~(R7%o35gE*)jpONvpPCz>J<MC&i<#%0Q}Qv4+ZEu&c^x*sexi@
zU_|hrm?$MDOR4Fh^jsy2Zd#cvtWFlzXB7Oi<&(4JQ*-6BOBHN6)ENuwZ=asU<-dPn
ziEeAa|LzSY53Ij?eeHwW8}Hv-{~AxPufBg{?Q7Rp- at dZ+_T|O*udi_afBn|#t7oTP
z-Wq at F!qkKR at K65Y`!Dn7CR9R_msHnlcdxO-;^*K0fC2vh$G`lC6yM&tymet~jfgt=
zR+3GW<5RR|6+1GYPm{Ii0P<9fB`FP8ibIItUrnIO;LupUJen(yVhD+aBgcM89Rbh&
z0roXw;UMP at bN+8*LCRPF5g7ePK^`#_>~ayA6RSkX>g*?&z=LcBt?yQ!L-Ilz>SeHl
z4AdR34C|z|F?0du5Caz2B*;i at Kt;TiO;SXGXo91r!YrbH{ip9YG`F^Nu%epfxm^IB
z^^3NUmzAR|p=JYnT}xMEd#_1TM<3GI*2C4KgY2j4k$t|bF=wAqU$~z>vt$-s5KCsF
z)LbWIq%HQ9MT%^MmCitxR5GO$@`fjQ!_4xUlF$}of>dNA;L<FLj7^9TS(Vztw_n=e
z^n2^_(rXtMUOGK<^~5+tVAcDn+0y15h$@L~uSdKX{0L~qo>$ACtNoMXg6RT2#3&<{
zzf{3_1rpBlC6!Dm1r*p7{{uZTXafAxdP(;^6afE2naEfn0r-)ra%y%sGe4SJ7|pFt
z73Jjj!4GH8ERLMloy8Yd$8d0%$jTHlQX$}9Qsh at x-n_j0#-*j#E-t)%W%+A2)>IWP
zzjbNhohyqZ6W_kP at Y=bVE6b&Oo1+i@{>Q)i^RJV6!8c^+$eEL?Z at +SjId81JW^_5L
zQvTO}@h4xqxqkcN$*bo!&Tk3@$h49OreYIEc#h7J=_!RjQPFYw&B6b0WsJ#GPyj6e
z{)>7wN5HfI<`DQ#h>=q?N7xvF%@Y*jKZtt45*IQP2!zCuR3_mI6fhQ0ScDi0xHA4v
zCIE7Nl6#W$lZ=6a2pB~^5o8_$EI=@dWd7CUn8r&5RGhAIoGvq7l8#OpOM-XIhz16W
z5rij3#F5_6%I at 8shPLkGz`m)YzOARewfk6e=dmWF<9Kry(%2Dl(x9Z^W1vP$XGn<C
zCW- at Hz)CN4L6~7|v=^lGClUjX!ddd{`~;Fo=08%&T4FjvvJb+FBO|jMDXtSPU>YHG
z#5;iwTFx~6&D$s5y9O{8VZq(gGdDIS&M%L!_IG`{ppaJNA3PYmhYN>|7rqy4ECB6@
zDFX9+EkG(YLaG9q8f>3q9W|who&R(epaOc at nXK4i_=f_CfiCc$i}jUK1Euu9a5iG#
z2mjMUskxC1vNAD<*vSw0H|K}YTxXX?0RNQ}6SuZzUMA{$e(`lMe|hC~f&Jp^m*mH!
z+m4_2jf)HKTwQ+i(gKJ7yH}T9zc73M?DXlG+|3iiKfJ&G;6ME>6^ZzUG}zKza_h=j
z2AKcuhp+wFk3RTs|6KPL{g1zR at bCVHx@#gN6b5j%Y^+G_4Y>fC(<S{%_2!g}*&#2B
z6~xpL at Xvf6w7?(<-_l4G|KbaX6 at -ul<Air-zBB&K=8>y{-=jdl|26wZC=g%)yCGyl
zgboI`>LanDGcq&ZGEN2|vxvytQJ!j5YUHt*ih?K+%G7ESDPpJ&mENS!KoQ_U9pH7+
zV7SSs)wQ`RvQqQJ>%@reod?hLZM_Zcef4d9b#1-JS^$67q58I?O<ji at +K<43=I-OI
zJtp<-eT^Ocjh+2`d}DiGLt78rY1C!z;xBaJ8b^B6B8nz5Y7u4e^re7`>M491QDLOa
zWTcf at ahBka>4<8 at S;ISXbZL8JHogf at 33f?qyo}hL`smIHbOES%^}_tEQ<LYHhR-aN
zovCkj&O!eH_PKRR!8C%HM&R7{1uQhG_{Z~=q9C$qba)vB at O%aTQduoRmklk(4*!v!
zHul1U{|pp}_m$FN at IPKm2>2EMGdKd3>_R2GJf2^hEUZlxPR^82Sf^&oXBLJr;V!L>
z-8eNxu=oB2T;RofXXjo%H-GQ!?91oo?w_A~<?QV17Z+Z;F#pEI`PVPZy?JT=rOk=k
zC&xCYvX>T%x7UXsJowk-ddNePi$tqZ1AO<|`M2*~Wpwjj{p_QE_s{?6!LR=E!N32z
z2M_*x-WAiXu#vDc1r^IOQ4=eOZba-L>JSKrj>}`hv;g?W9j1msYI}yLd9W+)06|gk
zFZo|=A)f+z>}LvM6!~U92fn5NylWyz0X2Tu3S^RyeGsA!gat|jQmrP8$`{eZt6D>H
z5hq#ap;- at tM+90GgbT8b0`C|_VBRqn5rfyDfXr%Mpu0*&*D{}n*gGtE;|A at e7ml~~
z9&PSASl at P}sq0Wf`=R>wgZ1r)8#;J;ytVIWbI;LccmWZ5>rC2ukGFI;cMTvd-2<)N
z11(+s?LA?(T4N6NhU0x<8t?IUF!?gnP)SHx9emHb(XC;yK*=j_m>h?ha7F~J-<F<t
z=7d8ECPDyy6a at H3aH79+@8rAJmR~zRcXw;*;_`@D`&<vH>0>u?FaEFhFcyGz{?#lW
zJOAy>=M}6VBBJDx9scorCHNzwBn13)+0a=J{t-L>4gZW at 1poPXUm-~rAUu+bP86|%
zl7N3^I6XU at o*Patj%HUT at +YPW>(j*zWTpuC&o5Ultc+ecF at Ept{Ozq71^?W=GqW$B
zoqOrb%*$tIUpdG9%)Qgow@*#HdT#dS#@L0$($;kD{QTgp6T|=E at 4oxr{N#1KR}K{t
zM!3D~$zp*Eqdx!eJ8%E>&%gD{zy8UCfBOr-|KP#DdGDnQR7??b#<#+ at 6oZrN$^wRv
zY5|!s$bZsZt6BhGn8Yl_Y+A`vfdwc6OA1(Cz^A~Fcfy<HlOfwB`CkFQiDbb<2>uiQ
zvEUE!p9B;Lupq&}2HlE+&5ZF(MA3|AE5GqrfHGiczW=}+f(Ygp_(YI$WsU+^K!=*9
z3}nd^m;pbwZ3F|Gc0%eRXtq at rtWiotiiGhpN1D11i*y}q=s48arP9fZ2rM|>)_1I>
z$E2>UPjrDPf{svAN2skQ(%u{C48=P8B3&W6=~AIc5(>b2SisLt$^%7UEFj at -e>L7V
zzKl#q7yC^Hr#rvE-m^6PPLEMsWP>2^7ZC7IB9F#|- at U(yN&NDe8AZK-|3!Up!^0zm
zhJcI%;uNTNVEEVgr+geX548|vyC{UvsfNd(0HxFc{7drpWAL8}cV(kOfuT$o0sP1m
zQcg~nAwqI~B)w3{c=(?wo}4LSxt*RL+MFw4#W8d5=BcS$n^U*9rtfS`<Kx^@{NLG{
zx_xT$?$+eB6P5FerOoNw>S%I#Bz9q;@a;P*5B}p{5w>JV6usdLy{Gr;_O%OdymXB@
zw?F&tyTAC^xBk^%(EsvZJowdLpap*N%~#3OQKriQNJ$unA$=lffwkrN^;JeTODio(
zfLdjA07(ISVHrH76e!^fgMTUVr1(>+-5>&~G3p{rsQ)n*2-KxmPACw>za_td__q+K
zocU_ at 2>w;#iKG*ufC=G5YrjcX8*qrLSWOybX`H1dbnWPDG$8_G5^eG`0|w0^B222*
zH5GBx=S(UK7<{)xvVejFrcM6ghqsQj^udB7&ArG`fqlP|#_m{SR|IK7x+Bfqk(Qol
zTVK4TJB+k){`W+>`V(EDSU2sY$y}7U5LzIuSr2l5IUE?N0MV8TqFdtED+Ms#)P<1|
zpp<G$>zPfD1nsy6(sbb8a1Z{q!Hq%-Sw{Agx6b+S7W5m!jR;&F3tl{MfDbb*0O-ku
zSqRh|0jh>b1bg_e1OKwd-6-IaUyPOD{HNF0OdyPZ1p9~cKhfV|6ey<p!T(qxF8EjQ
zEB;fnL%74Kx#85xcy1M$z#PhNOc&Ot22aft&n*pKTCL#JUs)Tyb!zJN=G5IS+N;NJ
zotn70F at 9-z`1I@`$X^_a&6UDyqlvAl%!B{oXRqJ6G>qXtG0DL2ty9ub`^xQW at 7%xr
z?e}DR9oxHpUl&;X=?}m5<8Qon>(XW-(pM>_sYsz%7spWM%*@LmO0)pJfYpTx{Jn6H
zjNGAOP0MwLDfOo=D6gdvC<03m=adUd0V*XZ{;3)~)c?4r27bF**we-TNdY*^KarG}
z31v1x{6m2%3w$m}5t?|$q7EchL>i3^Yk>)|^fM|EB-mmtz4R$_w1OfXyh)g7O6K1x
z3rNTkAfi^2K|O>?Ss&ln6?XVP*4BTtrLV4Iz@)xoph;N(1sXdClmd~qzF2!-ytNzr
zhp~mw0$u&F-f*Hnnu;VcXaNofDhYG+5a3T))kk><XMp!FISy?)vxt^uH^>x-BcmHa
zWjd(NJh3a22c(^0q(om^MM^AWC=kE~-W=~iA~*^NDL}j`0>i&rKGiIk)D9{Bb(p#A
z^CI|T!B13x^wewR1NcV;^mb7HATEH#fAD`9J<0%T!#}H+Sim%#4UZS%?(m-h{P at C(
z|E1B)(r9*VBEMKkLj>@@F*S$_gBG~FHVXbPuU4+CRW7ZJT!9g5m2(TF6BC)~!oYa8
zZ>BIXUyf`{q<;SH`3L{$7ZcNrjh&XUIU5 at +dISF~hGUK68~1M9zkT`cwR3Fsdimz1
zE9Xva5e=LgXH-|Xx08~9Il7W*Ut-D)e%7MYSfT}3ONTp#9Yx`RCWoaejp8(!y#@=U
zdXw`XcUXx~l&ZF at mC0$P9L1s_oD<%moxiw$F9~1E`I7B26Ug#kc7*~MJm6m`pd;-`
zpQ<DYq5C57bpN3afn0Ep395*&ZA2;H6G5iM8WGGK@&iP~-dW&<Au&!T7uEYTl2fa>
zzQ_ayj|J52e{k<yLst~3>j-oHA8YMH>e~B}hRy+Z{u};Vd!n8FiOzv!7t$Z^9*Fl0
zB*1 at PI1!2 at pa3d>AeeMapr-guQVlCrPtse8^-9wj;Veq>pn$zqn=L at KHWXmIiAaTg
z+ at 8qT6P;oW5zqy=2?z9SH}G at iDO_;)S5rt8ftWgy1u)B>tg)0yYt@|8&iPZ#)$^6$
zC!TL>ljOfp0ZfzY5)-Hq{P%aaQvblLX^a0m{Ii1q{IiLpkO+<Dqho{7$zpsGces?8
zE+r<5G4 at ols&%>)pBqlj52qGJQp;nR6BD_u+2YxSp>vBvmsS9L`TXM0<&}|(%fqW<
z>BZsr)ZoBGt{?nQ<@?viQ<s*C9R7E&UmRmR)fAJXmf5AXd2-{-=E*a<9+5i#%jdS3
zu|TN<OX3J}qGSiidWL%GlFP&gX2wch>nKyLWFG+wxaXD^n8n7X5(y<y9YKJCQHA_v
z_$vton7T?mzm_qZE|8<Fge at eEFe+LvE%uKZ`DW at 19jeH;Y%ihypm;tn{;y8~Zm6>q
zF$&-dm?#m90S^D}Mx%>f$Ch^YNP`a|6COyv3c9?;cEY5XLz02Qv=ASYnLjdD!83=n
zf`|czOyOhrKx22bxhHPdrtWBCXSk&|*4!O!?TxjEz<jDZlIe+Ny2EL}-yKf&gp;9I
zx<8f~h-dHuh=`gOAcY?i3zDq|RtGM>RjGIK at J~{YcL at IR1)R<T|1y$A$G%ZtjR1ZG
zj{tSR`)4#0KZ2M!zOM`T-NQ735dlL8EnxURdPHCk{_DKLIjJ2*1$fS{1V07#r~rm&
zK>@=*6rlKx%vV2R6wv$^_!kQJJ2;F2#biiUvJQgz80#q!TTjfMZty=-j?b18=z_J0
zoZx at 11pYT?3lPEZzcpJ}97#+Kh9~kMKQxl+8BO<24-QP_L+ at W(WYOH at EYreeY^H9C
zSYs;4sf`nxCr_|BOU5FstuD;ZPfku^!%&#gKM*GGPm?dxs(U)yhVrTD3bW}-2;I~4
zhTvY2JjFJ^NTB?l+DrZ%xMn<r0&-GOv`-(bon6xTsHUu^4!Eak2*Jb^F&1cfgJ<yg
zNiHZrgx}%c%o}&zg#t<h5C6&PL#hk(q2VEol at e$X?^pznz*-lD2-4|hyGVQ%RK&CZ
zSKx=kQ-CD>yfRdT?v<cZz>srhkuh7fy+75~m%!BTiRHT^+1^+_lqd|ON=SdQFpw;S
zQ-x at z6w8*P=|VI$7)z7vkdz0O4=!*97D_`9`4sWj2r at I;ol!>oftcup&&6OP(vi{-
zH$CaQ?M%UCeUj$L)PEO8c#@szymPz*Ms>-MBI(MXop49JLq0dYE#xTzw16}F0YAIy
zxC;J71z`CL{&9OP_(L~YzyuQfTm3UC0Q?ID1pkykv?pZmfM){P4w_7)I~(a{0WlOP
zr9z`Q*+<N7V$Oed({ui_tseYy{u};<0+abuGlh+*{K at IT^~v1ISbC}unamH2=laJo
zeM8A^!GER~7l6p;FTQ*0!N2<b$(e<j`6Y$~GCXr`PNt|Kr%rCLNo#FwZDw|kOs*m=
z*ViAmEy*pdt<6o1Z7ofG-R+F3m}KB#g at JD+3Up<jj0_o*rCJ=1gySf=q~r`WpemXu
zOOYBOp90vfP{8W>l?zhRKWsh1R^G`qXyG`(yBmT$4)#F{KarFwGQ=L9BETis?cw{x
z at _!=&g`Fz6#^Mwpba@&Vj0kuHW at BJu6ETJe;2$d@$O1KorkGfJd2 at -mg-qvT5Gy$E
zPYw>Gijhn?nkmO}!_jOxo*z!+hm*)4)gaWzR<c?sLav;2p{5R{lB6spC3L>g>cb8s
zAU at 43FIIc7qmsYcA|tXF<|#^~C`E_kO;OH4 at RkKP*l8df1ugZiYz>eu2I=V3KbGuI
z<V8l18UFVN&@VB5eHali`$>e62tIa{V;`u?u13YbQsCGT*<Pvw{^=(3@?V<&MFqI}
z2k>vj52yg}&%|k?K+purM7oRuxo9`S4*GH`G?eZiMl$_SU at RY23M6KS5_3a|#Y$>*
zJc~etrAlgIFbwQRGog`mZzbIa@(uqJxe)ljvNH6`KYg1`UbFo2R at Rmo56IkDeVjOP
z0#k at pLQKwQemM3y)_8v;PT_8MZ>X!MucfuEp`oF*rMa!8F*eZ0v?3bzW&SfPsFdUk
zl-Xjo!BBFk7(!NfNq}9-^vh-O2*e^1rvM8UA(AHr%t{9+U at V}R$5 at a?1&Bx*D<}Zo
zKk7ZS2je_7Sa;jrc4Giqz(S<etGULo!2IGW5tIuQ|I@>3EMSDPS=ut!&SQbhctjWA
zAHf2edD#MdjdjeYml*H-;k|R|LM1mekuFv;D!KBQV7 at 46L4;aCa)sr}#L(yjp@|XM
zZZOT717=wp?3racJu}08G!88`wX!Si#41y=S1?mgo?t-J60ryhv=|G()+7l~Yx0+>
zElJr(7Eek$2wX6jj-CQiIWk9jc^3Td-+#apG5)=W(*oH1*gQwIOqw%aMe(mH0Jpc1
z?d?APO$9JM4#5O+`QJ`2|Jy7sz;+eD0ve-$uLAIhJF|-ae6%|s>&ZpB3h^GKoa!4&
zVH!oo^ASv-<<Sf-!2ED>wj75Gz`mRS at SOJCbc6p=ysH at N98UG%2+WtGS67Gr{oj6z
z-H7vx%Xq#V^(!lKU0q$}DPxlvo?jWCqVbCKYc!doE~TeG+8qkFclFdaG8(3_sj0EK
zv7xJ at mEkRg3^N;J3 at l<=-T2TTmawT*&O=M23I(M67;iv)H630qwW9o|=BrUaW~3M$
z#7)p~<yzG&^_-M31d%T=^}{%J&bzCFHy`8f-HoxpJ at s$ov;D8AUsvhi<&4EO_GWf5
z^UG5QvXoPlf)RljDZ at W?s)I~@#I(k=P@`HVoDe8uUN>8?VF8MONtJKh*ktnd=;Yk!
z)ZEC#Ol4wbcx-BPVg}*Yj*PODazaFodaRr2Ssh+F%Yw^=g?aXLbKoztuzqcY{oFPp
z2{(<-Y(yvHt)D%$#xx9u0MPOY!YPD9PE*}Y?otXw>33M9UKC-=lGTgu_a8p+<^O=6
ztJ(ZV0KeG$w8<O;_eKHEe^UWX4fQVaLleE>Kal_R@?WIDI$Im4e+a4o^@7C;N)B{d
z6bK3=35SCJh at Ah3?V}G;ppxycWCz9vBV)M%biq^szc at US2@R)u4gbI%{B!bigCT_f
zyEc}dD at CuL82MlR@<ZkXuANwCU at VbOuDAer!Hf-;wJ9?T<fkZ6!~Y5=a($6xcPL7M
zR!e(Vb89>JuWx8*YHY+3Vty~fZ*2<tNFg&;&W{b{>Dp5bJ4Rs5;tzyPs4+7|ppgnD
zJBVw{1J?kppvV^r*gZB90y`wittHJCp5aQovU*JK267+O-v7aT at D-l|jxp7nZ4^*~
z*={UecT2LkVcdlZu^5Ks3K4Anr|b(Gk=hA7P5G&-ERg9^!h(ef2Gz3slo`&<t9<ju
zDb639FN6gK$Q<{qyP3llo!5cZ7&x<Yv;4y>1`gR7&UrS`<Ctx3tZ~${AxFo8$wt at H
zCs(Q3I(urB5k|}hV;~aE8Wby@*;u-?wMK&*C4BTXP`+~Ij0nvFY%@WqZsi^^_yc!$
z^keJWgE&9n=Wz^&cQ^dAz0UBD2?Y4j0tEl9{s9+Qf<LxOK<gh+0hB;Mfo&?F*Sr9a
z0zv#kflRm)F$xT-3dl#hiizH#bZ9t at krRRf<N5G#y04t<EylZ{Kq1yOlJ2Wu0;PJ<
z1rzxJ9O2cm)NCnoX{r2oKYr=Gw_am3?4^qrx0r{?uF#E*we^z=%d0rWrOG5_$&pk(
zk{S%fGQ{G#LeaLaP*YoHLvveQgQ$S|dMMDq+A at 4$r9hbBUCb=SFNOuoY=;7rsRIKt
zELg~FXOpgZTE?UyYZO)BQve3=jDB*?f62s(yDam`>8+8aMbcS at YA8ye+a6E=advwU
z-n-u0eouFW0y?lr{$C@>M50D0!8Zv~!0u`NH7?K#hFEbj1A>_F0}CYB2n&cVN~A at G
z{Ln<tylbWr(pJn$3ueEw6!L?+XP8`Vo)<?tVpB;OOo~0TaY9TQgE~dIh)(_5U=AK~
z`5beKHkej)`RvA(vm2Lm at X@t%Cn;0EbLI5iE2k-CM{Zs?$$~-(p;=9J`{F6C$Tb$Q
zZml4c^Fc`pyum+*y@*l(Qy<$O{F}`W1;p$Z{Bz)o3J9M6ivK!U<EUjnhJVX{dHDA!
z!1<4O_@@f4tEJWpP%V%Mb;SDGOa-6?lA-owe|xIGBN1v#4|L?BU72tPMv+kf%yaAy
zrTV~pA=VB42cw<bmy==znL5B7Kn1Lfrsm4AOUpz5?8h(v=<BcDyngK(P3>n+pE-T{
z<f+Zo6DQ}ERxv*FLu2%0g_HUIL_QSHk&9{Rk}}1{wl2zj8=6{$0`(}o`j+OVw$|qE
z&bCOXI}v7zOSH`J(tMKb7&yg5#Tl3Y1~?K`7l3~nPw2ps+2hzlSVUl7ns${0Qlc-e
zGCqPR2Wsh*1w5<34(isxzZ600jd8(P;0HG)#3}Jk=kfYCF*<H#R#jDKt*QaPJ*5M;
zMl at pTv4G~pY-YPUfCU+*H((kG1%w5q0^RYr##ltc0_g9tK-O2m0%n^quKfJQ{FTi`
zrgyUKf^kfj&TX1tz+5~d!X!F`>2}CP<g|>ryLsvKovUXV{Kz<_S8iN*<L;F=k(aKJ
z$9(1bx%)R51$pMx8|PS9MZXgA+Rbx!FP&n254#8v+WcR+y2TCIY8-Qx%ix$?JuS6-
zzT+zt0Q7(#<lEz at J_7hx3cvx4{5RCsfq$a_Zm;J8kpEK8SK^-<{5KWg;lEAJe^miZ
z{XPZ48Vh3kYCME=#Ciq)NVK;#*4rBIZH at M{AVvZ3?<fG~3-N9=!eA8qcjY6U*@5<K
zxV at C<$wxY%Ln+aXE<gn=Rg$CwNCbcHm6H$t%}-yxd+W~4>$h%Rzj*Ni_+Q)D9G#pk
zk4_B^PsDRW1SmrBd~Y<<A^7j7MzOiQr at pzpzNxLgsim%g8F>wjSV65VEo`yrXbbm2
zfnKH<L4h(;?4UrUggc;Z<3sp{gi1IVQ3OT-t~6vxzDDZs^`Ms<o|Q#4h|3`T#q?N;
zog~f!{3uCe(m238PKw$zXrnQHi}dff1}PB0zjA>_^vE_ANFy%2w>v11wB!NtCh5<0
zLR*&7L9R^1Qh^1`bC6N$xW*LNP-X)Qm>3TW_*GyWk|wZZ8O`;VQ3P9y40FDJX^jbc
zGSO7!=0&=VMCiHDg at bI>WYX!`S5)p_Kl}Qv^9XwhSvC8?{cG$Q|JGZ#zxl?E4`03Z
zb>y{c-+1lX2lx4>D<9s!LY=A;mZ6iIV^xYS-CMhPc7-|8mru?c{ymF_7=IP~_`LG4
zu#cYqV)Fxk at DKO}|4IQYALj*d9}IpP1#Fv=oc~${A^7)H0Ob(Pq0VL~0RD{vrUK%9
zZQ(9nZ;q&d|5SfFDj?R|k{Rg07Z%vZx^t1vd=wE1<RTpz at ITOw7T_KVl++@^5$5n;
z7*1SS9eMfm<S+l|^;ciMbMMa0J1iTzeEIa5bMs4UV^i}(<FncFcw%sb=p6C7zIeVp
z6mRb8r(T`Tj^lv88T_|4a&2rrcD$~ssfln<YfDpGb7QEdBOdO}#s`D~xdiSoaUmih
z*Z_2J;}M%8kOYCQZ<dvI(v1ZLwES3id%*>i16Qz58HKWg5+(cvs?w;?p<qqQ;62IW
zr=}6<72JW_DldcujAwINK#-5{qP(v6{2#-}B>1JgFA`_Gr{KSa0>%X+0v<tLS%6>6
zfGk*mUyK+F$h}G%yUzBpS?IFCb8(U>6PHddTw#d!*=5Gte(>rw1Q;XCxPJGgi*MaI
z&-Fdz-o+1IxdO0}5AR<_K6?Ec^1XL%eea#y-+x!+J8#|i-FI()_{v4(>nijqymfQy
z{uOqktjn%F6?U-78rBOkN1EZ8*EZ*gb{hDx_4P&wfX#0)A7y}2z%zk_0+>M9Jm9~H
z*;xX9k$~sxHNUw0m!|^A0t^173jm=Cf?cb9w1agv6ApD02zR$2ksdbDHwP&Y?-NB3
z>uJFk#t;JY*>GpNzg;N6$sg`W_qQQN0kl9a+)<2m4W)W9gs_6<hT`iJSxlh+`rEQ^
zotfb;-MMw?(xp>dXTbmX%wo1Q3jULY(MV>fKUwUF=15RdqubOOqFDWSQ~UA8);duE
zt>B+<5XPWIM2QHY@|bHHALxMsrEFX&ph2Ojip&pWg{uY$>D`kWMWp~*K<icL9~KIL
zcY;OIoG29(BVs0DBT0T!)Pz+jTa_9Cc^8 at C2AkXr^&oTu_w<tp)DcEE8{l_Rz$b#R
zz&=;4Den{c+yDhAN)C!B1z5l&D;1`fuv}7HV>|--c8vv;+)Py1JMT at nvgi<F$%ziJ
z+w1bFg=<?2FJD^wfB)$>fBeBqKX~uX?|twR^24v)Mt=95o5+v8b{qLI^8W1~ynFNa
z-oO3BcW;{f!PoC1KY9Q5kKViSlMinH?%UV6VdE8Jz~8&Q$!Iv8oz9i%SSyT*VqnzG
zt at +FAlZ=pJkcgol$QujP-}NrUJXN--0D}KW1A@&jv*W7x#|n}mx|#y^OMqmLn5BTF
z3X~CW0SYMoJqo}Aw$Dd;S_irW|NWg!16_zmfq~9O6oF}he5 at NqkPNk92%!|R5l;I~
zV4uQA at F^fHPzqrGK!MS0|7<BXKNP1l;*AS)zxtEc at 4s}Loe@{BUd8xdSlJkvm>V3K
zN*BkH#WC<tj<PF~QT&H#@jwOCwR9e9Y^!T(Ki1Gv*N8M9JzjSlOGx|yIS0^sU2V+~
zh8jit90kY`qxYeJ2$?c18(>W>2^xq%u_BemlvzRnM05AzEQ_bCWxbTRBSr+c01HGF
zu*aE^4^<Xq%q at Kg3uK}Q6fl7TK^8E{Uql=PsKJJdFk_u{kb4#R#+ at Jq>>F{-IPn>Q
zUu;CcFSbp2wjhZC4wN4RS-?5~*19oYh at Eci$GotCE?`CM;_FvW{P_>w{4c-v+JE)E
z*Z$ED-u%<=yz)oiy7%*M-1&nKZi##-@}Gb64nnyp at -r2-*&@vPW8&Edw@=x;Xs&Nw
zS*14+p+kf|S^A`IZcekR9$_K`b0KJl_w60QzZdTDIpC`R2Bdf at fW#MnZo at w|4`;r^
zKLAk6U#5v#@IO!jK_Wn_ptTCfQ2;B*rvMgFW4}@W%p>4mDA3sy>S*k3tMBg+{3C>e
zz&rx}VF8%u<QGLSz$>jhO(_LDTS$EYT!W!x?{tw!Y2@@=@yuM|_uo46&MUHM?)>@l
z1b=21S4Sr2ilZ~>(pWS*)SoJX{Eq&V7OO<S|M3=D`8sHBt!r*a1=KaRYB;DF{2#BY
z!yT5e at Uf!|xF*>*(9 at oZK!Mn>Of=021;&SDi>qt_BTXiiGfZ9ZDWJPxMrCWcmfuU&
zB{^2;01-et1<CT1uqa$$d#RS<Sm2Q>CoLYR1Y|^5%wd>JFi8gy<OfArU=(mHF#JOS
zVL_xy0X2s_GpR}e{jz*zM*+L>zpv;8iw?m8iw?=MykZ_*z-+f53)q!5Gd6@@%w`sr
zQ!xLT4UbU3rl2#*>92nH+FyMC70M_6?Av$P)bl6byv3%HAH8{=H5rV3qmQ+e=>5be
zemfwa;PJ^%eB!r$>p%PL-})_+Pkr(ekA3#hFMsj#^@sOygyJv~Ekve at G4iLBkj;;z
z4F3Xta=bqB?f*6Sx5$s-zp;TlFGru?9}~zX=z at QvfCYcHtAIM<|E2<bE2vS8f3bpk
z+DHvFLV-S5(A5m)Lme=pp-)AhHew5be>`H12nhu|EifP+F;5eHtx&)eftf?tMd}6j
zXkI`luv|$|Aa`|b<PYB3x^VvN<|fYXsoBM~%H({0crr0qAwl04AM6aLI|kBip+s{}
zw5cmhLu;L=fUaYW?HEF+fa8rV7(&PD8jcVWLlGR8Nnn(MPzT7oukQ9{wh9UbG$O>d
z1!aN618pfG^^-J}NL~6gtE^=g5-}59%?!dZ8)Vjj3=FTxMit`)FG3AvhpjJ{kc)?Z
zBJ+xWD4;Azu%7^7gpNs-1=}fLEO<BtL|GsX|9oV?vN9HsL38411bZ92C0(nRRf{Og
z?6?{hOjb(90yeYA#@P9B))-wpInP?Rn`f5pU0D9b_wIiA%U}Nd=Rg10V~>62GoN|n
zkw-qMk57O4(~o at m)4#2cPkr)}{Qnb9wle}cc=E|leDaf at fDVs7@+kyTJpSb`Jp0sF
z4?MpI{9^(c3%CXu5WxQt%X|TTAOA%A#RNhHVD at O)gLuA91$gmK?f(k4fLRDsjsIqh
ze;k4CR{Y`yC;<MA0zGZ at T`hIpEp<?!r?n0ipaPIYUmN&O5GL|jz$>u86an~0Py|o_
z9~nge3y1|-T$CGvr4#uu6gWFyx_5f=zx&DE&CM+hex9gIEs&Z|<VUDc!T9MINKv)b
z+LxeHgGzPUT8}n$9&Kzt*3^EqvF&I>>(Tn=qxDV48=7A{bcCoGE|mV>bQHW&0I~}O
zbgnz=Y*?91P)L;i%$T>AQ`%ISQag=NM8F(ZkxE^=;hsPumNTXiEZ`}~!I0n}g$2mS
z5EP&efy%I)t)=F?m0j(gDEO180L&OU*ky;KFYGN6QDEyejOAnJzg;=`ogw5t%y${Y
zUfNCp2ma~})FUqBvmj;5C1C*rpYaHSET9w_7Km~bb4XUSu(5^hNSH&cIJtRx@&3h?
zuYBbzU;5IQzVL-FeD<-&9)0vtz#n`VBe)tJ+|^@5fDWJh#BZB+;QGj?KZShuGmk#@
znMd(-9rzXhRSF3H5s7vl1ON4P0)E8K{D<S;YkmpDKdUW}hJU&M$bump`&~Z%p+Hw_
zeYZ+S(=nv2;YfSqQ7C|fIvTM55dxuzr3TC#QsbvB-rItRUJ%uwEWibh_Y7)ilrRw<
zG48;)ghNvomWJNCH2?QMdv$gF)co at L@c3+|G#bwhWBm8Ta^2BvD at _@_ at djEpy2ADC
zAzEAyH?$q0t-HSUNPWxUx~9X&8;{mC?LT;U|BHwA(-?Y?B3Wr5lHjn+emsoh!(#D5
zDlDU|hx21hch{0RvI8>ids>J<`v5)KP=IoDmNI)YmWK-dg61NDQ&a;_jRO8DD$y0N
zga9fiz}QS#U`orlP(W9@>uz`5WX*uiD*o*r3fMj`R@#|}{jV;7SwVaN3oeiv3OKSj
zox(c2TJbf4V*vqDSO7_x?I~l=@r%iq$&XnWA1=ZI4u@%3NW`vBcD;?Uz>8&GtoI^K
zaOd38Pv1OkEco2#KL5GTeeSdRfD7&cBODQGZcq>+pAs=+>C>P3l*p$)^_fQ>L4x2H
z{EG_kC}8*(@CWdZuV*U2bAcP=@VE1Sd+<~9zkdEpTOhqI$lea=0+W-UrkEC50~$~P
zoh@~o`TA5S(BA0b9~N{ri%3vN<3fZ+IrfbOVgji<z{yW&i0CMO0Vh8!z$x$pq+WCs
zbBK%p*)g)iPyk=}?Mw52{r$T$3u6DP{UhgpC|T%=WZObXD%Cmv>pS|HU_b{q;6GH?
za`1Tbp}OY7b<Ky4H5@!zfB0C#{uhk`Qbq*@$fL*r?EnP^Q{ka}f~8I at _<#bk6;$@p
zLV;204_VL*5hz4g3V41Z_hgU}V+48uz+*zwxWqg_xG*}rjRJs5R+m;;pcH at zJ_{g%
zE_2^TgzXgQ-%bHpejQ=Mi>x;DI093=k5QHJaTM at Lp?nlwz?^ef07Ky^?^amA at c*(*
z78MqZ6xAG(-U>FtEKQHFGL?;Qtn|VoAW%u%=JCfL|Kb<F1pXZbKJ(enKK8lKJ at V+I
zCW7gpZrFYgFN_P1Jo0Je(MKK;`E~gB!~Pup8upQBkKv!1Pv$(xQy>5G)Hi{o1<W&n
zlmg)2C_w#>ocuoiJ6q~In(L5G#G^nRTA;J}cx(NU)`lad2(X3vJMj)0aEeKgK>=ey
zN{t_MfksE0#RL-7AQFrYS%8%DpGc8;1QbpX5k0q9#t{0)- at QIGHj^!nVgE!jCH&vs
z_#izRfS+b1T9#<sW~>1-Jr32kzId$Z;IXDd$Atnf9;t%@2ag=zyZ<06VBdik_wL=N
zkG%)>?~|VBqlcRtj?w8O6v)L{?KClzpQ;oHeHaCp?20bnY81d81_=bri53zqF&0?w
z27t$Zl#^3gAm=Bq4AZDP$crd~lH%W3z$|fgxFa>XU<V7r32(7!Ka0Isaw>aHJuRTi
z-&F-f20}p!z=BAa%|{|A3m05sK<KXGTV*od85YQ*d7lMp4pmt&p)3$zX{?MQknN50
z<Lt=0xG~GZ#~WMoL~_3R)yIG5cYX&A0QgNFd+c+c`OIex&cUl3^E)VD+5z{$Sitom
z=f9``z+Z!Zb9*Ux)0$_)KQ_OkKn?z at DPY4tjv-wzX8CaJci<f~9Y=OjpriRXmJbv#
zMPM#)Z<~0;niP`+0k)9S1pprJ7#5f#jDo-xG8U*W>{&$I!vg5w1x3p-8YHi*4FBPq
zrwSvJl%o%%3ZcYcU!p+EhT=cmAm at KC(`*jbwd_CIc;IN`i^q_r7mqd^Jl1&NNZo<M
z$MzmLw0HlD`wkp@{)N3S7zOqU1=tT;cl1!>@xwxaq(=c10Zn93fY1k#aI&KQRk}#T
z7#P*G>6p|HXv}<=3<50Rw6p`0CG?0jvGNKUVW>#rDO(!Mzye2vZ7fhlkWIy*Ksv#|
zHB$sw{zifR7-QHR1tK2!Q2{2~@h>0gC}1oww*oGt at H>2QbZ`{lM)!y%VF44KdC$H%
zG&ouw92>$MD!>BFp_$PVi|Sa><(orOcm(WxymNNpi6@@GFaE+8zleP4OJDxVSH8;i
z^Pm46U+|d4Wwr;7Gwd*N_7XQR<1>#wiaZSe!LkQC{J944?=oL<>?;Kb{#)~ldcmdw
zJPO$S2gARq06aus-=_Fi3J42C3#cOKXgc23c(kSdFf2e95EsHJ#s!85futDtZ*{r=
z<Hus8M7qLVNE7NHpbN+jRFh>m1(XkA2u%)#>76+>o&V_83VjyzWq|*#aJq9K&42>H
zFZNH146)(-KX9yR-{E>FAabN(|KYm*hmIdOeEh(nW6$q<@%g>`U)Xox+2@{r?)m3m
zc;SV;d-v|&hrGZZ5GX*)Gh<HC0;5G1eCOD|#?mXL05QNS1vFVe%|IC#Xzontz&(0_
zHH;(091G|Xv;&rdBLc6mMWsAw+uMOwilNPjQ6Q6ydFmh)cN9<-DE at b$z(Cwb{tgNV
z_)V%57(fwJodwoJI)Mwu0z#vX1vmoe0t6Na1qQQlS)BsRp+U@{iQ&Q|KmI7 at P)UAK
z(<AG;IGa7Emqiya^nU&;U;XNrzAWH3`Re0O at B}_M`P}C}Z{p|x69^*d!=nOvWEcGV
ztuA){6Wyy*<Hzt%%*W1u^Mcg`lCTdHF#Nm7j}5;f_``l}@Glg==4aQuW&t{>hy(wP
z$9JVbYs1kt6UDy<g6ex(1^+G_Y6U`8Bji{B?7=@0m3*06L>d&rQy?gWQ6wrrQ)Xre
zQAY|3R>m^)jxiwUC$Fw!0xAAe;`z$3ntmHxbGWhNU|s9pL-l(P*Y7=eeE;G4{YUDJ
z0{adgeSY7;XJ6R&+}{1qKKH^i&p!X$bI(8f+;h)9`|REqp5MRs1r|a<0h-+ycFnR6
zmYuQY%qW06KmgEm0b4-{iK7m128oKW42U4Pu>cB;4GmVHfJre|k)rFua3MS7ODT_o
znI6n02Q$ec6bP^&n~cE%lXTKk0lQKFMG%kT_U=XjRS*vURV|=yg6Aoy%k1!9b0hwU
zSY^TmW~wU%WYoVZ0%HM_8H5F at 2&BEp%%Ryaw-0oT1&A!bx_fr<@h6^m{P8CY|H6dF
zAGa$u5&}7d3ty}<;&;CA1<?)q at b$xEJMmA=gO~8)Myee={B!t20mHw5zgqm`%%0sT
zAZt&33Wyir;~xqL{(}?{TSycEW)H?cEWjz2&}bVzavgrLW&}hRkRyxsP!ZAUSm1jB
zEl>c7bR*3~N=4Kz at -xLA3viGj0u^+{L=P3zuwZQ>duFb9cXRw7++LKS9KA8lf95q|
z|1jJS6~J)6eTN(N9;$o(z|j{D9!D1l3l8)2Fcf&^`F&8}+2{8 at wda{VPe1$2Gr<43
zr=Q;Q%rj3v^YorWFYbc^F)@S&M)HZ#Vv2o#P=FPjD0*~(ZfC|K8d;tl!#ctf)Q|{G
zRU_B~xQ9Sud>A7^Sb$(KjF$6=u%MVN=91vwmlPBj%p{P!Nji~FGhsR6vmgri4gbj)
zv&j3Am<d*WfCAeULDfcbED$Z=;XmYg3Z5>&HK-~AcONi{gb0oWYQJF)Wl?HSTg at S1
z0g3<?pa}RavA}m#Vx*(&c4Q6i<@M=XTeExiJdHfHXU`K)J}K8Ho^<l~6Hg+>1?V7*
z_~MsfL68VF_&+K&4^{kY&dcH7%lvZwTjtl9K<4(=2LILb^_O1=1t@`YS+I_ldYs?Z
z#$#<F0WF{u;6?L)af<so0DJ>PfCZKmLlGdj0Oke20*oR{4R8ha)J|Bi6e3_3A+UhM
zU%CmjYRK#&jTE(6`2^+=IRY}pbLBW4^fxy~zj1x8sT2Hr;0OOq`Frtr%L at nVp51pC
zfdwdn7hdFg>^aW=y)W*0_JuvqJon^NPd~w50 at OeA?9&in&z@(V=E+n0UwE$m=s~4G
zzfho%Vg)CE(^)nWPD%irKk at v8aDjXf8UZ)Z3dS^pT$&gW!vG41U?->;1-O=SDJW3R
zrx9fV_K!z_DiMSQaafRY5)0R`AUe<&8R&xo9t$|ntG1AE#N1 at A+bJO6cjEj7gS})8
z0wO*LI!Gj*Q85;%BFJD4q0u}Rh$0vib4V0H5iP*)icP*N)5GirWh>n2rO}IP6F+ at z
z{TYrM6fS!AdGzmd{PKkiPje6<Pn$gX)KiFPjVGRPq&QqH`8=%Pmw>;W|CaETt8f3v
z`Om%9zXgjQ)CCYLNOQj4 at HdJ7H&>Ux0Dcpr0M0KIXlF)>M}cEiL&!7!#rX{+#WY7&
z)di9lv!JL|3Yj~MI<TryBZ9GjE74IG8Up<0CcBWS*+nP<?IWOfpl@*`wK-eFFZkg4
z($&>r@?SFCvY~zd(I!lwXZIg at Mk(;zfg>**JO%}x+jr=h7Y;nJ=h-Kodgk#b!T-}w
zJh_KI!4v%FD6mH;&>$3OXX-UuZ&>-qQf8w7LBGW*jyM*S4?zLAfJTsDDfd$&>?^0~
z9#IxZeQAINBp31{#q7{vx{yiGp6|0jC{V~Ic+n^z>Od)gIpnh-oQj82v9Qwu;6Fft
zP&DkzK*&=NRSJli<gp+C{wfP3xgaXTrQwqCh!KI at oUwqXsd&^_fNz2XSx_mNf-^-R
z=8*cuY_cw~%y(@@Rywj9^z>qdk+3*j2q8E^5Weh%59nb>0d5=xj0lQ<$^Tla%P2q+
z2MSd2Pm*89J{bNnfh_Y21<d{z{CmmYZ4{vL%|>A11t1>&RSO9Io0$$o{3k$x#$y%{
z!t!aUKY|O~!_*+n3%k^?nM0-vEI~|Al+*xmQF>=^1keQvdubmqk5~*L at svG7h=v+d
z3J?LkAW>5l^$Voem}+XuOE8USx2L%t2YGX5 at ZBqmKe)Gg at Hj4T!}AA^KePAHGhlw-
zp=b9Udj7zX=k_0l0(+j at _mwC1I0`)e<R0{|qkz~#d!9P5_qn<w2k3fc>icjmK0T6$
z0`u%;mX+Tl3ln9QGQ$Pp9^^xpB^X}8MnbRwh at H}O4-1&V0vHe at 1wF_#U{*@mipPRD
zTu>IIXw?@AY-2$jEr4W`(KO&U2~YrAC>-iRPy~^FbU~E at Q4i;Rss+?dP)|W<vKs}&
zBJ%xZmxd$ygm at H?@;sw}xhFz_Jd5x|ouyF(I5=hwq4Lx(E_jMyw795>V0C(k4WVp!
zgav2ki)3MteftkcAa4JDk$wC3?%PjjPMxynQ4}Z!Y$YRtkN-n8_&@Hq`Wg!!hJU;O
z&jnWe`zpW-{_F6EMznyn090q8w?GHMzfS>Sff_<$4gr1>qClWs08a^o&jK-i+C;=D
zpiDyi0<r^5&JnOQnQt0Nm=puah+vE`j{rIlCPfiQ5>2b=xSEY*EoMpqYr5|n&C+We
zS)a<oh3o5MtP*(t${Yh50l!f|ZuTC0`uY8jKlLmW`10dV0)Di>SGf at i@OWy^Q%^yG
z=bwH0*rELtIAx=~<9GqZlv03Q<i(|_A^xUIQ^PAW6{6oK=Ek at o1`Z3*3#f_7;X$e?
zU;$4lE5blhB48I`5m9lSAB6(Sf^sfNhra3pp at 7GNjMD}2L8ZVp7Q}W at 1fmQ2kzNx(
zu2Qv;fHwvbVifodSzr|4s_|GTfL at 4T5t)0U6u@&4FCLE`bFMs?R!>LFAt=vpfLVM*
zM>#rB1gkT{CuZ0XH+pJrczG;mlRK3H0Dr%=HyR6!2ylTgoe{zCZ>e5q|5(D;o&O4c
zKLw^HkURe$t^$Mt03JaLI0`r`s2wL)GGC$se9K2(0sk%aM_U>QdrC$O0snnkBj=y_
zq7h($=8G+BEUtltM#UE(@*`G|=8H9D9OMF}q@>cEUXVJ9P&<Bs6Y8rGa>s*=o<I>K
z`xw14A~L|}iP7A^SWapPDIh#KUD%o{URxh~<I)1v6mMRbxwufEkem3=SD)PTl^qm#
z>Zzx2g!k`#uKvgYY&M3Smeb+!Vsf^^*6-ZhSOK$^rOYeSBY1ghbE9jsqiBSUg$Z;4
zq<|Vwfb_w1rC^pY7~tvT$RLHLP(Z3IN?9miEEq-w<dQ>!sohu*AIzxuilC|sJQe`y
zezS#?0v`ThLD(eJ8xHlFn^08{ss$cG0ijG#7dQ%-A}|WznD`!g%vhj`ASD#Yr-ueJ
zvX8PPKddQ1+<{q91m%_KAyEYL6?SHA%rN&dYhAli&7egM)Mz23=n+_8_=f`E-vj><
ztM;!J{J4|f$G=d(eBSN&_Y+~;tsskkiWi{x4^RN32vP{zcThmmVM>7`M1jbW!2+ry
z1n{Z|0_uQ>kfe#bke1{4$cT%MT6D-V1<=7#W*q)<{#U(bNuQa6pyrU|j?o3Q+j9l^
zHh=<MP>3^?v3EE#U=(2b1i~;PNP&SQ^H>HW)1?^0C at _{z%@$d*bA4liHB4_`UHQh{
zlkZ$zdE?R|TL~_%j4-N>nY~OgT^h?Risae!G*`*7@^5A&x5802J<NfIb4SGc#2hMs
z9OxJVBcOn&hUpQEC5V9U3=tU24h0aB%dlXym|-Lfqk3t{N6-bdWDXCelm#6AF;5qW
zB4B<?l>(*+V1c;<sn`ILjIpw`FCO8{?~D2>z!ZV7Kq(+LlIn<{r(hg$j)3<uo+=TA
zVnhf~K!Z`L1-4VbV*!ewlvfrEdMv=wgXYq3Ju-;VXo_HYs?74x<;mjm#NgaeQUW)1
zbuOH9<mfR6aq6{D446pdd28_R3Vy)9RCDR56N~wi_T2^ly70nt0RmnC__q<Djsl()
zq at J(##nfT;7z=_Spw@<CgodaE!uY2af--3{eymK?BBBt153pi6vyRA-N%^!k4rnWl
z*F**>T(H!*;4^}P>K0lI)OWx&@X9Js1crQIuLFo=29ZfI(T6aPYa~0s6{%#ym0TDu
zFrkrAb-b?ZkXN+AoXPEJruE9?>WLg<tIsS9v9?1N7Mz=BXWu(F*5A0g#{O>FkuK_L
z`*W+4XI3V*h- at rRZY@o0Xx``K!niR);~t}!NvMh0QB0;1o*;jEI|iY^Sc&5?qbx`}
z7C?lebfqOrxkNq{MSK<r1-7#w1_iQ-2p+Mc04#t4aXH(2gDmhV&?5?>itS!Ago0|K
zivQ||)v_Sv#bd<~+GYzSp+Jl%F3!8Mz!X6mMKA)>g#uafiI|0xT!|-)4$h6TKa}N(
zgKUmi9m|L!@FSXrf2rowqP9cY^78BOFBAyk9}2kQPmKa`{(B-`uu=f<3;uNks7(P4
zT0s!O at Gn|GDc~gnG!TmM5B@>BG)t;r|4=Lq3l#984(z};b-=%Za21A2(^)CKGd04$
zI_+SL;1y92Dp*7ayf7U>SrL=y9PI4|bI7K0>3BwA0a9X4qmF7sJ2*j2Km?oIh<2DP
z#B6>q9AShh<4k!4l`&Ihid_<3u!U-KwzM@@zOc+7_X)a_UOvA_WSi~wH#X<4Z_b}v
znIPf~DYlj;HkT$&Esn3vj-V!B!2*u6ND&qwlfz(uDkCLA5h4f+Dyj>#D=kTHCR#vQ
z5E)FzkUZ#8Qs5ED(=-%_Aen>+EJ#E`9tDgAHHttz<p2ddOUc8(uO?6y1EF4z2;xv|
z6DUI{sY(GHWR1{PZ6RfWPl1%$LTL;<hA*M-Pz2~cY`=-2>_j;;HJqIll`86$<w5+C
z8ylJ1#OxY*(6A&z?;fKJ>gucDSNq3Kd+1?@zn=f#|40 at 8n)a&2zo!Dc&0ie&h}Zw}
z5DK&k)U7*GDG+3VRs>mJ06k(5LGe%Gm}1d-(*>SJV5U|ZMRD|tN&BRU&jn!wssTE1
z)x?>*ilz`zlS#v;!XQi|_qo_bHip7oGhwE$h}d}2p)@MM6GoLXx!sAW3ArZw7+a)5
zG>NfAp1we3zy(JKv!Hl7RgCk;LUA+WngOS5`e0MxIazi#dWn5!>k}7N$5{V;c6sc~
z^7zU5%KBVod9u7TQCgfR&5ah&2(y?&P{3yacz^-{7No2<vzUn~3nKYsgehK(Ffs~o
z%_T*^KcOKMfn$N0L#7Bs7X(=l5*1()be5g7Ak*X3STYt2gnEz~3aC*eEFco=*+m`&
zh>nV1Ow1NVV1Znc9hgHN3mCpMm=a^Jm=^UXKW}Qhl*XQ%8OhF$WEV$sC;|f7&H8`{
z%<nMp*Wlj=zcjgP2vk<XOIy<}_?P-mJN(53Hc>4=^CRGQfgmXatx`aGfe|x=lmZ?L
zL<@KnIELkK#y|EyWzt3gSRmEWY807Lu$D21fXitD3vhdbbO7N7X=y0a+<|(^PG5M9
zmM9B8ai`F0<AixcL19j5je=lcmnV#^Q!zU#colCV(F<P?Mw>b at ZDIs5Y8V%w18QQi
zl3AM^gbrv5=KZq%=Hf~PQm_Q-?Bd9|<*}3VBdgQp#qr|&SOFs7O~V2qf|>-|Ss)ak
z9vce$Iu=AS at o+jmfS4liETU*X_*ZdG0bs6D05i#a1a~z{2^NU-!Ue&<lNusO=|yw^
zpV}l5<-0=xVS!M9S|()y4huouViu#0e1|wVr~`UVM+zz7dm%MeOiz^4P7y4OX0b?(
z0!_`$O-&-OfW|$i0v!Gw_yzw;0XhG*?9<8~f&)K26UbKql)wr8b^fQRfE^U at I^w~<
zP(W=S=MJdl(}+_5_!a-mi)b`2Sla~5E|O#489$~SKsZM|?ek^=>9H@=*hY#@n$A4i
z$=$d!zvhN!d?Z1#fW9+dc<M9))9MW8fol&hnmBzSH!|1P6B}m-cT8V+$|5Psf>@IZ
z)9w1%fB+F#f&dY`B~Y>lDouP3)nIM~OF$U>s~L(xV+3?KH9x#GUcdmhu#&G1#5MpD
ziVcAWETBVk7Z#{3Wa<FbfUxyISfC!UQ2>ibo#I|5;329Df)wbj at f4iP>`_2j at bN?l
zQUD at AH;8~4hNM+1!2&EdR26|NTo^o>QkLN}Nv4qD?;HNd%b9>8$fzR7Q1{-^(b3Yv
z{3dxQ{)GY#{K3QD;oqqMtNbzi>%ccp3pf?vkAUz-;8v}mZCXGqAH#ou0ul%%DNKW~
zv4Bcx>5)+)IE^57k%>46m^VNg at 4yostHp4+7G8l7&_NiX)Ns5oY6R^l&m2;t$Q%cB
zL9~}W9iHfHE}PKR?q1}E$)!j-+?|eypcG7knj(0g=7Z(qJ%Kn_Qzndjm#Ob6SXOuw
zm0YCCf>NASAgn^OZD=e+Ln%N6LP^VGSz*M8INHnvJ|RQkGsI?55UhA!nJCPUN^nWl
zL6rqmUkvBL%yt$e%_0gj(M~BK_%~6DD9D2Tq$mQ+9&w7J{epjl;n->jc@)@YCaK9J
zhrh1~pn!?f1$N^UhtmQ^fg}`A7AOrRb0^+923sm>j=Zoy2k|*Yz>hgrOih;4)5Dn=
zku--1{qJr5!|?xc;NNZn>1po`d{+EhEs(GP3Mkrb1d90rykak^74&cl7z->Trhu0+
zIqMO#c at av4dTkjNjbK7($hHYM6Nphlb`SoYA>`Px^Tz2BvyOx*zBqMYiohmx?YyE9
zOk{*_P{LjApPb6D8>b_<F^57a&^MUi{1?+mr62s8um^-yIFlvWhJ&yWXS$rQoltYe
z2vrR}BN&UFWw?RTAq^MM5o`%Ly)d*sU4jef1>z*C3sS(NOlT+ at bGo32FCZ)k=aR;P
zNIqpgLd+=w)dl^jSbr)iEI^C`0Tw9!p at zqf?G}-`%-dPe)!!=;G>vw$04?AsfFdv!
zsJAXY3xxF)fleVq5m0CA8$y|hQhI7AqaK0ml}5476r+%!2LD0J$2<Ik`1dN`Bn#k~
zKsxi*OdzxQEf%CxfK&yDA>^?@903#G^9^bN4TLf#MQY^K^1<Pi8#gtGNfC|<<^s6W
zUJrcyUpe`~zn$$ygy1><uzN=zKEUY$_oBxmHKhhfsP(p)m?DTXxzR+Xm3AVc4pi7{
ziI|QEUV|FJ-2;BJh)St`gzT7)|7ayoa5Xw!h$9mwvK-124m8AV31m5l=m=E@#t5Gd
zspV1jre&%0X7w}sl!=glippS;t^_C`EKsMQn29pZ5eoP$5DFC17#rKnp)~k6Q409B
zP){sOY)91rPOiAdrXYf`Q}16rT_9S(!@s-XpPWDhrwGLFARgu0LS~PNt1j<N6ag$C
z*sHdXOk_n7Kmk1B(L!>(R8<5ln42jl8KDgR-QiyY{wn?hE`ULu>vsIh<Y(}Y*!*XQ
ze{lq=6u{uGQb6OPbuA6Y_yEp-^M5Id7V%l&Q@~?{1%)g$3LTgu;R&!;Q6ex<1tZ_H
zh at 7+Rw1&HJAM>yqBUH^bOo}-m%q$IxZFF+ipj}j>9oYJ0V(I{<u=}i(8bAR5Fp at PP
zt>BAl1U5sNpclq<Ka_5XilY={V<sYW5HTIWlpE+^E(4YlOB0qx)2xo7mV-R$>A4a?
zLe54Zg3kga0xS>;Am%2(0*e=+2z*`8 at 3A22=>lUxG7`cN5*8>0m=YXTQ8i(@z_XY5
z0A)cf{&yvUSwZT0R~3Oz0h|<cmPY|1S`e0C?@%tm6dDwP8baa`n<AJRO3#jD_`Ny&
zb0dx0y63`O#rZX{5Rg0nef*0Fq$<Eg{+%OGOMz`H at QI*`01CKRD5+ua&pE%72$(|%
zjKECd%02dviJjGE{K!}>6JkE1GQ>>?3NQYK;#9!S8@`u`QwQ8o+iaq%o!IVFl~lOf
z#B_w`HH3*2iH>0Xu`K~FVfkkxPAHIo3qf(bKqEN8O;91NAeNGuNn$ApBNC1g8d*)*
z_CTzoC0U~>t8-|4Sf3Owz=(y>+(<r-Yk*Qvy%5JDDu_{pITR7SP{V?lP+%tulF<-u
zGUBtK+p$2n(AVwh2%jSZeO)3u6v0j+82*E{&~^%lB0vk^!jR68ly at c;u!X9MfXb7p
za>^b4KK{2+U_1UL3s!Uf8~$DLSLgrh3IGiU{W=QBv2Pl|WyG*{aDizP#tSxaHjlee
z3e at 2p;|@5HwK6I&!kA)YasIM9_J8vm_r)J}W2(W{8SB+k4YJy!7k{~Pr=S|rk)CX<
z*GVqciwq`02t}btnbIJYZO9MsLQ)SIQ4=G+k08cUkP-Rlgl`~85Gmj|5KuJ*VTlIS
z4zf&h1=DCMZw3-vV4vD#3GV=-C at L0_DuOBtd{0?*fk%M=3qpj9pa6;hfdy>LL7+gD
z1tbMjg2s|#!LKC(W|dL^@53Acx#E~ev{n=WJXIE`B7g##_z+%8|6M*_8BB~7lVgR1
z;a|Y-o&VdkKo$Q-Nr8Dw9*qKK|JZd0{-J=!f*=JvTgX=gE+cFP4-2yWHhIqH7Mm2L
z7#1S<kd}xLVxb{xrMIiuKX$c$^(-GhiTrDyI)1sE-$YHI8k{cJ^~Na$ZZeUcOcd!w
za<M*SFwvij_c<{wP)PQp2vowQw3NwJWrsSb<itThJToc42o?xpAo(^@)n%BHXj0t#
zXiY;)CR!KEl6R9J5=sG$U|d+A%wjtM7>HmjD5xS(A3 at v%rv7H){fH?7p9LYYk%(CC
zU;#t`y&e&K7I+##?WG_KAi}PK)g+#U(rPyf4D3b$d>m0~G#_E?2?Z4YfPV-6JuMK#
zzlK1)J&!>O1dAUy|9ur;6p(9>0$LG7X{cp>wKT4YfT!0Wsg at 5G3;1VDgiyeQdq$?%
z)D$BEM?FJ?OhMQyJhibxM1<^K6K6t}hs!p*$Y~00%<u3?CwA9%sm7qtCTNEmAHh8}
z)esAHvg|t*>2ZPzfC7|2qXqKukO at sONInrloGvhpU{~=DJYEcx(@w-d67c6lgbpUE
z4(xSj9R*zm^PtHuC>Mkdq8g+sgWZBjGmrvYVB2!`#CQg?L1RSW01L!N$SMUgzBvR7
z%uV<h76=hYob~sZA_(_&AqIZ at f}Jd2&U`Hw`npWBpkmAl3TOdQ1QN?qTL=?Qv_QtA
z0Ez(oqX??t-**0cTHx2>- at IL;fH(qPIH(GKRRqU&W&w-{nEiI<gJdg>h6 at ac=<5W-
ztq{Q^c+UH$y{uA243>89u4b+T5o>t<|8addcdE2<YQmgx(*oh%c7(|%L5Z{PRgwk0
zo<w`ostY`gpo##Eph_W>i-!i2{pf<A6qEh*9XL{$zihmK5zcYo#*hy+#AQ%#dL#=?
zJd+6zTDahESk at vX$+hj|0-;okrkb;WURaZ!pd8L)F&*();8CE41*#gvS at u|<=8#%M
zeTG}PDg}%PcEuucM5ti_6sTo^QU<=5yJ1A|4I%ly*+ke;0H;`Op%_|VI3LFr@=pF*
z`^WHa11)_QSWO^j|8v8{W9RKc0T2HH3IwYlwoyP60Wumw=VEbntuf3<LHyHR<^>rS
zg4b|whe>~T8`6g^@HPv#83l|ZJE80O)D~je<ti=7HDW48uGYD~?dqus=Z145d!2d+
zkapAvD!@r%pxeZ$18&d=CZY>e1#m4S2MVcyyfVUgA=jiQL0;IsQlsB|2ag(6H6i}O
z4mwDRL9=YmOu~Z}O9?KpZCn?Qi&8K*0V0T}Fy`%?W!o~*RCbF%1oe(<S&&TtzkwhN
zQocEqjPxZUjs-nCSpXM&-&u5l`3{`_wG;@b3_jji0L5x301MP37GK^dV7Ab&!#@<L
zvcQ(S2Pwe4qd*n^Y(df$sCG5v2e0_N)(${-JmS|yOOK at C-%-Hb7$dl1+c0B1C?R8k
z{uBQyjPOmPDtdiyItXJN?OnugOmoRN3&z^jsU*GeJQ3*TBC$qEuKxMo$rR9CB-F`(
zT-1R{GTeitR7 at 9$gAi90kmz@>xEr&SYOdx`@G)XmMKP<0DTy6rLU6T^6cG)Af1xP`
zj}E?GaAuMQRDB{S3(PuV?JPvFAS#(PTxL}YS)!?{<C%>~w$~5j5(Bw-KZ*d6d!xWM
z77#2o*SIgh0&>T~f}KQgEHDai^=%~arafM$?S$5VHRu%9 at rdgk6*t_pk1}yP1;iGL
ziQDT$;-A|@!C$375dT)^T*bczd=%t51x06JSs`ffYV~h41%rQS4b~eU|FR<h!2|+b
zJsmBGSpM6kzo$JY5W#c-Hyr-<!On4TH@>3rG7CXSZ at b^26n0^dPbIUj%-7)RtS at eY
z^o;a%JWQNvWGp}_aAT^$QG=(cNN<f)EhtPW--r_W_)5f7iTT>*T-VaUaY55<(4owd
zaU}v_)ty9erjhvw1W|<rnoaQ3!FU!%z=Aa;LN*@aJ*T4~vxs)EK>TH8fl$DN1v)~3
zhp<3RBM<G)I&%1TH_=cxABh%#0>T1_77g)@#1K+jD5r`5Enw$=75ux{|AzePRq*eb
zH^<rjh8PPh^R>g;k#TTA at N;h+k#=P+mNbIV3*d_}!rWoQKW2~JxNCoRdqBkg0soP{
z&VgQ>qYgd%#c?oHJI{Lijpu8a$MLaO5)ESc`1EOXgmO1#eQ|Xs|E at RAW((e!jpV-~
z{(}BEa^uuTtiQ{|<4CwCp~}KkhFy&^c1;d+<6<DDO at fSo4x%G8*Wgrx=>?}0j0m_A
zmRty$MszU*>>@Rad={9qtZqVz*}}`Cl4}<0Xd<I5=u1aMGO-YnjzJ30C=^f at R4D)v
zYFMyC9RTlcKn~zx0pgHvH;RAx7$_hrK(zonI-vl<_r)VtQ!Pr#2Nd`i{09zyj{@M|
zy4?Y`3HXNvtq?(zzdI;k;~@NYc%1?vvmiKTTbqJhKrc8P8dl8^>g{Yr at B&OQb!udQ
zn1Cl$qsTtkj&A$1&g^kWuDNkKsOAP9ZRbvPmKWazdraO>*T+iWJqPuIyGNY`bw_~R
z!gQY<;_^g8T~6XCi-GP~s7quUM^GZ3e*q&NMhD at 7y4#``)JEEs2&NGprVj9$WtWN{
zGMXPwE+CX1VIu`t!17H at BS!>QM6n`Ap27t=nLQTp;=^>ob`~fF`aS%M&BK`=>Nbbk
z;a_Od-{V5ExC2fL_!OY1Bf2a8+2#|JV5pz+&empjpf`elRv$VRIQ&110 at e{`SGD=Y
z+V at 1;<b#ah9&t85H%5oPF1+1s0(io`ok5ET%y1f`FWeE$O%2-JQ`I=$U>1)lelXV2
z(5V2Ak^y_n9sa-RjmEW5YL3_THG^c|`2%kI>3TZ)iGe7mAU=xEmnt<JDSRU;K!<>8
z at N6VM5(^Q6o`MCMf_9Pfl<^M6s7E5{oR3&5^n^6;$WkE!rys)tOe1QXOcyv7BqP}B
zVkyZhN{t{39-<C*P(aWw636%tiaG+u0wtP7qC&U>m}Dpd!#}b8x>{kO6-_R+!ko|c
z7LM+wb`EeADBu-8Xy>C5A?WRL9|V8Ry<>s-!XT4Z44=;CaW?^MNX!Q at vnSNu?!?gL
zK4s_W9faJ++;@?KM(?N_VpoS-LoZjSjNB``-vqu0Uy4n6+ocIp&`EbY%&kiB3-)!l
z`%l|?cRL5dRXX5bdyH at jLh0af!SsUJNI_ at 8QWE6ptSVzrNI_wq)MjH8Sz&59MF(`4
zZXJrWt=SV6(9sDCXz*kXz)U$liwGSO^TP?0!s1ABMJ*!s at 34*>!E*D6px%wKAQ|q3
z0_;-`>VjR3qL>f(NY(T8C{Rm;-6((|1Sy~Z$lnQm9dBNXe7Jz|<AFaw0kl9B|9<~(
zkOk%fI3vFX|DHy`7uHyiyBcnT at B`ugU*9`FdBq)u&IqxOsR6br6nE^~O$`WlGKE)w
zV$C-VJ`M2E(@McN+$}oDldkp_gtyW0>!h=-xkkD>S`m4-N=g4({o?YC&`QEbIR{K9
zq81$;YPe8C1P1exp3|B=uSm%++Y=TbxmXW<4c4sy5jexGyHke4_$<)Ie~$%Fz_9=d
zAkcxqlJuU;vv_Veu{fMC7Qinf0_Kp35CO#Ey<)|gv*X)E=mJk2XqZTYMcohq3YZx3
zgICc7<_KFjNV0N><^{wZ7W})D-!=K}#J>eOIsDrU`GITI1TydkuM+3q<^qc at u!$)C
zP!!{ZdA`A`orexT{BaFzLHGfFBnUzWKOZF3lh!fIyV2;AeMfipdN*o)!5}^VYaMX+
zEqXiKd=Wm{TUDGZPy;ab4-L{Bp0pA8+Etnxonj3zrMaWkm$v4Pz*jb=_&==A2;~Cr
z&3-dNhwXYn<53!w^|KP5bL|nq+-Irch7=U3YK3YyrP@}ino~y5!sc3=i-}%(Inf28
z2y`F}y1-a~T{K;c&6Grp1uUX<ELa*zELD;?2<FJ|$^sBBL>TB%y9o0}SRh33Sb#6=
z;U5<8!A><m1beDqK_a5!0(cZ4JS!0)!0+`o`W=pdKZt)9?YANSJMrJz+#r+BSpg74
zzTVe>AEi+9ihJsSp*P|koA`g(<{-$q2ZVOkVFrl!P_&bftDf!RtJYu}zz4pUc;ZeB
zZ$YKtzFPIhKhHsXkHn_Dli8ivfYV`B5Z)|e9 at 8#YjiFg2&93}<gTn9DKFeOLu{`w+
zd*9Bz0dD+Xn!H0hF6=jE_t<P0jpkOH?;z<3B|?w|aj$q)^ny0>NNWRStHuI!0W9z)
zV`vK-ea*&#Ax6sk^O596?gxYgJ_UpYLV>uNMu|lzFp`7?%ax?DfavZ{T~I}`5J6mq
z01=b|ut166K62-cSXN#*R1^XD-v<5w1+aD;^6kdqzlH)1|FxYj8Y6NDw_KQe8oY4`
zbT@&c&rbyS2sfyk<rA=n<qyrD+v$toN$%L>zN~XPoG}(u3W_Bm4qwgemcUgMih+$6
z9opTY4Mh3<2xxa;yO}7N6WJQSi?k3 at z@7~LlYUBoJ58<IIU=O+eKC)E`VQR>D?h&H
z)C)DtGNj0aGXw`pLr-lG!Lh)y5 at f3>Uge&$J!^2Va&Dsly$t9AF^vK&ut8z4fElW0
z8ZjcQf+!2vIfXDra;gwz7cGKDfCaPV*j!m|kcHv+;&2?Vq(&W>r@)J55upoI9S94|
zUIN(IOAhcn{dmz>kYwm~#eWU*d1~NS`=_e7^&sVM?VbOq09OlV8bPkw3-2X at x7$LF
z0uF?pFR<Ma0GZ(2pe{$Q7(zsN+R204jUH}t6#M6%{FU8bKXBu_7;5=|;ea9tDh2PJ
zPxQW^4|qPs0A>ffLERnKt<6o65Haxq+|<~hQqSH%PuLs&8w=~z+$Xj)5p7dZjszLu
z-UDw*%~6R+i|7<4`>pcB+L>Sq&SQZ(_*Py>IM-$Iv}~_E(kl|}YnKvMzs(00I7NVI
zWQqU>0bSrt%+t}4m`1Qby#tvZS;;C3asx_-eg;TR42D_0GdTzyBGX7QLPO$gNd!9J
zAdtwG)Sl{sOsp at X83c%6)G&+45dmEwE`!E|jR?OM|4 at LSQw{!iB45F88(!pEW3}2Z
z*-^moUj at H1!monx^TM_%#v7KtOK7MDmU4Erb5aTBF?GN>*HAYxzz)y&@$Db=6U7rm
z6s!EjYkWyL2?LCfd%m6bL#eG2B%{3(XU2f8;K6PPv=e(9&Ue7Ofu(`6H}K;`XZ0~y
zd&kG<=Ne`BE}|Nm8l4Cunj3{CCjKrqPO4prAT03IfhaO#fw=ji?5J^-Jc}gXz1|{e
zuN&xQ2*5TLICIFFH=zK!fB_dW{zdGfZk?OQ=2 at WtQcm>^A!+7XglIW5r7)VUvH%JQ
z3yMfI$b$KD%&`C>?9Kvp4T41QSRl!C9EaT%fd!fr|5DW-ENs|G0So5Xbr<{x@?W^g
z!N{jm2iyc-58emy#(fR=d8)RD9O;JkK46b$=V^qto=#5!?x#jt1o^d4uR*?m-xv2b
z;IbW_YLH8^!z^<-hZSS=K8rB;T3_*YA}i*DAa|3-yc=dMsnqRwus+^B>>uqT<?4?s
zvm4l9)0-dy|7zdbdjmR`j5k(81XIEM2tjq=Sb%QTP?$POR(vA$Csx|(m3(V;YcoZC
zD1}Im^td^52t~ksA|x|mgaSSbWSFqfp(}?(Wu$yDVJr{|2n#Z-of4%03s_37x<Dvk
zEPw(trU+CQR9WEE0jXqF2c`==yGV^9g1vBot7Cyhlk5r|f=|&VzaISN)%xk(hvA=J
zZ;&S3dv$Tuxe#71I0%03ofTv^LHy%60 at 2_Z4%$I}sHYR-$06U0qJW9+8SOP__n;n#
zT#4oEyTiPH13Z8+V{a$m9o|4A^YNGljM%v?TcR9@{Tl<be1!btE+2Ai$HRT9eEbfk
z at B*LVeJ%ag_8x*<umMeu2+nY=sskHMskSITz61m`BX8+HFEZ at 0z?6dalj;ac3S7PF
z?r!OHV;Y9^{woEzfd!@!nDL_Xw1on~f at qfv{t_1SGF5)3A`ljsIb;;@%^{BkWwD50
z0e*o~2RO)19n`SE%Z3XPBtH%jf|#$l-+9^xU)dSbv4DnSfgP3Z>L?HdKlkqSnwuK%
zyF=LB1i=r&74z6XM7c43+AT0{*UmO<9x;2I2;d)rcK7}*IO9NKn70$&hZaBt>H>Ji
zrpicQdB`AD1+P8}T)YXxfuX{Oj~rzRHzQbe{xF|({OGaccE9s#b6Mpo-^>$8!RH4b
zK23aHRTuPBm4f{gHR?b*_4Fw7T{Ah9Gz6`=c-zslLlMw7Va4RqL&p?We<G#L(_oSq
zlP4J$!!T7?U=#D$OD=RkFX%{Zou_SzK*B_&WbaNz;Ip8r2)3I;m`0J=VnlOxUX7D_
z2arN?%8mux5Xf>hA*vCiR>VBz-yHut!Otrm{?%00BgHEO5+Lc=Lw>!+Af<ryf9X)%
z9nn#~TJS4y?_h5?qNX+6O_;?U at 1Wg~@6P|Oj#h_x_wjs+9q(1B2kd;$bk{S##;Os+
zLJnVm>P-z+;0fB966PMVAQ=v9!}$@JHg9tH2&08}%E3d2k>Kmf4hZ52jL^aL!VyGf
z*SoLjzL(OEcO_i%AM&278bJ)Fpk2hzsDG5|vJ(00cs1&tUgmdhihu--6+vlnxHpc&
zC_r-rH at cUB>D;!OMAk9bFg->m*(6CFBkZp!5B-0Yor!i_$B{%o!xVOOqZjmw#zp`H
zNJ1h_ZI&!svgUZk<MH_a|6y)qROPE)2x<C+o(qizNcu!%MrP%E^@t+!kOdL}UdV~S
zD!>b6MSukU`B(7Cb+PRbW%9ql- at dM8vQ!Wo6WXoQuwRThp#qS-BlmJ!A&@dkzo=QX
z(SBq7`}v=u;75E5WP9EDd*V%sg03i*@ou2htW6(z_;>7_f{5_&AHoYy!t=XFpgv at 6
z&aAcHYX{zOzO7!>sNqSd;p9yfh~IEN0(qr756WJ|%f|)kyr{}^RxO`d&%vUFIM3k=
z(=AvI?RBwSEiP92 at vUFWZ%#RMx(gL-3n7wMQGpX#KC(DwTAHW!apRJ1)&_cBQ{0!=
zJ)<=xz}*mWG?gCB3M_$m9BVn6r#?@(JbBwEQk8RQC4omBHS))&IB at 65XK_Yp@cb(U
z@((JIId+YMIR8udhy?xz{QT)(f#?)T0<8*S!&*DntqPcTO%<dBydWcZL>3{i at D{@c
z=krU?dHUKCIHGjf)^YSs^0V0HfAh25W74xOZun0jP`h at qAZ{1(ue%!4J~M))0q0pf
zy}1vRs at 6fi4fW=HX-KLe<C>HhYFiT#y>cFgoAdL<Vm=pqh6vY;;SJT79ld9ZX#>uM
z56mXB#ZJuTsAI{GOs4bh2SY4X8d6iMvP~iEQUU)a{#_)p at NZG7)cqYK;JS}H__Waz
zGwmsXP(hIZa`4lc^nku{Sb3FzRG=pk=R>(u0z6^Ti6Bqj;i#!r0;r%!falDsI(Ux?
z)FTQNa26*AasK_sul`fu at TrggBrnh}`m6A-pTVd91;2dy_b;DP1x#^l2!ULHI(WYo
zf+dhbNW!;^mi!y*4gLrD^{9WqxA?FkzyB|dYf^oC(bfVj`Ta*^XQs6 at xFC3*5#AZ0
z<$QX6Xz#v_IZvn;?Q3U}Mvct%<t0%(UqtmJJZDI)a~@`Pn6P#*uRLET_M8tu=J90q
z0;~&vfP>>%oKMgQKikP<mmJno!-f!SisBmXs7k<3`Cz73H*{;_Mf1H#z at slWngO`D
zy+RAz-yxudo69AOdp(`3JfLic1av^vZ%KeBsp<$e4k*<5JDCM6flxt_0LKn;1R<x;
z0wl1ef<Nz8K?=bt;Hp_Bb||VTA{|Hq>nbSsN5sxTOZ!-B$n6CXvF%cFkzXdmlmGcn
zx5)b?o1)lxq`kskm#!Pe#xAIh^KTy?{K?z{g7$40Yj2aGUMBhK3J0A|COPjoA3UFN
zXqwN8;(88(oLooe6JgAef}EZ+g}0zac*l8NM|@Hr{w#*$2^er>{OEi*o(h&gNf!Dg
zD5#Y~(L(4ha!{8MstQ)|k5b9NONF{?lz6_!#d5*FxqIA!ZfgZ)`YR>C;(E2XUM=B2
zxV>E7Ne-*~z{?WgbdvG_Ngb?E4kGahJFNurL~==h6Pdr!LF7Jy_Ag(*W&O){oWF?#
zq=F_9P%_IMwYebDfjkoF0NS%FUD83QKtk{x5SBnA1n;a-K3D$hxh2L6<mX!(v`_N$
zev&*Krp8D0PDA)y`wvZP)G<HG0e+{+oN?ZSuhBm2O*D4=F~q`xsQ?xc;nkckmR=60
zb}6G&gcXovgYz~vpW!@_nZq>2d6U*xGrv%`ev3B;usQ&rcf#L2^I`Fv7hmCDJD!j=
z=Ho^M7T2Z_stV$7u7X;YOqF#x&Y6E832f%05a)A!PyGL^1bna4<;CI(i2rL6xV>7Y
z1R@<=a%wZrtK6ssFhVa#z+T8%z!KotSx#Q_;hR5k=FZn|;lCw-3OI{-M<T!xH7cN3
zuBPZWRKPeB;~Y*0(LrMRTKmgM``<(Ukj54KB;=a;Twy+-g;@9>gctc6=2w-KvWqVv
zzlG)>&tGCAg!!*Q9!p>RJfR+BoUh~;?b!pRk}XsZ$6I=bREB!3;65RdI4NRm_<4C1
zMf;5N5WWBoS8fl-iq#3;PpS__MDmF!Jv{FR&iHZ{{N0VKf6!Nc=g1Ps>$(<F2ucUV
zgB4 at u!h~bp;x(JX{&*n+q)`0aV!n|DRu>Cszgo@#i`^2qS|Wj)%f;*Ki at U)6%>@~O
zlR7!R!ACZ8Snb>UE1lYT&yk(#4*94N*8<K0tpvX1m`?j5StF at H=g;m^0S7T}+M%j~
zk`7V at stzQCHWx6k#Fs!jccB6{5fFk^;2`{4<nKyXh-$xK{&$`8hV5qlHs|X*@r<m>
z|NISJ;9jUHI!j;UyxTjxzd?Hj0B}2Ohi*8W+84y?5bz7_A%g8qAv`>njnVnYHa4Pt
zbv0smLwMFDRtL{T_&|_(+#d!8<NjdWYjAot0=(lzUU`R43jV=zm3+u4#XiYIMLO8Z
z2&h16wMPn at 6n}I5LjY&pmUC}EBY`C`U_JxO1=s0?L?QmS61bEc=2wA82aB840twt+
zE~*4%ihNk at rUV{zF0Cbyhfi_rnvZ5?n;_4h-Il<QA32oyu}uWd1-n)7qx(f+imD1+
zBSU+(r}c#4Vv0HygeiKD3P73=B(Tf*tT8{xuePL{>cQBupR&REDyt0moxgH*;8e0s
ze%(q8vW9I#eWruQhkK3O#0*Rhk`eiB>`i+IeXjUlTLSXGtU~Y~@~_c;-P?%g!?7W9
zCQ-%eQOEX%<SpU7hUX{!AviugTSM>cIN<O4+KB?CNGv0iH9!TF53VEDRgg6`5|A<D
zaP#pw$DIT7KP52HYpN5Vs}Y*brb-7hk$<lBbOGkmC32WeSTD7nN(ce-zd9oEKO~@Z
zaDQD=0EadEymC}P3Mg4%O9F9ZIj5H2a0IiC9ege-XeID{Bmzr7ol+GDst61m(aS1u
zI{3#=AHaYA^bu^U08x+#oDnD%lK(Q{@-Vg~9qn;7tvQLdr1;-<Y-(Unw#(iC|F&YW
zq8-$g1~>X}Du_>-{4M8m9bsRQKTQ7J17|lyKS#qbv~r at 2S%wW%-Li93m|y#cbQcx*
z6*g7LcJ>CxZikbhzU4er>=2RMTy1%KBB~SQiSXm&-XL*wdiFaZfk+eseyx8$UTAne
zOQZ^-=uk~9c at 9P))zM%$7Di)^H8)1%v9w^248jtH7AEi?Os5l7_+`O*GM@?3LY2UU
z^1^hrn1RcsaJ8Ie3ZO22eI;ZHumm`}Irtw&s7m1Z4Tm`2aAbKa0iU_)M9 at kgy%1Rd
zAOYdi(@&qCP{Gep7i_42PN^z|QZj$}_aB6R{8=h6n9A751$=1<n5ZVdd7fo#%Y2BM
z&b%c*q*WVJZO at MURYYAMDQWM8Kg<udpTx$yl1<vXq$S!X?ah4C{#GvyCh&^s8chq-
zF$2PWX^+r3C-P&Jqahj0uMQ{3U->^S20j9KrG3MBGxNANOonF+=N+hiSaERDH}ai!
zam0rkndEPag;IvWU*l{{HC+)UhW%2>O{57h6kd?PXoMCx=NUOj5985 at wY4#woCC-&
z{)Ysd0wNtK3&8)2;QuQ4j|5hW=_OcB(SmR>yAHg*T#yb at 0;s at +z}ve^>H>}_e?bCK
z8c++U9Qe+t<v>jYYbrnpR)MSIU%zJu?fE~zpHwdwA%qrCLH3Kdf72>pPR|E1C^dX~
z2X$NWw-U&(pX5&ouyDBMXRRQvka<@f5ve4q18AT8Z<)`!CBJF!s at 6US+7t4L`8u~U
zXs at 8}{r+$~Fh6E#)bL}LAo?L{iOd$-SBe&jdYI`PYICx-Yeth=lkPC^j_ at r}&0(%0
z_DP3><Nh|<4;-DMl!_3-XSASnkhbbnc|qs}PWuDi at tW&S2|)YdXavOnkicLt^lLQK
zcO-%HaY$e?IUjFG0P=?xCd=7mIVUfigQYN$1eRcp|2G$;hWYEO#hpOQbou&net*4u
zyj?XCh!n6Z3m^gT_4~Uv5x64eT2&B<pymR-`SI~DpPp=rtO9lrqIbF`gkQgBa}7Kr
z2PU*b1sYgI1&HEv{BOwL?aUIfVLtU~kl**VbUw$F#@<(M7v{IA!D~Li?@#m3ZzJYo
za=3-0r9D&bt<Q15_bJ91 at Y&%p^F2Zn!vmtdFkiZ*vrYTbnXJ(@Dp}Q at 9pzN977&n+
z1BLddgCsfJJ~%nsKkjkOu+QS~6luH!t01yT`Q`c}*7Cye=%k<N;G{Qz|0iO8MU}&b
z1R@=f5nw$OpYWgg&sTma{;NX97b*Um{P177K<NOgt0D+H1oOpzAUi}|Kt|A7SS<vl
zg9Yh8xYU=EE3g!<ms4=NnuQh?Z*DH0a7W4rm+$T_pC7JW3)l#y1gwIMM35?=W%@&a
zN&)=os|QrzjPUcf at 9;$y0#~%~x9{Hn{LR}2?|%7KXjQNs{LTE}r)pcre6I32+_a*|
zUuNDM^DEnnnK7$nq8dlEA%SE*3+EAbX|t+rX-}NjC|BG(V&*dxuYG+W=6920nw(j#
zO#A74$u8;^?Qzu6ldrV5yQq;r_%8_*oDR-S`(P&I970+J^B{K1_HKRLZ=-#;uGT1w
z(7G;a`j8@=5l+tz5LAHDASIAlAR9+pMyM+U;6FGU42k*?_#^5o9q5((Ck4QNFpXSL
zUC{0-0RB4#6#j<<g7eA<tL{rlATq)X@*7CNcu-Qf08g*M3cP*2dVhcQ<(un|99I7J
zmgC5gK&Jvo{_)Xl$0L1LQH1c34P^ldSOsK+KdWk}9VE(URnP^g1#Z%@3U>0}oZlvY
zNfyEXUF285Pi}8;-d{3zz#vwB#v8RBPKbM&e7B$u=yqWn?w&cWxDUk4-wOC<KBG7U
z{1_f6`>^o8?!eZqsD}AxqbXtE<nOK1{&X<5=b^AY4je)L-Y}S7e7;k_K88o}zwbq4
z0cC_25DHpL7JS%B**`knJ3QeE`434VCw<C_sE$<{gOos+ADU5=z3NuE{#6NI*D&9}
z_H at R_?8p6Jfx-oaHyWLfg~$b?NC)ThsbC9~DIlu=H-)kaa0*z>&yj#rfU-cOfSbyH
zRB(SqjUbr++Y)&HaP?gA;qeC0Df;kq^YQ8Co98>~Vyl3?GsvIFbnxx-9Uu7d;~QHe
zT|)>d2MJ+a4yYibeJ<44Umrzt<cILd|Baa6mCQ{`hYz<BF!S;MkUtI)=3YN(K{ryx
zSdQ#{b at -*MZ3^2A_;&a*`SSTIO`yfRWy^dFznQ-?;G6l7U$n2xC)xwiUNtZL7ka~q
z7svE=KwoIIP$KzJe{_gCia^%G`??Eibzvcp5lA1<-hll3M?DNxELfjP0<}Ao62PaC
z1!$J`RRTx1w$#G(g<!sdzmZh{d>`;CML_bO#h_|oIHoR8X)v5f4r9_mTLnbemjyDe
zFX)kWRY1r=E=acL0?d>GsE)$|g$wE=kXZmD^zL4879bHIfp>T0g$us*{{HgIH&>Rx
zr+2RbhFu$H&-bAPso<OUcLmRP$iymeQrOT!D+ebC<dC%YBFXO#f3ZDvbf07q=0Dq{
zP`7qUOFuKV18V2fGD+q`evMu6Ou1lwZr9r0L}6PSIxX|p1AdgZYs{D1shgxs4lqBU
z#?F at 2p`8+a^%=H at bzi|B2^0|XaXwZ-)k4SlmibBq4NQKn8)!dsK*_LE2*>?BVm_RQ
z at Wu1=Edl!<)- at 533;HUGCC{vdM{Ob8KO6Q-*mqM%5)kc+1ya=ai<P7xH9&qt<WK%v
z0+aL6Oe%<6pmcCvo1&!(u;<AtK%8Hx5C)wDY6^(bSXBTZ3#0@@^?Q{A!FH}!BmyL0
z at TSqK03m$!c>N*p$G5jeCj=CsTyU?{Pz at 4`kVBUp at JpDbb^gok$KZXrbCz3L((SWw
z-I_m=HYOH|_Pb1x>Vj*H8VVXd)O-Re&^;yqBhR<HR^~eMHD({3%u?Ql$<LS%^MNO1
z%zVhd!F;;t127it&3uu+(!M{Mk^)-Vvu>k(7w{X-*JzI;!WWGSNDayk^~>If?;e~C
z_Ay8mj{o*cd&K!8e15cyqGg&A;LZ4!s(^Gs1piVXhbhWh7%$|axYr+mkU+FX*DcVQ
zqCc;i0K)%Zg=~S)$qxRL1<r+50`uv3QK2fhv;FRiZl(a+{wxISf{ODe!arQO9DZ}N
zthE4yzj7i-JCrK0M!tG;-JuErIiwa?SPp5E%05EfO<+U8dkT=5(Pa-a!2Be?;{W<h
zUJm9a|2p&O<dm>qs^e}SO~+&h?Zy0<He?~hOpYdy<E8nWwvA71o6J`;Qxe#W`7UxH
ze=?tG0g+#`lx6d%GQY(9NC8Ctf|mK6&k2*$2K+XXL+Ld@@&@96;2 at X}`CCW at 3i!P*
z4o?kBpctOxo)STak`ZeBFD~ftq(@)KTV^M{GoW-3O(FCDw13tMAcX$ez&JY_?BIV$
zpe+HY0*LvP044rc{#ydd1xDq6l*8(aUd+zhMvz>PERbAKt$f`Y)s=UM|4IZ=2yc|b
z<buj}B?3#pj)+Y0HsB9XGIuIq{aBDf`1(B?%>pX$Zd!9K-PD)KZ at 1G%b@;zd{?70?
zQ~0~?^J8^_?P9*q6gKmH53O$Fi%DG#>uOTHbaghEANNwJpJ|`(nC~I^b at I<NIa8Uh
zu&<cE$^5hNEMop7-A-XXb#8U|yJLRCe9=45lAm?H-!9P0{xQry+Y9oW|E~^CiV9d5
zlmH$1yDESbpv^Va!bTaWkR3{#^o~z^QUP+HSUBmOoEG%@edN$L&dSS~K*=C1kR%W#
zaPnX6Aa#Vsa31ncR1plP<6)7&bj(J8yFf|-r4c&uURbyw?FF>k0qg}B4>wCB;4FXy
z9$F(*n?kM#K0MvRa9|arBXV8f0vRFTi)@W3lXt>N0TpEVOa+}aa?5|;Z<UeX at gMRx
z{O?*fCFaNGZ>9#w&m1P?Pv+-Q+P+t|Wqz5!*Jv&+{L64S#qBueC-bwbshD4yJd1O6
zIK%B at _@mXc753%x3+VQYXCMr}OWjiB(&53nJK+C*=C}M$w(raB2>FiV|K3smi$lVG
z7x_2IFF6QV1?OU;1V9VK|HI?cLv*2B&|`fRI6OW9$0w&JJ#qfD*B8)5PmlyY!~f5e
zz^Z~Fyf_~v09V$k0%{4Yn4f!L>=7>%@Pq%Q3b<X(Z!hQUh(Z2H1d9Kvg=15|iNGBp
zTu_?`utRH!AR43!_$A2SkQdlKXq%<(n)=#S#MA<Y%jX=Zumv*z*KE&j=Tqw38vIMx
zZ=@mGr`z#;7F<Q>m^{~H`a<*P9>3Q(ZoK#(2D0KS&9NIB%y+bp`$5XRQ4RTjJM63B
z6Jg(O-vOU%>21RQp7`&^&PI9Lx}A>IHU8&2$$T&NBH$DA)9RT21pkfrzjsK_^HeDy
z`2WShvGHpE=!^ZMy~AVTKN3(OpaPi%%oh%hU^~}i7Fz2|;i%vgA;5olj|H;-d6EBv
zs0GA%ED-(&Wc<%6U{R}J&qCC_U_5`<2&xiL6%7BoLb&M#wGyxjNCf6TLU_8RMqV1u
z1)U>`>Nv<>w7|w0y9NfKzEy$O-c#;&mcM)mJES|2c}R<$e;4_K{A*=z4))(_dLj6~
zMt<E`-7ud61x)@8=9ha;;=T;%&I{Hvl%;J*{?m+>hVbKt4&7<1;r6Z3h1T%6&eiPw
zR##t*ePdXfJoY@<*fjGU`5`}z{r?yFH`v~O*)klHV}uHNUo_62cl=57UlOSN|HIxP
zcxCJ#IuRTo0jVHxbh3YV3=Tk$e+U0h#DC=ioRD~*{$GxVjbOIGG$qG^|3>os+69|%
zV_PW!(*NWxK+Xcu|7Rka5jdtmUte8-Yj_ at QA8|frq`A5gq!hrn+zwTDXy!%`SG>?e
zZ3jh1XmNKrw+gtT0t~+s!MX}cf$UC^wBWt7r(16#bIti`5=7>RRu12PcmsGg3;c)t
zu6$##O^++ at dOr2}4DNFV|2xB<%ulydn6I#}yN%**r1Izl-Ha509_B;y!u%k==5;lu
zEB<>*)8lH<*x8)hvFAzhM at zE|iDhFy$)6^l_NI2V6za8;m7odlp3K^~LbiIgJbz1d
z){66Ccv$RYeoElg!7*skLE%5eugOoqUqj{ptNlYV!amlBAKyPR^9%pm;2-fnINxji
zKRLkuKOB&X;A{Yy|2YK_Wv_O at JO~lAFXPZ_vv74BRL%d3S&=}!FUCWmTp0n1DIlr9
zE(jwO7Km$C3&*}dc^?T_1(^uQ1?~>v`Efh+NVkRH8iA|lDC#tYHVe4d%tG)@XYJbW
zu(NFDbA|TCHu<S}#s8RI!}inXj0V2k4$S8XqV#q)3{T5^Y))`r7c)P at K9S!e>+oNw
zciQIdS38H+==12_E8lfh<A0Lh!C%bx0FS!*h5VXfs3 at DcyZG;Ry{@%^;{ui|?{pFf
z&UcZ#hWCc^j{jnQMUxR~<y)k|XF>uB{$YM#{vY-ZxW3}LcL4dnI5^sCVDm!>K=BKr
z=Ix)TDDLWCn}5hJ;DvBQB!f_adY<F4`7h4LASjDE1;J3LI{%R0{BQ4w;Wo*<DaI*)
zLFjs4jP47-^OFLg`dT3zg at 6m;?1<i6OcNVk2q9PkRsrMF+(ZM=Lc;HGWwW^4SrAX+
U(k%w%kzD0TM1B|x*VYmJAAWV_oB#j-

literal 0
HcmV?d00001

diff --git a/utests/kernels/compiler_obread.cl b/utests/kernels/compiler_obread.cl
new file mode 100644
index 0000000..14658d9
--- /dev/null
+++ b/utests/kernels/compiler_obread.cl
@@ -0,0 +1,8 @@
+__kernel void
+compiler_obread(__global uint *src, __global uint *dst)
+{
+  int id = (int)get_global_id(0);
+  const int to =  __gen_ocl_obread(src+id);
+  dst[id] = to;
+}
+
diff --git a/utests/kernels/compiler_obwrite.cl b/utests/kernels/compiler_obwrite.cl
new file mode 100644
index 0000000..50e55a1
--- /dev/null
+++ b/utests/kernels/compiler_obwrite.cl
@@ -0,0 +1,8 @@
+__kernel void
+compiler_obwrite(__global uint *src, __global uint *dst)
+{
+  int id = (int)get_global_id(0);
+  const int to =  src[id];
+  __gen_ocl_obwrite(dst+id,to);
+}
+
diff --git a/utests/kernels/compiler_preprocessor_macros.cl b/utests/kernels/compiler_preprocessor_macros.cl
new file mode 100644
index 0000000..0f23b3f
--- /dev/null
+++ b/utests/kernels/compiler_preprocessor_macros.cl
@@ -0,0 +1,13 @@
+/* test case for OpenCL 1.1 Preprocessor Directives & Macros (section 6.9) */
+__kernel_exec(1, float4) void compiler_preprocessor_macros()
+{
+#pragma OPENCL FP_CONTRACT ON
+#pragma OPENCL FP_CONTRACT OFF
+#pragma OPENCL FP_CONTRACT DEFAULT
+  int i = __OPENCL_VERSION__;
+  i = __CL_VERSION_1_0__;
+  i = __CL_VERSION_1_1__;
+  i = __ENDIAN_LITTLE__;
+  i = __IMAGE_SUPPORT__;
+  i = __FAST_RELAXED_MATH__;
+}
diff --git a/utests/kernels/compiler_private_data_overflow.cl b/utests/kernels/compiler_private_data_overflow.cl
new file mode 100644
index 0000000..d0f557d
--- /dev/null
+++ b/utests/kernels/compiler_private_data_overflow.cl
@@ -0,0 +1,10 @@
+kernel void compiler_private_data_overflow( __global int4 *output )
+{
+	int4 data[65];
+	for( int i=0; i<65; ++i )
+	{
+		data[i] = (int4)i;
+	}
+	if( get_global_id(0) == 1 )
+		*output = data[0];
+}
diff --git a/utests/kernels/compiler_radians.cl b/utests/kernels/compiler_radians.cl
new file mode 100644
index 0000000..1f79481
--- /dev/null
+++ b/utests/kernels/compiler_radians.cl
@@ -0,0 +1,4 @@
+kernel void compiler_radians(global float *src, global float *dst) {
+  int i = get_global_id(0);
+  dst[i] = radians(src[i]);
+}
diff --git a/utests/kernels/compiler_region.cl b/utests/kernels/compiler_region.cl
new file mode 100644
index 0000000..d74ac7d
--- /dev/null
+++ b/utests/kernels/compiler_region.cl
@@ -0,0 +1,10 @@
+__kernel void
+compiler_region(__global uint *src, __global uint *dst)
+{
+  __gen_ocl_force_simd16();
+  int id = (int)get_global_id(0);
+  const int x0 = src[id];
+  const int x1 = src[id+16];
+  dst[id] = __gen_ocl_region(0, 16, 8, 2, x0, x1);
+}
+
diff --git a/utests/kernels/compiler_region0.cl b/utests/kernels/compiler_region0.cl
new file mode 100644
index 0000000..5bd57c0
--- /dev/null
+++ b/utests/kernels/compiler_region0.cl
@@ -0,0 +1,11 @@
+__kernel void
+compiler_region0(__global uint *src, __global uint *dst)
+{
+  __gen_ocl_force_simd16();
+  int id = (int)get_global_id(0);
+  const int x0 = src[id];
+  const int x1 = src[id+16];
+  const int x2 = src[id+32];
+  dst[id] = __gen_ocl_region(1, 16, 8, 2, x0, x1, x2);
+}
+
diff --git a/utests/kernels/compiler_region1.cl b/utests/kernels/compiler_region1.cl
new file mode 100644
index 0000000..9deb63c
--- /dev/null
+++ b/utests/kernels/compiler_region1.cl
@@ -0,0 +1,9 @@
+__kernel void
+compiler_region1(__global uint *src, __global uint *dst)
+{
+  __gen_ocl_force_simd16();
+  int id = (int)get_global_id(0);
+  const int x0 = src[id];
+  dst[id] = __gen_ocl_region(0, 16, 8, 2, x0);
+}
+
diff --git a/utests/kernels/compiler_relational_builtin.cl b/utests/kernels/compiler_relational_builtin.cl
new file mode 100644
index 0000000..8b195ca
--- /dev/null
+++ b/utests/kernels/compiler_relational_builtin.cl
@@ -0,0 +1,24 @@
+/* test OpenCL 1.1 Relational Built-in Functions (section 6.11.6) */
+kernel void compiler_relational_builtin() {
+  float x = 1, y = 2, z = 3;
+  int i;
+  i = isequal(x, y);
+  i = isnotequal(x, y);
+  i = isgreater(x, y);
+  i = isgreaterequal(x, y);
+  i = isless(x, y);
+  i = islessequal(x, y);
+  i = islessgreater(x, y);
+  i = isfinite(x);
+  i = isinf(x);
+  i = isnan(x);
+  i = isnormal(x);
+  i = isordered(x, y);
+  i = isunordered(x, y);
+  i = signbit(x);
+  long l = 12;
+  i = any(l);
+  i = all(l);
+  bitselect(x, y, z);
+  select(x, y, z);
+}
diff --git a/utests/kernels/compiler_rhadd.cl b/utests/kernels/compiler_rhadd.cl
new file mode 100644
index 0000000..4024ace
--- /dev/null
+++ b/utests/kernels/compiler_rhadd.cl
@@ -0,0 +1,4 @@
+kernel void compiler_rhadd(global int *src1, global int *src2, global int *dst) {
+  int i = get_global_id(0);
+  dst[i] = rhadd(src1[i], src2[i]);
+}
diff --git a/utests/kernels/compiler_ribbon.cl b/utests/kernels/compiler_ribbon.cl
new file mode 100644
index 0000000..157cc66
--- /dev/null
+++ b/utests/kernels/compiler_ribbon.cl
@@ -0,0 +1,88 @@
+typedef float2 vec2;
+typedef float3 vec3;
+typedef float4 vec4;
+#define sin native_sin
+#define cos native_cos
+#define tan native_tan
+#define normalize fast_normalize
+#define length fast_length
+
+inline vec3 reflect(vec3 I, vec3 N) {
+  return I - 2.0f * dot(N, I) * N;
+}
+
+#define time 1.f
+
+// Object A (tunnel)
+inline float oa(vec3 q) {
+ return cos(q.x)+cos(q.y*1.5f)+cos(q.z)+cos(q.y*20.f)*.05f;
+}
+
+// Object B (ribbon)
+inline float ob(vec3 q) {
+  return length(max(fabs(q-(vec3)(cos(q.z*1.5f)*.3f,-.5f+cos(q.z)*.2f,.0f))-(vec3)(.125f,.02f,time+3.f),(vec3)(.0f)));
+}
+
+// Scene
+inline float o(vec3 q) { return min(oa(q),ob(q)); }
+
+// Get Normal XXX Not inline by LLVM
+inline __attribute__((always_inline)) vec3 gn(vec3 q) {
+ const vec3 fxyy = (vec3)(.01f, 0.f, 0.f);
+ const vec3 fyxy = (vec3)(0.f, .01f, 0.f);
+ const vec3 fyyx = (vec3)(0.f, 0.f, .01f);
+ return normalize((vec3)(o(q+fxyy),
+                         o(q+fyxy),
+                         o(q+fyyx)));
+}
+
+inline uint pack_fp4(float4 u4) {
+  uint u;
+  u = (((uint) u4.x)) |
+      (((uint) u4.y) << 8) |
+      (((uint) u4.z) << 16);
+  return u;
+}
+
+// XXX vector not supported in function argument yet
+__kernel void compiler_ribbon(__global uint *dst, float resx, float resy, int w)
+{
+  vec2 gl_FragCoord = (vec2)(get_global_id(0), get_global_id(1));
+  vec2 p = -1.0f + 2.0f * gl_FragCoord.xy / (vec2)(resx, resy);
+  p.x *= resx/resy;
+
+  vec4 c = (vec4)(1.0f);
+  const vec3 org = (vec3)(sin(time)*.5f,
+                          cos(time*.5f)*.25f+.25f,
+                          time);
+  vec3 dir=normalize((vec3)(p.x*1.6f,p.y,1.0f));
+  vec3 q = org, pp;
+  float d=.0f;
+
+  // First raymarching
+  for(int i=0;i<64;i++) {
+    d=o(q);
+    q+=d*dir;
+  }
+  pp=q;
+  const float f = length(q-org)*0.02f;
+
+  // Second raymarching (reflection)
+  dir=reflect(dir,gn(q));
+  q+=dir;
+  for(int i=0;i<64;i++) {
+    d=o(q);
+    q+=d*dir;
+  }
+  c = max(dot(gn(q), (vec3)(0.1f,0.1f,0.0f)), 0.0f)
+    + (vec4)(0.3f, cos(time*.5f)*.5f+.5f, sin(time*.5f)*.5f+.5f, 1.f) * min(length(q-org)*.04f,1.f);
+
+  // Ribbon Color
+  if(oa(pp)>ob(pp))
+    c = mix(c, (vec4)(cos(time*.3f)*0.5f + 0.5f,cos(time*.2f)*.5f+.5f,sin(time*.3f)*.5f+.5f,1.f),.3f);
+
+  // Final Color
+  const vec4 color = ((c+(vec4)(f))+(1.f-min(pp.y+1.9f,1.f))*(vec4)(1.f,.8f,.7f,1.f))*min(time*.5f,1.f);
+  const vec4 final = 255.f * max(min(color, (vec4)(1.f)), (vec4)(0.f));
+  dst[get_global_id(0) + get_global_id(1) * w] = pack_fp4(final);
+}
diff --git a/utests/kernels/compiler_ribbon_ref.bmp b/utests/kernels/compiler_ribbon_ref.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..2225f4547ea23b4de878aba3c5f99b83abd9f270
GIT binary patch
literal 196662
zcmcG%2bd&hb?$%f^M4)-?M|Ma&N+wa946=4ysHF4LJ>r?O|SujO|%V2AP_;=B#9tE
z5(*$Bgn}{H1SLSyDiEEnjlsqS0~Xl6r1}5OcdDwZdwO<Pz}@GlRNY<Eq3V6ldC&RI
z_tpB5&j0%V{+Img at Lyhb{<r at 3zyFtC9`R3K*L~f_5`kDU5KjihQoW{6CWA5C%B|?g
z*vZ4ACl8ODJT&qIwL-%aPL77+BSB;Aa11s&v1{D3%O9BX28XiM$y{wRQ=W+D#(aK{
zKR7iyzH4|?Y-DV=v7wQ%q0#Z-P$V!uIXdnco$!o#{Nt;qrc&8hu9PiS3dL$MkqS at O
zrsJtlxlv(TY1RsJmFcB=X`w2%*lSDG>7A`O*Tka9STq&4EfGr at ODAJpOU2S%i>FiZ
zbh>MqbbNrN;u+iIc=x*{VrlsZ`x9e)frwZ%l8DAK(R4nO%qA0=gfHmz2BxM09*=**
z;~Ss!j!kgRJR{?i!()>}V-rK86T3&pv0b+9<{6$Jn;iCsruY-i;n?KJ*u==_#PI0&
zP$V9d<0p1aOzrjsJjIr$z7UF~{P9#^W;I!8PI~>5jrsW4#L456yScI)ynFbh-9sns
z!gkAcd~#@L<fH+{VLRA>g9pBY!4hwhZ%l at hBeBeQG(8 at S4@Xktk@(d3<St)u3 at lA}
zclrENsa!CT_9rsIL?+-5jm6V`UuZO*@<o$g4oIW};kYN7 at bW5_&WF6d$v|Xm(z}~?
z81tMwHYu=-q(;J6awMAYD+K`g01Che^SncWcy?@b+)!Y&OMzn36HSj5D&c%33=2XD
zn*!tVaiHB79!{4hGL;FTKz`gG9ySy>d05zFvtZPs0GG_7z|<JmF<%R$bMgFiu23!{
z(vd`3DG-jQ#0vA30mwH*I0pFJ`(_KX4GaG+3fTAurEbu&4~$*rz`F<hHs-sp3iw_4
zH{ciiJB(BOM-~6=)m$o<2LJJN+#8(o20T;#Nsn)0(t8a28y3I?1Af at y4|(w$fS+?{
z at ZSS|E`6cl<$9fZVI`XM<N7+QNw|PhN==WCP2#x3tyy^P0sruhU>*ei9S<IWfBD2f
z$lF;><jO((C-`9-hz)yu!yfN&G~pYc+T{(7B(njKpA_V)1txvFqlu|_+82yYgkqCW
z0Q_Sd15JX_v2c8H(zlC0=ci#)e)A?dVHuVw`N97QQUD?-3lixNr%|H7wm_iYTz-Oy
z0vw=$VE6D7rh-Gs;yCzEPfsKY<H6VnPuf)4H9W!_?#46<xGBKZuPsE<`9yv?TPWv~
z=}4(sA_`2`%jJ57h|ur$?I<w4TssB@%F8uZ2(Y36$P@|yQOmk4Fi0MRa5vg}_LK3<
zAn>R82*p1i+Qol35h=G*sa(o({y}m62LBfLC#FX5|G4+A|2MF=-Tsh*-y4{in8I6H
z;E%>bk$4DaZbHMZd~FIJd+3}(I5rha`Xg~~dnKByPo at p{haK<_orGU<Jpb^h#`;0d
zA3P6>DP?4T0K#{AQr?#DMtq58#soaZkQ3p=STN!t7~!!!z9De#4Gt%>Akc?z4 at M@S
z08irfV=14w{Y-!-dDXamKW;w|@&SHc61Q)_ABrMW1ojvoRH%kS`2Tnh1=QR33n4oS
zI23>gr8a?S2!!+f`4wtJ(s07kLP7x(Dco8po*Pe<Ca`3I7&kTq1tyR{2r5GXII#l-
z0+GpVA(bydfm|{ZEun?d5m-Pt*a`pT<@z!3zkbeaFaD210rlhp=^l{p#0Ud^gMZ`y
z9YV!p7XA(R1^?>&BgIO|5kFoLKeqFCiysf*xA1QykO(2wJWwML_IiUB_}%#D0*&*B
zmK^mg9flD;zz+qMkA(B}$@+Xu9GVOKf_&SK1OCT>_C6LU_;;PW`y>D<XiOlXhcTS|
z=)}pBQ$u_!06gWL#Pd6DA19BiCmf)BkUA=XdfomwWKrZ#dWXD$(LiJZagxkW#j}%q
zis0W+fE~fVMS;Mva)Ch<NSCGrx>g{tC;+4-9WWt`4`p8tARRDT2%jIzj-`si0w}<~
zLxG_YWx<XVnDS3Rfm|s=MgRpQ9S}JbArK6pz*4oc(u at D)>U6JV+vVb13+-XD00pEt
zXMt!p1PF9p;J1N2m<aAyt$o*9={u|c*N@|)1^?lAB$n=qf5eaN{CmZZgMX6(NFWd!
zHsJU9Ba<dg5a&OR@}C^W`I9y9Bu++zXuz|0Fl5}mFC6opdSMyak1kc&1CIisDcrb&
ze0F$fJX;@hfBlCRS_+Lxg<>Q%rr-~RClEY*B}9uqJeJ7#Ebt?2GC^1Xu<`kT-{aej
zxA&0(q(}#N)sN;O-xRk$wTqvrZXfUq8Wr|t2d;s9O>JEGClI(O(3cB45Bt)AoSa*m
z0^N*&lZOA-jF^a^2S66Q5ELNT0e+!Cah!}83UGCJ6$%V#AlM-akPaj>F`_^!7Z)ug
zfuN);uqd!pE!jD*g at 07g4pvz~0<}tWEkGzz#F&vlJ5WF{|F|p>&p4i+9S8rm^G_-M
zBk^=1Q_QCG{4bHpCAVe1cJk{PHu<kc0omf%75u at N2cd}anE?DElkjXIY;tOp3pC{)
zBl%i5Am9i2*nzWi(=$^%so)<%;i!hO-M)Zda^9U~|F7uzE#$*2z;9qLZXbNIMR?%(
z`ASoPVUJ%lj{w_9dT`FZpHw&PCj at x>Ljrptg{AgGu?hYJc91oQ&ks)$K1e7qK1C^@
z$Orrm$9wVb<ie&R<Y2yUr<Vex1BzY+xuu1MIiFn$@agg at 9v;0!3BtP at o+k3+1OlNz
zeq1R)m{1A`3wkJk^d05mnoMw<lrUE%DNZN_gax(IcBzBH-wFBpJO|`DRlz?v6mwC)
z!Kw)a;8QGvojCsWc!vTu_|vhN^+EEXCi9I%5|K<XSF9Ale>$JC#E+};V-<e{?Lq-D
zgM6M3M*IT)u1xAWe-1<Zcmw13Qj*+g(ie(O0e)Dpa4?juOn{J)aRsCi at GkI!5CeW*
z{q?=Q^A7S^V-vf1bA*9v9z`bLw~+520mD>m#O-G#&&B8C at V$W%U=R3FKEU1=95vvV
zDiCfT<dXv9_BGX|UPMx??@W9V!Gq^FI}Y-7NAq9T)(QbuQM3>F&O<F0*%>i;0VRbA
z&#+RUTOEZ3BTpa-P!}Q`C^duv<0o_G!92(Z{}^1LBE*xtDij#jK;TY?yA&|>KqwH*
z<daetqBL45N>XflerKnQ1ah$ez;8G3Uz+cs0Ql_sYNLg0 at H>z`HVd4?tR2_8 at y?2W
z!#EK?5yTG?E?dl%s?&)~JX1(-7ymZ?B?WfO0lzsR#0V=)i1JB<MyZjK_D*7y;5_IG
zWIy=lS}z_7WvdfFg;FQ-eq{7y&0ei)r(uDn1HU=&E6d1scaiN{$TVt%eNtL~2&E^2
ze=0B(j!&rOk$je7PBuvO669;DYb65e`LjXXK8Y}tp|(S5m)H at CPDYYr2_yC8&C}xi
zEuU`+xef*Rz2F?#kMc2QOCU2S at VF>IMqHbXX~L^4=nDi|8kHx9pTGg4g-mG_{eu?5
zC<+~y0t9!B0?AAqtIbDzp(zanBn1xa?VXxPph1{-v!F0j2mdiw2r&5HMgejD+pUiX
z+YjIw$Mdrz_&0&3i+>bXzFa8P%B5;q@!u8ywpR!0TK at t36PP?43q=EgsApS&6gXMn
zSJ at BFQPjX*!B5T`js^e>o?mlY2mIhcP2`YO({Nn(ud`#n+vpR>c2Ogg_bmz}N5HLm
ze!Mqs+!GL056Cg3JNQTHkP!zW<4}ODQ~ZP%9FHR6w?G__PenIf2#T6Af(nPPf+vz5
zl_3ll_?=&BmvoHVSN(5i0YVM+^N!o^+v$x0a<FT3Kv-bcg}^+rpPDDJKq<hM1Gqr^
zI$#g at B?=e{z+x*Gu%kdY%GeDR48{ex`dtc;5&OfQY%xtBV2mJ at jZZI8^XwY<cSC)r
zeemxN0XF`-6ad4<2EzN;Ps$(K{@*x%!M_1N+hhd)ABu-Fg)Gir at XvT!Aw3nCv?~7=
z{>8Dojg(fw&l%Y6{7q>{Mg$E0Pe$z+ at O$z9{?IsCFpMysN?<tv{KLOl<zs=L4^q#s
zYF~Zw#1sR0h=G&Aa5yoU$ofIGf<KuJ;n+3R<yCR}=>QT=BZ3TR;r5}7j|zaK42+Zo
zV^Tg+X2r4-_<ZV(;_Y3?=b;0BzS6j7x7IvCuK~PG1OflfL&I(&^s*pbqHJqQnpzif
zhRF;CU;$iEItT?uPUb=Yc%Bgo7$YL&Dn6kA_#Zx*LT)G==%c`-$pr`j006Z3La-oX
z#>nzr{2R}ITnaQcTNFaUKTuR;y6|sNz{WpdJ~rC>URBm8{w?qu{nLYg#`SFcQ_gkp
z53q^sQv5en9Si^LBlyEHd?N)?1AaS3h%PeKQBghy{F7eB89lKC$NM5NLV!=fkNz|s
z<_RNXlq2lXTLs4ON$6PdQDVQ2&*yI~<g4Hp at ax!?Q6u<dkdN%ab%W$5ocvoTc0i8i
zVMsca4N=~~;gblXjxfPLK>>DTi3q!W!4a+S at Egf?v!xKoC$fNfEk9<<ehc|7&+kUQ
z{&3C%UShftk($4y=Pl%0bU1bhP$KkFKnKWpXB9%-K;R%>cZMV=aF#fdlOR!mbU?LG
zUNQo?MslR&0#Lv;G$v8Nra(+6;Ge9_Msfs#Leeex**`A+2?~|fnmYubg;c26TMNdI
zhXp-<63e*2pXSXK|Im%hH=N9+dhnl5F@~%D-}rWm0)`0VARqGs{s83;%lS`wg&p7@
z<&R8?#)H1#L at 4S7{EQ+|;sF1!fQL9z at wbyhp@_GOe7o|)Gj_HAHwJz#qPXAPC&e;S
zd(T%wG#;RNsL$ZERrB~Gqn75$hQcuq9-az6;1{>gm{*E%x+%8o`$8j-MVcAxAzcXy
zX{*BN2p)!#yWqEz`t9K7_ww~H&JSvwM8L%YI~>^9?i~~h(SFnOjD47iBSIyFjlQ|V
z0?Q%TfnYcIR|=SnfT+Q6fKb5Bi2EqeR}tchD<lAkQUEQKuZ8Fza3~<yUa1eJz)G!b
zTYG;;@oytjAZml(K-bbgJ*eIx7W5sX4`VJ0=$k_U3;&^5C{rMK(co0#%cru5Og<&}
zH}Dn;7-J_K4`TdGuLvaYPbsXYHNxW?1N<JJ)I8BV#^(pjmR1J}=EGk97zhXaW}wy<
zKXwRkf&bURzvcEdiBRxcvV`%b^k^V7se*sfOIO2?Q{hi$Lb!e4O`Ru_n4+Geq|g!&
z(E+zlMO58>PzF1OV(Cc~wYq&3RE%zSk?)c{1Ho_jF8Id?Qjs_()W{(d3se{NY~8X)
z at P8}{K!igVB#}3~xkCXfBj}@mVS#F)T-g^0PDvDi1tuxx&mqok%>~>=QIiHj0Wg46
z5DEn7bfQq^NoEsnsb5*Ovj7|L4)UEH4FR3?oPnhU(JlotvAEbEY-i)~?bdUo{;h23
za5K!(t%d(WrHKEB0%i!9=DHXq&~!d22=`e=4+EAd8}J7wasK92sDV1d`BM}cX2%x<
zS|a-a7~z|m2G<lKMB|(zc~Yu6qcq#dI9H!>l3mK at SHr)Je4~8$6tZ3LFV#Pzd1Bd7
zq!(XfQd=5AL$v7N)lDToDB$;s;D-W;|6r7U9%*kt at Bn*p`@Y?#flbstqh0xO$OII5
zbBvZY+7Fa&*4B9bosh3T-$ACbfGub5ycg8FzTI~0LWBYMA4~xb)<BRg`}oO}EKIAL
zMTDL}pi#hVd7dx8=zt}J3<Y3;P(UbSilPn$CP!k4utou)fT*Ae93zH8?!mu?fSth)
z3tS;UVCh1s_<sX_-S$#oJMsrS6N_h^caSDe!va2n4+=+;Ve~)k95g?`0*1iAe>@cx
zBL<O at B*JRxl7JtCi}M%p1M98Sz)}7<F$4ZxU{A_=0{#F>gFYWnM{gSk1jE~uk7?lH
z8d=xnS5*F8 at H>JZ9IEFBoOH7Bm5}R5m#M(+Jx`8_d(R5&saOJdMtkXJm<rIM7P8cS
zhImID+>MsN?c<yoyg)l;OTlzO%KN;nR(Pg6zU|2GOLhDBt`F&6?xO$|+DOb#Wtb4t
z3-~_#^H4*;@dAMqg(M@!oX_f^0NA!!0M0oEG1jGkkwZcOuFEzGNIlR9A&UYO_DF|=
zC<ITJ0xKx|y5s71+No_wA$0u+V*vtAHw9ey2gyASKaq_e(+v2*zeRy)d>j75 at er1!
z_LEPW{<nCX0SI!CWJImd2-oIg{_qrOzE|*XoWF&C%lXp?5lsZgJwr%YM2^UQQ`0tp
z8J+Uckt at DMl#f&Mu|oh_NZUStRs466PjEp*IZ#yaM>BM at 51|A^@OyXB0J;C1gk9tm
z&EpS`)4fJ6p!){=(&~xY2mAyDb^GWyhPq5&ftBh~+oylY`8aE5yWl6a=g0O|eiZ*C
z%aQaLfx|(j0+p?iL%X)QeK!l-_#YeytaQM%N${RH8Me-6^{`;*3A>DGQcToHl_oV8
z(5;LP+v%{C3rx at hpyOha3qS#*f=m>E0>Lf?z`tYx#|#0A|LOU*0ly3X89-}0 at NBFf
z?YVejClhLLyh8y2zp+RxWBh+QOb94e3k+n3VnOOxV)bZ(5MZJ}u^GvfLreS0fyk6N
ze}jJ`evI??jZN6%Czc2XBU6)8$Ya$!B7X3<<h&l=2t&YKZ7-3uD}De!FS(l-%|$uE
z%8v{Acqh|D;eZhEn+oI@<l<_AVFXN}F?GsQvmhKN586}NFhzbm|CE22hwAxxHIiWB
z!)}T{l!IUmt$M+zhv@)HC^Bf=J{2U?zDg|TLq+_%alRe-`l@{fNFV6Wfd%<(fq*Cm
zR&m|5dhQ$ugaV0fAaJq67EVe5r!LBS3I!Y%=u{fb2uu`!1%v~j&S9Dbq>2;9x)q^N
z*sl~Ao1hs$%RyZV;34soL;))V;Qv?Z)z!wa at z1OE&BnBh1*-%S3fPFXFsyhM3hadW
zp63Ppj>WT4F`<CLzfeH%A4!C0YR#APLB_Kp{%9(guSfE=NTD97FT}$MUm)W3N5uJy
z_z9BcIO0c~|CE0m at XI)_X>zlak8%Ei5Q8OBVGf3;y7-qcYBepZ{}JWW9q>{}9~b}q
z$Y;<22kYQ49Q7eifKVVzizZ{cfO&UgArjAcRr65iN#&5Q(%}j6!|^Eve=O;ZCI$Sw
z1ZDXC-oRKoAEbM;C(k`Ww{Orcj4*wDRtT`c&y&8;FvC(InwAX<3Qdo8>ENOjsBDo#
z$TphR2C=}x|FJ2c=>Qdegbe|j_axO~dyGJ!r6CSL(82=gnuZ0X3I0l>02By at c`F)#
z5tdFOAhX7-L;wneJPzi;f7PXeXnxyno&7W5zZ(K9cWrR%LUJM(>%)IC7k8WeDu?x1
zG?5jHXCq>na8xJ|3MYbvN{(CrvV;?X`a+_%5MSC?3B{S&;dPw95&z(yWQSna&3w&_
z0BLoY@{gK?*JQp@@b}|*alg{Z(~ocgFu4Hi81&LH at ZXDkb^9a4?k at O^prVxp4 at Q5x
z6gd-xvBo0B-bwNNnGhu%FwgU-eR2C4P$UyuVkvr?N$Sm9E!=(-#~WZGjJkaUe<C+o
zs0Cr!@!h_yf;1xNR`BlvKS090<2M3P3bPT at k`zG>ITTP9aC(IWaWc#yN|d(j at 6rF@
zUu~zNkm#sn5J>|CAQW%tn8kwLK;W5TUV#Y&B*o(r2o(QxS#Z2Ku3^-ypP_sv_em7!
zCIST0ah#+{1iBQE5U|!TLTCW;9WK<?>(dKu42goH7I$s at w!y7&=3Pj;FrSYn2U{$e
zcPyI7IcD&m4aYL!SUMC*1tZBI$XAOb+3^ebW8Q#+|1i#9#lMOlOZmr=A=*1-u!cX6
zdL`{mFd2k~pGjX}oQn$%dz?R~&Nj+HJ5giM;8*t#t#{COM)3E7pI3bWJe7c-=~qmy
zsmz*2O#^i_Pa;hi!|jKa4rVJ2%)YQRzp2~j`zNxT0Rw*1$xx_<Dl>tB$ma{V<-I<X
zU}UqP&-0rIC_l%P#bgdCu#`X`BXrEZ8I`=)v}-B_6srU^j-)<g0)cpb#~l10HxT41
zjA(W#!1?FREeiAv7CT9?sS8O6FvfRqQ-JBiLIKkT at 8rT31tbJaIw1h?AD04E at INp3
zH{drEaPZ$nek_?YmXD_j$F^8=DZ6&KwRT9Xv6#VD4>ng1HtGwh=5n^PnvZ2dP#~HP
zqI at E$0N{_%rEKFr7 at e~HzltBCo8|mb^$LE at CmJIVW=fYed`}?o12I$W-wFRbKRHET
zuF>r_BOGd&9gPCpV6O*{(zVW%0k0eUz>GiSJ;}k*?UeUvvF at zUox)^Qx_U(OGm?d>
z2mF*b<LLlKF3cnsvRxh3qFM_<Qc~d=)}~GRh1x5L6LI_9FJnrt4h7tv-vYlGdnMMG
zt~qNOH4n)M964m>q*&ktr7BwR-e{78=OrBQv*X6UO#xRf&^w at znf5TLnfGC6hPMUJ
z$}fury at 9}r0@^hvNwKhiux?R6NXnlNrht_Q*eVDo5B`M$gT#+Kxhhs&vqFGSK!l1B
zEyi`bocRFQcUB9~0aULaZnu`RY7Y3p|LP%--)t<U#TL^m2kNk(zK~qrU*lnQj(PC`
zLjmyb!|?wG{~nY4TKGr&Fzap7OW}*C2k}MulLCmyG>wa-04n?OS0myp`u#t$2hGDV
z)=Pt=Q7;i(6fk_ at 54mc9%5t#A(+c=aHjU at UhbQu5x!Oc$nH3BK_B5axg)cd;Y94j_
z at w8|j+`f)bp!S3D(O71}>R~etoCf*7C17^Ue6*n2Sodp~Z^A>X=gm3HmOVy1OLnQo
zD1#10P+a9S@}n?qR13u=5JXbUOYc%Zfl3(-Im9K1WyTckefYO2K!9+uz|M%dQdSg*
zLjgbXW;+Y4^Ka+Hfgn|D(=TKiNAY<4iJ<^m$fm%A%z-7FV<ZT9Y=?jeLI8<?VxAPB
z1_h)XWUC;9c}2c%XAaCu7C;CvDqWOME}G0^qGVD9$Kvyw)9ux~!Fg`|NV~O?1Nj2}
zm0W8ji?I*>*YW>qhnj1K0{H(G>_A-&3e at HkOZ%$Txp;LpUYUu7lY;*c^Weq*gMWSk
zNxg{wIN<m316lMSL<peUM7sKo@&W&V-;w>M$ROZ%8`q9wc&6+8kBfhe5%yN!&4L^N
z+igH-W{U9=R}(j$Dvh7K>$hsN5pCC`fP?ebnolI*RSF<@X!{}6wcI`f*8E;G1(L#%
zX1mNyHsJ3^KA+x$eDgIpQebZ|uUk3BMm{?Z?42Fci6QB^XG*rP0N>6}V2c)F<gQSO
z5Ds<>1mpCO?@ARt+wp%~3TQeEkD!3 at R5AwL69{ZM1oDXjgjy|)0(+Cz32T%BI5eVw
zw7V+>rn(d`AwVdASGOpjApi<&L%!=7D+DBR5gYu`xs4J~$Gv0h0C*efpj}MCFV7!o
z<L$wJdo|lOL@;#7v{o{$<xF!qjWrfib!;K2{(pIYRq#I_U)o!#%*HA+(Qv}M4gVs3
z1pl`4XPAbrPEaRBHe`Qz3gr(MD1 at Tz6{zkl;MZCZUQVBv<X3IG1ae-oclZ;t3JRCQ
z_WX)N1Abx+*F^+>dAvRk@)0&6lni}$0)8WY>}_x=xVt<v#lbXi5{WQLa_#O-1W&OZ
z+6nm%_^q#@L1E~mRMCrG;;+Q)FQ)kKY98D3D+K^N6kv-AVjUF*+GMz4(h3ATPZY3{
zg5;n;5S2gxS@?5$O}Dea)<~`>;L<{w=_x<mAkb}Gs!S3HOf2YOflCerT@>g$CKLe%
zHU&J=24+Qpz&I43asmZ<LV)JN!h*q8nr{*Ul2m2#QRGT<3EYBS_3DCcH`)!nL3_?+
z0)C$7ukimE at 4)-u`NjDkXms>o4p>Up7hwT4p9KDYQSm<;UD%u!{Kwq>U&TL_-eJmU
zTpg|y-ku<f@@GpRkS8a0;ZFqry%aFu$5BW%UY&nG1#FymNnt;uN3s<-4FW$eF=L%F
zg$jOZn~c~3e%YFu53SdR1wlG_aQoh%Oj;pFAXTA(liH4Yes*yF_4)A0yMJq7sw*zt
z`2q^{-6!SB0UZ(Og1^V at _jrDBr}nGJEk2!-<_ofD40Gj1B5}r9s4ZA>2$)4=KD%Xo
zfdDrm2cYB)3!u;Ar9iIYw{@4W0D}T3TZK1UJiKx8MuIYlAmnqR0M9!Iunz at j=rxm`
zm`No4Fo*=yGMWM90RB<YRDm!gkfnll0KXwc4g6y$77Q4pVUz;m|JAqS-dA%o>jjlJ
z!U*I1%~mk4W?q#yQCmGE6j(i2$5sy35&w983?kI#<JI}t!k+2!OtjpIOn1Tt|9o at 4
zKjH^b$B&{&G8~T6CoHgM*h|6BRUj5~0`dPuQVah!1qA#Nkv%-mq+kcny0abdJmWq_
zA1e5}@H6THN6L{na5PW8?rAS4z`1 at UhXOo9g)@~4&8(&xiwp^v@;={o;$+ayf>*$v
z)e_j28ew(&UGUpzcYm(P8v}k|Z?!<QO$&tiN)Ei)!SlNx_U(gt{68$vC_otjqurEg
zH3TMJ6***Tm8PwlSRh2$o)K6SFm<HgzjUsT1;>s8)KvKtO+C!kVu2G2tidun5K#7)
z;AN%{45q-uZb<~35a1^S^iV*ufb}L6*va|p^ZA)7_y?AXf1!Y2*c5Y&o?qHubphTD
ze)gr60-9{dHp4!DuF8iuY%HZL!}BjDmk(6YKg;_oi+jt6pXyw6ezQbJ_uP6h6!Vay
z8T?b!Wprbd?SxDf+)Y0Km&ULl2m(n2fRlaFr1tJmzyiN{rqB7iLB7+z)JUDK3ETaO
zA6CszwmW%pq3)$P*;ruYnpiI_^b{}+Jtv6*CJXS_=4s(WW{cbBYv6JLKbUu>YZ>Ib
z+`f%`6*Gc)8}<r*hS>P??vvZV--q_?4>^qlCbnj!6oyn}4kpuw<(!Ac`~k0-UqeP9
zEC8Is0;7of0)cSEXc&5~j2s$bu|ziujzNLU^kjA3ClpY#*7TE8#52l1wm==@bGa5>
z3YaJL7(GBzi7^H>Bm`I#=m`Onifsu2>rJa1x<eFj3PG*qG^HDrK;qI3wsortU!{(!
zAomvWKet($+bpsrOz;xm=U at T<A|~LkFD7)r3+K<67Zh0BI}P~fH%im(a9BEl-S|h>
z4FfG!bE2XG=B4bD3=kItY+>fWbO%<T0LCb=Xnq5J9(ug}&VMJ^ThBY|0vY8auvfD*
zzs%i0^RUby9s3|ZZl+BcRYRSMNn0}1)m%)_lkW=)y7=<ojiw-=%X9$k4$W5s<jY;3
zZv?yoUO&zOKgTHS*}?*8c;2S=x8r=kGv-%#S#V-X(q6N~q6{D!IV6in at FcI&al}}F
zBn37U%~D;X<i*AbTd)LyPIVM5q%G)#<5DA{EU at w4TM^RgP%@aWQvbDj7ki0d-qxjv
z+$=CPqV5-PSbz|Ms#K?y0(=?LMnV9yLMWtAPJsd-|G4<)u(h*i2?6N#wZlzp{cuy9
z`C)PFj&;^@^LwT-5I(z6be=amR?h3By$b&JN~U8{V|lokMEL`L6+cVhf6sJvE>fNe
z&u<jx)(bZN5ptux5DowEdN(B$elN}+3ZO2;qfQ`1NeZOX%*6tsfMXnnEIbb2ZRNuS
z<;bq*cjMpo{5W%_(zllAS+%E4$uOKH$wcsHgRP}F1VQtt+b1`tN+WLHww>JmcH{&8
z?6e=s<ST(xVah`OF%?cf@@@V?DBhpJtU%BQys3f;;7u+73osK1SW;#;?WvSsQYAX{
zWWiNVJ0PSkN+2-a*jm_xCl!HsU??Dg08cK<j_sB*X?lk?A-h0I!zZ8E1^>2K;JT(3
z<{6<I5QdCe^ZLhSVZg~DQVFUhLIE<J;J7b5!8%b)8 at D77Az%mRuVJFIU+^zkz+qB=
zG%yyUjI)xN-&4XIw1Z^FHcn|-X2g%tKZZC*<V~8(six|m#iWFQg#>hHuV&b?Uzv^K
z{1^6=z<;S7Dz$>a82+C{Q_(+&(qXg^R}K6dQ61!*3;s<B#X`Q~zb6owOEZ2lkUK%}
z6F`l7kve%lgoaNd$%0dOb=ogGD+zSIw%f^E16GukWSrtpus#<fE|3&6+6z6Wq--lq
z%g05&g0qW%BlTeoQlGyS*c+1rP8|F;^7$*?U!@mb9ejd+R at TJ>qlIX4FwS2Vl)%;C
z!^sG!s#Ru#Fa_t&GfDyAXXMaGUmy^UI9kY1fH4}lb8HqA>V6UdDLpwt$l0+JktBCg
zCNc=uKp@)@VuY+Oq|ZBBjwB7lA3^~u1b}}M91{XqGe;%Rv9kc!p(?1n*q&L>8zqC7
z!O05+6!06Tw6V=o*|r=C*gFDjJ=knv5TT at Dtln4>{5Mqpi2q0V#|#A`JUQJ7RcE6`
z!9ScGr%#e at 8IK=2??zOx)&bj4WC|4o*ywNuV4 at fu@Ne7UfD;iv(xXdLkX;U)@{PMO
zrkNK9)aUtb9>#Vlz>2#w$XD=#e at gwWr38z9Gn<>~?R+%LO|Y-1qnS;7{xJoQqSS#p
ze+c*;fuz)Mf3Y3+ZP;51YUm^-5pPHzskms<0_3oOW>h-=$%uIdhYVo>Jg_8NVdR4T
z)l6lQ^_)Q|kW>FJ+unp!L8wWwmWDW<zy}LpkSiAS)J1U=<yq;DfR%1 at 7y+31wy0Tg
zbjkudFYpIh?8&Bpx%5gFLp>7$MB0s^AMl^7CMx(}7YQUPs5b-%=6kI;*C>++i~mpC
z$TuF_<?{vbYnH7YX{;WuuN|(hvva79&2AKy_Lmp-mY~DTdQL*XGAS^bZ)N3R)uaIN
z+Ct1wAd3FS|Id>(Y!v3!^NN3pa!d*265#xq+bhx{!$4|SPM0a9fHAI-QeZm~ct)<~
z at x+f=)3rO=>kF_#P}j%mRp!#5XO<32g%iM2iIs^qh5~TGczzM{lIn`4<)VlHQ^8M>
zhdQT#-`&Gz=eZWD4PphZ#>q1T238#+NN8|<rDN^yjQnCPoXAfywThu$mXhdUfsa_=
zk<}!kbgoLrCio{Pu%o14J{oh?kwfz97)G(dFJ(z#L9ZZZHjQc_+nK9;6&5hPk at U@K
zA`&7LYCh(RNv^St0-SSY0VI+gp>0>?N)(X#r`K}+;s*7YU0fGC1dN~`R00K}f`0 at C
z;IG?Ra3AJ-9<J5#|5$59 at Gn|LOau>8COd0c0Ka}pbLCJC*w1d{=l4jAuoz(u<`@k8
zW8i=7aBcMvHBW|*83;>&f4CsvpN~@f!4~!u2 at R!ourfml6#ox%k#MXE$UGOX!B~hN
z%Z{8YQT4KZT927n(51tKh at WHNpAiAPiVA*p{$BqC7t{e5`@G6A2>z8*n43eRowc%r
zUShycNNUW-rrUmMq0mj27@`FlPs^t}$ajNT-Eu$j4I`8zU8X!v<U0<Z9eU^Z0^;*!
zWO<ZGgp=pI(c!@G7A#;{IX4S9&nO~JHQ74)$DCyGGZ+s8Az8+pyIP27pR at vj8CI|<
zU|7HflB5{XvW)^rL1Mv0FKw}8P`Wf(Yy{9h at R2W8YRN)y?oX6`J0bvn^o(+W_~K>(
zA7 at d(!M|aRga8lYdVmM~O9%)=C+7FX!GCKx1^$%+J%D%o|C;C at thKMH_*VyxV_)1i
zjqAp%E4HoeI*hQ*VBS2R>8xei*eb=JbW67 at DVQ?5k(*u5L4 at XVa&d2|z8L2#q5sRB
z at U#*C#bzKBxA4z2SaX>~@PjnG6K={rSB#$b;$I)yEZ|z>+Xesjh=7v_SYu)K^D-77
zs}zd<*K2AIxJZ$|*qY+ at 8KQQ~vJy;YXSjhaqtARL<PhvI%`GyBL+MG at ns6cC5imjl
z19CU=*|$JzJb(A#Ujz97o-d$%bc%eETsa$N-4zBbWd4h=V3f``cPs#(EJkM*)SaR_
z<YocV$R8YMTsu?dt}bXi!tO3rK|L&R2@<f%8FRD{kmjUGDQrq6^)uLw_{aH^BkVgn
z&PS{0>SuvX1c^rm+wz9Jv4Beq<K#&NznK+6p8);}EvF at vQY%pI1j{oaC;-^%8>k>@
z3hJ5-dj-F4$%3K4%E8LqW&!X!fS*~<if!b!8O6{1%!a($S<lSvAui-QYw7k{nrB+8
zsn$vo*f*CGjm0>~NB<cA9})b|gqusr&Pt}(q!D@|5FMj8cq+&wDaKD_c^r(S(p*Z%
zSI7iIu|Y)OOyYzs|8Huc;Gcmo927ppO$tZ(%Z?S(WokSwtJL<0<}ue1*+YvdM$t(U
z-n5 at dxM&_mbv2HVd_e(xJ`n`8cfo8UAE at _%-@?BEzeNN+=D32#ek<p%_(VlMm`~<C
z2p(j=${5;>kS@`b=d_FRsvPp%!-$?|)9OPwpysa-0%Jgt`X}`t>JJ9?b}X3S<cssC
zEnnpjo}70R{L{C*T?-jZx&r}kPFa!+4rcMrd=Txj)!87V6Z~%v0Veu5jKH63P_Q^<
z2_6weL;=OW9AN&+NI25`VUl`Q5-v3SrFLN2P at pm^6gUz5!vdp%IyiIiY%mY(voK<I
zGq-xUI=44JZ){;tZE;VH?ab=*{6=+tvx3d-$*Rq6W at a|hSZ6&29SjT5KTrVuA6?o%
zO*kO=Mf|juQpGw`z-We~ay25i(a8()L99-m;!?_qGUuxIjP<jCR|8RQr!wl8AYa6J
z5BS~s#~}hwa-;};<Muh>l=!%CY)usKQsJ!4h4c<GP|5m31KQ&wpTlgBchT#FhR2J1
zLoUnbYkief;L<XQlCy-zKt_5)vT#bK5T-+kpD$;?=x182l?6hCxYR%8Rc3CIx_Wo#
zY93Hc&o)@qi4{0lq%}Dg02Vn^k%WSS2?Rm`WdTCSrG<cH9|ce*bgeLOL(!N>sze|t
zu;V~|rycyczQlX-x$5vuI56U0C6nUcqh+okkKlhaU-zLp<~Q?%00j2Z-clF;gFL?z
z1r|<OEH8Fu#F+!;93WrZQ=eIxo?ovnY}Q*##rATkK9{S{i`C|`yfm{~o?ELl7V>lJ
z73k1f%C{Etot5JJMtOd-JhulHB-?95fjAVHS<8?GG?$17iP~JO(oV2!R5a}g#zvW=
zR9}#lkm({|c_>!M!PBav;7awG6$tEDAU9GWM<BBc4>6re8*jL>=IYzS#CF-=fxYaQ
zehI+Oz$ltW3K}sVu$L0INqh19+&GLn4}zb=R69u{)|f2vEF#A-TibMfzJqOpe+T>y
z9h}r- at J^r4H^`S3ID1%u9ahKUhjVg3K0iN|mkH7M5GL2N)&$Qmu!}--vjDi#;Q$3R
z8~`eP6{O*r(fq_jdO5UfLLfK3YYKWz4MPo(j~pVgg;0_ at 85T(1WK)2*;&=);_zgy*
z#6KHjx&$mh5wRl`C+C8i>|3=ETZ|-YARXj+^HvrM+~P+HSrT6`O1nttT+KVPnk59F
zf)@4^miCnxZxRX|6a2i2QqmC6UM at Bl@*uo2ldjHY*s0HD0eN$=00lZQVxu;{USm7E
zR+(KZS7*|dPO3VaF1M5HH|Ddo*>rO;2OS#onVHq%>{<y55K1Wi%&g|yOSwuXQEJ4B
zb$X%4aYxL;t}V))eHc+<EC~uQWW!~3Ok#lv2YU9*S+W(8>LPIkCN5~{z{0=OX9nsY
z+&(W6G-*qw;v}$lfuDV}5Q+#1O@&k5MAwm4oI9{LuvBdC2y7e4J09RLMR)AuyA)$3
zXVXNa;4jr#Jwtpxrvfnp&WWMfBIPn>)_YkyJs2IQJX at c`%L{<Dy}``_kgPp#uz;Yz
zG5k6X;H;wdl?CX3887xTA|Q#C8FJc{E=_QUHNpWO?WO>4sPCW@;0>Vw=1>3z5e0PO
z9<e~PYy_LazRL&?Gl&Tj#^WhF*f&m|@>G`^HnVuf94z1`ih&ubDE{zhXE`%xLcrqQ
zVs$PI{+IWcj*EXifDnM;)#ui$xc8Zra&w_joyow3>2|W;T8ZgaqGYVGkb at eXl@g4o
z&1EW`WU&z~HDl#=qO($HFXd~qspdkqwU~nx`D!SU^F%Y;Bx0Oqcy3q0G;oIFnIwxN
z;+o3O at zO;pjg%%92p1d**r&op0Vgjw9{xeTdPOb=9-g=?`0s+BJWjyRI_lg$M$!lA
zDeb*qq~gEN=l8+*S9rJ``O*&29Ze1=Y2A^VddNtwSx}l8?o2eGXi4bA0+G?iT%tak
zth8e!{_4Pw!2+{vBkwP3L;zsHuvC&|i7EsS2&WMR;GyK90D*w>hGWO!=c>d+ZoTQs
z2n+?31^S7qg)9mf43lIL2-G<FCKgC8a17I->h1yNeeA0*)KKRSRB#2<wG{vPns;_B
zJKYXcW<!Gic@|rU))%8ELV?!aS at 5rro^Evk5B?kTKsQGSASm##+(}{6ZJ~f+LA=xy
zD>h at rMyxuMf&$1P!U6kmp->MO8xfFSpUWf*-fTG#%c6f|HPq_7clB_twHli4aCanr
z2tP-bM4O^z-R!VE4hvlPx9Vng2ypv<<MvO+t)XYYIX<cjeqBeG*d6e&R08K5w~tJs
zScL2DdgBxE`HvU;gOHETXFx#*l&RimHH;9CA7BNQY?0e0hNLSg&0MWrWKZ?kM70w)
z$Y=dnmJN|YBJBZg7Jy6*1Z)-X8Vd*nx#^(HjyEjeFgy=}pIA_82FVD3F8IeF0)NXh
z)md&bG6}qS2RkY5rUPcWgoyTT6fn>QuAF at F|IG71zA*-E;a_CT<1q!l3;zQCA<9kU
zlDXPcq2VJ0lxKp~xlnCB4EP&MvDQlbxD;sZ75|SR_{IOPmS<PX?4$XCeZT)V5dn3C
zUg|8D+Hx4YBO=5F at PheBz8=ok!ntY)1NoV0f4bzu5_u1|Y$LLBdy$ocndO7&${cH<
z4C}9e0_?D^2qi}bq%b8ymj&j$*{+~BBkm0Wefak<kivwNFl*-qEahXw4>>Pcz~&PZ
z6ii?TOktY5h?e2*npclo#-9ig4EWvr0{L_SfqY<(&qwE*u_|jpT|y**lJpi81Q8Os
zsd6(?1Np5eu*ak^%oyMl at S99l>grY%#fT!48uzduZq<n7N#o2po{=p4JUC}dI?S6p
z6krFkEF1_Uhu9H0Wa>iQbU;7Op at 7SE<F^q%q+KF`jt6_PT9x<PxBRU>DX!9h-y1^z
zu<8q0uy<}fJHMH$&W9RHk;YQAy%uY)#^?8?j!S`>)PjTpigr|exr2$f?=|zhC5jRX
zdytRjVZSnyYA)shJh=e)XYpQcYLl%5GG%|E7ABPw{O6>+++6X`ZboM}V>o~CAB at op
z1d)fRH*y=J#zGtlutUtn9rXkPyE<f8;G%#T7qC-cQv%W~fU(-~leN5$Uqbn4wrdhz
zNq$#O4f9#llX3f!mf8xZANE3u--Hc9KC)1epUTTnAd at Q*JotPZLNLs98 at U}GBA<se
z%hhHQtUIdSo-LtDk?-JN<%hC>eJZ*=EHHD0+$`XSQzIoQz^emkwwy7p5!Zs-%QB3`
z$)WK~SSFb at Z4V=}Ye|ZzID82NuF@!P>qG&*fP5310!Fu3(tQB_O)|S3?cHZAVQhh)
zP$l^H4^g8oHm9hi1Y)DyBB9vyl{<mjLg?UmxkKmY4_{a~^VyBsT<UnaaD%%BboS2)
z1zgC-|KsF=G+8iP)IP4BoEMx+=G#Fj2?eIxaist(Fd;yex&r^xt(eIL;^03$?F0X$
zz%oo<oH+HO)W)g#`l1g%19=JMfyfAe$LF^e6U~JLu*dj0Y}-qT9Vj5V0Djvt4FR^7
zlWQTDLnjo-+M!^cN-`9nUV&1ja>Bi1ynY!$vu+&F3w|qm{eOmhbUy3<DDv~=FtA4_
zqYap}C2>%0lgeC6FCw2iC{<c<IxaBahl$idvDj|k*-`Mjw at L&eU>^&3xSa(;0mA}Z
zItNhs;Q~cjpgt%IRmq>2zw&q`5Kus-cSr+)5{G?r+Fj+!ehTypo-V at sDBu9z>}YN%
zTT2_$)F<M{9~lAvq?1%sh at 0tY&veIMUkn{OFMH&|{Ao`wHs;es7G9gn96JOwHd>;B
zmO7QC4rn)OKLyTrHVqK6CG)M$5+;y906to5qJp46*Z*fL{>-$GXOcxvvLJ!=MQ at sa
z*2`xQKh!rU<HKKy4COY#LPp^!KeDBu!Q3ms|8kN*Kz1Ohu_+J%65Fx#gaGmXb_&1_
zNr6rx2JL{Kz6Fra4qPA?<4p#nx`qNLj(jr at SLS4?4UQ3x&*#le9*x at 3>F_w-Op%#2
zqK)}Jq;hzBqz=euSry8XWV;M?0ej=~1^i}71WWBWuxE!!Rj430^4<H&0*dpD;yFZc
z&K0;77z_Bt|EsXUvBLu1gzLo>VUYnULI&Ofa{U^l2FM{En!l2*Qb3mMFl~799eP4Q
zFaG;5?|Rq;ys3(qMJ)vLlJFYYZ!%x-KTHdskTgv%BI|67r>Cbn8<8Uy=6?G%O~4Q8
z06#h$SFDSrn61?XVMsyOocMq6&qMGpHY*-}2jeAL8k8Ez@(dJkqCgA^;N;6~asi=0
zsTD;6L5fV-$CpW!JjC~MJ6xy*p7F|QWF+`U at sboY=oFeoiU{~I`jFXze}0`l!xjOc
zxqudh>=WDT|LsJ8pdi(rL{PyG^2P1T(gd=m7Tq$M>W*+LEhBrnnBUpqJ2-dkFs6JQ
z at LN*KM!x=Jw$#C>>QHzG`S6;hp{eSaS at x_8wu>uU#-B6<{IsxQeNx8(zYI*XNQluV
z);Uq_v2Cj?;CRWA?bKj93#bM-6cBksL-N#aE*7(xnX%4NB!o*a&-)Mv*wMIPGsvO<
z$H+(MchE%Gly2POXRz~kJAB96`?b_F#IPM8k)G8Mm48tV)UseGf(;5pGvkC*rs0>{
zkxD1dZB+pw2&4!J{?Q~Z3dq7iYP3u%{@eRzW)IGRe?k6S8nx3{%u&@B<+G5*8ph1N
z_<TczWMu|R7#75*+fYD4fZ{)259Mn?zD8>?o2~e`4-_lr73%>?7Mo|rXb}Mhl!Gdr
zNQ;(<xrjm?@GI=ufdcv at QGk8i!T<`mBoHoL%q+7h!&^r4o3UN5w5%|hB_?a9n^c!8
zYc#)u|3M1hfw$S|c2G#f at 7kc$z;XLpJ2kh7MCb668M6cV6Q&`Vp98NMz#_M0ia|W(
z<8F^2f4Ug~(gyQj6@>Tue0~B>m}49(x44T~*WbGRzk6R<z}B4_sIURd-B at 6L9r)K$
z53vB at 3ig(dL^%fJ^XX=!Kz6i7Wc|4v1&&LBe*E_%pGu&Zx_ulz86u-IP at qkx{d at uz
zAe(9S14w)~C_uZ>bR&w)$V_{gu*prMNJ6VK=m&5Zh6^Zj2lmbm{=d1W4frv3R0Y-M
z8M at 8Xv4vhUPuAwswK*(R#b%S3P+%rr?pPEkwIao4xX=g{>cM<1kgo?@i<wM$Dm^{P
zWvaGgoJmRz#4P4L)n=opoyJ0xezRiB%a$f#C;<Kq1(L_3fE at x15u{qq!l4HIRC|o(
z*BMOQM`;{)r{Eu~Ra_M40^XiGVB~?Y#xfiK{cqKad^&}|yv&P~&P+i*1QefdkdM at n
zl|oHn2Uox)V~(Lh8q6~Q?bLQ03Md^o2Kcc>8dcg+YN3s}cn|)S3)`ZA!v!S*rG6(C
zh$lCBld=HJTY<ptf8cqX?cBc5?0QOBK+hFipfsd^=rD*^<rx!Y92KP1dkq1{0>9{d
z1A80%k`S3{5BOIKw3cX1lt6&;mrTmsVhjpY+wo+<g9<`&OgE#HU-19101-lQ9%YVm
zc974G&YE%KA3CTCYAoXanc>@S=6PB9u)dJSYV#HgDzlV;EDB7wqe=l-0QmDYnCPdl
zJlzV_X5v(>nH&LI`R3`87yPr30<#XOLozRk<?B1ENd-S!=pc*`Q3Urz7fBSb69Ir^
zF1i^PlfDRPq9din^E=>|$y{a{uU?U^+jpT|F?@W?JK$%>@{qmG-$|lPkDN|U0r|<i
z*NuE)w<4cu>G*%n1Jl9m!j1qN*gNJRpXXKTC_#u3oJr1SV?It|NDs*X{5uh02O=m7
z`bG_Uz$|%zJ?v$=fWS6#Xz>ttu95*VrW9d1MNt)z!-4 at 6u#2BP_;-7L*4Fkj!%GB@
zngjk))2H}n+gV8=37~+<q&RilUugn^2&v+v!9U|o{#+$s>M&7i^0TWY#$h4C+`$E<
zfPh~n4)^$fnj%;@9SSs;a;;@!vK&^P6|vfCtNGdWqFE*mYCr^G0V^NY=8~*=Sed00
z8x~LzRSJZP4dz at 2@- at D^52?fTs&t|ZwP>_rwK00^ar^C+ID=5Nxgc9802jne2yiH%
zXMhMO6(M_c*tzI%fe{vTJ{hhBez{X#0R4jtVjPo;C9Ycv*FB)MVDHBEard`_zt`>K
z^BrSMQ++<dp5 at RL`3z&RFX=7F&yA_bXO^qLUZjQKUy%>qcnIcsRUJM|G0104Jrn|S
z at W;8!7;o$NcITW7*cn6wWdY}hcW}Z%PikOTAg9jm0^&a7)Ft>nEZ2tq0sqXffCx5s
zy5nx{M1X3llLB-pph>Qs>h^%2Y&U2IxkAHW9>Y~qebp_%Ao+y?Ispe2WR{f{{AbJF
zLY)e{`2U%e0^$cvPOTEH!WPV1&fg{eNrAO at T3%gkL4nODR`xupy6?&LgHLH5I;YLP
zu?o*0dP?iad7b at Fu5X+^z5lGb&WINl%**13uz+O`WzC<qbpF%-Pv<kkbIpY$IbF3A
zqqc@@Bi2(9!hJFKkd7d>mNjKSmY?acfL|(wAT13oCa4r?Iml^{0Q|Dh2SZw_`B}=$
zESb)N5?oW`k@|IuI`FQZIWFei2lSCh-M%gLtvQM2){qwR<^HE$(p$4kDC at -y;qy!N
zuuP~FuP$r9Sg>~?-{iJ}e0BRcd{QS)V6BrNYM`2^5%Hdk3+Ky`gXbl?_;)3q11PYw
zG=d0xC at 6KYz$J<t7Rb*RPhwP%3=m_0pM|o`TG`S>XVesbE7n7S?IFOyzb$yAykqJ-
zDtk25#qF0`J`7+`_EcjZAPN5S6n{XzShhk@$eXMB!9N)&L_nEy`xTN?QdIVl>z4Dk
z at Gs)ujsKYgk_cmm&u#BNyKdQ8^@Ha$51rfE_vGr{GqDP`=Sk%~Pb|ZQjnhl(rxn*v
zFP?V6%;9sJhn`YDa$alW^y1>dB-3-|_Qe+VN5Mb-zdn}`|1bCtvtn4a!yI`p<xrY}
z7!iXA$_1f-vOrXyR)h=%Oqo<GqTpXjD0B$Ksh at LeT^;0-yJLfVX5k at zdcg0-@UOh@
z27j;HSLB0jdR-jk$5O2PFSi4x**h2;1NI<U9ex+{>hlfwO$ZRFW5Yhm at f3o{>1cVy
z;qzmeH-W>aDFWp4q!z~vdb_i$EIK$6Xs4ZR5kbR&H8aa-c$7RmHD^+CWK;08DZr4K
z!M|p~L;)xO{v}}9RVLk$?;}la5&{M|f8P+z{M%&@BfM05DD`(ezX3lp%fQKW$BWNL
zOQ8J8O#nagfOd!+dZXqqnhcaY6dmpce{(TQ>Z%kl#h-rs69O>s|D<Ow9zMT$<bu|b
z^IPnkanan9p1E-7+{P&vbPhbFw*M at mgAn1+IgPz%mN(8Q?K`sq?7=@ftEXi5ompNw
zlv+DAyLceJ at 5};eJAsKU_?O9X5VI92HG-{GKZC-x1z&Z+CqytTkXYbE0fT>7z$y(U
z at sSls%(&R at Kx7<TF<r|6KOul5SMCuUl7SmZc+D)ZU(waOY0 at WqTy9_04k&daKb#n+
zdx63Z6C79w8nvV8Ex at L>(+_ at Gp+%wqubS;J2bW3Q+Hq*b at 5S4TrDf^4+;k+F^Lqjm
zGp#N`{D6hGZFpAT?HC9gUTphAh`_uUp at WTNqC*c0OpeUmEBNNh0tyZw9}37Hj>{Zv
zWs`0#3YZX}6fmWJyUt@|zvKBC5OKh7IvgbVWll}0?PcN~;Kyy&7yXSTKbf!N|0O-&
z1K=5Q@)zm>8~jL-Xnj6~ILG-{=TIpuSDQxg;P%z|Lj;Arv*mdxu=n)EJ*O>Tdrw=~
zcgEs5zq|JImn}W(6{}Bu$--IBSvquX9XjkktFrIO<-KQ4?|IU+5aIN~`f2&KQ*%&Y
z&y$MFM^YQ7XID?99W;sfX at dWvd|@bnB?=RyzzYW=htJDzJ}HJl0e%`Ra44W!h`Nx1
zAN`~FhXP3>Dx|S9MpvhV02ZxM$t_n(I+=e%_%}h{${k$DXH*OD6VAv!sJ=2Yh3~fS
zDRCyM$n3TpHBYAKPH<axRWcNC`jO8#s#WCFO8&4o{Pbw1<YjsbFfi3oCdvil86U{!
z{h9Y6<v}kq*(LW!{&7nAy$(>po3t+ULE3@(v3L6Z%4AR5SwIQ^?4?X(j2)$bY{z$z
z5l~`f=$SD`et7qr*aHCr at Nd`oP0nk9U)uvv{(v7n%mOt9{C`V4|K79W`_4|V1xt#5
zCM;BDLJRxD3kOI)1H~p&&RKq$76rk-D4$uTq9h>#tDVad(5!s5cd+wU7F3rz*x|De
z9WwTeKRCR8cz*rJ{KhGBo2Sm5|ALK+{%G;(f3)<pmo6SWw|3wu)qQ6v3yK?0EUcfN
zUq3Ckc3Nib)HL8f?ZP_vXMQwWLKP_hw8ct<r+Sd+aOj-Uo+rl-otNQuq6`o~fszIS
zO9f4qS|~cy9c!mcK at 1qM#rd1I838{&AI(EA0ouc)ZvuYDEdQ@`c)X<80sJ5z3QOoW
zcZ9?tcUA at Y^ss?^!U1Xr-C~e03vg{mz83ja>hM;;o+5U>!rkGAc at rEy;5V~`CQ>=>
z1}f{To2r)udu~j?r|?&_QfODR0io@&&9uZW_7vF12EY5&ULw##XgPCR6e-|^1x6G>
z0SyHFURLbqU?@N=fR*a`H3m5)P<x!$_Wxbk?*c#VJ<$=$;~2<C|F at RG^AwA#0DiKb
zi(WR3+E at JJ{41UC8PCoxAC7IFk!QWBQY$pwW(Imxh%g)H7A;h7 at cfi+SnYPtlknSB
zt^7M~zi+3y(plVCIdbl)r`UGnoKw!c=*i1_H&zaGHjd1m_uTboynOMZKb*ht#k1$V
zuygR7%Ko#b_ddCV=ihu{e)EaBjVEUJoSC`kr86KuU-bzKrYAH6kg99&f&~nwA2>VD
z?L?V0ZBanA5I?r#*D5IaJ|O`7;}{_b8W<mo+K&K!vuZT6>22`$&xLe|(6 at 7Zbu<wC
zLnl!-<gFM=mO+Qm(A;_&wZj)+As0H*i?tALT+`d_us6?$$Y%#pQLM`?AQL$zhmO(Y
z$@D8pma{=t+=Amg!+3!Mdum^_NpQSiUSKaKsfXRtDIgR<VzWS+g`~FAH8;plaNquO
zCU&`50JhyMP%dZ);3dj&(*G>QH)h$()L_T(|AK!z=SB8N+Kc9qg%L#ai|04sk7q>r
zU?%hRO6F_hpRq7RKBAi9r;JVPrAgbfc}D6<&&e+xq7=!(P3aj{b!HOQGX2b~Ovn;d
zEZ39SJOiOp*?(5;;5qfZr_C`0z`_xI$md~wqfy^%LV>Lv{+)Kg>Ft%WA;Qdy-?IL^
z*KR)bC9~(hsB``cJLkNh`IP6^&wpY2tmjtGeqQCA7gRt#MXK5iWTcIjULaX>15*m{
zD^^cQ967Ia<Y_7N1A*Z5i>8?=fYKuoZY)Nr{}dZOdIQka?UiUUE31(U_+<i%tk_^y
z5RxHa%lY at t1?z)-- at _eQ;DF!JJaTIonNx$ff@>h3wyRj$!>1FB=;EWngNR_Ty-nm#
zT2X*kF+`C}X0OS5CequSkvk}vX`$R2STvptlQGLLFiJ;sIPRs$pPdeXc4;H8g%$by
zt#(<co3*BTRU?i!)^R9a1-D%auz!Nc?>o%A326>*<t753BCuCcWYPgXk%?eBznEJC
z=uS8Jm9md`ejE9N!5>a=TV$#H)aIxndfCCN;4P^Dv(75 at bM7Gsgup+D0{_*SC at b|n
z`%h}iM-od1>CXwX{J2?%IbNSnvKl$dK2ymD{HI>n*>?uQet!M%EFd2Me#QTW6ie5i
zGQR@@tfvhN+8akYfBL at DUV8cF)BbSwf)}^Xe^L8_7q!p%z52PoU;CZcwi*Wiv_N#$
z1F%&>0P7~%6re%E{E+eW)01aBD}$~>1vQra)P-1Ymh`{W^wTU9h>egJ)R#mRFl$dr
zJ#sfL0Y5n)*HrLtDiSh{(dhp^s1JNN82<u(Ggx4QUpj@%+Ch8 at S`JFq=Avf(F6Q|A
z5ONA^JG}+}T?&8)Q_>fakJO1}kUBCsowhe_nGKh5`1~kfuR4eOE~&hS5saXL^ISQI
zpGW6tp@}b}$k+ZQD(9d}a6Z0^l86w&tZ=THgpbyjelsk96lV3FJ{Is1_Q{v4AfIUX
z!ay_Q at 21mF=IxrL|18-<fFq_;-_~-s<a%|PB+eGhv&Cc;rot4KE_xA%3~aFoQo1DK
zK_#@}e|{fRPU7|1IQU;ZCAoY!$<$y%0QX^8Jy1vdFkFS^-+TJ(S<hbCbK2bIDRUb~
z7M3;_PCx&Q0r<!HTh`n>cVXk4<4^!5w3bUN2U;(=?8wXCvHvA++xWdVF1_H=h3CIv
z{&|<ozUZ>0_Hu?>Cr>v+ at RU?VC;<Ll6i_a(MJDZga_-<$3j3d2AOrw-fmy*Lelj&$
zU-D;)auYi6Z@@3>NHBMg=|ztC(W at Z%cg&Rw45om))Wg0F{w~Jk=JIk`!6!r2h!cVi
z;|{Im7(U-Dz#>H$)i!SAn at YaC1UpJ~$!)oO+%*Po5A0F+ARq0-+cKfs(K);`n!i|!
z@~go-+dkOy#jMUfLsIHpEN_e7ki1w%J;cmZVwv+O`KenJ{YGMe6B^9BZ3_qT1^Cr`
z877pWf4D$FGZ750Wz>%3acCaEfHpwl0)A8HWIopv51WfIo+0l8`O at L0mcez5G3HA<
zJ-U%_0AS3p at 8tZxFvCd{*ja4n;8RK~M`+Y!1s;~-6z9Ksu)cXpXKr(P^VC^`{JGVG
zvu8d1>~o)U{?&i=dC=QOfx7Ykt-Wm)&Lu!>p0jZ55a7JJxVJgGUVi1f4!-cRWhn5f
zcO88G>*t<($;@+JwL~KvacbdUc<q#o$pZQ*0G$y+8VFX7#Ao*er8GJlV>p|L5BQ-2
zXAi*0Ef?|pa;J4OVM-PpHoZWW{?RBP`us!!LBIc3 at Y@a+7fSjJYXE1qHi5GO`KGNx
zifoE}4ltPS@%eUo%P^KS at aLEfQDmn15EFZChc7DtNEuUlIk<z&2$PZdMVX?X<%Z~;
z5X>iO6qMygrGwi3N+uHZ3}n*`hN!0fiSk!8IfYZ at A+m%o4+uGR$^sJ(?9{-`0td{G
ze at 7Q15<#_%2z<0sfL94mY at q-xxQKsd?vu$%kuy9 at W=H8BSFZzGNJ=PR at IQsa=N^Iz
z{&;qRhoT$lsLxNvvnrmY`9W~C-{5~X*<Q*lvP%DIZskA~&%bu4v9iBT=DT^y47V#H
zY27$Hw|QjoiBCQAwDX_n;MPq61wVNK;GaD>KSOKiYJ(`?KKK~>oz=?X-ulwM+6ymR
z`GdEv|Nfhnp7;8>Ke%k8K9_{5c=ee*LHd`B3NjS1RggwBr2vY^ET$Jo=4tJiB;!Le
z;qzJjK)Z!e3yG{>)PiXQ8iapK3t3TM=Mc~{I$(p}@vb1BH)paKP6>R1d<v~-T1CFg
z;dj*zT)^8Sb+}mcVsX8Q>F9Z+8igJBi{R&*<NX|+LpaDyGg2VE6ST|$c;oZs-eC^%
zov+l_#lb`Hz*Gx9NQDrICsK`?39izF11Zjc6IejS(y+j;mjYU+So-+EFR(YpCp!B*
zL@=2GFM)r!iTeWo#B0_-=J!&`WO$2I7Yg85fIaE0W0XD|=g%x!d>}|5sPUsP(2~f5
zADLGr_&*RPjxbBEwUB19{iS{7=3=_doq1Pss|OnE+`#crd-WjJncr-lap9BxWozq)
z+dwQWK)q&IFvFnm-t(8X9e%7Q<~FJ`YtxH+s;_>}p%=Vi;rXvyD>kJo19?NL3k3)P
z+f|TIz$C at _s-HkG-3(J*XFWZh{Jl5K7OT;eSv!J)XKj%%DoNr1{P#owSYQjG9VpPn
zzZ?AaeK7?26gJHrn&`4%fntMv?bT6-??%3iVQ~QM3S?)}+r}JTZWfHrp~*RIeP{92
zfl+=1J|CR}?31}ELB45|#_fx%KQZJ>FUJTg`RILPgY*M{6J&t-2wD7@{wp+wgae(f
z;uP)eL{+ at Bt>*>0Hl*D<(!kkcvaq4s+z0EvOupu=oG8OYU<QA=Pl3$(nFz-`;TSj8
z at l(pvYz3DH{s{_ at 0%NF)ea1m>{-|HFKYp5mAJ3mEPSHP*$c at ufz%rHmK*9gKtcKB~
z!oSY4RHfy8Rc=eljd~aN*47VqRu4ddnaxv{&U(f<5B+fK$Aj=MwV+=7yB|JY3N#ms
z^PAPi0xPtz7Epn~2>LPbLgzfcEY+$i4I9$7)RPF<6(PV6=7|^JpM(*nFcYv)jiw7B
zLcqd4ZYoI*)y2QHSfVo>_=G9Y4}K%3d6K9B@;9EyO#yTgrI%qHE#?pO`A&LE&7Wm3
z5j;dFbEjaLz^;icaUY#SG$9S7lYuE<^hGlRH#Z$JHGC;%o*?Y;`Q2|m@&s<q!mTsS
zBFtSPP$wZA07Cj1SpSpW08Tz=H$4n=ILqjj#saHMWY#txNC9bG7-&va(|#45uSfPV
zLY_3u57Ou08>0P{ge4dmZ!Sj|{bxN2X^AgQfceU-kNYT9=6vkrME{H<dmQlN`6>S3
z`Eiw?onHim81M!EjrnAKCfQ!ha=$I`#>#99o0a8#^|gZ_zq58|cF!rx=l%AD_x{UI
z9{i7A{PWh<x3{*wx3%@tt*!rYIdV7P`}V7=jlJhDx{f{mZfkkEzMxZSGPH))=ThYF
zq$i69!%iY>C?JDkVBT%~G#)|$ln-Oa;2)gO^wL?ET!8G!!vB=IEPF11n*vrXNQBTp
z71UM!;`znEg9 at INQzNoKE)As-R?3|K`P!V*r}F`!A|JO;I!4$k)G1GyTVrQ~Oy*@>
z3;K3&zmzdqZy5=f$Z}6)S*2ECkK3oRVZq)O`Nxnt>hRs*XCMFHy-Sz18o6~Rarnr@
zYO0YqWI%{iz*_=El4AYIP7edAdQU9q2?V|PcVPcGcQ_A(0InTtp!q_~cNYCmY3tOd
zrvWyuo+}Rc_nwtFa$$<|3HVb5kGOp!d+3=bA~?#Q5~$$6B)@3!U__=u%%)g!ZEmf!
zxTmtT7ysW_J<wV^DB#~Xym<caJoU!AANuM~w(kATk01Hb)+3K?ecyopKYD at O2Yd2g
z$4)#8aKEKlTxDA4i<zlm{<EJ~oZlZ>Ih^2|!+N2B69}{}RG_Xa1tP#-n~7CBi7GSh
z8?m(`dDd#<q|r#JPL&}cbv0HBKqBl=z=eN{0=*K*LXqk1QCu;6uyP7_1d!fo8d|t<
z05 at Ojb@-OrG02y~4h4VO`H&fiF~YiL<#fJ*eB*wFm>{3Dh528x^aRMq*U7w?1Q2{Y
zI>$(zKIH2|ZTZ9hTP)x%MaDED5E at tkrnQ*lM8N_A87G{SlP!D~77S7Hl70rxk`oJ9
z1;y>dyZ-;gFpso at WopjiC*YqT$Z27a3!Kvv$fabEi%#a>eoY;h4hx{b{QmGWUsV>}
zo25x0!jt0mD?vp*lf3Z%lt2MLjxksDvS7vf=_ytNYqAL8N?~@bi15bquk3FE{?!AW
zmHo44KjYl%KY#zVfBofK?tk<vkNx7F?>zRk|JpkGgI_%Q*w%Npw*GZXxZwO#z&AFV
z+ilNzCz=R5?*_kGOC{D?)MXNxnDD|k&MzH~5CXUgc%&``3=2TMm}%-pBcbu=@hdlD
zI8SaiO|8Qe4P?~_Ndc^`0HmfJ0t^LYAPjR+pf3dU0f|>-?aJ_^&Y<B|%i{B;InxpO
zHu6XD`SKEzKFHINNr-tf_{&`J$upi&;#-lGP{Y&_il|^-R*+WABk#MgHxA$O_A<WE
zZznV{XZQ(H6-<c3mqfsr5W!}FeWMo2Rx&M`T-CH~uynb%+>u%YXQ>+tdRgF>LywmN
z4*qQxNb{#P^6MY+her at O6l@b&F99)Gm?||xDs0#?&V?~74)TFLvO&R5KNYW<B8dP)
zi=T}A&aGwZv#HiXc9umrR|Ws9YK!Jy+25wx^OR?ufB7{x-ubl$um1GCANlP4w?F)i
z&;H%_?)lDte(fh)_y7CP{%LFLF=Id2+QRhTcI4|bt$i)~kmLXV=UZF<ZpiiUkG2{t
zt~i^40!$f(xey%9HY>x{rg_^$0X&iz`_j=$cU**)IWR^RKr`gw3zI0HOo>Zotrx){
zl$8RT5 at I(5Xctf~{`*3JgMSq~rm({ri7bbH9ONT-=<?-Gsf@`|3)NyKwd=-W1gS$w
zN52N`d6Lq~P42|iV~CtC@=Y;wC!J$pFJsLE)sFSe&8v!ADyvc(Y(~xf%N!z at aNuSE
z`*Nd}Ad`bw2a=gVX6ROWb+{H}!9;=G<OOzDr^un+^&Bh;*p9sq;oBcd&g)v<!QkJF
z{F+&f6o1My-kJ4ys^F#0DXWFl0-}4ZDP0ptAc8`6+9!n(3O+gD;Yk-gP=ML)fZvE8
znHStyPG<^{&Jyc0vy3zMUaT=1wY-mE*~JTf_o6 at h$j9Ds!_8OTa>q4)b at z>T9sS5(
z-+%if-~8m!e|-3dKYQ@|KmVJbZXNyMF9GU*8?3U!Khql28pwhJPhByG9A|^u|E|fh
z|6yzE{_p+tt3TdqF3N(6ER)E5<QHGI$WSlCcJ!>`f)GLgo at G}B`K1XSw$}nQHPvS0
zke!S&Q<nJ-polR(a%a{H!k8N0_5V_B7!(3rECA|m!?zP7#O;SXs2!@Brh8$V&o_6F
z#OGto_1HKqOW{H!H}%YnZ+?Rb&T_v1U{7xVQio(#0WU*Wrlfg-u$QdXGK2g<f at gb-
z;2E>VnoJ&~;>!3MLK=iiMr=id-dNz4MlwrImf0tk!RwV%VmN#&LAJ7EGhU!&94jL*
zxxmg8*p7KO1#tL$Pf`FbG5DuBoH{L~OC8~5tS4LMu1r$Z6e39V+n90tXdWK&JjR+o
z;`~MYdvaAzb0O83&2*MYdr|)Nm3>V-|LTF63x4NmuXxj&-gfo%@3`S6DDc5MzwqI|
zyzA;u-}lkG9=Y?;zrFvvKSTxH`<=(oKVSN{pML#+w!ZR{t^eBE0=lHeo&7Y3cA9%!
zEZEa*?2#MI9DLg9G0^`@lUDOS<QfnCXp4`KK=ZwyeBmFzef{T;LID;L<tIGz)n!pZ
zh5|$ZPKX-&41Ue+4R^SSOeabfpcBV9IR#dhW3d!jAi|m*Pd-Isq~1F~^y)wg*eXaQ
zkW#=b5C>v$`%Ia~6XMcU)$|A+Gba%tgdv+ at ipM()@=-f<Zu2!rPmG{t_-P24LBUgz
z&-QWYoB_yJ=WlNZ!d{*<1Hp``akno=X7H6L{=fy!m_-B;MFUvCca|IhT@>@1j<pG9
zHLA}i9S|Z6X2FgWa6`Rk-=69#{ST(wKVS2Zl1SwzLHnOH1LNLFZz*h2&jAUrKy{8%
zz|lM)hqg}zKOF_7CR2Tbjk#oNAve1^y|{_;XUwa;erW!J-+AiGE`9yW-}uJ2Uwgwl
zZ~XX&K6BICK62w<Jo at N|K6TfJ|MI?T{_6f4?t1v1fBx=g|L)(v_}$0u`SxRv{^aNP
zfA8nt+S>Z&PlW||Z}8uCSO5`hJMgrXo$&vE?Sj%jZf*VT&$fPHSn$C2e|-11{`JPY
z9{%J5- at NJGhgo7>*3oSSpZvQyMubTOhyt(}<YPP}10o{h>X{?MDhHAy6g at N#fI8;F
z&~M|+l$R=ynGx(HYh4wzLn4gNXO5)G0CUl$u-PZ|afUq8MZTF|36}8r3{A2mY@)!3
zk4Z7cpTI3M9OR?(@%C<qe++r=g1xPFY`~*@j*WS3fq-RHO_45uA6(Hu>-8BT*!4yP
zBqbmUS$2XjNEF!-L3EK(fVcu80<M4rSt#IQft?WypullGzqGv>|4$W^#(pzn%Y&;Y
z|3%&~Z;>tOEd%QSAYYedL(s$O at U3kTZ6M0W+-@w0^T!AujoI|fN^t?_zlXH9y>@W!
zoM)Z)wC6qR6>qxqWtU!h`8C(S at 6PMqf9H)K`pnJOef}@+c=+KD{pDRB`qaJGeCEp^
z`Rvh89{u{!|9I@{|Go94 at BZY`|J-`y$3K7I`@f(%`Zqt at qTmDOX@qF)>#!vjIM&|Z
z?xVoZ4Dulk3B^DBQYx#s{d at oAN4G!xPq#h%^_%Yf3g9OJ`P5gxdih6gY%P{pvuL^<
zL<IqLr2s4-BOoHM$iOM*RZxSp%)tWEVZ;w*7CMcssWJ8hF=v4|9SG|Q0S5n8Q>aOY
zX$FQJxI44~D`MgH5j=f`O;gY8LB6b=#SJoilQU}s9cf55jdn6dkOuii?Wni^m0+)$
z#}+(0!QS|JZGj-TfO(9MW}tx>gq*->Yv~3e at Q_|0W(QODSGT~Eh-8LG&6*gJBljoB
zt~7y&z+rd>PKC4*nZ`C#8J2ni9|YYD3;HRrBmOPtFUnt>zs~jw44Z`xr1Jrgo0+`Q
zK#RA}l)a3T($WAb3<ZoFDoQvI&2ND}z)SS}5JVXHLj17K!{R2&hl1zq*-t<Bsn2`H
zAHM!|FMrdeuX at W{-twVquK46N at 4fxHD{j5v-8X&W<M-Wl`@;`^>T8dF at GtJU<^H4B
z{?!A2`HgS<#aI9K&aeFQSAX)$d%pdjU-?gg?$IA?edWKl)aN^}cXr(P2l=>t{xPg@
z^asEE=Fhht`Oz=${my?r^uzzY>s#OX%s2n>j)(sKmM?wnV|PDv=ObVFv+Hku?<a2i
zz^6XiTAGIP*{WyhPz1gMdwwrl=<uZHu;><@Ki+an=F!tT2mYmf+BHYgnJG`WH=(vW
zcG(R9E;)oWLZw8_TIdLVZl-LUe7C&gAfFx74#$ur5-FOC%${I5Q*Lwu04xR7T=nbi
zAiJge6R6(zI($d%%gz9A at 4`IDr%n#$#o?z$2sZ>E2A3&4fpF>eG!38B2ZRU)r94k9
z5yEl~g$Sk<fw3?qFQ9gC^(H&$7e&c*2%{+if=In6=0_QlBbfP*^3KNWyjVtots<wR
zzItSjDfmmx$9R4V{L=Z%>fh4sKf9LFwjbO(6&@}6!2;wEu^wO)n~Z`nrQMe?f*(<Y
z=SLL)ej}3*QK`mUYG$RxExMNXHmP=Q9$7x`ITya<;@7<7;@AGsrLX^!%P)V+Rad|J
z6CZxp&DZ?djn}^Y`s?0$%?%&D`}0JBYybMLtM0t}=KCMK<$;F?1fO`|YhV8Ee|-JF
zfBKal|KdyE{jZ09u=Vf{w!ZkUKXowQv$MB_s|WUq{6~Mh_4mKnqR#Ws4}U>I@#tee
zzy0BVyysirMPl84^zT0L<*$F}Q+MC- at S}fz!>w<-_QrSLa>JFkU4O-G*R+?)czEhp
zj9&nISb*`XsSZ(5CmNFf65t>LCuC+bc<}7f!E>|B0Ma><N&%^Y3I(>`HAB(?jI@;K
zAe|>t)t at p_zbDC6<WuSgJjfngpDrSS%4#f1g$l_;;y~d=w_x at EDeTqH^AYOjyAD4s
z_dI2FT<wk)q?y&U)HzEdfiV;{?i8T%JX;}xuJGSrNn2T>Q at C$#)IvE_(&XN7U?>ny
zro|Fzx@{#KK!H%yC(d8^B_{h;zeJY;{UN|w;X!1NrF at L@*9k9-0%*?<4G+{pCB4nb
zVh%upkwnIQHlLVb-8taFlfWJ$E<gv8UzU0R7}E1R$FNs=eyzN;r?I at RCF5Mb{nU$|
z|Ew3i=8qBouYB{HUis$BE`HY)Z~DLo-+Jv;Z at K0}Z at u=Kw_SVPTduz0#xH#SwxbW;
zcJz at ieEZ>RKlA0A?tAdM&pveB=N`KC=-2Q6w;z!Ie(fjX!|(dmV?D5UNubu=7CFL~
z|Ltd}CYbWo$0U^|g53G&Ki~JAfB(+bPd at SGZ{GI6-`;f3qsXm09)1Myzx$?J-+tY7
zfBw;ryyIh6Uw-YiFM8eUY378~<U0fc3>Kh>s18x!qPwZH!t$Y10LEEOh|oY^G!tY9
z?odD$i$Db#A=FO+GbjM&)u0A*1kk_~`nc|l>^MoTg?x{6Y2x$g at KNNm(Any#F^ZXp
z9H}=NS>nLb0>AOkJJm4NpWF4E9#=oW+q+%8+zUo}K8?bWrWaZtY5Wj at r@x3rz`U%Q
zyIW>MEXa&_8<v80;evhJBMMNQI!C$?0&uVt5ICg}VN$f;5To0&IPkV`p!nzR<Z6;B
zo8be(A`S$%uOF&f$cX}joWBKrp at 0K^S=CVdKcfK7lwPi{ly`~~DE~^E*1- at 9COqra
z6?&V2Isnjx1PKK6MuLB2KhB?FU(()%joR|w*7~8jbDw>|Q=j{c-+%QhUwX-FU-rgJ
zUUAu_e{%U-U;B<fzvMkvUUt<7-+0ygFZ<Ak-g5QT at 4NN(w_bh2dv3Yq)(5`)$p;_2
z>AnZ9y5p{o-t*-f?|$IwPu~v_Zhi3UU;5YYQwaLT|NP><fB8{!Z)>}C4$K_={?=Xp
z^w>B4dy8Yf_Fq4{<B@;*;=g?Fvw!>TJ0Jc(w;%ocPu~Acl~}hOJ$lo9UwH2=cU*Z3
z{{I?i_?Bxv at Tc#1*Na~Jy63&>l at xgOr_nqB*^AuQvJsGaFGGR*LW+Mz0r=sE&n^DW
zpSBqYAkl*YoI1gOQ<u#0P!wXCm<;#ps?qe>Mx at nB7R8G8yM0AIVVx8}kxyt~b#(a1
z9g$G@>gs7 at 2H}Ey*I4Zdr?e*wd-LWjgec`Bozj?)wc}Xhf^IS6Ic4SufMM>yna?g~
ziXr4Zokeufn9{59#>P1t|J)^l-v16=B-F6$Ie?b4%IFCvJP?#K!&3hMTXd0xgRUqN
z7T6T9h+u^S?j~$*qPi^?Pzo?5!Gxz?@T>B7W;>eYP0ZZhsoH}7l&7UBexh}8hHIy$
zSRThzby5e;E+F!ufLd)fX6V3_aF!5^A%3`TBg$u8a^7=ka=`h&_%*M7=_Rj0|AYTO
zzWlP+{Q2dtf6tYde&F4&d(V3=egFI4bkzs1y!jJv{_wSLz54pgKk~5~@3I2HEf0R_
zsypt!?sH#ajO>QbJ$mh59sSJL|M`xu{LKU3`yo>Rw&P!)(IK-3|KkUDe&ugI^_73P
z?ZLml<LE!!`rsqCeDP~nfBGKc%g4WX at B8n#?VTU}#9OZ+?p*Wc4}a)QSAF1Z*IfJZ
z%ii|VH at yB2E`IIr{mHAOs8uGenXxbv>`;S}1RaPf{-FcLVb6Sdi$$a_dU;7HpmQY6
z`T(+0mQ+VsHJ#fkaTkdwvq%uJDA-=9?~#S4Fp!V;!|?eapCc)yqVRF};=L92ihQ%b
zldIq6<eg;J!hespx1)x`seC1bq^J3l&VN>irX!Te at 2YU{`Koa6letpF+&9ffwUZ~|
zIN})(S)Gxhy&Aw4bBJJa0iBsh8HXG}OPY+D5z(LnM>6cf*<;|F)yt{*F#KoMQ{p>V
zIkL#1UJCG#a6nCf7FOmqs`7WXP6$xVL*tX>`CZ^w at sIwIA%NH at DF6du)Wf9;nwK%q
znN23}vb1RuYcHl`c&qH8V5k%*w-_B}dFK>E!1L?WeCYG(Y#ye)?Sc!R`}C(h|JlF)
zC$IQ}*Zs-M-gxoL-*n0A-h1&IuDbL!?|A#ASHAD!E8h9~_rC8PH{AH{kA3`#kKc0T
z&7XYphp)T*+MBNX>(AZ%rTdUWH{5maP4|821GnFO&1b&&!8^Zr&8Hvw at TVTQ<}*h>
zdiSHKo$W@;=sn;1H)wMG=O4M_=>NIl3%tYqH{bWQ5B|m7pM3C<+aG%P<6pe{`p<pt
zikoi-{O|q5tykQ9^Q9kn|DRuf{Uukv>!oja<BKo;(--{lD}VPDfAsuUy&U|bc{JJK
z41j-rFBviW1Ok~hNH1tswlBJD0fBVjTv-9bL;;x}-7(+?|ICqRec<^$F~Bc9#)wuC
zJQOQL_BhCAnHuBqB=qa5DUP=9B7bMt+n9HtzI|s~N~<ErxO&o9sy7(m&y)hWGV>Z}
zP9RQs=$w&^9$_C~ZBMz+DK9Z`fTa#)&BG}7|B}T&>3*b~g@&P4>EPeJ<0e91P!JY~
zqBCZie~1pGIn<)@39{O`cQhdDNlK1PBHX8ix^$52Kqg|-_G!GmHQKAlceYaS=_((S
z`O^6&lV7CyA69Y?3+Z#td+2iz2~>~)(9 at p5P^q*uvqk4%B)qJm59P_|rRIaprKIMw
zzrAsI;oN7Rcj50o?P<?{<}+XT+~0fk%U^m4_<!9i-~9TwU;k$x_{`<6yW-MUzwIq=
zyY|XUu6*ak?|JXVSG at O~H-7BhAG`UAkKcOb&9{C0fji!M^+#{`{1<Nd@)vJ?;DKvD
z`-NNYfAsyg-F5Y+?!W5xFTL;9``-JBFK(Q(AcfFgBLsZ(3*WfvjxRx$t3Ulkkk8=S
ztq(l>$p??#{N?*@y7!)Uee4rg+<MbnuKoxS=RG&w{D$|v|Lxa)<hAd5=O12r*-PGV
z at g?tn!^Q7K0{zi*{_w?5f8h&A{Hbmsbr69}n95bAmJY>i|1ZcFqt_)n_WVocp8ksI
z!{`71w7qw1+-Z8}`Pc4FPv~xCN|Z>EV$L~LF;tO77IV%y=bR~#Vi2husGQYOD|Vjl
z>7MBEWP6f5_IftJ<1^qp92UO4!(s0hyTBRf`#kUatH2<2&)O at zDEwF|7At(8=lMR_
zpQ%AI5Gip#$fp5>DGL0Uo)-XSaCkxc2CA>hAdv``Vkn+ZyE;CvL3Io*?a<Gn?Kg&H
z6y_DqH}y;EA6=pQjlZ}(>}4*re~7d|x>UVd2Y{-lSWebqsD2q>57j4hNlFVaIA^Mm
zn*g+cpZBPPoO0_h1nw8x8U^hXC_zxNV2t+^_kq$x;?EF2a$$UWjD3(`ks?J~>Ch2}
zX`ng_56i&0R`vVgY%b)B&#Rb^lzl4j^G?A(`kz*JTpqS%F#%qS05E{|Q`IB*PiB79
z5s;5QWRNn<AGa3~Kna*Lqcr$yJL^RG_qVo>bc6q~MfCr|`0BBd<=Kg~`ROx at 7oVRy
zdU0+3(uK2c-8lW=)`=UpS8v_9{?7ZS?>{{I*5h*zpWgZC+c!S=;OU=!@4cV>{G(s~
z`6s{q?Xw^M^vMr at _TaOh-T&6l?|k(0TOa&9E{8<G<`bJ8|IUy8`omxR{(FD(@4x-K
z-+%VIzxwnqe+%b%@+UvI`_1nV>c9K(r{^C%!Qx<gu0DSO_-}voWa;YVm0PFRUtC_j
zdt&+4Qs3M}@9bnou7$P{UuvGoeFyI3{R;m#^uMG41pNLo^^xnAsi^!$-`v^&OlPd=
zaA3I9+Ylf{wE})-QmG0?QTymgaeHNC at tYd?e4#2R^fj&XUCE{`m`4Nz_S*v9{Z0e?
zZpe3oy|8+9DE{;driD`$Ph)h5UUGq|_w?S$5qjf`J=)8tH~1SRPhg&zx6FdmQVizN
z<l2Pcx$xo<0gem*Mu~z71#c${$c2*~y}~Hy5+L;e9rIM%u1WuCDR5vOLjeBO_zP|i
z at uNtAk4JjGKe}DJw@`Nu{=4Qp+$rGqeBB-V=zs7pWgDu_Sr;~A0&sreKT(M+o5l*j
z^t_M)G(RyP`dngD{B*QGt1zR!yS}lvxp|<iZKSJba%gyAcH!#m%}>`xmS;v+<|ft_
zCQmKSoLQN{B3wMba^upedpDM^-&lYCVD;ABQ+FSnx&KH@!R-$}yYk}wi;v&G^YOQo
z6#VAfzx%5X{`^- at fAsSY|Lm`~f}eXBANT2B{>}5B{OsF*^*g-j5B}^IPyXajZh!dg
z^{4M#c>CE!@iLy>eD8ykckf+(`h5NAqxEO^X3m_RyRdfY#l`h^&)oUWxzlg09lw68
zXJ)LrqlK+-hyW%)=fTlM8}P42o+1KB2QfW at MG2XbAR{%*p^Ti*pZ&rL?K(Rn$Okq|
zArR!Nc`4jNcXcFRQT@%CR>Z+L?g)RywR*g}`EWYRF64W&<Ouv6plu3;kE5~w;G6rs
zWaf|18~+0bymra>tbpASaiZjz5y8s_>I(C+2!lMGJLZ)FH<A(C<Nu3f!JQ!KB$sZJ
zcNhg%kBkofBM#~_WX>LZ%;gj~MBor2;1?)TK-d8(ps at vRquLt@O)$OL7+otpkE-nv
z&9BK1;8*yUH7-Gs2UO at o3j57@G%w%?ix)s791#Hg#6>mp!RIB_MORB5%D<<vxxb}#
zsH1(fyJvE6 at aW{kiDSnu&kiq6O`l$zI<+{yIuHJ*PA^ZNUOjsL?84>qtGBP5zJGh^
z>W%Y{A6$L*-pRXf8B*}p)3a|qKl|Xtg-7qd_1O;|eET~e{qmRJ{58Djw@{<_99Cv*
zI547b{q{Eq3x?y}pZ)l)Z~e)|#~}atoo{}6`@@gVJ$(E6yYF9r|H<il4{p5o^wN`i
zt2eICoL!qayE1cb>D-f(=bx=!`Ec#n<+<*u(VEVd+O8(Leh>i;L14kZiht4$Ci>rv
z0`Vzn(NHDgZ;qccg+v{K2+71JVf%s^K|XB9a~Et!c&xuvKRSc?I<WaiqupH)+|#w%
zUslBrz#cQit?d5x#r-yhwh15b_!^7LckkJWl851-?LEDvzk_le21MxB%*$40OKLEj
znAeO2oxk-MY{wn&ufE=58aBv+g!fe(RS&#%M2*DO>|pFLbx^WT5dU|B6vz-H5dnSp
zsOiM_3q}e&SZ#xbCliOC>uhfX at X#Ku`6>RSepQse(*G1WV*;Q+;qin(4 at V{VQri#a
z at p-9{M%^I}aVh>8c2ZsDs at 5vPJ`KGZ|Lq-P-QAP at eKVuO3o|q4CWn_Mh8CxW7iUJ6
z=f+OVPploEJh?P=YGvxw+VttuC+}Xz5L|u#-r|*;7oR-1^!UZeJ8zxF7Cd--7Abh}
z?9Bb=*PefN{^1AbAHM(gcYpNk$KMz5+a1Rt2p1oJaPONxIQP~&=O4Z}|L7TP3Ttxn
z{g2MvfB62dKfL_(#iQ at Pw|3{+rN{S{uU=WYase^K9!;E_A74E>zB+s5-Sac&raHz4
zt2>)3T5C!gEBG`hb)&5t4G;c>4yo2imk3B-q;3|LrXlH(iT9!89 at q%@WrMA3g`?IT
z7ntvhuY*9Ms#`GF{ufgkcbspzcDV))*rW3Syu|H~$Z{5jF*5FeKS~S-zg0W40G>n8
zlIRT&R=SRk-2+P1zYO!+0DhAQfL?dP|HbBDlXSTKy1TQWjDkxRv;ZOn7y{vAyT4Av
z7(MR{5Gf+$5&>)hCeQ20&iK?Le1p&%GF)Ntdzo8nuk%GNxJPS#MtgD18ZYp#>inhV
zQ|cVZg~ejurMCslOR9^b++LVZW`0UeiKT`yCWJkE8=Lx at n+96ihC6zu`o>Q7^iB_t
z9G~txI?{h^Y+!zJ==k*biTTl$W8<p}6Kji;CzmHro>;zdZuZ>S<s0i)pFduIeitb?
z{ovk-8~4_3KR9*w;hFnypMCH|3&QzFFHYWmcID}(F7Ufa0rukZv-g4hxra~AKYEH!
zas8bS at UqvRJYTtS^XiMoSDrsyyt01c#+9j4Cr(_ygcxFvAZ8;=Gee7$gU81wSC6(1
z_ttbZ)%P~nbk>(QSHb5A-IEa`KqvTjObr#->uPZNC4=dV*h{X21{vaPD#)YMK3z`x
zcYr{praUBy$o}PBUvt)f{&T>;E%Jdq5h}lM!u7IK8-_#D4OPz$Q=D1GJJ1)#GGC8F
zUzaIBYO$koU4`MO(mO-Xv(Ir8w!i2{GIY2A4py(?pDtP0g!3=?qeC1v$b!oGiV09T
zWi16f01cxyjC;@ufs)z8g%AO{K~Ye^8;@0#m~^l2w3Zy1xL{_UgEY4L?Lgf*!7t3#
z(d0r_2-$JsUm+hU at YT#Gr#QW$sl2wMroOvQ_<vth>k$0Ey?wN^aiD2vxu<=sxBuu^
z at 9fC*sm1<d6N3v=^A}DoTspmY`Rw at W@rkviiM5r9wbg4MUcLDArj~*$@7`OyOn~Ul
z^3^*hZr;E4;)7H79w|Y1y#DO at -A~{D?5}_H&M!XU_Q?-FyZrpcTc3UV+*?oJ`DY)z
z4ShOw_pP<t_d))Zr|+D9>k-I at Wu1F`g#_IE#dFx5iIYnR;MfTq^SPnL>4Aj_#B=8K
z at s{E4mXVH;6J3>UHH at d=RJMu;Pz8Y!;1km(Kt4cqxS;NfVVi^kA`=DtO6`A5H at dO{
zQV$3s1WL0x;D__ at m2Jh6v;eEZhA)-~H>%?d-Q#qaat`BS at cbATV2`S&L(|)Dmu&Kd
z)gO`-uA<zGJxA2%AfdY46wFg#iF)7Wg>8MQ8}E^~W1Jmd)nyMnkGjVt3;$d}(DI_h
zVS_9<N+2*0*aFNAoRiRy>UR?<5ZEgs#DzXo%qqn$;ODE<N7mKFdK<LIq4{-(7Y{)H
zQwR|jdjRDxN0h&sBA)E8qWz}4@~o=X%G!?VnvUxFp8Dqg=ElCprh(?h{-%ch#-^d>
zw(<7%v7Vmk;l8=C?&;y)*|Gj(lY<M>!;7<{%g4q}5FlD40xwdqx_a^X<&*c;&%Fig
zuU>inWbyL#h4mW?mu at XyxwCTp-p%(vBx`o_o6kS}{kQ(&zy9zS|M>m8pS?>S`SiU<
z9K>Yp)_r9-?p}HF&V$e1yYl?)%g-ME^8fl|`O1}<Gbgb%SRB+o9Bg#?C@%nEoISHV
zed_q+>U{fH-{7&)qZcNIS2`-&t82UJN*YRw>Wa#m%E$%^{$*sMVFf at wYM*=HlSvkT
zJZ07Z0e-#$f|-okQ at eCM2{^zp(EMm)1N at HCwT(b>v5S`qf)n{ps>2{qRSU#Zkp|_j
zP>n`5ij<9>N{!M(cj3ao>WScKdILBWpLed4aQ*3*y`+uzI{@#l at ExfxpiWp!I*Y at Z
zDf)(%1;8oC-6(uX6Y#Q!ZD$&Ie*QZ7FH!&~BFwH*J_ofFI7NU93LCK9D#<H4O{Uxg
zss)a!$r0o`!4Ff?rEUa#H2(2_X#*h^nnAQbKRLTNy|6m3suew1QP*8t+gXDYH1sy0
z|7*Hx8~PgSdg>eco0^AOn}<5OCI-7EhdU>Sx~E2Z=f($)O${BN8D5%mNx|y!#Oeyw
z2uClRnL2g)%Cm=;9=~<v+2f0k9xbe2U%Y&K_RRIUvp0 at ixV3os&idQ$TzL3w{qege
zZrne<e*4`0=kphCUV8Lm at yd-$Pu}8y{Bv(#UAcDs_NUhz$j1R+fPIZD&B4S5j!kNj
z99f*{oER9IA8#9LYaVW@?XInCuPSRUFK;O?X)MjJ&L@&U)e~qJz2Q(D{79KJwQ!`!
z^J_yz|Lh^o^Yw_t1O5z12|XBPl8J)A5``?BUzER^0<@j;=#H_?RzPQnoVnnyseThR
z1(YY`$^F82CRzO$yXqH2oq+h)R20yyMhwSE=>_wy6)G>qykUuyJ#u?V8!)f+t$}I>
z^0_ms5*s7~*7z^Yh0vcE9SY${@@_x;@MQ at 9qwaTzgBTiB3(Cu2kRustjtnmi5L at 6n
zL0)WW=X(U(^fwXVB*jmkyTN%B?ctT9^o0CV6&A*lI3Ms&8x*^J0e`xkA|GNtW_zi%
zq^_{CxvZw6vZAH5wzImauc5BHrn0S~wyU<Ls|G7j+f&~%)YjPF(lpT4G|<s8Hqbpe
z(m65Ig%r$gD+NnR3QmlztWKXiJALZR>ASaAZd|$i^zF4<H!nVXJb&@p+}W#hXSuz0
z^xU<DOE*v5ez1J)`qk%8S8rWI=byQMYv#<^rEBLVPp%2_#kfFtj*qR(k1QWW=mzGe
z`sT*Fr$?|yql>dcI41LBO at l2MtlFNs>W=D)R>)6TNkd6dU7>6rsLrGIm6V4T0i=Kn
zQeCB;{_NDl7Vxpdc~CoiTm(PU^ZeNzAWZ>kE`(G0D`N0c>}kAh(*G(w>Z*bOS44{N
zAb>p$$Wh6jv>gF>crWUX4SiuTl04O84;7`CntV4T8-Lv$=bNq_57w04ATus*?*zON
zpZSVfs39vONhRQD at AHtA=+s0JWde}AWv9pLto-3lLwuaj-5&5rlN{|*z3f&$#(66b
zQ&xaFH^w`7`|Tmx?{#E1c at 3us_y>8>sGFM4YA4UM0;XJg;=zdss6Iz39(Cl0ZxboN
zv!mdF+ at Au!FI|lm2JaUnXP2bqmS>jK6;w2rRJT_Y*5#Ep6_vM?R<@O63z`R;E7~fm
z+N-KNYk*c`e{+3bQ$t@%^H6(Ze`m+o;LXpLPChu+H968dGv1FaSeO}JblQUB6RY?I
z${ehm7+qQ&KE67+c4q42+0%FKp1pr>@#^~dw{P9~=-KTLpRPZ7bm8HHbGXdcZy+qk
zE}orOC9HI6=JeVo<SW86O_Hl;W)$R)EgkKf9UVG0(KOiBATO_>w!5ynv%0da63t)Q
zR8rhfR8&_`P at 9)mWoJV=4MBVkA_CGE&o1UeIh8^1Ndf=fZ=~f0lKDmD#$_C!Jb>;G
z>IYoRM=^f^gEj##XF*Qo??k>%0Rwx2kcbimV~H6oEIth2iT)A#u$2d?h^55pL9e1W
zl9t+ZHsRd;N5>;KW8PiWBLWJ{WV>J*I-_Uoh$IdJo*9gT3mFmTh57}A<o+n7kW^`;
zWD?;g2!eZ5UmJxDg0NW%UJ3q}H~;D?AYKL{0Qed2Ms|`B at sNDF_WXjx7KjK0dD$xb
z&}`)QDR);c9xqjn*8EgB>rx*n_E7Qv)a)3uEt(2vOCDp~%(>;(qFQ at teSTh5R%v5F
zL5&?LC~hbyX)FRi<t=3>(zcN{G-}IGYi)OZT~9-OFVU5jp4o1spnY_pZDe5R_*mz}
zNDoqQ)bI<?(&*~(6G#EBfpU<A7oo}5h8Io at 99`*|TIro$>6<yh#l-UYq4^Udi>u=+
zG}@e1RA*&UeoNSn*7<^bbpBC6{`{rmql<IH3)2I0<9)}v8~R)76;Fe(RdqPP-&|VK
zSX^9RSXh@|P?MWim2I!cgh-<hP!z%m!*=2JLi at 3>fIqi76oO5UB(^}}%sxB#(hcRm
zrT_6|BH%<mP&dG at Q(&)u1 at 1(BX?|S at h$5Oqk36>|6m;B1-$HL3Fy4TCcbsp!c07I~
zy#eP=*HQ#l6u1UFlEvRre-6L{PGiKVD*lmP74jOSrD$>_Ifyo(Dp(kiYG$XV2)#jB
zAh$d}f}nT1ljP-Ec?yP`plJ+RMV&1o at I|n9FM*@@hgt|kfczJe+|1blq(Wdm3^w!+
zGDLv!4!ll^94PXaes&?cs?HzqhwVmwDF8tA;r7zio@|XUt2(#L!jzoS^t=jdZn-75
z(po<NNV335QC)svZC+7*en~@NeNSy;UwuVuxi$pNgDqf8NdbOAQ(aF>*K~J>h(Lem
z`0&8OXvg?)_tY5r8GbT!d={1tS62=)VWLGKt>UFClP7`qiSPd5!FT`g78eHKxl^L4
zOOtDe41rCMuX(;^I}<(Aqf1v;K>i3$$NbdD@&LvNVMHXA+ONS>@j8)NBp3NDsxRP;
z<k#4FQ at pkM{ya;8S(U}o_$ej;zlm`HxCVvwVHAN7{3kC!I2|cqM-t?OuMc&-k^C4)
zGep2mMZ1IF$c3r-hwz;I`d~IIQPx5u7#f~RQ7R<4km$Ekybc&|fIW9^Lc9Fv at Rt?d
zoUj+V?l^KMk3=mSn0E*KP9vR%2=KqkxsdE0+>h!ADbA-{)6v5yvS5e<1=4$|9Fwq^
z<N@~}zi1DJ>chQxB}_X(-d`yQZWQRt;UBrv2N9s=fxQ)o0FF7>Cg8(7A4=RUrQQL-
zhx~)R(CtwP<g?gpE0{+LwC1PO4bscO?M+AzNzP=FVXRdKc&2a|W6MZ44hy+#rKvgP
z8TN9ky&@~GGCRN8-q2H9)mC2IP*~bj45-Rm%Ww+nd+Q+>;uMH2Fr)xmFn4JLTfiAu
z7#Wx!6>~7{W)7B)DnTGoMb<#c!bx%mh=V>{3+4^jpEyQrXJm<DPVsPYF-Yl-u8hNW
zKt4Ku;CQcr{9Zx6q4wJ=%UjFKnoCPj`wfLiF={`*Iw!Z%mRpgTTWRT;sk9U%W8bL@
zV$B3KqD+9KiiSu6$fp7v at Dp7mK8EIpqA0gl;a_{c4*mnW3>LI4_#ODfUnYD?fe^h>
zz at B(MtudO_E9`Br>a`$jg}p;Sw$K{`_B!$jCl^+uyaprZixlwZG|n~Pc>q6B8bKd4
zniFBi at Bt4Zz)s{lFWkjJTL(-7?}*kmq?jjX_!SZn7Pp at f91tWIJKEkNIHX{s2+-~2
z)cL~vx108ZGeQyvaU<0Q3&I5O^&tq>5??BQ146ta<0ZUFodXNJ at adG!7x2r@^dxVB
z{~394mi)N%+*p$>QXPi*C#NyqCzpB7iC`nUG(D?0HLEy1yTp=Ho|RjXT~M7{P?HCi
zn)(}%f{NC%s`g5xpmVGPDR9_=2C)U*&2`<aos->&0ImU~sCRa_eRRmhi{_{CTg4&>
zHNq$yBah}d^5f{r(b45Oc#aC};NGI}$4)(196K>Sf+;yZGlVQ0?P=(16`kLUpIhHG
z(Z$Q)B~`Q$>M0eq-%!-hQwQNkese3c?d4h7Wfq&fFS8{-IXyQqH7AaWAT+<!MaU?;
zoj6A%N7y3<{`sKTkI85Vrj%>*E&6{u{BIQjfv6gX0)LRwAl6eHl!-tz#ZX-=$W&XZ
z9Z24+>bFI{@nC0&UPUY&G#=LBV)7dE$QO4ik|R at w_@h8w1D;eeXeVXHcq at z@6>)F|
zFi!~?Za#B#A$wAm=GL_0l!9$9sN_UC5O6)}VekH(6g>0V_;c_djDpAlQs5>C!iyxr
zv%M4;oPP`W#S74Fj~-vA$(?vL&Ilras|$%mm0=NpcVHNTEI}R!5AO@)2Sx(^gMm at f
z-cr+-Qr(+u&W<o~Y>f1bO|>&!pA(a6k4<O7TW*52AUPvH*-~J#7MQICX_-YCwi0V$
zT~1zQPJVT6VQoHo6<$%+T+%k&iWC4m++<=zC}Bv5G6zUOOMOpU$3%DAa3508Jvr7j
zIn+8dNLg~%<d}HMM<)rKl0HDaBN1{IrumUO`;SiW0JMGQ#PIOq1PY(nPXF9E#-(Yn
zUF-b%Uj9%$5l%rqF)Km7B0RXd_2TO0SJ{!=oU%+?i6y(#l3A2$DM(4rOG>jR0DcqQ
zo%VQw186@!SfcA$WdV``i<CXuMi)RV!x><$ioQyrqnik9v;x`|!0pvex7WY}T>xl%
zx<7zDVI0l0Uyb=q$ag&0$!%O03RIfd2ys%FCkp_mgvN7tJ=_ZZ*%}~Qu4H$l&K>Y0
zYu_mh+kc47r(dNUnvx+xi}c7)T|jbK8o?aQ=gVB^_Fm^B5eMDpj?^RR>g~UY#o^`g
zvi0FwJIh)ML=ZM=eo_7o+Oy%p(e_T|GkspV{zr#;un2G-v0q6?BI0~hk&no=#=p3D
zk$cnZ(bYXERo%&rLzdQ2TdF<MoD*rz=0ve$f~n3(L7F`lI#gI=OV3Np$U_idN2ZLt
zR7-w(W}(Gal37#-k+x$F(6JoMK~;MNu0eGt0ir4;1+^fvzPC{v<ep}{gSzgvmf^1E
zf!@ac?vAnHj?t0&p1y|O{-%Bm#8AihNY~`(#PadZ at sYlnsg|L^=0UL<ql at sI*^z~r
z-nrh{vok3ChQ8*8KAdilUkCCV`Wiq!K`JO2!YEXqAWscJo*a9*ExQEdTdjp at uzlV|
zdag!(JUeAzdMQ~^H25>ok-8xN(0#V at K&Hk?E-YwAlI;L(VpKlU533_TE)$@<0Bs1g
zILIya2|HiY`Fg at QumVWV9}9cX4%>Mp=H-9ghz;6RhVUa<KwTkUF3|H*=^Ax_x(EvS
z4*9`wyvd4EDM9%JrO|AV2kM^QY+RBBc@&ERc!t2!_Dj!rb#G*N5 at Q(uI1$i~cM5{^
zvq-DE7!kw)Re&sL!0TJ5SMDwaI@;+JgblFQvY^4QO at PdN`v%T0uUUGUR81Emz`9bZ
z8i?H?0u-?*JMI;kC~Gt^2Q|GWz+c&wT;7pX)s>Q-ADL#4REEH?1q?Y<%T{7ib7Ir%
zacD@)0m!Lr&Cf1NO}CrUbCn<zAP8CZ3cLel4(ba_l{tVHRkl}DcU0DNRfA7Z3Ra29
z09q!c*NY&u)^xU2x3 at L*^>J!CIvaZWYTCP+dq=xQr+Ox)x+li_rYHMnCcCD3n+H1^
z`q~uiTNLsUD2 at D@_E92Hm6h$~twYUa&Bb`=n&;<M=H!%R*@~@MMH$wDR3*7i<nz{`
zd@(6m(Fi#1f0CT=Buf|}GV0=Bl2Qm1v?C?gGq*a3m3c(|5drwWsxdaKfR+XA6v+Oy
zeczx=i*H<JL8uWx(j6(qa@)i$9q at MI-2K9x(kssb=Aa7ld8+M{yi_~vQh*oT&T#Jl
zb_4@>*@eddOq at h%?>e-D4c8j#qTXdS-u`_ay9l9^*8}tWz24X>>%;aU9Z(?FCkg-g
zAHu(z6sQg_x2k at pI0#Mh-Un0C`T_m#$|j4Qbs2&!<ln9H*D>>oa1h~8R`)XZ3@*e$
z1k#JVq>Vk%H!##ID9Qum2gk6(eP7)`YE^eiMQ3t(dtzOGdR<>y$7D8(UCi0xCYzj;
zESd0c%F<4OScI&?WCQ`Wpag-1M at hC4bDBLR&2G-fO|#}_WENVpOK=c`7lA-<ScZ?>
zDv5)tj*6PDs at m?Fx}I8`Wpp)3Wc+2)2N0Ns-d2)my;CFA?X49pEmf^;l`Snb9c{Ip
z+~3(WKxUzpL|da#eZlXNdTXxjso^;r`|8?8S`^P04_9J4Rd$3iyEGGrrER3jl5e&Z
zXQbyQr`Z#kS<36rE=e`nqS5*6kwNWq*d~*h!C|#iXx&g)Mxig7UpGZ^L41;4$V}A>
zhMmO==FkfdNJs<|h~rjPv9ObZx?CUeYAM`8_x{na-$3a_1QeNfMk!J9E++4wH`02e
zIlL?~^LrgVPqc~^9!$`s3Yz*2056zV>+qy-2v!s9Nh7dSjr#5uobUT8c~#5-jRSI6
z5a~R-gune!F2GiKQMN!P|A;Mc9A|Hre!Ob<-G^vw()<Shckv%`@z9|S_$M8pXZ}$9
zPil-x20jpo5F&stp!!^V5P`_VL##Ul{~goTnqG5dXL4CvVrff4L%+3QAj47^k!lY!
z*%<W`$_{rqR&Lqn9?rH4Vx;U_G1;P6@@39;S_I5NqOH`FT`Gc*Za3#uTZ`(mvx=<Q
zr6LFfTOc8ZIcO`Z>VOwjHul$dPj>cB6QZwg>~Clspsc8g$|7~hCaW{pLUK)==BB|W
zjy!Czv7sL$f+ at kvuB`5;sB9}MZz&-?R}9G~o?i*o$?BS{D{anh8>s~Oz}}tepzuvu
z(Ewf)zD2Y>hl!5z?lOr0M~259W;zgoP?W#39GZSTdv#DjeHhJ;xLO2)7$QL~j7jNi
z4US18^CG>#l%|jyVgM9?+!_ddxwdyPdF4KDa$tqnKnxtjMqF1yM&hx`{;xwpva(Zr
zcD{P8($%V8Cg^$q{;$0DuT}rcepbQ(dy1EUItQqu*u|E~k;*#fQN at 17kE*^J{44+0
z-34~Pez|pU!CsBMGJbU6-zf-O=q4}6Ju+2*57XlS*6K~^d2|kTb6jiB7ud`HO4oz5
z{c<pKdZir^3^{>@2w(+h@(K!*9lrfbIqlPy>K+r|FKLc1sE^I9j<%IWrssv3vRNt=
z%!aQ-OAx!Q+4G`KNTMYq$r1`wnE#A8AO*Mv<jdRzfvg#VkZw;-x2I&}n)9lx1vPMw
z%$!miu!M&LQI$t7scbK+?yP9&6ByU`)im_iHV)J^4b(RcHgKAU8r_cE(==Gm19%t@
zuIs_4s6dV?+e(G%G(vS$RHwoQ>|2M}yO)KZo{@*2B7q%D6$+o%=}`Crd!_9|3H&nA
zH$E*WJ~b#VHBcWuSd1nU5jFm$7t&vLB+)6ufGqaL5){Q-q_7q)lu-~E7<LfyKn_Td
zPobtW3i?GALHd!-Tcm?)RJ!6eDhZ{$S7*=$ubEK1#3!Q<QUXLDD at 5f;00ai5%FesJ
zYF at M~g#qVao^CI!5>WS4^Bfe~U*p}O*mp=VkE$l!OKk&-wB(uu9C{U5ICyxE$3fX2
z#Fh=V4{&5?i9R~=zf~Nz69EVKjZs$)Y`gUT)_YWWv!k|C8XhH-#OpyE=-;HIA9&N)
zh@=zqWS}d$h_b-YxV<nRwe3;*{h4v0y1gVEsyZMH5n!qh0j`Gr?7ri+ju}f;S8_>9
zd_i4|y)r7RBs`-aG}RuQk`<U_Wvg8P8+GNRaspU*!IF1QLV8d_IuaqWK(NSGl!VTN
zATbUdqX0G1 at gh*i{!<ihMlPPRIltOkP at 9GOnNuc$06!^dC at 5<#s%R~#>L{z}DzELS
ztnaI8=&x=ZprE3*dAP2{ak%E5#sS2ns;&n=0v=Ub(OO*ATv*&dK28$2xfNM8T?Ng9
z<r31#=P%0kRs0kj7G4sx&7^$WWX0{FH^4qVEtpLKapu5S6N3<$1K`JA8*XDvex$wd
zo)r0U>3_0gWQ19<ibY^!4&q=d3l59+rokMJfi0F?n2WloTDWZsAzY8qlwM<A^LeQ>
z0Q`=~<QpJgR^7#U6Rx3ipTGrsx{1#y{{mo0dl%{*B~O#1^fvnMqa{k~_PzUMB%Kr6
z8sSJN2<Q5M7XwM8td!m{(%dTGv-e2Qe*aJp%nIjl;2YlRP<JXPP}akdr^9uHv2PFu
zHNfE&(NQG at ufqIGq`>I*qMkvOI`a%PFYje}eSG?1)-;1{J=K9~Pr^Q=fOBemI_ASE
z`={Vv;eQ7<k%#G;PkcJ?PfUAcHLqtrt79gkvNH+IZ?BBBm4;giLsD~tOtt{34QZu}
zHPa48u*i9+j%E}LZSsDxW_C;jfR=<bmn>iu?4 at P|fptj4P6-*|ID<ga2N{w_O97Ua
z{M7Q+oWi=S_Q at imF~np*uOSF+#h|*TtE{f4qQ0-PVW4Vosgct-P{ogRy%jax0{hCg
z;<A>al1AJL>eeKIRn?JK+HA`zPO}!831$+;;V&YCyZ~jMq9ANoE6kRHy{LMWe5^Sj
z-5wL2LS5yNs3bU{8hya at 1Ga!AunWmsYC#znsk&eQJVR0Nf(e9jC#BJ<7mTd|%<c4|
z$z2yeyMZ6lz8U`;|5tKS%7>LylnUTT9tz~6;kidQ(UYLeDh<+WtRW<P`&2%o>i6tr
zy{`uyjtr{e;DC5|%JNf4yD)a8$$3 at C<33?xvbGz41VNyAjb}S}csGkPFc6^KFL=LC
z;2ymNTg?b!PKY#@sR{qm at 2mttY#&iyroIps<G;8iQ@}0>8E|n}iGyAZqvjlLWlG>5
zdjH2tfuqmG)$^z;++_DzAahF5?F_R$K!l$%Epon4eH>e&7EJizM??VR%aL{%*=Ip=
zQwl!AcMmLOcOSEM%%qo!@{hHZ0si2$yg+k~e{$B5#?h#>JiqMHD0YL2osII86U{YL
z6XQ!I3<*JjjTVO#YnYY=XcA^Zwqs<5lTagq>J)?w*^ZZJEl9E!q*x0~nT4sDMQJ#s
z*`-!{ndFoUYwX4Kl-L!Nw-f>Ls&?#xaVpzMu8~<N1oLH0g}^?q(niHjP8m4}iu4HM
zo2-T8CJ?lQ^gJAM9Fu5lQ%V*U9dLWJy at I_tAXe#l4S3!KYm)F2aTxhdQ4~yn<!}L)
zrfy20F8;3^E>uaa^x07;OJX!7%O9sqkiRAD?*zYrd3lUcT_%`UB?pS+Xw1uuETWWq
zJ$8~2lL2w6l^9Qu5;!8LuYL7jL+L#Zy&=mu(hpblMBvqGryK1pWM<cENQXpRcad_X
z6pf7o9*li}kKyfNBM51-)RnUBBS9?4-tQZ at Hz4!?V<M>GXK at U1Av|T{_%ac0H*a4C
z2PyDt{QCsG$;@-kSHDIE?W-6O<uc$td<`WDqkxqG63Ui{^lAg)Buks at f}!fS%zV at L
z3+6Wrd@!5>_qIo8ohJq1G`!1qBn1yrxW!kd4`}C3m=E9=<*!@-DSHdsO~Y^BqOJRw
zrDG<wupy?PHm0m8xwtMqE!QuVWA{(A_+%ADaf{96O`#S*1)mtpG|?DG0zFU~@hL&T
zCaZ{KfxpbqNW at GqAQw6jkX4xASP%v;Vogj0i>k>okXFmckFyjcSPK&~3zIXY%EF{_
z$_Ro=E0<>Cw;~G#)z}4lQ5{~h9InB9zK|RqU at fS&WtXPqR#<Gs{CY}e5fvH<mICtB
zglA<bw#kN*j*~(dCm0KbsRH)AJYFO(H8nfblo^s at 2~A85j)?Pxy2BZm79!XP#`?1)
zT10>*XaKK8fLjs)jE<Bc8)3V1t3nB<Y{-0Vpfti~5DJ(Kutyez(x`E8sCSCWWSrC<
z8GVnEr%nL0%isu48JtVCC$MJ<x{n`Im^>LL4zp!hIrQ5%1Wj&usT%4^t9x)uKMuSd
zGUKi25W>RRZdO1BgnH5#3q3m$ypO$jvKr5SS75kjaO5F$K7ePB0LRmZ<HEnz{~!nC
z!+&5tWB{pm0_wODuq=XLfuXV at oM{sHrzipTVle!f7%y>4qL)$#wD)z=d}`7urA=;p
zX`{=$mG*GYR<-YJcz3^WNC9=8hhoeJrRFVc50z{ov3sSVRmlQUV3hq!6i6!HsQ+P^
zMc?tv?qlg4GX!cPaw{WC>Jy6U;w^>f|0C(SLDquMi~{(uH?vSEkO+ at M?PF66SqKOd
zLBRg%qmZ+odx%273M_e1lv0abF#F>><18duf(arKN+rLXW at lv*Iki}8VO(ZWLRN92
ztt8o2nvyNCqtxuOG>Y!BOEW5(iwRm1z2T6h%~PsAuhN=djn3y`=Il~Rl9IDZ5_uAy
z%EAKrT#!#-iU<`RdN6+%p9QK$BPXzrHTy8VCnX~+AXF^AZ=eUs9rPjFuH#KXbVf4{
zf^R%n%$)2*<Nd-C`7pHz;0ssxhlIu*pqM1R=n$%J1NhzaKTy|)))mlB%%6x2_n_hB
z?2{>=z at F3(vyKURGYpfdp?f`cp`~f;V%Jh)hHrGrLGZ>bbZEThGk~1)`i`$ay!q3I
zWUIBT!y}#v6FBU@=a4Vveiy=vR at YEJ?7!<s&^~0 at FT?{%4;eljuv<?;V3U_`&>m(-
zght^<d-3*p09?X5fPNO~q6PWD9*}z-*+Zs)yciy_^Q~!+^C2J+Fd|(L6&mM34>iLR
zaJm`%0{cR!nSV=>113*Jt6tY{S&IW4Ne5I3b*f_oMFGDd0!BE<)#~mJey$z(H!i4i
z3kW?#)jBl~;1(9dxNpLq&VpyH{BfY*NPWkx-N({8XH!ZW6HDqj2}~18wfmW}k0fXL
zqWR;~4#%3jqf at ATB4orlgdhM3dIa3XfgjPLm<B(Xq#~1O8>K%%5x)XWqUcC=#3yFp
zQ{!2OnzO^w>=7AxQI>+3tl~IZX}rB6v3sT{w<;yC%9K|{$S5_hDsA(rPR*+}=hv8f
zW{PY3GHQC$s=LiqU8eSNyQKi*62a4^WZ{w{aRG5=zvvWT&-^Yg65pEJAhv*?Tj0&|
z?&K^V1MLd%NH>@di=!mqAl-1hS>7^ems-$}okTt{0e&Hj&ZhC)D0>5k2KiB{UhY?W
z-1ICU&E$bPnqQRsfnA~x59(?E9<2RUV}d-`c9B;ToK|>{Jx8Kr)rK#5<~P4WbG_zK
zDxmZgOoQ5RN?LOVY8iflqE>oabhztye}jeB&O@~}%Aa;cz9X*LYsnG9uS@^}f{g&@
zs4_Aa&?Hi0m=e%VED?jET?rYVwTBoZ(}7fGN^v=NcZO?`4%MHi`$jRBL}o%_MJQ;$
zVo)s~1rLMuQTs%}gNNsCtpr3I7;>VL!r~*i#YNpYj}!cUTafQA2-N&D!W0dxs@;6M
z79*&CP<<}Ke7I(fDLn$itG1p6wzQi|8<R>J5-o)R8TtO{`2pq}zZBb%B&%;iI;-Cf
zvmOEwh)(u$NCA_AXcIGJVUsxU815mnfQ9AonFBmH63_~d=NZtzM~EgRSprisgU#8Y
zX}RI$9f<^>NI=*1n;VDIr!MBrtmn^NDLi_u=-Bn*`5VRD&Rr>*Sub3?RlR(>X6901
z>qJJwP+H?qdUa27+nBAaEk4yAO0+i7LbQs|4U>xwBb68<r_DkHVw3%OVd-|6eQH1*
zwClt23w1Q|1^hI@!D*9-5 at Y_nFaa=3d_8!wBQ+^CKXR10=Yqaq0{)`qWc4kpKe7Hh
z$$vp<NNb|xA@;Chp*KFl%yX)JEv1Li?aFsB622sM3H6Zb;vh0Q7Roc at x*{6DUS;AG
z at -_HnIm??a<ZCJL7BYjF!|lmUz<*eQjcMT4H*lX{Fq-NBP$ym_&4a!kqQm#g92E_9
zuDM5Fi|HXuN@{>v=zG2@{(^EDcxEb%Wj<K2GzWovXAO_8YBOrvRACPckPi?kAXkVQ
zAxcAu8cYdmh&U(`xPuXhTq6#AP<%=_4muZxzYOfPL?8>`+$9C>4Ue0yRpozJ%;D%n
zmR7K_i>aQz)cFLk!!Bx1MQ7B)&HVYB_Q93ZvZf?XX;XZ5d5E<r5GkOuPedT=2qqvd
z^)O3G6#m5uI7L9rK>|mlfG0P^VT(|ZVgPBl&vI0b2EzfIs6HYSosjOIoEey!6Vftl
zt?Wt|JCk|rhP|{UsjM}*ye*}o-Bj60VlK6+E0tSLMTd#|c|c8fde3}D-9S=#dt5_*
zhRH^Hf?yP}DSQxlVIq}6*aZI^t~n`|V1f6mPdsv}L|ZBU#B~4Y6y)6-%?~wVxVMKV
zC0nBWxz%Ng;2cAbZp0r1_Gme(nw1Z at k8hI*p*k`J5&smP!!HUi+WmE at VSb(Vc4Lwu
z_;C$9kwJ)Zcrdl5z($ZC^d>qVT7pk1{9GMom_yy2_=nrTd_ev|-yMSUU;r=0Jh%g%
z-n(%P at RY&16Y6-!2F}%_I1P2wK2XODL3?2P3<W*tvokbdHwRCd at zEjzY72~(0zMYS
zmt;N?5o0Kg?t(-FRF97_{8snE=zFwu0C+?L*+FT at wQAc({JE26e?9yPS6WPiGixS{
z2oVsE*j?uv*Q()5wSCd~B8O6ks020GB$*xPWD54w^bivCA6O{pnagP!HdVGJw at t-2
zjKtWhLbA()GD}1R(sKP_K}i-d0pMSo07`~L1cV4}JR%5kVE#!Nft&x=`CwqFVkU%5
z^n;NO2s!J?QnCVy8l!6a6Y#`~8{<k_6DvBBYx~R-rwfNya|c&!1538P#jM^1tK_L$
z6N;PSN}CgEx|0j)Db(?UGxI!P6~m-oo<t^Hf7igX2r1as{7nR8i!7-BlE)}PW)wEc
z9}fs60Bm4NXgo&izy#Eh3%pKXFAHD1ATu)mif>;yt;G5$6*!<6`)d$>G&vznrPw!&
z?$oO;^uTj{ZQP?K;wD%<ld=vaWXcviG(X_ihuQ``)miwDulTTxI0Nd+9XmiUAFU2o
z5kJ}khg3pCXmwdqv+Fgv0PVY9qfS6;b+V;+8MJ>AP@)!sXlhWn7nr9C2qD5tLXiD~
zCEf`5G3yHd$en8o44;fXA`5D0s?!R%L_oK^srk1e3mooIw~lTgXBDW*p{R%f#E(x8
zb)g(3N>WK at OF#_#`)-s1&@OF{j-D^w{HR5MR6gb0pn^5r<!#ZUOZ9g at UVr%Q8+~&{
zGw1ECQ}J~J(M3&Rxz!=IvLFZk{gN|%=|aUF16|?;Bs(1eg?|U^0du18ZN`Mc^L^t}
z*%1?@$%7IZxRc|gP=lurBNo*$VF>sWzR8(KvPwhpY9dNnV*8F~%-_uIn8?5T$=i27
zdHmkbKE40xvll=5<_ACj^umj}W7l&=SM5a&(Ro!wRs-YHeX<Iok}~{}BN}G)^XtC|
z+i at 8zZJU$`i2tIGvI}m4AZ9}JKNL<0JI{mcqXfv9^Zmk^X?vu8ASKIBc44rVR0;`X
zIz3LPq+iv+1OPdlQ|<qP{LQd;&UtXoIng^W^pEOR+XA!Qhj5(s3z&I at 6<`IVK7O)s
zU?2W3ct-jVI{qjJpF&>{=hwO&In at M4PdkV6pw*ESQl(UD0C>y<7x*Li;JB{j1tfgr
zCm~bH{`o7C+LPJ2yEY+T^uHoPPW*F$2pD)aT04z8f2Txz;f3x9z#wX)pxp{gAvTmi
z6CW>c786GNO`A3nBBTTSI6()s+Lv2t`#MDP7alQ!ETw>Po at K336RVBa-&?!;$+`6x
zOY6^1G!L6bPMNBEqs!YP3md|6Due~0|Dix8+mXz|u!5?1lKVNO(dca$h2}FV5g at Ey
zSDt9tq-KSo;bnYEqL>MH at GDqiM}$q`Q|KrMxMJ at Wu@2&UAS$ysh!;@Xo%;MoZ@=@C
zr}sX+eebh7_dmOP|Fe7dKfA9E7yNkV-Jd;g8YN*7#EV35a8+<26O^cG!shT<+&G(9
zABXaH#<EmiL%GHh;MGSQmgs{#Pg16Dc}EyeYt9U%3zBaZ22#`#Y_j<W$DoLas~ijn
z5&RIAr}#waQc}0#2!MQG??C>>vA1em^QOuF&OJv?69E1d1(FC7w2IKEu8 at Rm69NJW
zXhOiCp>EK1A?h;lmSPy-N;(X!zW)%}E?inRbYK_uP$mKGr!+z%9G;^~;|M+R7Jw55
zP8$O93-C$0!sR4Oc%OtIAmooCM_S3l|BcEhRUG21lHx)@z6JjRY}M`JbQWHH;T!?y
z-WNbo9Pd|r^F!z&8E4J at 5k{K=q=-aMoC~mIviacx3-Y-QVcw}!dZXD&nxn2fTe|#g
z;qvq2=ii<?|M=*IC-Y6iDK)*(och6-?DF8UCQ?WNg*CBbXHyynX#tM16-AGpNhZ!u
zpbRz at lNb<_7|7G2B6J at Uw|s!uUzXs&^HXi%NCcmo2m+mD$=;9?6h3wY at MBOwKA<gZ
z2*v1>w1kznN90rlb1Isxm!6(F|MuziXXmfJd-3`Q>o-5Ta{J?}w?Dq7&Q*TA at xeO(
zwf_7Zgbfj>>5D4w2rq69D{KtSuMgpwMFf-~;O}bvk5tO*QGqOR2V#7q;sPNFuyMZe
z;IPASX+*QV!eivE#ix)a^Qq~JB*|sU3b0oNQCCLZA973RfNZa1I^umWjv4uZ at fio<
z44_CwMZ_K6gnZHbipjXR{kHgb-09o};GBgnazxjdWDq3C58%=2(tV&PItXVB1=X7z
zYL(&Ym?RLcbvQ*4Xm4bJTLt+2pdC{Ma^x2&Zw}ZEFsO%D2~8OXO{*hmEEF9?i(5j$
zyk+nV4}qnNDpnZ{t(jf7+Rt at lKwKJLi@-)faL2ss863asc8_XUR)0?aU8f;H2_S|@
zfee4}{04QNv1tdx6ZVOY3Lp_IDI4mavnmb`tj5vy2>+q%p8^u{Df1WFPuv<@y)%6B
z?&zs|<EI}?UU+=8Z7idzJGx^wp`;;>SSX2rqS`ocMK~0o0s~|UrlIve at f=iTKo~|-
zK5BeD71U);?>>YAAVC^27U8jnB)lwh$;34PjSBxNzHRXZuDy#1%u<HQfPAP|%S7DD
z&DoV3N7wEwtld7o{`kU~2Pc-UEG=DGUc9`#a_z+0t&?lF)>dyV-+1@(xkpQEX347w
z$*By+ZRwm%uIP*?sHZ&7SGxlm{Mu#_$W5~N;l at VA`$fh3hsXG#67iVeEvRvr0O<f?
zgOc`*^n~a0HW4BcPuxl;wTf~;fpk#>e>d8^4|t#<ArjyaKmto6jI&YmEBtS-|25}#
z-6}EBIv>ny!1ERJ{6fn^cQDh8xm&?8yZA1!nEZ8ecB<NEKSQ3Wi{McC#x1TcG)C>S
zU_;Ft1Z^Y)r;MF5pUZp1cJnSU;xq`*Dy!3T3gku$Jl8sNp{76x{^_ognbN8VQ at u9T
z1gE0D;MNIjr}E!S{ta<37?IN!xMAL4{@O2g!CpmHb*K#+1pY+?R8s(|fU-|L|ACQ2
zCGCEM?}-01*p18=0Z(Grgu#i0GTtBEMY4G2Y}?Tb9rNqm^Xomwuk<ZlA6U6Lw0e7_
zdB|MeoJ1~+C at 3jlj0oTd_TmDkU<6U8-iH6HoLNvU?xc#e at G+83<#R?Zz!D*4um|Bm
zc5<tOTP9=B_WU}}1L3E67QmObg%{LC0^q#b(6;ILg)2i#*G89bjGwqQxq5qg_4dr_
z?b+4abE~(Gp13K8i?!QG$L!jjnf0eDJdBxa&113JbFb at 7<^_wlVm_Ra8-YKPoDtMC
zoLt|ZOdt#8uj!4ZYDrefYYTsK#6RVJ2l<C7$uyWGaegU#h+q|hiG_Fj^>%FdElu$h
zJd5U+Y^;QX6!=}r-^qLw^WS0u92NlpQ1&AlUMYE=CoEp}%LGR4<g3J%#h7T>Ad~1#
z{9NQT at SrMVCL|~acSHFd3?q6YAdIR81|dq$MM at V`w+nOHb at h%?>|Vf0H-hm;^#!*?
z<6#&0=K3Cmc|9yw%J5X9jkHfnB2QKWkmub)2?Umip}~+P%nH0BG>(+(zMv?g>$@0L
zr at F3oARt;Ov^W^vuG8~%lZEXBLGtDX{w3h1`hxYXF*U`&KkYDx07j5)7fkynFhxLE
zR2IP~3A*m0&mF_9r+Vt`HYF|LQ>W{vPB)IPHq4#r8JuqzoNpXH-rO=mIxH!xB*;>r
zLO?b@)Tu at kNCy9g2y6)ixyM`Ze04a;8SOz3I1=+o@)kFlBy472ip`H)GvF_34DX+<
z8eM6bIN3gZrfcp(&-{A-;<cfbn<Ljhn!WMy+|5sp-ul+DXFoaf?8j&Lkvms!k1kyw
zn!nu7gQw4QqLA%X!9=do>_OQ at F_zp26N7wcRF}-P4mt_*cOJv}b$Y?-!uVh1Cd=zj
z1pJ3-7|gB+!aUI>E#XIh#%Qb9qYnd?1^*~#K)V6|4*kDb1l$IjtBzOE at XC(AW-U9M
zUl)v{0pJM*NM!zq2lWqo_K^{m`X7$+aQCZ{R4Krt;!E=raqDzoIhIfOFnH5STjLo>
zgIi=!qn97mF(yCgo*FQw;jMl}Qq}rUp~OA>B8TiPhes0U^bMvo$df;cM<6CZHNjC|
zNAbfx4l6-Ch?4EVu<|;oG$7<iwJOY<)oD~I6UznI0A6OHsEClmSr((PMG&@=f{plh
z5}|NZ2c4>_^IaShHRl!+fH1P;&YUOfp5sh1*cMYhwpuo}T0XW~F}_wgzE(Z4Rx`22
z+#YjPcT|2|C|&^I!~`T;Nms$BB?P2RfSU-2E!gIWba=B$k6SG==ByBYm&22Y|C=iM
zA9FBw#me96o+;^>E$f-B=$)(TKUy=mP(QrXICi3C>QwvexvpcEw1w(lzA><PwGV?e
zcfM=xeE0Zj%gA!m(DC}gh1#Lx^!z3tznMeYPVs;JYL&D)TmbM4s+Bmn1i>j0Zs3=P
ziQA$)7n<WrJN;0|WO*d<<o_o0m at F7(l+ at k^=8qIObHR$P>%1-CK at fmCnOttkg&{0p
zgQM7&huRM2LE|A8#JZ&iP#r?4xF>K+7&u&oR1sl7RWc+a;6Ns~8tObh09K%N!dt0s
z8MGqy#R+ePXLnTVh8h7jkCc3b(Q9l3UYuU1p@(;TRcf9kg}0xKEmhD23K%VpFU)6x
z0irfirbZ<D;4FxztO{9Kd&<$NE?%&{V7CR&$vaZ{VwuycErpXo=?i_o>t#5tfP?%9
z__ZUjS86c8KV>R<f**xIcrMUaHR^4rf7mWIo=g81P)zngDhKBC1{U%M7YYWC7Y;2J
zjjxu^o~<P{R at xc?ugENxC=iT-0E=M-lnGFJRYlj`;-7*pbua`1dnE!I{KOF0lZ!8@
z$-f3aa4o0{rL4DkJhpW-r+qxPb1J`krm%OexbIl$z<l}OLgnD`>Y?K`U>lGhztqp|
z at M8VMYV+_SfUo8OJgom%DZkP^Q!ucYUQ{1b+mlRxBEltv&E*0+IGa-hoLK-P{;8Oc
zi~q=b;l&d_=fkAnjnXfSDJ~VCCp?*NoXQ#Us?@!}|1||-VKmB|Ujg2 at 13KzXSU@G4
zBq;#AHFC%TvjP>6Qy3;7KO|F7s05%if`l)SP{5Yls9w3qxBoJDtN(Js+vt}Ob?v6H
zfsnz$lmQZ4xjfD798B%rN_m6xIK_dQQjC$Bd8Ni)8ReahrWhmH=adl<6CxzYI8Gwb
z2JsVlv-%U at m5}p2<c-as8VcnggDJ=bb3qCW>ChHOM9-c7xFcW2o`?&KKLY=kq7Jpp
z0@@=J{8+#pf%cGEmq1mrF2z4m{I-kl7a3_BNaZvQrnL-bw2fIiCNjIGY(29%h(JYW
zWMOS|MnM2)`n;{MCO*4_=8>ReOCY<z;!OdGX~9WpA&KUYxTIh*4#D9*yfv&g6}Iqy
zj4~pi2 at gOLi4)B)c0`5x{cwAW8)M)V%|mImJ?4h~w5Gv~mXXZ%aa;F{{n(YV<2Nc-
z?$lg*uW9}LmdhWsuH0%|x!rW)cJsAwc0ByS at ap~A<y+PBSIc;0$E2-g#M(HRp}m0N
z6>CvbsJp>Z0xJYe1TYo7O&*7osE4&U03{q4>KztML#RI`aJ(avCER2UOGx!6p+HKP
z&rlV=3I4I>QVSHk8!bn5fs|9y_UQR_903FYTR?c6wqK&|y7SkG6XrpIcD{Y})k_JG
z#yL>mE&I)-lNZJA(C4Dt-`M#zK&w=@(GkPL^x?q at 7{=HTC$`0dkmJItQl4OV(><;q
zwT at M{`gi44Wu<k(!tK^!8p!Aw{lC<3e$heR^<#9Mn|vS+Ns)VWW?Wknm!wDwJf9VY
zk3#_oc0{u3%zl@!Cs3z1*}yz$J2*ecmpxxzl>8YRP7kT|cB)>Tti3dAAOhTS7~;g2
zh%-ekM9++^Z7jWYBz<76pku^N{c~k&iay7#<WdxuTOOTV5@{=rn7@`&SRV!WNo-L?
zkU|ZcHN<2MAuw*v3M1^FniWpWQy*YYIxHhMlyH;k6!2=Bjzt`RUwo=mHWt)}woJqV
zeiFD6ZX)5^6kpzwP}!DP-I-M1XKEf!pE#3y>QVXB*+M{0&g;SV22MX{z4%W3`DeAW
z7mDZCD`qYfw2oyo^qXtCk}BI1D_Rq9r4a$5No6fD{1p)avrl at CdR6rATSK!-LQ-uZ
z+=B>XrsGWhakTK5{o~~XB%}o<rStAWOqrp)qx75zTX8rJFZdTJ2o at 250@43PFpx_4
z>Vc5V;$UqeDI%3d66KBZ-Dz%vVyF0rWDQ>*N(_B26)&pj1+Kz9inl0utCe$_Y-`o6
z|JRL>2(Y(c+YQOC*o%SW?P2WZgE$4}%U&oEaAAJCK1W@#!>!8FDoJ_e!}Q~+{3M4?
zg^%;sjlZG_;kXmQ!R~N)TKR05kLs<f#63t=5cx+VC1f0q&p1 at p#iS<pehtAqU!S4J
zR4F^Wh!SWDf%=cyyQVCioJmf`&_XV^9g`UY^Y)hEG>U?X>k{l0k)tQm3E)71AQfO6
z$A=&fflcz@)Oiw=z{*Q(8ExRdpS(FmR{XEo7MNcXfq-P>L|Sqqt$9(I`O%sAQI@>$
zy51y!TGAX{*`82E at mnXbPi*Kj*K{XAU<l*X_mOun^~`0w_h;un_|?S^ezpGLuP-|e
z*O!Kttt}(wrXh at 1D!)?OorDzdBs^Pbb4+0klY7IHG6M8TOyeR5kjGJjY7R;;hr}iY
zN5uFS)khP&<+F9gKf@#i#=FBoCSHU?DxY5HPR7Wv{4p$^o#4AviIEDJ$9j_u;p<T8
zc<DyOMWqmeY^)Rl?SB(D5E=}UNry=Zw5oyz`AXsIz=%WZzC=aqv9u1w{u0f+0n$d*
zkggqi`K_B`-|*{Se81DE=?i5JzAVl`vTFX~R#iK at 6?w{kx&655TJ-`rn;&^3u`h}r
zxR6x!VgG%YbrPv6?6Z?h<&ls*1V3q0rFD*=F<)PD&OyjOD}LyagayHi;Qwymw~Vb6
zDJc+f7(SlgIhSY^{vTk<7XEL9fK&)nb9+dId&~#9a70?9FB?O^0~`f!@?ZQ28q=~v
zGYcXi|Ac)i+Y->*AQs$$USM3`m)taDnmT7&zLN*S&ps}{{qfxWZ_hva!Q#^&uYCMh
zr(gW+#FIZ=e)#?455BW7yplP4zVQ6h%JI{g_5CTeJt6{#5 at sc@A~v%iDyuNsnjb~n
zlD|%16aK>_E65o1#t3yf$^VA<kIVn%!Qdavw@=4sR|Mn55b;2J at Klsyl4lHxktvA8
zWI#K#2h$ATDTh;4po9wP1%`g${3=E5@{SF?t>EpZt{oiXORMfLiS|GCVXu+`HQEBw
zPB|-0UO4P>yf~tn<!D8%Z-wnRoCT*!*Gk?HgqL7`OY at h2AED4iZbzg9RCR<&%>$MH
zj>?DNgOSMxQZoHw%!lIASpg%Ff697c`!E4|0a~ZxfIZBgQ_v6y^Ka-&t!_7^+hS6!
z(S=os#dS%g4awzADP`@EXm6IA<Nq35V%zwS@^i)K)kjDU>r+*lKzYGH2!-hk{%Gfy
zW-(A&+nvInE3AzzYfgatRCS05G!B@?)-u8N#iyN at -|4ybe*cY+25)^leEXBpJKq}P
zaKVo^J{-9Ee&5R7{G%6(n}^Mq42YAKCL&kXLdgO{xA?of041u*Jy#C9Q%*Mre+bel
zDMpt0#E9bZyOt6!DVk+IaJY2X9SPZyQS4RS!@Qs)2^nyDf&HF+QvXQ+5dW7DkapHk
z`#K{aQ6Phvzv{wCbzTYnKNiXVQjd2 at gcIj(7b+a&pz%6D<bKP?!jF7JGQ;G+4hSKw
zF_g$kbju+`N^nGW#2iyMs4az(4o4%H*8g&AlzKV}o~01fRr#iBen`TG9U>S`MGc`d
zg4iU#I21xtqQ*B%DyO71q<hBNH7&<Mfh-*poQ(Ey+~JJkrf^jV6hN^kRzS+3GkkGl
z(SAaKq74=lOhIe}<H9^O?cvX%|ACMZ2y);bG&=p?%C1Q8U)gRTR+#|N-r&EXU-bXN
z<?_XA<tJ`epL at Ih=ErTfKkfYRS4V&Sk57L6e>}PS?VelT>Ui+o-qUZ at uH38~IgyFU
z0RM0&M1ZG~XYP*N<o{|@C5C_nj)`96>4M4ANiU~#bW$xWub*y(2w`r#1w;mu%KIh0
zjROVYC&Wh&9Z4mL|NBsFLX=yoKvm<dq-KoZr;2<ko$u&;e>whN&QJcOaQiR+JZ`X;
zDt+g12mI!1Mcv))!gkkECGPT$-3*7*f*>{68h#f6fdXwR{uH4wq=242qxcOept&zR
zMv5O8ZOYgy@?WYx?ND}USkG)`x59tdloc-Ic0?!|hmy*g6Z5NLtp#CbTTrq!5b!HT
z9cVbh)?iv_Vffsp+QQPZ!_|pMvqkU#OHlxV0Ocm#0Gv?8U=l=8Sp-DcB~fLNpQP$8
z>iLrz`b-V|Da&_-`7B;5TfPDQD=xoVcjdkM at BIGk_x}C)AN<FQoFDz&m7o0m)%ADk
z*59o?al3r{lx_BW{>14l5dm=ll8D?=4ngLE3IQ^wcpMq_NO8=w!pqy3>mJEVqBTq(
z213%0qx=HKp7<x=DWnIIHO9eD%MQ!1N02>Nt#fn_u{vrO<&KB_cOUfGwfDdq)L)6h
zcMtok;-5|6e~EYbYGk5sU;Tjp$^WaE*haHuL`^l}(YKll9rPlKOCu+~kIZu4e7*qu
z8!^8f?49@*)1aeI8+~egVO%in6lf`MmVi=?6NCsvc`=|SJPy?@C43SQjXglM=jc+w
z=u+X>a?$uo at z`=nV^1c`r>f0V*PYhXZ*3k*g_+>Svigwj675R@>|{bfRzV1`7yQ%A
zm=y~CMFeaj0_mKbhzyQhJYT2tn^h2<T^w855(W8h8?n`QTN`>TWlaect#|=Rbv?;2
znSn*?u}dY3SIbszDe%8v|Ln)3FMc}l?k}c4`HSQK?!SKU{-4i&^sA%Ke=>$#a1fJ;
zGq#S&w83Kq-Bb3CvFxUP3$dWej##R96#sz&xgWLHSgkfz)!GL533vkjL=ApRu!OeM
zn}YKY^9T7yLWq3srT+PlFW{Fd+%E(EjS$+*e>QL)AZNIu|1+>HPrl{FsB)c`xZbYd
z|Hkq&cQhK;F1;-w8uzo&SV){iyatBjX_4__v53USAVnN^XTklixFW6_VXyrN&6Ef`
zFd9orL2!+=Q=pn(bQN?^IQ5^97DRw at 9b%H6QXmw&SNPAA6}K0{(>jt-(UMZum|Wc<
z9zn}UYI#diQEhx~1tHLgyvo>$b|%CgVYv+ahiG9^dT??^Xo at Aw%-AbyxY-&3ztV0m
znl>#vB0XE--!73K9sJ2EjL9yF%_)iPoQtn$OQgQEs4lLwQ6isJ?LvM!CalBD*~hPx
zE?qA>ajW9uv)YH>>wWnB-nW0y_oKhP at RPs0^wa<4GPhj6`?GQW>)hMbD>us*E|(6@
z=l0InQT`ymur3n!A=yf=u|Gwp(q)$BmyqTUC5tyx0w)W;=?maTSWrZq^vA)4;!*+<
zQiGDy3F?NaV1f@$1f at YxN2aU6c>up}&|Z{3_?L|TR{Z}l%m*lL0KXvrOTykECYyZ<
zSM8Zwddn3ceMJ_)?Y}l93pV{I&$b1bS|_UzkTV_d5}-N}`|=A#{<RC>aGcd&lnM|n
zSzI`e@)YD(wDK3H*a3dk1*2NPg5gC6r7Rf{paeP&4$KOqT@<uX1!TAY!hbfLv6ET(
z)zP{Oz)}!m&Iz!WGhKm!Z+bzbL{#9(Iu;6ThCh>33J&+C@>57Pfkf&2HHHNtGEg8~
z<AgM+D2ANiTs!%XF#m4Co+*(3$<w*u8LfW#y*d#7NWkC!&0o)c@|&Z-`_K3P`u}|E
z_y70X-}>z_?s at e6zN_!opM6x_IcZ(H%V;cI0ObX at B^6Z1<&?(Sief-Me^(q9+7_ZE
zW*ZrQB*7Fy at pf!tP(;iT$iKW!8Er(xpp?U at ia06$WIix8Hh`as7YV7M`~y(_l$z7-
z%646&1kuHR9QfB|4`0&l-CifF6s<&uHXh)&=^nQPmJ|P5^}Iu5zO0D7N)p}izv<eQ
z8qk99<)q-%fgoZ&4*z$X5kOmgVZ$|ccZY+d{vQ({EGUMWWJ3f9Xiy7X+8Q~!TuAV9
z{6z5tXSD=IG`UvVFdReu5Ajc8H8{WaGGd8gG*|&ABuJ1ijW7nNfDq0jE!F<P2ZAHK
zaEJL{AcV_o_`*^Mr0RcEs~1m5-9AJey3#Rb>zT6m&g2aoEf`#~9=liq{+F&R{C~gq
z(GU6r{J%Z=lRupK5C7%SfB*cK|LyZ%{^ftVfjA%+NXN;0l{gE>E|#{BSsVLP>v~Mo
zR1mYm*T7rR!5>t;7J<y7a9$OHKs9)Hj1SHcGRvF_UOWX|()NNBL>){_4PqNOV+K+F
zIJ|x#X#PDu0kUbGR3jA*MEJQ?WuHcB-Wl^D>?0u{btL|y&vqQcK=MX4?g;+83V~nR
zQaGPPON5&(aMo4I1sya}+vav8AMH#xZ at l=%Cd_a6QS!M;ON(Eu*^b0T#UmiF<Hqep
zQnpCPKT8lCu^<Eg;tQ)ruwZ=QgZ?TU<PZUAgpn-(@m|4EGG2*&@%^)fJ(H3GhWT(R
zTTP8aWMheiCKgo1+RLLe3&TqqV{rtMECIs*RSMY1|7Jpg!p!7<Gs6k3NUYW5i(fzl
z9`KWOf>#56R54xyc?46Ie`RMh#m~jHNl+m84_v5eAiZlcn|$=pl6B=q6`n8L9_9o7
zKmN_!PyY7Izx~g5{-4jk|M};C$N7hUdgteVfBxfN&tU>E6H{k%##Rb?rgOR`kf!YX
z+AtzQnS~MA#W9%$(fA;^BxI|}?b6ATmJ_O764ecgF984dPe`Sl!<GESKf>pQ_A>(w
z%}=R=j8XO7>3Mj^{)4o)lh~5TkB)hgktZ*Y6`&_e&X=|VivRqZufHM3umWykqT~p0
zDtvAOQ4LoC>ei$3Yp=lY%dq{b`z0%_&IZ75peU|T|F(~DS%)picgn)cL|{7;pu6DF
zV9s!;$^z(IfFmQIq<|hhVtrx)P|h at hsaTLNEkBX*q^PLUr{ncN!%%$7Ko-s~hlwaS
zza(T!8sjYm%uj<tOZ6I6=wKU0O^2^?7$MlCRwZD<om`l#!MKfSwlKp5wnu2^mpl|u
z6#ic<{D1sRT1iuEVSPkFb!<sPJpM1#T?haB7c48+tI_}KFPcEOW<Edt!`c7!pWgla
z^S}Mv`1hNC`2XJd-oIUb_T%B}?{}^~C~O&3DS)mdM2Yx+-(m{<pF$%tRyy^70AjhE
zQBd99uHLxn_LaN<|4WO655*xW+KJlVqY7wul2sHD at Rhb-%H6 at g>K~VNz#JpnB{?q&
zGL7S&?bWr!&RZ!e-u+Ufxq;cGkVQqy5phs%sc3Rtw1ZdcYAe${1z$vR9E?kw1Gnm8
zZ4_LFVA~f-VUkqc6ZTZ9eoN5O<qK~V2X#NcA|A0+#ED&Sh>5Br`eLEjK0$0G!d&Sv
z$qPF(VjBOL0NnyiER;ZyY6N2ijM at T_K;xT?J78E`<47DtXmH+69Hz0~Only6!6qQ)
zicqfXmzeIyEsi8krGkAxGRT)$kcxsjLqIADN{x+#fE51S<3F~-81Qc|i_NbIFKvpe
z=}PV#&+eYg>7CB)pUoedFF^laeB8SJtc?h#_I%O*zxv-UfByL|KmYun9Qgk)fA`;>
zARSMBIB at 5a?x{0*hyeT_CxXc5z*1VvDEMa<gpqgK82 at oJwCc82xs}nr6vPq^V%jIk
zai*kFIz at FoT~Q-vk`k?6ap_)BDKu5>q-~Iy3FN#uQsm&l2ne{4fS)1<fT4my0M)^K
z)P+l#OZlz>w$i1WsD-0AS%CKnlJhmkyp&DIM<Ngt^_;rGdE48~sCJV$rzznT>T5#=
zAxN4d@%)>^n_B~(ZubCneT?5SM!|^GyzD at ecrf{8ir*-gl2$LyE~z0Q%BrPCB0?%h
z<}w_l0~|;9!c&OIVMKsl;bgXv$)%;8**<~w1F at 0?NbrH5s2N$3)+bHOL`3*=!=Pe5
zjfp5{B0n&nw4C6SOeUX8IgO5g8nCy9=oG5rKVcM at Iji7wAXK72IdTvLEepyJP?-=#
zD=}4Y1VV9sJI8Yn0p$hQ`;X?}1t<|{h1<OMiwR7?FaKfv at BjNVMSipd{Q8IgVeQEe
z2gwdhpUa=SSlB%U^T{l2j+NklX;elo$q1sdylg30MOrafSS|^8GLlgp-ZB)3LO9+3
z1y9ozZWN7BF;1NuGxY4WzT*DS1ZVMO+5<UdDm<xnU?iFvC&E-WRgoz3e^g<cqr6R(
zE<5WvrJY1W9YKKhE0S-JbF?waTnmLm99$hJj&>DY)i1YfHQIXT#(Ug<UH|EA1;PDJ
zEfmI!)Ma?v%hB#{geB}{@drn$nzuVtx>D`@B at eZN^2qI;$0<9;g%npvy3Hkk8)L1`
zpb(?2WmYyvrdUw_vpXneH>-iESK(zxn>|x<ywVH3DU*ZfqWnREvwDGk;f|Sv(ne--
zhS2}pI%=-%Nu>XsLAU at oAvKVIA?AZ7 at z|um at aQ8^aY5lx0l{Iu0m0rBKT}SIxP?UE
zUHV2RN;sXef4qj&oS=-n5d2V5&kzzcGmbz}W7x>5mA+kyKWn>84Si`S at P+|X|FJBI
z?Z0RT-o!aS{PXGW|IG?6z(0Qe@#mla;s5>o2Y>OOuD|oMv6~;a-1)Tq=!KG at g?xga
z6qHV!ON06A;(sQ$BX<Nm at n3SwV{FAy>Gm)fT3kv{Tyju!LLl{Tk+Feck^VuUzATJD
z;WM3#uox91)OK=Il?X*XdpUT`@#(&dlhu<zsB_bY at U@(SjL_f3d<G6<Y}JrMV%j??
za+W%0Rnkwp2c!Rx3+kM~Jm}J$Al$k2$mVN`|7B&8bhYqX?njT9WAqj?DmgTACRz_u
z?h>Ew#Wjb<d^uT+)Yy2WmBTkFQy##7nX}P{a>5dJ(>KK7E%ONw7*U-gviP2(#y{@H
z8WPdMt`S9)6XQD4U+FjmSU5Do1cq}6Ana#`u#8kyUDZU`c=2d;-Ws*v#^<9NVfYZf
zp)wTAMbw8{@r{S- at x2EQNe6-JILf3|CJwnX>XG1AN;S!xUaCXAj_jf}fFL%ZJUW=L
z?@|I9vP-Rf-!BFER{y9Z852sk+Q^Blik4(X>(ByUK!~0c0Fh5S8Lm)fc(OY(Cdn@@
zC6FNramjLG5`&`R0+0n_DYV1uiUM6r0L7yInWfvPT)?kc6Ls}SM7li$&%#y~QqdkS
z%75D4KbJRfEPv&88O3i@^^BdgU4GVj?Ssa<pLRU?(?LQ&KmEJ2zxm&<{^IX15dXaS
z&6Wq>?VdiHH at IX$OxnjSxDO;Oh*RPA68R+K0Pn&X#}Z+cuuvo{OqMW)-_o-X5ql&!
z!kft$p;5l52wpj`&#qvvhZHXXe&SbpBm#7iaF&0FM7LzrkJ2qjI at 6`F#Wb+!?}$2Q
zjxJe8r^%78NoJVy0O at ei$MK!g0D{TjSB(3qlxFg?$_f#5RnvEkNGz`eGi at 9h%b<d9
zMBY^J&CCCFb&R1{pwxLJkgNJ4c?KDl<#xRMUYBG1uKR`S*PYM9ue%@GY-QYp2b<0)
z!Z!|8BI>9;N@^4ajD=}J#$m9E+X4KDKUR+ep`z7AOE;d84(H<IDCK~<5RIYq04>tu
z@?b#Ke^E&e`P at NaIfoIus<2!l5*$JkIB1Lp(xXx6&X7s(Vf*!DW9mW)ZV=q2te5em
z=>@(F$ZZ&n%&7_h|8&Ptgiz6%R9qjQR~eI46rP?NVzR;WCGvynhWx`QjQEe_e?#3`
z0HhHB{}+!y6D0A4rHVioKSz=Oh5v(34l)HxrwY2XDVDf>=R|h*6ch+S$myNQ>7BKW
ztY(g_WmDt;yovMR3t$W2{I~-kf8=;k-+ac%QhwiTPWP0J5x!6<T7cWe&2+oN*61%z
z%z*Pq4V!ZWmbksT=QoZvJvwyY{5t>ZkMeICi?Nll1%^>q;tq#OUp!?_q)zajJk^po
zqvc#vO(>{%aBdMlZJ at E{2!dhLz4z_gPq&LYtlRQnRJc-8j$0HL7DW4l;v4$V|H$vs
zN#xA($Zi+mU0yrrX`&4idd6Wn1zBk{ZGfR^Wm>y&R4i9Vbh+hDR54LpVz~?kK_{!a
zTpbCQl&EAyjl}37q>l_K%upTK0HO{Ifg?Ow<^H7QpQCpHxZiquGS?L6NY%L=fF&A7
z--EA2xJ+uLcCwG=jeYxh7&C#flFX))c1R=w(V!;?cmsZ}B}%N2uS}tEKd0<y2_nKQ
z(PoF6Kwd^`e%%qzM05ySc+x(K6%(!ADcP)jWT69}p|W%lyHfMKnMc~Y65V|)Ne1MG
z?I!Y5*K4X~%wTi8t%S9Y0r<br3C4#yvE&{C!Xu86 at FsE*MAx}48;~l9oNz_^jrs>+
z{`t{pW=>8?jJ*u}o0o3q68tG|O~4U`x>LQ@*q=rstbNSVGm|y2XgTwC+4;8{E<J0O
zMDX`|K|bPe_1$(VpC?vv)${x3^2=Id at TP6$L1H*A=hXEj>Y5E+v!2<@%hrhiiT_A0
zz%l%d3qA8T9^1FmQgYZ@;>VZ~%pwPRW+ at CJ146dWoPC6h9{OKqqp7lU at Ciz#_|xMJ
z0IcKN5)x4y6+;Xu;(p<-D&oNfAV<TyLmeZc?1*#_I1gK0^x3U0nD+3M*Z!6Iqf+j!
z7klX;C#w1#Pmqy5jQy8oruz@=WUC7kjUb{zfHxlQ<k0v=s{&JiP>*WtA*x%gz+(&E
zURj5SR+o+{&o|T)?!e_|;0as6xFGzi9Df=dWcDLT5H)Dasr==FRzwvd;8%7aw!9wZ
zZec)aQ6Z#8Jvn0pR8<Kj`m$S%-ck<Qn4=~$?`4 at L(<JD&AS@}71j9cvOojn_w^;FJ
z5l|!94g9BivJQ!r<<aH?k;(hm+QzrfYk>UwDgDnqrrbldgW-9#A;d{|Nx)CFr6kdf
zWyuf8DvVTtL>UIc;W4o(J~YuI0vzVw;#b0}(fJzrst^wMGmI2~R{j!i&vTgo%JMl3
z)Up**SrN^|p0d`+_8I1R#?lKsa5QiJO3~u=;?s{xDTIRvEnF$R^r8mXufJ1!>S4+8
zt0m(nvx)goDM!yQzr_e3#<pO#XaT at gH)Szd8iN%;0}J(UI3QYb^{8GN|0NKrdNcLd
zLmB%VdypYoRed4JIjqq!zLA>#a7&RtB9M~pW6tqqt`y7TfEn`u)#N?tb3vP_{4d0q
zdA48E1&UgYgL8^fzys?cSgOVJAqgX=bC{<=VD>O`PJ*Ll|7=*?e!gxJF=25By#3fx
z%2;NZ>Z33WjMdQt2{+#2<pE|~5;@BGVhYfv^KZWLuQ*!J<T3IvaS!D}{VuN!hyqlW
z+;JFb!jA|PGQv^Mte#*072kan{!#S}wvjbOFyvSGOb{q`a;a&A9xQ`kVhlAl;YyQG
zY(~AYw4%tS^*vmRs}+v2<yJ7y;iCwN1@<x~A~NY<R5JZXhnW3>X~1P5KClh!wFo%$
zznB0C6Cs1L6czkargiY}PJCV_$xsZ2)g#eQ`!;D!1Q03Ul`!8P^$sD2+o1HIK!mud
z$+wqB0e*8fEP}FUswI8YEKP5~FXK&AdAw5iA(~VGe!N}4k9_GaNC^Q+N2JunIe8Ji
zGYAWg016o%MT*vx8ANeuYECfgHb~v(SH`ytr$gq6XL4u+<A7~B1Ez+7l>WI~JcYj5
zT>iJbMaoliN`+8KOi4Ao at XVMVRhSooRPyH}@?-MlHAo;diFofpZh<{9Pq|I;HQPei
z^GixjeGXW88EQm8nAu+_e~Lgj?1fR2)?Qb5meCC=0B!`d`BAzZJ$FGzT|%+*HB>8O
zF5s573V$)d79WnxIWb0^$S5#+Liq|9i${B%j at c?}MKb~sxdV7=-hQZb4i^sT at RwOY
z8;=fmY`irTJ^<EW7JQ0W$+m0bFcFbKD|*(7zTkGh=U#4A{KSZ&D8qr2?FCnI9L%2!
z9073$JeZxhmjQsxgbYvE&)9!9cL>76M6nCmmf6dDp&ud99so~E1dSDr|J}u?4K~Sg
ztA7j8fEwW?x%&%FDIgvT5t1bf1mDz35kk=5U-KWLb7(4F5~Pted6aC?9n7RVTwt~!
zk>3IQxc0CezH6f2FkuuUweh?v`XXWeIb~7A2VnjT(uDI1^G^%l0e~l&^<L>gxL4GV
zQU4}Rr46^yOM{$jFKQp!iM=BffW+Z4Gk1%}6KtdbfxI*DBOr+q=4n%`c%42p3!}z~
z-qQ<K+ik-1NK=5(6ei&Boz3Z+vx9%c0sNCMpk9=ebbeJFu^q7{g)td+Azg%hU|+}}
zPKpF(GYQP9!%MY>@fu8-f$2G6`1`5Z)HV6yTA~fo3uqRW*CU^U>I<V*7H5-k2>7$`
zf0+||07`%sb%vU80Z^^58u%@q7s$s7C~mBnfXC|uOPNQ($*rN}J2*C#HdTtiT_QkC
zRUPJR8wcy)ez;$$APmQ0W|1B6e&c`_)B-VllSB6_Ar3 at CtcF7<6i<`IcAF0J!aX`F
zc=(7ch|~w%svy7tW*6`_-HxmYP<OiS*T_e;^472#TJwAPi2mnr4@`-d#BXtEi{>bw
zU3x}jJ#o~2yn6zVupm0AH3h;RsU4JjbdCiIYOk at xd-n+b)h!nr;$Y$$@5LjKCOdoz
z at Q=HJ&BgL^s7 at Ed<imU19hvAUQPAk!VF~+UOa~J(ymD#|cP~Zqz2nrVN&uAxN}@G@
z5q}4 at 2+&2ygoNCRC^RJK1<Bf(N=yx*gpBwPaWKY<(LBOo^O4a=5`KW$YZ(Q8x|}R5
zhD8!mc*y~fsAZ}k*g%2irxc%FNLx`Pn!Khbe*A1YJ%;cZqM$Gz+=0<G>(NX3vlnxh
zZj?~!zj}v`fbwLkU+;pssxzUuA&SXVJx9}N8Oy5;&MXKg>`#z0EhmiKUQ8SkAKZed
z2I8cXn-Jt92$nGL%$x_RVR3AUWx>qp>ca4$omkw%!Y^L1IDL%7jP)jvg+f!#FU+4h
zLpd7ul6=tx0FvA^suLCe7pl+Eo~&>QpS{Sq at E<komtl+&P(|}Qj+)j&kDk8Mg?}v+
z)Ev@$%^)TkQTKYvsz+jahkSOimdHT9lQKC(06c?jZ6Gw80_0vC-#w~fT&nn(h%3bY
z5MG0{^Qgxg3-Y93VABaD2yl>y8RQ470yFF&A^;ImJWwJ(xCW3Sx8U$D9?Acr5JWTY
z#!~1Ijm!a%Tsg!>N=MZ6A%~x<y<Kjd4lj<d5iAvF8Qa7 at 5l0A=_@@+9s~$`lsU-fC
z_N2u3k?ocT&|2hffK7awH(ZD;SgM^lX at R1am1d4iFhl_F9=i{>ArXeP%B_ejZlFXt
zHbGT8K#~cGAPDL(WX}^&Db*_IGAT`~7&ZJy8Ua-BN3=1f0Y}&>E<hyRD5^78QefGN
z{}ZlZ#P0OPtoa+Z!um*j;fl6|lBO7`h#(#C|MPaIPj+nCb=bd1{YK1HD4?oPD4;OU
zz{3OZ=DFYNnQZpNNeqe-n`DdBY*}{53Wq!>!j{4ghd=qB^>6KcGH=$c0{W4b9C0G!
z+^k#o=FMDdPiOCae)Ils{{1I^_HSPN)&KDEU;ev~e);FmfBt9h%JA`qpZxLTuYZ1v
z2mNpVkMI72zo8 at E`@tXHX8(hh<OlY at Kr79~{%5c;(q`j_4)RM~zafhw{@3j at R(=g-
z(d3dd3P0hEWY%w!pKFkujN!?0P6<+tsWri<gc{48W65S({cMk*j!cn^n-A5|rymPD
z!Gx>w;JFQGvSpRqRr^fEes<aB<#y at DpEx!{Xz!|M_G$je#sz&rHNSlejG-EU!5G>b
z_Ks`vKVjaR!9x$SeI at EkP?xwC>>c1A`=g2d-rly4o^N*zt7y;pjq}S<`$De%x_G(0
zvnBqyd+DO%j$_3|FI==)UX5*gyJw_L))f5j-H|}u5J1)uWyH<wg)uLIb+KgDf|D8{
z5u&r8Bcsv|eYO7UXC?*Wjw;2Z0Lg{!im(Uo>WC}S#p11fZ^^yqmziX}E`S2o2%fyZ
zCv^>wYFN at bG+5U!K1m`(CW~|kiv at ECDE@EyKRg_Zzg3wI|K$Qd`tI*M`q`g7;RO at p
zzx?%6ia-G84}bIQkN at WRzxmH!{P+LYcNO{mkN?m2{@wrmz5nk2{6=ZyKm3;;{pr8>
zNb`pzY5esEe;kX5r|^PzV2O<%VJ$=a^V!FWUoKYzTdsOaKGTorxyVoZW!dd0cHkW?
zowM9yPgu($g2NWVe)TsuwZi`JyVqENX at B?06)k5O7*p6J+Z_ at +^YDNY|F^f%{zXT<
zt>!TYKO>_`Om$qe8PRU(N?vuiMni+L+v^xdnCNCvv>2bU?WL2%IOH4i`Nn*|Y(`+m
z*3L=8B=5h1L~*gbb0R|ah at s;S;eQhNFk`5ql0Rm2<WtqBk$E;n>iAEb0zM|a-|Gd5
zvep8GNk(<wrF at z6<auLT{4-6!Yyy~-taSdFmxD!q<dX#LQ{t!$x+!HSk!OKcE?9wo
zN`6RB)G19my91B9_+$Z9B4|`t{g6=+mPF8fi4ehmm4-$2KNtGm;Rt{VZ-rq%K$S#_
zAYvd9q~Ii%pg?7ttzCg26eyQ-6oS=a+0`ionk+cRxhRkl;MM|+pU=MkfOBCGgRdA?
zvgW_`3W5kKSC<}%!}y`b&ezNG!MHmgeg*%@d at JG4#juB$cDvaZi7a)giS0kPoTO`C
z;yi4gi2cfWt1fw2=#=)O+569b{ovVW``p#r at 0??_?<N8-|EE;{C7S)%kyWtO$ck`Q
zxQ4#2b+KL}n*~}(l=G>CvcvD|Z+>Tvf0_t^mX at hVW<1tdU*a|^&$P6>m&lTEjeU;F
zz3n&5TxbR{h8y<&x~>K6e^G<cE_zdBSLS(E%IiD`e?v~Jbq9{*YSiMdL|N+#-D_9-
z5ffeVSpM#()xgH~wDwWi5v3eS12`X94Oh2Kx&(O24zf#qZ2QiaPIhQj!~=g%#&O2{
zJek3t$<Fl||D^&t5!Cjt-4wkHp=^mO9dww!&(du;fT at TOCq*V?**4M0u+;H?J}e4g
zM1r3w1Wp8%@x$7Q3H06j-pmTZ9UieWB9IBld~(xyhL#bBI+K*8tI9FyQB}iXV&x7!
zB)Z$H^<6%P&+es<V&VH1crJ(cUcTt7#9e)<zq&R$E8q3ZWe539-WK~M`2+rLX+`pT
zQaZb)!u{H*AN|RVCm(I!eRqS$3jdw?mPq)H{5O8?TN^Szr?wBgHfhgHT)CjuBC{@e
z at k}l2RQ`h|Z<WAcxxZ2)Mvg>8Uo8#ydNB_g7utf&YJwGkHnD>F>hpZvj-qGmSy0~h
zY9YXx4stFdpA#Lj3UFrg4T1e0%@lN~KxHpy0Q}M at 8lFB4f-F)#;>O<L0c|t>4SfKh
z+U;^1nFsD3ujKACo7OSH2e3`D-eDWN^a#yXtt*f-6tmUil>b)7Ok&7q-z?c)bpZ!E
zyr((0Z8<3lOwzu)L(G_;Ck6f?{HcIjW3&lG1r+{M7hk#1W&b=&I<$qqj9&74ewl29
zna&BJ1%!;qPfK0tpj+|JtODC(_v7m#KTzkdfQKelgyq|d7l|yvGh at 44{%oqt34Qwh
zbw^PbuCYi<MTD{%tKY1+Us9~oAa`E_D>)L<_+`rRk-z%MLz7yJNPBa_pEkh)!^Md9
zC`Q1nxY%h-cUO>#!{Ra=rDtObg9mM`pF+N2A_8U|#9AtWZ)t|ef`99(9x)17H-!9$
zFD`Ch&Ki)hdGTbT-<|nc9j-e6(-K(5))>i!tI&i1o!ox0>nz!Cos#w=tJBJ++#VC}
zsTF*L5<Bv-3HQ+*&}I7x_lKV~-8U&T7Y?l2KeUK%!I#3?x_<Y(C{Wo&Q3q at fkdAMD
z9kjBC%feg9vKQemRzr7W7d%^o)k?v|?X8u%sVL|Of!0!W8*gm6*ebP)B}000ZIX&c
zo(JIt=^%VE&gTj1MW4gA*bC%u%vCTrPVo)Q&xMmm>S89qXFFhHSqRWkI814uw~tc^
z<f0Z}!oQ1er`}Glg951tOFDF1fCU9aKOmF%1xx5+A;WfsszL#FKG8}Ja~`u)s+#!e
zC3pi`=7%tm$H&a`fsSQgi7{TbgS?|>3XqZc&n|HsIHxS7#yoTAiyuDt@<+N3K2W{R
z^ZkRrdcms|^JL`PEaOLibcdV3)ED_g2h{ld2lqe!L5wK=W4VoD=A~AegP-A`wT4^o
zeR{`W*o*V%eTvr{-U_}AgP$~u?!JDSa?hrU2eM_7^KaKJ8eg!5*(~x2`Mvr{1;qMI
zx1XwcSyaB%DvXZA6`D at q?nGC(NMpkSM^z-iZ>_)2nD+!(Fr_p_r^%fNQ#MZ|8=*v#
zBfGkdYR7DTckQJ6>4wL&ek^KtL9|w$gD at TA<m$~$!BYDI at D7A41w1Y3TA9ttS8eQ-
zC0+Yxaq8=gBL-z5?DDz!<k`(Pyt&uld_q>ZN at 7RC&wl7MX at t{#ZNoTHXNAwhwE*R@
zE~WZ%-X$>3phmB-n0Q%eA1oMLm<9fE6LMf#1<+bxRsrz>9`J=FfRQ#*I)@hE3ncL)
z86d+JBE4;Z&T=qR1?sO$oR*A at ycNMCqwKaoYIUd_=DWVkc>xw^S8{G?jAUm2NRVI)
zaVW|i0ALZJL_xp!QN%kruMPe${_#^g^!@7B&;Ed8`&Yq#d$^GQ`+xc3SAX%`pVIB^
z*U#-urZ<ZWCFyw|e|<+h-^YF+?K$l!Zs7v9x>Q;qfUkv^viY|JdCKNL)jn_AJisqK
zrZ*LZe-P5=XIIVFUY7oY|EhfH4$r;LxL)v*4u`zLq!R-(kT>}I=w+5{HcnW?0sD3e
zYH>%a at V6xMcV4KVcPI9nhyi-@90oT>5O20#LlJm19u|V&1unSZvfAjfN?q$o^4xlx
zNZDWQhbE)R>dccpTfN)xeP>@NDLY3bm|vURm6bJ|{n}UMl=HP5Y{@_ZD_cbu=*fT~
z#*?rl at HkBOS;7xgw at 5G7b(Db3r7p>ynmIyK9O|RkL^uljVe=o>1uM6A!3D0<5en$o
z+2vqS0j&j!0$miD1}TFABLgbcF?FAl`CwSBBl;@m$9^aYl{<=TTRcjL8_q{l+_aE|
zz_QHmvQjD+h$H-<av>53Z66l+$?)Z1`OE{VsTE`K1~NZyU>#XC`}mvNAAfVl+Y0}Z
zAM`0o!jc8_IKSz*d*GV2g}3;A>!JLy(}JAc!?vS6%pPlkS8v6~8Q_m|ciJwxYQA`X
zgnuQ&5dM*$?EH#;NJ~!r*BDj#HOjuGKA)goV=!VSMM?msDy`%+)>3AlnIqeh at Zr46
zyQ-??#7qi*k|Eg|L^gG3QrXl~+Vj;r at 17%htTcH#th>(hy#4TE^8!;$=5)|hLqFXs
zRg#ofREox#p1y5^Jbexqf^28AIr`#o$DS7EligDG%(}GC;s|3&?o)MuUlC;buciE-
z=L`G~w|7SVJUJHj^GTl3!2c=`ltAdv0xMrwZ0a&YC=F6l9Um6B6^P(g6!^0=+(l9>
zAF0Ar0JF#7W?EfhS~L4UszyMpBSPMsoHwjPDMiVO807acflv|A2Z?*Xw`Z-22_zSS
zajw3G#Z`-C*FXQhrYnziU-{tc18t~9epKoDE}X(FR#}2k^$GT;HWc=<zCQet<iF`<
z3f4Z&*46KSv-93}cM1QJ{6RjKEdkHlXXEhd<bPYthqRB`lTDl>`A=W6iRaaXJFE at G
z_^G59OF6aioCL*G!4LeWu`Q`yAh-CN60p_q66{|wfZPD)_70i_=FT`z;H&mZ-urG=
ze2Ns=*rK^$;*)z`U!m7-wo)=L-ldOv&t-@;JJj+Ro)^7r at FM^oL8N_h$C at c59<vH5
z>g6e$xG at I80)=ufuE6I at Kpu02wWASM9Qo1+Q3{7^guhJ{u&+1_{+Hq(5oWZnO#~3y
z1$JEc!tw5#0u%v9z~Uw?z!w$~tvw=B-Xd=y6o at SpbEp$vIjSiVEaw+UdUaL7Z)~A%
zgjGii1a0J0DuPuoHVH2^nF$>Tawb-KjFW86ULL`oCOm2i-g)ol<9BaZrV)H#i at J@v
zxZHhspim{w-3>A7i+3Mg#sa((<bVEg+Lb3Tm82sfrY!sVcE*oxbz-d_{c!i=AMRVu
z6UdeFs<NZao>aS3kz-pvmv5+cJRP&Yh6&@}{^>*bCw at MJzlb-1zXpCQo0I~}AIwJc
zlT}v-R!x<+r!GE4kwDwnZsZf)4bk=v%-KA}h(U^mcWNF_zUC7k+#8&1QoM{8-UIyo
zzqsIIeW|*${;pO`(L4N<vd8RoZoQ*=oSvpQXbtuiY8ag`)^kUYZmV9vR>~8=SIjEQ
z-?Ly}!+gJ7wXu4o*nf%q|65QXCR1$(+{mwEFNY--3jaN_*ufUcqW0tts}7C|2nCd`
zWK2uLBmnNizgW8EFv3%+0OuDS(p|hZzb3;g at F*r3$^Y@!x?nMZb~`jgeGohJGVl1=
zhY`_2^p0e>4kVqN`TV2XwxUo$(?v8KiuXUgo4S?H at 455ue|rDDPwvUS(8k9XmEm+B
zRk_vNfv<o1 at XMdvfA2Fv(c2i|OaIZoyZ8C;9LW8!mZ9E(|1Ms4y+ZwrWR6VP1Eb=@
z8Huv`IroU$Tb2*`&v}gHui>E`ezVou3jZznYY~4!zHXnR;pgb>!1zajr6VvKKPJR=
zcoAT)cmbvC{8}N}Jb%Hy4{V`93YHI(X^^4{-e+ae=a1vXu%o;avziMFYP6vhmwaMJ
z{B-lYxd`G1x^>h+Vr5gNN6<d4OdSjO<;enncgp%L)$TL?kJAFLVgc9-0f~SeRs<>8
zsEXjlittnyT)JRl!98wKd|_=fE%&_trJ}`~B7_M9J>y~R(tz-<5rm=@CJ;;b_G7qB
zBQ-MLau`fP9XZVFjN|#m9X&R&hF`{xdiwF at PrrZryFb5Sk5S{Dk1qQtHVn*n1cRcH
zXhbitZ73I^d%~P`6niEK{9y`;aVQMm#R>|}Kfi0eSlQPv|NNOEjwC5*X7zYSIPQ=C
z`QuN2e8B9toCp6Te{!zw#s1m93IC`6`TzFbZ~muue)6Z;!&iQ|DhUBk_?Ips!9aG|
zaC=A0vtmAl|Jm$69{+2ApG^HF?0?Ig`dE;Hpaw+>qSgyy2uTkB(U}yWi$QC>AevLH
zETG+gMOl;`RZe#l4K{@crCFL9KDMu|xlq(YpA|d4J?5AAH~+g);FT;u2kQk%P;p$s
zKIIbADEu>%4zXZlN6fn5PC}z>A&>sf(~bAONY8&=sy_Vs06c#GpWPBai9aRV|HFM<
zbR?<T2FNz468Shs<bMEJsm?$vl|BB#i&UY0|Mzc-2pPZkXOGBdZt{zdZ)?MQC=mLo
zoQj}59>M!r0ua&^4n2O96G3sb?x?V5TT>X9bq8Gd=4TK7>Oa`X`&Q+1W^wJ#lO!C%
z{D(i-`SXAO_+S6$4}brkJp9F9-2c6QeD~=myH7v9^yq`_4){xT=+sK!7a=6`WBkYS
z&9ax!2h7j-7yt1x_D_tTso`^a8%_fM?*RUn{0r$_q==d*D=3oOg4$dX3*La;qyT2`
zX=MSuLtoS<m+u at S$_M(>>~Ys*t6c_v^(_eH4YSrj4Py<}f2)@h1xf|5g1((0wA2Va
zr-NkK`Rc>bq0nJ%AVr9f{W4aJh;@{gR{bc2to at Zmlx)>x%6)O|osae&f3Wl7^Mi-)
zU6e8>enMtiDi!|}SFw-45C7nvm81O|7CKK7^$hP%zPT at p{=xG~pG)wetDd(%`@!vZ
zKe5EHM<&PTimjeSWF~st<gf0M at WYL5XZG-M{Z9pZLC#OVHw|-X&)?W?g9{K>+Ry~-
zC;#AqsFawkFKwS!*k5ZPTf2VpeMR4Ld#a=R=U1M7oF6MQ7V_KpvEbFQah8uC2>d)>
zD_p`pKo0FI3IzWZ^W^ik{U6JJVeq^J%y9Lx(Wd at 5PTK?@|K{>CVm@{2p120tx7xbZ
zjB2EiKbh85lLb}EBJOsRV)|reSUhfTLn|lePiS6HJw6#b{#Jm0*_*#T5&9E&8FHIB
z8sz*M!o6G)Wcq7X3R)>lXU2+oUN#q|V!FyI>15FhFk^dG{UQt#!!oy$c|nqD1Ac~V
z|M&+~K=w05fh#x9V1Y2QRI&TdM3vQUXRwr*`ugqj5z0R$oa2@@J|DhFaI)vbKC6ZW
z)hR~Y1j!FBL*W&a>ell9msb-zP2lu_N_O^`#0k2_`+W%cALqJQfC%08gtn3z>J0>b
zB~%D%S;f=F;WBn7m-vfoY&_PERQw!m8UOKROTD$!bvAW>yP*J?ZvcPepWDmNMFGcH
zJ{9vU6)?j7<p?lE1_g%M|8l5L*jsVoSnv<&J#pbMZdd=?p9a`rL<LA&O at K7$(iAhK
znNJqiV&PA`D1DLUTAYaGRrRNZ7h at OTw_gV7|1#&h`Op5A+&0k<fm0Y>!uu8T#yO5u
zbaaqH6v)GJ?9b`<m?yntj4DCBnxzdRtK?TU>}kdO)A3IX at bWdW@k9vWU(Ntul8M4}
z at 7A)4+QbrtQ?P)UjU7a;BRmVyv{A$huJ}(m#YqI}<osj-(FNo)a0<67BH;W=zB;%m
z=R_Hi7LMAArgerYgD1~!K6>|>q638n*Y94mxNHN;tglT91=>IPTK at li@%-QY^J|~|
zMA~zTytp3LeJt=9d|pcl@;PrlK1<ZI8yzJ%zw at DZsop*cI#Ln~{K5YY<0r0e<9|{C
zg91?mwj-Q3_G&FKT3|7g5(`>cL2VAbk_d;8KU*w^F at G!(=95d at F6S`3^d?Hkmz>`?
z(Rr9GsHCuJNpb!ZQuLUqG1*bEg^c0$erwP77+z%UEb*emk at N@HmJ52emWgW#Y+fCk
zCYP@$o6n+~;nSi!razhZ94Ey~>*Tfo^*s8ko$tST+28Ak6hQ7vVPMYYHBV8)o)pK_
zM<l&Os`<V?1KME9h2G!}Go&HhDu6%`$W4o?*<~-f;N}_SC(vF;lYx8_END^Rm}d at 2
z1o8<QQvf+J&Lc47QM~`Dm1Uc&-mY?+?8(AMR<R<7fw#+;FCY2RSHJUslcEQ^mCY}I
zEFJC+JteF2U;d{LsHdkNT`fZ^i8TCTr8*Y7g-`i7X=ZX;b&~8a%@$J38`kfOTFY_?
z@>OjZ)#2*Ysk5(FOAWa?F at X$8ZeSlFU#&jL{0fp}382SV|1FDXc&70Ga`69uNB&HK
zwaLrB^jJoWr3y|2UUaISNu1 at fe3}<4{CE84xZ at 17Oi~$9wf~nkNp)t7{{PO*e)MDu
zW!234XQ<DBA22R|!5nA at 1rD|aVAtPY#B74hfcJIYHXn(m&N+1Q^w~FDk_+p+?vc at b
zUe&g|mlRG4gYR8C16o`F@?ZQULbbLx!U7l*t^r69A?A?HRUr at y%0w6Tk3fce?yco5
zwh-9A`^i4Q^N4kAf`9*;M9_prce{>E{9m+RI?DaWHy%9ES?Josr#BuwwKQ;3MF#o*
z>_Z&6$71>7cdnPqyyqKTn}XAS`X8Sw<7Ga%Hu+2Us!2QfFJ!8QvD^6YcPu4HYe_;&
za$3 at s!5C#ta+{OhoW>nQ6TlPo9Nq?hj%o6ihKF!In>ubOxf+Cwg|M2m%@86an9nRB
zijQJ)h5x^ev|oezw|sf at +sB#Xb;MwV-^GGL1PbC1wx?JqXk}#c`s8xEb#nPEgc0w~
z`<KS>@`x8}(DiaAMZeQO`oOF>*CJX2_|SiyNhZdiWYMRR at sd-WWYql&o{NztOVxSF
zTvn>TO4F5dXhLKu*;ZxmvVE5)PSM+6m=@3k!{*NRl;;IJcz)rlU+jyh_fnuhrA?IB
z>hP~3UVbtk*}PeBy|#*jNwx%=-+8N4%y^i8|EpvsfW7g<Ke`RWxWJxy_k-IO-~{|(
zRbWT_2Zn$5Pw)M!|McPC{D)7aRaDYZ`YWc^tm=6!e)$TfzN|L8Y5(>A^6nr0(+AA{
zFMj6+-6YQ;39HF6%|2zy7#HB at Lv2@Dm*-OEAA4_VQ6;coWk-FV4F7tLZitLcDF?4J
z^`i at t-g%M$(c3EZr<*JytFFW6^|nrdYiT(j%bXZQcm)@r at mnJKztr1a#)w!=y_NQ2
zVFHnXoCKD-slf}h7;YWp1m_L)BMV`N5Ib2i{$;63Ks}!<L88fWHJwk^hW97?uF3?w
zEt+LQcz|6gc~xjo=3I)BQhDJqc_ at TW*IamB=IHD>Haqeyr5#G#CCbPC0bTYF at N<O4
zM)WTD=|8$Fg`k#$JMAj{qg1j>3L<QYaYyD5>nQm)_mf~?STT`fzzGfJUj+8=eR%~D
zz&<#CPnj^UnG0|!mi$wz44Rf)gL6mur4l$H-x8aGO6hhne%|HPCV|<vfW6K|fBnA(
z`Ct6*!56=K{rOjMPh5j&rzNfG?6hCP-<lf7zcSt{L%1ja|Lqykypdo*zP>#=xm9^r
z?8Dl(U2?Lt#z>6xITr#=+h at YCVeiPDbW6b_5`MCF+~;s%avs6H!RCBUmQwgFT=@T!
z4!-N<Mw%=4(_FcG(jq+w4AfU?Z(be?bti##F=7#64fNKBl-aXDyYu<elvWy2#E81s
zaLut6M`T|c5Z<zVuAS6A%e|$oJQP-3m)>;SNk7435-#gcnDJl8m)!Cuy`P7^za<7D
zi|pAaSMTWi`su!;5uKpe|6I<I995Z7!T*b_i-9iu>(`-wn$-aa#04QoDD4{mti9gd
z{PYJFb0z2BiR&8AcMMeWGUokLv`U&Zvp=N at _x5yF)UGp_C+dCLy|a`8<p0foeD){*
z>hbUW`o^a}xgyC&0|#1zA5pG^Hb+u8($-8yQyRG4i_H)J2Wemx`JYBoSvpZ?krc!{
z%1OzN0<N8?Z^KPy>UZ51O-fxNf;$Z7T;QaDo<F&Abx*z)gSqn!7I5N$f_lR~|GW5;
zxj%6;iwmm;xhuP<kU3ud*S3)s-?es;{jw|l$%kX1PAn9pLyaDRdR3{H=+4QdRBx!q
zXsHnyUSiyF#(7A0nPtUHO&wWG_e=7Nl$xp<9;K$<0NW*nMtfD#X-BdCC4wm{9R?LF
zSFq>hyS+gLcy_LbSxW%=QMIXYl3i86k^B|{EQcBC9sS+x=g6FZf4Jff5ZaX%C0{N@
zVK8qnhagbwg%JX)CfC#8sM@@gj{wGO^>z~;y_bxLlm@)BFTBIN=b{>7>{7G5v*kR)
zp6Lbl|KfjtAM*e7U%&H5|LoB>zr3Ymr{-NRzS=f80`h#QA)9&tzx0*h|J{B0 at ZG>u
ziECN at 0sj;e&g$VXO6z%{LyH<u%?+;%1iBy;pcFijS>V^RNP}+p_kdudZg0{C)?fqe
z{;^LshCPC55h_|BmdpZm=030(Q7*&eHLSg7y!@|0hsDLL{T450*tgJ_abEW=jUOY}
zV+#f9Ovf4R1M2(nd>ifF+-Pq(+%g%GjiOA-f#JNvwuDj@&`q_~7p1+v!7;bG0rqYw
zY}bNaCXIa0qQbd+uHfIxmOmwD6mA6nE-%kI3>5=Orw%5u^fOMVkf7x-=@5?6A*v`~
zWCW4VVS&2E>Yz^kw?`aXD7rwMS2E?GQR;#WWR2{!lTwYY<EXwy-Q$QbZv|n}178fn
z{DbfBe*U{x{^7rQ`e*;`yMOxM=nMBmduRPQwM^GYC)>FEaR1An-uUdt2cP`t3OnlI
z^W833R;@;-=#z<7w3V2 at WovnTH>L)*gg=Kj!apPUZwh!=BpWBl1lm0plHc*f>DM|E
z5(lB`+^fTLH+DWV!^1Ob6NsD-NU9INdp^IRC+@$SZyxkc(4Ej8E||~f=ZVKR)4?11
zW0#+>V$k%N^Z))GCkqPrqUEm$;LGra8RlYJ-F<R~dO$Tx@=37ge%3#(p&is)&w_f3
z_qeOm-LA5 at w2A1h5pFWUPQ$thhDndQ?e0>{9v^}fXDflcT$n8Oxo>VS<HwWob*{mc
zd#1kK#fybj`B*B0VkBtTXf623Ms=P!c=7qQryt9R2JF-#b(T2%TN-n0EfBx>MHB%8
zzC8k!lJL(Qq6kDIwfNKG!zLQa)nz7V-D7B4`@LV>(YN;NU)<6j>bpO?VP)CS{0GkK
zc<1}Sx+|oU_x${p{+wU^US$4<-`^wi^`@`{rfFDr+e0EL*(`s{a1wsFz)wE7^x*kL
zF at MEA)xa6rQ%fHEXOjH$BoDD3uE*+0VS!uZDfbZzdR^6{G3O4n at aGG7C_QGJxXErc
z&;pN}UyG`hjk(0tiO|Gfmk<T at B^@ws`PX^g%Ug~`hlvqO at Grlp=gYr-oB82Sn15Oe
z_MrtPqrJs=OLcRg>N5lCWwE=BZN}tS{Y)C|?y&b$ua=Ok-6SLT;M4$ob&b|Ir9*9Q
zDR@`3A!d9dzq&?eGtFA&3mt%ew=AF50)5Ok?rphUzTI^~zMmlY>4}SZR`<x!FNlN$
z75En_Prs(m4n~1kHA`VpRBChzC7J at v4B%Ha+?4{uBI<rS*=Cm_5Q<D*1R~G{Sv$jm
zPi=vBTSCGZKf7&H>@j|RTOa10<A^!FeEOrSU;gyw2jA?8dCEcRg2ys=l2DNjlaDW2
zfNStebw0RvMmI(KeY|hM_tUHC$ftpAGOKIU3LxYQS+IWw at +bULh(=ftTXcjw2o1)M
zCxrzmiS5?q)%Ju&7!LCJQ|_=QqQaM$iioa}r`C2(FuzLLpYd#h3;s8%VSw{HZ=Lu~
z3$7CW2}O2p=k$j8ouSyIAV!qcnekE6HOv=tX!2?z9RA;?Kp6}KMcXjZl2Mm+$JWpe
zZ^3+mqQi|cG2B?Y58Qnw)8-&a1-H(r!Lh~)`Q0Y{`~__!&soN5h2mr5WW~<RnhP%U
z?d`i-5+J&O=x~!u)Fk(t6@(+60?}j(1|rKl<0+Tl?Sg&2=iaNp)hw$F<7x$vyigf&
z+)p)<RVF{>MQ0V&paSTEsDo!ALMs9k(8B@#d!>LPh(?glY1 at k?LK#KHf at p+lPJ6XA
z!i&$Y={1KD^8oeFe{$V6k$iBKWt?$cP^88&sIbWrvrjfyJH&qXZS%cY(0OiO{`A_{
zzq+b>=lfq?v&d`B*CMYquWD<M)~_Y at 6NrF+W`AO9t=T)2UD0gkg+LuM^56ve68dx0
z$=owS2cn+y+v3HsLE_Q0rgqO;DK9|_$<Bj!KQeDFV8_0i-v-Zg_w+JcnCLL_-$=Qa
z(ZPQ;9ULbe(Fj?0H2P}Sj?<T}zZr476Q13)71SqFrxj%bo{V+7`lj7~v3c+L=KbfJ
z(Cz^xi{O?v`{&a><=QDVcP0(^F1<g!p^_q<e}G?bKC6w8Um64j5_Ze_OLZ71<HyY`
z!#=jX-&=E&hzmEFd&^A@?01>>ajt!Mi at Oo}tClix2`ezd at -b%oCnIz!jcE#`I&3Ns
ziy_1vPNht2p&oQWrRanRMqJ(7XZXd8qWH+_wyJc?oL<Oa9ZjR#RXNfTjtW?U`P#+{
z>^rtYkHA0VGj+)MM!pJVun+ieD(u~q<oT<=di?W0e^_~L*Jb<YeaD at -`RHslw at Gmg
zd(Rjwh?sJwN?9jq7U5s#IR&)yU_rV%r;e|PkXVHL{PSDVB_)jICUco%9i;_ILZ&8&
zKspgb?Vz=qZah0SQ2QmUdWbU at iVg$${)8;^f7PS|k_$RihO>WP0eBMcMZ<pQ%!sy{
z);*LpE*yP1Zc8~wb$=q^dpvkgr~S<a{Jm$J@@YK|Ycy4Enbtse9xL0Ad85u$PRr;u
zv2|{9E7D#`b<C<WYMj$1QHGT{<U5wkXV{DZ)r7`!xT|imv3uDD1o6%~9NMsN<hSK!
z?O609NfE1L(OAU-gUh67_D at P<rs^>H19n0g1(H=SKeK=q;10(Mnut)pnrlE%hYLo$
zgA~xoz_Ey&bz~8tnG`$)VWQQD6CJV`jrNW#WnSI;lZpD|Vp>l;)%PHY&8+>VfRDX;
z=QL+oKl8 at F$SoC+#Qw)g_}Sf0!UOzQTh6ecRX_(NW^E4b)#1uMM=?!lf%G;{p?8V3
zu%I at r@aQWvBy@%aMlph9PTMQT(4nj&3y!da1s$)@%9Vfu<37&7hJO#yOK&E`Jl3Oh
zD5>6-(qKowzkR(T6zLa7?_~;twd})dgcNf;ydiWH^UE`hf5)ev?#iJh*o|b5KesPf
zk|d#>R3zI0zL5{=O6p*~5^2&|8sIl2Yo9-Naobi;S$^sy6GuV#u%L(l`AvbA|Fw+8
zKZ+I9m)b{m4mnejr&_h_R71IP-~78vCD}S7qK<L>##jmeq(d8XfmrZ=XJ-^hKFHqL
zp}<@tT#e(J0&xe*DG&?l#jN%SV7`ekA6Z0BiWFtkN|s|UX^odv{L*O8kp<;n3ij+A
zxpuW-aSVRQhk2hY)RWx)o2Rg#niQS><9~Vg5B|xcU;X8y-}^`R$bY6L at avo`@4~uX
z;~xb`^$aLoY`@}0b&LWjNO;GRY;C@#;UWC*O%w>5E?dMo#0V|WH at D8d@#f!;nN*&g
zuc!ruQVO-{RVxL^rxBR4UV4H=Gyucx%mow3?3exou1hY=+5vzkOX(GKc$+-Lh at +~Z
z&-joso?}Avco``^`09W?V<?wvjh`lO+9jpKVFt{%cz4_}Qb~GBd!h#XeB^a at dabPT
z0r+WYc=<Axf0_)qQ3QT`UgnT_Ns`ErG!d;;fD-t&pz=84Xb1M`J_PEkf at NGY=0#62
zzzT*J@>3Kr*8-#)-mC&{-j5?ND6r51!xow>q9#IdA^FBL9XJRxBcc?V7q?Egp&pG;
z!^`|NfcKt=dKON++9%nwqX)7;eh5`To&-5HaMR4>!6vox)z7Z|>A$`ANB{Kk at Bij;
z8hCz_5+2*YDZ_z(NzNPr4QwwTuydC94+SEtYm|h~-D^8Pc5Iun6V5|{v>ML1BynOd
z>9X?(Bg$p&zEZEh`S(kwBr67ed=Z?uA-e}BOf01t?J0m?=+ONfQsMg at XO>);RYQ0Y
zOX-kmIF1e+<iQ96e5oCL)aI7Fg#{fBySn76_spYPG~)$QblqsuebeeQiB$^jV$!66
zz$t)-_U+5|g;6Du?x31F&Y16sz5%Hi0>xtizi6!2UPh~c<QbMz;1-F6&am$V0<bsf
z_mg1LnvT?<EJ-))9m%(Kvwyby+y0p;(A`kW3oa`tOQ=nORs^F{!~*;s8k&yPN-joG
z0N<n63u at UnmG3=ZIPFFs>rRu&&<?F5q9&p#z+NQZau_4Wd;Fs}%Qb at hj&okUefra%
zT>9((`S~CI%_El2FaP4<SHIlTIKrNW-S;4EJfFz+ziLHK^0UUUN%-8~$R0hlnImKl
zL0vtEFYL%>fSI^^0PIgjT)c at 3#C~I*LeWu8s}0Kvj(g=+Pz`Na;X=3Zw1<&YYA<CL
z$qA{H5B6j_E!2^fm<8)HaTDJr?a=`>Xavv&$Tdp|1sdM|G^vJ>2{3cP8-Ugu7GfVG
zxUuYqt`Qg at _u;;DylugS+43na#K$Dz*)xs+Z*8$9{1Wg4yA&F3>>BL#nj1K*z++(9
zL*K})q!;2vOa5X<tRNI4D|pAE4G9fRuxILcE){%8M1tys{4(#83)iu!{-}IK!G5-R
zmS+Df{D<*V6cGQfa<HKSuHUx%LmUBGK+DijV6uf!;QHMyH^DA!JbKU3u?Is)37Cy$
zJkwW>JoJFPBB+J-V4lk$i4Nuu?w(`bkooOLz(3!C+shD=R#8cAr$710CCg-Np5OnC
z@%R^i@$l!remKByd(baP{_MI!{xgA|e0b^B<FlIQ1HXjlWO{35pOGz1Bm8qeUvFcQ
zC)>lV#)atCQU{0-l~Mmv@?Ysh at V^)dF?mVaw4+Tgbjv~CMFE8c_cyK0xltMd2moq5
zfdcyQc;ey-cb}az2tBYY(KiBmpkAmxq#B$okVo1toaiMT5-g1XPld~p4mrP|!<?Zp
zby+Dc%q%cr&lnf>O2TU^TK%8x2m|(z2FW%oTSLB=1Nn>O{Kh=nCPd);qRcsdu08d#
z8BNB7`C9pkc`u$oXT_>?tj84CPk}qKJ^sQ%r<Cy%`^Q+ozUsf`DzMInY2&|y{~Q7e
z3l3|6go7AD6AR)FxBP#p7O+^b!hah at k@M-=msXaJg#r6Rshv@%8{{t=;d)8h!@T5b
zEqQUl(IT%MqdxiZ-WNZ;`pdt3_^aQ<+W+NWKGL!I7r%b^)i3sR^ROjN?Ty=(k6m$N
z|ER>2ahhh%`)BoY*72;f{RahhH8w8~w-SC@{=3yY+3tktD9*DYLRmz^@>znv)2b_l
zo4M61Zs?Gajkhv3HqT^Ie^r>T$4K21s*PyvnjMs91n%F}%<9=WhTOg98{7l~j2(H<
zOrQzynapENHB6Dxgr`b1jD-WNVb2^#huK(a?J&y3df^~|uPu;Z)c|7z*A|lBdKC8G
z^2}k(4^dB?>PwS#mP+HS6s#egW`WPt0edW1BA=;Q(td?`FZ;H;;e!Z=%7I7lGyd;H
zfz{>+3kr;gP&H0$7L1_i6cM5kViw9bevme;N at hIS8`)0%3_)kq^HmWU at 4&pIx=Cyy
z|H81BGAeIVvRq6ZlK&lv4fIGbFIhr5P%i|3{G;8U{rSUR{>7tT`~_?05!jRYAAdgu
z`@qjf3;1L96Z`w}_kiDc`qAEu|1`SXli{4*Os3%syC^p~;msQ6{Rk4zF?P<6$bYx2
zpS**07OW`H+t|rFjo873`9W~Lnh43nh*y%$rroYIBRxoCPxps9=o`g=6hOlTze^@L
zF32p!0_bHRbu<Yo2=gYz%!OC0hGFnjn3R$K67BF>C-3<v_7BVhJg3!!kwa)7weY_c
z>}NT at W&P`t^)KrJi5gwENo!yqn=|XkwGiLZzS5Xs-a}#S4A at UHpXD=`hLQaJMB4vt
z%(n^Tp8J#er~<A+__lu*R*>A7?Brgfs^c|>zqKtQq>9AoxF}t~A{uc~8^}IS)@2$G
zzPFpIf!aF!^379_+|nK$$U1X>61O4J1MgV=z`s at J&+}wi_5RASW!^AyKKt>F&wp~$
zV(u5eQ^%j&{M~<e at ADtu_}M>x at Z&$RE^Ko;yVP9^>?8KG<9Qt3;q%&QD?R)T$XCuU
zmz({gB`o}>#^K`0x!|j7Uew|#co{*qasdc at F-(D-GK$82*0p4FR`5SGNt`DRHSV;v
zV?BLrwm8Io5=&BXpz(g)@DQO#vaN!D8i6 at l3v)_JnUq@;fzr0xMk?KIxy+$Mbz{pu
z at 3qN0A|SgkSM)*^;Fw?p9f1N6Yb?32rWz(EI+4;P7tBM4<Fo_Jlld+D-+1%2Zw2)V
zbrSO2gl;m)gYb)Tv;<aZ4`Bc317=|`?|!=fEq_dU%&<3!w4Y=?m#RVTNEaA03(`bx
z735#dfgc5G&8uvoV<`}esCG%nE;&6y0qep&CKe<#bnE^ur&x8lW!5`S&)<9Z!owFf
zUD~wKl~t!_pIq&IuaZqv2^EpXpQhy8(VH107H9ptjuTc1<=RO%wR5qW`i!p+jgP**
z4(HjER}Y7;!9K_j>?h=Rw5JT7fWPrC^5X*^zPIhG at 4c(cliO=Eixm0J_)oRVj=I0p
zbQoOGm_QQ+=-;`ee`|!S_Eur9u)mn6cUEX93kuBwq6V-F>I46S1!D)s1m7^CtsrmC
z%WD_UZJg21zn;#vvTJ+B5sbiZLb0Mi`v{I5G(d#1kv4F_O}PJJ!)j57Zn|#K90h2H
zH4hp!ECe(=@WR^^j2tCGbHQKRmG<jIb$Y-*;ct|ApH05}@HXRHK`@psTsonjq;d}z
zpSWnnNL$WZEbzF6Qh8D^Z;<xwVJ%^g2#4&PLVm|KVV>BJI#|HI4gTeEjRgb_e{I-8
zrI#c5I~KZd2ZlPBwu_2i&_uXB_Vt^HP~I^I`QGk>7u%38>n!bXKe^Ha1qSj5_z&b1
z!J*93am;zP$^k|c1#}<EqSZ7)2g_KvVDf%-u<Vz0CK3J)a?Z$~!SD8F<?G2gVW0c<
z{^R^UA^cP4PWbEakbP{c;5W$M8OWElyBKFY7b?Jjb_<KVFg_{2m^vV=xP*~fc4XU=
z0-CL>!-7PI!h(|LwQr029C#lhLNo$`NJ*+=YlO_RK(iu(|Dv$8H`iwy7XYb3jv<2K
zq$5jGWULh*e*qVw8oqk~^9FcR3Ia+5etEme7Mt`!+yU at z^T|mzRhc?(`%yzFEFwZp
z?T+x!0&(ZBVnpns8S{dl%El}5A0clL?^zBj^G3K^^3TKfg~B?YB=9~4_UKU6UMo9C
zBG7q_+>^2n at SHW^H=p_lxoK-7p6?ik6 at l9;I#EKV-QfxUixq()MGB_cBR+bJUbwv)
zNg0|9BpExMZ-4?OUYZCz8Z#;2zqG at Zv>SSVHyz<VmCS6ihYq*^uJ3$!$s8RPgN_I_
zfZVYW-YZ<rH1b(HE%wDcWj^>olHaHKd>7EA&4j<b%NzfW6Zj#&irmLeg{gL|EnQAy
zK}&mpw_+s)#h<XC^!2C|P)2GUAw;OH+ljS>E(p|Hq`ZU(v5r_x-i8RLH(oa(rW{)%
zkXpL&3)>#t+Prz6F4z%jYc6!(+R_N|u$l`TA9TP4p#WTX{`sExIWCBNHWxClG$i2n
zqXyIy4oakGK2xe8B+463z80Ksy$$n?_Ky6J^TGV(6ELr>dg-ZH@?1Hh-jacljEGt+
zj;Jr+ijc2Np$jW%U&}6FZ-D(0`GI<cdcYp|n+3~b%$^=EVZl-h(6)X;$^5p92L5A<
z&J?Jn0S{$7wIiy*`KlC{2vS?Vwwj2hn5ZFw+ATf9f{&AgL;gSg$kttU{M>U!ezh~r
zm*z+x8S3*umKUWm#4y2_njqB;2zRVMv9jXlK6-y!S05*vL=Rr5h}<zJ`5%9<yAu98
zrzYbk;4l0K{GEBytMD8F at igJ+WL^dErz7yE@<uNi+t@)VKnpHZ+R1R-I+WDGf6t4-
z>7Mr(L>R`;x<+WF(D5SgJhNd33VoHuG$ta%iOzq~VloPZpm(mGK!-w|-sZzoK!l9a
z3(2>vI8t*#32MbuQ>p{l<uYjPHC%=P^(l8~p&Akwf`7ulMldfB+H#(4lVmnYK96eK
zyF_o&GXd;<J151hn}vK$j)6U^Mqq!5eBn*7Cq}qej!VEFJAV}gCKaIWBadT_1?7BT
ze{>W<l!~_ouP{;A;pO3>t~PdTS~UOmar2@)<XUBzJd0uqUd$spqBhAb-C<W;m<R9b
z+f$@y#eoHYo%ehaCl|sEZ=;lx=dizNvtu!zCJ|L)1H`s`(%5s`F48f6CgI<bztgVT
z|5b<8sU|UgjH-4_{vpEva(bvXWiX8N9@`j6zRJd4$^YpH2FIC2l=ZL8v+z$xlRUue
zu7(J1drjIkIQCfOcp*a87s|7y5e!QhA;s2Pe$MvglXjpp_{)gEcjhv*%Uq$PM3Y1t
zM2~q)?Jp!m{KXZ=)(esC6Bo*TehnkmxR5uTe{*a1ZJ6&gHpgBOi;<I^6wZLXM4*=T
zk3OhG(2A1zmZPvoiWoTy*f;n|j1n3H_F+MpJ?qEP2x}+H|2^Iiq5_yhp27$L4Mr65
z*R at 7{!bFPLv85M^BXbsg8LsvC`XRph*bi5r&xGQL-CJXgGTEl~))>;BX^NQ_J!zaf
zwk~LcssV4AX*qDgU`i$6pO{Z9{{en7e**t3{OR-rf2zY9FLKe(N9b>C=HdYnn7rd9
z3#9R|C1?bskbf8lLA<C+_7WFLdxYT;ycQxP_+LbbdDBFgZ{3mt at fSLjRE|UA9}!x7
zS-)!{=uPdv(8Rsn*+1JB2w3)xNbM#FKAQ-tV*y53g%NP;l?B!~7Cigx^0Uu|jkMAW
zRn(6fll%M{IS=z~)nl3LeauQ$^X*C0fA`?&CpNI_wErYfv34TWMRLldky{ejCoOH;
zu}`kUzB;SN&MEmnj+3{mv&x(%cWzUIR`>G|L5@%$u%CNm<?bcg5X&cco{;ZBNJ-+q
zPtRidQ at tmTtm%;V2l?KgQR_H8 at kBhGsO*mWO&UM%S&hT7!BXXe8u7}T8i$UOmX!uO
zzEeA-V??yW$KgdAR3=N<_uS89^J`{n$J;_aTRm=X at 8or?@VBK`gCFt_WnNVlx|4*M
zCj}lAcu&qiYXL{*v6sSzSO75b5zfa!Fz5ol00atb!m#WJw at Z)*5ppLh9FhB3#y<?#
zy<NA9oDcr%7I|kXRbl>$g1|TAvihiY6C`6eZ_mfQE1Nd|x_WEV>O2Ff(sjT-YYJ>6
z$JPrb79uN+_EgdZ%UQVhY(raM(%$c#xq$U-p$^@&Nw0{Tmm%T#;d@)Q%Y6J%r3?1D
zNvaD|I)^xGu#b8FGT2v^R15zl@>>@y*LIh45 at rqmUM?swxxka;_tydb74i=?j+4YP
z;5xklM?A8bDS0{J*=jz8o(Hj5-Ja)cwqr&m$@s6e(XwuioJUiXvS at bH5kWGpTpwfq
zx|iqCVGaN8iHijItaJ6y+U}AFrxs)*?9-OdLilGb9{ywSSI*&_aBecCAdcSn?IFSj
zNXSTBvY>IoF2Vv_h=X8n$7DgDkt%6H91(g!B<k<l_C$neVW<Xvkap}ConIZ~&-Wqf
zK$uCwz#BmBul~guZ_djD8#|uas0ga1joi<xTg;@53vXS%elD>`@_%emy(a>{<U-Q{
zq<euzqch>7#8kh$Dzr-*HWw^S8u4UbY`*jH&XbQ~vBPtq-bJ-lG1{1S^rzo0?Q8WU
zhEU9&B=Ah*P^f>2`Q_ZsO3 at U@tAH8&aU#m{B)$7&#Jf#qXROYX8QbB}M1gr;Ule)X
zJT35#4vhtMioODX6$Tu^zzzu}Di|}MuB89HDX^TcNKub(dP(BN`aL?*w$uRlwc!do
z$)}gPY+Y^70y|kOCI0~bHk6)HZ~^>otO@)F{8JQYCc=sZn`!l65w?+!4qy-PV^m_l
zlT-k`;FutiO at VjLvd@|2Yz7OvC3`LSN}rQuaSjp4aL8|sK;T4^4k8o_>JH4(ARGH;
zZ{G~>3=6KDH*u4}zS51(po2N$hZ+~&&W*Z!M$bu?A at 2wi*)YR2Du3A}d1=rQ7NZ at l
z<6E_Kk(TDM<K0g$@gQD&aXHU%0sGkYlT_#OybAVZ at cVZm0*}l)+5Z!k#>5R at EpkmO
zyi3f_a}Uc$y%PKhmbxbe;05vzw&xF7n at sqx;Od0`kR=qGFE!UstwZ>s(J29kj~(x7
z_rGpb{>2Xu5qgxrQ#WA(Je^X-DWObhikfteWgawxzmacltbu>Lyu8uiC-cR2pnbL4
zRUJNO;ScJw at za*i0{>lbrwwNI^X>Q#Q^$aLET94!_A!!Y79 at U>@)q$!_-8M9KXoAC
z8RQJ`BY~6r_9UxXoiQRYm3g)zLh>T?8={gT+uQhY%$SrTA7M#^yyqah{W`j1{?vJQ
zh(N7a@^I7q at 5a_!Y{Cndq}!!GYBEx4)8S?%diGTzf(vtbyap^V at yN!rEAY>lZ&B}M
zEn~UVb=w~I;XMCdCBTl8z at HJt{7yrX^|454TLY at 1q%`0<Ect`;8Ya-?YJql^`A#~s
z_Br#*reS}e59yEUmqj8v?sfm3F(Dkbo$L_q9M?5Tk<MaREnRy#lfpgeAVAB3?y%HX
zGAWnW1O6Hs(i-Mfz@=d|Ba=)Mbv$ManZLbE@)_AakYC^z2#WBxrq881d0HEv^fo^%
z|E1<GI$TW at XvvQP%>tHxl_<`x;wm8x3q%fO=`e{cLPZ^Hoo0tn1h8koRa at qSEvb9+
zzNfayRcRtXGA-bU1(EXwev={jHyKL;O7Ry47tX&CU0I%jBfw*UGZPWc<`b at NY4L{$
zzDO$Ixve*^-rfZDT+h3?o+d(F*jRMF^JqKeT@%8W7EWMa6_G)BX at METtiC1e$;=XZ
zE6n$Up5Om1CqCBaG%}Ap7O3)ub_Du8GtL*2z{x(&1Nn#9l#_`~tpLA7c+a8QN@(TA
zOudPwu3U3_u5Os%=`#hh{DBLqHH#hfG7BOR2ty;}ODFu-WaUI)Ze8$T0h|Q?22FI_
z=-lSf(ss&oOK;m5|CV~;AK)AR?#v4RQ^Dyg at ZT&T{|5^s6;z?FAGla!4HvM$pJ;(%
zL0S_SU^a;GZiFzYixg#nD7e^?{}B8C>Q)nhA}}9<J$6o-HAVQh3A7+WbD?qW=sn)q
zN+B8n3v2&(B%%}|J!;Qu29oagwmic at EO0TMzAO9A?vSk%R<JM8T4KCfS}84Gh;DBy
z*atkGi%@Vq-1R5B{FiSz_n2T~6%kqr|9OGzFg0j_C2XL*2f1w#b3%R=8jQv~`b5;1
zFTccmKzm9i%yCdpc|w}xykdCt1@&mj<oFdA&|$Ek!eWF;6JZF7G8e;$(w==`(KwSP
zYIQ&r9*2LVm?*HDuFgFM{wvR?@!#^FqvvD!zbUd?R^FBWI~zZ<x4SmM0w6b%T2m}=
zjCHg~PA(RNEX at LRz=A3WRV6gi#bY2n$(HU`wLnq3)b0Hf<t!&^#79WXXMb2Y1?&)E
z<qH%MW;Y?Kp=_t7iSum&Awn<D;X<Fm6#G5Jo-CCiVr<)A;7809Xrz>B-~Es3k1H1=
z2hP`UJHbBPr96=)NI$+=rqx4S|Hrk at Ir<VRR><$TXoDYUD}#b^$s1-ylnv%mmw<2N
zIOdYd-JZ>`TvespHQ?J~F^{Z1g88aSkUv~q=|*~Fk|cL8T^Q{wszb<f?(T_%7yk7X
zNn=uM@)8k(|0Gh*L~w`6_Ka|0(hIIIgN98oxhPPI!#r{(x#EY%Pzs>{f{^*}FI?cc
zpa30eO!#Nszm;saDdEjmG~hi5i(ejemH?(@uf{nT&u2_#=NIM=vmjxjH5No8Y}iyf
z7Lm{4S<CbjkXP at P8&&biwu{<jmgi%sS0txo`yc|VJ^{}%^@|9b{tCvk{nK_)bHN;m
zngy*C%4N>KbixL`!02+4(}4x?mt$UTTJw at LqApcAw)+oYN5NUJ&!gdac?z*}^3+P;
z_pw|&&-&>9zU)ltnmpNwI739Q1a)Nr#fc6XC*;?9 at r?7e$$UvJudcZawoW&#9$B+l
zLO36i^XWkc;pc at iI;<_-<?)9XwDA`ulf2q_>E=lTJ3JCksLG~Znry4S!5rL{6WtU5
z_=yE87o!Buf(ylq!fN~ux4M6$d%HH87xS?vzOiWN*B!z?vnM8yZR~2P*E(;zx`54G
z2jI5b1vUw7t}fgL(t-UbGpu~eIj<}R4-=>(r49aNHgfPkwSbUyS;=YQt|zTVVS$xd
zf>%B{3Us{4t)mWlgG)7cwWx7Uu&6ac6JcTMWOcyH9$9TH2VoGQ79aBlq15xWSW|J-
z&fjY;Sju59g&>JdC0Ec(X3`o~2ka}D({jx14H^$4-x&{a?SGGbS(ulh<ZiFE(p?2b
zeYj5pduR#lC%XlteY+=kbTsT8BT>tcVDtt&h4~yKeq*1nEcpU_8#4uXZB@?5uvLO#
zeZ(5K>?ScWX-+IyfilOdw~_$49E?VzrCD4&l^u`OQ6`l_l&_*mCDKc<lgt5U-N058
z`9%vydnSTkk(`7Q*R$<p(w at kC^h>$4MmRD}%;(YaKSk)Zu?w50doH!)PostlGT+i<
zyFb$zS<oId5f`pa-F^@R3uYmY9cBM#+bk4t{xAzh>28yvS>Qco5oJLQzbe5y>OihS
z6QLbacdzUsY3CO$#U9)~FaIIt{elQ0V+?yCf)eiwB3N0=io<GUtu;a`h30}YCY{mk
zIc{APTHmr_js@^f9W-cX*n1+x7gNXcDuI6(`Naap<grknPd4Tov=PgzVBjG)5Q#iE
z-{nh}@9{530iQFc#Yse*g82daG<1#QIbc7T9G;__A8Eh9e2R|sy%(>0CY>W09ajAs
z$@@1m0cJ(e=CM~*uwFZ<NO=SqiUo1*5=jgG`_0$yZFy=WPc6V@^`XM5{WJaWjK+U!
zhcJDLHN{z&xX`2s1!^>Nqp)@uIWfbgQDy9f|3Q`o_}xq=D>9$3B!Qop=XrbHorZr<
z_w%9Amu3NXR~4kLN}cf8UVOxb$HB51;ntdan~#ERkx$1ag?Wu`=@xewBO3pGEEXj3
z(zBooqF;)P^eGm+_(B#(+Gy|#$Qd`&Ev=o=lI>%%wfj~JYE}@9U<oW%eJuH53;C<<
zEZg{T3=ys`h_FaU at d;cBMCjID&4mkya9}AdmPUm6etH7L&Z*U|I=L`)3ieLAGc(BN
z$%OV^7ap?Oo0pJY%?khn_7RLLMjQ|OGT>*}hmyluSizoXg8xd;Quw2A==C<{BkId&
z7Yupu;ylb({%Wn2S5{T2;N9wRA+LLP|3<bzP5;Ix_M|wgz<+>WY+=H`sB)f{Rh4W@
z9oc0oF-m-7)>RrzFE?06?nwmKi2S?N74|HpkeiV8 at l|D_pEgq<P^{6m+3L8X5wOzr
zK)omC^XQX4q*Xw&o!jg=6(J1#K641ew&+^BZJpKF#Hfo&7xd8@>v9 at 9B%J=v9;0RV
zYMPv26NLMy`M89Ab7Ve)1=X1$DMrK*?wB~4Vjp>Hi17IpMiF~5BE_g|Pj|Ibeb_~t
z7vBa{1M))zs-QzXn-w at +#6`V_AexELbm+XSWMmaVCL*L7-F+}Tg62CB6m*3S>&Pdy
zVqKJL+(+O)3VVvfJ6BL|u|IK##16%j#_(zvZ}X+cNc#c%pglseVBeyC2>eOZlk*15
z7wo54O~GC>uC{8%y*)U2J2of4dz8u<WV&XEMHoF-yha5mY+NCK0{?6UVF&BT at Uhgy
z%?BEiXK&V$_5<^62+jEKm#q%y-w3gE+Q|y9yD^Or!S4mp6$|Rut-xRDH;wi+P0?hT
z|8b%KLny)@Tv_{$#+olP|1OheL0?sOMDe^dzJO0e=oKYIXi`vxKGV%_w7dT^>?hT*
zS~3VPDw at PKfd3`}qiCpus%x%B8GF8N+*=`|@)6{xUAt{fL?upKV`a{3L|`vb2k>vw
z8bPS1h!CZa5niMdc#kGUTf%PsLP4)1zvuv;YiJ)Y#g;`I0_NjJ|1VnQL0A4;ltRBV
zMefH~^(>qiIVIse<)g6oX%Y1*=mV07eO4>AK8yO|H6v5?aZH-(Vicglys+C0csGhk
zIYwok_>+9sG=aH$ekJ)28~=@*b^#QwR;R>ECDOyw{=JU#{cJ`!uJB*!E)i(O0?kI;
z|LWK?h|q?R-##O`3BDy8f9hVM$f79#*d~qqC2RVB+vXp~!XEImMqYvcnF2)O_+3$0
zsc~)=gb0sgvGh$~x3FQ<rwH{_>?jl{*C6eS*K|SsDN!RHL|9Ng;{2D5KdSJv%ABJP
zQt%Ryb#S8POsa-UYI%Yj1PJFNAc8bevC|=`>PeNF2oc&B_8u%K$v+XH?4p?nCeu?p
z2E+ACZOd|Q#y at Fb?p6;`e+2ersKhw;T)YSJqgGb17hgRB`@(!fz5mhCSW5dk9}A~|
zkr<<SkUv>C4SVJ~@71lNK<frFDK(-wMZ61nWpSh$vy765^Xcg23@!ja%g2C!!p$vR
zN=1MvT{*hA_^wFowmNEpfO%P#jNdCU28(AF<mWF_<3`Sp&~6Xf4fruSw<|7lIR!p&
zhBOL*v15xY$KAaPgaBiYU0uFU-h2q~y{bDOD}mD|_^%oNz9REAj?)5f{C#7>zl+Zr
zZc_m4b7N~@0afToFCay)v<jLL?{i!T7uNiO!hcxcJryPz+qZdJ^*Bm92oZ^QKe5%g
zhHR<-%GZ@$<Xf1XzEm#sg-h19HW2~Z1vaf9G!gpev__C^Nb+Mr+eMS`A6)2{$67n2
zwDV90{6Y%R5d~w<^d+KxBtnE5Sq4hn<J-VK6od9i^+<d9S4-GKln*pKV$wdIU=?D-
zck5_;HJwQJ(XF%bp;CjtyLauh&UK1+E?(Bug4;EE87<a`XCf%Te6!7=AivyR50rD1
z+ZfodFc0?epp9A)D<PZ~`mSvf$QA7`7SuK8ruki{+V!&&5n|0=J|LzHUfAZ|LFK$j
z0kUve-P^JRT(*#ZpM`nfhnWH<?n4J{JSH|0*&YjL#{6<pmJee3*v5Y-T)_tm2QQ;Q
z(-sj>pfWs at KL(9%QB#1dFx++oaS~QZ9#H}Tf3`i30~bL3*ioy=Nv_}>BSOMTRnPeK
z&u>c9Ov{%lgx5Et)j at xCf3K%3@^J47-l4QCxXr{iD=*G5%fU0Lx8gNN5nR*QI at VEY
zohC!b<Ry4sDfDomLhEbqY*Fu-x}^Xg*iS~z%&C`2`-c4xn1 at 9@{I_ at yBWf2gQmf)Q
z>Bar=kHka at lcVWwo?RO`E8C{zyb|VG`nSPlM<8Qz!<Cbf`Du3aM$G>51w6GYH`Ay`
zEi;RB3HurFGw at tbkLaMC6h^t!7Q!`Y)lgh$9g!bW*ASVI;TdHV1@?mfvo{`DvXnL{
z1&-*5E}#*}5Tk_v767)-$AaZ0x$UmONTetRQp&YNY}(XcI|}3U-srh$b!{FQ{3F7v
zDF8oncdua!J=#_nHCQl(%e*W`EQxR#5k!7EYIKwcV9!C8Q;I3=8W41hBEOe9 at GPhU
zJ~A%o4|)CG=FB^E5Ozic>cHa at GO9Xg)$2)+4jt%)1rgfY1)gYxa+8|{M^QbWIV$Z7
z^JOx{L>VEYS=#qskHLI}E|-SAo4;n^H0(*U5~uah1G6{|0QSN6wk2jaEUVY_5Lx`$
zc(T=%x6PZ*d3J4$|5 at gPQ>_OT_{-o?_~3tWhxkg3TZ)Dbc6P^V at 0)LbX9j#vnubI!
z1R9a~wS`K{=e46B=nU9<PaoZ!Lo65+2n!%zf1x{1wr)Q;f8$~LIW!9pp*V{yc9O~m
z&J=K463wdt_J#Q~mNQbWSVyAXSi}F at C%;1`BTJh-egzw~@$ZhUQ2=<_5X!fw#d;`^
z?1dV)V-anyoPtRaz$Y{sWvf(<P1&M+TUHI5zw;>8h~RFwvw$YWf)lFG%1vez>3y_c
zwT<bEqV~3250#G>eOHviLG+QYV}?nz0|vRE>>ossdfI+5IxKX0-?yR1XSAEN+;*$y
z`2_gF{D_ohC!K_h7Si6^ek<(V?SSF1wD;1<hJ8ULRW<=w+Vp7&csaWdJc~eH!rr5S
zeA~Dy+XQ>UybSxdCA~D at t$WUMe}$sf1q?-M0_ at 2R&!}$TDaha6*@{}ZaPG~wzT;WE
z`L at O&=Oq7h;AO_VD~u(!$O1h&cku~ARv14&WExQrMTh)MilB7CtO!ux*5mWH9-Y7U
zbo>6ZorAllZ$F7H at c24d<X;R}^~oMkk<kSY3YfGa2p2B0+>(lB4J&H_wywB<2qKml
zy|CqN(C*X9q#SJ$sd8gxL7Na01<1 at acr>aH*p|vKjopm&wyGr0<^miNDNTWy2p*R6
z?l$dU=Vjh5V!rkEF?LZq4!D4)9WP}P%hTo~YXpP^Q3qc{9cY^BtA_zrYsw+Ql=JM8
z#7-r at CFkMld0idcMs#3djvv at Q-34y`fPK0AS&(w3kM*Z1ticzMk<~^{`2w+Kza8vL
z?j7=Hhmo^8qTg6B<K+9lf18oR0(|h^mM~5se`TPykHc;W?8|$dCA?bK21%o9BElP|
z+S)0Z&mD$*55l;UqUJJnR<Iv3zmeatZ#(}e?169|`8kW1<|7V&I`Q`9SiP;x`;|E)
zzJ0KH^U;Q#CG7%cJEZJ__smhSH02~q78DI*6XtRBjx9xm*&S$G2<&5lXV0DD!d4nP
zKtAh&jExqM9ut46lUw4iEh#V?4^4sgB7vU~($#|CC&75u2o`XOUvYb9I!qK55RbKv
zG{O^mxsIY;Z(!9x_1xQSsS(OpN=fF36mcRdekJzu?6Yh*UL)#2FTT0{x1?E~EC&QH
zlImH70QNnPMYO-c5s)M8P7*uvf=uW^>XJ1so)6xR^G%p1%#Ro$wKNvHJ<*JBA?<5b
z7qFQ<vyklOhh$evLj20S5c0)OuYB<RZ9C2|`S|{Ko at U>Tl`N_y58$7reT#G;pD{mA
ztadq1BRHn7#rZdBikA6xi%zAMe;xU=z>h86h%J~MlJ<q(l^E||v3@*EgcbPPYnbTJ
zL?9VT)s8hywh*yj__qa~*68;C-L?PA!97(TVSxwN7LgxIM$w!7`L4O`+ctRIRTFe5
zb&ws4*b-om2+aimV={TH?y%2^#E4 at u$+{~S8vHp{D6A<UIY;J9mrW at iY4Eod1lU;+
ztYI!<nZN4rRtpD19ju73JN)SEq_9VryB=L_%OhSXg~>I at iZi#RnPTp at JpVi_pbj_}
z?I}}C${2--e50q_>V~B>h)}7X=eJL6ZJ%TdN&B&gP^-x!|KTX|-Ilt;ZRh09NRxY+
zkply$;c3PwDkBH%do=jH!INsJcxS^N2EP2+0oZFR!S+s~RK at LGb0fc{eIMJfC(LKT
z?x}%ypJ(LcAyy%bNy~i5*QyTk`-ZsZdh5lBINsD5$anoqY5y|J=Vu-nD=r*n!E6z+
zUi|iqB0 at fV%^czm9Gq(vVDDh~H*P-MY$Duy7gG+gpyiU!@qs8%F)P5%SA+unT?w2j
zmYnn4vI0vrILUVd^1}ZL{1I_81zPe<zCg-&ub-p>X2}o#ZHF*Fj5bJS`^R6c5018<
zvpQHApLsMruz=DR4vJ~C2pRE?JA&FqkzXVSiE8i at ctf#>zPkGS^UDO9GRA5$oN7ny
zAo^oFeA-7*sT!9Fe+~j7s40g0AZj7`3GKG<=iBl!*n8)1hyBQqua(V~{Cnp=`r*!J
zzq9}T_qLJOmHX{fYQ=SrM?TlJ{aI)ysT%Y1u|?vV%)j+uM?M3ChbZvKV&TuokA*)O
z`P&IwH6Y#9SyipUejVy%jk`aKk$^zIZN-96X=MwwQ!reEi3RmVVL^%Cp$OPQw;oXh
z+t=@(tG!k)*(}cnVOVgxEFx<MZ4vqHi9eLg3As9?Zv(qZb!eNvV?K^j+QNeKit^GY
zy!C>A**LHG=#c#H$Y;y{A%%(pUCBEO|2B0RX^=lCP|mO0-f_9Mf;v{y>+i!Tnha6@
z?g1G-4N&FZ0tVyX6)uU;u0a(byzRHZKeBYlRP`<jlseeZw}Fpv`?2tpj%_K!^!bf{
zSI9J?aU|d&$hiw|T2lt~S at F4zlQr1V;5a)cP2S?hIv$nwWWM`ZpOc3IPVput$^Z2)
zu7CaW8xP*g7Go{&U1YTwvZvljGJh%X%^TqXc7-(irMg#>_IXX9ZbrVBV*awq-Dk*O
zxcrmMUmzdmW7?IVo{>M$IQgpir9EOH#NV0k)zQh|!u&6jw>$d+OD!;Sp)a6sk?$%T
zj_ByE#~ZrPT)BM;1 at 63afoohlMcOZH$By$j5_705q7Ih&e4pc!JHl_%u6P6$8l}<d
z_h$X8SdeBWQ~-dPOcWR at ASKMTVCQ3(Po%9NnNBy-?>fG48~+^(3Kz0-P_4qWsGlgX
zBm#FJPlpO<bEsI*_;+k7IqDJ*#;hH%U)n`w6!j{zNRhR?ByuA{(cyK51p7JhqA#!V
zvYBcwl7kS9&~{PPCKn63{$-TC$J$9uvYv9PV2-TPo*8Kgp3$+e2le?+nO9(^C82$+
zc(so{*m8OIUz}&>@ICXBvx8)WhT!e;KAVF9FtcYG`FvYv%J?7Adw=z(Xf75}H7bGp
zECF0SDSKf!4!wZ2aBn-X<Gw}am(9?~UxR&Y5+irxRe(QAfoQ|l0(JB`lR_D}&4UY5
zp6AR0lLZCfa8d+UH`qcp3uxp&dT;MxZ4lpkWV4H!1&95DxCVaRbQ7vkL*-6%5(Ofl
zK*os*2c6*c6N8|h5>#Vet#%peYnG2 at b_6E;uUJrA*e2)O7ih8X`8N3b=%w at dQ!@W2
zA`}K at Ex?8kHf}^6kl5`ehqeo&2n#x1+Q|2d;NPQcb>Jq`1seW1vMy}0;G=l%zJjUN
z6r&N8K+*-30Xwol|IV;yg#t`J>j9oX=)8?<-~DvAc2G^Q<^FS<UdgT;(XhIbQ_I_H
z9$=SLcWl^W0c#ET`*Ae#XUpG9$iHw=$E4w`<+)GDPe^l;`7q{2HS%NOm$fq?AN_}8
z>xTsPi+mnpe;P52jbo5MoeXOx7A!rWf&5C^%=|bCgayUB7?#sY8H5Xmw(!RS6nOmJ
z9&<>52n%eSYWXZnX$fm!Uplk-e80j^YYNC}t7T%L(KB$8h-hsoyF^rcflIRfLV*eY
zQW<SNyZ(SQd^4;~K-3%yy`GJt5)PF;rOvn5u_D4D3aq@~TDK}q-MonID0iS0!BQQt
zkb#-mW)S%EmA6qOI^?8>%f~Nu5br?Xv{{h)j^`Wt|F~M8NgYI0Jx-TtEbx2(4zTxR
z-QkA4c?*AMGWNH?{^_SXU?21T`GyNfPng;WgVyW2apmT at qsaHafp;1Co?{FAM!uIv
zkw3%UM@{0ck`@*+pJan=Vaz4+gZAN~E at 6LY)q7xmS-cP;ybAoyi>QE-|Be5?KP4Q7
z7HHK|WGr7e`Ku#uA%Cjki at uY7b%1?vo-I^Pag3jt0$AW=xd{}(Mp)2og^CES!Ea>H
z_MP#uZpB1|vw*~Szy+643enEjHW3(FpePXhE3tG9Yfno0r6I;noTh~W&>j%l+QaIo
zV?Xq>CWcIMybuM7Mp#n>GYd)`Ocqgcd%&ZKFtea15DU7nMCps)F4xguz7~;_dS{8v
zFM at x20Yn{aWH(ZVhhB)FXc3w7!Y-2H3;zha2L6&=FSYF(_U@#o(+_vXyu1CqU)|z~
zC?RZtuOoV!_f2Ydz%8n^+7smYd`mr at f$a(Q3>%qg*^;1S{`}Xml4V!2DIA)~BGaQi
z++M at 7faP%$@~*Iv1`J*vgZ%R18 at k6}eu at 8i{t6b%!oO|ELvgT?u|M!1s4qtNm>nnv
zF(+Z-=Xc1OBH#|&LDe!D<Uf4A`}lpE)a<f|Za&Z__M!k_B^0Hjf{fGpMUhBy>Zlb?
zF6$*M7+FI}mf#M93L^BdWZV=`U))+C^~IM})Y{MGkRj9*=p<W5I7bKZ|3rIgn0Uz-
zyLx+LCIYjE at iT0pb^(eAF^X!RDUl*%Im!YM8tR~Q1a$z?V9(8;y#o{Yry61iolUp@
zRtH}Cjkq9KiauNeL=eKl0 at vL5kGh{++ET%*itK^&%HChXo{`y7uJ)+9`tW_7cy$WB
zB!=%Rx{A<clLLM)u`eM_L-iT?EtJ~4A2`2S);?Fa at So>C$$Y^dnw|VV^c0RmK9vOa
zjeKyLkY7T6Df7$P at pJlz7gQ!AX9oEzCa=POg#SvaO!zM?Fk!o0kHc0F<l{xIx&B)7
z5gqk`Zbd5s%K at BX#t#ZGgiyf11*XxpyAf`CSFu3GmmJ^- at WFyoNhm;EKzMFZS34$a
zC|h8FilL<sB3KFP1bfNt>>tTU*rdRrYEPzo<IOblG06Wcga!Et_yce-JjM>s&Tz)M
z*tI+QIdACRxl{-7f_s$9+%dp%B5WhI(giI-2MZ=QnMTm$wy?d*IE8;kQ3p{?`1mm3
zJqZ?BJCGrG`gI;CYkdFKshA~euwQz<?Z#F-C(pD!+;Wq>?3`@^pR|Acq5a~MKXcvv
zzs{@GZZ5uUm|m48U~iWJ=p9x{?I4-G2C9(}{D%nBXgahN)OP+M*dHhJZJtQc*JG_U
z<wB813{KMmZXA3sGcIpg{R#2|<D;-YRFz-F$V!rr*7Y1?2)Qk}QOkR1zM#O6?Nd+`
z$d`_Qm(7Bi0<ndr`#({DI at qvxyl^PYw-$Kv{$;~U0n*DiPLjs)i;Dsx_ASZ5*eAF=
zFs2BAyz(EC0+D61Vu1uXP+<u9lRUS$1KQgre=_)APyh=;gr-0w|AQI-p+Mn()V8-f
zTn;ZTga`+B;wE at o5Tez8+~H}=EU3j|@8>Pf7SWOgtqz2D*f8WRm*+SiS!UhXDQT#K
zssF8?$u44_w6w3zCsWL46}?H8n#b21NzAkSGNu&Ig0z49;YE>5lAqX_bMsuJ3zkbS
z at m?FQ#`X;R7U_ZgWZv6-GQrHMMuGNzgCplxfy1kjk9s0YkPjyUeGPTsDdbm*+DhgZ
z_&X%~QsfVicLDyY?}`R2Dal`>z%h>S@%W!8&_OnMZeO at TZVrAu*lhk9oz*H}w%F$^
zg`ov_1Z<($Jlp}82Y#)jjaWp_M7eijmLJ3%q6kDRSwvV+6hPZhz^LmH2cr(EeM&jS
zbU|kgSw`m`dK*1rH2%f^`+uk7pg_z2VnNwILkkQFfOoNAfZSXq3)6^3U?#zTjGyCJ
zAhC at swTOlViQ!KUauXrm>!b^ukq$u!uNg(b`Lt!8KPA{p9dHWDm5w at C2&*8x7HS9V
zyI8wSBcc-Ed!%LPS4^E<?L*1=#B-(+=2&+n at EPzMQhv^*C6PV#Smu%E)wwIS{f5}i
zTiUmJj}Ap%E|GsU=CDv4iS1BcTJ?VKSGVczM!p}#%xmMe!81ht<m7g2>KJQ>{9gz5
zk!D=Sfd6<$_!!~ew>L at MjG5@527ho~V+MbO at YHK76sS>FN*tMbbHcVhq~v*=;@vAT
zcx*9A@<aa953gi=WYeX~;za~F!@K?B&iM6 at U5VytwjvP8@qvwh8X at H#l{lIhQR?M&
zcn$?9ks1Flqkyo_YA}cH4<f__>ePsm_Cw$o+Wo2RBJ??y1??9U3oxizF#0^tx}aR|
zvBKq~Urj!Px-lc47Vxrt<T+%@-iuw7R)J}u=_UvE^}L!05&QeG>U;QD(%y))zklAH
zA!M at T(E?xo{Poi<@F$s{q|Jf+D?UHjJF$WQzT%ni?@W8Oy`JT`F7Q_-(^=UI+VWW7
z`{;+eU;XR=7-|Ih3GYPgC)6{IVemBa{kqxUsi=Ok{%XVoGUE9zh%i(@cjZb;mcu5{
zOYHxpFgY|o4*x;^NZKFre at TJnf?wo4`I$}Ra*9c801gXMM`L&0Qx*t_eQ_c9e>Yof
zWOQ^Wdim<vHitB6Dc9IP=HGoti*b5E^04Gd)er`=AM)8k2 at qXWOmqUM&V>c5Ep;aO
zf5;F5fG(2<a_QyP-)-QcP=$~$lRjG-88ZdIyTrbpw7N#~pcgFYKh<%tptjORCGytQ
zuJAu)Pyi&RIL{ulQ4ymEyjw8Be~(fJ at sZ1MZtvg_?A>a&rACm?&SBNVJb`bo8G%#Z
zl5F|f%-VOglS1Z`>hMg+vt$PB%cN<j!#Po(c>+5X-l at OF+Nu2x+CW+Zzt87BN5#n1
ztQ`P9{^6ww`H_&2Z;+*opEm4g at Hgxohp9i=JOlHSQmbD&xd4Y*aL5W;QvrV~{2vB?
zs{qG<|0w<!S|Aiis!|rG2L7?2BFyBH5g1n~+1|CYHYSco at WK{*cGI|u1&&zo;Mt{v
zyXS17vVHk<`^9YzQ3S0E5CNE3@>WIR2RI!W=Z at w7%9l7%2;8k^=7R!0WJ!T`1RUX$
zd7p86(;m<j at e8LsM?_%ulr9MD!vb_j{4 at 28=KhKWtqXj6sIeHX!AT^Ae^S at n1s}@-
zZwN9|JDDZ0cRtzy`^J2;fbmo6z&djJL$>^H*t;75-*Nj$`xl$H9$k=4VeKINdMAxR
zI^HX;<wtd0EqIGgKyo6GTjzj0MrIi{Qj7-R8}=OG82qvSdwHvN9A3rNQoU&FG44aa
ze+Kf!tX$8hKiU7mAKWJTO3o)aq>(>4xht_hBj1D~o5X%i+J)(pgAq;ki2 at 51KpiZ#
zz*0NBY!%>;%wMy7s$&)72l9)s1^y%WKdJ(@rX+tqyrQEix~#~Rppc7Cv=gw|IhIsz
zKe8yc^W=le4Sx7H at zNTB=e4>0rs5iuQ57DmzA12Uk^FBkGq#D=1}A`lD2x%^JOYB<
z(~lOI_K=z>fEUJ00sUqLc?k0x_k}<&nkNc+YlEKhWKEo8`84>~Sx|dq^WSNN0KR1Y
z%!1G`C!?y$W$4`@k7t43GP47E8O$(G>^B!?buhyN#tQbaa17y{J5LhEY0SGDf>-FA
zg#!gs*H1^_UnKV55+5M;gZvASKV*BycD$#W6eZ4MG$WcC<r<_4W0v`l at 1FSZcoWx7
zK6tT}CF2(x?EKGv*B)@m^@a8p`+(gR at +9!#pJ}~HU>nGvp<cG!>f{jMf&I$<IV}Gd
z_&;PCg$Qf%zo_(T at Ym%9{7r#W>>elokHdddK#w^()SsgT910Lw33Zk&w0q?=>lE6B
zMkg(R0$~AjNG&Z}=+c$p7ejK)p@|6S0N!9setPHtj|-WP>MC{ak;&pMQ3TVjnhpLn
z3S at iVP$2k+<eLx3&u#PT_byzywP6iNFr2dx7L@!C!dn+qO+AoPKv?4l3_<&(2$}*;
zy0*H!TvFyQ*9CqHI5Ay77ot$0<o_s4cK6z}AolG7W7A=&aqc1HGw=O&0>1(2-vj$<
zq)-B1i?Ipz6|rx_K7ikR({_X;zqvsj3{yYC|Lruf&kpiIzR%$@pp~ERr at 2lZJ(({;
z>w4b#cw2bq>tEX6vAo4Hco+bl{#-Iv_&<dFmDn%v!#ru35u0IF2b0a;m|r_iTHr{`
zXQ+wRmE$;l<_iDIfM>hCM}+^Y at V{mPU0mURW<fF~$`-<=7(%_lQ+oYPis11 at fDZ*~
z=i=I5GDZ>YaOvQT(2&}w+ImT0I7Q%?=8a7Ox?n{C8%gwD61BsNxw;arXeiLzXkO2J
z9<vtk`7!?Qa*Ep*-e%tPKm^5E#GT;{hgeWJhqnwY5GFzs){bv477Y9+WR$2&t}WFr
z$@9;(y at Un+y;)EZs(1&qK=}f1k at -YDOUYp8*c70Wg=EcHPuXPZ5c?=#Kz at vwg{i|j
zZ6c8E)wc0XC1y%&6rHKTM1e!dw>$HWT8tpypg16(97uGx3Kskd7uLw<Yk&V&x4-%2
z%|<>qu&kXJIql>^a!dZD%s&SCFh9UQ?4Lu>jToOSpS8(EfkS3b_MK^aX*$l}UtoR?
z_>Y*+BJ8s+{ExGLUabN`fvVkuf9k;X_{@`MUh6&1674TVz#~ZKgm-t!9muYc8MO^7
zbBImbPBB59CLzqBi2}5<4}s^`UjKVBv&#a3`KW_R9wr_Oa=YFT7L++O<G=nf>te>G
zs~cN8Cl%{4%-|gC3;&kGY6ROC_{covupmpr4f}|6bF#Np4-L|;F-4HCE-PppTM<kw
zaJAirrO_U7y7Z1G7IY}d;+OcR<`OI=!@op9h^bay5ZgQWzkVtLzrr=3Zn!_}ob4ST
zE~&oxhA4fDdS|?O*gPzsB8!*Qgt3nN8)y8?8Tkiyqnl_VVbw2wdi9%M-sosyd#|7l
z at Xdw5e#*65f<JP;(O46(kE?i$<PYW#j|t2xY!@kxr9l37@%{<_PIg1u<uPb4 at VB|r
zM<<8n^Ahkc at xOBk<uU!j#qCwWd*fdmxRhYRs_hP2BIgmeRYMU#`2LM^Hy)g~I`Hh1
zY&UFk;p{K`X*RF7aJF}F=28}md!;O`qKXC40{tPt4E988Y>cOAftaE~O*`M!)jW&<
z!X@(OdGA;k3S6-jg+!pu2)eYl&F+n1L9Gju{N~PJL3F{rtug}!3w(G{AYQo(KmqH^
z=5-~bSxs0_%EC$Q$Q=6(eVxGUr8h7tdZoY_R-9i1c!uDZGmUeq!9q5`!@u*5eAsT-
zx11;N?I=py66^#%tA at bWLMO1VasJ|o;D3R9WGUn){?93h%wHhCzw6QaqMFH<W9O6k
z(d-PKTKa4ZdpY~LOU%#n2LCt~<`>{!@nVARA^dmFPcdQv>;m~JC`vmt9R_#S-x)Wm
zcn6ITzBc+7%_qMN{$YL!fu^@f$AZvd_yVN at I?sQIg*2#-N9^ek;H3x at fQ$d1 at iZ+E
z#1P6x^EQdrQAC5O{ih%8+c}O?Tolk(d2Cb~TWD<29@~bTpIJb<ns at z3wQ(M{(2V@$
zq_qGQg9V%0Z)x3Td-qlc%>wxEfey_AG@&LU|A+7odfVX*3m&n|aU at PUw3n;chS0Eu
zBK(^LsjLiDjb?#=&nRDDW&t9Yi)T7wfdneYmf>W+y#=#M#f-0}Pk?RPHOQ~6#!s_z
zX4spcLs|Q5o&-7h0{)9r%+!Z`-54N0%C4FNpe_C4>(Z9?`37r86(mz%UDyCWKXK%$
zRSr+(03_zK at Nj#62>GMvAVI=`|4AcE$e(fB6qsL{93sVWFW26 at FsNGNR7`S+;#u{W
zOw>rKLs0`_dqUJ79kTT4IDkj_9-_PSAeW(DTJ<0tE_AhHQ^0u<dm#esYYLF$741)%
z%+BT0?mSyaILN;9mQgwl%wD&4nP(2s6dM<@APp0eIAn{ubFar8sI4361*ir*$cK~W
z0$dgTM-OKZS|Wd*Hw75OKKbI_X%x`OlR8kBDkQsNLDvEl3s8W)G(6uY<ax~dL4j&M
z>`yGBU^r0ky~c(XaI)<mmsc8L at 8OaKW&e23JQzRJ0Vom?*3-e5JdeO{g9p at u{Edcp
z at V{%f*;qu&0r^grwIAfGES{0i$QSna<{9~|cPN*(^U3`8zTAiWFMsa<Dm*@q((?rX
z2rMm-`LW1{{}uQrneP*V{2BI($x-gCotf?S>HNAFZy|rIgr8;mtO#b<v%%)Sn)p%9
z_^~-ZRRJtn&{Znj9JeCr%AKfIDLRPIj=vyAI|7aW9Q8A?8lF_ow40*^*g^^Qms4z$
z&`Sr3p|+r%7eEDk at ZGB#Ou6~iiRcA^Beqb5h9u6Ve`exBLyyF!0_pY$$jqjI2?{)X
zmU2Q8+sPUB%Slr}%YBN#(2XH1xU=QB7ZwNvDWb7PJY`2b+~E#fx^|k6>|;x4C*awG
z<Tt^HS|;F$MBuaM8&`dtDbOsKs5<F_!}#X~z$e_w!y)iV`ydwbFD95t6tq2aao1Ad
zA%X9|;^aa;%2e3Xop0o`_M<rJbF2|WPZ9W2NZ)b{neVpCol_2}SfD{W8$6NT)!5eY
zTY<ltq&2R>h$*WRjAuwMCnTirvfN()OLjp(8%Oe}epyjKiS!KP8RQj}t$(jiaGv~k
zQoC$5%Z|jdi~@5LKXWqFF?0)D9gFpTW at WxDI()YLZ}5YCIR#Web$i=Q5Ra5_GzJAK
zs*tY;{f$nOC|l at yoMOOBM$q-Mk6v5?_)y^Mt6%)y<!^p<?W1oFJPwA?r7LIc!;&CU
zwNv(Awx~<~TPuR{i-8T)86l2C#)bvtaQ3<T&TDas*G5x-3eci0ir~`e%hxQB4HnP^
z{1j$S0znfCFv235z+e^v7V<xqPYo>KGV=($gm7a?0V2ImM*dgKsw>~?BnGWiKuntK
zHJr^T9aRY0GXl0dj2VHyYbOO8*&LGj-Vm8TA>ZOxBj1Oh&l>VwnD7zj!WyOfY$ZZ1
z<nu4~i2agRdHRjswp+$>XT;-CK<3O+>^FYqGc)F$@tHtwA~G4wEAH5`@3}pyR-61P
zdTLmDgTcrL9%S)34f6Te;E&Kg{aR87D;DI<KwjTcsJpDw!fF3*@2$=v0DEt+{f%qb
z+&bwRAk%;OQfW@}KjwVJb at SUR^Ct#>nLxArmzjnIO#yFi at H-L_$5Nnwaz!;u5!f5_
z%7$gKOIOcWAm9SCg1-L;H@^Pm!PQ&m&+oj21>2WTF@(J5{LTql0R9QUSrM4GA^`G~
zP!$E>5c1&)1*%bJmU`Fl?`2a!**>$m6#;vA=gO&>1-n;ISsLRG&lE86lI0)*8AUK5
ze^8)|AKHQ6iXe at 4$0ZB;WRM?%q$}ynf-tvOK<1P1E$|iH19k~^QTo&1?IIz64g6&V
z#St(xQOO#;^fqe&7f;rT*qcM<S3`h!@$X!+pdhdV`3xRQ(kf+uf1rIgIoRf9 at Q)mx
zmm!~3&`_T#<7H#MWiQ})?jYw#V#Adon^)^3!7lp&No$c4?q5oDC-n<B?VPn_LGY<7
z!j_#=WWUFpaHc<MlCJ5s(kE at kN5WGmJ__2$u5*)NgDmKPbgsc03={t%j6hxDg6~yh
zV$<H47tYj4Yuwqi0t-+8^5LHsz!z=`ph+4#lokj_bgf=AbMEUbMpw>T$A!uk;_dG2
z$0OkX5=S3>?*RA>^8ftK+qFh~rrZH>p*Y2{g=*94p$NFf8ZU30fqxR%0&bf_5Y>2d
z-Z-iV1_ch>N!!w$p=h at ENLQOLoMaANzkA`})+X<GtO#T|OxP!R5ey{Jp$h&C;U5Z&
zfKT at 3ppvMbnF31|tSC^MQ7$Qf5k3U+Bk;?%hkTf4sxftf{CN~9uz<{`FT6S6-*}^u
zZ*mCv*Q{}$6V$~`c7B$gKiXmN$R^UWh|Y!l5`d-pE0{SGA*lXsV&8i_+!^zc&sQ$A
zbpc)7YPE{vUYja^yW2^Q@;&^i|B7Or1Y#Y;`aZCc#y}49WHrPNMx>s1puH~pyzdg^
z<c)f>f6;5v|Jr6No2}S*OYgznc&PSX=`*gXbP7Db?O$AH{i6s2-Zcw0eJmmr3n++u
zi?8!bBOI#9+wc*_UPv*4jG-?o0}2hpf-;1Zy10`*p()@4Cx4bzAE%hLzkB7(<M-2k
z>i$#C#+xv|aUsX8owpr#_9g#skk#H#ah%!Y5yz(xS!#0#1%SNKUdB&CF&;O_wT~ci
zVoede_S#q)*sIp%k}-U~wp5!J- at LH*_Vqh5B`$~&L3^S=SrScZkij%kS;-<I>I?kw
ze3!#F@{4`-!*|D~tEBF52g*8{k#F+o`AQMMd`zA5ZxZ;%3iC7gO9ce^yFtF2(8yP2
z806c7VC!xFu77fUT~>|DV7rvC+xuBuzW;nfdzRq;tIPdNBjQq-k|>SAhRLedtC3$G
zZo?jUJXRm&i5CoBhwbZkthVo5yK~{@y&aRI<NDo;#!QOlf|ou)xtwFE2ELD^!Bj|r
zE*97%v=?^C?U?Z;>b-$^L$=c$-e!+2)z(&{jt=L6zj7(*9c^7xWWh%2ZG45rNdBTg
z{MOpf6zs!@9<yG+H7x7kXUYGxF|6Mn7SIJwQVsT7<kZX*z=D|qiR$-KZ{qxcG(~W6
z?-bA1W?PN_a~G^*W*~z0I8x at Ep#{Y7ha$*kyH$x+#{{%DtP|NFBkq6!b)ZPD_M#H)
zu%-xR3NWtpp#nJ+;GVk at h5QG%&Z7Voz)!JQ5RYJ at 029a(0Dl?d)+i8%7aiW&W0m>p
zK)o=J4y7iBVwxxr at Xr)rj}iF8)G5qcy>)UXLc0KvA0I(b^kSOCLOz?nk<Zs~NkqNn
zGsy4N1T}h)|LoIr@)T-#|Enu(o+#y1<4Q5rVw7}>+2eU-{u1yz4~h+Y&lho+&7SyM
zZ@)I<{K}2Zp#9$Vl^cxP)2vE;ad)qrB1vxClXjAEa9avi-gc{~F|(j`0WLHJfO%E~
zpx%}|#4`B%$S89CTvy-+Ht#3-1ACWrcnolsA%q2ab5ui^;-k=~_wdCj6X3TOo9?VK
zz_U~5f&%_3KP_^jb_9;Bh>wu4 at c4=-g7mfx1<F7oOkAWQuPS)d^FK`?I!6L}+l((^
zo;?V*c28WoqBPaQeS|;ocb|Ndi<eHpKP|Aed$MgIEqP(UhxkCB&;g=Z5yUl4R_91d
z>qS+hAeq-$Pz%H;z?4c;;>%G4zV5=MliU;L(2cw5CAXMED at Bluh$sS<8>e_lfyRHK
z{W7I9C@}55?fg6z$PWb!+NYszC*smXOXLrkj~&dO1 at f)IXY&*dd|<w{4CJE#Czsfl
zQ=tbD<TLnH2kTkd2=`EW;%LNmeYwFCvQ+h1TN?fsR&U<lCBuOk_|rE3uARhB+6v^*
z*n9ip<rCg>qXfPMpq>4b7J9It?aU<wS_=&PpNa|~u3N~%JX?sZqJBIc#Oc?CbD8(F
zkBfn1CDk(ITk-?Hh68FV<W`+DYQxZ+tbtP;5c0n|GpFYs3UE4L+b3V#Wvj3>g8xzn
zjelC86+!fZU7?xZr4-z^6h*pwmH=>}!S6^uu#sFpA|!k|C?L-&S^B=Kf}*KpX_vNw
zoT;O+E4r%Ti+d-B7MLi22w1>M#{$v&%h%2m*QE#o{-%<Z0tsC%9t+?+?!Z;`0;z4}
z`hg;iKsy-g6ewGWCgK!R1TrOd_RktX$PMwxC<2y0r}!#G(6&%72Ryz+L8u+$5f9{-
z{GUNy3L=|s*I0qy8!BKskpHmo5B$E-w>x5Db77YGE==7D<hylbevd+adPhKhk|k0L
za2ohkNs##l54Zi?kG{DU!ByhDkRO5XrDGdBCS?0^_^T%iY=A-TF at q!OOK8J$dOI99
z-gxUfTf1*FXs_I~ydul-Oc=5E_SKu4{_D!kI94PH3JA5qztJiHr%W2IggMN^wy!3i
zTjV+hZ;Q~St789$0_R1OB>SBp{~P~RRaccqwL`8Z_Dc$YeQN>7QXhN)w>L}b;0^pa
zCP?mx0)qvh<vlPKI-o#CbV0Zv3dAT%x5LPPEv?{RC!Z{q_1ak(a!~|D0YV#<#>SM@
z%(jgAP$2zv4>rhu6d;6K3jjmwg3WEfh$3)o{1e?#1U4kC_7qD+z)Ej(s7)ZQfw&Oy
zND;7JmMmynC=@6~zz%P7Xj at VHmMeMd8X<O%)p|j6NGyo_w;a|hVz?&E0(-|%U_aD*
z=eJXU{HNN0pYU(wy8xkn_B;x3av{H6-5|emnBjazex&`~6oNrM3xBrr;a^VOz)#^B
zT2{!P5*wDVHxErJe$L+nxrRM^ezsM{<R$oj<IV2~Vqn3=y%Se&p5MQ*i2 at h*-j2+_
zb3y9~*;WJp58 at s8w6{+L{6I at ev*dkg!yeiR`Er3t;FbT|>Y#sD$?a?o<sWAXME+Oh
z9nadtC-brg1<DYjGO{5rEh89p-l9OPposT`M9yBjclxQEga>CIzkewv!R2s4vtoZT
zFZ?qdL9U0p6uZdPmMt{!j{>S(9cKzKii!eJ1W^GsIxbqa(CiL`1t_q+NAC{`*nZS#
z7PzEl0lo;}AVOHM5x>}=2snezPz0<LH7{5IhcSneZ=)jYg!9!7CCZ}5Yp?yiIW9yI
z_?f;d(V_jbG)_4MXG#%J`pG7pDS!o33_@`?X30NI*#G<OhCG_I0Lh=f)>6f+1t<u=
zZkGALALQ?xwuYN!-wN_H?9KT^vF($h9JA-<{Zz!TcEmOrJTULb=7IcKTE at aDfgfxW
z`(?X2W3mK4cCZKH(q2Aau-_%m*I_@}xV=>V`<KM=c0+-keZgeqv2Nho%>LlN<i8t;
z0t5Ud`I-I1KD3`Xmk!db at eXVj83Qd=L?<3N&cDn1xgp-~$UtJ=Fq~Qov<U?Np+Ffz
z?4sEU@~e at htsp;{<fj6RcRrAfbH&j{FtU`d-9PjAgG;xboc-Y+-G&6d>NKc;Llo%n
zkz407#6Qaghzd}>>w=pCj;+E}`?ewgek>@Dcwq~rU&I#KD__Dw7^oZ2SQJncY4!7s
zvs+$DW;kck_;)OiAe5x4LaSOPBj=&L6 at dvN*v}CK+D%?6f<qL at KEIoZK<=DCH|EfV
z-8coT+*SlUJ8_}^x43(2lH)k80Q at FHltdE1-mt&|*u`Zpz+!=2Tu6x~X@#W_B`Yk4
z^dL+2|Nk5QPG)sa?+pMYG8|FS(bLm2)6;cM=E<zA>Ue=^AQ+(#VM6{;JMa(Np~ma`
zbEsReZwZub>wn;n&2Qx2Geu5PWo at XPs)ERj-K|gH9PBkCSzzDAau#5Ld4lJQUq|gP
z!5@&9J-5~Awuy7kmu|usoda(GAPFgf^FG)&{;x9r6p;^VTRWs<@Xzvd0aQ>ghfDK7
zeuV&cTKW9qQ|oNsV2V+XkRayUs)LFh;zY~!*Gehi9XcdJAH%_nf1fXb<Kz5-Z-8ni
zfI6FBLMV&%wX$mbBZw1b7a)|#Y>2}D(b*>aL%w+{&t7k-+kf)n=IO6?p1oQB{onTg
z_&-N<QBk1rzoY;QlhA+;aY+~|`6JLU*wH0J7~xOZ4+ZY8FDZ~Hpx|nof}bQdg|wUE
z&<vC9-tKfzQ9x9f at Q_aM5;EbR7tnYp_{U0HUO<w>)+PBW7Cr{2CjWvxN1&lV1jET)
zStEmAEr)Dd3)OcfBJgL)65tOD9wa&tr*{uBXv9xbKoo4pR2tu06d1`*`>p at Yg0z1P
z1ri9%$Y=9=AYe$H<TjHRosm!NyK>e((aovE)OOF5Y_(7DcTO_BP$~KVrc_M_YfXeU
z`}!gVzjV%{!>w73Uu*L}0{rmLaINrvutEPb7xa&nj&kc>Z1?wzcEJ+(+04ves|#+-
z+q&%Gr^<P?3v=<^@FkSVU+Wnt8O-e*rf;K#5)M})2n+nmIsAtjt3a5(@+E>_`sd}B
zR`R)9(^dB1|K*qWW(pj?+x+AI9{ujGPyg_DzF^6MA%uWm;1C^N4Ii5Y?0*fGjqx&<
z=eFDGM3RFeD6|{zE~8x(h at SD}tO)W>4SgyLN{7Jw41TC^jw9k?$YeiJM!ke@>(6oo
zuBR&KLV-8}@$X3zq`egv at CAAKQdWP>3EdWsz^~^!$ssW*J{AjZx(1;!4^GMojUhi-
zptH(+*39A;N&XKCv<tujQ(A1Vq(Jb0kN3ZM0r?U>OXRoB?=sN}?Gxvg=85cCA|F~B
z_ObbepH+IZs&R5c!5&Bsj_(y94OA`L_ftNz at elqV4*XL-51-tQ=6{xTx@<iTz;9Ur
zgW!?gaSfw2k_+?AQ&&h%f4Ef!rdb1Nz76WQ1H8tpb_B!hPgx)@9d~D_EP9E{aI%|k
z^pNF${^rivSDCk~Q9-@`<Rn7q`P)q{;P-z!z=H4ox<9kPC=#%-y<&s}1=Diq?F-!b
z5^qX|vapFLAQaeHCq;yfO at XjrtZh}J16A;*>wRa*n++03a$W;?E`a?9@=g`nA=Dk0
z7ZNz2j3Xt_5*N6JxC80das=SY5wOxT3y2fx`lTZ%FEGM^DnJSc{YSx(Uty at Rz%P2>
zsn8e;j1dT{3;!sf3NCUhu)j=!SKFX|1qI%D)<tx_e5Sj{@)Q3Umz5+drPDKF)V?wr
z7R!2O?cA4{Am2$IPuwW|*`Bu)LV>)^zFQ4ZO$Ry$JW5(`&^cGZex|@R_<yhRY5gOE
zXDBD)=U{{KVflgI!;jo6zsT%EW?wKoxFlED^aRTl;Ai|7!ikp4ZFO>(lI&32K}F5J
zUvxkV!FE2l0DtQrXA&pCuNgab!+~F;e_Hvx{d!Lm0z?sgz1tKxdcFSbpYB@$z%vxA
zfMMky`eY=Fk~rcQribNCEI>(lDnkJNWAI-s6sQy>3P?`Ee@$smQdEkmBv5Oi2q7(@
zXeJS?6FeG(3kPg9*4P#@T?T at XD9)!_$`RZkggPQ9ue327K~4BY0p)GBD3Bq8uBNkW
z)Pp#S*$ebP3I!sE5)_05<#b$?lvEN#N1KBJH5 at Du;9R17iUmf&S_P3na!?ZmRv~~W
zzz|+AZ*t;2j|==ckZW|l+z!n5Tu9#u`OnW%#?atzsSn$ov1yS2QH^|30V=%fh~^wO
zL6}(vf5!QBJ6GZV8t^ZTKMF+rl=26D+A=n$kWcE1I^i=mKT~lNkK`g7>V at -otFc&O
zQtKs{#}ZXJZP_O8KxPNt&7FL_zP}s+Rd3)p3a2!GGpLMz>_6q-__xyrAI|NZ{mOc_
z+i$<w)4W6h$FZO(u>b0o$D*MC7vPZ!zy7a16AY)gnEq+}*VB=j0<|JKQK~Pp;9<D{
z+(ZW<WCp6LG>an$1r9QwH|jm>C8q4Nw2+`+lhtht&lj-0h5SgMZeVYx9f6Z^p*}bq
z0qE*_Ut8ZCIm8kB^#~yeqLT<A7z+_9B2WuDw9t(>0>MT9FA+gl at G!Nb2v{t*Nr1T?
zv+OI|Im#j0yEW`*3FIaG&oS>Z5LU4U`D%Oi4h>{ymGVrnsp*g|%u7<=)L`@Cfj_Ng
zrn{?EZ)Sb$+cVA^{BCdCd|*@P#U3)eN!p(iIoE;T at k{u>9{fxE+Xwzm^;2b!E8vBE
zqfu at 1Co5eOYU;Ur5bIx@!*(;Gtom%^sR(U;2~O2k8cB at V@8T5m&c;gYY~R044sirP
z-ZH7Th8Rl!#QqolP0J11HD>?CJFA!6fBVfN2Tk35^5Rxez>Zp-o&A@$u;B3ZZL{Ql
z^Oq<8_NP#Q_NeU&{{XybF+L^;>ki;={Br^A1=!v>8~{#JT~v7T1-MWVaU?z90k+2A
zqkw!AJKV5u3e>Ps;$q;3OkCJ~vSnY|wrA4}ZRTkjJ1Gr?@T}P-X!YFcTF)vj;MJ(0
zkmtv^ID(?Uk_BPYo`LeU*lH|@B5D?7WTEE*7!HU>=qiYj{Op0ShkVU&0jd8fFYxXG
zvA6%i(pwt{(zD~;kgj3KvtwTGJb!(U&S|p`|Bd{BzfvM?;bY`WLN^y6%{>>09lW6M
z-vjk4-#U-~j{`sBFYP1eqtL>jTZg(L(CySeSHw{R5G-&>vQ(4>_JwmJactwFrN$nM
zyIt6CA(5m?S_ha(uoOYEHc`HFI0E4tEtIOEhPu$0Q-FDXVc7rMpGf$FdQ+g4&+|81
zY<^MTk+?V+(XV%f14V&*PhVOSX+vJfYTp0;=f`ipy{nQ91?pkJp#W1^Z9#!Z5ihsg
z4T1+fu>eR&Abkyc6ANlSdzJc&N;rZV9ouRh0{^54<&SFuQfQ|ZZp91SsD=@rc~|q6
zlVR94^huDCItM<5#*QO+6i1Nqo>J^wK- at uHhOK?P(1UPZS}2YnBOsG62n%+b1-T3?
zkhA3rjAE}SP#MwT1r{t&^Epw#a=~e}u$4k<tF=VrqX3(4jz61^5yx+KqIo=Y`<=vK
zfYfGx34RCJy&%6<eA46W-amx=?`Qm5^N;N(KT-Viuiquqbwr%2mtB}k0(FMhHrdz0
zX8}I&Ug36<Gz%lYGVfO%Y!{Giyu-YrzA1`{dg5aIs5=%fu=NWALqZRjhx{4*cK8Co
zZu}1le3M1nP+&et5qT~!3YfZu0#ZXyPi~5cjSd{WxveQO5e{6U0Km^Jkn_^Eb9Bjt
z<{{uo%S)t_ACnde1z^CL9Sg_~!EI%VIyL&aSO5_KPXq4?2X62hy~;t{M=cG+i5L#(
z5pAdW1{c5))YiDkr|k$>d#y?)vP}9sK+xCb%gYPos at VJsEWjyV#&K7&weuOjg9S$J
zr0aQs5eO{6j}B1X__uBR6FDvQrHOn5=9zul;Qvk5xoz<4Xvo((L*A7+v)KnTctdl8
zJ}q?&V`<;h_ at B4@gwRJDe}Z43kvr+B;<E8FicH)B`2n*lAG)QDe@(ekz|-RV%B at dD
z-cRTEPLE>rmi`yl!2iUNnGsp7%P+D9lHrt$`JvF>X1})9+s~w!%Jb~L`!<3njSBka
zk+S4D5O73XeDG?Gryz|`;N*+Dw!8oe9G>0wpm5JzP-K3I0s-4-Wp&H;X5>pxaRfa?
z3;FPm1?>ee0 at yTjCrb-uJS(PqH|ZUEhNEHF#T~+7kaN(PeR7w_ at EXkmTfZ*4WCW6-
ztyln|3>n*UG5td#HP at iIfR2khJL;+uq`dU3?lH5{(|czYlvm>K)|&;qfJ`j#qd-`&
zqnz(&uzlGD!1hFe*nc)(OX*HkuG;buG(W-fqKtptu2%cW^JIop1-7=#z8-W?g9K=A
z*w5R43jZGs{&&C5n!o}FPljc388_D!o1ZYet0hMOdnL%<e-MmAf$JT_>f at E_=^q`x
zy9$a;uO9gvQruXx%#T|~^Fwt at pcMr|ghv8_lP~TyBb;`4>Jdomg967lU%b165r?O1
zB7)~{$)Po&@$0Ye%@kmwtI->y4U^sxZrnk90SN?nRZE##vY7&`E^sp1!EpP6jFcrD
zfH(NpdgS!p?pou2NddpLqQIjqvVZHI=O}HophAj{uhB5|^J9!4^>P)JkHLcW1#twY
z3f`348CEb^Acbni#o8BKV8QmzO)i5FiYQV(v15v&F}qJzEO__uc#=Rb-x(Ks!1${a
zLJHA=w+j4NlOeN#{0eoWa0=(K`88mq`{XnIg at m`4kpKPd|9Rv8Uhpr&Ud7c?3Iva0
zm<-E~k*Q7k90<7puBwwTm$wbw`fFp>a4dX7ecmY-;LPy7<|9W$E#7thiUO4^9p8}2
zyeUHPvQ)<gVFS{@%;rNfNuynX|G0pJ!$t(eyzIYyXTrbcv%G-R5RG(nwm}OWoZgll
zJv_T*#mJK{*=Ln(ktkD}DG*gt2rOY=6wt*S0ps5kVEs@)V|$wd$}D|^xo+tmEtF(V
z50j+|$gd<)n3hAd(_Uan0YeO_sJUyVgY_j)!%`dI6i3h_W$g%*9+5yABIr|qL;<Zs
zV>7D!9OV!EB5o!6=A^7xkSL>lfmy~GFODd>XEIl68~6phc(lJ2BD^y|HlhId?^%#-
z_G{EQDbp45Q&_TINzOb7!;Y?p{El!H(#)p*^3L}${^!B}k;><jpGfaB`(3o=^4NTr
zR|-68-~JNwGfD?~3&T#PQUKNPkO_u8$FM_#?AMe-JI-;YRtl=OVTyIvIllg_)%O>J
z#>;vRbzK!j#7b{Gd%X$I5Z)|k{DU|9zj6U}0=`f_&|dgYTyXG`!Cw;yoc=NtfPXAN
z0beUGbnxod$(LK!dAN=Ou-8~ko~P!*=xEiX&<OLXRj!G&c0z&0k`BA&2z(Z3+jK_@
zJ>CMy_<}GZ%(@_i`d~W(pA`;>k%5!_cXC)T96 at U55M*`)Ns!hf^I8<mjzF=cw at 5FJ
zK=fVXajbo_U^O!C1i`WZ+}JMIPef2h#2tLPc1Mu@$t;0rBy^aNPZ6!a-wE at Mm{>o(
zADf?f;?`{3xeWLVNB(jAzt{M8!28wj9`T6^Y*LMUGvf{s9u?#U-qnB~2*oVpNIfG4
z&dVlOuBP+}d;XDa{vHIW`p+rtGi66z!;%HP-|oPVx`*&1fGy)6ku%$WM=)Z>e*@kT
zP{$WrXJ(A-tB3Hve{viC#R!j&Klk$Z?VW at JMS;V!JY=?}F4m)gFL{BO-x;V?|1$>#
z<p^T`YhGbdpq4t3iiFHcjdn&T)|(nZ0gj-xPzSb!>QyY at o9oLbE%ew2t at _RyTLmKZ
z620_sI|4BRI<zA|t0YLDZI=Ge;)Jd$j-ZmINXoEN{<gB0a!|DniP~x7)Tx+-f4XR5
zfi!HUcXeXQN2;lLHt8}%0RCw>0P<a7WML(FbXMjVLKmYK<d at p{7~~_uj|zVChzTC|
z%_Rl-=K&1%G1Se1o%JC?&Yy$Ymz$5|tLC?s`}4thr%v{f_6z9HZeoPkbpc#ME at R;i
zywvr7`1}5h at RB+aLYl>?E>OT}QlPwmp)vMf6H3Fpr0A<JJ at Z94e2XIp1<D=p1>#~s
zvC-jDL9-BAMgdVEldVp88^17SNA}ul9T8^*TEc)4ZVJfQLpa3_sP&OmIN(TAVDc}C
zoe7~81^U?;HMk}m07zO0edg7_<5rR#&G)n;kj<d{VV)xDbkJ}F=+JTT_NUMe{Fta2
z!x9=$J1oDvkioJdLVSUjaR)Wek#^z{l>HM$wgvtL@^_OPAA$$+OYIaXHdLuyu<+Nt
z{PDnV6-R<6vsCUUnbSe;z<-bD25+fAaOLNCG2u3;zbulITyC}1j<@*1>3H6ap_`hQ
z6E)_Y^JEF*GBwiJaY#`!u)@R)g}bZMxLdryhLSeOr|oC6Z$XkA`8G$iA_!7M`74bp
zAv96oSE0a@<E-R^0tYYGIfCOicMw5PY_OOwkQ&OkKmvj5D6nmTI1Lvj3dFOU9Ygtd
zEbMNe0Q_r`qHUZdVSwM6h-_O#h!-f$Y<wz5TJtO^fC%vpHL_+u;lQ at iaZ+tOxV(vA
zD8XC4wtowlu>knle_kLNp>hP3u*&#F$svxwT$NBj;|^#ZMxM}WcTo7BS&&gVL~sJK
za0-Y&Y<|k`lis)JC2NlYMsFMWhc7;?c9vZDX#9T<*-!Sk6)Y<IP=Y6_8^T$8TWE(g
z8e`(Z3YoOZ0 at 54$G$60#Pnnm#le*i at Y`;(aI;h{rIW><jF9n8{RxA0J-k<1 at xHxU~
zi*-GLz3bVi>}dN4+muys2QpN<8*2L->bA4lpN~}7JNyE(fBbfPP~fY$0E!6gA3gtE
znn=m?(dnkSGfv<aXrZSk@}i>P8W&sPKSh;V#$@UFRza620HPpaFvwpnEtEw<;NLxg
zz?BwCv9yIyP#~2FfafJ(=VhK3S!k~e>hJ=!9$g*J;If?x2WTPl>^yXP^%w~INEBaC
za>y^L;L<x<t|3Ea+xmhp at G@6;c0YP)*W9$>2$~39Qu`4_g9tsbE=5y#!5uUa2KY<r
z%*e-rf&A9_zxWqPp3$yJ_00JHk-*RFCx>h(e<66l9?T#-uwNo at vhWUe?(0x0xRyeN
zYWK~yG0(rdfo|h$=-gZT-QB&@cfQHuxR)b8Fg;y2c&-t^;=*(#lR$EXVBgVn$I;DJ
zUf at 6ezM{Yi`DOpTY*9q^YcMYz6bk(EzWq?(mk$nKZJ+>Z&`8f;-?1-E>L3bm1X81>
zNUP*uxPVI(DEwdW0+XSR{9r4Lhe{B&`31kG01`P3;897Zz$(=B5%|Z8VepFr(C($1
zW{VE>{h^ODjRJ54Z2m<Gm`$UIdhLeVB))*TX6oH}J!RW`oa16WsHdPB5gPpSmefh6
zD2bqn2#FC)Wg0Ai^Emoxk+kUin7EWKtT6xo2YzN>9Av<#<J^F}hjIH680Rq$SN;n$
z!hG9#JIsZBIB(>aHOteZ3>n12dqQ!HN%rl`&E2+dn_FGYPPabCeh<^6TPGrbv at 5*G
zg(gA?q0Tkg@&e8 at X!wV}9kdD}buLg~NT8DaQT~aAw=|l^OffAKINf~oESBGszYxJb
z7hpCGEp&J)1io4YwF`(B5C~kNKr~E*Ivbt^e1fh#Y$7)#X_>T)ky(uduoDhUrOpj(
zARiQ{@5#Y_0P9s0Kpc^;FF}M06lh1#zQE6IZspn8n5geUfvIo^3v at Ahx=!zkd at 1~a
z|7p^$mqsgk-~bUy8c|1S73wD71$#Z>%B>l41 at fB$KaBDJSlI*opMI_ueSj(%o=i?J
zkrU((;Xzk`ecSnIn}uIm=QQ#I`&yS{hPn=&@!ycPbOxvg^J(ej+IEkRmoxaS at kJ6_
zl+2wc7_=rrb0I89t?5D<&F-M2nlQm1A>L5tyZ=5YsK?+p1%~CXpqTLo{%!#O>}*q`
zc}O75qfVclZGrv4s|`!~zj%9h at 7d=Z0Segi0<D6|1)K{6-cNxs9jyMBNZCC!k<dN#
z_nQdr3`_==+n-^9^O<YlX@&1dC{UvY_KO11Ji`lQ{rsQKj=({m6%l9o*~Rm)W;zh?
zC?-AS=fFEtfZJtP*@pX%0&EeB<nmmkz?LuY6S6~Hn>XlC(E(kA2!5`H25zcLDTAMI
z=IG_lwaEVn{QrZ>=bCIM at Z;%cw^Bjf$Orxj^TAceu#h%keiZc;^2amL>@yC!&&`>z
zt>$)^`o+OuJ`*$w|95vIfxL`bE+ZK)zqipjz`ZOdn-DK4ls2Bcd at m}pAVT?qj<uTz
zVR45ik!_{i=prG!&h@;HnF7P?H~2g4+4wKz&-lZ(M)RP9h6}_G*gtu3+al*EurD+S
zBMdrQd{_bh6)GtBuYY%?7w`w00)^)!bHI$%Z3 at _dG~6FrsG^AqBoh%|q`({wRLF28
z1yBS0<V87xv3S?{h`>l0LNx`jK$R&9U}E=dUr$E_deB9Nqz~6JRjn2$v{Or3tpWsL
zGLIlqF0;ROMCZ>U=enKu8vh><{E#osWmu#)d&CV|X5`PQn+vcvAG2)~t3JcNrAwvJ
zqF(fxdo_rVLB at K>U>$j295cl&$xF8%zp&-0%f4mc1|A0fr_z at kNpfRF1c{XP2q3X=
z2P+m-m>eSbYtH%hKOaQu&#<42|H}TC?5F%Y;H7+M9`;}J<X_0&JNg_8o}J~P at JFXx
zdq<x=etr`d5(SJw;n at Ww5Gee2EIbLJ@ppze4+X~Tu>3E;3k#}X#+`IO4IVWGb{?*|
zUGC4Y_DS``;14fQ;Q&pQgB3NnGqX+Z`<!rK(n3vv_=5B9pdHHW2zm-|OjaIXlx-Y=
zxH$W%Xi7CvO;0vhCeYTH{ScuaX;kh&_0flsj}box_^%x2{rOKacu~p87|cmd$Kcn&
z3$QnS(H366#2{3fqG2DXSFGd_W8G_R3zgW-eSiU5-30UOkD^2&wwJ=Lu4b$q`{&#3
z8<TBJLQhv3)0w+<L4=5+Sr>KHasQ*ST__?)48Hv4&yQQ at G!bUmGj=BYQ~r#9hq^Qm
zI%uAD$MQdVb`uL=-t*rP;pvOD-NURaxNre81q%Oh0oPK%tiXu^0cQaG<W3<!H92+~
zX|nOCp)nEep^r4ACkp7eb+^~M`G#uk1!f8~Yx*8S?2P|;XVyX-ffG=mS)js)twY1U
znDl$EwK63!<n)BVG(SfG|1z$cmue?!k=vhr6!?D_{C`09$L!~UZo#=2c7^;!R9oO5
z^Vh0EJEFAxAQsqZ<P$S?=$wv;>^rR^Vs at Uaa>I3pxj!htM!7kT*n$6A#3PTk1bfHR
zN4E6{GuyzRbga{~2%(xPvS7p=p<J<G^!1Vj_3z3B%#nMsAiiK{9R+^-mnY|8pX#{L
z7Wk+9CI6**WI at 56{ZIR1$5Y_<Pu5``3l3jx@&X4hH$5GGkqDacf6fJz*DEg&*Ot+-
zxVipofn2J9Tzt^`B#Rls8<S$2(*2rH*^a<O!q!eXvs!NKUQu8f4zw4j6*Zd$PIEpA
zbVtm{zp&Fp&{Mv%DIl4{)a&R1|40qFu%#T*^-dEGpl5<#^{Ds9K)^@g{|7Ms9{|6)
zWmY2N4jIOp(uqk-Ed$#iACi-ut~_KTzcF8bzv*8Ol&n=)X(9g|YXn395A9@?4uWJ`
zH^D(rA6-y2>by^@Adr|1l=HpRHCmkz7U%+yC`KeAaQ%8PXVzG1Ya!o1L=idE2 at oYW
zH5H3TuzXfCeZ&Qd%=fmAzeuIrs(tlP*+aL^d?xc#$shU$1@=$Yj^AtpKNsLRUnp>N
zdItrX1zf;W_<t-BG)Dm|3Uu{CyMSvc(C)9Sy1(G>_{*%lT+l>;eyaPF8ZC!%(F?37
z5RKH1z|MS!b93r=Qy|u<7P7v)-PmORGe#h4Zb!f)FzHNvY+&pEg&ZOYU`F=4=JMx>
zrB1FPfTTb_jQ at WY{Fjh_UiL8i$<&odo<&aC$r<^>;44xk@@Ioj?+t at r**W{I{3Z6=
z)LZPUVGqw`tAl^^w{0%;R&ke(;3Z4g>xBq|+K;;zD2 at GE8^^oq3_-<bga2{|oO|d{
zBgML}iGT~vDI2(LK7z3`N@?~5a4zzSqO*EiJ*1#1ppL@#9KFtzfndIj|A75D`=22&
z%D*W9<j-E;p at o9~cV;b_ue!Z|vSAfs&m7r3^z6mY>aoAZ0(v-Lra<eT-bM%Jf)n7B
z^`5=JM1g>_t$Llt%ywgJJ2h%mpVmTsTK)ZemHXpvxHCF}^=_#5 at e33vQ{z`chs)sa
zBX_npD>Se|dxGL_Bu$iUtvG6 at LV!r(b_90v)~U*^jEm8|uz^7z!2gd7eq}uFMh!Pd
z_GpFtIi(Zi12bL&|BQTkuaV!XK55Ld^JVH&xy>NBGvy`Y<@?T;h0)Q~%YeP{)4iuU
zdh5~tcG|)A;{%JKZPd<P`<ngn?!HuyRC!t`kX+DUO7SJWz^@bw;+p*n0B`}ixc3VQ
znGaH(zKRQq1xc3Ddptry1GAEMH;rC3?6F`n`wu$pKkR?1KqY^aEXE5wIlfKs9KV(S
zkp(q($&v-zhp)D<;OX&tR`YnwW~zv|fd4VKcX9+xfe4|A0%K<cLA6YlzmS{hzf4-F
z^@gOV9Ykm?G;lt=VMV?Z1x7e9X`YJ|sL|wb?RpAq-wiu*!}kb=%<I(rqOJ#nz at q@q
V9kiXq0^rZfEC&?B=tnt%{{!Db7ybYM

literal 0
HcmV?d00001

diff --git a/utests/kernels/compiler_rotate.cl b/utests/kernels/compiler_rotate.cl
new file mode 100644
index 0000000..8d0dd0f
--- /dev/null
+++ b/utests/kernels/compiler_rotate.cl
@@ -0,0 +1,5 @@
+kernel void compiler_rotate(global int *src, global int *dst, global int *y) {
+  int i = get_global_id(0);
+  dst[i] = rotate(src[i], y[i]);
+}
+
diff --git a/utests/kernels/compiler_sampler.cl b/utests/kernels/compiler_sampler.cl
new file mode 100644
index 0000000..149bbf1
--- /dev/null
+++ b/utests/kernels/compiler_sampler.cl
@@ -0,0 +1,25 @@
+/* test OpenCL 1.1 sampler declaration */
+__kernel void compiler_sampler () {
+#define S(A,B,C) CLK_NORMALIZED_COORDS_##A | CLK_ADDRESS_##B | CLK_FILTER_##C
+  const sampler_t \
+    s0 = S(TRUE,REPEAT,NEAREST),
+    s1 = S(TRUE,REPEAT,LINEAR),
+    s2 = S(TRUE,CLAMP,NEAREST),
+    s3 = S(TRUE,CLAMP,LINEAR),
+    s4 = S(TRUE,NONE,NEAREST),
+    s5 = S(TRUE,NONE,LINEAR),
+    s6 = S(TRUE,CLAMP_TO_EDGE,NEAREST),
+    s7 = S(TRUE,CLAMP_TO_EDGE,LINEAR),
+    s8 = S(TRUE,MIRRORED_REPEAT,NEAREST),
+    s9 = S(TRUE,MIRRORED_REPEAT,LINEAR),
+    s10 = S(FALSE,REPEAT,NEAREST),
+    s11 = S(FALSE,REPEAT,LINEAR),
+    s12 = S(FALSE,CLAMP,NEAREST),
+    s13 = S(FALSE,CLAMP,LINEAR),
+    s14 = S(FALSE,NONE,NEAREST),
+    s15 = S(FALSE,NONE,LINEAR),
+    s16 = S(FALSE,CLAMP_TO_EDGE,NEAREST),
+    s17 = S(FALSE,CLAMP_TO_EDGE,LINEAR),
+    s18 = S(FALSE,MIRRORED_REPEAT,NEAREST),
+    s19 = S(FALSE,MIRRORED_REPEAT,LINEAR);
+}
diff --git a/utests/kernels/compiler_saturate.cl b/utests/kernels/compiler_saturate.cl
new file mode 100644
index 0000000..e9ffc4b
--- /dev/null
+++ b/utests/kernels/compiler_saturate.cl
@@ -0,0 +1,16 @@
+#define TEST_TYPE(TYPE)                                                           \
+__kernel void test_##TYPE(__global TYPE *C, __global TYPE *A, __global TYPE *B) { \
+  int id = get_global_id(0);                                                      \
+  C[id] = add_sat(A[id], B[id]);                                                  \
+}
+
+TEST_TYPE(char)
+TEST_TYPE(uchar)
+TEST_TYPE(short)
+TEST_TYPE(ushort)
+TEST_TYPE(int)
+TEST_TYPE(uint)
+//TEST_TYPE(long)
+//TEST_TYPE(ulong)
+
+#undef TEST_TYPE
diff --git a/utests/kernels/compiler_saturate_sub.cl b/utests/kernels/compiler_saturate_sub.cl
new file mode 100644
index 0000000..e20a76f
--- /dev/null
+++ b/utests/kernels/compiler_saturate_sub.cl
@@ -0,0 +1,16 @@
+#define TEST_TYPE(TYPE)                                                           \
+__kernel void test_##TYPE(__global TYPE *C, __global TYPE *A, __global TYPE *B) { \
+  int id = get_global_id(0);                                                      \
+  C[id] = sub_sat(A[id], B[id]);                                                  \
+}
+
+TEST_TYPE(char)
+TEST_TYPE(uchar)
+TEST_TYPE(short)
+TEST_TYPE(ushort)
+TEST_TYPE(int)
+TEST_TYPE(uint)
+//TEST_TYPE(long)
+//TEST_TYPE(ulong)
+
+#undef TEST_TYPE
diff --git a/utests/kernels/compiler_shift_right.cl b/utests/kernels/compiler_shift_right.cl
new file mode 100644
index 0000000..c109170
--- /dev/null
+++ b/utests/kernels/compiler_shift_right.cl
@@ -0,0 +1,4 @@
+kernel void compiler_shift_right(global uint *src, global int *dst) {
+    int i = get_global_id(0);
+    dst[i] = src[i] >> 24;
+}
diff --git a/utests/kernels/compiler_short_scatter.cl b/utests/kernels/compiler_short_scatter.cl
new file mode 100644
index 0000000..7dad029
--- /dev/null
+++ b/utests/kernels/compiler_short_scatter.cl
@@ -0,0 +1,7 @@
+__kernel void
+compiler_short_scatter(__global short *dst)
+{
+  int id = (int) get_global_id(0);
+  dst[id] = (short) id;
+}
+
diff --git a/utests/kernels/compiler_smoothstep.cl b/utests/kernels/compiler_smoothstep.cl
new file mode 100644
index 0000000..d3b7da4
--- /dev/null
+++ b/utests/kernels/compiler_smoothstep.cl
@@ -0,0 +1,4 @@
+kernel void compiler_smoothstep(global float *src1, global float *src2, global float *src3, global float *dst) {
+  int i = get_global_id(0);
+  dst[i] = smoothstep(src1[i], src2[i], src3[i]);
+}
diff --git a/utests/kernels/compiler_step.cl b/utests/kernels/compiler_step.cl
new file mode 100644
index 0000000..ef77f05
--- /dev/null
+++ b/utests/kernels/compiler_step.cl
@@ -0,0 +1,38 @@
+#define COMPILER_STEP_FUNC_N(TYPE, N) \
+    kernel void compiler_step_##TYPE##N ( \
+           global TYPE##N* edge, global TYPE##N* x, global TYPE##N* dst) { \
+        int i = get_global_id(0); \
+        dst[i] = step(edge[i], x[i]);     \
+    }
+
+kernel void compiler_step_float (global float* edge,
+                                 global float* x, global float* dst)
+{
+    int i = get_global_id(0);
+    dst[i] = step(edge[i], x[i]);
+}
+
+COMPILER_STEP_FUNC_N(float, 2)
+COMPILER_STEP_FUNC_N(float, 3)
+COMPILER_STEP_FUNC_N(float, 4)
+COMPILER_STEP_FUNC_N(float, 8)
+COMPILER_STEP_FUNC_N(float, 16)
+
+#define COMPILER_STEPF_FUNC_N(TYPE, N) \
+    kernel void compiler_stepf_##TYPE##N ( \
+           float edge, global TYPE##N* x, global TYPE##N* dst) { \
+        int i = get_global_id(0); \
+        dst[i] = step(edge, x[i]);     \
+    }
+
+kernel void compiler_stepf_float (float edge, global float* x, global float* dst)
+{
+    int i = get_global_id(0);
+    dst[i] = step(edge, x[i]);
+}
+
+COMPILER_STEPF_FUNC_N(float, 2)
+COMPILER_STEPF_FUNC_N(float, 3)
+COMPILER_STEPF_FUNC_N(float, 4)
+COMPILER_STEPF_FUNC_N(float, 8)
+COMPILER_STEPF_FUNC_N(float, 16)
diff --git a/utests/kernels/compiler_structure_attributes.cl b/utests/kernels/compiler_structure_attributes.cl
new file mode 100644
index 0000000..a07dd88
--- /dev/null
+++ b/utests/kernels/compiler_structure_attributes.cl
@@ -0,0 +1,17 @@
+#define X(x, y) x ## y
+#define NAME(x, y) X(x, y)
+#define S struct NAME(s, __LINE__) { \
+  char c;  \
+  int i;   \
+  float f; \
+}
+
+S __attribute__((aligned(16)));
+S __attribute__((aligned));
+S __attribute__((packed));
+S __attribute__((endian(host)));
+S __attribute__((endian(device)));
+S __attribute__((endian));
+
+__kernel void compiler_structure_attributes() {
+}
diff --git a/utests/kernels/compiler_switch.cl b/utests/kernels/compiler_switch.cl
new file mode 100644
index 0000000..c28b431
--- /dev/null
+++ b/utests/kernels/compiler_switch.cl
@@ -0,0 +1,14 @@
+__kernel void compiler_switch(__global int *dst, __global int *src)
+{
+  switch (get_global_id(0)) {
+    case 0: dst[get_global_id(0)] = src[get_global_id(0) + 4]; break;
+    case 1: dst[get_global_id(0)] = src[get_global_id(0) + 14]; break;
+    case 2: dst[get_global_id(0)] = src[get_global_id(0) + 13]; break;
+    case 6: dst[get_global_id(0)] = src[get_global_id(0) + 11]; break;
+    case 7: dst[get_global_id(0)] = src[get_global_id(0) + 10]; break;
+    case 10: dst[get_global_id(0)] = src[get_global_id(0) + 9]; break;
+    case 12: dst[get_global_id(0)] = src[get_global_id(0) + 6]; break;
+    default: dst[get_global_id(0)] = src[get_global_id(0) + 8]; break;
+  }
+}
+
diff --git a/utests/kernels/compiler_type_casting.cl b/utests/kernels/compiler_type_casting.cl
new file mode 100644
index 0000000..3cdb925
--- /dev/null
+++ b/utests/kernels/compiler_type_casting.cl
@@ -0,0 +1,19 @@
+/* test OpenCL 1.1 Conversions & Type Casting Examples (section 6.2) */
+__kernel void compiler_type_casting() {
+  float f = 1.23456789f;
+  float g;
+
+  g = (float)f;
+  g = convert_float(f);
+  g = as_float(f);
+  
+  g = convert_float_rte(f);
+  g = convert_float_rtz(f);
+  g = convert_float_rtp(f);
+  g = convert_float_rtn(f);
+
+  g = convert_float_sat_rte(f);
+  g = convert_float_sat_rtz(f);
+  g = convert_float_sat_rtp(f);
+  g = convert_float_sat_rtn(f);
+}
diff --git a/utests/kernels/compiler_uint16_copy.cl b/utests/kernels/compiler_uint16_copy.cl
new file mode 100644
index 0000000..1072234
--- /dev/null
+++ b/utests/kernels/compiler_uint16_copy.cl
@@ -0,0 +1,8 @@
+__kernel void
+compiler_uint16_copy(__global uint16 *src, __global uint16 *dst)
+{
+  int id = (int)get_global_id(0);
+  dst[id] = src[id];
+}
+
+
diff --git a/utests/kernels/compiler_uint2_copy.cl b/utests/kernels/compiler_uint2_copy.cl
new file mode 100644
index 0000000..7c5c5e3
--- /dev/null
+++ b/utests/kernels/compiler_uint2_copy.cl
@@ -0,0 +1,7 @@
+__kernel void
+compiler_uint2_copy(__global uint2 *src, __global uint2 *dst)
+{
+  int id = (int)get_global_id(0);
+  dst[id] = src[id];
+}
+
diff --git a/utests/kernels/compiler_uint3_copy.cl b/utests/kernels/compiler_uint3_copy.cl
new file mode 100644
index 0000000..7dc71b2
--- /dev/null
+++ b/utests/kernels/compiler_uint3_copy.cl
@@ -0,0 +1,7 @@
+__kernel void
+compiler_uint3_copy(__global uint3 *src, __global uint3 *dst)
+{
+  int id = (int)get_global_id(0);
+  dst[id] = src[id];
+}
+
diff --git a/utests/kernels/compiler_uint3_unaligned_copy.cl b/utests/kernels/compiler_uint3_unaligned_copy.cl
new file mode 100644
index 0000000..a50f0ab
--- /dev/null
+++ b/utests/kernels/compiler_uint3_unaligned_copy.cl
@@ -0,0 +1,8 @@
+__kernel void
+compiler_uint3_unaligned_copy(__global uint *src, __global uint *dst)
+{
+  const int id = (int)get_global_id(0);
+  const uint3 from = vload3(id, src);
+  vstore3(from, id, dst);
+}
+
diff --git a/utests/kernels/compiler_uint8_copy.cl b/utests/kernels/compiler_uint8_copy.cl
new file mode 100644
index 0000000..9eee538
--- /dev/null
+++ b/utests/kernels/compiler_uint8_copy.cl
@@ -0,0 +1,7 @@
+__kernel void
+compiler_uint8_copy(__global uint8 *src, __global uint8 *dst)
+{
+  int id = (int)get_global_id(0);
+  dst[id] = src[id];
+}
+
diff --git a/utests/kernels/compiler_unstructured_branch0.cl b/utests/kernels/compiler_unstructured_branch0.cl
new file mode 100644
index 0000000..66da6e0
--- /dev/null
+++ b/utests/kernels/compiler_unstructured_branch0.cl
@@ -0,0 +1,14 @@
+__kernel void
+compiler_unstructured_branch0(__global int *src, __global int *dst)
+{
+  int id = (int)get_global_id(0);
+  dst[id] = src[id];
+  if (dst[id] >= 0) goto label;
+
+  do {
+    dst[id] = 1;
+  label:
+    id += get_local_size(0);
+  } while (id < 32);
+}
+
diff --git a/utests/kernels/compiler_unstructured_branch1.cl b/utests/kernels/compiler_unstructured_branch1.cl
new file mode 100644
index 0000000..fb937e0
--- /dev/null
+++ b/utests/kernels/compiler_unstructured_branch1.cl
@@ -0,0 +1,14 @@
+__kernel void
+compiler_unstructured_branch1(__global int *src, __global int *dst)
+{
+  int id = (int)get_global_id(0);
+  dst[id] = src[id];
+  if (dst[id] >= 0) goto label1;
+  dst[id] = 1;
+  if (src[id] <= 2) goto label2;
+  label1:
+  dst[id] -= 2;
+  label2:
+  dst[id] += 2;
+}
+
diff --git a/utests/kernels/compiler_unstructured_branch2.cl b/utests/kernels/compiler_unstructured_branch2.cl
new file mode 100644
index 0000000..546f253
--- /dev/null
+++ b/utests/kernels/compiler_unstructured_branch2.cl
@@ -0,0 +1,18 @@
+__kernel void
+compiler_unstructured_branch2(__global int *src, __global int *dst)
+{
+  int id = (int)get_global_id(0);
+  dst[id] = src[id];
+  if (dst[id] < 0) goto label1;
+  dst[id] = 1;
+  if (dst[id] > src[id]) goto label3;
+  dst[id]++;
+  if (src[id] <= 2) goto label2;
+  label1:
+  dst[id] -= 2;
+  label2:
+  dst[id] += 2;
+  label3:
+  dst[id] *= 3;
+}
+
diff --git a/utests/kernels/compiler_unstructured_branch3.cl b/utests/kernels/compiler_unstructured_branch3.cl
new file mode 100644
index 0000000..67b4761
--- /dev/null
+++ b/utests/kernels/compiler_unstructured_branch3.cl
@@ -0,0 +1,16 @@
+__kernel void
+compiler_unstructured_branch3(__global int *src, __global int *dst)
+{
+  int id = (int)get_global_id(0);
+  dst[id] = src[id];
+  if (dst[id] >= 2) goto label1;
+  dst[id] = 1;
+  if (src[id] < 2) goto label2;
+  dst[id]--;
+  label1:
+  dst[id] -= 2;
+  label2:
+  dst[id] += 2;
+}
+
+
diff --git a/utests/kernels/compiler_upsample_int.cl b/utests/kernels/compiler_upsample_int.cl
new file mode 100644
index 0000000..d7945b5
--- /dev/null
+++ b/utests/kernels/compiler_upsample_int.cl
@@ -0,0 +1,4 @@
+kernel void compiler_upsample_int(global short *src1, global ushort *src2, global int *dst) {
+  int i = get_global_id(0);
+  dst[i] = upsample(src1[i], src2[i]);
+}
diff --git a/utests/kernels/compiler_upsample_long.cl b/utests/kernels/compiler_upsample_long.cl
new file mode 100644
index 0000000..8f914e4
--- /dev/null
+++ b/utests/kernels/compiler_upsample_long.cl
@@ -0,0 +1,4 @@
+kernel void compiler_upsample_long(global int *src1, global uint *src2, global long *dst) {
+  int i = get_global_id(0);
+  dst[i] = upsample(src1[i], src2[i]);
+}
diff --git a/utests/kernels/compiler_vect_compare.cl b/utests/kernels/compiler_vect_compare.cl
new file mode 100644
index 0000000..ae43ec6
--- /dev/null
+++ b/utests/kernels/compiler_vect_compare.cl
@@ -0,0 +1,7 @@
+__kernel void
+compiler_vect_compare(__global int4 *src, __global int4 *dst)
+{
+  int4 test = (int4)(0,0,0,0);
+
+  dst[get_global_id(0)] = test < src[get_global_id(0)];
+}
diff --git a/utests/kernels/compiler_vector_inc.cl b/utests/kernels/compiler_vector_inc.cl
new file mode 100644
index 0000000..548dcb4
--- /dev/null
+++ b/utests/kernels/compiler_vector_inc.cl
@@ -0,0 +1,13 @@
+kernel void compiler_vector_inc(global char *dst, global char *src) {
+    size_t i = get_global_id(0);
+    char2 dst2 = vload2(i, dst);
+    if (src[i] == 0)
+      dst2++;
+    else if(src[i] == 1)
+      ++dst2;
+    else if(src[i] == 2)
+      dst2--;
+    else
+      --dst2;
+    vstore2(dst2, i, dst);
+}
diff --git a/utests/kernels/compiler_vector_load_store.cl b/utests/kernels/compiler_vector_load_store.cl
new file mode 100644
index 0000000..964f5e7
--- /dev/null
+++ b/utests/kernels/compiler_vector_load_store.cl
@@ -0,0 +1,40 @@
+/* test OpenCL 1.1 Vector Data Load/Store Functions (section 6.11.7) */
+#pragma OPENCL EXTENSION cl_khr_fp64 : enable
+#define OFFSET2(type)  (type ##2) {(type)1, (type)2}
+#define OFFSET3(type)  (type ##3) {(type)1, (type)2, (type)3}
+#define OFFSET4(type)  (type ##4) {(type)1, (type)2, (type)3, (type)4}
+#define OFFSET8(type)  (type ##8) {(type)1, (type)2, (type)3, (type)4, (type)5, (type)6, (type)7, (type)8}
+#define OFFSET16(type)  (type ##16)  {(type)1, (type)2, (type)3, (type)4, (type)5, (type)6, (type)7, (type)8, (type)9, (type)10, (type)11, (type)12, (type)13, (type)14, (type)15, (type)16}
+
+#define  TEST_TYPE(type, n) \
+__kernel void test_##type ##n(__global type *pin, \
+                            __global type *pout)  \
+{\
+  int x = get_global_id(0); \
+  type ##n value; \
+  value = vload ##n(x, pin); \
+  value += OFFSET ##n(type); \
+  vstore ##n(value, x, pout); \
+}
+
+#define TEST_ALL_TYPE(n) \
+  TEST_TYPE(char,n)  \
+  TEST_TYPE(uchar,n) \
+  TEST_TYPE(short,n) \
+  TEST_TYPE(ushort,n)\
+  TEST_TYPE(int,n)   \
+  TEST_TYPE(uint,n)  \
+  TEST_TYPE(float,n) \
+  TEST_TYPE(double,n)\
+  TEST_TYPE(long,n)  \
+  TEST_TYPE(ulong,n)
+
+#if 0
+  TEST_TYPE(half,n)
+#endif
+
+TEST_ALL_TYPE(2)
+TEST_ALL_TYPE(3)
+TEST_ALL_TYPE(4)
+TEST_ALL_TYPE(8)
+TEST_ALL_TYPE(16)
diff --git a/utests/kernels/compiler_volatile.cl b/utests/kernels/compiler_volatile.cl
new file mode 100644
index 0000000..84f7228
--- /dev/null
+++ b/utests/kernels/compiler_volatile.cl
@@ -0,0 +1,4 @@
+__kernel void compiler_volatile(__global int *dst, __local volatile int *hop) {
+  hop[get_global_id(0)] = get_local_id(1);
+  dst[get_global_id(0)] = hop[get_local_id(0)];
+}
diff --git a/utests/kernels/compiler_vote_all.cl b/utests/kernels/compiler_vote_all.cl
new file mode 100644
index 0000000..1918c1c
--- /dev/null
+++ b/utests/kernels/compiler_vote_all.cl
@@ -0,0 +1,10 @@
+__kernel void
+compiler_vote_all(__global uint *src, __global uint *dst)
+{
+  int id = (int)get_global_id(0);
+  if (__gen_ocl_all(id > 8))
+    dst[id] = src[id];
+  else
+    dst[id] = 0;
+}
+
diff --git a/utests/kernels/compiler_vote_any.cl b/utests/kernels/compiler_vote_any.cl
new file mode 100644
index 0000000..0a81e89
--- /dev/null
+++ b/utests/kernels/compiler_vote_any.cl
@@ -0,0 +1,10 @@
+__kernel void
+compiler_vote_any(__global uint *src, __global uint *dst)
+{
+  int id = (int)get_global_id(0);
+  if (__gen_ocl_any(id > 6))
+    dst[id] = src[id];
+  else
+    dst[id] = 0;
+}
+
diff --git a/utests/kernels/compiler_workitem_builtin.cl b/utests/kernels/compiler_workitem_builtin.cl
new file mode 100644
index 0000000..b01dd7d
--- /dev/null
+++ b/utests/kernels/compiler_workitem_builtin.cl
@@ -0,0 +1,12 @@
+/* test case for OpenCL 1.1 work-item built-in functions */
+__kernel void compiler_workitem_builtin()
+{
+  uint x = get_work_dim();
+  size_t y = get_global_size(0);
+  y = get_global_id(0);
+  y = get_local_size(0);
+  y = get_local_id(0);
+  y = get_num_groups(0);
+  y = get_group_id(0);
+  y = get_global_offset(0);
+}
diff --git a/utests/kernels/compiler_write_only_bytes.cl b/utests/kernels/compiler_write_only_bytes.cl
new file mode 100644
index 0000000..555a9dc
--- /dev/null
+++ b/utests/kernels/compiler_write_only_bytes.cl
@@ -0,0 +1,6 @@
+__kernel void
+compiler_write_only_bytes(__global char *dst)
+{
+    int id = (int)get_global_id(0);
+    dst[id] = 2;
+}
diff --git a/utests/kernels/compiler_write_only_shorts.cl b/utests/kernels/compiler_write_only_shorts.cl
new file mode 100644
index 0000000..205634d
--- /dev/null
+++ b/utests/kernels/compiler_write_only_shorts.cl
@@ -0,0 +1,6 @@
+__kernel void
+compiler_write_only_shorts(__global short *dst)
+{
+    int id = (int)get_global_id(0);
+    dst[id] = 2;
+}
diff --git a/utests/kernels/empty.cl b/utests/kernels/empty.cl
new file mode 100644
index 0000000..fd6f298
--- /dev/null
+++ b/utests/kernels/empty.cl
@@ -0,0 +1 @@
+__kernel void empty() {}
diff --git a/utests/kernels/lenna128x128.bmp b/utests/kernels/lenna128x128.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..c3d9c46078ae35590c987f1aa4525791c290b3f5
GIT binary patch
literal 49206
zcmZYI+sp1%wZL)r^}gIU`z{a#%@i##3<@$rg!DqYD7BJEqcTOoV;+`vGQ$&PTMM&;
zomR9d3UBg4Oba5c6|uaCb=5zzKXZQHckD+SuxH~ppZS|}jPDq8%=tX;s(txYm%eh=
zmP at tg`M(oK|Mwqf{Wp!ga at JY@^`HIUe%4%fEcf4k|98Lp-QWK9x8M8T_in!V=Buu{
z>Zzxm`pHjz^1oYt^{Zd`&lg^J;nSb~^wn2iecpNJz2`medEfiqchN-`U2 at 4K^h+<j
z)Fb`f?|%0cS6uPI4}S1n?|PR<o$q+ZJ3jp359 at j7JKuTv<(EJ5$RjVk^wRa$U;nw!
zea--4HgBDO{`qI0eYW=f?|;A5*>LNvx88mC-M8Fwi%vcCuYUEbU-`;cnEJ$)Z+zn$
z{`1jCAEjvP)EcA5;HRH{+T*vr^(~+B>wmWV at P|L-ORl}V<<(bT{l`E4aq85mzyJO3
zf8BEC%o$)f`}xm*o+T8I*IaYWl~-QLJO&dJzW(~_FTVI9ciw#SO*(^p`hgF8fVKQJ
z*z2Shb()0nCafp-jr5jIhW+k$zY_wV8u{dtPyXy at Kl{yZep3i2`0FQdVa|pNx6rXQ
zn<uC-7mgm!Ip-Xc`&2lL=g7CWQ1H=X<OLU8fUr>FuZP0akAM8*Ea%aE_ua=H{h#^F
zXBdwpK{&|tXP$Xx+B(f#XgvA|f4&%o*!REx{X_D<|NZa(^rt`l at sEG}+m_R(Pyg#*
z|I+H`CIi at s44p}MvX*(A(wbSU1kkkj6Nni3-uJ%uLm&E3<F#fmk9X-5VvGs#DU`e>
zRzV(rvl&Ug_O-7?UTfxG{_>Z?q2CN2`N&7Sj!D>Ag}k%}Sv1Rb0|Y`pQ*D8B&plVp
zg9*RPw~3fx-OSJuj{;#@I{r+$<BmHpzxUpIIi=HHh%no at Kgo|RnanqacqGC9&Ue0J
zcS|t*fANc72mxoI1E0Vc|B_z_xCs$-+C)!@$_(6e-gVbqC%4!FUc}!PP&8yq{EcZI
z#AXu8ZMWT~Et*0J4sK|a|Lkmj#$ygXQwhaFXc&3J4L6{KGqy!R2$*;A#TR2P5O#z)
zwX78*OCTS7Jq8pbgIO#8bsBFrQc!XMfACeFhaP&!Ld<3Wwq<xBV5jt!@Fz~32z$xD
z=s)p9`t#2}&oA)#2)=XzpHuPw%U}L7`H!UHgBvMnSvbM~SwSpq&c`2roI>oEfBy5I
z-Ze9WC6Ct)CKTf*1bWg<&TIVn%QaNl!#u9xZ$&v%{ww~b)yn at n@4ORy`R^64N0@>n
z at u<D_+G~AEk^B_%qh00iQ>cZ&M-t4sO at +MVHv^MQnD6Qj;Sub52m|<wvo^xj7WrSl
z&J at L8^7DcOAO9cx;0N-bU--ZB$}8G(9)F6;6MvLIkWqsXG&Vf=;DaV7=6v?qXVr>w
z!-U?o1x)zx!w&-<`A>Y}6J{VWukBNWofPFiM6iQTEMaMo6$-#RdChMxIKDVrs>^Bu
zS4zO)wFQ_>48u9diVxuOUu%qhlT&cEBE=TKA6`9#J$lp}i4=b!uory9ukt_OP^{AP
z%rleo8_%QQQyzQlF(DwGyfQ!dGA;NjKj6WqRQx&XT?-MctZPML3E02+&2JWkeU5$G
zLV(k~ZVPlG3yK#RPbm1C3jFvttyT!|N#f5ilXDY)GqVJL<mJCu$RaL?4(zdou51r`
zNVOhKV&(>DiJ%zl{v++31$Kmpcx1ehO{=}^vdg?H99ovg|A8$M#=Eva^*`p|w-G=?
zNn1Y!F7Ty2{#wQpA&{ki_`@H-C$2sCt2re<jEFG__9g^8 at kr<?CO1q8QuA$u;g8kY
zw71?G`Okj#vru#7lb`&g9`<`AbS=jfXP)BU;fp`t at n<vUW=n*|{YTMr`B7L(dy03J
z7ZIVvSttHFO|IYkXj|8(@?R7%*P~78UF79F_#Fpkqu3Gb6ejtvWiUsa!X80Z at I!&W
zjk%L_9lL<k!v)dN+GY52L`JFA_!Grn<;RT(0sive71YrKtl7$TtyO9*+KL at R;1g3x
zdm{f$;yU`}FMk<-cB((K1y~M(DDYx7f}KtPkAL~kar~{=`D;R!+Xx(a?z!h;E(#Dq
zClD0X242joPI}_6@`wW3-G3-B5|)7PU3xiC{@Wlv5+gHIk(gcmm-Av#L_)2+L<8g$
ztzqCZUZ-{{f0<thBtK}9fA|YQ`R}`crR{yFy-v&ta`Tt`R+pt(w*ryf0sQOmr-%-l
z?bDLn8JB{*?Z82g2z!h_R_2laTJJg(d at 9>z3#n$>3wGJpzy5WEV~!g{L{_s|EYK4L
zx{oM^36{=cp;OI~TFCDpEb<mo22I<R&r~zaF2G;5a3}GRN3Tm5^MnN}q6ZT__!Bz<
zJ!xME;xEB?G{s-q+Xa!Y1&#aOHP6Psnw{p4_o!bKP`c-ydn||88*jYf<bCb6*UX at f
z(L0yre_H@;O29GqNGJq<^#LMAno8><2G}_G%X}j9nXNS~^OOh}p at UZo2-Ic>rbps2
z#h5-42w9CAXh0EBqnqERV1}^T0 at 7P+!r@=SgKudySwFKq;-JMj_=j7d%!iA?_$O{Y
zZRb^bcJi0E6`yqV2MxwJQlqUc5M};s1f7IQmVlj<|CJ!R60|WNHOi5+XF0I)hb;QX
z`R_i7y!;>jUSl?ccLZKyaP>#Tk(BCS0#4+=R;L8EE7ciCGk`idGJ}N!e9X}{G7$w<
zS;Erhl<J}YxVG>W6#YE4v{pakk at pCG)kX-=@Tir#s)x3dS5n!(e5vwm_N$Su!++pY
z;veUXT%eEZzkcg_<Z1b!1j&EcYlpw at N*F5sjMwh1a7!U5B<*yFh!kaK=dWrY|BX at Y
zF=w{qcV^kPdboz6EdXrfaTbdXS@|3{pLR at B^mxV6_!~JT$Y2hd%F+}w$Oo0m_zoBF
z1;wL_=(<nrF9PL1eN%Z$Q$#8|;1dQTzb-xd+Eei<1d2amkykWiKAoGJ$Jr(^o8$+)
zD9lEfC53?gr7wNSi?BD9jgXEThO(Vd3?m>22RHW)SPgnggwn(|BLC?+#mmkLzBc|U
zk}C&G=JHv3LnPtdd64uj+9HS~+T76}f2- at HBOiRsed@?FAz_=TFgIIsnoX4P=Y=fl
zD*&_cw|D0LgF|WA7GNP^KX-<|{NdnSeh%}0*N;`YEgFB!kvEA57SO at oLfW=~Q@}zB
zjx)VLG#gzJWA>^t*IifsYkL$CUVQP3Uj&MeG84M^`-lx3v^tx?AO4KduUO&cEtIN4
z%<iaV66NZvuQr3uXp0d=+T)LQ^#^~8LM{JY7u9_HwFGeeS~K*Gm?AU`lN;&kPj?LU
zM<A*{5K&6|(1A~?KYSsQzngzQ`(O@~<R|VzHdns{g0HZcgkoC7Ulda6DI9FzvJjvr
zvZk`9hQGS{sZV{X`zPP01kDx at 3mCyMiByTdPB!3Nk4|DLXMyapir3-wVp55K9a}Yx
zQt>yf9zV4e1s at dx{CE04!e)c<H^5Y4iY at +Hm4^tfD6|)B0m;v*_^Z8qFWW<*^@x(g
zSIhW{53>sa_#7z&k{>8C at CCxs9G8%ma7)DBoI+qWLg`UEw@^Aux(Lxt9(-++%kXHU
zDg;HLuK;vgK&6#bQiyGArl|iJF#Nm!<cN*dk3Yee+s+Q4P(s^OCd3m=F)iCIWPq|0
ze`!w&0hdMAio5)*Q(I5)t3p~LMrHtC3RVBb!X&VWf>J=?KCvCNLIA$_?(|>zPl8|l
z!T+%Si-K>#?Kr;smJOO|rF!JGvk?RW|DwZ3%P~gl!eb*3|3YA}>qH?yJO1J&9HQXS
zrse|d!8ecbY~XD5zxu;??l6O?aCON+hRtZ>1{(4p6R(Sl9<BWMDS-MB(^?CB+rdZd
zw;jyv6#*^hwH_z)JBxiMWvaLE=T3V81je(Ol=c)x62_ahV|Oy27ahJOCtpy~`s0h`
z%xvA at O9M9z^bQ50z0^@7^9dKUEb*I<U!)Z`_y3|`74&r4yim^;z at IN3iPr&f+?brM
z-_p$RmY*8rJma(9_b(gV;V#J`C2X!f)5W4)0JXJ%!V_CtKtG`q%)#$QVSwZ}m;t6T
z1M;TQl6e$FCK1+}$4LCY at P#ip0%SYi!(mz(3ztWBR(uXCPw at Xe^Hm- at T2e{8R$&7#
zOeN3bKZ?n%;*sL4vAP5(|M5r0{(_wp0_8#+d1~^QGoH)CpYLV^-#i?w_%K8Ma{+%l
zS0Ygezx at 8tAzsB$XYk=Wu!KFf1I|_yP4LTkH7fYVfUgr_D;mHOI<Q4*q2KU9&`FmJ
z>}eO%2|J|+{+2UUr2r6VuT5|RU;axTIbU1yOZe))pL&!XTT)ETX$gsnk99?)E08&T
zHxIa(4-a~)6E6}rFv+{Fh>>q|3519k;8^h~B}djf`?sw4W98AJwmApw!Rin4!C!k|
z-~T)7eSe3`NSyJ<Tt%V_1ij>^kg{Fn=Tx!amqm>sf?|G<S=Cv*=x>q#i}mq!R0!Db
zu at q$<5dw2c$jW}?SM}K<fACiU!akJ;lP*8_%UCI7PQ{rG6(5Qo-<Q?=b^)ajSW5`B
z$V>Z4V_1k6tt`0UTcy^z{z{hd1`tV(ws&<RUl8@@ofa$J*%Z}JnXmY;nK9lnvKu4d
z#CR7@@f8RrNhee}g|m%jDvz}k;Xq8Q^6=djsJyVpJa)Yz48NL>fF6qEr0diYod&bn
zJn^US8vL-QGu1`Z7LYdm+7ok3oV;3JHZ5ltyUPI*e?SOpr6O)-FfH26Y0<=B9C#N-
zZ9NoTn>?|(I$u0WGt){cF02?_d8NUGqNl10g#<86zwZu?FvVvVo^=Wc0e8$}Jj*Gz
z0RAjNNvi8)lBvu?QEG6;oX#pGNKgG*uY)gGCNZHE*=Fg=4#<FuMY|yL4AY5^8 at 2R+
z-3&6n<cElYSW##%SeFY(Vm^Yrg&3*D-x5{_c2ikc6aoCXY&M03l- at 3r<$ScYg~M9X
zm@#_z6?_MAr-0+QDg+=_o$`F)h;IixB618#6 at W?leQR@@DtYW*Az+MF-MH<x+iY9Q
zLC11$Nq)X~)Z#`|o9euv<YtdzA?*dlTNIt#?=6e6!Gu~fl=fP-fzMh(_Yq14-*nSW
zu=EGt>d!=BPG0uALa>|!9~`rpq}Ezi*YX-V<O at Ok{drLZaM=0XKnp(FwUpvpt26;Z
zgh2hDwC^GWz8*nw5ct$y<33>qN3;y^sGT!Hn7G4QmY4s&0(f-(3XL3~Gm;nT45}-H
z`wTT3k5C1f2#Q!p!dg8Fmu*6ky at nC%!p?CmX)0r~u*dip0ybM3D at IBN^MD{0qCoK%
z0obkB$;*C<D7ZF&%-~u^n%Se2V}M-`DKgA3voU(SB9vt~mu&$$$W{T|DWJp=`kbLm
z at +shMi348=Y9lxo>_kTiN8B58(CUogI7^C%;$U~%#pOR21kNs?@Jl9mUA8zqy~R|J
zIigizOr at Tn3JZohtNB{l4m%WDUKrB}9$`pXLN_NfC|VX$!fqjY=cAA8Vy_T47Ud{7
zZ2?BAoK;H-F9bz&%+F5iYE7jr+-5T^bR~Z|X<A^tj<Cs5?dIdrrbrh3&A*70|5}jo
zpUO|~Q51+9DW39>M{RS4B|Nn{{sQgRY8A{AmuDM6J|OQ!!{lDHp$1B+;SpbSnn5SL
zMur{p6p19kBH*ncSl!Z$2{JguR9YOs at oA5AO7J^0`xa30%NZ3r_{zQz5cZ3RkG$3E
zEm~OjQY)<d;*=0*TMlrqn=sDPLWfMD5hFVOB>qZ}%I`Y`=E at Ec2zqzjjt0fh7-5pt
zd}o;Lz<sVsgZT5v%%wdSQrKW?$T|$=zsfJ?DPELILeL#j+M})Jh(e{tBi+oRX1pIf
zLBQWzM98ASn9QK)H*Nh|WITc+A`EbMBBB|8?gJ&yeG5kZZBj)NTr-gPdo(T4W6t=S
zxg5}`s at Sc{g_$X2LV!#<{>hHOY5<hpfD`0{-=kLk7Zh!}g}~QxTrxn^Pfzx;RgjnY
zwF;^FZ+=E1ujFb$E}t>XL1l+h*=ZwaMMM(be*5j<dvqZLAr8Zz4JOeN{L9Sd)RwxI
z76RmzLEksQmv2&~%ENv9(Pp{SEealq{AaLfO|AsV6Z1DYMJKDK{uGzt?;v*G1)M%n
zNXOs0MS(HIAq%yHFXscU=TKRdXbT(ilnpk5G$85^gGF4;!Jmk!DBv&uWs4{f{N+5!
z1w1Lrj+{qZ&ewXZ{`ZljEi2-H2`LZ7!VI-mA^Q6i9J-nVK2|1SBxhI7?VsHwKM at Eb
zW0gv)b3rWVKH`xJhS}^p&gOO7jpODNS at 9KUs~BKfubTvXsGCZQ|Ad1c`4slB%BRSe
z^OR~4*zuoM6`}{ta)g6ykk3vW)|zMPkL#k0l3lPf(r<SNxCF{}GpH?~xeLj2-tmRm
zN)v^Y{1mT<h1OraMOF=z at Ln{7)sev=1$m0xU{b-&Hb<?@H-pSC`OyZ7waPWfD;WFl
z!Z;XU#}WPPfyhnLJS=Q2Gq?BSZ at EHX46FR?U at GDBF8+d8!V5v+FkxbtD9|ZR0r{`a
z#~=3gf+!G)=c5S$B?q-u=QXzYyX9K0E$rqAzAfO<(%d)3*AsfbV+(<;YDddwIZvQw
zGt@$$Kv6u35yjyJi>xq at 3E2!jDH~x)DH*Ey)`EqF+P3E*e=ZY=fxr1#Vj<rPM8xB?
zb_Cr>wlS6DxTPgL{_ at KF#L`4!u&ql-{DU8Pgmnhry0Zn$f5;zRw@}U|9w}NunJDm=
zCB&lqjlbj(clqDRtM~|kjKv&4W7x at HhpAwxLOg{|dEuRKU~ascL-c65sb#a*8SHB9
zb*0Sw)~z6<u*6h!SmLk8Dq58Xf8ne0Q_v1REEGKi`~+|YcO9Zvf()}<r<H~L_+S<M
zxomUMEkxokYB&({kl>pNc^{ENpf&AC`7hP0`4r64ClHFyF8^-~fBBzq6IhFalYrUx
zFPlQmVF~`eh~eo_GXv(F0@)07f$))Y0sN#u*be$ZV>zqL;8SO at ckOpHR0F<)PvWn0
zCFK at _k$2jHY!Z;UjE3abdepz`&F%7mSOt9Y>tFxcUem*JohFn2D!<7Kgyn=-fBZc%
z32oEjU>88zyIQny at KH4<_!9_m^r=feynH0xIVa(dHp4z3=$&y|t7{oRLDijs&2rum
zp!ncV=cx=dMjC(gqaU at FOA+A6hyuY}@)MjZM96#8^3*UzRrLVGpFI2y<E~}Gpa1;l
zP>7v8#NRwC0Q<JtS8^uVbd?<#<L@$HD-nutG^RabPD;|2p<CUKD@)-e62`igQ{o7}
zNC_Z7kb=w+5fp`={`9Bxwg6>-Q>s4(_cg?)?)C$`Jnyu%5jb8590wFD$~4|lv>?a?
z{LLl=@*m-K0ou1vYpL5j1>YW#z}&~2FY2Cmp_cp<lw38PyrKiX)+585(SV4o3}KRk
z-g3-F+b`Jpt|oXi36n&`0I#@{#2 at O443bu#Hn6qwgsD>9BRG<lc!W{T=;Q*zHeF&}
z5Ofks*Cf9`n_u!9 at 7>5#%q+v3Upu?NHwBM{z}2F(SN|*c+L6c?1<Xg<@@&9g(A9re
zXd$o#67zTd8pAd<+(>L40q`OwqdXG2YJ)%cl_STZ!CVtB(J2bPh{5X|w-*F4{@qDR
z46(3^!4g<o=4&yLA#6y}>jWPqJ;Kd?Q5I`IKFdj2)P0F1<^S4d`x}|%*vx=}ZeK_|
z5jPT8Q;DD|guKZK6p4j|K<kkK#CW(S1O;N?QzD-dd^{%#@wXxal$|*O)E}KpGSX2c
z`5mJYn9YFe$F^z%yUiYaPANoo2j)^&fN~j3b^?Mt!b0HEH6f7pI0%F}eQI+2wUJlq
zVaK_RucZ?Z at F5h4DEM<9fA9suqf<CxhLT7qVduCC?9saH<US)^S#5!t*)BK+{}%qR
z_bmT~%#FpOmKKG!0NV6g{O35f=m=IF1U4!Ak;hyJ2vAx}RDUEb{+-2=--|+kIfX|u
zT+WLH0bkSz-5xQR at E2-_2(gNOHdw+W6=d at W9|**!qT{3hpZJb5{4o!{!m?}3^J*q#
z2Vq6Q0OTDvT4F7h=(h`;1yH*)Ypud0iwZhL^w}f3Dt%rtzvS1N`H;V<JO*D%tnA-{
ze=Abdf7r!hLO>y+pbft2N|D%Xuqghf<%>ntYG!u at k_l46NZEMfjW_xuxRH3OrK$~j
zlAJI2i-K?v{L6fmgkSPUh at AqRdS;W=OchO2Ih(|VV8RluxAa at F<Szu;LJ(o8f;l)0
zCUCU{%5x#0;GhHvv5yLYdT9Q{U8pV4qB<=afBnXH1W#m(g4Np&a-g6b<9`%1PT2ya
zlebfNgMUjCfAu8(LO_ulCRG3BKltT8-Aw}rNn%X-&kONFUV3*B>sfh!{q at y<j{>BX
zX^M%$$UFRn24}BS-fb(}Hkb7~7NHO?(Tu-H&9$GKm3?fJ$Y>Lt>VOy#gI!7~b^%`m
z2sdJYMLUJr*2b^+Gl2V+uqeHFK~0d?Mq6thE&h}I9?dKn%73lQZwqMK1&0AZ5<smG
zaM=-z4>-)0{PEYy95Gccq7i>JK{!}WKz1WCgIFLh?cIgU!+3i^zf87}OyiLr<wb#2
zZ9IyLPd&0$qB6jvPKwrw{p>UR<v;WIzL7jz{+FWg>h!5GI55msB_0j41+2m(1C${D
zl_nu(3>&P)Dbk|-_ at M5||9*|}mf#Nm$QJ at SF~B3SuA_}3lD{LM%8!3#AODIE1ryTJ
zlApm$;;%_~6o2s5pYq?<z+AY?e at Tlxynv%EpJgmds{efv at F}Mh9JJ*dXX#eak1f>B
zJ3B(o$j^iU$m=(ld10&sss9R^4CgW+6ksbpCBJ at SijmgfbcZkg<~N?;&qtHH_YxLL
z{_>w~!X!q%6fn#fJc;>d3monO{#tb4d(q4m5(4BUm9{M~{3isFua*46-`{^Zg}I8M
z{@^eFE!6#!NoYv;gq@<mQ^_x}`xYP~s*qRoa}ddP0Z)lnxL_V41U?lzmkp<_uVa?(
z@>BjZuUin3 at s|Kz2PBx0N7!<D3?n!YoV`MkMgEbk5CCPo9)?LL#mDLr1AGfHhIyPd
zh7BH>8evwc35CEU!<=qk^w`G1- at iG*U;f(#_$RPargbz#-V#=?_*hi>vDtFcKpfiz
z at wb<KYOrh<0u{-Mu;Zo&bNq=C1ir_Fk0rlAsO?bOYxWNK4Cu}y(|oP#^2Tzn6awT8
zwyxzO2_0t%)bc<0TGndyV?O*T-qIO=GpkYIGR!~oFggC1bBYeQ)>NuGQ+)&uo(wa&
zGf^uX;Fwd1C=dp-impv$NW~w23PIj3Xd?&#8U8pNh5%vtKj*Iy$bX at C{-S{xP{^|c
zllaRelb|H|ktd=cB3fy$;FSEllWD#V at X?CiWf&jX>?2~EtGBY$zXq>|F$Pcmk9Sjo
zm?85eNqmrDr(v+KZLl|jkIX6m!KVwHOA(umVKbBPSL(}ufiT7lok2cgl1G^@t8oy%
zL=Wa~lPokdfE)Y~{KK;#{vu+<;*Li3$8yeMb9Vk#g5qz{vJq;Re>#9xk^g<krErHX
z3Uqm5UwCxJ$@$WZvtnT_>Ft1Ht=WWF{u3vH66X&DtktiFh4?#e#5$N>Dfv+%EX1Ew
zH1r5f5H|jm|160=7u>Ss?eKSt;Ia(C--?2+HAceIb^26~3GD(*%&)BqnN7lArR^5P
zu$C at l;>8gGm|Y<M^~AsYM}v<lKQ~)W%C)(8giQC(>QDJ^JRo%S6ER6HmjH(dXUqXF
zB5t1MN4}OX6lXL=cHwU at Ukq5M;65h&LrMpMa$yUoLMCLJwZKHuLd5Qt!;Aj&&l^dY
zN7M~)@P`)%-?$YSijR1G`t)gGs{VN0JSOA<$DxjMCyx1TQk|^T4+|jp`%y@~G1x9E
z1p1LT+w1~?qkA10#(-~W{1cBtfV{T+2Xn-7T{epK!0-H>`U5_ZIhJs>mL5W&)GIq~
zn9gE~Er6|7KNs5LDk{YoD`IXWYne*d?;zl^q;jmY(@)d#%18LPidX*;!#4Ok>(@W*
zCrs^8M8IhaL>M3Z!MCjd#J?;pM)-3%^EiTknM}7s`DJTR*vS~S?U)~Z#V-E^!i03#
zDfXHf1RWe0oj81fx+qWx{)tt{@K=k(TK(}=SD@$e6Myr|Lo^KV<yY~M-mnlSLbrOm
zfX%>09sw~8yC at L-IGaapk=smFi at 1-oPfcQXC_%iypOJi@{O6Pj!9U~=dm*UB2Vn!C
zkpG3i82k|srt;rZU5$JT;E|;{PMCow(c>a&bqa%}giYZsSgJx60wnB_*A_d9U>Qsd
zz+V*Pzm^S!qd*`@@GlB1flCcP%zyB?rp(HJWK<`w7$YY|0en8Pihu?_fWQh35eWIO
z6Jb$+*JC{fi-ma{Jt~g at g!|&ceG6g5U{weKi&{wXgC at 5*2q}|{k=xAkI7;cQmEl#b
z@<0BzfaoB at Y_l1_eM^Wk{_-DKbxaQ(`S{}#Qns}Pv at 1?q*yBH~NFf8?DmIQ4F}FJA
zwG^%qKjVPuqQZvY%SJsiN1n{#%Rw&SZ?_t$_()(tgg_6@(!&p!$g4SV?g~^1GC!(L
z1OsdkjuU|v2*CNMB5A$ISv?f|9fI)M0)PJVpDk)RtPn$wZQRE^VOye~qBVa}5Hfko
z{x1LJzmLpA`U#8U$QJ^uo7vLJ4wJO{?E(st#Omcg&Yc1q`CA&hz;mrk76r*^>2hA%
zj)*^!D2cBcQWW$+%@Jmo{93Va=k!thy#f&?T9X at WmCBBk=7m((Mq7aF2qCZ$VDDZk
zK>bD(|9qr-%SaH~0!+09EN9yI+c?CEvefPdGjXdCjzZ8*VG{AFAAj&SmAAZWUl;(s
zBTNR$e2|5JFx%4Jq89=tNgK5&{=gn3{r)+qM?uj!wMb>Q%3l1a at h<*5<=1gQX$#;<
z*ucAg=a0F;MS<n<cSgv6a7um(`^|54>xzg8D>!^%Mj at cjzOWJGC!|_6hl7HmP4IUL
zYwav{GP at Ail~%-!O8}ag*ILIMk<2z=j<ZC>T at 1vF7*_s^0$oC~*8R{<mrD|F_^X8R
z=c#`DZOm>#bgM*D{u9Y>HfteIi9e-?Xo*5(7g&+lhI%Fn at kbu6>WL6olu7cl{5M$U
zCz9MG1{-4}1r4<6?NI%;t at QJjg>*{qL9LcTN^Au4BTv*HM}W>res0paYzuJK67lz!
zGKEOUfQ8z-vf2Q3FZdp12*RY?3%(yeofrP?vGW%q28$g#CAoPxEA;VatyBSAxi%+v
zCM)zy9?`*2?97vxWKrIya6R-CacNg(rzo)2O;2k;PE~)v$B=8mR}8VmA4xa=34z_M
z(?{iuw1?3np|c8bo3vu<l<^ZE)cC`z)Bp>$9!`0Lk#LG at cDG$%znAuQfnd>1=!<|q
zkg>sC$o)YSy7YP%BBru|B9leL05?o#>#<Gnr*L0R;;;UAi=Et5Ck2B0X0r<Zg3fsG
ziRFyJgv|*H4PY30QrevU9FMSFpiNMvXgd_ at wDg<>6k>)%q)dVy{v+5bFL>I3-7f6h
zN|3ei7badC))rXwZ@!rqIGBVl5UB%PFu#R-nZjQ(^BrX5m8LcY-FTe_xc?ZyLAuTY
z;VsL_a7)WHA%NE|@U6{?Y(NYs2FpxVIi at AK{HHUoVkO(X8-M2oYkeeMUcq09GYPRM
z)C};AkMROzfX<{S$QH(MN{-nhteRA};{ewNzbNRbE<q8ETDw3Rm`6B3gN{iQEz3##
zZD;vE;t_v?`KuHcvW<WJlj&an*vCG`Q{NhF?GnH$90{@%rQi&#%7d-E>N_v5J*vIZ
zkIRxxbi_g+xM^ujh~SC>VFNo2vulhuEn<cd{Xzq*{0CpI;_qDc`-88XJ_6Zztn_=F
zNz5Y<>=8j>wNFjn{PFi9MAZ{k5uCM{n=RD5Htocv)nSKP>v8RYy$e#_1`x)Khng?8
zfZ}fpP%Jd{2Y;4$SEN$3iO6!(&vz_Qve+gMg`oNmzWg^*OF)K#AkTec3Ju?3;k6Jz
zVIj=%w-e<*djvw!Al|BlE>>RDBLRr$!@>-&D2YN~2F8oK!B+7)r5Wg!lK}Pwn+3FC
zSyBj?3N;_WjC at fj*&@$nisQ0a7?}u4O62Jjzzc!&v#CAyO~?0N{CCnF{r+RZ_{%*v
zB at Dgjm0s7@<5K5p;qGDntP(-#*Dm9c;zQ at G)}jHAKlk<c2u%KJ<-Y;k;j-$%9{f8I
zgg|IaB4OB!Asf7_lO+PJ_~Q at 0*YPg|wkN+75JuW5-qI2ksWh-?|0F}U$DcyXTnHQ-
zrX`2`F+U7}k1U$NPWjP~el+}D(k2iw<OQK?8SgKB%`fe<Toq!rL&1HCzd0^g{R-M!
z9=&TvNFLjt<8sd{;)SY{*CQ{8%vXOf_afK$#dodH7+KjtzSEiFUFWH^#DABcSH!|2
z-9k{in4!&0(Px8cS?HK>7BfTir9F}Vxx*3zx;ydIEA|2#z}K4Gr*x(YftE?dLd!z0
zh#<%#l9OHtaHdcGdnAC1Q8Ms-$;G at YXvvRZ^~Y2ui9fHI%@O%;fNU{_LL9Y4ke&hv
zDM^s=7XIw#kqJ?fY3 at 8+#vgEs3|Do#<3UX^p8HCHie#7pZXKw$A7SUngg~8f!-Uir
z(U;O-vH|vl@!-q+T8d4i6|W-2qag20U;pyT((*ysWRC(xXAeb6s7uPY{b)Hk$*CmH
zTGP7U_DBzY{Ivq7?699Aj<81_Jt7v$qmzqAk_UgHfN<O@(hO(Tf;qq`yfBH^wFrQZ
zvm-#O>RJUx_6xVVWPsN}_7=`!B*QtV2L!rKkE*Uz<bE4Ozl`c;RTTJT3#dY<W|B|M
zW;sDGXOI^HZI$0h0=~zN15tn?{&K*I@<9&+EG^qf{JR*iP(I**p%5IBr!&dD$lp(`
z?rvEK%m%yhllJLa5d at s581clA0WOWw$%Gl7zaF_}K+YOgyu409RV(W#%9jvy1J{F_
zYdpunaRp+wjFqJhUvcrJKsmAzv?8Jvso`%7e`TEkP>8S8VhJ~;mO^bW)Jj@=R?ZM<
zNnlSl^`i!P{J|$Kt6B-ha$v!?F3S<KgXDw9`1_O%9vh|vfhoHXuJSO3&|zmAi9g6T
z%aB)%=`!CDP_eQ!DSIhk0t;H_ubU+JT|teX`%m?!v<EyfN&Fc`NsRF~R(r~$v_YPO
zR=2g?Il1gxr&fB41!s-tCV`!#=rlkTLdIH{qs?Cm!5?id>vTDx2*FeyA#k6BU8-;D
z>lT!vbyYJDm!-FTCo9BPnpw9rpvZq>KY~vTW3w@&ER_!?5eo|JL?HB#Nqbwef};n?
zwuaDvMqnql0CAU4e?-b8;P)p0O7-7?>+)0m at uHA{gUO2G)^WCd%71|<7AlYJV3!Gj
zU7!lt1@@8T?<Y_pkYJ7m%xwW)>w%>JDFxu`*RskCB}V*BE(B^3)clfQ9B=1p<vsFR
z*wH?Of9A{?k07)Vu>9hwmR`aSf8>RrO~J^jhn77e9(hZ<=alW*j4_7v7<O$T(3ZLw
zq6faVT$SqPECg)<kLVeIn=x#Tzn)}z%KXS{g^Z^nQfQ<NMF<Kd2W at u#I at i#q>+xtW
ztPODCg-Q_qTE~!G;3JtJe5^uMEBUp=&!n~h;h-(R_ at V%EQ8<L(77!ZA=7!J)v at 6Z#
z;)FIcv@*XEM5#vz*x4-z5NqMD4SRP>V95kRKG+luqZ_QXcL?&xh{E0hH+mEW1>8oq
z+118eqr at L`{26Q*8`?Yg_aa4)JT#|COzTnR`*%kkVJ{qd6e5#gF4^pQ+uscQ0$d2}
z{f=F}8>2`4cXohp3;0OVilAM<DO*+kw*}&_)laHI;FI9j+6eJSo2d-2bhMGNPp#`Q
zfn5Srf-J3*89F7BG*DG61a&1n<_HtS5_2+12t4ZdNP$<atL*TdQW}^4{rwSq<P)!0
z%gD)p2|sV?_j<cYs|0ll>sJ~48|?C5ID9G!Y6#<HnoGEX20PB2!l5)15!r}5(Furf
zi;H7I2>gWNs?QO=SAQs-wuJy#`EM66e)xkg;b#}njp2o98DKeu!iyX{W`FeWBETm)
zl^}x&d-^d`6qq5~B{R0nXlc0U+R6Nw8*I^{({Y9g2|irxk*M<DJowM=KVDIkeCqHO
zBY9iw^z>FUn9A$mX!ZC-$PbT_O|BY=yjvpju-gJQf*zU7qku#0Tt>rSJ6+=8 at 6i(Y
zOFy|s3V}{3B$Se$sr@>Hza-QON3p<P4!}O*3e;I3qbyWelK{37CS0>9lhB6U?vN4`
zEdz)^lrZ4St7^`mhP at 02P-p!mzkUj<z_gHdG8RmhAm;qVgeA(X<iWpPU>=!<yz~$P
zMjEdQwFQa=<|Y&ZR at nk{{1qSd-;cwg_QfB6ZNDWdq5926N_egz at 3aL!MUM$#hb00#
z2<MprG$*)>D*v6xZaZPepU!0*1gOlf5DA1w0|4ZU`PCd#aZo_rmRE{jaDi2zhMlOE
z>4HL-!CH<mo*CdU04Qr6roGh*hqe$f)!?>(Efar<gnT4X^-luuKg at qK+hSM&4gyw&
z5s#h4lG6+xO@)<d%YU^c`1pI>%xv~4v*j(XB|n7=QW1eevB$Y71UlObn7Eec)PiOJ
zV_K1?*s^n~5at4*tw$`R{qPq8gQW_LDv7L9d}OkDn5W8tZ!=m8_Emj${tJYDtq at q6
z%l(+_EqIAJ3BvT4Ye at l;@Wi9>6wAfGHhQRb|CIdAW(&}TLwfjB{%fm33 at 8fTr9(l?
z1}y$QA~FqpVt|5!f5l(!!A``BFh<Kwv?afQ!W(Bg6lUf)8a{O$5)mzNE;CHRNPcyO
zP;l;c$_17ef<D!PZ-7HwBDwT3jA9Z77|dWb2YHK%xJ6l2 at +*>he58|YVkd0~r!2Hd
z|9{OFg0ejYb5W2I$|LxNKmx#}8c>))xQSBrpD~pnt^6PUtd;iVd~e}QsYTu-9wn9J
z_cb&3`CI<C1=N2^A!rwP#iPkp9*}*_;k7&$ud>mKdXN{IZbS|OpIXj_Vyz7C6ae3%
zlApq5df{k02!ZY30?Z2xP0KZzj6XLG76LyGI2SC}7N8J;@F)ayAz-I<?Q4#JU(Pe5
zK!}K*GQW}tyNDnke1YIH^1&AfX{;Uo<-ZAS0fsq$!IAj{YJ;^z;X;7YF5rb}jTDG7
zpADR1qybt{sBF at WaUy%P9sIcje|rZL{BhRW=CY2bYJwiLIW8!A=tV~q_+>V!C<K%F
zVdn++d4ai)CO|9%ld}{dV75)f%~H<S4SymRf=T!tfrVW%s6S%CFz>?1c;_kX(JmIF
zPtDOYnNJ~T6ZEv85ekzWzAwJ`qDu?2v#0#Gocg2fu)ve_V*Irpbx!5C(}@V0%12Bk
z9lHP`kDFE$WS|?VC>S6FXoIgDfo!v at 26~*f^#~1U>JJ(Q*sxyL9)>`k3jzMq7MlL;
zfk<)F%wFUX+W>(`DD#@x{)%mWp|22u->Kv+;qZ|VsGK$n8Q^V%b^+bA<-8ujD)|@v
zWBz*w9Q~N!-i|-oY&d!H<ZJ;wps}<3-{4pNQ?w-PT4G<jFu3E{$P&r734|T at lEkhD
zT)|O)x(mhM0O7C%_<Yf6t#$#<`~{i&;KNl2#KHg}kpBfj8S$cQ at 2G{n5=0?*YRi8u
z at h4+3QYR}xj$o_z-I?PQ<0&{3n}q?eQz}h#hS at k=V{^c*?v=JcJ)zbXg?WrWT$O8z
zy^o}yj)h4yWxgmJp1)`h|7uR;y*nW=#-n{SC$D|&2W at i-gjh>;@Due1v2+Ue=~_<7
zWMM)^+QaKO;J$pbu1M)u0qAy$79T$#3xw$KOIxa|IXHtX5U`By$BGqzS6`(lk_L;N
z-DfIs*IFHa6=3b&mtPKhIe@?Ax_#+U30L+%zW$f8z{eaqf;L^xU@!A!vi`yWRK-7l
zXvqKmdW$>}0#fy0p~UX~k9M4UaVBB8k7ShO_qB^_jQ65&0P9PEoNo(&T>bG8r4ZN!
zDcrHI at fQe+832bGe>pGnU3;vh^(YBDtnnv;1-Pw*>XaI&i-<OT(ci*O|FVKu6nrAb
z{Eu^*U#f_j-NafoA9jH#78aENTAl0!pPdMo{P=@xzjxq at 0?`A0`R^k-Zg5#>VEPA3
zob?g-rW(=1BZjHT+W0#KV4;gbCxRVBH^A3kAs|r5{7yGx5SHhb!(6{P0jHDl-vG|K
zEa_nh*8p)YOHPx-+((gj3qo6`Jt8#D2)m%<v at TDzG8{lc*Fr7?^xD}7Ql%(xnR#3&
z5GMDf%wT7MwJd=@?1W-Vinx);w*>$Xbs?Bk54+Bk+MvZ>9zw at Q?jsX_8&L8SyTHDH
zT4A at G7Yjl8Zw5-O<ahY`+RG!N{yWM|NbE1GMA&%1 at mG|rSmslNqd>?I*xAW1gDooG
zY<7n%MEEmRYf)JGJC08k1c)$Eg3#tKbc_DxAACK89{fs>7Jn@{b?Ovu69pSq`SM>6
zw*{QV$iuD*d8Am*c@%uDs^wiGB3!8Eq<cJ!g2#wih*B$oF~Mq8pI!U`q?G at dSAP_u
z#>ZbjDFhV!ZEBUryCR5x0y2 at kT9EC&P|J4Yeeu`N1)b8K3sA%E_^`Fbf^G>q{?1A^
zH{Lad!NOrYQ|%hXS<;#lXY+^xs!Z}I^TG7EYtL%Z%NA|?eQj}dF>M>cLSFQB#^!SP
z#$O0lG1|L89k7rpG^j0#Fsa95u{aC?hKYRUj<)+x{7ZY8AAgxy{kH{-Bt;Dq;;|5D
z*<9wwU+jE$fKhP0LPtgvU=K9~_B!kLibt(<LY2U7211ec&I110>726V4FjB=DRkl^
ztzgLnFrmgDUTsncCKkbWDI)fQgtuIV2|ZKwsB%gi=0a?*34vHp*yG5?zYwsk%3lbk
z<&i)LL9swX5~3PR=+p;whQE at EJB$~F_{*#KGbYr%1-{2Q2m};=$yV*!%$~BRfc49U
zy)2i65_1M~N<Y+D=n-DY&rXi$#}i~aOA3k!*`u at 6qIl%50S41CXFmr=_$zx2Ak`wR
z5ZDMQbc#SA-$qb^+QKHWkojwk>3k6gQE&jY7hC}NWemSsH~xn<_>?91n=J(^+)#}k
zMNjvC{LBC0uODaiM};>`;JmeSe|_QdNEcA8`eUndgbn6F41fKGIRcD~KT|1!0y`aK
zk3<NBhUIu_Vb>Z^G8d6DA5Vj&H;?$`(S_3hE#2+iiz1 at +F33ee8|`)keU$iXaVB<w
zcg<ghh!?-)zqBU~0>yuHTfk;vrxxls7dVsDqmzJN2x0;|Zj-<dJn(?Q%;ti2`1?yb
z{?$VyWperNU5}<BwvR`{hQAO1Xz!?O#(Q0%mMT0F6xIg6)}y6mZ?Tw6_LnTiuo+tl
zp}?rs$vdxzi2lAY;m>j(=}Zik22KrZ^*|~dGF+a=A6rofdt1Or{7nd#nH^6iG+5 at _
z0`7q>UA`9+8$lGD!VW3M at FL*ak;r?bXt}AyjU1*idO$JNFpGk(bp&82E{FV$j5%fW
zdT at 6C>EK4vZ1^kwGGEmEb;edQrVtc`0%35*+XXE2$Vj+K815%b(y6{_4e+R6OGlLg
zua+(lz!Dhy$SVYP10p}yp5afKPBEI9O{?Fh_)C7wkv~)%3U+Q;#2CV`3K69c at Qcv3
zaDfj6rClI_ah6W;=Oc-~bHNyguN)RNvGA65q(`yP!$JH-4SW?wOwFwL7^8g2e+jQg
z3w7{WSiuiFo&C}{VmhlTp~i$#J<(4$%p*aYt_2EnqSJUn at ezgZBEm@X%lQFrKwCf$
zr7b}5Rz2=TPT>-Mz6&^i?E(jZxNwl!Jjx4(E!_JAq5G&u3c?1HO1Bm_Oe81%3?txo
z3b+y7ci(-`fiDU%- at 9j3o;DHkUMG~cF#giJns0uY?^EIMMHqI3J+jks4A!G^iby at E
zQo at Cp-1E2~ZeiQ8y8g4!KuXGXBnfC*A!y9*TLJPqor0}T4YL=3^_b;)h{rZUBgG4U
zf;0GKzHb4QAYV^(It3g_AajbaA9kV#b3(D5i-OFDE`Tc%`vAqqi;Mm-f5zjlhQMC^
z7lMKBE&coLRsYe(A9juiF~y_7Di1{z3?O3Ro+GC8ZRz^2Fo=lO7G^e6ty}G-Fh)Cq
zUOLw(_{7$Wlkj at N*r!^L(H5ron^sTd$d48NG$RU_Gah{7<3FwM^~9IEDvz8eP6V}x
z2!ucAxF7O}<<f~4>JK9;IFa{AA;TXTd|*Tae-OwDz!na=#vlnJ@@;{tRw46x{Jky&
z#Haq*gQz*RJ+`@Y(iI=$wI=M5F1Ib=JoR-LLkF3a*<fj)+}=F`Wfw5sfD&F$QK*Hh
zl5UK*e2TMHzsGv$BM4i9k-m~BHGW|bBO=4;KGkVL at Z-O8fBo;->c?NTkAGXBU7(+I
ze?wTFGlt+_2<p*VI)-fl06iijC)r~_ at aOxNx}^T#-~GS0jK|QsVn at M0F%@eo{zmqx
z0WLrN3TG8!PVkB7%NhJFsuoEbdtun>ga!P_Lpt|KogQP06$Q7h?sRXVttX7KI`|cK
z1L9wHnG<It3mMMDc%2m`3a8ov{+&i?uL_9*=2L~v-v7fL!YZlS0$|z&q!945LWI(k
z4kSY=Ee!}hAY2v#7TOmjKmHRkiJg at H2*WD`W|RNsp&Rd0ui)&_JT`@;@dufO`jveH
z*l9)BDO!PGhU5=#;h<MN7^VjwJ%kcowCP$|R|3;14KRidtU4n-SO^rwzGIbN`Fv`;
z5Kz!IOf>b76^~P=@OQg*1YnN5ADy&q0g6qb5c!#iYh{sLur|Q)LCm$Hpr6Z0 at Zt67
zp2ME_BTwk;M9HUxz&EUbdvO$jXbT`rcLnvXgg2mmfxzE9j at lF<=pe>l;0$9Yun5Z*
z35l>$gGTT%q>mUJd2l4By&!vuVTt|*fQh`vfzJ%g<v$>@%a)gTZiDDK>2S7+NrZq@
zn#^F8LJ)u70sx;QxV<0>K6MZy47CJfCuQ<~_ at gKP!;Wn_GZ=<Bdc2N53*8}M at Ao$(
zB`~mu-yP6{9axHwyvShu%^ZLFU`M{RS9zq0+!F$UGZJ>IS8W&|77{5%>y$)>0xW@)
z4pg|bdaO%yqK#PXz?Z<jj99BO%QZl>9A}<?{NU$PRAoNYDwy#UkHlW6{um=tQ+$NL
zc2Ie|=prNpJ_U#6q96ptqU5)nM>>oIpF|*pKuwna#t<A*+MWh?|ECy9CjTe-LB=ov
zfm8H}%Y=ZZK9c;R;2Vb!s5W{iKJrBs)kH-C!7ixa=!6|-ZAnh=oZZw{l1o<~QS5~h
z-bX3unN1dP6LZoQ=r44ZcDsNMNrZic!5l+V6$N`CMg8vz3N-=WaX^vzLg3LPT3e|j
zMwN at Cy+G*t(OUu70>0ywDizUYm@#b`iuxmAe9AmRk^jeWTR&e*_(BkQ2_~^+3y+M9
zKb;uR8BzWNPO3seU>DqT&plod0(RO3d at m4yi-I;m7+!j);Z3hZ$XLwjY at nM2ItqH(
zkH6(W;GJxYKa+e49kxOMvdKl00p|B^0*mOxA7t1uFA6G>O`($_7C=EK|J{fj$C0;U
z0-yoNYl)?$G!*d{0t*p?^)R?GhE=j)kG6T}xRvVRh1#Eh#XbIw)LEn`N)Xx!BSk^}
zV?r at lzd!#?&PTqqAO7Hgtg{e+>`^<9^x&tUC!fLLrZlq_?3Dt}7JWV%AO!9+j!{vt
z3%qC^3sJ<;_5mMWE$oSd*jw}>Lh&dTs*qA61pKmA<OPCmtw>S`ut<U+D_~cAsy`}#
z9tPVW#xyME5*uE+7PQFsmz02;0r1Y&*#**!2m#0jGpzHSVj*ooF-A<43&5p1_d8)J
z5)$gS(S}HtR`3BQ9<}<*Tdj?WUT(?_%PB7$gh(t at LL2}j;0uAl?ALFA068*5N{cQ2
z1|Y298-Emry%*+OFo}`e at ouh}r<9gj){1|v<5e2tto~c2t6=fM2d-j-f6N(XJYNW%
zU~U-MfY<+%R)`8j(J4Um#)Hqca)X8Cq({0aB({moi#dbwr`QWJyeJ6GCcQErd10EG
zBT;4h at K5*sl(P&lt@$zMpb)^~(cb4Bs(#XOq^cq8l#qa{04a2DaSi`Mu)}rqb*zZ!
zfxW$8DqDjK5?-sWx=~wHX5vZMV?SD#j-*(Nluw1p9fsE)Ey`fD<wN5GD5X=n2zl&;
zby$?)-ol*tNT<-yWi=%Th7|%W0z)2(`t=y&Bg{!D4ZeNh5ne6$k{tZQSVUep1fu+R
zd4N=!F-AF6kYR^KvH`+J3*q1-mACi<A|(nF2oBTW8}G3_q69%bTR>;^UuX_%5k9sX
zF`E_DA6po9CTU at 3Rs7xmS!JXUboq=wdWJC%e}RCV7kUyfi8FU)|1K<i at d^P at kGSZe
z$ocrgOXw*+rNke6!c=>KwG`IUD?|YYmV&vqT|glMfxJ)S?~&loJITXeo-)Jy(iln3
zQgWFMK7|y2kut1mYyk4iunW-e$SNNpkMmqRyLs9IqCod45d{%(K>JZe at _QXy;T8f{
zdR7rgt&1&~rago&3I?l41{-D!DbEW*`R_%F5KR6{Fz(n*gd-z5iARHd-(;0 at wj*Ph
z^HjwX3)afg62{G+0u<(cC at a-nZzMlKUJE<gN)06)d0Qs4bC#)AFOyBkJ5eAOWtfrR
zqsO-DAu|kSiRuwOd??<Phxm&Z;5d7$%jYCNCHVUNjS?Kcj(Xi%Ubmr~M^-EZZ3Nu-
z9(J}-{Obk$RT7pr*vJmt;1>u%p(roFau9aOU)qbEPwV%QZ34Ay*VA6uF<DLd&pe+Z
z?~$DpCE6B9^q`Hr5Om;9s#8Qq2-F+`zF72~h2?PZlo!^OX41IIPa#&Zs9~UK*~tt7
zH6Rq+1fp;luV0Hiu-!I=Ad&WkfKq|FZ2#AJTwvfek1S$<X;Ed8<si+%{{D`<;zRuY
zZz1b?(H^md8_Ww*&Wpw1<r?hrnf+cV3bhj&9~p)=MJogg{qYyEj$@BvM2E#zC7r*N
zioe8&vpkpi9k1Y*_M#Jio at OxkL{_ub<ZW}V$$S`#yM7M(3T&s-dF^#A0Zs9t)Ka{Q
z5*H$@?4XTvA;8}`B04&W09|p#`Y-k1JViCIQj~>O6bQBzpdbJE#~e(oVmVatFP98M
zUdtmS1%fgmU=q}FDTZ2edYu?-Iil<s));LUA&NA!L)A%ok0n3&aus=BbtON=T`2QJ
z0c|bv@?Yy4lSj$#kyFmTEL;KDA;_fi5Cj`a6!_?`5`MQ4f-Luu(8$u5)0t;j(xx!R
zD`-0flp2CR>_n&5qX6|0{)9>9u_CZ+kO_jKQwZ28>va0)82_sO*6Qz%;wV^#k;+a=
zI=rN;MlUaV1YbE-h&&dl(tcxJBRvw2$}IEr#J`_|7^C>WUh9!gB)r4dT}UBX73cK&
zlB)%uFqL0nw`gg at LJM&dIuHo{<vH8h(d`aqU~U+}yu+6=QShnP_2BHwa-7=;dgOmq
zh~7u&DONfGx1#cbt;tm(rgj%9|2e4a_f5e75z#L|)gR2cvtqEnd2x{0hvh|vt2r2k
zonI7><}3up8>7e4p^mmz!h^#{t(>>C3o}Gj9{CS=Klo7W1#Phqg$aZxINE{<IBQ9v
z7X?aexz9&SAc;9kh;<?5wN8pp<4>RB<Mj>#J#6!?B2yuXc~z)bv?&ar$bSR;d|@HE
zgtN&V#5SoAFj$`J(NE$}k^cb7CH%F*#~ltLF9dDyoaLH85aWf6q~J_pwqZU6Uu&?+
zQ}IDb*~zbBk*@M2%)pt=!@NQie7b5w><DHvl3|RL>Sj)?=;+6PAj at 8P$X}2PI+7GQ
zP-44y&?_~;hn>PU;Siu=r(B~~o{IwP6 at QBF5%G5gDg+(YLLmRS)9T=uL53q{&PD%N
z3}A-17!d!J_s9Qgl)^hsm0*y@);x5(ASn<gA^H&(5pv?hiOLSIbrQ#umV*?Q5QuDn
zGT$wfqWDh~<Ui)35PU&A=DmIoQPSCC#RAb*jlY>e#*=`IJVk41F2hSWuAQ{^Xv{qJ
zkshd=LDEuggRI4T$cu|_!5st at B0B!wY70<o0hu`$q+|9+|5^PvfAz;O*ga|`e|2^8
zpLc}Um?uI|UbPo&9OR`vEG56=c(Y&sjXc;R?;xfGA8 at s$5U{D7FA8+AAO;|B&Jku<
zkq88xh4D8m+OUTjL)bmmS`=Gjv;_8;7mgl{6hZyOzqCJd=8Ql2Nm1|#&ajW at 5fP6R
z0jl3V9sUSo!aT&7L_)7Z5|08@{kOF{skuW$!CR#KhmpS~0fB<Ngy%b7bS at VA|2dJR
z&1tZYB9FE)WaD4|WAE`-e9+J`6=4eOn9mU)`H2ZpHCw1DBjrDPe8k{lRFMZ9J%qs&
z0t-QEX`OoXQ;<0fK`$Ci at hOA-K<dQDzYr|?o4>YGKnr-qr(Mw3wAiv7YKvOM;fPXO
zKK}mgpN|NPkq4Yi&KCks5e}Ane8(AlZ1qq~E559azt$Lc8*3R;+SAKJkge#EFwg&}
zl;7NxAlQXKAY?mTAQT at JNu;cfm?g}nHMtcFK_*F$ZR2Y6umt>;@FJa96w;2}>c1Y3
zlmFhLYq8P_fk(;Tf6X6%Rj7*);FbMC060Ym6o0MI7=V9}y9l)f<hePm>(fHx(&8h;
zV7I at tn3wPr^+!uM#b3!Lh!o?AJ0}jL5|pl=@pOtd9RxQ|BmvYTH0~9dhdIs?UR>OQ
z!Y&FzpvSrvwW1lcCe&I^6tvT$(9wfm(Sthdq9E>E#+>LcE{FNAhgD%m!x)0Uf1)P&
z<FEes2#T^DWT*-9&VnK$D0=85yg2udY%PJj8MGW9{uCeaOWCmnWd33DZ}w|btLkN%
zcED0V2zZ<aI2wAmAmR=4Q9D8%V1vsi<^*sdNC0ma7|;pgT~mQCaArf&JQmd!g0_P(
zna5PR#4wm&#%oFZEiEXb;OBRaqoK#-$QwzlOIWToOu`3WD at o8WSPOFe=fD+(;MX62
zA?Ti8rm-P0b3G}{;Ev2s%x^nu33pNkK1H#Dg?Njp{G~@j4-3mrdSc8-9~tZ*=m&E_
zft^4BvMT4TCa3fw1y2ik^sY~59-SpWg>7y`4J%mE*tB^~;cub`|3Uz at Vfxz<mhh<4
z?;cft at C70i-6f<b!r&81RY+U?sndk`6RUI=#XL*&NB{%$$c^FOz1p=0bG}5rD73oH
z$nX&p5D0^{9tpj+0n?Mxu*T4vsw-<V2iChjtx{3S at ZyWAsdN(a80nP`CO@<?(mY0%
z%>8c^^E3{T*XmLID10v{6lvov<fjUi{NNMG503d|rbU^7l5YW_uKwe%$1YHg=oW<+
zYN=%{A<*j77JW()iNE at z{_pa0^uO0M{H^6g$W87ufN;F}4+VRop-p^BiBc^r-qqhn
zX7C8tbm}po!Ni1s2tmsQ--P;&F;Y)0#e{U38UHF3u$7%$uI2LVf)spoCdPwr3CXW2
zR{6mf2xn07wby*tV4GngQssC5m-z&C+d&lco8RPGXPMOr1 at NSG1;V36xvBV6|Di^{
z5>(pvNav=J_|$To8KVc*BPLh at 6)`<tq?440=}$Z+9=&Bw43lC(*Xeb`jH&feQSfM5
z0+E0kT>iJ&^PLVd!dkxD0?5=eD2$Q+L_g;H%6SHVH#7ve-*-t1;ZKxMndw__7artE
zA<&wHw0eQCXtBWDM-0$Uw=Sn#b>iPzmLrkZ60Q-e8_dU8!9^(wq1%{OqEdW>5 at jAK
zdJuDuA`OUSI=_suinb7#b{6%bN8%OZ^$&cu;ZM9}5>8F!2|`{^t1}3KLWIoGtQ6q?
z+W!CPu<FjPJW^3v0Kc1+72{wbAy7AjK-sYiw4 at M(7hyuTgypPG^mx?jAxworDDl at u
z+oJfl7Yao6CzrWzb!NoVBL(OBwQT{2C>|+3<s&8G1u<Kn(v38yVF}31>5=YJFH(%@
zOCP1>OhWG`h*A`P at QE)tIOp=olP4*0$nn~4M3el+xN25>v?8(+ai1&}5&}XY7ESza
zU<)`4+>6NG2bVN?OAl%$=^<HVjE^kMJE-yR!f&~vFbdRkA!unRz|js{lzdb;ST*!0
zKGGjRdi=F?aW at 00KX*LF8O8?pF1^GvSiJUo51`>KOEZsTo<RS5{+IA!k&qsJ`7%sI
zYJJqT2mg}aDS(4LRq|WC<wju`Q;DOqv$zmAk<Hc?pa5Rn(WdKBh|(?1O*2^NF#kP@
zNT&eZiiCG7Yj+Xm{vjMQl&+LuY6%NdeA<8>z3$P{F>flm&bA5N7`h$_Z(3qDqQ|G^
zp#Z`)hB2}b_()32G;V at SQuv$8T3+i+ygpmNEk)%o`6-t0#mD4UDYz6I<Y9r(a=|dR
z_3IGwL=;Spzm@^Pr&I8sgV=I<Y%wz^af%PY+!B_f=MiN>P!g7V3=1Pl+2B)_z at lGI
z0!Vo0)5c`EPQ#2htbVUkh|Ux}(|OqAm6aAdF_?;#)@<zA;Md)ogNGqV*GcdZ2to%z
z+nvAUSFZ+sOR&dANVhciwZw{9B?QP<h$7DbN;z--(S-o~`fWNXjj)6dwGfb!s=TtO
zSnEmR$)2*20nA_n#Z)PXAslo4BqK*R!0S2}+|Ar1(Dk}u=GXd&;-i*hKx^rzWDoO@
zXMZz5ifyRrAjAOyF6${3Jvwc}g1?J;$*=xUOoe|OtP=KCZ(Vkd0a at r%f9Dbc$3aU>
zxIHG>z>LJN6M8`Nzb7etg at 7+%w>l*~1Msw{rJ=KE5Ihq7dI(*A>CM4_do(~lX@=1$
zrq%ZDp5y2UC<=|Nzjux2EE||wPBN8l6%h=+mTP4AN5Es9`@^H%K`;3gA0j__t at 4|*
z;98ehlu-Cs2?~f#3`<cMeFa#@|NiP%0+^qo$LbXDh1(V&jv=mDPW{Kfpi?YO*pO=$
zwFI%2 at yNt^FivQU)LH6kJvN?BeBH=?W6Y4?cC4=dY~*0?BURV1woEo?NtD=6_X_W1
zofd7e=stgxe8>M$2s{~Cm>ji!>O@}g at uMrpO{m=~tiNAldsuv!VJ)9BNz0=~3YHbE
zyYa8)c+K^n9tEOxD?#`()l}*~{w-=<kJ=>uW+qkvbJ8_#UJq%g4*}Bq)JLe&iMI%)
zPiy;B+anhYC=hzA+xV0g%4JyC8UK<$2lI3iZ~4Dv`aSWTz~UE%eroQ{Z?-bf<kkW|
RvEnGL?$c55 at hKay{XZW*&;tMf

literal 0
HcmV?d00001

diff --git a/utests/kernels/my_test.cl b/utests/kernels/my_test.cl
new file mode 100644
index 0000000..91f1821
--- /dev/null
+++ b/utests/kernels/my_test.cl
@@ -0,0 +1,26 @@
+__kernel void
+my_test(__global int2 *src, __global int *offsets, __global uint2 *dst, int w)
+{
+	int i, index, j;
+	uint2 out;
+	unsigned int a, b, c, d;
+	int2 rle;
+	int gid = get_global_id(0);
+	index = offsets[gid];
+	int i0 = 0;
+	rle = src[index];
+	for (i = 0; i < w; i++, i0 += 8) {
+			if (i0+0 >= rle.x) { index++; rle = src[index]; } a = rle.y;
+			if (i0+1 >= rle.x) { index++; rle = src[index]; } b = rle.y;
+			if (i0+2 >= rle.x) { index++; rle = src[index]; } c = rle.y;
+			if (i0+3 >= rle.x) { index++; rle = src[index]; } d = rle.y;
+			out.x = (d<<24)|(c<<16)|(b<<8)|(a);
+			if (i0+4 >= rle.x) { index++; rle = src[index]; } a = rle.y;
+			if (i0+5 >= rle.x) { index++; rle = src[index]; } b = rle.y;
+			if (i0+6 >= rle.x) { index++; rle = src[index]; } c = rle.y;
+			if (i0+7 >= rle.x) { index++; rle = src[index]; } d = rle.y;
+			out.y = (d<<24)|(c<<16)|(b<<8)|(a);
+
+		dst[gid*w + i] = out;
+	}
+}
diff --git a/utests/kernels/null_kernel_arg.cl b/utests/kernels/null_kernel_arg.cl
new file mode 100644
index 0000000..68a4280
--- /dev/null
+++ b/utests/kernels/null_kernel_arg.cl
@@ -0,0 +1,9 @@
+__kernel void
+null_kernel_arg(__global unsigned int *dst, __global unsigned int * mask_global, __constant unsigned int* mask_const)
+{
+  if(dst && mask_global==0 && mask_const == NULL)
+  {
+    uint idx = (uint)get_global_id(0);
+    dst[idx] = idx;
+  }
+}
diff --git a/utests/kernels/test_cl_finish.cl b/utests/kernels/test_cl_finish.cl
new file mode 100644
index 0000000..723949c
--- /dev/null
+++ b/utests/kernels/test_cl_finish.cl
@@ -0,0 +1,12 @@
+
+
+__kernel void
+test_cl_finish(__global int *src, __global int *dst, int n, int num_threads)
+{
+	int tid, pos;
+
+	tid = get_global_id(0);
+	for (pos=tid; pos < n; pos+=num_threads) {
+		dst[pos] = src[pos];
+	}
+}
diff --git a/utests/kernels/test_copy_buffer.cl b/utests/kernels/test_copy_buffer.cl
new file mode 100644
index 0000000..6f2fd22
--- /dev/null
+++ b/utests/kernels/test_copy_buffer.cl
@@ -0,0 +1,6 @@
+__kernel void
+test_copy_buffer(__global float* src, __global float* dst)
+{
+  int id = (int)get_global_id(0);
+  dst[id] = src[id];
+}
diff --git a/utests/kernels/test_copy_buffer_row.cl b/utests/kernels/test_copy_buffer_row.cl
new file mode 100644
index 0000000..e33380f
--- /dev/null
+++ b/utests/kernels/test_copy_buffer_row.cl
@@ -0,0 +1,8 @@
+__kernel void
+test_copy_buffer_row(__global int *src, __global int *dst, __global int *data)
+{
+  int row = data[0];
+  int size = data[1];
+  int id = (int) get_global_id(0);
+  for (; id < size; id += row) dst[id] = src[id];
+}
diff --git a/utests/kernels/test_copy_image.cl b/utests/kernels/test_copy_image.cl
new file mode 100644
index 0000000..a5ee5e8
--- /dev/null
+++ b/utests/kernels/test_copy_image.cl
@@ -0,0 +1,10 @@
+__kernel void
+test_copy_image(__read_only image2d_t src, __write_only image2d_t dst, sampler_t sampler)
+{
+  int2 coord;
+  int4 color;
+  coord.x = (int)get_global_id(0);
+  coord.y = (int)get_global_id(1);
+  color = read_imagei(src, sampler, coord);
+  write_imagei(dst, coord, color);
+}
diff --git a/utests/kernels/test_copy_image1.cl b/utests/kernels/test_copy_image1.cl
new file mode 100644
index 0000000..28e7a7d
--- /dev/null
+++ b/utests/kernels/test_copy_image1.cl
@@ -0,0 +1,33 @@
+#define S(A,B,C) CLK_NORMALIZED_COORDS_##A | CLK_ADDRESS_##B | CLK_FILTER_##C
+
+#define COPY_IMAGE(_dst, _sampler, scoord, dcoord) \
+  color = read_imagei(src, _sampler, scoord);\
+  write_imagei(_dst, dcoord, color)
+
+__kernel void
+test_copy_image1(__read_only image2d_t src,
+                 __write_only image2d_t dst0,
+                 sampler_t sampler0,
+                 __write_only image2d_t dst1,
+                 __write_only image2d_t dst2,
+                 __write_only image2d_t dst3,
+                 __write_only image2d_t dst4,
+                 float w_inv, float h_inv)
+{
+  const sampler_t sampler1 = S(FALSE, REPEAT, NEAREST);
+  const sampler_t sampler2 = S(FALSE, CLAMP, NEAREST);
+  const sampler_t sampler3 = S(FALSE, MIRRORED_REPEAT, NEAREST);
+  const sampler_t sampler4 = S(TRUE, REPEAT, NEAREST);
+  int2 coord;
+  float2 fcoord;
+  int4 color;
+  coord.x = (int)get_global_id(0);
+  coord.y = (int)get_global_id(1);
+  fcoord.x = coord.x * w_inv;
+  fcoord.y = coord.y * h_inv;
+  COPY_IMAGE(dst0, sampler0, coord, coord);
+  COPY_IMAGE(dst1, sampler1, coord, coord);
+  COPY_IMAGE(dst2, sampler2, coord, coord);
+  COPY_IMAGE(dst3, sampler3, coord, coord);
+  COPY_IMAGE(dst4, sampler4, fcoord, coord);
+}
diff --git a/utests/kernels/test_copy_image_3d.cl b/utests/kernels/test_copy_image_3d.cl
new file mode 100644
index 0000000..103fb69
--- /dev/null
+++ b/utests/kernels/test_copy_image_3d.cl
@@ -0,0 +1,28 @@
+__kernel void
+test_copy_image_3d(__read_only image3d_t src,
+                   __write_only image3d_t dst,
+                   sampler_t sampler,
+                   __write_only image2d_t buf0,
+                   __write_only image2d_t buf1,
+                   __write_only image2d_t buf2,
+                   __write_only image2d_t buf3)
+{
+  int4 coord;
+  int2 coord2;
+  float4 color;
+  coord.x = (int)get_global_id(0);
+  coord.y = (int)get_global_id(1);
+  coord.z = (int)get_global_id(2);
+  coord2.x = coord.x;
+  coord2.y = coord.y;
+  color = read_imagef(src, sampler, coord);
+  write_imagef(dst, coord, color);
+  if (coord.z == 0)
+    write_imagef(buf0, coord2, color);
+  else if (coord.z == 1)
+    write_imagef(buf1, coord2, color);
+  else if (coord.z == 2)
+    write_imagef(buf2, coord2, color);
+  else if (coord.z == 3)
+    write_imagef(buf3, coord2, color);
+}
diff --git a/utests/kernels/test_fill_gl_image.cl b/utests/kernels/test_fill_gl_image.cl
new file mode 100644
index 0000000..4250a57
--- /dev/null
+++ b/utests/kernels/test_fill_gl_image.cl
@@ -0,0 +1,11 @@
+__kernel void
+test_fill_gl_image(image2d_t img, int color)
+{
+	int2 coord;
+        float4 color_v4;
+        coord.x = get_global_id(0);
+        coord.y = get_global_id(1);
+        color_v4 = (float4){((color >> 24) & 0xFF), (color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF};
+        color_v4 = color_v4 / 255.0f;
+        write_imagef(img, coord, color_v4);
+}
diff --git a/utests/kernels/test_fill_image.cl b/utests/kernels/test_fill_image.cl
new file mode 100644
index 0000000..3760568
--- /dev/null
+++ b/utests/kernels/test_fill_image.cl
@@ -0,0 +1,13 @@
+__kernel void
+test_fill_image(__write_only image2d_t dst, uint color)
+{
+  int2 coord;
+  int4 color4;
+  color4.s0  = (color >> 24) & 0xFF;
+  color4.s1  = (color >> 16) & 0xFF;
+  color4.s2  = (color >> 8) & 0xFF;
+  color4.s3  = color & 0xFF;
+  coord.x = (int)get_global_id(0);
+  coord.y = (int)get_global_id(1);
+  write_imagei(dst, coord, color4);
+}
diff --git a/utests/kernels/test_fill_image0.cl b/utests/kernels/test_fill_image0.cl
new file mode 100644
index 0000000..9428092
--- /dev/null
+++ b/utests/kernels/test_fill_image0.cl
@@ -0,0 +1,9 @@
+__kernel void
+test_fill_image0(__write_only image2d_t dst)
+{
+  int2 coord;
+  coord.x = (int)get_global_id(0);
+  coord.y = (int)get_global_id(1);
+  int4 color4 = {coord.y & 0xFF, (coord.y & 0xFF00) >> 8, coord.x & 0xFF, (coord.x & 0xFF00) >> 8};
+  write_imagei(dst, coord, color4);
+}
diff --git a/utests/kernels/test_fill_image_3d.cl b/utests/kernels/test_fill_image_3d.cl
new file mode 100644
index 0000000..4988f69
--- /dev/null
+++ b/utests/kernels/test_fill_image_3d.cl
@@ -0,0 +1,14 @@
+__kernel void
+test_fill_image_3d(__write_only image3d_t dst, uint color)
+{
+  int4 coord;
+  int4 color4;
+  color4.s0  = (color >> 24) & 0xFF;
+  color4.s1  = (color >> 16) & 0xFF;
+  color4.s2  = (color >> 8) & 0xFF;
+  color4.s3  = color & 0xFF;
+  coord.x = (int)get_global_id(0);
+  coord.y = (int)get_global_id(1);
+  coord.z = (int)get_global_id(2);
+  write_imagei(dst, coord, color4);
+}
diff --git a/utests/kernels/test_fill_image_3d_2.cl b/utests/kernels/test_fill_image_3d_2.cl
new file mode 100644
index 0000000..1f9eaa1
--- /dev/null
+++ b/utests/kernels/test_fill_image_3d_2.cl
@@ -0,0 +1,10 @@
+__kernel void
+test_fill_image_3d_2(__write_only image3d_t dst)
+{
+  int4 coord;
+  int4 color4 = {0x12, 0x34, 0x56, 0x78};
+  coord.x = (int)get_global_id(0);
+  coord.y = (int)get_global_id(1);
+  coord.z = (int)get_global_id(2);
+  write_imagei(dst, coord, color4);
+}
diff --git a/utests/kernels/test_get_image_info.cl b/utests/kernels/test_get_image_info.cl
new file mode 100644
index 0000000..8f69b75
--- /dev/null
+++ b/utests/kernels/test_get_image_info.cl
@@ -0,0 +1,13 @@
+__kernel void
+test_get_image_info(__write_only image3d_t src, __global int *size, __global int *fmt)
+{
+  int id = (int)get_global_id(0);
+  int w, h, depth;
+  w = get_image_width(src);
+  h = get_image_height(src);
+  depth = get_image_depth(src);
+  int channel_data_type = get_image_channel_data_type(src);
+  int channel_order = get_image_channel_order(src);
+  size[id] = (w << 20 | h << 8  | depth);
+  fmt[id] = (channel_data_type << 16 | channel_order);
+}
diff --git a/utests/kernels/test_movforphi_undef.cl b/utests/kernels/test_movforphi_undef.cl
new file mode 100644
index 0000000..035c02a
--- /dev/null
+++ b/utests/kernels/test_movforphi_undef.cl
@@ -0,0 +1,18 @@
+__kernel void
+test_movforphi_undef(__read_only image2d_t src, __write_only image2d_t dst, sampler_t sampler)
+{
+  int2 coord, dstCoord;
+  int4 color;
+  int x = get_global_id(0);
+  int y = get_global_id(1);
+  dstCoord.x = x;
+  dstCoord.y = y;
+  coord.y = y;
+  for(int j = -8; j < 2; j++)
+  {
+    coord.x = j + x;
+    color = read_imagei(src, sampler, coord);
+    if (j == 1 + x)
+      write_imagei(dst, dstCoord, color);
+  }
+}
diff --git a/utests/kernels/test_write_only.cl b/utests/kernels/test_write_only.cl
new file mode 100644
index 0000000..27c7acb
--- /dev/null
+++ b/utests/kernels/test_write_only.cl
@@ -0,0 +1,6 @@
+__kernel void
+test_write_only(__global int *dst)
+{
+  int id = (int)get_global_id(0);
+  dst[id] = id;
+}
diff --git a/utests/load_program_from_bin.cpp b/utests/load_program_from_bin.cpp
deleted file mode 100644
index d45c2bd..0000000
--- a/utests/load_program_from_bin.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-#include "utest_helper.hpp"
-#include "utest_file_map.hpp"
-#include <cmath>
-#include <algorithm>
-
-using namespace std;
-
-static void cpu(int global_id, float *src, float *dst) {
-    dst[global_id] = ceilf(src[global_id]);
-}
-
-static void test_load_program_from_bin(void)
-{
-    const size_t n = 16;
-    float cpu_dst[16], cpu_src[16];
-    cl_int status;
-    cl_int binary_status;
-    char *ker_path = NULL;
-
-    cl_file_map_t *fm = cl_file_map_new();
-    ker_path = cl_do_kiss_path("compiler_ceil.bin", device);
-    OCL_ASSERT (cl_file_map_open(fm, ker_path) == CL_FILE_MAP_SUCCESS);
-
-    const unsigned char *src = (const unsigned char *)cl_file_map_begin(fm);
-    const size_t sz = cl_file_map_size(fm);
-
-    program = clCreateProgramWithBinary(ctx, 1,
-              &device, &sz, &src, &binary_status, &status);
-
-    OCL_ASSERT(program && status == CL_SUCCESS);
-
-    /* OCL requires to build the program even if it is created from a binary */
-    OCL_ASSERT(clBuildProgram(program, 1, &device, NULL, NULL, NULL) == CL_SUCCESS);
-
-    kernel = clCreateKernel(program, "compiler_ceil", &status);
-    OCL_ASSERT(status == CL_SUCCESS);
-
-    OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-    OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-    OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-    OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-    globals[0] = 16;
-    locals[0] = 16;
-
-    // Run random tests
-    for (uint32_t pass = 0; pass < 8; ++pass) {
-        OCL_MAP_BUFFER(0);
-        for (int32_t i = 0; i < (int32_t) n; ++i)
-            cpu_src[i] = ((float*)buf_data[0])[i] = .1f * (rand() & 15) - .75f;
-        OCL_UNMAP_BUFFER(0);
-
-        // Run the kernel on GPU
-        OCL_NDRANGE(1);
-
-        // Run on CPU
-        for (int32_t i = 0; i < (int32_t) n; ++i) cpu(i, cpu_src, cpu_dst);
-
-        // Compare
-        OCL_MAP_BUFFER(1);
-
-#if 0
-        printf("#### GPU:\n");
-        for (int32_t i = 0; i < (int32_t) n; ++i)
-            printf(" %f", ((float *)buf_data[1])[i]);
-        printf("\n#### CPU:\n");
-        for (int32_t i = 0; i < (int32_t) n; ++i)
-            printf(" %f", cpu_dst[i]);
-        printf("\n");
-#endif
-
-        for (int32_t i = 0; i < (int32_t) n; ++i)
-            OCL_ASSERT(((float *)buf_data[1])[i] == cpu_dst[i]);
-        OCL_UNMAP_BUFFER(1);
-    }
-}
-
-MAKE_UTEST_FROM_FUNCTION(test_load_program_from_bin);
diff --git a/utests/my_test.cpp b/utests/my_test.cpp
deleted file mode 100644
index 73a4718..0000000
--- a/utests/my_test.cpp
+++ /dev/null
@@ -1,99 +0,0 @@
-#include "utest_helper.hpp"
-
-struct seg {
-	unsigned int end, color, offset;
-	seg(int e, int c):end(e), color(c) {}
-};
-typedef struct seg seg;
-
-typedef struct {
-	std::vector<seg> segs;
-} rle_data;
-
-struct rle_image {
-	int width, height;
-	std::vector<rle_data> data;
-	rle_image(int w, int h):width(w), height(h) {}
-};
-typedef struct rle_image rle_image;
-
-static  void read_data(const char *filename, rle_image &image)
-{
-	FILE *fp;
-	char line[4096];
-	int i;
-	fp = fopen(filename, "r");
-	for (i = 0; i < image.height; i++) {
-		char *nptr = line, *endptr;
-		rle_data d;
-		int start = 0;
-		if (fgets(line, sizeof(line), fp) == NULL)
-			break;
-		for (;;) {
-			int len = strtol(nptr, &endptr, 10);
-			nptr = endptr;
-			int color = strtol(nptr, &endptr, 10);
-			nptr = endptr;
-			seg s(start + len, color);
-			d.segs.push_back(s);
-			if (*endptr == '\n' || *endptr == 0)
-				break;
-			start += len;
-		}
-		image.data.push_back(d);
-	}
-	fclose(fp);
-}
-
-static void prepare_rle_buffer(rle_image &image, std::vector<int> &rle_buffer, int *offsets)
-{
-	int offset = 0;
-	for (int i = 0; i < image.height; i++) {
-		unsigned int j;
-		rle_data d = image.data[i];
-		for (j = 0; j < d.segs.size(); j++) {
-			rle_buffer.push_back(d.segs[j].end);
-			rle_buffer.push_back(d.segs[j].color);
-		}
-		offsets[i] = offset;
-		offset += j;
-	}
-
-}
-
-static void expand_rle(rle_image &image)
-{
-	std::vector<int> rle_buffer;
-	int offsets[image.height];
-	int w = image.width/16;
-	prepare_rle_buffer(image, rle_buffer, offsets);
-	OCL_CREATE_KERNEL("my_test");
-	OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, 2*sizeof(int)*rle_buffer.size(), &rle_buffer[0]);
-	OCL_CREATE_BUFFER(buf[1], CL_MEM_COPY_HOST_PTR, sizeof(int)*image.height, offsets);
-	OCL_CREATE_BUFFER(buf[2], 0, image.width*image.height, NULL);
-	OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-	OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-	OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
-	OCL_SET_ARG(3, sizeof(w), &w);
-
-	globals[0] = image.height;
-	locals[0] = 16;
-	OCL_NDRANGE(1);
-#if 1
-	OCL_MAP_BUFFER(2);
-	for (int i = 0; i < image.height; i++) {
-		for (int j = 0; j < image.width; j++)
-			printf("%d ", ((unsigned char*)buf_data[2])[i*image.width+j]);
-		printf("\n****\n");
-	}
-	OCL_UNMAP_BUFFER(2);
-#endif
-}
-
-static void my_test(void)
-{
-	rle_image image(256, 256);
-	read_data("new_data.txt", image);
-	expand_rle(image);
-}
-MAKE_UTEST_FROM_FUNCTION(my_test);
diff --git a/utests/new_data.txt b/utests/new_data.txt
deleted file mode 100644
index b12bb13..0000000
--- a/utests/new_data.txt
+++ /dev/null
@@ -1,256 +0,0 @@
-6 5 3 4 37 15 10 2 200 3
-156 1 97 200 3 3
-2 1 2 10 128 2 124 25
-5 5 251 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 1
-256 2
-256 3
-256 0
-256 0
-256 0
-256 1
-256 2
-256 3
-256 0
-256 0
-256 0
-256 0
-256 0
-256 4
-256 5
-256 6
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 3
-100 255 100 155 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 0 100 255 56 0
-100 253 100 255 56 0
-56 0 20 8 180 9
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-256 0
-1 253 5 252 150 168 100 254
-150 168 100 254 1 253 5 252
diff --git a/utests/profiling_exec.cpp b/utests/profiling_exec.cpp
deleted file mode 100644
index 2244300..0000000
--- a/utests/profiling_exec.cpp
+++ /dev/null
@@ -1,101 +0,0 @@
-#include "utest_helper.hpp"
-#include "string.h"
-
-static void cpu_exec (int n, float* src, float* dst)
-{
-    int i = 0;
-    for (; i < n; i++) {
-	float f = src[i];
-	f = f < 0 ? -f : f;
-	dst[i] = f;
-    }
-}
-
-#define QUEUE_SECONDS_LIMIT 10
-#define SUBMIT_SECONDS_LIMIT 20
-#define COMMAND_SECONDS_LIMIT 10
-
-static void check_profiling_time(cl_ulong queued, cl_ulong submit, cl_ulong start, cl_ulong end)
-{
-    size_t profiling_resolution = 0;
-    OCL_CALL(clGetDeviceInfo, device, CL_DEVICE_PROFILING_TIMER_RESOLUTION,
-             sizeof(profiling_resolution), &profiling_resolution, NULL);
-
-    /* Convert the time to second. */
-    double queue_to_submit = (double)(submit - queued)*1e-9;
-    double submit_to_start = (double)(start - submit)*1e-9;
-    double start_to_end = (double)(end - start)*1e-9;
-
-    //printf("Profiling info:\n");
-    //printf("Time from queue to submit : %fms\n", (double)(queue_to_submit) * 1000.f );
-    //printf( "Time from submit to start : %fms\n", (double)(submit_to_start) * 1000.f );
-    //printf( "Time from start to end: %fms\n", (double)(start_to_end) * 1000.f );
-
-    OCL_ASSERTM(queued <= submit, "Enqueue time is later than submit time, invalid\n");
-    OCL_ASSERTM(submit <= start, "Submit time is later than start time, invalid\n");
-    OCL_ASSERTM(start <= end, "Start time is later than end time, invalid\n");
-
-    OCL_ASSERTM(queue_to_submit <= QUEUE_SECONDS_LIMIT, "Too large time from queue to submit\n");
-    OCL_ASSERTM(submit_to_start <= QUEUE_SECONDS_LIMIT, "Too large time from submit to start\n");
-    OCL_ASSERTM(start_to_end <= QUEUE_SECONDS_LIMIT, "Too large time from start to end\n");
-}
-
-static void profiling_exec(void)
-{
-    const size_t n = 512;
-    cl_int status = CL_SUCCESS;
-    cl_command_queue profiling_queue = NULL;
-    cl_command_queue tmp_queue = NULL;
-    float* cpu_src = (float *)malloc(n*sizeof(float));
-    float* cpu_dst = (float *)malloc(n*sizeof(float));
-    cl_event exec_event;
-    cl_ulong time_queue, time_submit, time_start, time_end;
-
-
-    /* Because the profiling prop, we can not use default queue. */
-    profiling_queue = clCreateCommandQueue(ctx, device, CL_QUEUE_PROFILING_ENABLE, &status);
-    OCL_ASSERT(status == CL_SUCCESS);
-
-    /* save the default queue. */
-    tmp_queue = queue;
-    queue = profiling_queue;
-
-    OCL_CREATE_KERNEL("compiler_fabs");
-
-    OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
-    OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
-    OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-    OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
-    globals[0] = locals[0] = n;
-
-    OCL_MAP_BUFFER(0);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-	cpu_src[i] = ((float*)buf_data[0])[i] = .1f * (rand() & 15) - .75f;
-    OCL_UNMAP_BUFFER(0);
-
-    cpu_exec(n, cpu_src, cpu_dst);
-
-    // Run the kernel on GPU
-    OCL_CALL(clEnqueueNDRangeKernel, queue, kernel, 1, NULL, globals, locals, 0, NULL, &exec_event);
-    OCL_CALL(clWaitForEvents, 1, &exec_event);
-
-    OCL_CALL(clGetEventProfilingInfo, exec_event, CL_PROFILING_COMMAND_QUEUED, sizeof(cl_ulong), &time_queue, NULL);
-    OCL_CALL(clGetEventProfilingInfo, exec_event, CL_PROFILING_COMMAND_SUBMIT, sizeof(cl_ulong), &time_submit, NULL);
-    OCL_CALL(clGetEventProfilingInfo, exec_event, CL_PROFILING_COMMAND_START, sizeof(cl_ulong), &time_start, NULL);
-    OCL_CALL(clGetEventProfilingInfo, exec_event, CL_PROFILING_COMMAND_END, sizeof(cl_ulong), &time_end, NULL);
-
-    check_profiling_time(time_queue, time_submit, time_start, time_end);
-
-    // Compare
-    OCL_MAP_BUFFER(1);
-    for (int32_t i = 0; i < (int32_t) n; ++i)
-	OCL_ASSERT(((float *)buf_data[1])[i] == cpu_dst[i]);
-    OCL_UNMAP_BUFFER(1);
-
-    queue = tmp_queue;
-    clReleaseCommandQueue(profiling_queue);
-    free(cpu_dst);
-    free(cpu_src);
-}
-
-MAKE_UTEST_FROM_FUNCTION(profiling_exec);
diff --git a/utests/runtime_createcontext.cpp b/utests/runtime_createcontext.cpp
deleted file mode 100644
index f08a189..0000000
--- a/utests/runtime_createcontext.cpp
+++ /dev/null
@@ -1,14 +0,0 @@
-#include "utest_helper.hpp"
-
-void runtime_createcontextfromtype(void) {
-  cl_int status;
-
-  cl_context ctx;
-  ctx = clCreateContextFromType(NULL, CL_DEVICE_TYPE_GPU, NULL, NULL, &status);
-  if (ctx == NULL) {
-    OCL_THROW_ERROR("runtime_createcontextfromtype", status);
-  }
-  clReleaseContext(ctx);
-}
-
-MAKE_UTEST_FROM_FUNCTION(runtime_createcontextfromtype);
diff --git a/utests/runtime_event.cpp b/utests/runtime_event.cpp
deleted file mode 100644
index b974f6a..0000000
--- a/utests/runtime_event.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-#include "utest_helper.hpp"
-
-#define BUFFERSIZE  32*1024
-void runtime_event(void)
-{
-  const size_t n = BUFFERSIZE;
-  cl_int cpu_src[BUFFERSIZE];
-  cl_event ev[3];
-  cl_int status = 0;
-  cl_int value = 34;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("compiler_event");
-  OCL_CREATE_BUFFER(buf[0], 0, BUFFERSIZE*sizeof(int), NULL);
-
-  for(cl_uint i=0; i<BUFFERSIZE; i++)
-    cpu_src[i] = 3;
-
-  OCL_CREATE_USER_EVENT(ev[0]);
-
-  clEnqueueWriteBuffer(queue, buf[0], CL_TRUE, 0, BUFFERSIZE*sizeof(int), (void *)cpu_src, 1, &ev[0], &ev[1]);
-
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(int), &value);
-
-  // Run the kernel
-  globals[0] = n;
-  locals[0] = 32;
-  clEnqueueNDRangeKernel(queue, kernel, 1, NULL, globals, locals, 2, &ev[0], &ev[2]);
-
-  for (cl_uint i = 0; i != sizeof(ev) / sizeof(cl_event); ++i) {
-    clGetEventInfo(ev[i], CL_EVENT_COMMAND_EXECUTION_STATUS, sizeof(status), &status, NULL);
-    OCL_ASSERT(status >= CL_SUBMITTED);
-  }
-
-  buf_data[0] = clEnqueueMapBuffer(queue, buf[0], CL_TRUE, 0, 0, BUFFERSIZE*sizeof(int), 1, &ev[2], NULL, NULL);
-
-  OCL_SET_USER_EVENT_STATUS(ev[0], CL_COMPLETE);
-
-  clGetEventInfo(ev[0], CL_EVENT_COMMAND_EXECUTION_STATUS, sizeof(status), &status, NULL);
-  OCL_ASSERT(status == CL_COMPLETE);
-
-  OCL_FINISH();
-
-  for (cl_uint i = 0; i != sizeof(ev) / sizeof(cl_event); ++i) {
-    clGetEventInfo(ev[i], CL_EVENT_COMMAND_EXECUTION_STATUS, sizeof(status), &status, NULL);
-    OCL_ASSERT(status <= CL_COMPLETE);
-  }
-
-  for (uint32_t i = 0; i < n; ++i) {
-    OCL_ASSERT(((int*)buf_data[0])[i] == (int)value + 0x3);
-  }
-  clEnqueueUnmapMemObject(queue, buf[0], buf_data[0], 0, NULL, NULL);
-
-  for (cl_uint i = 0; i != sizeof(ev) / sizeof(cl_event); ++i) {
-    clReleaseEvent(ev[i]);
-  }
-}
-
-MAKE_UTEST_FROM_FUNCTION(runtime_event);
diff --git a/utests/runtime_flat_address_space.cpp b/utests/runtime_flat_address_space.cpp
deleted file mode 100644
index 08167c4..0000000
--- a/utests/runtime_flat_address_space.cpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/* 
- * Copyright © 2012 Intel Corporation
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author: Benjamin Segovia <benjamin.segovia at intel.com>
- */
-
-#include "utest_helper.hpp"
-
-int
-main(int argc, char *argv[])
-{
-  cl_mem dst[24];
-  int *dst_buffer = NULL;
-  const size_t n = 32 * 1024 * 1024;
-  const size_t global_work_size = n;
-  const size_t local_work_size = 16;
-  int status = 0;
-
-  if ((status = cl_test_init("test_write_only.cl", "test_write_only", SOURCE)) != 0)
-    goto error;
-
-  for (uint32_t j = 0; j < 24; ++j)
-  {
-    // Allocate the two buffers
-    dst[j] = clCreateBuffer(ctx, 0, n * sizeof(uint32_t), NULL, &status);
-    if (status != CL_SUCCESS) goto error;
-
-    // Set source and destination
-    OCL_CALL (clSetKernelArg, kernel, 0, sizeof(cl_mem), &dst[j]);
-
-    // Run the kernel
-    OCL_CALL (clEnqueueNDRangeKernel, queue,
-                                  kernel,
-                                  1,
-                                  NULL,
-                                  &global_work_size,
-                                  &local_work_size,
-                                  0,
-                                  NULL,
-                                  NULL);
-
-    // Be sure that everything run fine
-    dst_buffer = (int *) clMapBufferIntel(dst[j], &status);
-    if (status != CL_SUCCESS)
-      goto error;
-    for (uint32_t i = 0; i < n; ++i)
-      if (dst_buffer[i] != int(i)) {
-        fprintf(stderr, "run-time flat address space failed\n");
-        exit(-1);
-      }
-    OCL_CALL (clUnmapBufferIntel, dst[j]);
-  }
-
-  for (uint32_t j = 0; j < 24; ++j) OCL_CALL (clReleaseMemObject, dst[j]);
-  cl_test_destroy();
-  printf("%i memory leaks\n", clReportUnfreedIntel());
-  assert(clReportUnfreedIntel() == 0);
-
-error:
-  return status;
-}
-
diff --git a/utests/runtime_null_kernel_arg.cpp b/utests/runtime_null_kernel_arg.cpp
deleted file mode 100644
index 447e345..0000000
--- a/utests/runtime_null_kernel_arg.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#include "utest_helper.hpp"
-
-void runtime_null_kernel_arg(void)
-{
-  const size_t n = 32;
-
-  // Setup kernel and buffers
-  OCL_CREATE_KERNEL("null_kernel_arg");
-  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
-  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
-  OCL_SET_ARG(1, sizeof(cl_mem), NULL);
-  OCL_SET_ARG(2, sizeof(cl_mem), NULL);
-
-    // Run the kernel
-  globals[0] = n;
-  locals[0] = 16;
-  OCL_NDRANGE(1);
-  OCL_MAP_BUFFER(0);
-
-  // Check results
-  for (uint32_t i = 0; i < n; ++i)
-    OCL_ASSERT(((uint32_t*)buf_data[0])[i] == i);
-  OCL_UNMAP_BUFFER(0);
-}
-
-
-MAKE_UTEST_FROM_FUNCTION(runtime_null_kernel_arg);
diff --git a/utests/setenv.sh.in b/utests/setenv.sh.in
deleted file mode 100644
index ad77369..0000000
--- a/utests/setenv.sh.in
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-#
-export OCL_PCM_PATH=@LOCAL_PCM_OBJECT_DIR@
-export OCL_PCH_PATH=@LOCAL_PCH_OBJECT_DIR@
-export OCL_KERNEL_PATH=@CMAKE_CURRENT_SOURCE_DIR@/../kernels
diff --git a/utests/sub_buffer.cpp b/utests/sub_buffer.cpp
deleted file mode 100644
index f65e8ff..0000000
--- a/utests/sub_buffer.cpp
+++ /dev/null
@@ -1,135 +0,0 @@
-#include "utest_helper.hpp"
-
-void sub_bufffer_check(void)
-{
-    cl_int error;
-    cl_ulong max_alloc_size;
-    cl_uint address_align;
-    cl_mem main_buf;
-    cl_mem sub_buf;
-    char *main_buf_content;
-    char sub_buf_content[32];
-
-    error = clGetDeviceInfo(device, CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof(max_alloc_size), &max_alloc_size, NULL);
-    OCL_ASSERT(error == CL_SUCCESS);
-    error = clGetDeviceInfo(device, CL_DEVICE_MEM_BASE_ADDR_ALIGN, sizeof(address_align ), &address_align, NULL );
-    OCL_ASSERT(error == CL_SUCCESS);
-
-    main_buf_content = (char *)malloc(sizeof(char) * max_alloc_size);
-
-    for (cl_ulong i = 0; i < max_alloc_size; i++) {
-        main_buf_content[i] = rand() & 63;
-    }
-
-    main_buf = clCreateBuffer(ctx, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR, max_alloc_size, main_buf_content, &error);
-    OCL_ASSERT(error == CL_SUCCESS);
-
-    /* Test read sub buffer. */
-    for (cl_ulong sz = 64; sz < max_alloc_size; sz*=4) {
-        for (cl_ulong off = 0; off < max_alloc_size; off += 1234) {
-            cl_buffer_region region;
-            region.origin = off;
-            region.size = sz;
-
-            sub_buf = clCreateSubBuffer(main_buf, 0, CL_BUFFER_CREATE_TYPE_REGION, &region, &error );
-
-            /* invalid size, should be failed. */
-            if(off + sz > max_alloc_size) {
-                OCL_ASSERT(error != CL_SUCCESS);
-                continue;
-            }
-            /* invalid align, should be failed. */
-            if(off & (address_align-1)) {
-                OCL_ASSERT(error != CL_SUCCESS);
-                continue;
-            }
-
-            OCL_ASSERT(error == CL_SUCCESS);
-
-            error = clEnqueueReadBuffer(queue, sub_buf, CL_TRUE, 0, 32, (void *)sub_buf_content, 0, NULL, NULL);
-            OCL_ASSERT(error == CL_SUCCESS);
-
-#if 0
-            printf("\nRead ########### Src buffer: \n");
-            for (int i = 0; i < 32; ++i)
-                printf(" %2.2u", main_buf_content[off + i]);
-
-            printf("\nRead ########### dst buffer: \n");
-            for (int i = 0; i < 32; ++i)
-                printf(" %2.2u", sub_buf_content[i]);
-            printf("\n");
-#endif
-            for (int i = 0; i < 32; ++i) {
-
-                if (main_buf_content[off + i] != sub_buf_content[i]) {
-                    printf ("different index is %d\n", i);
-                    OCL_ASSERT(0);
-                }
-            }
-
-        }
-    }
-
-
-    for (cl_ulong sz = 64; sz < max_alloc_size; sz*=4) {
-        for (cl_ulong off = 0; off < max_alloc_size; off += 1234) {
-            cl_buffer_region region;
-            region.origin = off;
-            region.size = sz;
-
-            sub_buf = clCreateSubBuffer(main_buf, 0, CL_BUFFER_CREATE_TYPE_REGION, &region, &error );
-
-            /* invalid size, should be failed. */
-            if(off + sz > max_alloc_size) {
-                OCL_ASSERT(error != CL_SUCCESS);
-                continue;
-            }
-            /* invalid align, should be failed. */
-            if(off & (address_align-1)) {
-                OCL_ASSERT(error != CL_SUCCESS);
-                continue;
-            }
-
-            OCL_ASSERT(error == CL_SUCCESS);
-
-            for (int i = 0; i < 32; i++) {
-                sub_buf_content[i] = rand() & 63;
-            }
-
-            error = clEnqueueWriteBuffer(queue, main_buf, CL_TRUE, off, 32, sub_buf_content, 0, NULL, NULL);
-            OCL_ASSERT(error == CL_SUCCESS);
-
-            void * mapped_ptr = clEnqueueMapBuffer(queue, sub_buf, CL_TRUE, (cl_map_flags)( CL_MAP_READ | CL_MAP_WRITE ),
-                    0, 32, 0, NULL, NULL, &error );
-            OCL_ASSERT(error == CL_SUCCESS);
-
-#if 0
-            printf("\nMap ########### Src buffer: \n");
-            for (int i = 0; i < 32; ++i)
-                printf(" %2.2u", sub_buf_content[i]);
-
-            printf("\nMap ########### dst buffer: \n");
-            for (int i = 0; i < 32; ++i)
-                printf(" %2.2u", ((char *)mapped_ptr)[i]);
-            printf("\n");
-#endif
-            for (int i = 0; i < 32; i++) {
-
-                if (((char *)mapped_ptr)[i] != sub_buf_content[i]) {
-                    printf ("different index is %d\n", i);
-                    OCL_ASSERT(0);
-                }
-            }
-
-            error = clEnqueueUnmapMemObject(queue, sub_buf, mapped_ptr, 0, NULL, NULL );
-            OCL_ASSERT(error == CL_SUCCESS);
-
-            clReleaseMemObject(sub_buf);
-        }
-    }
-
-
-    free(main_buf_content);
-}
-
-MAKE_UTEST_FROM_FUNCTION(sub_bufffer_check);
diff --git a/utests/utest.cpp b/utests/utest.cpp
deleted file mode 100644
index 718916f..0000000
--- a/utests/utest.cpp
+++ /dev/null
@@ -1,99 +0,0 @@
-/* 
- * Copyright © 2012 Intel Corporation
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author: Benjamin Segovia <benjamin.segovia at intel.com>
- */
-
-/**
- * \file utest.cpp
- * \author Benjamin Segovia <benjamin.segovia at intel.com>
- */
-#include "utest.hpp"
-#include "utest_helper.hpp"
-#include <vector>
-#include <string>
-#include <iostream>
-#include <cstring>
-
-using namespace std;
-vector<UTest> *UTest::utestList = NULL;
-void releaseUTestList(void) { delete UTest::utestList; }
-
-UTest::UTest(Function fn, const char *name, bool haveIssue, bool needDestroyProgram)
-       : fn(fn), name(name), haveIssue(haveIssue), needDestroyProgram(needDestroyProgram) {
-  if (utestList == NULL) {
-    utestList = new vector<UTest>;
-    atexit(releaseUTestList);
-  }
-  utestList->push_back(*this);
-}
-
-static bool strequal(const char *s1, const char *s2) {
-  if (strcmp(s1, s2) == 0) return true;
-  return false;
-}
-
-void UTest::run(const char *name) {
-  if (name == NULL) return;
-  if (utestList == NULL) return;
-  for (size_t i = 0; i < utestList->size(); ++i) {
-    const UTest &utest = (*utestList)[i];
-    if (utest.name == NULL || utest.fn == NULL ) continue;
-    if (strequal(utest.name, name)) {
-      std::cout << utest.name << ":" << std::endl;
-      (utest.fn)();
-      std::cout << std::endl;
-      cl_kernel_destroy(true);
-      cl_buffer_destroy();
-    }
-  }
-}
-
-void UTest::runAll(void) {
-  if (utestList == NULL) return;
-  for (size_t i = 0; i < utestList->size(); ++i) {
-    const UTest &utest = (*utestList)[i];
-    if (utest.fn == NULL) continue;
-    std::cout << utest.name << ":" << std::endl;
-    (utest.fn)();
-    std::cout << std::endl;
-    cl_kernel_destroy(utest.needDestroyProgram);
-    cl_buffer_destroy();
-  }
-}
-
-void UTest::runAllNoIssue(void) {
-  if (utestList == NULL) return;
-  for (size_t i = 0; i < utestList->size(); ++i) {
-    const UTest &utest = (*utestList)[i];
-    if (utest.fn == NULL || utest.haveIssue) continue;
-    std::cout << utest.name << ":" << std::endl;
-    (utest.fn)();
-    std::cout << std::endl;
-    cl_kernel_destroy(utest.needDestroyProgram);
-    cl_buffer_destroy();
-  }
-}
-
-void UTest::listAllCases()
-{
-  if (utestList == NULL) return;
-    for (size_t i = 0; i < utestList->size(); ++i) {
-      const UTest &utest = (*utestList)[i];
-      if (utest.fn == NULL) continue;
-    std::cout << utest.name << std::endl;
- }
-}
diff --git a/utests/utest.hpp b/utests/utest.hpp
deleted file mode 100644
index 01d4a8c..0000000
--- a/utests/utest.hpp
+++ /dev/null
@@ -1,107 +0,0 @@
-/* 
- * Copyright © 2012 Intel Corporation
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author: Benjamin Segovia <benjamin.segovia at intel.com>
- */
-
-/**
- * \file utest.hpp
- * \author Benjamin Segovia <benjamin.segovia at intel.com>
- *
- * Provides all unit test capabilites. It is rather rudimentary but it should
- * do the job
- */
-#ifndef __UTEST_UTEST_HPP__
-#define __UTEST_UTEST_HPP__
-
-#include "utest_exception.hpp"
-#include <vector>
-#include <iostream>
-
-/*! Quick and dirty unit test system with registration */
-struct UTest
-{
-  /*! A unit test function to run */
-  typedef void (*Function) (void);
-  /*! Empty test */
-  UTest(void);
-  /*! Build a new unit test and append it to the unit test list */
-  UTest(Function fn, const char *name, bool haveIssue = false, bool needDestroyProgram = true);
-  /*! Function to execute */
-  Function fn;
-  /*! Name of the test */
-  const char *name;
-  /*! Indicate whether current test cases has issue to be fixes */
-  bool haveIssue;
-  /*! Indicate whether destroy kernels/program. */
-  bool needDestroyProgram;
-  /*! The tests that are registered */
-  static std::vector<UTest> *utestList;
-  /*! Run the test with the given name */
-  static void run(const char *name);
-  /*! Run all the tests without known issue*/
-  static void runAllNoIssue(void);
-  /*! Run all the tests */
-  static void runAll(void);
-  /*! List all test cases */
-  static void listAllCases(void);
-};
-
-/*! Register a new unit test */
-#define UTEST_REGISTER(FN) static const UTest __##FN##__(FN, #FN);
-
-#define MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(FN, KEEP_PROGRAM) \
-  static void __ANON__##FN##__(void) { UTEST_EXPECT_SUCCESS(FN()); } \
-  static const UTest __##FN##__(__ANON__##FN##__, #FN, false, !(KEEP_PROGRAM));
-
-
-/*! Turn a function into a unit test */
-#define MAKE_UTEST_FROM_FUNCTION(FN) \
-  static void __ANON__##FN##__(void) { UTEST_EXPECT_SUCCESS(FN()); } \
-  static const UTest __##FN##__(__ANON__##FN##__, #FN);
-
-/*! Register a test case which has issue to be fixed */
-#define MAKE_UTEST_FROM_FUNCTION_WITH_ISSUE(FN) \
-  static void __ANON__##FN##__(void) { UTEST_EXPECT_SUCCESS(FN()); } \
-  static const UTest __##FN##__(__ANON__##FN##__, #FN, true);
-
-
-/*! No assert is expected */
-#define UTEST_EXPECT_SUCCESS(EXPR) \
- do { \
-    try { \
-      EXPR; \
-      std::cout << "  " << #EXPR << "    [SUCCESS]" << std::endl; \
-    } \
-    catch (Exception e) { \
-      std::cout << "  " << #EXPR << "    [FAILED]" << std::endl; \
-      std::cout << "    " << e.what() << std::endl; \
-    } \
-  } while (0)
-
-#define UTEST_EXPECT_FAILED(EXPR) \
- do { \
-    try { \
-      EXPR; \
-      std::cout << "  " << #EXPR << "    [FAILED]" <<  std::endl; \
-    } \
-    catch (gbe::Exception e) { \
-      std::cout << "  " << #EXPR << "    [SUCCESS]" << std::endl; \
-    } \
-  } while (0)
-
-#endif /* __UTEST_UTEST_HPP__ */
-
diff --git a/utests/utest/.gitignore b/utests/utest/.gitignore
new file mode 100644
index 0000000..90f80fc
--- /dev/null
+++ b/utests/utest/.gitignore
@@ -0,0 +1,15 @@
+compiler_box_blur.bmp
+compiler_box_blur_float.bmp
+compiler_clod.bmp
+compiler_julia.bmp
+compiler_julia_no_break.bmp
+compiler_mandelbrot.bmp
+compiler_mandelbrot_alternate.bmp
+compiler_menger_sponge_no_shadow.bmp
+compiler_nautilus.bmp
+compiler_ribbon.bmp
+flat_address_space
+libutests.so
+utest_run
+generated
+utest_generator.pyc
diff --git a/utests/utest/CMakeLists.txt b/utests/utest/CMakeLists.txt
new file mode 100644
index 0000000..a3cab5d
--- /dev/null
+++ b/utests/utest/CMakeLists.txt
@@ -0,0 +1,216 @@
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}
+                    ${CMAKE_CURRENT_SOURCE_DIR}/../include)
+
+##### Math Function Part:
+EXEC_PROGRAM(mkdir ${CMAKE_CURRENT_SOURCE_DIR} ARGS generated -p)
+EXEC_PROGRAM(${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR} ARGS utest_math_gen.py OUTPUT_VARIABLE GEN_MATH_STRING)
+string(REGEX REPLACE " " ";" ADDMATHFUNC ${GEN_MATH_STRING})
+string(REGEX REPLACE " " "\n" NAMEMATHLIST ${GEN_MATH_STRING})
+MESSAGE(STATUS "Generated Builtin Math Functions:\n" ${NAMEMATHLIST})
+
+string(REGEX REPLACE "generated/([^\ ]*)\\.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/../kernels/\\1.cl" KERNEL_MATH_LIST ${GEN_MATH_STRING})
+string(REGEX REPLACE " " ";" KERNEL_MATH_LIST ${KERNEL_MATH_LIST})
+string(REGEX REPLACE "generated/([^\ ]*)\\.cpp" "\\1.cl" KERNEL_GITIGNORE_LIST ${GEN_MATH_STRING})
+set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "generated;${KERNEL_MATH_LIST}")
+
+configure_file (
+  "setenv.sh.in"
+  "setenv.sh"
+  )
+
+link_directories (${LLVM_LIBRARY_DIR})
+set (utests_sources
+  utest_error.c
+  compiler_basic_arithmetic.cpp
+  compiler_displacement_map_element.cpp
+  compiler_shader_toy.cpp
+  compiler_mandelbrot.cpp
+  compiler_mandelbrot_alternate.cpp
+  compiler_box_blur_float.cpp
+  compiler_box_blur_image.cpp
+  compiler_box_blur.cpp
+  compiler_insert_to_constant.cpp
+  compiler_argument_structure.cpp
+  compiler_arith_shift_right.cpp
+  compiler_array0.cpp
+  compiler_array.cpp
+  compiler_array1.cpp
+  compiler_array2.cpp
+  compiler_array3.cpp
+  compiler_byte_scatter.cpp
+  compiler_ceil.cpp
+  compiler_clz_short.cpp
+  compiler_clz_int.cpp
+  compiler_convert_uchar_sat.cpp
+  compiler_copy_buffer.cpp
+  compiler_copy_image.cpp
+  compiler_copy_image_3d.cpp
+  compiler_copy_buffer_row.cpp
+  compiler_degrees.cpp
+  compiler_step.cpp
+  compiler_fabs.cpp
+  compiler_abs.cpp
+  compiler_abs_diff.cpp
+  compiler_fill_image.cpp
+  compiler_fill_image0.cpp
+  compiler_fill_image_3d.cpp
+  compiler_fill_image_3d_2.cpp
+  compiler_function_argument0.cpp
+  compiler_function_argument1.cpp
+  compiler_function_argument2.cpp
+  compiler_function_argument.cpp
+  compiler_function_constant0.cpp
+  compiler_function_constant1.cpp
+  compiler_function_constant.cpp
+  compiler_global_constant.cpp
+  compiler_global_constant_2.cpp
+  compiler_group_size.cpp
+  compiler_hadd.cpp
+  compiler_if_else.cpp
+  compiler_integer_division.cpp
+  compiler_integer_remainder.cpp
+  compiler_insert_vector.cpp
+  compiler_lower_return0.cpp
+  compiler_lower_return1.cpp
+  compiler_lower_return2.cpp
+  compiler_mad_hi.cpp
+  compiler_mul_hi.cpp
+  compiler_mad24.cpp
+  compiler_mul24.cpp
+  compiler_multiple_kernels.cpp
+  compiler_radians.cpp
+  compiler_rhadd.cpp
+  compiler_rotate.cpp
+  compiler_saturate.cpp
+  compiler_saturate_sub.cpp
+  compiler_shift_right.cpp
+  compiler_short_scatter.cpp
+  compiler_smoothstep.cpp
+  compiler_uint2_copy.cpp
+  compiler_uint3_copy.cpp
+  compiler_uint8_copy.cpp
+  compiler_uint16_copy.cpp
+  compiler_uint3_unaligned_copy.cpp
+  compiler_upsample_int.cpp
+  compiler_upsample_long.cpp
+  compiler_unstructured_branch0.cpp
+  compiler_unstructured_branch1.cpp
+  compiler_unstructured_branch2.cpp
+  compiler_unstructured_branch3.cpp
+  compiler_write_only_bytes.cpp
+  compiler_write_only.cpp
+  compiler_write_only_shorts.cpp
+  compiler_switch.cpp
+  compiler_math.cpp
+  compiler_atomic_functions.cpp
+  compiler_async_copy.cpp
+  compiler_async_stride_copy.cpp
+  compiler_insn_selection_min.cpp
+  compiler_insn_selection_max.cpp
+  compiler_insn_selection_masked_min_max.cpp
+  compiler_load_bool_imm.cpp
+  compiler_global_memory_barrier.cpp
+  compiler_local_memory_two_ptr.cpp
+  compiler_local_memory_barrier.cpp
+  compiler_local_memory_barrier_wg64.cpp
+  compiler_local_memory_barrier_2.cpp
+  compiler_local_slm.cpp
+  compiler_movforphi_undef.cpp
+  compiler_volatile.cpp
+  compiler_copy_image1.cpp
+  compiler_get_image_info.cpp
+  compiler_vect_compare.cpp
+  compiler_vector_load_store.cpp
+  compiler_vector_inc.cpp
+  compiler_cl_finish.cpp
+  get_cl_info.cpp
+  builtin_atan2.cpp
+  builtin_bitselect.cpp
+  builtin_frexp.cpp
+  builtin_mad_sat.cpp
+  builtin_modf.cpp
+  builtin_nextafter.cpp
+  builtin_remquo.cpp
+  builtin_shuffle.cpp
+  builtin_shuffle2.cpp
+  builtin_sign.cpp
+  builtin_sinpi.cpp
+  builtin_lgamma.cpp
+  builtin_lgamma_r.cpp
+  builtin_tgamma.cpp
+  buildin_work_dim.cpp
+  builtin_global_size.cpp
+  builtin_local_size.cpp
+  builtin_global_id.cpp
+  builtin_num_groups.cpp
+  builtin_local_id.cpp
+  builtin_acos_asin.cpp
+  builtin_pow.cpp
+  builtin_exp.cpp
+  builtin_convert_sat.cpp
+  sub_buffer.cpp
+  runtime_createcontext.cpp
+  runtime_null_kernel_arg.cpp
+  runtime_event.cpp
+  compiler_double.cpp
+  compiler_double_2.cpp
+  compiler_double_3.cpp
+  compiler_double_4.cpp
+  compiler_long.cpp
+  compiler_long_2.cpp
+  compiler_long_convert.cpp
+  compiler_long_shl.cpp
+  compiler_long_shr.cpp
+  compiler_long_asr.cpp
+  compiler_long_mult.cpp
+  compiler_long_cmp.cpp
+  compiler_function_argument3.cpp
+  compiler_bool_cross_basic_block.cpp
+  compiler_private_data_overflow.cpp
+  compiler_getelementptr_bitcast.cpp
+  load_program_from_bin.cpp
+  profiling_exec.cpp
+  enqueue_copy_buf.cpp
+  utest_assert.cpp
+  utest.cpp
+  utest_file_map.cpp
+  utest_helper.cpp)
+
+SET (kernel_bin ${CMAKE_CURRENT_SOURCE_DIR}/../kernels/compiler_ceil)
+ADD_CUSTOM_COMMAND(
+    OUTPUT ${kernel_bin}.bin
+    COMMAND ${GBE_BIN_GENERATER} ${kernel_bin}.cl -o${kernel_bin}.bin
+    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/../../backend/src/gbe_bin_generater ${kernel_bin}.cl
+    )
+
+ADD_CUSTOM_TARGET(kernel_bin.bin
+    DEPENDS ${kernel_bin}.bin)
+
+add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/generated
+    COMMAND mkdir ${CMAKE_CURRENT_SOURCE_DIR}/generated -p
+    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/utest_math_gen.py > /dev/null 2>&1
+    COMMAND echo ${KERNEL_GITIGNORE_LIST} |sed 's/ /\\n/g' > ${CMAKE_CURRENT_SOURCE_DIR}/../kernels/.gitignore
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+    )
+add_custom_target(utest_generator
+    DEPENDS generated
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+    )
+
+if (EGL_FOUND AND MESA_SOURCE_FOUND)
+SET(utests_sources ${utests_sources} compiler_fill_gl_image.cpp)
+SET(CMAKE_CXX_FLAGS "-DHAS_EGL ${CMAKE_CXX_FLAGS} ${DEF_OCL_PCH_PCM_PATH}")
+SET(CMAKE_C_FLAGS "-DHAS_EGL ${CMAKE_C_FLAGS} ${DEF_OCL_PCH_PCM_PATH}")
+endif (EGL_FOUND AND MESA_SOURCE_FOUND)
+
+ADD_LIBRARY(utests SHARED ${ADDMATHFUNC} ${utests_sources})
+
+TARGET_LINK_LIBRARIES(utests cl m ${OPENGL_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
+
+ADD_EXECUTABLE(utest_run utest_run.cpp)
+TARGET_LINK_LIBRARIES(utest_run utests)
+ADD_DEPENDENCIES (utest_run kernel_bin.bin)
+ADD_DEPENDENCIES (utests utest_generator)
+
+ADD_EXECUTABLE(flat_address_space runtime_flat_address_space.cpp)
+TARGET_LINK_LIBRARIES(flat_address_space utests)
diff --git a/utests/utest/buildin_work_dim.cpp b/utests/utest/buildin_work_dim.cpp
new file mode 100644
index 0000000..d678c0f
--- /dev/null
+++ b/utests/utest/buildin_work_dim.cpp
@@ -0,0 +1,37 @@
+#include "utest_helper.hpp"
+
+static void buildin_work_dim(void)
+{
+  // Setup kernel and buffers
+
+  int result, err;
+  OCL_CREATE_KERNEL("buildin_work_dim");
+
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_READ_WRITE, sizeof(int), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+
+  globals[0] = 1;
+  globals[1] = 1;
+  globals[2] = 1;
+  locals[0] = 1;
+  locals[1] = 1;
+  locals[2] = 1;
+
+  for( int i=1; i <= 3; i++ )
+  {
+
+    // Run the kernel
+    OCL_NDRANGE(i);
+
+    err = clEnqueueReadBuffer( queue, buf[0], CL_TRUE, 0, sizeof(int), &result, 0, NULL, NULL);
+    if (err != CL_SUCCESS)
+    {
+       printf("Error: Failed to read output array! %d\n", err);
+       exit(1);
+    }
+
+    OCL_ASSERT( result == i);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(buildin_work_dim);
diff --git a/utests/utest/builtin_acos_asin.cpp b/utests/utest/builtin_acos_asin.cpp
new file mode 100644
index 0000000..0187226
--- /dev/null
+++ b/utests/utest/builtin_acos_asin.cpp
@@ -0,0 +1,87 @@
+#include "utest_helper.hpp"
+#include <cmath>
+#include <algorithm>
+
+#define udebug 0
+#define printf_c(...) \
+{\
+  printf("\033[1m\033[40;31m");\
+  printf( __VA_ARGS__ );\
+  printf("\033[0m");\
+}
+
+const float input_data[] = {-30, -1, -0.92, -0.5, -0.09, 0, 0.09, 0.5, 0.92, 1, 30};
+const int count_input = sizeof(input_data) / sizeof(input_data[0]);
+const int max_function = 5;
+
+static void cpu_compiler_math(float *dst, const float *src)
+{
+  const float x = *src;
+
+  dst[0] = acos(x);
+  dst[1] = acosh(x);
+  dst[2] = asin(x);
+  dst[3] = asinh(x);
+  dst[4] = x;
+}
+
+static void builtin_acos_asin(void)
+{
+  // Setup kernel and buffers
+  int k, i, index_cur;
+  float gpu_data[max_function * count_input] = {0}, cpu_data[max_function * count_input] = {0};
+
+  OCL_CREATE_KERNEL("builtin_acos_asin");
+
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_READ_WRITE, count_input * max_function * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[1], CL_MEM_READ_WRITE, count_input * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[2], CL_MEM_READ_WRITE, sizeof(int), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+
+  globals[0] = count_input;
+  locals[0] = 1;
+
+  clEnqueueWriteBuffer( queue, buf[1], CL_TRUE, 0, count_input * sizeof(float), input_data, 0, NULL, NULL);
+  clEnqueueWriteBuffer( queue, buf[2], CL_TRUE, 0, sizeof(int), &max_function , 0, NULL, NULL);
+
+   // Run the kernel
+  OCL_NDRANGE( 1 );
+
+  clEnqueueReadBuffer( queue, buf[0], CL_TRUE, 0, sizeof(float) * max_function * count_input, gpu_data, 0, NULL, NULL);
+
+  for (k = 0; (uint)k < count_input; k++)
+  {
+    cpu_compiler_math( cpu_data + k * max_function, input_data + k);
+
+    for (i = 0; i < max_function; i++)
+    {
+      index_cur = k * max_function + i;
+#if udebug
+      if (isinf(cpu_data[index_cur]) && !isinf(gpu_data[index_cur])){
+        printf_c("%d/%d: %f -> gpu:%f  cpu:%f\n", k, i, input_data[k], gpu_data[index_cur], cpu_data[index_cur]);
+      }
+      else if (isnan(cpu_data[index_cur]) && !isnan(gpu_data[index_cur])){
+        printf_c("%d/%d: %f -> gpu:%f  cpu:%f\n", k, i, input_data[k], gpu_data[index_cur], cpu_data[index_cur]);
+      }
+      else if(fabs(gpu_data[index_cur] - cpu_data[index_cur]) > 1e-3f){
+        printf_c("%d/%d: %f -> gpu:%f  cpu:%f\n", k, i, input_data[k], gpu_data[index_cur], cpu_data[index_cur]);
+      }
+      else
+        printf("%d/%d: %f -> gpu:%f  cpu:%f\n", k, i, input_data[k], gpu_data[index_cur], cpu_data[index_cur]);
+#else
+     if (isinf(cpu_data[index_cur]))
+       OCL_ASSERT(isinf(gpu_data[index_cur]));
+     else if (isnan(cpu_data[index_cur]))
+       OCL_ASSERT(isnan(gpu_data[index_cur]));
+     else
+     {
+       OCL_ASSERT(fabs(gpu_data[index_cur] - cpu_data[index_cur]) < 1e-3f);
+     }
+#endif
+    }
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(builtin_acos_asin)
diff --git a/utests/utest/builtin_atan2.cpp b/utests/utest/builtin_atan2.cpp
new file mode 100644
index 0000000..29dd7b4
--- /dev/null
+++ b/utests/utest/builtin_atan2.cpp
@@ -0,0 +1,43 @@
+#include <cmath>
+#include "utest_helper.hpp"
+
+void builtin_atan2(void) {
+	const int n = 1024;
+	float y[n], x[n];
+
+	// Setup kernel and buffers
+	OCL_CREATE_KERNEL("builtin_atan2");
+	OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+	OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+	OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(float), NULL);
+	OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+	OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+	OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+	globals[0] = n;
+	locals[0] = 16;
+
+	OCL_MAP_BUFFER(0);
+	OCL_MAP_BUFFER(1);
+	for (int i = 0; i < n; ++i) {
+		y[i] = ((float*) buf_data[0])[i] = (rand()&255) * 0.01f;
+		x[i] = ((float*) buf_data[1])[i] = (rand()&255) * 0.01f;
+	}
+	OCL_UNMAP_BUFFER(0);
+	OCL_UNMAP_BUFFER(1);
+
+	OCL_NDRANGE(1);
+
+	OCL_MAP_BUFFER(2);
+	float *dst = (float*) buf_data[2];
+	for (int i = 0; i < n; ++i) {
+		float cpu = atan2f(y[i], x[i]);
+		float gpu = dst[i];
+		if (fabsf(cpu - gpu) >= 1e-2) {
+			printf("%f %f %f %f\n", y[i], x[i], cpu, gpu);
+			OCL_ASSERT(0);
+		}
+	}
+	OCL_UNMAP_BUFFER(2);
+}
+
+MAKE_UTEST_FROM_FUNCTION (builtin_atan2);
diff --git a/utests/utest/builtin_bitselect.cpp b/utests/utest/builtin_bitselect.cpp
new file mode 100644
index 0000000..37fb8df
--- /dev/null
+++ b/utests/utest/builtin_bitselect.cpp
@@ -0,0 +1,50 @@
+#include "utest_helper.hpp"
+
+int as_int(float f) {
+  void *p = &f;
+  return *(int *)p;
+}
+
+int cpu(int a, int b, int c) {
+  return (a & ~c) | (b & c);
+}
+
+void builtin_bitselect(void)
+{
+  const int n = 32;
+  float src1[n], src2[n], src3[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("builtin_bitselect");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[3], 0, n * sizeof(float), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  OCL_SET_ARG(3, sizeof(cl_mem), &buf[3]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  OCL_MAP_BUFFER(2);
+  for (int i = 0; i < n; ++i) {
+    src1[i] = ((float*)buf_data[0])[i] = rand() * 0.1f;
+    src2[i] = ((float*)buf_data[1])[i] = rand() * 0.1f;
+    src3[i] = ((float*)buf_data[2])[i] = rand() * 0.1f;
+  }
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+  OCL_UNMAP_BUFFER(2);
+
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(3);
+  for (int i = 0; i < n; ++i)
+    OCL_ASSERT(((int*)buf_data[3])[i] == cpu(as_int(src1[i]), as_int(src2[i]), as_int(src3[i])));
+  OCL_UNMAP_BUFFER(3);
+}
+
+MAKE_UTEST_FROM_FUNCTION(builtin_bitselect);
diff --git a/utests/utest/builtin_convert_sat.cpp b/utests/utest/builtin_convert_sat.cpp
new file mode 100644
index 0000000..7272057
--- /dev/null
+++ b/utests/utest/builtin_convert_sat.cpp
@@ -0,0 +1,80 @@
+#include <cstdint>
+#include "utest_helper.hpp"
+
+typedef unsigned char uchar;
+typedef unsigned short ushort;
+
+int64_t my_rand(void) {
+  int64_t x = rand() - RAND_MAX/2;
+  int64_t y = rand() - RAND_MAX/2;
+  return x * y;
+}
+
+#define DEF2(DST_TYPE, SRC_TYPE, DST_MIN, DST_MAX, REAL_SRC_TYPE) \
+void builtin_convert_ ## SRC_TYPE ## _to_ ## DST_TYPE ## _sat(void) \
+{ \
+  const int n = 128; \
+  OCL_CREATE_KERNEL_FROM_FILE("builtin_convert_sat", "builtin_convert_" # SRC_TYPE "_to_" # DST_TYPE "_sat"); \
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(REAL_SRC_TYPE), NULL); \
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(DST_TYPE), NULL); \
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]); \
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]); \
+  globals[0] = n; \
+  locals[0] = 16; \
+  OCL_MAP_BUFFER(0); \
+  for (int i = 0; i < n; i++) \
+    ((REAL_SRC_TYPE *)buf_data[0])[i] = my_rand(); \
+  OCL_UNMAP_BUFFER(0); \
+  OCL_NDRANGE(1); \
+  OCL_MAP_BUFFER(0); \
+  OCL_MAP_BUFFER(1); \
+  for (int i = 0; i < n; i++) { \
+    REAL_SRC_TYPE src = ((REAL_SRC_TYPE *)buf_data[0])[i]; \
+    DST_TYPE dst; \
+    if ((double)src > (double)DST_MAX) \
+      dst = DST_MAX; \
+    else if ((double)src < (double)DST_MIN) \
+      dst = DST_MIN; \
+    else \
+      dst = src; \
+    OCL_ASSERT(((DST_TYPE *)buf_data[1])[i] == dst); \
+  } \
+  OCL_UNMAP_BUFFER(0); \
+  OCL_UNMAP_BUFFER(1); \
+} \
+MAKE_UTEST_FROM_FUNCTION(builtin_convert_ ## SRC_TYPE ## _to_ ## DST_TYPE ## _sat);
+
+#define DEF(DST_TYPE, SRC_TYPE, DST_MIN, DST_MAX) \
+  DEF2(DST_TYPE, SRC_TYPE, DST_MIN, DST_MAX, SRC_TYPE)
+
+DEF(char, uchar, -128, 127);
+DEF(char, short, -128, 127);
+DEF(char, ushort, -128, 127);
+DEF(char, int, -128, 127);
+DEF(char, uint, -128, 127);
+DEF2(char, long, -128, 127, int64_t);
+DEF(char, float, -128, 127);
+DEF(uchar, char, 0, 255);
+DEF(uchar, short, 0, 255);
+DEF(uchar, ushort, 0, 255);
+DEF(uchar, int, 0, 255);
+DEF(uchar, uint, 0, 255);
+DEF2(uchar, long, 0, 255, int64_t);
+DEF(uchar, float, 0, 255);
+DEF(short, ushort, -32768, 32767);
+DEF(short, int, -32768, 32767);
+DEF(short, uint, -32768, 32767);
+DEF2(short, long, -32768, 32767, int64_t);
+DEF(short, float, -32768, 32767);
+DEF(ushort, short, 0, 65535);
+DEF(ushort, int, 0, 65535);
+DEF(ushort, uint, 0, 65535);
+DEF2(ushort, long, 0, 65535, int64_t);
+DEF(ushort, float, 0, 65535);
+DEF(int, uint, -0x7FFFFFFF-1, 0x7FFFFFFF);
+DEF2(int, long, -0x7FFFFFFF-1, 0x7FFFFFFF, int64_t);
+DEF(int, float, -0x7FFFFFFF-1, 0x7FFFFFFF);
+DEF(uint, int, 0, 0xffffffffu);
+DEF2(uint, long, 0, 0xffffffffu, int64_t);
+DEF(uint, float, 0, 0xffffffffu);
+#undef DEF
diff --git a/utests/utest/builtin_exp.cpp b/utests/utest/builtin_exp.cpp
new file mode 100644
index 0000000..d5288c8
--- /dev/null
+++ b/utests/utest/builtin_exp.cpp
@@ -0,0 +1,102 @@
+#include "utest_helper.hpp"
+#include <cmath>
+#include <algorithm>
+
+#define udebug 0
+
+#define FLT_MAX 0x1.fffffep127f
+#define FLT_MIN 0x1.0p-126f
+#define FLT_ULP  (1.0e-6f)
+
+#define printf_c(...) \
+{\
+  printf("\033[1m\033[40;31m");\
+  printf( __VA_ARGS__ );\
+  printf("\033[0m");\
+}
+
+const float input_data[] = {FLT_MAX, -FLT_MAX, FLT_MIN, -FLT_MIN, 80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0 };
+const int count_input = sizeof(input_data) / sizeof(input_data[0]);
+const int max_function = 5;
+
+static void cpu_compiler_math(float *dst, const float *src)
+{
+  const float x = *src;
+
+  dst[0] = exp(x);
+  dst[1] = exp2(x);
+  dst[2] = exp10(x);
+  dst[3] = expm1(x);
+  dst[4] = x;
+}
+
+static void builtin_exp(void)
+{
+  // Setup kernel and buffers
+  int k, i, index_cur;
+  float gpu_data[max_function * count_input] = {0}, cpu_data[max_function * count_input] = {0};
+  float diff;
+  char log[256] = {0};
+
+  OCL_CREATE_KERNEL("builtin_exp");
+
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_READ_WRITE, count_input * max_function * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[1], CL_MEM_READ_WRITE, count_input * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[2], CL_MEM_READ_WRITE, sizeof(int), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+
+  globals[0] = count_input;
+  locals[0] = 1;
+
+  clEnqueueWriteBuffer( queue, buf[1], CL_TRUE, 0, count_input * sizeof(float), input_data, 0, NULL, NULL);
+  clEnqueueWriteBuffer( queue, buf[2], CL_TRUE, 0, sizeof(int), &max_function , 0, NULL, NULL);
+
+   // Run the kernel
+  OCL_NDRANGE( 1 );
+
+  clEnqueueReadBuffer( queue, buf[0], CL_TRUE, 0, sizeof(float) * max_function * count_input, gpu_data, 0, NULL, NULL);
+
+  for (k = 0; (uint)k < count_input; k++)
+  {
+    cpu_compiler_math( cpu_data + k * max_function, input_data + k);
+
+    for (i = 0; i < max_function; i++)
+    {
+      index_cur = k * max_function + i;
+      diff = fabs(gpu_data[index_cur]-cpu_data[index_cur]);
+      sprintf(log, "%d/%d: %f -> gpu:%f  cpu:%f diff:%f expect:%f\n", \
+         k, i, input_data[k], gpu_data[index_cur], cpu_data[index_cur], \
+         diff/gpu_data[index_cur], 3 * FLT_ULP);
+
+#if udebug
+      if (isinf(cpu_data[index_cur]) && isinf(gpu_data[index_cur])){
+        printf(log);
+      }
+      else if (isnan(cpu_data[index_cur]) && isnan(gpu_data[index_cur])){
+        printf(log);
+      }
+      else if( diff / cpu_data[index_cur] < 3 * FLT_ULP \
+        && ( gpu_data[index_cur] > FLT_ULP  || cpu_data[index_cur] > FLT_ULP )){
+        printf(log);
+      }
+      else if ( gpu_data[index_cur] < FLT_ULP && gpu_data[index_cur] < FLT_ULP)
+        printf(log);
+      else
+        printf_c(log);
+#else
+      if (isinf(cpu_data[index_cur]))
+        OCL_ASSERTM(isinf(gpu_data[index_cur]), log);
+      else if (isnan(cpu_data[index_cur]))
+        OCL_ASSERTM(isnan(gpu_data[index_cur]), log);
+      else if ( gpu_data[index_cur] > FLT_ULP || cpu_data[index_cur] > FLT_ULP)
+        OCL_ASSERTM(fabs( diff / cpu_data[index_cur]) < 3 * FLT_ULP, log);
+      else
+        OCL_ASSERTM(fabs(diff) < 3 * FLT_ULP, log);
+#endif
+    }
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(builtin_exp)
diff --git a/utests/utest/builtin_frexp.cpp b/utests/utest/builtin_frexp.cpp
new file mode 100644
index 0000000..75dac3b
--- /dev/null
+++ b/utests/utest/builtin_frexp.cpp
@@ -0,0 +1,50 @@
+#include <cmath>
+#include "utest_helper.hpp"
+
+void builtin_frexp(void)
+{
+  const int n = 32;
+  float src[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("builtin_frexp");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  OCL_MAP_BUFFER(0);
+  src[0] = ((float*)buf_data[0])[0] = 0.f;
+  src[1] = ((float*)buf_data[0])[1] = -0.f;
+  src[2] = ((float*)buf_data[0])[2] = nanf("");
+  src[3] = ((float*)buf_data[0])[3] = INFINITY;
+  src[4] = ((float*)buf_data[0])[4] = -INFINITY;
+  for (int i = 5; i < n; ++i)
+    src[i] = ((float*)buf_data[0])[i] = (rand() & 255) * 0.1f - 12.8f;
+  OCL_UNMAP_BUFFER(0);
+
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(1);
+  OCL_MAP_BUFFER(2);
+  float *dst = (float*)buf_data[1];
+  int *exp = (int*)buf_data[2];
+  int w;
+  OCL_ASSERT(dst[0] == 0.f && exp[0] == 0);
+  OCL_ASSERT(dst[1] == -0.f && exp[1] == 0);
+  OCL_ASSERT(isnanf(dst[2]));
+  OCL_ASSERT(dst[3] == INFINITY);
+  OCL_ASSERT(dst[4] == -INFINITY);
+  for (int i = 5; i < n; ++i) {
+    OCL_ASSERT(fabsf(dst[i] - frexpf(src[i], &w)) < 1e-5);
+    OCL_ASSERT(exp[i] == w);
+  }
+  OCL_UNMAP_BUFFER(1);
+  OCL_UNMAP_BUFFER(2);
+}
+
+MAKE_UTEST_FROM_FUNCTION(builtin_frexp);
diff --git a/utests/utest/builtin_global_id.cpp b/utests/utest/builtin_global_id.cpp
new file mode 100644
index 0000000..9601cab
--- /dev/null
+++ b/utests/utest/builtin_global_id.cpp
@@ -0,0 +1,77 @@
+/*
+According to the OpenCL v1.1 & v1.2 chapter 6.11.
+Now define global size as following:
+  globals[0] = 3;
+  globals[1] = 4;
+  globals[2] = 5;
+
+Kernel:
+id = get_global_id(0) + get_global_id(1)*3 + get_global_id(2)*3*4
+
+dimension:1
+ 0  1  2
+dimension:2
+ 0  1  2
+ 3  4  5
+ 6  7  8
+ 9 10 11
+dimension:3
+ 0  1  2   12 13 14   24 25 26   36 37 38   48 49 50
+ 3  4  5   15 16 17   27 28 29   39 40 41   51 52 53
+ 6  7  8   18 19 20   30 31 32   42 43 44   54 55 56
+ 9 10 11   21 22 23   33 34 35   45 46 47   57 58 59
+*/
+
+#define udebug 0
+#include "utest_helper.hpp"
+static void builtin_global_id(void)
+{
+
+  // Setup kernel and buffers
+  int dim, global_id[80], err, i, buf_len=1;
+  OCL_CREATE_KERNEL("builtin_global_id");
+
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_READ_WRITE, sizeof(int)*80, NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+
+  for( dim=1; dim <= 3; dim++ )
+  {
+    buf_len = 1;
+    for(i=1; i <= dim; i++)
+    {
+      globals[i - 1] = 2 + i;
+      locals[i - 1] = 2 + i;
+      buf_len *= 2 + i;
+    }
+    for(i=dim+1; i <= 3; i++)
+    {
+      globals[i - 1] = 0;
+      locals[i - 1] = 0;
+    }
+
+    // Run the kernel
+    OCL_NDRANGE( dim );
+    clFinish(queue);
+
+    err = clEnqueueReadBuffer( queue, buf[0], CL_TRUE, 0, sizeof(int) * buf_len, &global_id, 0, NULL, NULL);
+
+    if (err != CL_SUCCESS)
+    {
+      printf("Error: Failed to read output array! %d\n", err);
+      exit(1);
+    }
+
+#if udebug
+    for(i = 0; i < buf_len; i++)
+    {
+      printf("%2d ", global_id[i]);
+      if ((i + 1) % 3 == 0) printf("\n");
+    }
+#endif
+
+    for( i = 0; i < buf_len; i++)
+      OCL_ASSERT( global_id[i] == i);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(builtin_global_id);
diff --git a/utests/utest/builtin_global_size.cpp b/utests/utest/builtin_global_size.cpp
new file mode 100644
index 0000000..094e019
--- /dev/null
+++ b/utests/utest/builtin_global_size.cpp
@@ -0,0 +1,108 @@
+/*
+According to the OpenCL v1.1 & v1.2 chapter 6.11, the behavior of function get_global_size should be as following:
+
+  globals[0] = 3;
+  globals[1] = 4;
+  globals[2] = 5;
+
+#ifdef CL_VERSION_1_2 | CL_VERSION_1_1:
+get_global_size(-1) = 1 (dimension:1)
+get_global_size(0) = 3 (dimension:1)
+get_global_size(1) = 1 (dimension:1)
+get_global_size(2) = 1 (dimension:1)
+
+get_global_size(-1) = 1 (dimension:2)
+get_global_size(0) = 3 (dimension:2)
+get_global_size(1) = 4 (dimension:2)
+get_global_size(2) = 1 (dimension:2)
+get_global_size(3) = 1 (dimension:2)
+
+get_global_size(-1) = 1 (dimension:3)
+get_global_size(0) = 3 (dimension:3)
+get_global_size(1) = 4 (dimension:3)
+get_global_size(2) = 5 (dimension:3)
+get_global_size(3) = 1 (dimension:3)
+get_global_size(4) = 1 (dimension:3)
+
+#ifdef CL_VERSION_1_0:
+get_global_size(-1) = 0 (dimension:1)
+get_global_size(0) = 3 (dimension:1)
+get_global_size(1) = 0 (dimension:1)
+get_global_size(2) = 0 (dimension:1)
+
+get_global_size(-1) = 0 (dimension:2)
+get_global_size(0) = 3 (dimension:2)
+get_global_size(1) = 4 (dimension:2)
+get_global_size(2) = 0 (dimension:2)
+get_global_size(3) = 1 (dimension:2)
+
+get_global_size(-1) = 0 (dimension:3)
+get_global_size(0) = 3 (dimension:3)
+get_global_size(1) = 4 (dimension:3)
+get_global_size(2) = 5 (dimension:3)
+get_global_size(3) = 0 (dimension:3)
+get_global_size(4) = 0 (dimension:3)
+
+*/
+#include "utest_helper.hpp"
+static void builtin_global_size(void)
+{
+
+  // Setup kernel and buffers
+  int dim, dim_arg_global, global_size, err;
+  OCL_CREATE_KERNEL("builtin_global_size");
+
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_READ_WRITE, sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[1], CL_MEM_READ_WRITE, sizeof(int), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+
+  globals[0] = 3;
+  globals[1] = 4;
+  globals[2] = 5;
+  locals[0] = 1;
+  locals[1] = 1;
+  locals[2] = 1;
+
+  for( dim=1; dim <= 3; dim++ )
+  {
+
+    for( dim_arg_global = -1; dim_arg_global <= dim + 1; dim_arg_global++ )
+    {
+
+      err = clEnqueueWriteBuffer( queue, buf[1], CL_TRUE, 0, sizeof(int), &dim_arg_global, 0, NULL, NULL);
+      if (err != CL_SUCCESS)
+      {
+        printf("Error: Failed to write to source array!\n");
+        exit(1);
+      }
+
+      // Run the kernel
+      OCL_NDRANGE( dim );
+
+      err = clEnqueueReadBuffer( queue, buf[0], CL_TRUE, 0, sizeof(int), &global_size, 0, NULL, NULL);
+      if (err != CL_SUCCESS)
+      {
+        printf("Error: Failed to read output array! %d\n", err);
+        exit(1);
+      }
+
+      //printf("get_global_size(%d) = %d (dimension:%d)\n", dim_arg_global, global_size, dim);
+
+      if ( dim_arg_global >= 0 && dim_arg_global < dim)
+        OCL_ASSERT( global_size == dim_arg_global + 3);
+      else
+      {
+      #if defined(CL_VERSION_1_2) || defined(CL_VERSION_1_1)
+        OCL_ASSERT( global_size == 1);
+      #elif defined(CL_VERSION_1_0)
+        OCL_ASSERT( global_size == 0);
+      #else
+        OCL_ASSERT( global_size == 1);
+      #endif
+      }
+    }
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(builtin_global_size);
diff --git a/utests/utest/builtin_lgamma.cpp b/utests/utest/builtin_lgamma.cpp
new file mode 100644
index 0000000..876699a
--- /dev/null
+++ b/utests/utest/builtin_lgamma.cpp
@@ -0,0 +1,40 @@
+#include <cmath>
+#include "utest_helper.hpp"
+
+void builtin_lgamma(void) {
+	const int n = 1024;
+	float src[n];
+
+	// Setup kernel and buffers
+	OCL_CREATE_KERNEL("builtin_lgamma");
+	OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+	OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+	OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+	OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+	globals[0] = n;
+	locals[0] = 16;
+
+	for (int j = 0; j < 1024; j++) {
+		OCL_MAP_BUFFER(0);
+		for (int i = 0; i < n; ++i) {
+			src[i] = ((float*) buf_data[0])[i] = (j * n + i + 1) * 0.001f;
+		}
+		OCL_UNMAP_BUFFER(0);
+
+		OCL_NDRANGE(1);
+
+		OCL_MAP_BUFFER(1);
+		float *dst = (float*) buf_data[1];
+		for (int i = 0; i < n; ++i) {
+			float cpu = lgamma(src[i]);
+			float gpu = dst[i];
+			if (fabsf(cpu - gpu) >= 1e-3) {
+				printf("%f %f %f\n", src[i], cpu, gpu);
+				OCL_ASSERT(0);
+			}
+		}
+		OCL_UNMAP_BUFFER(1);
+	}
+}
+
+MAKE_UTEST_FROM_FUNCTION (builtin_lgamma);
diff --git a/utests/utest/builtin_lgamma_r.cpp b/utests/utest/builtin_lgamma_r.cpp
new file mode 100644
index 0000000..b6e5d0e
--- /dev/null
+++ b/utests/utest/builtin_lgamma_r.cpp
@@ -0,0 +1,46 @@
+#include <cmath>
+#include "utest_helper.hpp"
+
+void builtin_lgamma_r(void) {
+	const int n = 1024;
+	float src[n];
+
+	// Setup kernel and buffers
+	OCL_CREATE_KERNEL("builtin_lgamma_r");
+	OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+	OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+	OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int), NULL);
+	OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+	OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+	OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+	globals[0] = n;
+	locals[0] = 16;
+
+	for (int j = 0; j < 1024; j++) {
+		OCL_MAP_BUFFER(0);
+		for (int i = 0; i < n; ++i) {
+			src[i] = ((float*) buf_data[0])[i] = (j * n + i + 1) * 0.001f;
+		}
+		OCL_UNMAP_BUFFER(0);
+
+		OCL_NDRANGE(1);
+
+		OCL_MAP_BUFFER(1);
+		OCL_MAP_BUFFER(2);
+		float *dst = (float*) buf_data[1];
+		for (int i = 0; i < n; ++i) {
+			int cpu_signp;
+			float cpu = lgamma_r(src[i], &cpu_signp);
+			int gpu_signp = ((int*)buf_data[2])[i];
+			float gpu = dst[i];
+			if (cpu_signp != gpu_signp || fabsf(cpu - gpu) >= 1e-3) {
+				printf("%f %f %f\n", src[i], cpu, gpu);
+				OCL_ASSERT(0);
+			}
+		}
+		OCL_UNMAP_BUFFER(1);
+		OCL_UNMAP_BUFFER(2);
+	}
+}
+
+MAKE_UTEST_FROM_FUNCTION (builtin_lgamma_r);
diff --git a/utests/utest/builtin_local_id.cpp b/utests/utest/builtin_local_id.cpp
new file mode 100644
index 0000000..1f07615
--- /dev/null
+++ b/utests/utest/builtin_local_id.cpp
@@ -0,0 +1,81 @@
+/*
+According to the OpenCL v1.1 & v1.2 chapter 6.11.
+Now define local and global size as following:
+  globals[0] = 4;
+  globals[1] = 9;
+  globals[2] = 16;
+  locals[0] = 2;
+  locals[1] = 3;
+  locals[2] = 4;
+
+Kernel:
+int id = get_local_id(0) +  get_group_id(0)*2 + \
+         get_local_id(1) * 4 + get_group_id(1)*12 +\
+         get_local_id(2) *36 + get_group_id(2)*144;
+
+dimension:1
+ 0  1  2  3
+dimension:2
+ 0  1  2  3  4  5  6  7  8  9 10 11
+12 13 14 15 16 17 18 19 20 21 22 23
+24 25 26 27 28 29 30 31 32 33 34 35
+dimension:3
+ 0  1  2  3  4  5  6  7 ... 139 140 141 142 143
+...
+...
+429 430 431 432 433 434 ... 571 572 573 574 575
+*/
+
+#define udebug 0
+#include "utest_helper.hpp"
+static void builtin_local_id(void)
+{
+
+  // Setup kernel and buffers
+  int dim, local_id[576], err, i, buf_len=1;
+  OCL_CREATE_KERNEL("builtin_local_id");
+
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_READ_WRITE, sizeof(int)*576, NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+
+  for( dim=1; dim <= 3; dim++ )
+  {
+    buf_len = 1;
+    for(i=1; i <= dim; i++)
+    {
+      locals[i - 1] = i + 1;
+      globals[i - 1] = (i + 1) * (i + 1);
+      buf_len *= ((i + 1) * (i + 1));
+    }
+    for(i = dim+1; i <= 3; i++)
+    {
+      globals[i - 1] = 0;
+      locals[i - 1] = 0;
+    }
+
+    // Run the kernel
+    OCL_NDRANGE( dim );
+    clFinish(queue);
+
+    err = clEnqueueReadBuffer( queue, buf[0], CL_TRUE, 0, sizeof(int) * buf_len, &local_id, 0, NULL, NULL);
+
+    if (err != CL_SUCCESS)
+    {
+      printf("Error: Failed to read output array! %d\n", err);
+      exit(1);
+    }
+
+#if udebug
+    for(i = 0; i < buf_len; i++)
+    {
+      printf("%2d ", local_id[i]);
+      if ((i + 1) % 4  == 0) printf("\n");
+    }
+#endif
+
+    for( i = 0; i < buf_len; i++)
+      OCL_ASSERT( local_id[i] == i);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(builtin_local_id);
diff --git a/utests/utest/builtin_local_size.cpp b/utests/utest/builtin_local_size.cpp
new file mode 100644
index 0000000..a9dac2e
--- /dev/null
+++ b/utests/utest/builtin_local_size.cpp
@@ -0,0 +1,88 @@
+/*
+According to the OpenCL v1.1 & v1.2 chapter 6.11, the behavior of function get_local_size should be as following:
+
+  globals[0] = 3;
+  globals[1] = 4;
+  globals[2] = 5;
+  locals[0] = 3;
+  locals[1] = 4;
+  locals[2] = 5;
+
+get_local_size(-1) = 1 (dimension:1)
+get_local_size(0) = 3 (dimension:1)
+get_local_size(1) = 1 (dimension:1)
+get_local_size(2) = 1 (dimension:1)
+
+get_local_size(-1) = 1 (dimension:2)
+get_local_size(0) = 3 (dimension:2)
+get_local_size(1) = 4 (dimension:2)
+get_local_size(2) = 1 (dimension:2)
+get_local_size(3) = 1 (dimension:2)
+
+get_local_size(-1) = 1 (dimension:3)
+get_local_size(0) = 3 (dimension:3)
+get_local_size(1) = 4 (dimension:3)
+get_local_size(2) = 5 (dimension:3)
+get_local_size(3) = 1 (dimension:3)
+get_local_size(4) = 1 (dimension:3)
+
+*/
+#include "utest_helper.hpp"
+#define udebug 0
+
+static void builtin_local_size(void)
+{
+
+  // Setup kernel and buffers
+  int dim, dim_arg_global, local_size, err;
+  OCL_CREATE_KERNEL("builtin_local_size");
+
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_READ_WRITE, sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[1], CL_MEM_READ_WRITE, sizeof(int), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+
+  globals[0] = 3;
+  globals[1] = 4;
+  globals[2] = 5;
+  locals[0] = 3;
+  locals[1] = 4;
+  locals[2] = 5;
+
+  for( dim=1; dim <= 3; dim++ )
+  {
+
+    for( dim_arg_global = -1; dim_arg_global <= dim + 1; dim_arg_global++ )
+    {
+
+      err = clEnqueueWriteBuffer( queue, buf[1], CL_TRUE, 0, sizeof(int), &dim_arg_global, 0, NULL, NULL);
+      if (err != CL_SUCCESS)
+      {
+        printf("Error: Failed to write to source array!\n");
+        exit(1);
+      }
+
+      // Run the kernel
+      OCL_NDRANGE( dim );
+
+      err = clEnqueueReadBuffer( queue, buf[0], CL_TRUE, 0, sizeof(int), &local_size, 0, NULL, NULL);
+      if (err != CL_SUCCESS)
+      {
+        printf("Error: Failed to read output array! %d\n", err);
+        exit(1);
+      }
+
+#if udebug
+      printf("get_local_size(%d) = %d (dimension:%d)\n", dim_arg_global, local_size, dim);
+#endif
+      if ( dim_arg_global >= 0 && dim_arg_global < dim)
+        OCL_ASSERT( local_size == dim_arg_global + 3);
+      else
+      {
+        OCL_ASSERT( local_size == 1);
+      }
+    }
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(builtin_local_size);
diff --git a/utests/utest/builtin_mad_sat.cpp b/utests/utest/builtin_mad_sat.cpp
new file mode 100644
index 0000000..ed9a558
--- /dev/null
+++ b/utests/utest/builtin_mad_sat.cpp
@@ -0,0 +1,44 @@
+#include "utest_helper.hpp"
+
+void builtin_mad_sat(void)
+{
+  const int n = 32;
+  short src1[n], src2[n], src3[n];
+srand(0);
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("builtin_mad_sat");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(short), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(short), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(short), NULL);
+  OCL_CREATE_BUFFER(buf[3], 0, n * sizeof(short), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  OCL_SET_ARG(3, sizeof(cl_mem), &buf[3]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  OCL_MAP_BUFFER(2);
+  for (int i = 0; i < n; ++i) {
+    src1[i] = ((short*)buf_data[0])[i] = rand();
+    src2[i] = ((short*)buf_data[1])[i] = rand();
+    src3[i] = ((short*)buf_data[2])[i] = rand();
+  }
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+  OCL_UNMAP_BUFFER(2);
+
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(3);
+  for (int i = 0; i < n; ++i) {
+    int a = (int)src1[i] * (int)src2[i] + (int)src3[i];
+    a = a > 0x7FFF ? 0x7FFF : (a < -0x8000 ? -0x8000 : a);
+    OCL_ASSERT(((short*)buf_data[3])[i] == (short)a);
+  }
+  OCL_UNMAP_BUFFER(3);
+}
+
+MAKE_UTEST_FROM_FUNCTION(builtin_mad_sat);
diff --git a/utests/utest/builtin_modf.cpp b/utests/utest/builtin_modf.cpp
new file mode 100644
index 0000000..057e95e
--- /dev/null
+++ b/utests/utest/builtin_modf.cpp
@@ -0,0 +1,56 @@
+#include <cmath>
+#include <cstring>
+#include "utest_helper.hpp"
+
+void builtin_modf(void)
+{
+  const int n = 32;
+  float src[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("builtin_modf");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(float), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  src[0] = INFINITY;
+  src[1] = -INFINITY;
+  src[2] = nanf("");
+  src[3] = 0;
+  src[4] = 1.5f;
+  src[5] = 2.5f;
+  src[6] = -2.5f;
+  src[7] = 20;
+  src[8] = 21;
+  src[9] = 89.5f;
+
+  OCL_MAP_BUFFER(0);
+  memcpy(buf_data[0], src, n * sizeof(float));
+  OCL_UNMAP_BUFFER(0);
+
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(1);
+  OCL_MAP_BUFFER(2);
+  float *dst = (float *)buf_data[1];
+  float *it = (float *)buf_data[2];
+  OCL_ASSERT(dst[0] == 0 && it[0] == INFINITY);
+  OCL_ASSERT(dst[1] == -0.f && it[1] == -INFINITY);
+  OCL_ASSERT(isnanf(dst[2]) && isnanf(it[2]));
+  OCL_ASSERT(dst[3] == 0 && it[3] == 0);
+  OCL_ASSERT(dst[4] == 0.5f && it[4] == 1);
+  OCL_ASSERT(dst[5] == 0.5f && it[5] == 2);
+  OCL_ASSERT(dst[6] == -0.5f && it[6] == -2);
+  OCL_ASSERT(dst[7] == 0 && it[7] == 20);
+  OCL_ASSERT(dst[8] == 0 && it[8] == 21);
+  OCL_ASSERT(dst[9] == 0.5f && it[9] == 89);
+  OCL_UNMAP_BUFFER(1);
+  OCL_UNMAP_BUFFER(2);
+}
+
+MAKE_UTEST_FROM_FUNCTION(builtin_modf);
diff --git a/utests/utest/builtin_nextafter.cpp b/utests/utest/builtin_nextafter.cpp
new file mode 100644
index 0000000..ae95497
--- /dev/null
+++ b/utests/utest/builtin_nextafter.cpp
@@ -0,0 +1,60 @@
+#include <cmath>
+#include <cstring>
+#include "utest_helper.hpp"
+
+static int as_int(float f) {
+  void *p = &f;
+  return *(int *)p;
+}
+
+void builtin_nextafter(void)
+{
+  const int n = 16;
+  float src1[n], src2[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("builtin_nextafter");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(float), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  src1[0] = nanf(""), src2[0] = 1.1f;
+  src1[1] = 2.2f,     src2[1] = nanf("");
+  src1[2] = nanf(""), src2[2] = nanf("");
+  src1[3] = 123.4f,   src2[3] = 123.4f;
+  src1[4] = 0.f,      src2[4] = 1.f;
+  src1[5] = -0.f,     src2[5] = -1.f;
+  for (int i = 6; i < n; ++i) {
+    src1[i] = (rand() & 255) * 0.1f - 12.8f;
+    src2[i] = (rand() & 255) * 0.1f - 12.8f;
+  }
+
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  memcpy(buf_data[0], src1, n * sizeof(float));
+  memcpy(buf_data[1], src2, n * sizeof(float));
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(2);
+  float *dest = (float *)buf_data[2];
+  if (0)
+    for (int i = 0; i < n; ++i)
+      printf("%d %x %x %x %x\n", i, as_int(src1[i]), as_int(src2[i]),
+             as_int(dest[i]), as_int(nextafterf(src1[i], src2[i])));
+  OCL_ASSERT(isnanf(dest[0]));
+  OCL_ASSERT(isnanf(dest[1]));
+  OCL_ASSERT(isnanf(dest[2]));
+  for (int i = 3; i < n; ++i)
+    OCL_ASSERT(dest[i] == nextafterf(src1[i], src2[i]));
+  OCL_UNMAP_BUFFER(2);
+}
+
+MAKE_UTEST_FROM_FUNCTION(builtin_nextafter);
diff --git a/utests/utest/builtin_num_groups.cpp b/utests/utest/builtin_num_groups.cpp
new file mode 100644
index 0000000..bbff435
--- /dev/null
+++ b/utests/utest/builtin_num_groups.cpp
@@ -0,0 +1,85 @@
+/*
+According to the OpenCL v1.1 & v1.2 chapter 6.11, the behavior of function get_num_groups should be as following:
+
+  globals[0] = 1;
+  globals[1] = 4;
+  globals[2] = 9;
+  locals[0] = 1;
+  locals[1] = 2;
+  locals[2] = 3;
+
+#ifdef CL_VERSION_1_2 | CL_VERSION_1_1:
+get_num_groups(-1) = 1 (dimension:1)
+get_num_groups(0) = 1 (dimension:1)
+get_num_groups(1) = 1 (dimension:1)
+
+get_num_groups(-1) = 1 (dimension:2)
+get_num_groups(0) = 1 (dimension:2)
+get_num_groups(1) = 2 (dimension:2)
+get_num_groups(2) = 1 (dimension:2)
+
+get_num_groups(-1) = 1 (dimension:3)
+get_num_groups(0) = 1 (dimension:3)
+get_num_groups(1) = 2 (dimension:3)
+get_num_groups(2) = 3 (dimension:3)
+get_num_groups(3) = 1 (dimension:3)
+*/
+
+#define udebug 0
+#include "utest_helper.hpp"
+static void builtin_num_groups(void)
+{
+
+  // Setup kernel and buffers
+  int dim, dim_arg_global, num_groups, err;
+  OCL_CREATE_KERNEL("builtin_num_groups");
+
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_READ_WRITE, sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[1], CL_MEM_READ_WRITE, sizeof(int), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+
+  globals[0] = 1;
+  globals[1] = 4;
+  globals[2] = 9;
+  locals[0] = 1;
+  locals[1] = 2;
+  locals[2] = 3;
+
+  for( dim=1; dim <= 3; dim++ )
+  {
+
+    for( dim_arg_global = -1; dim_arg_global <= dim + 1; dim_arg_global++ )
+    {
+
+      err = clEnqueueWriteBuffer( queue, buf[1], CL_TRUE, 0, sizeof(int), &dim_arg_global, 0, NULL, NULL);
+      if (err != CL_SUCCESS)
+      {
+        printf("Error: Failed to write to source array!\n");
+        exit(1);
+      }
+
+      // Run the kernel
+      OCL_NDRANGE( dim );
+
+      err = clEnqueueReadBuffer( queue, buf[0], CL_TRUE, 0, sizeof(int), &num_groups, 0, NULL, NULL);
+      if (err != CL_SUCCESS)
+      {
+        printf("Error: Failed to read output array! %d\n", err);
+        exit(1);
+      }
+
+#if udebug
+      printf("get_num_groups(%d) = %d (dimension:%d)\n", dim_arg_global, num_groups, dim);
+#endif
+      if ( dim_arg_global >= 0 && dim_arg_global < dim)
+        OCL_ASSERT( num_groups == dim_arg_global + 1 );
+      else
+      {
+        OCL_ASSERT( num_groups == 1);
+      }
+    }
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(builtin_num_groups);
diff --git a/utests/utest/builtin_pow.cpp b/utests/utest/builtin_pow.cpp
new file mode 100644
index 0000000..8ed17ed
--- /dev/null
+++ b/utests/utest/builtin_pow.cpp
@@ -0,0 +1,92 @@
+#include "utest_helper.hpp"
+#include <cmath>
+#include <algorithm>
+
+#define udebug 0
+#define printf_c(...) \
+{\
+  printf("\033[1m\033[40;31m");\
+  printf( __VA_ARGS__ );\
+  printf("\033[0m");\
+}
+const float ori_data[] = {-20.5, -1, -0.9, -0.01, 0, 0.01, 0.9, 1.0, 20.5};
+const int count_input_ori = sizeof(ori_data) / sizeof(ori_data[0]);
+const int count_input = count_input_ori * count_input_ori;
+
+float input_data1[count_input];
+float input_data2[count_input];
+const int max_function = 1;
+
+static void cpu_compiler_math(const float *src1, const float *src2, float *dst)
+{
+  dst[0] = powf(src1[0], src2[0]);
+//  dst[1] = src1[0];
+}
+
+static void builtin_pow(void)
+{
+  // Setup kernel and buffers
+  int k, i, index_cur;
+  float gpu_data[max_function * count_input] = {0}, cpu_data[max_function * count_input] = {0};
+
+  for(i=0; i<count_input_ori;i++)
+    for(k=0; k<count_input_ori;k++)
+    {
+      input_data1[i*count_input_ori+k] = ori_data[i];
+      input_data2[i*count_input_ori+k] = ori_data[k];
+    }
+
+  OCL_CREATE_KERNEL("builtin_pow");
+
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_READ_WRITE, count_input * max_function * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[1], CL_MEM_READ_WRITE, count_input * max_function * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[2], CL_MEM_READ_WRITE, count_input * max_function * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[3], CL_MEM_READ_WRITE, sizeof(int), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  OCL_SET_ARG(3, sizeof(cl_mem), &buf[3]);
+
+  globals[0] = count_input;
+  locals[0] = 1;
+
+  clEnqueueWriteBuffer( queue, buf[1], CL_TRUE, 0, count_input * sizeof(float), input_data1, 0, NULL, NULL);
+  clEnqueueWriteBuffer( queue, buf[2], CL_TRUE, 0, count_input * sizeof(float), input_data2, 0, NULL, NULL);
+  clEnqueueWriteBuffer( queue, buf[3], CL_TRUE, 0, sizeof(int), &max_function, 0, NULL, NULL);
+
+   // Run the kernel
+  OCL_NDRANGE( 1 );
+
+  clEnqueueReadBuffer( queue, buf[0], CL_TRUE, 0, sizeof(float) * max_function * count_input, gpu_data, 0, NULL, NULL);
+
+  for (k = 0; (uint)k < count_input; k++)
+  {
+    cpu_compiler_math( input_data1 + k, input_data2 + k, cpu_data + k * max_function);
+
+    for (i = 0; i < max_function; i++)
+    {
+      index_cur = k * max_function + i;
+#if udebug
+      if ( (isinf(cpu_data[index_cur]) && !isinf(gpu_data[index_cur])) ||
+           (isnan(cpu_data[index_cur]) && !isnan(gpu_data[index_cur])) ||
+           (fabs(gpu_data[index_cur] - cpu_data[index_cur]) > 1e-5f)   )
+      {
+        printf_c("%d/%d: x:%f, y:%f -> gpu:%f  cpu:%f\n", k, i, input_data1[k], input_data2[k], gpu_data[index_cur], cpu_data[index_cur]);
+      }
+      else
+        printf("%d/%d: x:%f, y:%f -> gpu:%f  cpu:%f\n", k, i, input_data1[k], input_data2[k], gpu_data[index_cur], cpu_data[index_cur]);
+#else
+     if (isinf(cpu_data[index_cur]))
+       OCL_ASSERT(isinf(gpu_data[index_cur]));
+     else if (isnan(cpu_data[index_cur]))
+       OCL_ASSERT(isnan(gpu_data[index_cur]));
+     else
+     {
+       OCL_ASSERT(fabs(gpu_data[index_cur] - cpu_data[index_cur]) < 1e-3f);
+     }
+#endif
+    }
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION_WITH_ISSUE(builtin_pow)
diff --git a/utests/utest/builtin_remquo.cpp b/utests/utest/builtin_remquo.cpp
new file mode 100644
index 0000000..f67be12
--- /dev/null
+++ b/utests/utest/builtin_remquo.cpp
@@ -0,0 +1,65 @@
+#include <cmath>
+#include <cstring>
+#include "utest_helper.hpp"
+
+void builtin_remquo(void)
+{
+  const int n = 16;
+  float src1[n], src2[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("builtin_remquo");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[3], 0, n * sizeof(int), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  OCL_SET_ARG(3, sizeof(cl_mem), &buf[3]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  src1[0] = 1,         src2[0] = 0;
+  src1[1] = 1,         src2[1] = -0.f;
+  src1[2] = INFINITY,  src2[2] = 1;
+  src1[3] = -INFINITY, src2[3] = 1;
+  src1[4] = nanf(""),  src2[4] = nanf("");
+  src1[5] = 1.625f,    src2[5] = 1;
+  src1[6] = -1.625f,   src2[6] = 1;
+  src1[7] = 1.625f,    src2[7] = -1;
+  src1[8] = -1.625f,   src2[8] = -1;
+  src1[9] = 5,         src2[9] = 2;
+  src1[10] = 3,        src2[10] = 2;
+  src1[11] = -0.f,     src2[11] = 1;
+
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  memcpy(buf_data[0], src1, n * sizeof(float));
+  memcpy(buf_data[1], src2, n * sizeof(float));
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(2);
+  OCL_MAP_BUFFER(3);
+  float *dest = (float *)buf_data[2];
+  int *quo = (int *)buf_data[3];
+  OCL_ASSERT(isnanf(dest[0]));
+  OCL_ASSERT(isnanf(dest[1]));
+  OCL_ASSERT(isnanf(dest[2]));
+  OCL_ASSERT(isnanf(dest[3]));
+  OCL_ASSERT(isnanf(dest[4]));
+  OCL_ASSERT(dest[5] == -0.375f && quo[5] ==  2);
+  OCL_ASSERT(dest[6] ==  0.375f && quo[6] == -2);
+  OCL_ASSERT(dest[7] == -0.375f && quo[7] == -2);
+  OCL_ASSERT(dest[8] ==  0.375f && quo[8] ==  2);
+  OCL_ASSERT(dest[9] == 1       && quo[9] ==  2);
+  OCL_ASSERT(dest[10] == -1     && quo[10] == 2);
+  OCL_ASSERT(dest[11] == -0.f   && quo[11] == 0);
+  OCL_UNMAP_BUFFER(2);
+  OCL_UNMAP_BUFFER(3);
+}
+
+MAKE_UTEST_FROM_FUNCTION(builtin_remquo);
diff --git a/utests/utest/builtin_shuffle.cpp b/utests/utest/builtin_shuffle.cpp
new file mode 100644
index 0000000..c7fa86b
--- /dev/null
+++ b/utests/utest/builtin_shuffle.cpp
@@ -0,0 +1,45 @@
+#include "utest_helper.hpp"
+
+void builtin_shuffle(void)
+{
+  const int n = 32;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("builtin_shuffle");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[3], 0, n * sizeof(float), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  OCL_SET_ARG(3, sizeof(cl_mem), &buf[3]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (int i = 0; i < n; i ++) {
+    ((float *)(buf_data[0]))[i] = rand();
+    ((float *)(buf_data[1]))[i] = rand();
+  }
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  OCL_MAP_BUFFER(2);
+  OCL_MAP_BUFFER(3);
+  for (int i = 0; i < n; i ++) {
+    OCL_ASSERT(((float *)(buf_data[0]))[i] == ((float *)(buf_data[3]))[i]);
+    OCL_ASSERT(((float *)(buf_data[1]))[i] == ((float *)(buf_data[2]))[i]);
+  }
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+  OCL_UNMAP_BUFFER(2);
+  OCL_UNMAP_BUFFER(3);
+}
+
+MAKE_UTEST_FROM_FUNCTION(builtin_shuffle);
diff --git a/utests/utest/builtin_shuffle2.cpp b/utests/utest/builtin_shuffle2.cpp
new file mode 100644
index 0000000..7a9ebd1
--- /dev/null
+++ b/utests/utest/builtin_shuffle2.cpp
@@ -0,0 +1,45 @@
+#include "utest_helper.hpp"
+
+void builtin_shuffle2(void)
+{
+  const int n = 32;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("builtin_shuffle2");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[3], 0, n * sizeof(float), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  OCL_SET_ARG(3, sizeof(cl_mem), &buf[3]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (int i = 0; i < n; i ++) {
+    ((float *)(buf_data[0]))[i] = (rand() & 15) * 0.1f;
+    ((float *)(buf_data[1]))[i] = (rand() & 15) * 0.1f;
+  }
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  OCL_MAP_BUFFER(2);
+  OCL_MAP_BUFFER(3);
+  for (int i = 0; i < n; i ++) {
+    OCL_ASSERT(2 * ((float *)(buf_data[0]))[i] == ((float *)(buf_data[3]))[i]);
+    OCL_ASSERT(2 * ((float *)(buf_data[1]))[i] == ((float *)(buf_data[2]))[i]);
+  }
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+  OCL_UNMAP_BUFFER(2);
+  OCL_UNMAP_BUFFER(3);
+}
+
+MAKE_UTEST_FROM_FUNCTION(builtin_shuffle2);
diff --git a/utests/utest/builtin_sign.cpp b/utests/utest/builtin_sign.cpp
new file mode 100644
index 0000000..426de36
--- /dev/null
+++ b/utests/utest/builtin_sign.cpp
@@ -0,0 +1,47 @@
+#include <cmath>
+#include "utest_helper.hpp"
+
+void builtin_sign(void)
+{
+  const int n = 32;
+  float src[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("builtin_sign");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  OCL_MAP_BUFFER(0);
+  src[0] = ((float*)buf_data[0])[0] = nanf("");
+  src[1] = ((float*)buf_data[0])[1] = INFINITY;
+  src[2] = ((float*)buf_data[0])[2] = 0.f;
+  src[3] = ((float*)buf_data[0])[3] = -0.f;
+  for (int i = 4; i < n; ++i) {
+    src[i] = ((float*)buf_data[0])[i] = (rand() & 15) * 0.1 - 0.75;
+  }
+  OCL_UNMAP_BUFFER(0);
+
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(1);
+  float *dst = (float*)buf_data[1];
+  OCL_ASSERT(dst[0] == 0);
+  OCL_ASSERT(dst[1] == 1.f);
+  OCL_ASSERT(dst[2] == 0.f);
+  OCL_ASSERT(dst[3] == -0.f);
+  for (int i = 4; i < n; ++i) {
+    if (src[i] == 0.f)
+      OCL_ASSERT(dst[i] == 0.f);
+    else if (src[i] == -0.f)
+      OCL_ASSERT(dst[i] == -0.f);
+    else
+      OCL_ASSERT(dst[i] == (src[i] > 0 ? 1 : -1));
+  }
+  OCL_UNMAP_BUFFER(1);
+}
+
+MAKE_UTEST_FROM_FUNCTION(builtin_sign);
diff --git a/utests/utest/builtin_sinpi.cpp b/utests/utest/builtin_sinpi.cpp
new file mode 100644
index 0000000..0e11a0d
--- /dev/null
+++ b/utests/utest/builtin_sinpi.cpp
@@ -0,0 +1,104 @@
+#include <cmath>
+#include "utest_helper.hpp"
+
+static int as_int(float x) {
+  union {float f; int i;} u;
+  u.f = x;
+  return u.i;
+}
+
+static float sinpi(float x) {
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+  float y, z;
+  int n = 0, ix;
+  const float pi = 3.1415927410e+00f;
+
+  ix = as_int(x) & 0x7fffffff;
+
+  if (ix < 0x3e800000)
+    return sinf(pi * x);
+  y = -x;
+  z = floorf(y);
+  if (z != y) {
+    y *= 0.5f;
+    y = 2.f * (y - floorf(y));
+    n = y * 4.f;
+  } else {
+    if (ix >= 0x4b800000) {
+      y = 0;
+      n = 0;
+    } else {
+      if (ix < 0x4b000000)
+        z = y + 8.3886080000e+06f;
+      int n = as_int(z);
+      n &= 1;
+      y = n;
+      n <<= 2;
+    }
+  }
+  switch (n) {
+  case 0:
+    y = sinf(pi * y);
+    break;
+  case 1:
+  case 2:
+    y = cosf(pi * ((float) 0.5 - y));
+    break;
+  case 3:
+  case 4:
+    y = sinf(pi * (1.f - y));
+    break;
+  case 5:
+  case 6:
+    y = -cosf(pi * (y - (float) 1.5));
+    break;
+  default:
+    y = sinf(pi * (y - (float) 2.0));
+    break;
+  }
+  return -y;
+}
+
+void builtin_sinpi(void)
+{
+  const int n = 1024;
+  float src[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("builtin_sinpi");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  for (int j = 0; j < 1000; j ++) {
+    OCL_MAP_BUFFER(0);
+    for (int i = 0; i < n; ++i) {
+      src[i] = ((float*)buf_data[0])[i] = (j*n + i) * 0.01f;
+    }
+    OCL_UNMAP_BUFFER(0);
+
+    OCL_NDRANGE(1);
+
+    OCL_MAP_BUFFER(1);
+    float *dst = (float*)buf_data[1];
+    for (int i = 0; i < n; ++i) {
+      float cpu = sinpi(src[i]);
+      OCL_ASSERT (fabsf(cpu - dst[i]) < 1e-4);
+    }
+    OCL_UNMAP_BUFFER(1);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(builtin_sinpi);
diff --git a/utests/utest/builtin_tgamma.cpp b/utests/utest/builtin_tgamma.cpp
new file mode 100644
index 0000000..4c824d0
--- /dev/null
+++ b/utests/utest/builtin_tgamma.cpp
@@ -0,0 +1,42 @@
+#include <cmath>
+#include "utest_helper.hpp"
+
+void builtin_tgamma(void)
+{
+  const int n = 1024;
+  float src[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("builtin_tgamma");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  for (int j = 0; j < 1024; j ++) {
+    OCL_MAP_BUFFER(0);
+    for (int i = 0; i < n; ++i) {
+      src[i] = ((float*)buf_data[0])[i] = (j*n+i+1) * 0.001f;
+    }
+    OCL_UNMAP_BUFFER(0);
+
+    OCL_NDRANGE(1);
+
+    OCL_MAP_BUFFER(1);
+    float *dst = (float*)buf_data[1];
+    for (int i = 0; i < n; ++i) {
+      float cpu = gammaf(src[i]);
+      if (isinf(cpu)) {
+        OCL_ASSERT(isinf(dst[i]));
+      } else if (fabsf(cpu - dst[i]) >= 1e-3) {
+        printf("%f %f %f\n", src[i], cpu, dst[i]);
+        OCL_ASSERT(0);
+      }
+    }
+    OCL_UNMAP_BUFFER(1);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(builtin_tgamma);
diff --git a/utests/utest/cl_create_kernel.cpp b/utests/utest/cl_create_kernel.cpp
new file mode 100644
index 0000000..36a7c38
--- /dev/null
+++ b/utests/utest/cl_create_kernel.cpp
@@ -0,0 +1,16 @@
+#include "utest_helper.hpp"
+
+static void test_create_kernel(void)
+{
+  cl_ulong max_mem_size;
+  cl_int status;
+
+  OCL_CALL(clGetDeviceInfo, device, CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof(max_mem_size), &max_mem_size, NULL);
+  OCL_ASSERT(max_mem_size < (cl_ulong)-1);
+  // increment the size so that following clCreateBuffer() would fail.
+  ++max_mem_size;
+  buf[0] = clCreateBuffer(ctx, 0, max_mem_size, NULL, &status);
+  OCL_ASSERT(status == CL_INVALID_BUFFER_SIZE);
+}
+
+MAKE_UTEST_FROM_FUNCTION(test_create_kernel);
diff --git a/utests/utest/compiler_abs.cpp b/utests/utest/compiler_abs.cpp
new file mode 100644
index 0000000..3f477a8
--- /dev/null
+++ b/utests/utest/compiler_abs.cpp
@@ -0,0 +1,254 @@
+#include "utest_helper.hpp"
+#include "string.h"
+
+template <typename T, int N>
+struct cl_vec {
+    T ptr[((N+1)/2)*2]; //align to 2 elements.
+
+    typedef cl_vec<T, N> vec_type;
+
+    cl_vec(void) {
+        memset(ptr, 0, sizeof(T) * ((N+1)/2)*2);
+    }
+    cl_vec(vec_type & other) {
+        memset(ptr, 0, sizeof(T) * ((N+1)/2)*2);
+        memcpy (this->ptr, other.ptr, sizeof(T) * N);
+    }
+
+    vec_type& operator= (vec_type & other) {
+        memset(ptr, 0, sizeof(T) * ((N+1)/2)*2);
+        memcpy (this->ptr, other.ptr, sizeof(T) * N);
+        return *this;
+    }
+
+    template <typename U> vec_type& operator= (cl_vec<U, N> & other) {
+        memset(ptr, 0, sizeof(T) * ((N+1)/2)*2);
+        memcpy (this->ptr, other.ptr, sizeof(T) * N);
+        return *this;
+    }
+
+    bool operator== (vec_type & other) {
+        return !memcmp (this->ptr, other.ptr, sizeof(T) * N);
+    }
+
+    void abs(void) {
+        int i = 0;
+        for (; i < N; i++) {
+            T f = ptr[i];
+            f = f < 0 ? -f : f;
+            ptr[i] = f;
+        }
+    }
+};
+
+template <typename T, typename U, int N> static void cpu (int global_id,
+        cl_vec<T, N> *src, cl_vec<U, N> *dst)
+{
+    cl_vec<T, N> v  = src[global_id];
+    v.abs();
+    dst[global_id] = v;
+}
+
+template <typename T, typename U> static void cpu(int global_id, T *src, U *dst)
+{
+    T f = src[global_id];
+    f = f < 0 ? -f : f;
+    dst[global_id] = (U)f;
+}
+
+template <typename T, int N> static void gen_rand_val (cl_vec<T, N>& vect)
+{
+    int i = 0;
+
+    memset(vect.ptr, 0, sizeof(T) * ((N+1)/2)*2);
+    for (; i < N; i++) {
+        vect.ptr[i] = static_cast<T>((rand() & 63) - 32);
+    }
+}
+
+template <typename T> static void gen_rand_val (T & val)
+{
+    val = static_cast<T>((rand() & 63) - 32);
+}
+
+template <typename T>
+inline static void print_data (T& val)
+{
+    if (std::is_unsigned<T>::value)
+        printf(" %u", val);
+    else
+        printf(" %d", val);
+}
+
+template <typename T, typename U, int N> static void dump_data (cl_vec<T, N>* src,
+        cl_vec<U, N>* dst, int n)
+{
+    U* val = reinterpret_cast<U *>(dst);
+
+    n = n*((N+1)/2)*2;
+
+    printf("\nRaw: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(((T *)buf_data[0])[i]);
+    }
+
+    printf("\nCPU: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(val[i]);
+    }
+    printf("\nGPU: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(((U *)buf_data[1])[i]);
+    }
+}
+
+template <typename T, typename U> static void dump_data (T* src, U* dst, int n)
+{
+    printf("\nRaw: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(((T *)buf_data[0])[i]);
+    }
+
+    printf("\nCPU: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(dst[i]);
+    }
+    printf("\nGPU: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(((U *)buf_data[1])[i]);
+    }
+}
+
+template <typename T, typename U> static void compiler_abs_with_type(void)
+{
+    const size_t n = 16;
+    U cpu_dst[16];
+    T cpu_src[16];
+
+    // Setup buffers
+    OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(T), NULL);
+    OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(T), NULL);
+    OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+    OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+    globals[0] = 16;
+    locals[0] = 16;
+
+    // Run random tests
+    for (uint32_t pass = 0; pass < 8; ++pass) {
+        OCL_MAP_BUFFER(0);
+
+        /* Clear the dst buffer to avoid random data. */
+        OCL_MAP_BUFFER(1);
+        memset(buf_data[1], 0, sizeof(U) * n);
+        OCL_UNMAP_BUFFER(1);
+
+        for (int32_t i = 0; i < (int32_t) n; ++i) {
+            gen_rand_val(cpu_src[i]);
+        }
+
+        memcpy(buf_data[0], cpu_src, sizeof(T) * n);
+
+        // Run the kernel on GPU
+        OCL_NDRANGE(1);
+
+        // Run on CPU
+        for (int32_t i = 0; i < (int32_t) n; ++i)
+            cpu(i, cpu_src, cpu_dst);
+
+        // Compare
+        OCL_MAP_BUFFER(1);
+
+//      dump_data(cpu_src, cpu_dst, n);
+
+        OCL_ASSERT(!memcmp(buf_data[1], cpu_dst, sizeof(T) * n));
+        OCL_UNMAP_BUFFER(1);
+        OCL_UNMAP_BUFFER(0);
+    }
+}
+
+#define ABS_TEST_TYPE_1(TYPE, UTYPE, KEEP_PROGRAM) \
+	static void compiler_abs_##TYPE (void) \
+        { \
+           OCL_CALL (cl_kernel_init, "compiler_abs.cl", "compiler_abs_"#TYPE, SOURCE, NULL);  \
+           compiler_abs_with_type<TYPE, UTYPE>(); \
+        } \
+	MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_abs_##TYPE, KEEP_PROGRAM);
+
+#define ABS_TEST_TYPE(TYPE, UTYPE) ABS_TEST_TYPE_1(TYPE, UTYPE, true)
+#define ABS_TEST_TYPE_END(TYPE, UTYPE) ABS_TEST_TYPE_1(TYPE, UTYPE, false)
+
+typedef unsigned char uchar;
+typedef unsigned short ushort;
+typedef unsigned int uint;
+ABS_TEST_TYPE(int, uint)
+ABS_TEST_TYPE(short, ushort)
+ABS_TEST_TYPE(char, uchar)
+ABS_TEST_TYPE(uint, uint)
+ABS_TEST_TYPE(ushort, ushort)
+ABS_TEST_TYPE(uchar, uchar)
+
+
+typedef cl_vec<int, 2> int2;
+typedef cl_vec<int, 3> int3;
+typedef cl_vec<int, 4> int4;
+typedef cl_vec<int, 8> int8;
+typedef cl_vec<int, 16> int16;
+typedef cl_vec<unsigned int, 2> uint2;
+typedef cl_vec<unsigned int, 3> uint3;
+typedef cl_vec<unsigned int, 4> uint4;
+typedef cl_vec<unsigned int, 8> uint8;
+typedef cl_vec<unsigned int, 16> uint16;
+ABS_TEST_TYPE(int2, uint2)
+ABS_TEST_TYPE(int3, uint3)
+ABS_TEST_TYPE(int4, uint4)
+ABS_TEST_TYPE(int8, uint8)
+ABS_TEST_TYPE(int16, uint16)
+ABS_TEST_TYPE(uint2, uint2)
+ABS_TEST_TYPE(uint3, uint3)
+ABS_TEST_TYPE(uint4, uint4)
+ABS_TEST_TYPE(uint8, uint8)
+ABS_TEST_TYPE(uint16, uint16)
+
+
+typedef cl_vec<char, 2> char2;
+typedef cl_vec<char, 3> char3;
+typedef cl_vec<char, 4> char4;
+typedef cl_vec<char, 8> char8;
+typedef cl_vec<char, 16> char16;
+typedef cl_vec<unsigned char, 2> uchar2;
+typedef cl_vec<unsigned char, 3> uchar3;
+typedef cl_vec<unsigned char, 4> uchar4;
+typedef cl_vec<unsigned char, 8> uchar8;
+typedef cl_vec<unsigned char, 16> uchar16;
+ABS_TEST_TYPE(char2, uchar2)
+ABS_TEST_TYPE(char3, uchar3)
+ABS_TEST_TYPE(char4, uchar4)
+ABS_TEST_TYPE(char8, uchar8)
+ABS_TEST_TYPE(char16, uchar16)
+ABS_TEST_TYPE(uchar2, uchar2)
+ABS_TEST_TYPE(uchar3, uchar3)
+ABS_TEST_TYPE(uchar4, uchar4)
+ABS_TEST_TYPE(uchar8, uchar8)
+ABS_TEST_TYPE(uchar16, uchar16)
+
+
+typedef cl_vec<short, 2> short2;
+typedef cl_vec<short, 3> short3;
+typedef cl_vec<short, 4> short4;
+typedef cl_vec<short, 8> short8;
+typedef cl_vec<short, 16> short16;
+typedef cl_vec<unsigned short, 2> ushort2;
+typedef cl_vec<unsigned short, 3> ushort3;
+typedef cl_vec<unsigned short, 4> ushort4;
+typedef cl_vec<unsigned short, 8> ushort8;
+typedef cl_vec<unsigned short, 16> ushort16;
+ABS_TEST_TYPE(short2, ushort2)
+ABS_TEST_TYPE(short3, ushort3)
+ABS_TEST_TYPE(short4, ushort4)
+ABS_TEST_TYPE(short8, ushort8)
+ABS_TEST_TYPE(short16, ushort16)
+ABS_TEST_TYPE(ushort2, ushort2)
+ABS_TEST_TYPE(ushort3, ushort3)
+ABS_TEST_TYPE(ushort4, ushort4)
+ABS_TEST_TYPE(ushort8, ushort8)
+ABS_TEST_TYPE_END(ushort16, ushort16)
diff --git a/utests/utest/compiler_abs_diff.cpp b/utests/utest/compiler_abs_diff.cpp
new file mode 100644
index 0000000..15a1f90
--- /dev/null
+++ b/utests/utest/compiler_abs_diff.cpp
@@ -0,0 +1,295 @@
+#include "utest_helper.hpp"
+#include "string.h"
+
+template <typename T, int N>
+struct cl_vec {
+    T ptr[((N+1)/2)*2]; //align to 2 elements.
+
+    typedef cl_vec<T, N> vec_type;
+
+    cl_vec(void) {
+        memset(ptr, 0, sizeof(T) * ((N+1)/2)*2);
+    }
+    cl_vec(vec_type & other) {
+        memset(ptr, 0, sizeof(T) * ((N+1)/2)*2);
+        memcpy (this->ptr, other.ptr, sizeof(T) * N);
+    }
+
+    vec_type& operator= (vec_type & other) {
+        memset(ptr, 0, sizeof(T) * ((N+1)/2)*2);
+        memcpy (this->ptr, other.ptr, sizeof(T) * N);
+        return *this;
+    }
+
+    template <typename U> vec_type& operator= (cl_vec<U, N> & other) {
+        memset(ptr, 0, sizeof(T) * ((N+1)/2)*2);
+        memcpy (this->ptr, other.ptr, sizeof(T) * N);
+        return *this;
+    }
+
+    bool operator== (vec_type & other) {
+        return !memcmp (this->ptr, other.ptr, sizeof(T) * N);
+    }
+
+    void abs_diff(vec_type & other) {
+        int i = 0;
+        for (; i < N; i++) {
+            T a = ptr[i];
+            T b = other.ptr[i];
+            T f = a > b ? (a - b) : (b - a);
+            ptr[i] = f;
+        }
+    }
+};
+
+template <typename T, typename U, int N> static void cpu (int global_id,
+        cl_vec<T, N> *x, cl_vec<T, N> *y, cl_vec<U, N> *diff)
+{
+    cl_vec<T, N> v  = x[global_id];
+    v.abs_diff(y[global_id]);
+    diff[global_id] = v;
+}
+
+template <typename T, typename U> static void cpu(int global_id, T *x, T *y, U *diff)
+{
+    T a = x[global_id];
+    T b = y[global_id];
+    U f = a > b ? (a - b) : (b - a);
+    diff[global_id] = f;
+}
+
+template <typename T, int N> static void gen_rand_val (cl_vec<T, N>& vect)
+{
+    int i = 0;
+    for (; i < N; i++) {
+        vect.ptr[i] = static_cast<T>((rand() & 63) - 32);
+    }
+}
+
+template <typename T> static void gen_rand_val (T & val)
+{
+    val = static_cast<T>((rand() & 63) - 32);
+}
+
+template <typename T>
+inline static void print_data (T& val)
+{
+    if (std::is_unsigned<T>::value)
+        printf(" %u", val);
+    else
+        printf(" %d", val);
+}
+
+template <typename T, typename U, int N> static void dump_data (cl_vec<T, N>* x,
+        cl_vec<T, N>* y, cl_vec<U, N>* diff, int n)
+{
+    U* val = reinterpret_cast<U *>(diff);
+
+    n = n*((N+1)/2)*2;
+
+    printf("\nRaw x: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(((T *)buf_data[0])[i]);
+    }
+    printf("\nRaw y: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(((T *)buf_data[1])[i]);
+    }
+
+    printf("\nCPU diff: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(val[i]);
+    }
+    printf("\nGPU diff: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(((U *)buf_data[2])[i]);
+    }
+}
+
+template <typename T, typename U> static void dump_data (T* x, T* y, U* diff, int n)
+{
+    printf("\nRaw x: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(((T *)buf_data[0])[i]);
+    }
+    printf("\nRaw y: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(((T *)buf_data[1])[i]);
+    }
+
+    printf("\nCPU diff: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(diff[i]);
+    }
+    printf("\nGPU diff: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(((U *)buf_data[2])[i]);
+    }
+}
+
+template <typename T, typename U> static void compiler_abs_diff_with_type(void)
+{
+    const size_t n = 16;
+    U cpu_diff[16];
+    T cpu_x[16];
+    T cpu_y[16];
+
+    // Setup buffers
+    OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(T), NULL);
+    OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(T), NULL);
+    OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(U), NULL);
+    OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+    OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+    OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+    globals[0] = 16;
+    locals[0] = 16;
+
+    // Run random tests
+    for (uint32_t pass = 0; pass < 8; ++pass) {
+        OCL_MAP_BUFFER(0);
+        OCL_MAP_BUFFER(1);
+
+        /* Clear the dst buffer to avoid random data. */
+        OCL_MAP_BUFFER(2);
+        memset(buf_data[2], 0, sizeof(U) * n);
+        OCL_UNMAP_BUFFER(2);
+
+        for (int32_t i = 0; i < (int32_t) n; ++i) {
+            gen_rand_val(cpu_x[i]);
+            gen_rand_val(cpu_y[i]);
+        }
+
+        memcpy(buf_data[0], cpu_x, sizeof(T) * n);
+        memcpy(buf_data[1], cpu_y, sizeof(T) * n);
+
+        // Run the kernel on GPU
+        OCL_NDRANGE(1);
+
+        // Run on CPU
+        for (int32_t i = 0; i < (int32_t) n; ++i)
+            cpu(i, cpu_x, cpu_y, cpu_diff);
+
+        // Compare
+        OCL_MAP_BUFFER(2);
+
+//      dump_data(cpu_x, cpu_y, cpu_diff, n);
+
+        OCL_ASSERT(!memcmp(buf_data[2], cpu_diff, sizeof(T) * n));
+
+        OCL_UNMAP_BUFFER(0);
+        OCL_UNMAP_BUFFER(1);
+        OCL_UNMAP_BUFFER(2);
+    }
+}
+
+
+#define ABS_TEST_DIFF_TYPE_2(TYPE, CLTYPE, UTYPE, KEEP_PROGRAM) \
+	static void compiler_abs_diff_##CLTYPE (void) \
+        { \
+           OCL_CALL (cl_kernel_init, "compiler_abs_diff.cl", "compiler_abs_diff_"#CLTYPE, SOURCE, NULL);  \
+           compiler_abs_diff_with_type<TYPE, UTYPE>(); \
+        } \
+	MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_abs_diff_##CLTYPE, KEEP_PROGRAM);
+
+#define ABS_TEST_DIFF_TYPE(TYPE, UTYPE) ABS_TEST_DIFF_TYPE_2(TYPE, TYPE, UTYPE, true)
+
+#define ABS_TEST_DIFF_TYPE_END(TYPE, UTYPE) ABS_TEST_DIFF_TYPE_2(TYPE, TYPE, UTYPE, false)
+
+
+typedef unsigned char uchar;
+typedef unsigned short ushort;
+typedef unsigned int uint;
+typedef uint64_t ulong64;
+ABS_TEST_DIFF_TYPE(int, uint)
+ABS_TEST_DIFF_TYPE_2(int64_t, long, ulong64, true)
+ABS_TEST_DIFF_TYPE(short, ushort)
+ABS_TEST_DIFF_TYPE(char, uchar)
+ABS_TEST_DIFF_TYPE(uint, uint)
+ABS_TEST_DIFF_TYPE_2(ulong64, ulong, ulong64, true)
+ABS_TEST_DIFF_TYPE(ushort, ushort)
+ABS_TEST_DIFF_TYPE(uchar, uchar)
+
+typedef cl_vec<int, 2> int2;
+typedef cl_vec<int, 3> int3;
+typedef cl_vec<int, 4> int4;
+typedef cl_vec<int, 8> int8;
+typedef cl_vec<int, 16> int16;
+typedef cl_vec<unsigned int, 2> uint2;
+typedef cl_vec<unsigned int, 3> uint3;
+typedef cl_vec<unsigned int, 4> uint4;
+typedef cl_vec<unsigned int, 8> uint8;
+typedef cl_vec<unsigned int, 16> uint16;
+ABS_TEST_DIFF_TYPE(int2, uint2)
+ABS_TEST_DIFF_TYPE(int3, uint3)
+ABS_TEST_DIFF_TYPE(int4, uint4)
+ABS_TEST_DIFF_TYPE(int8, uint8)
+ABS_TEST_DIFF_TYPE(int16, uint16)
+ABS_TEST_DIFF_TYPE(uint2, uint2)
+ABS_TEST_DIFF_TYPE(uint3, uint3)
+ABS_TEST_DIFF_TYPE(uint4, uint4)
+ABS_TEST_DIFF_TYPE(uint8, uint8)
+ABS_TEST_DIFF_TYPE(uint16, uint16)
+
+typedef cl_vec<int64_t, 2> long2;
+typedef cl_vec<int64_t, 3> long3;
+typedef cl_vec<int64_t, 4> long4;
+typedef cl_vec<int64_t, 8> long8;
+typedef cl_vec<int64_t, 16> long16;
+typedef cl_vec<uint64_t, 2> ulong2;
+typedef cl_vec<uint64_t, 3> ulong3;
+typedef cl_vec<uint64_t, 4> ulong4;
+typedef cl_vec<uint64_t, 8> ulong8;
+typedef cl_vec<uint64_t, 16> ulong16;
+ABS_TEST_DIFF_TYPE(long2, ulong2)
+ABS_TEST_DIFF_TYPE(long3, ulong3)
+ABS_TEST_DIFF_TYPE(long4, ulong4)
+ABS_TEST_DIFF_TYPE(long8, ulong8)
+ABS_TEST_DIFF_TYPE(long16, ulong16)
+ABS_TEST_DIFF_TYPE(ulong2, ulong2)
+ABS_TEST_DIFF_TYPE(ulong3, ulong3)
+ABS_TEST_DIFF_TYPE(ulong4, ulong4)
+ABS_TEST_DIFF_TYPE(ulong8, ulong8)
+ABS_TEST_DIFF_TYPE(ulong16, ulong16)
+
+typedef cl_vec<char, 2> char2;
+typedef cl_vec<char, 3> char3;
+typedef cl_vec<char, 4> char4;
+typedef cl_vec<char, 8> char8;
+typedef cl_vec<char, 16> char16;
+typedef cl_vec<unsigned char, 2> uchar2;
+typedef cl_vec<unsigned char, 3> uchar3;
+typedef cl_vec<unsigned char, 4> uchar4;
+typedef cl_vec<unsigned char, 8> uchar8;
+typedef cl_vec<unsigned char, 16> uchar16;
+ABS_TEST_DIFF_TYPE(char2, uchar2)
+ABS_TEST_DIFF_TYPE(char3, uchar3)
+ABS_TEST_DIFF_TYPE(char4, uchar4)
+ABS_TEST_DIFF_TYPE(char8, uchar8)
+ABS_TEST_DIFF_TYPE(char16, uchar16)
+ABS_TEST_DIFF_TYPE(uchar2, uchar2)
+ABS_TEST_DIFF_TYPE(uchar3, uchar3)
+ABS_TEST_DIFF_TYPE(uchar4, uchar4)
+ABS_TEST_DIFF_TYPE(uchar8, uchar8)
+ABS_TEST_DIFF_TYPE(uchar16, uchar16)
+
+
+typedef cl_vec<short, 2> short2;
+typedef cl_vec<short, 3> short3;
+typedef cl_vec<short, 4> short4;
+typedef cl_vec<short, 8> short8;
+typedef cl_vec<short, 16> short16;
+typedef cl_vec<unsigned short, 2> ushort2;
+typedef cl_vec<unsigned short, 3> ushort3;
+typedef cl_vec<unsigned short, 4> ushort4;
+typedef cl_vec<unsigned short, 8> ushort8;
+typedef cl_vec<unsigned short, 16> ushort16;
+ABS_TEST_DIFF_TYPE(short2, ushort2)
+ABS_TEST_DIFF_TYPE(short3, ushort3)
+ABS_TEST_DIFF_TYPE(short4, ushort4)
+ABS_TEST_DIFF_TYPE(short8, ushort8)
+ABS_TEST_DIFF_TYPE(short16, ushort16)
+ABS_TEST_DIFF_TYPE(ushort2, ushort2)
+ABS_TEST_DIFF_TYPE(ushort3, ushort3)
+ABS_TEST_DIFF_TYPE(ushort4, ushort4)
+ABS_TEST_DIFF_TYPE(ushort8, ushort8)
+ABS_TEST_DIFF_TYPE_END(ushort16, ushort16)
diff --git a/utests/utest/compiler_address_space.cpp b/utests/utest/compiler_address_space.cpp
new file mode 100644
index 0000000..89c7a38
--- /dev/null
+++ b/utests/utest/compiler_address_space.cpp
@@ -0,0 +1,10 @@
+#include "utest_helper.hpp"
+
+void compiler_address_space(void)
+{
+  OCL_CREATE_KERNEL("compiler_address_space");
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_address_space);
+
+
diff --git a/utests/utest/compiler_argument_structure.cpp b/utests/utest/compiler_argument_structure.cpp
new file mode 100644
index 0000000..22464a5
--- /dev/null
+++ b/utests/utest/compiler_argument_structure.cpp
@@ -0,0 +1,28 @@
+#include "utest_helper.hpp"
+
+struct hop { int x, y; };
+
+void compiler_argument_structure(void)
+{
+  const size_t n = 2048;
+  hop h = {3, 4};
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_argument_structure");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(hop), &h);
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+
+  // Check results
+  for (uint32_t i = 0; i < n; ++i)
+    OCL_ASSERT(((uint32_t*)buf_data[0])[i] == 7);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_argument_structure);
+
diff --git a/utests/utest/compiler_argument_structure_indirect.cpp b/utests/utest/compiler_argument_structure_indirect.cpp
new file mode 100644
index 0000000..a4584d5
--- /dev/null
+++ b/utests/utest/compiler_argument_structure_indirect.cpp
@@ -0,0 +1,29 @@
+#include "utest_helper.hpp"
+
+struct hop { int x[16]; };
+
+void compiler_argument_structure_indirect(void)
+{
+  const size_t n = 2048;
+  hop h;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_argument_structure_indirect");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  for (int i = 0; i < 16; ++i) h.x[i] = i;
+  OCL_SET_ARG(1, sizeof(hop), &h);
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+
+  // Check results
+  for (uint32_t i = 0; i < n; ++i)
+    OCL_ASSERT(((uint32_t*)buf_data[0])[i] == 7);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_argument_structure_indirect);
+
diff --git a/utests/utest/compiler_arith_shift_right.cpp b/utests/utest/compiler_arith_shift_right.cpp
new file mode 100644
index 0000000..6485571
--- /dev/null
+++ b/utests/utest/compiler_arith_shift_right.cpp
@@ -0,0 +1,43 @@
+#include "utest_helper.hpp"
+
+static void cpu(int global_id, int *src, int *dst) {
+  dst[global_id] = src[global_id] >> 24;
+}
+
+void compiler_arith_shift_right(void)
+{
+  const size_t n = 16;
+  int cpu_src[16];
+  int cpu_dst[16];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_arith_shift_right");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = 16;
+  locals[0] = 16;
+
+  // Run random tests
+  for (uint32_t pass = 0; pass < 8; ++pass) {
+    OCL_MAP_BUFFER(0);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      cpu_src[i] = ((int*)buf_data[0])[i] = 0x80000000 | rand();
+    OCL_UNMAP_BUFFER(0);
+
+    // Run the kernel on GPU
+    OCL_NDRANGE(1);
+
+    // Run on CPU
+    for (int32_t i = 0; i < (int32_t) n; ++i) cpu(i, cpu_src, cpu_dst);
+
+    // Compare
+    OCL_MAP_BUFFER(1);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      OCL_ASSERT(((int *)buf_data[1])[i] == cpu_dst[i]);
+    OCL_UNMAP_BUFFER(1);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_arith_shift_right);
diff --git a/utests/utest/compiler_array.cpp b/utests/utest/compiler_array.cpp
new file mode 100644
index 0000000..8806c99
--- /dev/null
+++ b/utests/utest/compiler_array.cpp
@@ -0,0 +1,28 @@
+#include "utest_helper.hpp"
+
+void compiler_array(void)
+{
+  const size_t n = 16;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_array");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+
+  // First control flow
+  OCL_MAP_BUFFER(0);
+  for (uint32_t i = 0; i < n; ++i) ((int32_t*)buf_data[0])[i] = -2;
+  OCL_UNMAP_BUFFER(0);
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < 16; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 3);
+  OCL_UNMAP_BUFFER(1);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_array);
+
diff --git a/utests/utest/compiler_array0.cpp b/utests/utest/compiler_array0.cpp
new file mode 100644
index 0000000..7cf2bbb
--- /dev/null
+++ b/utests/utest/compiler_array0.cpp
@@ -0,0 +1,54 @@
+#include "utest_helper.hpp"
+
+static void cpu(int global_id, int *src, int *dst) {
+  int i;
+  int final[16];
+  for (i = 0; i < 16; ++i) {
+    int array[16], j;
+    for (j = 0; j < 16; ++j)
+      array[j] = global_id;
+    for (j = 0; j < src[0]; ++j)
+      array[j] = 1+src[j];
+    final[i] = array[i];
+  }
+  dst[global_id] = final[global_id];
+}
+
+void compiler_array0(void)
+{
+  const size_t n = 16;
+  int cpu_dst[16], cpu_src[16];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_array0");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = 16;
+  locals[0] = 16;
+
+  // Run random tests
+  for (uint32_t pass = 0; pass < 8; ++pass) {
+    OCL_MAP_BUFFER(0);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      cpu_src[i] = ((int32_t*)buf_data[0])[i] = rand() % 16;
+    OCL_UNMAP_BUFFER(0);
+
+    // Run the kernel on GPU
+    OCL_NDRANGE(1);
+
+    // Run on CPU
+    for (int32_t i = 0; i <(int32_t) n; ++i) cpu(i, cpu_src, cpu_dst);
+
+    // Compare
+    OCL_MAP_BUFFER(1);
+    for (int32_t i = 0; i < 11; ++i)
+      OCL_ASSERT(((int32_t*)buf_data[1])[i] == cpu_dst[i]);
+    OCL_UNMAP_BUFFER(1);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_array0);
+
+
diff --git a/utests/utest/compiler_array1.cpp b/utests/utest/compiler_array1.cpp
new file mode 100644
index 0000000..fe1ecec
--- /dev/null
+++ b/utests/utest/compiler_array1.cpp
@@ -0,0 +1,52 @@
+#include "utest_helper.hpp"
+
+static void cpu(int global_id, int *src, int *dst) {
+  int final[16];
+  for (int i = 0; i < 16; ++i) {
+    int array[16];
+    for (int j = 0; j < src[0]; ++j)
+      array[j] = 1+src[0];
+    for (int j = src[0]; j < 16; ++j)
+      array[j] = global_id;
+    final[i] = array[i];
+  }
+  dst[global_id] = final[global_id];
+}
+
+void compiler_array1(void)
+{
+  const size_t n = 16;
+  int cpu_dst[16], cpu_src[16];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_array1");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = 16;
+  locals[0] = 16;
+
+  // Run random tests
+  for (uint32_t pass = 0; pass < 8; ++pass) {
+    OCL_MAP_BUFFER(0);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      cpu_src[i] = ((int32_t*)buf_data[0])[i] = rand() % 16;
+    OCL_UNMAP_BUFFER(0);
+
+    // Run the kernel on GPU
+    OCL_NDRANGE(1);
+
+    // Run on CPU
+    for (int32_t i = 0; i <(int32_t) n; ++i) cpu(i, cpu_src, cpu_dst);
+
+    // Compare
+    OCL_MAP_BUFFER(1);
+    for (int32_t i = 0; i < 11; ++i)
+      OCL_ASSERT(((int32_t*)buf_data[1])[i] == cpu_dst[i]);
+    OCL_UNMAP_BUFFER(1);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_array1);
+
diff --git a/utests/utest/compiler_array2.cpp b/utests/utest/compiler_array2.cpp
new file mode 100644
index 0000000..61ca9da
--- /dev/null
+++ b/utests/utest/compiler_array2.cpp
@@ -0,0 +1,50 @@
+#include "utest_helper.hpp"
+
+static void cpu(int global_id, int *src, int *dst) {
+  int final[16];
+  int array[16];
+  for (int j = 0; j < 16; ++j) array[j] = j;
+  for (int j = 0; j < 16; ++j) final[j] = j+1;
+  if (global_id == 15)
+    dst[global_id] = final[global_id];
+  else
+    dst[global_id] = array[15 - global_id];
+}
+
+void compiler_array2(void)
+{
+  const size_t n = 16;
+  int cpu_dst[16], cpu_src[16];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_array2");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = 16;
+  locals[0] = 16;
+
+  // Run random tests
+  for (uint32_t pass = 0; pass < 8; ++pass) {
+    OCL_MAP_BUFFER(0);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      cpu_src[i] = ((int32_t*)buf_data[0])[i] = rand() % 16;
+    OCL_UNMAP_BUFFER(0);
+
+    // Run the kernel on GPU
+    OCL_NDRANGE(1);
+
+    // Run on CPU
+    for (int32_t i = 0; i <(int32_t) n; ++i) cpu(i, cpu_src, cpu_dst);
+
+    // Compare
+    OCL_MAP_BUFFER(1);
+    for (int32_t i = 0; i < 11; ++i)
+      OCL_ASSERT(((int32_t*)buf_data[1])[i] == cpu_dst[i]);
+    OCL_UNMAP_BUFFER(1);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_array2);
+
diff --git a/utests/utest/compiler_array3.cpp b/utests/utest/compiler_array3.cpp
new file mode 100644
index 0000000..865b1e5
--- /dev/null
+++ b/utests/utest/compiler_array3.cpp
@@ -0,0 +1,51 @@
+#include "utest_helper.hpp"
+
+static void cpu(int global_id, int *src, int *dst) {
+  int tmp[32];
+  for (int i = 0; i < 16; ++i) {
+    for (int j = 0; j < 16; ++j)
+      tmp[j] = global_id;
+    for (int j = 0; j < src[0]; ++j)
+      tmp[j] = 1+src[j];
+    tmp[16+i] = tmp[i];
+  }
+  dst[global_id] = tmp[16+global_id];
+}
+
+void compiler_array3(void)
+{
+  const size_t n = 16;
+  int cpu_dst[16], cpu_src[16];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_array3");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = 16;
+  locals[0] = 16;
+
+  // Run random tests
+  for (uint32_t pass = 0; pass < 8; ++pass) {
+    OCL_MAP_BUFFER(0);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      cpu_src[i] = ((int32_t*)buf_data[0])[i] = rand() % 16;
+    OCL_UNMAP_BUFFER(0);
+
+    // Run the kernel on GPU
+    OCL_NDRANGE(1);
+
+    // Run on CPU
+    for (int32_t i = 0; i <(int32_t) n; ++i) cpu(i, cpu_src, cpu_dst);
+
+    // Compare
+    OCL_MAP_BUFFER(1);
+    for (int32_t i = 0; i < 11; ++i)
+      OCL_ASSERT(((int32_t*)buf_data[1])[i] == cpu_dst[i]);
+    OCL_UNMAP_BUFFER(1);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_array3);
+
diff --git a/utests/utest/compiler_async_copy.cpp b/utests/utest/compiler_async_copy.cpp
new file mode 100644
index 0000000..7951ff7
--- /dev/null
+++ b/utests/utest/compiler_async_copy.cpp
@@ -0,0 +1,55 @@
+#include "utest_helper.hpp"
+#include <stdint.h>
+
+typedef unsigned char uchar;
+typedef unsigned short ushort;
+
+#define DEF(TYPE, KER_TYPE, VEC_SIZE) \
+static void compiler_async_copy_##KER_TYPE##VEC_SIZE(void) \
+{ \
+  const size_t n = 1024; \
+  const size_t local_size = 32; \
+  const int copiesPerWorkItem = 5; \
+\
+  /* Setup kernel and buffers */\
+  OCL_CREATE_KERNEL_FROM_FILE("compiler_async_copy", "compiler_async_copy_" # KER_TYPE # VEC_SIZE); \
+  OCL_CREATE_BUFFER(buf[0], 0, n * copiesPerWorkItem * sizeof(TYPE) * VEC_SIZE, NULL); \
+  OCL_CREATE_BUFFER(buf[1], 0, n * copiesPerWorkItem * sizeof(TYPE) * VEC_SIZE, NULL); \
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]); \
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]); \
+  OCL_SET_ARG(2, local_size*copiesPerWorkItem*sizeof(TYPE)*VEC_SIZE, NULL); \
+  OCL_SET_ARG(3, sizeof(int), &copiesPerWorkItem); \
+\
+  OCL_MAP_BUFFER(1); \
+  for (uint32_t i = 0; i < n * copiesPerWorkItem * VEC_SIZE; ++i) \
+      ((TYPE*)buf_data[1])[i] = rand(); \
+  OCL_UNMAP_BUFFER(1); \
+\
+  /* Run the kernel */\
+  globals[0] = n; \
+  locals[0] = local_size; \
+  OCL_NDRANGE(1); \
+  OCL_MAP_BUFFER(0); \
+  OCL_MAP_BUFFER(1); \
+\
+  /* Check results */\
+  TYPE *dst = (TYPE*)buf_data[0]; \
+  TYPE *src = (TYPE*)buf_data[1]; \
+  for (uint32_t i = 0; i < n * copiesPerWorkItem * VEC_SIZE; i++) \
+    OCL_ASSERT(dst[i] == src[i]); \
+  OCL_UNMAP_BUFFER(0); \
+  OCL_UNMAP_BUFFER(1); \
+} \
+\
+MAKE_UTEST_FROM_FUNCTION(compiler_async_copy_##KER_TYPE##VEC_SIZE);
+
+DEF(char, char, 2);
+DEF(uchar, uchar, 2);
+DEF(short, short, 2);
+DEF(ushort, ushort, 2);
+DEF(int, int, 2);
+DEF(uint, uint, 2);
+DEF(int64_t, long, 2);
+DEF(uint64_t, ulong, 2);
+DEF(float, float, 2);
+DEF(double, double, 2);
diff --git a/utests/utest/compiler_async_copy_and_prefetch.cpp b/utests/utest/compiler_async_copy_and_prefetch.cpp
new file mode 100644
index 0000000..323faf9
--- /dev/null
+++ b/utests/utest/compiler_async_copy_and_prefetch.cpp
@@ -0,0 +1,10 @@
+#include "utest_helper.hpp"
+
+void compiler_async_copy_and_prefetch(void)
+{
+  OCL_CREATE_KERNEL("compiler_async_copy_and_prefetch");
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_async_copy_and_prefetch);
+
+
diff --git a/utests/utest/compiler_async_stride_copy.cpp b/utests/utest/compiler_async_stride_copy.cpp
new file mode 100644
index 0000000..132f917
--- /dev/null
+++ b/utests/utest/compiler_async_stride_copy.cpp
@@ -0,0 +1,45 @@
+#include "utest_helper.hpp"
+
+static void compiler_async_stride_copy(void)
+{
+  const size_t n = 1024;
+  const size_t local_size = 128;
+  const int copiesPerWorkItem = 5;
+  const int stride =3;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_async_stride_copy");
+  OCL_CREATE_BUFFER(buf[0], 0, n * copiesPerWorkItem * sizeof(char) * 4 * stride, NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * copiesPerWorkItem * sizeof(char) * 4 * stride, NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, local_size*copiesPerWorkItem*sizeof(char)*4, NULL);
+  OCL_SET_ARG(3, sizeof(int), &copiesPerWorkItem);
+  OCL_SET_ARG(4, sizeof(int), &stride);
+
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < n * copiesPerWorkItem * 4 * stride; ++i)
+      ((char*)buf_data[1])[i] = rand() && 0xff;
+  OCL_UNMAP_BUFFER(1);
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = local_size;
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+
+  // Check results
+  char *dst = (char*)buf_data[0];
+  char *src = (char*)buf_data[1];
+  for (uint32_t i = 0; i < n * copiesPerWorkItem; i += stride * 4) {
+    OCL_ASSERT(dst[i + 0] == src[i + 0] + 3);
+    OCL_ASSERT(dst[i + 1] == src[i + 1] + 3);
+    OCL_ASSERT(dst[i + 2] == src[i + 2] + 3);
+    OCL_ASSERT(dst[i + 3] == src[i + 3] + 3);
+  }
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_async_stride_copy);
diff --git a/utests/utest/compiler_atomic_functions.cpp b/utests/utest/compiler_atomic_functions.cpp
new file mode 100644
index 0000000..65f1c5a
--- /dev/null
+++ b/utests/utest/compiler_atomic_functions.cpp
@@ -0,0 +1,97 @@
+#include "utest_helper.hpp"
+#include <cmath>
+#include <algorithm>
+#include <string.h>
+
+#define GROUP_NUM 16
+#define LOCAL_SIZE 256
+static void cpu_compiler_atomic(int *dst, int *src)
+{
+  dst[4] = 0xffffffff;
+  int tmp[16] = { 0 };
+  tmp[4] = -1;
+  for(int j=0; j<LOCAL_SIZE; j++) {
+    int i = j % 12;
+
+    switch(i) {
+      case 0: tmp[i] += 1; break;
+      case 1: tmp[i] -= 1; break;
+      case 2: tmp[i] += src[j]; break;
+      case 3: tmp[i] -= src[j]; break;
+      case 4: tmp[i] &= ~(src[j]<<(j>>4)); break;
+      case 5: tmp[i] |= src[j]<<(j>>4); break;
+      case 6: tmp[i] ^= src[j]; break;
+      case 7: tmp[i] = tmp[i] < -src[j] ? tmp[i] : -src[j]; break;
+      case 8: tmp[i] = tmp[i] > src[j] ? tmp[i] : src[j]; break;
+      case 9: tmp[i] = (unsigned int)tmp[i] < (unsigned int)(-src[j]) ? tmp[i] : -src[j]; break;
+      case 10: tmp[i] = (unsigned int)tmp[i] > (unsigned int)(src[j]) ? tmp[i] : src[j]; break;
+      case 11:  tmp[i] = src[10]; break;
+      default:  break;
+    }
+  }
+
+  for(int k=0; k<GROUP_NUM; k++) {
+    for(int j=0; j<LOCAL_SIZE; j++) {
+      int i = j % 12;
+
+      switch(i) {
+        case 0: dst[i] += 1; break;
+        case 1: dst[i] -= 1; break;
+        case 2: dst[i] += src[j]; break;
+        case 3: dst[i] -= src[j]; break;
+        case 4: dst[i] &= ~(src[j]<<(j>>4)); break;
+        case 5: dst[i] |= src[j]<<(j>>4); break;
+        case 6: dst[i] ^= src[j]; break;
+        case 7: dst[i] = dst[i] < -src[j] ? dst[i] : -src[j]; break;
+        case 8: dst[i] = dst[i] > src[j] ? dst[i] : src[j]; break;
+        case 9: dst[i] = (unsigned int)dst[i] < (unsigned int)(-src[j]) ? dst[i] : -src[j]; break;
+        case 10: dst[i] = (unsigned int)dst[i] > (unsigned int)(src[j]) ? dst[i] : src[j]; break;
+        case 11:  dst[i] = src[10]; break;
+        default:  break;
+      }
+    }
+  }
+
+  for(int i=0; i<12; i++)
+    dst[i+12] = tmp[i];
+}
+
+static void compiler_atomic_functions(void)
+{
+  const size_t n = GROUP_NUM * LOCAL_SIZE;
+  int cpu_dst[24] = {0}, cpu_src[256];
+
+  globals[0] = n;
+  locals[0] = LOCAL_SIZE;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_atomic_functions");
+  OCL_CREATE_BUFFER(buf[0], 0, 24 * sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, locals[0] * sizeof(int), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, 16 * sizeof(int), NULL);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[1]);
+
+  OCL_MAP_BUFFER(0);
+  memset(buf_data[0], 0, 24 * sizeof(int));
+  ((int *)buf_data[0])[4] = -1;
+  OCL_UNMAP_BUFFER(0);
+
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < locals[0]; ++i)
+      cpu_src[i] = ((int*)buf_data[1])[i] = rand() & 0xff;
+  cpu_compiler_atomic(cpu_dst, cpu_src);
+  OCL_UNMAP_BUFFER(1);
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(0);
+
+  // Check results
+  for(int i=0; i<24; i++) {
+    //printf("The dst(%d) gpu(0x%x) cpu(0x%x)\n", i, ((uint32_t *)buf_data[0])[i], cpu_dst[i]);
+    OCL_ASSERT(((int *)buf_data[0])[i] == cpu_dst[i]);
+  }
+  OCL_UNMAP_BUFFER(0);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_atomic_functions)
diff --git a/utests/utest/compiler_basic_arithmetic.cpp b/utests/utest/compiler_basic_arithmetic.cpp
new file mode 100644
index 0000000..0e5ec41
--- /dev/null
+++ b/utests/utest/compiler_basic_arithmetic.cpp
@@ -0,0 +1,116 @@
+#include "utest_helper.hpp"
+
+enum eTestOP {
+  TEST_OP_ADD =0,
+  TEST_OP_SUB,
+  TEST_OP_MUL,
+  TEST_OP_DIV,
+  TEST_OP_REM
+};
+
+template <typename T, eTestOP op>
+static void test_exec(const char* kernel_name)
+{
+  const size_t n = 160;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL_FROM_FILE("compiler_basic_arithmetic", kernel_name);
+std::cout <<"kernel name: " << kernel_name << std::endl;
+  buf_data[0] = (T*) malloc(sizeof(T) * n);
+  buf_data[1] = (T*) malloc(sizeof(T) * n);
+  for (uint32_t i = 0; i < n; ++i) ((T*)buf_data[0])[i] = (T) rand();
+  for (uint32_t i = 0; i < n; ++i) ((T*)buf_data[1])[i] = (T) rand();
+  if(op == TEST_OP_DIV || op == TEST_OP_REM) {
+    for (uint32_t i = 0; i < n; ++i) {
+      if(((T*)buf_data[1])[i] == 0)
+       ((T*)buf_data[1])[i] = (T) 1;
+    }
+  }
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(T), buf_data[0]);
+  OCL_CREATE_BUFFER(buf[1], CL_MEM_COPY_HOST_PTR, n * sizeof(T), buf_data[1]);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(T), NULL);
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  // Check result
+  OCL_MAP_BUFFER(2);
+  if(op == TEST_OP_SUB) {
+    for (uint32_t i = 0; i < n; ++i)
+      OCL_ASSERT(((T*)buf_data[2])[i] == (T)(((T*)buf_data[0])[i] - ((T*)buf_data[1])[i]));
+  } else if(op == TEST_OP_ADD) {
+    for (uint32_t i = 0; i < n; ++i)
+      OCL_ASSERT(((T*)buf_data[2])[i] == (T)(((T*)buf_data[0])[i] + ((T*)buf_data[1])[i]));
+  } else if(op == TEST_OP_MUL) {
+    for (uint32_t i = 0; i < n; ++i)
+      OCL_ASSERT(((T*)buf_data[2])[i] == (T)(((T*)buf_data[0])[i] * ((T*)buf_data[1])[i]));
+  } else if(op == TEST_OP_DIV) {
+    for (uint32_t i = 0; i < n; ++i)
+      OCL_ASSERT(((T*)buf_data[2])[i] == (T)(((T*)buf_data[0])[i] / ((T*)buf_data[1])[i]));
+  } else {
+    for (uint32_t i = 0; i < n; ++i)
+      OCL_ASSERT(((T*)buf_data[2])[i] == (T)(((T*)buf_data[0])[i] % ((T*)buf_data[1])[i]));
+  }
+  free(buf_data[0]);
+  free(buf_data[1]);
+  buf_data[0] = buf_data[1] = NULL;
+}
+
+#define DECL_TEST_SUB(type, alias, keep_program) \
+static void compiler_sub_ ##alias(void)\
+{\
+  test_exec<type, TEST_OP_SUB>("compiler_sub_" # alias);\
+}\
+MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_sub_ ## alias, keep_program)
+
+#define DECL_TEST_ADD(type, alias, keep_program) \
+static void compiler_add_ ##alias(void)\
+{\
+  test_exec<type, TEST_OP_ADD>("compiler_add_" # alias);\
+}\
+MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_add_ ## alias, keep_program)
+
+#define DECL_TEST_MUL(type, alias, keep_program) \
+static void compiler_mul_ ##alias(void)\
+{\
+  test_exec<type, TEST_OP_MUL>("compiler_mul_" # alias);\
+}\
+MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_mul_ ## alias, keep_program)
+
+#define DECL_TEST_DIV(type, alias, keep_program) \
+static void compiler_div_ ##alias(void)\
+{\
+  test_exec<type, TEST_OP_DIV>("compiler_div_" # alias);\
+}\
+MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_div_ ## alias, keep_program)
+
+#define DECL_TEST_REM(type, alias, keep_program) \
+static void compiler_rem_ ##alias(void)\
+{\
+  test_exec<type, TEST_OP_REM>("compiler_rem_" # alias);\
+}\
+MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_rem_ ## alias, keep_program)
+
+#define _DECL_TEST_FOR_ALL_TYPE(op, keep_program) \
+DECL_TEST_##op(int8_t, char, true) \
+DECL_TEST_##op(uint8_t, uchar, true) \
+DECL_TEST_##op(int16_t, short, true) \
+DECL_TEST_##op(uint16_t, ushort, true) \
+DECL_TEST_##op(int32_t, int, true) \
+DECL_TEST_##op(uint32_t, uint, keep_program)
+
+#define DECL_TEST_FOR_ALL_TYPE(op) _DECL_TEST_FOR_ALL_TYPE(op, true)
+
+#define DECL_TEST_FOR_ALL_TYPE_END(op) _DECL_TEST_FOR_ALL_TYPE(op, false)
+
+DECL_TEST_FOR_ALL_TYPE(SUB)
+DECL_TEST_FOR_ALL_TYPE(ADD)
+DECL_TEST_FOR_ALL_TYPE(MUL)
+DECL_TEST_FOR_ALL_TYPE(DIV)
+DECL_TEST_FOR_ALL_TYPE_END(REM)
+#undef DECL_TEST_FOR_ALL_TYPE
diff --git a/utests/utest/compiler_bool_cross_basic_block.cpp b/utests/utest/compiler_bool_cross_basic_block.cpp
new file mode 100644
index 0000000..908edc0
--- /dev/null
+++ b/utests/utest/compiler_bool_cross_basic_block.cpp
@@ -0,0 +1,55 @@
+#include "utest_helper.hpp"
+
+static void cpu(int global_id, int *src, int *dst, int scale) {
+  bool isRedRow = false;
+  bool isRed;
+  int val = src[global_id];
+  for (int i=0; i<scale; i++, isRedRow = !isRedRow) {
+    if (isRedRow) {
+      isRed= false;
+      for (int j=0; j < scale; j++, isRed=!isRed) {
+        if (isRed) {
+	  val++;
+        }
+      }
+    }
+  }
+  dst[global_id] = val;
+}
+
+void compiler_bool_cross_basic_block(void){
+  const size_t n = 16;
+  int cpu_dst[16], cpu_src[16];
+  int scale = 4;
+	
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_bool_cross_basic_block");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(int), &scale);
+  globals[0] = 16;
+  locals[0] = 16;
+
+  OCL_MAP_BUFFER(0);
+  for (int32_t i = 0; i < (int32_t) n; ++i)
+    cpu_src[i] = ((int*)buf_data[0])[i] = i;
+  OCL_UNMAP_BUFFER(0);
+
+  // Run the kernel on GPU
+  OCL_NDRANGE(1);
+
+  // Run on CPU
+  for (int32_t i = 0; i < (int32_t) n; ++i)
+    cpu(i, cpu_src, cpu_dst, scale);
+
+  // Compare
+  OCL_MAP_BUFFER(1);
+  for (int32_t i = 0; i < (int32_t) n; ++i)
+    OCL_ASSERT(((int *)buf_data[1])[i] == cpu_dst[i]);
+  OCL_UNMAP_BUFFER(1);
+
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_bool_cross_basic_block)
diff --git a/utests/utest/compiler_box_blur.cpp b/utests/utest/compiler_box_blur.cpp
new file mode 100644
index 0000000..e4e053e
--- /dev/null
+++ b/utests/utest/compiler_box_blur.cpp
@@ -0,0 +1,43 @@
+#include "utest_helper.hpp"
+#include <cmath>
+
+static int w = 0;
+static int h = 0;
+static int sz = 0;
+static const size_t chunk = 64;
+static int *src = NULL, *dst = NULL;
+
+static void compiler_box_blur()
+{
+  OCL_CREATE_KERNEL("compiler_box_blur");
+
+  /* Load the picture */
+  src = cl_read_bmp("lenna128x128.bmp", &w, &h);
+  sz = w * h * sizeof(int);
+
+  /* Run the kernel */
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, sz, src);
+  OCL_CREATE_BUFFER(buf[1], 0, sz, NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(int), &w);
+  OCL_SET_ARG(3, sizeof(int), &h);
+  OCL_SET_ARG(4, sizeof(int), &chunk);
+  globals[0] = size_t(w/4);
+  globals[1] = h/chunk + ((h%chunk)?1:0);
+  locals[0] = 16;
+  locals[1] = 1;
+  free(src);
+  OCL_NDRANGE(2);
+  OCL_MAP_BUFFER(1);
+  dst = (int*) buf_data[1];
+
+  /* Save the image (for debug purpose) */
+  cl_write_bmp(dst, w, h, "compiler_box_blur.bmp");
+
+  /* Compare with the golden image */
+  OCL_CHECK_IMAGE(dst, w, h, "compiler_box_blur_ref.bmp");
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_box_blur);
+
diff --git a/utests/utest/compiler_box_blur_float.cpp b/utests/utest/compiler_box_blur_float.cpp
new file mode 100644
index 0000000..a3c97bc
--- /dev/null
+++ b/utests/utest/compiler_box_blur_float.cpp
@@ -0,0 +1,65 @@
+#include "utest_helper.hpp"
+#include <cmath>
+
+static int *tmp = NULL;
+static struct float4 {float x,y,z,w;} *src = NULL, *dst = NULL;
+static int w = 0;
+static int h = 0;
+static int sz = 0;
+static const size_t chunk = 64;
+
+static void compiler_box_blur_float()
+{
+  OCL_CREATE_KERNEL("compiler_box_blur_float");
+
+  /* Load the picture */
+  tmp = cl_read_bmp("lenna128x128.bmp", &w, &h);
+  sz = w * h * sizeof(float[4]);
+  src = (float4*)malloc(sz);
+
+  /* RGBA -> float4 conversion */
+  const int n = w*h;
+  for (int i = 0; i < n; ++i) {
+    src[i].x = (float) (tmp[i] & 0xff);
+    src[i].y = (float) ((tmp[i] >> 8) & 0xff);
+    src[i].z = (float) ((tmp[i] >> 16) & 0xff);
+    src[i].w = 0.f;
+  }
+  free(tmp);
+
+  /* Run the kernel */
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, sz, src);
+  OCL_CREATE_BUFFER(buf[1], 0, sz, NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(int), &w);
+  OCL_SET_ARG(3, sizeof(int), &h);
+  OCL_SET_ARG(4, sizeof(int), &chunk);
+  globals[0] = size_t(w);
+  globals[1] = h/chunk + ((h%chunk)?1:0);
+  locals[0] = 16;
+  locals[1] = 1;
+  free(src);
+  OCL_NDRANGE(2);
+  OCL_MAP_BUFFER(1);
+  dst = (float4*) buf_data[1];
+
+  /* Convert back to RGBA and save */
+  int *tmp = (int*) malloc(n*sizeof(int));
+  for (int i = 0; i < n; ++i) {
+    int to = int(std::min(dst[i].x, 255.f));
+    to |= int(std::min(dst[i].y, 255.f)) << 8;
+    to |= int(std::min(dst[i].z, 255.f)) << 16;
+    tmp[i] = to;
+  }
+
+  /* Save the image (for debug purpose) */
+  cl_write_bmp(tmp, w, h, "compiler_box_blur_float.bmp");
+
+  /* Compare with the golden image */
+  OCL_CHECK_IMAGE(tmp, w, h, "compiler_box_blur_float_ref.bmp");
+  free(tmp);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_box_blur_float);
+
diff --git a/utests/utest/compiler_box_blur_image.cpp b/utests/utest/compiler_box_blur_image.cpp
new file mode 100644
index 0000000..351f08e
--- /dev/null
+++ b/utests/utest/compiler_box_blur_image.cpp
@@ -0,0 +1,45 @@
+#include "utest_helper.hpp"
+
+static void compiler_box_blur_image()
+{
+  int w, h;
+  cl_image_format format = { };
+  size_t origin[3] = { };
+  size_t region[3];
+  int *src, *dst;
+
+  OCL_CREATE_KERNEL("compiler_box_blur_image");
+
+  /* Load the picture */
+  src = cl_read_bmp("lenna128x128.bmp", &w, &h);
+
+  format.image_channel_order = CL_RGBA;
+  format.image_channel_data_type = CL_UNORM_INT8;
+
+  /* Run the kernel */
+  OCL_CREATE_IMAGE2D(buf[0], CL_MEM_COPY_HOST_PTR, &format, w, h, w*sizeof(uint32_t), src);
+  free(src);
+  OCL_CREATE_IMAGE2D(buf[1], 0, &format, w, h, 0, NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = w;
+  globals[1] = h;
+  locals[0] = 16;
+  locals[1] = 16;
+  OCL_NDRANGE(2);
+  dst = (int*)malloc(w*h*sizeof(uint32_t));
+  region[0] = w;
+  region[1] = h;
+  region[2] = 1;
+  OCL_READ_IMAGE(buf[1], origin, region, dst);
+
+  /* Save the image (for debug purpose) */
+  cl_write_bmp(dst, w, h, "compiler_box_blur_image.bmp");
+
+  /* Compare with the golden image */
+  OCL_CHECK_IMAGE(dst, w, h, "compiler_box_blur_ref.bmp");
+
+  free(dst);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_box_blur_image);
diff --git a/utests/utest/compiler_byte_scatter.cpp b/utests/utest/compiler_byte_scatter.cpp
new file mode 100644
index 0000000..11300da
--- /dev/null
+++ b/utests/utest/compiler_byte_scatter.cpp
@@ -0,0 +1,24 @@
+#include "utest_helper.hpp"
+
+static void compiler_byte_scatter(void)
+{
+  const size_t n = 128;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_byte_scatter");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int8_t), NULL);
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  // Check result
+  OCL_MAP_BUFFER(0);
+  for (int32_t i = 0; i < (int32_t) n; ++i)
+    OCL_ASSERT(((int8_t*)buf_data[0])[i] == (int8_t) i);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_byte_scatter);
+
diff --git a/utests/utest/compiler_ceil.cpp b/utests/utest/compiler_ceil.cpp
new file mode 100644
index 0000000..29c7551
--- /dev/null
+++ b/utests/utest/compiler_ceil.cpp
@@ -0,0 +1,43 @@
+#include <cmath>
+#include "utest_helper.hpp"
+
+static void cpu(int global_id, float *src, float *dst) {
+  dst[global_id] = ceilf(src[global_id]);
+}
+
+void compiler_ceil(void)
+{
+  const size_t n = 16;
+  float cpu_dst[16], cpu_src[16];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_ceil");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = 16;
+  locals[0] = 16;
+
+  // Run random tests
+  for (uint32_t pass = 0; pass < 8; ++pass) {
+    OCL_MAP_BUFFER(0);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      cpu_src[i] = ((float*)buf_data[0])[i] = .1f * (rand() & 15) - .75f;
+    OCL_UNMAP_BUFFER(0);
+
+    // Run the kernel on GPU
+    OCL_NDRANGE(1);
+
+    // Run on CPU
+    for (int32_t i = 0; i < (int32_t) n; ++i) cpu(i, cpu_src, cpu_dst);
+
+    // Compare
+    OCL_MAP_BUFFER(1);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      OCL_ASSERT(((float *)buf_data[1])[i] == cpu_dst[i]);
+    OCL_UNMAP_BUFFER(1);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_ceil);
diff --git a/utests/utest/compiler_cl_finish.cpp b/utests/utest/compiler_cl_finish.cpp
new file mode 100644
index 0000000..7c7dee3
--- /dev/null
+++ b/utests/utest/compiler_cl_finish.cpp
@@ -0,0 +1,50 @@
+#include "utest_helper.hpp"
+#include <sys/time.h>
+
+#define T_GET(t)        gettimeofday(&t, NULL);
+#define T_LAPSE(t1, t2) \
+  ((t2.tv_sec+t2.tv_usec*0.000001) - (t1.tv_sec+t1.tv_usec*0.000001))
+
+static void compiler_cl_finish(void)
+{
+  const size_t n = 16*1024*1024;
+  struct timeval t1, t2;
+  float t_fin, t_map_w_fin,t_map_wo_fin;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("test_cl_finish");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
+
+  // Run the kernel
+  locals[0]  = 64;
+  globals[0] = 32 * locals[0];
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(int), &n);
+  OCL_SET_ARG(3, sizeof(int), &globals[0]);
+
+  // 1st time map after clFinish
+  OCL_NDRANGE(1);
+  T_GET(t1);
+  OCL_FINISH();
+  T_GET(t2);
+  t_fin = T_LAPSE(t1, t2);
+
+  T_GET(t1);
+  OCL_MAP_BUFFER(0);
+  T_GET(t2);
+  t_map_w_fin = T_LAPSE(t1, t2);
+
+  // 2nd time map without clFinish
+  OCL_NDRANGE(1);
+  T_GET(t1);
+  OCL_MAP_BUFFER(0);
+  T_GET(t2);
+  t_map_wo_fin = T_LAPSE(t1, t2);
+
+  OCL_ASSERT(t_fin > t_map_w_fin && t_map_wo_fin > t_map_w_fin);
+  OCL_UNMAP_BUFFER(0);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_cl_finish);
diff --git a/utests/utest/compiler_clz_int.cpp b/utests/utest/compiler_clz_int.cpp
new file mode 100644
index 0000000..c12cfc6
--- /dev/null
+++ b/utests/utest/compiler_clz_int.cpp
@@ -0,0 +1,31 @@
+#include "utest_helper.hpp"
+
+void compiler_clz_int(void)
+{
+  const int n = 32;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_clz_int");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  OCL_MAP_BUFFER(0);
+  ((int*)buf_data[0])[0] = 0;
+  for (int32_t i = 1; i < (int32_t) n; ++i)
+    ((int*)buf_data[0])[i] = 0xffffffffu >> i;
+  OCL_UNMAP_BUFFER(0);
+
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(1);
+  OCL_ASSERT(((int*)buf_data[1])[0] == 32);
+  for (int i = 1; i < n; ++i)
+    OCL_ASSERT(((int*)buf_data[1])[i] == i);
+  OCL_UNMAP_BUFFER(1);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_clz_int);
diff --git a/utests/utest/compiler_clz_short.cpp b/utests/utest/compiler_clz_short.cpp
new file mode 100644
index 0000000..eb3a370
--- /dev/null
+++ b/utests/utest/compiler_clz_short.cpp
@@ -0,0 +1,31 @@
+#include "utest_helper.hpp"
+
+void compiler_clz_short(void)
+{
+  const size_t n = 16;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_clz_short");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(short), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(short), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  OCL_MAP_BUFFER(0);
+  ((short*)buf_data[0])[0] = 0;
+  for (int32_t i = 1; i < (int32_t) n; ++i)
+    ((short*)buf_data[0])[i] = 0xffffu >> i;
+  OCL_UNMAP_BUFFER(0);
+
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(1);
+  OCL_ASSERT(((short*)buf_data[1])[0] == 16);
+  for (unsigned i = 1; i < (unsigned) n; ++i)
+    OCL_ASSERT(((short*)buf_data[1])[i] == (short)i);
+  OCL_UNMAP_BUFFER(1);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_clz_short);
diff --git a/utests/utest/compiler_convert_uchar_sat.cpp b/utests/utest/compiler_convert_uchar_sat.cpp
new file mode 100644
index 0000000..da00041
--- /dev/null
+++ b/utests/utest/compiler_convert_uchar_sat.cpp
@@ -0,0 +1,44 @@
+#include "utest_helper.hpp"
+
+static void cpu(int global_id, float *src, int *dst) {
+  float f = src[global_id];
+  dst[global_id] = f > 255 ? 255 : f < 0 ? 0 : f;
+}
+
+void compiler_convert_uchar_sat(void)
+{
+  const size_t n = 16;
+  float cpu_src[16];
+  int cpu_dst[16];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_convert_uchar_sat");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = 16;
+  locals[0] = 16;
+
+  // Run random tests
+  for (uint32_t pass = 0; pass < 8; ++pass) {
+    OCL_MAP_BUFFER(0);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      cpu_src[i] = ((float*)buf_data[0])[i] = (rand() & 1023) / 2;
+    OCL_UNMAP_BUFFER(0);
+
+    // Run the kernel on GPU
+    OCL_NDRANGE(1);
+
+    // Run on CPU
+    for (int32_t i = 0; i < (int32_t) n; ++i) cpu(i, cpu_src, cpu_dst);
+
+    // Compare
+    OCL_MAP_BUFFER(1);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      OCL_ASSERT(((int *)buf_data[1])[i] == cpu_dst[i]);
+    OCL_UNMAP_BUFFER(1);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_convert_uchar_sat);
diff --git a/utests/utest/compiler_copy_buffer.cpp b/utests/utest/compiler_copy_buffer.cpp
new file mode 100644
index 0000000..8066efe
--- /dev/null
+++ b/utests/utest/compiler_copy_buffer.cpp
@@ -0,0 +1,32 @@
+#include "utest_helper.hpp"
+
+static void compiler_copy_buffer(void)
+{
+  const size_t n = 8192 * 4;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("test_copy_buffer");
+  //OCL_CREATE_KERNEL("compiler_array");
+  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * n);
+  for (uint32_t i = 0; i < n; ++i) ((uint32_t*)buf_data[0])[i] = i;
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t), buf_data[0]);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  free(buf_data[0]);
+  buf_data[0] = NULL;
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  // Check result
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < n; ++i)
+    OCL_ASSERT(((uint32_t*)buf_data[0])[i] == ((uint32_t*)buf_data[1])[i]);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_copy_buffer);
+
diff --git a/utests/utest/compiler_copy_buffer_row.cpp b/utests/utest/compiler_copy_buffer_row.cpp
new file mode 100644
index 0000000..12c0592
--- /dev/null
+++ b/utests/utest/compiler_copy_buffer_row.cpp
@@ -0,0 +1,40 @@
+#include "utest_helper.hpp"
+
+static void compiler_copy_buffer_row(void)
+{
+  uint32_t *src_buffer = NULL;
+  int *data_buffer = NULL;
+  const int row = 8192;
+  const int row_n = 2;
+  const int n =  row * row_n;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("test_copy_buffer_row");
+  src_buffer = (uint32_t *) malloc(sizeof(uint32_t) * n);
+  for (int32_t i = 0; i < n; ++i) src_buffer[i] = i;
+  data_buffer = (int *) malloc(sizeof(int) * 2);
+  data_buffer[0] = row;
+  data_buffer[1] = n;
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t), src_buffer);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  OCL_CREATE_BUFFER(buf[2], CL_MEM_COPY_HOST_PTR, 2 * sizeof(uint32_t), data_buffer);
+  free(src_buffer);
+  free(data_buffer);
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  // Check results
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (int32_t i = 0; i < n; ++i)
+    OCL_ASSERT(((uint32_t*)buf_data[0])[i] == ((uint32_t*)buf_data[1])[i]);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_copy_buffer_row);
+
diff --git a/utests/utest/compiler_copy_image.cpp b/utests/utest/compiler_copy_image.cpp
new file mode 100644
index 0000000..58827f2
--- /dev/null
+++ b/utests/utest/compiler_copy_image.cpp
@@ -0,0 +1,46 @@
+#include "utest_helper.hpp"
+
+static void compiler_copy_image(void)
+{
+  const size_t w = 512;
+  const size_t h = 512;
+  cl_image_format format;
+  cl_sampler sampler;
+
+  // Setup kernel and images
+  OCL_CREATE_KERNEL("test_copy_image");
+  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * w * h);
+  for (uint32_t j = 0; j < h; ++j)
+    for (uint32_t i = 0; i < w; i++)
+      ((uint32_t*)buf_data[0])[j * w + i] = j * w + i;
+
+  format.image_channel_order = CL_RGBA;
+  format.image_channel_data_type = CL_UNSIGNED_INT8;
+  OCL_CREATE_IMAGE2D(buf[0], CL_MEM_COPY_HOST_PTR, &format, w, h, w * sizeof(uint32_t), buf_data[0]);
+
+  OCL_CREATE_IMAGE2D(buf[1], 0, &format, w, h, 0, NULL);
+  OCL_CREATE_SAMPLER(sampler, CL_ADDRESS_REPEAT, CL_FILTER_NEAREST);
+  free(buf_data[0]);
+  buf_data[0] = NULL;
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(sampler), &sampler);
+  globals[0] = w;
+  globals[1] = h;
+  locals[0] = 16;
+  locals[1] = 16;
+  OCL_NDRANGE(2);
+
+  // Check result
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t j = 0; j < h; ++j)
+    for (uint32_t i = 0; i < w; i++)
+      OCL_ASSERT(((uint32_t*)buf_data[0])[j * w + i] == ((uint32_t*)buf_data[1])[j * w + i]);
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_copy_image);
diff --git a/utests/utest/compiler_copy_image1.cpp b/utests/utest/compiler_copy_image1.cpp
new file mode 100644
index 0000000..d469fbd
--- /dev/null
+++ b/utests/utest/compiler_copy_image1.cpp
@@ -0,0 +1,71 @@
+#include "utest_helper.hpp"
+
+static void compiler_copy_image1(void)
+{
+  const size_t w = 512;
+  const size_t h = 512;
+  cl_image_format format;
+  cl_sampler sampler;
+
+  // Setup kernel and images
+  OCL_CREATE_KERNEL("test_copy_image1");
+  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * w * h);
+  for (uint32_t j = 0; j < h; ++j)
+    for (uint32_t i = 0; i < w; i++)
+      ((uint32_t*)buf_data[0])[j * w + i] = j * w + i;
+
+  format.image_channel_order = CL_RGBA;
+  format.image_channel_data_type = CL_UNSIGNED_INT8;
+  OCL_CREATE_IMAGE2D(buf[0], CL_MEM_COPY_HOST_PTR, &format, w, h, w * sizeof(uint32_t), buf_data[0]);
+  OCL_CREATE_SAMPLER(sampler, CL_ADDRESS_REPEAT, CL_FILTER_NEAREST);
+
+  OCL_CREATE_IMAGE2D(buf[1], 0, &format, w, h, 0, NULL);
+  OCL_CREATE_IMAGE2D(buf[2], 0, &format, w, h, 0, NULL);
+  OCL_CREATE_IMAGE2D(buf[3], 0, &format, w, h, 0, NULL);
+  OCL_CREATE_IMAGE2D(buf[4], 0, &format, w, h, 0, NULL);
+  OCL_CREATE_IMAGE2D(buf[5], 0, &format, w, h, 0, NULL);
+  free(buf_data[0]);
+  buf_data[0] = NULL;
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(sampler), &sampler);
+  OCL_SET_ARG(3, sizeof(cl_mem), &buf[2]);
+  OCL_SET_ARG(4, sizeof(cl_mem), &buf[3]);
+  OCL_SET_ARG(5, sizeof(cl_mem), &buf[4]);
+  OCL_SET_ARG(6, sizeof(cl_mem), &buf[5]);
+  float w_inv = 1.0/w;
+  float h_inv = 1.0/h;
+  OCL_SET_ARG(7, sizeof(float), &w_inv);
+  OCL_SET_ARG(8, sizeof(float), &h_inv);
+
+  globals[0] = w;
+  globals[1] = h;
+  locals[0] = 16;
+  locals[1] = 16;
+  OCL_NDRANGE(2);
+
+  // Check result
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  OCL_MAP_BUFFER(2);
+  OCL_MAP_BUFFER(3);
+  OCL_MAP_BUFFER(4);
+  OCL_MAP_BUFFER(5);
+
+  for(uint32_t k = 0; k < 5; k++)
+  {
+    for (uint32_t j = 0; j < h; ++j)
+      for (uint32_t i = 0; i < w; i++)
+        OCL_ASSERT(((uint32_t*)buf_data[0])[j * w + i] == ((uint32_t*)buf_data[1 + k])[j * w + i]);
+  }
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+  OCL_UNMAP_BUFFER(2);
+  OCL_UNMAP_BUFFER(3);
+  OCL_UNMAP_BUFFER(4);
+  OCL_UNMAP_BUFFER(5);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_copy_image1);
diff --git a/utests/utest/compiler_copy_image_3d.cpp b/utests/utest/compiler_copy_image_3d.cpp
new file mode 100644
index 0000000..ff493e7
--- /dev/null
+++ b/utests/utest/compiler_copy_image_3d.cpp
@@ -0,0 +1,58 @@
+#include "utest_helper.hpp"
+#include "string.h"
+
+static void compiler_copy_image_3d(void)
+{
+  const size_t w = 512;
+  const size_t h = 512;
+  const size_t depth = 4;
+  cl_image_format format;
+  cl_sampler sampler;
+
+  // Setup kernel and images
+  OCL_CREATE_KERNEL("test_copy_image_3d");
+  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * w * h * depth);
+  for (uint32_t k = 0; k < depth; k++)
+    for (uint32_t j = 0; j < h; j++)
+      for (uint32_t i = 0; i < w; i++)
+        ((float*)buf_data[0])[k*w*h + j*w + i] = (k << 10) + (j << 10) + i;
+
+  format.image_channel_order = CL_RGBA;
+  format.image_channel_data_type = CL_UNORM_INT8;
+  OCL_CREATE_IMAGE3D(buf[0], CL_MEM_COPY_HOST_PTR, &format, w, h, depth, w*4, w*h*4, buf_data[0]);
+  OCL_CREATE_IMAGE3D(buf[1], 0, &format, w, h, depth, 0, 0, NULL);
+  for(uint32_t i = 0; i < depth; i++)
+   OCL_CREATE_IMAGE2D(buf[2 + i], 0, &format, w, h, 0, NULL);
+  OCL_CREATE_SAMPLER(sampler, CL_ADDRESS_REPEAT, CL_FILTER_NEAREST);
+  free(buf_data[0]);
+  buf_data[0] = NULL;
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(sampler), &sampler);
+  for(uint32_t i = 0; i < depth; i++)
+    OCL_SET_ARG(3 + i, sizeof(cl_mem), &buf[2 + i]);
+  globals[0] = w;
+  globals[1] = h;
+  globals[2] = depth;
+  locals[0] = 64;
+  locals[1] = 1;
+  locals[2] = 1;
+  OCL_NDRANGE(3);
+
+  // Check result
+  for(uint32_t i = 0; i < depth + 2; i++)
+    OCL_MAP_BUFFER_GTT(i);
+  for (uint32_t k = 0; k < depth; k++)
+    for (uint32_t j = 0; j < h; ++j)
+      for (uint32_t i = 0; i < w; i++) {
+        OCL_ASSERT(((float*)buf_data[0])[k*w*((h+1)&-2LL) + j*w + i] == ((float*)buf_data[1])[k*w*((h+1)&-2LL) + j*w + i]);
+        OCL_ASSERT(((float*)buf_data[0])[k*w*((h+1)&-2LL) + j*w + i] == ((float*)buf_data[k + 2])[j * w + i]);
+      }
+
+  for(uint32_t i = 0; i < depth + 2; i++)
+    OCL_UNMAP_BUFFER_GTT(i);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_copy_image_3d);
diff --git a/utests/utest/compiler_data_types.cpp b/utests/utest/compiler_data_types.cpp
new file mode 100644
index 0000000..c686cc7
--- /dev/null
+++ b/utests/utest/compiler_data_types.cpp
@@ -0,0 +1,9 @@
+#include "utest_helper.hpp"
+
+void compiler_data_types(void)
+{
+  OCL_CREATE_KERNEL("compiler_data_types");
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_data_types);
+
diff --git a/utests/utest/compiler_degrees.cpp b/utests/utest/compiler_degrees.cpp
new file mode 100644
index 0000000..7a17ca7
--- /dev/null
+++ b/utests/utest/compiler_degrees.cpp
@@ -0,0 +1,32 @@
+#include "utest_helper.hpp"
+
+void compiler_degrees(void)
+{
+  const int n = 32;
+  float src[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_degrees");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  OCL_MAP_BUFFER(0);
+  for (int i = 0; i < n; ++i) {
+    src[i] = ((float *)buf_data[0])[i] = rand() * 0.01f;
+  }
+  OCL_UNMAP_BUFFER(0);
+
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(1);
+  for (int i = 0; i < n; ++i) {
+    OCL_ASSERT(((float *)buf_data[1])[i] == src[i] * (180 / 3.141592653589793F));
+  }
+  OCL_UNMAP_BUFFER(1);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_degrees);
diff --git a/utests/utest/compiler_displacement_map_element.cpp b/utests/utest/compiler_displacement_map_element.cpp
new file mode 100644
index 0000000..98041ec
--- /dev/null
+++ b/utests/utest/compiler_displacement_map_element.cpp
@@ -0,0 +1,64 @@
+#include "utest_helper.hpp"
+
+typedef unsigned int uint;
+constexpr int W = 16, H = 16;
+constexpr int SIZE = W * H;
+uint in_1[SIZE];
+uint disp_map[SIZE];
+uint out_1[SIZE];
+
+uint cpu(const int cx, const int cy, const uint *in, const uint *disp_map, int w, int h) {
+  uint c = disp_map[cy * w + cx];
+  int x_pos = cx + c;
+  int y_pos = cy + c;
+  if(0 <= x_pos && x_pos < w && 0 <= y_pos && y_pos < h)
+    return in[y_pos * w + x_pos];
+  else
+    return 0;
+}
+
+void test() {
+  OCL_MAP_BUFFER(2);
+  for(int y=0; y<H; y++)
+    for(int x=0; x<W; x++) {
+      uint out = ((uint*)buf_data[2]) [y * W + x];
+      uint wish = cpu(x, y, in_1, disp_map, W, H);
+      if(out != wish)
+        printf("XXX %d %d %x %x\n", x, y, out, wish);
+      OCL_ASSERT(out == wish);
+    }
+  OCL_UNMAP_BUFFER(2);
+}
+
+void displacement_map_element(void) {
+  int i, pass;
+
+  OCL_CREATE_KERNEL("compiler_displacement_map_element");
+  OCL_CREATE_BUFFER(buf[0], 0, SIZE * sizeof(uint), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, SIZE * sizeof(uint), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, SIZE * sizeof(uint), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(W), &W);
+  OCL_SET_ARG(3, sizeof(H), &H);
+  OCL_SET_ARG(4, sizeof(cl_mem), &buf[2]);
+  globals[0] = W;
+  globals[1] = H;
+  locals[0] = 16;
+  locals[1] = 16;
+
+  for (pass = 0; pass < 8; pass ++) {
+    OCL_MAP_BUFFER(0);
+    OCL_MAP_BUFFER(1);
+    for (i = 0; i < SIZE; i ++) {
+      in_1[i] = ((uint*)buf_data[0])[i] = ((rand() & 0xFFFF) << 16) | (rand() & 0xFFFF);
+      disp_map[i] = ((uint*)buf_data[1])[i] = rand() & 3;
+    }
+    OCL_UNMAP_BUFFER(0);
+    OCL_UNMAP_BUFFER(1);
+    OCL_NDRANGE(2);
+    test();
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(displacement_map_element);
diff --git a/utests/utest/compiler_double.cpp b/utests/utest/compiler_double.cpp
new file mode 100644
index 0000000..7c54ddf
--- /dev/null
+++ b/utests/utest/compiler_double.cpp
@@ -0,0 +1,46 @@
+#include <cmath>
+#include "utest_helper.hpp"
+
+static void cpu(int global_id, double *src, double *dst) {
+  double f = src[global_id];
+  double d = 1.234567890123456789;
+  dst[global_id] = global_id < 14 ? (d * (f + d)) : 14;
+}
+
+void compiler_double(void)
+{
+  const size_t n = 16;
+  double cpu_dst[n], cpu_src[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_double");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(double), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(double), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  // Run random tests
+  for (uint32_t pass = 0; pass < 1; ++pass) {
+    OCL_MAP_BUFFER(0);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      cpu_src[i] = ((double*)buf_data[0])[i] = .1f * (rand() & 15) - .75f;
+    OCL_UNMAP_BUFFER(0);
+
+    // Run the kernel on GPU
+    OCL_NDRANGE(1);
+
+    // Run on CPU
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      cpu(i, cpu_src, cpu_dst);
+
+    // Compare
+    OCL_MAP_BUFFER(1);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      OCL_ASSERT(fabs(((double*)buf_data[1])[i] - cpu_dst[i]) < 1e-4);
+    OCL_UNMAP_BUFFER(1);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_double);
diff --git a/utests/utest/compiler_double_2.cpp b/utests/utest/compiler_double_2.cpp
new file mode 100644
index 0000000..7e3ae4b
--- /dev/null
+++ b/utests/utest/compiler_double_2.cpp
@@ -0,0 +1,47 @@
+#include <cmath>
+#include "utest_helper.hpp"
+
+static void cpu(int global_id, float *src, double *dst) {
+  float f = src[global_id];
+  float d = 1.234567890123456789;
+  dst[global_id] = global_id < 14 ? d * (d + f) : 14;
+}
+
+void compiler_double_2(void)
+{
+  const size_t n = 16;
+  float cpu_src[n];
+  double cpu_dst[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_double_2");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(double), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  // Run random tests
+  for (uint32_t pass = 0; pass < 1; ++pass) {
+    OCL_MAP_BUFFER(0);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      cpu_src[i] = ((float*)buf_data[0])[i] = .1f * (rand() & 15) - .75f;
+    OCL_UNMAP_BUFFER(0);
+
+    // Run the kernel on GPU
+    OCL_NDRANGE(1);
+
+    // Run on CPU
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      cpu(i, cpu_src, cpu_dst);
+
+    // Compare
+    OCL_MAP_BUFFER(1);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      OCL_ASSERT(fabs(((double*)buf_data[1])[i] - cpu_dst[i]) < 1e-4);
+    OCL_UNMAP_BUFFER(1);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_double_2);
diff --git a/utests/utest/compiler_double_3.cpp b/utests/utest/compiler_double_3.cpp
new file mode 100644
index 0000000..294950d
--- /dev/null
+++ b/utests/utest/compiler_double_3.cpp
@@ -0,0 +1,46 @@
+#include <cmath>
+#include "utest_helper.hpp"
+
+static void cpu(int global_id, float *src, double *dst) {
+  float d = 1.234567890123456789;
+  dst[global_id] = global_id < 14 ? d : 14;
+}
+
+void compiler_double_3(void)
+{
+  const size_t n = 16;
+  float cpu_src[n];
+  double cpu_dst[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_double_3");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(double), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  // Run random tests
+  for (uint32_t pass = 0; pass < 1; ++pass) {
+    OCL_MAP_BUFFER(0);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      cpu_src[i] = ((float*)buf_data[0])[i] = .1f * (rand() & 15) - .75f;
+    OCL_UNMAP_BUFFER(0);
+
+    // Run the kernel on GPU
+    OCL_NDRANGE(1);
+
+    // Run on CPU
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      cpu(i, cpu_src, cpu_dst);
+
+    // Compare
+    OCL_MAP_BUFFER(1);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      OCL_ASSERT(fabs(((double*)buf_data[1])[i] - cpu_dst[i]) < 1e-4);
+    OCL_UNMAP_BUFFER(1);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_double_3);
diff --git a/utests/utest/compiler_double_4.cpp b/utests/utest/compiler_double_4.cpp
new file mode 100644
index 0000000..cb25bd4
--- /dev/null
+++ b/utests/utest/compiler_double_4.cpp
@@ -0,0 +1,40 @@
+#include <cmath>
+#include "utest_helper.hpp"
+
+void compiler_double_4(void)
+{
+  const size_t n = 16;
+  double cpu_src1[n], cpu_src2[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_double_4");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(double), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(double), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(double), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  // Run random tests
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (int32_t i = 0; i < (int32_t) n; ++i) {
+    cpu_src1[i] = ((double*)buf_data[0])[i] = rand() * 1e-2;
+    cpu_src2[i] = ((double*)buf_data[1])[i] = rand() * 1e-2;
+  }
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+
+  // Run the kernel on GPU
+  OCL_NDRANGE(1);
+
+  // Compare
+  OCL_MAP_BUFFER(2);
+  for (int32_t i = 0; i < (int32_t) n; ++i)
+    OCL_ASSERT(fabs(((double*)buf_data[2])[i] - cpu_src1[i] - cpu_src2[i]) < 1e-4);
+  OCL_UNMAP_BUFFER(2);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_double_4);
diff --git a/utests/utest/compiler_fabs.cpp b/utests/utest/compiler_fabs.cpp
new file mode 100644
index 0000000..b14f486
--- /dev/null
+++ b/utests/utest/compiler_fabs.cpp
@@ -0,0 +1,44 @@
+#include "utest_helper.hpp"
+
+static void cpu(int global_id, float *src, float *dst) {
+  float f = src[global_id];
+  f = f < 0 ? -f : f;
+  dst[global_id] = f;
+}
+
+void compiler_fabs(void)
+{
+  const size_t n = 16;
+  float cpu_dst[16], cpu_src[16];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_fabs");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = 16;
+  locals[0] = 16;
+
+  // Run random tests
+  for (uint32_t pass = 0; pass < 8; ++pass) {
+    OCL_MAP_BUFFER(0);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      cpu_src[i] = ((float*)buf_data[0])[i] = .1f * (rand() & 15) - .75f;
+    OCL_UNMAP_BUFFER(0);
+
+    // Run the kernel on GPU
+    OCL_NDRANGE(1);
+
+    // Run on CPU
+    for (int32_t i = 0; i < (int32_t) n; ++i) cpu(i, cpu_src, cpu_dst);
+
+    // Compare
+    OCL_MAP_BUFFER(1);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      OCL_ASSERT(((float *)buf_data[1])[i] == cpu_dst[i]);
+    OCL_UNMAP_BUFFER(1);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_fabs);
diff --git a/utests/utest/compiler_fill_gl_image.cpp b/utests/utest/compiler_fill_gl_image.cpp
new file mode 100644
index 0000000..437fcf4
--- /dev/null
+++ b/utests/utest/compiler_fill_gl_image.cpp
@@ -0,0 +1,76 @@
+#include "utest_helper.hpp"
+
+static void read_back(int tex, int width, int height, uint32_t * resultColor)
+{
+  float vertices[8] = {-1, 1, 1, 1, 1, -1, -1, -1};
+  float tex_coords[8] = {0, 0, 1, 0, 1, 1, 0, 1};
+
+  glBindTexture(GL_TEXTURE_2D, tex);
+  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+  glEnable(GL_TEXTURE_2D);
+  glDisable(GL_BLEND);
+  glVertexPointer(2, GL_FLOAT, sizeof(float) * 2, vertices);
+  glEnableClientState(GL_VERTEX_ARRAY);
+  glClientActiveTexture(GL_TEXTURE0);
+  glTexCoordPointer(2, GL_FLOAT, sizeof(float) * 2, tex_coords);
+  glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+  glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
+  glFlush();
+  OCL_SWAP_EGL_BUFFERS();
+
+  glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, resultColor);
+}
+
+
+static void compiler_fill_gl_image(void)
+{
+  const size_t w = EGL_WINDOW_WIDTH;
+  const size_t h = EGL_WINDOW_HEIGHT;
+  uint32_t color = 0x123456FF;
+  uint32_t *resultColor;
+  GLuint tex;
+
+  if (eglContext == EGL_NO_CONTEXT) {
+    fprintf(stderr, "There is no valid egl context. Ignore this case.\n");
+    return;
+  }
+  // Setup kernel and images
+  glGenTextures(1, &tex);
+  glBindTexture(GL_TEXTURE_2D, tex);
+  // Must set the all filters to GL_NEAREST!
+  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, NULL);
+
+  OCL_CREATE_KERNEL("test_fill_gl_image");
+  OCL_CREATE_GL_IMAGE2D(buf[0], 0, GL_TEXTURE_2D, 0, tex);
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(color), &color);
+  globals[0] = w;
+  globals[1] = h;
+  locals[0] = 16;
+  locals[1] = 16;
+  glFinish();
+  OCL_ENQUEUE_ACQUIRE_GL_OBJECTS(0);
+  OCL_NDRANGE(2);
+  OCL_FLUSH();
+
+  // Check result
+  resultColor = new uint32_t[w * h * 4];
+  if (resultColor == NULL)
+    assert(0);
+
+  read_back(tex, w, h, resultColor);
+  for (uint32_t j = 0; j < h; ++j)
+    for (uint32_t i = 0; i < w; i++)
+      OCL_ASSERT(resultColor[j * w + i] == color);
+  OCL_UNMAP_BUFFER(0);
+  delete resultColor;
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_fill_gl_image);
diff --git a/utests/utest/compiler_fill_image.cpp b/utests/utest/compiler_fill_image.cpp
new file mode 100644
index 0000000..2f9fe3d
--- /dev/null
+++ b/utests/utest/compiler_fill_image.cpp
@@ -0,0 +1,35 @@
+#include "utest_helper.hpp"
+
+static void compiler_fill_image(void)
+{
+  const size_t w = 512;
+  const size_t h = 512;
+  uint32_t color = 0x12345678;
+  cl_image_format format;
+
+  format.image_channel_order = CL_RGBA;
+  format.image_channel_data_type = CL_UNSIGNED_INT8;
+
+  // Setup kernel and images
+  OCL_CREATE_KERNEL("test_fill_image");
+
+  OCL_CREATE_IMAGE2D(buf[0], 0, &format, w, h, 0, NULL);
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(color), &color);
+  globals[0] = w;
+  globals[1] = h;
+  locals[0] = 16;
+  locals[1] = 16;
+  OCL_NDRANGE(2);
+
+  // Check result
+  OCL_MAP_BUFFER(0);
+  for (uint32_t j = 0; j < h; ++j)
+    for (uint32_t i = 0; i < w; i++)
+      OCL_ASSERT(((uint32_t*)buf_data[0])[j * w + i] == 0x78563412);
+  OCL_UNMAP_BUFFER(0);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_fill_image);
diff --git a/utests/utest/compiler_fill_image0.cpp b/utests/utest/compiler_fill_image0.cpp
new file mode 100644
index 0000000..1ab13be
--- /dev/null
+++ b/utests/utest/compiler_fill_image0.cpp
@@ -0,0 +1,33 @@
+#include "utest_helper.hpp"
+
+static void compiler_fill_image0(void)
+{
+  const size_t w = 512;
+  const size_t h = 512;
+  cl_image_format format;
+
+  format.image_channel_order = CL_RGBA;
+  format.image_channel_data_type = CL_UNSIGNED_INT8;
+
+  // Setup kernel and images
+  OCL_CREATE_KERNEL("test_fill_image0");
+
+  OCL_CREATE_IMAGE2D(buf[0], 0, &format, w, h, 0, NULL);
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  globals[0] = w;
+  globals[1] = h;
+  locals[0] = 16;
+  locals[1] = 16;
+  OCL_NDRANGE(2);
+
+  // Check result
+  OCL_MAP_BUFFER_GTT(0);
+  for (uint32_t j = 0; j < h; ++j)
+    for (uint32_t i = 0; i < w; i++)
+      OCL_ASSERT(((uint32_t*)buf_data[0])[j * w + i] == (i << 16 | j));
+  OCL_UNMAP_BUFFER_GTT(0);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_fill_image0);
diff --git a/utests/utest/compiler_fill_image_3d.cpp b/utests/utest/compiler_fill_image_3d.cpp
new file mode 100644
index 0000000..6a679fb
--- /dev/null
+++ b/utests/utest/compiler_fill_image_3d.cpp
@@ -0,0 +1,39 @@
+#include "utest_helper.hpp"
+
+static void compiler_fill_image_3d(void)
+{
+  const size_t w = 512;
+  const size_t h = 512;
+  const size_t depth = 5;
+  uint32_t color = 0x12345678;
+  cl_image_format format;
+
+  format.image_channel_order = CL_RGBA;
+  format.image_channel_data_type = CL_UNSIGNED_INT8;
+
+  // Setup kernel and images
+  OCL_CREATE_KERNEL("test_fill_image_3d");
+
+  OCL_CREATE_IMAGE3D(buf[0], 0, &format, w, h, depth, 0, 0, NULL);
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(color), &color);
+  globals[0] = w;
+  globals[1] = h;
+  globals[2] = depth;
+  locals[0] = 16;
+  locals[1] = 16;
+  locals[2] = 1;
+  OCL_NDRANGE(3);
+
+  // Check result
+  OCL_MAP_BUFFER(0);
+  for (uint32_t k = 0; k < depth; k++)
+    for (uint32_t j = 0; j < h; ++j)
+      for (uint32_t i = 0; i < w; i++)
+        OCL_ASSERT(((uint32_t*)buf_data[0])[k*w*h + j*w + i] == 0x78563412);
+  OCL_UNMAP_BUFFER(0);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_fill_image_3d);
diff --git a/utests/utest/compiler_fill_image_3d_2.cpp b/utests/utest/compiler_fill_image_3d_2.cpp
new file mode 100644
index 0000000..f5ff792
--- /dev/null
+++ b/utests/utest/compiler_fill_image_3d_2.cpp
@@ -0,0 +1,37 @@
+#include "utest_helper.hpp"
+
+static void compiler_fill_image_3d_2(void)
+{
+  const size_t w = 512;
+  const size_t h = 512;
+  const size_t depth = 5;
+  cl_image_format format;
+
+  format.image_channel_order = CL_RGBA;
+  format.image_channel_data_type = CL_UNSIGNED_INT8;
+
+  // Setup kernel and images
+  OCL_CREATE_KERNEL("test_fill_image_3d_2");
+
+  OCL_CREATE_IMAGE3D(buf[0], 0, &format, w, h, depth, 0, 0, NULL);
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  globals[0] = w;
+  globals[1] = h;
+  globals[2] = depth;
+  locals[0] = 16;
+  locals[1] = 16;
+  locals[2] = 1;
+  OCL_NDRANGE(3);
+
+  // Check result
+  OCL_MAP_BUFFER_GTT(0);
+  for (uint32_t k = 0; k < depth; k++)
+    for (uint32_t j = 0; j < h; ++j)
+      for (uint32_t i = 0; i < w; i++)
+        OCL_ASSERT(((uint32_t*)buf_data[0])[k*w*h + j*w + i] == 0x78563412);
+  OCL_UNMAP_BUFFER_GTT(0);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_fill_image_3d_2);
diff --git a/utests/utest/compiler_function_argument.cpp b/utests/utest/compiler_function_argument.cpp
new file mode 100644
index 0000000..a39523b
--- /dev/null
+++ b/utests/utest/compiler_function_argument.cpp
@@ -0,0 +1,27 @@
+#include "utest_helper.hpp"
+
+void compiler_function_argument(void)
+{
+  const size_t n = 2048;
+  const int value = 34;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_function_argument");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(int), &value);
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+
+  // Check results
+  for (uint32_t i = 0; i < n; ++i)
+    OCL_ASSERT(((int*)buf_data[0])[i] == value);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_function_argument);
+
+
diff --git a/utests/utest/compiler_function_argument0.cpp b/utests/utest/compiler_function_argument0.cpp
new file mode 100644
index 0000000..2e4227e
--- /dev/null
+++ b/utests/utest/compiler_function_argument0.cpp
@@ -0,0 +1,26 @@
+#include "utest_helper.hpp"
+
+void compiler_function_argument0(void)
+{
+  const size_t n = 2048;
+  const short value = 34;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_function_argument0");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(short), &value);
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+
+  // Check results
+  for (uint32_t i = 0; i < n; ++i)
+    OCL_ASSERT(((int*)buf_data[0])[i] == value);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_function_argument0);
+
diff --git a/utests/utest/compiler_function_argument1.cpp b/utests/utest/compiler_function_argument1.cpp
new file mode 100644
index 0000000..48a7677
--- /dev/null
+++ b/utests/utest/compiler_function_argument1.cpp
@@ -0,0 +1,31 @@
+#include "utest_helper.hpp"
+
+void compiler_function_argument1(void)
+{
+  const size_t n = 2048;
+  const char value = 34;
+  const short value0 = 31;
+  const int value1 = 3;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_function_argument1");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(char), &value);
+  OCL_SET_ARG(2, sizeof(short), &value0);
+  OCL_SET_ARG(3, sizeof(int), &value1);
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+
+  // Check results
+  for (uint32_t i = 0; i < n; ++i)
+    OCL_ASSERT(((int*)buf_data[0])[i] == value + value0 + value1);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_function_argument1);
+
+
diff --git a/utests/utest/compiler_function_argument2.cpp b/utests/utest/compiler_function_argument2.cpp
new file mode 100644
index 0000000..c352a9e
--- /dev/null
+++ b/utests/utest/compiler_function_argument2.cpp
@@ -0,0 +1,57 @@
+#include "utest_helper.hpp"
+
+#define VECSIZE 8
+void compiler_function_argument2(void)
+{
+  char arg0[8] = { 0 };
+  unsigned char arg1[8] = { 0 };
+  short arg2[8] = { 0 };
+  unsigned short arg3[8] = { 0 };
+  int arg4[8] = { 0 };
+  unsigned int arg5[8] = { 0 };
+  float arg6[8] = { 0 };
+
+  for (uint32_t i = 0; i < 8; ++i) {
+      arg0[i] = rand();
+      arg1[i] = rand();
+      arg2[i] = rand();
+      arg3[i] = rand();
+      arg4[i] = rand();
+      arg5[i] = rand();
+      arg6[i] = rand();
+  }
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_function_argument2");
+  OCL_CREATE_BUFFER(buf[0], 0, sizeof(float) * 8 * 8, NULL);
+  OCL_SET_ARG(0, sizeof(arg0), arg0);
+  OCL_SET_ARG(1, sizeof(arg1), arg1);
+  OCL_SET_ARG(2, sizeof(arg2), arg2);
+  OCL_SET_ARG(3, sizeof(arg3), arg3);
+  OCL_SET_ARG(4, sizeof(arg4), arg4);
+  OCL_SET_ARG(5, sizeof(arg5), arg5);
+  OCL_SET_ARG(6, sizeof(arg6), arg6);
+  OCL_SET_ARG(7, sizeof(cl_mem), &buf[0]);
+
+  // Run the kernel
+  globals[0] = 1;
+  locals[0] = 1;
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+
+  /* Check results */
+  float *dst = (float*)buf_data[0];
+
+  for (uint32_t i = 0; i < 8; ++i) {
+      OCL_ASSERT((float)arg0[i] == dst[0*8 + i]);
+      OCL_ASSERT((float)arg1[i] == dst[1*8 + i]);
+      OCL_ASSERT((float)arg2[i] == dst[2*8 + i]);
+      OCL_ASSERT((float)arg3[i] == dst[3*8 + i]);
+      OCL_ASSERT((float)arg4[i] == dst[4*8 + i]);
+      OCL_ASSERT((float)arg5[i] == dst[5*8 + i]);
+      OCL_ASSERT((float)arg6[i] == dst[6*8 + i]);
+  }
+  OCL_UNMAP_BUFFER(0);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_function_argument2);
diff --git a/utests/utest/compiler_function_argument3.cpp b/utests/utest/compiler_function_argument3.cpp
new file mode 100644
index 0000000..e9f5e80
--- /dev/null
+++ b/utests/utest/compiler_function_argument3.cpp
@@ -0,0 +1,45 @@
+#include "utest_helper.hpp"
+
+struct sfloat8 {
+    float a;
+    float b;
+    float c;
+    float d;
+    float e;
+    float f;
+    float g;
+    float h;
+};
+
+void compiler_function_argument3(void)
+{
+  sfloat8 arg6;
+
+  arg6.a = 3.0f;
+  arg6.h = 4.0f;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_function_argument3");
+  OCL_CREATE_BUFFER(buf[0], 0, sizeof(struct sfloat8) * 8, NULL);
+
+  OCL_SET_ARG(0, sizeof(arg6), &arg6);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[0]);
+
+  // Run the kernel
+  globals[0] = 1;
+  locals[0] = 1;
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(0);
+
+  /* Check results */
+  sfloat8 *dst = (sfloat8*)buf_data[0];
+
+  OCL_ASSERT(dst[0].a == 3.0f);
+  OCL_ASSERT(dst[0].b == 12.0f);
+  OCL_ASSERT(dst[0].h == 7.0f);
+
+  OCL_UNMAP_BUFFER(0);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_function_argument3);
diff --git a/utests/utest/compiler_function_constant.cpp b/utests/utest/compiler_function_constant.cpp
new file mode 100644
index 0000000..20f0ece
--- /dev/null
+++ b/utests/utest/compiler_function_constant.cpp
@@ -0,0 +1,34 @@
+#include "utest_helper.hpp"
+
+void compiler_function_constant(void)
+{
+  const size_t n = 2048;
+  const uint32_t value = 34;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_function_constant");
+  OCL_CREATE_BUFFER(buf[0], 0, 75 * sizeof(short), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(uint32_t), &value);
+
+  OCL_MAP_BUFFER(0);
+  for(uint32_t i = 0; i < 69; ++i)
+    ((short *)buf_data[0])[i] = i;
+  OCL_UNMAP_BUFFER(0);
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(1);
+
+  // Check results
+  for (uint32_t i = 0; i < n; ++i)
+    OCL_ASSERT(((uint32_t *)buf_data[1])[i] == (value + i%69));
+
+  OCL_UNMAP_BUFFER(1);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_function_constant);
diff --git a/utests/utest/compiler_function_constant0.cpp b/utests/utest/compiler_function_constant0.cpp
new file mode 100644
index 0000000..6fbbd30
--- /dev/null
+++ b/utests/utest/compiler_function_constant0.cpp
@@ -0,0 +1,40 @@
+#include "utest_helper.hpp"
+
+void compiler_function_constant0(void)
+{
+  const size_t n = 2048;
+  const uint32_t value = 34;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_function_constant0");
+  OCL_CREATE_BUFFER(buf[0], 0, 75 * sizeof(int32_t), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, 1 * sizeof(char), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  OCL_SET_ARG(3, sizeof(uint32_t), &value);
+
+  OCL_MAP_BUFFER(0);
+  for(uint32_t i = 0; i < 69; ++i)
+    ((int32_t *)buf_data[0])[i] = i;
+  OCL_UNMAP_BUFFER(0);
+
+  OCL_MAP_BUFFER(1);
+  ((char *)buf_data[1])[0] = 15;
+  OCL_UNMAP_BUFFER(1);
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(2);
+
+  // Check results
+  for (uint32_t i = 0; i < n; ++i)
+    OCL_ASSERT(((uint32_t *)buf_data[2])[i] == (value + 15 + i%69));
+
+  OCL_UNMAP_BUFFER(2);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_function_constant0);
diff --git a/utests/utest/compiler_function_constant1.cpp b/utests/utest/compiler_function_constant1.cpp
new file mode 100644
index 0000000..b92e6ca
--- /dev/null
+++ b/utests/utest/compiler_function_constant1.cpp
@@ -0,0 +1,47 @@
+#include "utest_helper.hpp"
+
+void compiler_function_constant1(void)
+{
+  const size_t n = 2048;
+  const uint32_t value = 34;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_function_constant");
+  OCL_CREATE_BUFFER(buf[0], 0, 75 * sizeof(short), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(uint32_t), &value);
+
+  OCL_MAP_BUFFER(0);
+  for(uint32_t i = 0; i < 69; ++i)
+    ((short *)buf_data[0])[i] = i;
+  OCL_UNMAP_BUFFER(0);
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  OCL_CREATE_BUFFER(buf[2], 0, 101 * sizeof(short), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[2]);
+  OCL_MAP_BUFFER(2);
+  for(uint32_t i = 0; i < 69; ++i)
+    ((short *)buf_data[2])[i] = 2*i;
+  OCL_UNMAP_BUFFER(2);
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(1);
+
+  // Check results
+  for (uint32_t i = 0; i < n; ++i)
+    OCL_ASSERT(((uint32_t *)buf_data[1])[i] == (value + (i%69)*2));
+
+  OCL_UNMAP_BUFFER(1);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_function_constant1);
diff --git a/utests/utest/compiler_function_qualifiers.cpp b/utests/utest/compiler_function_qualifiers.cpp
new file mode 100644
index 0000000..55ddd84
--- /dev/null
+++ b/utests/utest/compiler_function_qualifiers.cpp
@@ -0,0 +1,10 @@
+#include "utest_helper.hpp"
+
+void compiler_function_qualifiers(void)
+{
+  OCL_CREATE_KERNEL("compiler_function_qualifiers");
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_function_qualifiers);
+
+
diff --git a/utests/utest/compiler_geometric_builtin.cpp b/utests/utest/compiler_geometric_builtin.cpp
new file mode 100644
index 0000000..a9ccc2c
--- /dev/null
+++ b/utests/utest/compiler_geometric_builtin.cpp
@@ -0,0 +1,9 @@
+#include "utest_helper.hpp"
+
+void compiler_geometric_builtin(void)
+{
+  OCL_CREATE_KERNEL("compiler_geometric_builtin");
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_geometric_builtin);
+
diff --git a/utests/utest/compiler_get_image_info.cpp b/utests/utest/compiler_get_image_info.cpp
new file mode 100644
index 0000000..4454d03
--- /dev/null
+++ b/utests/utest/compiler_get_image_info.cpp
@@ -0,0 +1,40 @@
+#include "utest_helper.hpp"
+
+static void compiler_get_image_info(void)
+{
+  const size_t w = 256;
+  const size_t h = 512;
+  const size_t depth = 3;
+  cl_image_format format;
+
+  format.image_channel_order = CL_RGBA;
+  format.image_channel_data_type = CL_UNSIGNED_INT8;
+
+  // Setup kernel and images
+  OCL_CREATE_KERNEL("test_get_image_info");
+
+  OCL_CREATE_IMAGE3D(buf[0], 0, &format, w, h, depth, 0, 0, NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, 32 * sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, 32 * sizeof(int), NULL);
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  globals[0] = 32;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  // Check result
+  OCL_MAP_BUFFER(1);
+  OCL_MAP_BUFFER(2);
+  for (uint32_t i = 0; i < 32; i++)
+  {
+    OCL_ASSERT(((uint32_t*)buf_data[1])[i] == ((w << 20) | (h << 8) | depth));
+    OCL_ASSERT(((uint32_t*)buf_data[2])[i] == ((CL_UNSIGNED_INT8 << 16) | CL_RGBA));
+  }
+  OCL_UNMAP_BUFFER(1);
+  OCL_UNMAP_BUFFER(2);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_get_image_info);
diff --git a/utests/utest/compiler_getelementptr_bitcast.cpp b/utests/utest/compiler_getelementptr_bitcast.cpp
new file mode 100644
index 0000000..a57ff36
--- /dev/null
+++ b/utests/utest/compiler_getelementptr_bitcast.cpp
@@ -0,0 +1,45 @@
+#include "utest_helper.hpp"
+
+void compiler_getelementptr_bitcast(void)
+{
+  const size_t n = 16;
+  float cpu_dst[16], cpu_src[16];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_getelementptr_bitcast");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = 16;
+
+  //must be 1 to pass the test, it is required by the special usage in the kernel
+  locals[0] = 1;
+
+  // Run random tests
+  for (uint32_t pass = 0; pass < 8; ++pass) {
+    OCL_MAP_BUFFER(0);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      cpu_src[i] = ((float*)buf_data[0])[i] = .1f * (rand() & 15) - .75f;
+    OCL_UNMAP_BUFFER(0);
+
+    // Run the kernel on GPU
+    OCL_NDRANGE(1);
+
+    // Run on CPU
+    for (int32_t i = 0; i < (int32_t) n; ++i){
+      unsigned char* c = (unsigned char*)&cpu_src[i];
+      cpu_dst[i] = c[2];
+    }
+
+    // Compare
+    OCL_MAP_BUFFER(1);
+    for (int32_t i = 0; i < (int32_t) n; ++i){
+      //printf("src:%f, gpu_dst: %f, cpu_dst: %f\n", cpu_src[i], ((float *)buf_data[1])[i], cpu_dst[i]);
+      OCL_ASSERT(((float *)buf_data[1])[i] == cpu_dst[i]);
+    }
+    OCL_UNMAP_BUFFER(1);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_getelementptr_bitcast);
diff --git a/utests/utest/compiler_global_constant.cpp b/utests/utest/compiler_global_constant.cpp
new file mode 100644
index 0000000..88f9852
--- /dev/null
+++ b/utests/utest/compiler_global_constant.cpp
@@ -0,0 +1,104 @@
+#include "utest_helper.hpp"
+
+void compiler_global_constant(void)
+{
+  const size_t n = 2048;
+  const uint32_t e = 34, r = 77;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_global_constant");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(uint32_t), &e);
+  OCL_SET_ARG(2, sizeof(uint32_t), &r);
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  unsigned int m[3] = {71,72,73};
+
+  // Check results
+  OCL_MAP_BUFFER(0);
+  for (uint32_t i = 0; i < n; ++i)
+//    printf("%d result %d reference %d\n", i, ((uint32_t *)buf_data[0])[i], m[i%3] + e + r);
+    OCL_ASSERT(((uint32_t *)buf_data[0])[i] == m[i%3] + e + r);
+  OCL_UNMAP_BUFFER(0);
+}
+
+void compiler_global_constant1(void)
+{
+  const size_t n = 32;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL_FROM_FILE("compiler_global_constant", "compiler_global_constant1");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  uint32_t data1[] = {1, 4, 7};
+  uint32_t data2[]= {3, 7, 11};
+
+  // Check results
+  OCL_MAP_BUFFER(0);
+  for (uint32_t i = 0; i < n; ++i)
+//    printf("%d result %d reference %d\n", i, ((uint32_t *)buf_data[0])[i], data1[i%3] + data2[i%3]);
+    OCL_ASSERT(((uint32_t *)buf_data[0])[i] == data1[i%3] + data2[i%3]);
+  OCL_UNMAP_BUFFER(0);
+}
+
+void compiler_global_constant2(void)
+{
+  const size_t n = 32;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL_FROM_FILE("compiler_global_constant", "compiler_global_constant2");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  // Check results
+  OCL_MAP_BUFFER(0);
+  for (uint32_t i = 0; i < n; ++i)
+//    printf("%d result %d reference %d\n", i, ((uint32_t *)buf_data[0])[i], 6);
+    OCL_ASSERT(((uint32_t *)buf_data[0])[i] == 6);
+  OCL_UNMAP_BUFFER(0);
+}
+
+void compiler_global_constant3(void)
+{
+  const size_t n = 32;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL_FROM_FILE("compiler_global_constant", "compiler_global_constant3");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  uint32_t data1[] = {3, 6, 9};
+  char data2[]= {'c', 'f', 'j'};
+  // Check results
+  OCL_MAP_BUFFER(0);
+  for (uint32_t i = 0; i < n; ++i)
+//    printf("%d result %d reference %d\n", i, ((uint32_t *)buf_data[0])[i], data1[i%3] + (int)data2[i%3]);
+    OCL_ASSERT(((uint32_t *)buf_data[0])[i] == data1[i%3] + (uint32_t)data2[i%3]);
+  OCL_UNMAP_BUFFER(0);
+}
+
+MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_global_constant, true);
+MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_global_constant1, true);
+MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_global_constant2, true);
+MAKE_UTEST_FROM_FUNCTION(compiler_global_constant3);
diff --git a/utests/utest/compiler_global_constant_2.cpp b/utests/utest/compiler_global_constant_2.cpp
new file mode 100644
index 0000000..cbe63ae
--- /dev/null
+++ b/utests/utest/compiler_global_constant_2.cpp
@@ -0,0 +1,59 @@
+#include "utest_helper.hpp"
+
+void compiler_global_constant_2(void)
+{
+  const size_t n = 2048;
+  const uint32_t e = 34, r = 77;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_global_constant_2");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(uint32_t), &e);
+  OCL_SET_ARG(2, sizeof(uint32_t), &r);
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  unsigned int m[3] = {0x15b,0x25b,0x35b};
+  unsigned int t[5] = {0x45b,0x55b,0x65b,0x75b,0x85b};
+
+  // Check results
+  OCL_MAP_BUFFER(0);
+  for (uint32_t i = 0; i < n; ++i)
+//    std::cout << ((uint32_t *)buf_data[0])[i] << std::endl;
+    OCL_ASSERT(((uint32_t *)buf_data[0])[i] == m[i%3] + t[i%5] + e + r);
+  OCL_UNMAP_BUFFER(0);
+}
+
+void compiler_global_constant_2_long(void)
+{
+  const size_t n = 2048;
+  const uint32_t e = 34, r = 77;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL_FROM_FILE("compiler_global_constant_2", "compiler_global_constant_2_long");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint64_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(uint32_t), &e);
+  OCL_SET_ARG(2, sizeof(uint32_t), &r);
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  uint64_t m[3] = {0x15b,0x25b,0xFFFFFFFFF};
+
+  // Check results
+  OCL_MAP_BUFFER(0);
+  for (uint32_t i = 0; i < n; ++i)
+//    std::cout << ((uint64_t *)buf_data[0])[i] << std::endl;
+    OCL_ASSERT(((uint64_t *)buf_data[0])[i] == m[i%3] + e + r);
+  OCL_UNMAP_BUFFER(0);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_global_constant_2);
+MAKE_UTEST_FROM_FUNCTION(compiler_global_constant_2_long);
diff --git a/utests/utest/compiler_global_memory_barrier.cpp b/utests/utest/compiler_global_memory_barrier.cpp
new file mode 100644
index 0000000..ea84e72
--- /dev/null
+++ b/utests/utest/compiler_global_memory_barrier.cpp
@@ -0,0 +1,28 @@
+#include "utest_helper.hpp"
+
+static void compiler_global_memory_barrier(void)
+{
+  const size_t n = 16*1024;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_global_memory_barrier");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+
+  // Run the kernel
+  globals[0] = n/2;
+  locals[0] = 256;
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+
+  // Check results
+  uint32_t *dst = (uint32_t*)buf_data[0];
+  for (uint32_t i = 0; i < n; i+=locals[0])
+    for (uint32_t j = 0; j < locals[0]; ++j)
+        OCL_ASSERT(dst[i+j] == locals[0] - 1 -j);
+  OCL_UNMAP_BUFFER(0);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_global_memory_barrier);
diff --git a/utests/utest/compiler_group_size.cpp b/utests/utest/compiler_group_size.cpp
new file mode 100644
index 0000000..8ad83f0
--- /dev/null
+++ b/utests/utest/compiler_group_size.cpp
@@ -0,0 +1,141 @@
+#include "utest_helper.hpp"
+#include <string.h>
+
+struct xyz{
+  unsigned short b;
+  unsigned short e;
+  unsigned int o;
+};
+
+void compiler_group_size1(void)
+{
+  const size_t n = 7*32*17;
+
+  int group_size[] = {7, 17, 32};
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_group_size");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+
+  for(int i = 0; i < 3; i++) {
+    // Run the kernel
+    globals[0] = n;
+    locals[0] = group_size[i];
+    OCL_NDRANGE(1);
+    OCL_MAP_BUFFER(0);
+
+    // Check results
+    for (uint32_t i = 0; i < n; ++i)
+      OCL_ASSERT(((uint32_t*)buf_data[0])[i] == i);
+    OCL_UNMAP_BUFFER(0);
+  }
+}
+
+void compiler_group_size2(void)
+{
+  const uint32_t n = 4*17*8;
+  int size_x[] = {2, 4, 17};
+  int size_y[] = {2, 4, 4};
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_group_size");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+
+  for(int i = 0; i < 3; i++) {
+    // Run the kernel
+    globals[0] = 4*17;
+    globals[1] = 8;
+    locals[0] = size_x[i];
+    locals[1] = size_y[i];
+    OCL_NDRANGE(2);
+    OCL_MAP_BUFFER(0);
+
+    // Check results
+    for (uint32_t i = 0; i < n; ++i)
+      OCL_ASSERT(((uint32_t*)buf_data[0])[i] == i);
+    OCL_UNMAP_BUFFER(0);
+  }
+}
+
+void compiler_group_size3(void)
+{
+  const uint32_t n = 4*17*8*4;
+  int size_x[] = {2, 4, 17};
+  int size_y[] = {2, 4, 4};
+  int size_z[] = {2, 1, 2};
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_group_size");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+
+  for(int i = 0; i < 3; i++) {
+    // Run the kernel
+    globals[0] = 4*17;
+    globals[1] = 8;
+    globals[2] = 4;
+    locals[0] = size_x[i];
+    locals[1] = size_y[i];
+    locals[2] = size_z[i];
+    OCL_NDRANGE(3);
+    OCL_MAP_BUFFER(0);
+
+    // Check results
+    for (uint32_t i = 0; i < n; ++i)
+      OCL_ASSERT(((uint32_t*)buf_data[0])[i] == i);
+    OCL_UNMAP_BUFFER(0);
+  }
+}
+
+void compiler_group_size4(void)
+{
+  const size_t n = 16;
+  uint32_t color = 2;
+  uint32_t num = 1;
+  int group_size[] = {1};
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL_FROM_FILE("compiler_group_size", "compiler_group_size4");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(struct xyz), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+
+  for(uint32_t i = 0; i < num; i++) {
+    // Run the kernel
+    OCL_MAP_BUFFER(0);
+    ((struct xyz*)buf_data[0])[0].b = 0;
+    ((struct xyz*)buf_data[0])[0].e = 2;
+    ((struct xyz*)buf_data[0])[0].o = 0;
+    OCL_UNMAP_BUFFER(0);
+
+    OCL_MAP_BUFFER(1);
+    memset(((uint32_t*)buf_data[1]), 0x0, sizeof(uint32_t)*n);
+    OCL_UNMAP_BUFFER(1);
+
+    OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+    OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+    OCL_SET_ARG(2, sizeof(cl_int), &group_size[i]);
+    OCL_SET_ARG(3, sizeof(cl_int), &color);
+
+    globals[0] = group_size[i];
+    locals[0] = group_size[i];
+    OCL_NDRANGE(1);
+    OCL_MAP_BUFFER(1);
+
+    // Check results
+    for (uint32_t j = 0; j < n; ++j) {
+//      std::cout <<((uint32_t*)buf_data[1])[j] << "  ";
+      if(j >= i && j <= i+2) {
+       OCL_ASSERT(((uint32_t*)buf_data[1])[j] == color);
+      } else {
+       OCL_ASSERT(((uint32_t*)buf_data[1])[j] == 0);
+      }
+
+    }
+    OCL_UNMAP_BUFFER(1);
+  }
+}
+MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_group_size1, true);
+MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_group_size2, true);
+MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_group_size3, true);
+MAKE_UTEST_FROM_FUNCTION(compiler_group_size4);
+
diff --git a/utests/utest/compiler_hadd.cpp b/utests/utest/compiler_hadd.cpp
new file mode 100644
index 0000000..9723702
--- /dev/null
+++ b/utests/utest/compiler_hadd.cpp
@@ -0,0 +1,40 @@
+#include "utest_helper.hpp"
+
+void compiler_hadd(void)
+{
+  const int n = 32;
+  int src1[n], src2[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_hadd");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (int i = 0; i < n; ++i) {
+    src1[i] = ((int*)buf_data[0])[i] = rand();
+    src2[i] = ((int*)buf_data[1])[i] = rand();
+  }
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(2);
+  for (int i = 0; i < n; ++i) {
+    long long a = src1[i];
+    a += src2[i];
+    a >>= 1;
+    OCL_ASSERT(((int*)buf_data[2])[i] == (int)a);
+  }
+  OCL_UNMAP_BUFFER(2);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_hadd);
diff --git a/utests/utest/compiler_if_else.cpp b/utests/utest/compiler_if_else.cpp
new file mode 100644
index 0000000..e38b23f
--- /dev/null
+++ b/utests/utest/compiler_if_else.cpp
@@ -0,0 +1,64 @@
+#include "utest_helper.hpp"
+
+static void compiler_if_else(void)
+{
+  const size_t n = 17;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_if_else");
+  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * n);
+  for (uint32_t i = 0; i < n; ++i) ((uint32_t*)buf_data[0])[i] = 2;
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t), buf_data[0]);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  free(buf_data[0]);
+  buf_data[0] = NULL;
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = 16;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  // First control flow
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < 16; ++i) {
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 2);
+    OCL_ASSERT(((int32_t*)buf_data[0])[i] == 1);
+  }
+
+  // Second control flow
+  for (uint32_t i = 0; i < n; ++i) ((int32_t*)buf_data[0])[i] = -1;
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < 16; ++i) {
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == -2);
+    OCL_ASSERT(((int32_t*)buf_data[0])[i] == 2);
+  }
+
+  // Third control flow
+  for (uint32_t i = 0; i < 4; ++i) ((int32_t*)buf_data[0])[i] = 2;
+  for (uint32_t i = 4; i < n; ++i) ((int32_t*)buf_data[0])[i] = -1;
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < 3; ++i) {
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 2);
+    OCL_ASSERT(((int32_t*)buf_data[0])[i] == 1);
+  }
+  OCL_ASSERT(((int32_t*)buf_data[1])[3] == -1);
+  OCL_ASSERT(((int32_t*)buf_data[0])[3] == 1);
+  for (uint32_t i = 4; i < 16; ++i) {
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == -2);
+    OCL_ASSERT(((int32_t*)buf_data[0])[i] == 2);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_if_else);
+
diff --git a/utests/utest/compiler_insert_to_constant.cpp b/utests/utest/compiler_insert_to_constant.cpp
new file mode 100644
index 0000000..c4f737f
--- /dev/null
+++ b/utests/utest/compiler_insert_to_constant.cpp
@@ -0,0 +1,30 @@
+#include "utest_helper.hpp"
+
+void compiler_insert_to_constant(void)
+{
+  const size_t n = 32;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_insert_to_constant");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t[4]), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+
+  // Check results
+  uint32_t *data = (uint32_t*) buf_data[0];
+  for (uint32_t i = 0; i < n; ++i) {
+    OCL_ASSERT(data[4*i+0] == 0);
+    OCL_ASSERT(data[4*i+1] == 1);
+    OCL_ASSERT(data[4*i+2] == i);
+    OCL_ASSERT(data[4*i+3] == 3);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_insert_to_constant);
+
+
diff --git a/utests/utest/compiler_insert_vector.cpp b/utests/utest/compiler_insert_vector.cpp
new file mode 100644
index 0000000..c7c239f
--- /dev/null
+++ b/utests/utest/compiler_insert_vector.cpp
@@ -0,0 +1,18 @@
+#include "utest_helper.hpp"
+
+void compiler_insert_vector(void)
+{
+  const size_t n = 2048;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_insert_vector");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int) * 4, NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_insert_vector);
diff --git a/utests/utest/compiler_insn_selection_masked_min_max.cpp b/utests/utest/compiler_insn_selection_masked_min_max.cpp
new file mode 100644
index 0000000..6a2edcc
--- /dev/null
+++ b/utests/utest/compiler_insn_selection_masked_min_max.cpp
@@ -0,0 +1,42 @@
+#include "utest_helper.hpp"
+#include <algorithm>
+
+static void compiler_insn_selection_masked_min_max(void)
+{
+  const size_t n = 256;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_insn_selection_masked_min_max");
+  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * n);
+  for (uint32_t i = 0; i < n; ++i)
+    ((float*)buf_data[0])[i] = float(i);
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t), buf_data[0]);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  free(buf_data[0]);
+  buf_data[0] = NULL;
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  // Check result
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  float *dst = (float*)buf_data[1];
+  float *src = (float*)buf_data[0];
+  for (uint32_t i = 0; i < n; ++i) {
+    float cpu_dst;
+    if (i % 16 > 5)
+      cpu_dst = std::max(src[i], src[7]);
+    else
+      cpu_dst = std::min(src[i], src[10]);
+    OCL_ASSERT(dst[i] == cpu_dst);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_insn_selection_masked_min_max)
+
+
diff --git a/utests/utest/compiler_insn_selection_max.cpp b/utests/utest/compiler_insn_selection_max.cpp
new file mode 100644
index 0000000..8552b9f
--- /dev/null
+++ b/utests/utest/compiler_insn_selection_max.cpp
@@ -0,0 +1,37 @@
+#include "utest_helper.hpp"
+#include <algorithm>
+
+static void compiler_insn_selection_max(void)
+{
+  const size_t n = 8192 * 4;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_insn_selection_max");
+  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * n);
+  for (uint32_t i = 0; i < n; ++i)
+    ((float*)buf_data[0])[i] = float(i);
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t), buf_data[0]);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  free(buf_data[0]);
+  buf_data[0] = NULL;
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  // Check result
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  float *dst = (float*)buf_data[1];
+  float *src = (float*)buf_data[0];
+  for (uint32_t i = 0; i < n; ++i) {
+    OCL_ASSERT(dst[i] == std::max(src[i], src[0]));
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_insn_selection_max)
+
+
diff --git a/utests/utest/compiler_insn_selection_min.cpp b/utests/utest/compiler_insn_selection_min.cpp
new file mode 100644
index 0000000..f5f9d18
--- /dev/null
+++ b/utests/utest/compiler_insn_selection_min.cpp
@@ -0,0 +1,36 @@
+#include "utest_helper.hpp"
+#include <algorithm>
+
+static void compiler_insn_selection_min(void)
+{
+  const size_t n = 8192 * 4;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_insn_selection_min");
+  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * n);
+  for (uint32_t i = 0; i < n; ++i)
+    ((float*)buf_data[0])[i] = float(i);
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t), buf_data[0]);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  free(buf_data[0]);
+  buf_data[0] = NULL;
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  // Check result
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  float *dst = (float*)buf_data[1];
+  float *src = (float*)buf_data[0];
+  for (uint32_t i = 0; i < n; ++i) {
+    OCL_ASSERT(dst[i] == std::min(src[i], src[0]));
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_insn_selection_min)
+
diff --git a/utests/utest/compiler_integer_builtin.cpp b/utests/utest/compiler_integer_builtin.cpp
new file mode 100644
index 0000000..98ad51b
--- /dev/null
+++ b/utests/utest/compiler_integer_builtin.cpp
@@ -0,0 +1,9 @@
+#include "utest_helper.hpp"
+
+void compiler_integer_builtin(void)
+{
+  OCL_CREATE_KERNEL("compiler_integer_builtin");
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_integer_builtin);
+
diff --git a/utests/utest/compiler_integer_division.cpp b/utests/utest/compiler_integer_division.cpp
new file mode 100644
index 0000000..3898ae1
--- /dev/null
+++ b/utests/utest/compiler_integer_division.cpp
@@ -0,0 +1,44 @@
+#include "utest_helper.hpp"
+
+static void cpu(int global_id, int *src, int *dst, int x) {
+  dst[global_id] = src[global_id] / x;
+}
+
+void compiler_integer_division(void)
+{
+  const size_t n = 16;
+  int cpu_dst[16], cpu_src[16];
+  const int x = 7;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_integer_division");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(x), &x);
+  globals[0] = 16;
+  locals[0] = 16;
+
+  // Run random tests
+  for (uint32_t pass = 0; pass < 8; ++pass) {
+    OCL_MAP_BUFFER(0);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      cpu_src[i] = ((int32_t*)buf_data[0])[i] = rand() % 1000;
+    OCL_UNMAP_BUFFER(0);
+
+    // Run the kernel on GPU
+    OCL_NDRANGE(1);
+
+    // Run on CPU
+    for (int32_t i = 0; i <(int32_t) n; ++i) cpu(i, cpu_src, cpu_dst, x);
+
+    // Compare
+    OCL_MAP_BUFFER(1);
+    for (int32_t i = 0; i < 11; ++i)
+      OCL_ASSERT(((int32_t*)buf_data[1])[i] == cpu_dst[i]);
+    OCL_UNMAP_BUFFER(1);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_integer_division);
diff --git a/utests/utest/compiler_integer_remainder.cpp b/utests/utest/compiler_integer_remainder.cpp
new file mode 100644
index 0000000..100f464
--- /dev/null
+++ b/utests/utest/compiler_integer_remainder.cpp
@@ -0,0 +1,44 @@
+#include "utest_helper.hpp"
+
+static void cpu(int global_id, int *src, int *dst, int x) {
+  dst[global_id] = src[global_id] % x;
+}
+
+void compiler_integer_remainder(void)
+{
+  const size_t n = 16;
+  int cpu_dst[16], cpu_src[16];
+  const int x = 7;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_integer_remainder");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(x), &x);
+  globals[0] = 16;
+  locals[0] = 16;
+
+  // Run random tests
+  for (uint32_t pass = 0; pass < 8; ++pass) {
+    OCL_MAP_BUFFER(0);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      cpu_src[i] = ((int32_t*)buf_data[0])[i] = rand() % 16;
+    OCL_UNMAP_BUFFER(0);
+
+    // Run the kernel on GPU
+    OCL_NDRANGE(1);
+
+    // Run on CPU
+    for (int32_t i = 0; i <(int32_t) n; ++i) cpu(i, cpu_src, cpu_dst, x);
+
+    // Compare
+    OCL_MAP_BUFFER(1);
+    for (int32_t i = 0; i < 11; ++i)
+      OCL_ASSERT(((int32_t*)buf_data[1])[i] == cpu_dst[i]);
+    OCL_UNMAP_BUFFER(1);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_integer_remainder);
diff --git a/utests/utest/compiler_load_bool_imm.cpp b/utests/utest/compiler_load_bool_imm.cpp
new file mode 100644
index 0000000..d060daf
--- /dev/null
+++ b/utests/utest/compiler_load_bool_imm.cpp
@@ -0,0 +1,29 @@
+#include "utest_helper.hpp"
+
+static void compiler_load_bool_imm(void)
+{
+  const size_t n = 1024;
+  const size_t local_size = 16;
+  const int copiesPerWorkItem = 5;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_load_bool_imm");
+  OCL_CREATE_BUFFER(buf[0], 0, n * copiesPerWorkItem * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, local_size*copiesPerWorkItem*sizeof(int), NULL); // 16 x int
+  OCL_SET_ARG(2, sizeof(int), &copiesPerWorkItem); // 16 x int
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = local_size;
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+
+  // Check results
+  int *dst = (int*)buf_data[0];
+  for (uint32_t i = 0; i < n * copiesPerWorkItem; i++)
+    OCL_ASSERT(dst[i] == copiesPerWorkItem);
+  OCL_UNMAP_BUFFER(0);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_load_bool_imm);
diff --git a/utests/utest/compiler_local_memory_barrier.cpp b/utests/utest/compiler_local_memory_barrier.cpp
new file mode 100644
index 0000000..6c9c98e
--- /dev/null
+++ b/utests/utest/compiler_local_memory_barrier.cpp
@@ -0,0 +1,46 @@
+/* 
+ * Copyright © 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+
+#include "utest_helper.hpp"
+
+static void compiler_local_memory_barrier(void)
+{
+  const size_t n = 1024;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_local_memory_barrier");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, 64, NULL); // 16 x int
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+
+  // Check results
+  uint32_t *dst = (uint32_t*)buf_data[0];
+  for (uint32_t i = 0; i < n; i+=16)
+  for (uint32_t j = 0; j < 16; ++j)
+    OCL_ASSERT(dst[i+j] == 15-j);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_local_memory_barrier);
+
diff --git a/utests/utest/compiler_local_memory_barrier_2.cpp b/utests/utest/compiler_local_memory_barrier_2.cpp
new file mode 100644
index 0000000..4fa090b
--- /dev/null
+++ b/utests/utest/compiler_local_memory_barrier_2.cpp
@@ -0,0 +1,29 @@
+#include "utest_helper.hpp"
+
+static void compiler_local_memory_barrier_2(void)
+{
+  const size_t n = 16*1024;
+
+  globals[0] = n/2;
+  locals[0] = 256;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_local_memory_barrier_2");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  //OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, locals[0] * 2 * sizeof(uint32_t), NULL);
+
+  // Run the kernel
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+
+  // Check results
+  uint32_t *dst = (uint32_t*)buf_data[0];
+  for (uint32_t i = 0; i < n; i+=locals[0])
+    for (uint32_t j = 0; j < locals[0]; ++j)
+        OCL_ASSERT(dst[i+j] == locals[0] - 1 -j);
+  OCL_UNMAP_BUFFER(0);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_local_memory_barrier_2);
diff --git a/utests/utest/compiler_local_memory_barrier_wg64.cpp b/utests/utest/compiler_local_memory_barrier_wg64.cpp
new file mode 100644
index 0000000..0cb69f5
--- /dev/null
+++ b/utests/utest/compiler_local_memory_barrier_wg64.cpp
@@ -0,0 +1,46 @@
+/* 
+ * Copyright © 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+
+#include "utest_helper.hpp"
+
+static void compiler_local_memory_barrier_wg64(void)
+{
+  const size_t n = 1024;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_local_memory_barrier_wg64");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, 256, NULL); // 64 x int
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = 64;
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+
+  // Check results
+  uint32_t *dst = (uint32_t*)buf_data[0];
+  for (uint32_t i = 0; i < n; i+=64)
+  for (uint32_t j = 0; j < 64; ++j)
+    OCL_ASSERT(dst[i+j] == 63-j);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_local_memory_barrier_wg64);
+
diff --git a/utests/utest/compiler_local_memory_two_ptr.cpp b/utests/utest/compiler_local_memory_two_ptr.cpp
new file mode 100644
index 0000000..fde5533
--- /dev/null
+++ b/utests/utest/compiler_local_memory_two_ptr.cpp
@@ -0,0 +1,50 @@
+/* 
+ * Copyright © 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+
+#include "utest_helper.hpp"
+
+static void compiler_local_memory_two_ptr(void)
+{
+  const size_t n = 1024;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_local_memory_two_ptr");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, 64, NULL); // 16 x int
+  OCL_SET_ARG(2, 64, NULL); // 16 x int
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+
+  // Check results
+  int32_t *dst = (int32_t*)buf_data[0];
+  for (int32_t i = 0; i < (int) n; i+=16)
+  for (int32_t j = 0; j < 16; ++j) {
+    const int gid = i + j;
+    const int tid = j;
+    OCL_ASSERT(dst[i+j] == (gid&~0xf) + 15-tid + 15-tid);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_local_memory_two_ptr);
+
diff --git a/utests/utest/compiler_local_slm.cpp b/utests/utest/compiler_local_slm.cpp
new file mode 100644
index 0000000..48a072f
--- /dev/null
+++ b/utests/utest/compiler_local_slm.cpp
@@ -0,0 +1,34 @@
+#include "utest_helper.hpp"
+
+void compiler_local_slm(void)
+{
+  const size_t n = 32;
+  OCL_CREATE_KERNEL_FROM_FILE("compiler_local_slm", "compiler_local_slm");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+  for (uint32_t i = 0; i < n; ++i)
+//    std::cout << ((int32_t*)buf_data[0])[i] << std::endl;
+    OCL_ASSERT(((int32_t*)buf_data[0])[i] == (i%16 + 2 + 1+ i/16));
+  OCL_UNMAP_BUFFER(0);
+}
+
+void compiler_local_slm1(void)
+{
+  const size_t n = 2;
+  OCL_CREATE_KERNEL_FROM_FILE("compiler_local_slm", "compiler_local_slm1");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint64_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  globals[0] = 1;
+  locals[0] = 1;
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+  uint64_t * ptr = (uint64_t*)buf_data[0];
+  OCL_ASSERT((ptr[1] -ptr[0])  == 4);
+  OCL_UNMAP_BUFFER(0);
+}
+MAKE_UTEST_FROM_FUNCTION(compiler_local_slm);
+MAKE_UTEST_FROM_FUNCTION(compiler_local_slm1);
diff --git a/utests/utest/compiler_long.cpp b/utests/utest/compiler_long.cpp
new file mode 100644
index 0000000..b525694
--- /dev/null
+++ b/utests/utest/compiler_long.cpp
@@ -0,0 +1,60 @@
+#include <cstdint>
+#include <cstring>
+#include <iostream>
+#include "utest_helper.hpp"
+
+void compiler_long(void)
+{
+  const size_t n = 16;
+  int64_t src1[n], src2[n];
+
+  int64_t zero = 0;
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_long");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int64_t), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int64_t), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int64_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  OCL_SET_ARG(3, sizeof(cl_long), &zero);
+  globals[0] = n;
+  locals[0] = 16;
+
+  // Run random tests
+  src1[0] = -1L,                  src2[0] = -1L;
+  src1[1] = 0x8000000000000000UL, src2[1] = 0x8000000000000000UL;
+  src1[2] = 0x7FFFFFFFFFFFFFFFL,  src2[2] = 1L;
+  src1[3] = 0xFFFFFFFEL,          src2[3] = 1L;
+  src1[4] = 0x7FFFFFFFL,          src2[4] = 0x80000000L;
+  src1[5] = 0,                    src2[5] = 0;
+  src1[6] = 0,                    src2[6] = 1;
+  src1[7] = -2L,                  src2[7] = -1L;
+  src1[8] = 0,                    src2[8] = 0x8000000000000000UL;
+  for (int32_t i = 9; i < (int32_t) n; ++i) {
+    src1[i] = ((int64_t)rand() << 32) + rand();
+    src2[i] = ((int64_t)rand() << 32) + rand();
+  }
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  memcpy(buf_data[0], src1, sizeof(src1));
+  memcpy(buf_data[1], src2, sizeof(src2));
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+
+  // Run the kernel on GPU
+  OCL_NDRANGE(1);
+
+  // Compare
+  OCL_MAP_BUFFER(2);
+  for (int32_t i = 0; i < (int32_t) n; ++i) {
+    //printf("%lx\n", ((int64_t *)buf_data[2])[i]);
+    if (i < 5)
+      OCL_ASSERT(src1[i] + src2[i] == ((int64_t *)buf_data[2])[i]);
+    if (i > 5)
+      OCL_ASSERT(src1[i] - src2[i] == ((int64_t *)buf_data[2])[i]);
+  }
+  OCL_UNMAP_BUFFER(2);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_long);
diff --git a/utests/utest/compiler_long_2.cpp b/utests/utest/compiler_long_2.cpp
new file mode 100644
index 0000000..6c5da4b
--- /dev/null
+++ b/utests/utest/compiler_long_2.cpp
@@ -0,0 +1,51 @@
+#include <cstdint>
+#include <cstring>
+#include <iostream>
+#include "utest_helper.hpp"
+
+void compiler_long_2(void)
+{
+  const size_t n = 16;
+  int64_t src1[n], src2[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_long_2");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int64_t), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int64_t), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int64_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  // Run random tests
+  for (int32_t i = 0; i < (int32_t) n; ++i) {
+    src1[i] = ((int64_t)rand() << 32) + rand();
+    src2[i] = ((int64_t)rand() << 32) + rand();
+  }
+  src1[4] = 1;
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  memcpy(buf_data[0], src1, sizeof(src1));
+  memcpy(buf_data[1], src2, sizeof(src2));
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+
+  // Run the kernel on GPU
+  OCL_NDRANGE(1);
+
+  // Compare
+  OCL_MAP_BUFFER(2);
+  int64_t *dest = ((int64_t *)buf_data[2]);
+  //for (int32_t i = 0; i < (int32_t) n; ++i)
+  //  printf("%lx\n", dest[i]);
+  OCL_ASSERT(0xFEDCBA9876543210UL == (uint64_t)dest[0]);
+  OCL_ASSERT((src1[1] & src2[1]) == dest[1]);
+  OCL_ASSERT((src1[2] | src2[2]) == dest[2]);
+  OCL_ASSERT((src1[3] ^ src2[3]) == dest[3]);
+  OCL_ASSERT(0x1122334455667788L == dest[4]);
+  OCL_UNMAP_BUFFER(2);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_long_2);
diff --git a/utests/utest/compiler_long_asr.cpp b/utests/utest/compiler_long_asr.cpp
new file mode 100644
index 0000000..0a70a23
--- /dev/null
+++ b/utests/utest/compiler_long_asr.cpp
@@ -0,0 +1,41 @@
+#include <cstdint>
+#include <cstring>
+#include <iostream>
+#include "utest_helper.hpp"
+
+void compiler_long_asr(void)
+{
+  const size_t n = 64;
+  int64_t src[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_long_asr");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int64_t), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int64_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  // Run random tests
+  for (int32_t i = 0; i < (int32_t) n; ++i)
+    src[i] = (int64_t)1 << 63;
+  OCL_MAP_BUFFER(0);
+  memcpy(buf_data[0], src, sizeof(src));
+  OCL_UNMAP_BUFFER(0);
+
+  // Run the kernel on GPU
+  OCL_NDRANGE(1);
+
+  // Compare
+  OCL_MAP_BUFFER(1);
+  int64_t *dest = ((int64_t *)buf_data[1]);
+  for (int32_t i = 0; i < (int32_t) n; ++i)
+    if (i > 7)
+      OCL_ASSERT(dest[i] == src[i] >> i);
+    else
+      OCL_ASSERT(dest[i] == src[i] + 1);
+  OCL_UNMAP_BUFFER(2);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_long_asr);
diff --git a/utests/utest/compiler_long_cmp.cpp b/utests/utest/compiler_long_cmp.cpp
new file mode 100644
index 0000000..35d4c4f
--- /dev/null
+++ b/utests/utest/compiler_long_cmp.cpp
@@ -0,0 +1,122 @@
+#include <cstdint>
+#include <cstring>
+#include <iostream>
+#include "utest_helper.hpp"
+
+void compiler_long_cmp(void)
+{
+  const size_t n = 16;
+  int64_t src1[n], src2[n];
+
+  src1[0] = (int64_t)1 << 63, src2[0] = 0x7FFFFFFFFFFFFFFFll;
+  src1[1] = (int64_t)1 << 63, src2[1] = ((int64_t)1 << 63) | 1;
+  src1[2] = -1ll, src2[2] = 0;
+  src1[3] = ((int64_t)123 << 32) | 0x7FFFFFFF, src2[3] = ((int64_t)123 << 32) | 0x80000000;
+  src1[4] = 0x7FFFFFFFFFFFFFFFll, src2[4] = (int64_t)1 << 63;
+  src1[5] = ((int64_t)1 << 63) | 1, src2[5] = (int64_t)1 << 63;
+  src1[6] = 0, src2[6] = -1ll;
+  src1[7] = ((int64_t)123 << 32) | 0x80000000, src2[7] = ((int64_t)123 << 32) | 0x7FFFFFFF;
+  for(size_t i=8; i<n; i++) {
+    src1[i] = i;
+    src2[i] = i;
+  }
+
+  globals[0] = n;
+  locals[0] = 16;
+
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int64_t), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int64_t), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int64_t), NULL);
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  memcpy(buf_data[0], src1, sizeof(src1));
+  memcpy(buf_data[1], src2, sizeof(src2));
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+
+
+  OCL_CREATE_KERNEL_FROM_FILE("compiler_long_cmp", "compiler_long_cmp_l");
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(2);
+  for (int32_t i = 0; i < (int32_t) n; ++i) {
+    int64_t *dest = (int64_t *)buf_data[2];
+    int64_t x = (src1[i] < src2[i]) ? 3 : 4;
+    OCL_ASSERT(x == dest[i]);
+  }
+  OCL_UNMAP_BUFFER(2);
+  OCL_DESTROY_KERNEL_KEEP_PROGRAM(true);
+
+  OCL_CREATE_KERNEL_FROM_FILE("compiler_long_cmp", "compiler_long_cmp_le");
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(2);
+  for (int32_t i = 0; i < (int32_t) n; ++i) {
+    int64_t *dest = (int64_t *)buf_data[2];
+    int64_t x = (src1[i] <= src2[i]) ? 3 : 4;
+    OCL_ASSERT(x == dest[i]);
+  }
+  OCL_UNMAP_BUFFER(2);
+  OCL_DESTROY_KERNEL_KEEP_PROGRAM(true);
+
+  OCL_CREATE_KERNEL_FROM_FILE("compiler_long_cmp", "compiler_long_cmp_g");
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(2);
+  for (int32_t i = 0; i < (int32_t) n; ++i) {
+    int64_t *dest = (int64_t *)buf_data[2];
+    int64_t x = (src1[i] > src2[i]) ? 3 : 4;
+    OCL_ASSERT(x == dest[i]);
+  }
+  OCL_UNMAP_BUFFER(2);
+  OCL_DESTROY_KERNEL_KEEP_PROGRAM(true);
+
+  OCL_CREATE_KERNEL_FROM_FILE("compiler_long_cmp", "compiler_long_cmp_ge");
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(2);
+  for (int32_t i = 0; i < (int32_t) n; ++i) {
+    int64_t *dest = (int64_t *)buf_data[2];
+    int64_t x = (src1[i] >= src2[i]) ? 3 : 4;
+    OCL_ASSERT(x == dest[i]);
+  }
+  OCL_UNMAP_BUFFER(2);
+  OCL_DESTROY_KERNEL_KEEP_PROGRAM(true);
+
+  OCL_CREATE_KERNEL_FROM_FILE("compiler_long_cmp", "compiler_long_cmp_eq");
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(2);
+  for (int32_t i = 0; i < (int32_t) n; ++i) {
+    int64_t *dest = (int64_t *)buf_data[2];
+    int64_t x = (src1[i] == src2[i]) ? 3 : 4;
+    OCL_ASSERT(x == dest[i]);
+  }
+  OCL_UNMAP_BUFFER(2);
+  OCL_DESTROY_KERNEL_KEEP_PROGRAM(true);
+
+  OCL_CREATE_KERNEL_FROM_FILE("compiler_long_cmp", "compiler_long_cmp_neq");
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(2);
+  for (int32_t i = 0; i < (int32_t) n; ++i) {
+    int64_t *dest = (int64_t *)buf_data[2];
+    int64_t x = (src1[i] != src2[i]) ? 3 : 4;
+    OCL_ASSERT(x == dest[i]);
+  }
+  OCL_UNMAP_BUFFER(2);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_long_cmp);
diff --git a/utests/utest/compiler_long_convert.cpp b/utests/utest/compiler_long_convert.cpp
new file mode 100644
index 0000000..ada6926
--- /dev/null
+++ b/utests/utest/compiler_long_convert.cpp
@@ -0,0 +1,158 @@
+#include <cstdint>
+#include <cstring>
+#include <iostream>
+#include "utest_helper.hpp"
+
+// convert shorter integer to 64-bit integer
+void compiler_long_convert(void)
+{
+  const size_t n = 16;
+  char src1[n];
+  short src2[n];
+  int src3[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_long_convert");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(char), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(short), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[3], 0, n * sizeof(int64_t), NULL);
+  OCL_CREATE_BUFFER(buf[4], 0, n * sizeof(int64_t), NULL);
+  OCL_CREATE_BUFFER(buf[5], 0, n * sizeof(int64_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  OCL_SET_ARG(3, sizeof(cl_mem), &buf[3]);
+  OCL_SET_ARG(4, sizeof(cl_mem), &buf[4]);
+  OCL_SET_ARG(5, sizeof(cl_mem), &buf[5]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  // Run random tests
+  for (int32_t i = 0; i < (int32_t) n; ++i) {
+    src1[i] = -i;
+    src2[i] = -i;
+    src3[i] = -i;
+  }
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  OCL_MAP_BUFFER(2);
+  memcpy(buf_data[0], src1, sizeof(src1));
+  memcpy(buf_data[1], src2, sizeof(src2));
+  memcpy(buf_data[2], src3, sizeof(src3));
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+  OCL_UNMAP_BUFFER(2);
+
+  // Run the kernel on GPU
+  OCL_NDRANGE(1);
+
+  // Compare
+  OCL_MAP_BUFFER(3);
+  OCL_MAP_BUFFER(4);
+  OCL_MAP_BUFFER(5);
+  int64_t *dst1 = ((int64_t *)buf_data[3]);
+  int64_t *dst2 = ((int64_t *)buf_data[4]);
+  int64_t *dst3 = ((int64_t *)buf_data[5]);
+  for (int32_t i = 0; i < (int32_t) n; ++i) {
+    //printf("%lx %lx %lx\n", dst1[i], dst2[i], dst3[i]);
+    OCL_ASSERT(dst1[i] == -(int64_t)i);
+    OCL_ASSERT(dst2[i] == -(int64_t)i);
+    OCL_ASSERT(dst3[i] == -(int64_t)i);
+  }
+  OCL_UNMAP_BUFFER(3);
+  OCL_UNMAP_BUFFER(4);
+  OCL_UNMAP_BUFFER(5);
+}
+
+MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_long_convert, true);
+
+// convert 64-bit integer to shorter integer
+void compiler_long_convert_2(void)
+{
+  const size_t n = 16;
+  int64_t src[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL_FROM_FILE("compiler_long_convert", "compiler_long_convert_2");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(char), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(short), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[3], 0, n * sizeof(int64_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  OCL_SET_ARG(3, sizeof(cl_mem), &buf[3]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  // Run random tests
+  for (int32_t i = 0; i < (int32_t) n; ++i) {
+    src[i] = -i;
+  }
+  OCL_MAP_BUFFER(3);
+  memcpy(buf_data[3], src, sizeof(src));
+  OCL_UNMAP_BUFFER(3);
+
+  // Run the kernel on GPU
+  OCL_NDRANGE(1);
+
+  // Compare
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  OCL_MAP_BUFFER(2);
+  char *dst1 = ((char *)buf_data[0]);
+  short *dst2 = ((short *)buf_data[1]);
+  int *dst3 = ((int *)buf_data[2]);
+  for (int32_t i = 0; i < (int32_t) n; ++i) {
+    //printf("%x %x %x\n", dst1[i], dst2[i], dst3[i]);
+    OCL_ASSERT(dst1[i] == -i);
+    OCL_ASSERT(dst2[i] == -i);
+    OCL_ASSERT(dst3[i] == -i);
+  }
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+  OCL_UNMAP_BUFFER(2);
+}
+
+MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_long_convert_2, true);
+
+// convert 64-bit integer to 32-bit float
+void compiler_long_convert_to_float(void)
+{
+  const size_t n = 16;
+  int64_t src[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL_FROM_FILE("compiler_long_convert", "compiler_long_convert_to_float");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int64_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  // Run random tests
+  for (int32_t i = 0; i < (int32_t) n; ++i) {
+    src[i] = -(int64_t)i;
+  }
+  OCL_MAP_BUFFER(1);
+  memcpy(buf_data[1], src, sizeof(src));
+  OCL_UNMAP_BUFFER(1);
+
+  // Run the kernel on GPU
+  OCL_NDRANGE(1);
+
+  // Compare
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  float *dst = ((float *)buf_data[0]);
+  for (int32_t i = 0; i < (int32_t) n; ++i) {
+    //printf("%f\n", dst[i]);
+    OCL_ASSERT(dst[i] == src[i]);
+  }
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_long_convert_to_float);
diff --git a/utests/utest/compiler_long_mult.cpp b/utests/utest/compiler_long_mult.cpp
new file mode 100644
index 0000000..06070f7
--- /dev/null
+++ b/utests/utest/compiler_long_mult.cpp
@@ -0,0 +1,49 @@
+#include <cstdint>
+#include <cstring>
+#include <iostream>
+#include "utest_helper.hpp"
+
+void compiler_long_mult(void)
+{
+  const size_t n = 16;
+  int64_t src1[n], src2[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_long_mult");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int64_t), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int64_t), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int64_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  // Run random tests
+  for (int32_t i = 0; i < (int32_t) n; ++i) {
+    src1[i] = 0x77665544FFEEDDCCLL;
+    src2[i] = ((int64_t)rand() << 32) + rand();
+  }
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  memcpy(buf_data[0], src1, sizeof(src1));
+  memcpy(buf_data[1], src2, sizeof(src2));
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+
+  // Run the kernel on GPU
+  OCL_NDRANGE(1);
+
+  // Compare
+  OCL_MAP_BUFFER(2);
+  for (int32_t i = 0; i < (int32_t) n; ++i) {
+    //printf("%lx\n", ((int64_t *)buf_data[2])[i]);
+    if (i < 3)
+      OCL_ASSERT(src1[i] + src2[i] == ((int64_t *)buf_data[2])[i]);
+    else
+      OCL_ASSERT(src1[i] * src2[i] == ((int64_t *)buf_data[2])[i]);
+  }
+  OCL_UNMAP_BUFFER(2);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_long_mult);
diff --git a/utests/utest/compiler_long_shl.cpp b/utests/utest/compiler_long_shl.cpp
new file mode 100644
index 0000000..c8e4624
--- /dev/null
+++ b/utests/utest/compiler_long_shl.cpp
@@ -0,0 +1,41 @@
+#include <cstdint>
+#include <cstring>
+#include <iostream>
+#include "utest_helper.hpp"
+
+void compiler_long_shl(void)
+{
+  const size_t n = 64;
+  int64_t src[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_long_shl");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int64_t), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int64_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  // Run random tests
+  for (int32_t i = 0; i < (int32_t) n; ++i)
+    src[i] = 1;
+  OCL_MAP_BUFFER(0);
+  memcpy(buf_data[0], src, sizeof(src));
+  OCL_UNMAP_BUFFER(0);
+
+  // Run the kernel on GPU
+  OCL_NDRANGE(1);
+
+  // Compare
+  OCL_MAP_BUFFER(1);
+  int64_t *dest = ((int64_t *)buf_data[1]);
+  for (int32_t i = 0; i < (int32_t) n; ++i)
+    if (i > 7)
+      OCL_ASSERT(dest[i] == ((int64_t)1) << i);
+    else
+      OCL_ASSERT(dest[i] == src[i] + 1);
+  OCL_UNMAP_BUFFER(2);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_long_shl);
diff --git a/utests/utest/compiler_long_shr.cpp b/utests/utest/compiler_long_shr.cpp
new file mode 100644
index 0000000..e9fea6a
--- /dev/null
+++ b/utests/utest/compiler_long_shr.cpp
@@ -0,0 +1,41 @@
+#include <cstdint>
+#include <cstring>
+#include <iostream>
+#include "utest_helper.hpp"
+
+void compiler_long_shr(void)
+{
+  const size_t n = 64;
+  uint64_t src[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_long_shr");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint64_t), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint64_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  // Run random tests
+  for (int32_t i = 0; i < (int32_t) n; ++i)
+    src[i] = (uint64_t)1 << 63;
+  OCL_MAP_BUFFER(0);
+  memcpy(buf_data[0], src, sizeof(src));
+  OCL_UNMAP_BUFFER(0);
+
+  // Run the kernel on GPU
+  OCL_NDRANGE(1);
+
+  // Compare
+  OCL_MAP_BUFFER(1);
+  uint64_t *dest = ((uint64_t *)buf_data[1]);
+  for (int32_t i = 0; i < (int32_t) n; ++i)
+    if (i > 7)
+      OCL_ASSERT(dest[i] == src[i] >> i);
+    else
+      OCL_ASSERT(dest[i] == src[i] + 1);
+  OCL_UNMAP_BUFFER(2);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_long_shr);
diff --git a/utests/utest/compiler_lower_return0.cpp b/utests/utest/compiler_lower_return0.cpp
new file mode 100644
index 0000000..0e9dbd0
--- /dev/null
+++ b/utests/utest/compiler_lower_return0.cpp
@@ -0,0 +1,54 @@
+#include "utest_helper.hpp"
+
+static void compiler_lower_return0(void)
+{
+  const size_t n = 32;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_lower_return0");
+  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * n);
+  for (uint32_t i = 0; i < n; ++i) ((uint32_t*)buf_data[0])[i] = 2;
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t), buf_data[0]);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  free(buf_data[0]);
+  buf_data[0] = NULL;
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  // First control flow
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (int32_t i = 0; i < 32; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == i);
+
+  // Second control flow
+  for (uint32_t i = 0; i < n; ++i) ((int32_t*)buf_data[0])[i] = -2;
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < 32; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == -2);
+
+  // Third control flow
+  for (uint32_t i = 0; i < 8; ++i) ((int32_t*)buf_data[0])[i] = 2;
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (int32_t i = 0; i < 8; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == i);
+  for (int32_t i = 8; i < 32; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == -2);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_lower_return0);
+
+
diff --git a/utests/utest/compiler_lower_return1.cpp b/utests/utest/compiler_lower_return1.cpp
new file mode 100644
index 0000000..b4f1fe3
--- /dev/null
+++ b/utests/utest/compiler_lower_return1.cpp
@@ -0,0 +1,47 @@
+#include "utest_helper.hpp"
+
+static void compiler_lower_return1(void)
+{
+  const size_t n = 32;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_lower_return1");
+  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * n);
+  for (uint32_t i = 0; i < n; ++i) ((uint32_t*)buf_data[0])[i] = 2;
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t), buf_data[0]);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  free(buf_data[0]);
+  buf_data[0] = NULL;
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = 16;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  // First control flow
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (int32_t i = 0; i < 11; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == i);
+  for (int32_t i = 11; i < 16; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 2);
+
+  // Second control flow
+  for (uint32_t i = 0; i < 4; ++i) ((int32_t*)buf_data[0])[i] = -2;
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (int32_t i = 0; i < 4; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == -2);
+  for (int32_t i = 4; i < 11; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == i);
+  for (int32_t i = 11; i < 16; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 2);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_lower_return1);
+
diff --git a/utests/utest/compiler_lower_return2.cpp b/utests/utest/compiler_lower_return2.cpp
new file mode 100644
index 0000000..1e34036
--- /dev/null
+++ b/utests/utest/compiler_lower_return2.cpp
@@ -0,0 +1,48 @@
+#include "utest_helper.hpp"
+
+static void cpu(int global_id, int *src, int *dst) {
+  const int id = global_id;
+  dst[id] = id;
+  while (dst[id] > src[id]) {
+    if (dst[id] > 10) return;
+    dst[id]--;
+  }
+  dst[id] += 2;
+}
+
+static void compiler_lower_return2(void)
+{
+  const size_t n = 16;
+  int cpu_dst[16], cpu_src[16];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_lower_return2");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = 16;
+  locals[0] = 16;
+
+  for (uint32_t pass = 0; pass < 8; ++pass) {
+    OCL_MAP_BUFFER(0);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      cpu_src[i] = ((int32_t*)buf_data[0])[i] = rand() % 16;
+    OCL_UNMAP_BUFFER(0);
+
+    // Run the kernel on GPU
+    OCL_NDRANGE(1);
+
+    // Run on CPU
+    for (int32_t i = 0; i <(int32_t) n; ++i) cpu(i, cpu_src, cpu_dst);
+
+    // Compare
+    OCL_MAP_BUFFER(1);
+    for (int32_t i = 0; i < 11; ++i)
+      OCL_ASSERT(((int32_t*)buf_data[1])[i] == cpu_dst[i]);
+    OCL_UNMAP_BUFFER(1);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_lower_return2);
+
diff --git a/utests/utest/compiler_mad24.cpp b/utests/utest/compiler_mad24.cpp
new file mode 100644
index 0000000..a3890a1
--- /dev/null
+++ b/utests/utest/compiler_mad24.cpp
@@ -0,0 +1,41 @@
+#include "utest_helper.hpp"
+
+void compiler_mad24(void)
+{
+  const int n = 32;
+  int src1[n], src2[n], src3[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_mad24");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[3], 0, n * sizeof(int), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  OCL_SET_ARG(3, sizeof(cl_mem), &buf[3]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  OCL_MAP_BUFFER(2);
+  for (int i = 0; i < n; ++i) {
+    src1[i] = ((int*)buf_data[0])[i] = rand();
+    src2[i] = ((int*)buf_data[1])[i] = rand();
+    src3[i] = ((int*)buf_data[2])[i] = rand();
+  }
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+  OCL_UNMAP_BUFFER(2);
+
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(3);
+  for (int i = 0; i < n; ++i)
+    OCL_ASSERT(((int*)buf_data[3])[i] == ((src1[i] << 8) >> 8) * ((src2[i] << 8) >> 8) + src3[i]);
+  OCL_UNMAP_BUFFER(3);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_mad24);
diff --git a/utests/utest/compiler_mad_hi.cpp b/utests/utest/compiler_mad_hi.cpp
new file mode 100644
index 0000000..6f66e7f
--- /dev/null
+++ b/utests/utest/compiler_mad_hi.cpp
@@ -0,0 +1,46 @@
+#include "utest_helper.hpp"
+
+void compiler_mad_hi(void)
+{
+  const int n = 32;
+  int src1[n], src2[n], src3[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_mad_hi");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[3], 0, n * sizeof(int), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  OCL_SET_ARG(3, sizeof(cl_mem), &buf[3]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  OCL_MAP_BUFFER(2);
+  for (int i = 0; i < n; ++i) {
+    src1[i] = ((int*)buf_data[0])[i] = rand();
+    src2[i] = ((int*)buf_data[1])[i] = rand();
+    src3[i] = ((int*)buf_data[2])[i] = rand();
+  }
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+  OCL_UNMAP_BUFFER(2);
+
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(3);
+  for (int i = 0; i < n; ++i) {
+    long long a = src1[i];
+    a *= src2[i];
+    a >>= 32;
+    a += src3[i];
+    OCL_ASSERT(((int*)buf_data[3])[i] == (int)a);
+  }
+  OCL_UNMAP_BUFFER(3);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_mad_hi);
diff --git a/utests/utest/compiler_mandelbrot.cpp b/utests/utest/compiler_mandelbrot.cpp
new file mode 100644
index 0000000..7758dae
--- /dev/null
+++ b/utests/utest/compiler_mandelbrot.cpp
@@ -0,0 +1,48 @@
+/* 
+ * Copyright © 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+
+#include "utest_helper.hpp"
+
+static int *dst = NULL;
+static const size_t w = 256;
+static const size_t h = 256;
+
+static void compiler_mandelbrot(void)
+{
+  const size_t global[2] = {w, h};
+  const size_t local[2] = {16, 1};
+  const size_t sz = w * h * sizeof(char[4]);
+
+  OCL_CREATE_KERNEL("compiler_mandelbrot");
+
+  OCL_CREATE_BUFFER(buf[0], 0, sz, NULL);
+  OCL_CALL (clSetKernelArg, kernel, 0, sizeof(cl_mem), &buf[0]);
+  OCL_CALL (clEnqueueNDRangeKernel, queue, kernel, 2, NULL, global, local, 0, NULL, NULL);
+  OCL_MAP_BUFFER(0);
+  dst = (int *) buf_data[0];
+
+  /* Save the image (for debug purpose) */
+  cl_write_bmp(dst, w, h, "compiler_mandelbrot.bmp");
+
+  /* Compare with the golden image */
+  OCL_CHECK_IMAGE(dst, w, h, "compiler_mandelbrot_ref.bmp");
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_mandelbrot);
+
diff --git a/utests/utest/compiler_mandelbrot_alternate.cpp b/utests/utest/compiler_mandelbrot_alternate.cpp
new file mode 100644
index 0000000..2e5d59f
--- /dev/null
+++ b/utests/utest/compiler_mandelbrot_alternate.cpp
@@ -0,0 +1,54 @@
+/* 
+ * Copyright © 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+
+#include "utest_helper.hpp"
+
+static int *dst = NULL;
+static const size_t w = 256;
+static const size_t h = 256;
+static const float criterium = 4.f;
+
+static void compiler_mandelbrot_alternate(void)
+{
+  const size_t global[2] = {w, h};
+  const size_t local[2] = {16, 1};
+  const size_t sz = w * h * sizeof(char[4]);
+  const float rcpWidth = 1.f / float(w);
+  const float rcpHeight = 1.f / float(h);
+
+  OCL_CREATE_KERNEL("compiler_mandelbrot_alternate");
+
+  OCL_CREATE_BUFFER(buf[0], 0, sz, NULL);
+  OCL_CALL (clSetKernelArg, kernel, 0, sizeof(cl_mem), &buf[0]);
+  OCL_CALL (clSetKernelArg, kernel, 1, sizeof(float), &rcpWidth);
+  OCL_CALL (clSetKernelArg, kernel, 2, sizeof(float), &rcpHeight);
+  OCL_CALL (clSetKernelArg, kernel, 3, sizeof(float), &criterium);
+  OCL_CALL (clEnqueueNDRangeKernel, queue, kernel, 2, NULL, global, local, 0, NULL, NULL);
+  OCL_MAP_BUFFER(0);
+  dst = (int *) buf_data[0];
+
+  /* Save the image (for debug purpose) */
+  cl_write_bmp(dst, w, h, "compiler_mandelbrot_alternate.bmp");
+
+  /* Compare with the golden image */
+  OCL_CHECK_IMAGE(dst, w, h, "compiler_mandelbrot_alternate_ref.bmp");
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_mandelbrot_alternate);
+
diff --git a/utests/utest/compiler_math.cpp b/utests/utest/compiler_math.cpp
new file mode 100644
index 0000000..e0c4487
--- /dev/null
+++ b/utests/utest/compiler_math.cpp
@@ -0,0 +1,89 @@
+#include "utest_helper.hpp"
+#include <cmath>
+#include <algorithm>
+
+static void cpu_compiler_math(float *dst, float *src, int i)
+{
+  const float x = src[i];
+  const float PI = 3.141592653589793f;
+  switch (i) {
+    case 0: dst[i] = cosf(x); break;
+    case 1: dst[i] = sinf(x); break;
+    case 2: dst[i] = log2f(x); break;
+    case 3: dst[i] = sqrtf(x); break;
+    case 4: dst[i] = 1.f/ sqrtf(x); break;
+    case 5: dst[i] = 1.f / x; break;
+    case 6: dst[i] = tanf(x); break;
+    case 7: dst[i] = powf(x, 0.3333333333333333333f); break;
+    case 8: dst[i] = ceilf(x); break;
+    case 9: dst[i] = cosf(PI * x); break;
+    case 10: dst[i] = powf(2, x); break;
+    case 11: dst[i] = powf(10, x); break;
+    case 12: dst[i] = expf(x) - 1; break;
+    case 13: dst[i] = logf(x + 1); break;
+    case 14: dst[i] = floorf(log2f(x)); break;
+    case 15: dst[i] = sinf(PI * x); break;
+    case 16: dst[i] = tanf(PI * x); break;
+    case 17: dst[i] = 2 * roundf(x / 2); break;
+    case 18: dst[i] = sinhf(x); break;
+    case 19: dst[i] = coshf(x); break;
+    case 20: dst[i] = tanhf(x); break;
+    case 21: dst[i] = asinhf(x); break;
+    case 22: dst[i] = acoshf(x); break;
+    case 23: dst[i] = atanhf(x); break;
+    case 24: dst[i] = asinf(x); break;
+    case 25: dst[i] = acosf(x); break;
+    case 26: dst[i] = atanf(x); break;
+    case 27: dst[i] = asinf(x) / PI; break;
+    case 28: dst[i] = acosf(x) / PI; break;
+    case 29: dst[i] = atanf(x) / PI; break;
+    case 30: dst[i] = erff(x); break;
+    case 31: dst[i] = nanf(""); break;
+    default: dst[i] = 1.f; break;
+  };
+}
+
+static void compiler_math(void)
+{
+  const size_t n = 32;
+  float cpu_dst[32], cpu_src[32];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_math");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = 16;
+  locals[0] = 16;
+
+  int j;
+  for(j = 0; j < 1000; j ++) {
+    OCL_MAP_BUFFER(1);
+    for (uint32_t i = 0; i < 32; ++i)
+      cpu_src[i] = ((float*)buf_data[1])[i] = .1f * (rand() & 15);
+    OCL_UNMAP_BUFFER(1);
+    OCL_NDRANGE(1);
+
+    OCL_MAP_BUFFER(0);
+    OCL_MAP_BUFFER(1);
+    for (int i = 0; i < 16; ++i)
+      cpu_compiler_math(cpu_dst, cpu_src, i);
+    for (int i = 0; i < 16; ++i) {
+      const float cpu = cpu_dst[i];
+      const float gpu = ((float*)buf_data[0])[i];
+      if (isinf(cpu))
+        OCL_ASSERT(isinf(gpu));
+      else if (isnan(cpu))
+        OCL_ASSERT(isnan(gpu));
+      else
+        OCL_ASSERT(fabs(gpu-cpu) < 1e-3f);
+    }
+    OCL_UNMAP_BUFFER(0);
+    OCL_UNMAP_BUFFER(1);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_math)
+
+
diff --git a/utests/utest/compiler_math_2op.cpp b/utests/utest/compiler_math_2op.cpp
new file mode 100644
index 0000000..454967d
--- /dev/null
+++ b/utests/utest/compiler_math_2op.cpp
@@ -0,0 +1,80 @@
+#include "utest_helper.hpp"
+#include <cmath>
+#include <algorithm>
+
+static float rnde(float v) {
+  if(v - floorf(v) > 0.5f)
+    return floorf(v) + 1;
+  if(v - floorf(v) < 0.5f)
+    return floorf(v);
+  if((int)(floorf(v)) & 1)
+    return floorf(v) + 1;
+  return floorf(v);
+}
+
+static void cpu_compiler_math(float *dst, float *src1, float *src2, int i)
+{
+  const float x = src1[i], y = src2[i];
+  switch (i) {
+    case 0: dst[i] = x / y; break;
+    case 1: dst[i] = x > y ? x - y : 0; break;
+    case 2: dst[i] = fminf(x - floorf(x), 0x1.FFFFFep-1F); break;
+    case 3: dst[i] = sqrtf(x*x + y*y); break;
+    case 4: dst[i] = x * powf(2, (int)y); break;
+    case 5: dst[i] = powf(x, (int)y); break;
+    case 6: dst[i] = x - rnde(x/y)*y; break;
+    case 7: dst[i] = powf(x, 1.f/(int)(y+1)); break;
+    case 8: dst[i] = x * y < 0 ? -x : x; break;
+    case 9: dst[i] = fabsf(x) > fabsf(y) ? x : fabsf(y) > fabsf(x) ? y : fmaxf(x, y); break;
+    case 10: dst[i] = fabsf(x) < fabsf(y) ? x : fabsf(y) < fabsf(x) ? y : fminf(x, y); break;
+    default: dst[i] = 1.f; break;
+  };
+}
+
+static void compiler_math_2op(void)
+{
+  const size_t n = 32;
+  float cpu_dst[32], cpu_src1[32], cpu_src2[32];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_math_2op");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(float), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  globals[0] = 16;
+  locals[0] = 16;
+
+  int j;
+  for(j = 0; j < 1000; j ++) {
+    OCL_MAP_BUFFER(1);
+    OCL_MAP_BUFFER(2);
+    for (uint32_t i = 0; i < 32; ++i) {
+      cpu_src1[i] = ((float*)buf_data[1])[i] = .1f * (rand() & 15);
+      cpu_src2[i] = ((float*)buf_data[2])[i] = .1f * (rand() & 15);
+    }
+    OCL_UNMAP_BUFFER(1);
+    OCL_UNMAP_BUFFER(2);
+    OCL_NDRANGE(1);
+
+    for (int i = 0; i < 16; ++i)
+      cpu_compiler_math(cpu_dst, cpu_src1, cpu_src2, i);
+    OCL_MAP_BUFFER(0);
+    for (int i = 0; i < 16; ++i) {
+      const float cpu = cpu_dst[i];
+      const float gpu = ((float*)buf_data[0])[i];
+      if (isinf(cpu))
+        OCL_ASSERT(isinf(gpu));
+      else if (isnan(cpu))
+        OCL_ASSERT(isnan(gpu));
+      else {
+        OCL_ASSERT(fabs(gpu-cpu) < 1e-3f);
+      }
+    }
+    OCL_UNMAP_BUFFER(0);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_math_2op)
diff --git a/utests/utest/compiler_math_3op.cpp b/utests/utest/compiler_math_3op.cpp
new file mode 100644
index 0000000..a382b0a
--- /dev/null
+++ b/utests/utest/compiler_math_3op.cpp
@@ -0,0 +1,64 @@
+#include "utest_helper.hpp"
+#include <cmath>
+#include <algorithm>
+
+static void cpu_compiler_math(float *dst, float *src1, float *src2, float *src3, int i)
+{
+  const float x = src1[i], y = src2[i], z = src3[i];
+  switch (i) {
+    case 0: dst[i] = x * y + z; break;
+    case 1: dst[i] = x * y + z; break;
+    default: dst[i] = 1.f; break;
+  };
+}
+
+static void compiler_math_3op(void)
+{
+  const size_t n = 32;
+  float cpu_dst[32], cpu_src1[32], cpu_src2[32], cpu_src3[32];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_math_3op");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[3], 0, n * sizeof(float), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  OCL_SET_ARG(3, sizeof(cl_mem), &buf[3]);
+  globals[0] = 16;
+  locals[0] = 16;
+
+  for (int j = 0; j < 1000; j ++) {
+    OCL_MAP_BUFFER(1);
+    OCL_MAP_BUFFER(2);
+    OCL_MAP_BUFFER(3);
+    for (uint32_t i = 0; i < 32; ++i) {
+      cpu_src1[i] = ((float*)buf_data[1])[i] = .1f * (rand() & 15);
+      cpu_src2[i] = ((float*)buf_data[2])[i] = .1f * (rand() & 15);
+      cpu_src3[i] = ((float*)buf_data[3])[i] = .1f * (rand() & 15);
+    }
+    OCL_UNMAP_BUFFER(1);
+    OCL_UNMAP_BUFFER(2);
+    OCL_UNMAP_BUFFER(3);
+    OCL_NDRANGE(1);
+
+    for (int i = 0; i < 16; ++i)
+      cpu_compiler_math(cpu_dst, cpu_src1, cpu_src2, cpu_src3, i);
+    OCL_MAP_BUFFER(0);
+    for (int i = 0; i < 16; ++i) {
+      const float cpu = cpu_dst[i];
+      const float gpu = ((float*)buf_data[0])[i];
+      if (isinf(cpu))
+        OCL_ASSERT(isinf(gpu));
+      else if (isnan(cpu))
+        OCL_ASSERT(isnan(gpu));
+      else
+        OCL_ASSERT(fabs(gpu-cpu) < 1e-3f);
+    }
+    OCL_UNMAP_BUFFER(0);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_math_3op)
diff --git a/utests/utest/compiler_math_builtin.cpp b/utests/utest/compiler_math_builtin.cpp
new file mode 100644
index 0000000..0577e04
--- /dev/null
+++ b/utests/utest/compiler_math_builtin.cpp
@@ -0,0 +1,9 @@
+#include "utest_helper.hpp"
+
+void compiler_math_builtin(void)
+{
+  OCL_CREATE_KERNEL("compiler_math_builtin");
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_math_builtin);
+
diff --git a/utests/utest/compiler_math_constants.cpp b/utests/utest/compiler_math_constants.cpp
new file mode 100644
index 0000000..5ec97c9
--- /dev/null
+++ b/utests/utest/compiler_math_constants.cpp
@@ -0,0 +1,9 @@
+#include "utest_helper.hpp"
+
+void compiler_math_constants(void)
+{
+  OCL_CREATE_KERNEL("compiler_math_constants");
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_math_constants);
+
diff --git a/utests/utest/compiler_mem_fence.cpp b/utests/utest/compiler_mem_fence.cpp
new file mode 100644
index 0000000..ad7e2f6
--- /dev/null
+++ b/utests/utest/compiler_mem_fence.cpp
@@ -0,0 +1,9 @@
+/* test OpenCL 1.1 Synchronization, explicit memory fence (section 6.11.9, 6.11.10) */
+#include "utest_helper.hpp"
+
+void compiler_mem_fence(void)
+{
+  OCL_CREATE_KERNEL("compiler_mem_fence");
+  OCL_NDRANGE(1);
+}
+
diff --git a/utests/utest/compiler_movforphi_undef.cpp b/utests/utest/compiler_movforphi_undef.cpp
new file mode 100644
index 0000000..50526e8
--- /dev/null
+++ b/utests/utest/compiler_movforphi_undef.cpp
@@ -0,0 +1,51 @@
+#include "utest_helper.hpp"
+
+static void compiler_movforphi_undef(void)
+{
+  const size_t w = 16;
+  const size_t h = 16;
+  cl_sampler sampler;
+  cl_image_format format;
+
+  // Setup kernel and images
+  OCL_CREATE_KERNEL("test_movforphi_undef");
+  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * w * h);
+  for (uint32_t j = 0; j < h; ++j)
+    for (uint32_t i = 0; i < w; i++)
+      ((uint32_t*)buf_data[0])[j * w + i] = j * w + i;
+
+  format.image_channel_order = CL_RGBA;
+  format.image_channel_data_type = CL_UNSIGNED_INT8;
+  OCL_CREATE_IMAGE2D(buf[0], CL_MEM_COPY_HOST_PTR, &format, w, h, w * sizeof(uint32_t), buf_data[0]);
+
+  OCL_CREATE_IMAGE2D(buf[1], 0, &format, w, h, 0, NULL);
+  OCL_CREATE_SAMPLER(sampler, CL_ADDRESS_REPEAT, CL_FILTER_NEAREST);
+  free(buf_data[0]);
+  buf_data[0] = NULL;
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(sampler), &sampler);
+  globals[0] = w;
+  globals[1] = h;
+  locals[0] = 16;
+  locals[1] = 16;
+  OCL_NDRANGE(2);
+
+  // Check result
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  // Just compare the initial 2 data is enough for this case, as the initial 2 data must in the first
+  // tile box and we can just get the correct coords.
+  for (uint32_t j = 0; j < 1; ++j)
+    for (uint32_t i = 0; i < 3; i++)
+    {
+      if (i == 0)
+        OCL_ASSERT(((uint32_t*)buf_data[0])[j * w + i + 1] == ((uint32_t*)buf_data[1])[j * w + i]);
+    }
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_movforphi_undef);
diff --git a/utests/utest/compiler_mul24.cpp b/utests/utest/compiler_mul24.cpp
new file mode 100644
index 0000000..8a36947
--- /dev/null
+++ b/utests/utest/compiler_mul24.cpp
@@ -0,0 +1,36 @@
+#include "utest_helper.hpp"
+
+void compiler_mul24(void)
+{
+  const int n = 32;
+  int src1[n], src2[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_mul24");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (int i = 0; i < n; ++i) {
+    src1[i] = ((int*)buf_data[0])[i] = rand();
+    src2[i] = ((int*)buf_data[1])[i] = rand();
+  }
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(2);
+  for (int i = 0; i < n; ++i)
+    OCL_ASSERT(((int*)buf_data[2])[i] == ((src1[i] << 8) >> 8) * ((src2[i] << 8) >> 8));
+  OCL_UNMAP_BUFFER(2);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_mul24);
diff --git a/utests/utest/compiler_mul_hi.cpp b/utests/utest/compiler_mul_hi.cpp
new file mode 100644
index 0000000..5ea6389
--- /dev/null
+++ b/utests/utest/compiler_mul_hi.cpp
@@ -0,0 +1,40 @@
+#include "utest_helper.hpp"
+
+void compiler_mul_hi(void)
+{
+  const int n = 32;
+  int src1[n], src2[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_mul_hi");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (int i = 0; i < n; ++i) {
+    src1[i] = ((int*)buf_data[0])[i] = rand();
+    src2[i] = ((int*)buf_data[1])[i] = rand();
+  }
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(2);
+  for (int i = 0; i < n; ++i) {
+    long long a = src1[i];
+    a *= src2[i];
+    a >>= 32;
+    OCL_ASSERT(((int*)buf_data[2])[i] == (int)a);
+  }
+  OCL_UNMAP_BUFFER(2);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_mul_hi);
diff --git a/utests/utest/compiler_multiple_kernels.cpp b/utests/utest/compiler_multiple_kernels.cpp
new file mode 100644
index 0000000..09b4349
--- /dev/null
+++ b/utests/utest/compiler_multiple_kernels.cpp
@@ -0,0 +1,8 @@
+#include "utest_helper.hpp"
+
+static void compiler_multiple_kernels(void)
+{
+	OCL_CREATE_KERNEL_FROM_FILE("compiler_multiple_kernels", "first_kernel");
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_multiple_kernels);
\ No newline at end of file
diff --git a/utests/utest/compiler_preprocessor_macros.cpp b/utests/utest/compiler_preprocessor_macros.cpp
new file mode 100644
index 0000000..3cd0272
--- /dev/null
+++ b/utests/utest/compiler_preprocessor_macros.cpp
@@ -0,0 +1,9 @@
+#include "utest_helper.hpp"
+
+void compiler_preprocessor_macros(void)
+{
+  OCL_CREATE_KERNEL("compiler_preprocessor_macros");
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_preprocessor_macros);
+
diff --git a/utests/utest/compiler_private_data_overflow.cpp b/utests/utest/compiler_private_data_overflow.cpp
new file mode 100644
index 0000000..0fa30a0
--- /dev/null
+++ b/utests/utest/compiler_private_data_overflow.cpp
@@ -0,0 +1,15 @@
+#include "utest_helper.hpp"
+
+void compiler_private_data_overflow(void)
+{
+	OCL_CREATE_KERNEL( "compiler_private_data_overflow" );
+	OCL_CREATE_BUFFER( buf[0], 0, sizeof(cl_int4), NULL );
+	OCL_SET_ARG( 0, sizeof(cl_mem), &buf[0] );
+	globals[0] = 64;
+	locals[0] = 32;
+	OCL_NDRANGE(1);
+	OCL_MAP_BUFFER(0);
+	OCL_ASSERT( ((uint32_t *)buf_data[0])[0] == 0 );
+	OCL_UNMAP_BUFFER(0);
+}
+MAKE_UTEST_FROM_FUNCTION( compiler_private_data_overflow );
diff --git a/utests/utest/compiler_program_objects.cpp b/utests/utest/compiler_program_objects.cpp
new file mode 100644
index 0000000..34ae42a
--- /dev/null
+++ b/utests/utest/compiler_program_objects.cpp
@@ -0,0 +1,64 @@
+/* test OpenCL 1.1 Program Objects (section 5.6)
+ * test creating program objects,
+ *      build program executable,
+ *      build options
+ *      query program objects */
+
+#include "utest_helper.hpp"
+
+void compiler_program_objects(void)
+{
+    OCL_CREATE_KERNEL("empty"); // set up global vars
+    OCL_CALL(clRetainProgram, program);
+    OCL_CALL(clReleaseProgram, program);
+    OCL_CALL(clBuildProgram,
+                 program,
+                 1,
+                 &device,
+                 "-Dname -Dname2=def -ldir "
+                 "-cl-opt-disable -cl-strict-aliasing -cl-mad-enable -cl-no-signed-zeros "
+                 "-cl-finite-math-only -cl-fast-relaxed-math -cl-unsafe-math-optimizations "
+                 "-cl-single-precision-constant -cl-denorms-are-zero "
+                 "-w -Werror -cl-std=CL1.1",
+                 NULL,
+                 NULL);
+    const int pi[] = {CL_PROGRAM_REFERENCE_COUNT,
+                      CL_PROGRAM_CONTEXT,
+                      CL_PROGRAM_NUM_DEVICES,
+                      CL_PROGRAM_DEVICES,
+                      CL_PROGRAM_SOURCE,
+                      CL_PROGRAM_BINARY_SIZES,
+                      CL_PROGRAM_BINARIES,};
+    const int pbi[] = {CL_PROGRAM_BUILD_STATUS,
+                       CL_PROGRAM_BUILD_OPTIONS,
+                       CL_PROGRAM_BUILD_LOG,};
+    char param_value[1024];
+    size_t pv_size;
+    int i;
+    for(i=0; i<sizeof(pi) / sizeof(pi[0]); i++)
+        OCL_CALL(clGetProgramInfo,
+                      program,
+                      pi[i],
+                      sizeof(param_value),
+                      param_value,
+                      &pv_size);
+    for(i=0; i<sizeof(pbi) / sizeof(pbi[0]); i++)
+        OCL_CALL(clGetProgramBuildInfo,
+                      program,
+                      device,
+                      pbi[i],
+                      sizeof(param_value),
+                      param_value,
+                      &pv_size);
+    std::cout<<platform<<' '
+             <<device<<' '
+             <<ctx<<' '
+             <<program<<' '
+             <<kernel<<' '
+             <<queue<<std::endl;
+
+    puts("Test clUnloadCompiler");
+    OCL_CALL(clUnloadCompiler);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_program_objects);
diff --git a/utests/utest/compiler_radians.cpp b/utests/utest/compiler_radians.cpp
new file mode 100644
index 0000000..882477e
--- /dev/null
+++ b/utests/utest/compiler_radians.cpp
@@ -0,0 +1,32 @@
+#include "utest_helper.hpp"
+
+void compiler_radians(void)
+{
+  const int n = 32;
+  float src[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_radians");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  OCL_MAP_BUFFER(0);
+  for (int i = 0; i < n; ++i) {
+    src[i] = ((float *)buf_data[0])[i] = rand() * 0.01f;
+  }
+  OCL_UNMAP_BUFFER(0);
+
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(1);
+  for (int i = 0; i < n; ++i) {
+    OCL_ASSERT(((float *)buf_data[1])[i] == src[i] * (3.141592653589793F / 180));
+  }
+  OCL_UNMAP_BUFFER(1);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_radians);
diff --git a/utests/utest/compiler_relational_builtin.cpp b/utests/utest/compiler_relational_builtin.cpp
new file mode 100644
index 0000000..a9a6eb5
--- /dev/null
+++ b/utests/utest/compiler_relational_builtin.cpp
@@ -0,0 +1,9 @@
+#include "utest_helper.hpp"
+
+void compiler_relational_builtin(void)
+{
+  OCL_CREATE_KERNEL("compiler_relational_builtin");
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_relational_builtin);
+
diff --git a/utests/utest/compiler_rhadd.cpp b/utests/utest/compiler_rhadd.cpp
new file mode 100644
index 0000000..b25c788
--- /dev/null
+++ b/utests/utest/compiler_rhadd.cpp
@@ -0,0 +1,41 @@
+#include "utest_helper.hpp"
+
+void compiler_rhadd(void)
+{
+  const int n = 32;
+  int src1[n], src2[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_rhadd");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (int i = 0; i < n; ++i) {
+    src1[i] = ((int*)buf_data[0])[i] = rand();
+    src2[i] = ((int*)buf_data[1])[i] = rand();
+  }
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(2);
+  for (int i = 0; i < n; ++i) {
+    long long a = src1[i];
+    a += src2[i];
+    a ++;
+    a >>= 1;
+    OCL_ASSERT(((int*)buf_data[2])[i] == (int)a);
+  }
+  OCL_UNMAP_BUFFER(2);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_rhadd);
diff --git a/utests/utest/compiler_rotate.cpp b/utests/utest/compiler_rotate.cpp
new file mode 100644
index 0000000..bf52ca4
--- /dev/null
+++ b/utests/utest/compiler_rotate.cpp
@@ -0,0 +1,40 @@
+#include "utest_helper.hpp"
+
+int cpu(int src, int y) {
+  return (src << y) | (src >> (32 - y));
+}
+
+void compiler_rotate(void)
+{
+  const int n = 32;
+  int src[n], y[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_rotate");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(2);
+  for (int i = 0; i < n; ++i) {
+    src[i] = ((int*)buf_data[0])[i] = rand();
+    y[i] = ((int*)buf_data[2])[i] = rand() & 31;
+  }
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(2);
+
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(1);
+  for (int i = 0; i < n; ++i)
+    OCL_ASSERT(((int*)buf_data[1])[i] == cpu(src[i], y[i]));
+  OCL_UNMAP_BUFFER(1);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_rotate);
diff --git a/utests/utest/compiler_sampler.cpp b/utests/utest/compiler_sampler.cpp
new file mode 100644
index 0000000..32bf926
--- /dev/null
+++ b/utests/utest/compiler_sampler.cpp
@@ -0,0 +1,41 @@
+/* test OpenCL 1.1 Sampler Objects (section 5.5) */
+#include "utest_helper.hpp"
+
+void compiler_sampler(void)
+{
+  OCL_CREATE_KERNEL("compiler_sampler");
+
+  OCL_ASSERT(ctx != 0);
+  cl_sampler s;
+  cl_int err;
+  int a1[] = {CL_TRUE, CL_FALSE},
+      a2[] = {CL_ADDRESS_MIRRORED_REPEAT,
+              CL_ADDRESS_REPEAT,
+              CL_ADDRESS_CLAMP_TO_EDGE,
+              CL_ADDRESS_CLAMP,
+              CL_ADDRESS_NONE},
+      a3[] = {CL_FILTER_NEAREST, CL_FILTER_LINEAR},
+      a4[] = {CL_SAMPLER_REFERENCE_COUNT,
+              CL_SAMPLER_CONTEXT,
+              CL_SAMPLER_NORMALIZED_COORDS,
+              CL_SAMPLER_ADDRESSING_MODE,
+              CL_SAMPLER_FILTER_MODE};
+  char pv[1000];
+  size_t pv_size;
+  int i, j, k, l;
+  for(i=0; i<2; i++)
+    for(j=0; j<5; j++)
+      for(k=0; k<2; k++) {
+        s = clCreateSampler(ctx, a1[i], a2[j], a3[k], &err);
+        OCL_ASSERT(err == CL_SUCCESS);
+        OCL_CALL(clRetainSampler, s);
+        OCL_CALL(clReleaseSampler, s);
+        for(l=0; l<5; l++)
+          OCL_CALL(clGetSamplerInfo, s, a4[l], 1000, pv, &pv_size);
+        OCL_CALL(clReleaseSampler, s);
+      }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_sampler);
+
+
diff --git a/utests/utest/compiler_saturate.cpp b/utests/utest/compiler_saturate.cpp
new file mode 100644
index 0000000..6880df0
--- /dev/null
+++ b/utests/utest/compiler_saturate.cpp
@@ -0,0 +1,114 @@
+#include "utest_helper.hpp"
+
+namespace {
+
+constexpr int n = 16;
+
+// declaration only, we should create each template specification for each type.
+template<typename T>
+T get_data(int idx, int part);
+
+/* the format of test data is as follows:
+ *   the first column is A
+ *   the second column is B
+ *   the third column is the expected result.
+ */
+
+#define DEF_TEMPLATE(TYPE, NAME)                                    \
+template <>                                                         \
+TYPE get_data<TYPE>(int idx, int part)                              \
+{                                                                   \
+  static TYPE test_data[n][3] = {                                   \
+    { 0, 0, 0 },                                                    \
+    { 0, 1, 1 },                                                    \
+    { 0, 2, 2 },                                                    \
+    { -1, 1, 0 },                                                   \
+    { 1, -2, -1 },                                                  \
+    { 0, 110, 110 },                                                \
+    { -10, -10, -20 },                                              \
+    { CL_##NAME##_MIN, CL_##NAME##_MIN, CL_##NAME##_MIN },          \
+    { CL_##NAME##_MIN, CL_##NAME##_MAX, -1 },                       \
+    { CL_##NAME##_MAX, 0, CL_##NAME##_MAX },                        \
+    { CL_##NAME##_MAX, 1, CL_##NAME##_MAX },                        \
+    { CL_##NAME##_MAX, 2, CL_##NAME##_MAX },                        \
+    { CL_##NAME##_MAX, CL_##NAME##_MAX, CL_##NAME##_MAX },          \
+    { CL_##NAME##_MAX/2, CL_##NAME##_MAX/2, CL_##NAME##_MAX-1 },    \
+    { CL_##NAME##_MAX/2, CL_##NAME##_MAX/2+1, CL_##NAME##_MAX },    \
+    { CL_##NAME##_MAX/2+1, CL_##NAME##_MAX/2+1, CL_##NAME##_MAX }   \
+  };                                                                \
+  return test_data[idx][part];                                      \
+}                                                                   \
+                                                                    \
+template <>                                                         \
+u##TYPE get_data<u##TYPE>(int idx, int part)                        \
+{                                                                   \
+  static u##TYPE test_data[n][3] = {                                \
+    { 0, 0, 0 },                                                    \
+    { CL_U##NAME##_MAX, 0, CL_U##NAME##_MAX },                      \
+    { CL_U##NAME##_MAX, 1, CL_U##NAME##_MAX },                      \
+    { CL_U##NAME##_MAX, 2, CL_U##NAME##_MAX },                      \
+    { CL_U##NAME##_MAX, CL_U##NAME##_MAX, CL_U##NAME##_MAX },       \
+    { CL_U##NAME##_MAX/2, CL_U##NAME##_MAX/2, CL_U##NAME##_MAX-1 }, \
+    { CL_U##NAME##_MAX/2, CL_U##NAME##_MAX/2+1, CL_U##NAME##_MAX }, \
+    { CL_U##NAME##_MAX/2+1, CL_U##NAME##_MAX/2+1, CL_U##NAME##_MAX }\
+  };                                                                \
+  return test_data[idx][part];                                      \
+}
+
+DEF_TEMPLATE(int8_t, CHAR)
+DEF_TEMPLATE(int16_t, SHRT)
+DEF_TEMPLATE(int32_t, INT)
+//DEF_TEMPLATE(int64_t, LONG)
+
+
+template<typename T>
+void test(const char *kernel_name)
+{
+  T C[n] = { 0 };
+  T A[n] = { 0 };
+  T B[n] = { 0 };
+
+  for (int i = 0; i < n; i++) {
+    A[i] = get_data<T>(i, 0);
+    B[i] = get_data<T>(i, 1);
+  }
+
+  OCL_CREATE_KERNEL_FROM_FILE("compiler_saturate", kernel_name);
+
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(T), &C[0]);
+  OCL_CREATE_BUFFER(buf[1], CL_MEM_COPY_HOST_PTR, n * sizeof(T), &A[0]);
+  OCL_CREATE_BUFFER(buf[2], CL_MEM_COPY_HOST_PTR, n * sizeof(T), &B[0]);
+
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+
+  globals[0] = n;
+  locals[0] = n;
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(0);
+
+  for (int i = 0; i < n; i++) {
+    OCL_ASSERT(((T*)buf_data[0])[i] == get_data<T>(i, 2));
+  }
+  OCL_UNMAP_BUFFER(0);
+}
+
+}
+
+#define compiler_saturate(type, kernel) \
+static void compiler_saturate_ ##type(void)\
+{\
+  test<type>(# kernel);\
+}\
+MAKE_UTEST_FROM_FUNCTION(compiler_saturate_ ## type);
+
+compiler_saturate(int8_t, test_char)
+compiler_saturate(uint8_t, test_uchar)
+compiler_saturate(int16_t, test_short)
+compiler_saturate(uint16_t, test_ushort)
+compiler_saturate(int32_t, test_int)
+compiler_saturate(uint32_t, test_uint)
+//compiler_saturate(int64_t, test_long)
+//compiler_saturate(uint64_t, test_ulong)
diff --git a/utests/utest/compiler_saturate_sub.cpp b/utests/utest/compiler_saturate_sub.cpp
new file mode 100644
index 0000000..48947b7
--- /dev/null
+++ b/utests/utest/compiler_saturate_sub.cpp
@@ -0,0 +1,114 @@
+#include "utest_helper.hpp"
+
+namespace {
+
+constexpr int n = 16;
+
+// declaration only, we should create each template specification for each type.
+template<typename T>
+T get_data(int idx, int part);
+
+/* the format of test data is as follows:
+ *   the first column is A
+ *   the second column is B
+ *   the third column is the expected result.
+ */
+
+#define DEF_TEMPLATE(TYPE, NAME)                                    \
+template <>                                                         \
+TYPE get_data<TYPE>(int idx, int part)                              \
+{                                                                   \
+  static TYPE test_data[n][3] = {                                   \
+    { 0, 0, 0 },                                                    \
+    { 0, 1, -1 },                                                   \
+    { CL_##NAME##_MIN, CL_##NAME##_MIN, 0 },                        \
+    { CL_##NAME##_MAX, CL_##NAME##_MAX, 0 },                        \
+    { -2, CL_##NAME##_MIN, CL_##NAME##_MAX-1 },                     \
+    { -1, CL_##NAME##_MIN, CL_##NAME##_MAX },                       \
+    { 0, CL_##NAME##_MIN, CL_##NAME##_MAX },                        \
+    { 1, CL_##NAME##_MIN, CL_##NAME##_MAX },                        \
+    { -2, CL_##NAME##_MAX, CL_##NAME##_MIN },                       \
+    { -1, CL_##NAME##_MAX, CL_##NAME##_MIN },                       \
+    { 0, CL_##NAME##_MAX, -CL_##NAME##_MAX },                       \
+    { 1, CL_##NAME##_MAX, -CL_##NAME##_MAX+1 },                     \
+    { CL_##NAME##_MIN, CL_##NAME##_MAX, CL_##NAME##_MIN },          \
+    { CL_##NAME##_MIN, 1, CL_##NAME##_MIN },                        \
+    { CL_##NAME##_MIN, -1, CL_##NAME##_MIN+1 },                     \
+    { CL_##NAME##_MAX, CL_##NAME##_MIN, CL_##NAME##_MAX },          \
+  };                                                                \
+  return test_data[idx][part];                                      \
+}                                                                   \
+                                                                    \
+template <>                                                         \
+u##TYPE get_data<u##TYPE>(int idx, int part)                        \
+{                                                                   \
+  static u##TYPE test_data[n][3] = {                                \
+    { 0, 0, 0 },                                                    \
+    { 0, 1, 0 },                                                    \
+    { 1, 1, 0 },                                                    \
+    { 1, 0, 1 },                                                    \
+    { CL_U##NAME##_MAX, CL_U##NAME##_MAX, 0 },                      \
+    { 0, CL_U##NAME##_MAX, 0 },                                     \
+    { 1, CL_U##NAME##_MAX, 0 },                                     \
+    { CL_U##NAME##_MAX, 0, CL_U##NAME##_MAX },                      \
+  };                                                                \
+  return test_data[idx][part];                                      \
+}
+
+DEF_TEMPLATE(int8_t, CHAR)
+DEF_TEMPLATE(int16_t, SHRT)
+DEF_TEMPLATE(int32_t, INT)
+//DEF_TEMPLATE(int64_t, LONG)
+
+
+template<typename T>
+void test(const char *kernel_name)
+{
+  T C[n] = { 0 };
+  T A[n] = { 0 };
+  T B[n] = { 0 };
+
+  for (int i = 0; i < n; i++) {
+    A[i] = get_data<T>(i, 0);
+    B[i] = get_data<T>(i, 1);
+  }
+
+  OCL_CREATE_KERNEL_FROM_FILE("compiler_saturate_sub", kernel_name);
+
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(T), &C[0]);
+  OCL_CREATE_BUFFER(buf[1], CL_MEM_COPY_HOST_PTR, n * sizeof(T), &A[0]);
+  OCL_CREATE_BUFFER(buf[2], CL_MEM_COPY_HOST_PTR, n * sizeof(T), &B[0]);
+
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+
+  globals[0] = n;
+  locals[0] = n;
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(0);
+
+  for (int i = 0; i < n; i++) {
+    OCL_ASSERT(((T*)buf_data[0])[i] == get_data<T>(i, 2));
+  }
+  OCL_UNMAP_BUFFER(0);
+}
+
+}
+
+#define compiler_saturate_sub(type, kernel) \
+static void compiler_saturate_sub_ ##type(void)\
+{\
+  test<type>(# kernel);\
+}\
+MAKE_UTEST_FROM_FUNCTION(compiler_saturate_sub_ ## type);
+
+compiler_saturate_sub(int8_t, test_char)
+compiler_saturate_sub(uint8_t, test_uchar)
+compiler_saturate_sub(int16_t, test_short)
+compiler_saturate_sub(uint16_t, test_ushort)
+//compiler_saturate_sub(int32_t, test_int) // TODO due to the possible hardware bug, we disable this, uncomment it when it's done.
+compiler_saturate_sub(uint32_t, test_uint)
+//compiler_saturate_sub(int64_t, test_long)
+//compiler_saturate_sub(uint64_t, test_ulong)
diff --git a/utests/utest/compiler_shader_toy.cpp b/utests/utest/compiler_shader_toy.cpp
new file mode 100644
index 0000000..58bcc6f
--- /dev/null
+++ b/utests/utest/compiler_shader_toy.cpp
@@ -0,0 +1,87 @@
+/* 
+ * Copyright © 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+
+/* This is a super simple wrapper for the OpenCL kernels I ported from GLSL code
+ * taken in Inigo's web site:
+ * http://www.iquilezles.org/apps/shadertoy/index.html
+ *
+ * They are pretty cool and rather complex kernels. Just the right thing to have
+ * something a bit more complicated and interesting than unit tests.
+ *
+ * The code here is just to wrap the common code used by all the kernels (to run
+ * the code and assert its correctness)
+ */
+#include "utest_helper.hpp"
+
+static const int dim = 256;
+
+// tricky here 'name' stands for Kernel and Reference
+// 'file' stands for .cl file name and dst image name
+static void run_kernel(int w, int h, const char *file, const char *name)
+{
+  const size_t global[2] = {size_t(w), size_t(h)};
+  const size_t local[2] = {16, 1};
+  const size_t sz = w * h * sizeof(char[4]);
+  const float fx = float(w);
+  const float fy = float(h);
+  char kernel_file[256];
+  char dst_img[256];
+  char ref_img[256];
+
+  snprintf(kernel_file, sizeof(kernel_file), "%s.cl", file);
+  snprintf(dst_img, sizeof(dst_img), "%s.bmp", file);
+  snprintf(ref_img, sizeof(ref_img), "%s_ref.bmp", name);
+  OCL_CALL (cl_kernel_init, kernel_file, name, SOURCE, NULL);
+
+  OCL_CREATE_BUFFER(buf[0], 0, sz, NULL);
+  OCL_CALL (clSetKernelArg, kernel, 0, sizeof(cl_mem), &buf[0]);
+  OCL_CALL (clSetKernelArg, kernel, 1, sizeof(float), &fx);
+  OCL_CALL (clSetKernelArg, kernel, 2, sizeof(float), &fy);
+  OCL_CALL (clSetKernelArg, kernel, 3, sizeof(int), &w);
+  OCL_CALL (clEnqueueNDRangeKernel, queue, kernel, 2, NULL, global, local, 0, NULL, NULL);
+  OCL_MAP_BUFFER(0);
+  int *dst = (int*) buf_data[0];
+
+  /* Save the image (for debug purpose) */
+  cl_write_bmp(dst, w, h, dst_img);
+
+  /* Compare with the golden image */
+  OCL_CHECK_IMAGE(dst, w, h, ref_img);
+}
+
+#define DECL_SHADER_TOY_TEST(W,H,FILE_NAME, KERNEL_NAME) \
+  static void FILE_NAME(void) { run_kernel(W,H,#FILE_NAME, #KERNEL_NAME); } \
+  MAKE_UTEST_FROM_FUNCTION(FILE_NAME);
+
+DECL_SHADER_TOY_TEST(dim,dim,compiler_clod,compiler_clod);
+DECL_SHADER_TOY_TEST(dim,dim,compiler_ribbon,compiler_ribbon);
+DECL_SHADER_TOY_TEST(dim,dim,compiler_nautilus,compiler_nautilus);
+DECL_SHADER_TOY_TEST(dim,dim,compiler_menger_sponge_no_shadow,compiler_menger_sponge_no_shadow);
+DECL_SHADER_TOY_TEST(dim,dim,compiler_julia,compiler_julia);
+DECL_SHADER_TOY_TEST(dim,dim,compiler_julia_no_break,compiler_julia_no_break);
+// test for function calls
+DECL_SHADER_TOY_TEST(dim,dim,compiler_clod_function_call,compiler_clod);
+DECL_SHADER_TOY_TEST(dim,dim,compiler_julia_function_call,compiler_julia);
+
+// Still issues here for LLVM 3.2
+// DECL_SHADER_TOY_TEST(dim,dim,compiler_chocolux,compiler_chocolux);
+// DECL_SHADER_TOY_TEST(dim,dim,compiler_menger_sponge,compiler_menger_sponge);
+
+#undef DECL_SHADER_TOY_TEST
+
diff --git a/utests/utest/compiler_shift_right.cpp b/utests/utest/compiler_shift_right.cpp
new file mode 100644
index 0000000..b94cc46
--- /dev/null
+++ b/utests/utest/compiler_shift_right.cpp
@@ -0,0 +1,45 @@
+#include "utest_helper.hpp"
+
+typedef unsigned int uint;
+
+static void cpu(int global_id, uint *src, int *dst) {
+  dst[global_id] = src[global_id] >> 24;
+}
+
+void compiler_shift_right(void)
+{
+  const size_t n = 16;
+  uint cpu_src[16];
+  int cpu_dst[16];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_shift_right");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = 16;
+  locals[0] = 16;
+
+  // Run random tests
+  for (uint32_t pass = 0; pass < 8; ++pass) {
+    OCL_MAP_BUFFER(0);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      cpu_src[i] = ((uint*)buf_data[0])[i] = 0x80000000 | rand();
+    OCL_UNMAP_BUFFER(0);
+
+    // Run the kernel on GPU
+    OCL_NDRANGE(1);
+
+    // Run on CPU
+    for (int32_t i = 0; i < (int32_t) n; ++i) cpu(i, cpu_src, cpu_dst);
+
+    // Compare
+    OCL_MAP_BUFFER(1);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+      OCL_ASSERT(((int *)buf_data[1])[i] == cpu_dst[i]);
+    OCL_UNMAP_BUFFER(1);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_shift_right);
diff --git a/utests/utest/compiler_short_scatter.cpp b/utests/utest/compiler_short_scatter.cpp
new file mode 100644
index 0000000..1746744
--- /dev/null
+++ b/utests/utest/compiler_short_scatter.cpp
@@ -0,0 +1,25 @@
+#include "utest_helper.hpp"
+
+static void compiler_short_scatter(void)
+{
+  const size_t n = 128;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_short_scatter");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int16_t), NULL);
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  // Check result
+  OCL_MAP_BUFFER(0);
+  for (int32_t i = 0; i < (int32_t) n; ++i)
+    OCL_ASSERT(((int16_t*)buf_data[0])[i] == (int16_t) i);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_short_scatter);
+
+
diff --git a/utests/utest/compiler_smoothstep.cpp b/utests/utest/compiler_smoothstep.cpp
new file mode 100644
index 0000000..363ea7e
--- /dev/null
+++ b/utests/utest/compiler_smoothstep.cpp
@@ -0,0 +1,58 @@
+#include <cmath>
+#include "utest_helper.hpp"
+
+float cpu(float e0, float e1, float x)
+{
+  x = (x - e0) / (e1 - e0);
+  if (x >= 1)
+    x = 1.f;
+  if (x <= 0)
+    x = 0.f;
+  return x * x * (3 - 2 * x);
+}
+
+void compiler_smoothstep(void)
+{
+  const int n = 32;
+  float src1[n], src2[n], src3[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_smoothstep");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(float), NULL);
+  OCL_CREATE_BUFFER(buf[3], 0, n * sizeof(float), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  OCL_SET_ARG(3, sizeof(cl_mem), &buf[3]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  OCL_MAP_BUFFER(2);
+  for (int i = 0; i < n; ++i) {
+    float a = 0.1f * (rand() & 15) - 0.75f;
+    float b = a + 0.1f * (rand() & 15) + 0.1f;
+    float c = 0.1f * (rand() & 15) - 0.75f;
+    src1[i] = ((float*)buf_data[0])[i] = a;
+    src2[i] = ((float*)buf_data[1])[i] = b;
+    src3[i] = ((float*)buf_data[2])[i] = c;
+  }
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+  OCL_UNMAP_BUFFER(2);
+
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(3);
+  for (int i = 0; i < n; ++i) {
+    float a = ((float*)buf_data[3])[i];
+    float b = cpu(src1[i], src2[i], src3[i]);
+    OCL_ASSERT(fabsf(a - b) < 1e-4f);
+  }
+  OCL_UNMAP_BUFFER(3);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_smoothstep);
diff --git a/utests/utest/compiler_step.cpp b/utests/utest/compiler_step.cpp
new file mode 100644
index 0000000..b022826
--- /dev/null
+++ b/utests/utest/compiler_step.cpp
@@ -0,0 +1,342 @@
+#include "utest_helper.hpp"
+#include "string.h"
+
+template <typename T, int N>
+struct cl_vec {
+    T ptr[((N+1)/2)*2]; //align to 2 elements.
+
+    typedef cl_vec<T, N> vec_type;
+
+    cl_vec(void) {
+        memset(ptr, 0, sizeof(T) * ((N+1)/2)*2);
+    }
+    cl_vec(vec_type & other) {
+        memset(ptr, 0, sizeof(T) * ((N+1)/2)*2);
+        memcpy (this->ptr, other.ptr, sizeof(T) * N);
+    }
+
+    vec_type& operator= (vec_type & other) {
+        memset(ptr, 0, sizeof(T) * ((N+1)/2)*2);
+        memcpy (this->ptr, other.ptr, sizeof(T) * N);
+        return *this;
+    }
+
+    template <typename U> vec_type& operator= (cl_vec<U, N> & other) {
+        memset(ptr, 0, sizeof(T) * ((N+1)/2)*2);
+        memcpy (this->ptr, other.ptr, sizeof(T) * N);
+        return *this;
+    }
+
+    bool operator== (vec_type & other) {
+        return !memcmp (this->ptr, other.ptr, sizeof(T) * N);
+    }
+
+    void step (vec_type & other) {
+        int i = 0;
+        for (; i < N; i++) {
+            T a = ptr[i];
+            T edge = other.ptr[i];
+            T f = a < edge ? 0.0 : 1.0;
+            ptr[i] = f;
+        }
+    }
+
+    void step (float & edge) {
+        int i = 0;
+        for (; i < N; i++) {
+            T a = ptr[i];
+            T f = a < edge ? 0.0 : 1.0;
+            ptr[i] = f;
+        }
+    }
+};
+
+template <typename T, typename U, int N> static void cpu (int global_id,
+        cl_vec<T, N> *edge, cl_vec<T, N> *src, cl_vec<U, N> *dst)
+{
+    cl_vec<T, N> v  = src[global_id];
+    v.step(edge[global_id]);
+    dst[global_id] = v;
+}
+
+template <typename T, typename U> static void cpu(int global_id, T *edge, T *src, U *dst)
+{
+    T f = src[global_id];
+    T e = edge[global_id];
+    f = f < e ? 0.0 : 1.0;
+    dst[global_id] = (U)f;
+}
+
+template <typename T, typename U, int N> static void cpu (int global_id,
+        float edge, cl_vec<T, N> *src, cl_vec<U, N> *dst)
+{
+    cl_vec<T, N> v  = src[global_id];
+    v.step(edge);
+    dst[global_id] = v;
+}
+
+template <typename T, typename U> static void cpu(int global_id, float edge, T *src, U *dst)
+{
+    T f = src[global_id];
+    f = f < edge ? 0.0 : 1.0;
+    dst[global_id] = (U)f;
+}
+
+template <typename T, int N> static void gen_rand_val (cl_vec<T, N>& vect)
+{
+    int i = 0;
+
+    memset(vect.ptr, 0, sizeof(T) * ((N+1)/2)*2);
+    for (; i < N; i++) {
+        vect.ptr[i] = static_cast<T>(.1f * (rand() & 15) - .75f);
+    }
+}
+
+template <typename T> static void gen_rand_val (T & val)
+{
+    val = static_cast<T>(.1f * (rand() & 15) - .75f);
+}
+
+template <typename T>
+inline static void print_data (T& val)
+{
+    if (std::is_unsigned<T>::value)
+        printf(" %u", val);
+    else
+        printf(" %d", val);
+}
+
+inline static void print_data (float& val)
+{
+    printf(" %f", val);
+}
+
+template <typename T, typename U, int N> static void dump_data (cl_vec<T, N>* edge,
+        cl_vec<T, N>* src, cl_vec<U, N>* dst, int n)
+{
+    U* val = reinterpret_cast<U *>(dst);
+
+    n = n*((N+1)/2)*2;
+
+    printf("\nEdge: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(((T *)buf_data[0])[i]);
+    }
+    printf("\nx: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(((T *)buf_data[1])[i]);
+    }
+
+    printf("\nCPU: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(val[i]);
+    }
+    printf("\nGPU: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(((U *)buf_data[2])[i]);
+    }
+}
+
+template <typename T, typename U> static void dump_data (T* edge, T* src, U* dst, int n)
+{
+    printf("\nedge: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(((T *)buf_data[0])[i]);
+    }
+
+    printf("\nx: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(((T *)buf_data[1])[i]);
+    }
+
+    printf("\nCPU: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(dst[i]);
+    }
+    printf("\nGPU: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(((U *)buf_data[2])[i]);
+    }
+}
+
+template <typename T, typename U, int N> static void dump_data (float edge,
+        cl_vec<T, N>* src, cl_vec<U, N>* dst, int n)
+{
+    U* val = reinterpret_cast<U *>(dst);
+
+    n = n*((N+1)/2)*2;
+
+    printf("\nEdge: %f\n", edge);
+    printf("\nx: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(((T *)buf_data[0])[i]);
+    }
+
+    printf("\nCPU: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(val[i]);
+    }
+    printf("\nGPU: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(((U *)buf_data[1])[i]);
+    }
+}
+
+template <typename T, typename U> static void dump_data (float edge, T* src, U* dst, int n)
+{
+    printf("\nedge: %f\n", edge);
+    printf("\nx: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(((T *)buf_data[0])[i]);
+    }
+
+    printf("\nCPU: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(dst[i]);
+    }
+    printf("\nGPU: \n");
+    for (int32_t i = 0; i < (int32_t) n; ++i) {
+        print_data(((U *)buf_data[1])[i]);
+    }
+}
+
+template <typename T> static void compiler_step_with_type(void)
+{
+    const size_t n = 16;
+    T cpu_dst[n], cpu_src[n];
+    T edge[n];
+
+    // Setup buffers
+    OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(T), NULL);
+    OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(T), NULL);
+    OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(T), NULL);
+    OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+    OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+    OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+    globals[0] = n;
+    locals[0] = n;
+
+    // Run random tests
+    for (uint32_t pass = 0; pass < 8; ++pass) {
+        OCL_MAP_BUFFER(0);
+        OCL_MAP_BUFFER(1);
+
+        /* Clear the dst buffer to avoid random data. */
+        OCL_MAP_BUFFER(2);
+        memset(buf_data[2], 0, sizeof(T) * n);
+        OCL_UNMAP_BUFFER(2);
+
+        for (int32_t i = 0; i < (int32_t) n; ++i) {
+            gen_rand_val(cpu_src[i]);
+            gen_rand_val(edge[i]);
+        }
+
+        memcpy(buf_data[1], cpu_src, sizeof(T) * n);
+        memcpy(buf_data[0], edge, sizeof(T) * n);
+
+        // Run the kernel on GPU
+        OCL_NDRANGE(1);
+
+        // Run on CPU
+        for (int32_t i = 0; i < (int32_t) n; ++i)
+            cpu(i, edge, cpu_src, cpu_dst);
+
+        // Compare
+        OCL_MAP_BUFFER(2);
+
+        //dump_data(edge, cpu_src, cpu_dst, n);
+
+        OCL_ASSERT(!memcmp(buf_data[2], cpu_dst, sizeof(T) * n));
+        OCL_UNMAP_BUFFER(2);
+        OCL_UNMAP_BUFFER(1);
+        OCL_UNMAP_BUFFER(0);
+    }
+}
+
+#define STEP_TEST_TYPE(TYPE) \
+	static void compiler_step_##TYPE (void) \
+        { \
+           OCL_CALL (cl_kernel_init, "compiler_step.cl", "compiler_step_"#TYPE, SOURCE, NULL);  \
+           compiler_step_with_type<TYPE>(); \
+        } \
+	MAKE_UTEST_FROM_FUNCTION(compiler_step_##TYPE);
+
+typedef cl_vec<float, 2> float2;
+typedef cl_vec<float, 3> float3;
+typedef cl_vec<float, 4> float4;
+typedef cl_vec<float, 8> float8;
+typedef cl_vec<float, 16> float16;
+STEP_TEST_TYPE(float)
+STEP_TEST_TYPE(float2)
+STEP_TEST_TYPE(float3)
+STEP_TEST_TYPE(float4)
+STEP_TEST_TYPE(float8)
+STEP_TEST_TYPE(float16)
+
+
+template <typename T> static void compiler_stepf_with_type(void)
+{
+    const size_t n = 16;
+    T cpu_dst[n], cpu_src[n];
+    float edge = (float)(.1f * (rand() & 15) - .75f);
+
+    // Setup buffers
+    OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(T), NULL);
+    OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(T), NULL);
+    OCL_SET_ARG(0, sizeof(float), &edge);
+    OCL_SET_ARG(1, sizeof(cl_mem), &buf[0]);
+    OCL_SET_ARG(2, sizeof(cl_mem), &buf[1]);
+    globals[0] = n;
+    locals[0] = n;
+
+    // Run random tests
+    for (uint32_t pass = 0; pass < 8; ++pass) {
+        OCL_MAP_BUFFER(0);
+
+        /* Clear the dst buffer to avoid random data. */
+        OCL_MAP_BUFFER(1);
+        memset(buf_data[1], 0, sizeof(T) * n);
+        OCL_UNMAP_BUFFER(1);
+
+        for (int32_t i = 0; i < (int32_t) n; ++i) {
+            gen_rand_val(cpu_src[i]);
+        }
+
+        memcpy(buf_data[0], cpu_src, sizeof(T) * n);
+
+        // Run the kernel on GPU
+        OCL_NDRANGE(1);
+
+        // Run on CPU
+        for (int32_t i = 0; i < (int32_t) n; ++i)
+            cpu(i, edge, cpu_src, cpu_dst);
+
+        // Compare
+        OCL_MAP_BUFFER(1);
+
+        //dump_data(edge, cpu_src, cpu_dst, n);
+
+        OCL_ASSERT(!memcmp(buf_data[1], cpu_dst, sizeof(T) * n));
+        OCL_UNMAP_BUFFER(1);
+        OCL_UNMAP_BUFFER(0);
+    }
+}
+
+#define _STEPF_TEST_TYPE(TYPE, keep_program) \
+	static void compiler_stepf_##TYPE (void) \
+        { \
+           OCL_CALL (cl_kernel_init, "compiler_step.cl", "compiler_stepf_"#TYPE, SOURCE, NULL);  \
+           compiler_stepf_with_type<TYPE>(); \
+        } \
+	MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_stepf_##TYPE, keep_program);
+
+#define STEPF_TEST_TYPE(TYPE) _STEPF_TEST_TYPE(TYPE, true)
+#define STEPF_TEST_TYPE_END(TYPE) _STEPF_TEST_TYPE(TYPE, false)
+
+
+STEPF_TEST_TYPE(float)
+STEPF_TEST_TYPE(float2)
+STEPF_TEST_TYPE(float3)
+STEPF_TEST_TYPE(float4)
+STEPF_TEST_TYPE(float8)
+STEPF_TEST_TYPE_END(float16)
diff --git a/utests/utest/compiler_structure_attributes.cpp b/utests/utest/compiler_structure_attributes.cpp
new file mode 100644
index 0000000..31656f4
--- /dev/null
+++ b/utests/utest/compiler_structure_attributes.cpp
@@ -0,0 +1,9 @@
+#include "utest_helper.hpp"
+
+void compiler_structure_attributes(void)
+{
+  OCL_CREATE_KERNEL("compiler_structure_attributes");
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_structure_attributes);
+
diff --git a/utests/utest/compiler_switch.cpp b/utests/utest/compiler_switch.cpp
new file mode 100644
index 0000000..6e93309
--- /dev/null
+++ b/utests/utest/compiler_switch.cpp
@@ -0,0 +1,48 @@
+#include "utest_helper.hpp"
+
+static void cpu_compiler_switch(int *dst, int *src, int get_global_id0)
+{
+  switch (get_global_id0) {
+    case 0: dst[get_global_id0] = src[get_global_id0 + 4]; break;
+    case 1: dst[get_global_id0] = src[get_global_id0 + 14]; break;
+    case 2: dst[get_global_id0] = src[get_global_id0 + 13]; break;
+    case 6: dst[get_global_id0] = src[get_global_id0 + 11]; break;
+    case 7: dst[get_global_id0] = src[get_global_id0 + 10]; break;
+    case 10: dst[get_global_id0] = src[get_global_id0 + 9]; break;
+    case 12: dst[get_global_id0] = src[get_global_id0 + 6]; break;
+    default: dst[get_global_id0] = src[get_global_id0 + 8]; break;
+  }
+}
+
+static void compiler_switch(void)
+{
+  const size_t n = 32;
+  int cpu_dst[32], cpu_src[32];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_switch");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = 16;
+  locals[0] = 16;
+
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < 32; ++i)
+    cpu_src[i] = ((int32_t*)buf_data[1])[i] = i;
+  OCL_UNMAP_BUFFER(1);
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (int i = 0; i < 16; ++i)
+    cpu_compiler_switch(cpu_dst, cpu_src, i);
+  for (int i = 0; i < 16; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[0])[i] == cpu_dst[i]);
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_switch)
+
diff --git a/utests/utest/compiler_type_casting.cpp b/utests/utest/compiler_type_casting.cpp
new file mode 100644
index 0000000..392acf4
--- /dev/null
+++ b/utests/utest/compiler_type_casting.cpp
@@ -0,0 +1,10 @@
+#include "utest_helper.hpp"
+
+void compiler_type_casting(void)
+{
+  OCL_CREATE_KERNEL("compiler_type_casting");
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_type_casting);
+
+
diff --git a/utests/utest/compiler_uint16_copy.cpp b/utests/utest/compiler_uint16_copy.cpp
new file mode 100644
index 0000000..1494e81
--- /dev/null
+++ b/utests/utest/compiler_uint16_copy.cpp
@@ -0,0 +1,35 @@
+#include "utest_helper.hpp"
+
+static void compiler_uint16_copy(void)
+{
+  const size_t n = 128;
+
+  // Setup kernel and buffers. Note that uint16 is aligned on 16 bytes
+  // according to the OCL specificatio
+  OCL_CREATE_KERNEL("compiler_uint16_copy");
+  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t[16]) * n);
+  for (uint32_t i = 0; i < n; ++i)
+    for (uint32_t j = 0; j < 16; ++j)
+      ((uint32_t*)buf_data[0])[16*i+j] = 16*i+j;
+
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t[16]), buf_data[0]);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t[16]), NULL);
+  free(buf_data[0]);
+  buf_data[0] = NULL;
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  // Check result
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < 16*n; ++i)
+    OCL_ASSERT(((uint32_t*)buf_data[0])[i] == ((uint32_t*)buf_data[1])[i]);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_uint16_copy);
+
diff --git a/utests/utest/compiler_uint2_copy.cpp b/utests/utest/compiler_uint2_copy.cpp
new file mode 100644
index 0000000..8eb4314
--- /dev/null
+++ b/utests/utest/compiler_uint2_copy.cpp
@@ -0,0 +1,31 @@
+#include "utest_helper.hpp"
+
+static void compiler_uint2_copy(void)
+{
+  const size_t n = 128;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_uint2_copy");
+  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t[2]) * n);
+  for (uint32_t i = 0; i < 2*n; ++i) ((uint32_t*)buf_data[0])[i] = i;
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t[2]), buf_data[0]);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t[2]), NULL);
+  free(buf_data[0]);
+  buf_data[0] = NULL;
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  // Check result
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < 2*n; ++i)
+    OCL_ASSERT(((uint32_t*)buf_data[0])[i] == ((uint32_t*)buf_data[1])[i]);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_uint2_copy);
+
diff --git a/utests/utest/compiler_uint3_copy.cpp b/utests/utest/compiler_uint3_copy.cpp
new file mode 100644
index 0000000..c4d3cf0
--- /dev/null
+++ b/utests/utest/compiler_uint3_copy.cpp
@@ -0,0 +1,40 @@
+#include "utest_helper.hpp"
+
+static void compiler_uint3_copy(void)
+{
+  const size_t n = 128;
+
+  // Setup kernel and buffers. Note that uint3 is aligned on 16 bytes
+  // according to the OCL specification
+  OCL_CREATE_KERNEL("compiler_uint3_copy");
+  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t[4]) * n);
+  for (uint32_t i = 0; i < n; ++i) {
+    ((uint32_t*)buf_data[0])[4*i+0] = 3*i+0;
+    ((uint32_t*)buf_data[0])[4*i+1] = 3*i+1;
+    ((uint32_t*)buf_data[0])[4*i+2] = 3*i+2;
+  }
+
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t[4]), buf_data[0]);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t[4]), NULL);
+  free(buf_data[0]);
+  buf_data[0] = NULL;
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  // Check result
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < n; ++i) {
+    OCL_ASSERT(((uint32_t*)buf_data[0])[4*i+0] == ((uint32_t*)buf_data[1])[4*i+0]);
+    OCL_ASSERT(((uint32_t*)buf_data[0])[4*i+1] == ((uint32_t*)buf_data[1])[4*i+1]);
+    OCL_ASSERT(((uint32_t*)buf_data[0])[4*i+2] == ((uint32_t*)buf_data[1])[4*i+2]);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_uint3_copy);
+
diff --git a/utests/utest/compiler_uint3_unaligned_copy.cpp b/utests/utest/compiler_uint3_unaligned_copy.cpp
new file mode 100644
index 0000000..d42b4c3
--- /dev/null
+++ b/utests/utest/compiler_uint3_unaligned_copy.cpp
@@ -0,0 +1,42 @@
+#include "utest_helper.hpp"
+
+static void compiler_uint3_unaligned_copy(void)
+{
+  const size_t n = 128;
+
+  // Setup kernel and buffers. Note that uint3 is aligned on 16 bytes
+  // according to the OCL specification
+  OCL_CREATE_KERNEL("compiler_uint3_unaligned_copy");
+  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t[4]) * n);
+  for (uint32_t i = 0; i < n; ++i) {
+    ((uint32_t*)buf_data[0])[3*i+0] = 3*i+0;
+    ((uint32_t*)buf_data[0])[3*i+1] = 3*i+1;
+    ((uint32_t*)buf_data[0])[3*i+2] = 3*i+2;
+  }
+
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t[4]), buf_data[0]);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t[4]), NULL);
+  free(buf_data[0]);
+  buf_data[0] = NULL;
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  // Check result
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < n; ++i) {
+    OCL_ASSERT(((uint32_t*)buf_data[0])[3*i+0] == ((uint32_t*)buf_data[1])[3*i+0]);
+    OCL_ASSERT(((uint32_t*)buf_data[0])[3*i+1] == ((uint32_t*)buf_data[1])[3*i+1]);
+    OCL_ASSERT(((uint32_t*)buf_data[0])[3*i+2] == ((uint32_t*)buf_data[1])[3*i+2]);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_uint3_unaligned_copy);
+
+
+
diff --git a/utests/utest/compiler_uint8_copy.cpp b/utests/utest/compiler_uint8_copy.cpp
new file mode 100644
index 0000000..25dbd58
--- /dev/null
+++ b/utests/utest/compiler_uint8_copy.cpp
@@ -0,0 +1,35 @@
+#include "utest_helper.hpp"
+
+static void compiler_uint8_copy(void)
+{
+  const size_t n = 128;
+
+  // Setup kernel and buffers. Note that uint8 is aligned on 16 bytes
+  // according to the OCL specification
+  OCL_CREATE_KERNEL("compiler_uint8_copy");
+  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t[8]) * n);
+  for (uint32_t i = 0; i < n; ++i)
+    for (uint32_t j = 0; j < 8; ++j)
+      ((uint32_t*)buf_data[0])[8*i+j] = 8*i+j;
+
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t[8]), buf_data[0]);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t[8]), NULL);
+  free(buf_data[0]);
+  buf_data[0] = NULL;
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  // Check result
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < 8*n; ++i)
+    OCL_ASSERT(((uint32_t*)buf_data[0])[i] == ((uint32_t*)buf_data[1])[i]);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_uint8_copy);
+
diff --git a/utests/utest/compiler_unstructured_branch0.cpp b/utests/utest/compiler_unstructured_branch0.cpp
new file mode 100644
index 0000000..128a53e
--- /dev/null
+++ b/utests/utest/compiler_unstructured_branch0.cpp
@@ -0,0 +1,55 @@
+#include "utest_helper.hpp"
+
+static void compiler_unstructured_branch0(void)
+{
+  const size_t n = 32;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_unstructured_branch0");
+  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * n);
+  for (uint32_t i = 0; i < n; ++i) ((uint32_t*)buf_data[0])[i] = 2;
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t), buf_data[0]);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  free(buf_data[0]);
+  buf_data[0] = NULL;
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = 16;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  // First control flow
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < 16; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 2);
+  for (uint32_t i = 16; i < 32; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 1);
+
+  // Second control flow
+  for (uint32_t i = 0; i < n; ++i) ((int32_t*)buf_data[0])[i] = -2;
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < 32; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 1);
+
+  // Third control flow
+  for (uint32_t i = 0; i < 8; ++i) ((int32_t*)buf_data[0])[i] = 2;
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < 8; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 2);
+  for (uint32_t i = 8; i < 32; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 1);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_unstructured_branch0);
+
diff --git a/utests/utest/compiler_unstructured_branch1.cpp b/utests/utest/compiler_unstructured_branch1.cpp
new file mode 100644
index 0000000..6021f5b
--- /dev/null
+++ b/utests/utest/compiler_unstructured_branch1.cpp
@@ -0,0 +1,54 @@
+#include "utest_helper.hpp"
+
+static void compiler_unstructured_branch1(void)
+{
+  const size_t n = 16;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_unstructured_branch1");
+  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * n);
+  for (uint32_t i = 0; i < n; ++i) ((uint32_t*)buf_data[0])[i] = 2;
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t), buf_data[0]);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  free(buf_data[0]);
+  buf_data[0] = NULL;
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = 16;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  // First control flow
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < n; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 2);
+
+  // Second control flow
+  for (uint32_t i = 0; i < n; ++i) ((int32_t*)buf_data[0])[i] = -2;
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < n; ++i)
+    OCL_ASSERT(((uint32_t*)buf_data[1])[i] == 3);
+
+  // Third control flow
+  for (uint32_t i = 0; i < 8; ++i) ((int32_t*)buf_data[0])[i] = 2;
+  for (uint32_t i = 8; i < n; ++i) ((int32_t*)buf_data[0])[i] = -2;
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < 8; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 2);
+  for (uint32_t i = 8; i < n; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 3);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_unstructured_branch1);
+
diff --git a/utests/utest/compiler_unstructured_branch2.cpp b/utests/utest/compiler_unstructured_branch2.cpp
new file mode 100644
index 0000000..d61c6b5
--- /dev/null
+++ b/utests/utest/compiler_unstructured_branch2.cpp
@@ -0,0 +1,68 @@
+#include "utest_helper.hpp"
+
+static void compiler_unstructured_branch2(void)
+{
+  const size_t n = 16;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_unstructured_branch2");
+  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * n);
+  for (uint32_t i = 0; i < n; ++i) ((uint32_t*)buf_data[0])[i] = 2;
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t), buf_data[0]);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  free(buf_data[0]);
+  buf_data[0] = NULL;
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = 16;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  // First control flow
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < n; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 12);
+
+  // Second control flow
+  for (uint32_t i = 0; i < n; ++i) ((int32_t*)buf_data[0])[i] = -2;
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < n; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == -6);
+
+  // Third control flow
+  for (uint32_t i = 0; i < 8; ++i) ((int32_t*)buf_data[0])[i] = 2;
+  for (uint32_t i = 8; i < n; ++i) ((int32_t*)buf_data[0])[i] = -2;
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < 8; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 12);
+  for (uint32_t i = 8; i < n; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == -6);
+
+  // Fourth control flow
+  for (uint32_t i = 0; i < 4; ++i) ((int32_t*)buf_data[0])[i] = 1;
+  for (uint32_t i = 4; i < 8; ++i) ((int32_t*)buf_data[0])[i] = 2;
+  for (uint32_t i = 8; i < n; ++i) ((int32_t*)buf_data[0])[i] = -2;
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < 8; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 12);
+  for (uint32_t i = 8; i < n; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == -6);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_unstructured_branch2);
+
diff --git a/utests/utest/compiler_unstructured_branch3.cpp b/utests/utest/compiler_unstructured_branch3.cpp
new file mode 100644
index 0000000..0c6992a
--- /dev/null
+++ b/utests/utest/compiler_unstructured_branch3.cpp
@@ -0,0 +1,58 @@
+#include "utest_helper.hpp"
+
+static void compiler_unstructured_branch3(void)
+{
+  const size_t n = 16;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_unstructured_branch3");
+  buf_data[0] = (uint32_t*) malloc(sizeof(uint32_t) * n);
+  for (uint32_t i = 0; i < n; ++i) ((uint32_t*)buf_data[0])[i] = 2;
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(uint32_t), buf_data[0]);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(uint32_t), NULL);
+  free(buf_data[0]);
+  buf_data[0] = NULL;
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = 16;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+
+  // First control flow
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+
+  for (uint32_t i = 0; i < n; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 2);
+
+  // Second control flow
+  for (uint32_t i = 0; i < n; ++i) ((int32_t*)buf_data[0])[i] = 0;
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < n; ++i)
+    OCL_ASSERT(((uint32_t*)buf_data[1])[i] == 3);
+
+  // Third control flow
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < 8; ++i) ((int32_t*)buf_data[0])[i] = 2;
+  for (uint32_t i = 8; i < n; ++i) ((int32_t*)buf_data[0])[i] = 0;
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < 8; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 2);
+  for (uint32_t i = 8; i < n; ++i)
+    OCL_ASSERT(((int32_t*)buf_data[1])[i] == 3);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_unstructured_branch3);
+
diff --git a/utests/utest/compiler_upsample_int.cpp b/utests/utest/compiler_upsample_int.cpp
new file mode 100644
index 0000000..ee912f9
--- /dev/null
+++ b/utests/utest/compiler_upsample_int.cpp
@@ -0,0 +1,37 @@
+#include "utest_helper.hpp"
+
+void compiler_upsample_int(void)
+{
+  const int n = 32;
+  short src1[n];
+  unsigned short src2[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_upsample_int");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(short), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(short), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (int i = 0; i < n; ++i) {
+    src1[i] = ((short*)buf_data[0])[i] = rand();
+    src2[i] = ((short*)buf_data[1])[i] = rand();
+  }
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(2);
+  for (int i = 0; i < n; ++i)
+    OCL_ASSERT(((int*)buf_data[2])[i] == (int)((src1[i] << 16) | src2[i]));
+  OCL_UNMAP_BUFFER(2);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_upsample_int);
diff --git a/utests/utest/compiler_upsample_long.cpp b/utests/utest/compiler_upsample_long.cpp
new file mode 100644
index 0000000..b125ff4
--- /dev/null
+++ b/utests/utest/compiler_upsample_long.cpp
@@ -0,0 +1,38 @@
+#include <stdint.h>
+#include "utest_helper.hpp"
+
+void compiler_upsample_long(void)
+{
+  const int n = 32;
+  int src1[n];
+  unsigned int src2[n];
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_upsample_long");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(unsigned int), NULL);
+  OCL_CREATE_BUFFER(buf[2], 0, n * sizeof(int64_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+  globals[0] = n;
+  locals[0] = 16;
+
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (int i = 0; i < n; ++i) {
+    src1[i] = ((int*)buf_data[0])[i] = rand();
+    src2[i] = ((unsigned int*)buf_data[1])[i] = rand();
+  }
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(2);
+  for (int i = 0; i < n; ++i)
+    OCL_ASSERT(((int64_t*)buf_data[2])[i] == (((int64_t)(src1[i]) << 32) | src2[i]));
+  OCL_UNMAP_BUFFER(2);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_upsample_long);
diff --git a/utests/utest/compiler_vect_compare.cpp b/utests/utest/compiler_vect_compare.cpp
new file mode 100644
index 0000000..e9e45be
--- /dev/null
+++ b/utests/utest/compiler_vect_compare.cpp
@@ -0,0 +1,44 @@
+#include "utest_helper.hpp"
+
+typedef struct {
+  int x;
+  int y;
+  int z;
+  int w;
+} int4;
+
+void compiler_vect_compare(void)
+{
+  const size_t n = 16;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_vect_compare");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(int4), NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(int4), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+
+  OCL_MAP_BUFFER(0);
+  for (uint32_t i = 0; i < n; ++i) {
+    ((int4*)buf_data[0])[i].x = i & 0x1;
+    ((int4*)buf_data[0])[i].y = i & 0x2;
+    ((int4*)buf_data[0])[i].z = i & 0x4;
+    ((int4*)buf_data[0])[i].w = i & 0x8;
+  }
+  OCL_UNMAP_BUFFER(0);
+
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < 16; ++i) {
+    OCL_ASSERT(((int4*)buf_data[1])[i].x == (int)((i&0x1)?0xffffffff:0));
+    OCL_ASSERT(((int4*)buf_data[1])[i].y == (int)((i&0x2)?0xffffffff:0));
+    OCL_ASSERT(((int4*)buf_data[1])[i].z == (int)((i&0x4)?0xffffffff:0));
+    OCL_ASSERT(((int4*)buf_data[1])[i].w == (int)((i&0x8)?0xffffffff:0));
+  }
+  OCL_UNMAP_BUFFER(1);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_vect_compare);
diff --git a/utests/utest/compiler_vector_inc.cpp b/utests/utest/compiler_vector_inc.cpp
new file mode 100644
index 0000000..c44424b
--- /dev/null
+++ b/utests/utest/compiler_vector_inc.cpp
@@ -0,0 +1,46 @@
+#include <cstdint>
+#include <cstring>
+#include <iostream>
+#include "utest_helper.hpp"
+
+void compiler_vector_inc(void)
+{
+  const int n = 64;
+  char dst[n];
+  char src[n];
+
+  OCL_CREATE_KERNEL("compiler_vector_inc");
+  OCL_CREATE_BUFFER(buf[0], 0, n, NULL);
+  OCL_CREATE_BUFFER(buf[1], 0, n, NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n / 2;
+  locals[0] = 16;
+
+  for (int i = 0; i < n; ++i) {
+    dst[i] = i;
+    src[i] = (i / 2) % 4;
+  }
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  memcpy(buf_data[0], dst, n);
+  memcpy(buf_data[1], src, n);
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+
+  OCL_NDRANGE(1);
+
+  OCL_MAP_BUFFER(0);
+  char *dest = ((char *)buf_data[0]);
+  for (int i=0; i<n; ++i) {
+    char wish;
+    if (src[i/2] < 2)
+      wish = dst[i] + 1;
+    else
+      wish = dst[i] - 1;
+    OCL_ASSERT(dest[i] == wish);
+  }
+  OCL_UNMAP_BUFFER(0);
+}
+
+MAKE_UTEST_FROM_FUNCTION_WITH_ISSUE(compiler_vector_inc);
diff --git a/utests/utest/compiler_vector_load_store.cpp b/utests/utest/compiler_vector_load_store.cpp
new file mode 100644
index 0000000..b44abc7
--- /dev/null
+++ b/utests/utest/compiler_vector_load_store.cpp
@@ -0,0 +1,63 @@
+#include "utest_helper.hpp"
+#include <string.h>
+template<typename T>
+static void compiler_vector_load_store(int elemNum, const char *kernelName)
+{
+  const size_t n = elemNum * 256;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL_FROM_FILE("compiler_vector_load_store", kernelName);
+  buf_data[0] = (T*) malloc(sizeof(T) * n);
+  for (uint32_t i = 0; i < n; ++i)
+    ((T*)buf_data[0])[i] = i;
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, n * sizeof(T), buf_data[0]);
+  OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(T), NULL);
+  free(buf_data[0]);
+  buf_data[0] = NULL;
+
+  // Run the kernel
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+  globals[0] = n / elemNum;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+
+  // Check result
+  OCL_MAP_BUFFER(0);
+  OCL_MAP_BUFFER(1);
+  for (uint32_t i = 0; i < n; ++i)
+  {
+    int shift = ((i % elemNum) + 1);
+    if (strstr(kernelName, "double") == NULL)
+      OCL_ASSERT(((T*)buf_data[1])[i] == (T)(((T*)buf_data[0])[i] + shift));
+    else
+      OCL_ASSERT((((T*)buf_data[1])[i] - ((T)((T*)buf_data[0])[i] + shift)) < 1e-5);
+  }
+  OCL_UNMAP_BUFFER(0);
+  OCL_UNMAP_BUFFER(1);
+}
+
+#define compiler_vector_load_store(type, n, kernel_type, keep_program) \
+static void compiler_vector_ ##kernel_type ##n ##_load_store(void)\
+{\
+  compiler_vector_load_store<type>(n, "test_" #kernel_type #n);\
+}\
+MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(compiler_vector_ ## kernel_type ##n ##_load_store, keep_program);
+
+#define test_all_vector(type, kernel_type, keep_program) \
+  compiler_vector_load_store(type, 2, kernel_type, true) \
+  compiler_vector_load_store(type, 3, kernel_type, true) \
+  compiler_vector_load_store(type, 4, kernel_type, true) \
+  compiler_vector_load_store(type, 8, kernel_type, true) \
+  compiler_vector_load_store(type, 16, kernel_type, keep_program)
+
+test_all_vector(int8_t, char, true)
+test_all_vector(uint8_t, uchar, true)
+test_all_vector(int16_t, short, true)
+test_all_vector(uint16_t, ushort, true)
+test_all_vector(int32_t, int, true)
+test_all_vector(uint32_t, uint, true)
+test_all_vector(float, float, true)
+test_all_vector(double, double, true)
+test_all_vector(int64_t, long, true)
+test_all_vector(uint64_t, ulong, false)
diff --git a/utests/utest/compiler_volatile.cpp b/utests/utest/compiler_volatile.cpp
new file mode 100644
index 0000000..f4fe054
--- /dev/null
+++ b/utests/utest/compiler_volatile.cpp
@@ -0,0 +1,9 @@
+#include "utest_helper.hpp"
+
+void compiler_volatile(void)
+{
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_volatile");
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_volatile);
diff --git a/utests/utest/compiler_workitem_builtin.cpp b/utests/utest/compiler_workitem_builtin.cpp
new file mode 100644
index 0000000..092b0e7
--- /dev/null
+++ b/utests/utest/compiler_workitem_builtin.cpp
@@ -0,0 +1,9 @@
+#include "utest_helper.hpp"
+
+void compiler_workitem_builtin(void)
+{
+  OCL_CREATE_KERNEL("compiler_workitem_builtin");
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_workitem_builtin);
+
diff --git a/utests/utest/compiler_write_only.cpp b/utests/utest/compiler_write_only.cpp
new file mode 100644
index 0000000..3935535
--- /dev/null
+++ b/utests/utest/compiler_write_only.cpp
@@ -0,0 +1,43 @@
+/* 
+ * Copyright © 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+
+#include "utest_helper.hpp"
+
+static void compiler_write_only(void)
+{
+  const size_t n = 2048;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("test_write_only");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+
+  // Check results
+  for (uint32_t i = 0; i < n; ++i)
+    OCL_ASSERT(((uint32_t*)buf_data[0])[i] == i);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_write_only);
+
diff --git a/utests/utest/compiler_write_only_bytes.cpp b/utests/utest/compiler_write_only_bytes.cpp
new file mode 100644
index 0000000..1a13cdb
--- /dev/null
+++ b/utests/utest/compiler_write_only_bytes.cpp
@@ -0,0 +1,23 @@
+#include "utest_helper.hpp"
+
+void compiler_write_only_bytes(void)
+{
+  const size_t n = 32;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_write_only_bytes");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint8_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+
+  // Check results
+  for (uint32_t i = 0; i < n; ++i)
+    OCL_ASSERT(((uint8_t*)buf_data[0])[i] == 2);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_write_only_bytes);
diff --git a/utests/utest/compiler_write_only_shorts.cpp b/utests/utest/compiler_write_only_shorts.cpp
new file mode 100644
index 0000000..19988fe
--- /dev/null
+++ b/utests/utest/compiler_write_only_shorts.cpp
@@ -0,0 +1,24 @@
+#include "utest_helper.hpp"
+
+void compiler_write_only_shorts(void)
+{
+  const size_t n = 32;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_write_only_shorts");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint16_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+
+  // Check results
+  for (uint32_t i = 0; i < n; ++i)
+    OCL_ASSERT(((uint16_t*)buf_data[0])[i] == 2);
+}
+
+MAKE_UTEST_FROM_FUNCTION(compiler_write_only_shorts);
+
diff --git a/utests/utest/enqueue_copy_buf.cpp b/utests/utest/enqueue_copy_buf.cpp
new file mode 100644
index 0000000..969eaa8
--- /dev/null
+++ b/utests/utest/enqueue_copy_buf.cpp
@@ -0,0 +1,66 @@
+#include "utest_helper.hpp"
+
+void test_copy_buf(size_t sz, size_t src_off, size_t dst_off, size_t cb)
+{
+    unsigned int i;
+    OCL_MAP_BUFFER(0);
+
+    for (i=0; i < sz; i++) {
+        ((char*)buf_data[0])[i] = (rand() & 63);
+    }
+
+    OCL_UNMAP_BUFFER(0);
+
+    if (src_off + cb > sz || dst_off + cb > sz) {
+        /* Expect Error. */
+        OCL_ASSERT(clEnqueueCopyBuffer(queue, buf[0], buf[1],
+                                       src_off, dst_off, cb*sizeof(char), 0, NULL, NULL));
+        return;
+    }
+
+    OCL_ASSERT(!clEnqueueCopyBuffer(queue, buf[0], buf[1],
+                                    src_off, dst_off, cb*sizeof(char), 0, NULL, NULL));
+
+    OCL_MAP_BUFFER(0);
+    OCL_MAP_BUFFER(1);
+
+#if 0
+    printf("\n########### Src buffer: \n");
+    for (i = 0; i < cb; ++i)
+        printf(" %2.2u", ((unsigned char*)buf_data[0])[i + src_off]);
+
+    printf("\n########### dst buffer: \n");
+    for (i = 0; i < cb; ++i)
+        printf(" %2.2u", ((unsigned char*)buf_data[1])[i + dst_off]);
+#endif
+
+    // Check results
+    for (i = 0; i < cb; ++i) {
+        if (((char*)buf_data[0])[i + src_off] != ((char*)buf_data[1])[i + dst_off]) {
+            printf ("different index is %d\n", i);
+            OCL_ASSERT(0);
+        }
+    }
+
+    OCL_UNMAP_BUFFER(0);
+    OCL_UNMAP_BUFFER(1);
+
+}
+
+void enqueue_copy_buf(void)
+{
+    size_t i;
+    size_t j;
+    const size_t sz = 1024;
+
+    OCL_CREATE_BUFFER(buf[0], 0, sz * sizeof(char), NULL);
+    OCL_CREATE_BUFFER(buf[1], 0, sz * sizeof(char), NULL);
+
+    for (i=0; i<sz; i+=8) {
+        for (j=0; j<sz; j+=10) {
+            test_copy_buf(sz, i, j, sz/2);
+        }
+    }
+}
+
+MAKE_UTEST_FROM_FUNCTION(enqueue_copy_buf);
diff --git a/utests/utest/get_cl_info.cpp b/utests/utest/get_cl_info.cpp
new file mode 100644
index 0000000..4148ce9
--- /dev/null
+++ b/utests/utest/get_cl_info.cpp
@@ -0,0 +1,629 @@
+#include <string.h>
+#include <string>
+#include <map>
+#include <iostream>
+#include <fstream>
+#include <algorithm>
+#include "utest_helper.hpp"
+
+using namespace std;
+
+/* ***************************************************** *
+ * This file to test all the API like: clGetXXXXInfo     *
+ * ***************************************************** */
+#define NO_STANDARD_REF 0xFFFFF
+
+template <typename T = cl_uint>
+struct Info_Result {
+    T ret;
+    T refer;
+    int size;
+    typedef T type_value;
+
+    void * get_ret(void) {
+        return (void *)&ret;
+    }
+
+    Info_Result(T other) {
+        refer = other;
+        size = sizeof(T);
+    }
+
+    bool check_result (void) {
+        //printf("The refer is %d, we get result is %d\n", refer, ret);
+        if (ret != refer && refer != (T)NO_STANDARD_REF)
+            return false;
+
+        return true;
+    }
+};
+
+template <>
+struct Info_Result<char *> {
+    char * ret;
+    char * refer;
+    int size;
+    typedef char* type_value;
+
+    Info_Result(const char *other, int sz): refer(NULL) {
+        size = sz;
+        ret = (char *)malloc(sizeof(char) * sz);
+        if (other) {
+            refer = (char *)malloc(sizeof(char) * sz);
+            memcpy(refer, other, sz);
+        }
+    }
+
+    ~Info_Result(void) {
+        free(refer);
+        free(ret);
+    }
+
+    void * get_ret(void) {
+        return (void *)ret;
+    }
+
+    bool check_result (void) {
+        if (refer && ::memcmp(ret, refer, size))
+            return false;
+
+        return true;
+    }
+};
+
+template <> //Used for such as CL_PROGRAM_BINARIES
+struct Info_Result<char **> {
+    char ** ret;
+    char ** refer;
+    int *elt_size;
+    int size;
+    typedef char** type_value;
+
+    Info_Result(char **other, int *sz, int elt_num) {
+        size = elt_num;
+
+        ret = (char **)malloc(elt_num * sizeof(char *));
+        memset(ret, 0, (elt_num * sizeof(char *)));
+        refer = (char **)malloc(elt_num * sizeof(char *));
+        memset(refer, 0, (elt_num * sizeof(char *)));
+        elt_size = (int *)malloc(elt_num * sizeof(int));
+        memset(elt_size, 0, (elt_num * sizeof(int)));
+        if (sz) {
+            int i = 0;
+            for (; i < elt_num; i++) {
+                elt_size[i] = sz[i];
+                ret[i] = (char *)malloc(sz[i] * sizeof(char));
+
+                if (other[i] && elt_size[i] > 0) {
+                    refer[i] = (char *)malloc(sz[i] * sizeof(char));
+                    memcpy(&refer[i], &other[i], sz[i]);
+                }
+                else
+                    refer[i] = NULL;
+            }
+        }
+    }
+
+    ~Info_Result(void) {
+        int i = 0;
+        for (; i < size; i++) {
+            if (refer[i])
+                free(refer[i]);
+            free(ret[i]);
+        }
+        free(ret);
+        free(refer);
+        free(elt_size);
+    }
+
+    void * get_ret(void) {
+        return (void *)ret;
+    }
+
+    bool check_result (void) {
+        int i = 0;
+        for (; i < size; i++) {
+            if (refer[i] && ::memcmp(ret[i], refer[i], elt_size[i]))
+                return false;
+        }
+
+        return true;
+    }
+};
+
+template <typename T1, typename T2>
+struct Traits {
+    static bool Is_Same(void) {
+        return false;
+    };
+};
+
+template <typename T1>
+struct Traits<T1, T1> {
+    static bool Is_Same(void) {
+        return true;
+    };
+};
+
+template <typename T>
+Info_Result<T>* cast_as(void *info)
+{
+    Info_Result<T>* ret;
+    ret = reinterpret_cast<Info_Result<T>*>(info);
+    OCL_ASSERT((Traits<T, typename Info_Result<T>::type_value>::Is_Same()));
+    return ret;
+}
+
+
+#define CALL_INFO_AND_RET(TYPE, FUNC, ...) \
+    do { \
+	cl_int ret; \
+	size_t ret_size; \
+	\
+	Info_Result<TYPE>* info = cast_as<TYPE>(x.second); \
+	ret = FUNC (__VA_ARGS__, x.first, \
+		info->size, info->get_ret(), &ret_size); \
+	OCL_ASSERT((!ret)); \
+	OCL_ASSERT((info->check_result())); \
+	delete info; \
+    } while(0)
+
+/* ***************************************************** *
+ * clGetProgramInfo                                      *
+ * ***************************************************** */
+#define CALL_PROGINFO_AND_RET(TYPE) CALL_INFO_AND_RET(TYPE, clGetProgramInfo, program)
+
+void get_program_info(void)
+{
+    map<cl_program_info, void *> maps;
+    int expect_value;
+    char * expect_source;
+    int sz;
+    char *ker_path = (char *)malloc(4096 * sizeof(char));
+    const char *kiss_path = getenv("OCL_KERNEL_PATH");
+    string line;
+    string source_code;
+
+    sprintf(ker_path, "%s/%s", kiss_path, "compiler_if_else.cl");
+
+    ifstream in(ker_path);
+    while (getline(in,line)) {
+        source_code = (source_code == "") ?
+                      source_code + line : source_code + "\n" + line;
+    }
+    free(ker_path);
+    //cout<< source_code;
+    source_code = source_code + "\n";
+
+    expect_source = (char *)source_code.c_str();
+
+    OCL_CREATE_KERNEL("compiler_if_else");
+
+    /* First test for clGetProgramInfo. We just have 1 devices now */
+    expect_value = 2;//One program, one kernel.
+    maps.insert(make_pair(CL_PROGRAM_REFERENCE_COUNT,
+                          (void *)(new Info_Result<>(((cl_uint)expect_value)))));
+    maps.insert(make_pair(CL_PROGRAM_CONTEXT,
+                          (void *)(new Info_Result<cl_context>(ctx))));
+    expect_value = 1;
+    maps.insert(make_pair(CL_PROGRAM_NUM_DEVICES,
+                          (void *)(new Info_Result<>(((cl_uint)expect_value)))));
+    maps.insert(make_pair(CL_PROGRAM_DEVICES,
+                          (void *)(new Info_Result<cl_device_id>(device))));
+    sz = (strlen(expect_source) + 1);
+    maps.insert(make_pair(CL_PROGRAM_SOURCE,
+                          (void *)(new Info_Result<char *>(expect_source, sz))));
+    expect_value = NO_STANDARD_REF;
+    maps.insert(make_pair(CL_PROGRAM_BINARY_SIZES,
+                          (void *)(new Info_Result<size_t>((size_t)expect_value))));
+    sz = 4096; //big enough?
+    expect_source = NULL;
+    maps.insert(make_pair(CL_PROGRAM_BINARIES,
+                          (void *)(new Info_Result<char **>(&expect_source, &sz, 1))));
+
+    std::for_each(maps.begin(), maps.end(), [](pair<cl_program_info, void *> x) {
+        switch (x.first) {
+        case CL_PROGRAM_REFERENCE_COUNT:
+        case CL_PROGRAM_NUM_DEVICES:
+            CALL_PROGINFO_AND_RET(cl_uint);
+            break;
+        case CL_PROGRAM_CONTEXT:
+            CALL_PROGINFO_AND_RET(cl_context);
+            break;
+        case CL_PROGRAM_DEVICES:
+            CALL_PROGINFO_AND_RET(cl_device_id);
+            break;
+        case CL_PROGRAM_SOURCE:
+            CALL_PROGINFO_AND_RET(char *);
+            break;
+        case CL_PROGRAM_BINARY_SIZES:
+            CALL_PROGINFO_AND_RET(size_t);
+            break;
+        case CL_PROGRAM_BINARIES:
+            CALL_PROGINFO_AND_RET(char **);
+            break;
+        default:
+            break;
+        }
+    });
+}
+
+MAKE_UTEST_FROM_FUNCTION(get_program_info);
+
+/* ***************************************************** *
+ * clGetCommandQueueInfo                                 *
+ * ***************************************************** */
+#define CALL_QUEUEINFO_AND_RET(TYPE) CALL_INFO_AND_RET(TYPE, clGetCommandQueueInfo, queue)
+
+void get_queue_info(void)
+{
+    /* use the compiler_fabs case to test us. */
+    const size_t n = 16;
+    map<cl_program_info, void *> maps;
+    int expect_ref;
+    cl_command_queue_properties prop;
+
+    OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+    OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+    OCL_CREATE_KERNEL("compiler_fabs");
+
+    OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+    OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+
+    globals[0] = 16;
+    locals[0] = 16;
+
+    OCL_MAP_BUFFER(0);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+        ((float*)buf_data[0])[i] = .1f * (rand() & 15) - .75f;
+    OCL_UNMAP_BUFFER(0);
+
+    // Run the kernel on GPU
+    OCL_NDRANGE(1);
+
+    /* Do our test.*/
+    maps.insert(make_pair(CL_QUEUE_CONTEXT,
+                          (void *)(new Info_Result<cl_context>(ctx))));
+    maps.insert(make_pair(CL_QUEUE_DEVICE,
+                          (void *)(new Info_Result<cl_device_id>(device))));
+
+    expect_ref = 1;
+    maps.insert(make_pair(CL_QUEUE_REFERENCE_COUNT,
+                          (void *)(new Info_Result<>(((cl_uint)expect_ref)))));
+
+    prop = 0;
+    maps.insert(make_pair(CL_QUEUE_PROPERTIES,
+                          (void *)(new Info_Result<cl_command_queue_properties>(
+                                       ((cl_command_queue_properties)prop)))));
+
+    std::for_each(maps.begin(), maps.end(), [](pair<cl_program_info, void *> x) {
+        switch (x.first) {
+        case CL_QUEUE_CONTEXT:
+            CALL_QUEUEINFO_AND_RET(cl_context);
+            break;
+        case CL_QUEUE_DEVICE:
+            CALL_QUEUEINFO_AND_RET(cl_device_id);
+            break;
+        case CL_QUEUE_REFERENCE_COUNT:
+            CALL_QUEUEINFO_AND_RET(cl_uint);
+            break;
+        case CL_QUEUE_PROPERTIES:
+            CALL_QUEUEINFO_AND_RET(cl_command_queue_properties);
+            break;
+        default:
+            break;
+        }
+    });
+}
+
+MAKE_UTEST_FROM_FUNCTION(get_queue_info);
+
+/* ***************************************************** *
+ * clGetProgramBuildInfo                                 *
+ * ***************************************************** */
+#define CALL_PROG_BUILD_INFO_AND_RET(TYPE)  CALL_INFO_AND_RET(TYPE, \
+             clGetProgramBuildInfo, program, device)
+
+void get_program_build_info(void)
+{
+    map<cl_program_info, void *> maps;
+    cl_build_status expect_status;
+    char build_opt[] = "-emit-llvm";
+    char log[] = "";
+    int sz;
+
+    OCL_CALL (cl_kernel_init, "compiler_if_else.cl", "compiler_if_else", SOURCE, build_opt);
+
+    /* Do our test.*/
+    expect_status = CL_BUILD_SUCCESS;
+    maps.insert(make_pair(CL_PROGRAM_BUILD_STATUS,
+                          (void *)(new Info_Result<cl_build_status>(expect_status))));
+    sz = strlen(build_opt) + 1;
+    maps.insert(make_pair(CL_PROGRAM_BUILD_OPTIONS,
+                          (void *)(new Info_Result<char *>(build_opt, sz))));
+    sz = strlen(log) + 1;
+    maps.insert(make_pair(CL_PROGRAM_BUILD_LOG, /* not supported now, just "" */
+                          (void *)(new Info_Result<char *>(log, sz))));
+
+    std::for_each(maps.begin(), maps.end(), [](pair<cl_program_info, void *> x) {
+        switch (x.first) {
+        case CL_PROGRAM_BUILD_STATUS:
+            CALL_PROG_BUILD_INFO_AND_RET(cl_build_status);
+            break;
+        case CL_PROGRAM_BUILD_OPTIONS:
+            CALL_PROG_BUILD_INFO_AND_RET(char *);
+            break;
+        case CL_PROGRAM_BUILD_LOG:
+            CALL_PROG_BUILD_INFO_AND_RET(char *);
+            break;
+        default:
+            break;
+        }
+    });
+}
+
+MAKE_UTEST_FROM_FUNCTION(get_program_build_info);
+
+/* ***************************************************** *
+ * clGetContextInfo                                      *
+ * ***************************************************** */
+#define CALL_CONTEXTINFO_AND_RET(TYPE) CALL_INFO_AND_RET(TYPE, clGetContextInfo, ctx)
+
+void get_context_info(void)
+{
+    /* use the compiler_fabs case to test us. */
+    const size_t n = 16;
+    map<cl_context_info, void *> maps;
+    int expect_ref;
+
+    OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+    OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+    OCL_CREATE_KERNEL("compiler_fabs");
+
+    OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+    OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+
+    globals[0] = 16;
+    locals[0] = 16;
+
+    OCL_MAP_BUFFER(0);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+        ((float*)buf_data[0])[i] = .1f * (rand() & 15) - .75f;
+    OCL_UNMAP_BUFFER(0);
+
+    // Run the kernel on GPU
+    OCL_NDRANGE(1);
+
+    /* Do our test.*/
+    expect_ref = 1;
+    maps.insert(make_pair(CL_CONTEXT_NUM_DEVICES,
+                          (void *)(new Info_Result<cl_uint>(expect_ref))));
+    maps.insert(make_pair(CL_CONTEXT_DEVICES,
+                          (void *)(new Info_Result<cl_device_id>(device))));
+    // reference count seems depends on the implementation
+    expect_ref = NO_STANDARD_REF;
+    maps.insert(make_pair(CL_CONTEXT_REFERENCE_COUNT,
+                          (void *)(new Info_Result<>(((cl_uint)expect_ref)))));
+
+    maps.insert(make_pair(CL_CONTEXT_PROPERTIES,
+                          (void *)(new Info_Result<char*>(
+                                       (const char*)NULL, 100*sizeof(cl_context_properties)))));
+
+    std::for_each(maps.begin(), maps.end(), [](pair<cl_context_info, void *> x) {
+        switch (x.first) {
+        case CL_CONTEXT_NUM_DEVICES:
+            CALL_CONTEXTINFO_AND_RET(cl_uint);
+            break;
+        case CL_CONTEXT_DEVICES:
+            CALL_CONTEXTINFO_AND_RET(cl_device_id);
+            break;
+        case CL_CONTEXT_REFERENCE_COUNT:
+            CALL_CONTEXTINFO_AND_RET(cl_uint);
+            break;
+        case CL_CONTEXT_PROPERTIES:
+            CALL_CONTEXTINFO_AND_RET(char*);
+            break;
+        default:
+            break;
+        }
+    });
+}
+
+MAKE_UTEST_FROM_FUNCTION(get_context_info);
+
+/* ***************************************************** *
+ * clGetKernelInfo                                      *
+ * ***************************************************** */
+#define CALL_KERNELINFO_AND_RET(TYPE) CALL_INFO_AND_RET(TYPE, clGetKernelInfo, kernel)
+
+void get_kernel_info(void)
+{
+    /* use the compiler_fabs case to test us. */
+    const size_t n = 16;
+    map<cl_kernel_info, void *> maps;
+    int expect_ref;
+
+    OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+    OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+    OCL_CREATE_KERNEL("compiler_fabs");
+
+    OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+    OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+
+    // Run the kernel on GPU
+
+    maps.insert(make_pair(CL_KERNEL_PROGRAM,
+                          (void *)(new Info_Result<cl_program>(program))));
+    maps.insert(make_pair(CL_KERNEL_CONTEXT,
+                          (void *)(new Info_Result<cl_context>(ctx))));
+    // reference count seems depends on the implementation
+    expect_ref = NO_STANDARD_REF;
+    maps.insert(make_pair(CL_KERNEL_REFERENCE_COUNT,
+                          (void *)(new Info_Result<>(((cl_uint)expect_ref)))));
+
+    expect_ref = 2;
+    maps.insert(make_pair(CL_KERNEL_NUM_ARGS,
+                          (void *)(new Info_Result<cl_uint>(expect_ref))));
+
+    const char * expected_name = "compiler_fabs";
+    maps.insert(make_pair(CL_KERNEL_FUNCTION_NAME,
+                          (void *)(new Info_Result<char*>(expected_name, strlen(expected_name)+1))));
+
+    std::for_each(maps.begin(), maps.end(), [](pair<cl_kernel_info, void *> x) {
+        switch (x.first) {
+        case CL_KERNEL_PROGRAM:
+            CALL_KERNELINFO_AND_RET(cl_program);
+            break;
+        case CL_KERNEL_CONTEXT:
+            CALL_KERNELINFO_AND_RET(cl_context);
+            break;
+        case CL_KERNEL_REFERENCE_COUNT:
+            CALL_KERNELINFO_AND_RET(cl_uint);
+            break;
+        case CL_KERNEL_NUM_ARGS:
+            CALL_KERNELINFO_AND_RET(cl_uint);
+            break;
+        case CL_KERNEL_FUNCTION_NAME:
+            CALL_KERNELINFO_AND_RET(char*);
+            break;
+        default:
+            break;
+        }
+    });
+}
+
+MAKE_UTEST_FROM_FUNCTION(get_kernel_info);
+
+/* ***************************************************** *
+ * clGetImageInfo                                        *
+ * ***************************************************** */
+void get_image_info(void)
+{
+  const size_t w = 512;
+  const size_t h = 512;
+  cl_image_format format;
+  format.image_channel_order = CL_RGBA;
+  format.image_channel_data_type = CL_UNSIGNED_INT8;
+  OCL_CREATE_IMAGE2D(buf[0], 0, &format, w, h, 0, NULL);
+  cl_mem image = buf[0];
+
+  cl_image_format ret_format;
+  OCL_CALL(clGetImageInfo, image, CL_IMAGE_FORMAT, sizeof(ret_format), &ret_format, NULL);
+  OCL_ASSERT(format.image_channel_order == ret_format.image_channel_order);
+  OCL_ASSERT(format.image_channel_data_type == ret_format.image_channel_data_type);
+
+  size_t element_size;
+  OCL_CALL(clGetImageInfo, image, CL_IMAGE_ELEMENT_SIZE, sizeof(element_size), &element_size, NULL);
+  OCL_ASSERT(element_size == 4);
+
+  size_t row_pitch;
+  OCL_CALL(clGetImageInfo, image, CL_IMAGE_ROW_PITCH, sizeof(row_pitch), &row_pitch, NULL);
+  OCL_ASSERT(row_pitch == 4 * w);
+
+  size_t slice_pitch;
+  OCL_CALL(clGetImageInfo, image, CL_IMAGE_SLICE_PITCH, sizeof(slice_pitch), &slice_pitch, NULL);
+  OCL_ASSERT(slice_pitch == 0);
+
+  size_t width;
+  OCL_CALL(clGetImageInfo, image, CL_IMAGE_WIDTH, sizeof(width), &width, NULL);
+  OCL_ASSERT(width == w);
+
+  size_t height;
+  OCL_CALL(clGetImageInfo, image, CL_IMAGE_HEIGHT, sizeof(height), &height, NULL);
+  OCL_ASSERT(height == h);
+
+  size_t depth;
+  OCL_CALL(clGetImageInfo, image, CL_IMAGE_DEPTH, sizeof(depth), &depth, NULL);
+  OCL_ASSERT(depth == 1);
+}
+
+MAKE_UTEST_FROM_FUNCTION(get_image_info);
+
+/* ***************************************************** *
+ * clGetMemObjectInfo                                    *
+ * ***************************************************** */
+#define CALL_GETMEMINFO_AND_RET(TYPE) CALL_INFO_AND_RET(TYPE, clGetMemObjectInfo, (buf[0]))
+
+void get_mem_info(void)
+{
+    map<cl_mem_info, void *> maps;
+    int expect_ref;
+    cl_mem sub_buf;
+    cl_int error;
+
+    OCL_CREATE_BUFFER(buf[1], 0, 4096, NULL);
+
+    cl_buffer_region region;
+    region.origin = 1024;
+    region.size = 2048;
+    sub_buf = clCreateSubBuffer(buf[1], 0, CL_BUFFER_CREATE_TYPE_REGION, &region, &error );
+    buf[0] = sub_buf;
+    OCL_ASSERT(error == CL_SUCCESS);
+
+    void * map_ptr = clEnqueueMapBuffer(queue, buf[0], 1, CL_MAP_READ, 0, 64, 0, NULL, NULL, NULL);
+
+    expect_ref = CL_MEM_OBJECT_BUFFER;
+    maps.insert(make_pair(CL_MEM_TYPE,
+                          (void *)(new Info_Result<cl_mem_object_type>((cl_mem_object_type)expect_ref))));
+    expect_ref = 0;
+    maps.insert(make_pair(CL_MEM_FLAGS,
+                          (void *)(new Info_Result<cl_mem_flags>(expect_ref))));
+    expect_ref = 2048;
+    maps.insert(make_pair(CL_MEM_SIZE,
+                          (void *)(new Info_Result<size_t>(((size_t)expect_ref)))));
+    expect_ref = 0;
+    maps.insert(make_pair(CL_MEM_HOST_PTR,
+                          (void *)(new Info_Result<size_t>(((size_t)expect_ref)))));
+    expect_ref = 1;
+    maps.insert(make_pair(CL_MEM_MAP_COUNT,
+                          (void *)(new Info_Result<cl_uint>(((cl_uint)expect_ref)))));
+    expect_ref = 1;
+    maps.insert(make_pair(CL_MEM_REFERENCE_COUNT,
+                          (void *)(new Info_Result<cl_uint>(((cl_uint)expect_ref)))));
+    maps.insert(make_pair(CL_MEM_CONTEXT,
+                          (void *)(new Info_Result<cl_context>(((cl_context)ctx)))));
+    maps.insert(make_pair(CL_MEM_ASSOCIATED_MEMOBJECT,
+                          (void *)(new Info_Result<cl_mem>(((cl_mem)buf[1])))));
+    expect_ref = 1024;
+    maps.insert(make_pair(CL_MEM_OFFSET,
+                          (void *)(new Info_Result<size_t>(((size_t)expect_ref)))));
+
+    std::for_each(maps.begin(), maps.end(), [](pair<cl_mem_info, void *> x) {
+        switch (x.first) {
+        case CL_MEM_TYPE:
+            CALL_GETMEMINFO_AND_RET(cl_mem_object_type);
+            break;
+        case CL_MEM_FLAGS:
+            CALL_GETMEMINFO_AND_RET(cl_mem_flags);
+            break;
+        case CL_MEM_SIZE:
+            CALL_GETMEMINFO_AND_RET(size_t);
+            break;
+        case CL_MEM_HOST_PTR:
+            CALL_GETMEMINFO_AND_RET(size_t);
+            break;
+        case CL_MEM_MAP_COUNT:
+            CALL_GETMEMINFO_AND_RET(cl_uint);
+            break;
+        case CL_MEM_REFERENCE_COUNT:
+            CALL_GETMEMINFO_AND_RET(cl_uint);
+            break;
+        case CL_MEM_CONTEXT:
+            CALL_GETMEMINFO_AND_RET(cl_context);
+            break;
+        case CL_MEM_ASSOCIATED_MEMOBJECT:
+            CALL_GETMEMINFO_AND_RET(cl_mem);
+            break;
+        case CL_MEM_OFFSET:
+            CALL_GETMEMINFO_AND_RET(size_t);
+            break;
+
+        default:
+            break;
+        }
+    });
+
+    clEnqueueUnmapMemObject(queue, buf[0], map_ptr, 0, NULL, NULL);
+}
+
+MAKE_UTEST_FROM_FUNCTION(get_mem_info);
diff --git a/utests/utest/load_program_from_bin.cpp b/utests/utest/load_program_from_bin.cpp
new file mode 100644
index 0000000..d45c2bd
--- /dev/null
+++ b/utests/utest/load_program_from_bin.cpp
@@ -0,0 +1,77 @@
+#include "utest_helper.hpp"
+#include "utest_file_map.hpp"
+#include <cmath>
+#include <algorithm>
+
+using namespace std;
+
+static void cpu(int global_id, float *src, float *dst) {
+    dst[global_id] = ceilf(src[global_id]);
+}
+
+static void test_load_program_from_bin(void)
+{
+    const size_t n = 16;
+    float cpu_dst[16], cpu_src[16];
+    cl_int status;
+    cl_int binary_status;
+    char *ker_path = NULL;
+
+    cl_file_map_t *fm = cl_file_map_new();
+    ker_path = cl_do_kiss_path("compiler_ceil.bin", device);
+    OCL_ASSERT (cl_file_map_open(fm, ker_path) == CL_FILE_MAP_SUCCESS);
+
+    const unsigned char *src = (const unsigned char *)cl_file_map_begin(fm);
+    const size_t sz = cl_file_map_size(fm);
+
+    program = clCreateProgramWithBinary(ctx, 1,
+              &device, &sz, &src, &binary_status, &status);
+
+    OCL_ASSERT(program && status == CL_SUCCESS);
+
+    /* OCL requires to build the program even if it is created from a binary */
+    OCL_ASSERT(clBuildProgram(program, 1, &device, NULL, NULL, NULL) == CL_SUCCESS);
+
+    kernel = clCreateKernel(program, "compiler_ceil", &status);
+    OCL_ASSERT(status == CL_SUCCESS);
+
+    OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+    OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+    OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+    OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+    globals[0] = 16;
+    locals[0] = 16;
+
+    // Run random tests
+    for (uint32_t pass = 0; pass < 8; ++pass) {
+        OCL_MAP_BUFFER(0);
+        for (int32_t i = 0; i < (int32_t) n; ++i)
+            cpu_src[i] = ((float*)buf_data[0])[i] = .1f * (rand() & 15) - .75f;
+        OCL_UNMAP_BUFFER(0);
+
+        // Run the kernel on GPU
+        OCL_NDRANGE(1);
+
+        // Run on CPU
+        for (int32_t i = 0; i < (int32_t) n; ++i) cpu(i, cpu_src, cpu_dst);
+
+        // Compare
+        OCL_MAP_BUFFER(1);
+
+#if 0
+        printf("#### GPU:\n");
+        for (int32_t i = 0; i < (int32_t) n; ++i)
+            printf(" %f", ((float *)buf_data[1])[i]);
+        printf("\n#### CPU:\n");
+        for (int32_t i = 0; i < (int32_t) n; ++i)
+            printf(" %f", cpu_dst[i]);
+        printf("\n");
+#endif
+
+        for (int32_t i = 0; i < (int32_t) n; ++i)
+            OCL_ASSERT(((float *)buf_data[1])[i] == cpu_dst[i]);
+        OCL_UNMAP_BUFFER(1);
+    }
+}
+
+MAKE_UTEST_FROM_FUNCTION(test_load_program_from_bin);
diff --git a/utests/utest/my_test.cpp b/utests/utest/my_test.cpp
new file mode 100644
index 0000000..73a4718
--- /dev/null
+++ b/utests/utest/my_test.cpp
@@ -0,0 +1,99 @@
+#include "utest_helper.hpp"
+
+struct seg {
+	unsigned int end, color, offset;
+	seg(int e, int c):end(e), color(c) {}
+};
+typedef struct seg seg;
+
+typedef struct {
+	std::vector<seg> segs;
+} rle_data;
+
+struct rle_image {
+	int width, height;
+	std::vector<rle_data> data;
+	rle_image(int w, int h):width(w), height(h) {}
+};
+typedef struct rle_image rle_image;
+
+static  void read_data(const char *filename, rle_image &image)
+{
+	FILE *fp;
+	char line[4096];
+	int i;
+	fp = fopen(filename, "r");
+	for (i = 0; i < image.height; i++) {
+		char *nptr = line, *endptr;
+		rle_data d;
+		int start = 0;
+		if (fgets(line, sizeof(line), fp) == NULL)
+			break;
+		for (;;) {
+			int len = strtol(nptr, &endptr, 10);
+			nptr = endptr;
+			int color = strtol(nptr, &endptr, 10);
+			nptr = endptr;
+			seg s(start + len, color);
+			d.segs.push_back(s);
+			if (*endptr == '\n' || *endptr == 0)
+				break;
+			start += len;
+		}
+		image.data.push_back(d);
+	}
+	fclose(fp);
+}
+
+static void prepare_rle_buffer(rle_image &image, std::vector<int> &rle_buffer, int *offsets)
+{
+	int offset = 0;
+	for (int i = 0; i < image.height; i++) {
+		unsigned int j;
+		rle_data d = image.data[i];
+		for (j = 0; j < d.segs.size(); j++) {
+			rle_buffer.push_back(d.segs[j].end);
+			rle_buffer.push_back(d.segs[j].color);
+		}
+		offsets[i] = offset;
+		offset += j;
+	}
+
+}
+
+static void expand_rle(rle_image &image)
+{
+	std::vector<int> rle_buffer;
+	int offsets[image.height];
+	int w = image.width/16;
+	prepare_rle_buffer(image, rle_buffer, offsets);
+	OCL_CREATE_KERNEL("my_test");
+	OCL_CREATE_BUFFER(buf[0], CL_MEM_COPY_HOST_PTR, 2*sizeof(int)*rle_buffer.size(), &rle_buffer[0]);
+	OCL_CREATE_BUFFER(buf[1], CL_MEM_COPY_HOST_PTR, sizeof(int)*image.height, offsets);
+	OCL_CREATE_BUFFER(buf[2], 0, image.width*image.height, NULL);
+	OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+	OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+	OCL_SET_ARG(2, sizeof(cl_mem), &buf[2]);
+	OCL_SET_ARG(3, sizeof(w), &w);
+
+	globals[0] = image.height;
+	locals[0] = 16;
+	OCL_NDRANGE(1);
+#if 1
+	OCL_MAP_BUFFER(2);
+	for (int i = 0; i < image.height; i++) {
+		for (int j = 0; j < image.width; j++)
+			printf("%d ", ((unsigned char*)buf_data[2])[i*image.width+j]);
+		printf("\n****\n");
+	}
+	OCL_UNMAP_BUFFER(2);
+#endif
+}
+
+static void my_test(void)
+{
+	rle_image image(256, 256);
+	read_data("new_data.txt", image);
+	expand_rle(image);
+}
+MAKE_UTEST_FROM_FUNCTION(my_test);
diff --git a/utests/utest/new_data.txt b/utests/utest/new_data.txt
new file mode 100644
index 0000000..b12bb13
--- /dev/null
+++ b/utests/utest/new_data.txt
@@ -0,0 +1,256 @@
+6 5 3 4 37 15 10 2 200 3
+156 1 97 200 3 3
+2 1 2 10 128 2 124 25
+5 5 251 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 1
+256 2
+256 3
+256 0
+256 0
+256 0
+256 1
+256 2
+256 3
+256 0
+256 0
+256 0
+256 0
+256 0
+256 4
+256 5
+256 6
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 3
+100 255 100 155 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 0 100 255 56 0
+100 253 100 255 56 0
+56 0 20 8 180 9
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+256 0
+1 253 5 252 150 168 100 254
+150 168 100 254 1 253 5 252
diff --git a/utests/utest/profiling_exec.cpp b/utests/utest/profiling_exec.cpp
new file mode 100644
index 0000000..2244300
--- /dev/null
+++ b/utests/utest/profiling_exec.cpp
@@ -0,0 +1,101 @@
+#include "utest_helper.hpp"
+#include "string.h"
+
+static void cpu_exec (int n, float* src, float* dst)
+{
+    int i = 0;
+    for (; i < n; i++) {
+	float f = src[i];
+	f = f < 0 ? -f : f;
+	dst[i] = f;
+    }
+}
+
+#define QUEUE_SECONDS_LIMIT 10
+#define SUBMIT_SECONDS_LIMIT 20
+#define COMMAND_SECONDS_LIMIT 10
+
+static void check_profiling_time(cl_ulong queued, cl_ulong submit, cl_ulong start, cl_ulong end)
+{
+    size_t profiling_resolution = 0;
+    OCL_CALL(clGetDeviceInfo, device, CL_DEVICE_PROFILING_TIMER_RESOLUTION,
+             sizeof(profiling_resolution), &profiling_resolution, NULL);
+
+    /* Convert the time to second. */
+    double queue_to_submit = (double)(submit - queued)*1e-9;
+    double submit_to_start = (double)(start - submit)*1e-9;
+    double start_to_end = (double)(end - start)*1e-9;
+
+    //printf("Profiling info:\n");
+    //printf("Time from queue to submit : %fms\n", (double)(queue_to_submit) * 1000.f );
+    //printf( "Time from submit to start : %fms\n", (double)(submit_to_start) * 1000.f );
+    //printf( "Time from start to end: %fms\n", (double)(start_to_end) * 1000.f );
+
+    OCL_ASSERTM(queued <= submit, "Enqueue time is later than submit time, invalid\n");
+    OCL_ASSERTM(submit <= start, "Submit time is later than start time, invalid\n");
+    OCL_ASSERTM(start <= end, "Start time is later than end time, invalid\n");
+
+    OCL_ASSERTM(queue_to_submit <= QUEUE_SECONDS_LIMIT, "Too large time from queue to submit\n");
+    OCL_ASSERTM(submit_to_start <= QUEUE_SECONDS_LIMIT, "Too large time from submit to start\n");
+    OCL_ASSERTM(start_to_end <= QUEUE_SECONDS_LIMIT, "Too large time from start to end\n");
+}
+
+static void profiling_exec(void)
+{
+    const size_t n = 512;
+    cl_int status = CL_SUCCESS;
+    cl_command_queue profiling_queue = NULL;
+    cl_command_queue tmp_queue = NULL;
+    float* cpu_src = (float *)malloc(n*sizeof(float));
+    float* cpu_dst = (float *)malloc(n*sizeof(float));
+    cl_event exec_event;
+    cl_ulong time_queue, time_submit, time_start, time_end;
+
+
+    /* Because the profiling prop, we can not use default queue. */
+    profiling_queue = clCreateCommandQueue(ctx, device, CL_QUEUE_PROFILING_ENABLE, &status);
+    OCL_ASSERT(status == CL_SUCCESS);
+
+    /* save the default queue. */
+    tmp_queue = queue;
+    queue = profiling_queue;
+
+    OCL_CREATE_KERNEL("compiler_fabs");
+
+    OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(float), NULL);
+    OCL_CREATE_BUFFER(buf[1], 0, n * sizeof(float), NULL);
+    OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+    OCL_SET_ARG(1, sizeof(cl_mem), &buf[1]);
+    globals[0] = locals[0] = n;
+
+    OCL_MAP_BUFFER(0);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+	cpu_src[i] = ((float*)buf_data[0])[i] = .1f * (rand() & 15) - .75f;
+    OCL_UNMAP_BUFFER(0);
+
+    cpu_exec(n, cpu_src, cpu_dst);
+
+    // Run the kernel on GPU
+    OCL_CALL(clEnqueueNDRangeKernel, queue, kernel, 1, NULL, globals, locals, 0, NULL, &exec_event);
+    OCL_CALL(clWaitForEvents, 1, &exec_event);
+
+    OCL_CALL(clGetEventProfilingInfo, exec_event, CL_PROFILING_COMMAND_QUEUED, sizeof(cl_ulong), &time_queue, NULL);
+    OCL_CALL(clGetEventProfilingInfo, exec_event, CL_PROFILING_COMMAND_SUBMIT, sizeof(cl_ulong), &time_submit, NULL);
+    OCL_CALL(clGetEventProfilingInfo, exec_event, CL_PROFILING_COMMAND_START, sizeof(cl_ulong), &time_start, NULL);
+    OCL_CALL(clGetEventProfilingInfo, exec_event, CL_PROFILING_COMMAND_END, sizeof(cl_ulong), &time_end, NULL);
+
+    check_profiling_time(time_queue, time_submit, time_start, time_end);
+
+    // Compare
+    OCL_MAP_BUFFER(1);
+    for (int32_t i = 0; i < (int32_t) n; ++i)
+	OCL_ASSERT(((float *)buf_data[1])[i] == cpu_dst[i]);
+    OCL_UNMAP_BUFFER(1);
+
+    queue = tmp_queue;
+    clReleaseCommandQueue(profiling_queue);
+    free(cpu_dst);
+    free(cpu_src);
+}
+
+MAKE_UTEST_FROM_FUNCTION(profiling_exec);
diff --git a/utests/utest/runtime_createcontext.cpp b/utests/utest/runtime_createcontext.cpp
new file mode 100644
index 0000000..f08a189
--- /dev/null
+++ b/utests/utest/runtime_createcontext.cpp
@@ -0,0 +1,14 @@
+#include "utest_helper.hpp"
+
+void runtime_createcontextfromtype(void) {
+  cl_int status;
+
+  cl_context ctx;
+  ctx = clCreateContextFromType(NULL, CL_DEVICE_TYPE_GPU, NULL, NULL, &status);
+  if (ctx == NULL) {
+    OCL_THROW_ERROR("runtime_createcontextfromtype", status);
+  }
+  clReleaseContext(ctx);
+}
+
+MAKE_UTEST_FROM_FUNCTION(runtime_createcontextfromtype);
diff --git a/utests/utest/runtime_event.cpp b/utests/utest/runtime_event.cpp
new file mode 100644
index 0000000..b974f6a
--- /dev/null
+++ b/utests/utest/runtime_event.cpp
@@ -0,0 +1,60 @@
+#include "utest_helper.hpp"
+
+#define BUFFERSIZE  32*1024
+void runtime_event(void)
+{
+  const size_t n = BUFFERSIZE;
+  cl_int cpu_src[BUFFERSIZE];
+  cl_event ev[3];
+  cl_int status = 0;
+  cl_int value = 34;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("compiler_event");
+  OCL_CREATE_BUFFER(buf[0], 0, BUFFERSIZE*sizeof(int), NULL);
+
+  for(cl_uint i=0; i<BUFFERSIZE; i++)
+    cpu_src[i] = 3;
+
+  OCL_CREATE_USER_EVENT(ev[0]);
+
+  clEnqueueWriteBuffer(queue, buf[0], CL_TRUE, 0, BUFFERSIZE*sizeof(int), (void *)cpu_src, 1, &ev[0], &ev[1]);
+
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(int), &value);
+
+  // Run the kernel
+  globals[0] = n;
+  locals[0] = 32;
+  clEnqueueNDRangeKernel(queue, kernel, 1, NULL, globals, locals, 2, &ev[0], &ev[2]);
+
+  for (cl_uint i = 0; i != sizeof(ev) / sizeof(cl_event); ++i) {
+    clGetEventInfo(ev[i], CL_EVENT_COMMAND_EXECUTION_STATUS, sizeof(status), &status, NULL);
+    OCL_ASSERT(status >= CL_SUBMITTED);
+  }
+
+  buf_data[0] = clEnqueueMapBuffer(queue, buf[0], CL_TRUE, 0, 0, BUFFERSIZE*sizeof(int), 1, &ev[2], NULL, NULL);
+
+  OCL_SET_USER_EVENT_STATUS(ev[0], CL_COMPLETE);
+
+  clGetEventInfo(ev[0], CL_EVENT_COMMAND_EXECUTION_STATUS, sizeof(status), &status, NULL);
+  OCL_ASSERT(status == CL_COMPLETE);
+
+  OCL_FINISH();
+
+  for (cl_uint i = 0; i != sizeof(ev) / sizeof(cl_event); ++i) {
+    clGetEventInfo(ev[i], CL_EVENT_COMMAND_EXECUTION_STATUS, sizeof(status), &status, NULL);
+    OCL_ASSERT(status <= CL_COMPLETE);
+  }
+
+  for (uint32_t i = 0; i < n; ++i) {
+    OCL_ASSERT(((int*)buf_data[0])[i] == (int)value + 0x3);
+  }
+  clEnqueueUnmapMemObject(queue, buf[0], buf_data[0], 0, NULL, NULL);
+
+  for (cl_uint i = 0; i != sizeof(ev) / sizeof(cl_event); ++i) {
+    clReleaseEvent(ev[i]);
+  }
+}
+
+MAKE_UTEST_FROM_FUNCTION(runtime_event);
diff --git a/utests/utest/runtime_flat_address_space.cpp b/utests/utest/runtime_flat_address_space.cpp
new file mode 100644
index 0000000..08167c4
--- /dev/null
+++ b/utests/utest/runtime_flat_address_space.cpp
@@ -0,0 +1,75 @@
+/* 
+ * Copyright © 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+
+#include "utest_helper.hpp"
+
+int
+main(int argc, char *argv[])
+{
+  cl_mem dst[24];
+  int *dst_buffer = NULL;
+  const size_t n = 32 * 1024 * 1024;
+  const size_t global_work_size = n;
+  const size_t local_work_size = 16;
+  int status = 0;
+
+  if ((status = cl_test_init("test_write_only.cl", "test_write_only", SOURCE)) != 0)
+    goto error;
+
+  for (uint32_t j = 0; j < 24; ++j)
+  {
+    // Allocate the two buffers
+    dst[j] = clCreateBuffer(ctx, 0, n * sizeof(uint32_t), NULL, &status);
+    if (status != CL_SUCCESS) goto error;
+
+    // Set source and destination
+    OCL_CALL (clSetKernelArg, kernel, 0, sizeof(cl_mem), &dst[j]);
+
+    // Run the kernel
+    OCL_CALL (clEnqueueNDRangeKernel, queue,
+                                  kernel,
+                                  1,
+                                  NULL,
+                                  &global_work_size,
+                                  &local_work_size,
+                                  0,
+                                  NULL,
+                                  NULL);
+
+    // Be sure that everything run fine
+    dst_buffer = (int *) clMapBufferIntel(dst[j], &status);
+    if (status != CL_SUCCESS)
+      goto error;
+    for (uint32_t i = 0; i < n; ++i)
+      if (dst_buffer[i] != int(i)) {
+        fprintf(stderr, "run-time flat address space failed\n");
+        exit(-1);
+      }
+    OCL_CALL (clUnmapBufferIntel, dst[j]);
+  }
+
+  for (uint32_t j = 0; j < 24; ++j) OCL_CALL (clReleaseMemObject, dst[j]);
+  cl_test_destroy();
+  printf("%i memory leaks\n", clReportUnfreedIntel());
+  assert(clReportUnfreedIntel() == 0);
+
+error:
+  return status;
+}
+
diff --git a/utests/utest/runtime_null_kernel_arg.cpp b/utests/utest/runtime_null_kernel_arg.cpp
new file mode 100644
index 0000000..447e345
--- /dev/null
+++ b/utests/utest/runtime_null_kernel_arg.cpp
@@ -0,0 +1,27 @@
+#include "utest_helper.hpp"
+
+void runtime_null_kernel_arg(void)
+{
+  const size_t n = 32;
+
+  // Setup kernel and buffers
+  OCL_CREATE_KERNEL("null_kernel_arg");
+  OCL_CREATE_BUFFER(buf[0], 0, n * sizeof(uint32_t), NULL);
+  OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
+  OCL_SET_ARG(1, sizeof(cl_mem), NULL);
+  OCL_SET_ARG(2, sizeof(cl_mem), NULL);
+
+    // Run the kernel
+  globals[0] = n;
+  locals[0] = 16;
+  OCL_NDRANGE(1);
+  OCL_MAP_BUFFER(0);
+
+  // Check results
+  for (uint32_t i = 0; i < n; ++i)
+    OCL_ASSERT(((uint32_t*)buf_data[0])[i] == i);
+  OCL_UNMAP_BUFFER(0);
+}
+
+
+MAKE_UTEST_FROM_FUNCTION(runtime_null_kernel_arg);
diff --git a/utests/utest/setenv.sh.in b/utests/utest/setenv.sh.in
new file mode 100644
index 0000000..ad77369
--- /dev/null
+++ b/utests/utest/setenv.sh.in
@@ -0,0 +1,5 @@
+#!/bin/sh
+#
+export OCL_PCM_PATH=@LOCAL_PCM_OBJECT_DIR@
+export OCL_PCH_PATH=@LOCAL_PCH_OBJECT_DIR@
+export OCL_KERNEL_PATH=@CMAKE_CURRENT_SOURCE_DIR@/../kernels
diff --git a/utests/utest/sub_buffer.cpp b/utests/utest/sub_buffer.cpp
new file mode 100644
index 0000000..f65e8ff
--- /dev/null
+++ b/utests/utest/sub_buffer.cpp
@@ -0,0 +1,135 @@
+#include "utest_helper.hpp"
+
+void sub_bufffer_check(void)
+{
+    cl_int error;
+    cl_ulong max_alloc_size;
+    cl_uint address_align;
+    cl_mem main_buf;
+    cl_mem sub_buf;
+    char *main_buf_content;
+    char sub_buf_content[32];
+
+    error = clGetDeviceInfo(device, CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof(max_alloc_size), &max_alloc_size, NULL);
+    OCL_ASSERT(error == CL_SUCCESS);
+    error = clGetDeviceInfo(device, CL_DEVICE_MEM_BASE_ADDR_ALIGN, sizeof(address_align ), &address_align, NULL );
+    OCL_ASSERT(error == CL_SUCCESS);
+
+    main_buf_content = (char *)malloc(sizeof(char) * max_alloc_size);
+
+    for (cl_ulong i = 0; i < max_alloc_size; i++) {
+        main_buf_content[i] = rand() & 63;
+    }
+
+    main_buf = clCreateBuffer(ctx, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR, max_alloc_size, main_buf_content, &error);
+    OCL_ASSERT(error == CL_SUCCESS);
+
+    /* Test read sub buffer. */
+    for (cl_ulong sz = 64; sz < max_alloc_size; sz*=4) {
+        for (cl_ulong off = 0; off < max_alloc_size; off += 1234) {
+            cl_buffer_region region;
+            region.origin = off;
+            region.size = sz;
+
+            sub_buf = clCreateSubBuffer(main_buf, 0, CL_BUFFER_CREATE_TYPE_REGION, &region, &error );
+
+            /* invalid size, should be failed. */
+            if(off + sz > max_alloc_size) {
+                OCL_ASSERT(error != CL_SUCCESS);
+                continue;
+            }
+            /* invalid align, should be failed. */
+            if(off & (address_align-1)) {
+                OCL_ASSERT(error != CL_SUCCESS);
+                continue;
+            }
+
+            OCL_ASSERT(error == CL_SUCCESS);
+
+            error = clEnqueueReadBuffer(queue, sub_buf, CL_TRUE, 0, 32, (void *)sub_buf_content, 0, NULL, NULL);
+            OCL_ASSERT(error == CL_SUCCESS);
+
+#if 0
+            printf("\nRead ########### Src buffer: \n");
+            for (int i = 0; i < 32; ++i)
+                printf(" %2.2u", main_buf_content[off + i]);
+
+            printf("\nRead ########### dst buffer: \n");
+            for (int i = 0; i < 32; ++i)
+                printf(" %2.2u", sub_buf_content[i]);
+            printf("\n");
+#endif
+            for (int i = 0; i < 32; ++i) {
+
+                if (main_buf_content[off + i] != sub_buf_content[i]) {
+                    printf ("different index is %d\n", i);
+                    OCL_ASSERT(0);
+                }
+            }
+
+        }
+    }
+
+
+    for (cl_ulong sz = 64; sz < max_alloc_size; sz*=4) {
+        for (cl_ulong off = 0; off < max_alloc_size; off += 1234) {
+            cl_buffer_region region;
+            region.origin = off;
+            region.size = sz;
+
+            sub_buf = clCreateSubBuffer(main_buf, 0, CL_BUFFER_CREATE_TYPE_REGION, &region, &error );
+
+            /* invalid size, should be failed. */
+            if(off + sz > max_alloc_size) {
+                OCL_ASSERT(error != CL_SUCCESS);
+                continue;
+            }
+            /* invalid align, should be failed. */
+            if(off & (address_align-1)) {
+                OCL_ASSERT(error != CL_SUCCESS);
+                continue;
+            }
+
+            OCL_ASSERT(error == CL_SUCCESS);
+
+            for (int i = 0; i < 32; i++) {
+                sub_buf_content[i] = rand() & 63;
+            }
+
+            error = clEnqueueWriteBuffer(queue, main_buf, CL_TRUE, off, 32, sub_buf_content, 0, NULL, NULL);
+            OCL_ASSERT(error == CL_SUCCESS);
+
+            void * mapped_ptr = clEnqueueMapBuffer(queue, sub_buf, CL_TRUE, (cl_map_flags)( CL_MAP_READ | CL_MAP_WRITE ),
+                    0, 32, 0, NULL, NULL, &error );
+            OCL_ASSERT(error == CL_SUCCESS);
+
+#if 0
+            printf("\nMap ########### Src buffer: \n");
+            for (int i = 0; i < 32; ++i)
+                printf(" %2.2u", sub_buf_content[i]);
+
+            printf("\nMap ########### dst buffer: \n");
+            for (int i = 0; i < 32; ++i)
+                printf(" %2.2u", ((char *)mapped_ptr)[i]);
+            printf("\n");
+#endif
+            for (int i = 0; i < 32; i++) {
+
+                if (((char *)mapped_ptr)[i] != sub_buf_content[i]) {
+                    printf ("different index is %d\n", i);
+                    OCL_ASSERT(0);
+                }
+            }
+
+            error = clEnqueueUnmapMemObject(queue, sub_buf, mapped_ptr, 0, NULL, NULL );
+            OCL_ASSERT(error == CL_SUCCESS);
+
+            clReleaseMemObject(sub_buf);
+        }
+    }
+
+
+    free(main_buf_content);
+}
+
+MAKE_UTEST_FROM_FUNCTION(sub_bufffer_check);
diff --git a/utests/utest/utest.cpp b/utests/utest/utest.cpp
new file mode 100644
index 0000000..718916f
--- /dev/null
+++ b/utests/utest/utest.cpp
@@ -0,0 +1,99 @@
+/* 
+ * Copyright © 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+
+/**
+ * \file utest.cpp
+ * \author Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+#include "utest.hpp"
+#include "utest_helper.hpp"
+#include <vector>
+#include <string>
+#include <iostream>
+#include <cstring>
+
+using namespace std;
+vector<UTest> *UTest::utestList = NULL;
+void releaseUTestList(void) { delete UTest::utestList; }
+
+UTest::UTest(Function fn, const char *name, bool haveIssue, bool needDestroyProgram)
+       : fn(fn), name(name), haveIssue(haveIssue), needDestroyProgram(needDestroyProgram) {
+  if (utestList == NULL) {
+    utestList = new vector<UTest>;
+    atexit(releaseUTestList);
+  }
+  utestList->push_back(*this);
+}
+
+static bool strequal(const char *s1, const char *s2) {
+  if (strcmp(s1, s2) == 0) return true;
+  return false;
+}
+
+void UTest::run(const char *name) {
+  if (name == NULL) return;
+  if (utestList == NULL) return;
+  for (size_t i = 0; i < utestList->size(); ++i) {
+    const UTest &utest = (*utestList)[i];
+    if (utest.name == NULL || utest.fn == NULL ) continue;
+    if (strequal(utest.name, name)) {
+      std::cout << utest.name << ":" << std::endl;
+      (utest.fn)();
+      std::cout << std::endl;
+      cl_kernel_destroy(true);
+      cl_buffer_destroy();
+    }
+  }
+}
+
+void UTest::runAll(void) {
+  if (utestList == NULL) return;
+  for (size_t i = 0; i < utestList->size(); ++i) {
+    const UTest &utest = (*utestList)[i];
+    if (utest.fn == NULL) continue;
+    std::cout << utest.name << ":" << std::endl;
+    (utest.fn)();
+    std::cout << std::endl;
+    cl_kernel_destroy(utest.needDestroyProgram);
+    cl_buffer_destroy();
+  }
+}
+
+void UTest::runAllNoIssue(void) {
+  if (utestList == NULL) return;
+  for (size_t i = 0; i < utestList->size(); ++i) {
+    const UTest &utest = (*utestList)[i];
+    if (utest.fn == NULL || utest.haveIssue) continue;
+    std::cout << utest.name << ":" << std::endl;
+    (utest.fn)();
+    std::cout << std::endl;
+    cl_kernel_destroy(utest.needDestroyProgram);
+    cl_buffer_destroy();
+  }
+}
+
+void UTest::listAllCases()
+{
+  if (utestList == NULL) return;
+    for (size_t i = 0; i < utestList->size(); ++i) {
+      const UTest &utest = (*utestList)[i];
+      if (utest.fn == NULL) continue;
+    std::cout << utest.name << std::endl;
+ }
+}
diff --git a/utests/utest/utest.hpp b/utests/utest/utest.hpp
new file mode 100644
index 0000000..01d4a8c
--- /dev/null
+++ b/utests/utest/utest.hpp
@@ -0,0 +1,107 @@
+/* 
+ * Copyright © 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+
+/**
+ * \file utest.hpp
+ * \author Benjamin Segovia <benjamin.segovia at intel.com>
+ *
+ * Provides all unit test capabilites. It is rather rudimentary but it should
+ * do the job
+ */
+#ifndef __UTEST_UTEST_HPP__
+#define __UTEST_UTEST_HPP__
+
+#include "utest_exception.hpp"
+#include <vector>
+#include <iostream>
+
+/*! Quick and dirty unit test system with registration */
+struct UTest
+{
+  /*! A unit test function to run */
+  typedef void (*Function) (void);
+  /*! Empty test */
+  UTest(void);
+  /*! Build a new unit test and append it to the unit test list */
+  UTest(Function fn, const char *name, bool haveIssue = false, bool needDestroyProgram = true);
+  /*! Function to execute */
+  Function fn;
+  /*! Name of the test */
+  const char *name;
+  /*! Indicate whether current test cases has issue to be fixes */
+  bool haveIssue;
+  /*! Indicate whether destroy kernels/program. */
+  bool needDestroyProgram;
+  /*! The tests that are registered */
+  static std::vector<UTest> *utestList;
+  /*! Run the test with the given name */
+  static void run(const char *name);
+  /*! Run all the tests without known issue*/
+  static void runAllNoIssue(void);
+  /*! Run all the tests */
+  static void runAll(void);
+  /*! List all test cases */
+  static void listAllCases(void);
+};
+
+/*! Register a new unit test */
+#define UTEST_REGISTER(FN) static const UTest __##FN##__(FN, #FN);
+
+#define MAKE_UTEST_FROM_FUNCTION_KEEP_PROGRAM(FN, KEEP_PROGRAM) \
+  static void __ANON__##FN##__(void) { UTEST_EXPECT_SUCCESS(FN()); } \
+  static const UTest __##FN##__(__ANON__##FN##__, #FN, false, !(KEEP_PROGRAM));
+
+
+/*! Turn a function into a unit test */
+#define MAKE_UTEST_FROM_FUNCTION(FN) \
+  static void __ANON__##FN##__(void) { UTEST_EXPECT_SUCCESS(FN()); } \
+  static const UTest __##FN##__(__ANON__##FN##__, #FN);
+
+/*! Register a test case which has issue to be fixed */
+#define MAKE_UTEST_FROM_FUNCTION_WITH_ISSUE(FN) \
+  static void __ANON__##FN##__(void) { UTEST_EXPECT_SUCCESS(FN()); } \
+  static const UTest __##FN##__(__ANON__##FN##__, #FN, true);
+
+
+/*! No assert is expected */
+#define UTEST_EXPECT_SUCCESS(EXPR) \
+ do { \
+    try { \
+      EXPR; \
+      std::cout << "  " << #EXPR << "    [SUCCESS]" << std::endl; \
+    } \
+    catch (Exception e) { \
+      std::cout << "  " << #EXPR << "    [FAILED]" << std::endl; \
+      std::cout << "    " << e.what() << std::endl; \
+    } \
+  } while (0)
+
+#define UTEST_EXPECT_FAILED(EXPR) \
+ do { \
+    try { \
+      EXPR; \
+      std::cout << "  " << #EXPR << "    [FAILED]" <<  std::endl; \
+    } \
+    catch (gbe::Exception e) { \
+      std::cout << "  " << #EXPR << "    [SUCCESS]" << std::endl; \
+    } \
+  } while (0)
+
+#endif /* __UTEST_UTEST_HPP__ */
+
diff --git a/utests/utest/utest_assert.cpp b/utests/utest/utest_assert.cpp
new file mode 100644
index 0000000..f3b9a00
--- /dev/null
+++ b/utests/utest/utest_assert.cpp
@@ -0,0 +1,41 @@
+/* 
+ * Copyright © 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+
+/**
+ * \file assert.cpp
+ * \author Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+#include "utest_assert.hpp"
+#include "utest_exception.hpp"
+#include <cassert>
+#include <cstdlib>
+
+void onFailedAssertion(const char *msg, const char *file, const char *fn, int line)
+{
+  char lineString[256];
+  sprintf(lineString, "%i", line);
+  assert(msg != NULL && file != NULL && fn != NULL);
+  const std::string str = "Error: "
+                        + std::string(msg) + "\n  at file "
+                        + std::string(file)
+                        + ", function " + std::string(fn)
+                        + ", line " + std::string(lineString);
+  throw Exception(str);
+}
+
diff --git a/utests/utest/utest_assert.hpp b/utests/utest/utest_assert.hpp
new file mode 100644
index 0000000..f93f9ac
--- /dev/null
+++ b/utests/utest/utest_assert.hpp
@@ -0,0 +1,44 @@
+/* 
+ * Copyright © 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+
+/**
+ * \file assert.hpp
+ *
+ * \author Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+#ifndef __OCL_ASSERT_HPP__
+#define __OCL_ASSERT_HPP__
+
+/*! To ensure that condition truth. Optional message is supported */
+void onFailedAssertion(const char *msg, const char *file, const char *fn, int line);
+
+#define OCL_ASSERT(EXPR) \
+  do { \
+    if (!(EXPR)) \
+      onFailedAssertion(#EXPR, __FILE__, __FUNCTION__, __LINE__); \
+  } while (0)
+
+#define OCL_ASSERTM(EXPR, MSG) \
+  do { \
+    if (!(EXPR)) \
+      onFailedAssertion(MSG, __FILE__, __FUNCTION__, __LINE__); \
+  } while (0)
+
+#endif /* __OCL_ASSERT_HPP__ */
+
diff --git a/utests/utest/utest_error.c b/utests/utest/utest_error.c
new file mode 100644
index 0000000..4582a33
--- /dev/null
+++ b/utests/utest/utest_error.c
@@ -0,0 +1,76 @@
+/* 
+ * Copyright © 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+
+#include "utest_error.h"
+#include "CL/cl.h"
+
+const char *err_msg[] = {
+  [-CL_SUCCESS] = "CL_SUCCESS",
+  [-CL_DEVICE_NOT_FOUND] = "CL_DEVICE_NOT_FOUND",
+  [-CL_DEVICE_NOT_AVAILABLE] = "CL_DEVICE_NOT_AVAILABLE",
+  [-CL_COMPILER_NOT_AVAILABLE] = "CL_COMPILER_NOT_AVAILABLE",
+  [-CL_MEM_OBJECT_ALLOCATION_FAILURE] = "CL_MEM_OBJECT_ALLOCATION_FAILURE",
+  [-CL_OUT_OF_RESOURCES] = "CL_OUT_OF_RESOURCES",
+  [-CL_OUT_OF_HOST_MEMORY] = "CL_OUT_OF_HOST_MEMORY",
+  [-CL_PROFILING_INFO_NOT_AVAILABLE] = "CL_PROFILING_INFO_NOT_AVAILABLE",
+  [-CL_MEM_COPY_OVERLAP] = "CL_MEM_COPY_OVERLAP",
+  [-CL_IMAGE_FORMAT_MISMATCH] = "CL_IMAGE_FORMAT_MISMATCH",
+  [-CL_IMAGE_FORMAT_NOT_SUPPORTED] = "CL_IMAGE_FORMAT_NOT_SUPPORTED",
+  [-CL_BUILD_PROGRAM_FAILURE] = "CL_BUILD_PROGRAM_FAILURE",
+  [-CL_MAP_FAILURE] = "CL_MAP_FAILURE",
+  [-CL_MISALIGNED_SUB_BUFFER_OFFSET] = "CL_MISALIGNED_SUB_BUFFER_OFFSET",
+  [-CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST] = "CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST",
+  [-CL_INVALID_VALUE] = "CL_INVALID_VALUE",
+  [-CL_INVALID_DEVICE_TYPE] = "CL_INVALID_DEVICE_TYPE",
+  [-CL_INVALID_PLATFORM] = "CL_INVALID_PLATFORM",
+  [-CL_INVALID_DEVICE] = "CL_INVALID_DEVICE",
+  [-CL_INVALID_CONTEXT] = "CL_INVALID_CONTEXT",
+  [-CL_INVALID_QUEUE_PROPERTIES] = "CL_INVALID_QUEUE_PROPERTIES",
+  [-CL_INVALID_COMMAND_QUEUE] = "CL_INVALID_COMMAND_QUEUE",
+  [-CL_INVALID_HOST_PTR] = "CL_INVALID_HOST_PTR",
+  [-CL_INVALID_MEM_OBJECT] = "CL_INVALID_MEM_OBJECT",
+  [-CL_INVALID_IMAGE_FORMAT_DESCRIPTOR] = "CL_INVALID_IMAGE_FORMAT_DESCRIPTOR",
+  [-CL_INVALID_IMAGE_SIZE] = "CL_INVALID_IMAGE_SIZE",
+  [-CL_INVALID_SAMPLER] = "CL_INVALID_SAMPLER",
+  [-CL_INVALID_BINARY] = "CL_INVALID_BINARY",
+  [-CL_INVALID_BUILD_OPTIONS] = "CL_INVALID_BUILD_OPTIONS",
+  [-CL_INVALID_PROGRAM] = "CL_INVALID_PROGRAM",
+  [-CL_INVALID_PROGRAM_EXECUTABLE] = "CL_INVALID_PROGRAM_EXECUTABLE",
+  [-CL_INVALID_KERNEL_NAME] = "CL_INVALID_KERNEL_NAME",
+  [-CL_INVALID_KERNEL_DEFINITION] = "CL_INVALID_KERNEL_DEFINITION",
+  [-CL_INVALID_KERNEL] = "CL_INVALID_KERNEL",
+  [-CL_INVALID_ARG_INDEX] = "CL_INVALID_ARG_INDEX",
+  [-CL_INVALID_ARG_VALUE] = "CL_INVALID_ARG_VALUE",
+  [-CL_INVALID_ARG_SIZE] = "CL_INVALID_ARG_SIZE",
+  [-CL_INVALID_KERNEL_ARGS] = "CL_INVALID_KERNEL_ARGS",
+  [-CL_INVALID_WORK_DIMENSION] = "CL_INVALID_WORK_DIMENSION",
+  [-CL_INVALID_WORK_GROUP_SIZE] = "CL_INVALID_WORK_GROUP_SIZE",
+  [-CL_INVALID_WORK_ITEM_SIZE] = "CL_INVALID_WORK_ITEM_SIZE",
+  [-CL_INVALID_GLOBAL_OFFSET] = "CL_INVALID_GLOBAL_OFFSET",
+  [-CL_INVALID_EVENT_WAIT_LIST] = "CL_INVALID_EVENT_WAIT_LIST",
+  [-CL_INVALID_EVENT] = "CL_INVALID_EVENT",
+  [-CL_INVALID_OPERATION] = "CL_INVALID_OPERATION",
+  [-CL_INVALID_GL_OBJECT] = "CL_INVALID_GL_OBJECT",
+  [-CL_INVALID_BUFFER_SIZE] = "CL_INVALID_BUFFER_SIZE",
+  [-CL_INVALID_MIP_LEVEL] = "CL_INVALID_MIP_LEVEL",
+  [-CL_INVALID_GLOBAL_WORK_SIZE] = "CL_INVALID_GLOBAL_WORK_SIZE",
+  [-CL_INVALID_PROPERTY] = "CL_INVALID_PROPERTY"
+};
+const size_t err_msg_n = sizeof(err_msg) / sizeof(err_msg[0]);
+
diff --git a/utests/utest/utest_error.h b/utests/utest/utest_error.h
new file mode 100644
index 0000000..2da29b0
--- /dev/null
+++ b/utests/utest/utest_error.h
@@ -0,0 +1,26 @@
+/* 
+ * Copyright © 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+
+#ifndef __UTEST_ERROR_H__
+#define __UTEST_ERROR_H__
+#include <stdlib.h>
+extern const char *err_msg[];
+extern const size_t err_msg_n;
+#endif /* __UTEST_ERROR_H__ */
+
diff --git a/utests/utest/utest_exception.hpp b/utests/utest/utest_exception.hpp
new file mode 100644
index 0000000..e19141f
--- /dev/null
+++ b/utests/utest/utest_exception.hpp
@@ -0,0 +1,48 @@
+/* 
+ * Copyright © 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+
+/**
+ * \file exception.hpp
+ *
+ * \author Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+#ifndef __UTEST_EXCEPTION_HPP__
+#define __UTEST_EXCEPTION_HPP__
+
+#include <string>
+#include <exception>
+
+/*! Exception are only used while using unit tests */
+class Exception : public std::exception
+{
+public:
+  Exception(const std::string &msg) throw() : msg(msg) {}
+  Exception(const Exception &other) throw() : msg(other.msg) {}
+  ~Exception(void) throw() {}
+  Exception &operator= (const Exception &other) throw() {
+    this->msg = other.msg;
+    return *this;
+  }
+  const char *what(void) const throw() { return msg.c_str(); }
+private:
+  std::string msg; //!< String message
+};
+
+#endif /* __UTEST_EXCEPTION_HPP__ */
+
diff --git a/utests/utest/utest_file_map.cpp b/utests/utest/utest_file_map.cpp
new file mode 100644
index 0000000..55b7771
--- /dev/null
+++ b/utests/utest/utest_file_map.cpp
@@ -0,0 +1,117 @@
+/* 
+ * Copyright © 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+
+#include "utest_file_map.hpp"
+#include "CL/cl.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <assert.h>
+#include <string.h>
+#include <stdio.h>
+
+int
+cl_file_map_init(cl_file_map_t *fm)
+{
+  assert(fm);
+  memset(fm,0,sizeof(*fm));
+  return CL_SUCCESS;
+}
+
+void
+cl_file_map_destroy(cl_file_map_t *fm)
+{
+  if (fm->mapped) {
+    munmap(fm->start, fm->size);
+    fm->start = fm->stop = 0;
+    fm->size = 0;
+    fm->mapped = CL_FALSE;
+  }
+  if(fm->fd) {
+    close(fm->fd);
+    fm->fd = 0;
+  }
+  free(fm->name);
+  memset(fm,0,sizeof(*fm));
+}
+
+void
+cl_file_map_delete(cl_file_map_t *fm)
+{
+  if (fm == NULL)
+    return;
+  cl_file_map_destroy(fm);
+  free(fm);
+}
+
+cl_file_map_t*
+cl_file_map_new(void)
+{
+  cl_file_map_t *fm = NULL;
+
+  if ((fm = (cl_file_map_t *) calloc(1, sizeof(cl_file_map_t))) == NULL)
+    goto error;
+  if (cl_file_map_init(fm) != CL_SUCCESS)
+    goto error;
+
+exit:
+  return fm;
+error:
+  cl_file_map_delete(fm);
+  fm = NULL;
+  goto exit;
+}
+
+int
+cl_file_map_open(cl_file_map_t *fm, const char *name)
+{
+  int err = CL_FILE_MAP_SUCCESS;
+
+  /* Open the file */
+  fm->fd = open(name, O_RDONLY);
+  if(fm->fd < 0) {
+    err = CL_FILE_MAP_FILE_NOT_FOUND;
+    goto error;
+  }
+  if ((fm->name = (char*) calloc(strlen(name) + 1, sizeof(char))) == NULL)
+    goto error;
+  sprintf(fm->name, "%s", name);
+
+  /* Map it */
+  fm->size = lseek(fm->fd, 0, SEEK_END);
+  lseek(fm->fd, 0, SEEK_SET);
+  fm->start = mmap(0, fm->size, PROT_READ, MAP_SHARED, fm->fd, 0);
+  if(fm->start == NULL) {
+    err = CL_FILE_MAP_FAILED_TO_MMAP;
+    goto error;
+  }
+
+  fm->stop = ((char *) fm->start) + fm->size;
+  fm->mapped = CL_TRUE;
+
+exit:
+  return err;
+error:
+  cl_file_map_destroy(fm);
+  goto exit;
+}
+
diff --git a/utests/utest/utest_file_map.hpp b/utests/utest/utest_file_map.hpp
new file mode 100644
index 0000000..83d79ea
--- /dev/null
+++ b/utests/utest/utest_file_map.hpp
@@ -0,0 +1,84 @@
+/* 
+ * Copyright © 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+
+/**
+ * \file assert.hpp
+ *
+ * \author Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+
+#ifndef __UTEST_FILE_MAP_HPP__
+#define __UTEST_FILE_MAP_HPP__
+
+#include "CL/cl.h"
+#include <cstdlib>
+
+/* Map a file into memory for direct / cached / simple accesses */
+typedef struct cl_file_map {
+  void *start, *stop; /* First character and last one */
+  size_t size;        /* Total size of the file */
+  int fd;             /* Posix file descriptor */
+  cl_bool mapped;     /* Indicate if a file was mapped or not */
+  char *name;         /* File itself */
+} cl_file_map_t;
+
+/* Report information about an open temptative */
+enum {
+  CL_FILE_MAP_SUCCESS         = 0,
+  CL_FILE_MAP_FILE_NOT_FOUND  = 1,
+  CL_FILE_MAP_FAILED_TO_MMAP  = 2
+};
+
+/* Allocate and Initialize a file mapper (but do not map any file */
+extern cl_file_map_t *cl_file_map_new(void);
+
+/* Initialize a file mapper (but do not map any file */
+extern int cl_file_map_init(cl_file_map_t *fm);
+
+/* Destroy but do not deallocate a file map */
+extern void cl_file_map_destroy(cl_file_map_t *fm);
+
+/* Destroy and free it */
+extern void cl_file_map_delete(cl_file_map_t *fm);
+
+/* Open a file and returns the error code */
+extern int cl_file_map_open(cl_file_map_t *fm, const char *name);
+
+static inline cl_bool
+cl_file_map_is_mapped(const cl_file_map_t *fm) {
+  return fm->mapped;
+}
+
+static inline const char*
+cl_file_map_begin(const cl_file_map_t *fm) {
+  return (const char*) fm->start;
+}
+
+static inline const char*
+cl_file_map_end(const cl_file_map_t *fm) {
+  return (const char*) fm->stop;
+}
+
+static inline size_t
+cl_file_map_size(const cl_file_map_t *fm) {
+  return fm->size;
+}
+
+#endif /* __UTEST_FILE_MAP_HPP__ */
+
diff --git a/utests/utest/utest_generator.py b/utests/utest/utest_generator.py
new file mode 100644
index 0000000..94900d9
--- /dev/null
+++ b/utests/utest/utest_generator.py
@@ -0,0 +1,377 @@
+#!/usr/bin/python
+import os,sys,re
+
+FLT_MAX_POSI='0x1.fffffep127f'
+FLT_MIN_NEGA='-0x1.fffffep127f'
+FLT_MIN_POSI='0x1.0p-126f'
+FLT_MAX_NEGA='-0x1.0p-126f'
+
+paraTypeList={'float':'%e','int':'%d','double':'%lf','uint':'%d','string':'%s'}
+
+
+def ulpUnit(ulpSize):
+  return re.findall(r"([a-zA-Z_]+)",ulpSize)[0]
+
+def ulpNum(ulpSize):
+  return re.findall(r"([0-9]+)",ulpSize)[0]
+
+def udebug(ulpSize,returnType):
+  #ulpUnit=re.findall(r"([a-zA-Z_]+)",ulpSize)[0]
+  #ulpNum=re.findall(r"([0-9]+)",ulpSize)[0]
+  text='''
+    static const char* INFORNAN;
+    static %s ULPSIZE;
+    
+    if (isinf(cpu_data[index])){
+      INFORNAN="INF";
+    }
+    else if (isnan(cpu_data[index])){
+      INFORNAN="NAN";
+    }
+    else{
+      ULPSIZE=cl_%s(cpu_data[index]) * %s;
+    }
+
+#if udebug 
+    if (isinf(cpu_data[index])){ 
+      if (isinf(gpu_data[index]))
+        printf("%s expect:%s\\n", log, INFORNAN);
+      else
+        printf_c("%s expect:%s\\n", log, INFORNAN);
+      }
+    else if (isnan(cpu_data[index])){
+      if (isnan(gpu_data[index]))
+        printf("%s expect:%s\\n", log, INFORNAN);
+      else
+        printf_c("%s expect:%s\\n", log, INFORNAN);
+      }
+    else if (diff <= ULPSIZE){
+      printf("%s expect:%s\\n", log, ULPSIZE);
+      }
+    else
+      printf_c("%s expect:%s\\n", log, ULPSIZE);
+#else
+    if (isinf(cpu_data[index])){
+      sprintf(log, "%s expect:%s\\n", log, INFORNAN);
+      OCL_ASSERTM(isinf(gpu_data[index]),log);
+      }
+    else if (isnan(cpu_data[index])){
+      sprintf(log, "%s expect:%s\\n", log, INFORNAN);
+      OCL_ASSERTM(isnan(gpu_data[index]),log);
+      }
+    else{
+      sprintf(log, "%s expect:%s\\n", log, ULPSIZE);
+      OCL_ASSERTM(fabs(gpu_data[index]-cpu_data[index]) <= ULPSIZE, log);
+      }
+#endif
+  }
+}\n'''%(returnType,\
+        ulpUnit(ulpSize),ulpNum(ulpSize),\
+        paraTypeList['string'],paraTypeList['string'],\
+        paraTypeList['string'],paraTypeList['string'],\
+        paraTypeList['string'],paraTypeList['string'],\
+        paraTypeList['string'],paraTypeList['string'],\
+        paraTypeList['string'],paraTypeList['%s'%(returnType)],\
+        paraTypeList['string'],paraTypeList['%s'%(returnType)],\
+        paraTypeList['string'],paraTypeList['string'],\
+        paraTypeList['string'],paraTypeList['string'],\
+        paraTypeList['string'],paraTypeList['%s'%(returnType)])
+
+  return text
+
+def gene2ValuesLoop(values1,values2,inputValues):
+  values2=values2+inputValues*len(inputValues)
+
+  for i in inputValues:
+    for j in range(0,len(inputValues)):
+      values1 += [i]
+
+  return values1,values2
+
+def gene3ValuesLoop(values1,values2,values3,inputValues):
+  for i in inputValues:
+    for j in range(0,len(inputValues)):
+      for k in range(0,len(inputValues)):
+        values1 += [i]
+
+  for i in inputValues:
+    for j in inputValues:
+      for k in range(0,len(inputValues)):
+        values2 += [j]
+
+  values3=inputValues*(len(inputValues)**2)
+  return values1,values2,values3
+
+class func:
+  """ This class will define all needed instance attribute in fundation a c programing file. """
+
+  def __init__(self,name,cpuFuncName,inputType,outputType,values,ulp, cpu_func=''):
+    self.funcName = name
+    self.cpuFuncName = cpuFuncName
+    self.fileName = 'builtin_'+name
+    self.inputtype = inputType
+    self.outputtype = outputType
+    self.values = values
+    self.ulp = ulp
+    self.cpufunc=cpu_func
+    self.cpplines = []
+    
+#####cpp file required information:
+    self.Head='''/*
+This file is generated by utest_generator.py.
+Usually you need NOT modify this file manually.
+But when any bug occured, you can change the value of udebug from 0 to 1,
+which can print more values and information to assist debuging the issue.
+*/
+
+#include "utest_helper.hpp"
+#include <stdio.h>
+#include <math.h>
+#include <algorithm>
+
+#define udebug 0
+#define FLT_MAX 0x1.fffffep127f
+#define FLT_MIN 0x1.0p-126f
+#define INT_ULP 0
+
+#define printf_c(...) \\
+{\\
+  printf("\\033[1m\\033[40;31m");\\
+  printf( __VA_ARGS__ );\\
+  printf("\\033[0m");\\
+}
+'''
+    #########Execute class itself
+    self.geneProcess()
+
+#####Computer vector && argument type:
+  def argtype(self,paraN,index):
+    return re.findall(r"[a-zA-Z_]+",self.inputtype[paraN][index])[0]
+
+  def argvector(self,paraN,index):
+    vector=re.findall(r"[0-9]+",self.inputtype[paraN][index])
+    if vector:
+      vector=vector[0]
+    else:
+      vector=1
+    return vector
+
+  def returnVector(self,index):
+    returnVector=re.findall(r"[0-9]+",self.outputtype[index])
+    if returnVector:
+      returnVector=returnVector[0]
+    else:
+      returnVector=1
+    return returnVector
+
+  def retType(self,index):
+    return re.findall("[a-zA-Z_]+",self.outputtype[index])[0]
+
+  def inputNumFormat(self,paraN,index):
+    return paraTypeList['%s'%(self.argtype(paraN,index))]
+
+  def outputNumFormat(self,index):
+    return paraTypeList['%s'%(self.retType(index))]
+
+#####Cpu values analyse
+  def GenInputValues(self,index):
+    #namesuffix=self.inputtype[0][index]
+    for i in range(0,self.values.__len__()):
+      self.cpplines += [ "const %s input_data%d[] = {%s};" %(self.argtype(i,index),i+1,str(self.values[i]).strip('[]').replace('\'','')) ]
+    self.cpplines += [ "const int count_input = sizeof(input_data1) / sizeof(input_data1[0]);" ]
+    self.cpplines += [ "const int vector = %s;\n"%(self.argvector(self.inputtype.__len__()-1,index)) ]
+
+#####Cpu Function
+  def GenCpuCompilerMath(self,index):
+    #namesuffix=self.inputtype[0][index]
+    defline='static void cpu_compiler_math(%s *dst, '%(self.retType(index))
+    cpufunargs='('
+    funcline = ['{']
+    vectorargs=[]
+
+    if (self.returnVector(index) == 1 and self.argvector(0,index) != 1):
+      for i in range(0,self.values.__len__()):
+        defline += 'const %s *src%d'%(self.argtype(i,index),i+1)
+        defline += ( i == self.values.__len__()-1 ) and ')' or ','
+        vectorargs.append('(')
+      for i in range(0,self.values.__len__()):
+        for j in range(0,self.vector):
+          vectorargs += "x%d%d"%(i+1,j+1)
+          vectorargs += ( j == self.vector-1 ) and ');' or ','
+          funcline += ["  const %s x%d%d = *(src%d+%d);"%(self.argtype(i,index),i+1,j+1,i+1,j)]
+
+      return 0
+
+    for i in range(0,self.values.__len__()):
+      defline += 'const %s *src%d'%(self.argtype(i,index),i+1)
+      defline += ( i == self.values.__len__()-1 ) and ')' or ','
+      cpufunargs += "x%d"%(i+1)
+      cpufunargs += ( i == self.values.__len__()-1 ) and ');' or ','
+      funcline += ["  const %s x%d = *src%d;"%(self.argtype(i,index),i+1,i+1)]
+
+    funcline += [ "  dst[0] = %s%s"%(self.cpuFuncName, cpufunargs) ]
+    funcline += [ '}'] 
+
+    funcline = [defline] + funcline
+
+    self.cpplines += funcline
+#    self.writeCPP( '\n'.join(funcline), 'a', namesuffix)
+
+  def writeCPP(self,content,authority,namesuffix):
+    file_object = open("generated/%s_%s.cpp"%(self.fileName,namesuffix),authority)
+    file_object.writelines(content)
+    file_object.close()
+
+  def writeCL(self,content,authority,namesuffix):
+    file_object = open(os.getcwd()+"/../kernels/%s_%s.cl"%(self.fileName,namesuffix),authority)
+    file_object.writelines(content)
+    file_object.close()
+
+  def nameForCmake(self,content,namesuffix):
+    print("generated/%s_%s.cpp"%(self.fileName,namesuffix)),
+
+  def utestFunc(self,index):
+    funcLines=[]
+    namesuffix=self.inputtype[0][index]
+    funcline=[]
+    funchead='''
+static void %s_%s(void)
+{
+  int index;
+  %s gpu_data[count_input] = {0}, cpu_data[count_input] = {0}, diff=0.0;
+  char log[1024] = {0};
+
+  OCL_CREATE_KERNEL(\"%s_%s\");
+  OCL_CREATE_BUFFER(buf[0], CL_MEM_READ_WRITE, count_input * sizeof(%s), NULL); 
+
+  globals[0] = count_input;
+  locals[0] = 1;
+ '''%(self.fileName,namesuffix,\
+     self.retType(index),\
+     self.fileName, namesuffix,\
+     self.retType(index))
+
+    funcline += [funchead]
+    for i in range(1,self.values.__len__()+1): 
+      funcline += ["  OCL_CREATE_BUFFER(buf[%d], CL_MEM_READ_WRITE, count_input * sizeof(%s), NULL);"%(i,self.argtype(i-1,index))]
+      funcline += ["  clEnqueueWriteBuffer( queue, buf[%d], CL_TRUE, 0, count_input * sizeof(%s), input_data%d, 0, NULL, NULL);"%(i,self.argtype(i-1,index),i)]
+
+    funcline += ["  OCL_CREATE_BUFFER(buf[%d], CL_MEM_READ_WRITE, sizeof(int), NULL);"%(self.inputtype.__len__()+1)]
+    funcline += ["  clEnqueueWriteBuffer( queue, buf[%d], CL_TRUE, 0, sizeof(int), &vector, 0, NULL, NULL);"%(self.inputtype.__len__()+1)]
+
+	#0=output 1=input1 2=input2 ... len+2=output
+    for i in range(0,self.values.__len__()+2): 
+      funcline += ["  OCL_SET_ARG(%d, sizeof(cl_mem), &buf[%d]);"%(i,i)]
+
+    funcrun='''
+  // Run the kernel:
+  OCL_NDRANGE( 1 );
+  clEnqueueReadBuffer( queue, buf[0], CL_TRUE, 0, sizeof(%s) * count_input, gpu_data, 0, NULL, NULL);
+'''%(self.inputtype.__len__()+1)
+    funcline += [ funcrun ]
+
+    funcsprintfa='    sprintf(log, \"'
+    funcsprintfb=''
+    if (self.returnVector(index) == 1 and self.argvector(0,index) != 1):
+      funccompare='''
+  for (index = 0; index < count_input/vector; index++)
+  {
+    cpu_compiler_math( cpu_data + index, '''
+    else:
+      funccompare='''
+  for (index = 0; index < count_input; index++)
+  {
+    cpu_compiler_math( cpu_data + index,'''
+
+    for i in range(0,self.values.__len__()):
+      funccompare += " input_data%d + index"%(i+1)
+      funccompare += (self.values.__len__() - 1 == i) and ');' or ','
+
+      funcsprintfa += "input_data%d:"%(i+1)
+      funcsprintfa += "%s "%(self.inputNumFormat(i,index))
+      funcsprintfb += " input_data%d[index],"%(i+1)
+
+    funcline += [ funccompare ]
+
+    funcsprintfa += " -> gpu:%s  cpu:%s diff:%s\","%(self.outputNumFormat(index),self.outputNumFormat(index),self.outputNumFormat(index))#,self.outputNumFormat(index))
+    funcsprintfb += " gpu_data[index], cpu_data[index], diff);"#%(ulpUnit(self.ulp),ulpNum(self.ulp))
+
+    #funcdiff = "    diff = fabs((gpu_data[index]-cpu_data[index])"
+    #funcdiff += (self.retType(index) == "int") and ');' or '/(cpu_data[index]>1?cpu_data[index]:1));'
+    valuejudge = "    if (std::fpclassify(gpu_data[index]) == FP_SUBNORMAL){ gpu_data[index] = 0; }\n"
+    valuejudge += "    if (std::fpclassify(cpu_data[index]) == FP_SUBNORMAL){ cpu_data[index] = 0; }\n"
+    funcdiff = "    diff = fabs((gpu_data[index]-cpu_data[index]));"
+    funcline += [ valuejudge ]
+    funcline += [ funcdiff ]
+    funcline += [ funcsprintfa + funcsprintfb ]
+
+    self.cpplines += funcline
+
+    self.cpplines += [ udebug(self.ulp,self.retType(index)) ]
+    self.cpplines += [ "MAKE_UTEST_FROM_FUNCTION(%s_%s)"%(self.fileName,namesuffix) ]
+
+  def genCL(self,index):
+    namesuffix=self.inputtype[0][index]
+    clLine = []
+    clhead = '__kernel void %s_%s(__global %s *dst, '%(self.fileName,namesuffix,self.retType(index))
+    clvalueDef=''
+    clcomputer=''
+    tmp=''
+
+    for i in range(0,self.values.__len__()):
+      clhead += ' __global %s *src%d,'%(self.argtype(i,index),i+1)
+      clvalueDef +=   '  %s x%d = (%s) ('%(self.inputtype[i][index],i+1,self.inputtype[i][index])
+      tmp = 'src%d[i * (*vector) + '%(i+1)
+      for j in range(0,int(self.argvector(i,index))):
+        clvalueDef += tmp + ((int(self.argvector(i-1,index)) == j+1 ) and '%d]);\n'%(j) or '%d],'%(j))
+      clcomputer += (self.values.__len__() == i+1) and 'x%d);'%(i+1) or 'x%d,'%(i+1)
+      
+    clhead += ' __global int *vector) {\n'
+    clhead += '  int i = get_global_id(0);'
+    clLine += [ clhead ]
+    clLine += [ clvalueDef ]
+    clLine += [ '  %s ret;'%(self.outputtype[index]) ]
+    clLine += [ '  ret = %s('%(self.funcName) + clcomputer ] 
+
+    if (int(self.returnVector(index)) == 1):
+      clLine += [ '  dst[i] = ret;' ]
+    else:
+      for i in range(0,int(self.returnVector(index))):
+        clLine += [ '  dst[i * (*vector) + %d] = ret[%d];'%(i,i) ]
+    clLine += [ '};' ]
+
+    self.writeCL('\n'.join(clLine),'w',namesuffix)
+  
+  def geneProcess(self):
+    for i in range(0,self.inputtype[0].__len__()):
+##########Write Cpp file          
+      namesuffix=self.inputtype[0][i]
+      self.cpplines = []
+      #The head:
+      self.cpplines += [self.Head]
+
+      #Parameters:
+      self.GenInputValues(i)
+
+      #cpu function generator:
+      self.cpplines += [self.cpufunc]
+
+      #Cpu function:
+      self.GenCpuCompilerMath(i)
+
+      #utest function
+      self.utestFunc(i)
+
+      #kernel cl
+      self.genCL(i)
+
+      #CMakelists.txt
+      self.nameForCmake(self.fileName,namesuffix)
+
+      self.writeCPP( '\n'.join(self.cpplines) ,'w',namesuffix)
+#########End
+
+#def main():
+#
+#if __name__ == "__main__":
+#  main()
diff --git a/utests/utest/utest_helper.cpp b/utests/utest/utest_helper.cpp
new file mode 100644
index 0000000..162c47b
--- /dev/null
+++ b/utests/utest/utest_helper.cpp
@@ -0,0 +1,667 @@
+/* 
+ * Copyright © 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+
+#include "utest_file_map.hpp"
+#include "utest_helper.hpp"
+#include "utest_error.h"
+#include "CL/cl.h"
+#include "CL/cl_intel.h"
+
+#include <cstdio>
+#include <cstdint>
+#include <cstring>
+#include <cassert>
+#include <cmath>
+
+#define FATAL(...) \
+do { \
+  fprintf(stderr, "error: "); \
+  fprintf(stderr, __VA_ARGS__); \
+  fprintf(stderr, "\n");\
+  assert(0); \
+  exit(-1); \
+} while (0)
+
+#define FATAL_IF(COND, ...) \
+do { \
+  if (COND) FATAL(__VA_ARGS__); \
+} while (0)
+
+cl_platform_id platform = NULL;
+cl_device_id device = NULL;
+cl_context ctx = NULL;
+cl_program program = NULL;
+cl_kernel kernel = NULL;
+cl_command_queue queue = NULL;
+cl_mem buf[MAX_BUFFER_N] = {};
+void *buf_data[MAX_BUFFER_N] = {};
+size_t globals[3] = {};
+size_t locals[3] = {};
+
+#ifdef HAS_EGL
+Display    *xDisplay;
+EGLDisplay  eglDisplay;
+EGLContext  eglContext = NULL;
+EGLSurface  eglSurface;
+Window xWindow;
+
+void cl_ocl_destroy_egl_window() {
+    eglMakeCurrent(eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
+    eglDestroyContext(eglDisplay, eglContext);
+    eglDestroySurface(eglDisplay, eglSurface);
+    XDestroyWindow(xDisplay, xWindow);
+    XCloseDisplay(xDisplay);
+}
+
+bool init_egl_window(int width, int height) {
+    XSetWindowAttributes swa;
+    Window      win, root;
+    EGLint attr[] = {       // some attributes to set up our egl-interface
+    EGL_BUFFER_SIZE, 16,
+    EGL_RENDERABLE_TYPE,
+    EGL_OPENGL_BIT,
+    EGL_NONE
+    };
+    //// egl-contexts collect all state descriptions needed required for operation
+    EGLint ctxattr[] = {
+            #if 0
+            EGL_CONTEXT_CLIENT_VERSION, 2,
+            #endif
+            EGL_NONE
+    };
+
+    EGLConfig  ecfg;
+    EGLint     numConfig;
+
+    eglContext = EGL_NO_CONTEXT;
+    xDisplay = XOpenDisplay(NULL);
+    if (xDisplay == NULL) {
+      fprintf(stderr, "Failed to open DISPLAY.\n");
+      return false;
+    }
+    root = DefaultRootWindow(xDisplay);
+    swa.event_mask = ExposureMask | PointerMotionMask | KeyPressMask;
+
+    win = XCreateWindow(
+                    xDisplay, root, 0, 0, width, height, 0,
+                    CopyFromParent, InputOutput,
+                    CopyFromParent, CWEventMask,
+                    &swa);
+    xWindow = win;
+
+    ///////  the egl part  //////////////////////////////////////////////////////////////////
+    //  egl provides an interface to connect the graphics related functionality of openGL ES
+    //  with the windowing interface and functionality of the native operation system (X11
+    //  in our case.
+
+    eglDisplay  =  eglGetDisplay( (EGLNativeDisplayType) xDisplay );
+    if ( eglDisplay == EGL_NO_DISPLAY ) {
+            fprintf(stderr, "Got no EGL display.\n");
+            return false;
+    }
+    eglBindAPI(EGL_OPENGL_API);
+    int m,n;
+    if ( !eglInitialize( eglDisplay, &m, &n ) ) {
+      fprintf(stderr, "Unable to initialize EGL\n");
+      return false;
+    }
+    if ( !eglChooseConfig( eglDisplay, attr, &ecfg, 1, &numConfig ) ) {
+      fprintf(stderr, "Failed to choose config (eglError: %d)\n", eglGetError());
+      return false;
+    }
+    if ( numConfig != 1 ) {
+      fprintf(stderr, "Didn't get exactly one config, but %d", numConfig);
+      return false;
+    }
+    eglSurface = eglCreateWindowSurface ( eglDisplay, ecfg, win, NULL );
+    if ( eglSurface == EGL_NO_SURFACE ) {
+      fprintf(stderr, "Unable to create EGL surface (eglError: %d)\n", eglGetError());
+      return false;
+    }
+    eglContext = eglCreateContext ( eglDisplay, ecfg, EGL_NO_CONTEXT, ctxattr );
+    if ( eglContext == EGL_NO_CONTEXT ) {
+      fprintf(stderr, "Unable to create EGL context (eglError: %d)\n", eglGetError());
+      return false;
+    }
+    //// associate the egl-context with the egl-surface
+    eglMakeCurrent( eglDisplay, eglSurface, eglSurface, eglContext);
+
+    glClearColor(1.0, 1.0, 1.0, 1.0);
+    glClear(GL_COLOR_BUFFER_BIT);
+    glFinish();
+    eglSwapBuffers(eglDisplay, eglSurface);
+    return true;
+}
+#endif
+
+static const char*
+cl_test_channel_order_string(cl_channel_order order)
+{
+  switch(order) {
+#define DECL_ORDER(WHICH) case CL_##WHICH: return "CL_"#WHICH
+    DECL_ORDER(R);
+    DECL_ORDER(A);
+    DECL_ORDER(RG);
+    DECL_ORDER(RA);
+    DECL_ORDER(RGB);
+    DECL_ORDER(RGBA);
+    DECL_ORDER(BGRA);
+    DECL_ORDER(ARGB);
+    DECL_ORDER(INTENSITY);
+    DECL_ORDER(LUMINANCE);
+    DECL_ORDER(Rx);
+    DECL_ORDER(RGx);
+    DECL_ORDER(RGBx);
+#undef DECL_ORDER
+    default: return "Unsupported image channel order";
+  };
+}
+
+static const char*
+cl_test_channel_type_string(cl_channel_type type)
+{
+  switch(type) {
+#define DECL_TYPE(WHICH) case CL_##WHICH: return "CL_"#WHICH
+    DECL_TYPE(SNORM_INT8);
+    DECL_TYPE(SNORM_INT16);
+    DECL_TYPE(UNORM_INT8);
+    DECL_TYPE(UNORM_INT16);
+    DECL_TYPE(UNORM_SHORT_565);
+    DECL_TYPE(UNORM_SHORT_555);
+    DECL_TYPE(UNORM_INT_101010);
+    DECL_TYPE(SIGNED_INT8);
+    DECL_TYPE(SIGNED_INT16);
+    DECL_TYPE(SIGNED_INT32);
+    DECL_TYPE(UNSIGNED_INT8);
+    DECL_TYPE(UNSIGNED_INT16);
+    DECL_TYPE(UNSIGNED_INT32);
+    DECL_TYPE(HALF_FLOAT);
+    DECL_TYPE(FLOAT);
+#undef DECL_TYPE
+    default: return "Unsupported image channel type";
+  };
+}
+
+static void
+clpanic(const char *msg, int rval)
+{
+  printf("Failed: %s (%d)\n", msg, rval);
+  exit(-1);
+}
+
+char*
+cl_do_kiss_path(const char *file, cl_device_id device)
+{
+  cl_int ver;
+  const char *sub_path = NULL;
+  char *ker_path = NULL;
+  const char *kiss_path = getenv("OCL_KERNEL_PATH");
+  size_t sz = strlen(file);
+
+  if (device == NULL)
+    sub_path = "";
+  else {
+    if (clGetGenVersionIntel(device, &ver) != CL_SUCCESS)
+      clpanic("Unable to get Gen version", -1);
+    sub_path = "";
+  }
+
+  if (kiss_path == NULL)
+    clpanic("set OCL_KERNEL_PATH. This is where the kiss kernels are", -1);
+  sz += strlen(kiss_path) + strlen(sub_path) + 2; /* +1 for end of string, +1 for '/' */
+  if ((ker_path = (char*) malloc(sz)) == NULL)
+    clpanic("Allocation failed", -1);
+  sprintf(ker_path, "%s/%s%s", kiss_path, sub_path, file);
+  return ker_path;
+}
+
+int
+cl_kernel_init(const char *file_name, const char *kernel_name, int format, const char * build_opt)
+{
+  cl_file_map_t *fm = NULL;
+  char *ker_path = NULL;
+  cl_int status = CL_SUCCESS;
+  static const char *prevFileName = NULL;
+
+  /* Load the program and build it */
+  if (!program || (program && (!prevFileName || strcmp(prevFileName, file_name)))) {
+    if (program) clReleaseProgram(program);
+    ker_path = cl_do_kiss_path(file_name, device);
+    if (format == LLVM)
+      program = clCreateProgramWithLLVMIntel(ctx, 1, &device, ker_path, &status);
+    else if (format == SOURCE) {
+      cl_file_map_t *fm = cl_file_map_new();
+      FATAL_IF (cl_file_map_open(fm, ker_path) != CL_FILE_MAP_SUCCESS,
+                "Failed to open file \"%s\" with kernel \"%s\". Did you properly set OCL_KERNEL_PATH variable?",
+                file_name, kernel_name);
+      const char *src = cl_file_map_begin(fm);
+      const size_t sz = cl_file_map_size(fm);
+      program = clCreateProgramWithSource(ctx, 1, &src, &sz, &status);
+      cl_file_map_delete(fm);
+    } else
+      FATAL("Not able to create program from binary");
+
+    if (status != CL_SUCCESS) {
+      fprintf(stderr, "error calling clCreateProgramWithBinary\n");
+      goto error;
+    }
+    prevFileName = file_name;
+  }
+  /* OCL requires to build the program even if it is created from a binary */
+  OCL_CALL (clBuildProgram, program, 1, &device, build_opt, NULL, NULL);
+
+  /* Create a kernel from the program */
+  if (kernel)
+    clReleaseKernel(kernel);
+  kernel = clCreateKernel(program, kernel_name, &status);
+  if (status != CL_SUCCESS) {
+    fprintf(stderr, "error calling clCreateKernel\n");
+    goto error;
+  }
+
+exit:
+  free(ker_path);
+  cl_file_map_delete(fm);
+  return status;
+error:
+  prevFileName = NULL;
+  goto exit;
+}
+
+#define GET_PLATFORM_STR_INFO(LOWER_NAME, NAME) \
+  { \
+    size_t param_value_size; \
+    OCL_CALL (clGetPlatformInfo, platform, CL_PLATFORM_##NAME, 0, 0, &param_value_size); \
+    std::vector<char> param_value(param_value_size); \
+    OCL_CALL (clGetPlatformInfo, platform, CL_PLATFORM_##NAME, \
+              param_value_size, param_value.empty() ? NULL : &param_value.front(), \
+              &param_value_size); \
+    std::string str; \
+    if (!param_value.empty()) \
+      str = std::string(&param_value.front(), param_value_size-1); \
+    printf("platform_" #LOWER_NAME " \"%s\"\n", str.c_str()); \
+  }
+
+#include <cstring>
+#define GET_DEVICE_STR_INFO(LOWER_NAME, NAME) \
+    std::string LOWER_NAME ##Str; \
+    OCL_CALL (clGetDeviceInfo, device, CL_DEVICE_##NAME, 0, 0, &param_value_size); \
+    { \
+      std::vector<char> param_value(param_value_size); \
+      OCL_CALL (clGetDeviceInfo, device, CL_DEVICE_##NAME, \
+                param_value_size, param_value.empty() ? NULL : &param_value.front(), \
+                &param_value_size); \
+      if (!param_value.empty()) \
+        LOWER_NAME ##Str = std::string(&param_value.front(), param_value_size-1); \
+    } \
+    printf("device_" #LOWER_NAME " \"%s\"\n", LOWER_NAME ##Str.c_str());
+
+int
+cl_ocl_init(void)
+{
+  cl_int status = CL_SUCCESS;
+  cl_uint platform_n;
+  size_t i;
+#ifdef HAS_EGL
+  bool hasGLExt = false;
+#endif
+  cl_context_properties *props = NULL;
+
+  /* Get the platform number */
+  OCL_CALL (clGetPlatformIDs, 0, NULL, &platform_n);
+  printf("platform number %u\n", platform_n);
+  assert(platform_n >= 1);
+
+  /* Get a valid platform */
+  OCL_CALL (clGetPlatformIDs, 1, &platform, &platform_n);
+  GET_PLATFORM_STR_INFO(profile, PROFILE);
+  GET_PLATFORM_STR_INFO(name, NAME);
+  GET_PLATFORM_STR_INFO(vendor, VENDOR);
+  GET_PLATFORM_STR_INFO(version, VERSION);
+  GET_PLATFORM_STR_INFO(extensions, EXTENSIONS);
+
+  /* Get the device (only GPU device is supported right now) */
+  OCL_CALL (clGetDeviceIDs, platform, CL_DEVICE_TYPE_GPU, 1, &device, NULL);
+  {
+    size_t param_value_size;
+    GET_DEVICE_STR_INFO(profile, PROFILE);
+    GET_DEVICE_STR_INFO(name, NAME);
+    GET_DEVICE_STR_INFO(vendor, VENDOR);
+    GET_DEVICE_STR_INFO(version, VERSION);
+    GET_DEVICE_STR_INFO(extensions, EXTENSIONS);
+    GET_DEVICE_STR_INFO(opencl_c_version, OPENCL_C_VERSION);
+#ifdef HAS_EGL
+    if (std::strstr(extensionsStr.c_str(), "cl_khr_gl_sharing")) {
+      hasGLExt = true;
+    }
+#endif
+  }
+
+#ifdef HAS_EGL
+  if (hasGLExt) {
+    int i = 0;
+    props = new cl_context_properties[7];
+    props[i++] = CL_CONTEXT_PLATFORM;
+    props[i++] = (cl_context_properties)platform;
+    if (init_egl_window(EGL_WINDOW_WIDTH, EGL_WINDOW_HEIGHT)) {
+      props[i++] = CL_EGL_DISPLAY_KHR;
+      props[i++] = (cl_context_properties)eglGetCurrentDisplay();
+      props[i++] = CL_GL_CONTEXT_KHR;
+      props[i++] = (cl_context_properties)eglGetCurrentContext();
+    }
+    props[i++] = 0;
+  }
+#endif
+  /* Now create a context */
+  ctx = clCreateContext(props, 1, &device, NULL, NULL, &status);
+  if (status != CL_SUCCESS) {
+    fprintf(stderr, "error calling clCreateContext\n");
+    goto error;
+  }
+
+  /* All image types currently supported by the context */
+  cl_image_format fmt[256];
+  cl_uint fmt_n;
+  clGetSupportedImageFormats(ctx, 0, CL_MEM_OBJECT_IMAGE2D, 256, fmt, &fmt_n);
+  printf("%u image formats are supported\n", fmt_n);
+  for (i = 0; i < fmt_n; ++i)
+    printf("[%s %s]\n",
+        cl_test_channel_order_string(fmt[i].image_channel_order),
+        cl_test_channel_type_string(fmt[i].image_channel_data_type));
+
+  /* We are going to push NDRange kernels here */
+  queue = clCreateCommandQueue(ctx, device, 0, &status);
+  if (status != CL_SUCCESS) {
+    fprintf(stderr, "error calling clCreateCommandQueue\n");
+    goto error;
+  }
+
+error:
+  if (props)
+    delete props;
+  return status;
+}
+
+int
+cl_test_init(const char *file_name, const char *kernel_name, int format)
+{
+  cl_int status = CL_SUCCESS;
+
+  /* Initialize OCL */
+  if ((status = cl_ocl_init()) != CL_SUCCESS)
+    goto error;
+
+  /* Load the kernel */
+  if ((status = cl_kernel_init(file_name, kernel_name, format, NULL)) != CL_SUCCESS)
+    goto error;
+
+error:
+  return status;
+}
+
+void
+cl_kernel_destroy(bool needDestroyProgram)
+{
+  if (kernel) {
+    clReleaseKernel(kernel);
+    kernel = NULL;
+  }
+  if (needDestroyProgram && program) {
+    clReleaseProgram(program);
+    program = NULL;
+  }
+}
+
+void
+cl_ocl_destroy(void)
+{
+  clReleaseCommandQueue(queue);
+  clReleaseContext(ctx);
+#ifdef HAS_EGL
+  if (eglContext != NULL) {
+    cl_ocl_destroy_egl_window();
+    eglContext = NULL;
+  }
+#endif
+}
+
+void
+cl_test_destroy(void)
+{
+  cl_kernel_destroy();
+  cl_ocl_destroy();
+  printf("%i memory leaks\n", clReportUnfreedIntel());
+  assert(clReportUnfreedIntel() == 0);
+}
+
+void
+cl_buffer_destroy(void)
+{
+  int i;
+  for (i = 0; i < MAX_BUFFER_N; ++i) {
+    if (buf_data[i] != NULL) {
+      clUnmapBufferIntel(buf[i]);
+      buf_data[i] = NULL;
+    }
+    if (buf[i] != NULL) {
+      clReleaseMemObject(buf[i]);
+      buf[i] = NULL;
+    }
+  }
+}
+
+void
+cl_report_perf_counters(cl_mem perf)
+{
+  cl_int status = CL_SUCCESS;
+  uint32_t *start = NULL, *end = NULL;
+  uint32_t i;
+  if (perf == NULL)
+    return;
+  start = (uint32_t*) clMapBufferIntel(perf, &status);
+  assert(status == CL_SUCCESS && start != NULL);
+  end = start + 128;
+
+  printf("BEFORE\n");
+  for (i = 0; i < 6*8; ++i) {
+    if (i % 8 == 0) printf("\n");
+    printf("[%3u 0x%8x] ", i, start[i]);
+  }
+  printf("\n\n");
+
+  printf("AFTER\n");
+  for (i = 0; i < 6*8; ++i) {
+    if (i % 8 == 0) printf("\n");
+    printf("[%3u 0x%8x] ", i, end[i]);
+  }
+  printf("\n\n");
+
+  printf("DIFF\n");
+  for (i = 0; i < 6*8; ++i) {
+    if (i % 8 == 0) printf("\n");
+    printf("[%3u %8i] ", i, end[i] - start[i]);
+  }
+  printf("\n\n");
+
+  clUnmapBufferIntel(perf);
+}
+
+struct bmphdr {
+  //   2 bytes of magic here, "BM", total header size is 54 bytes!
+  int filesize;		//   4 total file size incl header
+  short as0, as1;		//   8 app specific
+  int bmpoffset;		//  12 ofset of bmp data 
+  int headerbytes;	//  16 bytes in header from this point (40 actually)
+  int width;		//  20 
+  int height;		//  24 
+  short nplanes;		//  26 no of color planes
+  short bpp;		//  28 bits/pixel
+  int compression;	//  32 BI_RGB = 0 = no compression
+  int sizeraw;		//  36 size of raw bmp file, excluding header, incl padding
+  int hres;		//  40 horz resolutions pixels/meter
+  int vres;		//  44
+  int npalcolors;		//  48 No of colors in palette
+  int nimportant;		//  52 No of important colors
+  // raw b, g, r data here, dword aligned per scan line
+};
+
+int *cl_read_bmp(const char *filename, int *width, int *height)
+{
+  struct bmphdr hdr;
+  char *bmppath = cl_do_kiss_path(filename, device);
+  FILE *fp = fopen(bmppath, "rb");
+  assert(fp);
+
+  char magic[2];
+  int ret;
+  ret = fread(&magic[0], 1, 2, fp);
+  assert(2 == ret);
+  assert(magic[0] == 'B' && magic[1] == 'M');
+
+  ret = fread(&hdr, sizeof(hdr), 1, fp);
+  assert(1 == ret);
+
+  assert(hdr.width > 0 && hdr.height > 0 && hdr.nplanes == 1 && hdr.compression == 0);
+
+  int *rgb32 = (int *) malloc(hdr.width * hdr.height * sizeof(int));
+  assert(rgb32);
+  int x, y;
+
+  int *dst = rgb32;
+  for (y = 0; y < hdr.height; y++) {
+    for (x = 0; x < hdr.width; x++) {
+      assert(!feof(fp));
+      int b = (getc(fp) & 0x0ff);
+      int g = (getc(fp) & 0x0ff);
+      int r = (getc(fp) & 0x0ff);
+      *dst++ = (r | (g << 8) | (b << 16) | 0xff000000);	/* abgr */
+    }
+    while (x & 3) {
+      getc(fp);
+      x++;
+    }		// each scanline padded to dword
+    // printf("read row %d\n", y);
+    // fflush(stdout);
+  }
+  fclose(fp);
+  *width = hdr.width;
+  *height = hdr.height;
+  free(bmppath);
+  return rgb32;
+}
+
+void cl_write_bmp(const int *data, int width, int height, const char *filename)
+{
+  int x, y;
+
+  FILE *fp = fopen(filename, "wb");
+  assert(fp);
+
+  char *raw = (char *) malloc(width * height * sizeof(int));	// at most
+  assert(raw);
+  char *p = raw;
+
+  for (y = 0; y < height; y++) {
+    for (x = 0; x < width; x++) {
+      int c = *data++;
+      *p++ = ((c >> 16) & 0xff);
+      *p++ = ((c >> 8) & 0xff);
+      *p++ = ((c >> 0) & 0xff);
+    }
+    while (x & 3) {
+      *p++ = 0;
+      x++;
+    } // pad to dword
+  }
+  int sizeraw = p - raw;
+  int scanline = (width * 3 + 3) & ~3;
+  assert(sizeraw == scanline * height);
+
+  struct bmphdr hdr;
+
+  hdr.filesize = scanline * height + sizeof(hdr) + 2;
+  hdr.as0 = 0;
+  hdr.as1 = 0;
+  hdr.bmpoffset = sizeof(hdr) + 2;
+  hdr.headerbytes = 40;
+  hdr.width = width;
+  hdr.height = height;
+  hdr.nplanes = 1;
+  hdr.bpp = 24;
+  hdr.compression = 0;
+  hdr.sizeraw = sizeraw;
+  hdr.hres = 0;		// 2834;
+  hdr.vres = 0;		// 2834;
+  hdr.npalcolors = 0;
+  hdr.nimportant = 0;
+
+  /* Now write bmp file */
+  char magic[2] = { 'B', 'M' };
+  fwrite(&magic[0], 1, 2, fp);
+  fwrite(&hdr, 1, sizeof(hdr), fp);
+  fwrite(raw, 1, hdr.sizeraw, fp);
+
+  fclose(fp);
+  free(raw);
+}
+
+static const float pixel_threshold = 0.05f;
+static const float max_error_ratio = 0.001f;
+
+int cl_check_image(const int *img, int w, int h, const char *bmp)
+{
+  int refw, refh;
+  int *ref = cl_read_bmp(bmp, &refw, &refh);
+  if (ref == NULL || refw != w || refh != h) return 0;
+  const int n = w*h;
+  int discrepancy = 0;
+  for (int i = 0; i < n; ++i) {
+    const float r = (float) (img[i] & 0xff);
+    const float g = (float) ((img[i] >> 8) & 0xff);
+    const float b = (float) ((img[i] >> 16) & 0xff);
+    const float rr = (float) (ref[i] & 0xff);
+    const float rg = (float) ((ref[i] >> 8) & 0xff);
+    const float rb = (float) ((ref[i] >> 16) & 0xff);
+    const float dr = fabs(r-rr) / (1.f/255.f + std::max(r,rr));
+    const float dg = fabs(g-rg) / (1.f/255.f + std::max(g,rg));
+    const float db = fabs(b-rb) / (1.f/255.f + std::max(b,rb));
+    const float err = sqrtf(dr*dr+dg*dg+db*db);
+    if (err > pixel_threshold) discrepancy++;
+  }
+  free(ref);
+  return (float(discrepancy) / float(n) > max_error_ratio) ? 0 : 1;
+}
+
+const float cl_FLT_ULP(float float_number)
+{
+  SF floatBin, ulpBin, ulpBinBase;
+  floatBin.f = float_number;
+
+  ulpBin.spliter.sign     = ulpBinBase.spliter.sign     = 0;
+  ulpBin.spliter.exponent = ulpBinBase.spliter.exponent = floatBin.spliter.exponent;
+  ulpBin.spliter.mantissa = 0x1;
+  ulpBinBase.spliter.mantissa = 0x0;
+  
+  return ulpBin.f - ulpBinBase.f;
+}
+
+const int cl_INT_ULP(int int_number)
+{
+  return 0;
+}
diff --git a/utests/utest/utest_helper.hpp b/utests/utest/utest_helper.hpp
new file mode 100644
index 0000000..0ebad7b
--- /dev/null
+++ b/utests/utest/utest_helper.hpp
@@ -0,0 +1,246 @@
+/*
+ * Copyright © 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+
+/**
+ * \file utest_helper.hpp
+ *
+ * \author Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+#ifndef __UTEST_HELPER_HPP__
+#define __UTEST_HELPER_HPP__
+
+#include "CL/cl.h"
+#include "CL/cl_intel.h"
+#include "utest.hpp"
+#include "utest_assert.hpp"
+#include "utest_error.h"
+#include <cassert>
+#include <cstdio>
+#include <cstdlib>
+
+#ifdef HAS_EGL
+#define EGL_WINDOW_WIDTH 256
+#define EGL_WINDOW_HEIGHT 256
+#include  <GL/gl.h>
+#include  <EGL/egl.h>
+#include  <EGL/eglext.h>
+#include <CL/cl_gl.h>
+
+extern EGLDisplay  eglDisplay;
+extern EGLContext  eglContext;
+extern EGLSurface  eglSurface;
+#endif
+
+#define OCL_THROW_ERROR(FN, STATUS) \
+  do { \
+    char msg[2048]; \
+    sprintf(msg, "error calling %s with error %s \n", #FN, err_msg[-STATUS]); \
+    OCL_ASSERTM(false, msg); \
+  } while (0)
+
+#define OCL_CALL(FN, ...) \
+  do { \
+    int status = FN(__VA_ARGS__); \
+    if (status != CL_SUCCESS) OCL_THROW_ERROR(FN, status); \
+  } while (0)
+
+#define OCL_CREATE_KERNEL(NAME) \
+  do { \
+    OCL_CALL (cl_kernel_init, NAME".cl", NAME, SOURCE, NULL); \
+  } while (0)
+
+#define OCL_DESTROY_KERNEL_KEEP_PROGRAM(KEEP_PROGRAM) \
+  do { \
+    cl_kernel_destroy(!(KEEP_PROGRAM)); \
+  } while(0)
+
+#define OCL_CREATE_KERNEL_FROM_FILE(FILE_NAME, KERNEL_NAME) \
+  do { \
+    OCL_CALL(cl_kernel_init, FILE_NAME".cl", KERNEL_NAME, SOURCE, NULL); \
+  } while (0)
+
+#define OCL_FLUSH() \
+  do { \
+    OCL_CALL(clFlush, queue); \
+  } while(0)
+
+#define OCL_FINISH() \
+  do { \
+    OCL_CALL(clFinish, queue); \
+  } while(0)
+
+#define OCL_CALL2(FN, RET, ...) \
+  do { \
+    cl_int status; \
+    RET = FN(__VA_ARGS__, &status);\
+    if (status != CL_SUCCESS) OCL_THROW_ERROR(FN, status); \
+  } while (0)
+
+#define OCL_CREATE_BUFFER(BUFFER, FLAGS, SIZE, DATA) \
+        OCL_CALL2(clCreateBuffer, BUFFER, ctx, FLAGS, SIZE, DATA)
+
+#define OCL_CREATE_USER_EVENT(EVENT) \
+    OCL_CALL2(clCreateUserEvent, EVENT, ctx)
+
+#define OCL_SET_USER_EVENT_STATUS(EVENT, STATUS) \
+    OCL_CALL(clSetUserEventStatus, EVENT, STATUS)
+
+#define OCL_CREATE_IMAGE(IMAGE, FLAGS, FORMAT, DESC, DATA) \
+    OCL_CALL2(clCreateImage, IMAGE, ctx, FLAGS, FORMAT, DESC, DATA)
+
+#define OCL_CREATE_IMAGE2D(IMAGE, FLAGS, FORMAT, WIDTH, HEIGHT, PITCH, DATA) \
+    OCL_CALL2(clCreateImage2D, IMAGE, ctx, FLAGS, FORMAT, WIDTH, HEIGHT, PITCH, DATA)
+
+#define OCL_CREATE_IMAGE3D(IMAGE, FLAGS, FORMAT, WIDTH, HEIGHT, DEPTH, RPITCH, SPITCH, DATA) \
+    OCL_CALL2(clCreateImage3D, IMAGE, ctx, FLAGS, FORMAT, WIDTH, HEIGHT, DEPTH, RPITCH, SPITCH, DATA)
+
+#define OCL_READ_IMAGE(IMAGE, ORIGIN, REGION, DATA) \
+    OCL_CALL(clEnqueueReadImage, queue, IMAGE, CL_TRUE, ORIGIN, REGION, 0, 0, DATA, 0, NULL, NULL)
+
+#define OCL_WRITE_IMAGE(IMAGE, ORIGIN, REGION, DATA) \
+    OCL_CALL(clEnqueueWriteImage, queue, IMAGE, CL_TRUE, ORIGIN, REGION, 0, 0, DATA, 0, NULL, NULL)
+
+#define OCL_CREATE_GL_IMAGE(IMAGE, FLAGS, TARGET, LEVEL, TEXTURE) \
+    OCL_CALL2(clCreateFromGLTexture, IMAGE, ctx, FLAGS, TARGET, LEVEL, TEXTURE)
+
+#define OCL_CREATE_GL_IMAGE2D(IMAGE, FLAGS, TARGET, LEVEL, TEXTURE) \
+    OCL_CALL2(clCreateFromGLTexture2D, IMAGE, ctx, FLAGS, TARGET, LEVEL, TEXTURE)
+
+#define OCL_CREATE_GL_IMAGE3D(IMAGE, FLAGS, TARGET, LEVEL, TEXTURE) \
+    OCL_CALL2(clCreateFromGLTexture3D, IMAGE, ctx, FLAGS, TARGET, LEVEL, TEXTURE)
+
+#define OCL_ENQUEUE_ACQUIRE_GL_OBJECTS(ID) \
+    OCL_CALL(clEnqueueAcquireGLObjects, queue, 1, &buf[ID], 0, 0, 0)
+
+#define OCL_SWAP_EGL_BUFFERS() \
+  eglSwapBuffers(eglDisplay, eglSurface);
+
+#define OCL_CREATE_SAMPLER(SAMPLER, ADDRESS_MODE, FILTER_MODE)          \
+    OCL_CALL2(clCreateSampler, SAMPLER, ctx, 0, ADDRESS_MODE, FILTER_MODE)
+
+#define OCL_MAP_BUFFER(ID) \
+    OCL_CALL2(clMapBufferIntel, buf_data[ID], buf[ID])
+
+#define OCL_UNMAP_BUFFER(ID) \
+  do { \
+    if (buf[ID] != NULL) { \
+      OCL_CALL (clUnmapBufferIntel, buf[ID]); \
+      buf_data[ID] = NULL; \
+    } \
+  } while (0)
+
+#define OCL_MAP_BUFFER_GTT(ID) \
+    OCL_CALL2(clMapBufferGTTIntel, buf_data[ID], buf[ID])
+
+#define OCL_UNMAP_BUFFER_GTT(ID) \
+  do { \
+    if (buf[ID] != NULL) { \
+      OCL_CALL (clUnmapBufferGTTIntel, buf[ID]); \
+      buf_data[ID] = NULL; \
+    } \
+  } while (0)
+
+#define OCL_NDRANGE(DIM_N) \
+    OCL_CALL (clEnqueueNDRangeKernel, queue, kernel, DIM_N, NULL, globals, locals, 0, NULL, NULL)
+
+#define OCL_SET_ARG(ID, SIZE, ARG) \
+    OCL_CALL (clSetKernelArg, kernel, ID, SIZE, ARG)
+
+#define OCL_CHECK_IMAGE(DATA, W, H, FILENAME) \
+  if (cl_check_image(DATA, W, H, FILENAME) == 0) \
+    OCL_ASSERTM(false, "image mismatch")
+
+enum { MAX_BUFFER_N = 16 };
+extern cl_platform_id platform;
+extern cl_device_id device;
+extern cl_context ctx;
+extern cl_program program;
+extern cl_kernel kernel;
+extern cl_command_queue queue;
+extern cl_mem buf[MAX_BUFFER_N];
+extern void* buf_data[MAX_BUFFER_N];
+extern size_t globals[3];
+extern size_t locals[3];
+
+enum {
+  SOURCE = 0,
+  LLVM = 1,
+  BIN = 2
+};
+
+/* The SF is float type spliter*/
+typedef struct
+{
+  unsigned int mantissa:23;
+  unsigned int exponent:8;
+  unsigned int sign:1;
+} FLOAT;
+
+typedef union
+{
+  float f;
+  unsigned int i;
+  FLOAT spliter;
+} SF;
+
+/* Init OpenCL */
+extern int cl_ocl_init(void);
+
+/* Init program and kernel for the test */
+extern int cl_kernel_init(const char *file_name,
+                const char *kernel_name, int format, const char * build_opt);
+
+/* Get the file path */
+extern char* cl_do_kiss_path(const char *file, cl_device_id device);
+
+/* init the bunch of global varaibles here */
+extern int cl_test_init(const char *file_name, const char *kernel_name, int format);
+
+/* Unmap and release all the created buffers */
+extern void cl_buffer_destroy(void);
+
+/* Release OCL queue, context and device */
+extern void cl_ocl_destroy(void);
+
+/* Release kernel and program */
+extern void cl_kernel_destroy(bool needDestroyProgram = true);
+
+/* Release everything allocated in cl_test_init */
+extern void cl_test_destroy(void);
+
+/* Nicely output the performance counters */
+extern void cl_report_perf_counters(cl_mem perf);
+
+/* Read a bmp from file */
+extern int *cl_read_bmp(const char *filename, int *width, int *height);
+
+/* Write a bmp to a file */
+extern void cl_write_bmp(const int *data, int width, int height, const char *filename);
+
+/* Check data from img against bmp file located at "bmp" */
+extern int cl_check_image(const int *img, int w, int h, const char *bmp);
+
+/* Calculator ULP of each FLOAT value */
+extern const float cl_FLT_ULP(float float_number);
+
+/* Calculator ULP of each INT value */
+extern const int cl_INT_ULP(int int_number);
+
+#endif /* __UTEST_HELPER_HPP__ */
+
diff --git a/utests/utest/utest_math_gen.py b/utests/utest/utest_math_gen.py
new file mode 100755
index 0000000..5a015ad
--- /dev/null
+++ b/utests/utest/utest_math_gen.py
@@ -0,0 +1,546 @@
+#!/usr/bin/python
+from utest_generator import *
+import os,sys
+
+#base_input_values = [80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0,6,-6,1500.24,-1500.24]
+#extend_input_values = [FLT_MAX_POSI,FLT_MIN_NEGA,FLT_MIN_POSI,FLT_MAX_NEGA,80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0,6,-6,1500.24,-1500.24]
+
+#func:
+#    gpufuncName 
+#    cpuFuncName
+#    fileName: 'builtin_'+name
+#    inputtype: a 2-D list because there're more than one input data
+#    outputtype: a list
+#    values
+#    ulp
+
+base_input_values = [ 0, 1, 3.14]
+def main():
+  ##### gentype acos(gentype)
+  acos_input_values = base_input_values
+  acos_input_type = ['float','float2','float4','float8','float16']
+  acos_output_type = ['float','float2','float4','float8','float16']
+  acosUtests = func('acos','acos',[acos_input_type],acos_output_type,[acos_input_values],'4 * FLT_ULP')
+  
+  ##### gentype acosh(gentype)
+  acosh_input_values = base_input_values
+  acosh_input_type = ['float','float2','float4','float8','float16']
+  acosh_output_type = ['float','float2','float4','float8','float16']
+  acoshUtests = func('acosh','acosh',[acosh_input_type],acosh_output_type,[acosh_input_values],'4 * FLT_ULP')
+  
+  ##### gentype acospi(gentype x)
+  acospi_input_values = base_input_values
+  acospi_input_type = ['float','float2','float4','float8','float16']
+  acospi_output_type = ['float','float2','float4','float8','float16']
+  acospi_cpu_func='''
+static float acospi(float x){
+  return acos(x)/M_PI;
+} '''
+  acospiUtests = func('acospi','acospi',[acospi_input_type],acospi_output_type,[acospi_input_values],'4 * FLT_ULP',acospi_cpu_func)
+  
+  ##### gentype asin(gentype)
+  asin_input_values = base_input_values
+  asin_input_type = ['float','float2','float4','float8','float16']
+  asin_output_type = ['float','float2','float4','float8','float16']
+  asinUtests = func('asin','asin',[asin_input_type],asin_output_type,[asin_input_values],'4 * FLT_ULP')
+  
+  ##### gentype asinh(gentype)
+  asinh_input_values = base_input_values
+  asinh_input_type = ['float','float2','float4','float8','float16']
+  asinh_output_type = ['float','float2','float4','float8','float16']
+  asinhUtests = func('asinh','asinh',[asinh_input_type],asinh_output_type,[asinh_input_values],'4 * FLT_ULP')
+  
+  ##### gentype asinpi(gentype x)
+  asinpi_input_values = base_input_values
+  asinpi_input_type = ['float','float2','float4','float8','float16']
+  asinpi_output_type = ['float','float2','float4','float8','float16']
+  asinpi_cpu_func='''
+static float asinpi(float x){
+  return asin(x)/M_PI;
+} '''
+  asinpiUtests = func('asinpi','asinpi',[asinpi_input_type],asinpi_output_type,[asinpi_input_values],'4 * FLT_ULP',asinpi_cpu_func)
+  
+  ##### gentype atan(gentype y_over_x)
+  atan_input_values = base_input_values
+  atan_input_type = ['float','float2','float4','float8','float16']
+  atan_output_type = ['float','float2','float4','float8','float16']
+  atanUtests = func('atan','atan',[atan_input_type],atan_output_type,[atan_input_values],'5 * FLT_ULP')
+  
+  ##### gentype atan2(gentype y, gentype x)
+  atan2_base_values = base_input_values
+  atan2_input_values1 = []
+  atan2_input_values2 = []
+  atan2_input_values1,atan2_input_values2=gene2ValuesLoop(atan2_input_values1,atan2_input_values2,atan2_base_values)
+  atan2_input_type1 = ['float','float2','float4','float8','float16']
+  atan2_input_type2 = ['float','float2','float4','float8','float16']
+  atan2_output_type = ['float','float2','float4','float8','float16']
+  atan2Utests = func('atan2','atan2',[atan2_input_type1,atan2_input_type2],atan2_output_type,[atan2_input_values1,atan2_input_values2],'6 * FLT_ULP')
+  
+  ##### gentype atanh(gentype)
+  atanh_input_values = base_input_values
+  atanh_input_type = ['float','float2','float4','float8','float16']
+  atanh_output_type = ['float','float2','float4','float8','float16']
+  atanhUtests = func('atanh','atanh',[atanh_input_type],atanh_output_type,[atanh_input_values],'5 * FLT_ULP')
+  
+  ##### gentype atanpi(gentype x)
+  atanpi_input_values = base_input_values
+  atanpi_input_type = ['float','float2','float4','float8','float16']
+  atanpi_output_type = ['float','float2','float4','float8','float16']
+  atanpi_cpu_func='''
+static float atanpi(float x){
+  return atan(x)/M_PI;
+} '''
+  atanpiUtests = func('atanpi','atanpi',[atanpi_input_type],atanpi_output_type,[atanpi_input_values],'4 * FLT_ULP',atanpi_cpu_func)
+  
+#  ##### gentype atan2pi(gentype y, gentype x)
+#  atan2pi_base_values = base_input_values
+#  atan2pi_input_values1 = []
+#  atan2pi_input_values2 = []
+#  atan2pi_input_values1,atan2pi_input_values2=gene2ValuesLoop(atan2pi_input_values1,atan2pi_input_values2,atan2pi_base_values)
+#  atan2pi_input_type1 = ['float','float2','float4','float8','float16']
+#  atan2pi_input_type2 = ['float','float2','float4','float8','float16']
+#  atan2pi_output_type = ['float','float2','float4','float8','float16']
+#  atan2pi_cpu_func='''
+#static float atan2pi(float y, float x){
+#  return atan2(y,x)/M_PI;
+#} '''
+#  atan2piUtests = func('atan2pi','atan2pi',[atan2pi_input_type1,atan2pi_input_type2],atan2pi_output_type,[atan2pi_input_values1,atan2pi_input_values2],'6 * FLT_ULP',atan2pi_cpu_func)
+  
+  ##### gentype cbrt(gentype)
+  cbrt_input_values = base_input_values
+  cbrt_input_type = ['float','float2','float4','float8','float16']
+  cbrt_output_type = ['float','float2','float4','float8','float16']
+  cbrtUtests = func('cbrt','cbrt',[cbrt_input_type],cbrt_output_type,[cbrt_input_values],'4 * FLT_ULP')
+  
+  ##### gentype ceil(gentype)
+  ceil_input_values = base_input_values
+  ceil_input_type = ['float','float2','float4','float8','float16']
+  ceil_output_type = ['float','float2','float4','float8','float16']
+  ceilUtests = func('ceil','ceil',[ceil_input_type],ceil_output_type,[ceil_input_values],'0 * FLT_ULP')
+  
+  ##### gentype copysign(gentype x, gentype y)
+  copysign_base_values = base_input_values
+  copysign_input_values1 = []
+  copysign_input_values2 = []
+  copysign_input_values1,copysign_input_values2=gene2ValuesLoop(copysign_input_values1,copysign_input_values2,copysign_base_values)
+  copysign_input_type1 = ['float','float2','float4','float8','float16']
+  copysign_input_type2 = ['float','float2','float4','float8','float16']
+  copysign_output_type = ['float','float2','float4','float8','float16']
+  copysignUtests = func('copysign','copysign',[copysign_input_type1,copysign_input_type2],copysign_output_type,[copysign_input_values1,copysign_input_values2],'0 * FLT_ULP')
+  
+  ##### gentype cos(gentype)
+  cos_input_values = base_input_values
+  cos_input_type = ['float','float2','float4','float8','float16']
+  cos_output_type = ['float','float2','float4','float8','float16']
+  cosUtests = func('cos','cos',[cos_input_type],cos_output_type,[cos_input_values],'4 * FLT_ULP')
+  
+  ##### gentype cosh(gentype)
+  cosh_input_values = base_input_values
+  cosh_input_type = ['float','float2','float4','float8','float16']
+  cosh_output_type = ['float','float2','float4','float8','float16']
+  coshUtests = func('cosh','cosh',[cosh_input_type],cosh_output_type,[cosh_input_values],'4 * FLT_ULP')
+  
+  ##### gentype cospi(gentype x)
+  cospi_input_values = base_input_values
+  cospi_input_type = ['float','float2','float4','float8','float16']
+  cospi_output_type = ['float','float2','float4','float8','float16']
+  cospi_cpu_func='''
+static float cospi(float x){
+  return cos(M_PI * x);
+} '''
+  cospiUtests = func('cospi','cospi',[cospi_input_type],cospi_output_type,[cospi_input_values],'2 * FLT_ULP',cospi_cpu_func)
+  
+#  ##### gentype erf(gentype)
+#  erf_input_values = base_input_values
+#  erf_input_type = ['float','float2','float4','float8','float16']
+#  erf_output_type = ['float','float2','float4','float8','float16']
+#  erfUtests = func('erf','erf',[erf_input_type],erf_output_type,[erf_input_values],'16 * FLT_ULP')
+
+#  ##### gentype erfc(gentype)
+#  erfc_input_values = base_input_values
+#  erfc_input_type = ['float','float2','float4','float8','float16']
+#  erfc_output_type = ['float','float2','float4','float8','float16']
+#  erfcUtests = func('erfc','erfc',[erfc_input_type],erfc_output_type,[erfc_input_values],'16 * FLT_ULP')
+  
+  ##### gentype exp(gentype x)
+  exp_input_values = base_input_values
+  exp_input_type = ['float','float2','float4','float8','float16']
+  exp_output_type = ['float','float2','float4','float8','float16']
+  expUtests = func('exp','exp',[exp_input_type],exp_output_type,[exp_input_values],'4 * FLT_ULP')
+  
+  ##### gentype exp2(gentype)
+  exp2_input_values = base_input_values
+  exp2_input_type = ['float','float2','float4','float8','float16']
+  exp2_output_type = ['float','float2','float4','float8','float16']
+  exp2Utests = func('exp2','exp2',[exp2_input_type],exp2_output_type,[exp2_input_values],'4 * FLT_ULP')
+  
+  ##### gentype exp10(gentype)
+  exp10_input_values = base_input_values
+  exp10_input_type = ['float','float2','float4','float8','float16']
+  exp10_output_type = ['float','float2','float4','float8','float16']
+  exp10Utests = func('exp10','exp10',[exp10_input_type],exp10_output_type,[exp10_input_values],'4 * FLT_ULP')
+  
+  ##### gentype expm1(gentype x)
+  expm1_input_values = base_input_values
+  expm1_input_type = ['float','float2','float4','float8','float16']
+  expm1_output_type = ['float','float2','float4','float8','float16']
+  expm1Utests = func('expm1','expm1',[expm1_input_type],expm1_output_type,[expm1_input_values],'4 * FLT_ULP')
+  
+  ##### gentype fabs(gentype)
+  fabs_input_values = base_input_values
+  fabs_input_type = ['float','float2','float4','float8','float16']
+  fabs_output_type = ['float','float2','float4','float8','float16']
+  fabsUtests = func('fabs','fabs',[fabs_input_type],fabs_output_type,[fabs_input_values],'0 * FLT_ULP')
+  
+  ##### gentype fdim(gentype x, gentype y)
+  fdim_base_values = base_input_values
+  fdim_input_values1 = []
+  fdim_input_values2 = []
+  fdim_input_values1,fdim_input_values2=gene2ValuesLoop(fdim_input_values1,fdim_input_values2,fdim_base_values)
+  fdim_input_type1 = ['float','float2','float4','float8','float16']
+  fdim_input_type2 = ['float','float2','float4','float8','float16']
+  fdim_output_type = ['float','float2','float4','float8','float16']
+  fdimUtests = func('fdim','fdim',[fdim_input_type1,fdim_input_type2],fdim_output_type,[fdim_input_values1,fdim_input_values2],'0 * FLT_ULP')
+  
+  ##### gentype floor(gentype)
+  floor_input_values = base_input_values
+  floor_input_type = ['float','float2','float4','float8','float16']
+  floor_output_type = ['float','float2','float4','float8','float16']
+  floorUtests = func('floor','floor',[floor_input_type],floor_output_type,[floor_input_values],'0 * FLT_ULP')
+  
+  ##### gentype fmax(gentype x, gentype y)
+  fmax_base_values = base_input_values
+  fmax_input_values1 = []
+  fmax_input_values2 = []
+  fmax_input_values1,fmax_input_values2=gene2ValuesLoop(fmax_input_values1,fmax_input_values2,fmax_base_values)
+  fmax_input_type1 = ['float','float2','float4','float8','float16']
+  fmax_input_type2 = ['float','float2','float4','float8','float16']
+  fmax_output_type = ['float','float2','float4','float8','float16']
+  fmaxUtests = func('fmax','fmax',[fmax_input_type1,fmax_input_type2],fmax_output_type,[fmax_input_values1,fmax_input_values2],'0 * FLT_ULP')
+  
+  ##### gentypef fmax(gentypef x, float y)
+#  fmax_gentypef_base_values = base_input_values
+#  fmax_gentypef_input_values1 = []
+#  fmax_gentypef_input_values2 = []
+#  fmax_gentypef_input_values2,fmax_gentypef_input_values1=gene2ValuesLoop(fmax_gentypef_input_values1,fmax_gentypef_input_values2,fmax_gentypef_base_values)
+#  fmax_gentypef_input_type1 = ['float','float2','float4','float8','float16']
+#  fmax_gentypef_input_type2 = ['float','float','float','float','float']
+#  fmax_gentypef_output_type = ['float','float2','float4','float8','float16']
+#  ##### gentypef fmax(gentypef x, float y)
+#  fmax_gentypefUtests = func('gentypef_fmax','gentypef_fmax',[fmax_gentypef_input_type1,fmax_gentypef_input_type2],fmax_gentypef_output_type,[fmax_gentypef_input_values1,fmax_gentypef_input_values2],'0 * FLT_ULP')
+  
+  ##### gentype fmin(gentype x, gentype y)
+  fmin_base_values = base_input_values
+  fmin_input_values1 = []
+  fmin_input_values2 = []
+  fmin_input_values1,fmin_input_values2=gene2ValuesLoop(fmin_input_values1,fmin_input_values2,fmin_base_values)
+  fmin_input_type1 = ['float','float2','float4','float8','float16']
+  fmin_input_type2 = ['float','float2','float4','float8','float16']
+  fmin_output_type = ['float','float2','float4','float8','float16']
+  fminUtests = func('fmin','fmin',[fmin_input_type1,fmin_input_type2],fmin_output_type,[fmin_input_values1,fmin_input_values2],'0 * FLT_ULP')
+  
+#  ##### gentypef fmin(gentypef x, float y)
+#  fmin_gentypef_base_values = base_input_values
+#  fmin_gentypef_input_values1 = []
+#  fmin_gentypef_input_values2 = []
+#  fmin_gentypef_input_values2,fmin_gentypef_input_values1=gene2ValuesLoop(fmin_gentypef_input_values1,fmin_gentypef_input_values2,fmin_gentypef_base_values)
+#  fmin_gentypef_input_type1 = ['float','float2','float4','float8','float16']
+#  fmin_gentypef_input_type2 = ['float','float','float','float','float']
+#  fmin_gentypef_output_type = ['float','float2','float4','float8','float16']
+#  ##### gentypef fmin(gentypef x, float y)
+#  fmin_gentypefUtests = func('gentypef_fmin','gentypef_fmin',[fmin_gentypef_input_type1,fmin_gentypef_input_type2],fmin_gentypef_output_type,[fmin_gentypef_input_values1,fmin_gentypef_input_values2],'0 * FLT_ULP')
+#  
+  ##### gentype fmod(gentype x, gentype y)
+  fmod_base_values = base_input_values
+  fmod_input_values1 = []
+  fmod_input_values2 = []
+  fmod_input_values1,fmod_input_values2=gene2ValuesLoop(fmod_input_values1,fmod_input_values2,fmod_base_values)
+  fmod_input_type1 = ['float','float2','float4','float8','float16']
+  fmod_input_type2 = ['float','float2','float4','float8','float16']
+  fmod_output_type = ['float','float2','float4','float8','float16']
+  fmodUtests = func('fmod','fmod',[fmod_input_type1,fmod_input_type2],fmod_output_type,[fmod_input_values1,fmod_input_values2],'0 * FLT_ULP')
+  
+  ##### gentype hypot(gentype x, gentype y)
+  hypot_base_values = base_input_values
+  hypot_input_values1 = []
+  hypot_input_values2 = []
+  hypot_input_values1,hypot_input_values2=gene2ValuesLoop(hypot_input_values1,hypot_input_values2,hypot_base_values)
+  hypot_input_type1 = ['float','float2','float4','float8','float16']
+  hypot_input_type2 = ['float','float2','float4','float8','float16']
+  hypot_output_type = ['float','float2','float4','float8','float16']
+  hypotUtests = func('hypot','hypot',[hypot_input_type1,hypot_input_type2],hypot_output_type,[hypot_input_values1,hypot_input_values2],'4 * FLT_ULP')
+  
+  ##### intn ilogb(floartn x)
+  ilogb_input_values = base_input_values
+  ilogb_input_type = ['float','float2','float4','float8','float16']
+  ilogb_output_type = ['int','int2','int4','int8','int16']
+  ilogbUtests = func('ilogb','ilogb',[ilogb_input_type],ilogb_output_type,[ilogb_input_values],'0 * INT_ULP')
+
+  ##### gentype lgamma(gentype x)
+  lgamma_input_values = base_input_values
+  lgamma_input_type = ['float','float2','float4','float8','float16']
+  lgamma_output_type = ['float','float2','float4','float8','float16']
+  lgammaUtests = func('lgamma','lgamma',[lgamma_input_type],lgamma_output_type,[lgamma_input_values],'4 * FLT_ULP')
+
+  ##### gentype log(gentype)
+  log_input_values = base_input_values
+  log_input_type = ['float','float2','float4','float8','float16']
+  log_output_type = ['float','float2','float4','float8','float16']
+  logUtests = func('log','log',[log_input_type],log_output_type,[log_input_values],'4 * FLT_ULP')
+  
+  ##### gentype log2(gentype)
+  log2_input_values = base_input_values
+  log2_input_type = ['float','float2','float4','float8','float16']
+  log2_output_type = ['float','float2','float4','float8','float16']
+  log2Utests = func('log2','log2',[log2_input_type],log2_output_type,[log2_input_values],'4 * FLT_ULP')
+  
+  ##### gentype log10(gentype)
+  log10_input_values = base_input_values
+  log10_input_type = ['float','float2','float4','float8','float16']
+  log10_output_type = ['float','float2','float4','float8','float16']
+  log10Utests = func('log10','log10',[log10_input_type],log10_output_type,[log10_input_values],'4 * FLT_ULP')
+  
+  ##### gentype log1p(gentype x)
+  log1p_input_values = base_input_values
+  log1p_input_type = ['float','float2','float4','float8','float16']
+  log1p_output_type = ['float','float2','float4','float8','float16']
+  log1pUtests = func('log1p','log1p',[log1p_input_type],log1p_output_type,[log1p_input_values],'4 * FLT_ULP')
+  
+  ##### gentype logb(gentype x)
+  logb_input_values = base_input_values
+  logb_input_type = ['float','float2','float4','float8','float16']
+  logb_output_type = ['float','float2','float4','float8','float16']
+  logbUtests = func('logb','logb',[logb_input_type],logb_output_type,[logb_input_values],'0 * FLT_ULP')
+  
+  ##### gentype maxmag(gentype x, gentype y)
+  maxmag_base_values = base_input_values
+  maxmag_input_values1 = []
+  maxmag_input_values2 = []
+  maxmag_input_values1,maxmag_input_values2=gene2ValuesLoop(maxmag_input_values1,maxmag_input_values2,maxmag_base_values)
+  maxmag_input_type1 = ['float','float2','float4','float8','float16']
+  maxmag_input_type2 = ['float','float2','float4','float8','float16']
+  maxmag_output_type = ['float','float2','float4','float8','float16']
+  maxmag_cpu_func='''
+static float maxmag(float x, float y){
+  if(fabs(x) > fabs(y))
+    return x;
+  else if (fabs(x) < fabs(y))
+    return y;
+  else
+    return fmax(x,y);
+} '''
+  maxmagUtests = func('maxmag','maxmag',[maxmag_input_type1,maxmag_input_type2],maxmag_output_type,[maxmag_input_values1,maxmag_input_values2],'0 * FLT_ULP',maxmag_cpu_func)
+  
+  ##### gentype minmag(gentype x, gentype y)
+  minmag_base_values = base_input_values
+  minmag_input_values1 = []
+  minmag_input_values2 = []
+  minmag_input_values1,minmag_input_values2=gene2ValuesLoop(minmag_input_values1,minmag_input_values2,minmag_base_values)
+  minmag_input_type1 = ['float','float2','float4','float8','float16']
+  minmag_input_type2 = ['float','float2','float4','float8','float16']
+  minmag_output_type = ['float','float2','float4','float8','float16']
+  minmag_cpu_func='''
+static float minmag(float x, float y){
+  if(fabs(x) < fabs(y))
+    return x;
+  else if (fabs(x) > fabs(y))
+    return y;
+  else
+    return fmin(x,y);
+} '''
+  minmagUtests = func('minmag','minmag',[minmag_input_type1,minmag_input_type2],minmag_output_type,[minmag_input_values1,minmag_input_values2],'0 * FLT_ULP',minmag_cpu_func)
+  
+#  ##### floatn nan(uintn nancode)
+#  nan_input_values = base_input_values
+#  nan_input_type = ['uint','uint2','uint4','uint8','uint16']
+#  nan_output_type = ['float','float2','float4','float8','float16']
+#  nanUtests = func('nan','nan',[nan_input_type],nan_output_type,[nan_input_values],'0 * FLT_ULP')
+  
+  ##### gentype nextafter(gentype x, gentype y)
+  nextafter_base_values = base_input_values
+  nextafter_input_values1 = []
+  nextafter_input_values2 = []
+  nextafter_input_values1,nextafter_input_values2=gene2ValuesLoop(nextafter_input_values1,nextafter_input_values2,nextafter_base_values)
+  nextafter_input_type1 = ['float','float2','float4','float8','float16']
+  nextafter_input_type2 = ['float','float2','float4','float8','float16']
+  nextafter_output_type = ['float','float2','float4','float8','float16']
+  nextafterUtests = func('nextafter','nextafter',[nextafter_input_type1,nextafter_input_type2],nextafter_output_type,[nextafter_input_values1,nextafter_input_values2],'0 * FLT_ULP')
+  
+  ##### gentype pow(gentype x, gentype y)
+  pow_base_values = base_input_values
+  pow_input_values1 = []
+  pow_input_values2 = []
+  pow_input_values1,pow_input_values2=gene2ValuesLoop(pow_input_values1,pow_input_values2,pow_base_values)
+  pow_input_type1 = ['float','float2','float4','float8','float16']
+  pow_input_type2 = ['float','float2','float4','float8','float16']
+  pow_output_type = ['float','float2','float4','float8','float16']
+  powUtests = func('pow','pow',[pow_input_type1,pow_input_type2],pow_output_type,[pow_input_values1,pow_input_values2],'16 * FLT_ULP')
+  
+  ##### floatn pown(floatn x, intn y)
+  pown_input_values1 = [FLT_MAX_POSI,FLT_MIN_NEGA,FLT_MIN_POSI,FLT_MAX_NEGA,80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0,6,-6,1500.24,-1500.24]
+  pown_input_values2 = [-1,-2,-3,4,5,6,7,8,9,10,11,12,13,14,15,16,12]
+  pown_input_type1 = ['float','float2','float4','float8','float16']
+  pown_input_type2 = ['int','int2','int4','int8','int16']
+  pown_output_type = ['float','float2','float4','float8','float16']
+  pown_cpu_func='''
+static float pown(float x, int y){
+    return pow(x,y);
+} '''
+  pownUtests = func('pown','pown',[pown_input_type1,pown_input_type2],pown_output_type,[pown_input_values1,pown_input_values2],'16 * FLT_ULP', pown_cpu_func)
+  
+  ##### gentype powr(gentype x, gentype y)
+  powr_input_values1 = [FLT_MAX_POSI,FLT_MIN_NEGA,FLT_MIN_POSI,FLT_MAX_NEGA,80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0,6,-6,1500.24,-1500.24]
+  powr_input_values2 = [1,2,3.14,4,5,6,7,8,9.889,10,11,12,13,14.33,15,0,12]
+  powr_input_type1 = ['float','float2','float4','float8','float16']
+  powr_input_type2 = ['float','float2','float4','float8','float16']
+  powr_output_type = ['float','float2','float4','float8','float16']
+  powr_cpu_func='''
+static float powr(float x, int y){
+    return pow(x,y);
+} '''
+  powrUtests = func('powr','powr',[powr_input_type1,powr_input_type2],powr_output_type,[powr_input_values1,powr_input_values2],'16 * FLT_ULP', powr_cpu_func)
+  
+  ##### gentype remainder(gentype x, gentype y)
+  remainder_base_values = base_input_values
+  remainder_input_values1 = []
+  remainder_input_values2 = []
+  remainder_input_values1,remainder_input_values2=gene2ValuesLoop(remainder_input_values1,remainder_input_values2,remainder_base_values)
+  remainder_input_type1 = ['float','float2','float4','float8','float16']
+  remainder_input_type2 = ['float','float2','float4','float8','float16']
+  remainder_output_type = ['float','float2','float4','float8','float16']
+  remainderUtests = func('remainder','remainder',[remainder_input_type1,remainder_input_type2],remainder_output_type,[remainder_input_values1,remainder_input_values2],'0 * FLT_ULP')
+  
+  ##### gentype rint(gentype x)
+  rint_input_values = base_input_values
+  rint_input_type = ['float','float2','float4','float8','float16']
+  rint_output_type = ['float','float2','float4','float8','float16']
+  rintUtests = func('rint','rint',[rint_input_type],rint_output_type,[rint_input_values],'0 * FLT_ULP')
+  
+  ##### floatn rootn(floatn x, intn y)
+  rootn_input_values1 = [0.0, 0.0012,  0.5, 1, 3.14, 12345]
+  rootn_input_values2 = [-1, 1, -20, 20, -123, 456]
+  rootn_input_type1 = ['float','float2','float4','float8','float16']
+  rootn_input_type2 = ['int','int2','int4','int8','int16']
+  rootn_output_type = ['float','float2','float4','float8','float16']
+  rootn_cpu_func='''
+static float rootn(float x, int y){
+    return pow(x,1.0/y);
+} '''
+  rootnUtests = func('rootn','rootn',[rootn_input_type1,rootn_input_type2],rootn_output_type,[rootn_input_values1,rootn_input_values2],'4 * FLT_ULP',rootn_cpu_func)
+  
+  ##### gentype round(gentype x)
+  round_input_values = base_input_values
+  round_input_type = ['float','float2','float4','float8','float16']
+  round_output_type = ['float','float2','float4','float8','float16']
+  roundUtests = func('round','round',[round_input_type],round_output_type,[round_input_values],'0 * FLT_ULP')
+  
+  ##### gentype rsqrt(gentype)
+  rsqrt_input_values = base_input_values
+  rsqrt_input_type = ['float','float2','float4','float8','float16']
+  rsqrt_output_type = ['float','float2','float4','float8','float16']
+  rsqrt_cpu_func='''
+static float rsqrt(float x)
+{ return 1/sqrt(x);} '''
+  rsqrtUtests = func('rsqrt','rsqrt',[rsqrt_input_type],rsqrt_output_type,[rsqrt_input_values],'4 * FLT_ULP', rsqrt_cpu_func)
+
+ 
+  ##### gentype sin(gentype)
+  sin_input_values = base_input_values
+  sin_input_type = ['float','float2','float4','float8','float16']
+  sin_output_type = ['float','float2','float4','float8','float16']
+  sinUtests = func('sin','sin',[sin_input_type],sin_output_type,[sin_input_values],'4 * FLT_ULP')
+  
+#  ##### gentype sincos(gentype)
+#  sincos_input_values1 = [FLT_MAX_POSI,FLT_MIN_NEGA,FLT_MIN_POSI,FLT_MAX_NEGA,80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0,6,-6,1500.24,-1500.24]
+#  sincos_input_values2 = []
+#  sincos_input_type1 = ['float','float2','float4','float8','float16']
+#  sincos_input_type2 = ['float','float2','float4','float8','float16']
+#  sincos_output_type = ['float','float2','float4','float8','float16']
+#  ###### gentype sincos(gentype)
+#  #  sincosUtests = func('sincos','sincos',[sincos_input_type1,sincos_input_type2],sincos_output_type,[sincos_input_values1,sincos_input_values2],'4 * FLT_ULP')
+  
+  ##### gentype sinh(gentype)
+  sinh_input_values = base_input_values
+  sinh_input_type = ['float','float2','float4','float8','float16']
+  sinh_output_type = ['float','float2','float4','float8','float16']
+  sinhUtests = func('sinh','sinh',[sinh_input_type],sinh_output_type,[sinh_input_values],'4 * FLT_ULP')
+  
+  ##### gentype sinpi(gentype x)
+  sinpi_input_values = [0, 1, 3.14, -0.88, -0.12, -0.5, 0.5, -0.49, 0.49, 0.51, -0.51, -0.1, 0.1]
+  sinpi_input_type = ['float','float2','float4','float8','float16']
+  sinpi_output_type = ['float','float2','float4','float8','float16']
+  sinpi_cpu_func='''
+static float reduce1( float x )
+{
+  SF fx, fy;
+  fx.f = fy.f = x;
+  int n;
+
+  fy.spliter.exponent = fx.spliter.exponent - 1;
+  n = (int)fy.f;
+
+  fx.f = fx.f - 2.0 * n;
+
+  return fx.f;
+}
+
+static float sinpi(float x){
+  float r = x;
+  if ( x > 1 || x < -1) r = reduce1(x);
+
+  // reduce to [-0.5, 0.5]
+  if(r < -0.5)
+      r = -1 - r;
+  else if (r > 0.5)
+      r = 1 - r;
+
+  if (r > 0.25 && r <= 0.5)
+    return  cos((0.5 - r) * M_PI);
+  else if (r >= 0 && r <= 0.25)
+    return  sin(r * M_PI);
+  else if (r >= -0.25 && r < 0)
+    return -sin(r * -M_PI);
+  else if (r >= -0.5 && r < -0.25){
+    return -cos((0.5 + r) * M_PI);}
+
+  // Error return
+  return 0xffffffff;
+} '''
+  sinpiUtests = func('sinpi','sinpi',[sinpi_input_type],sinpi_output_type,[sinpi_input_values],'4 * FLT_ULP',sinpi_cpu_func)
+  
+  ##### gentype sqrt(gentype)
+  sqrt_input_values = base_input_values
+  sqrt_input_type = ['float','float2','float4','float8','float16']
+  sqrt_output_type = ['float','float2','float4','float8','float16']
+  sqrtUtests = func('sqrt','sqrt',[sqrt_input_type],sqrt_output_type,[sqrt_input_values],'4 * FLT_ULP')
+  
+  ##### gentype tan(gentype)
+  tan_input_values = base_input_values
+  tan_input_type = ['float','float2','float4','float8','float16']
+  tan_output_type = ['float','float2','float4','float8','float16']
+  tanUtests = func('tan','tan',[tan_input_type],tan_output_type,[tan_input_values],'5 * FLT_ULP')
+  
+  ##### gentype tanh(gentype)
+  tanh_input_values = base_input_values
+  tanh_input_type = ['float','float2','float4','float8','float16']
+  tanh_output_type = ['float','float2','float4','float8','float16']
+  tanhUtests = func('tanh','tanh',[tanh_input_type],tanh_output_type,[tanh_input_values],'5 * FLT_ULP')
+  
+  ##### gentype tanpi(gentype x)
+  tanpi_input_values = base_input_values
+  tanpi_input_type = ['float','float2','float4','float8','float16']
+  tanpi_output_type = ['float','float2','float4','float8','float16']
+  tanpi_cpu_func='''
+static float tanpi(float x){
+  return tan(M_PI*x);
+} '''
+  tanpiUtests = func('tanpi','tanpi',[tanpi_input_type],tanpi_output_type,[tanpi_input_values],'4 * FLT_ULP',tanpi_cpu_func)
+  
+  ##### gentype trunc(gentype)
+  trunc_input_values = base_input_values
+  trunc_input_type = ['float','float2','float4','float8','float16']
+  trunc_output_type = ['float','float2','float4','float8','float16']
+  truncUtests = func('trunc','trunc',[trunc_input_type],trunc_output_type,[trunc_input_values],'0 * FLT_ULP')
+
+if __name__ == "__main__":
+  main()
diff --git a/utests/utest/utest_run.cpp b/utests/utest/utest_run.cpp
new file mode 100644
index 0000000..cd4356a
--- /dev/null
+++ b/utests/utest/utest_run.cpp
@@ -0,0 +1,118 @@
+/* 
+ * Copyright © 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Benjamin Segovia <benjamin.segovia at intel.com>
+ */
+
+/**
+ * \file utest_run.cpp
+ * \author Benjamin Segovia <benjamin.segovia at intel.com>
+ *
+ * Just run the unit tests. The user can possibly provides the subset of it
+ */
+#include "utest_helper.hpp"
+#include "utest_exception.hpp"
+#include <iostream>
+#include <getopt.h>
+
+static const char *shortopts = "c:lanh";
+struct option longopts[] = {
+{"casename", required_argument, NULL, 'c'},
+{"list", no_argument, NULL, 'l'},
+{"all", no_argument, NULL, 'a'},
+{"allnoissue", no_argument, NULL, 'n'},
+{"help", no_argument, NULL, 'h'},
+{0, 0, 0, 0},
+};
+
+void usage()
+{
+    std::cout << "\
+Usage:\n\
+  ./utest_run <option>\n\
+\n\
+  option:\n\
+    -c <casename>: run sub-case named 'casename'\n\
+    -l           : list all the available case name\n\
+    -a           : run all test cases\n\
+    -n           : run all test cases without known issue (default option)\n\
+    -h           : display this usage\n\
+\
+    "<< std::endl;
+}
+
+int main(int argc, char *argv[])
+{
+
+  int c = 0;
+  cl_ocl_init();
+
+  c = getopt_long (argc, argv, shortopts, longopts, NULL);
+
+  if (argc == 1)
+    c = 'n';
+  if (argc == 2 && c < 1 ){
+    c = 'c';
+    optarg = argv[1];
+  }
+
+  do {
+    switch (c)
+    {
+      case 'c':
+        try {
+          UTest::run(optarg);
+        }
+        catch (Exception e){
+          std::cout << "  " << e.what() << "    [SUCCESS]" << std::endl;
+        }
+
+        break;
+
+      case 'l':
+        UTest::listAllCases();
+        break;
+
+      case 'a':
+        try {
+          UTest::runAll();
+        }
+        catch (Exception e){
+          std::cout << "  " << e.what() << "    [SUCCESS]" << std::endl;
+        }
+
+        break;
+
+      case 'n':
+        try {
+          UTest::runAllNoIssue();
+        }
+        catch (Exception e){
+          std::cout << "  " << e.what() << "    [SUCCESS]" << std::endl;
+        }
+
+        break;
+
+      case 'h':
+      default:
+        usage();
+        exit(1);
+    }
+  } while ((c = getopt_long (argc, argv, shortopts, longopts, NULL)) != -1);
+
+  cl_ocl_destroy();
+}
+
diff --git a/utests/utest_assert.cpp b/utests/utest_assert.cpp
deleted file mode 100644
index f3b9a00..0000000
--- a/utests/utest_assert.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* 
- * Copyright © 2012 Intel Corporation
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author: Benjamin Segovia <benjamin.segovia at intel.com>
- */
-
-/**
- * \file assert.cpp
- * \author Benjamin Segovia <benjamin.segovia at intel.com>
- */
-#include "utest_assert.hpp"
-#include "utest_exception.hpp"
-#include <cassert>
-#include <cstdlib>
-
-void onFailedAssertion(const char *msg, const char *file, const char *fn, int line)
-{
-  char lineString[256];
-  sprintf(lineString, "%i", line);
-  assert(msg != NULL && file != NULL && fn != NULL);
-  const std::string str = "Error: "
-                        + std::string(msg) + "\n  at file "
-                        + std::string(file)
-                        + ", function " + std::string(fn)
-                        + ", line " + std::string(lineString);
-  throw Exception(str);
-}
-
diff --git a/utests/utest_assert.hpp b/utests/utest_assert.hpp
deleted file mode 100644
index f93f9ac..0000000
--- a/utests/utest_assert.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/* 
- * Copyright © 2012 Intel Corporation
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author: Benjamin Segovia <benjamin.segovia at intel.com>
- */
-
-/**
- * \file assert.hpp
- *
- * \author Benjamin Segovia <benjamin.segovia at intel.com>
- */
-#ifndef __OCL_ASSERT_HPP__
-#define __OCL_ASSERT_HPP__
-
-/*! To ensure that condition truth. Optional message is supported */
-void onFailedAssertion(const char *msg, const char *file, const char *fn, int line);
-
-#define OCL_ASSERT(EXPR) \
-  do { \
-    if (!(EXPR)) \
-      onFailedAssertion(#EXPR, __FILE__, __FUNCTION__, __LINE__); \
-  } while (0)
-
-#define OCL_ASSERTM(EXPR, MSG) \
-  do { \
-    if (!(EXPR)) \
-      onFailedAssertion(MSG, __FILE__, __FUNCTION__, __LINE__); \
-  } while (0)
-
-#endif /* __OCL_ASSERT_HPP__ */
-
diff --git a/utests/utest_error.c b/utests/utest_error.c
deleted file mode 100644
index 4582a33..0000000
--- a/utests/utest_error.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* 
- * Copyright © 2012 Intel Corporation
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author: Benjamin Segovia <benjamin.segovia at intel.com>
- */
-
-#include "utest_error.h"
-#include "CL/cl.h"
-
-const char *err_msg[] = {
-  [-CL_SUCCESS] = "CL_SUCCESS",
-  [-CL_DEVICE_NOT_FOUND] = "CL_DEVICE_NOT_FOUND",
-  [-CL_DEVICE_NOT_AVAILABLE] = "CL_DEVICE_NOT_AVAILABLE",
-  [-CL_COMPILER_NOT_AVAILABLE] = "CL_COMPILER_NOT_AVAILABLE",
-  [-CL_MEM_OBJECT_ALLOCATION_FAILURE] = "CL_MEM_OBJECT_ALLOCATION_FAILURE",
-  [-CL_OUT_OF_RESOURCES] = "CL_OUT_OF_RESOURCES",
-  [-CL_OUT_OF_HOST_MEMORY] = "CL_OUT_OF_HOST_MEMORY",
-  [-CL_PROFILING_INFO_NOT_AVAILABLE] = "CL_PROFILING_INFO_NOT_AVAILABLE",
-  [-CL_MEM_COPY_OVERLAP] = "CL_MEM_COPY_OVERLAP",
-  [-CL_IMAGE_FORMAT_MISMATCH] = "CL_IMAGE_FORMAT_MISMATCH",
-  [-CL_IMAGE_FORMAT_NOT_SUPPORTED] = "CL_IMAGE_FORMAT_NOT_SUPPORTED",
-  [-CL_BUILD_PROGRAM_FAILURE] = "CL_BUILD_PROGRAM_FAILURE",
-  [-CL_MAP_FAILURE] = "CL_MAP_FAILURE",
-  [-CL_MISALIGNED_SUB_BUFFER_OFFSET] = "CL_MISALIGNED_SUB_BUFFER_OFFSET",
-  [-CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST] = "CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST",
-  [-CL_INVALID_VALUE] = "CL_INVALID_VALUE",
-  [-CL_INVALID_DEVICE_TYPE] = "CL_INVALID_DEVICE_TYPE",
-  [-CL_INVALID_PLATFORM] = "CL_INVALID_PLATFORM",
-  [-CL_INVALID_DEVICE] = "CL_INVALID_DEVICE",
-  [-CL_INVALID_CONTEXT] = "CL_INVALID_CONTEXT",
-  [-CL_INVALID_QUEUE_PROPERTIES] = "CL_INVALID_QUEUE_PROPERTIES",
-  [-CL_INVALID_COMMAND_QUEUE] = "CL_INVALID_COMMAND_QUEUE",
-  [-CL_INVALID_HOST_PTR] = "CL_INVALID_HOST_PTR",
-  [-CL_INVALID_MEM_OBJECT] = "CL_INVALID_MEM_OBJECT",
-  [-CL_INVALID_IMAGE_FORMAT_DESCRIPTOR] = "CL_INVALID_IMAGE_FORMAT_DESCRIPTOR",
-  [-CL_INVALID_IMAGE_SIZE] = "CL_INVALID_IMAGE_SIZE",
-  [-CL_INVALID_SAMPLER] = "CL_INVALID_SAMPLER",
-  [-CL_INVALID_BINARY] = "CL_INVALID_BINARY",
-  [-CL_INVALID_BUILD_OPTIONS] = "CL_INVALID_BUILD_OPTIONS",
-  [-CL_INVALID_PROGRAM] = "CL_INVALID_PROGRAM",
-  [-CL_INVALID_PROGRAM_EXECUTABLE] = "CL_INVALID_PROGRAM_EXECUTABLE",
-  [-CL_INVALID_KERNEL_NAME] = "CL_INVALID_KERNEL_NAME",
-  [-CL_INVALID_KERNEL_DEFINITION] = "CL_INVALID_KERNEL_DEFINITION",
-  [-CL_INVALID_KERNEL] = "CL_INVALID_KERNEL",
-  [-CL_INVALID_ARG_INDEX] = "CL_INVALID_ARG_INDEX",
-  [-CL_INVALID_ARG_VALUE] = "CL_INVALID_ARG_VALUE",
-  [-CL_INVALID_ARG_SIZE] = "CL_INVALID_ARG_SIZE",
-  [-CL_INVALID_KERNEL_ARGS] = "CL_INVALID_KERNEL_ARGS",
-  [-CL_INVALID_WORK_DIMENSION] = "CL_INVALID_WORK_DIMENSION",
-  [-CL_INVALID_WORK_GROUP_SIZE] = "CL_INVALID_WORK_GROUP_SIZE",
-  [-CL_INVALID_WORK_ITEM_SIZE] = "CL_INVALID_WORK_ITEM_SIZE",
-  [-CL_INVALID_GLOBAL_OFFSET] = "CL_INVALID_GLOBAL_OFFSET",
-  [-CL_INVALID_EVENT_WAIT_LIST] = "CL_INVALID_EVENT_WAIT_LIST",
-  [-CL_INVALID_EVENT] = "CL_INVALID_EVENT",
-  [-CL_INVALID_OPERATION] = "CL_INVALID_OPERATION",
-  [-CL_INVALID_GL_OBJECT] = "CL_INVALID_GL_OBJECT",
-  [-CL_INVALID_BUFFER_SIZE] = "CL_INVALID_BUFFER_SIZE",
-  [-CL_INVALID_MIP_LEVEL] = "CL_INVALID_MIP_LEVEL",
-  [-CL_INVALID_GLOBAL_WORK_SIZE] = "CL_INVALID_GLOBAL_WORK_SIZE",
-  [-CL_INVALID_PROPERTY] = "CL_INVALID_PROPERTY"
-};
-const size_t err_msg_n = sizeof(err_msg) / sizeof(err_msg[0]);
-
diff --git a/utests/utest_error.h b/utests/utest_error.h
deleted file mode 100644
index 2da29b0..0000000
--- a/utests/utest_error.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* 
- * Copyright © 2012 Intel Corporation
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author: Benjamin Segovia <benjamin.segovia at intel.com>
- */
-
-#ifndef __UTEST_ERROR_H__
-#define __UTEST_ERROR_H__
-#include <stdlib.h>
-extern const char *err_msg[];
-extern const size_t err_msg_n;
-#endif /* __UTEST_ERROR_H__ */
-
diff --git a/utests/utest_exception.hpp b/utests/utest_exception.hpp
deleted file mode 100644
index e19141f..0000000
--- a/utests/utest_exception.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/* 
- * Copyright © 2012 Intel Corporation
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author: Benjamin Segovia <benjamin.segovia at intel.com>
- */
-
-/**
- * \file exception.hpp
- *
- * \author Benjamin Segovia <benjamin.segovia at intel.com>
- */
-#ifndef __UTEST_EXCEPTION_HPP__
-#define __UTEST_EXCEPTION_HPP__
-
-#include <string>
-#include <exception>
-
-/*! Exception are only used while using unit tests */
-class Exception : public std::exception
-{
-public:
-  Exception(const std::string &msg) throw() : msg(msg) {}
-  Exception(const Exception &other) throw() : msg(other.msg) {}
-  ~Exception(void) throw() {}
-  Exception &operator= (const Exception &other) throw() {
-    this->msg = other.msg;
-    return *this;
-  }
-  const char *what(void) const throw() { return msg.c_str(); }
-private:
-  std::string msg; //!< String message
-};
-
-#endif /* __UTEST_EXCEPTION_HPP__ */
-
diff --git a/utests/utest_file_map.cpp b/utests/utest_file_map.cpp
deleted file mode 100644
index 55b7771..0000000
--- a/utests/utest_file_map.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-/* 
- * Copyright © 2012 Intel Corporation
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author: Benjamin Segovia <benjamin.segovia at intel.com>
- */
-
-#include "utest_file_map.hpp"
-#include "CL/cl.h"
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <assert.h>
-#include <string.h>
-#include <stdio.h>
-
-int
-cl_file_map_init(cl_file_map_t *fm)
-{
-  assert(fm);
-  memset(fm,0,sizeof(*fm));
-  return CL_SUCCESS;
-}
-
-void
-cl_file_map_destroy(cl_file_map_t *fm)
-{
-  if (fm->mapped) {
-    munmap(fm->start, fm->size);
-    fm->start = fm->stop = 0;
-    fm->size = 0;
-    fm->mapped = CL_FALSE;
-  }
-  if(fm->fd) {
-    close(fm->fd);
-    fm->fd = 0;
-  }
-  free(fm->name);
-  memset(fm,0,sizeof(*fm));
-}
-
-void
-cl_file_map_delete(cl_file_map_t *fm)
-{
-  if (fm == NULL)
-    return;
-  cl_file_map_destroy(fm);
-  free(fm);
-}
-
-cl_file_map_t*
-cl_file_map_new(void)
-{
-  cl_file_map_t *fm = NULL;
-
-  if ((fm = (cl_file_map_t *) calloc(1, sizeof(cl_file_map_t))) == NULL)
-    goto error;
-  if (cl_file_map_init(fm) != CL_SUCCESS)
-    goto error;
-
-exit:
-  return fm;
-error:
-  cl_file_map_delete(fm);
-  fm = NULL;
-  goto exit;
-}
-
-int
-cl_file_map_open(cl_file_map_t *fm, const char *name)
-{
-  int err = CL_FILE_MAP_SUCCESS;
-
-  /* Open the file */
-  fm->fd = open(name, O_RDONLY);
-  if(fm->fd < 0) {
-    err = CL_FILE_MAP_FILE_NOT_FOUND;
-    goto error;
-  }
-  if ((fm->name = (char*) calloc(strlen(name) + 1, sizeof(char))) == NULL)
-    goto error;
-  sprintf(fm->name, "%s", name);
-
-  /* Map it */
-  fm->size = lseek(fm->fd, 0, SEEK_END);
-  lseek(fm->fd, 0, SEEK_SET);
-  fm->start = mmap(0, fm->size, PROT_READ, MAP_SHARED, fm->fd, 0);
-  if(fm->start == NULL) {
-    err = CL_FILE_MAP_FAILED_TO_MMAP;
-    goto error;
-  }
-
-  fm->stop = ((char *) fm->start) + fm->size;
-  fm->mapped = CL_TRUE;
-
-exit:
-  return err;
-error:
-  cl_file_map_destroy(fm);
-  goto exit;
-}
-
diff --git a/utests/utest_file_map.hpp b/utests/utest_file_map.hpp
deleted file mode 100644
index 83d79ea..0000000
--- a/utests/utest_file_map.hpp
+++ /dev/null
@@ -1,84 +0,0 @@
-/* 
- * Copyright © 2012 Intel Corporation
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author: Benjamin Segovia <benjamin.segovia at intel.com>
- */
-
-/**
- * \file assert.hpp
- *
- * \author Benjamin Segovia <benjamin.segovia at intel.com>
- */
-
-#ifndef __UTEST_FILE_MAP_HPP__
-#define __UTEST_FILE_MAP_HPP__
-
-#include "CL/cl.h"
-#include <cstdlib>
-
-/* Map a file into memory for direct / cached / simple accesses */
-typedef struct cl_file_map {
-  void *start, *stop; /* First character and last one */
-  size_t size;        /* Total size of the file */
-  int fd;             /* Posix file descriptor */
-  cl_bool mapped;     /* Indicate if a file was mapped or not */
-  char *name;         /* File itself */
-} cl_file_map_t;
-
-/* Report information about an open temptative */
-enum {
-  CL_FILE_MAP_SUCCESS         = 0,
-  CL_FILE_MAP_FILE_NOT_FOUND  = 1,
-  CL_FILE_MAP_FAILED_TO_MMAP  = 2
-};
-
-/* Allocate and Initialize a file mapper (but do not map any file */
-extern cl_file_map_t *cl_file_map_new(void);
-
-/* Initialize a file mapper (but do not map any file */
-extern int cl_file_map_init(cl_file_map_t *fm);
-
-/* Destroy but do not deallocate a file map */
-extern void cl_file_map_destroy(cl_file_map_t *fm);
-
-/* Destroy and free it */
-extern void cl_file_map_delete(cl_file_map_t *fm);
-
-/* Open a file and returns the error code */
-extern int cl_file_map_open(cl_file_map_t *fm, const char *name);
-
-static inline cl_bool
-cl_file_map_is_mapped(const cl_file_map_t *fm) {
-  return fm->mapped;
-}
-
-static inline const char*
-cl_file_map_begin(const cl_file_map_t *fm) {
-  return (const char*) fm->start;
-}
-
-static inline const char*
-cl_file_map_end(const cl_file_map_t *fm) {
-  return (const char*) fm->stop;
-}
-
-static inline size_t
-cl_file_map_size(const cl_file_map_t *fm) {
-  return fm->size;
-}
-
-#endif /* __UTEST_FILE_MAP_HPP__ */
-
diff --git a/utests/utest_generator.py b/utests/utest_generator.py
deleted file mode 100644
index 94900d9..0000000
--- a/utests/utest_generator.py
+++ /dev/null
@@ -1,377 +0,0 @@
-#!/usr/bin/python
-import os,sys,re
-
-FLT_MAX_POSI='0x1.fffffep127f'
-FLT_MIN_NEGA='-0x1.fffffep127f'
-FLT_MIN_POSI='0x1.0p-126f'
-FLT_MAX_NEGA='-0x1.0p-126f'
-
-paraTypeList={'float':'%e','int':'%d','double':'%lf','uint':'%d','string':'%s'}
-
-
-def ulpUnit(ulpSize):
-  return re.findall(r"([a-zA-Z_]+)",ulpSize)[0]
-
-def ulpNum(ulpSize):
-  return re.findall(r"([0-9]+)",ulpSize)[0]
-
-def udebug(ulpSize,returnType):
-  #ulpUnit=re.findall(r"([a-zA-Z_]+)",ulpSize)[0]
-  #ulpNum=re.findall(r"([0-9]+)",ulpSize)[0]
-  text='''
-    static const char* INFORNAN;
-    static %s ULPSIZE;
-    
-    if (isinf(cpu_data[index])){
-      INFORNAN="INF";
-    }
-    else if (isnan(cpu_data[index])){
-      INFORNAN="NAN";
-    }
-    else{
-      ULPSIZE=cl_%s(cpu_data[index]) * %s;
-    }
-
-#if udebug 
-    if (isinf(cpu_data[index])){ 
-      if (isinf(gpu_data[index]))
-        printf("%s expect:%s\\n", log, INFORNAN);
-      else
-        printf_c("%s expect:%s\\n", log, INFORNAN);
-      }
-    else if (isnan(cpu_data[index])){
-      if (isnan(gpu_data[index]))
-        printf("%s expect:%s\\n", log, INFORNAN);
-      else
-        printf_c("%s expect:%s\\n", log, INFORNAN);
-      }
-    else if (diff <= ULPSIZE){
-      printf("%s expect:%s\\n", log, ULPSIZE);
-      }
-    else
-      printf_c("%s expect:%s\\n", log, ULPSIZE);
-#else
-    if (isinf(cpu_data[index])){
-      sprintf(log, "%s expect:%s\\n", log, INFORNAN);
-      OCL_ASSERTM(isinf(gpu_data[index]),log);
-      }
-    else if (isnan(cpu_data[index])){
-      sprintf(log, "%s expect:%s\\n", log, INFORNAN);
-      OCL_ASSERTM(isnan(gpu_data[index]),log);
-      }
-    else{
-      sprintf(log, "%s expect:%s\\n", log, ULPSIZE);
-      OCL_ASSERTM(fabs(gpu_data[index]-cpu_data[index]) <= ULPSIZE, log);
-      }
-#endif
-  }
-}\n'''%(returnType,\
-        ulpUnit(ulpSize),ulpNum(ulpSize),\
-        paraTypeList['string'],paraTypeList['string'],\
-        paraTypeList['string'],paraTypeList['string'],\
-        paraTypeList['string'],paraTypeList['string'],\
-        paraTypeList['string'],paraTypeList['string'],\
-        paraTypeList['string'],paraTypeList['%s'%(returnType)],\
-        paraTypeList['string'],paraTypeList['%s'%(returnType)],\
-        paraTypeList['string'],paraTypeList['string'],\
-        paraTypeList['string'],paraTypeList['string'],\
-        paraTypeList['string'],paraTypeList['%s'%(returnType)])
-
-  return text
-
-def gene2ValuesLoop(values1,values2,inputValues):
-  values2=values2+inputValues*len(inputValues)
-
-  for i in inputValues:
-    for j in range(0,len(inputValues)):
-      values1 += [i]
-
-  return values1,values2
-
-def gene3ValuesLoop(values1,values2,values3,inputValues):
-  for i in inputValues:
-    for j in range(0,len(inputValues)):
-      for k in range(0,len(inputValues)):
-        values1 += [i]
-
-  for i in inputValues:
-    for j in inputValues:
-      for k in range(0,len(inputValues)):
-        values2 += [j]
-
-  values3=inputValues*(len(inputValues)**2)
-  return values1,values2,values3
-
-class func:
-  """ This class will define all needed instance attribute in fundation a c programing file. """
-
-  def __init__(self,name,cpuFuncName,inputType,outputType,values,ulp, cpu_func=''):
-    self.funcName = name
-    self.cpuFuncName = cpuFuncName
-    self.fileName = 'builtin_'+name
-    self.inputtype = inputType
-    self.outputtype = outputType
-    self.values = values
-    self.ulp = ulp
-    self.cpufunc=cpu_func
-    self.cpplines = []
-    
-#####cpp file required information:
-    self.Head='''/*
-This file is generated by utest_generator.py.
-Usually you need NOT modify this file manually.
-But when any bug occured, you can change the value of udebug from 0 to 1,
-which can print more values and information to assist debuging the issue.
-*/
-
-#include "utest_helper.hpp"
-#include <stdio.h>
-#include <math.h>
-#include <algorithm>
-
-#define udebug 0
-#define FLT_MAX 0x1.fffffep127f
-#define FLT_MIN 0x1.0p-126f
-#define INT_ULP 0
-
-#define printf_c(...) \\
-{\\
-  printf("\\033[1m\\033[40;31m");\\
-  printf( __VA_ARGS__ );\\
-  printf("\\033[0m");\\
-}
-'''
-    #########Execute class itself
-    self.geneProcess()
-
-#####Computer vector && argument type:
-  def argtype(self,paraN,index):
-    return re.findall(r"[a-zA-Z_]+",self.inputtype[paraN][index])[0]
-
-  def argvector(self,paraN,index):
-    vector=re.findall(r"[0-9]+",self.inputtype[paraN][index])
-    if vector:
-      vector=vector[0]
-    else:
-      vector=1
-    return vector
-
-  def returnVector(self,index):
-    returnVector=re.findall(r"[0-9]+",self.outputtype[index])
-    if returnVector:
-      returnVector=returnVector[0]
-    else:
-      returnVector=1
-    return returnVector
-
-  def retType(self,index):
-    return re.findall("[a-zA-Z_]+",self.outputtype[index])[0]
-
-  def inputNumFormat(self,paraN,index):
-    return paraTypeList['%s'%(self.argtype(paraN,index))]
-
-  def outputNumFormat(self,index):
-    return paraTypeList['%s'%(self.retType(index))]
-
-#####Cpu values analyse
-  def GenInputValues(self,index):
-    #namesuffix=self.inputtype[0][index]
-    for i in range(0,self.values.__len__()):
-      self.cpplines += [ "const %s input_data%d[] = {%s};" %(self.argtype(i,index),i+1,str(self.values[i]).strip('[]').replace('\'','')) ]
-    self.cpplines += [ "const int count_input = sizeof(input_data1) / sizeof(input_data1[0]);" ]
-    self.cpplines += [ "const int vector = %s;\n"%(self.argvector(self.inputtype.__len__()-1,index)) ]
-
-#####Cpu Function
-  def GenCpuCompilerMath(self,index):
-    #namesuffix=self.inputtype[0][index]
-    defline='static void cpu_compiler_math(%s *dst, '%(self.retType(index))
-    cpufunargs='('
-    funcline = ['{']
-    vectorargs=[]
-
-    if (self.returnVector(index) == 1 and self.argvector(0,index) != 1):
-      for i in range(0,self.values.__len__()):
-        defline += 'const %s *src%d'%(self.argtype(i,index),i+1)
-        defline += ( i == self.values.__len__()-1 ) and ')' or ','
-        vectorargs.append('(')
-      for i in range(0,self.values.__len__()):
-        for j in range(0,self.vector):
-          vectorargs += "x%d%d"%(i+1,j+1)
-          vectorargs += ( j == self.vector-1 ) and ');' or ','
-          funcline += ["  const %s x%d%d = *(src%d+%d);"%(self.argtype(i,index),i+1,j+1,i+1,j)]
-
-      return 0
-
-    for i in range(0,self.values.__len__()):
-      defline += 'const %s *src%d'%(self.argtype(i,index),i+1)
-      defline += ( i == self.values.__len__()-1 ) and ')' or ','
-      cpufunargs += "x%d"%(i+1)
-      cpufunargs += ( i == self.values.__len__()-1 ) and ');' or ','
-      funcline += ["  const %s x%d = *src%d;"%(self.argtype(i,index),i+1,i+1)]
-
-    funcline += [ "  dst[0] = %s%s"%(self.cpuFuncName, cpufunargs) ]
-    funcline += [ '}'] 
-
-    funcline = [defline] + funcline
-
-    self.cpplines += funcline
-#    self.writeCPP( '\n'.join(funcline), 'a', namesuffix)
-
-  def writeCPP(self,content,authority,namesuffix):
-    file_object = open("generated/%s_%s.cpp"%(self.fileName,namesuffix),authority)
-    file_object.writelines(content)
-    file_object.close()
-
-  def writeCL(self,content,authority,namesuffix):
-    file_object = open(os.getcwd()+"/../kernels/%s_%s.cl"%(self.fileName,namesuffix),authority)
-    file_object.writelines(content)
-    file_object.close()
-
-  def nameForCmake(self,content,namesuffix):
-    print("generated/%s_%s.cpp"%(self.fileName,namesuffix)),
-
-  def utestFunc(self,index):
-    funcLines=[]
-    namesuffix=self.inputtype[0][index]
-    funcline=[]
-    funchead='''
-static void %s_%s(void)
-{
-  int index;
-  %s gpu_data[count_input] = {0}, cpu_data[count_input] = {0}, diff=0.0;
-  char log[1024] = {0};
-
-  OCL_CREATE_KERNEL(\"%s_%s\");
-  OCL_CREATE_BUFFER(buf[0], CL_MEM_READ_WRITE, count_input * sizeof(%s), NULL); 
-
-  globals[0] = count_input;
-  locals[0] = 1;
- '''%(self.fileName,namesuffix,\
-     self.retType(index),\
-     self.fileName, namesuffix,\
-     self.retType(index))
-
-    funcline += [funchead]
-    for i in range(1,self.values.__len__()+1): 
-      funcline += ["  OCL_CREATE_BUFFER(buf[%d], CL_MEM_READ_WRITE, count_input * sizeof(%s), NULL);"%(i,self.argtype(i-1,index))]
-      funcline += ["  clEnqueueWriteBuffer( queue, buf[%d], CL_TRUE, 0, count_input * sizeof(%s), input_data%d, 0, NULL, NULL);"%(i,self.argtype(i-1,index),i)]
-
-    funcline += ["  OCL_CREATE_BUFFER(buf[%d], CL_MEM_READ_WRITE, sizeof(int), NULL);"%(self.inputtype.__len__()+1)]
-    funcline += ["  clEnqueueWriteBuffer( queue, buf[%d], CL_TRUE, 0, sizeof(int), &vector, 0, NULL, NULL);"%(self.inputtype.__len__()+1)]
-
-	#0=output 1=input1 2=input2 ... len+2=output
-    for i in range(0,self.values.__len__()+2): 
-      funcline += ["  OCL_SET_ARG(%d, sizeof(cl_mem), &buf[%d]);"%(i,i)]
-
-    funcrun='''
-  // Run the kernel:
-  OCL_NDRANGE( 1 );
-  clEnqueueReadBuffer( queue, buf[0], CL_TRUE, 0, sizeof(%s) * count_input, gpu_data, 0, NULL, NULL);
-'''%(self.inputtype.__len__()+1)
-    funcline += [ funcrun ]
-
-    funcsprintfa='    sprintf(log, \"'
-    funcsprintfb=''
-    if (self.returnVector(index) == 1 and self.argvector(0,index) != 1):
-      funccompare='''
-  for (index = 0; index < count_input/vector; index++)
-  {
-    cpu_compiler_math( cpu_data + index, '''
-    else:
-      funccompare='''
-  for (index = 0; index < count_input; index++)
-  {
-    cpu_compiler_math( cpu_data + index,'''
-
-    for i in range(0,self.values.__len__()):
-      funccompare += " input_data%d + index"%(i+1)
-      funccompare += (self.values.__len__() - 1 == i) and ');' or ','
-
-      funcsprintfa += "input_data%d:"%(i+1)
-      funcsprintfa += "%s "%(self.inputNumFormat(i,index))
-      funcsprintfb += " input_data%d[index],"%(i+1)
-
-    funcline += [ funccompare ]
-
-    funcsprintfa += " -> gpu:%s  cpu:%s diff:%s\","%(self.outputNumFormat(index),self.outputNumFormat(index),self.outputNumFormat(index))#,self.outputNumFormat(index))
-    funcsprintfb += " gpu_data[index], cpu_data[index], diff);"#%(ulpUnit(self.ulp),ulpNum(self.ulp))
-
-    #funcdiff = "    diff = fabs((gpu_data[index]-cpu_data[index])"
-    #funcdiff += (self.retType(index) == "int") and ');' or '/(cpu_data[index]>1?cpu_data[index]:1));'
-    valuejudge = "    if (std::fpclassify(gpu_data[index]) == FP_SUBNORMAL){ gpu_data[index] = 0; }\n"
-    valuejudge += "    if (std::fpclassify(cpu_data[index]) == FP_SUBNORMAL){ cpu_data[index] = 0; }\n"
-    funcdiff = "    diff = fabs((gpu_data[index]-cpu_data[index]));"
-    funcline += [ valuejudge ]
-    funcline += [ funcdiff ]
-    funcline += [ funcsprintfa + funcsprintfb ]
-
-    self.cpplines += funcline
-
-    self.cpplines += [ udebug(self.ulp,self.retType(index)) ]
-    self.cpplines += [ "MAKE_UTEST_FROM_FUNCTION(%s_%s)"%(self.fileName,namesuffix) ]
-
-  def genCL(self,index):
-    namesuffix=self.inputtype[0][index]
-    clLine = []
-    clhead = '__kernel void %s_%s(__global %s *dst, '%(self.fileName,namesuffix,self.retType(index))
-    clvalueDef=''
-    clcomputer=''
-    tmp=''
-
-    for i in range(0,self.values.__len__()):
-      clhead += ' __global %s *src%d,'%(self.argtype(i,index),i+1)
-      clvalueDef +=   '  %s x%d = (%s) ('%(self.inputtype[i][index],i+1,self.inputtype[i][index])
-      tmp = 'src%d[i * (*vector) + '%(i+1)
-      for j in range(0,int(self.argvector(i,index))):
-        clvalueDef += tmp + ((int(self.argvector(i-1,index)) == j+1 ) and '%d]);\n'%(j) or '%d],'%(j))
-      clcomputer += (self.values.__len__() == i+1) and 'x%d);'%(i+1) or 'x%d,'%(i+1)
-      
-    clhead += ' __global int *vector) {\n'
-    clhead += '  int i = get_global_id(0);'
-    clLine += [ clhead ]
-    clLine += [ clvalueDef ]
-    clLine += [ '  %s ret;'%(self.outputtype[index]) ]
-    clLine += [ '  ret = %s('%(self.funcName) + clcomputer ] 
-
-    if (int(self.returnVector(index)) == 1):
-      clLine += [ '  dst[i] = ret;' ]
-    else:
-      for i in range(0,int(self.returnVector(index))):
-        clLine += [ '  dst[i * (*vector) + %d] = ret[%d];'%(i,i) ]
-    clLine += [ '};' ]
-
-    self.writeCL('\n'.join(clLine),'w',namesuffix)
-  
-  def geneProcess(self):
-    for i in range(0,self.inputtype[0].__len__()):
-##########Write Cpp file          
-      namesuffix=self.inputtype[0][i]
-      self.cpplines = []
-      #The head:
-      self.cpplines += [self.Head]
-
-      #Parameters:
-      self.GenInputValues(i)
-
-      #cpu function generator:
-      self.cpplines += [self.cpufunc]
-
-      #Cpu function:
-      self.GenCpuCompilerMath(i)
-
-      #utest function
-      self.utestFunc(i)
-
-      #kernel cl
-      self.genCL(i)
-
-      #CMakelists.txt
-      self.nameForCmake(self.fileName,namesuffix)
-
-      self.writeCPP( '\n'.join(self.cpplines) ,'w',namesuffix)
-#########End
-
-#def main():
-#
-#if __name__ == "__main__":
-#  main()
diff --git a/utests/utest_helper.cpp b/utests/utest_helper.cpp
deleted file mode 100644
index 162c47b..0000000
--- a/utests/utest_helper.cpp
+++ /dev/null
@@ -1,667 +0,0 @@
-/* 
- * Copyright © 2012 Intel Corporation
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author: Benjamin Segovia <benjamin.segovia at intel.com>
- */
-
-#include "utest_file_map.hpp"
-#include "utest_helper.hpp"
-#include "utest_error.h"
-#include "CL/cl.h"
-#include "CL/cl_intel.h"
-
-#include <cstdio>
-#include <cstdint>
-#include <cstring>
-#include <cassert>
-#include <cmath>
-
-#define FATAL(...) \
-do { \
-  fprintf(stderr, "error: "); \
-  fprintf(stderr, __VA_ARGS__); \
-  fprintf(stderr, "\n");\
-  assert(0); \
-  exit(-1); \
-} while (0)
-
-#define FATAL_IF(COND, ...) \
-do { \
-  if (COND) FATAL(__VA_ARGS__); \
-} while (0)
-
-cl_platform_id platform = NULL;
-cl_device_id device = NULL;
-cl_context ctx = NULL;
-cl_program program = NULL;
-cl_kernel kernel = NULL;
-cl_command_queue queue = NULL;
-cl_mem buf[MAX_BUFFER_N] = {};
-void *buf_data[MAX_BUFFER_N] = {};
-size_t globals[3] = {};
-size_t locals[3] = {};
-
-#ifdef HAS_EGL
-Display    *xDisplay;
-EGLDisplay  eglDisplay;
-EGLContext  eglContext = NULL;
-EGLSurface  eglSurface;
-Window xWindow;
-
-void cl_ocl_destroy_egl_window() {
-    eglMakeCurrent(eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
-    eglDestroyContext(eglDisplay, eglContext);
-    eglDestroySurface(eglDisplay, eglSurface);
-    XDestroyWindow(xDisplay, xWindow);
-    XCloseDisplay(xDisplay);
-}
-
-bool init_egl_window(int width, int height) {
-    XSetWindowAttributes swa;
-    Window      win, root;
-    EGLint attr[] = {       // some attributes to set up our egl-interface
-    EGL_BUFFER_SIZE, 16,
-    EGL_RENDERABLE_TYPE,
-    EGL_OPENGL_BIT,
-    EGL_NONE
-    };
-    //// egl-contexts collect all state descriptions needed required for operation
-    EGLint ctxattr[] = {
-            #if 0
-            EGL_CONTEXT_CLIENT_VERSION, 2,
-            #endif
-            EGL_NONE
-    };
-
-    EGLConfig  ecfg;
-    EGLint     numConfig;
-
-    eglContext = EGL_NO_CONTEXT;
-    xDisplay = XOpenDisplay(NULL);
-    if (xDisplay == NULL) {
-      fprintf(stderr, "Failed to open DISPLAY.\n");
-      return false;
-    }
-    root = DefaultRootWindow(xDisplay);
-    swa.event_mask = ExposureMask | PointerMotionMask | KeyPressMask;
-
-    win = XCreateWindow(
-                    xDisplay, root, 0, 0, width, height, 0,
-                    CopyFromParent, InputOutput,
-                    CopyFromParent, CWEventMask,
-                    &swa);
-    xWindow = win;
-
-    ///////  the egl part  //////////////////////////////////////////////////////////////////
-    //  egl provides an interface to connect the graphics related functionality of openGL ES
-    //  with the windowing interface and functionality of the native operation system (X11
-    //  in our case.
-
-    eglDisplay  =  eglGetDisplay( (EGLNativeDisplayType) xDisplay );
-    if ( eglDisplay == EGL_NO_DISPLAY ) {
-            fprintf(stderr, "Got no EGL display.\n");
-            return false;
-    }
-    eglBindAPI(EGL_OPENGL_API);
-    int m,n;
-    if ( !eglInitialize( eglDisplay, &m, &n ) ) {
-      fprintf(stderr, "Unable to initialize EGL\n");
-      return false;
-    }
-    if ( !eglChooseConfig( eglDisplay, attr, &ecfg, 1, &numConfig ) ) {
-      fprintf(stderr, "Failed to choose config (eglError: %d)\n", eglGetError());
-      return false;
-    }
-    if ( numConfig != 1 ) {
-      fprintf(stderr, "Didn't get exactly one config, but %d", numConfig);
-      return false;
-    }
-    eglSurface = eglCreateWindowSurface ( eglDisplay, ecfg, win, NULL );
-    if ( eglSurface == EGL_NO_SURFACE ) {
-      fprintf(stderr, "Unable to create EGL surface (eglError: %d)\n", eglGetError());
-      return false;
-    }
-    eglContext = eglCreateContext ( eglDisplay, ecfg, EGL_NO_CONTEXT, ctxattr );
-    if ( eglContext == EGL_NO_CONTEXT ) {
-      fprintf(stderr, "Unable to create EGL context (eglError: %d)\n", eglGetError());
-      return false;
-    }
-    //// associate the egl-context with the egl-surface
-    eglMakeCurrent( eglDisplay, eglSurface, eglSurface, eglContext);
-
-    glClearColor(1.0, 1.0, 1.0, 1.0);
-    glClear(GL_COLOR_BUFFER_BIT);
-    glFinish();
-    eglSwapBuffers(eglDisplay, eglSurface);
-    return true;
-}
-#endif
-
-static const char*
-cl_test_channel_order_string(cl_channel_order order)
-{
-  switch(order) {
-#define DECL_ORDER(WHICH) case CL_##WHICH: return "CL_"#WHICH
-    DECL_ORDER(R);
-    DECL_ORDER(A);
-    DECL_ORDER(RG);
-    DECL_ORDER(RA);
-    DECL_ORDER(RGB);
-    DECL_ORDER(RGBA);
-    DECL_ORDER(BGRA);
-    DECL_ORDER(ARGB);
-    DECL_ORDER(INTENSITY);
-    DECL_ORDER(LUMINANCE);
-    DECL_ORDER(Rx);
-    DECL_ORDER(RGx);
-    DECL_ORDER(RGBx);
-#undef DECL_ORDER
-    default: return "Unsupported image channel order";
-  };
-}
-
-static const char*
-cl_test_channel_type_string(cl_channel_type type)
-{
-  switch(type) {
-#define DECL_TYPE(WHICH) case CL_##WHICH: return "CL_"#WHICH
-    DECL_TYPE(SNORM_INT8);
-    DECL_TYPE(SNORM_INT16);
-    DECL_TYPE(UNORM_INT8);
-    DECL_TYPE(UNORM_INT16);
-    DECL_TYPE(UNORM_SHORT_565);
-    DECL_TYPE(UNORM_SHORT_555);
-    DECL_TYPE(UNORM_INT_101010);
-    DECL_TYPE(SIGNED_INT8);
-    DECL_TYPE(SIGNED_INT16);
-    DECL_TYPE(SIGNED_INT32);
-    DECL_TYPE(UNSIGNED_INT8);
-    DECL_TYPE(UNSIGNED_INT16);
-    DECL_TYPE(UNSIGNED_INT32);
-    DECL_TYPE(HALF_FLOAT);
-    DECL_TYPE(FLOAT);
-#undef DECL_TYPE
-    default: return "Unsupported image channel type";
-  };
-}
-
-static void
-clpanic(const char *msg, int rval)
-{
-  printf("Failed: %s (%d)\n", msg, rval);
-  exit(-1);
-}
-
-char*
-cl_do_kiss_path(const char *file, cl_device_id device)
-{
-  cl_int ver;
-  const char *sub_path = NULL;
-  char *ker_path = NULL;
-  const char *kiss_path = getenv("OCL_KERNEL_PATH");
-  size_t sz = strlen(file);
-
-  if (device == NULL)
-    sub_path = "";
-  else {
-    if (clGetGenVersionIntel(device, &ver) != CL_SUCCESS)
-      clpanic("Unable to get Gen version", -1);
-    sub_path = "";
-  }
-
-  if (kiss_path == NULL)
-    clpanic("set OCL_KERNEL_PATH. This is where the kiss kernels are", -1);
-  sz += strlen(kiss_path) + strlen(sub_path) + 2; /* +1 for end of string, +1 for '/' */
-  if ((ker_path = (char*) malloc(sz)) == NULL)
-    clpanic("Allocation failed", -1);
-  sprintf(ker_path, "%s/%s%s", kiss_path, sub_path, file);
-  return ker_path;
-}
-
-int
-cl_kernel_init(const char *file_name, const char *kernel_name, int format, const char * build_opt)
-{
-  cl_file_map_t *fm = NULL;
-  char *ker_path = NULL;
-  cl_int status = CL_SUCCESS;
-  static const char *prevFileName = NULL;
-
-  /* Load the program and build it */
-  if (!program || (program && (!prevFileName || strcmp(prevFileName, file_name)))) {
-    if (program) clReleaseProgram(program);
-    ker_path = cl_do_kiss_path(file_name, device);
-    if (format == LLVM)
-      program = clCreateProgramWithLLVMIntel(ctx, 1, &device, ker_path, &status);
-    else if (format == SOURCE) {
-      cl_file_map_t *fm = cl_file_map_new();
-      FATAL_IF (cl_file_map_open(fm, ker_path) != CL_FILE_MAP_SUCCESS,
-                "Failed to open file \"%s\" with kernel \"%s\". Did you properly set OCL_KERNEL_PATH variable?",
-                file_name, kernel_name);
-      const char *src = cl_file_map_begin(fm);
-      const size_t sz = cl_file_map_size(fm);
-      program = clCreateProgramWithSource(ctx, 1, &src, &sz, &status);
-      cl_file_map_delete(fm);
-    } else
-      FATAL("Not able to create program from binary");
-
-    if (status != CL_SUCCESS) {
-      fprintf(stderr, "error calling clCreateProgramWithBinary\n");
-      goto error;
-    }
-    prevFileName = file_name;
-  }
-  /* OCL requires to build the program even if it is created from a binary */
-  OCL_CALL (clBuildProgram, program, 1, &device, build_opt, NULL, NULL);
-
-  /* Create a kernel from the program */
-  if (kernel)
-    clReleaseKernel(kernel);
-  kernel = clCreateKernel(program, kernel_name, &status);
-  if (status != CL_SUCCESS) {
-    fprintf(stderr, "error calling clCreateKernel\n");
-    goto error;
-  }
-
-exit:
-  free(ker_path);
-  cl_file_map_delete(fm);
-  return status;
-error:
-  prevFileName = NULL;
-  goto exit;
-}
-
-#define GET_PLATFORM_STR_INFO(LOWER_NAME, NAME) \
-  { \
-    size_t param_value_size; \
-    OCL_CALL (clGetPlatformInfo, platform, CL_PLATFORM_##NAME, 0, 0, &param_value_size); \
-    std::vector<char> param_value(param_value_size); \
-    OCL_CALL (clGetPlatformInfo, platform, CL_PLATFORM_##NAME, \
-              param_value_size, param_value.empty() ? NULL : &param_value.front(), \
-              &param_value_size); \
-    std::string str; \
-    if (!param_value.empty()) \
-      str = std::string(&param_value.front(), param_value_size-1); \
-    printf("platform_" #LOWER_NAME " \"%s\"\n", str.c_str()); \
-  }
-
-#include <cstring>
-#define GET_DEVICE_STR_INFO(LOWER_NAME, NAME) \
-    std::string LOWER_NAME ##Str; \
-    OCL_CALL (clGetDeviceInfo, device, CL_DEVICE_##NAME, 0, 0, &param_value_size); \
-    { \
-      std::vector<char> param_value(param_value_size); \
-      OCL_CALL (clGetDeviceInfo, device, CL_DEVICE_##NAME, \
-                param_value_size, param_value.empty() ? NULL : &param_value.front(), \
-                &param_value_size); \
-      if (!param_value.empty()) \
-        LOWER_NAME ##Str = std::string(&param_value.front(), param_value_size-1); \
-    } \
-    printf("device_" #LOWER_NAME " \"%s\"\n", LOWER_NAME ##Str.c_str());
-
-int
-cl_ocl_init(void)
-{
-  cl_int status = CL_SUCCESS;
-  cl_uint platform_n;
-  size_t i;
-#ifdef HAS_EGL
-  bool hasGLExt = false;
-#endif
-  cl_context_properties *props = NULL;
-
-  /* Get the platform number */
-  OCL_CALL (clGetPlatformIDs, 0, NULL, &platform_n);
-  printf("platform number %u\n", platform_n);
-  assert(platform_n >= 1);
-
-  /* Get a valid platform */
-  OCL_CALL (clGetPlatformIDs, 1, &platform, &platform_n);
-  GET_PLATFORM_STR_INFO(profile, PROFILE);
-  GET_PLATFORM_STR_INFO(name, NAME);
-  GET_PLATFORM_STR_INFO(vendor, VENDOR);
-  GET_PLATFORM_STR_INFO(version, VERSION);
-  GET_PLATFORM_STR_INFO(extensions, EXTENSIONS);
-
-  /* Get the device (only GPU device is supported right now) */
-  OCL_CALL (clGetDeviceIDs, platform, CL_DEVICE_TYPE_GPU, 1, &device, NULL);
-  {
-    size_t param_value_size;
-    GET_DEVICE_STR_INFO(profile, PROFILE);
-    GET_DEVICE_STR_INFO(name, NAME);
-    GET_DEVICE_STR_INFO(vendor, VENDOR);
-    GET_DEVICE_STR_INFO(version, VERSION);
-    GET_DEVICE_STR_INFO(extensions, EXTENSIONS);
-    GET_DEVICE_STR_INFO(opencl_c_version, OPENCL_C_VERSION);
-#ifdef HAS_EGL
-    if (std::strstr(extensionsStr.c_str(), "cl_khr_gl_sharing")) {
-      hasGLExt = true;
-    }
-#endif
-  }
-
-#ifdef HAS_EGL
-  if (hasGLExt) {
-    int i = 0;
-    props = new cl_context_properties[7];
-    props[i++] = CL_CONTEXT_PLATFORM;
-    props[i++] = (cl_context_properties)platform;
-    if (init_egl_window(EGL_WINDOW_WIDTH, EGL_WINDOW_HEIGHT)) {
-      props[i++] = CL_EGL_DISPLAY_KHR;
-      props[i++] = (cl_context_properties)eglGetCurrentDisplay();
-      props[i++] = CL_GL_CONTEXT_KHR;
-      props[i++] = (cl_context_properties)eglGetCurrentContext();
-    }
-    props[i++] = 0;
-  }
-#endif
-  /* Now create a context */
-  ctx = clCreateContext(props, 1, &device, NULL, NULL, &status);
-  if (status != CL_SUCCESS) {
-    fprintf(stderr, "error calling clCreateContext\n");
-    goto error;
-  }
-
-  /* All image types currently supported by the context */
-  cl_image_format fmt[256];
-  cl_uint fmt_n;
-  clGetSupportedImageFormats(ctx, 0, CL_MEM_OBJECT_IMAGE2D, 256, fmt, &fmt_n);
-  printf("%u image formats are supported\n", fmt_n);
-  for (i = 0; i < fmt_n; ++i)
-    printf("[%s %s]\n",
-        cl_test_channel_order_string(fmt[i].image_channel_order),
-        cl_test_channel_type_string(fmt[i].image_channel_data_type));
-
-  /* We are going to push NDRange kernels here */
-  queue = clCreateCommandQueue(ctx, device, 0, &status);
-  if (status != CL_SUCCESS) {
-    fprintf(stderr, "error calling clCreateCommandQueue\n");
-    goto error;
-  }
-
-error:
-  if (props)
-    delete props;
-  return status;
-}
-
-int
-cl_test_init(const char *file_name, const char *kernel_name, int format)
-{
-  cl_int status = CL_SUCCESS;
-
-  /* Initialize OCL */
-  if ((status = cl_ocl_init()) != CL_SUCCESS)
-    goto error;
-
-  /* Load the kernel */
-  if ((status = cl_kernel_init(file_name, kernel_name, format, NULL)) != CL_SUCCESS)
-    goto error;
-
-error:
-  return status;
-}
-
-void
-cl_kernel_destroy(bool needDestroyProgram)
-{
-  if (kernel) {
-    clReleaseKernel(kernel);
-    kernel = NULL;
-  }
-  if (needDestroyProgram && program) {
-    clReleaseProgram(program);
-    program = NULL;
-  }
-}
-
-void
-cl_ocl_destroy(void)
-{
-  clReleaseCommandQueue(queue);
-  clReleaseContext(ctx);
-#ifdef HAS_EGL
-  if (eglContext != NULL) {
-    cl_ocl_destroy_egl_window();
-    eglContext = NULL;
-  }
-#endif
-}
-
-void
-cl_test_destroy(void)
-{
-  cl_kernel_destroy();
-  cl_ocl_destroy();
-  printf("%i memory leaks\n", clReportUnfreedIntel());
-  assert(clReportUnfreedIntel() == 0);
-}
-
-void
-cl_buffer_destroy(void)
-{
-  int i;
-  for (i = 0; i < MAX_BUFFER_N; ++i) {
-    if (buf_data[i] != NULL) {
-      clUnmapBufferIntel(buf[i]);
-      buf_data[i] = NULL;
-    }
-    if (buf[i] != NULL) {
-      clReleaseMemObject(buf[i]);
-      buf[i] = NULL;
-    }
-  }
-}
-
-void
-cl_report_perf_counters(cl_mem perf)
-{
-  cl_int status = CL_SUCCESS;
-  uint32_t *start = NULL, *end = NULL;
-  uint32_t i;
-  if (perf == NULL)
-    return;
-  start = (uint32_t*) clMapBufferIntel(perf, &status);
-  assert(status == CL_SUCCESS && start != NULL);
-  end = start + 128;
-
-  printf("BEFORE\n");
-  for (i = 0; i < 6*8; ++i) {
-    if (i % 8 == 0) printf("\n");
-    printf("[%3u 0x%8x] ", i, start[i]);
-  }
-  printf("\n\n");
-
-  printf("AFTER\n");
-  for (i = 0; i < 6*8; ++i) {
-    if (i % 8 == 0) printf("\n");
-    printf("[%3u 0x%8x] ", i, end[i]);
-  }
-  printf("\n\n");
-
-  printf("DIFF\n");
-  for (i = 0; i < 6*8; ++i) {
-    if (i % 8 == 0) printf("\n");
-    printf("[%3u %8i] ", i, end[i] - start[i]);
-  }
-  printf("\n\n");
-
-  clUnmapBufferIntel(perf);
-}
-
-struct bmphdr {
-  //   2 bytes of magic here, "BM", total header size is 54 bytes!
-  int filesize;		//   4 total file size incl header
-  short as0, as1;		//   8 app specific
-  int bmpoffset;		//  12 ofset of bmp data 
-  int headerbytes;	//  16 bytes in header from this point (40 actually)
-  int width;		//  20 
-  int height;		//  24 
-  short nplanes;		//  26 no of color planes
-  short bpp;		//  28 bits/pixel
-  int compression;	//  32 BI_RGB = 0 = no compression
-  int sizeraw;		//  36 size of raw bmp file, excluding header, incl padding
-  int hres;		//  40 horz resolutions pixels/meter
-  int vres;		//  44
-  int npalcolors;		//  48 No of colors in palette
-  int nimportant;		//  52 No of important colors
-  // raw b, g, r data here, dword aligned per scan line
-};
-
-int *cl_read_bmp(const char *filename, int *width, int *height)
-{
-  struct bmphdr hdr;
-  char *bmppath = cl_do_kiss_path(filename, device);
-  FILE *fp = fopen(bmppath, "rb");
-  assert(fp);
-
-  char magic[2];
-  int ret;
-  ret = fread(&magic[0], 1, 2, fp);
-  assert(2 == ret);
-  assert(magic[0] == 'B' && magic[1] == 'M');
-
-  ret = fread(&hdr, sizeof(hdr), 1, fp);
-  assert(1 == ret);
-
-  assert(hdr.width > 0 && hdr.height > 0 && hdr.nplanes == 1 && hdr.compression == 0);
-
-  int *rgb32 = (int *) malloc(hdr.width * hdr.height * sizeof(int));
-  assert(rgb32);
-  int x, y;
-
-  int *dst = rgb32;
-  for (y = 0; y < hdr.height; y++) {
-    for (x = 0; x < hdr.width; x++) {
-      assert(!feof(fp));
-      int b = (getc(fp) & 0x0ff);
-      int g = (getc(fp) & 0x0ff);
-      int r = (getc(fp) & 0x0ff);
-      *dst++ = (r | (g << 8) | (b << 16) | 0xff000000);	/* abgr */
-    }
-    while (x & 3) {
-      getc(fp);
-      x++;
-    }		// each scanline padded to dword
-    // printf("read row %d\n", y);
-    // fflush(stdout);
-  }
-  fclose(fp);
-  *width = hdr.width;
-  *height = hdr.height;
-  free(bmppath);
-  return rgb32;
-}
-
-void cl_write_bmp(const int *data, int width, int height, const char *filename)
-{
-  int x, y;
-
-  FILE *fp = fopen(filename, "wb");
-  assert(fp);
-
-  char *raw = (char *) malloc(width * height * sizeof(int));	// at most
-  assert(raw);
-  char *p = raw;
-
-  for (y = 0; y < height; y++) {
-    for (x = 0; x < width; x++) {
-      int c = *data++;
-      *p++ = ((c >> 16) & 0xff);
-      *p++ = ((c >> 8) & 0xff);
-      *p++ = ((c >> 0) & 0xff);
-    }
-    while (x & 3) {
-      *p++ = 0;
-      x++;
-    } // pad to dword
-  }
-  int sizeraw = p - raw;
-  int scanline = (width * 3 + 3) & ~3;
-  assert(sizeraw == scanline * height);
-
-  struct bmphdr hdr;
-
-  hdr.filesize = scanline * height + sizeof(hdr) + 2;
-  hdr.as0 = 0;
-  hdr.as1 = 0;
-  hdr.bmpoffset = sizeof(hdr) + 2;
-  hdr.headerbytes = 40;
-  hdr.width = width;
-  hdr.height = height;
-  hdr.nplanes = 1;
-  hdr.bpp = 24;
-  hdr.compression = 0;
-  hdr.sizeraw = sizeraw;
-  hdr.hres = 0;		// 2834;
-  hdr.vres = 0;		// 2834;
-  hdr.npalcolors = 0;
-  hdr.nimportant = 0;
-
-  /* Now write bmp file */
-  char magic[2] = { 'B', 'M' };
-  fwrite(&magic[0], 1, 2, fp);
-  fwrite(&hdr, 1, sizeof(hdr), fp);
-  fwrite(raw, 1, hdr.sizeraw, fp);
-
-  fclose(fp);
-  free(raw);
-}
-
-static const float pixel_threshold = 0.05f;
-static const float max_error_ratio = 0.001f;
-
-int cl_check_image(const int *img, int w, int h, const char *bmp)
-{
-  int refw, refh;
-  int *ref = cl_read_bmp(bmp, &refw, &refh);
-  if (ref == NULL || refw != w || refh != h) return 0;
-  const int n = w*h;
-  int discrepancy = 0;
-  for (int i = 0; i < n; ++i) {
-    const float r = (float) (img[i] & 0xff);
-    const float g = (float) ((img[i] >> 8) & 0xff);
-    const float b = (float) ((img[i] >> 16) & 0xff);
-    const float rr = (float) (ref[i] & 0xff);
-    const float rg = (float) ((ref[i] >> 8) & 0xff);
-    const float rb = (float) ((ref[i] >> 16) & 0xff);
-    const float dr = fabs(r-rr) / (1.f/255.f + std::max(r,rr));
-    const float dg = fabs(g-rg) / (1.f/255.f + std::max(g,rg));
-    const float db = fabs(b-rb) / (1.f/255.f + std::max(b,rb));
-    const float err = sqrtf(dr*dr+dg*dg+db*db);
-    if (err > pixel_threshold) discrepancy++;
-  }
-  free(ref);
-  return (float(discrepancy) / float(n) > max_error_ratio) ? 0 : 1;
-}
-
-const float cl_FLT_ULP(float float_number)
-{
-  SF floatBin, ulpBin, ulpBinBase;
-  floatBin.f = float_number;
-
-  ulpBin.spliter.sign     = ulpBinBase.spliter.sign     = 0;
-  ulpBin.spliter.exponent = ulpBinBase.spliter.exponent = floatBin.spliter.exponent;
-  ulpBin.spliter.mantissa = 0x1;
-  ulpBinBase.spliter.mantissa = 0x0;
-  
-  return ulpBin.f - ulpBinBase.f;
-}
-
-const int cl_INT_ULP(int int_number)
-{
-  return 0;
-}
diff --git a/utests/utest_helper.hpp b/utests/utest_helper.hpp
deleted file mode 100644
index 0ebad7b..0000000
--- a/utests/utest_helper.hpp
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Copyright © 2012 Intel Corporation
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author: Benjamin Segovia <benjamin.segovia at intel.com>
- */
-
-/**
- * \file utest_helper.hpp
- *
- * \author Benjamin Segovia <benjamin.segovia at intel.com>
- */
-#ifndef __UTEST_HELPER_HPP__
-#define __UTEST_HELPER_HPP__
-
-#include "CL/cl.h"
-#include "CL/cl_intel.h"
-#include "utest.hpp"
-#include "utest_assert.hpp"
-#include "utest_error.h"
-#include <cassert>
-#include <cstdio>
-#include <cstdlib>
-
-#ifdef HAS_EGL
-#define EGL_WINDOW_WIDTH 256
-#define EGL_WINDOW_HEIGHT 256
-#include  <GL/gl.h>
-#include  <EGL/egl.h>
-#include  <EGL/eglext.h>
-#include <CL/cl_gl.h>
-
-extern EGLDisplay  eglDisplay;
-extern EGLContext  eglContext;
-extern EGLSurface  eglSurface;
-#endif
-
-#define OCL_THROW_ERROR(FN, STATUS) \
-  do { \
-    char msg[2048]; \
-    sprintf(msg, "error calling %s with error %s \n", #FN, err_msg[-STATUS]); \
-    OCL_ASSERTM(false, msg); \
-  } while (0)
-
-#define OCL_CALL(FN, ...) \
-  do { \
-    int status = FN(__VA_ARGS__); \
-    if (status != CL_SUCCESS) OCL_THROW_ERROR(FN, status); \
-  } while (0)
-
-#define OCL_CREATE_KERNEL(NAME) \
-  do { \
-    OCL_CALL (cl_kernel_init, NAME".cl", NAME, SOURCE, NULL); \
-  } while (0)
-
-#define OCL_DESTROY_KERNEL_KEEP_PROGRAM(KEEP_PROGRAM) \
-  do { \
-    cl_kernel_destroy(!(KEEP_PROGRAM)); \
-  } while(0)
-
-#define OCL_CREATE_KERNEL_FROM_FILE(FILE_NAME, KERNEL_NAME) \
-  do { \
-    OCL_CALL(cl_kernel_init, FILE_NAME".cl", KERNEL_NAME, SOURCE, NULL); \
-  } while (0)
-
-#define OCL_FLUSH() \
-  do { \
-    OCL_CALL(clFlush, queue); \
-  } while(0)
-
-#define OCL_FINISH() \
-  do { \
-    OCL_CALL(clFinish, queue); \
-  } while(0)
-
-#define OCL_CALL2(FN, RET, ...) \
-  do { \
-    cl_int status; \
-    RET = FN(__VA_ARGS__, &status);\
-    if (status != CL_SUCCESS) OCL_THROW_ERROR(FN, status); \
-  } while (0)
-
-#define OCL_CREATE_BUFFER(BUFFER, FLAGS, SIZE, DATA) \
-        OCL_CALL2(clCreateBuffer, BUFFER, ctx, FLAGS, SIZE, DATA)
-
-#define OCL_CREATE_USER_EVENT(EVENT) \
-    OCL_CALL2(clCreateUserEvent, EVENT, ctx)
-
-#define OCL_SET_USER_EVENT_STATUS(EVENT, STATUS) \
-    OCL_CALL(clSetUserEventStatus, EVENT, STATUS)
-
-#define OCL_CREATE_IMAGE(IMAGE, FLAGS, FORMAT, DESC, DATA) \
-    OCL_CALL2(clCreateImage, IMAGE, ctx, FLAGS, FORMAT, DESC, DATA)
-
-#define OCL_CREATE_IMAGE2D(IMAGE, FLAGS, FORMAT, WIDTH, HEIGHT, PITCH, DATA) \
-    OCL_CALL2(clCreateImage2D, IMAGE, ctx, FLAGS, FORMAT, WIDTH, HEIGHT, PITCH, DATA)
-
-#define OCL_CREATE_IMAGE3D(IMAGE, FLAGS, FORMAT, WIDTH, HEIGHT, DEPTH, RPITCH, SPITCH, DATA) \
-    OCL_CALL2(clCreateImage3D, IMAGE, ctx, FLAGS, FORMAT, WIDTH, HEIGHT, DEPTH, RPITCH, SPITCH, DATA)
-
-#define OCL_READ_IMAGE(IMAGE, ORIGIN, REGION, DATA) \
-    OCL_CALL(clEnqueueReadImage, queue, IMAGE, CL_TRUE, ORIGIN, REGION, 0, 0, DATA, 0, NULL, NULL)
-
-#define OCL_WRITE_IMAGE(IMAGE, ORIGIN, REGION, DATA) \
-    OCL_CALL(clEnqueueWriteImage, queue, IMAGE, CL_TRUE, ORIGIN, REGION, 0, 0, DATA, 0, NULL, NULL)
-
-#define OCL_CREATE_GL_IMAGE(IMAGE, FLAGS, TARGET, LEVEL, TEXTURE) \
-    OCL_CALL2(clCreateFromGLTexture, IMAGE, ctx, FLAGS, TARGET, LEVEL, TEXTURE)
-
-#define OCL_CREATE_GL_IMAGE2D(IMAGE, FLAGS, TARGET, LEVEL, TEXTURE) \
-    OCL_CALL2(clCreateFromGLTexture2D, IMAGE, ctx, FLAGS, TARGET, LEVEL, TEXTURE)
-
-#define OCL_CREATE_GL_IMAGE3D(IMAGE, FLAGS, TARGET, LEVEL, TEXTURE) \
-    OCL_CALL2(clCreateFromGLTexture3D, IMAGE, ctx, FLAGS, TARGET, LEVEL, TEXTURE)
-
-#define OCL_ENQUEUE_ACQUIRE_GL_OBJECTS(ID) \
-    OCL_CALL(clEnqueueAcquireGLObjects, queue, 1, &buf[ID], 0, 0, 0)
-
-#define OCL_SWAP_EGL_BUFFERS() \
-  eglSwapBuffers(eglDisplay, eglSurface);
-
-#define OCL_CREATE_SAMPLER(SAMPLER, ADDRESS_MODE, FILTER_MODE)          \
-    OCL_CALL2(clCreateSampler, SAMPLER, ctx, 0, ADDRESS_MODE, FILTER_MODE)
-
-#define OCL_MAP_BUFFER(ID) \
-    OCL_CALL2(clMapBufferIntel, buf_data[ID], buf[ID])
-
-#define OCL_UNMAP_BUFFER(ID) \
-  do { \
-    if (buf[ID] != NULL) { \
-      OCL_CALL (clUnmapBufferIntel, buf[ID]); \
-      buf_data[ID] = NULL; \
-    } \
-  } while (0)
-
-#define OCL_MAP_BUFFER_GTT(ID) \
-    OCL_CALL2(clMapBufferGTTIntel, buf_data[ID], buf[ID])
-
-#define OCL_UNMAP_BUFFER_GTT(ID) \
-  do { \
-    if (buf[ID] != NULL) { \
-      OCL_CALL (clUnmapBufferGTTIntel, buf[ID]); \
-      buf_data[ID] = NULL; \
-    } \
-  } while (0)
-
-#define OCL_NDRANGE(DIM_N) \
-    OCL_CALL (clEnqueueNDRangeKernel, queue, kernel, DIM_N, NULL, globals, locals, 0, NULL, NULL)
-
-#define OCL_SET_ARG(ID, SIZE, ARG) \
-    OCL_CALL (clSetKernelArg, kernel, ID, SIZE, ARG)
-
-#define OCL_CHECK_IMAGE(DATA, W, H, FILENAME) \
-  if (cl_check_image(DATA, W, H, FILENAME) == 0) \
-    OCL_ASSERTM(false, "image mismatch")
-
-enum { MAX_BUFFER_N = 16 };
-extern cl_platform_id platform;
-extern cl_device_id device;
-extern cl_context ctx;
-extern cl_program program;
-extern cl_kernel kernel;
-extern cl_command_queue queue;
-extern cl_mem buf[MAX_BUFFER_N];
-extern void* buf_data[MAX_BUFFER_N];
-extern size_t globals[3];
-extern size_t locals[3];
-
-enum {
-  SOURCE = 0,
-  LLVM = 1,
-  BIN = 2
-};
-
-/* The SF is float type spliter*/
-typedef struct
-{
-  unsigned int mantissa:23;
-  unsigned int exponent:8;
-  unsigned int sign:1;
-} FLOAT;
-
-typedef union
-{
-  float f;
-  unsigned int i;
-  FLOAT spliter;
-} SF;
-
-/* Init OpenCL */
-extern int cl_ocl_init(void);
-
-/* Init program and kernel for the test */
-extern int cl_kernel_init(const char *file_name,
-                const char *kernel_name, int format, const char * build_opt);
-
-/* Get the file path */
-extern char* cl_do_kiss_path(const char *file, cl_device_id device);
-
-/* init the bunch of global varaibles here */
-extern int cl_test_init(const char *file_name, const char *kernel_name, int format);
-
-/* Unmap and release all the created buffers */
-extern void cl_buffer_destroy(void);
-
-/* Release OCL queue, context and device */
-extern void cl_ocl_destroy(void);
-
-/* Release kernel and program */
-extern void cl_kernel_destroy(bool needDestroyProgram = true);
-
-/* Release everything allocated in cl_test_init */
-extern void cl_test_destroy(void);
-
-/* Nicely output the performance counters */
-extern void cl_report_perf_counters(cl_mem perf);
-
-/* Read a bmp from file */
-extern int *cl_read_bmp(const char *filename, int *width, int *height);
-
-/* Write a bmp to a file */
-extern void cl_write_bmp(const int *data, int width, int height, const char *filename);
-
-/* Check data from img against bmp file located at "bmp" */
-extern int cl_check_image(const int *img, int w, int h, const char *bmp);
-
-/* Calculator ULP of each FLOAT value */
-extern const float cl_FLT_ULP(float float_number);
-
-/* Calculator ULP of each INT value */
-extern const int cl_INT_ULP(int int_number);
-
-#endif /* __UTEST_HELPER_HPP__ */
-
diff --git a/utests/utest_math_gen.py b/utests/utest_math_gen.py
deleted file mode 100755
index 5a015ad..0000000
--- a/utests/utest_math_gen.py
+++ /dev/null
@@ -1,546 +0,0 @@
-#!/usr/bin/python
-from utest_generator import *
-import os,sys
-
-#base_input_values = [80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0,6,-6,1500.24,-1500.24]
-#extend_input_values = [FLT_MAX_POSI,FLT_MIN_NEGA,FLT_MIN_POSI,FLT_MAX_NEGA,80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0,6,-6,1500.24,-1500.24]
-
-#func:
-#    gpufuncName 
-#    cpuFuncName
-#    fileName: 'builtin_'+name
-#    inputtype: a 2-D list because there're more than one input data
-#    outputtype: a list
-#    values
-#    ulp
-
-base_input_values = [ 0, 1, 3.14]
-def main():
-  ##### gentype acos(gentype)
-  acos_input_values = base_input_values
-  acos_input_type = ['float','float2','float4','float8','float16']
-  acos_output_type = ['float','float2','float4','float8','float16']
-  acosUtests = func('acos','acos',[acos_input_type],acos_output_type,[acos_input_values],'4 * FLT_ULP')
-  
-  ##### gentype acosh(gentype)
-  acosh_input_values = base_input_values
-  acosh_input_type = ['float','float2','float4','float8','float16']
-  acosh_output_type = ['float','float2','float4','float8','float16']
-  acoshUtests = func('acosh','acosh',[acosh_input_type],acosh_output_type,[acosh_input_values],'4 * FLT_ULP')
-  
-  ##### gentype acospi(gentype x)
-  acospi_input_values = base_input_values
-  acospi_input_type = ['float','float2','float4','float8','float16']
-  acospi_output_type = ['float','float2','float4','float8','float16']
-  acospi_cpu_func='''
-static float acospi(float x){
-  return acos(x)/M_PI;
-} '''
-  acospiUtests = func('acospi','acospi',[acospi_input_type],acospi_output_type,[acospi_input_values],'4 * FLT_ULP',acospi_cpu_func)
-  
-  ##### gentype asin(gentype)
-  asin_input_values = base_input_values
-  asin_input_type = ['float','float2','float4','float8','float16']
-  asin_output_type = ['float','float2','float4','float8','float16']
-  asinUtests = func('asin','asin',[asin_input_type],asin_output_type,[asin_input_values],'4 * FLT_ULP')
-  
-  ##### gentype asinh(gentype)
-  asinh_input_values = base_input_values
-  asinh_input_type = ['float','float2','float4','float8','float16']
-  asinh_output_type = ['float','float2','float4','float8','float16']
-  asinhUtests = func('asinh','asinh',[asinh_input_type],asinh_output_type,[asinh_input_values],'4 * FLT_ULP')
-  
-  ##### gentype asinpi(gentype x)
-  asinpi_input_values = base_input_values
-  asinpi_input_type = ['float','float2','float4','float8','float16']
-  asinpi_output_type = ['float','float2','float4','float8','float16']
-  asinpi_cpu_func='''
-static float asinpi(float x){
-  return asin(x)/M_PI;
-} '''
-  asinpiUtests = func('asinpi','asinpi',[asinpi_input_type],asinpi_output_type,[asinpi_input_values],'4 * FLT_ULP',asinpi_cpu_func)
-  
-  ##### gentype atan(gentype y_over_x)
-  atan_input_values = base_input_values
-  atan_input_type = ['float','float2','float4','float8','float16']
-  atan_output_type = ['float','float2','float4','float8','float16']
-  atanUtests = func('atan','atan',[atan_input_type],atan_output_type,[atan_input_values],'5 * FLT_ULP')
-  
-  ##### gentype atan2(gentype y, gentype x)
-  atan2_base_values = base_input_values
-  atan2_input_values1 = []
-  atan2_input_values2 = []
-  atan2_input_values1,atan2_input_values2=gene2ValuesLoop(atan2_input_values1,atan2_input_values2,atan2_base_values)
-  atan2_input_type1 = ['float','float2','float4','float8','float16']
-  atan2_input_type2 = ['float','float2','float4','float8','float16']
-  atan2_output_type = ['float','float2','float4','float8','float16']
-  atan2Utests = func('atan2','atan2',[atan2_input_type1,atan2_input_type2],atan2_output_type,[atan2_input_values1,atan2_input_values2],'6 * FLT_ULP')
-  
-  ##### gentype atanh(gentype)
-  atanh_input_values = base_input_values
-  atanh_input_type = ['float','float2','float4','float8','float16']
-  atanh_output_type = ['float','float2','float4','float8','float16']
-  atanhUtests = func('atanh','atanh',[atanh_input_type],atanh_output_type,[atanh_input_values],'5 * FLT_ULP')
-  
-  ##### gentype atanpi(gentype x)
-  atanpi_input_values = base_input_values
-  atanpi_input_type = ['float','float2','float4','float8','float16']
-  atanpi_output_type = ['float','float2','float4','float8','float16']
-  atanpi_cpu_func='''
-static float atanpi(float x){
-  return atan(x)/M_PI;
-} '''
-  atanpiUtests = func('atanpi','atanpi',[atanpi_input_type],atanpi_output_type,[atanpi_input_values],'4 * FLT_ULP',atanpi_cpu_func)
-  
-#  ##### gentype atan2pi(gentype y, gentype x)
-#  atan2pi_base_values = base_input_values
-#  atan2pi_input_values1 = []
-#  atan2pi_input_values2 = []
-#  atan2pi_input_values1,atan2pi_input_values2=gene2ValuesLoop(atan2pi_input_values1,atan2pi_input_values2,atan2pi_base_values)
-#  atan2pi_input_type1 = ['float','float2','float4','float8','float16']
-#  atan2pi_input_type2 = ['float','float2','float4','float8','float16']
-#  atan2pi_output_type = ['float','float2','float4','float8','float16']
-#  atan2pi_cpu_func='''
-#static float atan2pi(float y, float x){
-#  return atan2(y,x)/M_PI;
-#} '''
-#  atan2piUtests = func('atan2pi','atan2pi',[atan2pi_input_type1,atan2pi_input_type2],atan2pi_output_type,[atan2pi_input_values1,atan2pi_input_values2],'6 * FLT_ULP',atan2pi_cpu_func)
-  
-  ##### gentype cbrt(gentype)
-  cbrt_input_values = base_input_values
-  cbrt_input_type = ['float','float2','float4','float8','float16']
-  cbrt_output_type = ['float','float2','float4','float8','float16']
-  cbrtUtests = func('cbrt','cbrt',[cbrt_input_type],cbrt_output_type,[cbrt_input_values],'4 * FLT_ULP')
-  
-  ##### gentype ceil(gentype)
-  ceil_input_values = base_input_values
-  ceil_input_type = ['float','float2','float4','float8','float16']
-  ceil_output_type = ['float','float2','float4','float8','float16']
-  ceilUtests = func('ceil','ceil',[ceil_input_type],ceil_output_type,[ceil_input_values],'0 * FLT_ULP')
-  
-  ##### gentype copysign(gentype x, gentype y)
-  copysign_base_values = base_input_values
-  copysign_input_values1 = []
-  copysign_input_values2 = []
-  copysign_input_values1,copysign_input_values2=gene2ValuesLoop(copysign_input_values1,copysign_input_values2,copysign_base_values)
-  copysign_input_type1 = ['float','float2','float4','float8','float16']
-  copysign_input_type2 = ['float','float2','float4','float8','float16']
-  copysign_output_type = ['float','float2','float4','float8','float16']
-  copysignUtests = func('copysign','copysign',[copysign_input_type1,copysign_input_type2],copysign_output_type,[copysign_input_values1,copysign_input_values2],'0 * FLT_ULP')
-  
-  ##### gentype cos(gentype)
-  cos_input_values = base_input_values
-  cos_input_type = ['float','float2','float4','float8','float16']
-  cos_output_type = ['float','float2','float4','float8','float16']
-  cosUtests = func('cos','cos',[cos_input_type],cos_output_type,[cos_input_values],'4 * FLT_ULP')
-  
-  ##### gentype cosh(gentype)
-  cosh_input_values = base_input_values
-  cosh_input_type = ['float','float2','float4','float8','float16']
-  cosh_output_type = ['float','float2','float4','float8','float16']
-  coshUtests = func('cosh','cosh',[cosh_input_type],cosh_output_type,[cosh_input_values],'4 * FLT_ULP')
-  
-  ##### gentype cospi(gentype x)
-  cospi_input_values = base_input_values
-  cospi_input_type = ['float','float2','float4','float8','float16']
-  cospi_output_type = ['float','float2','float4','float8','float16']
-  cospi_cpu_func='''
-static float cospi(float x){
-  return cos(M_PI * x);
-} '''
-  cospiUtests = func('cospi','cospi',[cospi_input_type],cospi_output_type,[cospi_input_values],'2 * FLT_ULP',cospi_cpu_func)
-  
-#  ##### gentype erf(gentype)
-#  erf_input_values = base_input_values
-#  erf_input_type = ['float','float2','float4','float8','float16']
-#  erf_output_type = ['float','float2','float4','float8','float16']
-#  erfUtests = func('erf','erf',[erf_input_type],erf_output_type,[erf_input_values],'16 * FLT_ULP')
-
-#  ##### gentype erfc(gentype)
-#  erfc_input_values = base_input_values
-#  erfc_input_type = ['float','float2','float4','float8','float16']
-#  erfc_output_type = ['float','float2','float4','float8','float16']
-#  erfcUtests = func('erfc','erfc',[erfc_input_type],erfc_output_type,[erfc_input_values],'16 * FLT_ULP')
-  
-  ##### gentype exp(gentype x)
-  exp_input_values = base_input_values
-  exp_input_type = ['float','float2','float4','float8','float16']
-  exp_output_type = ['float','float2','float4','float8','float16']
-  expUtests = func('exp','exp',[exp_input_type],exp_output_type,[exp_input_values],'4 * FLT_ULP')
-  
-  ##### gentype exp2(gentype)
-  exp2_input_values = base_input_values
-  exp2_input_type = ['float','float2','float4','float8','float16']
-  exp2_output_type = ['float','float2','float4','float8','float16']
-  exp2Utests = func('exp2','exp2',[exp2_input_type],exp2_output_type,[exp2_input_values],'4 * FLT_ULP')
-  
-  ##### gentype exp10(gentype)
-  exp10_input_values = base_input_values
-  exp10_input_type = ['float','float2','float4','float8','float16']
-  exp10_output_type = ['float','float2','float4','float8','float16']
-  exp10Utests = func('exp10','exp10',[exp10_input_type],exp10_output_type,[exp10_input_values],'4 * FLT_ULP')
-  
-  ##### gentype expm1(gentype x)
-  expm1_input_values = base_input_values
-  expm1_input_type = ['float','float2','float4','float8','float16']
-  expm1_output_type = ['float','float2','float4','float8','float16']
-  expm1Utests = func('expm1','expm1',[expm1_input_type],expm1_output_type,[expm1_input_values],'4 * FLT_ULP')
-  
-  ##### gentype fabs(gentype)
-  fabs_input_values = base_input_values
-  fabs_input_type = ['float','float2','float4','float8','float16']
-  fabs_output_type = ['float','float2','float4','float8','float16']
-  fabsUtests = func('fabs','fabs',[fabs_input_type],fabs_output_type,[fabs_input_values],'0 * FLT_ULP')
-  
-  ##### gentype fdim(gentype x, gentype y)
-  fdim_base_values = base_input_values
-  fdim_input_values1 = []
-  fdim_input_values2 = []
-  fdim_input_values1,fdim_input_values2=gene2ValuesLoop(fdim_input_values1,fdim_input_values2,fdim_base_values)
-  fdim_input_type1 = ['float','float2','float4','float8','float16']
-  fdim_input_type2 = ['float','float2','float4','float8','float16']
-  fdim_output_type = ['float','float2','float4','float8','float16']
-  fdimUtests = func('fdim','fdim',[fdim_input_type1,fdim_input_type2],fdim_output_type,[fdim_input_values1,fdim_input_values2],'0 * FLT_ULP')
-  
-  ##### gentype floor(gentype)
-  floor_input_values = base_input_values
-  floor_input_type = ['float','float2','float4','float8','float16']
-  floor_output_type = ['float','float2','float4','float8','float16']
-  floorUtests = func('floor','floor',[floor_input_type],floor_output_type,[floor_input_values],'0 * FLT_ULP')
-  
-  ##### gentype fmax(gentype x, gentype y)
-  fmax_base_values = base_input_values
-  fmax_input_values1 = []
-  fmax_input_values2 = []
-  fmax_input_values1,fmax_input_values2=gene2ValuesLoop(fmax_input_values1,fmax_input_values2,fmax_base_values)
-  fmax_input_type1 = ['float','float2','float4','float8','float16']
-  fmax_input_type2 = ['float','float2','float4','float8','float16']
-  fmax_output_type = ['float','float2','float4','float8','float16']
-  fmaxUtests = func('fmax','fmax',[fmax_input_type1,fmax_input_type2],fmax_output_type,[fmax_input_values1,fmax_input_values2],'0 * FLT_ULP')
-  
-  ##### gentypef fmax(gentypef x, float y)
-#  fmax_gentypef_base_values = base_input_values
-#  fmax_gentypef_input_values1 = []
-#  fmax_gentypef_input_values2 = []
-#  fmax_gentypef_input_values2,fmax_gentypef_input_values1=gene2ValuesLoop(fmax_gentypef_input_values1,fmax_gentypef_input_values2,fmax_gentypef_base_values)
-#  fmax_gentypef_input_type1 = ['float','float2','float4','float8','float16']
-#  fmax_gentypef_input_type2 = ['float','float','float','float','float']
-#  fmax_gentypef_output_type = ['float','float2','float4','float8','float16']
-#  ##### gentypef fmax(gentypef x, float y)
-#  fmax_gentypefUtests = func('gentypef_fmax','gentypef_fmax',[fmax_gentypef_input_type1,fmax_gentypef_input_type2],fmax_gentypef_output_type,[fmax_gentypef_input_values1,fmax_gentypef_input_values2],'0 * FLT_ULP')
-  
-  ##### gentype fmin(gentype x, gentype y)
-  fmin_base_values = base_input_values
-  fmin_input_values1 = []
-  fmin_input_values2 = []
-  fmin_input_values1,fmin_input_values2=gene2ValuesLoop(fmin_input_values1,fmin_input_values2,fmin_base_values)
-  fmin_input_type1 = ['float','float2','float4','float8','float16']
-  fmin_input_type2 = ['float','float2','float4','float8','float16']
-  fmin_output_type = ['float','float2','float4','float8','float16']
-  fminUtests = func('fmin','fmin',[fmin_input_type1,fmin_input_type2],fmin_output_type,[fmin_input_values1,fmin_input_values2],'0 * FLT_ULP')
-  
-#  ##### gentypef fmin(gentypef x, float y)
-#  fmin_gentypef_base_values = base_input_values
-#  fmin_gentypef_input_values1 = []
-#  fmin_gentypef_input_values2 = []
-#  fmin_gentypef_input_values2,fmin_gentypef_input_values1=gene2ValuesLoop(fmin_gentypef_input_values1,fmin_gentypef_input_values2,fmin_gentypef_base_values)
-#  fmin_gentypef_input_type1 = ['float','float2','float4','float8','float16']
-#  fmin_gentypef_input_type2 = ['float','float','float','float','float']
-#  fmin_gentypef_output_type = ['float','float2','float4','float8','float16']
-#  ##### gentypef fmin(gentypef x, float y)
-#  fmin_gentypefUtests = func('gentypef_fmin','gentypef_fmin',[fmin_gentypef_input_type1,fmin_gentypef_input_type2],fmin_gentypef_output_type,[fmin_gentypef_input_values1,fmin_gentypef_input_values2],'0 * FLT_ULP')
-#  
-  ##### gentype fmod(gentype x, gentype y)
-  fmod_base_values = base_input_values
-  fmod_input_values1 = []
-  fmod_input_values2 = []
-  fmod_input_values1,fmod_input_values2=gene2ValuesLoop(fmod_input_values1,fmod_input_values2,fmod_base_values)
-  fmod_input_type1 = ['float','float2','float4','float8','float16']
-  fmod_input_type2 = ['float','float2','float4','float8','float16']
-  fmod_output_type = ['float','float2','float4','float8','float16']
-  fmodUtests = func('fmod','fmod',[fmod_input_type1,fmod_input_type2],fmod_output_type,[fmod_input_values1,fmod_input_values2],'0 * FLT_ULP')
-  
-  ##### gentype hypot(gentype x, gentype y)
-  hypot_base_values = base_input_values
-  hypot_input_values1 = []
-  hypot_input_values2 = []
-  hypot_input_values1,hypot_input_values2=gene2ValuesLoop(hypot_input_values1,hypot_input_values2,hypot_base_values)
-  hypot_input_type1 = ['float','float2','float4','float8','float16']
-  hypot_input_type2 = ['float','float2','float4','float8','float16']
-  hypot_output_type = ['float','float2','float4','float8','float16']
-  hypotUtests = func('hypot','hypot',[hypot_input_type1,hypot_input_type2],hypot_output_type,[hypot_input_values1,hypot_input_values2],'4 * FLT_ULP')
-  
-  ##### intn ilogb(floartn x)
-  ilogb_input_values = base_input_values
-  ilogb_input_type = ['float','float2','float4','float8','float16']
-  ilogb_output_type = ['int','int2','int4','int8','int16']
-  ilogbUtests = func('ilogb','ilogb',[ilogb_input_type],ilogb_output_type,[ilogb_input_values],'0 * INT_ULP')
-
-  ##### gentype lgamma(gentype x)
-  lgamma_input_values = base_input_values
-  lgamma_input_type = ['float','float2','float4','float8','float16']
-  lgamma_output_type = ['float','float2','float4','float8','float16']
-  lgammaUtests = func('lgamma','lgamma',[lgamma_input_type],lgamma_output_type,[lgamma_input_values],'4 * FLT_ULP')
-
-  ##### gentype log(gentype)
-  log_input_values = base_input_values
-  log_input_type = ['float','float2','float4','float8','float16']
-  log_output_type = ['float','float2','float4','float8','float16']
-  logUtests = func('log','log',[log_input_type],log_output_type,[log_input_values],'4 * FLT_ULP')
-  
-  ##### gentype log2(gentype)
-  log2_input_values = base_input_values
-  log2_input_type = ['float','float2','float4','float8','float16']
-  log2_output_type = ['float','float2','float4','float8','float16']
-  log2Utests = func('log2','log2',[log2_input_type],log2_output_type,[log2_input_values],'4 * FLT_ULP')
-  
-  ##### gentype log10(gentype)
-  log10_input_values = base_input_values
-  log10_input_type = ['float','float2','float4','float8','float16']
-  log10_output_type = ['float','float2','float4','float8','float16']
-  log10Utests = func('log10','log10',[log10_input_type],log10_output_type,[log10_input_values],'4 * FLT_ULP')
-  
-  ##### gentype log1p(gentype x)
-  log1p_input_values = base_input_values
-  log1p_input_type = ['float','float2','float4','float8','float16']
-  log1p_output_type = ['float','float2','float4','float8','float16']
-  log1pUtests = func('log1p','log1p',[log1p_input_type],log1p_output_type,[log1p_input_values],'4 * FLT_ULP')
-  
-  ##### gentype logb(gentype x)
-  logb_input_values = base_input_values
-  logb_input_type = ['float','float2','float4','float8','float16']
-  logb_output_type = ['float','float2','float4','float8','float16']
-  logbUtests = func('logb','logb',[logb_input_type],logb_output_type,[logb_input_values],'0 * FLT_ULP')
-  
-  ##### gentype maxmag(gentype x, gentype y)
-  maxmag_base_values = base_input_values
-  maxmag_input_values1 = []
-  maxmag_input_values2 = []
-  maxmag_input_values1,maxmag_input_values2=gene2ValuesLoop(maxmag_input_values1,maxmag_input_values2,maxmag_base_values)
-  maxmag_input_type1 = ['float','float2','float4','float8','float16']
-  maxmag_input_type2 = ['float','float2','float4','float8','float16']
-  maxmag_output_type = ['float','float2','float4','float8','float16']
-  maxmag_cpu_func='''
-static float maxmag(float x, float y){
-  if(fabs(x) > fabs(y))
-    return x;
-  else if (fabs(x) < fabs(y))
-    return y;
-  else
-    return fmax(x,y);
-} '''
-  maxmagUtests = func('maxmag','maxmag',[maxmag_input_type1,maxmag_input_type2],maxmag_output_type,[maxmag_input_values1,maxmag_input_values2],'0 * FLT_ULP',maxmag_cpu_func)
-  
-  ##### gentype minmag(gentype x, gentype y)
-  minmag_base_values = base_input_values
-  minmag_input_values1 = []
-  minmag_input_values2 = []
-  minmag_input_values1,minmag_input_values2=gene2ValuesLoop(minmag_input_values1,minmag_input_values2,minmag_base_values)
-  minmag_input_type1 = ['float','float2','float4','float8','float16']
-  minmag_input_type2 = ['float','float2','float4','float8','float16']
-  minmag_output_type = ['float','float2','float4','float8','float16']
-  minmag_cpu_func='''
-static float minmag(float x, float y){
-  if(fabs(x) < fabs(y))
-    return x;
-  else if (fabs(x) > fabs(y))
-    return y;
-  else
-    return fmin(x,y);
-} '''
-  minmagUtests = func('minmag','minmag',[minmag_input_type1,minmag_input_type2],minmag_output_type,[minmag_input_values1,minmag_input_values2],'0 * FLT_ULP',minmag_cpu_func)
-  
-#  ##### floatn nan(uintn nancode)
-#  nan_input_values = base_input_values
-#  nan_input_type = ['uint','uint2','uint4','uint8','uint16']
-#  nan_output_type = ['float','float2','float4','float8','float16']
-#  nanUtests = func('nan','nan',[nan_input_type],nan_output_type,[nan_input_values],'0 * FLT_ULP')
-  
-  ##### gentype nextafter(gentype x, gentype y)
-  nextafter_base_values = base_input_values
-  nextafter_input_values1 = []
-  nextafter_input_values2 = []
-  nextafter_input_values1,nextafter_input_values2=gene2ValuesLoop(nextafter_input_values1,nextafter_input_values2,nextafter_base_values)
-  nextafter_input_type1 = ['float','float2','float4','float8','float16']
-  nextafter_input_type2 = ['float','float2','float4','float8','float16']
-  nextafter_output_type = ['float','float2','float4','float8','float16']
-  nextafterUtests = func('nextafter','nextafter',[nextafter_input_type1,nextafter_input_type2],nextafter_output_type,[nextafter_input_values1,nextafter_input_values2],'0 * FLT_ULP')
-  
-  ##### gentype pow(gentype x, gentype y)
-  pow_base_values = base_input_values
-  pow_input_values1 = []
-  pow_input_values2 = []
-  pow_input_values1,pow_input_values2=gene2ValuesLoop(pow_input_values1,pow_input_values2,pow_base_values)
-  pow_input_type1 = ['float','float2','float4','float8','float16']
-  pow_input_type2 = ['float','float2','float4','float8','float16']
-  pow_output_type = ['float','float2','float4','float8','float16']
-  powUtests = func('pow','pow',[pow_input_type1,pow_input_type2],pow_output_type,[pow_input_values1,pow_input_values2],'16 * FLT_ULP')
-  
-  ##### floatn pown(floatn x, intn y)
-  pown_input_values1 = [FLT_MAX_POSI,FLT_MIN_NEGA,FLT_MIN_POSI,FLT_MAX_NEGA,80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0,6,-6,1500.24,-1500.24]
-  pown_input_values2 = [-1,-2,-3,4,5,6,7,8,9,10,11,12,13,14,15,16,12]
-  pown_input_type1 = ['float','float2','float4','float8','float16']
-  pown_input_type2 = ['int','int2','int4','int8','int16']
-  pown_output_type = ['float','float2','float4','float8','float16']
-  pown_cpu_func='''
-static float pown(float x, int y){
-    return pow(x,y);
-} '''
-  pownUtests = func('pown','pown',[pown_input_type1,pown_input_type2],pown_output_type,[pown_input_values1,pown_input_values2],'16 * FLT_ULP', pown_cpu_func)
-  
-  ##### gentype powr(gentype x, gentype y)
-  powr_input_values1 = [FLT_MAX_POSI,FLT_MIN_NEGA,FLT_MIN_POSI,FLT_MAX_NEGA,80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0,6,-6,1500.24,-1500.24]
-  powr_input_values2 = [1,2,3.14,4,5,6,7,8,9.889,10,11,12,13,14.33,15,0,12]
-  powr_input_type1 = ['float','float2','float4','float8','float16']
-  powr_input_type2 = ['float','float2','float4','float8','float16']
-  powr_output_type = ['float','float2','float4','float8','float16']
-  powr_cpu_func='''
-static float powr(float x, int y){
-    return pow(x,y);
-} '''
-  powrUtests = func('powr','powr',[powr_input_type1,powr_input_type2],powr_output_type,[powr_input_values1,powr_input_values2],'16 * FLT_ULP', powr_cpu_func)
-  
-  ##### gentype remainder(gentype x, gentype y)
-  remainder_base_values = base_input_values
-  remainder_input_values1 = []
-  remainder_input_values2 = []
-  remainder_input_values1,remainder_input_values2=gene2ValuesLoop(remainder_input_values1,remainder_input_values2,remainder_base_values)
-  remainder_input_type1 = ['float','float2','float4','float8','float16']
-  remainder_input_type2 = ['float','float2','float4','float8','float16']
-  remainder_output_type = ['float','float2','float4','float8','float16']
-  remainderUtests = func('remainder','remainder',[remainder_input_type1,remainder_input_type2],remainder_output_type,[remainder_input_values1,remainder_input_values2],'0 * FLT_ULP')
-  
-  ##### gentype rint(gentype x)
-  rint_input_values = base_input_values
-  rint_input_type = ['float','float2','float4','float8','float16']
-  rint_output_type = ['float','float2','float4','float8','float16']
-  rintUtests = func('rint','rint',[rint_input_type],rint_output_type,[rint_input_values],'0 * FLT_ULP')
-  
-  ##### floatn rootn(floatn x, intn y)
-  rootn_input_values1 = [0.0, 0.0012,  0.5, 1, 3.14, 12345]
-  rootn_input_values2 = [-1, 1, -20, 20, -123, 456]
-  rootn_input_type1 = ['float','float2','float4','float8','float16']
-  rootn_input_type2 = ['int','int2','int4','int8','int16']
-  rootn_output_type = ['float','float2','float4','float8','float16']
-  rootn_cpu_func='''
-static float rootn(float x, int y){
-    return pow(x,1.0/y);
-} '''
-  rootnUtests = func('rootn','rootn',[rootn_input_type1,rootn_input_type2],rootn_output_type,[rootn_input_values1,rootn_input_values2],'4 * FLT_ULP',rootn_cpu_func)
-  
-  ##### gentype round(gentype x)
-  round_input_values = base_input_values
-  round_input_type = ['float','float2','float4','float8','float16']
-  round_output_type = ['float','float2','float4','float8','float16']
-  roundUtests = func('round','round',[round_input_type],round_output_type,[round_input_values],'0 * FLT_ULP')
-  
-  ##### gentype rsqrt(gentype)
-  rsqrt_input_values = base_input_values
-  rsqrt_input_type = ['float','float2','float4','float8','float16']
-  rsqrt_output_type = ['float','float2','float4','float8','float16']
-  rsqrt_cpu_func='''
-static float rsqrt(float x)
-{ return 1/sqrt(x);} '''
-  rsqrtUtests = func('rsqrt','rsqrt',[rsqrt_input_type],rsqrt_output_type,[rsqrt_input_values],'4 * FLT_ULP', rsqrt_cpu_func)
-
- 
-  ##### gentype sin(gentype)
-  sin_input_values = base_input_values
-  sin_input_type = ['float','float2','float4','float8','float16']
-  sin_output_type = ['float','float2','float4','float8','float16']
-  sinUtests = func('sin','sin',[sin_input_type],sin_output_type,[sin_input_values],'4 * FLT_ULP')
-  
-#  ##### gentype sincos(gentype)
-#  sincos_input_values1 = [FLT_MAX_POSI,FLT_MIN_NEGA,FLT_MIN_POSI,FLT_MAX_NEGA,80, -80, 3.14, -3.14, -0.5, 0.5, 1, -1, 0.0,6,-6,1500.24,-1500.24]
-#  sincos_input_values2 = []
-#  sincos_input_type1 = ['float','float2','float4','float8','float16']
-#  sincos_input_type2 = ['float','float2','float4','float8','float16']
-#  sincos_output_type = ['float','float2','float4','float8','float16']
-#  ###### gentype sincos(gentype)
-#  #  sincosUtests = func('sincos','sincos',[sincos_input_type1,sincos_input_type2],sincos_output_type,[sincos_input_values1,sincos_input_values2],'4 * FLT_ULP')
-  
-  ##### gentype sinh(gentype)
-  sinh_input_values = base_input_values
-  sinh_input_type = ['float','float2','float4','float8','float16']
-  sinh_output_type = ['float','float2','float4','float8','float16']
-  sinhUtests = func('sinh','sinh',[sinh_input_type],sinh_output_type,[sinh_input_values],'4 * FLT_ULP')
-  
-  ##### gentype sinpi(gentype x)
-  sinpi_input_values = [0, 1, 3.14, -0.88, -0.12, -0.5, 0.5, -0.49, 0.49, 0.51, -0.51, -0.1, 0.1]
-  sinpi_input_type = ['float','float2','float4','float8','float16']
-  sinpi_output_type = ['float','float2','float4','float8','float16']
-  sinpi_cpu_func='''
-static float reduce1( float x )
-{
-  SF fx, fy;
-  fx.f = fy.f = x;
-  int n;
-
-  fy.spliter.exponent = fx.spliter.exponent - 1;
-  n = (int)fy.f;
-
-  fx.f = fx.f - 2.0 * n;
-
-  return fx.f;
-}
-
-static float sinpi(float x){
-  float r = x;
-  if ( x > 1 || x < -1) r = reduce1(x);
-
-  // reduce to [-0.5, 0.5]
-  if(r < -0.5)
-      r = -1 - r;
-  else if (r > 0.5)
-      r = 1 - r;
-
-  if (r > 0.25 && r <= 0.5)
-    return  cos((0.5 - r) * M_PI);
-  else if (r >= 0 && r <= 0.25)
-    return  sin(r * M_PI);
-  else if (r >= -0.25 && r < 0)
-    return -sin(r * -M_PI);
-  else if (r >= -0.5 && r < -0.25){
-    return -cos((0.5 + r) * M_PI);}
-
-  // Error return
-  return 0xffffffff;
-} '''
-  sinpiUtests = func('sinpi','sinpi',[sinpi_input_type],sinpi_output_type,[sinpi_input_values],'4 * FLT_ULP',sinpi_cpu_func)
-  
-  ##### gentype sqrt(gentype)
-  sqrt_input_values = base_input_values
-  sqrt_input_type = ['float','float2','float4','float8','float16']
-  sqrt_output_type = ['float','float2','float4','float8','float16']
-  sqrtUtests = func('sqrt','sqrt',[sqrt_input_type],sqrt_output_type,[sqrt_input_values],'4 * FLT_ULP')
-  
-  ##### gentype tan(gentype)
-  tan_input_values = base_input_values
-  tan_input_type = ['float','float2','float4','float8','float16']
-  tan_output_type = ['float','float2','float4','float8','float16']
-  tanUtests = func('tan','tan',[tan_input_type],tan_output_type,[tan_input_values],'5 * FLT_ULP')
-  
-  ##### gentype tanh(gentype)
-  tanh_input_values = base_input_values
-  tanh_input_type = ['float','float2','float4','float8','float16']
-  tanh_output_type = ['float','float2','float4','float8','float16']
-  tanhUtests = func('tanh','tanh',[tanh_input_type],tanh_output_type,[tanh_input_values],'5 * FLT_ULP')
-  
-  ##### gentype tanpi(gentype x)
-  tanpi_input_values = base_input_values
-  tanpi_input_type = ['float','float2','float4','float8','float16']
-  tanpi_output_type = ['float','float2','float4','float8','float16']
-  tanpi_cpu_func='''
-static float tanpi(float x){
-  return tan(M_PI*x);
-} '''
-  tanpiUtests = func('tanpi','tanpi',[tanpi_input_type],tanpi_output_type,[tanpi_input_values],'4 * FLT_ULP',tanpi_cpu_func)
-  
-  ##### gentype trunc(gentype)
-  trunc_input_values = base_input_values
-  trunc_input_type = ['float','float2','float4','float8','float16']
-  trunc_output_type = ['float','float2','float4','float8','float16']
-  truncUtests = func('trunc','trunc',[trunc_input_type],trunc_output_type,[trunc_input_values],'0 * FLT_ULP')
-
-if __name__ == "__main__":
-  main()
diff --git a/utests/utest_run.cpp b/utests/utest_run.cpp
deleted file mode 100644
index cd4356a..0000000
--- a/utests/utest_run.cpp
+++ /dev/null
@@ -1,118 +0,0 @@
-/* 
- * Copyright © 2012 Intel Corporation
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author: Benjamin Segovia <benjamin.segovia at intel.com>
- */
-
-/**
- * \file utest_run.cpp
- * \author Benjamin Segovia <benjamin.segovia at intel.com>
- *
- * Just run the unit tests. The user can possibly provides the subset of it
- */
-#include "utest_helper.hpp"
-#include "utest_exception.hpp"
-#include <iostream>
-#include <getopt.h>
-
-static const char *shortopts = "c:lanh";
-struct option longopts[] = {
-{"casename", required_argument, NULL, 'c'},
-{"list", no_argument, NULL, 'l'},
-{"all", no_argument, NULL, 'a'},
-{"allnoissue", no_argument, NULL, 'n'},
-{"help", no_argument, NULL, 'h'},
-{0, 0, 0, 0},
-};
-
-void usage()
-{
-    std::cout << "\
-Usage:\n\
-  ./utest_run <option>\n\
-\n\
-  option:\n\
-    -c <casename>: run sub-case named 'casename'\n\
-    -l           : list all the available case name\n\
-    -a           : run all test cases\n\
-    -n           : run all test cases without known issue (default option)\n\
-    -h           : display this usage\n\
-\
-    "<< std::endl;
-}
-
-int main(int argc, char *argv[])
-{
-
-  int c = 0;
-  cl_ocl_init();
-
-  c = getopt_long (argc, argv, shortopts, longopts, NULL);
-
-  if (argc == 1)
-    c = 'n';
-  if (argc == 2 && c < 1 ){
-    c = 'c';
-    optarg = argv[1];
-  }
-
-  do {
-    switch (c)
-    {
-      case 'c':
-        try {
-          UTest::run(optarg);
-        }
-        catch (Exception e){
-          std::cout << "  " << e.what() << "    [SUCCESS]" << std::endl;
-        }
-
-        break;
-
-      case 'l':
-        UTest::listAllCases();
-        break;
-
-      case 'a':
-        try {
-          UTest::runAll();
-        }
-        catch (Exception e){
-          std::cout << "  " << e.what() << "    [SUCCESS]" << std::endl;
-        }
-
-        break;
-
-      case 'n':
-        try {
-          UTest::runAllNoIssue();
-        }
-        catch (Exception e){
-          std::cout << "  " << e.what() << "    [SUCCESS]" << std::endl;
-        }
-
-        break;
-
-      case 'h':
-      default:
-        usage();
-        exit(1);
-    }
-  } while ((c = getopt_long (argc, argv, shortopts, longopts, NULL)) != -1);
-
-  cl_ocl_destroy();
-}
-
-- 
1.8.5.3



More information about the Beignet mailing list