---
milena/sandbox/anthony/Makefile | 6 +-
milena/sandbox/anthony/new-implem/src/dog-space.hh | 233 ++++++++++++++
milena/sandbox/anthony/new-implem/src/keypoint.hh | 48 +++
milena/sandbox/anthony/new-implem/src/main.cc | 59 ++--
.../sandbox/anthony/new-implem/src/scale-space.hh | 24 +-
milena/sandbox/anthony/new-implem/src/vrac.hh | 323 ++++++++++++++++++++
milena/sandbox/anthony/new-implem/src/vrac/vrac.hh | 296 ------------------
milena/sandbox/anthony/src/main.cc | 94 ++++--
milena/sandbox/anthony/test-opencv/Makefile | 19 --
milena/sandbox/anthony/test-opencv/keith.pbm | Bin 262159 -> 0 bytes
milena/sandbox/anthony/test-opencv/main.cpp | 66 ----
milena/sandbox/anthony/test-opencv/tongue.pbm | 29 --
12 files changed, 718 insertions(+), 479 deletions(-)
create mode 100644 milena/sandbox/anthony/new-implem/src/dog-space.hh
create mode 100644 milena/sandbox/anthony/new-implem/src/keypoint.hh
create mode 100644 milena/sandbox/anthony/new-implem/src/vrac.hh
delete mode 100644 milena/sandbox/anthony/new-implem/src/vrac/vrac.hh
delete mode 100644 milena/sandbox/anthony/test-opencv/Makefile
delete mode 100644 milena/sandbox/anthony/test-opencv/keith.pbm
delete mode 100644 milena/sandbox/anthony/test-opencv/main.cpp
delete mode 100644 milena/sandbox/anthony/test-opencv/tongue.pbm
diff --git a/milena/sandbox/anthony/Makefile b/milena/sandbox/anthony/Makefile
index 2953013..43d90fd 100644
--- a/milena/sandbox/anthony/Makefile
+++ b/milena/sandbox/anthony/Makefile
@@ -1,8 +1,8 @@
-CCACHE=ccache
+CCACHE=
CC=g++
-CFLAGS=-Wall -Werror
+CFLAGS=-Wall -Wextra
CLIBS=-I../../
-CLEAN=*.o output/* log
+CLEAN=*.o output/* log debug_*
SRC=src/main.cc src/matrix.cc src/keypoint.cc
OUTPUT=a.out
diff --git a/milena/sandbox/anthony/new-implem/src/dog-space.hh
b/milena/sandbox/anthony/new-implem/src/dog-space.hh
new file mode 100644
index 0000000..a93b52a
--- /dev/null
+++ b/milena/sandbox/anthony/new-implem/src/dog-space.hh
@@ -0,0 +1,233 @@
+#ifndef DOG_SPACE_HH
+# define DOG_SPACE_HH
+
+# include <string>
+# include <vector>
+# include <list>
+
+#include <mln/core/image/image2d.hh>
+#include <mln/data/all.hh>
+#include <mln/io/pgm/all.hh>
+#include <mln/io/ppm/save.hh>
+#include <mln/core/alias/neighb2d.hh>
+#include <mln/literal/all.hh>
+#include <mln/value/int_s16.hh>
+
+#include "scale-space.hh"
+#include "keypoint.hh"
+
+using namespace mln;
+
+template<typename I, typename S>
+class DoGSpace : protected ScaleSpace<S>
+{
+ public:
+ DoGSpace(ScaleSpace<I>* _ss)
+ {
+ ss = _ss;
+ }
+
+ ~DoGSpace()
+ {
+ ScaleSpace<S>::~ScaleSpace();
+ }
+
+ void build(void)
+ {
+ ScaleSpace<S>::o = ss->octave_count();
+ ScaleSpace<S>::g = ss->gradient_count() - 1;
+
+ typedef typename std::vector< std::vector<I> >::iterator PIT;
+ typedef typename std::vector<I>::iterator IIT;
+
+ std::vector< std::vector<I> > sspyramid = ss->getPyramid();
+ S dog;
+
+ for (PIT pit = sspyramid.begin(); pit != sspyramid.end(); ++pit)
+ {
+ std::vector<S> octave;
+ for (IIT iit = pit->begin(); (iit + 1) != pit->end(); ++iit)
+ {
+ initialize(dog, *iit);
+ mln_piter(I) p(iit->domain());
+
+ for_all(p)
+ {
+ value::int_s16 up = (value::int_s16) (*iit)(p);
+ value::int_s16 down = (value::int_s16) (*(iit+1))(p);
+ value::int_s16 diff = down - up;
+ //value::int_s16 diff = ( (int) (*iit)(p) ) - ( (int) ((*(iit+1))(p)) );
+
+ //std::cout << up << " - " << down <<
" = " << diff << std::endl;
+
+ dog(p) = diff;
+ }
+ octave.push_back(dog);
+ }
+ ScaleSpace<S>::pyramid.push_back(octave);
+ }
+ }
+
+ void findKeypoints(std::list<Keypoint>& keypoints)
+ {
+ typedef typename std::vector< std::vector<S> >::iterator PIT;
+ typedef typename std::vector<S>::iterator IIT;
+
+ unsigned octave = 0;
+ for (PIT pit = ScaleSpace<S>::pyramid.begin(); pit !=
ScaleSpace<S>::pyramid.end(); ++pit)
+ {
+ unsigned gradient = 1;
+ for (IIT iit = pit->begin() + 1; (iit + 1) != pit->end(); ++iit)
+ {
+ S upper = *(iit-1);
+ S current = *iit;
+ S lower = *(iit+1);
+
+ mln_piter(I) p(current.domain());
+
+ for_all(p)
+ {
+ value::int_s16 center = current(p);
+ value::int_s16 min = 255;
+ value::int_s16 max = -256;
+ mln_niter(neighb2d) n(c8(), p);
+
+ int extrema = isExtrema(current, center, n);
+
+ if (extrema == -1) // Is a minimum
+ {
+ findMin(min, lower, upper, p, n);
+ if (center < min)
+ keypoints.push_back(Keypoint(p.col(), p.row(), octave, gradient,
false));
+ }
+ else if (extrema == 1) // Is a maximum
+ {
+ findMax(max, lower, upper, p, n);
+ if (center > max)
+ keypoints.push_back(Keypoint(p.col(), p.row(), octave, gradient, true));
+ }
+ }
+
+ ++gradient;
+ }
+
+ ++octave;
+ }
+ }
+
+ void discardLowContrastKeypoints(std::list<Keypoint>& keypoints)
+ {
+ keypoints = keypoints;
+ }
+
+ void eliminateEdgeResponses(std::list<Keypoint>& keypoints)
+ {
+ const static float bound_ratio = 12.1;
+
+ for (std::list<Keypoint>::iterator k = keypoints.begin();
+ k != keypoints.end(); ++k)
+ {
+ unsigned octave = k->getOctave();
+ unsigned gradient = k->getGradient();
+ S dog = ScaleSpace<S>::pyramid[octave][gradient];
+ unsigned col = k->getX();
+ unsigned row = k->getY();
+
+ /* Set the neighbors:
+ * n5 n1 n6
+ * n2 p n3
+ * n7 n4 n8
+ */
+ float p = dog(mln_psite(S)(row, col));
+
+ float n1 = dog(mln_psite(S)(row - 1, col));
+ float n2 = dog(mln_psite(S)(row, col - 1));
+ float n3 = dog(mln_psite(S)(row, col + 1));
+ float n4 = dog(mln_psite(S)(row + 1, col));
+
+ float n5 = dog(mln_psite(S)(row - 1, col - 1));
+ float n6 = dog(mln_psite(S)(row - 1, col + 1));
+ float n7 = dog(mln_psite(S)(row + 1, col - 1));
+ float n8 = dog(mln_psite(S)(row + 1, col + 1));
+
+ // Set Hessian matrix and find the ratio
+
+ float dxx = n3 - 2.0 * p + n2;
+ float dyy = n4 - 2.0 * p + n1;
+ float dxy = (n8 - n6 - n7 + n5) / 4.0;
+
+ float trace = dxx + dyy;
+ float determinant = dxx * dyy - dxy * dxy;
+ float ratio = (trace * trace) / determinant;
+
+ if (determinant <= 0 || ratio >= bound_ratio)
+ keypoints.erase(k);
+ }
+ }
+
+ virtual void save()
+ {
+ //std::stringstream name;
+
+ //for (unsigned i = 0; i < ScaleSpace<S>::pyramid.size(); ++i)
+ //{
+ //for (unsigned j = 0; j < ScaleSpace<S>::pyramid[i].size(); ++j)
+ //{
+ //name << "output/dogs-o" << i << "-"
<< j << ".pgm";
+ //io::pgm::save(ScaleSpace<I>::pyramid[i][j], name.str());
+ //name.str("");
+ //}
+ //}
+ }
+
+ private:
+ ScaleSpace<I>* ss;
+
+ int isExtrema(S& current, value::int_s16& center,
+ typename neighb2d::fwd_niter n)
+ {
+ bool min = true;
+ bool max = true;
+
+ for_all(n)
+ {
+ min = (min && center < current(n));
+ max = (max && center > current(n));
+ }
+
+ if (min)
+ return -1;
+ else if (max)
+ return 1;
+ else
+ return 0;
+ }
+
+ void findMin(value::int_s16& min, S& lower, S& upper,
+ typename S::piter& p, typename neighb2d::fwd_niter& n)
+ {
+ min = (lower(p) < min) ? lower(p) : min;
+ min = (upper(p) < min) ? upper(p) : min;
+
+ for_all(n)
+ {
+ min = (lower(n) < min) ? lower(n) : min;
+ min = (upper(n) < min) ? upper(n) : min;
+ }
+ }
+
+ void findMax(value::int_s16& max, S& lower, S& upper,
+ typename S::piter& p, typename neighb2d::fwd_niter& n)
+ {
+ max = (lower(p) > max) ? lower(p) : max;
+ max = (upper(p) > max) ? upper(p) : max;
+
+ for_all(n)
+ {
+ max = (lower(n) > max) ? lower(n) : max;
+ max = (upper(n) > max) ? upper(n) : max;
+ }
+ }
+};
+
+#endif /* ! DOG_SPACE_HH */
diff --git a/milena/sandbox/anthony/new-implem/src/keypoint.hh
b/milena/sandbox/anthony/new-implem/src/keypoint.hh
new file mode 100644
index 0000000..b6b2415
--- /dev/null
+++ b/milena/sandbox/anthony/new-implem/src/keypoint.hh
@@ -0,0 +1,48 @@
+#ifndef KEYPOINT_HH
+# define KEYPOINT_HH
+
+# include <ostream>
+
+class Keypoint
+{
+ public:
+ Keypoint(int _x, int _y,
+ unsigned _octave, unsigned _gradient,
+ bool _maximum)
+ {
+ x = _x;
+ y = _y;
+ octave = _octave;
+ gradient = _gradient;
+ maximum = _maximum;
+ }
+
+ inline int getX() const { return x; }
+ inline int getY() const { return y; }
+ inline unsigned getOctave() const { return octave; }
+ inline unsigned getGradient() const { return gradient; }
+ inline bool getType() const { return maximum; }
+ inline float getOrientation() const { return orientation; }
+
+ inline void setX(int _x) { x = _x; }
+ inline void setY(int _y) { y = _y; }
+ inline void setOrientation(float _o) { orientation = _o; }
+
+ friend std::ostream& operator<< (std::ostream& stream, const
Keypoint& k)
+ {
+ stream << "(" << k.getX() << "," <<
k.getY() << ")"
+ << " o:" << k.getOctave() << " g:"
<< k.getGradient();
+
+ return stream;
+ }
+
+ private:
+ int x;
+ int y;
+ unsigned octave;
+ unsigned gradient;
+ bool maximum;
+ float orientation;
+};
+
+#endif /* ! KEYPOINT_HH */
diff --git a/milena/sandbox/anthony/new-implem/src/main.cc
b/milena/sandbox/anthony/new-implem/src/main.cc
index 45a36ad..afbb476 100644
--- a/milena/sandbox/anthony/new-implem/src/main.cc
+++ b/milena/sandbox/anthony/new-implem/src/main.cc
@@ -4,60 +4,69 @@
#include <mln/io/ppm/save.hh>
#include <mln/core/alias/neighb2d.hh>
#include <mln/literal/all.hh>
-#include <mln/value/int_s8.hh>
+#include <mln/value/int_u8.hh>
+#include <mln/value/int_s16.hh>
//#include <cmath>
#include <string>
+#include <list>
#include "scale-space.hh"
-//#include "dog-space.hh"
-//#include "keypoint.hh"
+#include "dog-space.hh"
+#include "keypoint.hh"
//#include "matrix.hh"
int main(void)
{
typedef image2d<value::int_u8> I;
+ typedef image2d<value::int_s16> S;
typedef image2d<value::rgb8> C;
// General parameters
std::string source("images/keith.pbm");
const unsigned blur_level = 5;
- const unsigned octave_level = 3;
- const bool black = false;
+ const unsigned octave_level = 4;
ScaleSpace<I> *ss = new ScaleSpace<I>(octave_level, blur_level);
- //DoGSpace<C>* dog = new DogSpace();
- //std::vector<Keypoint>* keypoints = new std::vector<Keypoint>();
+ DoGSpace<I, S>* dogs = new DoGSpace<I, S>(ss);
+ std::list<Keypoint> keypoints;
I original;
- C extrema, improved;
+ C extrema, extrema_b,
+ extrema2, extrema2_b;
+ //improved, improved_b;
io::pgm::load(original, source.c_str());
- if (black)
- {
- initialize(extrema, original);
- initialize(improved, original);
- }
- else
- {
- extrema = data::convert(value::rgb8(), original);
- improved = data::convert(value::rgb8(), original);
- }
+ initialize(extrema_b, original);
+ initialize(extrema2_b, original);
+ //initialize(improved_b, original);
+
+ extrema = data::convert(value::rgb8(), original);
+ extrema2 = data::convert(value::rgb8(), original);
+ //improved = data::convert(value::rgb8(), original);
// Localization
ss->build(original);
- ss->save();
- //buildDifferenceOfGaussianSpace(scaleSpace, dogSpace);
- //buildExtrema(extrema, dogSpace, keypoints);
- //discardLowContrastKeypoints(dogSpace, keypoints, improved);
+ //ss->save();
+ dogs->build();
+ //dogs->save();
+ dogs->findKeypoints(keypoints);
+
+ writeKeypoints(keypoints, extrema, extrema_b);
+
+ dogs->discardLowContrastKeypoints(keypoints);
+ dogs->eliminateEdgeResponses(keypoints);
- // Processing
- // TODO
+ writeKeypoints(keypoints, extrema2, extrema2_b);
// Save
io::ppm::save(extrema, "output/extrema.ppm");
- io::ppm::save(improved, "output/extrema_improved.ppm");
+ io::ppm::save(extrema_b, "output/extrema_b.ppm");
+ io::ppm::save(extrema2, "output/extrema2.ppm");
+ io::ppm::save(extrema2_b, "output/extrema2_b.ppm");
+ //io::ppm::save(improved, "output/extrema_improved.ppm");
+ //io::ppm::save(improved_b, "output/extrema_b_improved.ppm");
return 0;
}
diff --git a/milena/sandbox/anthony/new-implem/src/scale-space.hh
b/milena/sandbox/anthony/new-implem/src/scale-space.hh
index 2fbb4fd..e2262b6 100644
--- a/milena/sandbox/anthony/new-implem/src/scale-space.hh
+++ b/milena/sandbox/anthony/new-implem/src/scale-space.hh
@@ -10,9 +10,10 @@
#include <mln/io/ppm/save.hh>
#include <mln/core/alias/neighb2d.hh>
#include <mln/literal/all.hh>
-#include <mln/value/int_s8.hh>
+#include <mln/value/int_u8.hh>
+#include <mln/value/int_s16.hh>
-#include "vrac/vrac.hh"
+#include "vrac.hh"
using namespace mln;
@@ -41,23 +42,22 @@ class ScaleSpace
return pyramid[i];
}
-
void build(const I& original)
{
// Upscaled octave
- I upscaled = vrac::upscaling2(original);
+ I upscaled = upscaling2(original);
addOctave(upscaled);
// 1st octave
addOctave(original);
// 2nd octave
- I downscaled = vrac::downscaling2(original);
+ I downscaled = downscaling2(original);
addOctave(downscaled);
for (unsigned i = 3; i < o; ++i)
{
- downscaled = vrac::downscaling2(downscaled);
+ downscaled = downscaling2(downscaled);
addOctave(downscaled);
}
}
@@ -79,22 +79,26 @@ class ScaleSpace
inline unsigned octave_count() { return pyramid.size(); }
inline unsigned gradient_count() { return pyramid[0].size(); }
+ const std::vector< std::vector<I> >& getPyramid() { return pyramid;
}
- private:
+ protected:
unsigned o;
unsigned g;
std::vector< std::vector<I> > pyramid;
+ ScaleSpace()
+ {
+ }
+
void addOctave(const I& original)
{
I blured;
std::vector<I> octave;
- //float variance = sqrt(2);
- float variance = 0.84089642;
+ float variance = sqrt(2);
for (unsigned i = 0; i < g; ++i)
{
- blured = vrac::blur(original, variance);
+ blured = blur(original, variance);
variance *= sqrt(2);
octave.push_back(blured);
}
diff --git a/milena/sandbox/anthony/new-implem/src/vrac.hh
b/milena/sandbox/anthony/new-implem/src/vrac.hh
new file mode 100644
index 0000000..7a0c8a5
--- /dev/null
+++ b/milena/sandbox/anthony/new-implem/src/vrac.hh
@@ -0,0 +1,323 @@
+#ifndef VRAC_HH
+# define VRAC_HH
+
+# include <mln/core/image/image2d.hh>
+# include <mln/data/all.hh>
+# include <mln/io/pgm/all.hh>
+# include <mln/io/ppm/save.hh>
+# include <mln/core/alias/neighb2d.hh>
+# include <mln/literal/all.hh>
+# include <mln/value/int_s8.hh>
+
+# include <cmath>
+# include <list>
+
+# include "matrix.hh"
+# include "keypoint.hh"
+
+//# include "keypoint.hh"
+//# include "matrix.hh"
+
+using namespace mln;
+
+// Set the gaussian kernel
+float *gaussian_kernel(float variance)
+{
+ unsigned index = 0;
+ float *kernel = new float[49];
+ Matrix matrix(7, 7);
+ float sum = 0;
+
+ for (int i = -3; i < 4; ++i)
+ {
+ for (int j = -3; j < 4; ++j)
+ {
+ kernel[index] = exp(- (i*i + j*j) / (2.0 * variance * variance) );
+ sum += kernel[index++];
+ }
+ }
+
+ sum = 1. / sum;
+
+ for (int i = 0; i < 49; ++i)
+ kernel[i] *= sum;
+
+ return kernel;
+}
+
+// Apply the convolution of the image by the kernel
+template<typename I>
+void convolve(const I& original, I& filtered, float *kernel)
+{
+ mln_piter(I) p(filtered.domain());
+ window2d win;
+
+ for (int i = -3; i < 4; ++i)
+ for (int j = -3; j < 4; ++j)
+ win.insert(i, j);
+
+ // Iterate through all image sites
+ for_all(p)
+ {
+ // Create the window around the site
+ mln_qiter(window2d) q(win, p);
+ float sum = 0;
+ int index = 0;
+
+ // Iterate through all window image sites
+ for_all(q)
+ {
+ if (filtered.has(q))
+ sum += original(q) * kernel[index++];
+ else
+ sum += 127 * kernel[index++];
+ }
+
+ filtered(p) = static_cast<int>(sum);
+ }
+}
+
+// Blur the image thanks to a convolution matrix
+template<typename I>
+I blur(const I& original, float variance)
+{
+ I filtered;
+ float *kernel = gaussian_kernel(variance);
+
+ initialize(filtered, original);
+ convolve(original, filtered, kernel);
+
+ return filtered;
+}
+
+float *upscalingTL_kernel()
+{
+ const static float one = 1.0 / 8.0;
+ const static float two = 2.0 / 8.0;
+ const static float three = 2.0 / 8.0;
+ const static float four = 3.0 / 8.0;
+
+ float *kernel = new float[4];
+
+ kernel[0] = one;
+ kernel[1] = two;
+ kernel[2] = three;
+ kernel[3] = four;
+
+ return kernel;
+}
+
+float *upscalingTR_kernel()
+{
+ const static float one = 2.0 / 8.0;
+ const static float two = 1.0 / 8.0;
+ const static float three = 3.0 / 8.0;
+ const static float four = 2.0 / 8.0;
+
+ float *kernel = new float[4];
+
+ kernel[0] = one;
+ kernel[1] = two;
+ kernel[2] = three;
+ kernel[3] = four;
+
+ return kernel;
+}
+
+float *upscalingBL_kernel()
+{
+ const static float one = 2.0 / 8.0;
+ const static float two = 3.0 / 8.0;
+ const static float three = 1.0 / 8.0;
+ const static float four = 2.0 / 8.0;
+
+ float *kernel = new float[4];
+
+ kernel[0] = one;
+ kernel[1] = two;
+ kernel[2] = three;
+ kernel[3] = four;
+
+ return kernel;
+}
+
+float *upscalingBR_kernel()
+{
+ const static float one = 3.0 / 8.0;
+ const static float two = 2.0 / 8.0;
+ const static float three = 2.0 / 8.0;
+ const static float four = 1.0 / 8.0;
+
+ float *kernel = new float[4];
+
+ kernel[0] = one;
+ kernel[1] = two;
+ kernel[2] = three;
+ kernel[3] = four;
+
+ return kernel;
+}
+
+template<typename I>
+unsigned upscalePixel(const I& original, int i, int j, int type)
+{
+ float *kernel;
+ window2d win;
+ mln_psite(I) p(i, j);
+ float value = 0;
+ unsigned index = 0;
+ int iStart = 0;
+ int jStart = 0;
+
+ if (type == 0)
+ {
+ kernel = upscalingTL_kernel();
+ iStart = -1;
+ jStart = -1;
+ }
+ else if (type == 1)
+ {
+ kernel = upscalingTR_kernel();
+ iStart = 0;
+ jStart = -1;
+ }
+ else if (type == 2)
+ {
+ kernel = upscalingBL_kernel();
+ iStart = -1;
+ jStart = 0;
+ }
+ else
+ {
+ kernel = upscalingBR_kernel();
+ iStart = 0;
+ jStart = 0;
+ }
+
+ for (int ii = iStart; ii < iStart + 2; ++ii)
+ for (int jj = jStart; jj < jStart + 2; ++jj)
+ win.insert(ii, jj);
+
+ mln_qiter(window2d) q(win, p);
+
+ for_all(q)
+ {
+ if (original.has(q))
+ {
+ value += original(q) * kernel[index];
+ }
+
+ ++index;
+ }
+
+ return (static_cast<int>(value));
+}
+// Downscale by 2 the image resolution
+template<typename I>
+I downscaling2(const I& original)
+{
+ mln_piter(I) p(original.domain());
+ window2d win;
+ int index = 0;
+
+ // Initialize the rescaled image
+ box2d size(original.nrows() / 2, original.ncols() / 2);
+ I reduced(size);
+
+ // Set the 2x2 window matrix
+ for (int i = 0; i < 2; ++i)
+ for (int j = 0; j < 2; ++j)
+ win.insert(i, j);
+
+ // Iterate through all image sites
+ for_all(p)
+ {
+ // Get 1/4 of total pixels
+ if (index % 2 == 0)
+ {
+ int i = (index % original.ncols()) / 2;
+ int j = (index / original.ncols()) / 2;
+ int count = 0;
+ int sum = 0;
+ mln_qiter(window2d) q(win, p);
+
+ // Iterate through all window image sites
+ for_all(q)
+ {
+ if (original.has(q))
+ {
+ sum += original(q);
+ ++count;
+ }
+ }
+
+ if (reduced.has(point2d(j, i)))
+ opt::at(reduced, j, i) = sum / count;
+ }
+
+ ++index;
+ }
+
+ return reduced;
+}
+
+// Upscale by 2 the image resolution
+template<typename I>
+I upscaling2(const I& original)
+{
+ box2d size(original.nrows() * 2, original.ncols() * 2);
+ I upscaled(size);
+
+ mln_piter(I) p(upscaled.domain());
+ int index = 0;
+
+ for_all(p)
+ {
+ int i = p.col();
+ int j = p.row();
+
+ if (i % 2 == 0 && j % 2 == 0) // Top left
+ opt::at(upscaled, i, j) = upscalePixel(original, i / 2, j / 2, 0);
+ else if (i % 2 == 0) // Bottom left
+ opt::at(upscaled, i, j) = upscalePixel(original, i / 2, j / 2, 2);
+ else if (j % 2 == 0) // Top right
+ opt::at(upscaled, i, j) = upscalePixel(original, i / 2, j / 2, 1);
+ else // Bottom right
+ opt::at(upscaled, i, j) = upscalePixel(original, i / 2, j / 2, 3);
+
+ ++index;
+ }
+
+ return upscaled;
+}
+
+
+template<typename C>
+void writeKeypoints(std::list<Keypoint> keypoints, C& black, C& copy)
+{
+ for (std::list<Keypoint>::iterator it = keypoints.begin(); it != keypoints.end();
++it)
+ {
+ unsigned o = it->getOctave();
+
+ if (o == 0)
+ {
+ mln_psite(C) p(it->getY() / 2, it->getX() / 2);
+ copy(p) = literal::red;
+ black(p) = literal::red;
+ }
+ else if (o == 1)
+ {
+ mln_psite(C) p(it->getY(), it->getX());
+ copy(p) = literal::red;
+ black(p) = literal::red;
+ }
+ else
+ {
+ mln_psite(C) p(it->getY() * pow(2, o-1) - (o-1), it->getX() * pow(2, o-1) -
(o-1));
+ copy(p) = literal::red;
+ black(p) = literal::red;
+ }
+ }
+}
+
+#endif /* ! VRAC_HH */
diff --git a/milena/sandbox/anthony/new-implem/src/vrac/vrac.hh
b/milena/sandbox/anthony/new-implem/src/vrac/vrac.hh
deleted file mode 100644
index fc9e3f2..0000000
--- a/milena/sandbox/anthony/new-implem/src/vrac/vrac.hh
+++ /dev/null
@@ -1,296 +0,0 @@
-#ifndef VRAC_HH
-# define VRAC_HH
-
-# include <mln/core/image/image2d.hh>
-# include <mln/data/all.hh>
-# include <mln/io/pgm/all.hh>
-# include <mln/io/ppm/save.hh>
-# include <mln/core/alias/neighb2d.hh>
-# include <mln/literal/all.hh>
-# include <mln/value/int_s8.hh>
-
-# include <cmath>
-
-# include "../matrix.hh"
-
-//# include "keypoint.hh"
-//# include "matrix.hh"
-
-using namespace mln;
-
-namespace vrac
-{
- // Set the gaussian kernel
- float *gaussian_kernel(float variance)
- {
- unsigned index = 0;
- float *kernel = new float[49];
- Matrix matrix(7, 7);
- float sum = 0;
-
- for (int i = -3; i < 4; ++i)
- {
- for (int j = -3; j < 4; ++j)
- {
- kernel[index] = exp(- (i*i + j*j) / (2.0 * variance * variance) );
- sum += kernel[index++];
- }
- }
-
- sum = 1. / sum;
-
- for (int i = 0; i < 49; ++i)
- kernel[i] *= sum;
-
- return kernel;
- }
-
- // Apply the convolution of the image by the kernel
- template<typename I>
- void convolve(const I& original, I& filtered, float *kernel)
- {
- mln_piter(I) p(filtered.domain());
- window2d win;
-
- for (int i = -3; i < 4; ++i)
- for (int j = -3; j < 4; ++j)
- win.insert(i, j);
-
- // Iterate through all image sites
- for_all(p)
- {
- // Create the window around the site
- mln_qiter(window2d) q(win, p);
- float sum = 0;
- int index = 0;
-
- // Iterate through all window image sites
- for_all(q)
- {
- if (filtered.has(q))
- sum += original(q) * kernel[index++];
- else
- sum += 127 * kernel[index++];
- }
-
- filtered(p) = static_cast<int>(sum);
- }
- }
-
- // Blur the image thanks to a convolution matrix
- template<typename I>
- I blur(const I& original, float variance)
- {
- std::cout << "variance: " << variance << std::endl;
- I filtered;
- float *kernel = gaussian_kernel(variance);
-
- initialize(filtered, original);
- convolve(original, filtered, kernel);
-
- return filtered;
- }
-
- float *upscalingTL_kernel()
- {
- const static float one = 1.0 / 8.0;
- const static float two = 2.0 / 8.0;
- const static float three = 2.0 / 8.0;
- const static float four = 3.0 / 8.0;
-
- float *kernel = new float[4];
-
- kernel[0] = one;
- kernel[1] = two;
- kernel[2] = three;
- kernel[3] = four;
-
- return kernel;
- }
-
- float *upscalingTR_kernel()
- {
- const static float one = 2.0 / 8.0;
- const static float two = 1.0 / 8.0;
- const static float three = 3.0 / 8.0;
- const static float four = 2.0 / 8.0;
-
- float *kernel = new float[4];
-
- kernel[0] = one;
- kernel[1] = two;
- kernel[2] = three;
- kernel[3] = four;
-
- return kernel;
- }
-
- float *upscalingBL_kernel()
- {
- const static float one = 2.0 / 8.0;
- const static float two = 3.0 / 8.0;
- const static float three = 1.0 / 8.0;
- const static float four = 2.0 / 8.0;
-
- float *kernel = new float[4];
-
- kernel[0] = one;
- kernel[1] = two;
- kernel[2] = three;
- kernel[3] = four;
-
- return kernel;
- }
-
- float *upscalingBR_kernel()
- {
- const static float one = 3.0 / 8.0;
- const static float two = 2.0 / 8.0;
- const static float three = 2.0 / 8.0;
- const static float four = 1.0 / 8.0;
-
- float *kernel = new float[4];
-
- kernel[0] = one;
- kernel[1] = two;
- kernel[2] = three;
- kernel[3] = four;
-
- return kernel;
- }
-
- template<typename I>
- unsigned upscalePixel(const I& original, int i, int j, int type)
- {
- float *kernel;
- window2d win;
- mln_psite(I) p(i, j);
- float value = 0;
- unsigned index = 0;
- int iStart = 0;
- int jStart = 0;
-
- if (type == 0)
- {
- kernel = upscalingTL_kernel();
- iStart = -1;
- jStart = -1;
- }
- else if (type == 1)
- {
- kernel = upscalingTR_kernel();
- iStart = 0;
- jStart = -1;
- }
- else if (type == 2)
- {
- kernel = upscalingBL_kernel();
- iStart = -1;
- jStart = 0;
- }
- else
- {
- kernel = upscalingBR_kernel();
- iStart = 0;
- jStart = 0;
- }
-
- for (int ii = iStart; ii < iStart + 2; ++ii)
- for (int jj = jStart; jj < jStart + 2; ++jj)
- win.insert(ii, jj);
-
- mln_qiter(window2d) q(win, p);
-
- for_all(q)
- {
- if (original.has(q))
- {
- value += original(q) * kernel[index];
- }
-
- ++index;
- }
-
- return (static_cast<int>(value));
- }
- // Downscale by 2 the image resolution
- template<typename I>
- I downscaling2(const I& original)
- {
- mln_piter(I) p(original.domain());
- window2d win;
- int index = 0;
-
- // Initialize the rescaled image
- box2d size(original.nrows() / 2, original.ncols() / 2);
- I reduced(size);
-
- // Set the 2x2 window matrix
- for (int i = 0; i < 2; ++i)
- for (int j = 0; j < 2; ++j)
- win.insert(i, j);
-
- // Iterate through all image sites
- for_all(p)
- {
- // Get 1/4 of total pixels
- if (index % 2 == 0)
- {
- int i = (index % original.ncols()) / 2;
- int j = (index / original.ncols()) / 2;
- int count = 0;
- int sum = 0;
- mln_qiter(window2d) q(win, p);
-
- // Iterate through all window image sites
- for_all(q)
- {
- if (original.has(q))
- {
- sum += original(q);
- ++count;
- }
- }
-
- if (reduced.has(point2d(j, i)))
- opt::at(reduced, j, i) = sum / count;
- }
-
- ++index;
- }
-
- return reduced;
- }
-
- // Upscale by 2 the image resolution
- template<typename I>
- I upscaling2(const I& original)
- {
- box2d size(original.nrows() * 2, original.ncols() * 2);
- I upscaled(size);
-
- mln_piter(I) p(upscaled.domain());
- int index = 0;
-
- for_all(p)
- {
- int i = p.col();
- int j = p.row();
-
- if (i % 2 == 0 && j % 2 == 0) // Top left
- opt::at(upscaled, i, j) = upscalePixel(original, i / 2, j / 2, 0);
- else if (i % 2 == 0) // Bottom left
- opt::at(upscaled, i, j) = upscalePixel(original, i / 2, j / 2, 2);
- else if (j % 2 == 0) // Top right
- opt::at(upscaled, i, j) = upscalePixel(original, i / 2, j / 2, 1);
- else // Bottom right
- opt::at(upscaled, i, j) = upscalePixel(original, i / 2, j / 2, 3);
-
- ++index;
- }
-
- return upscaled;
- }
-}
-
-#endif /* ! VRAC_HH */
diff --git a/milena/sandbox/anthony/src/main.cc b/milena/sandbox/anthony/src/main.cc
index fae3c64..59fa1ce 100644
--- a/milena/sandbox/anthony/src/main.cc
+++ b/milena/sandbox/anthony/src/main.cc
@@ -403,6 +403,7 @@ void find_min(T& min, const I& upper, const I& lower,
const P& pUpper, const P&
{
mln_niter(neighb2d) nUpper(c8(), pUpper);
mln_niter(neighb2d) nLower(c8(), pLower);
+ T tmp = min;
// Upper processing
for_all(nUpper)
@@ -413,6 +414,8 @@ void find_min(T& min, const I& upper, const I& lower,
const P& pUpper, const P&
for_all(nLower)
if (lower(nLower) < min)
min = lower(nLower);
+
+ std::cout << tmp << " >= " << min << std::endl;
}
// Find the maximum value in the upper and lower layers around p
@@ -421,6 +424,7 @@ void find_max(T& max, const I& upper, const I& lower,
const P& pUpper, const P&
{
mln_niter(neighb2d) nUpper(c8(), pUpper);
mln_niter(neighb2d) nLower(c8(), pLower);
+ T tmp = max;
// Upper processing
for_all(nUpper)
@@ -431,6 +435,8 @@ void find_max(T& max, const I& upper, const I& lower,
const P& pUpper, const P&
for_all(nLower)
if (lower(nLower) > max)
max = lower(nLower);
+
+ std::cout << tmp << " >= " << max << std::endl;
}
template<typename T, typename I, typename P>
@@ -473,30 +479,44 @@ bool hasEdgeResponse(const I& dog, const P& p, const T&
center)
// Build the extrema image
template<typename I, typename C>
void buildExtrema(C& extrema,
- const I& original,
std::vector< std::vector<I> >& dogSpace,
std::vector<Keypoint>& keypoints)
{
// Number of scales (gaussian meaning)
unsigned scales = dogSpace.at(0).size();
+ std::cout << "Scales: " << scales << std::endl
+ << "Resolutions: " << dogSpace.size() << std::endl;
+
// Iterates through all scales
- for (unsigned i = 0; i < scales; ++i)
+ for (unsigned i = 0; i < scales - 2; ++i)
{
+ std::cout << "scales ENTER" << std::endl;
+
// Iterates through all resolutions
- for (unsigned j = 1; j < dogSpace.size() - 1; ++j)
+ for (unsigned j = 1; j < dogSpace.size() - 2; ++j)
{
+ std::cout << "resolutions ENTER" << std::endl;
I current = dogSpace.at(j).at(i);
I upper = dogSpace.at(j+1).at(i);
I lower = dogSpace.at(j-1).at(i);
+ C debugDraw1 = data::convert(value::rgb8(), upper);
+ C debugDraw2 = data::convert(value::rgb8(), lower);
+
+
mln_piter(I) p(current.domain());
+ int first = 0;
+ int bound = 1000;
+ unsigned threshold = 0;
+
for_all(p)
{
value::int_u8 min = 255;
value::int_u8 max = 0;
value::int_u8 center = 0;
+ ++first;
mln_niter(neighb2d) n(c8(), p);
center = current(p);
@@ -507,26 +527,47 @@ void buildExtrema(C& extrema,
// Find the min and max in the current neighborhood (c8)
find_extremum(min, max, current, n);
- if (center <= min)
+ if ((unsigned) center + threshold < min)
{
+
// Find the min in other levels of the pyramid
find_min(min, upper, lower, pUpper, pLower);
- if (center < min && !hasEdgeResponse(current, p, center))
+ if ((unsigned) center + threshold < min && !hasEdgeResponse(current,
p, center))
{
+ std::cout << center << " < " << min <<
std::endl;
+
+ if (first > bound)
+ {
+ debugDraw1(pUpper) = literal::yellow;
+ debugDraw2(pLower) = literal::yellow;
+
+
+ ++first;
+ }
mln_psite(I) pOriginal(p.row() * pow(2, (j-1)),
p.col() * pow(2, (j-1)));
extrema(pOriginal) = literal::red;
keypoints.push_back(Keypoint(p.row(), p.col(), i, j, false));
}
}
- else if (center >= max)
+ else if (center > (unsigned) max + threshold)
{
// Find the max in other levels of the pyramid
find_max(max, upper, lower, pUpper, pLower);
- if (center > max && !hasEdgeResponse(current, p, center))
+ if (center > (unsigned) max + threshold && !hasEdgeResponse(current,
p, center))
{
+ std::cout << center << " > " << max <<
std::endl;
+
+ if (first > bound)
+ {
+ debugDraw1(pUpper) = literal::yellow;
+ debugDraw2(pLower) = literal::yellow;
+
+ ++first;
+ }
+
mln_psite(I) pOriginal(p.row() * pow(2, (j-1)),
p.col() * pow(2, (j-1)));
extrema(pOriginal) = literal::red;
@@ -534,6 +575,8 @@ void buildExtrema(C& extrema,
}
}
}
+ io::ppm::save(debugDraw1, "debug_upper.ppm");
+ io::ppm::save(debugDraw2, "debug_lower.ppm");
}
}
}
@@ -661,6 +704,7 @@ void discardLowContrastKeypoints(const std::vector<
std::vector<I> >& dogSpace,
C& extrema)
{
Keypoint k_old(0, 0, 0, 0, true);
+ bool hasMoved = false;
for (unsigned i = 0; i < keypoints.size(); ++i)
{
@@ -681,48 +725,36 @@ void discardLowContrastKeypoints(const std::vector<
std::vector<I> >& dogSpace,
if (isMajorOffset)
{
- std::cout <<
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
<< std::endl;
- std::cout << "First order matrix:" << std::endl;
- firstOrder.print();
-
- std::cout << "Second order matrix:" << std::endl;
- secondOrder.print();
-
- std::cout << "Offset: " << std::endl;
- x.print();
-
- std::cout << "k_old: " << k_old.getI() << "
" << k_old.getJ() << std::endl;
- std::cout << "k: " << k.getI() << " "
<< k.getJ() << std::endl;
- bool hasMoved = k.add(x, k_old);
- std::cout << "k++: " << k.getI() << " "
<< k.getJ()
- << "\thasMoved: " << hasMoved <<
std::endl;
+ hasMoved = k.add(x, k_old);
point2d p(k.getI(), k.getJ());
- std::cout << "Final point: " << extrema.domain() <<
"\t" << p << std::endl;
if (hasMoved && extrema.has(p)
&& p.row() >= 0 && p.row() < geom::max_row(extrema)
&& p.col() >= 0 && p.col() < geom::max_col(extrema))
{
- std::cout << "VALID" << std::endl;
- extrema(p) = literal::red;
+ // extrema(p) = literal::red;
k_old = keypoints.at(i);
keypoints.at(i--) = k;
}
-
- std::cout << std::endl;
}
else
{
point2d p(k.getI(), k.getJ());
- extrema(p) = literal::red;
+
+ if (hasMoved)
+ extrema(p) = literal::green;
+ else
+ extrema(p) = literal::red;
+
+ hasMoved = false;
}
}
}
}
// Main entry point
-int main(int argc, char** argv)
+int main(void)//int argc, char** argv)
{
typedef image2d<value::int_u8> I;
typedef image2d<value::rgb8> C;
@@ -736,7 +768,7 @@ int main(int argc, char** argv)
C extrema, improved;
bool black = true;
- io::pgm::load(original, "images/lena.pgm");
+ io::pgm::load(original, "images/keith.pbm");
if (black)
{
@@ -752,7 +784,7 @@ int main(int argc, char** argv)
// Localization
buildScaleSpace(scaleSpace, original, octave_level, blur_level);
buildDifferenceOfGaussianSpace(scaleSpace, dogSpace);
- buildExtrema(extrema, original, dogSpace, keypoints);
+ buildExtrema(extrema, dogSpace, keypoints);
discardLowContrastKeypoints(dogSpace, keypoints, improved);
// Processing
diff --git a/milena/sandbox/anthony/test-opencv/Makefile
b/milena/sandbox/anthony/test-opencv/Makefile
deleted file mode 100644
index 1634b35..0000000
--- a/milena/sandbox/anthony/test-opencv/Makefile
+++ /dev/null
@@ -1,19 +0,0 @@
-.PHONY: cv
-
-CCACHE=
-CXX=g++
-SRC=main.cpp
-LIBS=-L/opt/local/include -lopencv_highgui -lopencv_core -lopencv_features2d
-lopencv_nonfree -D_GNU_SOURCE
-OUTPUT=cv
-CLEAN=${OUTPUT}
-
-all: cv
-
-cv:
- ${CCACHE} ${CXX} -O2 ${LIBS} ${SRC} -o ${OUTPUT}
-
-debug:
- ${CCACHE} ${CXX} -g -ggdb -O0 ${LIBS} ${SRC} -o ${OUTPUT}
-
-clean:
- rm -rf ${CLEAN}
diff --git a/milena/sandbox/anthony/test-opencv/keith.pbm
b/milena/sandbox/anthony/test-opencv/keith.pbm
deleted file mode 100644
index b0997a3..0000000
Binary files a/milena/sandbox/anthony/test-opencv/keith.pbm and /dev/null differ
diff --git a/milena/sandbox/anthony/test-opencv/main.cpp
b/milena/sandbox/anthony/test-opencv/main.cpp
deleted file mode 100644
index c91a6c3..0000000
--- a/milena/sandbox/anthony/test-opencv/main.cpp
+++ /dev/null
@@ -1,66 +0,0 @@
-#include <iostream>
-#include <vector>
-
-#include "opencv2/core/core.hpp"
-#include "opencv2/features2d/features2d.hpp"
-#include "opencv2/nonfree/features2d.hpp"
-#include "opencv2/highgui/highgui.hpp"
-
-
-// MAIN ENTRY POINT
-int main(int argc, char* argv[])
-{
- const cv::Mat input = cv::imread("tongue.pbm");
- cv::SiftFeatureDetector detector;
- std::vector<cv::KeyPoint> keypoints;
- detector.detect(input, keypoints);
-
- cv::Mat output;
- cv::drawKeypoints(input, keypoints, output);
- cv::imwrite("sift.jpg", output);
-
- return 0;
-
-
-
- // std::string inputPath, inputPath2, toolchainPath, outputPath;
- // std::deque<ourfilters::eFilter> toolchain;
- // bool* multithread = new bool(true);
-
- // int validCommandLine = getCommandLine(argc, argv, inputPath,
- // inputPath2,
- // toolchainPath,
- // outputPath,
- // multithread);
-
- // bool twoSources = inputPath2.length() > 0;
-
- // if (!validCommandLine)
- // return errors::invalidCommandLine();
-
- // parser::getSteps(toolchainPath, toolchain);
-
- // if (!(*multithread))
- // {
- // std::cout << "single-threader" << std::endl;
- // tbb::task_scheduler_init intit(1);
- // }
-
- // tbb::pipeline pipeline;
-
- // Picker picker(inputPath, inputPath2, twoSources);
- // pipeline.add_filter(picker);
-
- // ApplyFilters applicator(toolchain);
- // pipeline.add_filter(applicator);
-
- // Writer writer(outputPath,
- // picker.get_codec(),
- // picker.get_fps(),
- // picker.get_dimensions());
- // pipeline.add_filter(writer);
-
- // pipeline.run(128);
-
- // return 0;
-}
diff --git a/milena/sandbox/anthony/test-opencv/tongue.pbm
b/milena/sandbox/anthony/test-opencv/tongue.pbm
deleted file mode 100644
index a85a0f6..0000000
--- a/milena/sandbox/anthony/test-opencv/tongue.pbm
+++ /dev/null
@@ -1,29 +0,0 @@
-P5
-512
-512
-255
-���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������õ���}yusqpppqtx~����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ǯ��xrpsuwwxxyyyyyyxxwuqr|��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ϰ�|squwxxyyyyyyyyyyyyyyyyyyywsr���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������̣�tquwyyyyyyyyyyyyyyyyyyyyyyyyyyyxuq����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������֪�srwxyyxyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyuq��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������vqvxyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyr|�������������������������������������������������������ѻ��~ytqpqrssssrqppsw}��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������封qtxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyvt��������������������������������������������������ݻ�upsvwxxyyyyyyyyyyyyyxwvspv���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������|qvyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyxq����������������������������������������������ᶍxptwxyyyyyyyyyyyyyyyyyyyyyyyyxvrt����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{qwyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyp�������������������������������������������ʗzquxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxuq~�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������~pwyyyyyyyyyyyyyyyyyyyyyyyyyxwutsrrstvwyyyyyyyyyyyyyyyyxq���������������������������������������ssxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyywq��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������̇qwyyyyyyyyyyyyyyyyyyyyyyyywrry���������{rswxyyyyyyyyyyyyywr������������������������������������﵁quyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyvq�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������styyyyyyyyyyyyyyyyyyyyyyyxss��������������Ý|qvyyyyyyyyyyyyyvy������������������������������������qvyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyr��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������~rxyyyyyyyyyyyyyyyyyyyyyyxrw������������������赂qwyyyyyyyyyyyyt��������������������������������ϋqvyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyuu�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rvyyyyyyyyyyyyyyyyyyyyyyysv�����������������������zsyyyyyyyyyyyyq������������������������������styyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyywq��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Մrxyyyyyyyyyyyyyyyyyyyyyywr��������������������������ޑqxyyyyyxyyyywv����������������������������~rxyyyyyyyyyyyyyxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxp�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������vtyyyyyyyyyyyyyyyyyyyyyyys|������������������������������swyyyyxyyyyys��������������������������qvyyyyxyyyyyyyyyyxxyyxyyyyyyxwvtqprrppsuwxyyyyyyyyyyyyyyyyyxq�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qwyyyyyyyyyyyyyyyyyyyyyyxq���������������������������������uvyyxyyyyyyxr�����������������������ˀryyyyyyyyyyyyyyyyyyyyyxyyywvqs|�����þ����vquwyyyyyyyyyyyyyyyxr��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyyyyyyyywr�����������������������������������vwyxyyyyyyyu�����������������������tuyyyyyyyyyyyyyyyyyyyyyyyxvqx���������������Ը�yqvyyyyyyyyyyyyyyvv������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyyyyyyyyyyyyyyyyyyyuw�������������������������������������sxyyyyyyyyxr��������������������qxyyyyyyyyyyyyyyxxyyyyyyxss���������������������ఃqwyyyyyyyyyyyyyt����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������݀syyyyyyyyyyyyyyyyyyyyyyyu{���������������������������������������qyyyyyyyyys������������������ڄryyyyyyyyyyyyyyyyyyyyyyxrw��������������������������~ryyyyyyyyyyyyyq���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������}tyyyyyyyyyyyyyyyyyyyyyyyu}�����������������������������������������syyyyyxyyxu�����������������ytyyyyyyyyyyyyyyyyyyyyyysw������������������������������rwyyyyyyyyyyyxr�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������}tyyyyyyyyyyyyyyxyyyyyyyyu������������������������������������������zwyyyyyyyyr����������������uuyyyyyyyyyyyyyyyyyyyyyus����������������������������������vvyyyyyyyyyyyu������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������~tyyyyyyyyyyyyyyyxyyyyyyyt}��������������������������������������������qyyyyyyyyw~��������������rwyyyyyyyyyyyyyyyyyyyyxr�������������������������������������xvyyyyyyyyyyyq����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������syxyyyyyyyyyyyyyyyyyyyyyww���������������������������������������������}wyyyyyyyyq�������������qxyyyyyyyyyyyyyyyyyyyywr���������������������������������������wwyyyyyyyyyyxv��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyyyyyyxyyyyyyyyyyyyyq�����������������������������������������������qyyyyyyyys������������pyyyyyyyyyyyyyyyyyyyyyux�����������������������������������������ryyyyyyyyyyys��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyxyyyyyyyyyyyyyyyyyyys������������������������������������������������uxyyyyyyyw}����������pyyyyyyyyyyyyyyyyyyyyyt}�������������������������������������������ryyyyyyyyyyxt������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyyyyyyyyyxu������������������������������������������������wyyyyyyyxr���������pxyyyyyyyyyyyyyyyyyyyyv}��������������������������������������������|wyyyyyyyyyys�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������txyyyyyyyyyyyyyyyyyyyyyyyyr��������������������������������������������������vyyyyyyyyr��������qyyyyyyyyyyyyyyyyyyyyywy����������������������������������������������qyyyyyyyyyyxt���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������vyyyyyyyyyyyyyyyyyyyyyyyyxv��������������������������������������������������uyyyyyyyyu�������qyyyyyyyyyyyyyyyyyyyyyyr�����������������������������������������������yxyyyyyyyyyys���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyyyyyyyyyyyyyyyyyyyyyt��������������������������������������������������vyyyyyyyyxy�����qxyyyyyyyyyyyyyyyyyyyyyt�������������������������������������������������uyyyyyyyyyyxw�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyyyyyyyyyyyq��������������������������������������������������xxyyyyyyyyyq����swyyyyyyyyyyyyyyyyyyyyyxr�������������������������������������������������pyyyyyyyyyyyr������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{vyyyyyyyyyyyyyyyyyyyyyyyyyxy��������������������������������������������������qyyyyyyyyyyq���uwyyyyyyyyyyyyyyyyyyyyyyw~�������������������������������������������������ryyyyyyyyyyyw~�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyyyyyyyyyyyyyyyyyyyyyyv���������������������������������������������������uyyyyyyyyyyu��|vyyyyyyyyyyyyyyyyyyyyyyyw��������������������������������������������������vxyyyyyyyyyyyq����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rxyyyyyyyyyyyyyyyyyyyyyyyyyyu��������������������������������������������������tyyyyyyyyyyyy|�vyyyyyyyyyyyyyyyyyyyyyyyyw}�������������������������������������������������wxyyyyyyyyyyyt����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������tyyyyyyyyyyyyyyyyyyyyyyyyyyyv��������������в����������������������������������tyyyyyyyyyyyyxwyyyyyyyyyyyyyyyyyyyyyyyyyxs�������������������������������������������������tyyxyyyyyyyyyxv��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyyyyyyyyyyyyyxw����������ȣ�uqtwvsqy���������������������������qyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyys�������������������������������������������������qyyxyyyyyyyyyyq�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������vyyyyyyyyyyyyyyyyyyyyyyyyyyyyywz�����Ҽ�~srvxyyyyyyxsr������������������������txyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyys��������������ֳ�yz����������������������������tyyyyyyyyyyyyyv�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyywry��}vqtwxyyyyyyyyyyyxtr���������������������uwyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyvy����������ܲ�vquwxwup�������������������������wxyyyyyyyyyyyyyxs�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ywyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyxwwwxyyyyyyyyyyyyyyyyyxts�����������������rxyyyyyyyyyyyyyyyxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyvu������ն�xpvxyyyyyyys{�����������������������syyyyyyyyyyyyyyyr�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyss�������������ryyyyyyyyyyyyyyyyyxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxrx����wquwyyyyyyyyyyyuw���������������������ryyyyyyyyyyyyyyyyw���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uxyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyytr��������˪�rvyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxutuvxyyyyyyyyyyyyyyyvu�������������������uxyyyyyyyyyyyyyyyyyr���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������syyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyywrs|���}tqvyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyws����������������rwyyyyyyyyyyyyyyyyyyr��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyywvvvwxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxq�������������~rxyyyyyyyyyyyyyyyyyyyw�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������tyyyyyyyyyyyyyyyyyyyxyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyytu�������Ų�zrwyyyyyyyyyyyyyyyyyyyyyxs������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxtqx~~|wrquxyyyyyyyyyyyyyyyyyyyyyyyyr�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������vyyyyyyyyxyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyxwwwxyyyyyyxyyyyyyyyyyyyyyyyyyyyyw�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyt���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zwyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyq���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyv��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uxyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxv�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������syyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyp������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyyyyyyyyyyyxyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyu�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxy����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyxyyyyyyyyyq���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������|wyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyt���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyw{�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxq�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������tyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyys������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qxyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyw����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������vyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxr����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyr���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uxyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyw���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������tyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyxs�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyr������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������vyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxyyyyyyyyyyyyyw�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyxyyyyyyyyyyyyyyr����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������txyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyys���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������tyyxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyx{��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyq�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������vxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyu�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������tyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxu�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyq����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������vwyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyw���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������tyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyxyyyyyq��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxwvtrpqrrppruvxyyyyyyyyyyyyxyyyyyyyyyyyyyxyyyyyyyyyyyxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxyyyyyyyyyyyyu�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������txyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyxuqs|������������xqswyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxs�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyxtqz����������������۾�}qtxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyys�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyuqz����������������������꿏tsxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxv���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxss����������������������������љusyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyr��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������xwyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyywrw��������������������������������Ԕruyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxxwwwwxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyywx������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������tyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyywqz������������������������������������Ƅqxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyywvtqptwz|}}|yvspqtvxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxyyyyyyyyyyyyyyyyyyyyyyyyyyr������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyxxyyyyyyyyyyyyyyyyyyyywr{����������������������������������������utyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxvqs{�������������Ⱦ���yqswyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxw����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyxxyyyyyyyyyyyyyyyyyyxry�������������������������������������������Ӈqxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxtqy��������������������������ssxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyr���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������vwyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyysu�����������������������������������������������svyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxuqz�����������������������������țyqwyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxu�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������~uyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxuq���������������������������������������������������~ryyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyywqv�����������������������������������~qwyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyys������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������syxyyyyyyyyyyyyyyyyyyyyyyyyyyyywq������������������������������������������������������pxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyxtq���������������������������������������{sxyyyyyyyyyyyyyyyyyyyyyyxyyyxyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyr�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyyyyyyyyyyyyxyxry���������������������������������������������������������utyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyxst��������������������������������������������rvyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyv����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyxyyyyyyxyyyyyyyyyyyyyyyyyyyyur�����������������������������������������������������������҄rxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxvqx�����������������������������������������������ƀsyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyq��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rxyyxyyyyyxyyyyyyyyyyyyyyyyyy}v���������������������������������������������������������������rvyyyyyyyyyyxyyyyyyyyyyyyyyyyyyup���������������������������������������������������qxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxt������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������twyyyyyyyyyyyyyyyyyyyyyyyyyyz�b�����������������������������������������������������������������ŀrxyyyyyyyyxyyyyyyyyyyyyyyyxsr��������������������������������������������������������swyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyt�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������wvyyyyyyyyyyyyxyyyyyxyyyyyyy~{Ma������������������������������������������������������������������usyyyyyyyyyyyyyyyyyyyyxvqx�����������������������������������������������������������vvyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyq���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{uyyyyyyyyyyyxyyyyyyyyyyyyy{�g%���������������������������������������������������������������������������������������������������������������������������������������������������������zuyyyyyyyyyyyyyyyyyyyyyyyr0--�����������������������������pxyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyut�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyz�Mxyyyyyyvs��������������������̑sq9--M}|xyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyym-
"(09EO]lv{�|zyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyz|��J-)Jgvz~��~}}|||{{{{{{{zzzzyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy{~>-S�zyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyr|������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������syyyyyyyyyyyyyyyyyyyyyyyyyyy~_-=o�|yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyy}s"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy�Z yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyr}������������{wyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyy�W--a�yyxxyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyytz����������������sxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyeyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxyyyyyyyyyyyyyyyyyyyyyyxr�������������������syyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyz<-eyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyu���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������|vyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyq��������������������~vyyyyyyyyyyyyy:yyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyq����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyxt���������������������ryyyyyyyyyyyyyyWyyyyyyyyyyyyyyyyyyyyyyyyyyyyys����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uxyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyr����������������������uwyyyyyyyyyyyyyy6yyyyyyyyyyyyxxyyyyyyyyyyyyq����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyr�����������������������ryyyyyyyyyyyyyyy�Byyyyyyyyyyyyyyyyyyyyyyyq����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyyyyyyyyyyyyyyyyyyyyyyyyyww�����������������������syyyyyyyyyyyyyyy{q-`~xyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyys�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyyyyyyyyyyyyyyyyyyyyyyyyxx�����������������������vxxxyyyyyyyyyyyyyy{n
--m|yyyyyxyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyt��������������������{xyyyyyyyyyyyyyyyyyyyyyyyyyyyyzv~yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyxw���������������������ryyyyyyyyyyyyyyyyyyyyyyyyyyyy|m yyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyv�����������������������ryyyyyyyyyyyyyyyyyxyyyyyyyyy|m
-yzyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyxyyyu����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������wyyyyyyyyyyxyyyyyyyyyyyxyyyyyyyyyu�����������������yxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxt���������������������������wyyyyyyyyyyyyyyyyyyyyyyxy|iyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyq��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������syyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyxwxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxt�����������������������������syyyyyyyyyyyyyyyyyyyyyyyy}dyyyyyyyyyyyyyyyyyyyyyyyyyyyywy��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyw{������������������������������syyyyyyyxyyyyyyyyyyyyyyyyMyyyyyyyyyyyyyyyyyyxyyyyr����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxyyyyyyyys�������������������������������vyyyyyyyyyyyyyyyyyyyyyyyzzyyyyyyyyyyyyyyyxp�����������������������������������`--�-����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ryyyyyyyyyyyyyyyyyyyyyyxxyyyyyyyyyyyyyyxyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyZ--{�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������qyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy|w����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyz�D-d����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zuyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyy�Z -Z����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyq%-������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zrxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy|g,->��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������宀qtxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyz}k<����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ø����~zwusqqppppoppqrtvz~�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
\ No newline at end of file
--
1.7.10.4