Olena-patches
Threads by month
- ----- 2025 -----
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
September 2011
- 7 participants
- 173 discussions

last-svn-commit-889-gf4a851e Correct some problems with lines detection and improve paragraphs detection. Add remote debug for clean.hh
by Raphael Boissel 08 Sep '11
by Raphael Boissel 08 Sep '11
08 Sep '11
---
.../code/my/debug/remote/document_remote.hh | 146 ++++++++++++++++++++
scribo/sandbox/raphael/code/my/debug/remote/lib.hh | 34 +++++
scribo/sandbox/raphael/code/my/document/clean.hh | 139 +++++++++++++++++--
.../sandbox/raphael/code/my/document/document.hh | 140 ++++++++++++++++++-
.../sandbox/raphael/code/my/document/separator.hh | 45 ++++++-
scribo/sandbox/raphael/code/my/runtime/lib.hh | 6 +
scribo/sandbox/raphael/code/test.cc | 37 +++++-
7 files changed, 523 insertions(+), 24 deletions(-)
create mode 100644 scribo/sandbox/raphael/code/my/debug/remote/document_remote.hh
create mode 100644 scribo/sandbox/raphael/code/my/debug/remote/lib.hh
diff --git a/scribo/sandbox/raphael/code/my/debug/remote/document_remote.hh b/scribo/sandbox/raphael/code/my/debug/remote/document_remote.hh
new file mode 100644
index 0000000..24b0889
--- /dev/null
+++ b/scribo/sandbox/raphael/code/my/debug/remote/document_remote.hh
@@ -0,0 +1,146 @@
+#ifndef MLN_DEBUG_DOCUMENT_REMOTE
+#define MLN_DEBUG_DOCUMENT_REMOTE
+#include <my/document/document.hh>
+using namespace mln;
+namespace mymln
+{
+ namespace document
+ {
+ namespace debug
+ {
+ template<typename Label, typename Float, typename Data>
+ class remote
+ {
+ typedef document< Label, Float, Data > doc;
+ public:
+ remote()
+ {
+ program_node = mln::util::array<string>(0);
+ program_argument = mln::util::array<string>(0);
+ program_argument2 = mln::util::array<string>(0);
+ program_instruction = mln::util::array<string>(0);
+ doc_b_pp_fun = map<string, bool(*)(const doc&, const point2d&, const point2d&) >();
+ doc_b_p_fun = map<string, bool(*)(const doc&, const point2d&) >();
+ }
+ void load(const char* file)
+ {
+
+ fstream filestream(file, fstream::in | fstream::out);
+ std::string Buffer = "";
+ bool flag = !getline(filestream, Buffer).eof();
+ int L = 0;
+ bool remain = flag;
+ bool fun_mask_set = false;
+
+ while(remain)
+ {
+ if(!flag){remain = false;}
+ int N = 0;
+ std::string Node = "";
+ std::string Instr = "";
+ std::string Arg = "";
+ std::string Arg2 = "";
+ while( N < Buffer.length() && (Buffer[N] == ' ' || Buffer[N] == '\t') && Buffer[N] != ';'){N++;} // trim
+ while(N < Buffer.length() && Buffer[N] != ' ' && Buffer[N] != '\t' && Buffer[N] != ';' && Buffer[N] != ':'){Instr += Buffer[N]; N++;}
+ if(Buffer[N] != ':')
+ {std::cout << "#REMOTE DEBUG SCRIPT ERROR : THE NODE HAS NOT BEEN SPECIFIED" << std::endl; return;}
+ while( N < Buffer.length() && (Buffer[N] == ' ' || Buffer[N] == '\t') && Buffer[N] != ';'){N++;} // trim
+ while(N < Buffer.length() && Buffer[N] != ' ' && Buffer[N] != '\t' && Buffer[N] != ';'){Instr += Buffer[N]; N++;}
+ while(N < Buffer.length() && (Buffer[N] == ' ' || Buffer[N] == '\t') && Buffer[N] != ';'){N++;} // trim
+ while(N < Buffer.length() && Buffer[N] != ' ' && Buffer[N] != '\t' && Buffer[N] != ';'){Arg += Buffer[N]; N++;}
+ while(N < Buffer.length() && (Buffer[N] == ' ' || Buffer[N] == '\t') && Buffer[N] != ';'){N++;} // trim
+ while(N < Buffer.length() && Buffer[N] != ' ' && Buffer[N] != '\t' && Buffer[N] != ';'){Arg2 += Buffer[N]; N++;}
+ if(Instr.length() != 1 || (Instr[0] != 'v' && Instr[0] != 'q'))
+ {
+ if(Instr.length() != 2 || (Instr[0] != 'v' && Instr[0] != 'q') || (Instr[1] != 'v' && Instr[1] != 'q'))
+ {
+ if(fun_mask_set)
+ {
+ std::cout << "#REMOTE DEBUG SCRIPT ERROR : INVALID NODE" << std::endl; return;
+ }
+ else
+ {
+ fun_mask_set = true;
+ fun_mask = Node;
+ }
+ }
+ }
+ program_node.append(Node);
+ program_instruction.append(Instr);
+ program_argument.append(Arg);
+ program_argument2.append(Arg2);
+
+ }
+
+ filestream.close();
+
+ }
+ inline void filter(doc& d)
+ {
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask =
+ (!fun_mask.compare("all_letters"))?d.fun_mask_all_letters()
+ :(!fun_mask.compare("letters"))?d.fun_mask_letters()
+ :(!fun_mask.compare("alone_letters"))?d.fun_mask_letters()
+ :(!fun_mask.compare("start_end_lines"))?d.fun_mask_start_end_lines()
+ :(!fun_mask.compare("start_lines"))?d.fun_mask_start_lines()
+ :(!fun_mask.compare("end_lines"))?d.fun_mask_start_lines()
+ :(!fun_mask.compare("all"))?d.fun_mask_all()
+ :d.fun_mask_all(); // DEFAULT VALUE
+
+
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ bool _VTRUE = true;
+ for(int N = 0; N < program_instruction.size(); N++)
+ {
+ if(!program_node[N].compare("v"))
+ { _VTRUE = _VTRUE && doc_b_p_fun[program_instruction[N]](d, q); }
+ }
+ if(!_VTRUE){continue;}
+ for_all(q)
+ {
+ bool _TRUE = true;
+ for(int N = 0; N < program_instruction.size(); N++)
+ {
+ if(!program_node[N].compare("vq"))
+ { _TRUE = _TRUE && doc_b_pp_fun[program_instruction[N]](d, v, q); }
+ else if(!program_node[N].compare("qv"))
+ { _TRUE = _TRUE && doc_b_pp_fun[program_instruction[N]](d, (point2d)q, v); }
+ else if(!program_node[N].compare("q"))
+ { _TRUE = _TRUE && doc_b_p_fun[program_instruction[N]](d, (point2d)q); }
+ }
+
+ if(_TRUE)
+ {d.debug_draw_line_green_buffer(q,v);}
+ else
+ {d.debug_draw_line_red_buffer(q,v);}
+ }
+ }
+ }
+ inline void add_function_pp(string name, bool(*ptr)(const doc&, const point2d&, const point2d&) )
+ {
+ doc_b_pp_fun[name] = ptr;
+ }
+ inline void add_function_p(string name, bool(*ptr)(const doc&, const point2d&) )
+ {
+ doc_b_p_fun[name] = ptr;
+ }
+ private:
+ map<string, bool(*)(const doc&, const point2d&, const point2d&) > doc_b_pp_fun;
+ map<string, bool(*)(const doc&, const point2d&) > doc_b_p_fun;
+ mln::util::array<std::string> program_node;
+ mln::util::array<std::string> program_instruction;
+ mln::util::array<std::string> program_argument;
+ mln::util::array<std::string> program_argument2;
+ std::string fun_mask;
+ };
+ }
+ }
+}
+#endif
\ No newline at end of file
diff --git a/scribo/sandbox/raphael/code/my/debug/remote/lib.hh b/scribo/sandbox/raphael/code/my/debug/remote/lib.hh
new file mode 100644
index 0000000..97db857
--- /dev/null
+++ b/scribo/sandbox/raphael/code/my/debug/remote/lib.hh
@@ -0,0 +1,34 @@
+#ifndef MLN_DEBUG_DOCUMENT_REMOTE_LIB
+#define MLN_DEBUG_DOCUMENT_REMOTE_LIB
+#include <my/debug/remote/document_remote.hh>
+using namespace mln;
+namespace mymln
+{
+ namespace document
+ {
+ namespace debug
+ {
+
+ template<typename L, typename F, typename D>
+ bool allign_V(const document<L,F,D>& doc, const point2d& A,const point2d& B){return doc.allign_V(A,B);}
+ template<typename L, typename F, typename D>
+ bool allign_V_line(const document<L,F,D>& doc, const point2d& A,const point2d& B){return doc.allign_V_line(A,B);}
+ template<typename L, typename F, typename D>
+ bool allign_V_line_strict(const document<L,F,D>& doc, const point2d& A,const point2d& B){return doc.allign_V_line_strict(A,B);}
+ template<typename L, typename F, typename D>
+ bool allign_V_large(const document<L,F,D>& doc, const point2d& A,const point2d& B){return doc.allign_V_large(A,B);}
+
+
+ template<typename L, typename F, typename D>
+ void load(const remote<L,F,D>& rem)
+ {
+ typedef document< L, F, D > doc;
+ rem.add_function_pp("allign_V_large", &(allign_V_large));
+ rem.add_function_pp("allign_V_line_strict", &(allign_V_line_strict));
+ rem.add_function_pp("allign_V_line", &(allign_V_line));
+ rem.add_function_pp("allign_V", &(allign_V));
+ }
+ }
+ }
+}
+#endif
\ No newline at end of file
diff --git a/scribo/sandbox/raphael/code/my/document/clean.hh b/scribo/sandbox/raphael/code/my/document/clean.hh
index 9304dcc..cfff068 100644
--- a/scribo/sandbox/raphael/code/my/document/clean.hh
+++ b/scribo/sandbox/raphael/code/my/document/clean.hh
@@ -196,7 +196,20 @@ namespace mymln
doc.add_to_line_link(v, q);
doc.add_letter_coerce(q);
}
+ else if(
+ doc.is_start_end_line(v) &&
+ doc.allign_base_line(v, q) &&
+ doc.allign_small_item(v,q) &&
+ !doc.contain_alone_letter(v) &&
+ doc.allign_proximity_large_left(v,q) &&
+ doc.letter_ratio_YX(q) >= 1
+ )
+ {
+ doc.debug_draw_line_green_buffer(v,q);
+ doc.add_to_line_link(v,q);
+ }
}
+
}
}
mask = doc.fun_mask_alone_letters();
@@ -380,9 +393,12 @@ namespace mymln
{
for_all(q)
{
- if(doc.same_line(q,v)){continue;}
+
+ if(doc.same_line(q,v)){ continue;}
+
if(doc.contain_alone_letter(q))
{
+
if(doc.allign_V(q,v) && doc.allign_proximity_strict(q, v) && doc.allign_size_height(q, v))
{
doc.add_to_line_link(v, q);
@@ -391,7 +407,8 @@ namespace mymln
}
else if(doc.contain_line(q))
- {
+ {
+
if(doc.allign_V(q,v) && doc.allign_size_height_line_strict(q, v) && doc.allign_proximity_strict(q,v))
{
doc.add_to_line_link(v, q);
@@ -399,12 +416,13 @@ namespace mymln
}
else if(doc.allign_size_height_line(q,v))
{
+
if(doc.allign_proximity_line(q,v) && doc.allign_V_line_strict(q, v))
{
doc.add_to_line_link(v, q);
doc.debug_draw_line_green_buffer(v,q);
}
- else if(doc.line_influence_reciprocal(q, v) && doc.allign_V_line_strict(q, v))
+ else if(doc.line_influence_reciprocal(q, v) && doc.allign_V_line_strict(q, v) && doc.allign_size_height_line(q,v))
{
doc.add_to_line_link(v, q);
doc.debug_draw_line_red_buffer(v,q);
@@ -419,15 +437,22 @@ namespace mymln
doc.allign_proximity_line(v,q)
)
{
- doc.debug_draw_line_orange_buffer(v,q);
doc.debug_draw_box_red_buffer(v);
doc.debug_draw_box_green_buffer(q);
doc.add_to_line_link(v, q);
}
+
+ else if(doc.allign_V(q,v) && doc.allign_proximity_strict(q,v))
+ {
+ doc.debug_draw_line_orange_buffer(q,v);
+ doc.add_to_line_link(v, q);
+ }
}
+
}
+
}
}
}
@@ -491,7 +516,7 @@ namespace mymln
{
if(
doc.allign_H_large(q,v) &&
- doc.allign_size_height_line(q, v) &&
+ doc.allign_size_height_line_medium(q, v) &&
doc.allign_proximity_V_line(v,q) &&
doc.allign_size_width_line(q, v)
)
@@ -506,7 +531,7 @@ namespace mymln
doc.add_to_paragraph(q);
doc.add_to_paragraph_link(v, q);
}
-
+ doc.debug_draw_line_red_buffer(v,q);
}
}
}
@@ -518,7 +543,7 @@ namespace mymln
if(
doc.get_beginning_of_line(q) == doc[q] &&
doc.allign_H_large(q,v) &&
- doc.allign_size_height_line(q, v) &&
+ doc.allign_size_height_line_medium(q, v) &&
doc.allign_size_width_line(q, v) &&
doc.allign_proximity_V_line(v,q) &&
doc.allign_bottom_line(q,v)
@@ -546,7 +571,11 @@ namespace mymln
}
doc.add_to_paragraph(q);
doc.add_to_paragraph_link(v, q);
+
+
}
+
+ doc.debug_draw_line_green_buffer(v,q);
}
}
@@ -829,9 +858,10 @@ namespace mymln
{
doc.add_noise(KillMe[Killer]);
doc.kill(KillMe[Killer]);
+ doc.invalidate_line_link(KillMe[Killer]);
Killer++;
}
-
+ doc.propage_line_link();
}
@@ -1000,7 +1030,7 @@ namespace mymln
doc.return_next_line(doc.get_line_ID(v)) == doc.return_next_line(doc.get_line_ID(q)) &&
doc.return_previous_line(doc.get_line_ID(v)) == doc.return_previous_line(doc.get_line_ID(q)) &&
doc.allign_V_line(v, q) &&
- doc.allign_size_height_line(v, q) &&
+ doc.allign_size_height_line_medium(v, q) &&
!doc.killed(doc[q])
)
{
@@ -1175,15 +1205,20 @@ namespace mymln
{
for_all(q)
{
- if(doc.contain_line(q))
+ if(doc.contain_line(q) && doc.same_line(q,v))
{
- doc.debug_draw_line_orange_buffer(q,v);
+ if(
+ doc.letter_included_center(v,q) && doc.allign_small_item(v,q))
+ {
+ doc.debug_draw_line_orange_buffer(v,q);
+ doc.merge(q,v);
+ }
+
}
}
}
}
doc.propage_line_link();
- doc.propage_paragraph_link();
}
@@ -1219,6 +1254,11 @@ namespace mymln
doc.debug_draw_line_green_buffer(q,v);
doc.add_to_paragraph_link(v, q);
}
+ else if(doc.allign_paragraph_center_strict(q,v))
+ {
+ doc.debug_draw_line_orange_buffer(q,v);
+ doc.add_to_paragraph_link(v, q);
+ }
}
else
{
@@ -1234,9 +1274,78 @@ namespace mymln
}
-
-
-
+
+ template<typename L, typename F, typename D>
+ void clean_paragraphs_first_line(mymln::document::document<L,F,D>& doc)
+ {
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_all_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ if(doc.contain_paragraph(v) && doc.get_paragraph_length(v) > 1 && doc.contain_start_paragraph(v))
+ {
+ for_all(q)
+ {
+ if(
+ doc.same_paragraph(q,v) &&
+ !doc.same_line(q,v) &&
+ doc.allign_left(v,q) &&
+ doc.allign_V_line(v,q)
+ )
+ {
+ doc.debug_draw_line_green_buffer(q,v);
+ doc.debug_draw_box_green_buffer(q);
+ doc.add_to_line_link(v,q);
+ }
+ }
+ }
+ }
+ doc.propage_line_link();
+ }
+
+
+ template<typename L, typename F, typename D>
+ void clean_paragraphs_couple(mymln::document::document<L,F,D>& doc)
+ {
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_all_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ if(doc.contain_paragraph(v) && doc.get_paragraph_length(v) == 1)
+ {
+ for_all(q)
+ {
+ if(
+ doc.contain_paragraph(q) &&
+ doc.get_paragraph_length(q) == 1 &&
+ !doc.same_paragraph(q,v) &&
+ doc.allign_proximity_paragraph_up_medium(q,v) &&
+ doc.compatible_paragraph_middle_width(q,v) &&
+ !doc.decal_left_paragraph(q, v) &&
+ doc.allign_top_paragraph(q,v) &&
+ doc.allign_size_height_paragraph_line(q,v) &&
+ (doc.contain_start_line(q) || doc.contain_start_line(v)) && // THESE TWO LINES CONATIN MAYBE SOME ERROR
+ doc.allign_H_paragraph(q,v) // FIX THE PROBLEM BEFORE TO START IT
+ )
+ {
+ doc.debug_draw_line_green_buffer(q,v);
+ doc.add_to_paragraph_link(q,v);
+ }
+ }
+ }
+ }
+ doc.propage_paragraph_link();
+ }
template<typename L, typename F, typename D>
diff --git a/scribo/sandbox/raphael/code/my/document/document.hh b/scribo/sandbox/raphael/code/my/document/document.hh
index 219d245..c7fc0c1 100644
--- a/scribo/sandbox/raphael/code/my/document/document.hh
+++ b/scribo/sandbox/raphael/code/my/document/document.hh
@@ -52,6 +52,7 @@ namespace mymln
all_letters_mask = fun::i2v::array<bool>(Areas + 1);
Hseparator_mask = fun::i2v::array<bool>(Areas + 1);
Vseparator_mask = fun::i2v::array<bool>(Areas + 1);
+ image_mask = fun::i2v::array<bool>(Areas + 1);
noise_mask = fun::i2v::array<bool>(Areas + 1);
temp_letter = fun::i2v::array<bool>(Areas + 1);
alone_letters_mask = fun::i2v::array<bool>(Areas + 1);
@@ -312,6 +313,8 @@ namespace mymln
inline void add_to_line_link(const point2d& A, const point2d& B)
{ add_to_line_link(img_influ(A), img_influ(B)); }
+ inline void invalidate_line_link(const point2d& A)
+ { invalidate_line_link(img_influ(A)); }
inline bool same_line(const point2d& A, const point2d& B)
{ return same_line(img_influ(A), img_influ(B)); }
inline bool same_line(const Label A, const Label B)
@@ -362,6 +365,9 @@ namespace mymln
inline void jump_to_line(const point2d& point)
{ jump_to_line(img_influ(point)); }
+ inline bool contain_start_paragraph(const point2d& point)
+ { return contain_start_paragraph(img_influ(point)); }
+
inline bool contain_start_line(const point2d& point)
{ return contain_start_line(img_influ(point)); }
@@ -388,7 +394,8 @@ namespace mymln
inline void add_to_line_link(const Label A, const Label B)
{lines_union.add_link(A, B);}
-
+ inline void invalidate_line_link(const Label A)
+ {lines_union.invalidate_link(A);}
inline void jump_to_line(const Label lbl)
{
if(lines_union[lbl] != 0)
@@ -451,6 +458,9 @@ namespace mymln
inline bool contain_start_line(const Label lbl)
{ return start_lines_mask(lbl);}
+ inline bool contain_start_paragraph(const Label lbl)
+ { return paragraphs_first_line[paragraphs_union[lbl]] == lines_union[lbl];}
+
inline bool contain_end_line(const Label lbl)
{ return start_lines_mask(lbl);}
@@ -487,6 +497,7 @@ namespace mymln
}
void inline add(Label lbl, int link)
{
+ image_mask(lbl) = false;
all_mask(lbl) = true;
if (link == 0){add_noise(lbl);}
else if (link > 30){ add_separator(lbl);}
@@ -521,6 +532,21 @@ namespace mymln
{add_letter(img_influ(point)); }
void inline add_letter_coerce(const point2d& point)
{add_letter_coerce(img_influ(point)); }
+
+
+ void add_image(const Label lbl)
+ {
+ image_mask(lbl) = true;
+ separators_mask(lbl) = false;
+ containers_mask(lbl) = false;
+ Vseparator_mask(lbl) = false;
+ Hseparator_mask(lbl) = false;
+ alone_letters_mask(lbl) = false;
+ noise_mask(lbl) = false;
+ all_letters_mask(lbl) = false;
+ temp_letter = false;
+ }
+
void add_alone_letter(const point2d& point)
{add_alone_letter(img_influ(point));}
void add_alone_letter(const Label lbl)
@@ -572,6 +598,41 @@ namespace mymln
else
add_noise(lbl);
}
+ inline bool is_big_element_V(const point2d& point)
+ {return is_big_element_V(img_influ(point));}
+ inline bool is_big_element_V(const Label lbl)
+ {
+ return _bboxgp[lbl].len(0) > img_influ.domain().len(0) / 13;
+ }
+ inline bool is_big_element_H(const point2d& point)
+ {return is_big_element_H(img_influ(point));}
+ inline bool is_big_element_H(const Label lbl)
+ {
+ return _bboxgp[lbl].len(1) > img_influ.domain().len(1) / 13;
+ }
+
+
+
+
+
+ inline bool is_very_big_element_V(const point2d& point)
+ {return is_very_big_element_V(img_influ(point));}
+ inline bool is_very_big_element_V(const Label lbl)
+ {
+ return _bboxgp[lbl].len(0) > img_influ.domain().len(0) / 6;
+ }
+ inline bool is_very_big_element_H(const point2d& point)
+ {return is_very_big_element_H(img_influ(point));}
+ inline bool is_very_big_element_H(const Label lbl)
+ {
+ return _bboxgp[lbl].len(1) > img_influ.domain().len(1) / 6;
+ }
+
+
+
+
+
+
void inline add_container(const point2d& point)
{add_container(img_influ(point)); }
void add_container(const Label lbl)
@@ -736,6 +797,7 @@ namespace mymln
return allignV < label_size_(0, Left) && (_bboxgp[Left].pcenter()[0]) > (_bboxgp[Right].pcenter()[0]);
}
+
inline bool allign_paragraph_center(const point2d& Left, const point2d& Right)
{return allign_paragraph_center(img_influ(Left), img_influ(Right));}
inline bool allign_paragraph_center(const Label Left, const Label Right)
@@ -744,7 +806,14 @@ namespace mymln
if(Diff < 0){Diff = -Diff;}
return Diff < paragraphs_bbox[paragraphs_union[Left]].len(1)/ 30 && Diff < paragraphs_bbox[paragraphs_union[Right]].len(1) / 30;
}
-
+ inline bool allign_paragraph_center_strict(const point2d& Left, const point2d& Right)
+ {return allign_paragraph_center_strict(img_influ(Left), img_influ(Right));}
+ inline bool allign_paragraph_center_strict(const Label Left, const Label Right)
+ {
+ short int Diff = paragraphs_bbox[paragraphs_union[Left]].pcenter()[1] - paragraphs_bbox[paragraphs_union[Right]].pcenter()[1];
+ if(Diff < 0){Diff = -Diff;}
+ return Diff < paragraphs_bbox[paragraphs_union[Left]].len(1)/ 60 && Diff < paragraphs_bbox[paragraphs_union[Right]].len(1) / 60;
+ }
inline bool allign_line_center(const point2d& Left, const point2d& Right)
{return allign_line_center(img_influ(Left), img_influ(Right));}
@@ -1028,10 +1097,13 @@ namespace mymln
{ HA = HB; }
return (DisA) < HA;
}
+
+
+
inline bool allign_proximity_paragraph_up_medium( const point2d& Left, const point2d& Right)
- {return allign_proximity_paragraph_up(img_influ(Left), img_influ(Right));}
+ {return allign_proximity_paragraph_up_medium(img_influ(Left), img_influ(Right));}
inline bool allign_proximity_paragraph_up_medium( const Label Left, const Label Right)
{
@@ -1097,6 +1169,19 @@ namespace mymln
+ inline bool allign_size_height_line_medium( const point2d& Left, const point2d& Right)
+ {
+ return allign_size_height_line_medium(img_influ(Left), img_influ(Right));
+ }
+
+ inline bool allign_size_height_line_medium( const Label Left, const Label Right)
+ {
+ short int SizeL = lines_bbox[lines_union[Left]].len(0);
+ short int SizeR = lines_bbox[lines_union[Right]].len(0);
+ return SizeR > (SizeL / 1.8f) && SizeR < (SizeL * 1.8f);
+ }
+
+
inline bool allign_size_height_line( const point2d& Left, const point2d& Right)
{
return allign_size_height_line(img_influ(Left), img_influ(Right));
@@ -1288,6 +1373,35 @@ namespace mymln
}
+
+
+ inline bool allign_proximity_left( const point2d& Left, const point2d& Right)
+ {return allign_proximity_left(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_proximity_left( const Label Left, const Label Right)
+ {
+ box2d LB = _bboxgp[Left];
+ box2d RB = _bboxgp[Right];
+
+ int DisA = LB.pmax()[1] - RB.pmin()[1];
+ int DisB = RB.pmax()[1] - LB.pmin()[1];
+ if(DisA < 0){DisA = -DisA;}
+ if(DisB < 0){DisB = -DisB;}
+ if(DisA > DisB)
+ { DisA = DisB; }
+
+ unsigned int HA = LB.len(0);
+ unsigned int VA = LB.len(1);
+
+
+ if(VA > HA)
+ { HA = VA; }
+ return (DisA) * 3 < HA * 2;
+ }
+
+
+
+
inline bool allign_proximity_large_left( const point2d& Left, const point2d& Right)
{return allign_proximity_large_left(img_influ(Left), img_influ(Right));}
@@ -1538,7 +1652,10 @@ namespace mymln
allignV < lines_bbox[lines_union[Left]].len(0) &&
lines_bbox[lines_union[Left]].pcenter()[0] < lines_bbox[lines_union[Right]].pcenter()[0];
}
-
+ inline bool is_start_end_line(const point2d& point)
+ {return is_start_end_line(img_influ(point));}
+ inline bool is_start_end_line(const Label lbl)
+ {return start_end_lines_mask(lbl);}
inline bool allign_bottom(const point2d& Left, const point2d& Right)
{return allign_bottom(img_influ(Left), img_influ(Right));}
inline bool allign_bottom(const Label Left, const Label Right)
@@ -2033,6 +2150,8 @@ namespace mymln
{ mymln::debug::save_label_image(img, implicit_separators_union , file);}
vertex_image<point2d,bool> fun_mask_separators()
{ return fun_mask_(separators_mask); }
+ vertex_image<point2d,bool> fun_mask_V_separators()
+ { return fun_mask_(Vseparator_mask); }
vertex_image<point2d,bool> fun_mask_containers()
{ return fun_mask_(containers_mask); }
vertex_image<point2d,bool> fun_mask_alone_letters()
@@ -2047,6 +2166,8 @@ namespace mymln
{
return fun_mask_(all_mask);
}
+ vertex_image<point2d,bool> fun_mask_image()
+ { return fun_mask_(image_mask); }
vertex_image<point2d,bool> fun_mask_letters()
{ return fun_mask_(letters_mask); }
vertex_image<point2d,bool> fun_mask_start_lines()
@@ -2195,6 +2316,15 @@ namespace mymln
_bboxgp[Par1].has(_bboxgp[Par2].pmax()) ;
}
+ inline bool letter_included_center(point2d Par1, point2d Par2)
+ { return letter_included_center(img_influ(Par1), img_influ(Par2)); }
+ inline bool letter_included_center(Label Par1, Label Par2)
+ {
+ return
+ _bboxgp[Par1].has(_bboxgp[Par2].pcenter());
+ }
+
+
inline bool paragraph_included_influence(point2d Par1, point2d Par2)
{ return paragraph_included_influence(img_influ(Par1), img_influ(Par2)); }
inline bool paragraph_included_influence(Label Par1, Label Par2)
@@ -3258,7 +3388,7 @@ namespace mymln
fun::i2v::array<bool> noise_mask;
fun::i2v::array<bool> kill_mask;
fun::i2v::array<bool> all_mask;
-
+ fun::i2v::array<bool> image_mask;
mln::util::array<std::string> tag_lbl;
mln::util::array<bool> Btag_lbl;
diff --git a/scribo/sandbox/raphael/code/my/document/separator.hh b/scribo/sandbox/raphael/code/my/document/separator.hh
index 9c39f20..aa5ace9 100644
--- a/scribo/sandbox/raphael/code/my/document/separator.hh
+++ b/scribo/sandbox/raphael/code/my/document/separator.hh
@@ -10,7 +10,37 @@ namespace mymln
{
namespace separators
{
- //TODO: CHANGER contain_Hseparator en VSeparator Le H c etait pour le test
+
+
+ template<typename L, typename F, typename D>
+ void separators_find_wrong(mymln::document::document<L,F,D>& doc)
+ {
+
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_V_separators();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ mymln::util::union_find<L> sep_union(doc.size());
+ for_all(v)
+ {
+ if(doc.contain_letter(v))
+ {
+ for_all(q)
+ {
+ if(doc.is_big_element_V(q)){continue;}
+ if(doc.allign_proximity_strict(q,v) && doc.allign_V(q,v) && doc.allign_size(q,v))
+ {doc.debug_draw_line_red_buffer(q,v); doc.add_letter_coerce(q);}
+ else if(doc.allign_V(q,v) && doc.allign_size(q,v) && doc.allign_proximity_left(v,q))
+ {doc.debug_draw_line_red_buffer(q,v); doc.add_letter_coerce(q);}
+ }
+ }
+ }
+
+ }
+
template<typename L, typename F, typename D>
void separators_rebuild(mymln::document::document<L,F,D>& doc)
{
@@ -27,8 +57,11 @@ namespace mymln
if(!doc[v]){continue;}
if(doc.contain_Vseparator(doc[v]) && !sep_union[doc[v]])
{
+
sep_union[doc[v]] = sep_union.new_set();
sep_union.add_self_link(doc[v]);
+ if(doc.is_very_big_element_V(v))
+ { continue; }
}
for_all(q)
{
@@ -256,6 +289,11 @@ namespace mymln
count[doc[q]]++;
}
}
+ else if(doc.allign_proximity_strict(q,v) && doc.allign_left(v,q) && doc.allign_V(q,v) && doc.same_line(q, v))
+ {
+ count[doc[q]]++;
+ doc.debug_draw_line_orange_buffer(v, q);
+ }
}
}
@@ -308,6 +346,11 @@ namespace mymln
doc.debug_draw_line_green_buffer(v, q);
}
}
+ else if(doc.allign_proximity_strict(q,v) && doc.allign_right(v,q) && doc.allign_V(q,v) && doc.same_line(q, v))
+ {
+ count[doc[q]]++;
+ doc.debug_draw_line_orange_buffer(v, q);
+ }
}
}
diff --git a/scribo/sandbox/raphael/code/my/runtime/lib.hh b/scribo/sandbox/raphael/code/my/runtime/lib.hh
index b3100f9..f60a995 100644
--- a/scribo/sandbox/raphael/code/my/runtime/lib.hh
+++ b/scribo/sandbox/raphael/code/my/runtime/lib.hh
@@ -17,6 +17,7 @@ namespace mymln
run.add_function("separators.make_clean_left", &(mymln::document::separators::separators_find_allign));
run.add_function("separators.rebuild", &(mymln::document::separators::separators_rebuild));
run.add_function("separators.merge", &(mymln::document::separators::separators_merge));
+ run.add_function("separators.find_wrong", &(mymln::document::separators::separators_find_wrong));
}
@@ -60,6 +61,11 @@ namespace mymln
run.add_function("clean.finalize_paragraph", &(mymln::document::clean_finalize_paragraph));
run.add_function("clean.center_paragraphs", &(mymln::document::clean_center_paragraphs));
+
+
+ run.add_function("clean.paragraphs_couple", &(mymln::document::clean_paragraphs_couple));
+
+ run.add_function("clean.paragraphs_first_line", &(mymln::document::clean_paragraphs_first_line));
}
template<typename L, typename F, typename D>
diff --git a/scribo/sandbox/raphael/code/test.cc b/scribo/sandbox/raphael/code/test.cc
index 6f33db5..3eab190 100644
--- a/scribo/sandbox/raphael/code/test.cc
+++ b/scribo/sandbox/raphael/code/test.cc
@@ -1,4 +1,4 @@
-
+#define NREMOTE
#include <vector>
#include <mln/io/pbm/all.hh>
#include <mln/io/ppm/all.hh>
@@ -51,6 +51,10 @@
#include <my/data/page.hh>
#include <my/preprocessing/preprocessing.hh>
+#ifndef NREMOTE
+#include <my/debug/remote/document_remote.hh>
+#include <my/debug/remote/lib.hh>
+#endif
using namespace mln;
using namespace std;
@@ -252,11 +256,23 @@ void Process(std::string File, std::string Dir, mymln::runtime::runtime< value::
}
-
-
+#ifndef NREMOTE
+// THIS IS USED TO CREATE A FILTER WITHOUT RECOMPILING
+mymln::document::debug::remote< value::int_u<16> ,float,short> rem;
+template<typename L, typename F, typename D>
+ void clean_remote(mymln::document::document<L,F,D>& doc)
+ {
+ rem.filter(doc);
+ }
+#endif
+
+
int main( int argc, char** argv)
{
mymln::runtime::runtime< value::int_u<16> ,float,short> run;
+ #ifndef NREMOTE
+ rem = mymln::document::debug::remote< value::int_u<16> ,float,short>();
+ #endif
mymln::runtime::load_clean(run);
mymln::runtime::load_debug(run);
mymln::runtime::load_cooking(run);
@@ -269,6 +285,7 @@ int main( int argc, char** argv)
{
bool dir = false;
bool prog = false;
+ bool remote = false;
std::string Dir = "";
std::string Prog = "";
for(int N = 1 ; N < argc; N++)
@@ -287,12 +304,26 @@ int main( int argc, char** argv)
prog = false;
}
+ #ifndef NREMOTE
+ else if(remote)
+ {
+ Prog = argv[N];
+ rem.load(Prog.c_str());
+ remote = false;
+ run.add_function("@remote", clean_remote);
+ mymln::document::debug::load(rem);
+ }
+ #endif
else
{
if(!strcmp(argv[N], "-D"))
{ dir = true;}
else if(!strcmp(argv[N], "-P"))
{ prog = true; }
+ #ifndef NREMOTE
+ else if(!strcmp(argv[N], "--Remote"))
+ { remote = true; }
+ #endif
else
{ Process(argv[N], Dir, run); }
}
--
1.7.2.5
1
0

last-svn-commit-887-ge10fcbe Updtate everything. Add Breakpoint, Rebuild Separators. Patch someproblems with union find. Patch some problem with paragraph detection. Still have some problem with paragraphs
by Raphael Boissel 08 Sep '11
by Raphael Boissel 08 Sep '11
08 Sep '11
---
scribo/sandbox/raphael/code/my/document/clean.hh | 233 ++++++-
.../sandbox/raphael/code/my/document/document.hh | 807 ++++++++++++++++++--
scribo/sandbox/raphael/code/my/document/outline.hh | 87 +++
.../sandbox/raphael/code/my/document/separator.hh | 115 +++-
scribo/sandbox/raphael/code/my/runtime/lib.hh | 50 ++
scribo/sandbox/raphael/code/my/util/union.hh | 15 +-
scribo/sandbox/raphael/code/test.cc | 15 +-
7 files changed, 1251 insertions(+), 71 deletions(-)
create mode 100644 scribo/sandbox/raphael/code/my/document/outline.hh
diff --git a/scribo/sandbox/raphael/code/my/document/clean.hh b/scribo/sandbox/raphael/code/my/document/clean.hh
index b996b8a..94d0422 100644
--- a/scribo/sandbox/raphael/code/my/document/clean.hh
+++ b/scribo/sandbox/raphael/code/my/document/clean.hh
@@ -15,7 +15,7 @@ namespace mymln
typedef vertex_image<point2d,bool> v_ima_g;
typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
- v_ima_g mask = doc.fun_mask_letters();
+ v_ima_g mask = doc.fun_mask_all_letters();
mln_piter_(v_ima_g) v(mask.domain());
typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
nbh_t nbh(mask);
@@ -339,13 +339,22 @@ namespace mymln
{
for_all(q)
{
- if(doc.contain_line(q) && doc.get_line_length(q) == 1 && doc.line_influence_has(v,q))
+ if(
+ doc.contain_line(q) &&
+ !doc.same_line(q,v) &&
+ doc.get_line_length(q) == 1 &&
+ doc.line_influence_has(v,q) &&
+ !doc.allign_H_large(v,q) &&
+ (doc.allign_base_line_strict(v,q) || doc.allign_V(v,q))
+ )
{
+ doc.debug_draw_line_green_buffer(q,v);
doc.add_to_line_link(q,v);
}
}
}
}
+ doc.propage_line_link();
}
@@ -394,6 +403,21 @@ namespace mymln
doc.add_to_line_link(v, q);
doc.debug_draw_line_red_buffer(v,q);
}
+ else if(
+
+ doc.line_influence_reciprocal(q, v) &&
+ !doc.same_line(q,v) &&
+ doc.allign_V(q,v) &&
+ doc.allign_size_x_height(v,q) &&
+ doc.get_line_length(v) > 4 &&
+ doc.allign_proximity_line(v,q)
+ )
+ {
+ doc.debug_draw_line_orange_buffer(v,q);
+ doc.debug_draw_box_red_buffer(v);
+ doc.debug_draw_box_green_buffer(q);
+ doc.add_to_line_link(v, q);
+ }
}
@@ -738,10 +762,12 @@ namespace mymln
}
template<typename L, typename F, typename D>
- void clean_lines_space(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s)
+ void clean_line_space(mymln::document::document<L,F,D>& doc)
{
- image2d<value::rgb8> out;
- mln::initialize(out, s);
+ mln::util::array<L> KillMe = mln::util::array<L>(doc.size());
+ unsigned int Killer = 0;
+ if(doc.size() > 0){KillMe[0] = 0;}
+
typedef vertex_image<point2d,bool> v_ima_g;
typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
v_ima_g mask = doc.fun_mask_letters();
@@ -755,23 +781,37 @@ namespace mymln
{
if(doc.same_line(q, v))
{
- draw::line(out, q,v, mln::literal::red);
if(doc.in_beginning_of_line(q) || doc.in_end_of_line(q))
{
- draw::line(out, q,v, mln::literal::green);
- if(doc.space(q, v) > doc.get_letter_middle_space(q) * 10)
+ if(doc.space(q, v) > doc.get_letter_middle_space(q) * 4 && doc.allign_half_line_letter(v,q))
{
- draw::line(out, q,v, mln::literal::blue);
- /*if(doc[q] == doc.get_beginning_of_line(q))
- doc.add_to_line_link(v, q); */
- //doc.add_noise(q);
+ if(doc[q] == doc.get_beginning_of_line(q) && doc.allign_V_side(v,q))
+ {
+ doc.add_to_line_self_link(v);
+ doc.add_to_line_link(v, q);
+ KillMe[Killer++] = doc[q];
+ KillMe[Killer] = 0;
+ doc.debug_draw_line_green_buffer(q,v);
+ doc.debug_draw_box_red_buffer(q);
+ }
+ else
+ {
+ doc.debug_draw_line_red_buffer(q,v);
+ }
}
}
}
}
}
doc.propage_line_link();
- io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out);
+ Killer = 0;
+ while(Killer < doc.size() && KillMe[Killer])
+ {
+ doc.add_noise(KillMe[Killer]);
+ doc.kill(KillMe[Killer]);
+ Killer++;
+ }
+
}
@@ -825,7 +865,8 @@ namespace mymln
doc.get_line_length(q)> 5 &&
doc.allign_V(v, q) &&
doc.allign_proximity(v, q) &&
- doc.allign_size_height(v, q)
+ doc.allign_size_height(v, q) &&
+ !doc.contain_separator(v)
)
{
doc.add_to_line_link(q,v);
@@ -853,6 +894,8 @@ namespace mymln
{
for_all(q)
{
+ if(doc.paragraph_start_with_tab(q) && doc.same_paragraph(q,v))
+ {doc.debug_draw_line_red_buffer(v, q);}
if(
doc.contain_paragraph(q) &&
!doc.same_paragraph(q,v) &&
@@ -873,7 +916,169 @@ namespace mymln
}
doc.propage_paragraph_link();
}
+ template<typename L, typename F, typename D>
+ void find_previous_next_line(mymln::document::document<L,F,D>& doc)
+ {
+ doc.reserve_previous_next_line();
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_all_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ if(doc.contain_line(v))
+ {
+ for_all(q)
+ {
+ if(
+ doc.contain_line(q) &&
+ !doc.same_line(q, v) &&
+ doc.allign_H_large(q, v) &&
+ doc.allign_size_height_line(q,v))
+ {
+ if(doc.allign_top_large(q,v))
+ {
+ doc.debug_draw_line_green_buffer(q,v);
+ doc.add_line_previous(q,v);
+ }
+ else if(doc.allign_bottom_large(q,v))
+ {
+ doc.debug_draw_line_red_buffer(q,v);
+ doc.add_line_next(q,v);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ template<typename L, typename F, typename D>
+ void clean_letter_previous_next_line(mymln::document::document<L,F,D>& doc)
+ {
+
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_start_end_lines();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ if(doc.contain_line(v) && doc.return_next_line(doc.get_line_ID(v)))
+ {
+ for_all(q)
+ {
+ if(
+
+ doc.contain_line(q) &&
+ !doc.same_line(q, v) &&
+ doc.return_next_line(doc.get_line_ID(v)) == doc.return_next_line(doc.get_line_ID(q)) &&
+ doc.return_previous_line(doc.get_line_ID(v)) == doc.return_previous_line(doc.get_line_ID(q)) &&
+ doc.allign_V_line(v, q) &&
+ doc.allign_size_height_line(v, q) &&
+ !doc.killed(doc[q])
+ )
+ {
+ doc.debug_draw_line_green_buffer(v,q);
+
+ doc.add_to_line_link(v,q);
+ }
+ }
+ }
+ }
+ doc.propage_line_link();
+
+ }
+
+ template<typename L, typename F, typename D>
+ void clean_V_lines(mymln::document::document<L,F,D>& doc)
+ {
+
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_all_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ for_all(q)
+ {
+ if(
+ doc.allign_H(v,q) &&
+ doc.allign_size_width_strict(v,q)
+ )
+ {
+ doc.add_temp_letter(v);
+ doc.debug_draw_line_green_buffer(v,q);
+ }
+ }
+ }
+ doc.propage_line_link();
+
+ }
+
+
+ template<typename L, typename F, typename D>
+ void clean_paragraphs_end_line(mymln::document::document<L,F,D>& doc)
+ {
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_all_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ if(doc.contain_paragraph(v))
+ {
+ for_all(q)
+ {
+ if(
+ doc.contain_paragraph(q) &&
+ !doc.same_paragraph(q,v) &&
+ doc.get_paragraph_length(q) == 1)
+ {
+ if(
+ doc.allign_top_paragraph(q,v) &&
+ doc.allign_H_min_paragraph(q,v) &&
+ doc.allign_size_height_paragraph_line(q,v) &&
+ doc.allign_smaller_paragraph(v, q) &&
+ doc.compatible_paragraph_middle_width(v,q) &&
+ doc.allign_proximity_paragraph_up_large(q,v) &&
+ doc.get_line_length(q) > 3
+ )
+ {
+ doc.debug_draw_line_green_buffer(q,v);
+ doc.add_to_paragraph_link(v, q);
+ }
+ else if(
+ doc.allign_top_paragraph(v,q) &&
+ !doc.paragraph_start_with_tab(v) &&
+ doc.allign_size_height_paragraph_line(q,v) &&
+ doc.allign_H_max_paragraph(q,v) &&
+ doc.allign_smaller_paragraph(v, q) &&
+ doc.compatible_paragraph_middle_width(v,q) &&
+ doc.allign_proximity_paragraph_up_large(q,v) &&
+ doc.get_line_length(q) > 3
+ )
+ {
+ doc.debug_draw_line_green_buffer(q,v);
+ doc.add_to_paragraph_link(v, q);
+ }
+ }
+ }
+ }
+ }
+ doc.propage_paragraph_link();
+ }
}
}
diff --git a/scribo/sandbox/raphael/code/my/document/document.hh b/scribo/sandbox/raphael/code/my/document/document.hh
index 880d4c5..b3735df 100644
--- a/scribo/sandbox/raphael/code/my/document/document.hh
+++ b/scribo/sandbox/raphael/code/my/document/document.hh
@@ -45,6 +45,7 @@ namespace mymln
{
img = ima;
_bboxgp = bboxgp;
+ _bboxgp_influ = mln::util::array<box2d>(Areas + 1);
_area_graph = area_graph;
separators_mask = fun::i2v::array<bool>(Areas + 1);
containers_mask = fun::i2v::array<bool>(Areas + 1);
@@ -53,17 +54,18 @@ namespace mymln
Hseparator_mask = fun::i2v::array<bool>(Areas + 1);
Vseparator_mask = fun::i2v::array<bool>(Areas + 1);
noise_mask = fun::i2v::array<bool>(Areas + 1);
+ temp_letter = fun::i2v::array<bool>(Areas + 1);
alone_letters_mask = fun::i2v::array<bool>(Areas + 1);
implicit_separators_left_mask = fun::i2v::array<bool>(Areas + 1);
implicit_separators_right_mask = fun::i2v::array<bool>(Areas + 1);
kill_mask = fun::i2v::array<bool>(Areas + 1);
+ all_mask = fun::i2v::array<bool>(Areas + 1);
CImpSep = 1;
NImpSep = 2;
lines_union = mymln::util::union_find<Label>(Areas + 1);
implicit_separators_union = mymln::util::union_find<Label>(Areas + 1);
debug_buffer_enable = false;
paragraphs_union = mymln::util::union_find<Label>(Areas + 1);
-
tag_lbl = mln::util::array<std::string>(Areas + 1);
Btag_lbl = mln::util::array<bool>(Areas + 1);
lines_split = mln::util::array<Label>(Areas + 1);
@@ -79,8 +81,14 @@ namespace mymln
CPar = 1;
NPar = 2;
Areas_Number_ = Areas + 1;
-
+ sep_right_cooked = false;
+ lines_cooked = false;
+ Enable_Debug_Buffer = false; // Remanant version of debug_buffer_enable
}
+ inline bool killed(const Label lbl)
+ {return kill_mask(lbl);}
+ inline void kill(const Label lbl)
+ {kill_mask(lbl) = true;all_mask(lbl) = false;}
inline unsigned int count()
{return Areas_Number_;}
/* OPERATION ON PAGE */
@@ -123,6 +131,11 @@ namespace mymln
}
}
}
+
+
+
+
+
inline bool contain_paragraph(const point2d& point)
{return contain_paragraph(img_influ(point));}
inline bool contain_paragraph(const Label lbl)
@@ -349,7 +362,13 @@ namespace mymln
inline void jump_to_line(const point2d& point)
{ jump_to_line(img_influ(point)); }
+
+ inline bool contain_start_line(const point2d& point)
+ { return contain_start_line(img_influ(point)); }
+ inline bool contain_end_line(const point2d& point)
+ { return contain_end_line(img_influ(point)); }
+
inline bool contain_line(const point2d& point)
{ return contain_line(img_influ(point)); }
@@ -379,9 +398,61 @@ namespace mymln
add_new_line(lbl);
}
+ inline bool contain_line_self_link(const Label lbl)
+ { return lines_union[lbl].is_self_link();}
+ inline bool move_line_self_link(const Label lbl)
+ {
+ if(lines_union[lbl] && lines_union[lbl].is_self_link())
+ {
+ if(lines_first_label[lines_union[lbl]] == lbl)
+ {
+ if(lines_union[lines_last_label[lines_union[lbl]]] == 0) // CHECK IF THE LAST LABEL HAS NOT BEEN REMOVED
+ recook_lines();
+
+ lines_union.add_link(lines_last_label[lines_union[lbl]], lbl);
+ lines_union.add_self_link(lines_last_label[lines_union[lbl]]);
+ }
+ else if(lines_last_label[lines_union[lbl]] == lbl)
+ {
+ if(lines_union[lines_first_label[lines_union[lbl]]] == 0) // CHECK IF THE FIRST LABEL HAS NOT BEEN REMOVED
+ recook_lines();
+
+ lines_union.add_link(lines_first_label[lines_union[lbl]], lbl);
+ lines_union.add_self_link(lines_first_label[lines_union[lbl]]);
+ }
+ else
+ {
+ if(lines_union[lines_first_label[lines_union[lbl]]])
+ {
+ lines_union.add_link(lines_first_label[lines_union[lbl]], lbl);
+ lines_union.add_self_link(lines_first_label[lines_union[lbl]]);
+ }
+ else if(lines_first_label[lines_union[lbl]])
+ {
+ lines_union.add_link(lines_last_label[lines_union[lbl]], lbl);
+ lines_union.add_self_link(lines_last_label[lines_union[lbl]]);
+ }
+ else
+ {
+ recook_lines();
+ lines_union.add_link(lines_first_label[lines_union[lbl]], lbl);
+ lines_union.add_self_link(lines_first_label[lines_union[lbl]]);
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+
inline bool contain_line(const Label lbl)
{ return lines_union[lbl] != 0;}
+ inline bool contain_start_line(const Label lbl)
+ { return start_lines_mask(lbl);}
+
+ inline bool contain_end_line(const Label lbl)
+ { return start_lines_mask(lbl);}
+
inline void add_noise(const point2d& point)
{add_noise(img_influ(point));}
@@ -397,20 +468,31 @@ namespace mymln
Hseparator_mask(lbl) = false;
Vseparator_mask(lbl) = false;
alone_letters_mask(lbl) = false;
-
+ all_letters_mask(lbl) = false;
+ if(lines_cooked)
+ {
+ start_end_lines_mask(lbl) = false;
+ end_lines_mask(lbl) = false;
+ start_lines_mask(lbl) = false;
+ }
noise_mask(lbl) = true;
lines_union[lbl] = 0;
}
void inline add(Label lbl, int link)
{
+ all_mask(lbl) = true;
if (link == 0){add_noise(lbl);}
else if (link > 30){ add_separator(lbl);}
- else { add_letter(lbl);}
+ else
+ {
+ add_letter(lbl);
+ }
/* SET UP SPECIAL MASK TO FALSE */
implicit_separators_left_mask(lbl) = false;
implicit_separators_right_mask(lbl) = false;
kill_mask(lbl) = false;
+ temp_letter(lbl) = false;
}
void inline invalid_letter(const point2d& point)
{invalid_letter(img_influ(point));}
@@ -444,6 +526,7 @@ namespace mymln
alone_letters_mask(lbl) = true;
noise_mask(lbl) = false;
all_letters_mask(lbl) = true;
+ temp_letter = false;
}
void add_letter_coerce(const Label lbl)
{
@@ -456,12 +539,18 @@ namespace mymln
Hseparator_mask(lbl) = false;
alone_letters_mask(lbl) = false;
noise_mask(lbl) = false;
+ temp_letter = false;
}
void add_letter(const Label lbl)
{
CLet++;
if(label_valid_size_Min_(lbl, 3) || label_valid_size_Min_Large_(lbl, 2))
{
+ if(letter_ratio_XY(lbl) > 20)
+ {add_separator(lbl); return;}
+ if(letter_ratio_YX(lbl) > 10)
+ {add_separator(lbl); return;}
+
img_influ(_bboxgp[lbl].pcenter()) = lbl;
letters_mask(lbl) = true;
all_letters_mask(lbl) = true;
@@ -470,7 +559,7 @@ namespace mymln
Vseparator_mask(lbl) = false;
Hseparator_mask(lbl) = false;
alone_letters_mask(lbl) = false;
-
+ temp_letter = false;
noise_mask(lbl) = false;
}
else
@@ -491,12 +580,14 @@ namespace mymln
noise_mask(lbl) = false;
alone_letters_mask(lbl) = false;
all_letters_mask(lbl) = false;
+
}
else
add_noise(lbl);
}
void add_Hseparator(const Label lbl)
{
+ _bboxgp_influ[lbl] = _bboxgp[lbl].to_larger(4);
CSep++;
containers_mask(lbl) = false;
Vseparator_mask(lbl) = false;
@@ -509,6 +600,7 @@ namespace mymln
}
void add_Vseparator(const Label lbl)
{
+ _bboxgp_influ[lbl] = _bboxgp[lbl].to_larger(4);
CSep++;
containers_mask(lbl) = false;
Vseparator_mask(lbl) = true;
@@ -519,10 +611,19 @@ namespace mymln
noise_mask(lbl) = false;
all_letters_mask(lbl) = false;
}
+ bool inline separator_has(const point2d& A, const point2d& B)
+ {
+ return _bboxgp_influ[img_influ(A)].has(B) || separator_has(img_influ(A), img_influ(B));
+ }
+ bool inline separator_has(const Label A,const Label B)
+ {
+ return _bboxgp_influ[A].has(_bboxgp[B].pmin()) || _bboxgp_influ[A].has(_bboxgp[B].pmax());
+ }
void inline add_separator(const point2d& point)
{add_letter(img_influ(point)); }
void add_separator(const Label lbl)
{
+
if(label_valid_ratio_(lbl, _VSepRatio_Min,_VSepRatio_Max))
add_Vseparator(lbl);
else if(label_valid_ratio_(lbl, _HSepRatio_Min,_HSepRatio_Max))
@@ -540,6 +641,11 @@ namespace mymln
bool inline contain_separator(const Label lbl)
{return contain_(lbl, separators_mask);}
+ bool inline contain_Vseparator(const Label lbl)
+ {return contain_(lbl, Vseparator_mask);}
+ bool inline contain_Hseparator(const Label lbl)
+ {return contain_(lbl, Hseparator_mask);}
+
bool inline contain_letter(const Label lbl)
{return contain_(lbl, letters_mask);}
@@ -588,6 +694,7 @@ namespace mymln
short int allignV = lines_bbox[lines_union[Left]].pcenter()[0] - lines_bbox[lines_union[Right]].pcenter()[0];
return (!allignV < 0) && allignV * 2 > lines_bbox[lines_union[Left]].len(0);
}
+
inline bool allign_top( const Label Left, const Label Right)
{
@@ -595,6 +702,23 @@ namespace mymln
return allignV < label_size_(0, Left) && (_bboxgp[Left].pcenter()[0]) > (_bboxgp[Right].pcenter()[0]);
}
+ inline bool allign_top_large( const point2d& Left, const point2d& Right)
+ {return allign_top_large(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_top_large( const Label Left, const Label Right)
+ {
+ short int allignV = label_allign_(0, Left, Right);
+ return allignV < lines_bbox[lines_union[Left]].len(0) * 2 && (_bboxgp[Left].pcenter()[0]) > (_bboxgp[Right].pcenter()[0]);
+ }
+
+ inline bool allign_bottom_large( const point2d& Left, const point2d& Right)
+ {return allign_bottom_large(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_bottom_large( const Label Left, const Label Right)
+ {
+ short int allignV = label_allign_(0, Left, Right);
+ return allignV < lines_bbox[lines_union[Left]].len(0) * 2 && (_bboxgp[Left].pcenter()[0]) < (_bboxgp[Right].pcenter()[0]);
+ }
inline bool allign_up_line( const point2d& Left, const point2d& Right)
{return allign_up_line(img_influ(Left), img_influ(Right));}
@@ -628,7 +752,7 @@ namespace mymln
inline bool allign_left( const Label Left, const Label Right)
{
- return _bboxgp[Left].pmin()[0] > _bboxgp[Right].pmin()[0];
+ return _bboxgp[Left].pmin()[1] > _bboxgp[Right].pmin()[1];
}
inline bool allign_right( const point2d& Left, const point2d& Right)
@@ -637,11 +761,20 @@ namespace mymln
inline bool allign_right( const Label Left, const Label Right)
{
- return _bboxgp[Left].pmin()[0] < _bboxgp[Right].pmin()[0];
+ return _bboxgp[Left].pmin()[1] < _bboxgp[Right].pmin()[1];
}
+ inline bool allign_H_large_one( const point2d& Left, const point2d& Right)
+ {return allign_H_large_one(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_H_large_one( const Label Left, const Label Right)
+ {
+ short int allignV = label_allign_(1, Left, Right) * 1.5f;
+ return allignV <= label_size_(1, Left) + 2;
+ }
+
inline bool allign_H_large( const point2d& Left, const point2d& Right)
{return allign_H_large(img_influ(Left), img_influ(Right));}
@@ -650,7 +783,18 @@ namespace mymln
short int allignV = label_allign_(1, Left, Right) * 1.5f;
return allignV < label_size_(1, Left);
}
+
+
+ inline bool allign_H_strict( const point2d& Left, const point2d& Right)
+ {return allign_H(img_influ(Left), img_influ(Right));}
+ inline bool allign_H_strict( const Label Left, const Label Right)
+ {
+ short int allignH = label_allign_(1, Left, Right) * 5;
+ return allignH < label_size_(1, Left) && allignH < label_size_(1, Right);
+ }
+
+
inline bool allign_H( const point2d& Left, const point2d& Right)
{return allign_H(img_influ(Left), img_influ(Right));}
@@ -660,6 +804,29 @@ namespace mymln
return allignH < label_size_(1, Left) && allignH < label_size_(1, Right);
}
+
+ inline bool allign_H_min_paragraph( const point2d& Left, const point2d& Right)
+ {return allign_H_min_paragraph(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_H_min_paragraph( const Label Left, const Label Right)
+ {
+ short int allignH = paragraphs_bbox[paragraphs_union[Left]].pmin()[1] - paragraphs_bbox[paragraphs_union[Right]].pmin()[1];
+ allignH *= 2;
+ return allignH < paragraphs_bbox[paragraphs_union[Left]].len(0);
+ }
+
+
+ inline bool allign_H_max_paragraph( const point2d& Left, const point2d& Right)
+ {return allign_H_max_paragraph(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_H_max_paragraph( const Label Left, const Label Right)
+ {
+ short int allignH = paragraphs_bbox[paragraphs_union[Left]].pmin()[1] - paragraphs_bbox[paragraphs_union[Right]].pmin()[1];
+ allignH *= 2;
+ return allignH < paragraphs_bbox[paragraphs_union[Left]].len(0);
+ }
+
+
inline bool allign_H_min( const point2d& Left, const point2d& Right)
{return allign_H_min(img_influ(Left), img_influ(Right));}
@@ -681,6 +848,56 @@ namespace mymln
inline bool allign_size_height( const point2d& Left, const point2d& Right)
{return allign_size_height(img_influ(Left), img_influ(Right));}
+
+
+ inline bool allign_proximity_top_strict( const point2d& Left, const point2d& Right)
+ {return allign_proximity_top(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_proximity_top_strict( const Label Left, const Label Right)
+ {
+ box2d LB = _bboxgp[Left];
+ box2d RB = _bboxgp[Right];
+
+ int DisA = LB.pmax()[0] - RB.pmin()[0];
+ int DisB = RB.pmax()[0] - LB.pmin()[0];
+ if(DisA < 0){DisA = -DisA;}
+ if(DisB < 0){DisB = -DisB;}
+ if(DisA > DisB)
+ { DisA = DisB; }
+
+ unsigned int HA = LB.len(0);
+ unsigned int HB = LB.len(1);
+
+ if(HB > HA)
+ { HA = HB; }
+ return (DisA * 2) < HA;
+ }
+
+
+ inline bool allign_proximity_top( const point2d& Left, const point2d& Right)
+ {return allign_proximity_top(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_proximity_top( const Label Left, const Label Right)
+ {
+ box2d LB = _bboxgp[Left];
+ box2d RB = _bboxgp[Right];
+
+ int DisA = LB.pmax()[0] - RB.pmin()[0];
+ int DisB = RB.pmax()[0] - LB.pmin()[0];
+ if(DisA < 0){DisA = -DisA;}
+ if(DisB < 0){DisB = -DisB;}
+ if(DisA > DisB)
+ { DisA = DisB; }
+
+ unsigned int HA = LB.len(0);
+ unsigned int HB = LB.len(1);
+
+ if(HB > HA)
+ { HA = HB; }
+ return (DisA * 2) < HA * 3;
+ }
+
+
inline bool allign_proximity_V( const point2d& Left, const point2d& Right)
{return allign_proximity_V(img_influ(Left), img_influ(Right));}
@@ -752,7 +969,33 @@ namespace mymln
return (DisA * 2) < HA && (DisA * 2) < HB;
}
+
+
+ inline bool allign_proximity_paragraph_up_large( const point2d& Left, const point2d& Right)
+ {return allign_proximity_paragraph_up_large(img_influ(Left), img_influ(Right));}
+ inline bool allign_proximity_paragraph_up_large( const Label Left, const Label Right)
+ {
+ box2d LB = paragraphs_bbox[paragraphs_union[Left]];
+ box2d RB = paragraphs_bbox[paragraphs_union[Right]];
+
+ int DisA = LB.pmax()[0] - RB.pmin()[0];
+ int DisB = RB.pmax()[0] - LB.pmin()[0];
+ if(DisA < 0){DisA = -DisA;}
+ if(DisB < 0){DisB = -DisB;}
+ if(DisA > DisB)
+ { DisA = DisB; }
+
+ unsigned int HA = lines_bbox[paragraphs_first_line[paragraphs_union[Left]]].len(0);
+ unsigned int HB = lines_bbox[paragraphs_first_line[paragraphs_union[Right]]].len(0);
+
+ if(HA < HB)
+ { HA = HB; }
+ return (DisA) < HA;
+ }
+
+
+
inline bool allign_proximity_paragraph_up( const point2d& Left, const point2d& Right)
{return allign_proximity_paragraph_up(img_influ(Left), img_influ(Right));}
@@ -779,6 +1022,21 @@ namespace mymln
inline bool allign_proximity_line_large( const point2d& Left, const point2d& Right)
{return allign_proximity_line_large(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_size_height_paragraph_line( const point2d& Left, const point2d& Right)
+ {
+ return allign_size_height_paragraph_line(img_influ(Left), img_influ(Right));
+ }
+
+ inline bool allign_size_height_paragraph_line( const Label Left, const Label Right)
+ {
+ short int SizeL = lines_bbox[paragraphs_first_line[paragraphs_union[Left]]].len(0);
+ short int SizeR = lines_bbox[paragraphs_first_line[paragraphs_union[Right]]].len(0);
+ return SizeR > (SizeL / 2.2f) && SizeR < (SizeL * 2.2);
+ }
+
+
+
inline bool allign_size_height_line( const point2d& Left, const point2d& Right)
{
return allign_size_height_line(img_influ(Left), img_influ(Right));
@@ -817,6 +1075,32 @@ namespace mymln
short int SizeR = _bboxgp[lines_union[Right]].len(1);
return SizeR >= (SizeL / 5) && SizeR <= (SizeL * 5);
}
+
+ inline bool allign_size_width( const point2d& Left, const point2d& Right)
+ {
+ return allign_size_width(img_influ(Left), img_influ(Right));
+ }
+
+ inline bool allign_size_width( const Label Left, const Label Right)
+ {
+ short int SizeL = _bboxgp[Left].len(1);
+ short int SizeR = _bboxgp[Right].len(1);
+ return SizeR >= (SizeL / 2) && SizeR <= (SizeL * 2);
+ }
+
+
+
+ inline bool allign_size_width_strict( const point2d& Left, const point2d& Right)
+ {
+ return allign_size_width_strict(img_influ(Left), img_influ(Right));
+ }
+
+ inline bool allign_size_width_strict( const Label Left, const Label Right)
+ {
+ short int SizeL = _bboxgp[Left].len(1);
+ short int SizeR = _bboxgp[Right].len(1);
+ return SizeR >= (SizeL / 1.5f) && SizeR <= (SizeL * 1.5f);
+ }
@@ -1094,6 +1378,22 @@ namespace mymln
}
+ inline bool allign_half_line_letter( const point2d& Left, const point2d& Right)
+ {return allign_half_line_letter(img_influ(Left), img_influ(Right));}
+ inline bool allign_half_line_letter( Label Left, Label Right)
+ {
+ return lines_bbox[lines_union[Left]].len(0) > (_bboxgp[Right].len(0) * 8);
+ }
+
+
+ inline bool allign_smaller_paragraph( const point2d& Left, const point2d& Right)
+ {return allign_smaller_paragraph(img_influ(Left), img_influ(Right));}
+ inline bool allign_smaller_paragraph( Label Left, Label Right)
+ {
+ return paragraphs_bbox[paragraphs_union[Left]].len(1) > (paragraphs_bbox[paragraphs_union[Right]].len(1));
+ }
+
+
inline bool allign_smaller_line( const point2d& Left, const point2d& Right)
{return allign_smaller_line(img_influ(Left), img_influ(Right));}
inline bool allign_smaller_line( Label Left, Label Right)
@@ -1117,6 +1417,15 @@ namespace mymln
return allignV < label_size_(0, Left) && allignV < label_size_(0, Right);
}
+ inline bool allign_V_side( const point2d& Left, const point2d& Right)
+ {return allign_V_side(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_V_side( const Label Left, const Label Right)
+ {
+ short int allignV = label_allign_(0, Left, Right);
+ return allignV * 4 < label_size_(0, Left);
+ }
+
inline bool allign_V_extra_large( const point2d& Left, const point2d& Right)
{return allign_V_extra_large(img_influ(Left), img_influ(Right));}
@@ -1164,7 +1473,13 @@ namespace mymln
return lines_bbox[lines_union[Left]].pmin()[0] < lines_bbox[lines_union[Right]].pmin()[0];
}
-
+ inline bool allign_base_line_strict(const point2d& Left, const point2d& Right)
+ {return allign_base_line_strict(img_influ(Left), img_influ(Right));}
+ inline bool allign_base_line_strict(const Label Left, const Label Right)
+ {
+ short int allignV = label_allign_(0, Left, Right) * 1.7f;
+ return allignV < label_size_(0, Left) && _bboxgp[Left].pcenter()[0] < _bboxgp[Right].pcenter()[0];
+ }
inline bool allign_base_line(const point2d& Left, const point2d& Right)
{return allign_base_line(img_influ(Left), img_influ(Right));}
@@ -1187,8 +1502,8 @@ namespace mymln
{
Label FirstLine = paragraphs_first_line[paragraphs_union[Paragraph]];
return
- _bboxgp[FirstLine].pmin()[1] > paragraphs_bbox[paragraphs_union[Paragraph]].pmin()[1] +
- (paragraphs_bbox[paragraphs_union[Paragraph]].len(1) / 20);
+ lines_bbox[FirstLine].pmin()[1] > paragraphs_bbox[paragraphs_union[Paragraph]].pmin()[1] +
+ (paragraphs_bbox[paragraphs_union[Paragraph]].len(1) / 30);
}
void stat()
@@ -1201,20 +1516,201 @@ namespace mymln
std::cout << " lines(s) : " << CLine << std::endl;
}
+ void debug_breakpoint()
+ {
+ if(debug_buffer_enable)
+ {
+ debug_save_buffer("break.ppm");
+ std::system("eog break.ppm");
+ debug_buffer_enable = true;
+ Enable_Debug_Buffer = true;
+ }
+ else
+ {
+ debug_save_all("break.ppm");
+ std::system("eog break.ppm");
+ }
+ }
void debug_set_image(image2d<bool>& source)
{debug_source = source;}
+
+ /// ADD TEMP LETTER
+ /// description : add a label to the letter mask. The label will remain a letter while
+ /// reset_temp_letter is not called
+ /// WARNING: The old type of the label is still activated
+ inline void add_temp_letter(const point2d& Lbl)
+ {
+ add_temp_letter(img_influ(Lbl));
+ }
+ inline void add_temp_letter(const Label lbl)
+ {
+ if(!all_letters_mask(lbl))
+ {
+ letters_mask(lbl) = true;
+ all_letters_mask(lbl) = true;
+ temp_letter(lbl) = true;
+ }
+ }
+ inline void reset_temp_letter()
+ {
+ for(int N = 0; N < Areas_Number_; N++)
+ {
+ if(temp_letter(N))
+ {
+ letters_mask(N) = false;
+ all_letters_mask(N) = false;
+ start_end_lines_mask(N) = false;
+ end_lines_mask(N) = false;
+ start_lines_mask(N) = false;
+ }
+ }
+ }
+ inline void debug_disable_buffer()
+ {
+ debug_buffer_enable = false;
+ }
+ inline void debug_enable_buffer()
+ {
+ if(Enable_Debug_Buffer)
+ {
+ debug_buffer_enable = true;
+ }
+ else
+ {
+ debug_create_buffer();
+ }
+ }
inline void debug_create_buffer()
{
mln::initialize(debug_buffer,img_influ);
debug_buffer_enable = true;
+ Enable_Debug_Buffer = true;
+ }
+ inline void debug_save_dot_graph(std::string file)
+ {
+ fstream filestream(file.c_str(), fstream::in | fstream::out);
+ filestream << "graph 1 { " << std::endl;
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = fun_mask_all_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for(int N = 0; N < Areas_Number_; N++)
+ {
+ filestream
+ << "_"
+ << N
+ << " [pos=\""<<_bboxgp[N].pcenter()[1]
+ << ".0," << img_influ.domain().pmax()[0] - _bboxgp[N].pcenter()[0]
+ << ".0\" "
+ << "shape=\"box\" "
+ << "width=\"" << ((Float)_bboxgp[N].len(1)) / 70.0f << ".0\" "
+ << "height=\"" << ((Float)_bboxgp[N].len(0)) / 70.0f << ".0\" "
+ << "label=\""<< get_tag(N) <<"\" "
+ << "];"
+
+ << std::endl;
+ }
+ for_all(v)
+ {
+ for_all(q)
+ {
+ if(contain_letter(q) && contain_letter(v))
+ {
+ if(contain_alone_letter(q) || contain_alone_letter(v))
+ {
+
+ filestream<< "_" << img_influ(q) << " -- _" << img_influ(v) << " [style=\"dotted\"]";
+ }
+ else
+ {
+ if(same_line(q,v))
+ {filestream<< "_" << img_influ(q) << " -- _" << img_influ(v) << " [color=\"green\"]";}
+ else
+ {filestream<< "_" << img_influ(q) << " -- _" << img_influ(v) << ";" << std::endl;}
+ }
+ }
+ else
+ {
+ filestream<< "_" << img_influ(q) << " -- _" << img_influ(v) << " [style=\"dotted\" color=\"red\"]";
+ }
+
+ }
+ }
+ filestream<< "}" << std::endl;
+ filestream.close();
}
inline void debug_save_buffer(std::string file)
{
debug_buffer_enable = false;
+ Enable_Debug_Buffer = false;
io::ppm::save(mln::debug::superpose(debug_buffer, debug_source, literal::white) , file);
}
-
+ inline void debug_save_buffer_paragraphs(std::string file)
+ {
+ Enable_Debug_Buffer = false;
+ debug_buffer_enable = false;
+ for(unsigned int N = 0; N < paragraphs_bbox.size(); N++)
+ {
+ if(paragraphs_bbox[N].is_valid())
+ {
+ draw::box(debug_buffer, paragraphs_bbox[N], mln::literal::red);
+ if(paragraphs_bbox_influ[N].is_valid())
+ {
+ draw::box(debug_buffer, paragraphs_bbox_influ[N], mln::literal::orange);
+ }
+ }
+
+ }
+ io::ppm::save(mln::debug::superpose(debug_buffer, debug_source, literal::white) , file);
+ }
+ inline void debug_save_buffer_lines(std::string file)
+ {
+ Enable_Debug_Buffer = false;
+ debug_buffer_enable = false;
+ for(unsigned int N = 0; N < paragraphs_bbox.size(); N++)
+ {
+ if(lines_bbox[N].is_valid())
+ {
+ draw::box(debug_buffer, lines_bbox[N], mln::literal::blue);
+ }
+
+ }
+ io::ppm::save(mln::debug::superpose(debug_buffer, debug_source, literal::white) , file);
+ }
+ inline void debug_draw_box_red_buffer(const point2d& L)
+ {debug_draw_box_red_buffer(img_influ(L));}
+ inline void debug_draw_box_green_buffer(const point2d& L)
+ {debug_draw_box_green_buffer(img_influ(L));}
+ inline void debug_draw_box_red_buffer(const Label L)
+ {
+ if(debug_buffer_enable)
+ draw::box(debug_buffer, _bboxgp[L], mln::literal::red);
+ }
+ inline void debug_draw_box_green_buffer(const Label L)
+ {
+ if(debug_buffer_enable)
+ draw::box(debug_buffer,_bboxgp[L], mln::literal::green);
+ }
+ inline void debug_draw_box_green_influence_buffer(const Label L)
+ {
+ if(debug_buffer_enable)
+ {
+ draw::box(debug_buffer,_bboxgp[L], mln::literal::green);
+ draw::box(debug_buffer,_bboxgp_influ[L], mln::literal::green);
+ }
+ }
+ inline void debug_draw_box_red_influence_buffer(const Label L)
+ {
+ if(debug_buffer_enable)
+ {
+ draw::box(debug_buffer,_bboxgp[L], mln::literal::red);
+ draw::box(debug_buffer,_bboxgp_influ[L], mln::literal::red);
+ }
+ }
inline void debug_draw_line_red_buffer(const point2d& A,const point2d& B )
{
if(debug_buffer_enable)
@@ -1225,35 +1721,31 @@ namespace mymln
if(debug_buffer_enable)
draw::line(debug_buffer, A, B, mln::literal::green);
}
-
- void debug_save_union(std::string file)
- {debug_save_union(file, debug_source);}
- void debug_save_union(std::string file, image2d<bool> source)
+ inline void debug_draw_line_orange_buffer(const point2d& A,const point2d& B )
{
- image2d<value::rgb8> ima_color;
- mln::initialize(ima_color,img_influ);
-
- for(unsigned int N = 1; N < lines_union.size(); N++)
- {
- if(lines_union[N])
- {
- if(N == lines_union.link(N))
- draw::box(ima_color, _bboxgp[N], mln::literal::blue);
- else
- draw::line(ima_color, _bboxgp[N].pcenter(), _bboxgp[lines_union.link(N)].pcenter(), mln::literal::blue);
- }
- }
- for(unsigned int N = 1; N < paragraphs_union.size(); N++)
+ if(debug_buffer_enable)
+ draw::line(debug_buffer, A, B, mln::literal::orange);
+ }
+ template<typename UnionData>
+ void debug_union(mymln::util::union_find<UnionData> dat)
+ {
+ if(debug_buffer_enable)
{
- if(paragraphs_union[N])
+ for(unsigned int N = 1; N < dat.size(); N++)
{
- if(N == paragraphs_union.link(N))
- draw::box(ima_color, _bboxgp[N], mln::literal::red);
- else
- draw::line(ima_color, _bboxgp[N].pcenter(), _bboxgp[paragraphs_union.link(N)].pcenter(), mln::literal::red);
+ if(dat[N])
+ {
+ if(N == dat.link(N))
+ draw::box(debug_buffer, _bboxgp[N], mln::literal::blue);
+ else
+ draw::line(debug_buffer, _bboxgp[N].pcenter(), _bboxgp[dat.link(N)].pcenter(), mln::literal::blue);
+ }
+ else if(dat.link(N) != 0)
+ {
+ draw::line(debug_buffer, _bboxgp[N].pcenter(), _bboxgp[dat.link(N)].pcenter(), mln::literal::red);
+ }
}
}
- io::ppm::save(mln::debug::superpose(ima_color, source, literal::white) , file);
}
void debug_save_lines(std::string file)
{debug_save_lines(file, debug_source);}
@@ -1280,7 +1772,48 @@ namespace mymln
}
-
+ void debug_save_all_separators(std::string file)
+ {debug_save_all_separators(file, debug_source);}
+ void debug_save_all_separators(std::string file, image2d<bool> source)
+ {
+ image2d<value::rgb8> ima_color;
+ mln::initialize(ima_color,img_influ);
+
+ for(unsigned int N = 0; N < _bboxgp.size(); N++)
+ {
+ if(_bboxgp[N].is_valid() && (contain_letter(N) || contain_alone_letter(N)))
+ {
+ if(sep_right_cooked)
+ {
+ if(implicit_separators_right_mask(N))
+ draw::box(ima_color, _bboxgp[N], mln::literal::red);
+ else if(implicit_separators_left_mask(N))
+ draw::box(ima_color, _bboxgp[N], mln::literal::cyan);
+ else if(temp_letter(N))
+ draw::box(ima_color, _bboxgp[N], mln::literal::olive);
+ else
+ draw::box(ima_color, _bboxgp[N], mln::literal::green);
+ }
+ else
+ {
+ if(implicit_separators_left_mask(N))
+ draw::box(ima_color, _bboxgp[N], mln::literal::cyan);
+ else if(implicit_separators_right_mask(N))
+ draw::box(ima_color, _bboxgp[N], mln::literal::red);
+ else if(temp_letter(N))
+ draw::box(ima_color, _bboxgp[N], mln::literal::olive);
+ else
+ draw::box(ima_color, _bboxgp[N], mln::literal::green);
+ }
+ }
+ else if(_bboxgp[N].is_valid() && contain_separator(N))
+ {
+ draw::box(ima_color, _bboxgp[N], mln::literal::yellow);
+ }
+ }
+
+ io::ppm::save(mln::debug::superpose(ima_color, source, literal::white) , file);
+ }
void debug_save_all(std::string file)
@@ -1294,7 +1827,15 @@ namespace mymln
{
if(_bboxgp[N].is_valid() && contain_letter(N))
{
- draw::box(ima_color, _bboxgp[N], mln::literal::cyan);
+ if(temp_letter(N))
+ draw::box(ima_color, _bboxgp[N], mln::literal::teal);
+ else
+ draw::box(ima_color, _bboxgp[N], mln::literal::cyan);
+ }
+ else if(_bboxgp[N].is_valid() && contain_separator(N))
+ {
+ draw::box(ima_color, _bboxgp[N], mln::literal::green);
+ draw::box(ima_color, _bboxgp_influ[N], mln::literal::green);
}
}
@@ -1369,9 +1910,7 @@ namespace mymln
{return fun_mask_(all_letters_mask);}
vertex_image<point2d,bool> fun_mask_all()
{
- typedef vertex_image<point2d,bool> v_ima_g;
- v_ima_g result(_area_graph);
- return result;
+ return fun_mask_(all_mask);
}
vertex_image<point2d,bool> fun_mask_letters()
{ return fun_mask_(letters_mask); }
@@ -1456,7 +1995,12 @@ namespace mymln
{ return lines_bbox[lines_union[L]].len(1); }
-
+ inline Float letter_ratio_YX(const point2d& point)
+ {return letter_ratio_YX(img_influ(point));}
+ inline Float letter_ratio_YX(Label Letter)
+ {
+ return (Float)_bboxgp[Letter].len(0) / (Float)_bboxgp[Letter].len(1);
+ }
inline Float letter_ratio_XY(const point2d& point)
{return letter_ratio_XY(img_influ(point));}
inline Float letter_ratio_XY(Label Letter)
@@ -1529,7 +2073,22 @@ namespace mymln
lines_influ_bbox[lines_union[L2]].has(lines_influ_bbox[lines_union[L1]].pmin()) ||
lines_influ_bbox[lines_union[L2]].has(lines_influ_bbox[lines_union[L1]].pmax()) ;
}
-
+ inline bool allign_size_x_height( const point2d& Left, const point2d& Right)
+ {return allign_size_x_height(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_size_x_height( const Label Left, const Label Right)
+ {
+ short int SizeL0 = label_size_(0, Left);
+ short int SizeR0 = label_size_(0, Right);
+ short int SizeL1 = label_size_(1, Left);
+ short int SizeR1 = label_size_(1, Right);
+ short int Swap = 0;
+ if(SizeL0 < SizeL1)
+ { SizeL0 = SizeL1; }
+ if(SizeR0 < SizeR1){SizeR0 = SizeR1;}
+ return SizeR0 > (SizeL0 / 3) && SizeR0 < (SizeL0);
+ }
+
inline bool allign_size_large_inside( const point2d& Left, const point2d& Right)
{return allign_size_large_inside(img_influ(Left), img_influ(Right));}
@@ -1632,6 +2191,7 @@ namespace mymln
separators_middle.fill(0);
cook_separators_right_();
}
+
inline void propage_line_link()
{ lines_union.propage_links(); }
/*image_if<image2d<Label> masked_image_letters()
@@ -1677,6 +2237,34 @@ namespace mymln
inline bool contain_implicit_separator(const Label lbl)
{return implicit_separators_union[lbl] != 0; }
+
+ inline void merge_separators(const point2d& A, const point2d& B)
+ {
+ merge_separators(img_influ(A), img_influ(B));
+ }
+ inline void merge_separators(const Label A, const Label B)
+ {
+
+ if( A && B && !kill_mask(A) && !kill_mask(B) && A != B)
+ {
+ img_influ(_bboxgp[B].pcenter()) = A;
+ _bboxgp[A].merge(_bboxgp[B]);
+
+ _bboxgp[B] = box2d();
+
+ _bboxgp_influ[A].merge(_bboxgp_influ[B]);
+ _bboxgp_influ[B] = box2d();
+ separators_mask(B) = false;
+ separators_mask(A) = true;
+ Vseparator_mask(B) = false;
+ Hseparator_mask(B) = false;
+ kill_mask(B) = true;
+ all_mask(B) = false;
+ }
+
+
+ }
+
inline void merge(const point2d& A, const point2d& B)
{
merge(img_influ(A), img_influ(B));
@@ -1689,6 +2277,7 @@ namespace mymln
_bboxgp[A].merge(_bboxgp[B]);
_bboxgp[B] = box2d();
kill_mask(B) = true;
+ all_mask(B) = false;
if(letters_mask(A) && letters_mask(B))
{
if(lines_union.is_self_link(B))
@@ -1760,7 +2349,7 @@ namespace mymln
implicit_separators_right_mask(lbl) = false;
}
- inline Label& operator[](point2d i)
+ inline const Label& operator[](point2d i)
{ return img_influ(i);}
inline point2d operator[](Label i)
@@ -1807,14 +2396,19 @@ namespace mymln
inline void recook_paragraphs()
{
paragraphs_len.fill(0);
+ paragraphs_letter_len.fill(0);
cook_paragraphs_();
}
inline void cook_paragraphs()
{
paragraphs_bbox = mln::util::array<box2d>(NPar + 1);
paragraphs_len = mln::util::array<unsigned int>(NPar + 1);
+ paragraphs_letter_len = mln::util::array<unsigned int>(NPar + 1);
+
paragraphs_first_line = mln::util::array<unsigned int>(NPar + 1);
paragraphs_bbox_influ = mln::util::array<box2d>(NPar + 1);
+ paragraphs_len.fill(0);
+ paragraphs_letter_len.fill(0);
cook_paragraphs_();
}
@@ -1836,6 +2430,18 @@ namespace mymln
lines_width.fill(0);
compute_letter_middle_width_();
}
+ inline void compute_paragraph_middle_height()
+ {
+ paragraphs_mid_height = mln::util::array<unsigned int>(NPar + 1);
+ paragraphs_mid_width.fill(0);
+ compute_paragraph_middle_height_();
+ }
+ inline void compute_paragraph_middle_width()
+ {
+ paragraphs_mid_width = mln::util::array<unsigned int>(NPar + 1);
+ paragraphs_mid_width.fill(0);
+ compute_paragraph_middle_width_();
+ }
inline void recompute_letter_middle_space()
{
lines_space.fill(0);
@@ -1867,7 +2473,35 @@ namespace mymln
{return get_letter_middle_width(img_influ(point));}
inline unsigned int get_letter_middle_width(const Label lbl)
{return lines_width[lines_union[lbl]];}
+
+
+ inline bool compatible_paragraph_middle_width(const point2d& A, const point2d& B)
+ { return compatible_paragraph_middle_width(img_influ(A), img_influ(B));}
+ inline bool compatible_paragraph_middle_width(const Label A, const Label B)
+ {
+ short int LA = lines_bbox[paragraphs_first_line[paragraphs_union[A]]].len(0);
+ short int LB = lines_bbox[paragraphs_first_line[paragraphs_union[A]]].len(0);
+ if(LA > LB)
+ {LA = LB;}
+ return get_paragraph_middle_width_diff(A, B) * 8 < LA;
+ }
+ inline int get_paragraph_middle_width_diff(const point2d& A, const point2d& B)
+ {return get_paragraph_middle_width_diff(img_influ(A), img_influ(B));}
+ inline int get_paragraph_middle_width_diff(const Label A, const Label B)
+ {
+ int diff = paragraphs_mid_width[paragraphs_union[A]] - paragraphs_mid_width[paragraphs_union[B]];
+ if(diff < 0){diff = -diff;}
+ return diff;
+ }
+
+ inline unsigned int get_paragraph_middle_width(const point2d& point)
+ {return get_letter_paragraph_width(img_influ(point));}
+ inline unsigned int get_paragraph_middle_width(const Label lbl)
+ {return paragraphs_mid_width[paragraphs_union[lbl]];}
+
+ inline unsigned int get_line_ID(const point2d& lbl)
+ {return get_line_ID(img_influ(lbl));}
inline unsigned int get_line_ID(const Label lbl)
{
return lines_union[lbl];
@@ -1894,6 +2528,26 @@ namespace mymln
if(lines_seq_pos[line_ID] == line_ID){ line_ID = 0; }
line_ID = lines_seq_pos[line_ID];
}
+ inline void get_next_line(Label& line_ID)
+ {
+ if(lines_seq_pos[line_ID] == line_ID){ line_ID = 0; }
+ line_ID = lines_seq_pos[line_ID];
+ }
+ inline unsigned int return_next_line(const Label& line_ID)
+ {
+ if(lines_seq_pos[line_ID] == line_ID){ return 0; }
+ return lines_seq_pos[line_ID];
+ }
+ inline void get_previous_line(Label& line_ID)
+ {
+ if(lines_seq_pos_reverse[line_ID] == line_ID){ line_ID = 0; }
+ line_ID = lines_seq_pos_reverse[line_ID];
+ }
+ inline unsigned int return_previous_line(const Label& line_ID)
+ {
+ if(lines_seq_pos_reverse[line_ID] == line_ID){ return 0; }
+ return lines_seq_pos_reverse[line_ID];
+ }
inline void get_next_letter(Label& lbl)
{
if(lines_seq[lbl] == lbl){ lbl = 0; }
@@ -1925,7 +2579,23 @@ namespace mymln
}
return line;
}
+ inline void reserve_previous_next_line()
+ {
+ lines_seq_pos = mln::util::array<unsigned int>(NLine + 1);
+ lines_seq_pos_reverse = mln::util::array<unsigned int>(NLine + 1);
+ }
+ inline void add_line_previous(const point2d& A,const point2d& Prev)
+ {add_line_previous(img_influ(A),img_influ(Prev)); }
+ inline void add_line_next(const point2d& A, const point2d& Next)
+ {add_line_next(img_influ(A),img_influ(Next)); }
+ inline void add_line_previous(const Label A,const Label Prev)
+ {lines_seq_pos_reverse[get_line_ID(A)] = get_line_ID(Prev); }
+ inline void add_line_next(const Label A, const Label Next)
+ {lines_seq_pos[get_line_ID(A)] = get_line_ID(Next); }
private:
+ bool Enable_Debug_Buffer;
+ fun::i2v::array<bool> temp_letter;
+
fun::i2v::array<bool> implicit_separators_left_mask;
fun::i2v::array<bool> implicit_separators_right_mask;
mln::util::array<unsigned int> separators_len_right;
@@ -1933,7 +2603,8 @@ namespace mymln
mln::util::array<unsigned int> separators_middle;
mln::util::array<unsigned int> separators_marging;
-
+ bool sep_right_cooked;
+ bool lines_cooked;
inline void cook_separators_()
{
implicit_separators_left_mask(0) = false;
@@ -1998,6 +2669,7 @@ namespace mymln
inline void cook_separators_right_()
{
+ sep_right_cooked = true;
implicit_separators_right_mask(0) = false;
for(unsigned int N = 1; N < implicit_separators_union.size(); N++)
{
@@ -2068,6 +2740,7 @@ namespace mymln
mln::util::array<unsigned int> lines_last_label;
mln::util::array<unsigned int> lines_seq;
mln::util::array<unsigned int> lines_seq_pos;
+ mln::util::array<unsigned int> lines_seq_pos_reverse;
mln::util::array<box2d> lines_bbox;
mln::util::array<box2d> lines_influ_bbox;
mln::util::array<Label> lines_split;
@@ -2206,9 +2879,11 @@ namespace mymln
std::cout << count << endl;
std::cout << "linear";
}
-
+ //NOTE: THIS FUNCTION IS ONE VERY COMMON FUNCTION
+ // PLEASE OPTIMIZE ME
inline void cook_lines_()
{
+ lines_cooked = true;
Cooked_CLine = CLine;
for(unsigned int N = 1; N < lines_union.size(); N++)
{
@@ -2402,6 +3077,7 @@ namespace mymln
fun::i2v::array<bool> containers_mask;
fun::i2v::array<bool> noise_mask;
fun::i2v::array<bool> kill_mask;
+ fun::i2v::array<bool> all_mask;
mln::util::array<std::string> tag_lbl;
mln::util::array<bool> Btag_lbl;
@@ -2417,20 +3093,59 @@ namespace mymln
unsigned int CSep ;
unsigned int CSepH ;
unsigned int CSepV ;
+
mymln::util::union_find<Label> paragraphs_union;
unsigned int CPar ;
unsigned int NPar ;
mln::util::array<unsigned int> paragraphs_first_label;
mln::util::array<unsigned int> paragraphs_last_label;
+ mln::util::array<unsigned int> paragraphs_mid_width;
+ mln::util::array<unsigned int> paragraphs_mid_height;
mln::util::array<unsigned int> paragraphs_assoc;
mln::util::array<unsigned int> paragraphs_len;
+ mln::util::array<unsigned int> paragraphs_letter_len;
/* NOTE THESE ARRAYS MUST BE INITIALIZEDD WITH THE NUMBER OF PARAGRAPH */
mln::util::array<box2d> paragraphs_bbox;
mln::util::array<box2d> paragraphs_bbox_influ;
mln::util::array<unsigned int> paragraphs_first_line;
+
+
+ inline void compute_paragraph_middle_width_()
+ {
+ for(unsigned int N = 1; N < Areas_Number_; N++)
+ {
+ if(paragraphs_union[N])
+ {
+ paragraphs_mid_width[paragraphs_union[N]] += _bboxgp[N].len(1);
+ }
+ }
+ for(unsigned int N = 1; N < paragraphs_mid_width.size() && N < paragraphs_letter_len.size(); N++)
+ {
+ if(paragraphs_letter_len[N])
+ {
+
+ paragraphs_mid_width[N] /= paragraphs_letter_len[N];
+ }
+ }
+ }
+ inline void compute_paragraph_middle_height_()
+ {
+ for(unsigned int N = 1; N < Areas_Number_; N++)
+ {
+ if(paragraphs_union[N])
+ {
+ paragraphs_mid_height[paragraphs_union[N]] += _bboxgp[N].len(0);
+ }
+ }
+ for(unsigned int N = 1; N < paragraphs_mid_height.size() && N < paragraphs_letter_len.size(); N++)
+ {
+ if(paragraphs_len[N])
+ paragraphs_mid_height[N] /= paragraphs_letter_len[N];
+ }
+ }
inline void first_recognition()
{
@@ -2463,6 +3178,7 @@ namespace mymln
if(lines_len[N] && paragraphs_union[lines_first_label[N]])
{
paragraphs_len[paragraphs_union[lines_first_label[N]]]++;
+ paragraphs_letter_len[paragraphs_union[lines_first_label[N]]] += lines_len[N];
if(paragraphs_first_line[paragraphs_union[lines_first_label[N]]])
{
if(
@@ -2526,6 +3242,7 @@ namespace mymln
mln::util::array<box2d> _bboxgp;
+ mln::util::array<box2d> _bboxgp_influ;
/* DOCUMENT DATA */
g_vertices_p _area_graph;
diff --git a/scribo/sandbox/raphael/code/my/document/outline.hh b/scribo/sandbox/raphael/code/my/document/outline.hh
new file mode 100644
index 0000000..00d62a6
--- /dev/null
+++ b/scribo/sandbox/raphael/code/my/document/outline.hh
@@ -0,0 +1,87 @@
+using namespace mln;
+namespace mymln
+{
+ namespace document
+ {
+
+
+
+ template <typename I, typename N>
+ image2d<bool> outline(const Image<I>& iz_, const Neighborhood<N>& nbh_)
+ {
+
+ const I& iz = exact(iz_);
+ const N& nbh = exact(nbh_);
+
+
+ image2d<bool> out(iz.domain());
+
+ mln_pixter(const I) p(iz);
+ mln_nixter(const I, N) n(p, nbh);
+
+ for_all(p)
+ {
+ unsigned int count = 0;
+ int variate = 0;
+ for_all(n)
+ {
+ variate += n.val();
+ count++;
+ }
+ variate /= count;
+ variate -= p.val();
+ if(variate > 10)
+ {
+ out.element(p.offset()) = true;
+ }
+ }
+
+
+ for_all(p)
+ {
+ unsigned int count = 0;
+ int variate = 0;
+ if(out.element(p.offset()))
+ {
+ for_all(n)
+ {
+ if(out.element(n.offset()))
+ count++;
+ }
+ if(count == 0)
+ {
+ out.element(p.offset()) = false;
+ }
+ }
+ }
+
+
+
+ return out;
+ }
+
+ template <typename I, typename N>
+ image2d<value::int_u8> luminance(const Image<I>& iz_)
+ {
+
+ const I& iz = exact(iz_);
+
+
+ image2d<value::int_u8> out(iz.domain());
+
+ mln_pixter(const I) p(iz);
+ for_all(p)
+ {
+ value::rgb8 V = p.val();
+ out.element(p.offset()) = ( (V.red() + V.blue() + V.green()) / 9 );
+ out.element(p.offset()) *= 3;
+ }
+ return out;
+ }
+
+ template <typename I>
+ image2d<bool> binarize_outline(const Image<I>& iz_)
+ {return mymln::document::outline(mymln::document::luminance(iz_), c8());}
+
+ }
+}
\ No newline at end of file
diff --git a/scribo/sandbox/raphael/code/my/document/separator.hh b/scribo/sandbox/raphael/code/my/document/separator.hh
index 2cd98ea..de3b4d0 100644
--- a/scribo/sandbox/raphael/code/my/document/separator.hh
+++ b/scribo/sandbox/raphael/code/my/document/separator.hh
@@ -10,12 +10,110 @@ namespace mymln
{
namespace separators
{
+ //TODO: CHANGER contain_Hseparator en VSeparator Le H c etait pour le test
+ template<typename L, typename F, typename D>
+ void separators_rebuild(mymln::document::document<L,F,D>& doc)
+ {
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_all();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ mymln::util::union_find<L> sep_union(doc.size());
+ for_all(v)
+ {
+ if(!doc[v]){continue;}
+ if(doc.contain_Vseparator(doc[v]) && !sep_union[doc[v]])
+ {
+ sep_union[doc[v]] = sep_union.new_set();
+ sep_union.add_self_link(doc[v]);
+ /*doc.debug_union(sep_union);
+ doc.debug_breakpoint();*/
+ }
+ for_all(q)
+ {
+ if(doc.contain_Vseparator(doc[q])){continue;}
+ if(doc.contain_Vseparator(doc[v]) &&
+ doc.separator_has(v, q))
+ {
+
+ doc.add_Vseparator(doc[q]);
+ doc.debug_draw_box_red_buffer(doc[q]);
+ sep_union[doc[q]] = sep_union[doc[v]];
+ sep_union.add_link(doc[v], doc[q]);
+
+ }
+ else if(
+
+ doc.letter_ratio_XY (q) <= 1 &&
+ doc.allign_H_large_one(q, v) &&
+ doc.allign_proximity_top_strict(q,v)
+ )
+ {
+ sep_union.add_link(doc[v], doc[q]);
+ }
+ }
+ }
+ doc.debug_union(sep_union);
+ sep_union.propage_links();
+ for(int N = 0; N < doc.size(); N++)
+ {
+ if(sep_union[N])
+ {
+ if(!doc.contain_Vseparator(N))
+ {
+ doc.add_Vseparator(N);
+ }
+ }
+ }
+
+
+ }
+ template<typename L, typename F, typename D>
+ void separators_merge(mymln::document::document<L,F,D>& doc)
+ {
+
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_separators();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ mymln::util::union_find<L> sep_union(doc.size());
+ for_all(v)
+ {
+ if(doc.contain_separator(v))
+ {
+ for_all(q)
+ {
+ if(doc.separator_has(v, q))
+ {doc.merge_separators(v,q);}
+ }
+ }
+ else
+ {
+ for_all(q)
+ {
+ if(doc.separator_has(v, q))
+ {
+ doc.add_Vseparator(doc[q]);
+ doc.merge_separators(v,q);
+ break;
+ }
+ }
+ }
+ }
+
+ }
template<typename L, typename F, typename D>
void separators_find_allign(mymln::document::document<L,F,D>& doc)
{
typedef vertex_image<point2d,bool> v_ima_g;
typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
- v_ima_g mask = doc.fun_mask_letters();
+ v_ima_g mask = doc.fun_mask_all_letters();
mln_piter_(v_ima_g) v(mask.domain());
typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
nbh_t nbh(mask);
@@ -67,7 +165,7 @@ namespace mymln
{
typedef vertex_image<point2d,bool> v_ima_g;
typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
- v_ima_g mask = doc.fun_mask_letters();
+ v_ima_g mask = doc.fun_mask_all_letters();
mln_piter_(v_ima_g) v(mask.domain());
typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
nbh_t nbh(mask);
@@ -75,7 +173,7 @@ namespace mymln
for_all(v)
{
- if(doc.contain_letter(v))
+ if(doc.contain_letter(v) || doc.contain_alone_letter(v))
{
doc.jump_to_separator(v);
if((!doc.contain_implicit_separator(v)))
@@ -92,17 +190,23 @@ namespace mymln
// draw::line(out, q,v, mln::literal::blue);
if(doc.allign_H_max(q,v) && doc.allign_size(q, v))
{
+ doc.debug_draw_line_green_buffer(v, q);
doc.add_to_separator_link(v, q);
All_Alone = false;
}
+ else
+ {doc.debug_draw_line_red_buffer(v, q);}
}
else
{
if(doc.allign_H_max(q,v) && doc.allign_size(q, v))
{
+ doc.debug_draw_line_green_buffer(v, q);
doc.add_to_separator_link(q, v);
All_Alone = false;
}
+ else
+ {doc.debug_draw_line_red_buffer(v, q);}
}
}
if(All_Alone){doc.invalidate_implicit_separator(v);}
@@ -193,14 +297,17 @@ namespace mymln
if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_right(q,v))
{
count[doc[q]]++;
+ doc.debug_draw_box_red_buffer(q);
+ doc.debug_draw_line_red_buffer(v, q);
}
-
}
else if (doc.contain_implicit_separator(q))
{
if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_right(q,v) && doc.allign_proximity_strict(v, q))
{
count[doc[q]]++;
+ doc.debug_draw_box_green_buffer(q);
+ doc.debug_draw_line_green_buffer(v, q);
}
}
diff --git a/scribo/sandbox/raphael/code/my/runtime/lib.hh b/scribo/sandbox/raphael/code/my/runtime/lib.hh
index 2a36ef3..b002e63 100644
--- a/scribo/sandbox/raphael/code/my/runtime/lib.hh
+++ b/scribo/sandbox/raphael/code/my/runtime/lib.hh
@@ -15,6 +15,9 @@ namespace mymln
run.add_function("separators.make_clean_right", &(mymln::document::separators::separators_make_clean_right));
run.add_function("separators.find_allign_left", &(mymln::document::separators::separators_find_allign));
run.add_function("separators.make_clean_left", &(mymln::document::separators::separators_find_allign));
+ run.add_function("separators.rebuild", &(mymln::document::separators::separators_rebuild));
+ run.add_function("separators.merge", &(mymln::document::separators::separators_merge));
+
}
template<typename L, typename F, typename D>
@@ -30,6 +33,7 @@ namespace mymln
run.add_function("clean.quote_items", &(mymln::document::clean_quote_items));
run.add_function("clean.between", &(mymln::document::clean_between));
+ run.add_function("clean.line_space", &(mymln::document::clean_line_space));
run.add_function("clean.line_link_item", &(mymln::document::clean_line_link_item));
run.add_function("clean.proximity_lines", &(mymln::document::clean_proximity_lines));
run.add_function("clean.quote_lines", &(mymln::document::clean_quote_lines));
@@ -45,18 +49,45 @@ namespace mymln
run.add_function("clean.backward_letters", &(mymln::document::clean_backward_letters));
run.add_function("clean.paragraphs_tab", &(mymln::document::clean_paragraphs_tab));
run.add_function("clean.proximity_letters", &(mymln::document::clean_proximity_letters));
+ run.add_function("clean.letter_previous_next_line", &(mymln::document::clean_letter_previous_next_line));
+ run.add_function("clean.V_lines", &(mymln::document::clean_V_lines));
+ run.add_function("clean.paragraphs_end_line", &(mymln::document::clean_paragraphs_end_line));
+ run.add_function("find.previous_next_line", &(mymln::document::find_previous_next_line));
}
template<typename L, typename F, typename D>
void lib_debug_save_all(mymln::document::document<L,F,D>& doc, std::string file)
{ doc.debug_save_all(file); }
template<typename L, typename F, typename D>
+ void lib_debug_save_all_separators(mymln::document::document<L,F,D>& doc, std::string file)
+ { doc.debug_save_all_separators(file); }
+ template<typename L, typename F, typename D>
+ void lib_debug_save_buffer_paragraphs(mymln::document::document<L,F,D>& doc, std::string file)
+ { doc.debug_save_buffer_paragraphs(file); }
+ template<typename L, typename F, typename D>
+ void lib_debug_save_buffer_lines(mymln::document::document<L,F,D>& doc, std::string file)
+ { doc.debug_save_buffer_lines(file); }
+ template<typename L, typename F, typename D>
void lib_debug_save_buffer(mymln::document::document<L,F,D>& doc, std::string file)
{ doc.debug_save_buffer(file); }
template<typename L, typename F, typename D>
void lib_debug_create_buffer(mymln::document::document<L,F,D>& doc)
{ doc.debug_create_buffer(); }
+ template<typename L, typename F, typename D>
+ void lib_debug_enable_buffer(mymln::document::document<L,F,D>& doc)
+ { doc.debug_enable_buffer(); }
+ template<typename L, typename F, typename D>
+ void lib_debug_disable_buffer(mymln::document::document<L,F,D>& doc)
+ { doc.debug_disable_buffer(); }
+
+ template<typename L, typename F, typename D>
+ void lib_debug_save_dot_graph(mymln::document::document<L,F,D>& doc, std::string file)
+ { doc.debug_save_dot_graph(file); }
+
+ template<typename L, typename F, typename D>
+ void lib_debug_breakpoint(mymln::document::document<L,F,D>& doc)
+ { doc.debug_breakpoint(); }
template<typename L, typename F, typename D>
void load_debug(runtime<L,F,D>& run)
@@ -64,6 +95,13 @@ namespace mymln
run.add_function_string("debug.save", &(lib_debug_save_all));
run.add_function("debug.create_buffer", &(lib_debug_create_buffer));
run.add_function_string("debug.save_buffer", &(lib_debug_save_buffer));
+ run.add_function_string("debug.save_dot_graph", &(lib_debug_save_dot_graph));
+ run.add_function_string("debug.save_separators", &(lib_debug_save_all_separators));
+ run.add_function_string("debug.save_buffer_paragraphs", &(lib_debug_save_buffer_paragraphs));
+ run.add_function_string("debug.save_buffer_lines", &(lib_debug_save_buffer_lines));
+ run.add_function("debug.enable_buffer", &(lib_debug_enable_buffer));
+ run.add_function("debug.disable_buffer", &(lib_debug_disable_buffer));
+ run.add_function("break", &(lib_debug_breakpoint));
}
@@ -122,10 +160,22 @@ namespace mymln
void lib_compute_letter_middle_width(mymln::document::document<L,F,D>& doc)
{ doc.compute_letter_middle_width(); }
template<typename L, typename F, typename D>
+ void lib_compute_paragraph_middle_height(mymln::document::document<L,F,D>& doc)
+ { doc.compute_paragraph_middle_height(); }
+ template<typename L, typename F, typename D>
+ void lib_compute_paragraph_middle_width(mymln::document::document<L,F,D>& doc)
+ { doc.compute_paragraph_middle_width(); }
+ template<typename L, typename F, typename D>
+ void lib_compute_letter_middle_space(mymln::document::document<L,F,D>& doc)
+ { doc.compute_letter_middle_space(); }
+ template<typename L, typename F, typename D>
void load_compute(runtime<L,F,D>& run)
{
run.add_function("compute.letter_middle_height", &(lib_compute_letter_middle_height));
run.add_function("compute.letter_middle_width", &(lib_compute_letter_middle_width));
+ run.add_function("compute.letter_middle_space", &(lib_compute_letter_middle_space));
+ run.add_function("compute.paragraph_middle_width", &(lib_compute_paragraph_middle_width));
+ run.add_function("compute.paragraph_middle_height", &(lib_compute_paragraph_middle_height));
}
diff --git a/scribo/sandbox/raphael/code/my/util/union.hh b/scribo/sandbox/raphael/code/my/util/union.hh
index 90a7e68..d6e39ba 100644
--- a/scribo/sandbox/raphael/code/my/util/union.hh
+++ b/scribo/sandbox/raphael/code/my/util/union.hh
@@ -17,7 +17,12 @@ namespace mymln
mark.fill(0);
mark_link.fill(0);
size_ = max_size;
+ Nset = 2;
+ Cset = 1;
}
+ inline unsigned int new_set()
+ {Cset = Nset; Nset++; return Cset;}
+
inline void reset()
{
mark.fill(0);
@@ -57,7 +62,7 @@ namespace mymln
}
else
{
- mark_link[A] = B;
+ mark_link[B] = A;
}
}
}
@@ -72,7 +77,11 @@ namespace mymln
else
{
mark_link[B] = Pos;
- mark_link[PosB] = Pos;
+ mark_link[A] = Pos;
+ if(PosB != 0)
+ {
+ mark_link[PosB] = Pos;
+ }
}
}
}
@@ -108,6 +117,8 @@ namespace mymln
mln::util::array<unsigned int> mark;
mln::util::array<unsigned int> mark_link;
unsigned int size_;
+ unsigned int Nset;
+ unsigned int Cset;
};
}
}
diff --git a/scribo/sandbox/raphael/code/test.cc b/scribo/sandbox/raphael/code/test.cc
index 1f8d94d..463e598 100644
--- a/scribo/sandbox/raphael/code/test.cc
+++ b/scribo/sandbox/raphael/code/test.cc
@@ -2,6 +2,8 @@
#include <vector>
#include <mln/io/pbm/all.hh>
#include <mln/io/ppm/all.hh>
+#include <mln/io/pgm/all.hh>
+#include <mln/io/magick/all.hh>
#include <mln/core/site_set/p_vertices.hh>
#include <mln/core/image/graph_elt_window.hh>
@@ -40,7 +42,7 @@
#include <my/util/vector_bbox_group.hh>
#include <my/document/document.hh>
#include <my/document/separator.hh>
-
+#include <my/document/outline.hh>
#include <my/document/clean.hh>
#include <my/document/recognition.hh>
@@ -58,6 +60,7 @@ void Process(std::string File, std::string Dir, mymln::runtime::runtime< value::
runtime.add_variable("DEBUG_FILE", Dir + "/debug_" + File);
+
std::cout << "Processing : " << File << endl;
/* CREATE GRAPH */
typedef value::int_u<16> uint16;
@@ -103,8 +106,8 @@ void Process(std::string File, std::string Dir, mymln::runtime::runtime< value::
mymln::document::document<uint16,float,short> doc(ima_blob, ima_influ, boxes, area_grph, areas_detected);
runtime.set_current_document(&doc);
doc.debug_set_image(ima);
- doc.vertical_separator_ratio_range(0.0f, 0.2f);
- doc.horizontal_separator_ratio_range(6.0f, 1000.0f);
+ doc.horizontal_separator_ratio_range(0.0f, 0.2f);
+ doc.vertical_separator_ratio_range(6.0f, 1000.0f);
doc.container_volume_range(40, 100);
for (uint16 N = 1; N <= areas_detected; N++)
@@ -206,12 +209,12 @@ void Process(std::string File, std::string Dir, mymln::runtime::runtime< value::
doc.recook_paragraphs();
mymln::document::clean_included_paragraphs(doc);
doc.recook_paragraphs();
- std::cout << "WORK ON GRAPH : " << timer.stop() << endl;
+
doc.recook_lines();
*/
runtime.run();
-
+ std::cout << "WORK ON GRAPH : " << timer.stop() << endl;
@@ -265,7 +268,7 @@ int main( int argc, char** argv)
else if(prog)
{
Prog = argv[N];
- run.load(Prog. c_str());
+ run.load(Prog.c_str());
prog = false;
}
else
--
1.7.2.5
1
0

last-svn-commit-886-gbb109db Add script system and recognition system. Fix some bugs
by Raphael Boissel 08 Sep '11
by Raphael Boissel 08 Sep '11
08 Sep '11
---
scribo/sandbox/raphael/code/makefile | 17 +-
scribo/sandbox/raphael/code/my/document/clean.hh | 488 +++++++--
.../sandbox/raphael/code/my/document/document.hh | 1182 ++++++++++++++++++--
scribo/sandbox/raphael/code/my/document/letters.hh | 12 +-
.../raphael/code/my/document/recognition.hh | 74 ++
.../sandbox/raphael/code/my/document/separator.hh | 64 +-
scribo/sandbox/raphael/code/my/runtime/lib.hh | 180 +++
scribo/sandbox/raphael/code/my/runtime/runtime.hh | 196 ++++
scribo/sandbox/raphael/code/test.cc | 232 +++--
9 files changed, 2157 insertions(+), 288 deletions(-)
create mode 100644 scribo/sandbox/raphael/code/my/document/recognition.hh
create mode 100644 scribo/sandbox/raphael/code/my/runtime/lib.hh
create mode 100644 scribo/sandbox/raphael/code/my/runtime/runtime.hh
diff --git a/scribo/sandbox/raphael/code/makefile b/scribo/sandbox/raphael/code/makefile
index 288352e..8eddc7a 100644
--- a/scribo/sandbox/raphael/code/makefile
+++ b/scribo/sandbox/raphael/code/makefile
@@ -1,13 +1,18 @@
speed:
- g++ test.cc -o ~/Bureau/test/bin/test.elf -I . -I ./../../../../milena -O3 -fwhole-program
- ~/Bureau/test/bin/test.elf -D ~/Bureau/test/bin ima.pbm
+ ccache g++ test.cc -o ~/Bureau/test/bin/test.elf -I . -I ./../../../../milena -O3 -fwhole-program
+ ~/Bureau/test/bin/test.elf -D ~/Bureau/test/bin -P ~/Bureau/test/bin/script ima.pbm
std:
- g++ test.cc -o ~/Bureau/test/bin/test.elf -I . -I ./../../../../milena
- ~/Bureau/test/bin/test.elf -D ~/Bureau/test/bin ima.pbm
+ ccache g++ test.cc -o ~/Bureau/test/bin/test.elf -I . -I ./../../../../milena
+ ~/Bureau/test/bin/test.elf -D ~/Bureau/test/bin -P ~/Bureau/test/bin/script ima.pbm
release:
- g++ test.cc -o ~/Bureau/test/bin/test.elf -I . -I ./../../../../milena -DNDEBUG -O2
- ~/Bureau/test/bin/test.elf -D ~/Bureau/test/bin ima.pbm
+ ccache g++ test.cc -o ~/Bureau/test/bin/test.elf -I . -I ./../../../../milena -DNDEBUG -O2
+ ~/Bureau/test/bin/test.elf -D ~/Bureau/test/bin -P ~/Bureau/test/bin/script ima.pbm
+debug:
+ ccache g++ test.cc -o ~/Bureau/test/bin/test.elf -I . -I ./../../../../milena -DNDEBUG -ggdb
+ ~/Bureau/test/bin/test.elf -D ~/Bureau/test/bin -P ~/Bureau/test/bin/script ima.pbm
+test:
+ ~/Bureau/test/bin/test.elf -D ~/Bureau/test/bin -P ~/Bureau/test/bin/script ima.pbm
clean:
rm -r -f ../bin/*
diff --git a/scribo/sandbox/raphael/code/my/document/clean.hh b/scribo/sandbox/raphael/code/my/document/clean.hh
index 56c7445..b996b8a 100644
--- a/scribo/sandbox/raphael/code/my/document/clean.hh
+++ b/scribo/sandbox/raphael/code/my/document/clean.hh
@@ -144,7 +144,7 @@ namespace mymln
if((!doc.contain_line(q)))
{
// draw::line(out, q,v, mln::literal::blue);
- if(doc.allign_V(q,v) && doc.allign_size(q, v) && (doc.allign_proximity_large(q, v) || doc.allign_proximity_large(v, q)) )
+ if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_proximity_large(q, v) )
{
doc.add_to_line_link(v, q);
All_Alone = false;
@@ -152,7 +152,7 @@ namespace mymln
}
else
{
- if(doc.allign_V(q,v) && doc.allign_size(q, v) && (doc.allign_proximity_large(q, v) || doc.allign_proximity_large(v, q)))
+ if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_proximity_large(q, v))
{
doc.add_to_line_link(q, v);
All_Alone = false;
@@ -186,7 +186,12 @@ namespace mymln
{
for_all(q)
{
- if(!doc.allign_H(q, v) && doc.allign_base_line(v, q))
+ if(
+ !doc.allign_H(q, v) &&
+ doc.allign_base_line_line_strict(v, q) &&
+ doc.allign_proximity(v,q) &&
+ doc.allign_smaller_line(v, q) &&
+ doc.get_line_length(v) > 2)
{
doc.add_to_line_link(v, q);
doc.add_letter_coerce(q);
@@ -200,14 +205,21 @@ namespace mymln
mln_niter_(nbh_t) q2(nbh, v2);
for_all(v2)
{
- if(doc.contain_line(v2))
+ if(doc.contain_line(v2) && !doc.contain_alone_letter(v2))
{
for_all(q2)
{
- if (doc.allign_H_Large(v2, q2) && doc.allign_top(v2, q2))
+ if (
+ doc.allign_H_large(v2, q2) &&
+ doc.allign_top(v2, q2) &&
+ doc.line_has(v2, q2) &&
+ doc.letter_ratio_XY(q2) < 2 &&
+ doc.allign_size_width_large(v2, q2))
{
doc.add_to_line_link(v2, q2);
doc.add_letter_coerce(q2);
+ if(doc.allign_H(v2,q2))
+ {doc.merge(v2,q2); doc.tag_label(v2, "i");}
}
}
}
@@ -216,12 +228,8 @@ namespace mymln
}
template<typename L, typename F, typename D>
- void clean_quote_items(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s)
+ void clean_quote_items(mymln::document::document<L,F,D>& doc)
{
- #ifndef NGRAPHDEBUG
- image2d<value::rgb8> out;
- mln::initialize(out, s);
- #endif
typedef vertex_image<point2d,bool> v_ima_g;
typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
v_ima_g mask = doc.fun_mask_start_end_lines();
@@ -239,38 +247,40 @@ namespace mymln
{
if(doc.allign_size(v,q))
{
- if(!doc.contain_alone_letter(v) && !doc.contain_alone_letter(q) )
+ if(!doc.contain_alone_letter(v) && !doc.contain_alone_letter(q) && doc.allign_proximity_large_left(v,q) )
{
if(
- (doc.allign_top(v, q) || doc.allign_top(doc.get_beginning_of_line(v), doc.get_label(q)))
+ (doc.allign_top(v, q) || doc.allign_top(doc.get_beginning_of_line(v), doc.get_label(q)) ) &&
+ doc.allign_smaller_line_letter(v,q)
)
{
- doc.add_to_line_link(v, q);
- draw::line(out, q,v, mln::literal::green);
+ if(doc.get_line_length(q) < 3 || doc.allign_V_line(v, q))
+ {
+ doc.add_to_line_link(v, q);
+ doc.tag_label(v, "'");
+ }
}
}
- else if(doc.allign_top(v, q) && !doc.allign_H(v, q))
- {
- doc.add_to_line_link(v, q);
- }
- else
+ else if(doc.allign_top(v, q) && !doc.allign_H(v, q) && doc.allign_proximity_large_left(v,q) && doc.allign_smaller_line_letter(v,q))
{
- draw::line(out, q,v, mln::literal::magenta);
+ if(doc.get_line_length(q) < 3 || doc.allign_V_line(v, q))
+ {
+ doc.add_to_line_link(v, q);
+ doc.tag_label(v, "'");
+ }
}
}
- else if (doc.allign_H_Large(q, v) && doc.allign_top(v, q))
+ else if (doc.allign_H_large(q, v) && doc.allign_top(v, q) && doc.allign_size_width_large(v, q))
{
doc.add_to_line_link(v, q);
- draw::line(out, q,v, mln::literal::blue);
+ if(doc.allign_H(v,q))
+ {doc.merge(v,q); doc.tag_label(v, "i");}
}
}
}
}
}
- #ifndef NGRAPHDEBUG
- io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out);
- #endif
doc.propage_line_link();
doc.recook_lines();
}
@@ -287,6 +297,7 @@ namespace mymln
mln_niter_(nbh_t) q(nbh, v);
for_all(v)
{
+
if(doc.contain_letter(v))
{
if(doc.contain_line(v))
@@ -303,9 +314,37 @@ namespace mymln
{
doc.add_to_line_link(v, q);
}
+
}
}
}
+ }
+ doc.propage_line_link();
+ }
+
+
+ template<typename L, typename F, typename D>
+ void clean_proximity_letters(mymln::document::document<L,F,D>& doc)
+ {
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_all_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ if(doc.contain_line(v))
+ {
+ for_all(q)
+ {
+ if(doc.contain_line(q) && doc.get_line_length(q) == 1 && doc.line_influence_has(v,q))
+ {
+ doc.add_to_line_link(q,v);
+ }
+ }
+ }
}
}
@@ -326,33 +365,80 @@ namespace mymln
{
for_all(q)
{
- if(doc.contain_line(q))
+ if(doc.same_line(q,v)){continue;}
+ if(doc.contain_alone_letter(q))
{
- if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_proximity(q,v))
+ if(doc.allign_V(q,v) && doc.allign_proximity_strict(q, v) && doc.allign_size_height(q, v))
{
doc.add_to_line_link(v, q);
+
+ }
+
+ }
+ else if(doc.contain_line(q))
+ {
+ if(doc.allign_V(q,v) && doc.allign_size_height_line_strict(q, v) && doc.allign_proximity_strict(q,v))
+ {
+ doc.add_to_line_link(v, q);
+
}
else if(doc.allign_size_height_line(q,v))
{
- if(doc.allign_proximity_line(q,v) && doc.allign_V_line(q, v))
+ if(doc.allign_proximity_line(q,v) && doc.allign_V_line_strict(q, v))
{
doc.add_to_line_link(v, q);
+ doc.debug_draw_line_green_buffer(v,q);
+ }
+ else if(doc.line_influence_reciprocal(q, v) && doc.allign_V_line_strict(q, v))
+ {
+ doc.add_to_line_link(v, q);
+ doc.debug_draw_line_red_buffer(v,q);
}
}
+
+
}
}
}
}
doc.propage_line_link();
}
-
+ template<typename L, typename F, typename D>
+ void clean_between(mymln::document::document<L,F,D>& doc)
+ {
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_start_end_lines();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ L Start = 0;
+ L End = 0;
+ for_all(q)
+ {
+ if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_proximity(q,v))
+ {
+ if(doc[q] == doc.get_beginning_of_line(q))
+ {Start = doc[q]; }
+ else
+ {End = doc[q]; }
+ }
+
+ }
+ if(Start && End){doc.add_to_line_link(Start, doc[v]);}
+ }
+ doc.propage_paragraph_link();
+
+ }
+
+
+
template<typename L, typename F, typename D>
- void clean_paragraph_items(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s)
+ void clean_paragraph_items(mymln::document::document<L,F,D>& doc)
{
- #ifndef NGRAPHDEBUG
- image2d<value::rgb8> out;
- mln::initialize(out, s);
- #endif
typedef vertex_image<point2d,bool> v_ima_g;
typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
v_ima_g mask = doc.fun_mask_start_end_lines();
@@ -373,19 +459,22 @@ namespace mymln
for_all(q)
{
- if(doc.allign_H_Large(q,v) && doc.allign_size(q, v) && doc.allign_proximity_V_line(v,q))
+ if(
+ doc.allign_H_large(q,v) &&
+ doc.allign_size_height_line(q, v) &&
+ doc.allign_proximity_V_line(v,q) &&
+ doc.allign_size_width_line(q, v)
+ )
{
if(doc.contain_paragraph(q))
{
doc.add_to_paragraph(q);
doc.add_to_paragraph_link(q, v);
- draw::line(out, q,v, mln::literal::green);
}
else
{
doc.add_to_paragraph(q);
doc.add_to_paragraph_link(v, q);
- draw::line(out, q,v, mln::literal::magenta);
}
}
@@ -398,8 +487,9 @@ namespace mymln
{
if(
doc.get_beginning_of_line(q) == doc[q] &&
- doc.allign_H_Large(q,v) &&
- doc.allign_size(q, v) &&
+ doc.allign_H_large(q,v) &&
+ doc.allign_size_height_line(q, v) &&
+ doc.allign_size_width_line(q, v) &&
doc.allign_proximity_V_line(v,q) &&
doc.allign_bottom_line(q,v)
)
@@ -416,7 +506,6 @@ namespace mymln
{
doc.add_to_paragraph_link(v, q);
}
- draw::line(out, q,v, mln::literal::blue);
}
else
{
@@ -427,7 +516,6 @@ namespace mymln
}
doc.add_to_paragraph(q);
doc.add_to_paragraph_link(v, q);
- draw::line(out, q,v, mln::literal::blue);
}
}
}
@@ -435,7 +523,6 @@ namespace mymln
}
}
}
- io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out);
doc.propage_paragraph_link();
}
@@ -473,10 +560,10 @@ namespace mymln
doc.propage_line_link();
}
template<typename L, typename F, typename D>
- void clean_alone_letters_lines(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s)
+ void clean_alone_letters_lines(mymln::document::document<L,F,D>& doc)
{
- image2d<value::rgb8> out;
- mln::initialize(out, s);
+ //image2d<value::rgb8> out;
+ //mln::initialize(out, s);
typedef vertex_image<point2d,bool> v_ima_g;
typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
v_ima_g mask = doc.fun_mask_alone_letters();
@@ -490,38 +577,303 @@ namespace mymln
{
for_all(q)
{
- draw::line(out, q,v, mln::literal::red);
- if(doc.line_has(v,q))
- {doc.add_to_line_link(v, q); draw::line(out, q,v, mln::literal::green);}
-
+ //draw::line(out, q,v, mln::literal::red);
+ if(
+ ((doc.line_influence_has(v,q) && doc.is_line_representative(q)) ||
+ doc.line_has(v,q)) &&
+ doc.allign_V(v, q)
+ )
+ {doc.add_to_line_link(v, q);}
+ else if(doc.line_has(v,q))
+ {doc.add_to_line_link(v, q);}
}
}
}
doc.propage_line_link();
- io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out);
+ //io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out);
+ }
+
+ template<typename L, typename F, typename D>
+ void remove_alone_letter(mymln::document::document<L,F,D>& doc)
+ {
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_alone_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ for_all(q)
+ {
+ if(doc.in_header(q) || doc.in_footer(q)){continue;}
+ if(doc.contain_alone_letter(q)) {doc.add_noise(q);}
+ }
+ }
+ }
+
+ template<typename L, typename F, typename D>
+ void clean_odd_letters(mymln::document::document<L,F,D>& doc)
+ {
+ for(unsigned int N = 1;N < doc.count(); N++)
+ {
+ if(doc.contain_line(N))
+ if (doc.get_letter_middle_height(N) * 3 < doc.get_bbox(N).len(0))
+ doc.add_noise(N);
+ else if(doc.get_letter_middle_width(N) * 4 < doc.get_bbox(N).len(1))
+ doc.add_noise(N);
+ }
+ }
+
+ template<typename L, typename F, typename D>
+ void clean_paragraphs_up(mymln::document::document<L,F,D>& doc)
+ {
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ if(doc.contain_paragraph(v))
+ {
+ for_all(q)
+ {
+ if(
+ doc.contain_paragraph(q) &&
+ !doc.same_paragraph(v, q) &&
+ doc.allign_top_paragraph(q, v) &&
+ doc.decal_left_paragraph(q, v) &&
+ doc.allign_size_height_line(q, v) &&
+ doc.allign_size_width_paragraph(q, v) &&
+ doc.get_paragraph_length(v) == 1 &&
+ doc.allign_H_paragraph(v, q) &&
+ doc.allign_proximity_V_line(v,q)
+ )
+ {
+ doc.add_to_paragraph_link(q,v);
+ }
+ }
+ }
+ }
+ doc.propage_paragraph_link();
+ }
+
+ template<typename L, typename F, typename D>
+ void clean_paragraphs_large(mymln::document::document<L,F,D>& doc)
+ {
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ if(doc.contain_paragraph(v) && doc.get_paragraph_length(v) > 1)
+ {
+ for_all(q)
+ {
+ if(
+ doc.contain_paragraph(q) &&
+ doc.get_paragraph_length(q) > 1 &&
+ !doc.same_paragraph(v, q) &&
+ doc.allign_top_paragraph(q, v))
+ {
+
+ if(
+ doc.decal_left_paragraph_strong(q, v) &&
+ doc.allign_size_height_line(q, v) &&
+ doc.allign_size_width_paragraph(q, v) &&
+ doc.allign_H_paragraph(v, q) &&
+ doc.allign_proximity_V_line(v,q)
+ )
+ {
+ doc.add_to_paragraph_link(q,v);
+
+ }
+ }
+ }
+ }
+ }
+ doc.propage_paragraph_link();
+
+
+
+ }
+ template<typename L, typename F, typename D>
+ void clean_included_paragraphs(mymln::document::document<L,F,D>& doc)
+ {
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ if(doc.contain_paragraph(v) && doc.get_paragraph_length(v) > 1)
+ {
+ for_all(q)
+ {
+ if(
+ doc.contain_paragraph(q) &&
+ doc.get_paragraph_length(q) == 1 &&
+ !doc.same_paragraph(q, v) &&
+ doc.paragraph_included_influence(v, q) &&
+ doc.allign_size_height_line(v, q))
+ {
+ if(doc.line_influence_reciprocal(q, v))
+ doc.add_to_paragraph_link(v,q);
+ }
+ }
+ }
+ }
+ doc.propage_paragraph_link();
+ }
+
+ template<typename L, typename F, typename D>
+ void clean_lines_space(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s)
+ {
+ image2d<value::rgb8> out;
+ mln::initialize(out, s);
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ for_all(q)
+ {
+ if(doc.same_line(q, v))
+ {
+ draw::line(out, q,v, mln::literal::red);
+ if(doc.in_beginning_of_line(q) || doc.in_end_of_line(q))
+ {
+ draw::line(out, q,v, mln::literal::green);
+ if(doc.space(q, v) > doc.get_letter_middle_space(q) * 10)
+ {
+ draw::line(out, q,v, mln::literal::blue);
+ /*if(doc[q] == doc.get_beginning_of_line(q))
+ doc.add_to_line_link(v, q); */
+ //doc.add_noise(q);
+ }
+ }
+ }
+ }
+ }
+ doc.propage_line_link();
+ io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out);
+ }
+
+
+ template<typename L, typename F, typename D>
+ void clean_included_letters(mymln::document::document<L,F,D>& doc)
+ {
+
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_all_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ for_all(q)
+ {
+ if(doc.letter_included(q, v) && doc.allign_size_large_inside(q, v))
+ {
+
+
+ doc.merge(q,v);
+ }
+ }
+ }
+ doc.propage_line_link();
+
}
+
+
template<typename L, typename F, typename D>
- void remove_alone_letter(mymln::document::document<L,F,D>& doc)
+ void clean_backward_letters(mymln::document::document<L,F,D>& doc)
{
- typedef vertex_image<point2d,bool> v_ima_g;
- typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
- v_ima_g mask = doc.fun_mask_alone_letters();
- mln_piter_(v_ima_g) v(mask.domain());
- typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
- nbh_t nbh(mask);
- mln_niter_(nbh_t) q(nbh, v);
- for_all(v)
- {
- for_all(q)
- {
- if(doc.in_header(q) || doc.in_footer(q)){continue;}
- doc.add_noise(q);
- }
- }
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_start_lines();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ if(!doc.contain_line(v))
+ {
+ for_all(q)
+ {
+ if(
+ doc.contain_line(q) &&
+ doc.get_line_length(q)> 5 &&
+ doc.allign_V(v, q) &&
+ doc.allign_proximity(v, q) &&
+ doc.allign_size_height(v, q)
+ )
+ {
+ doc.add_to_line_link(q,v);
+ doc.debug_draw_line_green_buffer(v, q);
+ }
+ }
+ }
+ }
+ doc.propage_line_link();
}
-
-
+
+ template<typename L, typename F, typename D>
+ void clean_paragraphs_tab(mymln::document::document<L,F,D>& doc)
+ {
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_all_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ if(doc.contain_paragraph(v))
+ {
+ for_all(q)
+ {
+ if(
+ doc.contain_paragraph(q) &&
+ !doc.same_paragraph(q,v) &&
+ !doc.paragraph_start_with_tab(q) &&
+ doc.allign_top_paragraph(q, v) &&
+ doc.get_paragraph_length(q) > 1 &&
+ doc.get_first_line_ID(doc[q]) == doc.get_line_ID(doc[q]) &&
+ doc.allign_size_width_paragraph(q,v) &&
+ doc.allign_proximity_paragraph_up(q,v) &&
+ doc.allign_H_paragraph(q,v)
+ )
+ {
+ doc.add_to_paragraph_link(q,v);
+ doc.debug_draw_line_green_buffer(v, q);
+ }
+ }
+ }
+ }
+ doc.propage_paragraph_link();
+ }
+
}
}
diff --git a/scribo/sandbox/raphael/code/my/document/document.hh b/scribo/sandbox/raphael/code/my/document/document.hh
index 1a84edb..880d4c5 100644
--- a/scribo/sandbox/raphael/code/my/document/document.hh
+++ b/scribo/sandbox/raphael/code/my/document/document.hh
@@ -40,7 +40,7 @@ namespace mymln
// WARNING: Methods on lines like get_end_of_line can be used only after a line cooking.
-
+ document(){}
document(image2d<Label>& ima, image2d<Label>& ima_influ,mln::util::array<box2d>& bboxgp, g_vertices_p& area_graph, Label Areas)
{
img = ima;
@@ -56,17 +56,19 @@ namespace mymln
alone_letters_mask = fun::i2v::array<bool>(Areas + 1);
implicit_separators_left_mask = fun::i2v::array<bool>(Areas + 1);
implicit_separators_right_mask = fun::i2v::array<bool>(Areas + 1);
+ kill_mask = fun::i2v::array<bool>(Areas + 1);
CImpSep = 1;
NImpSep = 2;
lines_union = mymln::util::union_find<Label>(Areas + 1);
implicit_separators_union = mymln::util::union_find<Label>(Areas + 1);
-
+ debug_buffer_enable = false;
paragraphs_union = mymln::util::union_find<Label>(Areas + 1);
tag_lbl = mln::util::array<std::string>(Areas + 1);
+ Btag_lbl = mln::util::array<bool>(Areas + 1);
lines_split = mln::util::array<Label>(Areas + 1);
lines_split.fill(0);
-
+ tag_lbl.fill("");
img_influ = ima_influ;
CSep = 0;
CSepH = 0;
@@ -79,6 +81,8 @@ namespace mymln
Areas_Number_ = Areas + 1;
}
+ inline unsigned int count()
+ {return Areas_Number_;}
/* OPERATION ON PAGE */
inline bool in_header(const point2d& p)
{ return p[0] < (img_influ.domain().len(0) / 8);}
@@ -93,16 +97,28 @@ namespace mymln
/* OPERATION ON PARAGRAPH */
inline bool link_paragraphs()
{
- for(unsigned int N = 1; N < Areas_Number_; N++)
- {
+ paragraphs_union[0] = 0;
+ for(unsigned int N = 1; N < Areas_Number_; N++)
+ {
paragraphs_union.invalidate_link(N);
- if(start_lines_mask(N))
+ if (!contain_paragraph(N) && contain_line(N))
{
- paragraphs_union.add_self_link(N);
+ jump_to_paragraph(N);
+ if(start_lines_mask(N))
+ {
+ add_to_paragraph(N);
+ paragraphs_union.add_self_link(N);
+ }
}
- else if(contain_line(N))
+ }
+ for(unsigned int N = 1; N < Areas_Number_; N++)
+ {
+
+ if (!contain_paragraph(N) && contain_line(N))
{
- if(get_beginning_of_line(N) == 0){std::cout <<"ERROR#\n";}
+ jump_to_paragraph(get_beginning_of_line(N));
+ add_to_paragraph(N);
+ if(contain_line(N) && get_beginning_of_line(N) != 0)
paragraphs_union.add_link(get_beginning_of_line(N), N);
}
}
@@ -200,12 +216,14 @@ namespace mymln
inline void cook_line_splitting_exclusive()
{
+ std::cout << "--> start union exclusive" << std::endl;
for(unsigned int N = 1; N < Areas_Number_; N++)
{
lines_union.invalidate_link(N);
if(end_lines_mask(N) || implicit_separators_right_mask(N))
split_line_exclusive(N);
}
+ std::cout << "--> start linking" << std::endl;
for(unsigned int N = 1; N < Areas_Number_; N++)
{
if(lines_union.is_self_link(N))
@@ -221,17 +239,19 @@ namespace mymln
}
lines_union[0] = 0;
lines_union.invalidate_link(0);
+ std::cout << "--> propage union " << std::endl;
for(unsigned int N = 1; N < Areas_Number_; N++)
{
if(!contain_line(N) || lines_union.is_self_link(N))
continue;
Label pos = get_end_of_line(N);
- while(lines_split[pos] && _bboxgp[lines_split[pos]].pmin()[1] > _bboxgp[N].pmin()[1])
- pos = lines_split[pos];
- if(pos != 0)
+ Label oldpos = pos;
+ while(lines_split[pos] && _bboxgp[lines_split[pos]].pmin()[1] >= _bboxgp[N].pmin()[1])
+ {oldpos = pos; pos = lines_split[pos];}
+ if(pos != 0 && pos != N && pos < Areas_Number_ )
{lines_union[N] = lines_union[pos]; lines_union.add_link(pos,N);}
}
-
+ std::cout << "--> end propage union " << std::endl;
//lines_union.propage_links();lines_union
cook_lines();
}
@@ -266,10 +286,9 @@ namespace mymln
Label pos = get_beginning_of_line(N);
while(lines_split[pos] && _bboxgp[lines_split[pos]].pmin()[1] < _bboxgp[N].pmin()[1])
pos = lines_split[pos];
- if(pos != 0)
+ if(pos != 0 && pos != N && pos < Areas_Number_ )
{lines_union[N] = lines_union[pos]; lines_union.add_link(pos,N);}
}
-
//lines_union.propage_links();lines_union
cook_lines();
}
@@ -285,6 +304,46 @@ namespace mymln
{ return same_line(img_influ(A), img_influ(B)); }
inline bool same_line(const Label A, const Label B)
{ return lines_union[A] == lines_union[B]; }
+ inline bool same_paragraph(const point2d& A, const point2d& B)
+ { return same_paragraph(img_influ(A), img_influ(B)); }
+ inline bool same_paragraph(const Label A, const Label B)
+ { return paragraphs_union[A] == paragraphs_union[B]; }
+
+ inline bool in_beginning_of_line(const point2d& A)
+ {return in_beginning_of_line(img_influ(A));}
+ inline bool in_beginning_of_line(const Label A)
+ {return lines_bbox[lines_union[A]].len(1) / 8 + lines_bbox[lines_union[A]].pmin()[1] > _bboxgp[A].pmax()[1];}
+
+
+ inline bool is_line_representative(const point2d& A)
+ {return is_line_representative(img_influ(A));}
+ inline bool is_line_representative(const Label A)
+ {return lines_bbox[lines_union[A]].len(0) < _bboxgp[A].len(0) * 2 ;}
+
+
+ inline bool in_end_of_line(const point2d& A)
+ {return in_end_of_line(img_influ(A));}
+ inline bool in_end_of_line(const Label A)
+ {return lines_bbox[lines_union[A]].pmax()[1] - lines_bbox[lines_union[A]].len(1) / 8 < _bboxgp[A].pmax()[1];}
+
+ inline unsigned int space(const point2d& A,const point2d& B)
+ {return space(img_influ(A), img_influ(B));}
+ inline unsigned int space(const Label A, const Label B)
+ {
+ box2d LB = _bboxgp[A];
+ box2d RB = _bboxgp[B];
+
+ int DisA = LB.pmax()[1] - RB.pmin()[1];
+ int DisB = RB.pmax()[1] - LB.pmin()[1];
+ if(DisA < 0){DisA = -DisA;}
+ if(DisB < 0){DisB = -DisB;}
+ if(DisA > DisB)
+ { DisA = DisB; }
+ return DisA;
+ }
+
+
+
inline void add_new_line(const point2d& point)
{ add_new_line(img_influ(point)); }
@@ -351,6 +410,7 @@ namespace mymln
/* SET UP SPECIAL MASK TO FALSE */
implicit_separators_left_mask(lbl) = false;
implicit_separators_right_mask(lbl) = false;
+ kill_mask(lbl) = false;
}
void inline invalid_letter(const point2d& point)
{invalid_letter(img_influ(point));}
@@ -400,8 +460,9 @@ namespace mymln
void add_letter(const Label lbl)
{
CLet++;
- if(label_valid_size_Min_(lbl, 2))
+ if(label_valid_size_Min_(lbl, 3) || label_valid_size_Min_Large_(lbl, 2))
{
+ img_influ(_bboxgp[lbl].pcenter()) = lbl;
letters_mask(lbl) = true;
all_letters_mask(lbl) = true;
separators_mask(lbl) = false;
@@ -519,6 +580,15 @@ namespace mymln
inline bool allign_top( const point2d& Left, const point2d& Right)
{return allign_top(img_influ(Left), img_influ(Right));}
+ inline bool allign_top_line( const point2d& Left, const point2d& Right)
+ {return allign_top_line(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_top_line( const Label Left, const Label Right)
+ {
+ short int allignV = lines_bbox[lines_union[Left]].pcenter()[0] - lines_bbox[lines_union[Right]].pcenter()[0];
+ return (!allignV < 0) && allignV * 2 > lines_bbox[lines_union[Left]].len(0);
+ }
+
inline bool allign_top( const Label Left, const Label Right)
{
short int allignV = label_allign_(0, Left, Right);
@@ -535,6 +605,10 @@ namespace mymln
return allignV < label_size_(0, Left) && (_bboxgp[Left].pcenter()[0]) > (_bboxgp[Right].pcenter()[0]);
}
+
+
+
+
inline bool allign_up_line_line( const point2d& Left, const point2d& Right)
{return allign_up_line_line(img_influ(Left), img_influ(Right));}
@@ -548,10 +622,30 @@ namespace mymln
(lines_bbox[lines_union[Left]].pcenter()[0]) > (lines_bbox[lines_union[Left]].pcenter()[0]);
}
- inline bool allign_H_Large( const point2d& Left, const point2d& Right)
- {return allign_H_Large(img_influ(Left), img_influ(Right));}
+ inline bool allign_left( const point2d& Left, const point2d& Right)
+ {return allign_left(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_left( const Label Left, const Label Right)
+ {
+
+ return _bboxgp[Left].pmin()[0] > _bboxgp[Right].pmin()[0];
+ }
+
+ inline bool allign_right( const point2d& Left, const point2d& Right)
+ {return allign_right(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_right( const Label Left, const Label Right)
+ {
+
+ return _bboxgp[Left].pmin()[0] < _bboxgp[Right].pmin()[0];
+ }
+
+
- inline bool allign_H_Large( const Label Left, const Label Right)
+ inline bool allign_H_large( const point2d& Left, const point2d& Right)
+ {return allign_H_large(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_H_large( const Label Left, const Label Right)
{
short int allignV = label_allign_(1, Left, Right) * 1.5f;
return allignV < label_size_(1, Left);
@@ -610,20 +704,80 @@ namespace mymln
inline bool allign_proximity( const Label Left, const Label Right)
{
- short int SizeL0 = label_size_(0, Left);
- short int SizeL1 = label_size_(1, Left);
- short int Swap = 0;
- if(SizeL0 < SizeL1)
- { SizeL0 = SizeL1; }
- short int Dis = _bboxgp[Left].pmin()[1] - _bboxgp[Right].pmin()[1];
- if(Dis < 0)
- Dis = -Dis;
- return Dis < SizeL0 * 1.5f;
+ box2d LB = _bboxgp[Left];
+ box2d RB = _bboxgp[Right];
+
+ int DisA = LB.pmax()[1] - RB.pmin()[1];
+ int DisB = RB.pmax()[1] - LB.pmin()[1];
+ if(DisA < 0){DisA = -DisA;}
+ if(DisB < 0){DisB = -DisB;}
+ if(DisA > DisB)
+ { DisA = DisB; }
+
+ unsigned int HA = LB.len(0);
+ unsigned int HB = LB.len(1);
+
+ if(HB > HA)
+ { HA = HB; }
+ return (DisA * 2) < HA * 3;
}
- inline bool allign_proximity_line( const point2d& Left, const point2d& Right)
- {return allign_proximity_line(img_influ(Left), img_influ(Right));}
+
+
+
+ inline bool allign_proximity_strict( const point2d& Left, const point2d& Right)
+ {return allign_proximity_strict(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_proximity_strict( const Label Left, const Label Right)
+ {
+ box2d LB = _bboxgp[Left];
+ box2d RB = _bboxgp[Right];
+
+ int DisA = LB.pmax()[1] - RB.pmin()[1];
+ int DisB = RB.pmax()[1] - LB.pmin()[1];
+ if(DisA < 0){DisA = -DisA;}
+ if(DisB < 0){DisB = -DisB;}
+ if(DisA > DisB)
+ { DisA = DisB; }
+
+ unsigned int HA = LB.len(0);
+ unsigned int HB = RB.len(0);
+ unsigned int VA = LB.len(1);
+ unsigned int VB = RB.len(1);
+
+ if(VA > HA)
+ { HA = VA; }
+ if(VB > HB)
+ { HB = VB; }
+ return (DisA * 2) < HA && (DisA * 2) < HB;
+ }
+
+
+ inline bool allign_proximity_paragraph_up( const point2d& Left, const point2d& Right)
+ {return allign_proximity_paragraph_up(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_proximity_paragraph_up( const Label Left, const Label Right)
+ {
+ box2d LB = paragraphs_bbox[paragraphs_union[Left]];
+ box2d RB = paragraphs_bbox[paragraphs_union[Right]];
+
+ int DisA = LB.pmax()[0] - RB.pmin()[0];
+ int DisB = RB.pmax()[0] - LB.pmin()[0];
+ if(DisA < 0){DisA = -DisA;}
+ if(DisB < 0){DisB = -DisB;}
+ if(DisA > DisB)
+ { DisA = DisB; }
+
+ unsigned int HA = lines_bbox[paragraphs_first_line[paragraphs_union[Left]]].len(0);
+ unsigned int HB = lines_bbox[paragraphs_first_line[paragraphs_union[Right]]].len(0);
+ if(HA < HB)
+ { HA = HB; }
+ return (DisA * 5) < HA;
+ }
+
+ inline bool allign_proximity_line_large( const point2d& Left, const point2d& Right)
+ {return allign_proximity_line_large(img_influ(Left), img_influ(Right));}
inline bool allign_size_height_line( const point2d& Left, const point2d& Right)
{
@@ -637,6 +791,61 @@ namespace mymln
return SizeR > (SizeL / 2.2f) && SizeR < (SizeL * 2.2);
}
+ inline bool allign_size_height_line_strict( const point2d& Left, const point2d& Right)
+ {
+ return allign_size_height_line_strict(img_influ(Left), img_influ(Right));
+ }
+
+ inline bool allign_size_height_line_strict( const Label Left, const Label Right)
+ {
+ short int SizeL = lines_bbox[lines_union[Left]].len(0);
+ short int SizeR = lines_bbox[lines_union[Right]].len(0);
+ return SizeR > (SizeL / 1.3f) && SizeR < (SizeL * 1.3);
+ }
+
+ inline bool allign_proximity_line( const point2d& Left, const point2d& Right)
+ {return allign_proximity_line(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_size_width_large( const point2d& Left, const point2d& Right)
+ {
+ return allign_size_width_large(img_influ(Left), img_influ(Right));
+ }
+
+ inline bool allign_size_width_large( const Label Left, const Label Right)
+ {
+ short int SizeL = _bboxgp[lines_union[Left]].len(1);
+ short int SizeR = _bboxgp[lines_union[Right]].len(1);
+ return SizeR >= (SizeL / 5) && SizeR <= (SizeL * 5);
+ }
+
+
+
+
+ inline bool allign_size_width_line( const point2d& Left, const point2d& Right)
+ {
+ return allign_size_width_line(img_influ(Left), img_influ(Right));
+ }
+
+ inline bool allign_size_width_line( const Label Left, const Label Right)
+ {
+ short int SizeL = lines_bbox[lines_union[Left]].len(1);
+ short int SizeR = lines_bbox[lines_union[Right]].len(1);
+ return SizeR > (SizeL / 4) && SizeR < (SizeL * 4);
+ }
+
+ inline bool allign_size_width_paragraph( const point2d& Left, const point2d& Right)
+ {
+ return allign_size_width_paragraph(img_influ(Left), img_influ(Right));
+ }
+
+ inline bool allign_size_width_paragraph( const Label Left, const Label Right)
+ {
+ short int SizeL = paragraphs_bbox[paragraphs_union[Left]].len(1);
+ short int SizeR = paragraphs_bbox[paragraphs_union[Right]].len(1);
+ return SizeR > ((SizeL * 2) / 3) && SizeR < ((SizeL * 3) / 2);
+ }
+
+
inline bool allign_proximity_line( const Label Left, const Label Right)
{
box2d LB = lines_bbox[lines_union[Left]];
@@ -658,6 +867,27 @@ namespace mymln
}
+ inline bool allign_proximity_line_large( const Label Left, const Label Right)
+ {
+ box2d LB = lines_bbox[lines_union[Left]];
+ box2d RB = lines_bbox[lines_union[Right]];
+
+ int DisA = LB.pmax()[1] - RB.pmin()[1];
+ int DisB = RB.pmax()[1] - LB.pmin()[1];
+ if(DisA < 0){DisA = -DisA;}
+ if(DisB < 0){DisB = -DisB;}
+ if(DisA > DisB)
+ { DisA = DisB; }
+
+ unsigned int HA = LB.len(0);
+ unsigned int HB = RB.len(0);
+
+ if(HA < HB)
+ { HA = HB; }
+ return (DisA * 2) < HA;
+ }
+
+
inline bool allign_proximity_V_line( const point2d& Left, const point2d& Right)
{return allign_proximity_V_line(img_influ(Left), img_influ(Right));}
@@ -680,21 +910,93 @@ namespace mymln
{ HA = HB; }
return (DisA * 1.5f) < HA;
}
+
+ inline bool allign_H_paragraph( const point2d& Left, const point2d& Right)
+ {return allign_H_paragraph(img_influ(Left), img_influ(Right));}
+ inline bool allign_H_paragraph( const Label Left, const Label Right )
+ {
+ short int Dis = paragraphs_bbox[paragraphs_union[Left]].pcenter()[1] - paragraphs_bbox[paragraphs_union[Right]].pcenter()[1];
+ if(Dis < 0){Dis = -Dis;}
+ return
+ Dis * 2 < paragraphs_bbox[paragraphs_union[Right]].len(1) &&
+ Dis * 2 < paragraphs_bbox[paragraphs_union[Left]].len(1);
+ }
+
+ inline bool allign_top_paragraph( const point2d& Left, const point2d& Right)
+ {return allign_top_paragraph(img_influ(Left), img_influ(Right));}
+ inline bool allign_top_paragraph( const Label Left, const Label Right )
+ {return paragraphs_bbox[paragraphs_union[Left]].pmin()[0] > paragraphs_bbox[paragraphs_union[Right]].pmax()[0]; }
+
+ inline bool decal_left_paragraph(const point2d& Left, const point2d& Right)
+ {return decal_left_paragraph(img_influ(Left), img_influ(Right));}
+ inline bool decal_left_paragraph( const Label Left, const Label Right )
+ {
+ return paragraphs_bbox[paragraphs_union[Left]].pmin()[1] > paragraphs_bbox[paragraphs_union[Right]].pmin()[1]
+ + (paragraphs_bbox[paragraphs_union[Right]].len(1) / 40) ;
+ }
+
+ inline bool decal_left_paragraph_strong(const point2d& Left, const point2d& Right)
+ {return decal_left_paragraph_strong(img_influ(Left), img_influ(Right));}
+ inline bool decal_left_paragraph_strong( const Label Left, const Label Right )
+ {
+ return paragraphs_bbox[paragraphs_union[Left]].pmin()[1] > paragraphs_bbox[paragraphs_union[Right]].pmin()[1]
+ + (paragraphs_bbox[paragraphs_union[Right]].len(1) / 20) ;
+ }
+
+
+ inline bool allign_proximity_large_left( const point2d& Left, const point2d& Right)
+ {return allign_proximity_large_left(img_influ(Left), img_influ(Right));}
+ inline bool allign_proximity_large_left( const Label Left, const Label Right)
+ {
+ box2d LB = _bboxgp[Left];
+ box2d RB = _bboxgp[Right];
+
+ int DisA = LB.pmax()[1] - RB.pmin()[1];
+ int DisB = RB.pmax()[1] - LB.pmin()[1];
+ if(DisA < 0){DisA = -DisA;}
+ if(DisB < 0){DisB = -DisB;}
+ if(DisA > DisB)
+ { DisA = DisB; }
+
+ unsigned int HA = LB.len(0);
+ unsigned int HB = RB.len(0);
+ unsigned int VA = LB.len(1);
+ unsigned int VB = RB.len(1);
+
+ if(VA > HA)
+ { HA = VA; }
+ if(VB > HB)
+ { HB = VB; }
+ return (DisA) < HA * 2;
+ }
+
+
inline bool allign_proximity_large( const point2d& Left, const point2d& Right)
{return allign_proximity_large(img_influ(Left), img_influ(Right));}
inline bool allign_proximity_large( const Label Left, const Label Right)
{
- short int SizeL0 = label_size_(0, Left);
- short int SizeL1 = label_size_(1, Left);
- short int Swap = 0;
- if(SizeL0 < SizeL1)
- { SizeL0 = SizeL1; }
- short int Dis = _bboxgp[Left].pmin()[1] - _bboxgp[Right].pmin()[1];
- if(Dis < 0)
- Dis = -Dis;
- return Dis < SizeL0 * 3;
+ box2d LB = _bboxgp[Left];
+ box2d RB = _bboxgp[Right];
+
+ int DisA = LB.pmax()[1] - RB.pmin()[1];
+ int DisB = RB.pmax()[1] - LB.pmin()[1];
+ if(DisA < 0){DisA = -DisA;}
+ if(DisB < 0){DisB = -DisB;}
+ if(DisA > DisB)
+ { DisA = DisB; }
+
+ unsigned int HA = LB.len(0);
+ unsigned int HB = RB.len(0);
+ unsigned int VA = LB.len(1);
+ unsigned int VB = RB.len(1);
+
+ if(VA > HA)
+ { HA = VA; }
+ if(VB > HB)
+ { HB = VB; }
+ return (DisA) < HA * 2 && (DisA) < HB * 2;
}
@@ -705,7 +1007,23 @@ namespace mymln
short int SizeR = label_size_(0, Right);
return SizeR > (SizeL / 3) && SizeR < (SizeL * 3);
}
+
+ inline bool allign_size_strict( const point2d& Left, const point2d& Right)
+ {return allign_size(img_influ(Left), img_influ(Right));}
+ inline bool allign_size_strict( const Label Left, const Label Right)
+ {
+ short int SizeL0 = label_size_(0, Left);
+ short int SizeR0 = label_size_(0, Right);
+ short int SizeL1 = label_size_(1, Left);
+ short int SizeR1 = label_size_(1, Right);
+ short int Swap = 0;
+ if(SizeL0 < SizeL1)
+ { SizeL0 = SizeL1; }
+ if(SizeR0 < SizeR1){SizeR0 = SizeR1;}
+ return SizeR0 > (SizeL0 / 2) && SizeR0 < (SizeL0 * 2);
+ }
+
inline bool allign_size( const point2d& Left, const point2d& Right)
{return allign_size(img_influ(Left), img_influ(Right));}
@@ -754,6 +1072,18 @@ namespace mymln
return allignV < lines_bbox[lines_union[Left]].len(0) && allignV < lines_bbox[lines_union[Right]].len(0);
}
+ inline bool allign_V_line_strict( const point2d& Left, const point2d& Right)
+ {return allign_V_line_strict(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_V_line_strict( Label Left, Label Right)
+ {
+ short int allignV = lines_bbox[lines_union[Left]].pcenter()[0] - lines_bbox[lines_union[Right]].pcenter()[0];
+ if(allignV<0){allignV = -allignV;}
+ allignV *= 4;
+ return allignV < lines_bbox[lines_union[Left]].len(0) && allignV < lines_bbox[lines_union[Right]].len(0);
+ }
+
+
inline bool allign_center_line( const point2d& Left, const point2d& Right)
{return allign_center_line(img_influ(Left), img_influ(Right));}
inline bool allign_center_line( Label Left, Label Right)
@@ -762,6 +1092,7 @@ namespace mymln
if(allignC<0){allignC = -allignC;}
return allignC * 5 < lines_bbox[lines_union[Left]].len(0);
}
+
inline bool allign_smaller_line( const point2d& Left, const point2d& Right)
{return allign_smaller_line(img_influ(Left), img_influ(Right));}
@@ -770,6 +1101,12 @@ namespace mymln
return lines_bbox[lines_union[Left]].len(0) > (lines_bbox[lines_union[Right]].len(0) * 2);
}
+ inline bool allign_smaller_line_letter( const point2d& Left, const point2d& Right)
+ {return allign_smaller_line_letter(img_influ(Left), img_influ(Right));}
+ inline bool allign_smaller_line_letter( Label Left, Label Right)
+ {
+ return lines_bbox[lines_union[Left]].len(0) > (_bboxgp[Right].len(0) * 1.5f);
+ }
inline bool allign_V_large( const point2d& Left, const point2d& Right)
{return allign_V_large(img_influ(Left), img_influ(Right));}
@@ -801,6 +1138,18 @@ namespace mymln
allignV < lines_bbox[lines_union[Left]].len(0) &&
lines_bbox[lines_union[Left]].pcenter()[0] < lines_bbox[lines_union[Right]].pcenter()[0];
}
+ inline bool allign_base_line_line_strict(const point2d& Left, const point2d& Right)
+ {return allign_base_line_line_strict(img_influ(Left), img_influ(Right));}
+ inline bool allign_base_line_line_strict(const Label Left, const Label Right)
+ {
+ short int allignV = lines_bbox[lines_union[Left]].pcenter()[0] - _bboxgp[Right].pcenter()[0];
+ if(allignV<0){allignV = -allignV;}
+ allignV *= 3;
+ return
+ allignV < lines_bbox[lines_union[Left]].len(0) &&
+ lines_bbox[lines_union[Left]].pcenter()[0] < lines_bbox[lines_union[Right]].pcenter()[0];
+ }
+
inline bool allign_bottom(const point2d& Left, const point2d& Right)
{return allign_bottom(img_influ(Left), img_influ(Right));}
inline bool allign_bottom(const Label Left, const Label Right)
@@ -832,7 +1181,15 @@ namespace mymln
Float AFactor = label_allign_(1, Left, Right);
return AFactor < label_size_(1,Left);
}
-
+ inline bool paragraph_start_with_tab(const point2d& Point)
+ { return paragraph_start_with_tab(img_influ(Point));}
+ inline bool paragraph_start_with_tab(const Label Paragraph)
+ {
+ Label FirstLine = paragraphs_first_line[paragraphs_union[Paragraph]];
+ return
+ _bboxgp[FirstLine].pmin()[1] > paragraphs_bbox[paragraphs_union[Paragraph]].pmin()[1] +
+ (paragraphs_bbox[paragraphs_union[Paragraph]].len(1) / 20);
+ }
void stat()
{
@@ -844,38 +1201,158 @@ namespace mymln
std::cout << " lines(s) : " << CLine << std::endl;
}
- void debug_save_all(std::string file, image2d<bool> source)
+ void debug_set_image(image2d<bool>& source)
+ {debug_source = source;}
+ inline void debug_create_buffer()
+ {
+ mln::initialize(debug_buffer,img_influ);
+ debug_buffer_enable = true;
+ }
+
+ inline void debug_save_buffer(std::string file)
+ {
+ debug_buffer_enable = false;
+ io::ppm::save(mln::debug::superpose(debug_buffer, debug_source, literal::white) , file);
+ }
+
+ inline void debug_draw_line_red_buffer(const point2d& A,const point2d& B )
+ {
+ if(debug_buffer_enable)
+ draw::line(debug_buffer, A, B, mln::literal::red);
+ }
+ inline void debug_draw_line_green_buffer(const point2d& A,const point2d& B )
+ {
+ if(debug_buffer_enable)
+ draw::line(debug_buffer, A, B, mln::literal::green);
+ }
+
+ void debug_save_union(std::string file)
+ {debug_save_union(file, debug_source);}
+ void debug_save_union(std::string file, image2d<bool> source)
{
image2d<value::rgb8> ima_color;
mln::initialize(ima_color,img_influ);
- for(unsigned int N = 0; N < lines_bbox.size(); N++)
+ for(unsigned int N = 1; N < lines_union.size(); N++)
{
- if(lines_bbox[N].is_valid())
+ if(lines_union[N])
{
- draw::box(ima_color, lines_bbox[N], mln::literal::blue);
+ if(N == lines_union.link(N))
+ draw::box(ima_color, _bboxgp[N], mln::literal::blue);
+ else
+ draw::line(ima_color, _bboxgp[N].pcenter(), _bboxgp[lines_union.link(N)].pcenter(), mln::literal::blue);
}
}
- for(unsigned int N = 0; N < paragraphs_bbox.size(); N++)
+ for(unsigned int N = 1; N < paragraphs_union.size(); N++)
{
- if(paragraphs_bbox[N].is_valid())
+ if(paragraphs_union[N])
{
- draw::box(ima_color, paragraphs_bbox[N], mln::literal::red);
+ if(N == paragraphs_union.link(N))
+ draw::box(ima_color, _bboxgp[N], mln::literal::red);
+ else
+ draw::line(ima_color, _bboxgp[N].pcenter(), _bboxgp[paragraphs_union.link(N)].pcenter(), mln::literal::red);
}
}
- for(unsigned int N = 0; N < lines_first_label.size(); N++)
+ io::ppm::save(mln::debug::superpose(ima_color, source, literal::white) , file);
+ }
+ void debug_save_lines(std::string file)
+ {debug_save_lines(file, debug_source);}
+ void debug_save_lines(std::string file, image2d<bool> source)
+ {
+ image2d<value::rgb8> ima_color;
+ mln::initialize(ima_color,img_influ);
+
+ for(unsigned int N = 0; N < lines_bbox.size(); N++)
+ {
+ if(lines_bbox[N].is_valid())
+ {
+ draw::box(ima_color, lines_bbox[N], mln::literal::blue);
+ }
+ }
+ for(unsigned int N = 0; N < _bboxgp.size(); N++)
+ {
+ if(_bboxgp[N].is_valid() && contain_letter(N))
+ {
+ draw::box(ima_color, _bboxgp[N], mln::literal::cyan);
+ }
+ }
+ io::ppm::save(mln::debug::superpose(ima_color, source, literal::white) , file);
+ }
+
+
+
+
+
+ void debug_save_all(std::string file)
+ {debug_save_all(file, debug_source);}
+ void debug_save_all(std::string file, image2d<bool> source)
+ {
+ image2d<value::rgb8> ima_color;
+ mln::initialize(ima_color,img_influ);
+
+ for(unsigned int N = 0; N < _bboxgp.size(); N++)
+ {
+ if(_bboxgp[N].is_valid() && contain_letter(N))
+ {
+ draw::box(ima_color, _bboxgp[N], mln::literal::cyan);
+ }
+ }
+
+ for(unsigned int N = 0; N < lines_first_label.size(); N++)
{
if(_bboxgp[lines_first_label[N]].is_valid())
{
draw::box(ima_color, _bboxgp[lines_first_label[N]], mln::literal::yellow);
}
}
+
+ for(unsigned int N = 0; N < lines_last_label.size(); N++)
+ {
+ if(_bboxgp[lines_first_label[N]].is_valid())
+ {
+ draw::box(ima_color, _bboxgp[lines_last_label[N]], mln::literal::orange);
+ }
+ }
+
+
+ for(unsigned int N = 0; N < lines_bbox.size(); N++)
+ {
+ if(lines_bbox[N].is_valid())
+ {
+ draw::box(ima_color, lines_bbox[N], mln::literal::blue);
+ }
+ }
+ for(unsigned int N = 0; N < lines_influ_bbox.size(); N++)
+ {
+ if(lines_influ_bbox[N].is_valid())
+ {
+ //draw::box(ima_color, lines_influ_bbox[N], mln::literal::cyan);
+ }
+ }
+ for(unsigned int N = 0; N < paragraphs_bbox.size(); N++)
+ {
+ if(paragraphs_bbox[N].is_valid())
+ {
+ draw::box(ima_color, paragraphs_bbox[N], mln::literal::red);
+ if(paragraphs_bbox_influ[N].is_valid())
+ {
+ draw::box(ima_color, paragraphs_bbox_influ[N], mln::literal::orange);
+ }
+ }
+
+ }
+ for(unsigned int N = 0; N < _bboxgp.size(); N++)
+ {
+ if(_bboxgp[N].is_valid() && (implicit_separators_left_mask(N) || implicit_separators_right_mask(N)))
+ {
+ // draw::box(ima_color, _bboxgp[N], mln::literal::yellow);
+ }
+ }
+
io::ppm::save(mln::debug::superpose(ima_color, source, literal::white) , file);
}
void debug_save_paragraphs(std::string file)
{ mymln::debug::save_label_image(img, paragraphs_union , file);}
- void debug_save_lines(std::string file)
- { mymln::debug::save_label_image(img, lines_union , file);}
void debug_save_separators(std::string file)
{ mymln::debug::save_label_image(img, implicit_separators_union , file);}
vertex_image<point2d,bool> fun_mask_separators()
@@ -944,10 +1421,29 @@ namespace mymln
mln::util::array<box2d> bbox_enlarge_mask_noise(short int x, short int y)
{ return bbox_mask_enlarge_(noise_mask, x, y); }
- Label get_label(point2d point)
+ Label get_label(const point2d& point)
{ return img_influ(point); }
+
+ inline box2d get_paragraph_bbox(const point2d& point)
+ { return get_paragraph_bbox(img_influ(point)); }
+
+ inline box2d get_paragraph_bbox(Label L)
+ { return paragraphs_bbox[paragraphs_union[L]]; }
+
+
+ inline box2d get_line_bbox(const point2d& point)
+ { return get_line_bbox(img_influ(point)); }
+
+ inline box2d get_line_bbox(Label L)
+ { return lines_bbox[lines_union[L]]; }
+
+ inline unsigned int get_paragraph_length(const point2d& point)
+ { return get_paragraph_length(img_influ(point)); }
- inline unsigned int get_line_length(point2d point)
+ inline unsigned int get_paragraph_length(Label L)
+ { return paragraphs_len[paragraphs_union[L]]; }
+
+ inline unsigned int get_line_length(const point2d& point)
{ return get_line_length(img_influ(point)); }
inline unsigned int get_line_length(Label L)
@@ -958,6 +1454,102 @@ namespace mymln
inline unsigned int get_line_width(Label L)
{ return lines_bbox[lines_union[L]].len(1); }
+
+
+
+ inline Float letter_ratio_XY(const point2d& point)
+ {return letter_ratio_XY(img_influ(point));}
+ inline Float letter_ratio_XY(Label Letter)
+ {
+ return (Float)_bboxgp[Letter].len(1) / (Float)_bboxgp[Letter].len(0);
+ }
+ inline bool line_median(const point2d& point)
+ { return line_median(img_influ(point)); }
+
+ inline bool line_median(Label Letter)
+ {
+ short int D = _bboxgp[Letter].pcenter()[0] - get_line_bbox(Letter).pcenter()[0];
+ if(D<0)D=-D;
+ return D * 3 < get_line_bbox(Letter).len(0);
+ }
+
+ inline bool line_size_small(const point2d& point)
+ { return line_size_small(img_influ(point)); }
+ inline bool line_size_small(Label Letter)
+ {
+ return _bboxgp[Letter].len(0) * 3 < get_line_bbox(Letter).len(0);
+ }
+
+ inline bool line_base(const point2d& point)
+ { return line_base(img_influ(point)); }
+ inline bool line_base(Label Letter)
+ {
+ short int D = _bboxgp[Letter].pcenter()[0] - get_line_bbox(Letter).pcenter()[0];
+ if(D<0)D=-D;
+ return
+ D * 2 < get_line_bbox(Letter).len(0) &&
+ get_line_bbox(Letter).pcenter()[0] + (get_line_bbox(Letter).len(0) / 5) < _bboxgp[Letter].pcenter()[0];
+ }
+
+ inline bool letter_included(point2d Par1, point2d Par2)
+ { return letter_included(img_influ(Par1), img_influ(Par2)); }
+ inline bool letter_included(Label Par1, Label Par2)
+ {
+ return
+ _bboxgp[Par1].has(_bboxgp[Par2].pmin()) &&
+ _bboxgp[Par1].has(_bboxgp[Par2].pmax()) ;
+ }
+
+ inline bool paragraph_included_influence(point2d Par1, point2d Par2)
+ { return paragraph_included_influence(img_influ(Par1), img_influ(Par2)); }
+ inline bool paragraph_included_influence(Label Par1, Label Par2)
+ {
+ return
+ paragraphs_bbox_influ[paragraphs_union[Par1]].has(paragraphs_bbox[paragraphs_union[Par2]].pmin()) &&
+ paragraphs_bbox_influ[paragraphs_union[Par1]].has(paragraphs_bbox[paragraphs_union[Par2]].pmax()) ;
+ }
+
+ inline bool paragraph_included(point2d Par1, point2d Par2)
+ { return paragraph_included(img_influ(Par1), img_influ(Par2)); }
+ inline bool paragraph_included(Label Par1, Label Par2)
+ {
+ return
+ paragraphs_bbox[paragraphs_union[Par1]].has(paragraphs_bbox[paragraphs_union[Par2]].pmin()) &&
+ paragraphs_bbox[paragraphs_union[Par1]].has(paragraphs_bbox[paragraphs_union[Par2]].pmax()) ;
+ }
+
+ inline bool line_influence_reciprocal(const point2d& L1, const point2d& L2)
+ {return line_influence_reciprocal(img_influ(L1), img_influ(L2));}
+
+ inline bool line_influence_reciprocal(Label L1, Label L2)
+ {
+ return
+ lines_influ_bbox[lines_union[L1]].has(lines_influ_bbox[lines_union[L2]].pmin()) ||
+ lines_influ_bbox[lines_union[L1]].has(lines_influ_bbox[lines_union[L2]].pmax()) ||
+ lines_influ_bbox[lines_union[L2]].has(lines_influ_bbox[lines_union[L1]].pmin()) ||
+ lines_influ_bbox[lines_union[L2]].has(lines_influ_bbox[lines_union[L1]].pmax()) ;
+ }
+
+ inline bool allign_size_large_inside( const point2d& Left, const point2d& Right)
+ {return allign_size_large_inside(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_size_large_inside( const Label Left, const Label Right)
+ {
+ short int SizeL0 = label_size_(0, Left);
+ short int SizeR0 = label_size_(0, Right);
+ short int SizeL1 = label_size_(1, Left);
+ short int SizeR1 = label_size_(1, Right);
+ short int Swap = 0;
+ if(SizeL0 < SizeL1)
+ { SizeL0 = SizeL1; }
+ if(SizeR0 < SizeR1){SizeR0 = SizeR1;}
+ return SizeR0 > (SizeL0 / 5) && SizeR0 < (SizeL0);
+ }
+ inline bool paragraph_has(point2d Par, point2d Point)
+ { return paragraph_has(img_influ(Par), Point); }
+
+ inline bool paragraph_has(Label Par, point2d Point)
+ { return paragraph_has[paragraphs_union[Par]].has(Point); }
inline bool line_has(point2d Line, point2d Point)
{ return line_has(img_influ(Line), Point); }
@@ -965,6 +1557,13 @@ namespace mymln
inline bool line_has(Label Line, point2d Point)
{ return lines_bbox[lines_union[Line]].has(Point); }
+ inline bool line_influence_has(point2d Line, point2d Point)
+ { return line_influence_has(img_influ(Line), Point); }
+
+ inline bool line_influence_has(Label Line, point2d Point)
+ { return lines_influ_bbox[lines_union[Line]].has(Point); }
+
+
inline unsigned int get_beginning_of_line(point2d point)
{ return get_beginning_of_line(img_influ(point)); }
@@ -991,6 +1590,7 @@ namespace mymln
lines_first_label.fill(0);
lines_last_label.fill(0);
lines_len.fill(0);
+
start_lines_mask(0) = false;
end_lines_mask(0) = false;
@@ -1007,6 +1607,7 @@ namespace mymln
end_lines_mask = fun::i2v::array<bool>(Areas_Number_);
start_end_lines_mask = fun::i2v::array<bool>(Areas_Number_);
lines_bbox = mln::util::array<box2d>(NLine + 1);
+ lines_influ_bbox = mln::util::array<box2d>(NLine + 1);
lines_len.fill(0);
start_lines_mask(0) = false;
end_lines_mask(0) = false;
@@ -1076,7 +1677,68 @@ namespace mymln
inline bool contain_implicit_separator(const Label lbl)
{return implicit_separators_union[lbl] != 0; }
+ inline void merge(const point2d& A, const point2d& B)
+ {
+ merge(img_influ(A), img_influ(B));
+ }
+ inline void merge(const Label A, const Label B)
+ {
+ if( A && B && !kill_mask(A) && !kill_mask(B) && A != B)
+ {
+ img_influ(_bboxgp[B].pcenter()) = A;
+ _bboxgp[A].merge(_bboxgp[B]);
+ _bboxgp[B] = box2d();
+ kill_mask(B) = true;
+ if(letters_mask(A) && letters_mask(B))
+ {
+ if(lines_union.is_self_link(B))
+ {
+ lines_union.add_self_link(A);
+ lines_union.add_link(A, B);
+ }
+ }
+ else if(alone_letters_mask(A) && letters_mask(B))
+ {
+ alone_letters_mask(A) = false;
+ letters_mask(A) = true;
+ all_letters_mask(A) = true;
+ if(lines_union.is_self_link(B))
+ {
+ lines_union.add_self_link(A);
+ lines_union.add_link(A, B);
+ }
+ }
+ else if(letters_mask(B))
+ {
+ add_letter_coerce(A);
+ lines_union.add_link(B, A);
+ }
+
+
+
+ implicit_separators_left_mask(B) = false;
+ implicit_separators_right_mask(B) = false;
+ noise_mask(B) = false;
+ alone_letters_mask(B) = false;
+ all_letters_mask(B) = false;
+ letters_mask(B) = false;
+ separators_mask(B) = false;
+ containers_mask(B) = false;
+ start_end_lines_mask(B) = false;
+ Hseparator_mask(B) = false;
+ Vseparator_mask(B) = false;
+ if(letters_mask(A) && start_lines_mask(B)){start_lines_mask(A) = true;}
+ if(letters_mask(A) && end_lines_mask(B)){end_lines_mask(A) = true;}
+ if(letters_mask(A) && start_end_lines_mask(B)){start_end_lines_mask(A) = true;}
+
+
+ start_lines_mask(B) = false;
+ end_lines_mask(B) = false;
+ start_end_lines_mask(B) = false;
+
+ }
+ }
inline void add_to_separator_left(const point2d& point)
@@ -1106,6 +1768,23 @@ namespace mymln
point2d p = _bboxgp[i].pcenter();
return p;
}
+ inline void reset_tag_bool()
+ {Btag_lbl.fill(false);}
+ inline void tag_label_bool(const point2d& point, bool tag)
+ { tag_label_bool(img_influ(point), tag);}
+ inline void tag_label_bool(Label lbl, bool tag)
+ {Btag_lbl[lbl] = tag;}
+
+ inline bool get_tag_bool(const point2d& point)
+ { return get_tag_bool(img_influ(point));}
+ inline bool get_tag_bool(Label lbl)
+ {return Btag_lbl[lbl];}
+
+ inline std::string get_tag(const point2d& point)
+ { return get_tag(img_influ(point));}
+ inline std::string get_tag(Label lbl)
+ {return tag_lbl[lbl];}
+
inline void tag_label(const point2d& point, std::string tag)
{ tag_label(img_influ(point), tag);}
inline void tag_label(Label lbl, std::string tag)
@@ -1125,26 +1804,140 @@ namespace mymln
inline void lines_iter_valid()
{ return SeqP < Areas_Number_; }
-
+ inline void recook_paragraphs()
+ {
+ paragraphs_len.fill(0);
+ cook_paragraphs_();
+ }
inline void cook_paragraphs()
{
paragraphs_bbox = mln::util::array<box2d>(NPar + 1);
+ paragraphs_len = mln::util::array<unsigned int>(NPar + 1);
+ paragraphs_first_line = mln::util::array<unsigned int>(NPar + 1);
+ paragraphs_bbox_influ = mln::util::array<box2d>(NPar + 1);
cook_paragraphs_();
}
+ inline void compute_letter_middle_space()
+ {
+ lines_space = mln::util::array<unsigned int>(NLine + 1);
+ lines_space.fill(0);
+ compute_letter_middle_space_();
+ }
+ inline void compute_letter_middle_height()
+ {
+ lines_height = mln::util::array<unsigned int>(NLine + 1);
+ lines_height.fill(0);
+ compute_letter_middle_height_();
+ }
+ inline void compute_letter_middle_width()
+ {
+ lines_width = mln::util::array<unsigned int>(NLine + 1);
+ lines_width.fill(0);
+ compute_letter_middle_width_();
+ }
+ inline void recompute_letter_middle_space()
+ {
+ lines_space.fill(0);
+ compute_letter_middle_height_();
+ }
+ inline void recompute_letter_middle_height()
+ {
+ lines_height.fill(0);
+ compute_letter_middle_height_();
+ }
+ inline void recompute_letter_middle_width()
+ {
+ lines_width.fill(0);
+ compute_letter_middle_height_();
+ }
+
+ inline unsigned int get_letter_middle_space(const point2d& point)
+ {return get_letter_middle_space(img_influ(point));}
+ inline unsigned int get_letter_middle_space(const Label lbl)
+ {return lines_space[lines_union[lbl]];}
+
+
+ inline unsigned int get_letter_middle_height(const point2d& point)
+ {return get_letter_middle_height(img_influ(point));}
+ inline unsigned int get_letter_middle_height(const Label lbl)
+ {return lines_height[lines_union[lbl]];}
+
+ inline unsigned int get_letter_middle_width(const point2d& point)
+ {return get_letter_middle_width(img_influ(point));}
+ inline unsigned int get_letter_middle_width(const Label lbl)
+ {return lines_width[lines_union[lbl]];}
+
+ inline unsigned int get_line_ID(const Label lbl)
+ {
+ return lines_union[lbl];
+ }
+ inline unsigned int get_first_line_ID(const Label lbl)
+ {
+ return paragraphs_first_line[paragraphs_union[lbl]];
+ }
+ inline unsigned int get_first_line()
+ {
+ return first_line;
+ }
+ inline unsigned int get_first_letter(const unsigned int line_ID)
+ {
+ return lines_first_label[line_ID];
+ }
+ inline void get_next_line(int& line_ID)
+ {
+ if(lines_seq_pos[line_ID] == line_ID){ line_ID = 0; }
+ line_ID = lines_seq_pos[line_ID];
+ }
+ inline void get_next_line(unsigned int& line_ID)
+ {
+ if(lines_seq_pos[line_ID] == line_ID){ line_ID = 0; }
+ line_ID = lines_seq_pos[line_ID];
+ }
+ inline void get_next_letter(Label& lbl)
+ {
+ if(lines_seq[lbl] == lbl){ lbl = 0; }
+ lbl = lines_seq[lbl];
+ }
+ inline void get_next_letter(int& lbl)
+ {
+ if(lines_seq[lbl] == lbl){ lbl = 0; }
+ lbl = lines_seq[lbl];
+ }
+ inline void get_next_letter(unsigned int& lbl)
+ {
+ if(lines_seq[lbl] == lbl){ lbl = 0; }
+ lbl = lines_seq[lbl];
+ }
+ inline std::string get_line_string(const unsigned int ID)
+ {
+ std::string line = "";
+ unsigned int Last = 0;
+ for(int N = get_first_letter(ID); N != 0; get_next_letter(N))
+ {
+ if(Last)
+ if(space(Last,N) > get_letter_middle_space(N) * 2)
+ line += " ";
+
+ if(!get_tag(N).compare("")){line += "?";}
+ else{line += get_tag(N);}
+ Last = N;
+ }
+ return line;
+ }
private:
fun::i2v::array<bool> implicit_separators_left_mask;
fun::i2v::array<bool> implicit_separators_right_mask;
mln::util::array<unsigned int> separators_len_right;
mln::util::array<unsigned int> separators_len_left;
mln::util::array<unsigned int> separators_middle;
-
+ mln::util::array<unsigned int> separators_marging;
inline void cook_separators_()
{
implicit_separators_left_mask(0) = false;
- for(unsigned int N = 1; N < implicit_separators_union.size(); N++)
+ for(int N = 1; N < implicit_separators_union.size(); N++)
{
if(implicit_separators_union[N] != 0)
{
@@ -1160,11 +1953,8 @@ namespace mymln
/* processor */
for(unsigned int N = 1; N < NImpSep + 1; N++)
{
- if(separators_len_left[N] != 0)
- {
if(separators_len_left[N] != 0)
separators_middle[N] /= separators_len_left[N];
- }
}
@@ -1177,27 +1967,27 @@ namespace mymln
implicit_separators_left_mask(N) = false;
}
else if (
- _bboxgp[N].pmin()[1] < separators_middle[implicit_separators_union[N]] - 10 ||
- _bboxgp[N].pmin()[1] > separators_middle[implicit_separators_union[N]] + 10
+ _bboxgp[N].pmin()[1] < separators_middle[implicit_separators_union[N]] - _bboxgp[N].len(1) * 2 ||
+ _bboxgp[N].pmin()[1] > separators_middle[implicit_separators_union[N]] + _bboxgp[N].len(1) * 2
)
{
-
+ /*
separators_len_left[implicit_separators_union[N]]--;
implicit_separators_union[N] = 0;
- implicit_separators_left_mask(N) = false;
+ implicit_separators_left_mask(N) = false;*/
}
}
for(unsigned int N = 1; N < Areas_Number_; N++)
{
if(!start_lines_mask(N) || implicit_separators_union[N] == 0)
{
- if( separators_len_left[implicit_separators_union[N]] > 0)
+ if( separators_len_left[implicit_separators_union[N]] > 0)
separators_len_left[implicit_separators_union[N]]--;
}
}
for(unsigned int N = 1; N < Areas_Number_; N++)
{
- if(separators_len_left[implicit_separators_union[N]] < 2)
+ if(separators_len_left[implicit_separators_union[N]] < 1)
{
separators_len_left[implicit_separators_union[N]] = 0;
implicit_separators_union[N] = 0;
@@ -1225,11 +2015,8 @@ namespace mymln
/* processor */
for(unsigned int N = 1; N < NImpSep + 1; N++)
{
- if(separators_len_right[N] != 0)
- {
if(separators_len_right[N] != 0)
separators_middle[N] /= separators_len_right[N];
- }
}
@@ -1247,9 +2034,9 @@ namespace mymln
)
{
- separators_len_right[implicit_separators_union[N]]--;
+ /*separators_len_right[implicit_separators_union[N]]--;
implicit_separators_union[N] = 0;
- implicit_separators_right_mask(N) = false;
+ implicit_separators_right_mask(N) = false;*/
}
}
for(unsigned int N = 1; N < Areas_Number_; N++)
@@ -1262,7 +2049,7 @@ namespace mymln
}
for(unsigned int N = 1; N < Areas_Number_; N++)
{
- if(separators_len_right[implicit_separators_union[N]] < 2)
+ if(separators_len_right[implicit_separators_union[N]] < 1)
{
separators_len_right[implicit_separators_union[N]] = 0;
implicit_separators_union[N] = 0;
@@ -1274,57 +2061,150 @@ namespace mymln
// PRIVATE DATA ON LINES
mln::util::array<unsigned int> lines_len;
+ mln::util::array<unsigned int> lines_height;
+ mln::util::array<unsigned int> lines_width;
+ mln::util::array<unsigned int> lines_space;
mln::util::array<unsigned int> lines_first_label;
mln::util::array<unsigned int> lines_last_label;
mln::util::array<unsigned int> lines_seq;
mln::util::array<unsigned int> lines_seq_pos;
mln::util::array<box2d> lines_bbox;
+ mln::util::array<box2d> lines_influ_bbox;
mln::util::array<Label> lines_split;
fun::i2v::array<bool> start_lines_mask;
fun::i2v::array<bool> end_lines_mask;
fun::i2v::array<bool> start_end_lines_mask;
+ unsigned int first_line;
unsigned int SeqP;
+ inline void compute_letter_middle_width_()
+ {
+ for(unsigned int N = 1; N < Areas_Number_; N++)
+ {
+ if(lines_union[N])
+ {
+ lines_width[lines_union[N]] += _bboxgp[N].len(1);
+ }
+ }
+ for(unsigned int N = 1; N < lines_height.size(); N++)
+ {
+ if(lines_len[N])
+ lines_width[N] /= lines_len[N];
+ }
+ }
+
+ inline void compute_letter_middle_height_()
+ {
+
+ for(unsigned int N = 1; N < Areas_Number_; N++)
+ {
+ if(lines_union[N])
+ {
+ lines_height[lines_union[N]] += _bboxgp[N].len(0);
+ }
+ }
+ for(unsigned int N = 1; N < lines_height.size(); N++)
+ {
+ if(lines_len[N])
+ lines_height[N] /= lines_len[N];
+ }
+ }
+
+ inline void compute_letter_middle_space_()
+ {
+
+ for(unsigned int N = 1; N < Areas_Number_; N++)
+ {
+ if(lines_union[N])
+ {
+ lines_space[lines_union[N]] += _bboxgp[N].len(1);
+ }
+ }
+ for(unsigned int N = 1; N < lines_space.size(); N++)
+ {
+ if(lines_len[N] - 1 > 0)
+ {
+
+ if(lines_space[N] > lines_bbox[N].len(1))
+ lines_space[N] = 0;
+ else
+ {
+ lines_space[N] = (lines_bbox[N].len(1) - lines_space[N]) / (lines_len[N] - 1);
+ }
+ }
+ else
+ {
+ lines_space[N] = 0;
+ }
+
-
+ }
+ }
inline void cook_lines_iter_()
{
+ first_line = 0;
lines_seq = mln::util::array<unsigned int>(Areas_Number_);
lines_seq_pos = mln::util::array<unsigned int>(NLine + 1);
lines_seq.fill(0);
lines_seq_pos.fill(0);
- for(unsigned int N = 0; N < NLine + 1; N++)
- {
- lines_seq[SeqP] = lines_first_label[N];
- lines_seq_pos[N] = SeqP;
- SeqP += lines_len[N];
- }
- for(unsigned int N = 1; N < Areas_Number_; N++)
+
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = fun_mask_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
{
- if(contain_line(N) && !start_lines_mask(N))
+ if(contain_letter(v))
+ for_all(q)
{
- SeqP = lines_seq_pos[get_beginning_of_line(N)];
- SeqP++;
-
- while( lines_seq[SeqP] && _bboxgp[lines_seq[SeqP]].pmin()[1] < _bboxgp[N].pmin()[1] )
- SeqP++;
- if(!lines_seq[SeqP])
- {lines_seq[SeqP] = N;}
- else
- {
- unsigned int Swap1, Swap2;
- Swap1 = lines_seq[SeqP];
- lines_seq[SeqP] = N;
- while(lines_seq[SeqP])
+ if(contain_letter(q))
+ if(same_line(q, v))
{
- Swap2 = lines_seq[SeqP];
- lines_seq[SeqP] = Swap1;
- Swap1 = Swap2;
+ if(_bboxgp[img_influ(q)].pmax()[1] < _bboxgp[img_influ(v)].pmin()[1])
+ {
+ if(lines_seq[img_influ(q)])
+ {
+ if(_bboxgp[lines_seq[img_influ(q)]].pmin()[1] > _bboxgp[img_influ(v)].pmin()[1])
+ lines_seq[img_influ(q)] = img_influ(v);
+ }
+ else
+ lines_seq[img_influ(q)] = img_influ(v);
+ }
+ }
+ else
+ {
+ if(get_line_bbox(q).pmax()[0] < get_line_bbox(v).pmin()[0])
+ {
+ if(lines_seq_pos[lines_union[img_influ(q)]])
+ {
+ if(lines_bbox[lines_seq_pos[lines_union[img_influ(q)]]].pmin()[0] > get_line_bbox(v).pmin()[0])
+ lines_seq_pos[lines_union[img_influ(q)]] =lines_union[img_influ(v)];
+ }
+ else
+ lines_seq_pos[lines_union[img_influ(q)]] = lines_union[img_influ(v)];
+
+ }
}
- lines_seq[SeqP] = Swap1;
- }
}
}
+ std::cout << "end graph cooking";
+ unsigned int Last = 0;
+ int count = 0;
+ for(unsigned int N = 1; N < lines_seq_pos.size() && N < lines_len.size(); N++)
+ {
+ if(lines_len[N] && !first_line)
+ {first_line = N;}
+ if(lines_len[N] && Last)
+ {lines_seq_pos[Last] = N;}
+ if(lines_len[N])
+ {Last = N; std::cout << lines_len[N] << endl; count++;}
+
+ }
+ std::cout << count << endl;
+ std::cout << "linear";
}
inline void cook_lines_()
@@ -1332,7 +2212,7 @@ namespace mymln
Cooked_CLine = CLine;
for(unsigned int N = 1; N < lines_union.size(); N++)
{
- if(lines_union[N] != 0)
+ if(lines_union[N] != 0 && !kill_mask(N))
{
/* APPROXIMATE THE NUMBER OF CHAR IN THE LINE */
lines_len[lines_union[N]]++;
@@ -1360,6 +2240,7 @@ namespace mymln
if( lines_first_label[N] != 0)
{
lines_bbox[N] = box2d();
+
start_lines_mask(lines_first_label[N]) = true;
end_lines_mask(lines_last_label[N]) = true;
start_end_lines_mask(lines_first_label[N]) = true;
@@ -1381,11 +2262,25 @@ namespace mymln
lines_bbox[lines_union[N]].merge(_bboxgp[N]);
}
if(lines_len[lines_union[N]] == 1)
- { letters_mask(N) = false; alone_letters_mask(N) = true; }
+ {
+ letters_mask(N) = false;
+ alone_letters_mask(N) = true;
+ all_letters_mask(N) = true;
+ end_lines_mask(N) = true;
+ start_lines_mask(N)= true;
+ start_end_lines_mask(N) = true;
+ }
else if(lines_union[N])
- { letters_mask(N) = true; alone_letters_mask(N) = false; }
+ {
+ letters_mask(N) = true;
+ alone_letters_mask(N) = false;
+ all_letters_mask(N) = true;
+ }
+ }
+ for(unsigned int N = 1; N < lines_bbox.size(); N++)
+ {
+ lines_influ_bbox[N] = lines_bbox[N].to_larger(lines_bbox[N].len(0) / 3);
}
-
}
@@ -1430,7 +2325,13 @@ namespace mymln
{
Data SX = label_size_(0, label);
Data SY = label_size_(1, label);
- return SX >= Min && SY >= Min;
+ return SX >= Min && SY >= Min ;
+ }
+ inline bool label_valid_size_Min_Large_(Label label, Data Min)
+ {
+ Data SX = label_size_(0, label);
+ Data SY = label_size_(1, label);
+ return SX >= Min && SY >= Min || SX >= Min * 2 || SY >= Min * 2;
}
inline bool label_valid_ratio_(Label label, Float Min, Float Max)
{
@@ -1500,8 +2401,10 @@ namespace mymln
fun::i2v::array<bool> all_letters_mask;
fun::i2v::array<bool> containers_mask;
fun::i2v::array<bool> noise_mask;
+ fun::i2v::array<bool> kill_mask;
mln::util::array<std::string> tag_lbl;
+ mln::util::array<bool> Btag_lbl;
unsigned int Cooked_CLine;
unsigned int CLine;
@@ -1521,36 +2424,90 @@ namespace mymln
mln::util::array<unsigned int> paragraphs_first_label;
mln::util::array<unsigned int> paragraphs_last_label;
mln::util::array<unsigned int> paragraphs_assoc;
+ mln::util::array<unsigned int> paragraphs_len;
+ /* NOTE THESE ARRAYS MUST BE INITIALIZEDD WITH THE NUMBER OF PARAGRAPH */
+
+
mln::util::array<box2d> paragraphs_bbox;
-
+ mln::util::array<box2d> paragraphs_bbox_influ;
+ mln::util::array<unsigned int> paragraphs_first_line;
+ inline void first_recognition()
+ {
+
+ }
+
+
inline void cook_paragraphs_()
{
- mln::util::array<unsigned int> paragraphs_assoc(lines_union.size());
- for(int N = 0; N < paragraphs_union.size(); N++)
+ /* mln::util::array<unsigned int> paragraphs_assoc(lines_union.size());
+
+ for(int N = 1; N < paragraphs_union.size(); N++)
{
- if(paragraphs_union[N])
+ if(paragraphs_union[N] && lines_union[N] && !start_lines_mask)
{
if(paragraphs_assoc[lines_union[N]])
- { paragraphs_union.add_link(N, paragraphs_assoc[lines_union[N]]); }
+ { paragraphs_union.add_link(paragraphs_assoc[lines_union[N]], N); }
else
- {paragraphs_assoc[lines_union[N]] = N;}
+ {paragraphs_assoc[lines_union[N]] = get_beginning_of_line(N);}
}
}
- paragraphs_union.propage_links();
+ paragraphs_union.propage_links();*/
for(int N = 0; N < paragraphs_bbox.size(); N++)
{
paragraphs_bbox[N] = box2d();
}
+
+ for(int N = 0; N < lines_len.size(); N++)
+ {
+ if(lines_len[N] && paragraphs_union[lines_first_label[N]])
+ {
+ paragraphs_len[paragraphs_union[lines_first_label[N]]]++;
+ if(paragraphs_first_line[paragraphs_union[lines_first_label[N]]])
+ {
+ if(
+ lines_bbox[paragraphs_first_line[paragraphs_union[lines_first_label[N]]]].pmin()[0] >
+ lines_bbox[N].pmin()[0]
+ )
+ {
+ paragraphs_first_line[paragraphs_union[lines_first_label[N]]] = N;
+ }
+ }
+ else
+ paragraphs_first_line[paragraphs_union[lines_first_label[N]]] = N;
+ }
+ }
+
for(int N = 0; N < paragraphs_union.size(); N++)
{
- if(paragraphs_union[N])
+ if(paragraphs_union[N] && paragraphs_len[paragraphs_union[N]])
+ {
paragraphs_bbox[paragraphs_union[N]].merge(lines_bbox[lines_union[N]]);
+ }
+ else
+ {
+ paragraphs_union[N] = 0;
+ }
}
+
+
+ for(int N = 0; N < paragraphs_len.size(); N++)
+ {
+ if(paragraphs_len[N])
+ {
+ paragraphs_bbox_influ[N] = paragraphs_bbox[N].to_larger(lines_bbox[paragraphs_first_line[N]].len(0) / 10);
+ }
+ }
}
-
+ template<typename T> void debug_assert_array_(mln::util::array<T>& array, int N, const std::string& name)
+ {
+ if(N >= array.size())
+ {
+ std::cout << "WARNING : " << name << " " << N << " " << "is invalid" << endl;
+ }
+ }
@@ -1574,6 +2531,9 @@ namespace mymln
g_vertices_p _area_graph;
mln::image2d<Label> img;
mln::image2d<Label> img_influ;
+ mln::image2d<bool> debug_source;
+ mln::image2d<value::rgb8> debug_buffer;
+ bool debug_buffer_enable;
Label Areas_Number_;
/* IMPLICIT SEPARATOR DETECTION */
diff --git a/scribo/sandbox/raphael/code/my/document/letters.hh b/scribo/sandbox/raphael/code/my/document/letters.hh
index 6701943..f0249ae 100644
--- a/scribo/sandbox/raphael/code/my/document/letters.hh
+++ b/scribo/sandbox/raphael/code/my/document/letters.hh
@@ -9,9 +9,17 @@ namespace mymln
{
namespace document
{
- void clean_letter_aberation()
+ template<typename L, typename F, typename D>
+ void clean_letters_aberations_big(document<L,F,D> doc, mln::util::array<box2> bouningbox_letters, mln::util::array<box2> middle_box_lines, mymln::util::union_find<L> letters_union, )
{
-
+ for(int N = 0; N < letters_union.size(); N++)
+ {
+ if(letters_union[N])
+ {
+ doc.get_letter_middle_height(N) * 3 < doc.get_bbox(N).len(0);
+ doc.add_noise(N);
+ }
+ }
}
}
}
\ No newline at end of file
diff --git a/scribo/sandbox/raphael/code/my/document/recognition.hh b/scribo/sandbox/raphael/code/my/document/recognition.hh
new file mode 100644
index 0000000..9c10cd9
--- /dev/null
+++ b/scribo/sandbox/raphael/code/my/document/recognition.hh
@@ -0,0 +1,74 @@
+#ifndef INC_RECOGNITION_DOC
+#define INC_RECOGNITION_DOC
+#include<my/document/document.hh>
+#include <mln/core/image/graph_elt_neighborhood.hh>
+#include <mln/core/image/vertex_image.hh>
+using namespace mln;
+
+namespace mymln
+{
+ namespace document
+ {
+ template<typename L, typename F, typename D>
+ void recognize_minus(mymln::document::document<L,F,D>& doc)
+ {
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ if(doc.contain_line(v))
+ {
+ for_all(q)
+ {
+ if(doc.contain_line(q) && doc.line_median(q) && doc.letter_ratio_XY(q) >= 3.0f)
+ {
+ doc.tag_label(q, "-");
+ }
+ }
+ }
+ }
+ doc.propage_paragraph_link();
+
+ }
+ template<typename L, typename F, typename D>
+ void recognize_dot(mymln::document::document<L,F,D>& doc)
+ {
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ if(doc.contain_line(v))
+ {
+ for_all(q)
+ {
+ if( doc.contain_line(q) && doc.same_line(q,v) && doc.line_base(q) && doc.line_size_small(q))
+ {
+ if(doc.letter_ratio_XY(q) > 0.7f && doc.letter_ratio_XY(q) < 1.3f)
+ doc.tag_label(q, ".");
+ else if(doc.letter_ratio_XY(q) <= 0.7f)
+ doc.tag_label(q, ",");
+ else
+ doc.tag_label(q, "_");
+
+ }
+ }
+ }
+ }
+ doc.propage_paragraph_link();
+
+ }
+ }
+}
+
+
+#endif
\ No newline at end of file
diff --git a/scribo/sandbox/raphael/code/my/document/separator.hh b/scribo/sandbox/raphael/code/my/document/separator.hh
index 660bbed..2cd98ea 100644
--- a/scribo/sandbox/raphael/code/my/document/separator.hh
+++ b/scribo/sandbox/raphael/code/my/document/separator.hh
@@ -133,20 +133,72 @@ namespace mymln
if(doc.contain_implicit_separator(v))
{
bool All_Alone = true;
- doc.jump_to_line(v);
- if((!doc.contain_line(v)))
+
+
+ for_all(q)
{
- doc.add_to_line(v);
- doc.add_to_line_self_link(v);
+
+ if(doc.contain_implicit_separator(q) && doc.same_implicit_separator(q,v) )
+ {
+ // draw::line(out, q,v, mln::literal::blue);
+ if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_right(v,q))
+ {
+ count[doc[q]]++;
+ }
+
+ }
+ else if (doc.contain_implicit_separator(q))
+ {
+ if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_right(v,q) && doc.allign_proximity_strict(v, q))
+ {
+ count[doc[q]]++;
+ }
+ }
+
}
+ }
+ }
+ for(unsigned int N = 0; N < doc.size();N++)
+ {
+ if(count[N] > 0)
+ doc.invalidate_implicit_separator(N);
+ }
+ }
+
+ template<typename L, typename F, typename D>
+ void separators_make_clean_right(mymln::document::document<L,F,D>& doc)
+ {
+
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ mln::util::array<unsigned> count = mln::util::array<unsigned>(doc.size());
+ count.fill(0);
+ for_all(v)
+ {
+ if(doc.contain_implicit_separator(v))
+ {
+ bool All_Alone = true;
for_all(q)
{
- if(doc.contain_implicit_separator(q) && doc.same_implicit_separator(q,v))
+ if(doc.contain_implicit_separator(q) && doc.same_implicit_separator(q,v) )
{
// draw::line(out, q,v, mln::literal::blue);
- if(doc.allign_V(q,v) && doc.allign_size(q, v))
+ if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_right(q,v))
+ {
+ count[doc[q]]++;
+ }
+
+ }
+ else if (doc.contain_implicit_separator(q))
+ {
+ if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_right(q,v) && doc.allign_proximity_strict(v, q))
{
count[doc[q]]++;
}
diff --git a/scribo/sandbox/raphael/code/my/runtime/lib.hh b/scribo/sandbox/raphael/code/my/runtime/lib.hh
new file mode 100644
index 0000000..2a36ef3
--- /dev/null
+++ b/scribo/sandbox/raphael/code/my/runtime/lib.hh
@@ -0,0 +1,180 @@
+#ifndef INC_RUNTIME_LIB
+#define INC_RUNTIME_LIB
+
+using namespace mln;
+using namespace std;
+namespace mymln
+{
+ namespace runtime
+ {
+ template<typename L, typename F, typename D>
+ void load_separators(runtime<L,F,D>& run)
+ {
+
+ run.add_function("separators.find_allign_right", &(mymln::document::separators::separators_find_allign_right));
+ run.add_function("separators.make_clean_right", &(mymln::document::separators::separators_make_clean_right));
+ run.add_function("separators.find_allign_left", &(mymln::document::separators::separators_find_allign));
+ run.add_function("separators.make_clean_left", &(mymln::document::separators::separators_find_allign));
+ }
+
+ template<typename L, typename F, typename D>
+ void load_clean(runtime<L,F,D>& run)
+ {
+ run.add_function("clean.containers_items", &(mymln::document::clean_containers_items));
+ run.add_function("clean.letters_items", &(mymln::document::clean_letters_items));
+ run.add_function("clean.get_lines", &(mymln::document::clean_get_lines));
+
+ run.add_function("clean.letters_alone", &(mymln::document::clean_letters_alone));
+ run.add_function("clean.included_letters", &(mymln::document::clean_included_letters));
+ run.add_function("clean.dot_items", &(mymln::document::clean_dot_items));
+ run.add_function("clean.quote_items", &(mymln::document::clean_quote_items));
+ run.add_function("clean.between", &(mymln::document::clean_between));
+
+ run.add_function("clean.line_link_item", &(mymln::document::clean_line_link_item));
+ run.add_function("clean.proximity_lines", &(mymln::document::clean_proximity_lines));
+ run.add_function("clean.quote_lines", &(mymln::document::clean_quote_lines));
+ run.add_function("clean.alone_letters_lines", &(mymln::document::clean_alone_letters_lines));
+ run.add_function("clean.odd_letters", &(mymln::document::clean_odd_letters));
+
+
+ run.add_function("clean.remove_alone_letter", &(mymln::document::remove_alone_letter));
+ run.add_function("clean.paragraph_items", &(mymln::document::clean_paragraph_items));
+ run.add_function("clean.paragraphs_up", &(mymln::document::clean_paragraphs_up));
+ run.add_function("clean.paragraphs_large", &(mymln::document::clean_paragraphs_large));
+ run.add_function("clean.included_paragraphs", &(mymln::document::clean_included_paragraphs));
+ run.add_function("clean.backward_letters", &(mymln::document::clean_backward_letters));
+ run.add_function("clean.paragraphs_tab", &(mymln::document::clean_paragraphs_tab));
+ run.add_function("clean.proximity_letters", &(mymln::document::clean_proximity_letters));
+
+ }
+
+ template<typename L, typename F, typename D>
+ void lib_debug_save_all(mymln::document::document<L,F,D>& doc, std::string file)
+ { doc.debug_save_all(file); }
+ template<typename L, typename F, typename D>
+ void lib_debug_save_buffer(mymln::document::document<L,F,D>& doc, std::string file)
+ { doc.debug_save_buffer(file); }
+ template<typename L, typename F, typename D>
+ void lib_debug_create_buffer(mymln::document::document<L,F,D>& doc)
+ { doc.debug_create_buffer(); }
+
+ template<typename L, typename F, typename D>
+ void load_debug(runtime<L,F,D>& run)
+ {
+ run.add_function_string("debug.save", &(lib_debug_save_all));
+ run.add_function("debug.create_buffer", &(lib_debug_create_buffer));
+ run.add_function_string("debug.save_buffer", &(lib_debug_save_buffer));
+ }
+
+
+ template<typename L, typename F, typename D>
+ void lib_cook_lines(mymln::document::document<L,F,D>& doc)
+ { doc.cook_lines(); }
+ template<typename L, typename F, typename D>
+ void lib_recook_lines(mymln::document::document<L,F,D>& doc)
+ { doc.recook_lines(); }
+ template<typename L, typename F, typename D>
+ void lib_cook_separators_left(mymln::document::document<L,F,D>& doc)
+ { doc.cook_separators(); }
+ template<typename L, typename F, typename D>
+ void lib_cook_separators_right(mymln::document::document<L,F,D>& doc)
+ { doc.cook_separators_right(); }
+ template<typename L, typename F, typename D>
+ void lib_cook_line_splitting(mymln::document::document<L,F,D>& doc)
+ { doc.cook_line_splitting(); }
+ template<typename L, typename F, typename D>
+ void lib_reset_implicit_separators(mymln::document::document<L,F,D>& doc)
+ { doc.reset_implicit_separators(); }
+
+ template<typename L, typename F, typename D>
+ void lib_cook_line_splitting_exclusive(mymln::document::document<L,F,D>& doc)
+ { doc.cook_line_splitting_exclusive(); }
+
+ template<typename L, typename F, typename D>
+ void lib_cook_paragraphs(mymln::document::document<L,F,D>& doc)
+ { doc.cook_paragraphs(); }
+
+ template<typename L, typename F, typename D>
+ void lib_recook_paragraphs(mymln::document::document<L,F,D>& doc)
+ { doc.recook_paragraphs(); }
+
+ template<typename L, typename F, typename D>
+ void load_cooking(runtime<L,F,D>& run)
+ {
+ run.add_function("cook.lines", &(lib_cook_lines));
+ run.add_function("cook.separators_right", &(lib_cook_separators_right));
+ run.add_function("cook.separators_left", &(lib_cook_separators_left));
+ run.add_function("recook.lines", &(lib_recook_lines));
+ run.add_function("cook.line_splitting", &(lib_cook_line_splitting));
+ run.add_function("cook.line_splitting_inclusive", &(lib_cook_line_splitting));
+ run.add_function("cook.line_splitting_exclusive", &(lib_cook_line_splitting_exclusive));
+ run.add_function("cook.reset_implicit_separators", &(lib_reset_implicit_separators));
+ run.add_function("cook.paragraphs", &(lib_cook_paragraphs));
+ run.add_function("recook.paragraphs", &(lib_recook_paragraphs));
+
+ }
+
+
+ template<typename L, typename F, typename D>
+ void lib_compute_letter_middle_height(mymln::document::document<L,F,D>& doc)
+ { doc.compute_letter_middle_height(); }
+ template<typename L, typename F, typename D>
+ void lib_compute_letter_middle_width(mymln::document::document<L,F,D>& doc)
+ { doc.compute_letter_middle_width(); }
+ template<typename L, typename F, typename D>
+ void load_compute(runtime<L,F,D>& run)
+ {
+ run.add_function("compute.letter_middle_height", &(lib_compute_letter_middle_height));
+ run.add_function("compute.letter_middle_width", &(lib_compute_letter_middle_width));
+ }
+
+
+ template<typename L, typename F, typename D>
+ void lib_string_print(mymln::document::document<L,F,D>& doc, std::string str)
+ { std::cout << str; }
+ template<typename L, typename F, typename D>
+ void lib_string_print_line(mymln::document::document<L,F,D>& doc, std::string str)
+ { std::cout << str << std::endl; }
+ template<typename L, typename F, typename D>
+ void lib_string_concat(runtime<L,F,D>& run, std::string A, std::string B)
+ { run.add_variable(A, B); }
+
+ template<typename L, typename F, typename D>
+ void load_string(runtime<L,F,D>& run)
+ {
+ run.add_function_string("string.print", &(lib_string_print));
+ run.add_function_string("string.print_line", &(lib_string_print_line));
+ run.add_function_string_string("string.concat", &(lib_string_concat));
+ run.add_function_string_string("string.clone", &(lib_string_concat));
+ }
+
+
+ template<typename L, typename F, typename D>
+ void lib_system_set(runtime<L,F,D>& run, std::string A, std::string B)
+ { run.add_variable(A, B); }
+ template<typename L, typename F, typename D>
+ void lib_system_test_equal(runtime<L,F,D>& run, std::string A, std::string B)
+ { if(!A.compare("true")){run.call_function(B);} }
+
+ template<typename L, typename F, typename D>
+ void lib_system_test_nequal(runtime<L,F,D>& run, std::string A, std::string B)
+ { if(!A.compare("false")){run.call_function(B);} }
+
+ template<typename L, typename F, typename D>
+ void lib_system_not(runtime<L,F,D>& run, std::string A, std::string B)
+ {
+ if(!A.compare("false")){run.add_variable(A, "true");}
+ else{run.add_variable(A, "false");}
+ }
+
+ template<typename L, typename F, typename D>
+ void load_system(runtime<L,F,D>& run)
+ {
+ run.add_function_string_string("system.set", &(lib_system_set));
+ run.add_function_string_string("system.equal", &(lib_string_concat));
+ run.add_function_string_string("system.nequal", &(lib_string_concat));
+ }
+
+ }
+}
+#endif
\ No newline at end of file
diff --git a/scribo/sandbox/raphael/code/my/runtime/runtime.hh b/scribo/sandbox/raphael/code/my/runtime/runtime.hh
new file mode 100644
index 0000000..f4057bc
--- /dev/null
+++ b/scribo/sandbox/raphael/code/my/runtime/runtime.hh
@@ -0,0 +1,196 @@
+#ifndef INC_RUNTIME
+#define INC_RUNTIME
+
+using namespace mln;
+using namespace std;
+namespace mymln
+{
+ namespace runtime
+ {
+ template<typename Label, typename Float, typename Data>
+
+ class runtime
+ {
+ typedef document::document<Label, Float, Data> doc;
+ typedef void (*fun_doc_ptr)(doc);
+ public:
+ runtime()
+ {
+ program_argument = mln::util::array<string>(0);
+ program_argument2 = mln::util::array<string>(0);
+ program_instruction = mln::util::array<string>(0);
+ doc_fun = map<string, void(*)(doc&) >();
+ doc_arg_fun = map<string, void(*)(doc&, string) >();
+ doc_arg2_fun = map<string, void(*)(runtime<Label,Float, Data>&, string, string) >();
+ doc_local_fun = map<string, int >();
+ call_stack = stack<int>();
+ CP = 0;
+ }
+ void load(const char* file)
+ {
+
+ fstream filestream(file, fstream::in | fstream::out);
+ std::string Buffer = "";
+ bool flag = !getline(filestream, Buffer).eof();
+ int L = 0;
+ bool remain = flag;
+ while(remain)
+ {
+ if(!flag){remain = false;}
+ int N = 0;
+ std::string Instr = "";
+ std::string Arg = "";
+ std::string Arg2 = "";
+ while( N < Buffer.length() && (Buffer[N] == ' ' || Buffer[N] == '\t') && Buffer[N] != ';'){N++;} // trim
+ while( N < Buffer.length() && (Buffer[N] == ' ' || Buffer[N] == '\t') && Buffer[N] != ';'){N++;} // trim
+ while(N < Buffer.length() && Buffer[N] != ' ' && Buffer[N] != '\t' && Buffer[N] != ';'){Instr += Buffer[N]; N++;}
+ while(N < Buffer.length() && (Buffer[N] == ' ' || Buffer[N] == '\t') && Buffer[N] != ';'){N++;} // trim
+ while(N < Buffer.length() && Buffer[N] != ' ' && Buffer[N] != '\t' && Buffer[N] != ';'){Arg += Buffer[N]; N++;}
+ while(N < Buffer.length() && (Buffer[N] == ' ' || Buffer[N] == '\t') && Buffer[N] != ';'){N++;} // trim
+ while(N < Buffer.length() && Buffer[N] != ' ' && Buffer[N] != '\t' && Buffer[N] != ';'){Arg2 += Buffer[N]; N++;}
+ if(!Instr.compare("fun"))
+ {
+ doc_local_fun[Arg] = L;
+ program_instruction.append("");
+ program_argument.append("");
+ program_argument2.append("");
+ }
+ else if(Instr.length() > 0 && Instr[0] == '$')
+ {
+ program_instruction.append("system.set");
+ program_argument.append(Instr);
+ program_argument2.append(Arg);
+ }
+ else
+ {
+ program_instruction.append(Instr);
+ program_argument.append(Arg);
+ program_argument2.append(Arg2);
+ }
+ if(flag)
+ flag = !getline(filestream, Buffer).eof();
+ L++;
+ }
+
+ filestream.close();
+
+ }
+ runtime(const char* file)
+ {
+ CP = 0;
+ program_argument2 = mln::util::array<string>(0);
+ program_argument = mln::util::array<string>(0);
+ program_instruction = mln::util::array<string>(0);
+ doc_local_fun = map<string, void(*)(doc&, string) >();
+ load(file);
+ doc_fun = map<string, void(*)(doc&) >();
+ doc_arg_fun = map<string, void(*)(doc&, string) >();
+ doc_arg2_fun = map<string, void(*)(runtime<Label,Float, Data>&, string, string) >();
+ doc_local_fun = map<string, int >();
+ call_stack = stack<int>();
+ }
+
+ void run()
+ {
+ for(CP = 0; CP < program_instruction.size(); CP++)
+ {
+ if(!program_instruction[CP].compare("end"))
+ ret();
+ else if(program_argument2[CP].compare(""))
+ call_function(program_instruction[CP], get_variable(program_argument[CP]), get_variable(program_argument2[CP]));
+ else if(program_argument[CP].compare(""))
+ call_function(program_instruction[CP], get_variable(program_argument[CP]));
+ else if(program_instruction[CP].compare(""))
+ call_function(program_instruction[CP]);
+ }
+ }
+ inline void add_function(string name, void(*ptr)(doc&) )
+ {
+ doc_fun[name] = ptr;
+ }
+ inline void add_function_string(string name, void(*ptr)(doc&, string arg) )
+ {
+ doc_arg_fun[name] = ptr;
+ }
+ inline void add_function_string_string(string name, void(*ptr)(runtime<Label,Float, Data>&, string arg, string arg2) )
+ {
+ doc_arg2_fun[name] = ptr;
+ }
+ void add_variable(string name, string value)
+ {
+ vars["$" + name] = value;
+ }
+ string get_variable(string name)
+ {
+
+ if(name.length() > 0 && name[0] == '$')
+ {
+ if(vars.find(name) == vars.end())
+ {
+ std::cout << "#SCRIPT ERROR : The variable " << name << " doesn't exist" << std::endl;
+ return "";
+ }
+ return vars[name];
+ }
+ else
+ return name;
+ }
+ void ret()
+ {
+ if(call_stack.empty()){ CP = program_instruction.size(); }
+ else{ CP = call_stack.top(); call_stack.pop(); }
+ }
+ void call_function(string name)
+ {
+ if(doc_local_fun.find(name) != doc_local_fun.end())
+ {
+ call_stack.push(CP);
+ CP = doc_local_fun[name];
+ return;
+ }
+
+ if(doc_fun.find(name) == doc_fun.end())
+ {
+ std::cout << "#SCRIPT ERROR : The function " << name << " doesn't exist" << std::endl;
+ return;
+ }
+ doc_fun[name](*current);
+ }
+ void call_function(string name, string arg)
+ {
+ if(doc_arg_fun.find(name) == doc_arg_fun.end())
+ {
+ std::cout << "#SCRIPT ERROR : The function " << name << " doesn't exist" << std::endl;
+ return;
+ }
+ doc_arg_fun[name](*current, arg);
+ }
+
+ void call_function(string name, string arg, string arg2)
+ {
+ if(doc_arg2_fun.find(name) == doc_arg2_fun.end())
+ {
+ std::cout << "#SCRIPT ERROR : The function " << name << " doesn't exist" << std::endl;
+ return;
+ }
+ doc_arg2_fun[name](*this, arg, arg2);
+ }
+ void set_current_document(doc* document)
+ {current = document;}
+ private:
+ int CP;
+ map<string, string > vars;
+ map<string, void(*)(doc&) > doc_fun;
+ map<string, void(*)(doc&, string) > doc_arg_fun;
+ map<string, void(*)(runtime<Label,Float, Data>&, string, string) > doc_arg2_fun;
+ map<string, int > doc_local_fun;
+ mln::util::array<std::string> program_instruction;
+ mln::util::array<std::string> program_argument;
+ mln::util::array<std::string> program_argument2;
+
+ stack<int> call_stack;
+ doc* current;
+ };
+ }
+}
+#endif
\ No newline at end of file
diff --git a/scribo/sandbox/raphael/code/test.cc b/scribo/sandbox/raphael/code/test.cc
index feaf817..1f8d94d 100644
--- a/scribo/sandbox/raphael/code/test.cc
+++ b/scribo/sandbox/raphael/code/test.cc
@@ -1,6 +1,7 @@
#include <vector>
-#include <mln/io/all.hh>
+#include <mln/io/pbm/all.hh>
+#include <mln/io/ppm/all.hh>
#include <mln/core/site_set/p_vertices.hh>
#include <mln/core/image/graph_elt_window.hh>
@@ -16,21 +17,20 @@
#include <mln/util/timer.hh>
#include <mln/debug/draw_graph.hh>
#include <mln/debug/println.hh>
-#include <mln/transform/all.hh>
+#include <mln/transform/influence_zone_geodesic.hh>
#include <mln/make/image2d.hh>
#include <mln/core/alias/neighb2d.hh>
#include <mln/make/influence_zone_adjacency_graph.hh>
#include <mln/make/w_window2d.hh>
-#include <mln/labeling/all.hh>
+#include <mln/labeling/value_and_compute.hh>
#include <mln/make/image.hh>
#include <mln/value/rgb8.hh>
#include <mln/value/int_u8.hh>
#include <mln/value/int_u.hh>
-#include <mln/data/all.hh>
+#include <mln/labeling/colorize.hh>
#include <mln/core/alias/neighb2d.hh>
-#include <mln/algebra/all.hh>
+#include <mln/algebra/vec.hh>
#include <mln/core/image/graph_elt_neighborhood.hh>
-#include <mln/literal/all.hh>
#include <mln/graph/compute.hh>
#include <mln/draw/plot.hh>
@@ -42,10 +42,21 @@
#include <my/document/separator.hh>
#include <my/document/clean.hh>
+#include <my/document/recognition.hh>
+
+#include <my/runtime/runtime.hh>
+#include <my/runtime/lib.hh>
+
using namespace mln;
using namespace std;
-void Process(std::string File, std::string Dir)
+void Process(std::string File, std::string Dir, mymln::runtime::runtime< value::int_u<16> ,float,short>& runtime)
{
+ // RUNTIME
+
+ runtime.add_variable("FILE", Dir + "/" + File);
+ runtime.add_variable("DIR", Dir);
+ runtime.add_variable("DEBUG_FILE", Dir + "/debug_" + File);
+
std::cout << "Processing : " << File << endl;
/* CREATE GRAPH */
@@ -61,24 +72,19 @@ void Process(std::string File, std::string Dir)
uint16 areas_detected;
- timer.start();
- image2d<uint16> ima_blob = labeling::blobs(ima, c8(), areas_detected);
- std::cout << "CREATE BLOBS : " << timer.stop() << endl;
- timer.restart();
- timer.start();
+ mln_VAR( couple , mln::labeling::value_and_compute(ima, true, c8(), areas_detected, accu::shape::bbox<point2d>()));
+ image2d<uint16> ima_blob = couple.first();
+ util::array<box2d> boxes = couple.second().first();
+ //image2d<uint16> ima_blob = labeling::blobs(ima, c8(), areas_detected);
+
image2d<uint16> ima_influ = transform::influence_zone_geodesic(ima_blob, c8());
- std::cout << "CREATE INFLUENCE ZONE GEODESIC : " << timer.stop() << endl;
- timer.restart();
- timer.start();
+
util::graph grph = make::influence_zone_adjacency_graph(ima_influ, c8(), areas_detected);
// mymln::debug::save_label_image(ima_influ, Dir + "/influ_" + File);
- std::cout << "CREATE GRAPH : " << timer.stop() << endl;
-
-
+
/* COMPUTE GRAPH POINT POSITION */
- timer.restart();
- util::array<box2d> boxes = labeling::compute(accu::meta::shape::bbox(), ima_blob, areas_detected);
+ //util::array<box2d> boxes = labeling::compute(accu::meta::shape::bbox(), ima_blob, areas_detected);
typedef p_vertices<util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
typedef graph_elt_neighborhood<util::graph, g_vertices_p> g_nbh;
fun::i2v::array<point2d> graph_points(areas_detected + 1);
@@ -87,18 +93,20 @@ void Process(std::string File, std::string Dir)
{graph_points(N + 1) = boxes[N + 1].pcenter();}
g_vertices_p area_grph(grph, graph_points);
- std::cout << "COMPUTE GRAPH POINT POSITION : " << timer.stop() << endl;
- /* WORK ON GRAPH */
-
-
- timer.restart();
+
+ std::cout << "INITIALIZING : " << timer.stop() << endl;
+ timer.restart();
+ /* WORK ON GRAPH */
mymln::document::document<uint16,float,short> doc(ima_blob, ima_influ, boxes, area_grph, areas_detected);
+ runtime.set_current_document(&doc);
+ doc.debug_set_image(ima);
doc.vertical_separator_ratio_range(0.0f, 0.2f);
doc.horizontal_separator_ratio_range(6.0f, 1000.0f);
doc.container_volume_range(40, 100);
+
for (uint16 N = 1; N <= areas_detected; N++)
{
@@ -114,113 +122,139 @@ void Process(std::string File, std::string Dir)
}
//mymln::debug::save_label_image(ima_influ, "influ_" + File);
-
+ /*
mymln::document::clean_containers_items(doc);
mymln::document::clean_letters_items(doc);
mymln::document::clean_get_lines(doc);
+
+
+
mymln::document::clean_letters_alone(doc);
+ doc.cook_lines();
+ mymln::document::clean_included_letters(doc);
+ doc.recook_lines();
mymln::document::clean_dot_items(doc);
- doc.cook_lines();
- mymln::document::clean_quote_items(doc, Dir + "/" + "quote_graph_" + File, doc.image_mask_letters());
+ doc.recook_lines();
+ mymln::document::clean_quote_items(doc);
+ doc.recook_lines();
+
+ mymln::document::clean_between(doc);
+ doc.recook_lines();
+ doc.compute_letter_middle_height();
+ doc.compute_letter_middle_width();
+ mymln::document::clean_odd_letters(doc);
+ doc.recook_lines();
+
+*/
+
+ /*doc.compute_letter_middle_space();
+ mymln::document::clean_lines_space(doc, Dir + "/" + "quote_graph_" + File, doc.image_mask_letters());
+ doc.recook_lines();*/
+
+/*
mymln::document::separators::separators_find_allign(doc);
mymln::document::separators::separators_make_clean(doc);
doc.cook_separators();
- std::cout << "-> compute separator left " << endl;
doc.cook_line_splitting();
-
+
+
mymln::document::clean_line_link_item(doc);
- mymln::document::clean_proximity_lines(doc);
+ mymln::document::clean_proximity_lines(doc);
mymln::document::clean_quote_lines(doc);
+ doc.recook_lines();
+
+
+
+
doc.reset_implicit_separators();
- std::cout << "-> clean separator right " << endl;
mymln::document::separators::separators_find_allign_right(doc);
- mymln::document::separators::separators_make_clean(doc);
- std::cout << "-> compute separator right " << endl;
+ mymln::document::separators::separators_make_clean_right(doc);
doc.cook_separators_right();
doc.cook_line_splitting_exclusive();
- std::cout << "-> clean separator right " << endl;
- mymln::document::clean_line_link_item(doc);
- mymln::document::clean_proximity_lines(doc);
- std::cout << "-> clean " << endl;
- mymln::document::clean_quote_lines(doc);
- mymln::document::clean_alone_letters_lines(doc, Dir + "/" + "alone_graph_" + File, doc.image_mask_letters());
+ mymln::document::clean_line_link_item(doc);
+
+ mymln::document::clean_proximity_lines(doc);
+ mymln::document::clean_quote_lines(doc);
+ mymln::document::clean_alone_letters_lines(doc);
doc.recook_lines();
+
+
+ doc.compute_letter_middle_height();
+ doc.compute_letter_middle_width();
+ mymln::document::clean_odd_letters(doc);
+ doc.recook_lines();
+ */
+ /*
+ mymln::document::clean_lines_space(doc, Dir + "/" + "alone_graph_" + File, doc.image_mask_letters());
+ doc.recook_lines();*/
+
+ /*
mymln::document::remove_alone_letter(doc);
doc.recook_lines();
- mymln::document::clean_paragraph_items(doc, Dir + "/" + "para_graph_" + File, doc.image_mask_letters());
+ mymln::document::clean_paragraph_items(doc);
doc.cook_paragraphs();
- std::cout << "WORK ON GRAPH : " << timer.stop() << endl;
- //io::ppm::save(ima_influ, "separator.ppm");
- //io::pbm::save(doc.image_mask_separators(),"separators");
- // io::pbm::save(doc.image_mask_letters(),Dir + "/" + "letters_" + File);
- //io::pbm::save(doc.image_mask_alone_letters(),Dir + "/" + "letters_alone_" + File);
- //io::pbm::save(doc.image_mask_separators(),Dir + "/" + "separators_" + File);
- //io::pbm::save(doc.image_mask_containers(),Dir + "/" + "containers_" + File);
- //io::pbm::save(doc.image_mask_noise(),Dir + "/" + "noise_" + File);
-
-
-
- //doc.debug_save_lines(Dir + "/" + "lines_" + File);
- doc.debug_save_all(Dir + "/" + "debug_" + File, ima);
- //mymln::debug::save_graph_image(doc.fun_mask_implicit_separators_left(), doc.image_mask_letters(), Dir + "/" + "graph_imp_sep_line_" + File);
- //doc.debug_save_separators(Dir + "/" + "imp_sep_graph_" + File);
+
- /* typedef vertex_image<point2d,bool> v_ima_g;
- v_ima_g mask = doc.fun_mask_letters();
-*/
- /*image2d<bool> out(3500,3500);
-
+ mymln::document::clean_paragraphs_up(doc);
+ doc.recook_paragraphs();
+ mymln::document::clean_paragraphs_large(doc);
+ doc.recook_paragraphs();
+ mymln::document::clean_included_paragraphs(doc);
+ doc.recook_paragraphs();
+ std::cout << "WORK ON GRAPH : " << timer.stop() << endl;
+ doc.recook_lines();
+ */
+ runtime.run();
+
+
+
- mln_piter_(v_ima_g) v(mask.domain());
- typedef graph_elt_neighborhood_if<util::graph, g_vertices_p, v_ima_g> nbh_t;
- nbh_t nbh(mask);
- mln_niter_(nbh_t) q(nbh, v);
+ /*
+ doc.cook_lines_iter();
+ std::cout << doc.get_first_line();
+
+
+
- unsigned int fnds = 0;
- for_all(v)
+ doc.compute_letter_middle_space();
+
+ mymln::document::recognize_minus(doc);
+ mymln::document::recognize_dot(doc);
+ for(int Line = doc.get_first_line(); Line; doc.get_next_line(Line))
{
- unsigned int nds = 0;
- for_all(q)
- {
- nds++;
-
- draw::line(out, q,v, true);
- }
- if(nds > 0)
- {
- std::cout << v << endl;
- fnds++;
- }
-
-
- }*/
- //mymln::debug::draw_graph(out, mask);
- //io::pbm::save(out, "maskltt.dgb");
- //std::cout << "NODES:" << fnds << endl;
- // mymln::debug::save_graph_image(area_grph, ima, "graph_" + File);
- // mymln::debug::save_graph_image(doc.fun_mask_separators(), ima, "separator_graph_" + File);
- //mymln::debug::save_graph_image(area_grph, doc.image_mask_letters(), Dir + "/" + "graph_" + File);
- //mymln::debug::save_graph_image(doc.fun_mask_letters(), doc.image_mask_letters(), Dir + "/" + "container_graph_" + File);
- mln::util::array<box2d> linebx = doc.bbox_mask_lines();
- mymln::debug::save_boxes_image(linebx, doc.image_mask_letters(), Dir + "/" + "lbox_" + File);
-
- //mymln::debug::save_boxes_image(doc.bbox_enlarge_mask_letters(10, 0), ima, "linebox_" + File);
+ std::cout << doc.get_line_string(Line) << endl;
+ }
+
+ //doc.debug_save_lines(Dir + "/" + "lines_" + File);
+ //doc.debug_save_all(Dir + "/" + "debug_" + File, ima);
+ */
+
}
int main( int argc, char** argv)
{
- if(argc <= 1){Process("ima.pbm", "");}
+ mymln::runtime::runtime< value::int_u<16> ,float,short> run;
+ mymln::runtime::load_clean(run);
+ mymln::runtime::load_debug(run);
+ mymln::runtime::load_cooking(run);
+ mymln::runtime::load_string(run);
+ mymln::runtime::load_system(run);
+ mymln::runtime::load_separators(run);
+ mymln::runtime::load_compute(run);
+ if(argc <= 1){Process("ima.pbm", "", run);}
else
{
bool dir = false;
+ bool prog = false;
std::string Dir = "";
+ std::string Prog = "";
for(int N = 1 ; N < argc; N++)
{
if(dir)
@@ -228,12 +262,20 @@ int main( int argc, char** argv)
Dir = argv[N];
dir = false;
}
+ else if(prog)
+ {
+ Prog = argv[N];
+ run.load(Prog. c_str());
+ prog = false;
+ }
else
{
if(!strcmp(argv[N], "-D"))
{ dir = true;}
+ else if(!strcmp(argv[N], "-P"))
+ { prog = true; }
else
- { Process(argv[N], Dir); }
+ { Process(argv[N], Dir, run); }
}
}
}
--
1.7.2.5
1
0

last-svn-commit-885-g33e4509 Better paragraph detection and fix some bug
by Raphael Boissel 08 Sep '11
by Raphael Boissel 08 Sep '11
08 Sep '11
---
scribo/sandbox/raphael/code/my/document/clean.hh | 138 +++++++++++++++----
.../sandbox/raphael/code/my/document/document.hh | 148 ++++++++++++++++++-
scribo/sandbox/raphael/code/my/document/letters.hh | 17 +++
scribo/sandbox/raphael/code/my/util/union.hh | 24 +++-
scribo/sandbox/raphael/code/test.cc | 19 ++-
5 files changed, 303 insertions(+), 43 deletions(-)
create mode 100644 scribo/sandbox/raphael/code/my/document/letters.hh
diff --git a/scribo/sandbox/raphael/code/my/document/clean.hh b/scribo/sandbox/raphael/code/my/document/clean.hh
index 18669d3..56c7445 100644
--- a/scribo/sandbox/raphael/code/my/document/clean.hh
+++ b/scribo/sandbox/raphael/code/my/document/clean.hh
@@ -315,30 +315,33 @@ namespace mymln
{
typedef vertex_image<point2d,bool> v_ima_g;
typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
- v_ima_g mask = doc.fun_mask_letters();
+ v_ima_g mask = doc.fun_mask_all_letters();
mln_piter_(v_ima_g) v(mask.domain());
typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
nbh_t nbh(mask);
mln_niter_(nbh_t) q(nbh, v);
for_all(v)
{
- if(doc.contain_letter(v))
- {
if(doc.contain_line(v))
{
for_all(q)
{
- if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_proximity(q,v))
- {
- doc.add_to_line_link(v, q);
- }
- else if(doc.allign_size_height_line(q,v) && doc.allign_proximity_line(q,v) && doc.allign_V_line(q, v))
+ if(doc.contain_line(q))
{
- doc.add_to_line_link(v, q);
+ if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_proximity(q,v))
+ {
+ doc.add_to_line_link(v, q);
+ }
+ else if(doc.allign_size_height_line(q,v))
+ {
+ if(doc.allign_proximity_line(q,v) && doc.allign_V_line(q, v))
+ {
+ doc.add_to_line_link(v, q);
+ }
+ }
}
}
}
- }
}
doc.propage_line_link();
}
@@ -352,7 +355,7 @@ namespace mymln
#endif
typedef vertex_image<point2d,bool> v_ima_g;
typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
- v_ima_g mask = doc.fun_mask_start_lines();
+ v_ima_g mask = doc.fun_mask_start_end_lines();
mln_piter_(v_ima_g) v(mask.domain());
typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
nbh_t nbh(mask);
@@ -364,41 +367,71 @@ namespace mymln
{
if(doc.contain_line(v) && doc.get_beginning_of_line(v) == doc[v])
{
- doc.jump_to_paragraph(v);
+ doc.jump_to_paragraph(v);
+ if(!doc.contain_paragraph(v))
+ { doc.add_to_paragraph(v); }
+
for_all(q)
{
- if(doc.allign_H_Large(q,v) && doc.allign_size(q, v))
+ if(doc.allign_H_Large(q,v) && doc.allign_size(q, v) && doc.allign_proximity_V_line(v,q))
{
if(doc.contain_paragraph(q))
{
- if(!doc.contain_paragraph(v))
- {
- doc.add_to_paragraph(v);
-
- }
- doc.add_to_paragraph_link(q, v);
+ doc.add_to_paragraph(q);
+ doc.add_to_paragraph_link(q, v);
draw::line(out, q,v, mln::literal::green);
}
else
{
-
+ doc.add_to_paragraph(q);
+ doc.add_to_paragraph_link(v, q);
+ draw::line(out, q,v, mln::literal::magenta);
+ }
+
+ }
+ }
+ }
+ else if(doc.contain_line(v) && doc.get_end_of_line(v) == doc[v]){}
+ else if(doc.contain_line(v))
+ {
+ for_all(q)
+ {
+ if(
+ doc.get_beginning_of_line(q) == doc[q] &&
+ doc.allign_H_Large(q,v) &&
+ doc.allign_size(q, v) &&
+ doc.allign_proximity_V_line(v,q) &&
+ doc.allign_bottom_line(q,v)
+ )
+ {
+ if(doc.contain_paragraph(q))
+ {
+ doc.jump_to_paragraph(q);
if(!doc.contain_paragraph(v))
{
- doc.add_to_paragraph(q);
doc.add_to_paragraph(v);
- doc.add_to_paragraph_self_link(q);
doc.add_to_paragraph_link(q, v);
}
else
{
- doc.add_to_paragraph(q);
doc.add_to_paragraph_link(v, q);
}
- draw::line(out, q,v, mln::literal::magenta);
+ draw::line(out, q,v, mln::literal::blue);
+ }
+ else
+ {
+ doc.jump_to_paragraph(v);
+ if(!doc.contain_paragraph(v))
+ {
+ doc.add_to_paragraph(v);
+ }
+ doc.add_to_paragraph(q);
+ doc.add_to_paragraph_link(v, q);
+ draw::line(out, q,v, mln::literal::blue);
}
-
}
}
+
}
}
}
@@ -426,8 +459,7 @@ namespace mymln
doc.get_line_length(q) < 5 &&
doc.allign_smaller_line(v,q) &&
doc.get_line_length(v) > 3 &&
- doc.allign_proximity_line(v,q) &&
- doc.allign_V_line(v,q)
+ doc.allign_proximity_line(v,q)
)
{
if(doc.allign_base_line_line(v,q) && doc.get_line_length(q) < 3)
@@ -437,8 +469,60 @@ namespace mymln
}
}
}
+ }
+ doc.propage_line_link();
+ }
+ template<typename L, typename F, typename D>
+ void clean_alone_letters_lines(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s)
+ {
+ image2d<value::rgb8> out;
+ mln::initialize(out, s);
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_alone_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ if(doc.contain_line(v))
+ {
+ for_all(q)
+ {
+ draw::line(out, q,v, mln::literal::red);
+ if(doc.line_has(v,q))
+ {doc.add_to_line_link(v, q); draw::line(out, q,v, mln::literal::green);}
+
+ }
+ }
+ }
+ doc.propage_line_link();
+ io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out);
+ }
+
+ template<typename L, typename F, typename D>
+ void remove_alone_letter(mymln::document::document<L,F,D>& doc)
+ {
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_alone_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ for_all(q)
+ {
+ if(doc.in_header(q) || doc.in_footer(q)){continue;}
+ doc.add_noise(q);
+ }
}
}
+
+
+
}
}
diff --git a/scribo/sandbox/raphael/code/my/document/document.hh b/scribo/sandbox/raphael/code/my/document/document.hh
index f6204de..1a84edb 100644
--- a/scribo/sandbox/raphael/code/my/document/document.hh
+++ b/scribo/sandbox/raphael/code/my/document/document.hh
@@ -79,6 +79,17 @@ namespace mymln
Areas_Number_ = Areas + 1;
}
+ /* OPERATION ON PAGE */
+ inline bool in_header(const point2d& p)
+ { return p[0] < (img_influ.domain().len(0) / 8);}
+ inline bool in_header(Label lbl)
+ { return in_header(_bboxgp[lbl]); }
+
+ inline bool in_footer(const point2d& p)
+ { return p[0] > ((img_influ.domain().len(0) / 8) * 7);}
+ inline bool in_footer(Label lbl)
+ { return in_footer(_bboxgp[lbl]); }
+
/* OPERATION ON PARAGRAPH */
inline bool link_paragraphs()
{
@@ -140,7 +151,8 @@ namespace mymln
inline void split_line_exclusive(const Label lbl)
{
if(lbl == 0){return;}
- lines_union.add_self_link(lbl);
+ if(!lines_union.is_self_link(lbl))
+ lines_union.add_self_link(lbl);
Label pos = get_end_of_line(lbl);
if(pos == lbl){return;}
@@ -165,7 +177,8 @@ namespace mymln
inline void split_line(const Label lbl)
{
if(lbl == 0){return;}
- lines_union.add_self_link(lbl);
+ if(!lines_union.is_self_link(lbl))
+ lines_union.add_self_link(lbl);
Label pos = get_beginning_of_line(lbl);
if(pos == lbl){return;}
@@ -201,7 +214,8 @@ namespace mymln
add_to_line(N);
}
else if(end_lines_mask(N))
- lines_union.add_self_link(N);
+ if(!lines_union.is_self_link(N))
+ lines_union.add_self_link(N);
else
{lines_union.invalidate_link(N);}
}
@@ -238,6 +252,7 @@ namespace mymln
add_to_line(N);
}
else if(start_lines_mask(N))
+ if(!lines_union.is_self_link(N))
lines_union.add_self_link(N);
else
{lines_union.invalidate_link(N);}
@@ -325,6 +340,7 @@ namespace mymln
alone_letters_mask(lbl) = false;
noise_mask(lbl) = true;
+ lines_union[lbl] = 0;
}
void inline add(Label lbl, int link)
{
@@ -571,7 +587,24 @@ namespace mymln
inline bool allign_size_height( const point2d& Left, const point2d& Right)
{return allign_size_height(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_proximity_V( const point2d& Left, const point2d& Right)
+ {return allign_proximity_V(img_influ(Left), img_influ(Right));}
+ inline bool allign_proximity_V( const Label Left, const Label Right)
+ {
+ short int SizeL0 = label_size_(0, Left);
+ short int SizeL1 = label_size_(1, Left);
+ short int Swap = 0;
+ if(SizeL0 < SizeL1)
+ { SizeL0 = SizeL1; }
+ short int Dis = _bboxgp[Left].pmin()[0] - _bboxgp[Right].pmin()[0];
+ if(Dis < 0)
+ Dis = -Dis;
+ return Dis < SizeL0 * 1.5f;
+ }
+
+
inline bool allign_proximity( const point2d& Left, const point2d& Right)
{return allign_proximity(img_influ(Left), img_influ(Right));}
@@ -601,7 +634,7 @@ namespace mymln
{
short int SizeL = lines_bbox[lines_union[Left]].len(0);
short int SizeR = lines_bbox[lines_union[Right]].len(0);
- return SizeR > (SizeL / 2) && SizeR < (SizeL * 2);
+ return SizeR > (SizeL / 2.2f) && SizeR < (SizeL * 2.2);
}
inline bool allign_proximity_line( const Label Left, const Label Right)
@@ -625,7 +658,28 @@ namespace mymln
}
+ inline bool allign_proximity_V_line( const point2d& Left, const point2d& Right)
+ {return allign_proximity_V_line(img_influ(Left), img_influ(Right));}
+ inline bool allign_proximity_V_line( const Label Left, const Label Right)
+ {
+ box2d LB = lines_bbox[lines_union[Left]];
+ box2d RB = lines_bbox[lines_union[Right]];
+
+ int DisA = LB.pmax()[0] - RB.pmin()[0];
+ int DisB = RB.pmax()[0] - LB.pmin()[0];
+ if(DisA < 0){DisA = -DisA;}
+ if(DisB < 0){DisB = -DisB;}
+ if(DisA > DisB)
+ { DisA = DisB; }
+
+ unsigned int HA = LB.len(0);
+ unsigned int HB = RB.len(0);
+
+ if(HA < HB)
+ { HA = HB; }
+ return (DisA * 1.5f) < HA;
+ }
inline bool allign_proximity_large( const point2d& Left, const point2d& Right)
{return allign_proximity_large(img_influ(Left), img_influ(Right));}
@@ -696,6 +750,7 @@ namespace mymln
{
short int allignV = lines_bbox[lines_union[Left]].pcenter()[0] - lines_bbox[lines_union[Right]].pcenter()[0];
if(allignV<0){allignV = -allignV;}
+ allignV *= 2;
return allignV < lines_bbox[lines_union[Left]].len(0) && allignV < lines_bbox[lines_union[Right]].len(0);
}
@@ -746,6 +801,20 @@ namespace mymln
allignV < lines_bbox[lines_union[Left]].len(0) &&
lines_bbox[lines_union[Left]].pcenter()[0] < lines_bbox[lines_union[Right]].pcenter()[0];
}
+ inline bool allign_bottom(const point2d& Left, const point2d& Right)
+ {return allign_bottom(img_influ(Left), img_influ(Right));}
+ inline bool allign_bottom(const Label Left, const Label Right)
+ {
+ return _bboxgp[Left].pmin()[0] < _bboxgp[Right].pmin()[0];
+ }
+
+ inline bool allign_bottom_line(const point2d& Left, const point2d& Right)
+ {return allign_bottom_line(img_influ(Left), img_influ(Right));}
+ inline bool allign_bottom_line(const Label Left, const Label Right)
+ {
+ return lines_bbox[lines_union[Left]].pmin()[0] < lines_bbox[lines_union[Right]].pmin()[0];
+ }
+
inline bool allign_base_line(const point2d& Left, const point2d& Right)
@@ -775,6 +844,34 @@ namespace mymln
std::cout << " lines(s) : " << CLine << std::endl;
}
+ void debug_save_all(std::string file, image2d<bool> source)
+ {
+ image2d<value::rgb8> ima_color;
+ mln::initialize(ima_color,img_influ);
+
+ for(unsigned int N = 0; N < lines_bbox.size(); N++)
+ {
+ if(lines_bbox[N].is_valid())
+ {
+ draw::box(ima_color, lines_bbox[N], mln::literal::blue);
+ }
+ }
+ for(unsigned int N = 0; N < paragraphs_bbox.size(); N++)
+ {
+ if(paragraphs_bbox[N].is_valid())
+ {
+ draw::box(ima_color, paragraphs_bbox[N], mln::literal::red);
+ }
+ }
+ for(unsigned int N = 0; N < lines_first_label.size(); N++)
+ {
+ if(_bboxgp[lines_first_label[N]].is_valid())
+ {
+ draw::box(ima_color, _bboxgp[lines_first_label[N]], mln::literal::yellow);
+ }
+ }
+ io::ppm::save(mln::debug::superpose(ima_color, source, literal::white) , file);
+ }
void debug_save_paragraphs(std::string file)
{ mymln::debug::save_label_image(img, paragraphs_union , file);}
void debug_save_lines(std::string file)
@@ -900,7 +997,7 @@ namespace mymln
cook_lines_();
}
inline void reset_implicit_separators()
- { implicit_separators_union.reset(); }
+ { implicit_separators_union.reset(); lines_split.fill(0);}
inline void cook_lines()
{
lines_len = mln::util::array<unsigned int>(NLine + 1);
@@ -1027,6 +1124,14 @@ namespace mymln
{ SeqP++; while(lines_iter_valid() && !lines_seq[SeqP]){SeqP++;} }
inline void lines_iter_valid()
{ return SeqP < Areas_Number_; }
+
+
+ inline void cook_paragraphs()
+ {
+ paragraphs_bbox = mln::util::array<box2d>(NPar + 1);
+ cook_paragraphs_();
+ }
+
private:
fun::i2v::array<bool> implicit_separators_left_mask;
fun::i2v::array<bool> implicit_separators_right_mask;
@@ -1100,7 +1205,7 @@ namespace mymln
}
}
}
-
+
inline void cook_separators_right_()
{
implicit_separators_right_mask(0) = false;
@@ -1234,12 +1339,12 @@ namespace mymln
/* COOK THE FIRST AND THE LAST LABEL OF THE LINE */
if(lines_first_label[lines_union[N]] == 0)
lines_first_label[lines_union[N]] = N;
- else if(_bboxgp[N].pcenter()[1] < _bboxgp[lines_first_label[lines_union[N]]].pcenter()[1])
+ else if(_bboxgp[N].pmin()[1] < _bboxgp[lines_first_label[lines_union[N]]].pmin()[1])
lines_first_label[lines_union[N]] = N;
if(lines_last_label[lines_union[N]] == 0)
lines_last_label[lines_union[N]] = N;
- else if(_bboxgp[N].pcenter()[1] > _bboxgp[lines_last_label[lines_union[N]]].pcenter()[1])
+ else if(_bboxgp[N].pmax()[1] > _bboxgp[lines_last_label[lines_union[N]]].pmax()[1])
lines_last_label[lines_union[N]] = N;
/* FILL THE MASK WITH FALSE:MAYBE USELESS IF THE MASK IS INITIALIZED */
@@ -1275,6 +1380,10 @@ namespace mymln
{
lines_bbox[lines_union[N]].merge(_bboxgp[N]);
}
+ if(lines_len[lines_union[N]] == 1)
+ { letters_mask(N) = false; alone_letters_mask(N) = true; }
+ else if(lines_union[N])
+ { letters_mask(N) = true; alone_letters_mask(N) = false; }
}
}
@@ -1411,11 +1520,34 @@ namespace mymln
unsigned int NPar ;
mln::util::array<unsigned int> paragraphs_first_label;
mln::util::array<unsigned int> paragraphs_last_label;
+ mln::util::array<unsigned int> paragraphs_assoc;
mln::util::array<box2d> paragraphs_bbox;
inline void cook_paragraphs_()
{
+ mln::util::array<unsigned int> paragraphs_assoc(lines_union.size());
+ for(int N = 0; N < paragraphs_union.size(); N++)
+ {
+ if(paragraphs_union[N])
+ {
+ if(paragraphs_assoc[lines_union[N]])
+ { paragraphs_union.add_link(N, paragraphs_assoc[lines_union[N]]); }
+ else
+ {paragraphs_assoc[lines_union[N]] = N;}
+ }
+ }
+ paragraphs_union.propage_links();
+ for(int N = 0; N < paragraphs_bbox.size(); N++)
+ {
+ paragraphs_bbox[N] = box2d();
+ }
+ for(int N = 0; N < paragraphs_union.size(); N++)
+ {
+ if(paragraphs_union[N])
+ paragraphs_bbox[paragraphs_union[N]].merge(lines_bbox[lines_union[N]]);
+
+ }
}
diff --git a/scribo/sandbox/raphael/code/my/document/letters.hh b/scribo/sandbox/raphael/code/my/document/letters.hh
new file mode 100644
index 0000000..6701943
--- /dev/null
+++ b/scribo/sandbox/raphael/code/my/document/letters.hh
@@ -0,0 +1,17 @@
+#ifndef INC_CLEAN_LETTER_DOC
+#define INC_CLEAN_LETTER_DOC
+#include<my/document/document.hh>
+#include <mln/core/image/graph_elt_neighborhood.hh>
+#include <mln/core/image/vertex_image.hh>
+using namespace mln;
+
+namespace mymln
+{
+ namespace document
+ {
+ void clean_letter_aberation()
+ {
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/scribo/sandbox/raphael/code/my/util/union.hh b/scribo/sandbox/raphael/code/my/util/union.hh
index 53fcbb3..90a7e68 100644
--- a/scribo/sandbox/raphael/code/my/util/union.hh
+++ b/scribo/sandbox/raphael/code/my/util/union.hh
@@ -28,12 +28,23 @@ namespace mymln
inline void invalidate_link(const Label A)
{ mark_link[A] = 0; }
inline void add_self_link(const Label A)
- { mark_link[A] = A; }
+ {
+ if(!A){return;}
+ if(mark_link[A] == 0)
+ mark_link[A] = A;
+ else
+ {
+ unsigned int Pos = find_parent_(A);
+ if(Pos)
+ mark_link[Pos] = A;
+ mark_link[A] = A;
+ }
+ }
inline unsigned int link(const unsigned int index)
{return mark_link[index]; }
inline void add_link(const Label A, const Label B)
{
-
+ if(!B || !A){return;}
unsigned int Pos = find_parent_(A);
if(mark_link[B] == 0)
{
@@ -84,7 +95,14 @@ namespace mymln
inline unsigned int find_parent_(const Label A)
{
unsigned int Pos = A;
- while(Pos != mark_link[Pos] && Pos != 0){Pos = mark_link[Pos];}
+ unsigned int OldPos = A;
+ while(Pos != mark_link[Pos] && Pos != 0)
+ {
+
+ Pos = mark_link[Pos];
+ mark_link[OldPos] = mark_link[Pos];
+ OldPos = Pos;
+ }
return Pos;
}
mln::util::array<unsigned int> mark;
diff --git a/scribo/sandbox/raphael/code/test.cc b/scribo/sandbox/raphael/code/test.cc
index b009c2e..feaf817 100644
--- a/scribo/sandbox/raphael/code/test.cc
+++ b/scribo/sandbox/raphael/code/test.cc
@@ -127,25 +127,32 @@ void Process(std::string File, std::string Dir)
mymln::document::separators::separators_find_allign(doc);
mymln::document::separators::separators_make_clean(doc);
doc.cook_separators();
+ std::cout << "-> compute separator left " << endl;
doc.cook_line_splitting();
+
mymln::document::clean_line_link_item(doc);
mymln::document::clean_proximity_lines(doc);
mymln::document::clean_quote_lines(doc);
-
doc.reset_implicit_separators();
+ std::cout << "-> clean separator right " << endl;
mymln::document::separators::separators_find_allign_right(doc);
mymln::document::separators::separators_make_clean(doc);
+ std::cout << "-> compute separator right " << endl;
doc.cook_separators_right();
doc.cook_line_splitting_exclusive();
+ std::cout << "-> clean separator right " << endl;
mymln::document::clean_line_link_item(doc);
mymln::document::clean_proximity_lines(doc);
+ std::cout << "-> clean " << endl;
mymln::document::clean_quote_lines(doc);
-
+ mymln::document::clean_alone_letters_lines(doc, Dir + "/" + "alone_graph_" + File, doc.image_mask_letters());
+ doc.recook_lines();
+ mymln::document::remove_alone_letter(doc);
doc.recook_lines();
mymln::document::clean_paragraph_items(doc, Dir + "/" + "para_graph_" + File, doc.image_mask_letters());
-
+ doc.cook_paragraphs();
std::cout << "WORK ON GRAPH : " << timer.stop() << endl;
//io::ppm::save(ima_influ, "separator.ppm");
//io::pbm::save(doc.image_mask_separators(),"separators");
@@ -157,7 +164,8 @@ void Process(std::string File, std::string Dir)
- doc.debug_save_paragraphs(Dir + "/" + "lines_" + File);
+ //doc.debug_save_lines(Dir + "/" + "lines_" + File);
+ doc.debug_save_all(Dir + "/" + "debug_" + File, ima);
//mymln::debug::save_graph_image(doc.fun_mask_implicit_separators_left(), doc.image_mask_letters(), Dir + "/" + "graph_imp_sep_line_" + File);
//doc.debug_save_separators(Dir + "/" + "imp_sep_graph_" + File);
@@ -199,8 +207,9 @@ void Process(std::string File, std::string Dir)
// mymln::debug::save_graph_image(doc.fun_mask_separators(), ima, "separator_graph_" + File);
//mymln::debug::save_graph_image(area_grph, doc.image_mask_letters(), Dir + "/" + "graph_" + File);
//mymln::debug::save_graph_image(doc.fun_mask_letters(), doc.image_mask_letters(), Dir + "/" + "container_graph_" + File);
-mln::util::array<box2d> linebx = doc.bbox_mask_lines();
+ mln::util::array<box2d> linebx = doc.bbox_mask_lines();
mymln::debug::save_boxes_image(linebx, doc.image_mask_letters(), Dir + "/" + "lbox_" + File);
+
//mymln::debug::save_boxes_image(doc.bbox_enlarge_mask_letters(10, 0), ima, "linebox_" + File);
}
--
1.7.2.5
1
0

last-svn-commit-884-gf5c0102 Add the detection of Right implicit separator and improve lines detection
by Raphael Boissel 08 Sep '11
by Raphael Boissel 08 Sep '11
08 Sep '11
---
scribo/sandbox/raphael/code/my/debug/pict.hh | 9 +-
scribo/sandbox/raphael/code/my/document/clean.hh | 227 ++++++-
.../sandbox/raphael/code/my/document/document.hh | 715 +++++++++++++++++++-
.../sandbox/raphael/code/my/document/separator.hh | 118 +++-
scribo/sandbox/raphael/code/my/util/union.hh | 12 +-
scribo/sandbox/raphael/code/test.cc | 57 ++-
6 files changed, 1066 insertions(+), 72 deletions(-)
diff --git a/scribo/sandbox/raphael/code/my/debug/pict.hh b/scribo/sandbox/raphael/code/my/debug/pict.hh
index 56fdca3..23880bc 100644
--- a/scribo/sandbox/raphael/code/my/debug/pict.hh
+++ b/scribo/sandbox/raphael/code/my/debug/pict.hh
@@ -41,6 +41,7 @@ namespace mymln
io::ppm::save(ima_color, file);
}
+
template<typename p_v> inline void save_graph_image(p_v& pv, unsigned int SizeX, unsigned int SizeY, std::string file)
{
image2d<value::rgb8> ima_graph(SizeY, SizeX);
@@ -69,10 +70,14 @@ namespace mymln
}
template<typename I> inline void save_boxes_image(mln::util::array<box2d> boxes, I source, std::string file)
{
- image2d<bool> out(source.domain());
- data::fill(out, false);
+ image2d<bool> out;
+ mln::initialize(out, source);
for(unsigned int N = 0 ; N < boxes.size(); N++)
{
+ if(!boxes[N].is_valid()){continue;}
+ if((boxes[N]).pmin()[0] < 0 || (boxes[N]).pmin()[1] < 0 || (boxes[N]).pmax()[0] < 0 || (boxes[N]).pmax()[1] < 0 ){continue;}
+ if((boxes[N]).pmax()[0] > source.domain().pmax()[0] || (boxes[N]).pmax()[1] > source.domain().pmax()[1] ){continue;}
+ if((boxes[N]).pmin()[0] > source.domain().pmax()[0] || (boxes[N]).pmin()[1] > source.domain().pmax()[1] ){continue;}
data::fill((out | (boxes[N])).rw(), true);
}
io::pbm::save(out , file);
diff --git a/scribo/sandbox/raphael/code/my/document/clean.hh b/scribo/sandbox/raphael/code/my/document/clean.hh
index 2ce8614..18669d3 100644
--- a/scribo/sandbox/raphael/code/my/document/clean.hh
+++ b/scribo/sandbox/raphael/code/my/document/clean.hh
@@ -83,10 +83,41 @@ namespace mymln
}
template<typename L, typename F, typename D>
- void clean_get_lines(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s)
+ void clean_letters_alone(mymln::document::document<L,F,D>& doc)
+ {
+
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_all_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ if(doc.contain_alone_letter(v))
+ {
+ unsigned int count = 0;
+ unsigned int real_count = 0;
+ for_all(q)
+ {
+ if(doc.contain_alone_letter(q))
+ count++;
+ else if(doc.contain_letter(q))
+ real_count++;
+ }
+ if(real_count < 2 && count > 2)
+ { doc.add_noise(v);}
+ else if(real_count == 0 && count > 1)
+ { doc.add_noise(v);}
+ }
+ }
+
+ }
+
+ template<typename L, typename F, typename D>
+ void clean_get_lines(mymln::document::document<L,F,D>& doc)
{
- image2d<value::rgb8> out;
- mln::initialize(out, s);
typedef vertex_image<point2d,bool> v_ima_g;
typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
v_ima_g mask = doc.fun_mask_letters();
@@ -113,19 +144,17 @@ namespace mymln
if((!doc.contain_line(q)))
{
// draw::line(out, q,v, mln::literal::blue);
- if(doc.allign_V(q,v) && doc.allign_size(q, v))
+ if(doc.allign_V(q,v) && doc.allign_size(q, v) && (doc.allign_proximity_large(q, v) || doc.allign_proximity_large(v, q)) )
{
doc.add_to_line_link(v, q);
- draw::line(out, q,v, mln::literal::magenta);
All_Alone = false;
}
}
else
{
- if(doc.allign_V(q,v) && doc.allign_size(q, v))
+ if(doc.allign_V(q,v) && doc.allign_size(q, v) && (doc.allign_proximity_large(q, v) || doc.allign_proximity_large(v, q)))
{
doc.add_to_line_link(q, v);
- draw::line(out, q,v, mln::literal::green);
All_Alone = false;
}
}
@@ -138,14 +167,12 @@ namespace mymln
}
doc.propage_line_link();
- io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out);
}
+
template<typename L, typename F, typename D>
- void clean_dot_items(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s)
+ void clean_dot_items(mymln::document::document<L,F,D>& doc)
{
- image2d<value::rgb8> out;
- mln::initialize(out, s);
typedef vertex_image<point2d,bool> v_ima_g;
typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
v_ima_g mask = doc.fun_mask_alone_letters();
@@ -161,7 +188,6 @@ namespace mymln
{
if(!doc.allign_H(q, v) && doc.allign_base_line(v, q))
{
- draw::line(out, q,v, mln::literal::green);
doc.add_to_line_link(v, q);
doc.add_letter_coerce(q);
}
@@ -180,23 +206,22 @@ namespace mymln
{
if (doc.allign_H_Large(v2, q2) && doc.allign_top(v2, q2))
{
- draw::line(out, q2,v2, mln::literal::magenta);
doc.add_to_line_link(v2, q2);
doc.add_letter_coerce(q2);
}
}
}
}
- io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out);
doc.propage_line_link();
}
template<typename L, typename F, typename D>
void clean_quote_items(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s)
{
-
+ #ifndef NGRAPHDEBUG
image2d<value::rgb8> out;
mln::initialize(out, s);
+ #endif
typedef vertex_image<point2d,bool> v_ima_g;
typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
v_ima_g mask = doc.fun_mask_start_end_lines();
@@ -243,18 +268,178 @@ namespace mymln
}
}
}
+ #ifndef NGRAPHDEBUG
io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out);
+ #endif
doc.propage_line_link();
doc.recook_lines();
}
-
-
-
-
+
+ template<typename L, typename F, typename D>
+ void clean_line_link_item(mymln::document::document<L,F,D>& doc)
+ {
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_start_end_lines();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ if(doc.contain_letter(v))
+ {
+ if(doc.contain_line(v))
+ {
+ for_all(q)
+ {
+ if(
+ doc.allign_V_line(v,q) &&
+ doc.allign_center_line(v, q) &&
+ doc.allign_smaller_line(v,q) &&
+ doc.get_line_length(q) < 3 &&
+ doc.allign_proximity_line(v,q)
+ )
+ {
+ doc.add_to_line_link(v, q);
+ }
+ }
+ }
+ }
+ }
+ }
+
+
+ template<typename L, typename F, typename D>
+ void clean_proximity_lines(mymln::document::document<L,F,D>& doc)
+ {
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ if(doc.contain_letter(v))
+ {
+ if(doc.contain_line(v))
+ {
+ for_all(q)
+ {
+ if(doc.allign_V(q,v) && doc.allign_size(q, v) && doc.allign_proximity(q,v))
+ {
+ doc.add_to_line_link(v, q);
+ }
+ else if(doc.allign_size_height_line(q,v) && doc.allign_proximity_line(q,v) && doc.allign_V_line(q, v))
+ {
+ doc.add_to_line_link(v, q);
+ }
+ }
+ }
+ }
+ }
+ doc.propage_line_link();
+ }
+
+ template<typename L, typename F, typename D>
+ void clean_paragraph_items(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s)
+ {
+ #ifndef NGRAPHDEBUG
+ image2d<value::rgb8> out;
+ mln::initialize(out, s);
+ #endif
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_start_lines();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ doc.link_paragraphs();
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ if(doc.contain_letter(v))
+ {
+ if(doc.contain_line(v) && doc.get_beginning_of_line(v) == doc[v])
+ {
+ doc.jump_to_paragraph(v);
+ for_all(q)
+ {
+ if(doc.allign_H_Large(q,v) && doc.allign_size(q, v))
+ {
+ if(doc.contain_paragraph(q))
+ {
+ if(!doc.contain_paragraph(v))
+ {
+ doc.add_to_paragraph(v);
+
+ }
+ doc.add_to_paragraph_link(q, v);
+ draw::line(out, q,v, mln::literal::green);
+ }
+ else
+ {
+
+ if(!doc.contain_paragraph(v))
+ {
+ doc.add_to_paragraph(q);
+ doc.add_to_paragraph(v);
+ doc.add_to_paragraph_self_link(q);
+ doc.add_to_paragraph_link(q, v);
+ }
+ else
+ {
+ doc.add_to_paragraph(q);
+ doc.add_to_paragraph_link(v, q);
+ }
+ draw::line(out, q,v, mln::literal::magenta);
+ }
+
+ }
+ }
+ }
+ }
+ }
+ io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out);
+ doc.propage_paragraph_link();
}
-
-
+ template<typename L, typename F, typename D>
+ void clean_quote_lines(mymln::document::document<L,F,D>& doc)
+ {
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_start_end_lines();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ if(doc.contain_line(v))
+ {
+ for_all(q)
+ {
+ if(
+ doc.get_line_length(q) < 5 &&
+ doc.allign_smaller_line(v,q) &&
+ doc.get_line_length(v) > 3 &&
+ doc.allign_proximity_line(v,q) &&
+ doc.allign_V_line(v,q)
+ )
+ {
+ if(doc.allign_base_line_line(v,q) && doc.get_line_length(q) < 3)
+ {doc.add_to_line_link(v, q);}
+ else if(doc.allign_up_line_line(v,q))
+ {doc.add_to_line_link(v, q);}
+ }
+ }
+ }
+ }
+ }
+ }
}
diff --git a/scribo/sandbox/raphael/code/my/document/document.hh b/scribo/sandbox/raphael/code/my/document/document.hh
index 67bda18..f6204de 100644
--- a/scribo/sandbox/raphael/code/my/document/document.hh
+++ b/scribo/sandbox/raphael/code/my/document/document.hh
@@ -1,7 +1,9 @@
#ifndef INC_DOCUMENT_DOC
#define INC_DOCUMENT_DOC
+#include <mln/accu/shape/bbox.hh>
#include<my/util/vector_bbox_group.hh>
#include<my/util/union.hh>
+#include<my/debug/pict.hh>
#include <mln/util/graph.hh>
@@ -47,14 +49,24 @@ namespace mymln
separators_mask = fun::i2v::array<bool>(Areas + 1);
containers_mask = fun::i2v::array<bool>(Areas + 1);
letters_mask = fun::i2v::array<bool>(Areas + 1);
+ all_letters_mask = fun::i2v::array<bool>(Areas + 1);
Hseparator_mask = fun::i2v::array<bool>(Areas + 1);
Vseparator_mask = fun::i2v::array<bool>(Areas + 1);
noise_mask = fun::i2v::array<bool>(Areas + 1);
alone_letters_mask = fun::i2v::array<bool>(Areas + 1);
+ implicit_separators_left_mask = fun::i2v::array<bool>(Areas + 1);
+ implicit_separators_right_mask = fun::i2v::array<bool>(Areas + 1);
CImpSep = 1;
NImpSep = 2;
lines_union = mymln::util::union_find<Label>(Areas + 1);
implicit_separators_union = mymln::util::union_find<Label>(Areas + 1);
+
+ paragraphs_union = mymln::util::union_find<Label>(Areas + 1);
+
+ tag_lbl = mln::util::array<std::string>(Areas + 1);
+ lines_split = mln::util::array<Label>(Areas + 1);
+ lines_split.fill(0);
+
img_influ = ima_influ;
CSep = 0;
CSepH = 0;
@@ -62,10 +74,190 @@ namespace mymln
CLet = 0;
CLine = 1;
NLine = 2;
+ CPar = 1;
+ NPar = 2;
Areas_Number_ = Areas + 1;
}
+ /* OPERATION ON PARAGRAPH */
+ inline bool link_paragraphs()
+ {
+ for(unsigned int N = 1; N < Areas_Number_; N++)
+ {
+ paragraphs_union.invalidate_link(N);
+ if(start_lines_mask(N))
+ {
+ paragraphs_union.add_self_link(N);
+ }
+ else if(contain_line(N))
+ {
+ if(get_beginning_of_line(N) == 0){std::cout <<"ERROR#\n";}
+ paragraphs_union.add_link(get_beginning_of_line(N), N);
+ }
+ }
+ }
+ inline bool contain_paragraph(const point2d& point)
+ {return contain_paragraph(img_influ(point));}
+ inline bool contain_paragraph(const Label lbl)
+ {return paragraphs_union[lbl] != 0;}
+ inline void add_to_paragraph(const point2d& point)
+ {add_to_paragraph(img_influ(point));}
+ inline void add_to_paragraph(const Label lbl)
+ {paragraphs_union[lbl] = CPar;}
+
+ inline void add_new_paragraph(const point2d& point)
+ {add_new_paragraph(img_influ(point));}
+ inline void add_new_paragraph(const Label lbl)
+ {CPar = NPar; NPar++;}
+
+ inline void add_to_paragraph_link(const point2d& A, const point2d& B)
+ {add_to_paragraph_link(img_influ(A),img_influ(B));}
+ inline void add_to_paragraph_link(const Label A, const Label B)
+ {paragraphs_union.add_link(A, B);}
+
+ inline void add_to_paragraph_self_link(const point2d& A)
+ {add_to_paragraph_self_link(img_influ(A));}
+ inline void add_to_paragraph_self_link(const Label A)
+ {paragraphs_union.add_self_link(A);}
+
+ inline void propage_paragraph_link()
+ {paragraphs_union.propage_links();}
+
+ inline void jump_to_paragraph(const point2d& point)
+ {
+ jump_to_paragraph(img_influ(point));
+ }
+ inline void jump_to_paragraph(const Label lbl)
+ {
+ if(paragraphs_union[lbl] != 0)
+ CPar = paragraphs_union[lbl];
+ else
+ add_new_paragraph(lbl);
+ }
/* OPERATION ON LINES */
+ inline void split_line_exclusive(const point2d& point)
+ {split_line_exclusive(img_influ(point));}
+ inline void split_line_exclusive(const Label lbl)
+ {
+ if(lbl == 0){return;}
+ lines_union.add_self_link(lbl);
+ Label pos = get_end_of_line(lbl);
+ if(pos == lbl){return;}
+
+ while(lines_split[pos] && lines_split[pos] != lbl && pos != lbl)
+ {
+ if(_bboxgp[lines_split[pos]].pmin()[1] < _bboxgp[lbl].pmin()[1])
+ {
+ lines_split[lbl] = lines_split[pos];
+ lines_split[pos] = lbl;
+ return;
+ }
+ pos = lines_split[pos];
+ }
+ if(pos == lbl || lines_split[pos] == lbl){return;}
+ lines_split[pos] = lbl;
+
+ }
+
+
+ inline void split_line(const point2d& point)
+ {split_line(img_influ(point));}
+ inline void split_line(const Label lbl)
+ {
+ if(lbl == 0){return;}
+ lines_union.add_self_link(lbl);
+ Label pos = get_beginning_of_line(lbl);
+ if(pos == lbl){return;}
+
+ while(lines_split[pos] && lines_split[pos] != lbl && pos != lbl)
+ {
+ if(_bboxgp[lines_split[pos]].pmin()[1] > _bboxgp[lbl].pmin()[1])
+ {
+ lines_split[lbl] = lines_split[pos];
+ lines_split[pos] = lbl;
+ return;
+ }
+ pos = lines_split[pos];
+ }
+ if(pos == lbl || lines_split[pos] == lbl){return;}
+ lines_split[pos] = lbl;
+
+ }
+
+
+ inline void cook_line_splitting_exclusive()
+ {
+ for(unsigned int N = 1; N < Areas_Number_; N++)
+ {
+ lines_union.invalidate_link(N);
+ if(end_lines_mask(N) || implicit_separators_right_mask(N))
+ split_line_exclusive(N);
+ }
+ for(unsigned int N = 1; N < Areas_Number_; N++)
+ {
+ if(lines_union.is_self_link(N))
+ {
+ add_new_line(N);
+ add_to_line(N);
+ }
+ else if(end_lines_mask(N))
+ lines_union.add_self_link(N);
+ else
+ {lines_union.invalidate_link(N);}
+ }
+ lines_union[0] = 0;
+ lines_union.invalidate_link(0);
+ for(unsigned int N = 1; N < Areas_Number_; N++)
+ {
+ if(!contain_line(N) || lines_union.is_self_link(N))
+ continue;
+ Label pos = get_end_of_line(N);
+ while(lines_split[pos] && _bboxgp[lines_split[pos]].pmin()[1] > _bboxgp[N].pmin()[1])
+ pos = lines_split[pos];
+ if(pos != 0)
+ {lines_union[N] = lines_union[pos]; lines_union.add_link(pos,N);}
+ }
+
+ //lines_union.propage_links();lines_union
+ cook_lines();
+ }
+
+ inline void cook_line_splitting()
+ {
+ for(unsigned int N = 1; N < Areas_Number_; N++)
+ {
+ lines_union.invalidate_link(N);
+ if(start_lines_mask(N) || implicit_separators_left_mask(N))
+ split_line(N);
+ }
+ for(unsigned int N = 1; N < Areas_Number_; N++)
+ {
+ if(lines_union.is_self_link(N))
+ {
+ add_new_line(N);
+ add_to_line(N);
+ }
+ else if(start_lines_mask(N))
+ lines_union.add_self_link(N);
+ else
+ {lines_union.invalidate_link(N);}
+ }
+ lines_union[0] = 0;
+ lines_union.invalidate_link(0);
+ for(unsigned int N = 1; N < Areas_Number_; N++)
+ {
+ if(!contain_line(N) || lines_union.is_self_link(N))
+ continue;
+ Label pos = get_beginning_of_line(N);
+ while(lines_split[pos] && _bboxgp[lines_split[pos]].pmin()[1] < _bboxgp[N].pmin()[1])
+ pos = lines_split[pos];
+ if(pos != 0)
+ {lines_union[N] = lines_union[pos]; lines_union.add_link(pos,N);}
+ }
+
+ //lines_union.propage_links();lines_union
+ cook_lines();
+ }
inline void add_to_line_self_link(const point2d& point)
{ add_to_line_self_link(img_influ(point));}
inline void add_to_line(const point2d& point)
@@ -87,6 +279,11 @@ namespace mymln
inline bool contain_line(const point2d& point)
{ return contain_line(img_influ(point)); }
+ inline bool contain_line_start(const point2d& point)
+ { return contain_line_start(img_influ(point)); }
+ inline bool contain_line_start(const Label lbl)
+ { return lines_first_label(lbl); }
+
inline void add_to_line(const Label lbl)
{ lines_union[lbl] = CLine; }
@@ -134,6 +331,10 @@ namespace mymln
if (link == 0){add_noise(lbl);}
else if (link > 30){ add_separator(lbl);}
else { add_letter(lbl);}
+
+ /* SET UP SPECIAL MASK TO FALSE */
+ implicit_separators_left_mask(lbl) = false;
+ implicit_separators_right_mask(lbl) = false;
}
void inline invalid_letter(const point2d& point)
{invalid_letter(img_influ(point));}
@@ -166,11 +367,13 @@ namespace mymln
Hseparator_mask(lbl) = false;
alone_letters_mask(lbl) = true;
noise_mask(lbl) = false;
+ all_letters_mask(lbl) = true;
}
void add_letter_coerce(const Label lbl)
{
letters_mask(lbl) = true;
+ all_letters_mask(lbl) = true;
separators_mask(lbl) = false;
containers_mask(lbl) = false;
Vseparator_mask(lbl) = false;
@@ -184,6 +387,7 @@ namespace mymln
if(label_valid_size_Min_(lbl, 2))
{
letters_mask(lbl) = true;
+ all_letters_mask(lbl) = true;
separators_mask(lbl) = false;
containers_mask(lbl) = false;
Vseparator_mask(lbl) = false;
@@ -209,6 +413,7 @@ namespace mymln
separators_mask(lbl) = false;
noise_mask(lbl) = false;
alone_letters_mask(lbl) = false;
+ all_letters_mask(lbl) = false;
}
else
add_noise(lbl);
@@ -223,6 +428,7 @@ namespace mymln
separators_mask(lbl) = true;
alone_letters_mask(lbl) = false;
noise_mask(lbl) = false;
+ all_letters_mask(lbl) = false;
}
void add_Vseparator(const Label lbl)
{
@@ -234,6 +440,7 @@ namespace mymln
separators_mask(lbl) = true;
alone_letters_mask(lbl) = false;
noise_mask(lbl) = false;
+ all_letters_mask(lbl) = false;
}
void inline add_separator(const point2d& point)
{add_letter(img_influ(point)); }
@@ -259,6 +466,8 @@ namespace mymln
bool inline contain_letter(const Label lbl)
{return contain_(lbl, letters_mask);}
+
+
bool inline contain_container(const Label lbl)
{return contain_(lbl, containers_mask);}
@@ -310,6 +519,19 @@ namespace mymln
return allignV < label_size_(0, Left) && (_bboxgp[Left].pcenter()[0]) > (_bboxgp[Right].pcenter()[0]);
}
+ inline bool allign_up_line_line( const point2d& Left, const point2d& Right)
+ {return allign_up_line_line(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_up_line_line( const Label Left, const Label Right)
+ {
+ short int allignV = lines_bbox[lines_union[Left]].pcenter()[0] - lines_bbox[lines_union[Right]].pcenter()[0];
+ if(allignV < 0){allignV = -allignV; }
+ allignV *= 1.4f;
+ return
+ allignV < lines_bbox[lines_union[Left]].len(0) &&
+ (lines_bbox[lines_union[Left]].pcenter()[0]) > (lines_bbox[lines_union[Left]].pcenter()[0]);
+ }
+
inline bool allign_H_Large( const point2d& Left, const point2d& Right)
{return allign_H_Large(img_influ(Left), img_influ(Right));}
@@ -328,9 +550,101 @@ namespace mymln
return allignH < label_size_(1, Left) && allignH < label_size_(1, Right);
}
- inline bool allign_size_height( const point2d& Left, const point2d& Right)
+ inline bool allign_H_min( const point2d& Left, const point2d& Right)
+ {return allign_H_min(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_H_min( const Label Left, const Label Right)
+ {
+ short int allignH = label_allign_min_(1, Left, Right) * 2;
+ return allignH < label_size_(1, Left) && allignH < label_size_(1, Right);
+ }
+
+ inline bool allign_H_max( const point2d& Left, const point2d& Right)
+ {return allign_H_max(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_H_max( const Label Left, const Label Right)
+ {
+ short int allignH = label_allign_max_(1, Left, Right) * 2;
+ return allignH < label_size_(1, Left) && allignH < label_size_(1, Right);
+ }
+
+
+ inline bool allign_size_height( const point2d& Left, const point2d& Right)
{return allign_size_height(img_influ(Left), img_influ(Right));}
+ inline bool allign_proximity( const point2d& Left, const point2d& Right)
+ {return allign_proximity(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_proximity( const Label Left, const Label Right)
+ {
+ short int SizeL0 = label_size_(0, Left);
+ short int SizeL1 = label_size_(1, Left);
+ short int Swap = 0;
+ if(SizeL0 < SizeL1)
+ { SizeL0 = SizeL1; }
+ short int Dis = _bboxgp[Left].pmin()[1] - _bboxgp[Right].pmin()[1];
+ if(Dis < 0)
+ Dis = -Dis;
+ return Dis < SizeL0 * 1.5f;
+ }
+
+ inline bool allign_proximity_line( const point2d& Left, const point2d& Right)
+ {return allign_proximity_line(img_influ(Left), img_influ(Right));}
+
+
+ inline bool allign_size_height_line( const point2d& Left, const point2d& Right)
+ {
+ return allign_size_height_line(img_influ(Left), img_influ(Right));
+ }
+
+ inline bool allign_size_height_line( const Label Left, const Label Right)
+ {
+ short int SizeL = lines_bbox[lines_union[Left]].len(0);
+ short int SizeR = lines_bbox[lines_union[Right]].len(0);
+ return SizeR > (SizeL / 2) && SizeR < (SizeL * 2);
+ }
+
+ inline bool allign_proximity_line( const Label Left, const Label Right)
+ {
+ box2d LB = lines_bbox[lines_union[Left]];
+ box2d RB = lines_bbox[lines_union[Right]];
+
+ int DisA = LB.pmax()[1] - RB.pmin()[1];
+ int DisB = RB.pmax()[1] - LB.pmin()[1];
+ if(DisA < 0){DisA = -DisA;}
+ if(DisB < 0){DisB = -DisB;}
+ if(DisA > DisB)
+ { DisA = DisB; }
+
+ unsigned int HA = LB.len(0);
+ unsigned int HB = RB.len(0);
+
+ if(HA < HB)
+ { HA = HB; }
+ return (DisA * 5) < HA;
+ }
+
+
+
+
+ inline bool allign_proximity_large( const point2d& Left, const point2d& Right)
+ {return allign_proximity_large(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_proximity_large( const Label Left, const Label Right)
+ {
+ short int SizeL0 = label_size_(0, Left);
+ short int SizeL1 = label_size_(1, Left);
+ short int Swap = 0;
+ if(SizeL0 < SizeL1)
+ { SizeL0 = SizeL1; }
+ short int Dis = _bboxgp[Left].pmin()[1] - _bboxgp[Right].pmin()[1];
+ if(Dis < 0)
+ Dis = -Dis;
+ return Dis < SizeL0 * 3;
+ }
+
+
+
inline bool allign_size_height( const Label Left, const Label Right)
{
short int SizeL = label_size_(0, Left);
@@ -374,6 +688,34 @@ namespace mymln
short int allignV = label_allign_(0, Left, Right) * 2;
return allignV < label_size_(0, Left) && allignV < label_size_(0, Right);
}
+
+ inline bool allign_V_line( const point2d& Left, const point2d& Right)
+ {return allign_V_line(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_V_line( Label Left, Label Right)
+ {
+ short int allignV = lines_bbox[lines_union[Left]].pcenter()[0] - lines_bbox[lines_union[Right]].pcenter()[0];
+ if(allignV<0){allignV = -allignV;}
+ return allignV < lines_bbox[lines_union[Left]].len(0) && allignV < lines_bbox[lines_union[Right]].len(0);
+ }
+
+ inline bool allign_center_line( const point2d& Left, const point2d& Right)
+ {return allign_center_line(img_influ(Left), img_influ(Right));}
+ inline bool allign_center_line( Label Left, Label Right)
+ {
+ short int allignC = lines_bbox[lines_union[Left]].pcenter()[0] - lines_bbox[lines_union[Right]].pcenter()[0];
+ if(allignC<0){allignC = -allignC;}
+ return allignC * 5 < lines_bbox[lines_union[Left]].len(0);
+ }
+
+ inline bool allign_smaller_line( const point2d& Left, const point2d& Right)
+ {return allign_smaller_line(img_influ(Left), img_influ(Right));}
+ inline bool allign_smaller_line( Label Left, Label Right)
+ {
+ return lines_bbox[lines_union[Left]].len(0) > (lines_bbox[lines_union[Right]].len(0) * 2);
+ }
+
+
inline bool allign_V_large( const point2d& Left, const point2d& Right)
{return allign_V_large(img_influ(Left), img_influ(Right));}
@@ -393,6 +735,18 @@ namespace mymln
return allignV < label_size_(0, Left) && allignV < label_size_(0, Right);
}
+ inline bool allign_base_line_line(const point2d& Left, const point2d& Right)
+ {return allign_base_line_line(img_influ(Left), img_influ(Right));}
+ inline bool allign_base_line_line(const Label Left, const Label Right)
+ {
+ short int allignV = lines_bbox[lines_union[Left]].pcenter()[0] - lines_bbox[lines_union[Right]].pcenter()[0];
+ if(allignV<0){allignV = -allignV;}
+ allignV *= 1.5f;
+ return
+ allignV < lines_bbox[lines_union[Left]].len(0) &&
+ lines_bbox[lines_union[Left]].pcenter()[0] < lines_bbox[lines_union[Right]].pcenter()[0];
+ }
+
inline bool allign_base_line(const point2d& Left, const point2d& Right)
{return allign_base_line(img_influ(Left), img_influ(Right));}
@@ -421,6 +775,8 @@ namespace mymln
std::cout << " lines(s) : " << CLine << std::endl;
}
+ void debug_save_paragraphs(std::string file)
+ { mymln::debug::save_label_image(img, paragraphs_union , file);}
void debug_save_lines(std::string file)
{ mymln::debug::save_label_image(img, lines_union , file);}
void debug_save_separators(std::string file)
@@ -431,6 +787,12 @@ namespace mymln
{ return fun_mask_(containers_mask); }
vertex_image<point2d,bool> fun_mask_alone_letters()
{ return fun_mask_(alone_letters_mask); }
+ vertex_image<point2d,bool> fun_mask_implicit_separators_left()
+ { return fun_mask_(implicit_separators_left_mask); }
+ vertex_image<point2d,bool> fun_mask_implicit_separators_right()
+ { return fun_mask_(implicit_separators_right_mask); }
+ vertex_image<point2d,bool> fun_mask_all_letters()
+ {return fun_mask_(all_letters_mask);}
vertex_image<point2d,bool> fun_mask_all()
{
typedef vertex_image<point2d,bool> v_ima_g;
@@ -450,6 +812,10 @@ namespace mymln
{ return image_mask_(containers_mask); }
image2d<bool> image_mask_separators()
{ return image_mask_(separators_mask); }
+ image2d<bool> image_mask_implicit_separators_left()
+ { return image_mask_(implicit_separators_left_mask); }
+ image2d<bool> image_mask_implicit_separators_right()
+ { return image_mask_(implicit_separators_right_mask); }
image2d<bool> image_mask_letters()
{ return image_mask_(letters_mask); }
image2d<bool> image_mask_noise()
@@ -461,6 +827,8 @@ namespace mymln
image2d<bool> image_mask_end_lines()
{ return image_mask_(end_lines_mask); }
+ mln::util::array<box2d> bbox_mask_lines()
+ { return lines_bbox; }
mln::util::array<box2d> bbox_mask_containers()
{ return bbox_mask_(containers_mask); }
mln::util::array<box2d> bbox_mask_separators()
@@ -482,30 +850,42 @@ namespace mymln
Label get_label(point2d point)
{ return img_influ(point); }
- unsigned int get_line_length(point2d point)
+ inline unsigned int get_line_length(point2d point)
{ return get_line_length(img_influ(point)); }
- unsigned int get_line_length(Label L)
+ inline unsigned int get_line_length(Label L)
{ return lines_len[lines_union[L]]; }
- unsigned int get_beginning_of_line(point2d point)
+ inline unsigned int get_line_width(point2d point)
+ { return get_line_width(img_influ(point)); }
+
+ inline unsigned int get_line_width(Label L)
+ { return lines_bbox[lines_union[L]].len(1); }
+
+ inline bool line_has(point2d Line, point2d Point)
+ { return line_has(img_influ(Line), Point); }
+
+ inline bool line_has(Label Line, point2d Point)
+ { return lines_bbox[lines_union[Line]].has(Point); }
+
+ inline unsigned int get_beginning_of_line(point2d point)
{ return get_beginning_of_line(img_influ(point)); }
- unsigned int get_beginning_of_line(Label L)
+ inline unsigned int get_beginning_of_line(Label L)
{ return lines_first_label[lines_union[L]]; }
- unsigned int get_end_of_line(point2d point)
+ inline unsigned int get_end_of_line(point2d point)
{ return get_end_of_line(img_influ(point)); }
- unsigned int get_end_of_line(Label L)
+ inline unsigned int get_end_of_line(Label L)
{ return lines_last_label[lines_union[L]]; }
- unsigned int get_parent_line(point2d point)
+ inline unsigned int get_parent_line(point2d point)
{ return lines_union[img_influ(point)]; }
- unsigned int get_parent_line(Label L)
+ inline unsigned int get_parent_line(Label L)
{ return lines_union[L]; }
@@ -514,21 +894,46 @@ namespace mymln
lines_first_label.fill(0);
lines_last_label.fill(0);
lines_len.fill(0);
+ start_lines_mask(0) = false;
+ end_lines_mask(0) = false;
+
cook_lines_();
}
+ inline void reset_implicit_separators()
+ { implicit_separators_union.reset(); }
inline void cook_lines()
{
- lines_len = mln::util::array<unsigned int>(CLine + 1);
- lines_first_label = mln::util::array<unsigned int>(CLine + 1);
- lines_last_label = mln::util::array<unsigned int>(CLine + 1);
+ lines_len = mln::util::array<unsigned int>(NLine + 1);
+ lines_first_label = mln::util::array<unsigned int>(NLine + 1);
+ lines_last_label = mln::util::array<unsigned int>(NLine + 1);
start_lines_mask = fun::i2v::array<bool>(Areas_Number_);
end_lines_mask = fun::i2v::array<bool>(Areas_Number_);
start_end_lines_mask = fun::i2v::array<bool>(Areas_Number_);
+ lines_bbox = mln::util::array<box2d>(NLine + 1);
lines_len.fill(0);
start_lines_mask(0) = false;
end_lines_mask(0) = false;
cook_lines_();
}
+
+
+ inline void cook_separators()
+ {
+ separators_len_left = mln::util::array<unsigned int>(NImpSep + 1);
+ separators_middle = mln::util::array<unsigned int>(NImpSep + 1);
+ separators_len_left.fill(0);
+ separators_middle.fill(0);
+ cook_separators_();
+ }
+
+ inline void cook_separators_right()
+ {
+ separators_len_right = mln::util::array<unsigned int>(NImpSep + 1);
+ separators_middle.resize(NImpSep + 1);
+ separators_len_right.fill(0);
+ separators_middle.fill(0);
+ cook_separators_right_();
+ }
inline void propage_line_link()
{ lines_union.propage_links(); }
/*image_if<image2d<Label> masked_image_letters()
@@ -575,35 +980,251 @@ namespace mymln
inline bool contain_implicit_separator(const Label lbl)
{return implicit_separators_union[lbl] != 0; }
- inline void add_to_separator(const point2d& point)
- { add_to_separator(img_influ(point)); }
- inline void add_to_separator(const Label lbl)
- { implicit_separators_union[lbl] = CImpSep; }
+
+
+ inline void add_to_separator_left(const point2d& point)
+ { add_to_separator_left(img_influ(point)); }
+ inline void add_to_separator_left(const Label lbl)
+ { implicit_separators_union[lbl] = CImpSep; implicit_separators_left_mask(lbl) = true; }
+
+ inline void add_to_separator_right(const point2d& point)
+ { add_to_separator_right(img_influ(point)); }
+ inline void add_to_separator_right(const Label lbl)
+ { implicit_separators_union[lbl] = CImpSep; implicit_separators_right_mask(lbl) = true; }
inline void invalidate_implicit_separator(const point2d& point)
- { invalidate_implicit_separator(img_influ(point)); }
+ { invalidate_implicit_separator(img_influ(point)); }
inline void invalidate_implicit_separator(Label lbl)
- { implicit_separators_union[lbl] = 0; }
+ {
+ implicit_separators_union[lbl] = 0;
+ implicit_separators_left_mask(lbl) = false;
+ implicit_separators_right_mask(lbl) = false;
+ }
inline Label& operator[](point2d i)
- { return img_influ(i); }
+ { return img_influ(i);}
- inline point2d& operator[](Label i)
- { return _bboxgp[i].pcenter(); }
+ inline point2d operator[](Label i)
+ {
+ point2d p = _bboxgp[i].pcenter();
+ return p;
+ }
+ inline void tag_label(const point2d& point, std::string tag)
+ { tag_label(img_influ(point), tag);}
+ inline void tag_label(Label lbl, std::string tag)
+ {tag_lbl[lbl] = tag;}
+ /* ITER ON LINES */
+ inline void cook_lines_iter()
+ {cook_lines_iter_();}
+
+ inline unsigned int lines_iter_value()
+ {return lines_seq[SeqP]; }
+ inline void lines_iter_start()
+ { SeqP = 0; }
+ inline void lines_iter_next_line()
+ { SeqP = lines_seq_pos[get_beginning_of_line(SeqP) + 1]; }
+ inline void lines_iter_next_letter()
+ { SeqP++; while(lines_iter_valid() && !lines_seq[SeqP]){SeqP++;} }
+ inline void lines_iter_valid()
+ { return SeqP < Areas_Number_; }
private:
+ fun::i2v::array<bool> implicit_separators_left_mask;
+ fun::i2v::array<bool> implicit_separators_right_mask;
+ mln::util::array<unsigned int> separators_len_right;
+ mln::util::array<unsigned int> separators_len_left;
+ mln::util::array<unsigned int> separators_middle;
+
+
+
+ inline void cook_separators_()
+ {
+ implicit_separators_left_mask(0) = false;
+ for(unsigned int N = 1; N < implicit_separators_union.size(); N++)
+ {
+ if(implicit_separators_union[N] != 0)
+ {
+ separators_len_left[implicit_separators_union[N]]++;
+ separators_middle[implicit_separators_union[N]] += _bboxgp[N].pmin()[1];
+ }
+ }
+
+ /* WARNING : This method to compute the middle value is correct */
+ /* and faster than merge the computing of the middle value and the */
+ /* computing of the lenght of the line . However this doesn't works */
+ /* if you are trying to use very big image or if you work with a 16 BITS*/
+ /* processor */
+ for(unsigned int N = 1; N < NImpSep + 1; N++)
+ {
+ if(separators_len_left[N] != 0)
+ {
+ if(separators_len_left[N] != 0)
+ separators_middle[N] /= separators_len_left[N];
+ }
+ }
+
+
+ for(unsigned int N = 1; N < Areas_Number_; N++)
+ {
+ if(separators_len_left[implicit_separators_union[N]] < 3)
+ {
+ separators_len_left[implicit_separators_union[N]] = 0;
+ implicit_separators_union[N] = 0;
+ implicit_separators_left_mask(N) = false;
+ }
+ else if (
+ _bboxgp[N].pmin()[1] < separators_middle[implicit_separators_union[N]] - 10 ||
+ _bboxgp[N].pmin()[1] > separators_middle[implicit_separators_union[N]] + 10
+ )
+ {
+
+ separators_len_left[implicit_separators_union[N]]--;
+ implicit_separators_union[N] = 0;
+ implicit_separators_left_mask(N) = false;
+ }
+ }
+ for(unsigned int N = 1; N < Areas_Number_; N++)
+ {
+ if(!start_lines_mask(N) || implicit_separators_union[N] == 0)
+ {
+ if( separators_len_left[implicit_separators_union[N]] > 0)
+ separators_len_left[implicit_separators_union[N]]--;
+ }
+ }
+ for(unsigned int N = 1; N < Areas_Number_; N++)
+ {
+ if(separators_len_left[implicit_separators_union[N]] < 2)
+ {
+ separators_len_left[implicit_separators_union[N]] = 0;
+ implicit_separators_union[N] = 0;
+ implicit_separators_left_mask(N) = false;
+ }
+ }
+ }
+
+ inline void cook_separators_right_()
+ {
+ implicit_separators_right_mask(0) = false;
+ for(unsigned int N = 1; N < implicit_separators_union.size(); N++)
+ {
+ if(implicit_separators_union[N] != 0)
+ {
+ separators_len_right[implicit_separators_union[N]]++;
+ separators_middle[implicit_separators_union[N]] += _bboxgp[N].pmax()[1];
+ }
+ }
+
+ /* WARNING : This method to compute the middle value is correct */
+ /* and faster than merge the computing of the middle value and the */
+ /* computing of the lenght of the line . However this doesn't works */
+ /* if you are trying to use very big image or if you work with a 16 BITS*/
+ /* processor */
+ for(unsigned int N = 1; N < NImpSep + 1; N++)
+ {
+ if(separators_len_right[N] != 0)
+ {
+ if(separators_len_right[N] != 0)
+ separators_middle[N] /= separators_len_right[N];
+ }
+ }
+
+
+ for(unsigned int N = 1; N < Areas_Number_; N++)
+ {
+ if(separators_len_right[implicit_separators_union[N]] < 3)
+ {
+ separators_len_right[implicit_separators_union[N]] = 0;
+ implicit_separators_union[N] = 0;
+ implicit_separators_right_mask(N) = false;
+ }
+ else if (
+ _bboxgp[N].pmax()[1] < separators_middle[implicit_separators_union[N]] - 10 ||
+ _bboxgp[N].pmax()[1] > separators_middle[implicit_separators_union[N]] + 10
+ )
+ {
+
+ separators_len_right[implicit_separators_union[N]]--;
+ implicit_separators_union[N] = 0;
+ implicit_separators_right_mask(N) = false;
+ }
+ }
+ for(unsigned int N = 1; N < Areas_Number_; N++)
+ {
+ if(!end_lines_mask(N) || implicit_separators_union[N] == 0)
+ {
+ if( separators_len_right[implicit_separators_union[N]] > 0)
+ separators_len_right[implicit_separators_union[N]]--;
+ }
+ }
+ for(unsigned int N = 1; N < Areas_Number_; N++)
+ {
+ if(separators_len_right[implicit_separators_union[N]] < 2)
+ {
+ separators_len_right[implicit_separators_union[N]] = 0;
+ implicit_separators_union[N] = 0;
+ implicit_separators_right_mask(N) = false;
+ }
+ }
+ }
+
// PRIVATE DATA ON LINES
mln::util::array<unsigned int> lines_len;
mln::util::array<unsigned int> lines_first_label;
mln::util::array<unsigned int> lines_last_label;
+ mln::util::array<unsigned int> lines_seq;
+ mln::util::array<unsigned int> lines_seq_pos;
+ mln::util::array<box2d> lines_bbox;
+ mln::util::array<Label> lines_split;
fun::i2v::array<bool> start_lines_mask;
fun::i2v::array<bool> end_lines_mask;
fun::i2v::array<bool> start_end_lines_mask;
+ unsigned int SeqP;
-
+ inline void cook_lines_iter_()
+ {
+ lines_seq = mln::util::array<unsigned int>(Areas_Number_);
+ lines_seq_pos = mln::util::array<unsigned int>(NLine + 1);
+
+ lines_seq.fill(0);
+ lines_seq_pos.fill(0);
+ for(unsigned int N = 0; N < NLine + 1; N++)
+ {
+ lines_seq[SeqP] = lines_first_label[N];
+ lines_seq_pos[N] = SeqP;
+ SeqP += lines_len[N];
+ }
+ for(unsigned int N = 1; N < Areas_Number_; N++)
+ {
+ if(contain_line(N) && !start_lines_mask(N))
+ {
+ SeqP = lines_seq_pos[get_beginning_of_line(N)];
+ SeqP++;
+
+ while( lines_seq[SeqP] && _bboxgp[lines_seq[SeqP]].pmin()[1] < _bboxgp[N].pmin()[1] )
+ SeqP++;
+ if(!lines_seq[SeqP])
+ {lines_seq[SeqP] = N;}
+ else
+ {
+ unsigned int Swap1, Swap2;
+ Swap1 = lines_seq[SeqP];
+ lines_seq[SeqP] = N;
+ while(lines_seq[SeqP])
+ {
+ Swap2 = lines_seq[SeqP];
+ lines_seq[SeqP] = Swap1;
+ Swap1 = Swap2;
+ }
+ lines_seq[SeqP] = Swap1;
+ }
+ }
+ }
+ }
+
inline void cook_lines_()
{
+ Cooked_CLine = CLine;
for(unsigned int N = 1; N < lines_union.size(); N++)
{
if(lines_union[N] != 0)
@@ -628,18 +1249,34 @@ namespace mymln
}
}
-
/* SECOND STEP OF THE COOKING */
- for(unsigned int N = 0; N < CLine + 1; N++)
+ for(unsigned int N = 0; N < lines_first_label.size(); N++)
{
if( lines_first_label[N] != 0)
{
+ lines_bbox[N] = box2d();
start_lines_mask(lines_first_label[N]) = true;
end_lines_mask(lines_last_label[N]) = true;
start_end_lines_mask(lines_first_label[N]) = true;
start_end_lines_mask(lines_last_label[N]) = true;
}
+ else
+ {
+ // USEFULL ONLY FOR DEBUG WHEN WE NEED TO DRAW ALL THE BOUNDING BOX
+ // NOTE:REMOVE IT FOR THE FINAL RELEASE
+ lines_bbox[N] = box2d();
+ }
+ }
+
+ /* THE LAST STEP OF COOKING */
+ for(unsigned int N = 1; N < lines_union.size(); N++)
+ {
+ if(lines_union[N] && lines_first_label[lines_union[N]])
+ {
+ lines_bbox[lines_union[N]].merge(_bboxgp[N]);
+ }
}
+
}
@@ -655,6 +1292,16 @@ namespace mymln
{
return ((Float)_bboxgp[label].len(0)) / ((Float)_bboxgp[label].len(1));
}
+ inline short int label_allign_min_(const unsigned int N, const Label l1, const Label l2)
+ {
+ short int AFactor = _bboxgp[l1].pmin()[N] - _bboxgp[l2].pmin()[N];
+ return AFactor < 0 ? -AFactor : AFactor;
+ }
+ inline short int label_allign_max_(const unsigned int N, const Label l1, const Label l2)
+ {
+ short int AFactor = _bboxgp[l1].pmax()[N] - _bboxgp[l2].pmax()[N];
+ return AFactor < 0 ? -AFactor : AFactor;
+ }
inline short int label_allign_(const unsigned int N, const Label l1, const Label l2)
{
short int AFactor = _bboxgp[l1].pcenter()[N] - _bboxgp[l2].pcenter()[N];
@@ -741,10 +1388,13 @@ namespace mymln
fun::i2v::array<bool> separators_mask;
fun::i2v::array<bool> letters_mask;
fun::i2v::array<bool> alone_letters_mask;
+ fun::i2v::array<bool> all_letters_mask;
fun::i2v::array<bool> containers_mask;
fun::i2v::array<bool> noise_mask;
+ mln::util::array<std::string> tag_lbl;
+ unsigned int Cooked_CLine;
unsigned int CLine;
unsigned int NLine;
unsigned int CImpSep;
@@ -756,6 +1406,22 @@ namespace mymln
unsigned int CSepH ;
unsigned int CSepV ;
+ mymln::util::union_find<Label> paragraphs_union;
+ unsigned int CPar ;
+ unsigned int NPar ;
+ mln::util::array<unsigned int> paragraphs_first_label;
+ mln::util::array<unsigned int> paragraphs_last_label;
+ mln::util::array<box2d> paragraphs_bbox;
+
+ inline void cook_paragraphs_()
+ {
+
+ }
+
+
+
+
+
/* RANGE DATA */
Float _VSepRatio_Min; // The ratio is computed with the bounding box
Float _VSepRatio_Max;
@@ -780,6 +1446,7 @@ namespace mymln
/* IMPLICIT SEPARATOR DETECTION */
mymln::util::union_find<Label> implicit_separators_union;
+ mymln::util::union_find<Label> implicit_separators_union_right;
};
}
}
diff --git a/scribo/sandbox/raphael/code/my/document/separator.hh b/scribo/sandbox/raphael/code/my/document/separator.hh
index f5a32db..660bbed 100644
--- a/scribo/sandbox/raphael/code/my/document/separator.hh
+++ b/scribo/sandbox/raphael/code/my/document/separator.hh
@@ -11,10 +11,8 @@ namespace mymln
namespace separators
{
template<typename L, typename F, typename D>
- void separators_find_allign(mymln::document::document<L,F,D>& doc, std::string dgb_out, image2d<bool> s)
+ void separators_find_allign(mymln::document::document<L,F,D>& doc)
{
- image2d<value::rgb8> out;
- mln::initialize(out, s);
typedef vertex_image<point2d,bool> v_ima_g;
typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
v_ima_g mask = doc.fun_mask_letters();
@@ -30,7 +28,7 @@ namespace mymln
doc.jump_to_separator(v);
if((!doc.contain_implicit_separator(v)))
{
- doc.add_to_separator(v);
+ doc.add_to_separator_left(v);
doc.add_to_separator_self_link(v);
}
bool All_Alone = true;
@@ -40,19 +38,17 @@ namespace mymln
if((!doc.contain_implicit_separator(q)))
{
// draw::line(out, q,v, mln::literal::blue);
- if(doc.allign_H_Large(q,v) && doc.allign_size(q, v))
+ if(doc.allign_H_min(q,v) && doc.allign_size(q, v))
{
doc.add_to_separator_link(v, q);
- draw::line(out, q,v, mln::literal::magenta);
All_Alone = false;
}
}
else
{
- if(doc.allign_H_Large(q,v) && doc.allign_size(q, v))
+ if(doc.allign_H_min(q,v) && doc.allign_size(q, v))
{
doc.add_to_separator_link(q, v);
- draw::line(out, q,v, mln::literal::green);
All_Alone = false;
}
}
@@ -63,9 +59,61 @@ namespace mymln
}
doc.propage_separator_link();
- io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out);
}
+
+ template<typename L, typename F, typename D>
+ void separators_find_allign_right(mymln::document::document<L,F,D>& doc)
+ {
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+
+ if(doc.contain_letter(v))
+ {
+ doc.jump_to_separator(v);
+ if((!doc.contain_implicit_separator(v)))
+ {
+ doc.add_to_separator_right(v);
+ doc.add_to_separator_self_link(v);
+ }
+ bool All_Alone = true;
+ for_all(q)
+ {
+
+ if((!doc.contain_implicit_separator(q)))
+ {
+ // draw::line(out, q,v, mln::literal::blue);
+ if(doc.allign_H_max(q,v) && doc.allign_size(q, v))
+ {
+ doc.add_to_separator_link(v, q);
+ All_Alone = false;
+ }
+ }
+ else
+ {
+ if(doc.allign_H_max(q,v) && doc.allign_size(q, v))
+ {
+ doc.add_to_separator_link(q, v);
+ All_Alone = false;
+ }
+ }
+ }
+ if(All_Alone){doc.invalidate_implicit_separator(v);}
+
+ }
+
+ }
+ doc.propage_separator_link();
+ }
+
+
template<typename L, typename F, typename D>
void separators_make_clean(mymln::document::document<L,F,D>& doc)
{
@@ -109,10 +157,60 @@ namespace mymln
}
for(unsigned int N = 0; N < doc.size();N++)
{
- if(count[N] > 1)
+ if(count[N] > 0)
doc.invalidate_implicit_separator(N);
}
}
+
+
+ template<typename L, typename F, typename D>
+ void separators_final_clean(mymln::document::document<L,F,D>& doc)
+ {
+
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ mln::util::array<unsigned> count = mln::util::array<unsigned>(doc.size());
+ count.fill(0);
+ for_all(v)
+ {
+
+ if(doc.contain_implicit_separator(v))
+ {
+ bool All_Alone = true;
+ doc.jump_to_line(v);
+ if((!doc.contain_line(v)))
+ {
+ doc.add_to_line(v);
+ doc.add_to_line_self_link(v);
+ }
+
+ for_all(q)
+ {
+
+ if(doc.contain_implicit_separator(q) && doc.same_implicit_separator(q,v))
+ {
+ // draw::line(out, q,v, mln::literal::blue);
+ if(doc.allign_V(q,v) && doc.allign_size(q, v))
+ {
+ count[doc[q]]++;
+ }
+ }
+
+ }
+ }
+ }
+ for(unsigned int N = 0; N < doc.size();N++)
+ {
+ if(count[N] > 0)
+ doc.invalidate_implicit_separator(N);
+ }
+ }
+
}
}
}
diff --git a/scribo/sandbox/raphael/code/my/util/union.hh b/scribo/sandbox/raphael/code/my/util/union.hh
index 7f21e87..53fcbb3 100644
--- a/scribo/sandbox/raphael/code/my/util/union.hh
+++ b/scribo/sandbox/raphael/code/my/util/union.hh
@@ -18,9 +18,19 @@ namespace mymln
mark_link.fill(0);
size_ = max_size;
}
-
+ inline void reset()
+ {
+ mark.fill(0);
+ mark_link.fill(0);
+ }
+ inline bool is_self_link(const Label A)
+ {return mark_link[A] == A;}
+ inline void invalidate_link(const Label A)
+ { mark_link[A] = 0; }
inline void add_self_link(const Label A)
{ mark_link[A] = A; }
+ inline unsigned int link(const unsigned int index)
+ {return mark_link[index]; }
inline void add_link(const Label A, const Label B)
{
diff --git a/scribo/sandbox/raphael/code/test.cc b/scribo/sandbox/raphael/code/test.cc
index b33a4eb..b009c2e 100644
--- a/scribo/sandbox/raphael/code/test.cc
+++ b/scribo/sandbox/raphael/code/test.cc
@@ -12,7 +12,6 @@
#include <mln/core/var.hh>
#include <mln/accu/shape/bbox.hh>
#include <mln/fun/i2v/array.hh>
-#include <mln/fun/p2b/all.hh>
#include <mln/util/graph.hh>
#include <mln/util/timer.hh>
#include <mln/debug/draw_graph.hh>
@@ -40,6 +39,7 @@
#include <my/util/vector_bbox.hh>
#include <my/util/vector_bbox_group.hh>
#include <my/document/document.hh>
+#include <my/document/separator.hh>
#include <my/document/clean.hh>
using namespace mln;
@@ -114,24 +114,53 @@ void Process(std::string File, std::string Dir)
}
//mymln::debug::save_label_image(ima_influ, "influ_" + File);
+
mymln::document::clean_containers_items(doc);
mymln::document::clean_letters_items(doc);
- mymln::document::clean_get_lines(doc, Dir + "/" + "line_graph_" + File, doc.image_mask_letters());
- mymln::document::clean_dot_items(doc, Dir + "/" + "dot_graph_" + File, doc.image_mask_letters());
+ mymln::document::clean_get_lines(doc);
+ mymln::document::clean_letters_alone(doc);
+ mymln::document::clean_dot_items(doc);
doc.cook_lines();
mymln::document::clean_quote_items(doc, Dir + "/" + "quote_graph_" + File, doc.image_mask_letters());
-
- doc.stat();
+
+
+ mymln::document::separators::separators_find_allign(doc);
+ mymln::document::separators::separators_make_clean(doc);
+ doc.cook_separators();
+ doc.cook_line_splitting();
+ mymln::document::clean_line_link_item(doc);
+ mymln::document::clean_proximity_lines(doc);
+ mymln::document::clean_quote_lines(doc);
+
+ doc.reset_implicit_separators();
+ mymln::document::separators::separators_find_allign_right(doc);
+ mymln::document::separators::separators_make_clean(doc);
+ doc.cook_separators_right();
+ doc.cook_line_splitting_exclusive();
+ mymln::document::clean_line_link_item(doc);
+ mymln::document::clean_proximity_lines(doc);
+ mymln::document::clean_quote_lines(doc);
+
+
+ doc.recook_lines();
+
+ mymln::document::clean_paragraph_items(doc, Dir + "/" + "para_graph_" + File, doc.image_mask_letters());
+
std::cout << "WORK ON GRAPH : " << timer.stop() << endl;
//io::ppm::save(ima_influ, "separator.ppm");
//io::pbm::save(doc.image_mask_separators(),"separators");
- io::pbm::save(doc.image_mask_letters(),Dir + "/" + "letters_" + File);
- io::pbm::save(doc.image_mask_alone_letters(),Dir + "/" + "letters_alone_" + File);
- io::pbm::save(doc.image_mask_separators(),Dir + "/" + "separators_" + File);
- io::pbm::save(doc.image_mask_containers(),Dir + "/" + "containers_" + File);
- io::pbm::save(doc.image_mask_noise(),Dir + "/" + "noise_" + File);
- io::pbm::save(doc.image_mask_start_lines(), Dir + "/" + "start_line_" + File);
- doc.debug_save_lines(Dir + "/" + "lines_" + File);
+ // io::pbm::save(doc.image_mask_letters(),Dir + "/" + "letters_" + File);
+ //io::pbm::save(doc.image_mask_alone_letters(),Dir + "/" + "letters_alone_" + File);
+ //io::pbm::save(doc.image_mask_separators(),Dir + "/" + "separators_" + File);
+ //io::pbm::save(doc.image_mask_containers(),Dir + "/" + "containers_" + File);
+ //io::pbm::save(doc.image_mask_noise(),Dir + "/" + "noise_" + File);
+
+
+
+ doc.debug_save_paragraphs(Dir + "/" + "lines_" + File);
+ //mymln::debug::save_graph_image(doc.fun_mask_implicit_separators_left(), doc.image_mask_letters(), Dir + "/" + "graph_imp_sep_line_" + File);
+ //doc.debug_save_separators(Dir + "/" + "imp_sep_graph_" + File);
+
/* typedef vertex_image<point2d,bool> v_ima_g;
v_ima_g mask = doc.fun_mask_letters();
*/
@@ -170,8 +199,8 @@ void Process(std::string File, std::string Dir)
// mymln::debug::save_graph_image(doc.fun_mask_separators(), ima, "separator_graph_" + File);
//mymln::debug::save_graph_image(area_grph, doc.image_mask_letters(), Dir + "/" + "graph_" + File);
//mymln::debug::save_graph_image(doc.fun_mask_letters(), doc.image_mask_letters(), Dir + "/" + "container_graph_" + File);
- //mymln::debug::save_graph_image(doc.fun_mask_end_lines(), doc.image_mask_letters(), Dir + "/" + "graph_start_line_" + File);
- //mymln::debug::save_boxes_image(doc.bbox_mask_letters(), ima, "lbox_" + File);
+mln::util::array<box2d> linebx = doc.bbox_mask_lines();
+ mymln::debug::save_boxes_image(linebx, doc.image_mask_letters(), Dir + "/" + "lbox_" + File);
//mymln::debug::save_boxes_image(doc.bbox_enlarge_mask_letters(10, 0), ima, "linebox_" + File);
}
--
1.7.2.5
1
0

last-svn-commit-883-gb303289 Add union find class. Increase the quality of the letter detection.
by Raphael Boissel 08 Sep '11
by Raphael Boissel 08 Sep '11
08 Sep '11
---
scribo/sandbox/raphael/code/my/debug/pict.hh | 15 ++
scribo/sandbox/raphael/code/my/document/clean.hh | 35 +++-
.../sandbox/raphael/code/my/document/document.hh | 188 ++++++++++----------
.../raphael/code/my/document/filter/filter.hh | 182 +++++++++++++++++++
.../sandbox/raphael/code/my/document/separator.hh | 79 +++++++--
scribo/sandbox/raphael/code/my/util/union.hh | 86 +++++++++
6 files changed, 474 insertions(+), 111 deletions(-)
create mode 100644 scribo/sandbox/raphael/code/my/document/filter/filter.hh
create mode 100644 scribo/sandbox/raphael/code/my/util/union.hh
diff --git a/scribo/sandbox/raphael/code/my/debug/pict.hh b/scribo/sandbox/raphael/code/my/debug/pict.hh
index 1597d53..56fdca3 100644
--- a/scribo/sandbox/raphael/code/my/debug/pict.hh
+++ b/scribo/sandbox/raphael/code/my/debug/pict.hh
@@ -3,6 +3,7 @@
#include <mln/util/graph.hh>
#include <mln/debug/superpose.hh>
+#include <my/util/union.hh>
using namespace mln;
using namespace std;
namespace mymln
@@ -26,6 +27,20 @@ namespace mymln
image2d<value::rgb8> ima_color = labeling::colorize(value::rgb8(), ima);
io::ppm::save(ima_color, file);
}
+
+ template<typename I1, typename I2> inline void save_label_image(image2d<I1> ima, mymln::util::union_find<I2> trans, std::string file)
+ {
+ mln_piter(image2d<I1>) p(ima.domain());
+ p.start();
+ while(p.is_valid())
+ {
+ ima(p) = trans[ima(p)];
+ p.next();
+ }
+ image2d<value::rgb8> ima_color = labeling::colorize(value::rgb8(), ima);
+ io::ppm::save(ima_color, file);
+ }
+
template<typename p_v> inline void save_graph_image(p_v& pv, unsigned int SizeX, unsigned int SizeY, std::string file)
{
image2d<value::rgb8> ima_graph(SizeY, SizeX);
diff --git a/scribo/sandbox/raphael/code/my/document/clean.hh b/scribo/sandbox/raphael/code/my/document/clean.hh
index 9028e63..2ce8614 100644
--- a/scribo/sandbox/raphael/code/my/document/clean.hh
+++ b/scribo/sandbox/raphael/code/my/document/clean.hh
@@ -12,31 +12,52 @@ namespace mymln
template<typename L, typename F, typename D>
void clean_containers_items(mymln::document::document<L,F,D>& doc)
{
+
typedef vertex_image<point2d,bool> v_ima_g;
typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
- v_ima_g mask = doc.fun_mask_containers();
+ v_ima_g mask = doc.fun_mask_letters();
mln_piter_(v_ima_g) v(mask.domain());
typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
nbh_t nbh(mask);
mln_niter_(nbh_t) q(nbh, v);
+ mln::util::array<unsigned> count = mln::util::array<unsigned>(doc.size());
+ mln::util::array<bool> inside = mln::util::array<bool>(doc.size());
+ count.fill(0);
+ inside.fill(false);
for_all(v)
{
+ unsigned link = 0;
for_all(q)
- {
- if(!doc.contain_container(v) && doc.get_bbox(q).has(v))
+ {
+ if(doc.contain_container(v) && doc.get_bbox(v).has(q))
+ {
+
+ inside[doc[q]] = true;
+ link++;
+ }
+ else if(doc.contain_letter(v))
{
- doc.add_noise(v);
+ count[doc[q]]++;
}
+
- }
+ }
+ }
+ for(unsigned int N = 0; N < doc.size();N++)
+ {
+ if(inside[N])
+ if(count[N] < 3)
+ doc.add_noise(N);
}
+
}
template<typename L, typename F, typename D>
void clean_letters_items(mymln::document::document<L,F,D>& doc)
{
+
typedef vertex_image<point2d,bool> v_ima_g;
typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
v_ima_g mask = doc.fun_mask_letters();
@@ -63,7 +84,7 @@ namespace mymln
template<typename L, typename F, typename D>
void clean_get_lines(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s)
- {
+ {
image2d<value::rgb8> out;
mln::initialize(out, s);
typedef vertex_image<point2d,bool> v_ima_g;
@@ -212,7 +233,7 @@ namespace mymln
draw::line(out, q,v, mln::literal::magenta);
}
}
- else if (doc.allign_H_Large(q, v) && doc.allign_up_line(v, q))
+ else if (doc.allign_H_Large(q, v) && doc.allign_top(v, q))
{
doc.add_to_line_link(v, q);
draw::line(out, q,v, mln::literal::blue);
diff --git a/scribo/sandbox/raphael/code/my/document/document.hh b/scribo/sandbox/raphael/code/my/document/document.hh
index 4e13103..67bda18 100644
--- a/scribo/sandbox/raphael/code/my/document/document.hh
+++ b/scribo/sandbox/raphael/code/my/document/document.hh
@@ -1,7 +1,10 @@
#ifndef INC_DOCUMENT_DOC
#define INC_DOCUMENT_DOC
#include<my/util/vector_bbox_group.hh>
+#include<my/util/union.hh>
#include <mln/util/graph.hh>
+
+
using namespace mln;
namespace mymln
{
@@ -48,11 +51,10 @@ namespace mymln
Vseparator_mask = fun::i2v::array<bool>(Areas + 1);
noise_mask = fun::i2v::array<bool>(Areas + 1);
alone_letters_mask = fun::i2v::array<bool>(Areas + 1);
-
- lines_mark = mln::util::array<unsigned int>(Areas + 1);
- lines_mark_link = mln::util::array<unsigned int>(Areas + 1);
- lines_mark.fill(0);
- lines_mark_link.fill(0);
+ CImpSep = 1;
+ NImpSep = 2;
+ lines_union = mymln::util::union_find<Label>(Areas + 1);
+ implicit_separators_union = mymln::util::union_find<Label>(Areas + 1);
img_influ = ima_influ;
CSep = 0;
CSepH = 0;
@@ -65,9 +67,7 @@ namespace mymln
}
/* OPERATION ON LINES */
inline void add_to_line_self_link(const point2d& point)
- {
- add_to_line_self_link(img_influ(point));
- }
+ { add_to_line_self_link(img_influ(point));}
inline void add_to_line(const point2d& point)
{ add_to_line(img_influ(point)); }
@@ -77,7 +77,7 @@ namespace mymln
inline bool same_line(const point2d& A, const point2d& B)
{ return same_line(img_influ(A), img_influ(B)); }
inline bool same_line(const Label A, const Label B)
- { return lines_mark[A] == lines_mark[B]; }
+ { return lines_union[A] == lines_union[B]; }
inline void add_new_line(const point2d& point)
{ add_new_line(img_influ(point)); }
@@ -88,74 +88,33 @@ namespace mymln
{ return contain_line(img_influ(point)); }
inline void add_to_line(const Label lbl)
- { lines_mark[lbl] = CLine; }
+ { lines_union[lbl] = CLine; }
inline void add_new_line(const Label lbl)
{ CLine = NLine; NLine++; }
+
inline void add_to_line_self_link(const Label A)
- {
- lines_mark_link[A] = A;
- }
+ {lines_union.add_self_link(A);}
+
inline void add_to_line_link(const Label A, const Label B)
- {
-
- unsigned int Pos = find_line_parent(A);
- if(lines_mark_link[B] == 0)
- {
- if(Pos != B)
- {
- if(Pos != 0)
- {
- lines_mark_link[B] = Pos;
- lines_mark_link[A] = Pos;
- }
- else
- {
- lines_mark_link[A] = B;
- }
- }
- }
- else
- {
- unsigned int PosB = find_line_parent(B);
- if(PosB == Pos)
- {
- lines_mark_link[B] = Pos;
- lines_mark_link[A] = Pos;
- }
- else
- {
- lines_mark_link[B] = Pos;
- lines_mark_link[PosB] = Pos;
- }
- }
-
-
-
- }
- inline unsigned int find_line_parent(const Label A)
- {
- unsigned int Pos = A;
- while(Pos != lines_mark_link[Pos] && Pos != 0){Pos = lines_mark_link[Pos];}
- return Pos;
- }
+ {lines_union.add_link(A, B);}
inline void jump_to_line(const Label lbl)
{
- if(lines_mark[lbl] != 0)
- CLine = lines_mark[lbl];
+ if(lines_union[lbl] != 0)
+ CLine = lines_union[lbl];
else
add_new_line(lbl);
}
inline bool contain_line(const Label lbl)
- { return lines_mark[lbl] != 0;}
+ { return lines_union[lbl] != 0;}
- /* LABELS MUST ALLWAYS BE SORTED */
inline void add_noise(const point2d& point)
{add_noise(img_influ(point));}
+ inline unsigned int size(){return Areas_Number_;}
void add_noise(Label lbl)
@@ -463,7 +422,9 @@ namespace mymln
}
void debug_save_lines(std::string file)
- { mymln::debug::save_label_image(img, lines_mark , file);}
+ { mymln::debug::save_label_image(img, lines_union , file);}
+ void debug_save_separators(std::string file)
+ { mymln::debug::save_label_image(img, implicit_separators_union , file);}
vertex_image<point2d,bool> fun_mask_separators()
{ return fun_mask_(separators_mask); }
vertex_image<point2d,bool> fun_mask_containers()
@@ -525,27 +486,27 @@ namespace mymln
{ return get_line_length(img_influ(point)); }
unsigned int get_line_length(Label L)
- { return lines_len[lines_mark[L]]; }
+ { return lines_len[lines_union[L]]; }
unsigned int get_beginning_of_line(point2d point)
{ return get_beginning_of_line(img_influ(point)); }
unsigned int get_beginning_of_line(Label L)
- { return lines_first_label[lines_mark[L]]; }
+ { return lines_first_label[lines_union[L]]; }
unsigned int get_end_of_line(point2d point)
{ return get_end_of_line(img_influ(point)); }
unsigned int get_end_of_line(Label L)
- { return lines_last_label[lines_mark[L]]; }
+ { return lines_last_label[lines_union[L]]; }
unsigned int get_parent_line(point2d point)
- { return lines_mark[img_influ(point)]; }
+ { return lines_union[img_influ(point)]; }
unsigned int get_parent_line(Label L)
- { return lines_mark[L]; }
+ { return lines_union[L]; }
inline void recook_lines()
@@ -569,20 +530,68 @@ namespace mymln
cook_lines_();
}
inline void propage_line_link()
- {
- for(unsigned int N = 1; N < lines_mark_link.size(); N++)
- {
- unsigned int Pos = N;
- while(Pos != lines_mark_link[Pos] && Pos != 0){Pos = lines_mark_link[Pos]; }
- lines_mark[N] = lines_mark[Pos];
- }
- }
+ { lines_union.propage_links(); }
/*image_if<image2d<Label> masked_image_letters()
{return masked_image_(letters_mask); }
image_if<image2d<Label> masked_image_separator()
- {return masked_image_(letters_mask); }*/
+ {return masked_image_(letters_mask); }*/
+
+ /* IMPLICIT SEPARATORS */
+ inline void add_new_separator(const point2d& point)
+ { add_new_separator(img_influ(point));}
+ inline void add_new_separator(const Label lbl)
+ { CImpSep = NImpSep; NImpSep++; }
+
+ inline void add_to_separator_self_link(const point2d& point)
+ { add_to_separator_self_link(img_influ(point));}
+ inline void add_to_separator_self_link(const Label A)
+ {implicit_separators_union.add_self_link(A);}
+
+ inline void add_to_separator_link(const point2d& A, const point2d& B)
+ { add_to_separator_link(img_influ(A), img_influ(B));}
+ inline void add_to_separator_link(const Label A, const Label B)
+ {implicit_separators_union.add_link(A, B);}
+
+ inline bool same_implicit_separator(const point2d& A, const point2d& B)
+ {return same_implicit_separator(img_influ(A), img_influ(B));}
+ inline bool same_implicit_separator(const Label A, const Label B)
+ {return implicit_separators_union[A] == implicit_separators_union[B];}
+
+ inline void propage_separator_link()
+ { implicit_separators_union.propage_links(); }
+
+ inline void jump_to_separator(const point2d& point)
+ { jump_to_separator(img_influ(point)); }
+ inline void jump_to_separator(const Label lbl)
+ {
+ if(implicit_separators_union[lbl] != 0)
+ CImpSep = implicit_separators_union[lbl];
+ else
+ add_new_separator(lbl);
+ }
+ inline bool contain_implicit_separator(const point2d& point)
+ { return contain_implicit_separator(img_influ(point)); }
+ inline bool contain_implicit_separator(const Label lbl)
+ {return implicit_separators_union[lbl] != 0; }
+
+ inline void add_to_separator(const point2d& point)
+ { add_to_separator(img_influ(point)); }
+ inline void add_to_separator(const Label lbl)
+ { implicit_separators_union[lbl] = CImpSep; }
+
+ inline void invalidate_implicit_separator(const point2d& point)
+ { invalidate_implicit_separator(img_influ(point)); }
+ inline void invalidate_implicit_separator(Label lbl)
+ { implicit_separators_union[lbl] = 0; }
+
+ inline Label& operator[](point2d i)
+ { return img_influ(i); }
+
+ inline point2d& operator[](Label i)
+ { return _bboxgp[i].pcenter(); }
private:
+
// PRIVATE DATA ON LINES
mln::util::array<unsigned int> lines_len;
mln::util::array<unsigned int> lines_first_label;
@@ -595,22 +604,22 @@ namespace mymln
inline void cook_lines_()
{
- for(unsigned int N = 1; N < lines_mark.size(); N++)
+ for(unsigned int N = 1; N < lines_union.size(); N++)
{
- if(lines_mark[N] != 0)
+ if(lines_union[N] != 0)
{
/* APPROXIMATE THE NUMBER OF CHAR IN THE LINE */
- lines_len[lines_mark[N]]++;
+ lines_len[lines_union[N]]++;
/* COOK THE FIRST AND THE LAST LABEL OF THE LINE */
- if(lines_first_label[lines_mark[N]] == 0)
- lines_first_label[lines_mark[N]] = N;
- else if(_bboxgp[N].pcenter()[1] < _bboxgp[lines_first_label[lines_mark[N]]].pcenter()[1])
- lines_first_label[lines_mark[N]] = N;
+ if(lines_first_label[lines_union[N]] == 0)
+ lines_first_label[lines_union[N]] = N;
+ else if(_bboxgp[N].pcenter()[1] < _bboxgp[lines_first_label[lines_union[N]]].pcenter()[1])
+ lines_first_label[lines_union[N]] = N;
- if(lines_last_label[lines_mark[N]] == 0)
- lines_last_label[lines_mark[N]] = N;
- else if(_bboxgp[N].pcenter()[1] > _bboxgp[lines_last_label[lines_mark[N]]].pcenter()[1])
- lines_last_label[lines_mark[N]] = N;
+ if(lines_last_label[lines_union[N]] == 0)
+ lines_last_label[lines_union[N]] = N;
+ else if(_bboxgp[N].pcenter()[1] > _bboxgp[lines_last_label[lines_union[N]]].pcenter()[1])
+ lines_last_label[lines_union[N]] = N;
/* FILL THE MASK WITH FALSE:MAYBE USELESS IF THE MASK IS INITIALIZED */
start_lines_mask(N) = false;
@@ -738,10 +747,10 @@ namespace mymln
unsigned int CLine;
unsigned int NLine;
+ unsigned int CImpSep;
+ unsigned int NImpSep;
-
- mln::util::array<unsigned int> lines_mark;
- mln::util::array<unsigned int> lines_mark_link;
+ mymln::util::union_find<Label> lines_union;
unsigned int CLet ;
unsigned int CSep ;
unsigned int CSepH ;
@@ -770,8 +779,7 @@ namespace mymln
Label Areas_Number_;
/* IMPLICIT SEPARATOR DETECTION */
- mln::util::array<unsigned int> implicit_separator_mark;
- mln::util::array<unsigned int> implicit_separator_mark_link;
+ mymln::util::union_find<Label> implicit_separators_union;
};
}
}
diff --git a/scribo/sandbox/raphael/code/my/document/filter/filter.hh b/scribo/sandbox/raphael/code/my/document/filter/filter.hh
new file mode 100644
index 0000000..c3a294c
--- /dev/null
+++ b/scribo/sandbox/raphael/code/my/document/filter/filter.hh
@@ -0,0 +1,182 @@
+#ifndef INC_DOCUMENT_FILTER_GENERIC
+#define INC_DOCUMENT_FILTER_GENERIC
+namespace mymln
+{
+ namespace document
+ {
+ namespace filter
+ {
+ template<typename L, typename F, typename D, typename Left, typename Right>
+ class filter
+ {
+ public:
+ filter(){}
+ filter(document<L,F,D>& doc){ doc_ = doc; }
+ filter(document<L,F,D>& doc, vertex_image<point2d,bool> mask){ doc_ = doc; mask_ = mask; }
+ inline bool link_test(point2d& A, point2d& B){ return true; }
+ inline bool vertex_test(point2d& A){ return true; }
+ inline bool gen_link_test(point2d& A, point2d& B)
+ {
+ return link_test(A, B);
+ }
+ inline bool gen_vertex_test(point2d& A)
+ {
+ return vertex_test(A);
+ }
+ inline void iter_dgb(std::string dgb_out, image2d<bool> s)
+ {
+ image2d<value::rgb8> out;
+ mln::initialize(out, s);
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ mln_piter_(v_ima_g) v(mask_.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask_);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ if(gen_vertex_test(v))
+ {
+ for_all(q)
+ {
+ if(gen_link_test(v, q))
+ {
+ draw::line(out, q,v, mln::literal::green);
+ }
+ else
+ {
+ draw::line(out, q,v, mln::literal::magenta);
+ }
+ }
+ }
+ else
+ {
+ draw::line(out, q,v, mln::literal::magenta);
+ }
+ }
+ }
+ inline void iter()
+ {
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ mln_piter_(v_ima_g) v(mask_.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask_);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ if(gen_vertex_test(v))
+ {
+ for_all(q)
+ {
+ if(gen_link_test(v, q))
+ {
+
+ }
+ }
+ }
+ }
+ }
+
+ inline filter& operator|(filter& B)
+ {
+ filter<L,F,D> PFilter = filter_or(doc_, mask_);
+ PFilter.sub_filter_A_ = this;
+ PFilter.sub_filter_B_ = B;
+ B.doc_ = doc_;
+ B.mask_ = mask_;
+ return PFilter;
+ }
+
+ inline filter& operator&(filter& B)
+ {
+ filter<L,F,D> PFilter = filter_and(doc_, mask_);
+ PFilter.sub_filter_A_ = this;
+ PFilter.sub_filter_B_ = B;
+ B.doc_ = doc_;
+ B.mask_ = mask_;
+ return PFilter;
+ }
+
+ protected:
+ Left sub_filter_A_;
+ Right sub_filter_B_;
+
+ document<L,F,D> doc_;
+ vertex_image<point2d,bool> mask_;
+
+
+
+ };
+
+
+
+
+
+
+
+
+
+
+ template<typename L, typename F, typename D>
+ class filter_or : filter<L,F,D>
+ {
+ public:
+ inline bool gen_link_test(point2d& A, point2d& B)
+ {
+ return sub_filter_A_.gen_link_test(A, B) || sub_filter_B_.gen_link_test(A, B);
+ }
+ inline bool gen_vertex_test(point2d& A)
+ {
+ return sub_filter_A_.gen_vertex_test(A) || sub_filter_B_.gen_vertex_test(A);
+ }
+
+ protected:
+ filter<L,F,D> sub_filter_A_;
+ filter<L,F,D> sub_filter_B_;
+
+ document<L,F,D> doc_;
+ vertex_image<point2d,bool> mask_;
+ };
+
+ template<typename L, typename F, typename D>
+ class filter_and : filter<L,F,D>
+ {
+ public:
+ inline bool gen_link_test(point2d& A, point2d& B)
+ {
+ return sub_filter_A_.gen_link_test(A, B) || sub_filter_B_.gen_link_test(A, B);
+ }
+ inline bool gen_vertex_test(point2d& A)
+ {
+ return sub_filter_A_.gen_vertex_test(A) || sub_filter_B_.gen_vertex_test(A);
+ }
+
+ protected:
+ filter<L,F,D> sub_filter_A_;
+ filter<L,F,D> sub_filter_B_;
+
+ document<L,F,D> doc_;
+ vertex_image<point2d,bool> mask_;
+ };
+
+ template<typename L, typename F, typename D>
+ class filter_letter : filter<L,F,D>
+ {
+ public:
+ inline bool vertex_test(point2d& A){ return doc_.contain_letter(A); }
+
+ protected:
+ filter<L,F,D> sub_filter_A_;
+ filter<L,F,D> sub_filter_B_;
+
+ document<L,F,D> doc_;
+ vertex_image<point2d,bool> mask_;
+ };
+
+
+
+ }
+ }
+}
+#endif
\ No newline at end of file
diff --git a/scribo/sandbox/raphael/code/my/document/separator.hh b/scribo/sandbox/raphael/code/my/document/separator.hh
index 756f04b..f5a32db 100644
--- a/scribo/sandbox/raphael/code/my/document/separator.hh
+++ b/scribo/sandbox/raphael/code/my/document/separator.hh
@@ -2,7 +2,7 @@
#define INC_DOCUMENT_SEPARATOR
#include <my/util/vector_bbox_group.hh>
#include <mln/util/graph.hh>
-#include <mln/document/document.hh>
+#include <my/document/document.hh>
using namespace mln;
namespace mymln
{
@@ -11,7 +11,7 @@ namespace mymln
namespace separators
{
template<typename L, typename F, typename D>
- void clean_containers_items(mymln::document::document<L,F,D>& doc, std::string dgb_out, image2d<bool> s)
+ void separators_find_allign(mymln::document::document<L,F,D>& doc, std::string dgb_out, image2d<bool> s)
{
image2d<value::rgb8> out;
mln::initialize(out, s);
@@ -27,42 +27,93 @@ namespace mymln
if(doc.contain_letter(v))
{
+ doc.jump_to_separator(v);
if((!doc.contain_implicit_separator(v)))
{
- doc.add_to_implicit_separator(v);
- doc.add_to_implicit_separator_self_link(v);
+ doc.add_to_separator(v);
+ doc.add_to_separator_self_link(v);
}
-
+ bool All_Alone = true;
for_all(q)
{
- if((!doc.contain_line(q)))
+ if((!doc.contain_implicit_separator(q)))
{
// draw::line(out, q,v, mln::literal::blue);
- if(doc.allign_H(q,v) && doc.allign_size(q, v))
+ if(doc.allign_H_Large(q,v) && doc.allign_size(q, v))
{
- doc.add_to_implicit_separator_link(v, q);
+ doc.add_to_separator_link(v, q);
draw::line(out, q,v, mln::literal::magenta);
- All_Alone = false;
+ All_Alone = false;
}
}
else
{
- if(doc.allign_V(q,v) && doc.allign_size(q, v))
+ if(doc.allign_H_Large(q,v) && doc.allign_size(q, v))
{
- doc.add_to_implicit_separator_link(q, v);
+ doc.add_to_separator_link(q, v);
draw::line(out, q,v, mln::literal::green);
- All_Alone = false;
+ All_Alone = false;
}
}
}
+ if(All_Alone){doc.invalidate_implicit_separator(v);}
}
}
- doc.propage_implicit_separator_link();
+ doc.propage_separator_link();
io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out);
}
+
+ template<typename L, typename F, typename D>
+ void separators_make_clean(mymln::document::document<L,F,D>& doc)
+ {
+
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ mln::util::array<unsigned> count = mln::util::array<unsigned>(doc.size());
+ count.fill(0);
+ for_all(v)
+ {
+
+ if(doc.contain_implicit_separator(v))
+ {
+ bool All_Alone = true;
+ doc.jump_to_line(v);
+ if((!doc.contain_line(v)))
+ {
+ doc.add_to_line(v);
+ doc.add_to_line_self_link(v);
+ }
+
+ for_all(q)
+ {
+
+ if(doc.contain_implicit_separator(q) && doc.same_implicit_separator(q,v))
+ {
+ // draw::line(out, q,v, mln::literal::blue);
+ if(doc.allign_V(q,v) && doc.allign_size(q, v))
+ {
+ count[doc[q]]++;
+ }
+ }
+
+ }
+ }
+ }
+ for(unsigned int N = 0; N < doc.size();N++)
+ {
+ if(count[N] > 1)
+ doc.invalidate_implicit_separator(N);
+ }
+ }
}
}
-}
\ No newline at end of file
+}
+#endif
\ No newline at end of file
diff --git a/scribo/sandbox/raphael/code/my/util/union.hh b/scribo/sandbox/raphael/code/my/util/union.hh
new file mode 100644
index 0000000..7f21e87
--- /dev/null
+++ b/scribo/sandbox/raphael/code/my/util/union.hh
@@ -0,0 +1,86 @@
+#ifndef INC_DOCUMENT_UNION
+#define INC_DOCUMENT_UNION
+namespace mymln
+{
+ namespace util
+ {
+ template<typename Label>
+ class union_find
+ {
+ public :
+ union_find()
+ {size_ = 0;}
+ union_find(const unsigned int max_size)
+ {
+ mark = mln::util::array<unsigned int>(max_size);
+ mark_link = mln::util::array<unsigned int>(max_size);
+ mark.fill(0);
+ mark_link.fill(0);
+ size_ = max_size;
+ }
+
+ inline void add_self_link(const Label A)
+ { mark_link[A] = A; }
+ inline void add_link(const Label A, const Label B)
+ {
+
+ unsigned int Pos = find_parent_(A);
+ if(mark_link[B] == 0)
+ {
+ if(Pos != B)
+ {
+ if(Pos != 0)
+ {
+ mark_link[B] = Pos;
+ mark_link[A] = Pos;
+ }
+ else
+ {
+ mark_link[A] = B;
+ }
+ }
+ }
+ else
+ {
+ unsigned int PosB = find_parent_(B);
+ if(PosB == Pos)
+ {
+ mark_link[B] = Pos;
+ mark_link[A] = Pos;
+ }
+ else
+ {
+ mark_link[B] = Pos;
+ mark_link[PosB] = Pos;
+ }
+ }
+ }
+ inline void propage_links()
+ {
+ for(unsigned int N = 1; N < size_; N++)
+ {
+ unsigned int Pos = N;
+ while(Pos != mark_link[Pos] && Pos != 0){Pos = mark_link[Pos]; }
+ mark[N] = mark[Pos];
+ }
+ }
+ inline unsigned int size()
+ {return size_; }
+ inline unsigned int& operator[](unsigned int i)
+ {
+ return mark[i];
+ }
+ private :
+ inline unsigned int find_parent_(const Label A)
+ {
+ unsigned int Pos = A;
+ while(Pos != mark_link[Pos] && Pos != 0){Pos = mark_link[Pos];}
+ return Pos;
+ }
+ mln::util::array<unsigned int> mark;
+ mln::util::array<unsigned int> mark_link;
+ unsigned int size_;
+ };
+ }
+}
+#endif
\ No newline at end of file
--
1.7.2.5
1
0

last-svn-commit-882-gc2df1b3 update line recognition system. still have problem with document 228
by Raphael Boissel 08 Sep '11
by Raphael Boissel 08 Sep '11
08 Sep '11
---
scribo/sandbox/raphael/code/my/document/clean.hh | 95 ++++++++-
.../sandbox/raphael/code/my/document/document.hh | 209 ++++++++++++++++++--
.../sandbox/raphael/code/my/document/separator.hh | 68 +++++++
scribo/sandbox/raphael/code/test.cc | 13 +-
scribo/sandbox/raphael/code/test.ppm | Bin 27000122 -> 0 bytes
5 files changed, 357 insertions(+), 28 deletions(-)
create mode 100644 scribo/sandbox/raphael/code/my/document/separator.hh
delete mode 100644 scribo/sandbox/raphael/code/test.ppm
diff --git a/scribo/sandbox/raphael/code/my/document/clean.hh b/scribo/sandbox/raphael/code/my/document/clean.hh
index 335a575..9028e63 100644
--- a/scribo/sandbox/raphael/code/my/document/clean.hh
+++ b/scribo/sandbox/raphael/code/my/document/clean.hh
@@ -25,11 +25,15 @@ namespace mymln
for_all(q)
{
if(!doc.contain_container(v) && doc.get_bbox(q).has(v))
+ {
doc.add_noise(v);
+ }
+
}
}
}
+
template<typename L, typename F, typename D>
void clean_letters_items(mymln::document::document<L,F,D>& doc)
{
@@ -88,7 +92,7 @@ namespace mymln
if((!doc.contain_line(q)))
{
// draw::line(out, q,v, mln::literal::blue);
- if((doc.allign_V(q,v)))
+ if(doc.allign_V(q,v) && doc.allign_size(q, v))
{
doc.add_to_line_link(v, q);
draw::line(out, q,v, mln::literal::magenta);
@@ -97,7 +101,7 @@ namespace mymln
}
else
{
- if(doc.allign_V(q,v))
+ if(doc.allign_V(q,v) && doc.allign_size(q, v))
{
doc.add_to_line_link(q, v);
draw::line(out, q,v, mln::literal::green);
@@ -112,11 +116,10 @@ namespace mymln
}
}
- doc.cook_lines();
+ doc.propage_line_link();
io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out);
}
-
-
+
template<typename L, typename F, typename D>
void clean_dot_items(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s)
{
@@ -141,19 +144,91 @@ namespace mymln
doc.add_to_line_link(v, q);
doc.add_letter_coerce(q);
}
- else if (doc.allign_H_Large(v, q) && doc.allign_top(v, q))
+ }
+ }
+ }
+ mask = doc.fun_mask_alone_letters();
+ mln_piter_(v_ima_g) v2(mask.domain());
+ nbh = nbh_t(mask);
+ mln_niter_(nbh_t) q2(nbh, v2);
+ for_all(v2)
+ {
+ if(doc.contain_line(v2))
+ {
+ for_all(q2)
+ {
+ if (doc.allign_H_Large(v2, q2) && doc.allign_top(v2, q2))
{
- draw::line(out, q,v, mln::literal::magenta);
- doc.add_to_line_link(v, q);
- doc.add_letter_coerce(q);
+ draw::line(out, q2,v2, mln::literal::magenta);
+ doc.add_to_line_link(v2, q2);
+ doc.add_letter_coerce(q2);
+ }
+ }
+ }
+ }
+ io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out);
+ doc.propage_line_link();
+ }
+
+ template<typename L, typename F, typename D>
+ void clean_quote_items(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s)
+ {
+
+ image2d<value::rgb8> out;
+ mln::initialize(out, s);
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_start_end_lines();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ if(doc.contain_line(v))
+ {
+ for_all(q)
+ {
+ if(doc.get_line_length(q) < 4)
+ {
+ if(doc.allign_size(v,q))
+ {
+ if(!doc.contain_alone_letter(v) && !doc.contain_alone_letter(q) )
+ {
+ if(
+ (doc.allign_top(v, q) || doc.allign_top(doc.get_beginning_of_line(v), doc.get_label(q)))
+ )
+ {
+ doc.add_to_line_link(v, q);
+ draw::line(out, q,v, mln::literal::green);
+ }
+ }
+ else if(doc.allign_top(v, q) && !doc.allign_H(v, q))
+ {
+ doc.add_to_line_link(v, q);
+ }
+ else
+ {
+ draw::line(out, q,v, mln::literal::magenta);
+ }
+ }
+ else if (doc.allign_H_Large(q, v) && doc.allign_up_line(v, q))
+ {
+ doc.add_to_line_link(v, q);
+ draw::line(out, q,v, mln::literal::blue);
+ }
}
+
}
}
}
io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out);
- doc.cook_lines();
+ doc.propage_line_link();
+ doc.recook_lines();
}
+
+
}
diff --git a/scribo/sandbox/raphael/code/my/document/document.hh b/scribo/sandbox/raphael/code/my/document/document.hh
index 1bd44ac..4e13103 100644
--- a/scribo/sandbox/raphael/code/my/document/document.hh
+++ b/scribo/sandbox/raphael/code/my/document/document.hh
@@ -33,6 +33,9 @@ namespace mymln
// NOTE : The type Float is used toperform floating point operation on data
// with type Label. So a conversion betweem Data and Float must exist.
+
+ // WARNING: Methods on lines like get_end_of_line can be used only after a line cooking.
+
document(image2d<Label>& ima, image2d<Label>& ima_influ,mln::util::array<box2d>& bboxgp, g_vertices_p& area_graph, Label Areas)
{
img = ima;
@@ -57,6 +60,7 @@ namespace mymln
CLet = 0;
CLine = 1;
NLine = 2;
+ Areas_Number_ = Areas + 1;
}
/* OPERATION ON LINES */
@@ -158,6 +162,7 @@ namespace mymln
{
separators_mask(lbl) = false;
letters_mask(lbl) = false;
+ alone_letters_mask(lbl) = false;
containers_mask(lbl) = false;
Hseparator_mask(lbl) = false;
Vseparator_mask(lbl) = false;
@@ -336,6 +341,16 @@ namespace mymln
return allignV < label_size_(0, Left) && (_bboxgp[Left].pcenter()[0]) > (_bboxgp[Right].pcenter()[0]);
}
+
+ inline bool allign_up_line( const point2d& Left, const point2d& Right)
+ {return allign_up_line(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_up_line( const Label Left, const Label Right)
+ {
+ short int allignV = label_allign_(0, Left, Right) * 1.3f;
+ return allignV < label_size_(0, Left) && (_bboxgp[Left].pcenter()[0]) > (_bboxgp[Right].pcenter()[0]);
+ }
+
inline bool allign_H_Large( const point2d& Left, const point2d& Right)
{return allign_H_Large(img_influ(Left), img_influ(Right));}
@@ -350,9 +365,48 @@ namespace mymln
inline bool allign_H( const Label Left, const Label Right)
{
- short int allignV = label_allign_(1, Left, Right) * 2;
- return allignV < label_size_(1, Left) && allignV < label_size_(1, Right);
+ short int allignH = label_allign_(1, Left, Right) * 2;
+ return allignH < label_size_(1, Left) && allignH < label_size_(1, Right);
+ }
+
+ inline bool allign_size_height( const point2d& Left, const point2d& Right)
+ {return allign_size_height(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_size_height( const Label Left, const Label Right)
+ {
+ short int SizeL = label_size_(0, Left);
+ short int SizeR = label_size_(0, Right);
+ return SizeR > (SizeL / 3) && SizeR < (SizeL * 3);
+ }
+
+ inline bool allign_size( const point2d& Left, const point2d& Right)
+ {return allign_size(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_size( const Label Left, const Label Right)
+ {
+ short int SizeL0 = label_size_(0, Left);
+ short int SizeR0 = label_size_(0, Right);
+ short int SizeL1 = label_size_(1, Left);
+ short int SizeR1 = label_size_(1, Right);
+ short int Swap = 0;
+ if(SizeL0 < SizeL1)
+ { SizeL0 = SizeL1; }
+ if(SizeR0 < SizeR1){SizeR0 = SizeR1;}
+ return SizeR0 > (SizeL0 / 4) && SizeR0 < (SizeL0 * 4);
+ }
+
+
+ inline bool allign_size_height_max( const point2d& Left, const point2d& Right)
+ {return allign_size_height_max(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_size_height_max( const Label Left, const Label Right)
+ {
+ short int SizeL = label_size_(0, Left);
+ short int SizeR = label_size_(0, Right);
+ return SizeR < (SizeL * 3);
}
+
+
inline bool allign_V( const point2d& Left, const point2d& Right)
{return allign_V(img_influ(Left), img_influ(Right));}
@@ -361,6 +415,26 @@ namespace mymln
short int allignV = label_allign_(0, Left, Right) * 2;
return allignV < label_size_(0, Left) && allignV < label_size_(0, Right);
}
+ inline bool allign_V_large( const point2d& Left, const point2d& Right)
+ {return allign_V_large(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_V_large( const Label Left, const Label Right)
+ {
+ short int allignV = label_allign_(0, Left, Right);
+ return allignV < label_size_(0, Left) && allignV < label_size_(0, Right);
+ }
+
+
+ inline bool allign_V_extra_large( const point2d& Left, const point2d& Right)
+ {return allign_V_extra_large(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_V_extra_large( const Label Left, const Label Right)
+ {
+ short int allignV = label_allign_(0, Left, Right) / 2;
+ return allignV < label_size_(0, Left) && allignV < label_size_(0, Right);
+ }
+
+
inline bool allign_base_line(const point2d& Left, const point2d& Right)
{return allign_base_line(img_influ(Left), img_influ(Right));}
inline bool allign_base_line(const Label Left, const Label Right)
@@ -404,6 +478,13 @@ namespace mymln
}
vertex_image<point2d,bool> fun_mask_letters()
{ return fun_mask_(letters_mask); }
+ vertex_image<point2d,bool> fun_mask_start_lines()
+ { return fun_mask_(start_lines_mask); }
+ vertex_image<point2d,bool> fun_mask_end_lines()
+ { return fun_mask_(end_lines_mask); }
+ vertex_image<point2d,bool> fun_mask_start_end_lines()
+ { return fun_mask_(start_end_lines_mask); }
+
image2d<bool> image_mask_containers()
{ return image_mask_(containers_mask); }
image2d<bool> image_mask_separators()
@@ -414,6 +495,10 @@ namespace mymln
{ return image_mask_(noise_mask); }
image2d<bool> image_mask_alone_letters()
{ return image_mask_(alone_letters_mask); }
+ image2d<bool> image_mask_start_lines()
+ { return image_mask_(start_lines_mask); }
+ image2d<bool> image_mask_end_lines()
+ { return image_mask_(end_lines_mask); }
mln::util::array<box2d> bbox_mask_containers()
{ return bbox_mask_(containers_mask); }
@@ -433,33 +518,122 @@ namespace mymln
mln::util::array<box2d> bbox_enlarge_mask_noise(short int x, short int y)
{ return bbox_mask_enlarge_(noise_mask, x, y); }
+ Label get_label(point2d point)
+ { return img_influ(point); }
+
+ unsigned int get_line_length(point2d point)
+ { return get_line_length(img_influ(point)); }
+
+ unsigned int get_line_length(Label L)
+ { return lines_len[lines_mark[L]]; }
+
+ unsigned int get_beginning_of_line(point2d point)
+ { return get_beginning_of_line(img_influ(point)); }
+
+ unsigned int get_beginning_of_line(Label L)
+ { return lines_first_label[lines_mark[L]]; }
+
+ unsigned int get_end_of_line(point2d point)
+ { return get_end_of_line(img_influ(point)); }
+
+ unsigned int get_end_of_line(Label L)
+ { return lines_last_label[lines_mark[L]]; }
+
+
unsigned int get_parent_line(point2d point)
{ return lines_mark[img_influ(point)]; }
+
+
unsigned int get_parent_line(Label L)
{ return lines_mark[L]; }
- void cook_lines()
+ inline void recook_lines()
{
- propage_line_link();
+ lines_first_label.fill(0);
+ lines_last_label.fill(0);
+ lines_len.fill(0);
+ cook_lines_();
+ }
+ inline void cook_lines()
+ {
+ lines_len = mln::util::array<unsigned int>(CLine + 1);
+ lines_first_label = mln::util::array<unsigned int>(CLine + 1);
+ lines_last_label = mln::util::array<unsigned int>(CLine + 1);
+ start_lines_mask = fun::i2v::array<bool>(Areas_Number_);
+ end_lines_mask = fun::i2v::array<bool>(Areas_Number_);
+ start_end_lines_mask = fun::i2v::array<bool>(Areas_Number_);
+ lines_len.fill(0);
+ start_lines_mask(0) = false;
+ end_lines_mask(0) = false;
+ cook_lines_();
+ }
+ inline void propage_line_link()
+ {
+ for(unsigned int N = 1; N < lines_mark_link.size(); N++)
+ {
+ unsigned int Pos = N;
+ while(Pos != lines_mark_link[Pos] && Pos != 0){Pos = lines_mark_link[Pos]; }
+ lines_mark[N] = lines_mark[Pos];
+ }
}
-
/*image_if<image2d<Label> masked_image_letters()
{return masked_image_(letters_mask); }
image_if<image2d<Label> masked_image_separator()
{return masked_image_(letters_mask); }*/
private:
- // PRIVATE FUNCTIONS ON LINES
- inline void propage_line_link()
- {
- for(unsigned int N = 1; N < lines_mark_link.size(); N++)
+ // PRIVATE DATA ON LINES
+ mln::util::array<unsigned int> lines_len;
+ mln::util::array<unsigned int> lines_first_label;
+ mln::util::array<unsigned int> lines_last_label;
+ fun::i2v::array<bool> start_lines_mask;
+ fun::i2v::array<bool> end_lines_mask;
+ fun::i2v::array<bool> start_end_lines_mask;
+
+
+
+ inline void cook_lines_()
{
- unsigned int Pos = N;
- while(Pos != lines_mark_link[Pos] && Pos != 0){Pos = lines_mark_link[Pos]; }
- lines_mark[N] = lines_mark[Pos];
+ for(unsigned int N = 1; N < lines_mark.size(); N++)
+ {
+ if(lines_mark[N] != 0)
+ {
+ /* APPROXIMATE THE NUMBER OF CHAR IN THE LINE */
+ lines_len[lines_mark[N]]++;
+ /* COOK THE FIRST AND THE LAST LABEL OF THE LINE */
+ if(lines_first_label[lines_mark[N]] == 0)
+ lines_first_label[lines_mark[N]] = N;
+ else if(_bboxgp[N].pcenter()[1] < _bboxgp[lines_first_label[lines_mark[N]]].pcenter()[1])
+ lines_first_label[lines_mark[N]] = N;
+
+ if(lines_last_label[lines_mark[N]] == 0)
+ lines_last_label[lines_mark[N]] = N;
+ else if(_bboxgp[N].pcenter()[1] > _bboxgp[lines_last_label[lines_mark[N]]].pcenter()[1])
+ lines_last_label[lines_mark[N]] = N;
+
+ /* FILL THE MASK WITH FALSE:MAYBE USELESS IF THE MASK IS INITIALIZED */
+ start_lines_mask(N) = false;
+ end_lines_mask(N) = false;
+ start_end_lines_mask(N) =false;
+ }
+ }
+
+
+ /* SECOND STEP OF THE COOKING */
+ for(unsigned int N = 0; N < CLine + 1; N++)
+ {
+ if( lines_first_label[N] != 0)
+ {
+ start_lines_mask(lines_first_label[N]) = true;
+ end_lines_mask(lines_last_label[N]) = true;
+ start_end_lines_mask(lines_first_label[N]) = true;
+ start_end_lines_mask(lines_last_label[N]) = true;
+ }
+ }
}
- }
+
+
// GENERIC CONTAIN TEST
inline bool contain_(const Label& lbl, const fun::i2v::array<bool>& array)
@@ -560,10 +734,12 @@ namespace mymln
fun::i2v::array<bool> alone_letters_mask;
fun::i2v::array<bool> containers_mask;
fun::i2v::array<bool> noise_mask;
+
+
unsigned int CLine;
unsigned int NLine;
- mln::util::array<Label> lines_start;
+
mln::util::array<unsigned int> lines_mark;
mln::util::array<unsigned int> lines_mark_link;
unsigned int CLet ;
@@ -591,6 +767,11 @@ namespace mymln
g_vertices_p _area_graph;
mln::image2d<Label> img;
mln::image2d<Label> img_influ;
+ Label Areas_Number_;
+
+ /* IMPLICIT SEPARATOR DETECTION */
+ mln::util::array<unsigned int> implicit_separator_mark;
+ mln::util::array<unsigned int> implicit_separator_mark_link;
};
}
}
diff --git a/scribo/sandbox/raphael/code/my/document/separator.hh b/scribo/sandbox/raphael/code/my/document/separator.hh
new file mode 100644
index 0000000..756f04b
--- /dev/null
+++ b/scribo/sandbox/raphael/code/my/document/separator.hh
@@ -0,0 +1,68 @@
+#ifndef INC_DOCUMENT_SEPARATOR
+#define INC_DOCUMENT_SEPARATOR
+#include <my/util/vector_bbox_group.hh>
+#include <mln/util/graph.hh>
+#include <mln/document/document.hh>
+using namespace mln;
+namespace mymln
+{
+ namespace document
+ {
+ namespace separators
+ {
+ template<typename L, typename F, typename D>
+ void clean_containers_items(mymln::document::document<L,F,D>& doc, std::string dgb_out, image2d<bool> s)
+ {
+ image2d<value::rgb8> out;
+ mln::initialize(out, s);
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+
+ if(doc.contain_letter(v))
+ {
+ if((!doc.contain_implicit_separator(v)))
+ {
+ doc.add_to_implicit_separator(v);
+ doc.add_to_implicit_separator_self_link(v);
+ }
+
+ for_all(q)
+ {
+
+ if((!doc.contain_line(q)))
+ {
+ // draw::line(out, q,v, mln::literal::blue);
+ if(doc.allign_H(q,v) && doc.allign_size(q, v))
+ {
+ doc.add_to_implicit_separator_link(v, q);
+ draw::line(out, q,v, mln::literal::magenta);
+ All_Alone = false;
+ }
+ }
+ else
+ {
+ if(doc.allign_V(q,v) && doc.allign_size(q, v))
+ {
+ doc.add_to_implicit_separator_link(q, v);
+ draw::line(out, q,v, mln::literal::green);
+ All_Alone = false;
+ }
+ }
+ }
+
+ }
+
+ }
+ doc.propage_implicit_separator_link();
+ io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/scribo/sandbox/raphael/code/test.cc b/scribo/sandbox/raphael/code/test.cc
index 58edba0..b33a4eb 100644
--- a/scribo/sandbox/raphael/code/test.cc
+++ b/scribo/sandbox/raphael/code/test.cc
@@ -96,7 +96,7 @@ void Process(std::string File, std::string Dir)
timer.restart();
mymln::document::document<uint16,float,short> doc(ima_blob, ima_influ, boxes, area_grph, areas_detected);
- doc.vertical_separator_ratio_range(0.0f, 0.1f);
+ doc.vertical_separator_ratio_range(0.0f, 0.2f);
doc.horizontal_separator_ratio_range(6.0f, 1000.0f);
doc.container_volume_range(40, 100);
for (uint16 N = 1; N <= areas_detected; N++)
@@ -117,7 +117,10 @@ void Process(std::string File, std::string Dir)
mymln::document::clean_containers_items(doc);
mymln::document::clean_letters_items(doc);
mymln::document::clean_get_lines(doc, Dir + "/" + "line_graph_" + File, doc.image_mask_letters());
- mymln::document::clean_dot_items(doc, Dir + "/" + "dot_graph_" + File, doc.image_mask_letters());
+ mymln::document::clean_dot_items(doc, Dir + "/" + "dot_graph_" + File, doc.image_mask_letters());
+ doc.cook_lines();
+ mymln::document::clean_quote_items(doc, Dir + "/" + "quote_graph_" + File, doc.image_mask_letters());
+
doc.stat();
std::cout << "WORK ON GRAPH : " << timer.stop() << endl;
//io::ppm::save(ima_influ, "separator.ppm");
@@ -127,6 +130,7 @@ void Process(std::string File, std::string Dir)
io::pbm::save(doc.image_mask_separators(),Dir + "/" + "separators_" + File);
io::pbm::save(doc.image_mask_containers(),Dir + "/" + "containers_" + File);
io::pbm::save(doc.image_mask_noise(),Dir + "/" + "noise_" + File);
+ io::pbm::save(doc.image_mask_start_lines(), Dir + "/" + "start_line_" + File);
doc.debug_save_lines(Dir + "/" + "lines_" + File);
/* typedef vertex_image<point2d,bool> v_ima_g;
v_ima_g mask = doc.fun_mask_letters();
@@ -164,8 +168,9 @@ void Process(std::string File, std::string Dir)
//std::cout << "NODES:" << fnds << endl;
// mymln::debug::save_graph_image(area_grph, ima, "graph_" + File);
// mymln::debug::save_graph_image(doc.fun_mask_separators(), ima, "separator_graph_" + File);
- mymln::debug::save_graph_image(area_grph, doc.image_mask_letters(), Dir + "/" + "graph_" + File);
- mymln::debug::save_graph_image(doc.fun_mask_letters(), doc.image_mask_letters(), Dir + "/" + "container_graph_" + File);
+ //mymln::debug::save_graph_image(area_grph, doc.image_mask_letters(), Dir + "/" + "graph_" + File);
+ //mymln::debug::save_graph_image(doc.fun_mask_letters(), doc.image_mask_letters(), Dir + "/" + "container_graph_" + File);
+ //mymln::debug::save_graph_image(doc.fun_mask_end_lines(), doc.image_mask_letters(), Dir + "/" + "graph_start_line_" + File);
//mymln::debug::save_boxes_image(doc.bbox_mask_letters(), ima, "lbox_" + File);
//mymln::debug::save_boxes_image(doc.bbox_enlarge_mask_letters(10, 0), ima, "linebox_" + File);
}
diff --git a/scribo/sandbox/raphael/code/test.ppm b/scribo/sandbox/raphael/code/test.ppm
deleted file mode 100644
index c5960437385add981741064c2f4e1636f3dccc77..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 27000122
zcmeF)-HIK@5dh%5)>ACxCb^N71m_}m2AdFYz?i&%9Br^ck%S@we)^L!15MHMbLPx%
zPtO;YP^YK6y6WrMU2SF{Km6s@@1Fnm^5Nz4+b=Kgo`3rF`5(W$fBEqC`H!#PJU{>Z
z<;$nPe)ZMI-$q`)|NQRd^~<MUzPx??@6XMu?|%6EKfihY@#ViSZ$JO*=jXQ{-aUW&
z^1qk&A3y!)<-?cf@8ACPu}S*z^RLgp|Nh5szx%_hKfihN=J~h(diAHTzkc=PKLiL6
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF>??44x}EWB
zUnIK`AV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5;&6$EZix5B?xXi^FS1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkLHV1e7yZT45eZ7J=#0<-VuwH98NUgrb|5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0Rl%0One9C=rZk3fB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZU=M-b*J<|H*d7E35FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXFj0*Jre~VmUa8%{6iyO%w)=y{S
z-Ud6f`Um3L{u!%|KDu3;pW;<38cde9t1=jDyWR^YJ;%ETa?-xCvhTKO0s#U92oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5Ev229zzd(j2XIf;?)`PNW$)=-jNxb&Rf#m
zeO?}`2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7$`t6nA98o3w~@Q6
zvI)IOb{ou!X+G|@wT%c6AV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5;d
z=)POhJ5p>HvD#vbR2TsQ1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
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
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXL5x70w&ii$Um`w=~*hgUDkEVT!v<m?O1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZV1~fZdl55ISwdjwcA7rUkN^P!1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oN~6Kzd2wkS@~hy}?jP+2o;V#tEz|P|l54P9^IK%SM0z0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t8kR$R4jZA6HD?o2t8G9O+&1=-}!JA1%QAYYN00uZg!t
zh}&g*#Y=6RP4JNb0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5(DFR;(k^X@Kj
zWM|~KbrbKryX~$lu*JO>b3SAn7y3qch|XjJ1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oN}zKzc;JQQ0Yf8*H@8DrvJ)3;(!E%UdT|Xt;HG<>XILGfG;rws*VL6ZY=X
z9ZdU<1l?6eh6FGU$rvX<fB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72<$A7
zy~r_T_iV}jAEy+#=bRCNJ<G5c0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7dX6v$rch?m3!2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7&MV->
znDd^U$_Wr4K!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1nvr?*JJL^G=TsC
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
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
z0RjXF5FkK+009Cw3-}Yp&EV1zAV7cs0RjXz3Y0&mZ9LfRwz4B%p6T{xDU1LC0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK%lKa{^gmrkwqgwfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72s9M<`}cS3U&9)NB5<3)_NV=}k|ZKPfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C7_6ltO0zkfV%92ml#(RsgpTOt>Yp;cJz4K1Xf{(3q
z-lp;h5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7dXDNz22yxe1j009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZp!|P*N-HnGNxfV&xS!~vM#`}Fw<aTjiv-HYd*jL#^=wIfMcy+pN38iwzs?dM
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNCfO@S?c8|{40H*Z{%uD9RWCg~mzvc2EM
zosZYAfFO|Hrf_NdG!N2hygmCpJGb<8PbIPtAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5(b5eVP+*mA@k0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0z(Mo-;EifU_}xjK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBn=
zE|9(+v;Byj1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
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
z0RjXF5C{T`-&F{EObHMmK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PHuR
zp#1X8E8El*0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7csfgq57b0%Ce
zB|v}x0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7dX
zbAi8qf9YTI-~tlpQy@L_KL>r*uPOor2oTsS@be9Sal_s$_7fmLfB*pk1PBlyK!5-N
z0t5&UAV7e?paSVr;z8?IHUR>Q0_mll4;FX!vzV7Ujr%D~B_9z8Phe&G5fE(>Ah0M<
zd2`r%X)*qR#l3ke`wwKl`beePwM$o*B!15VYfr_r-gDV%BS3%v0RjXF5FkK+009C7
z2oNAZ;1PlFiQ*$QNJ@afF@f;<9pw)Jq3qCmel=V&JtL4{&jfLn009DD5J+#B`QQtU
z>+wzjPuE`UT&x^dqLrJcmCAmX2oNAZfB*pk1PBlyK!5-N0t5&U_?kfY6!D7oZ%A=P
z*<wB}5T2YceZ0I&3kc1o>7_|q1y9wc!S=}M$UNA7u(C77tn7KsrPS;+NKGv+rmF@7
z2oU&`K>n7P#-9?<?9~G4xmp}toqeqMi$rO$Z7(ToK4_alGy((&5FkK+009C72oNAZ
zfB*pk1O^qzKQ^4k2f7Fm${=CGffSCsMj$*4<+RdixjC#<&h~RD)SRaMRJf&*RQ5dB
za%AJ4Jo3gPm2G*nX<XSk)}_3!pOx?0{4<&j1PBo5Ss;JMOXHpkR@-m_>AA`Wsf)Cj
zRz5gL2#bTqLHexfaTWy-AV7cs0RjXF5FkK+009C72oU(VK>FnHr^EK0Ayhgz55m<j
z4V$l<hP<YS1?u-`4x9EI&a!wgh21q+4ApiqucvL~o1>*h?#bIcT?#l4es&S|pPc?o
zSKp9lukWl}&4WBXuGHxgfi;0kpWC&h*R5aL&TzpGJLjDq4&oqzAdo*-`8aHwruD1k
z{u@^El8%jc6&X_OI@`(S(8AiZlWLVgfB*pk1PBlyK!5-N0t5&UAV7e?3k23ahn&}M
zYp`BMx_VnZ#}YkKXG%H`j#d8PsZjsg^uY?HzDQv0UZ?eo^6m{g*R%Ij|NE2k;-LTf
zRhSE;o0u;e6CglfEP?b^HVw8^KJVYM^M*Zpi@%|y_oc{@%W)6=mR0>+>7i^j5FkK+
z009C72oNAZfB*pk1PBlyK%j|0_(ZfxOhE_`AV7dXUBG{R>OQU#AV8p%fcM*0lHw2`
zK!5-N0t5&UAV7cs0RjXF5FkK+z$*pv57J-Rpr!~AAV8o)f&9Nd)40P5l|+C5fq?|_
zH`Rg4Rw@Ak1PBlyK!5-N0t5&UAV7cs0RjXF5O`J~|A5_JEuXy?vJ)Uc;8Ozr1N5oe
ztyuyDS_z~#&sG7&AwYlt0RjXF5FkK+009C72oNAZfB*pkUl#De`<L&&-U$#O@SuSI
z06mB=H30$y2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
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
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2wWlX_wR4<-xayUBtU=w0RjXF5FkK+009C7ehMu9p1!#FGt|pAEFwIz_%c}S5FkK+
z009C7dK0+lXT09pRL|oATb{JXi&Ovs0t5(b7ufQ~KJD2a(9Zq^!cFhLU=<P|K!5-N
z0t5&UAV7e?8G-O?V10Tf(amSq8o9X)=?D-YK!5-N0t8+ru=aE2H`iZwbFXWs$>VWd
zc_I@aK;VM{m3QV3YJ8{Vwfp`Z0i6;cK!5-N0t5&UAV7e?UV-qt<lf`g?GJ@b)9Z4H
zOyDVj@;UdYKXorI%Ig+i1S>270=onj-;2`Xu243AK_ERF^}!b?Zs@U&JYT(`jL)X1
z`+t^2;{^H_SbOpIU%3j;2)OTO^twG;-qvnQRTu#R1PBlyK!5-N0xuTGe>b_a%{=cs
zzB9XA1g;Y(pY42QF>k)X%VCkItHttu<tvM&<{PH*;vS0x2oTsM5Z+kAv>qyK4%7Ns
zSHCO}9+k@U%Sw9hO&~m|_42~z%CsKGRRRQ#33$;Ra~u7X`#$;|4E0xTXt)#(ni3#D
zfB*pk1PBlyK;S8XOMhFrH270u@_tqzJkR;GiAf%C8aIh4$aaC?AEw*mtnF+ba4nH_
z0tAK@2=5hPdR=QFQJ7wrSL8PdgvVxW`lgok(v?8|$X!%ep5pNMKy8O}9XNQPJVyxZ
z6$nq}-sAQUBoOX(J{_nFrOpER?JLJYDc=w-nGzsCfB*pk1PBoLnn3>J@u$Ya-RN|8
z&Q#tc$e99$IGdCV&Is(i*LUXHTU*$Frqujw2wR`#2h+H6B<-07m2KBu$_v<A!<n<^
zJ4)Hlhw3~+>a@wA^JdHP_I6!H=y_#tcMbP<$kM924qKZ_YSLYwt*PpMfhLbr9_0QO
zWb8^HJq%q{HEuD<^U}e%K95&^?7lo+_JIOIrw1ZjdL)$h?&&VcK(XuW<C|0Qk5|$|
z0ZAhbwp6ui^Ok`25FkK+009C72oNAZfB*pk1fCK|A9Pd(Q*Db^Th+W6d|GT3UmODW
z2zZk3ah8Pu0RjXF5FkKc2mwDH4{@8mR%HHIeyw-?5+Fc;009C72oNAZfB*pk1PE*w
z$UjH=IbI7}Ik<MjI)QfxtUdhi=uQ^|2oNAZfB*pkUlv&VS$A6hGK=1a5C~825H%~3
z009C72oNAZfB*pk1PBlyK%gIi@cB|X?Wa_g5a>jpe3{HEos_2x0t5&UAV7cs0Rl<D
z&#sBW;H?7rL;ltt^+kXH0RjXF5FkK+009C72oNAZfB=CG1@ez)r*VfBDv1CA0t5&U
zAVA>t0)8lc{VmpDMIb%@l|3#IAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
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
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
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
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBl~A@KL_
zZ}H!WRJITxK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0tBMK-@m{3FJ2N8AV6Rwf%smxCmyMHy%0Dpu;<0Hz2@}MHWDB}fB*pk
z1PBlyK!5-N0t5&U*cM1XOl>c7l>h+(1PC+}NPnB=pxL<&S`^4`M;b0JHc5a0ft>>B
z%_IdoH}=0Qb+kX|zbO?GAV7cs0RjXF5FkK+z!ib?4e?46dkGLAK!5;&(*o&l@f@7a
z^P-KZ<rmegR00GB5b)-6=q4tvDaba)OXbyUvEfmHjJF&fO=vxV9t6rKd7kN^whz{@
zcsojmxU9T7_RN=iAN$VgjsO7y1PBlyK!5-N0+~Sk0yxFlRYL*<2oNAZpo&2D2lwND
zb7@q0s3ajkU_&6j&!lCGlj-W0gL5)**A#ylaHIE3X=AvN#3ceR638C%waT+)<#27I
z`8@)q=RC7#Z?+~&m0cZs7<(VPQ{53DK!5-N0t5&UAV7dX{0?~fOEg9T1PBlyKp^{*
z3S?U#<C=!s>s=*4fIuk_-$}}=+03EE+1@dR)dgb0DIP;<t&6PLjp14b^8|(w$e#aN
zePwCOVXcGSo~M+VX6|b$9(Ug<9cKP);~m}$B@rM%fB*pk1PBlyK%k94{3f{nyLPtg
z)x$Q<P9g9*fzz++J32jG%+8H>)ZAyzJs^En-cMD@u%D7%T1k>j!Alz{%T65~3d%g6
zojK%IckyS<du}}5;?s4;B=3sPwLJHDZtwnGT}kdQJ6pNdMYhb4zy}4=tK+HOQvr7b
zPc^mk+}QHYEq5%7Wt@)hDD3W>S+jQ^cOrjQ;i$tCGTm-jyGPv?e5kO+?ha+Jm;eC+
z1PBlyK!89G0*jw)%gG)}{df)KO*uOAIN;HO>#l#i{T>R~COuu@cG`1SPZzUu<GHHt
z*tN6ZTbCW`>yAne6>xg-9hJ*@QDE_IUd&m2`(lyV<het$BvppzDrvB5ySoMjtR2y9
zVQU4CJwM-$v3t}V0RjXF5FpUGz~bk_W;H*1db2hc4_fT~rIU*djy+l4sj>Uj9RUIa
z2oNAZfB*pkFA~VUu-saCcGf(+^+d@D5NIP%zPeAGn<Y7s!Ipsqvd3c@-qdV)(BjNZ
zr%OwK009C72oNAZfWTV>?)au~N6xo+s*?Z#0t5&UAV7cs0RjXFJSC8QA3s+{mLv_&
zWwVO_fj0`I7k&z|F4BAovIT|&wgu9Y6N3|5;`S-t&fqEm0t5&UAV7cs0RjXz1hVfJ
z^Kfzf{*{Z{O%fnLfB*pk1PBlyK!5-N0yha{-`UGkvIQGo|I58*2oU&`K=yX=sopi)
zOdxyAvSG6_97KQs0RjXF5FkK+0D&ZseKDDb>8gML0RjXF5FkK+009C72oUI5p!{Cn
zbG2$CK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
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
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
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
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
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
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PCk&
z{Qdh|{I|H+Bmn{h2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C7+6(;s``iB4z9c6OFR=Z{ox3_bng$8nDv-VI
zZaqtK0t5&Ucvc{L&%a~%Y=cfGK;WW4_O@^_o9zS$%mQ9no&*8}2oNAZfB*pk1PBly
zK!5-N0t5yV$bR<RIc$uuR#oFN97liv0RjXF5FqflfKP^x-vR{;Dd3eg<Zaay0RjXF
z5FkK+009DD5XipJeWB&lW9&Um3J4G&aGyYY+nM6~4wCt^0`VF9EP}=f5FkK+009Eu
z6o?-Mv-q1Jy>*@4lx)~rwd$D#vfGpmDG?w*fB*pk1PBlyK!Ct21hQ{)(=aPLTaaCS
z`*5SXc<JqJs-FOXt^_vTUN$au)q-LO5FkK+009C72oQK&Abx#Vj32L10kgp3-I*pA
zebyE)&M#&#d0Jo*Ih#D4+(rTf2oNAZfB*pk1PBm#P~hU1yNlZ&Y<xcYT>Wv^<1HwF
z0D(6OoOl~KvE_|2Y9>H{009C72oNAZU{N4`BUp?VcbR-pVDUChlh;dH%si!CoX;k&
zpFT#0jAd~+MyI+UK!5-N0t5&UAVA>b0*l{whM7Eib5r9-H*T*_X`2Px^{ib@<*hB)
zKc7;)E7;%Q<14Sgo+y6txSx6AuAhr9E{JFK6JKoVsqN<gFIGDrS|!Q3`YZ0b*oE!G
z3%vJXt5~^I&kA()DyvJ;ptZUMSIO3(>-mT()jpM^nNrJx>SDI6y!}~qt#)R+(&o-1
zsw}%w=i1(Lg{@`F=F8;Sf_Dv5JMSv{M762YDLAqH%9fo+$7NZ3<@C<?W}QyM&I{gI
zUfI{HXLfcyFMFiZLls&~fB*pk1PBlyK!5-N0=)@rf0ul!+Qq7#Dkh%0SXefh)@Sq6
zFkLzk)XjFH09yzUAV7csfer<-PY6{iyd!6o!XzO;fB=D!1md5Yk@^~=7k6ij`}m(-
zJKMDrgaQEC|NrS*6BDw7$iWFwSJDSW*u#=Dwbcay0t5&UAV7cs0RjXF5FoHaApXTj
zHr^3!ZA%t;x?EfNi1}qZm6>8k#r4INCJ7KAK!5-N0#P7-i-_|-$GbQFjBEh`0t5&U
z_$d%ShNkh)^%nFLh)<_yUbzSmAV7cs0RjXF5FkK+009D{3B<oAS&rALU9OyF))v2b
zzUYu9U);FX2oNAZfB=DR0_m&8Jjn9a?`Df#5+Fc;0D+zY@k6R-Ub%h>cr-tWEFeID
z009C72oNAZfB*pk1U@Se|K=o)KMSI90t5&UAV7e?y#nzo*)+bl7}*IBAV7dXqd@xn
zYFuwwHvx~P8?{6P2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7dXMd0t>-`bzbF1H8}c#}YU6L?c!
zdU>LN)A+=vre*>J2oNAZfB*pk1PBlyKwwOP_%|(U<8dlqtMKRiI4xXJ$<OwCF1VsW
zF$oYLK!5-N0z(NL|8g}{JBlGdU=k?4uE`J>Q=oWUr^zv^RTY7vKs?691ttl+SRkH%
z@7^zd&{`uvfB*pk1PBo5FOYrNu3Yx7?UsxcfyP_6lr1R%0u_PA7w^wyl@x9fc!5BA
z3A~_}SGJHIP#nCk)7V`czpvBwj-o^3xIMU)1Wpu4=kvsvBZNwQrNIbQJ-r5)w?D!3
z2;$)OsuVzA5{PGV9%CW!1%c(scmBWd-1SI+009C72oNC9LBN;o4#;zgB6YXy5)pW}
zK=JkUbMh>cdZM$kh(q9Zf$XSvsHcC%4ow|Nk%7#Y#emC|#bpCdE-SCJIn`fWKVV;j
zl$3D|Qq{-Hh!5rU6tUT9{H%Vn;vZN4v$UsbGw{dN|FVMP<9JzXceN8qi{rZr8ze82
zK^}xMdI}Ve{WRIL2Du0jAV7cs0RjXFyj7t1efzD=KBceaLwQQ&>LhTZz_VUB&#Lyu
z$13&X1hTVzR{b$-7Bk+O#@XFBU1pu8%OgFeAZc(U+QGf4hUMU3<azrt>@;&q<d+4>
zpkCJ9u<caX<E>%qKe4db?=(I!@>!u`g=fVSXP-cP7Gs{4eSO*WDS>#5e>NT$H;#YC
z9CpF7!C^~P7=hyg%L6~p9FHsl0RjXF5FkK+009ENZ$J7B6d&KCJ5oG>;{w_1;&{M&
zBV_GNm-p5qJAqRKvV*-TX58DpG46Wq>nQ7DzHCQ0vT~XFNVMYKWs05+W+fGi$<}=Q
zG9&u9#<}fB+s4Q{wlqc_c3EtB8sAlCEaR>k>Um>@*|@&(O?MAAo^3yJ`6gApTp<uo
z*A?+&%$RG(IELyljum!Dw=YF3vSqw4i(Ri5$PUlz`_&);0t5&UAV7csfzAT)D|hGA
zr>Bd()W@f%9yVazq2=zdt=(H#3te%|MP;X47sdY>HWhI0;Ah^o1*wd+1+SS;o!&Ay
zk@1%Lhe~=P=F>x^=TdKEURGbzcsFHi95jYa%NoOOU6$gHFo?zPt0zX7#`}Ww+?5r)
z^|EKF{c|OaO{vqa9fM7Y?pnN~uW8G{YUiYzg2XyEZ5(HDYGG?hY2&`Z)^t~_uUCFW
z#;3=ui!JY-*zYoU&zTb&88B2&$(CH3h*H2!yY5|_YOW9NE%J)&m43ITD~8${<m&as
zB7aU^T~*KcKbu`!(6h)(bFDSFoWHaT!3hu`K!5-N0t5&UAV7e?QXu<rx?FI4CQC72
z9uF%50RjXF5FkK+z)%9d^$qnn6hnXj0RjXF5FkK+009C72oNAZfB*pk1PJ^Ti2u6r
zb8&G&jNre-6p2g{AV7cs0RjZRBe48(IL&;geVq~@K!5-N0t5&UAV7cs0RjXF5FkK+
z009C|5y<{gV_9~#V7^=~Gedv?0RjXF5FkJx3dFCGao(5!0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyFo;0>=M4WPW{`)X3<3lQ5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72#hcA_wO(L8NXT;5+Fc;009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5NH=j|1oA7wC}Q#009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
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
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5*BXV+eL-UeX+
zfbRWY`dg()$buv#K**&>+7E{qV-8)GRwF=w009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAJO5pF`U;HzwtU3e;5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjZ>
zEa3ml-1&6$Mt}eT0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
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
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
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
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
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
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBngOW^O{-|D}+>XDZK0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
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
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyuoU?F_qY0Qxzh>(0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
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
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB=D=0)PMh
zw*KvmU>gAf1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNA}M&R$?U(bJMN_Cb10RjXF5FkK+009C72oNAZfB*pk1PJsL
z*z@~&&wAt{K;VpkC;E(@vjhkb7)oHzTl&3whT>8T0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0xuKz`QJld)~|L55FkK+009CY6j*-b`yhgr2@oJafB*pk1PBlqQy}}o
zGG>vgB0zuu0RjXF5FkK+0D%Vyq;HxJs`+TCU+D3uiTwl!5FkLHAdvoaZVd`&J6uXt
zb;u<J0RjXF5FkK+009D>1=0upd5~q#u1?czgDC+51PBlyK!5-N0t5&U$ON+QlG)XF
zOux|MJMNS&2oNAZ;GqK9pW4-Fht`&PJ0z8Y009C72oNAZfB=E!0`ar`(ctmyJU$x1
zegXst5FkK+009C72oQLgK=xJfW!<HAVw-8v;AH~wE-%L~YgRko5m>&M&#!z(Z`tXV
z-g2jvs|B|1MOwe2fE0WlT#-Ud0t5&UAV7cs0RkfkWFLKxPMf!Iw18}X+j_F#71Or$
zbcj~b<I9e8K)xbH^<AharaISjup-_0BNYXoPbvZd0%d`U2QwWhM;_#As`k)ekm9p4
zVhh=&d#ACmdEB#}W%i3!dNx&^>!RM5VXG_r)WN0O>dHkXtGRAptZp_{ULB$T!Blg_
zpntV8{uHRVkNuDQ?BcEsXDIHf`6+qN*j{n=3b(d(UQuEHm~BmtM(f}2BQh=-o0pwZ
zG><GG0RjXF5FkK+009C72oNAZfB*pk1jZLgzmdkl6=lcxTjMM8ib;R~0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV6SCVD<lF+1fm<ukOzl3&&j|K!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyFpfa>|GmWNI7O<2009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+0D;d6{QdiD`0ulf8Ye)2009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
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
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
zo)h@{_jl^wbCrlpfB*pk1m+Vs^+&dF^L$EYJ1T@K+;%p*{R9XQAV7cs0RjXD5-5Bs
zetO$LVoD`IfB*pk1PBlyK!5-N0*Sz>Z_UYBQvw7C5Fk)RApT=iC18Ufan0+vK~gD7
z1oBH$Wu+vwJp`T>sB$y=$a?xRiBEt40RjXF5SUvaJe1DertSz3AV7cs0RjXF%q<We
z?Bl`QE$eP>f%s0&$8-0tI|7#lk~hocI1b(yNUp^)y&tnpgiv{#bh0!S2-i0Z8W$kl
z&;sGMxjCqakXKSMxKIQL5FkK+009DD5J(;=ztFNC2@oJafB*pk1PF{PQ1Squ?1`u2
zHm>ps1mat9Z+zV5=BeW&UL`Q4K=NKldQ4tjrpX4=mI5wEOKrKz1>BkCR$tpW=)Ey$
z*<ZW6^h<yM0RjXF5a?FG^JKS|Mqva95FkK+009Eu6i6P?Zz3eo!t`cX#|eac>0t1X
zQl9alM8XnyS0KLC&sGwjUB_o5*k4h=<*0}$R7C-IW<|__LQQ<#CvI(^8%(KB2;}#+
zl}-enxZGkAAV7e?ivr2tmlrFMng9U;1PBlyK!Ct1kUXQ7OoyWjO|_{!q`Nt2Q|&-m
zZhAg_{IX<T*yT`99E{6*B7PDxPB+##X~eWofpAmRE$^YQb&LE?v~W2t558k{t<z)J
zYcaoY>e%g}SEq+9bbHz%l<{<;uHuKT4F(eE>K0NAfn$MJ-dV>b_4euoqE1@4Q2CTc
zI=LLmI4kh_-FUX(Zuei4?6w_+5g<T-009C72#hYU`G7ilQ|c!`fB*pk1PBl)7ub9t
z42$J)>?F{MK)8Dk2A!0u3<8e|cndtrD>wlH1PBlyK!5-N0t5&UAV7e?Oahxfrp?r#
zUI-8%K!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PJU2_@8I?WULb)K!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PDwo;D4T({t|1D009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkKcPayuEXZH43CqRGz0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXFlnea*``i3i9>Gom1PBoLjzID!<2#M(^j(4E#yg(A
zTdM2?2oNAZpt?Zvhp&449s+)$#~z&3K!5-N0t5&UAV7cs0RjXF5SUmX`HAUZIx&LQ
z2oNAZ;IhEpACAib9qdP7`ir~Q;K6!7S4SlT2oNCfWr4jvRWq4<p~so7mtF`EAV7cs
z0RjXF5FkKcIDyTt-otgFU;+mMn>YEocyP)~6AQTd6JK1d5qL;o?@!4?>4a?{uy;+v
z`d$rT!#dd8HsyNU`;-l8iU0uubp_&&&1GCS_}tMFx@6iz@1dlM#e|s4pki2|2oNAZ
zfB*pk1PBlyK!CtE1>!H-`FPW$aNFitiv)TQi0|Q~p7^C@oV;rK9f9~x_)gb4B|zX<
zApT^C$H%9<+Mz&v`8LP3YL0`~iaA7_&o(~9)lnn?0xt?2d_2Z4E#nu9d@*%`us40N
z!oAc<se9Y36Cgl<009C72oNAZfB*pkEd`P<?D4cp8F9d6TqUL;1nLUJcWHU#_>_CQ
z+-<U*@og|!YuX_|U{fG|*T>_{%@#Wph_Bk__?4QIN?xhqm85awuM{9D0RjZx6}a{>
z7@u0k@3wG1d(zI{^nRk25#lad=9P;80RjXF5FkK+0D-v$;_n(I;|?`S%HG@4VLO{8
z?bY9AeX}Hst3YxI8nYzXN1r~e7kr*h)F6K7<-*{(^44Oi#1DN{iM9p_F?$$P>}%Fg
zJzS>FYk1|-pE7x+!s<y+wVZ6OUQA)Yq>QJhg;j-ZaXn$N^Fds5t#RiqZ<d$$zPYWp
z#k}mZE4_78QqS6B$<A-?IeQOuyT9?}>(-%qVU1xQO;;V~Y`|09oeiGsKb325a}u-V
zbg!hn_08J$HjlU-8XU3slA1$<!wr6R_h?5yv)e#`009C72oNAZfB*pk1PE*j#9!Dq
zH_W~G@%HDwxVj@i;J!foA-Rn22NZz-0RjXF5Ex4!ei#_5a@7(bK!5-N0t5&UAV7cs
z0RjXF5FkL{r@+U50{wXVKW`5k2oU&)fDgluTxe|)AV7csfwKbfL&7pXd)$5k1PBly
zK!5-N0t5&UAV7cs0RjXF^ehnn1ln_*57qYZ_8(FemH>f11>#RU|IMq<Yosay1PBly
z(4j#52+?7AN+Ljj009C72oNAZfB*pk1PBlyK!Ctyf%W&#%g0AQ7=Hd8y%F^jAV44%
z@ZlC~7!x2sfB*pkcLY3F+|hHE009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72n-?c_wR4--w^dHk^lh$1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNBU2>5>?5)e}Y1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009D13jF>13;(8UP*Vg55FkK+009C72oNAZfB*pk1lkCM-`NfZ
zZ7Pw4009C72oNApOJMK8rdE7$2oNAZfWV6a{>;6IFEs%I1PBlyK!5-N0t5&UAV7dX
zhXQ-Qm~F0iSih185FkK+009D<0-Fyrn~R&rEfOF=fB=EH1vdXCE{k(_tvdn)2oNAZ
zfB*pk1PBlyK!5;&F9_`Y_O-5mK|qfL2oNAZfWWK*2hTaPwyZA#1nvkNd}zck-AUnW
z1A+Krg>i$tA4w5Nm%&F`)+PZ01PBlyK!5-N0t5&UAV7e?a02nKSowIkb`(s2009C7
z2oTs4NFH_ewpk}Y;Nt?xXGNG6vV{HRgTlzRT@y$yL=q%<HJ>K?O$iVnK!5-N0t5&U
zAV7cs0RjXF5a?eZ|Di8l>A!vz5+Fc;009C7E(>_<xlC8_V0;ylam6e`T@XkvM?Sp}
zbI>Dk@9kTNvzLt9SJ*P+roh<(;vkpLt_R~#@%U8O_~8BVsnj+Tm{s8ZTPcn(tCGG5
z5FkK+009C7UKEHQI2(^ob=|nO5!0RW>~nL@eq3j~|9EHhSL4)Y$JL8z7VvDRZ|!de
z5+}OTY#e9SaqxM)!BEN2gVz~*E8yDI?5&Hno@>2Kd8)w$>c{Ouv;7p`rjiRp4UV+w
zea+IKojAqi*5V+?<B;NbTW_z1vP%ZN6~EN8S9XV`zFtydwOLQtv-#?^#Sn8H{0x%p
z57VCq?{5gXP7Uto9U{Uhli@bsxdfrvJ3$K1hFm3s!kC5IN-`#U3L_7?Eos(tQ{csm
zyIIfu#TPr0ng9U;1PBlyK!5-N0;3C*d?{Od%y(AlJrBFCR0%E!fe#AA@2L;AuVn%R
z2oNAZU?ze1!6qNi)Tv(b>l;=UoG@Mor?~E%J(b920t5&UAV7cs0RjXF5FkK+009C7
zrV&VfS3I8Xb-j0LZ@+Z{1nvtY@4Nc}MIb<c009C72=pV6JnAIVe(F@oO@ZXf=F=p8
zvLSiZlmGz&1PBlyK!5-N0t5&UAV7cs0RmM7lAj{;X_YL35Fl_zAbw-siQ_B*0t5&U
zAV8phf%wTMANOCs3QGj?E4!?e9JGf30RjXF5FkK+009C72oNAZfB*pk1PBoLltB1z
z3ZLp)vjhkbAV7csfmI+p3#|hz1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
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
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
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
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
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
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkL{e>-#_00000Ajsc(kP9IL1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
l3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*U9J`nIZdj0?a
--
1.7.2.5
1
0

last-svn-commit-881-g68f091d the program detects , , . , i and j but still has a problem with "
by Raphael Boissel 08 Sep '11
by Raphael Boissel 08 Sep '11
08 Sep '11
---
scribo/sandbox/raphael/code/my/document/clean.hh | 5 +++-
.../sandbox/raphael/code/my/document/document.hh | 26 +++++++++++++++++--
2 files changed, 27 insertions(+), 4 deletions(-)
diff --git a/scribo/sandbox/raphael/code/my/document/clean.hh b/scribo/sandbox/raphael/code/my/document/clean.hh
index 66b0c93..335a575 100644
--- a/scribo/sandbox/raphael/code/my/document/clean.hh
+++ b/scribo/sandbox/raphael/code/my/document/clean.hh
@@ -139,10 +139,13 @@ namespace mymln
{
draw::line(out, q,v, mln::literal::green);
doc.add_to_line_link(v, q);
+ doc.add_letter_coerce(q);
}
- else if (doc.allign_H(q, v) && doc.allign_top(q, v)) //ORDRE DESPARAMETRE ETRANGE A CHECK
+ else if (doc.allign_H_Large(v, q) && doc.allign_top(v, q))
{
draw::line(out, q,v, mln::literal::magenta);
+ doc.add_to_line_link(v, q);
+ doc.add_letter_coerce(q);
}
}
}
diff --git a/scribo/sandbox/raphael/code/my/document/document.hh b/scribo/sandbox/raphael/code/my/document/document.hh
index e898111..1bd44ac 100644
--- a/scribo/sandbox/raphael/code/my/document/document.hh
+++ b/scribo/sandbox/raphael/code/my/document/document.hh
@@ -189,6 +189,8 @@ namespace mymln
{containers_mask(lbl) = false;}
void inline add_letter(const point2d& point)
{add_letter(img_influ(point)); }
+ void inline add_letter_coerce(const point2d& point)
+ {add_letter_coerce(img_influ(point)); }
void add_alone_letter(const point2d& point)
{add_alone_letter(img_influ(point));}
void add_alone_letter(const Label lbl)
@@ -201,7 +203,17 @@ namespace mymln
alone_letters_mask(lbl) = true;
noise_mask(lbl) = false;
}
-
+ void add_letter_coerce(const Label lbl)
+ {
+
+ letters_mask(lbl) = true;
+ separators_mask(lbl) = false;
+ containers_mask(lbl) = false;
+ Vseparator_mask(lbl) = false;
+ Hseparator_mask(lbl) = false;
+ alone_letters_mask(lbl) = false;
+ noise_mask(lbl) = false;
+ }
void add_letter(const Label lbl)
{
CLet++;
@@ -320,10 +332,18 @@ namespace mymln
inline bool allign_top( const Label Left, const Label Right)
{
- short int allignV = label_allign_(0, Left, Right) * 1.5f;
- return _bboxgp[Left].pcenter()[0] < _bboxgp[Right].pcenter()[0];
+ short int allignV = label_allign_(0, Left, Right);
+ return allignV < label_size_(0, Left) && (_bboxgp[Left].pcenter()[0]) > (_bboxgp[Right].pcenter()[0]);
}
+ inline bool allign_H_Large( const point2d& Left, const point2d& Right)
+ {return allign_H_Large(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_H_Large( const Label Left, const Label Right)
+ {
+ short int allignV = label_allign_(1, Left, Right) * 1.5f;
+ return allignV < label_size_(1, Left);
+ }
inline bool allign_H( const point2d& Left, const point2d& Right)
{return allign_H(img_influ(Left), img_influ(Right));}
--
1.7.2.5
1
0

last-svn-commit-880-g6689819 this new project is able to analyse .and ,
by Raphael Boissel 08 Sep '11
by Raphael Boissel 08 Sep '11
08 Sep '11
---
scribo/sandbox/raphael/code/my/document/clean.hh | 80 ++++++++++-
.../sandbox/raphael/code/my/document/document.hh | 148 ++++++++++++++++++--
scribo/sandbox/raphael/code/my/document/lettre.hh | 17 ---
.../code/my/document/{title.hh => ligne.cc} | 0
scribo/sandbox/raphael/code/test.cc | 10 +-
scribo/sandbox/raphael/code/test.ppm | Bin 0 -> 27000122 bytes
6 files changed, 220 insertions(+), 35 deletions(-)
delete mode 100644 scribo/sandbox/raphael/code/my/document/lettre.hh
rename scribo/sandbox/raphael/code/my/document/{title.hh => ligne.cc} (100%)
create mode 100644 scribo/sandbox/raphael/code/test.ppm
diff --git a/scribo/sandbox/raphael/code/my/document/clean.hh b/scribo/sandbox/raphael/code/my/document/clean.hh
index a421439..66b0c93 100644
--- a/scribo/sandbox/raphael/code/my/document/clean.hh
+++ b/scribo/sandbox/raphael/code/my/document/clean.hh
@@ -58,8 +58,10 @@ namespace mymln
}
template<typename L, typename F, typename D>
- void clean_get_lines(mymln::document::document<L,F,D>& doc)
+ void clean_get_lines(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s)
{
+ image2d<value::rgb8> out;
+ mln::initialize(out, s);
typedef vertex_image<point2d,bool> v_ima_g;
typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
v_ima_g mask = doc.fun_mask_letters();
@@ -69,24 +71,92 @@ namespace mymln
mln_niter_(nbh_t) q(nbh, v);
for_all(v)
{
+
if(doc.contain_letter(v))
{
+ bool All_Alone = true;
doc.jump_to_line(v);
- doc.add_to_line(v);
+ if((!doc.contain_line(v)))
+ {
+ doc.add_to_line(v);
+ doc.add_to_line_self_link(v);
+ }
+
for_all(q)
- {
+ {
+
if((!doc.contain_line(q)))
{
+ // draw::line(out, q,v, mln::literal::blue);
if((doc.allign_V(q,v)))
{
- doc.add_to_line(q);
+ doc.add_to_line_link(v, q);
+ draw::line(out, q,v, mln::literal::magenta);
+ All_Alone = false;
}
}
+ else
+ {
+ if(doc.allign_V(q,v))
+ {
+ doc.add_to_line_link(q, v);
+ draw::line(out, q,v, mln::literal::green);
+ All_Alone = false;
+ }
+ }
+ }
+ if(All_Alone)
+ {
+ doc.add_alone_letter(v);
}
}
+
}
+ doc.cook_lines();
+ io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out);
}
+
+
+ template<typename L, typename F, typename D>
+ void clean_dot_items(mymln::document::document<L,F,D>& doc, std::string dgb_out,image2d<bool> s)
+ {
+ image2d<value::rgb8> out;
+ mln::initialize(out, s);
+ typedef vertex_image<point2d,bool> v_ima_g;
+ typedef p_vertices<mln::util::graph, fun::i2v::array<mln::point2d> > g_vertices_p;
+ v_ima_g mask = doc.fun_mask_alone_letters();
+ mln_piter_(v_ima_g) v(mask.domain());
+ typedef graph_elt_neighborhood_if<mln::util::graph, g_vertices_p, v_ima_g> nbh_t;
+ nbh_t nbh(mask);
+ mln_niter_(nbh_t) q(nbh, v);
+ for_all(v)
+ {
+ if(doc.contain_line(v))
+ {
+ for_all(q)
+ {
+ if(!doc.allign_H(q, v) && doc.allign_base_line(v, q))
+ {
+ draw::line(out, q,v, mln::literal::green);
+ doc.add_to_line_link(v, q);
+ }
+ else if (doc.allign_H(q, v) && doc.allign_top(q, v)) //ORDRE DESPARAMETRE ETRANGE A CHECK
+ {
+ draw::line(out, q,v, mln::literal::magenta);
+ }
+ }
+ }
+ }
+ io::ppm::save(mln::debug::superpose(out, s, literal::white),dgb_out);
+ doc.cook_lines();
+ }
+
+
+ }
+
+
+
}
- }
+
#endif
\ No newline at end of file
diff --git a/scribo/sandbox/raphael/code/my/document/document.hh b/scribo/sandbox/raphael/code/my/document/document.hh
index b203f20..e898111 100644
--- a/scribo/sandbox/raphael/code/my/document/document.hh
+++ b/scribo/sandbox/raphael/code/my/document/document.hh
@@ -44,9 +44,12 @@ namespace mymln
Hseparator_mask = fun::i2v::array<bool>(Areas + 1);
Vseparator_mask = fun::i2v::array<bool>(Areas + 1);
noise_mask = fun::i2v::array<bool>(Areas + 1);
+ alone_letters_mask = fun::i2v::array<bool>(Areas + 1);
lines_mark = mln::util::array<unsigned int>(Areas + 1);
+ lines_mark_link = mln::util::array<unsigned int>(Areas + 1);
lines_mark.fill(0);
+ lines_mark_link.fill(0);
img_influ = ima_influ;
CSep = 0;
CSepH = 0;
@@ -57,9 +60,20 @@ namespace mymln
}
/* OPERATION ON LINES */
+ inline void add_to_line_self_link(const point2d& point)
+ {
+ add_to_line_self_link(img_influ(point));
+ }
inline void add_to_line(const point2d& point)
{ add_to_line(img_influ(point)); }
+
+ inline void add_to_line_link(const point2d& A, const point2d& B)
+ { add_to_line_link(img_influ(A), img_influ(B)); }
+ inline bool same_line(const point2d& A, const point2d& B)
+ { return same_line(img_influ(A), img_influ(B)); }
+ inline bool same_line(const Label A, const Label B)
+ { return lines_mark[A] == lines_mark[B]; }
inline void add_new_line(const point2d& point)
{ add_new_line(img_influ(point)); }
@@ -70,11 +84,59 @@ namespace mymln
{ return contain_line(img_influ(point)); }
inline void add_to_line(const Label lbl)
- { lines_mark[lbl] = CLine; std::cout << "add : " << CLine; }
+ { lines_mark[lbl] = CLine; }
inline void add_new_line(const Label lbl)
{ CLine = NLine; NLine++; }
+ inline void add_to_line_self_link(const Label A)
+ {
+ lines_mark_link[A] = A;
+ }
+ inline void add_to_line_link(const Label A, const Label B)
+ {
+
+ unsigned int Pos = find_line_parent(A);
+ if(lines_mark_link[B] == 0)
+ {
+ if(Pos != B)
+ {
+ if(Pos != 0)
+ {
+ lines_mark_link[B] = Pos;
+ lines_mark_link[A] = Pos;
+ }
+ else
+ {
+ lines_mark_link[A] = B;
+ }
+ }
+ }
+ else
+ {
+ unsigned int PosB = find_line_parent(B);
+ if(PosB == Pos)
+ {
+ lines_mark_link[B] = Pos;
+ lines_mark_link[A] = Pos;
+ }
+ else
+ {
+ lines_mark_link[B] = Pos;
+ lines_mark_link[PosB] = Pos;
+ }
+ }
+
+
+
+ }
+ inline unsigned int find_line_parent(const Label A)
+ {
+ unsigned int Pos = A;
+ while(Pos != lines_mark_link[Pos] && Pos != 0){Pos = lines_mark_link[Pos];}
+ return Pos;
+ }
+
inline void jump_to_line(const Label lbl)
{
if(lines_mark[lbl] != 0)
@@ -99,19 +161,20 @@ namespace mymln
containers_mask(lbl) = false;
Hseparator_mask(lbl) = false;
Vseparator_mask(lbl) = false;
+ alone_letters_mask(lbl) = false;
noise_mask(lbl) = true;
}
void inline add(Label lbl, int link)
{
if (link == 0){add_noise(lbl);}
- else if (link > 40){ add_separator(lbl);}
+ else if (link > 30){ add_separator(lbl);}
else { add_letter(lbl);}
}
void inline invalid_letter(const point2d& point)
{invalid_letter(img_influ(point));}
void invalid_letter(Label lbl)
- {letters_mask(lbl) = true;}
+ {letters_mask(lbl) = false;}
void inline invalid_separator(const point2d& point)
{invalid_separator(img_influ(point));}
void invalid_separator(Label lbl)
@@ -126,6 +189,19 @@ namespace mymln
{containers_mask(lbl) = false;}
void inline add_letter(const point2d& point)
{add_letter(img_influ(point)); }
+ void add_alone_letter(const point2d& point)
+ {add_alone_letter(img_influ(point));}
+ void add_alone_letter(const Label lbl)
+ {
+ letters_mask(lbl) = false;
+ separators_mask(lbl) = false;
+ containers_mask(lbl) = false;
+ Vseparator_mask(lbl) = false;
+ Hseparator_mask(lbl) = false;
+ alone_letters_mask(lbl) = true;
+ noise_mask(lbl) = false;
+ }
+
void add_letter(const Label lbl)
{
CLet++;
@@ -136,6 +212,7 @@ namespace mymln
containers_mask(lbl) = false;
Vseparator_mask(lbl) = false;
Hseparator_mask(lbl) = false;
+ alone_letters_mask(lbl) = false;
noise_mask(lbl) = false;
}
@@ -155,6 +232,7 @@ namespace mymln
letters_mask(lbl) = false;
separators_mask(lbl) = false;
noise_mask(lbl) = false;
+ alone_letters_mask(lbl) = false;
}
else
add_noise(lbl);
@@ -167,7 +245,7 @@ namespace mymln
Hseparator_mask(lbl) = true;
letters_mask(lbl) = false;
separators_mask(lbl) = true;
-
+ alone_letters_mask(lbl) = false;
noise_mask(lbl) = false;
}
void add_Vseparator(const Label lbl)
@@ -178,7 +256,7 @@ namespace mymln
Hseparator_mask(lbl) = false;
letters_mask(lbl) = false;
separators_mask(lbl) = true;
-
+ alone_letters_mask(lbl) = false;
noise_mask(lbl) = false;
}
void inline add_separator(const point2d& point)
@@ -193,6 +271,12 @@ namespace mymln
add_container(lbl);
}
+ bool inline contain_alone_letter(const Label lbl)
+ {return contain_(lbl, alone_letters_mask);}
+
+ bool inline contain_alone_letter(const point2d& point)
+ {return contain_alone_letter(img_influ(point));}
+
bool inline contain_separator(const Label lbl)
{return contain_(lbl, separators_mask);}
@@ -231,21 +315,39 @@ namespace mymln
/* ALLIGN FUNCTION */
+ inline bool allign_top( const point2d& Left, const point2d& Right)
+ {return allign_top(img_influ(Left), img_influ(Right));}
+
+ inline bool allign_top( const Label Left, const Label Right)
+ {
+ short int allignV = label_allign_(0, Left, Right) * 1.5f;
+ return _bboxgp[Left].pcenter()[0] < _bboxgp[Right].pcenter()[0];
+ }
+
+
inline bool allign_H( const point2d& Left, const point2d& Right)
{return allign_H(img_influ(Left), img_influ(Right));}
inline bool allign_H( const Label Left, const Label Right)
{
- return label_allign_(1, Left, Right) < label_size_(1 ,Left);
+ short int allignV = label_allign_(1, Left, Right) * 2;
+ return allignV < label_size_(1, Left) && allignV < label_size_(1, Right);
}
inline bool allign_V( const point2d& Left, const point2d& Right)
{return allign_V(img_influ(Left), img_influ(Right));}
inline bool allign_V( const Label Left, const Label Right)
{
- short int allignV = label_allign_(0, Left, Right) * 4;
+ short int allignV = label_allign_(0, Left, Right) * 2;
return allignV < label_size_(0, Left) && allignV < label_size_(0, Right);
}
+ inline bool allign_base_line(const point2d& Left, const point2d& Right)
+ {return allign_base_line(img_influ(Left), img_influ(Right));}
+ inline bool allign_base_line(const Label Left, const Label Right)
+ {
+ short int allignV = label_allign_(0, Left, Right) * 1.5f;
+ return allignV < label_size_(0, Left) && _bboxgp[Left].pcenter()[0] < _bboxgp[Right].pcenter()[0];
+ }
inline bool allign_Space_Factor(const point2d& Left, const point2d& Right)
{return allign_Space_Factor(img_influ(Left), img_influ(Right));}
@@ -272,6 +374,8 @@ namespace mymln
{ return fun_mask_(separators_mask); }
vertex_image<point2d,bool> fun_mask_containers()
{ return fun_mask_(containers_mask); }
+ vertex_image<point2d,bool> fun_mask_alone_letters()
+ { return fun_mask_(alone_letters_mask); }
vertex_image<point2d,bool> fun_mask_all()
{
typedef vertex_image<point2d,bool> v_ima_g;
@@ -288,6 +392,8 @@ namespace mymln
{ return image_mask_(letters_mask); }
image2d<bool> image_mask_noise()
{ return image_mask_(noise_mask); }
+ image2d<bool> image_mask_alone_letters()
+ { return image_mask_(alone_letters_mask); }
mln::util::array<box2d> bbox_mask_containers()
{ return bbox_mask_(containers_mask); }
@@ -298,7 +404,7 @@ namespace mymln
mln::util::array<box2d> bbox_mask_noise()
{ return bbox_mask_(noise_mask); }
- mln::util::array<box2d> bbox_enlarge_mask_containers(short int x, short int y)
+ mln::util::array<box2d> bbox_enlarge_mask_containers(short int x, short int y)
{ return bbox_mask_enlarge_(containers_mask, x, y); }
mln::util::array<box2d> bbox_enlarge_mask_separators(short int x, short int y)
{ return bbox_mask_enlarge_(separators_mask, x, y); }
@@ -307,7 +413,16 @@ namespace mymln
mln::util::array<box2d> bbox_enlarge_mask_noise(short int x, short int y)
{ return bbox_mask_enlarge_(noise_mask, x, y); }
+ unsigned int get_parent_line(point2d point)
+ { return lines_mark[img_influ(point)]; }
+ unsigned int get_parent_line(Label L)
+ { return lines_mark[L]; }
+
+ void cook_lines()
+ {
+ propage_line_link();
+ }
/*image_if<image2d<Label> masked_image_letters()
{return masked_image_(letters_mask); }
@@ -315,6 +430,17 @@ namespace mymln
{return masked_image_(letters_mask); }*/
private:
+ // PRIVATE FUNCTIONS ON LINES
+ inline void propage_line_link()
+ {
+ for(unsigned int N = 1; N < lines_mark_link.size(); N++)
+ {
+ unsigned int Pos = N;
+ while(Pos != lines_mark_link[Pos] && Pos != 0){Pos = lines_mark_link[Pos]; }
+ lines_mark[N] = lines_mark[Pos];
+ }
+ }
+
// GENERIC CONTAIN TEST
inline bool contain_(const Label& lbl, const fun::i2v::array<bool>& array)
{
@@ -411,11 +537,15 @@ namespace mymln
fun::i2v::array<bool> Vseparator_mask;
fun::i2v::array<bool> separators_mask;
fun::i2v::array<bool> letters_mask;
+ fun::i2v::array<bool> alone_letters_mask;
fun::i2v::array<bool> containers_mask;
fun::i2v::array<bool> noise_mask;
unsigned int CLine;
unsigned int NLine;
- mln::util::array<unsigned int> lines_mark;
+
+ mln::util::array<Label> lines_start;
+ mln::util::array<unsigned int> lines_mark;
+ mln::util::array<unsigned int> lines_mark_link;
unsigned int CLet ;
unsigned int CSep ;
unsigned int CSepH ;
diff --git a/scribo/sandbox/raphael/code/my/document/lettre.hh b/scribo/sandbox/raphael/code/my/document/lettre.hh
deleted file mode 100644
index 98a1725..0000000
--- a/scribo/sandbox/raphael/code/my/document/lettre.hh
+++ /dev/null
@@ -1,17 +0,0 @@
-class line
-{
- public:
- line(){}
- void add(lettre& ltr)
- {lettres.append(ltr);}
- private:
- mln::util::array<vbbox> lettres;
- std::string name;}
-class lettre
-{
- public:
- letter(){}
- private:
- std::string name;
-
-}
\ No newline at end of file
diff --git a/scribo/sandbox/raphael/code/my/document/title.hh b/scribo/sandbox/raphael/code/my/document/ligne.cc
similarity index 100%
rename from scribo/sandbox/raphael/code/my/document/title.hh
rename to scribo/sandbox/raphael/code/my/document/ligne.cc
diff --git a/scribo/sandbox/raphael/code/test.cc b/scribo/sandbox/raphael/code/test.cc
index 9891667..58edba0 100644
--- a/scribo/sandbox/raphael/code/test.cc
+++ b/scribo/sandbox/raphael/code/test.cc
@@ -62,7 +62,7 @@ void Process(std::string File, std::string Dir)
uint16 areas_detected;
timer.start();
- image2d<uint16> ima_blob = labeling::blobs(ima, c4(), areas_detected);
+ image2d<uint16> ima_blob = labeling::blobs(ima, c8(), areas_detected);
std::cout << "CREATE BLOBS : " << timer.stop() << endl;
timer.restart();
timer.start();
@@ -70,8 +70,8 @@ void Process(std::string File, std::string Dir)
std::cout << "CREATE INFLUENCE ZONE GEODESIC : " << timer.stop() << endl;
timer.restart();
timer.start();
- util::graph grph = make::influence_zone_adjacency_graph(ima_influ, c4(), areas_detected);
-
+ util::graph grph = make::influence_zone_adjacency_graph(ima_influ, c8(), areas_detected);
+ // mymln::debug::save_label_image(ima_influ, Dir + "/influ_" + File);
std::cout << "CREATE GRAPH : " << timer.stop() << endl;
@@ -116,12 +116,14 @@ void Process(std::string File, std::string Dir)
//mymln::debug::save_label_image(ima_influ, "influ_" + File);
mymln::document::clean_containers_items(doc);
mymln::document::clean_letters_items(doc);
- mymln::document::clean_get_lines(doc);
+ mymln::document::clean_get_lines(doc, Dir + "/" + "line_graph_" + File, doc.image_mask_letters());
+ mymln::document::clean_dot_items(doc, Dir + "/" + "dot_graph_" + File, doc.image_mask_letters());
doc.stat();
std::cout << "WORK ON GRAPH : " << timer.stop() << endl;
//io::ppm::save(ima_influ, "separator.ppm");
//io::pbm::save(doc.image_mask_separators(),"separators");
io::pbm::save(doc.image_mask_letters(),Dir + "/" + "letters_" + File);
+ io::pbm::save(doc.image_mask_alone_letters(),Dir + "/" + "letters_alone_" + File);
io::pbm::save(doc.image_mask_separators(),Dir + "/" + "separators_" + File);
io::pbm::save(doc.image_mask_containers(),Dir + "/" + "containers_" + File);
io::pbm::save(doc.image_mask_noise(),Dir + "/" + "noise_" + File);
diff --git a/scribo/sandbox/raphael/code/test.ppm b/scribo/sandbox/raphael/code/test.ppm
new file mode 100644
index 0000000000000000000000000000000000000000..c5960437385add981741064c2f4e1636f3dccc77
GIT binary patch
literal 27000122
zcmeF)-HIK@5dh%5)>ACxCb^N71m_}m2AdFYz?i&%9Br^ck%S@we)^L!15MHMbLPx%
zPtO;YP^YK6y6WrMU2SF{Km6s@@1Fnm^5Nz4+b=Kgo`3rF`5(W$fBEqC`H!#PJU{>Z
z<;$nPe)ZMI-$q`)|NQRd^~<MUzPx??@6XMu?|%6EKfihY@#ViSZ$JO*=jXQ{-aUW&
z^1qk&A3y!)<-?cf@8ACPu}S*z^RLgp|Nh5szx%_hKfihN=J~h(diAHTzkc=PKLiL6
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF>??44x}EWB
zUnIK`AV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5;&6$EZix5B?xXi^FS1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkLHV1e7yZT45eZ7J=#0<-VuwH98NUgrb|5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0Rl%0One9C=rZk3fB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZU=M-b*J<|H*d7E35FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXFj0*Jre~VmUa8%{6iyO%w)=y{S
z-Ud6f`Um3L{u!%|KDu3;pW;<38cde9t1=jDyWR^YJ;%ETa?-xCvhTKO0s#U92oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5Ev229zzd(j2XIf;?)`PNW$)=-jNxb&Rf#m
zeO?}`2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7$`t6nA98o3w~@Q6
zvI)IOb{ou!X+G|@wT%c6AV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5;d
z=)POhJ5p>HvD#vbR2TsQ1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
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
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXL5x70w&ii$Um`w=~*hgUDkEVT!v<m?O1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZV1~fZdl55ISwdjwcA7rUkN^P!1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oN~6Kzd2wkS@~hy}?jP+2o;V#tEz|P|l54P9^IK%SM0z0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t8kR$R4jZA6HD?o2t8G9O+&1=-}!JA1%QAYYN00uZg!t
zh}&g*#Y=6RP4JNb0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5(DFR;(k^X@Kj
zWM|~KbrbKryX~$lu*JO>b3SAn7y3qch|XjJ1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oN}zKzc;JQQ0Yf8*H@8DrvJ)3;(!E%UdT|Xt;HG<>XILGfG;rws*VL6ZY=X
z9ZdU<1l?6eh6FGU$rvX<fB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72<$A7
zy~r_T_iV}jAEy+#=bRCNJ<G5c0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7dX6v$rch?m3!2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7&MV->
znDd^U$_Wr4K!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1nvr?*JJL^G=TsC
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
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
z0RjXF5FkK+009Cw3-}Yp&EV1zAV7cs0RjXz3Y0&mZ9LfRwz4B%p6T{xDU1LC0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK%lKa{^gmrkwqgwfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72s9M<`}cS3U&9)NB5<3)_NV=}k|ZKPfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C7_6ltO0zkfV%92ml#(RsgpTOt>Yp;cJz4K1Xf{(3q
z-lp;h5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7dXDNz22yxe1j009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZp!|P*N-HnGNxfV&xS!~vM#`}Fw<aTjiv-HYd*jL#^=wIfMcy+pN38iwzs?dM
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNCfO@S?c8|{40H*Z{%uD9RWCg~mzvc2EM
zosZYAfFO|Hrf_NdG!N2hygmCpJGb<8PbIPtAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5(b5eVP+*mA@k0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0z(Mo-;EifU_}xjK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBn=
zE|9(+v;Byj1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
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
z0RjXF5C{T`-&F{EObHMmK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PHuR
zp#1X8E8El*0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7csfgq57b0%Ce
zB|v}x0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7dX
zbAi8qf9YTI-~tlpQy@L_KL>r*uPOor2oTsS@be9Sal_s$_7fmLfB*pk1PBlyK!5-N
z0t5&UAV7e?paSVr;z8?IHUR>Q0_mll4;FX!vzV7Ujr%D~B_9z8Phe&G5fE(>Ah0M<
zd2`r%X)*qR#l3ke`wwKl`beePwM$o*B!15VYfr_r-gDV%BS3%v0RjXF5FkK+009C7
z2oNAZ;1PlFiQ*$QNJ@afF@f;<9pw)Jq3qCmel=V&JtL4{&jfLn009DD5J+#B`QQtU
z>+wzjPuE`UT&x^dqLrJcmCAmX2oNAZfB*pk1PBlyK!5-N0t5&U_?kfY6!D7oZ%A=P
z*<wB}5T2YceZ0I&3kc1o>7_|q1y9wc!S=}M$UNA7u(C77tn7KsrPS;+NKGv+rmF@7
z2oU&`K>n7P#-9?<?9~G4xmp}toqeqMi$rO$Z7(ToK4_alGy((&5FkK+009C72oNAZ
zfB*pk1O^qzKQ^4k2f7Fm${=CGffSCsMj$*4<+RdixjC#<&h~RD)SRaMRJf&*RQ5dB
za%AJ4Jo3gPm2G*nX<XSk)}_3!pOx?0{4<&j1PBo5Ss;JMOXHpkR@-m_>AA`Wsf)Cj
zRz5gL2#bTqLHexfaTWy-AV7cs0RjXF5FkK+009C72oU(VK>FnHr^EK0Ayhgz55m<j
z4V$l<hP<YS1?u-`4x9EI&a!wgh21q+4ApiqucvL~o1>*h?#bIcT?#l4es&S|pPc?o
zSKp9lukWl}&4WBXuGHxgfi;0kpWC&h*R5aL&TzpGJLjDq4&oqzAdo*-`8aHwruD1k
z{u@^El8%jc6&X_OI@`(S(8AiZlWLVgfB*pk1PBlyK!5-N0t5&UAV7e?3k23ahn&}M
zYp`BMx_VnZ#}YkKXG%H`j#d8PsZjsg^uY?HzDQv0UZ?eo^6m{g*R%Ij|NE2k;-LTf
zRhSE;o0u;e6CglfEP?b^HVw8^KJVYM^M*Zpi@%|y_oc{@%W)6=mR0>+>7i^j5FkK+
z009C72oNAZfB*pk1PBlyK%j|0_(ZfxOhE_`AV7dXUBG{R>OQU#AV8p%fcM*0lHw2`
zK!5-N0t5&UAV7cs0RjXF5FkK+z$*pv57J-Rpr!~AAV8o)f&9Nd)40P5l|+C5fq?|_
zH`Rg4Rw@Ak1PBlyK!5-N0t5&UAV7cs0RjXF5O`J~|A5_JEuXy?vJ)Uc;8Ozr1N5oe
ztyuyDS_z~#&sG7&AwYlt0RjXF5FkK+009C72oNAZfB*pkUl#De`<L&&-U$#O@SuSI
z06mB=H30$y2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
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
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2wWlX_wR4<-xayUBtU=w0RjXF5FkK+009C7ehMu9p1!#FGt|pAEFwIz_%c}S5FkK+
z009C7dK0+lXT09pRL|oATb{JXi&Ovs0t5(b7ufQ~KJD2a(9Zq^!cFhLU=<P|K!5-N
z0t5&UAV7e?8G-O?V10Tf(amSq8o9X)=?D-YK!5-N0t8+ru=aE2H`iZwbFXWs$>VWd
zc_I@aK;VM{m3QV3YJ8{Vwfp`Z0i6;cK!5-N0t5&UAV7e?UV-qt<lf`g?GJ@b)9Z4H
zOyDVj@;UdYKXorI%Ig+i1S>270=onj-;2`Xu243AK_ERF^}!b?Zs@U&JYT(`jL)X1
z`+t^2;{^H_SbOpIU%3j;2)OTO^twG;-qvnQRTu#R1PBlyK!5-N0xuTGe>b_a%{=cs
zzB9XA1g;Y(pY42QF>k)X%VCkItHttu<tvM&<{PH*;vS0x2oTsM5Z+kAv>qyK4%7Ns
zSHCO}9+k@U%Sw9hO&~m|_42~z%CsKGRRRQ#33$;Ra~u7X`#$;|4E0xTXt)#(ni3#D
zfB*pk1PBlyK;S8XOMhFrH270u@_tqzJkR;GiAf%C8aIh4$aaC?AEw*mtnF+ba4nH_
z0tAK@2=5hPdR=QFQJ7wrSL8PdgvVxW`lgok(v?8|$X!%ep5pNMKy8O}9XNQPJVyxZ
z6$nq}-sAQUBoOX(J{_nFrOpER?JLJYDc=w-nGzsCfB*pk1PBoLnn3>J@u$Ya-RN|8
z&Q#tc$e99$IGdCV&Is(i*LUXHTU*$Frqujw2wR`#2h+H6B<-07m2KBu$_v<A!<n<^
zJ4)Hlhw3~+>a@wA^JdHP_I6!H=y_#tcMbP<$kM924qKZ_YSLYwt*PpMfhLbr9_0QO
zWb8^HJq%q{HEuD<^U}e%K95&^?7lo+_JIOIrw1ZjdL)$h?&&VcK(XuW<C|0Qk5|$|
z0ZAhbwp6ui^Ok`25FkK+009C72oNAZfB*pk1fCK|A9Pd(Q*Db^Th+W6d|GT3UmODW
z2zZk3ah8Pu0RjXF5FkKc2mwDH4{@8mR%HHIeyw-?5+Fc;009C72oNAZfB*pk1PE*w
z$UjH=IbI7}Ik<MjI)QfxtUdhi=uQ^|2oNAZfB*pkUlv&VS$A6hGK=1a5C~825H%~3
z009C72oNAZfB*pk1PBlyK%gIi@cB|X?Wa_g5a>jpe3{HEos_2x0t5&UAV7cs0Rl<D
z&#sBW;H?7rL;ltt^+kXH0RjXF5FkK+009C72oNAZfB=CG1@ez)r*VfBDv1CA0t5&U
zAVA>t0)8lc{VmpDMIb%@l|3#IAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
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
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
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
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBl~A@KL_
zZ}H!WRJITxK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0tBMK-@m{3FJ2N8AV6Rwf%smxCmyMHy%0Dpu;<0Hz2@}MHWDB}fB*pk
z1PBlyK!5-N0t5&U*cM1XOl>c7l>h+(1PC+}NPnB=pxL<&S`^4`M;b0JHc5a0ft>>B
z%_IdoH}=0Qb+kX|zbO?GAV7cs0RjXF5FkK+z!ib?4e?46dkGLAK!5;&(*o&l@f@7a
z^P-KZ<rmegR00GB5b)-6=q4tvDaba)OXbyUvEfmHjJF&fO=vxV9t6rKd7kN^whz{@
zcsojmxU9T7_RN=iAN$VgjsO7y1PBlyK!5-N0+~Sk0yxFlRYL*<2oNAZpo&2D2lwND
zb7@q0s3ajkU_&6j&!lCGlj-W0gL5)**A#ylaHIE3X=AvN#3ceR638C%waT+)<#27I
z`8@)q=RC7#Z?+~&m0cZs7<(VPQ{53DK!5-N0t5&UAV7dX{0?~fOEg9T1PBlyKp^{*
z3S?U#<C=!s>s=*4fIuk_-$}}=+03EE+1@dR)dgb0DIP;<t&6PLjp14b^8|(w$e#aN
zePwCOVXcGSo~M+VX6|b$9(Ug<9cKP);~m}$B@rM%fB*pk1PBlyK%k94{3f{nyLPtg
z)x$Q<P9g9*fzz++J32jG%+8H>)ZAyzJs^En-cMD@u%D7%T1k>j!Alz{%T65~3d%g6
zojK%IckyS<du}}5;?s4;B=3sPwLJHDZtwnGT}kdQJ6pNdMYhb4zy}4=tK+HOQvr7b
zPc^mk+}QHYEq5%7Wt@)hDD3W>S+jQ^cOrjQ;i$tCGTm-jyGPv?e5kO+?ha+Jm;eC+
z1PBlyK!89G0*jw)%gG)}{df)KO*uOAIN;HO>#l#i{T>R~COuu@cG`1SPZzUu<GHHt
z*tN6ZTbCW`>yAne6>xg-9hJ*@QDE_IUd&m2`(lyV<het$BvppzDrvB5ySoMjtR2y9
zVQU4CJwM-$v3t}V0RjXF5FpUGz~bk_W;H*1db2hc4_fT~rIU*djy+l4sj>Uj9RUIa
z2oNAZfB*pkFA~VUu-saCcGf(+^+d@D5NIP%zPeAGn<Y7s!Ipsqvd3c@-qdV)(BjNZ
zr%OwK009C72oNAZfWTV>?)au~N6xo+s*?Z#0t5&UAV7cs0RjXFJSC8QA3s+{mLv_&
zWwVO_fj0`I7k&z|F4BAovIT|&wgu9Y6N3|5;`S-t&fqEm0t5&UAV7cs0RjXz1hVfJ
z^Kfzf{*{Z{O%fnLfB*pk1PBlyK!5-N0yha{-`UGkvIQGo|I58*2oU&`K=yX=sopi)
zOdxyAvSG6_97KQs0RjXF5FkK+0D&ZseKDDb>8gML0RjXF5FkK+009C72oUI5p!{Cn
zbG2$CK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
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
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
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
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
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
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PCk&
z{Qdh|{I|H+Bmn{h2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
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
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72#hcA_wO(L8NXT;5+Fc;009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5NH=j|1oA7wC}Q#009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
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
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5*BXV+eL-UeX+
zfbRWY`dg()$buv#K**&>+7E{qV-8)GRwF=w009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAJO5pF`U;HzwtU3e;5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjZ>
zEa3ml-1&6$Mt}eT0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
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
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfWUut?RM8u6$$|8y#Gs|F)<-Ks8kUVbtUry5cbEi_O!j1009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ;3EQm|NfT$KGJ)+%_YmdE9GikB`}D<
zy^qOi_CaKnL4ZI9f$UA7Lq;hG5Fn7f^DL)`nh0dDO=1c{fWS$C?7^&?o~*%f0t5&U
zAV7cs0RjXF5FkK+Kr4a$KW?<jC=LMvPZU_bS3I!`H4_*_VEI6mR|YA2<T46?BbTi<
z0t5(rSzzm}`^zSJC(v17>oHuecP>mi0t5&UAV7cs0RjXX3e2DI8wM1L009D@5?KCD
zl2$(DpjiTS0*`xMQo-|}u4|_Vd`BRAWXjW{EahnDuO6-ES^Kwqp4EkF2@oLg4uSZd
z{Em)#b`kaBxMvM=Jxd_IPFBayYDcvM2oNAZfB*pk1PGiFh+hiM#Br7Y0RjY)KzwVR
z#%bMv0D+~zu+Ph|g)I%O5a=n8JsMlno+ZiEL?FABO=1c{fB*pk1X>AXf2XGDR^;W*
zY-Q`9^>+wlw>wT(8;l#K@#-Fn1PBlyK!5-N0t5)WTOfTecz2t+BS3&aXMyzYIuAN$
zmyW=*1nzoXvb@vuS#GK&&`@CcIIONT%qSEA0t5&UAV44!$Uc5#SI<nd$jj-O;Ldgv
zSl+mK<zxX_*pty5CqRGz0RjXF5FkL{SpwNNf=j2j%N*+N_G%SC;Bf*TvE?nxOqLr~
zSF%&tboGeED3FOAn#MTSjmsrnmv`{U8B42bv#`^&Rpj@@Sz2ways!5cceHgA=k?fl
z+!@!62@vQe5Ff)m<8FmXbi2Tw*TdGH+lyBKflOfeTFo}}oQ_b;vWEUEJ<a#z$^`Zt
zIlm_*Js;|1gjC6%!O2`lkMAjI=bodf?I%Eh009C72oNCfT!Eb*lCRtLT)Lf=x1!sb
z?z(NQ8d;5VUD-z?ua<Xo@o3UR`!6l#Xz;E5hdR1_^Hvwx`t5aoxq$3mTr~Z%@c!Nt
z{{ACz=gH$S)W^q3G7Tn>G`?c+aqyGvFYn0Dfa%E3oi_XwNSKEPKf}IeL&h>-U*lJp
zp=AY^r`cK4{sQG2RKD83+Sg=Ug?&wT&uS#yi)WRsS^@+J5FkK+009C72oNAZU^IdB
zBf~ssRo+EmSIf(CwQXcI<I5IT0b4D;%t|{12oNAZfB=F00u>*q_6N6f5-13F^T}$+
z@|Le=n@tH2xK|*1VAFK9s&q9CR<~IsK!5-N0t5&UAV7cs0RjXF5Ewxq{f09S`jpfp
zX%-|+`?Men0RjXF5FkK+009C|5lCMamV=WmWC0IFJ9G9>BAW>iC<|l{<2)@N`FV92
z^XCy82oNAZfB*pk1PBlyK!5-N0t7A+$bPH2D9fR+KTFCs%+o_DY$iZ}009C72oNAZ
zfWT5<^}9yl8%MT(8L)cgy2#ZfIY{7T0@+iRrhVG%oUTt(vJfCZfB*pk1PBlyK!5-N
z0t7}Dc+d|rsnj$W8CGos2oNAZfB*pk1PHuRAblT+gKnLsq}?(~MBtSI=~0>nuWV3L
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
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
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBngOW^O{-|D}+>XDZK0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
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
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyuoU?F_qY0Qxzh>(0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
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
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB=D=0)PMh
zw*KvmU>gAf1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNA}M&R$?U(bJMN_Cb10RjXF5FkK+009C72oNAZfB*pk1PJsL
z*z@~&&wAt{K;VpkC;E(@vjhkb7)oHzTl&3whT>8T0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0xuKz`QJld)~|L55FkK+009CY6j*-b`yhgr2@oJafB*pk1PBlqQy}}o
zGG>vgB0zuu0RjXF5FkK+0D%Vyq;HxJs`+TCU+D3uiTwl!5FkLHAdvoaZVd`&J6uXt
zb;u<J0RjXF5FkK+009D>1=0upd5~q#u1?czgDC+51PBlyK!5-N0t5&U$ON+QlG)XF
zOux|MJMNS&2oNAZ;GqK9pW4-Fht`&PJ0z8Y009C72oNAZfB=E!0`ar`(ctmyJU$x1
zegXst5FkK+009C72oQLgK=xJfW!<HAVw-8v;AH~wE-%L~YgRko5m>&M&#!z(Z`tXV
z-g2jvs|B|1MOwe2fE0WlT#-Ud0t5&UAV7cs0RkfkWFLKxPMf!Iw18}X+j_F#71Or$
zbcj~b<I9e8K)xbH^<AharaISjup-_0BNYXoPbvZd0%d`U2QwWhM;_#As`k)ekm9p4
zVhh=&d#ACmdEB#}W%i3!dNx&^>!RM5VXG_r)WN0O>dHkXtGRAptZp_{ULB$T!Blg_
zpntV8{uHRVkNuDQ?BcEsXDIHf`6+qN*j{n=3b(d(UQuEHm~BmtM(f}2BQh=-o0pwZ
zG><GG0RjXF5FkK+009C72oNAZfB*pk1jZLgzmdkl6=lcxTjMM8ib;R~0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV6SCVD<lF+1fm<ukOzl3&&j|K!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyFpfa>|GmWNI7O<2009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+0D;d6{QdiD`0ulf8Ye)2009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
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
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
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
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72n-?c_wR4--w^dHk^lh$1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNBU2>5>?5)e}Y1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009D13jF>13;(8UP*Vg55FkK+009C72oNAZfB*pk1lkCM-`NfZ
zZ7Pw4009C72oNApOJMK8rdE7$2oNAZfWV6a{>;6IFEs%I1PBlyK!5-N0t5&UAV7dX
zhXQ-Qm~F0iSih185FkK+009D<0-Fyrn~R&rEfOF=fB=EH1vdXCE{k(_tvdn)2oNAZ
zfB*pk1PBlyK!5;&F9_`Y_O-5mK|qfL2oNAZfWWK*2hTaPwyZA#1nvkNd}zck-AUnW
z1A+Krg>i$tA4w5Nm%&F`)+PZ01PBlyK!5-N0t5&UAV7e?a02nKSowIkb`(s2009C7
z2oTs4NFH_ewpk}Y;Nt?xXGNG6vV{HRgTlzRT@y$yL=q%<HJ>K?O$iVnK!5-N0t5&U
zAV7cs0RjXF5a?eZ|Di8l>A!vz5+Fc;009C7E(>_<xlC8_V0;ylam6e`T@XkvM?Sp}
zbI>Dk@9kTNvzLt9SJ*P+roh<(;vkpLt_R~#@%U8O_~8BVsnj+Tm{s8ZTPcn(tCGG5
z5FkK+009C7UKEHQI2(^ob=|nO5!0RW>~nL@eq3j~|9EHhSL4)Y$JL8z7VvDRZ|!de
z5+}OTY#e9SaqxM)!BEN2gVz~*E8yDI?5&Hno@>2Kd8)w$>c{Ouv;7p`rjiRp4UV+w
zea+IKojAqi*5V+?<B;NbTW_z1vP%ZN6~EN8S9XV`zFtydwOLQtv-#?^#Sn8H{0x%p
z57VCq?{5gXP7Uto9U{Uhli@bsxdfrvJ3$K1hFm3s!kC5IN-`#U3L_7?Eos(tQ{csm
zyIIfu#TPr0ng9U;1PBlyK!5-N0;3C*d?{Od%y(AlJrBFCR0%E!fe#AA@2L;AuVn%R
z2oNAZU?ze1!6qNi)Tv(b>l;=UoG@Mor?~E%J(b920t5&UAV7cs0RjXF5FkK+009C7
zrV&VfS3I8Xb-j0LZ@+Z{1nvtY@4Nc}MIb<c009C72=pV6JnAIVe(F@oO@ZXf=F=p8
zvLSiZlmGz&1PBlyK!5-N0t5&UAV7cs0RmM7lAj{;X_YL35Fl_zAbw-siQ_B*0t5&U
zAV8phf%wTMANOCs3QGj?E4!?e9JGf30RjXF5FkK+009C72oNAZfB*pk1PBoLltB1z
z3ZLp)vjhkbAV7csfmI+p3#|hz1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
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
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
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
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PC+``1|*F;a`Koq#!_m009C72$Tz4c%C_Rq`Z<(
z?F@#x{*-`b2@oJafB*pk1PBlyK!5-N0t8}#@GIHDAl`3GfB*pkBMKaR$RE5kVy9{*
z&_>|kjT2sKQ;94D2oPu~5I*AW51uajRE19$^H%&E;jKzq=KW^ZErsPGK!5-N0t5&U
zAV7cs0RjXFbS{wpK$NU>Ucd4P5FkK+009Dx1(JuQ&1vJ3q$5Cp0D(sZHb3ga;-jf6
z1`h>?LB-%bhYJ0!gPu!O8vz0Y2oNAZfB*pk1PBlyK!Ct20?98($@G<yBqczAKo0`R
z=V3hUp*%GZAV8phf%ubi8TVhX3JDPSjzIDOwK?6>NH*_nYro!YVQnaq_Sb2f)CXBM
zt9oMbpaw6U5;(Xzr{YY!`G6>XX<`Ab5g<T-009C72oNAZfWY(u@i*Mf@$>>3BtYOh
z0?DV`LF38J&FR5$FA*R>U{-<T^Dt@i_|;^yDFFfmE(;`|Hk;GS!SjPj{CvYhD@opE
z`cR^w!{$o)%Fqpl;`6@Nm9W8J5!h3T*AJlLZOiyz=g==DZSGBf_PBR2U;i1(1_A^K
z5FkK+009C72oNC9n?U~cHeTtiTJ;2h_%dA{hiC@V2!xwqnvQ-p5?WpcKR2J+5J%n{
zp9(nl<~^cy{h{6ul0KACSOQZD#BZfj4aNtT@u{;m6Cm(ef#joObNVh$Qc}fYo{L<u
z$Pq&&u$$8n`&w(>Z0FkIqX;D>oho26;Hd~dHzz56?$0+Q5ss(%@yjbEiQ+w%6BQne
zbDbI&#<z_C0RjXF5FkK+009C72s9Sh`+D2Bj0@@ZDt~VMLXn$C3M<?^dv>ufSNXQH
z1=znSunE4o^I$Ova<H?*my+U-r|;IkS=+lMJ(PX3(>WF&5)+m{EYRT15~nL1hpGzq
z|J)V=jyw3-W33H0iE5ScR-BvdJ6<mE)+LVf=GDfp4lxcbT(0(hgv+TN3<BXQgh6=e
zBZJWRLxTwzFUYj%IxnnE-UeCn)~w_L4KBoSioB##E62gTN`L?X0t5&UAV7csfw2VQ
zFGOQiu37?v3dC=^gYjN>$&tNn)(H?GK!Ct-0?FUF&FSk+B~`s%j{*n~AV7cs0RjY?
z2_%n#`LtOj$BFX7mX+fpUL`<)009C72oNAZfWT)3lJ8KTb<jA09t4v2W8t)i%GE%C
z009C7o)akfgIG6vlCf@Z(FhPAK!5-N0t99fNFE*YY4v9F6w6BWECLcBK!5-N0t5&U
zAVA<d0`d2(?{uwG0>cT!Z`Cj!t_uYdAV7csfm#CLui?SqAXjqgV5gS|5FkK+009C7
z2%Hi~9yRmnL9~4HvU0HBO9TiIAV7cs0RjXF5Fl_<Abb(K8OLz~1PBlyK!5-N0<Q~%
zhueJcdTk0IK!5-N0t5&U_^d$wbQ)GZYoc)i1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk
z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs
z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ
zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U
zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7
z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N
z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+
z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly
zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF
z5FkL{e>-#_00000Ajsc(kP9IL1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
l3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*U9J`nIZdj0?a
literal 0
HcmV?d00001
--
1.7.2.5
1
0

08 Sep '11
---
milena/mln/make/influence_zone_adjacency_graph.hh | 108 ++++++++++++++++++-
.../sandbox/raphael/code/my/document/document.hh | 5 +-
2 files changed, 105 insertions(+), 8 deletions(-)
diff --git a/milena/mln/make/influence_zone_adjacency_graph.hh b/milena/mln/make/influence_zone_adjacency_graph.hh
index 4999dde..3938f42 100644
--- a/milena/mln/make/influence_zone_adjacency_graph.hh
+++ b/milena/mln/make/influence_zone_adjacency_graph.hh
@@ -115,7 +115,10 @@ namespace mln
util::adjacency_matrix<> adj(nlabels.next());
extension::adjust_fill(iz, nbh, 0u);
-
+
+ util::graph g;
+ g.add_vertices(nlabels.next());
+
typedef mln_value(I) L;
mln_piter(I) p(iz.domain());
mln_niter(N) n(nbh, p);
@@ -127,26 +130,91 @@ namespace mln
if (iz.domain().has(n))
{
L l2 = iz(n);
- if (iz(n) != iz((p)))
+ if (l1 != l2 && !adj.are_adjacent(l1, l2))
+ {
adj.add(l1, l2);
+ adj.add(l2, l1);
+ g.add_edge(l1, l2);
+ }
}
}
}
// Construct graph.
+ // SLOW
+ /* for (unsigned i = 0; i < nlabels.next(); ++i)
+ for (unsigned j = 0; j < i; ++j)
+ if (adj.are_adjacent(i, j))
+ g.add_edge(i, j); */
+ trace::exiting("make::impl::generic::influence_zone_adjacency_graph");
+ return g;
+ }
+
+ /// Fastest implementation of make::influence_zone_adjacency_graph.
+ ///
+ /// \param[in] iz_ influence zone image.
+ /// \param[in] nbh_ A neighborhood.
+ /// \param[in] nlabels number of influence zone in \p iz.
+ ///
+ /// \return util::graph Graph based on the adjacency of the influence zones.
+ //
+ template <typename I, typename N>
+ util::graph
+ influence_zone_adjacency_graph_fastest(const Image<I>& iz_,
+ const Neighborhood<N>& nbh_,
+ const mln_value(I)& nlabels)
+ {
+ trace::entering("make::impl::generic::influence_zone_adjacency_graph_fastest");
+
+ internal::influence_zone_adjacency_graph_tests(iz_, nbh_, nlabels);
+ const I& iz = exact(iz_);
+ const N& nbh = exact(nbh_);
util::graph g;
g.add_vertices(nlabels.next());
+ util::adjacency_matrix<> adj(nlabels.next());
+ extension::adjust_fill(iz, nbh, 0u);
+ typedef mln_value(I) L;
+ mln_pixter(const I) p(iz);
+ //mln_piter(I) p(iz.domain());
+ mln_nixter(const I, N) n(p, nbh);
+ //mln_niter(N) n(nbh, p);
+ for_all(p)
+ {
+ L l1 = p.val();
+ for_all(n)
+ {
+
+ L l2 = n.val();
+ if (n.offset() != p.offset())
+ {
+ if(l1 != l2 && !adj.are_adjacent(l1, l2))
+ {
+ if(l2 > 0 )
+ {
+ adj.add(l1, l2);
+ adj.add(l2, l1);
+ g.add_edge(l1, l2);
+ }
+ }
+
+ }
+
+ }
+ }
+ // Construct graph.
+/*
for (unsigned i = 0; i < nlabels.next(); ++i)
for (unsigned j = 0; j < i; ++j)
if (adj.are_adjacent(i, j))
g.add_edge(i, j);
-
- trace::exiting("make::impl::generic::influence_zone_adjacency_graph");
+*/
+ trace::exiting("make::impl::generic::influence_zone_adjacency_graph_fastest");
return g;
}
-
+
} // end of namespace mln::make::impl::generic
+
} // end of namespace mln::make::impl
@@ -154,13 +222,41 @@ namespace mln
namespace internal
{
+ template <typename I, typename N>
+ inline
+ util::graph
+ influence_zone_adjacency_graph_dispatch(metal::false_,
+ const Image<I>& iz,
+ const Neighborhood<N>& nbh,
+ const mln_value(I)& nlabels)
+ {
+ return make::impl::generic::influence_zone_adjacency_graph(iz, nbh, nlabels);
+ }
+
+ template <typename I, typename N>
+ inline
+ util::graph
+ influence_zone_adjacency_graph_dispatch(metal::true_,
+ const Image<I>& iz,
+ const Neighborhood<N>& nbh,
+ const mln_value(I)& nlabels)
+ {
+ return make::impl::generic::influence_zone_adjacency_graph_fastest(iz, nbh, nlabels);
+ }
+
template <typename I, typename N>
+ inline
util::graph
influence_zone_adjacency_graph_dispatch(const Image<I>& iz,
const Neighborhood<N>& nbh,
const mln_value(I)& nlabels)
{
- return make::impl::generic::influence_zone_adjacency_graph(iz, nbh, nlabels);
+ enum {
+ test = mlc_equal(mln_trait_image_speed(I),
+ trait::image::speed::fastest)::value
+ };
+ return make::internal::influence_zone_adjacency_graph_dispatch(metal::bool_<test>(),
+ iz, nbh, nlabels);
}
} // end of namespace mln::make::internal
diff --git a/scribo/sandbox/raphael/code/my/document/document.hh b/scribo/sandbox/raphael/code/my/document/document.hh
index 5a18723..b203f20 100644
--- a/scribo/sandbox/raphael/code/my/document/document.hh
+++ b/scribo/sandbox/raphael/code/my/document/document.hh
@@ -264,9 +264,10 @@ namespace mymln
std::cout << " vertical separator(s) : " << CSepV << std::endl;
std::cout << " horizontal separator(s) : " << CSepH << std::endl;
std::cout << " lines(s) : " << CLine << std::endl;
- mymln::debug::save_label_image(img, lines_mark , "outfileline.pbm");
+
}
-
+ void debug_save_lines(std::string file)
+ { mymln::debug::save_label_image(img, lines_mark , file);}
vertex_image<point2d,bool> fun_mask_separators()
{ return fun_mask_(separators_mask); }
vertex_image<point2d,bool> fun_mask_containers()
--
1.7.2.5
1
0