@@ -120,10 +120,6 @@ typedef shared_ptr<class_diff> class_diff_sptr;
/// associated to the first one.
typedef unordered_map<size_t, size_t> pointer_map;
-/// Convenience typedef for a map which key is a string and which
-/// value is a @ref decl_base_sptr.
-typedef unordered_map<string, decl_base_sptr> string_decl_base_sptr_map;
-
/// Convenience typedef for a map which key is a string and which
/// value is a @ref type_base_sptr.
typedef unordered_map<string, type_base_sptr> string_type_base_sptr_map;
@@ -357,8 +353,8 @@ enum diff_category
HARMLESS_SYMBOL_ALIAS_CHANGE_CATEGORY = 1 << 6,
/// This means that a diff node in the sub-tree carries a harmless
- /// union change.
- HARMLESS_UNION_CHANGE_CATEGORY = 1 << 7,
+ /// union or class change.
+ HARMLESS_UNION_OR_CLASS_CHANGE_CATEGORY = 1 << 7,
/// This means that a diff node in the sub-tree carries a harmless
/// data member change. An example of harmless data member change
@@ -455,7 +451,7 @@ enum diff_category
| STATIC_DATA_MEMBER_CHANGE_CATEGORY
| HARMLESS_ENUM_CHANGE_CATEGORY
| HARMLESS_SYMBOL_ALIAS_CHANGE_CATEGORY
- | HARMLESS_UNION_CHANGE_CATEGORY
+ | HARMLESS_UNION_OR_CLASS_CHANGE_CATEGORY
| HARMLESS_DATA_MEMBER_CHANGE_CATEGORY
| SUPPRESSED_CATEGORY
| PRIVATE_TYPE_CATEGORY
@@ -153,6 +153,10 @@ class decl_base;
// Convenience typedef for a smart pointer on @ref decl_base.
typedef shared_ptr<decl_base> decl_base_sptr;
+/// Convenience typedef for a map which key is a string and which
+/// value is a @ref decl_base_sptr.
+typedef unordered_map<string, decl_base_sptr> string_decl_base_sptr_map;
+
class type_decl;
/// Convenience typedef for a shared pointer on a @ref type_decl.
typedef shared_ptr<type_decl> type_decl_sptr;
@@ -767,6 +771,12 @@ get_last_data_member(const class_or_union*);
var_decl_sptr
get_last_data_member(const class_or_union_sptr&);
+bool
+collect_non_anonymous_data_members(const class_or_union* cou, string_decl_base_sptr_map& dms);
+
+bool
+collect_non_anonymous_data_members(const class_or_union_sptr &cou, string_decl_base_sptr_map& dms);
+
bool
is_anonymous_data_member(const decl_base&);
@@ -28,6 +28,10 @@ namespace comparison
namespace filtering
{
+static bool
+has_offset_changes(const string_decl_base_sptr_map& f_data_members,
+ const string_decl_base_sptr_map& s_data_members);
+
using std::dynamic_pointer_cast;
/// Walk the diff sub-trees of a a @ref corpus_diff and apply a filter
@@ -158,6 +162,55 @@ type_size_changed(const type_base_sptr f, const type_base_sptr s)
return f->get_size_in_bits() != s->get_size_in_bits();
}
+/// Detect if a type has offset changes.
+///
+/// The type must be either a class or a union. This function returns
+/// true iff the type has a data member which has an offset change.
+///
+/// @param f the first version of the type to consider.
+///
+/// @param s the second version of the type to consider.
+///
+/// @return true iff the type has a data member which has an offset
+/// change.
+static bool
+type_has_offset_changes(const type_base_sptr f, const type_base_sptr s)
+{
+ if (!f || !s)
+ return false;
+
+ class_or_union_sptr first = is_class_or_union_type(f);
+ class_or_union_sptr second = is_class_or_union_type(s);
+ if (!first || !second)
+ return false;
+
+ // collect the data members
+ string_decl_base_sptr_map f_data_members, s_data_members;
+ collect_non_anonymous_data_members(first, f_data_members);
+ collect_non_anonymous_data_members(second, s_data_members);
+
+ // detect offset changes
+ if (has_offset_changes(f_data_members, s_data_members))
+ return true;
+
+ return false;
+}
+
+/// Detect if a type has offset changes.
+///
+/// The type must be either a class or a union. This function returns
+/// true iff the type has a data member which has an offset change.
+///
+/// @param f the first version of the type to consider.
+///
+/// @param s the second version of the type to consider.
+///
+/// @return true iff the type has a data member which has an offset
+/// change.
+static bool
+type_has_offset_changes(const decl_base_sptr f, const decl_base_sptr s)
+{return type_has_offset_changes(is_type(f), is_type(s));}
+
/// Tests if the size of a given type changed.
///
/// @param f the declaration of the first version of the type to
@@ -193,6 +246,184 @@ has_type_size_change(const diff* diff)
return type_size_changed(f, s);
}
+
+/// Find a data member that is at a given offset.
+///
+/// @param data_members the set of data member to consider.
+///
+/// @param the offset to consider.
+///
+/// @return the data member found at offset @p offset of nil if none
+/// was found with that offset;
+static var_decl_sptr
+find_data_member_at_offset(const string_decl_base_sptr_map& data_members,
+ unsigned offset)
+{
+ for (auto e : data_members)
+ {
+ var_decl_sptr dm = is_var_decl(e.second);
+ ABG_ASSERT(dm);
+ unsigned off = get_absolute_data_member_offset(dm);
+ if (offset == off)
+ return dm;
+ }
+ return var_decl_sptr();
+}
+
+/// Test if a set of data members contains at least one data member
+/// that has an offset change.
+///
+/// @param f_data_members the first version of data members to
+/// consider.
+///
+/// @param s_data_members the second version of data members to
+/// consider.
+///
+/// @return true iff there is at least one data member which has an
+/// offset change between the first version of data members and the
+/// second version.
+static bool
+has_offset_changes(const string_decl_base_sptr_map& f_data_members,
+ const string_decl_base_sptr_map& s_data_members)
+{
+ // Compare the offsets of the data members
+ for (auto entry : f_data_members)
+ {
+ var_decl_sptr f_member = is_var_decl(entry.second);
+ ABG_ASSERT(f_member);
+ unsigned f_offset = get_absolute_data_member_offset(f_member);
+ auto i = s_data_members.find(entry.first);
+ var_decl_sptr s_member;
+ if (i == s_data_members.end())
+ {
+ s_member = find_data_member_at_offset(s_data_members, f_offset);
+ if (!s_member)
+ // A data member was suppressed; that's bad; let's consider
+ // that as an offset change.
+ return true;
+ }
+
+ if (!s_member)
+ s_member = is_var_decl(i->second);
+ ABG_ASSERT(s_member);
+ unsigned s_offset = get_absolute_data_member_offset(s_member);
+ if (f_offset != s_offset)
+ return true;
+ }
+ return false;
+}
+
+/// Test if a set of data members contains at least one data member
+/// that has a sub-type change.
+///
+/// @param f_data_members the first version of data members to
+/// consider.
+///
+/// @param s_data_members the second version of data members to
+/// consider.
+///
+/// @return true iff there is at least one data member which has a
+/// sub-type change between the first version of data members and the
+/// second version.
+static bool
+has_subtype_changes(const string_decl_base_sptr_map& f_data_members,
+ const string_decl_base_sptr_map& s_data_members,
+ diff_context_sptr ctxt)
+{
+ // Now compare the offsets of the data members collected.
+ var_decl_sptr s_member;
+ for (auto entry : f_data_members)
+ {
+ var_decl_sptr f_member = is_var_decl(entry.second);
+ ABG_ASSERT(f_member);
+
+ auto i = s_data_members.find(entry.first);
+ if (i == s_data_members.end())
+ {
+ unsigned offset = get_data_member_offset(f_member);
+ s_member = find_data_member_at_offset(s_data_members, offset);
+ if (!s_member)
+ // A data member was suppressed; that's bad; let's consider
+ // that as a sub-type change.
+ return true;
+ }
+
+ if (!s_member)
+ s_member = is_var_decl(i->second);
+ ABG_ASSERT(s_member);
+ diff_sptr d =compute_diff(f_member->get_type(), s_member->get_type(), ctxt);
+ if (d->has_changes())
+ return true;
+ }
+ return false;
+}
+
+/// Test if the changes of a @ref class_diff are harmless.
+///
+/// Potentially harmful changes are basically:
+/// 1/ name change (that changes the type altogether)
+/// 2/ size change
+/// 3/ offset change of any data member
+/// 4/ any subtype change.
+///
+/// Thus, this function tests that the class_diff carries none of the
+/// 4 kinds of changes above.
+///
+/// @param d the @ref class_diff to consider.
+///
+/// @return true iff @p d has only harmless changes.
+static bool
+class_diff_has_only_harmless_changes(const class_diff* d)
+{
+ if (!d || !d->has_changes())
+ return true;
+
+ class_decl_sptr f = d->first_class_decl(), s = d->second_class_decl();
+
+ if (f->get_qualified_name() != s->get_qualified_name())
+ return false;
+
+ if (f->get_size_in_bits() != s->get_size_in_bits())
+ return false;
+
+ // collect the data members
+ string_decl_base_sptr_map f_data_members, s_data_members;
+ collect_non_anonymous_data_members(f, f_data_members);
+ collect_non_anonymous_data_members(s, s_data_members);
+
+ // detect offset changes
+ if (has_offset_changes(f_data_members, s_data_members))
+ return false;
+
+ // detect subtype changes
+ if (has_subtype_changes(f_data_members, s_data_members, d->context()))
+ return false;
+
+ return true;
+}
+
+/// Test if the changes of a @ref class_diff are harmless.
+///
+/// Potentially harmful changes are basically:
+/// 1/ name change (that changes the type altogether)
+/// 2/ size change
+/// 3/ offset change of any data member
+/// 4/ any subtype change.
+///
+/// Thus, this function tests that the class_diff carries none of the
+/// 4 kinds of changes above.
+///
+/// @param d the @ref class_diff to consider.
+///
+/// @return true iff @p d has only harmless changes.
+static bool
+class_diff_has_only_harmless_changes(diff* d)
+{
+ if (const class_diff* class_dif = is_class_diff(d))
+ return class_diff_has_only_harmless_changes(class_dif);
+ return false;
+}
+
/// Tests if the access specifiers for a member declaration changed.
///
/// @param f the declaration for the first version of the member
@@ -1025,27 +1256,27 @@ static bool
has_non_virtual_mem_fn_change(const diff* diff)
{return has_non_virtual_mem_fn_change(dynamic_cast<const class_diff*>(diff));}
-/// Test if a class_diff carries base classes adding or removals.
+/// Test if a class_diff carries a base class removal.
///
/// @param diff the class_diff to consider.
///
-/// @return true iff @p diff carries base classes adding or removals.
+/// @return true iff @p diff carries a base classe removal.
static bool
-base_classes_added_or_removed(const class_diff* diff)
+base_classes_removed(const class_diff* diff)
{
if (!diff)
return false;
- return diff->deleted_bases().size() || diff->inserted_bases().size();
+ return diff->deleted_bases().size();
}
-/// Test if a class_diff carries base classes adding or removals.
+/// Test if a class_diff carries a base classes removal.
///
/// @param diff the class_diff to consider.
///
-/// @return true iff @p diff carries base classes adding or removals.
+/// @return true iff @p diff carries a base class removal.
static bool
-base_classes_added_or_removed(const diff* diff)
-{return base_classes_added_or_removed(dynamic_cast<const class_diff*>(diff));}
+base_classes_removed(const diff* diff)
+{return base_classes_removed(dynamic_cast<const class_diff*>(diff));}
/// Test if two classes that are decl-only (have the decl-only flag
/// and carry no data members) but are different just by their size.
@@ -1827,8 +2058,9 @@ categorize_harmless_diff_node(diff *d, bool pre)
|| class_diff_has_harmless_odr_violation_change(d))
category |= HARMLESS_DECL_NAME_CHANGE_CATEGORY;
- if (union_diff_has_harmless_changes(d))
- category |= HARMLESS_UNION_CHANGE_CATEGORY;
+ if (union_diff_has_harmless_changes(d)
+ || class_diff_has_only_harmless_changes(d))
+ category |= HARMLESS_UNION_OR_CLASS_CHANGE_CATEGORY;
if (has_non_virtual_mem_fn_change(d))
category |= NON_VIRT_MEM_FUN_CHANGE_CATEGORY;
@@ -1907,10 +2139,11 @@ categorize_harmful_diff_node(diff *d, bool pre)
if (!has_class_decl_only_def_change(d)
&& !has_enum_decl_only_def_change(d)
&& (type_size_changed(f, s)
+ || type_has_offset_changes(f, s)
|| data_member_offset_changed(f, s)
|| non_static_data_member_type_size_changed(f, s)
|| non_static_data_member_added_or_removed(d)
- || base_classes_added_or_removed(d)
+ || base_classes_removed(d)
|| has_harmful_enum_change(d)
|| crc_changed(d)
|| namespace_changed(d)))
@@ -3144,7 +3144,7 @@ get_default_harmless_categories_bitmap()
| abigail::comparison::STATIC_DATA_MEMBER_CHANGE_CATEGORY
| abigail::comparison::HARMLESS_ENUM_CHANGE_CATEGORY
| abigail::comparison::HARMLESS_SYMBOL_ALIAS_CHANGE_CATEGORY
- | abigail::comparison::HARMLESS_UNION_CHANGE_CATEGORY
+ | abigail::comparison::HARMLESS_UNION_OR_CLASS_CHANGE_CATEGORY
| abigail::comparison::HARMLESS_DATA_MEMBER_CHANGE_CATEGORY
| abigail::comparison::TYPE_DECL_ONLY_DEF_CHANGE_CATEGORY
| abigail::comparison::FN_PARM_TYPE_TOP_CV_CHANGE_CATEGORY
@@ -3250,11 +3250,11 @@ operator<<(ostream& o, diff_category c)
emitted_a_category |= true;
}
- if (c & HARMLESS_UNION_CHANGE_CATEGORY)
+ if (c & HARMLESS_UNION_OR_CLASS_CHANGE_CATEGORY)
{
if (emitted_a_category)
o << "|";
- o << "HARMLESS_UNION_CHANGE_CATEGORY";
+ o << "HARMLESS_UNION_OR_CLASS_CHANGE_CATEGORY";
emitted_a_category |= true;
}
@@ -5844,6 +5844,46 @@ class_diff::ensure_lookup_tables_populated(void) const
get_priv()->inserted_bases_[name] = b;
}
}
+
+ // ===============================================================
+ // Detect when a data member is deleted from the class but is now
+ // present in one of the bases at the same offset. In that case,
+ // the data member should not be considered as removed.
+ // ===============================================================
+ string_decl_base_sptr_map& deleted_data_members =
+ class_or_union_diff::priv_->deleted_data_members_;
+
+ vector<var_decl_sptr> deleted_data_members_present_in_bases;
+ for (auto entry : deleted_data_members)
+ {
+ var_decl_sptr deleted_member = is_var_decl(entry.second);
+ ABG_ASSERT(deleted_member);
+ for (class_decl::base_spec_sptr base : second_class_decl()->get_base_specifiers())
+ {
+ class_decl_sptr klass = base->get_base_class();
+ var_decl_sptr member = klass->find_data_member(deleted_member->get_name());
+ if (member)
+ deleted_data_members_present_in_bases.push_back(member);
+ }
+ }
+ // Walk the deleted data members that are now in one of the bases,
+ // of the new type, at the same offset, and let's see if they have
+ // sub-type changes. In any cases, these should not be considered
+ // as being deleted.
+ for (var_decl_sptr m : deleted_data_members_present_in_bases)
+ {
+ string name = m->get_name();
+ auto it = deleted_data_members.find(name);
+ ABG_ASSERT(it != deleted_data_members.end());
+ var_decl_sptr deleted_member = is_var_decl(it->second);
+ if (*deleted_member != *m)
+ {
+ var_diff_sptr dif = compute_diff(deleted_member, m, context());
+ ABG_ASSERT(dif);
+ class_or_union_diff::priv_->subtype_changed_dm_[name]= dif;
+ }
+ deleted_data_members.erase(name);
+ }
}
sort_string_base_sptr_map(get_priv()->deleted_bases_,
@@ -1534,7 +1534,7 @@ default_reporter::report(const union_diff& d, ostream& out,
d.class_or_union_diff::report(out, indent);
- if (d.context()->get_allowed_category() & HARMLESS_UNION_CHANGE_CATEGORY
+ if (d.context()->get_allowed_category() & HARMLESS_UNION_OR_CLASS_CHANGE_CATEGORY
&& filtering::union_diff_has_harmless_changes(&d))
{
// The user wants to see harmless changes and the union diff we
@@ -6036,6 +6036,74 @@ var_decl_sptr
get_last_data_member(const class_or_union_sptr &klass)
{return get_last_data_member(klass.get());}
+/// Collect all the non-anonymous data members of a class or union type.
+///
+/// If the class contains any anonymous data member, this function
+/// looks through it to collect the non-anonymous data members that it
+/// contains. The function also also looks through the base classes
+/// of the current type.
+///
+/// @param cou the class or union type to consider.
+///
+/// @param dms output parameter. This is populated by the function
+/// with a map containing the non-anonymous data members that were
+/// collected. The key of the map is the name of the data member.
+/// This is set iff the function returns true.
+///
+/// @return true iff at least one non-anonymous data member was
+/// collected.
+bool
+collect_non_anonymous_data_members(const class_or_union* cou,
+ string_decl_base_sptr_map& dms)
+{
+ if (!cou)
+ return false;
+
+ bool result = false;
+ class_decl* klass = is_class_type(cou);
+ if (klass)
+ // First look into base classes for data members.
+ for (class_decl::base_spec_sptr base : klass->get_base_specifiers())
+ result |= collect_non_anonymous_data_members(base->get_base_class().get(), dms);
+
+ // Then look into our data members
+ for (var_decl_sptr member : cou->get_non_static_data_members())
+ {
+ if (is_anonymous_data_member(member))
+ {
+ class_or_union_sptr cl = anonymous_data_member_to_class_or_union(member);
+ ABG_ASSERT(cl);
+ result |= collect_non_anonymous_data_members(cl.get(), dms);
+ }
+ else
+ {
+ dms[member->get_name()] = member;
+ result = true;
+ }
+ }
+ return true;
+}
+
+/// Collect all the non-anonymous data members of a class or union type.
+///
+/// If the class contains any anonymous data member, this function
+/// looks through it to collect the non-anonymous data members that it
+/// contains. The function also also looks through the base classes
+/// of the current type.
+///
+/// @param cou the class or union type to consider.
+///
+/// @param dms output parameter. This is populated by the function
+/// with a map containing the non-anonymous data members that were
+/// collected. The key of the map is the name of the data member.
+/// This is set iff the function returns true.
+///
+/// @return true iff at least one non-anonymous data member was
+/// collected.
+bool
+collect_non_anonymous_data_members(const class_or_union_sptr &cou, string_decl_base_sptr_map& dms)
+{return collect_non_anonymous_data_members(cou.get(), dms);}
+
/// Test if a decl is an anonymous data member.
///
/// @param d the decl to consider.
@@ -419,6 +419,32 @@ test-abidiff-exit/PR31377/flex/lib64/librte_pipeline.so.24.1 \
test-abidiff-exit/PR31377/reference/include/rte_pipeline.h \
test-abidiff-exit/PR31377/reference/lib64/librte_pipeline.so.24.0 \
test-abidiff-exit/PR31377/test-PR31377-report-1.txt \
+test-abidiff-exit/PR31513/reported/PR31513-reported-report-1.txt \
+test-abidiff-exit/PR31513/reported/PR31513-reported-report-2.txt \
+test-abidiff-exit/PR31513/reported/libloremipsum_gcc11.so \
+test-abidiff-exit/PR31513/reported/libloremipsum_gcc7.so \
+test-abidiff-exit/PR31513/reported/libstdcpp.suppr \
+test-abidiff-exit/PR31513/non-regr/libtest1-v0.so \
+test-abidiff-exit/PR31513/non-regr/libtest1-v1.so \
+test-abidiff-exit/PR31513/non-regr/libtest2-v0.so \
+test-abidiff-exit/PR31513/non-regr/libtest2-v1.so \
+test-abidiff-exit/PR31513/non-regr/libtest3-v0.so \
+test-abidiff-exit/PR31513/non-regr/libtest3-v1.so \
+test-abidiff-exit/PR31513/non-regr/libtest4-v0.so \
+test-abidiff-exit/PR31513/non-regr/libtest4-v1.so \
+test-abidiff-exit/PR31513/non-regr/report1.txt \
+test-abidiff-exit/PR31513/non-regr/report2.txt \
+test-abidiff-exit/PR31513/non-regr/report3.txt \
+test-abidiff-exit/PR31513/non-regr/report4.txt \
+test-abidiff-exit/PR31513/non-regr/test1-v0.cc \
+test-abidiff-exit/PR31513/non-regr/test1-v1.cc \
+test-abidiff-exit/PR31513/non-regr/test2-v0.cc \
+test-abidiff-exit/PR31513/non-regr/test2-v1.cc \
+test-abidiff-exit/PR31513/non-regr/test3-v0.cc \
+test-abidiff-exit/PR31513/non-regr/test3-v1.cc \
+test-abidiff-exit/PR31513/non-regr/test4-v0.cc \
+test-abidiff-exit/PR31513/non-regr/test4-v1.cc \
+\
test-diff-dwarf/test0-v0.cc \
test-diff-dwarf/test0-v0.o \
test-diff-dwarf/test0-v1.cc \
new file mode 100755
GIT binary patch
literal 16768
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
literal 0
HcmV?d00001
new file mode 100755
GIT binary patch
literal 16768
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
literal 0
HcmV?d00001
new file mode 100755
GIT binary patch
literal 16768
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
literal 0
HcmV?d00001
new file mode 100755
GIT binary patch
literal 16768
zcmeHOYit}>6~43UwKrMEkGd&&P&^5alr-J(uAQV#A}4;t&bq{D>Np|+Rnys>@$Q!0
z9d~w|*r|Y2DWz#tsS&9B;3e^gNPq-FAk-hoQBf68slvYq3CU7bND<Ifh{~aomvio%
zvtCbkn<zgJNOP^7^Zd@abLP&@9q+wg9XmE2QWU{0EDniPNr)jf>}Ljb10n{;?P8ns
zZCW*bj7vp46;sjS$(Tc$NM=3Lhp7`xS&wR&PxaymAANz;Olxt?U|WoP4vT|pX)5H&
zCx|i*Ma11C+)ctUy-odO8uh}+K4L$wQanFRkRMY&?k3^<w1;p^F$cDj@4Dvw<U2t)
ze;rx=v=?45<$O;94(oESjW6>Q<!f{uhUmPRQh8-PRY-<o=IHTLFz%E^><imNB!fye
zv^@x)FnrMet>oK-&wTyN&!7L^-~Xz;bMr6ppS?VQj+hQ(VjS;$qAIYmq5e<ib4e2G
zl5x;(uVcaURqN<6Pd)vk4fLl#|A1%}cc_3HL6%L|vqih4mtDhgbzSHa)04VsIaW4b
zb}eUma<pKVtZ5@%usmCRi=LS`^qG9gDCEzB;}`m8Y<p^tyD)2sLOxw~&CKrITG`h2
zp;)YP*-S<+qm)E_#?v1?HZd})_i26FUhE-U5&A<3`Aa}~9L#OWuS1`2pb;A1k9;58
zCdcb^zp?(Oq`%?QvwZ!q7Z0x`)|%Um8a)j$X}VdX$Fag~sYcIZUfPB{j}{=c@jY#D
z3@Q**AgDl4fuI6G1%e6$6$mQuzg>ZUwtwc|sf&M$rY=W*+bcxsYm08EawB!|H_<m_
z$18h(2kOd>x8T^`Jp>%eIkdgERH;-_uMA#8+$)jSk?db~H$teh$U~@gm8JIX3+Vg?
zQSiSa{rA3%WY<dS((Tl>e;iI-TMnm`H&cIDaUX;LV-z4-S(<6@KC+6({$3cI1hbgi
zeJXWvFobOC(z|XegkFKys9R^CTenO&ycyX6M&&8UUCod9_s)Uw6kt-9zPy~eJht5a
z%b}+BUoSodr(CT^wF21tpam5ODiBm4s6bGGpaMY!f(ir`2r3X%AgDl4f&cFcC|kn^
z@wZ+4O-#LAso;;IcYr<(6dV4AicL8`C6xINWov6o^i}xbs|R$5TYA4zQGtrKj`6ll
zkGIFpMK6fMTMj<b-y?q(MIU&57gr#r{OxkMt>eYe=!WJK5D0NW3n~y)AgDl4fuI6G
z1%e6$6$mO2R3NB8P=R}@0I!quuZ!fhiD`<$^0PkqIiHMcG_kdMq`F{p1IZno9<!Nb
zUbnfGWPYdHLNc%4#P>jKZ2#9v#g+<MbSc+@gW^{t^V;H_B(ImwLVTZSjOZq!<R)&>
zx=mi=$##B^#dVw5KIIXSpv0_yi57cuKd+J>ELN3`<E>P@{^!Uaeo>a^!*zz&T`8X?
z`yG<GpA_!DMtHrtKjA)FPkVH9^nkh(R!Z+ulY6v;mQ?!^eR~ppeFN&wDa%w-hD(Nc
zViyF#`ba38@X_HOrQb-3A&SMco)0eoeu#YQ`S2LqL}RU<59i=@(e-@V2+#C>eYme%
zKcUau*M})5uIKi~AZCUCsSvihep_l+58nbdA{6N?aoa}7SPvPV1!GhRN2h=)#e|5o
zAO~zxG)K<>*Cd*nBKeXlB1-cd$jz{@TPW+59PsGskE(p<o1krR!6$}X=t@pRqZ)8R
z*&xEv1KX5?vHh`$t^v67LY>Nvwys#Xduw;6@<2-m+)UvvCEON^9f+Zq(ghvp5wX~z
zSQySILTnp!LsJfKhG^2Q)HczD_@PbbHzTAaf{CPQqALV<TC@XVOn^m9!Y2ZQ?h)*d
zqI}f00SVr0@ByY<-ghCTJJcSMg_DPfBG!fYOvCGyNbALj@{<s(Ojlr}tE0PjCm*|q
z;jYGu?p(<l%vvSO$!9<`oJ?+TeqdjG-ySudRpT@E%uK;H%(y-4=Iv5>FkaB%j?#;3
zm(*u+h9i1&cG2oJZS$FYZ#M7t!UB3DozEKiLhnp|-YWObI<8fA%e^P2`jdN;{k^bq
z-?7SNh#Qv%fyX`Zvk5JefdbTTSdS+0LB(&y@9_|PyYv0S_IA?G(l}-PcGC0nh4ll#
zDB>Xz9r84?{=nk@`V`SA_<P^83h^aiFfTu^Sbt9XcU0H^v;H+;>h=Ez4fH>jaoWWN
z6&PQu7w2{910zyh>->8V71(jX`w7_kM_@u?gW&Hb)-OptJe_=X`!nbj(Ix!fyYEZ=
z#%kR_l<gxpDq>^x`9*5c35CUL;BSwDUiB+MPBqYfzJdN((AV8xl5yNLY$hq4)NHZ3
zuS9o?dIoovl!dOFww^86X``T<uI-d{V{Tq#?BZ;}axGI!)c3&MCVAa(9AiPZO0KgY
zW*nnv>E>LqxB!qENe54Njce`5hYngL6T7GD<5R<vWBS<fBe)YrhkIKeOOY~lWC}Y{
zw)LD*GI2Kyc0kD3LO*im`0(V!D0sk*84hst*b^he$Mh%0$4`z;>(j#{$Hp*h?N*tg
z+RZMXxc8>cHl6xgaccM82(7$Obd5An*YRkMxsvT#TDCN&%{un1<+uw%tE$p-`GOhG
zn?gF|jB-wB=0XXAdDL}0%UR38?~^rx4mQUs7ziM4w%`g4FM`lqYaWiWbeff;tCTYV
z!;<IeT`td)dDCzW46Qk~?1oXyXCSo=0pXy@Ea`GtXfSw+Febci$#c;R*LCvgIk@lu
zwbFB02x^qFt75)1gHb(GI_+3zSt{g97V}U%W>F2>rkpxA&wZ$H-ivd`5Mdkb^W)Io
zY=9*p@CjRsZ?xZ!5j34-Q49n3A<Qi~zufSKR+?z`kSF8(`9BACoJ%vF=i5wQB|Ptu
zV?57;Pl6p&F`nn|OnJUeVc<J%ZTljKICo||&zG6<dkFWR{g~zek8|;=OpZJ+S1Fyp
z|D+c9{6PrgdH&DzDmij~|M@>p_!08s_X(z4C&c62&yT+hI;;u5?^K^7^gQABDsYjF
z`@!;yz|`VZ!c{3d66MDf(<?sw5E+=h-2l&OoVV8I=jS6+es5%dfB(Nrc&@)t$&)C*
zH<DIfE9Q~@2tJsf@u~^}G^VB}R*zhNR{R1Om<90dQk{qJ{#3s|%S^8U7Uxd<UdQvE
z>v2#*V?R$?m09o2H&*dH@3?UnJjcU%3634k&+`r5ugv?B`Td&n^7VfQuvkCF^Zv=}
zy`Y4q%H!&R@l0=lsTR-g-?#1&{{i4J7U$>rWHjOB<UF3_<zgP`hw#Dt<c=!Y7?0nt
zwGDl-F~tcozx$)U<7qq!F+c%TcJ$OA8-E+Y?sJizr;{GQ-!H#!PXqi*g#R|>W#Y#t
z8sI<M=OJETAW=X5Py_rA3IF6>@Q)MTf1b;PKi>e){W#SC@AP}X<9ESh9KQE!T^9*|
wnv5zK@qa)(p7?ti|F6Si57=tkw9jL|!W|`xPlPv}`uNu#^8l6);1k7v06(Dh{r~^~
literal 0
HcmV?d00001
new file mode 100644
@@ -0,0 +1,12 @@
+Functions changes summary: 0 Removed, 1 Changed, 0 Added function
+Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
+
+1 function with some indirect sub-type change:
+
+ [C] 'function int foo(type&)' at test1-v0.cc:10:1 has some indirect sub-type changes:
+ parameter 1 of type 'type&' has sub-type changes:
+ in referenced type 'struct type' at test1-v1.cc:8:1:
+ type size hasn't changed
+ 1 base class insertion:
+ struct base at test1-v1.cc:2:1
+
new file mode 100644
@@ -0,0 +1,12 @@
+Functions changes summary: 0 Removed, 1 Changed, 0 Added function
+Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
+
+1 function with some indirect sub-type change:
+
+ [C] 'function int foo(type&)' at test2-v0.cc:10:1 has some indirect sub-type changes:
+ parameter 1 of type 'type&' has sub-type changes:
+ in referenced type 'struct type' at test2-v1.cc:9:1:
+ type size hasn't changed
+ 1 base class insertion:
+ struct base at test2-v1.cc:2:1
+
new file mode 100644
@@ -0,0 +1,12 @@
+Functions changes summary: 0 Removed, 1 Changed, 0 Added function
+Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
+
+1 function with some indirect sub-type change:
+
+ [C] 'function int foo(type&)' at test3-v0.cc:10:1 has some indirect sub-type changes:
+ parameter 1 of type 'type&' has sub-type changes:
+ in referenced type 'struct type' at test3-v1.cc:9:1:
+ type size changed from 64 to 96 (in bits)
+ 1 base class insertion:
+ struct base at test3-v1.cc:2:1
+
new file mode 100644
@@ -0,0 +1,16 @@
+Functions changes summary: 0 Removed, 1 Changed, 0 Added function
+Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
+
+1 function with some indirect sub-type change:
+
+ [C] 'function int foo(type&)' at test4-v0.cc:10:1 has some indirect sub-type changes:
+ parameter 1 of type 'type&' has sub-type changes:
+ in referenced type 'struct type' at test4-v1.cc:8:1:
+ type size changed from 64 to 96 (in bits)
+ 1 base class insertion:
+ struct base at test4-v1.cc:2:1
+ 1 data member deletion:
+ 'char m1', at offset 32 (in bits) at test4-v0.cc:6:1
+ 1 data member insertion:
+ 'char m3', at offset 64 (in bits) at test4-v1.cc:10:1
+
new file mode 100644
@@ -0,0 +1,13 @@
+// g++ -shared -g -o libtest1-v0.so test1-v0.cc
+
+struct type
+{
+ int m0;
+ char m1;
+};
+
+int
+foo(type& t)
+{
+ return t.m1;
+}
new file mode 100644
@@ -0,0 +1,16 @@
+// g++ -shared -g -o libtest1-v1.so test1-v1.cc
+struct base
+{
+ int m0;
+ char m1;
+};
+
+struct type : public base
+{
+};
+
+int
+foo(type& t)
+{
+ return t.m1;
+}
new file mode 100644
@@ -0,0 +1,13 @@
+// g++ -shared -g -o libtest2-v0.so test2-v0.cc
+
+struct type
+{
+ int m0;
+ char m1;
+};
+
+int
+foo(type& t)
+{
+ return t.m1;
+}
new file mode 100644
@@ -0,0 +1,17 @@
+// g++ -shared -g -o libtest2-v1.so test2-v1.cc
+struct base
+{
+ int m0;
+ char m1;
+ char m2;
+};
+
+struct type : public base
+{
+};
+
+int
+foo(type& t)
+{
+ return t.m1;
+}
new file mode 100644
@@ -0,0 +1,13 @@
+// g++ -shared -g -o libtest3-v0.so test3-v0.cc
+
+struct type
+{
+ int m0;
+ char m1;
+};
+
+int
+foo(type& t)
+{
+ return t.m1;
+}
new file mode 100644
@@ -0,0 +1,17 @@
+// g++ -shared -g -o libtest3-v1.so test3-v1.cc
+struct base
+{
+ int m0;
+ char m1;
+ float m2;
+};
+
+struct type : public base
+{
+};
+
+int
+foo(type& t)
+{
+ return t.m1;
+}
new file mode 100644
@@ -0,0 +1,13 @@
+// g++ -shared -g -o libtest4-v0.so test4-v0.cc
+
+struct type
+{
+ int m0;
+ char m1;
+};
+
+int
+foo(type& t)
+{
+ return t.m1;
+}
new file mode 100644
@@ -0,0 +1,17 @@
+// g++ -shared -g -o libtest4-v1.so test4-v1.cc
+struct base
+{
+ int m0;
+ float m2;
+};
+
+struct type : public base
+{
+ char m3;
+};
+
+int
+foo(type& t)
+{
+ return t.m0;
+}
new file mode 100644
@@ -0,0 +1,58 @@
+Functions changes summary: 16 Removed, 0 Changed (20 filtered out), 21 Added functions
+Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
+Function symbols changes summary: 2 Removed, 2 Added function symbols not referenced by debug info
+Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referenced by debug info
+
+16 Removed functions:
+
+ [D] 'method void __gnu_cxx::new_allocator<char>::destroy<char>(char*)' {_ZN9__gnu_cxx13new_allocatorIcE7destroyIcEEvPT_}
+ [D] 'method char* std::__copy_move<true, true, std::random_access_iterator_tag>::__copy_m<char>(const char*, char*)' {_ZNSt11__copy_moveILb1ELb1ESt26random_access_iterator_tagE8__copy_mIcEEPT_PKS3_S6_S4_}
+ [D] 'function char* std::__copy_move_a2<true, char*, char*>(char*, char*, char*)' {_ZSt14__copy_move_a2ILb1EPcS0_ET1_T0_S2_S1_}
+ [D] 'function char* std::__copy_move_a<true, char*, char*>(char*, char*, char*)' {_ZSt13__copy_move_aILb1EPcS0_ET1_T0_S2_S1_}
+ [D] 'function std::move_iterator<char*> std::__make_move_if_noexcept_iterator<char>(char*)' {_ZSt32__make_move_if_noexcept_iteratorIcSt13move_iteratorIPcEET0_PT_}
+ [D] 'function char* std::__miter_base<char*>(char*)' {_ZSt12__miter_baseIPcET_S1_}
+ [D] 'function char* std::__miter_base<char*>(std::move_iterator<char*>)' {_ZSt12__miter_baseIPcEDTcl12__miter_basecldtfp_4baseEEESt13move_iteratorIT_E}
+ [D] 'method char* std::__uninitialized_copy<true>::__uninit_copy<std::move_iterator<char*>, char*>(std::move_iterator<char*>, char*)' {_ZNSt20__uninitialized_copyILb1EE13__uninit_copyISt13move_iteratorIPcES3_EET0_T_S6_S5_}
+ [D] 'function char* std::__uninitialized_copy_a<std::move_iterator<char*>, char*, char>(std::move_iterator<char*>, std::move_iterator<char*>, char*, std::allocator<char>&)' {_ZSt22__uninitialized_copy_aISt13move_iteratorIPcES1_cET0_T_S4_S3_RSaIT1_E}
+ [D] 'function char* std::__uninitialized_move_if_noexcept_a<char*, char*, std::allocator<char> >(char*, char*, char*, std::allocator<char>&)' {_ZSt34__uninitialized_move_if_noexcept_aIPcS0_SaIcEET0_T_S3_S2_RT1_}
+ [D] 'method void std::allocator_traits<std::allocator<char> >::destroy<char>(char*)' {_ZNSt16allocator_traitsISaIcEE7destroyIcEEvRS0_PT_}
+ [D] 'function char* std::copy<std::move_iterator<char*>, char*>(std::move_iterator<char*>, std::move_iterator<char*>, char*)' {_ZSt4copyISt13move_iteratorIPcES1_ET0_T_S4_S3_}
+ [D] 'method std::move_iterator<char*>::iterator_type std::move_iterator<char*>::base() const' {_ZNKSt13move_iteratorIPcE4baseEv}
+ [D] 'method void std::move_iterator<char*>::move_iterator(std::move_iterator<char*>::iterator_type)' {_ZNSt13move_iteratorIPcEC2ES0_, aliases _ZNSt13move_iteratorIPcEC1ES0_}
+ [D] 'function char* std::uninitialized_copy<std::move_iterator<char*>, char*>(std::move_iterator<char*>, std::move_iterator<char*>, char*)' {_ZSt18uninitialized_copyISt13move_iteratorIPcES1_ET0_T_S4_S3_}
+ [D] 'method void std::vector<char, std::allocator<char> >::emplace_back<char>()' {_ZNSt6vectorIcSaIcEE12emplace_backIJcEEEvDpOT_}
+
+21 Added functions:
+
+ [A] 'function bool __gnu_cxx::__is_null_pointer<char const>(const char*)' {_ZN9__gnu_cxx17__is_null_pointerIKcEEbPT_}
+ [A] 'method __gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > >::reference __gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > >::operator*() const' {_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv}
+ [A] 'method __gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > > __gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > >::operator-(__gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > >::difference_type) const' {_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEmiEl}
+ [A] 'method bool __gnu_cxx::char_traits<char>::eq(const __gnu_cxx::char_traits<char>::char_type&)' {_ZN9__gnu_cxx11char_traitsIcE2eqERKcS3_}
+ [A] 'method std::size_t __gnu_cxx::char_traits<char>::length()' {_ZN9__gnu_cxx11char_traitsIcE6lengthEPKc}
+ [A] 'method __gnu_cxx::new_allocator<char>::size_type __gnu_cxx::new_allocator<char>::_M_max_size() const' {_ZNK9__gnu_cxx13new_allocatorIcE11_M_max_sizeEv}
+ [A] 'method std::_Vector_base<char, std::allocator<char> >::_Vector_impl_data::_Vector_impl_data()' {_ZNSt12_Vector_baseIcSaIcEE17_Vector_impl_dataC2Ev, aliases _ZNSt12_Vector_baseIcSaIcEE17_Vector_impl_dataC1Ev}
+ [A] 'method void std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct<char const*>(const char*, const char*, std::forward_iterator_tag)' {_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag}
+ [A] 'method void std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string<>(const char*, const std::allocator<char>&)' {_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_, aliases _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1IS3_EEPKcRKS3_}
+ [A] 'function std::iterator_traits<char const*>::difference_type std::__distance<char const*>(const char*, const char*, std::random_access_iterator_tag)' {_ZSt10__distanceIPKcENSt15iterator_traitsIT_E15difference_typeES3_S3_St26random_access_iterator_tag}
+ [A] 'function std::iterator_traits<char const*>::iterator_category std::__iterator_category<char const*>(const char* const&)' {_ZSt19__iterator_categoryIPKcENSt15iterator_traitsIT_E17iterator_categoryERKS3_}
+ [A] 'function char* std::__relocate_a<char*, char*, std::allocator<char> >(char*, char*, char*, std::allocator<char>&)' {_ZSt12__relocate_aIPcS0_SaIcEET0_T_S3_S2_RT1_}
+ [A] 'function std::__enable_if_t std::__relocate_a_1<char, char>(char*, char*, char*, std::allocator<char>&)' {_ZSt14__relocate_a_1IccENSt9enable_ifIXsrSt24__is_bitwise_relocatableIT_vE5valueEPS2_E4typeES4_S4_S4_RSaIT0_E}
+ [A] 'method std::size_t std::char_traits<char>::length()' {_ZNSt11char_traitsIcE6lengthEPKc}
+ [A] 'function std::iterator_traits<char const*>::difference_type std::distance<char const*>(const char*, const char*)' {_ZSt8distanceIPKcENSt15iterator_traitsIT_E15difference_typeES3_S3_}
+ [A] 'function const unsigned long int& std::min<long unsigned int>(const unsigned long int&, const unsigned long int&)' {_ZSt3minImERKT_S2_S2_}
+ [A] 'method std::vector<char, std::allocator<char> >::pointer std::vector<char, std::allocator<char> >::_S_do_relocate(std::vector<char, std::allocator<char> >::pointer, std::vector<char, std::allocator<char> >::pointer, std::vector<char, std::allocator<char> >::_Tp_alloc_type&, std::true_type)' {_ZNSt6vectorIcSaIcEE14_S_do_relocateEPcS2_S2_RS0_St17integral_constantIbLb1EE}
+ [A] 'method std::vector<char, std::allocator<char> >::size_type std::vector<char, std::allocator<char> >::_S_max_size()' {_ZNSt6vectorIcSaIcEE11_S_max_sizeERKS0_}
+ [A] 'method std::vector<char, std::allocator<char> >::pointer std::vector<char, std::allocator<char> >::_S_relocate(std::vector<char, std::allocator<char> >::pointer, std::vector<char, std::allocator<char> >::pointer, std::vector<char, std::allocator<char> >::_Tp_alloc_type&)' {_ZNSt6vectorIcSaIcEE11_S_relocateEPcS2_S2_RS0_}
+ [A] 'method std::vector<char, std::allocator<char> >::reference std::vector<char, std::allocator<char> >::back()' {_ZNSt6vectorIcSaIcEE4backEv}
+ [A] 'method std::vector<char, std::allocator<char> >::reference std::vector<char, std::allocator<char> >::emplace_back<char>()' {_ZNSt6vectorIcSaIcEE12emplace_backIJcEEERcDpOT_}
+
+2 Removed function symbols not referenced by debug info:
+
+ [D] _fini
+ [D] _init
+
+2 Added function symbols not referenced by debug info:
+
+ [A] _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderD1Ev, aliases _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderD2Ev
+ [A] _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderD2Ev
+
new file mode 100644
@@ -0,0 +1,5 @@
+Functions changes summary: 0 Removed (16 filtered out), 0 Changed (20 filtered out), 0 Added (21 filtered out) functions
+Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
+Function symbols changes summary: 0 Removed (2 filtered out), 0 Added (2 filtered out) function symbols not referenced by debug info
+Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referenced by debug info
+
new file mode 100644
GIT binary patch
literal 115160
zcmeFacYGC96F<Cr_uhMMvZ+8I2`vx^B@mJjdJ83xP(zb$NJ4-JDWp(T5DY4z2zKl!
zDA=)MM^u7}K42Fg6??EEHmtngnR9mUW+6U5pWh$v`}w@j)y?e8e9xRYbLN!Yy?41F
zYwSpmu4~rE&<1NkPSY}#V)~w-G*j!Vnb0I@9U1Gj3ZH?VOqN26YEhCWYd$(nmAspV
zw3c#<I?Hi=xvHFt-e5|(MV;mRP#u~h^@mCtQt6DQ1=uO*l%F1)Qn`9nu3nY1=y4Sm
ziw2}wjeMkI7a2GMO<<{}S=3$bfGX#v9aK4sQXTY}{8`n!|E9iNRc@?`qnmb6epuA1
zZz9T3T>ei#DxBIRRbONMkgDplsFih8FWI2(88v>Y2H0Mb893-e=gn{sPx{jD2Xwr1
zb4=Awm2F0?TATUZEgP=911fDej`lbx-XS<P4%0l|#I6zAF##KaOryj6cDrNOtX^H-
zJ#_a>uRr0AJ7Trl66QWouw%8yQ|a}tURM{k+TTUnkf5)Ns^Mmly+j;II6C2=PiINA
zE}&g;bjOi`qX!Q9q)MWtE1IDwk={7^;pmTJ5RSn(hTyP1nK&7WV;Bx<&j=j!8Hpns
zM-GnBIL6=@hl4&7aOC2cjAIIpsW{HUF%1WOrsJ4_V-_*$Ln(hYj=4Ara1`R0hocC`
zd>jjK6yu=JIXJrPteQ2q@ZjTDH@mvDORKqG<uuPdD`f38zYe|rv!{E!_qC_<19!E%
zy6(}J-hH)XLE+~ygRZ#q{I}Qqb)S*FXz(MGfBN{U@#Y)l*S_l8yW`ug&5G};nsuTo
zdHdH*JAZ8UnYFIh<%8C)Y87@YeMGmPYHt4Q>0erO{pP7&k1m{eU7#-Q<K(F^=5Fuy
zPM<%0?UK9S+c^4b&;7rA^yZz@KWP5hiLT9h{62f`xLadKP5Y>3*5_@%nQxr9qPYLh
zm$WpF%)D?-{|%jA+i{C`e|*)fR}Q>cyX@Exo!^aau20@}&iK5LXJS4{{`~2GjsMy+
z>82OG;a`ooeD|%bM}0H<gXY(MRx|65k8<a<c(dh0_YUbTj%}N<`n$Kj_KbRc;2$Av
zt7bJ_+3Ba&?N%-E&p-a;Q-kLB_&$2&p!e?VMj<}q=iiVvIfG^wGVDz9wwUM6B&Qsp
zd~|<yLU1Phwum#!-w8dlya0pdOm?2bz&xY85qxd*neopy(%x2$_!;Uyvz<3QXO`zQ
z(ysN5$eTA}C#{kAS2rS`(MWqIHX^TS#Lg+>%<bybh@S|jy~a3mLNtP3(}?_nM*5NF
z=LDx=b>6KJxwnxxFKHwWmttaXuSICR)dXnGXMN!h$?v6v$EUd@Jg<>_J58MUSn^L0
z2$Js_E9Eo~(&tjNm*k#IF!($tiMA5?d?xu#XfVn9(xi+}TS>HgK}mj6)oaO@g-iMH
z90{bkoj!}gq<qUL$$uw_Hdsixp(b@}Ont=t5~2MyPy$;id`B!~RByJ5!+a%Q1xoVs
zm7gU_-cq%zVyF~Y_SY&q&nr6^Zv1&!`E#rC=QiqaeBzLYWPh5n-%*OSS|$I|6`vuE
z^katV7ftoc0%d2M@^h{7bC;6WDLd&d|EK$<KLx`iFiZLASN0zoBju_Z?KzAu@;^?+
zzp1i+5z3L=-M_n4944ta<SKlHlE)~y>VB;N0VF#~qa`p&;R}>MHz<E%m7LaE!at@A
zsPJjuDu33h{HOJuK6T2@)v7^OKlV}hP=!yHaBZmS-)<^Cy_9^firfB7DM+{Qjr8OF
zDsK-eM^rW1M=H-xs63BRb_S}vy>5UMJg?+$sQBEZ;*+A}e=2;uibK4T=Xqs(PG(90
z?T_elLiJ-e)sL!qT5hDo3uV8JglkEvzup}#1znZANX0GImA5~r`0P}8D?WEB`|DLd
zTJi6o+EuFjX{YR8q5S-Mq!e^la*wieQ2A-i5BI9}y8HdG>KAwa9#sAxR2^dV?{CV^
zh@rAVE6%s8{@SSet4R41rtteSrNC<Mqp;ru`RVS*Rmy*lih~vB?kZ2*akyON?E;mz
zJyg9PC_4$tPO*|71Eq1{o>yyBoX4uTB`SOi6$f`e_EYUWSGCvbuLva%Q}RB_&Xvml
z)hf@GyV@IS9KELc(aO)Kl|N<5AFEvxRX(4s=Ixu6eJw9<K}lI@US(B&MO9v&mX|YS
zT;9B*ilPO@l~qL*Q^pNnTvl2%CBI;Ck<^`8lUKMrKW~0<Y5wBka{-)Lx~wF3Dd_mg
zRcUF33-c@Tsw(n}t15E}vwANsDqT>uFe`UVAp!cqfzoP}U;cN%%Bl(!QwG!X&MGRb
zDyzsV$geEQDV&@St66Ebw78^v@rd*+Sv~1&rYZ>fo1$r|Xd~$1mgz?H!8*v1;s42+
zt?#{*8)da8SdCkuO7vP%Ts%L&cj4mv%F47x(f!J+D;FYAg^RK#aJ(m1x$KQ#ds9o7
z6_?J-n^aU;U4jmzd?;L$SGaId-u(RH#grw>m*<riRaBNyA6Ko&TbfF}(a?!Ad6u5K
zps2K{BEPCAZ*f^gQAu8LIjR`ei#t5)9PU!;q+p=><jHJEOGhUa7s8c_;?f0(%W0`3
zdwzIY&g7nXS(H$d#^B60DO=`pvQPfJd8O4Qm088br!}BYWp#l=*LZ5C7cI$}G^Wt1
ztm>b-j2s!dcyU=_-oj#xwP1e!U)r&ADVT$e=eeCS9R2^4)P1ZmM@gMGFTX0^F5k#F
z2)3#bZ+hm@Op{M>Kz3y17M5_&HD=CkoI8L2lk5FZ&w`?=yeZ{*s<N^Q9^#X$`sR%&
zLVA_0$jL1%%vw4nZ*p4RBxKc;)VwS>Gr20Gq-<$X&ZNSu2{e=SM*f1&t0<a}8M3sn
zC}&DuRz}r|@}jH>lhbA5xrbL;dJ!U)Us%M0FlRKTs;o(cBg!XCQTTt_=fl&_knaCH
z11b6xdD)rPl=n}aX_&|u!?}(z_|Kh6hf{@RrRb9C!m1n$=q&D(zIl_Y(o^S`RV>S|
zn3q?Kbt#{w|El~2f0r?7XUJJQiPC!8xnM0#Y8^>+<m9Busd+Ll8|I2i6;6>p$}h}e
z=+jAO&J);CiK0AitonYz<`;6VEM*_2<Wa_?o;k&O7M0GkI?y#Z5QA|@S8i)wacN~y
zMU_m!rOt&Hy<S>YQG#5sVvF&Bp^%m3$Wxc)3|>=ckws|cVY84=<AJ)2BGAh+WCa%k
zC9T)I;`wUe<nf@v{3)kUl)z+bm!bJ!L0JVx<=>g>a~d9VvTZLlFYo`#D`Z^niu}@f
zWhHs}g@r|xl|lDZ-Z_>B1hBX=ue5sc;=J;*;!-4N4&`n^E)R0qx~hd0Wy>(+7GOy$
zs;DTdK;vXG{L?{46IvlU6_e(q5;bZ5QyY{QG>c=v{&!BKrI8o;<@tr!4P>zwV<!LO
z5pTPpHjDqX8EMEM%oyb>uvN*gs6=ZJ)yaMS%c&LC#^qIFsZd)~w2C*j1=tOjqOnzl
z3;)YtrBb+yE6d9&i)f^>)rulc3B_Ry2WxPoR?pI+Wx;g|lT4a(f^sgJYAMUhuU?)r
zwjeDl3s&aY%bT1@<?iV3%%461A&G;NkE1C1>I}1nd;O!09foBZcL_4YHH}~aK^iSA
z!e$de&nmG8g$vh<`#{ceK_5zrX`*u5%)%6uhnep*_on30!hZTZ1plza3{zRt$aaPD
z-QKLod=ENurrOTr8D>qH0d!^LY9dC|WX#p}b_hEP{7=(ACEb{RURg<T7IyCcRnd8z
zrZeX)&Rxn){pXcqd-ylq-nS%wd0r*16=jc}o);Oml9v9wJT-grrK5BDoLtotrgBP9
z8Fp_RF*!sVUEurLok*eO)}7uJ8R&|6WoPaUOy_-Qj$crL1(TQS{L-qN0v>YzscyU3
zh|TH!dfHe&Jxq-xXQO-EM$+tbKO8-Lx*K-LFh1py4?pba<mJ;SOwE%UC=4<51m<Pr
z?i4lb|IRosB(^`&de4&LQg@$H*sVM$$e$<2BEfO50e_)}OQp0YkoN_03$u7XFLfDC
zck|M6u-!*!`W2PZosGQW`8m@oE0Ae`VIeOlu3A=HN&9>rj0C|>e`!{)rTL4iaixN$
zsomUUBntm;Up15zmC!YUOoYD0Ww3@JpOFL4f|s}r<?=d}*95HT%ZsbD#l;1cRr3my
zlT#|oQhF1+pb!_r#HA5eXv_JUnlGs#(nbv*p4T%aRU0)nXV~z(^pp(yEIp-{HhlW@
zp~G_W(o%Y+^plF|(*e&&Nl$a=oEo}G<iURio=JN_eSG-%+;4LNX9hH0{%hd77y-uV
zIHM9o|G)L0#{S%fXFa$Ls3qXYO<I9FqXF$z$mpZP?+2AW6@0VeV%(t<+FMFi9bX(m
zPy3JBc&~P~(oy*phwp<uzxK6~Ejf7&?!fu9UlsrQeT(p9!O#M@0Z2Ynb-5gO^gLQq
zbwkklUI>Kz*`n@Szf&T4OTJ#+pFZl6=PLZ(iiUWLf2T~!aa$R!2!4(_<kme!($+iV
z*1c7dA9u*xl0bb<I^^vvA?N|+4{ncYaSnNGxnyu#oS)}gssx8z-5O<8XNR0@S)Wvg
ze4!--?dy;iI^>xSd4GpI+ab?&$a5WX6=K#-cgR(juzapVu5RhGe4#^*#IQf*4*57+
zs%gs|a_gA`saHGXxFv6Y);Z+awp7!$IONtd3Q})%$dQ=#XPZNAJrf}1E{EKDhDq|>
z4*75rsLvjU+<MkQs=W?*x&;P3;E+>}TAxD>`3Or0`i?`M?2sRI$SJq1PrXBKjV00@
zcgTBMV9=8expj}9)k`FZY|oXa{5Rl`W1_G>Q4YEFtb>%X4!L#jpX3P+c_<0gr?W$T
zwj~5jb;zw}ETr!1kXz5nNS^7CW5TjO*$%n$J3+Y)dA^Ot_jVj|JhHGqa~<+owp7y=
zI^>vG?N7Nwjz<~xXSqY3YD<y-4*3L!e4Rty!y(_|kViV?TOIN|hkTnu-q#`D<&Z}?
z<hvd6Xoq}{L$0QH*6wx4onOj1;E+#p*g52oThEF~{f<Lk;J_bs$j3P3^$vNGLw?*L
zFLuaJI^<~%xu)iG%76OaoAn7e<nt{dXp}>4J)0$UtV2H4flqMAvmEly4tWQMJk=rZ
z?2z|$$gS^UkUG;LZ{fgaJLJ~0aZ=|x<e3iqbccMNLq69b@92;(bjZ(g$jcq_mJa!H
zhur$k1*um%<g*?4bq;xJhkT1e-pwK3>X6TL$hSG<Lml#64!QM=m(;r*^6?J*9)~=^
zA^+d$|03|e2>dSsKSZ|qExYFHK=uaTyV##(U$nQ%bLvob&GUihI5?+zeGKu5Qyo76
ziEOJ8p7-}Bj(v3M)Tu4Z(}lo^V~1^?Hr6MOJ!|s@^Y`04UHF_hc8kr^#`nar%WR%D
zo+pm2v3XkLP8?fe^R#h1aV+2FX`^@I*hHJB4cm!hLv5ZmSSOC9**tBOP8@4z^Ry8<
zaV*;AX#;fPm~Qj5VL5T^`@gLA(#8YrxA|!158Heb=AX5B+Ay3rcE8Qjf{pguJT1s*
zzs=J^iT2w(Es$ux&C|k&_S-yN(4qY{PZyAAzs=KvhW6V$Eo5lF&C^1K_S-yNXrlc#
z-<J9B|Fqhl!2Cxx-;VjiHs7B4XKkJ~?r6Ww)5Zbqw|QEi(SDn!jS<>!^PQMqV)L}Y
zK>KaJ3-c3go-TCIew(KY6SUvvX#qz2ZN5A6(Kb&Tc(mW<X(NmN|HEoOZG_SPHcuNf
z<iE|QGykm3(*+IMZ}YUVNBeD_7IL)T=IMeD?YDWlFhT#@JZ*^4ew(KYQ}n;h(*-r!
zZ}W7)jP~0+eHRJsw|Tm7M*rJ9T`;5lHjkkX{`=pp_GdExk<HTv1?{(ay1>QwxB21B
z-*59Hn7_s5X@iOO+x$r8*Vz0h=9k!fHuL#5pTqn_n;*^mP@AU>INERXW0`Mf^K`+F
z_S-ydpwNDspTPY0zgg|iW&R_ZpUC`So1et|vo=4O`TK2t3iG#EJZ9H%=(5PRhzrf9
z;8(i%Y8PMP;)`7T92Y;;#k=dva_I-T_+Bo)yNmDW;#<4;7#APz;(aduPo%Un9zVJG
zZ(RImF8+NN|E7z7#l^qi;-7Ny54-q#T>Nb={zeynm5blx;xBUXD_wlGi!X8UMJ|4h
zi=XP^$GP|{7eC0w_j2*wU3^Cu-`d5;xcG1v?{o2gVv1|f|1SO;7yp@yf8WKw>Ed5;
z@h`aer(FEQF8&@Df18WH(Zyfo;y1bYi(LFl7hmn-OI&=Bi=X4-r@HuYE<Ve}4|4In
zTzq#I-_galcJVPTKHSCoT>PI{@*4ENi~q*Of9B%fxA^Q$gO1@mdz0^DBK=NQ#bB%Z
zIaXlW>V}*;8rgO=W@GI+MS*{e@x2}((&ex0+T+>Jemf-l*^@@LzCZi$UscUu;9+GT
zaO&uM_R}g)^Y`jO)hMe~Cr{0;8B{@weRl0<Rbkm1291ZjJ_PfA{XA?g_xr|y*XN+D
zT|bpSw#?djPDR1V*q-;zu3dRxUiJoWN80*i*JjnH?akhhbs)R8uKqV{Q|hvgLau$4
zK*9}EkJjwVUpMu`>`gdo-y+aYSj%g&j_NflkH)P!QkV6q6aHz<zM&1_`x*Wz;GY8i
zRU7guyY@M&%28-RcI`W4_z%<$as9mPWa(U$uYNg7XK$Eu^2O(<oU;umQhlg)>Oogi
zlt0;<vOXc3d&uUdsh_~^JK3AUXJGrBUHd9&R*_|e+DFTC!>T(5JyoC^0aBh$g4O!>
zi6^t{9$&qXe+ci%+Ug%`ryk!h^~Via$Mr*VY~LNatRIuJjyp6pUq{uh{G+z|WX;My
z^y&d?R-Qa{3jLmrY^%nejy!I~9{Z*;yAO)le6}Asv;x~ig3O?OKrmKMlZ|KSlB)g+
z<bk6)IEnZjhyM+oNPvs=6bU58$vxDwYxh<~NI_lwdYJzz+~RJ4i>NHva<qY32tAC~
z)!*>T-|G+lhw@KSuLK*zrlrp(BOi%EEyp7t(faO-ymGIjVKrZ;0{D(ID^4Q8>#~k>
zn)<S9&?Wn`zSFWdOhwma9naPg%B=6QYxif@zFof@KGhu8*Y2%;i<KLuo<uq}<FSHt
zJof9UQ-9OqJAeNB7QaNvuA-A7TX*K@ZOEneA(DaY+C$l0FgW*FJQwE-K8V^ZYg^#h
z-}QwCy=^2Lm*`~N8VavF-1?$n24TXGeX5d$`gI;+WZ9Ba!sV`>rg<hC-2lI<_h#2l
z-Q(;Io^R$HfD2I9)%Ql(?Am9+?jfTzI6tiao`f|k_i8l7X2C>V{a|)->fUVq&{sZw
zg8)+WD0&gcxV_REhvkKzkfiQuCYNi$oKaVQ6@|hz%|ug^P9MjBoy@MI#6h~yX(rt+
zu+HhyUE9(i_h|UYfmJ)T9t}9IRkh%f8^CTDcU;Xq`&{wjQmEi>Y;BlIgB7-U4qo%)
z=|iJIdFp{!n5{<-AV3(;8*-`FK{KPW`|Yb52<9k-W53;-&~av<3<q*7Dp5rO*_(28
zKCjIUe3fdIUC(7{E=QTVdXoxpSAspFtn9a}0B{|;rr~VfAip+I`|9ew)K}D2YO`!_
z{tpetowbg=Lu&x?>kR7|#C7$Lqi)P!(Xe(XdqCEKD#3|^{GqOcCK9vgINY)!a0xp)
z^#FrqwJ*^K<19n0YEDKj9hALk9EJ0p$H{<dVHM{V4N&;Q-E+A##YiQ(Pc{mOy80Rl
z1I5Xz3{%g)>Q{1bD4lIPFQM66z&n=20bgav6|}DY>k}L&Hn|#w>)*p4wY=6(VAol<
z1E=*p*t&BeMd%x*tCgdiW}E?!qmXk3ZZH`%NJ!k)Yk*YCz~3db%$ZT_CxVB;5v+I#
zqzx-3R}qHbwuNSO%DYX->rI%(W#j`g+hD8V#GMLxa4DhuSqOu>kU!gyKU<xK<$h>a
z_NJIQxY_qKt)A3rDHQEmOi~-NcJb7SX^BrW0}xZzz*=4XCC3@I8=DRsS+LF-k^4Q1
z56L1^_b72ca<`WD5Y*>1on>t$D{0hQwG<Un9m>{eeuRDQm4~PbwM~=ay7~lU3hk=6
z#=83Nsk#lRhys=0n_c@ZSxuHsAeFIwvr2x>?XpWg$|W_FgfrC#RLSpUtH?hzekzVh
zQQ66ujA`nXUJWLQRHG?T>hx$fCJg1q9$IR-8M#qgaN@{nU;SoIX39_JikON{I&CfI
zSk=|v_#HKwG9ato?xn4=iN|G1)YS(F<jRE(s4AEXsNp1L>XTZ-eFUVA<h5pX+Ak#k
zhk3dlO|#N54(_<B!b0j;Gbj@~Q)=@(UCZ5t@YU7#K!-*?5(`@h;eNS?8w1DJ#UgYK
zhOyJP4HWm22tTT@<4AR6qYiXtBdf7oiNm;)?Vb6b-yn2do}-zZQmEg)$jkR)%EYw?
zt<-h(e}2my4y$$bhY1_p)bC>!DZL3PvdNy#TB_XA(L&C3E_)S$`(+)iXadVDsi97T
zWGQVtS+WF@ue{)pfm11O>>b%OPCIwrBv445gPLaxtii#V;seeM^pq<*{4f~oGKyWS
z-9KubyMkM;`lhaaEwfQ{ZP4YAdl%uHGI>8h8=8}-)Jl=hscCXS3Ra6+sR`)GYT)2^
zEiF5A&^`h(?&Z4r$JklBr@07Jj?7j2VHi4eT0Cgpp@cb<{mVPpR>{HCAV`nNK0Yl-
zA3^RMspKj*OKVUyVxkntkxl4lXBjIpswt&kQwr79Kf*BUYR@(xw=bwAAa}%$daO9H
z1JoY4i_7zUm3}(sv}qU-=@##3<*MUc&6|Ja?EnAMj@afd)u8DgbGYm_HFAxz2bXB{
zxqv%D&2mBxB}{0@7|e8P;W&=^sFkkd&2hz8h2Iq{yCR3&op7pGI#UAl!<E)Gdm|s&
zi~AgrSJ5Qks~_?uIY1L#U42t@ony5gI)z3J4?%lYs~vX;XpDR8zfm%$_Ia?F+3M;q
zCPO@Rplx;a%b2Z$_7Jv6V{1RouKl2%=aZV}6J`ya?Ql8R@91#qcVx%k^!w?tko|ya
zu|=k-S2}qVGdyIlMytXq?BA!t@Hm>*0pS(+W6D()L!=*i@j1TNjz$N9PdjOY_`lEp
zBJlse2snT8-M>HmHpu!pXafDbE}^unDgocZFP^8#pUX3*;SU@&y`?cA0nh&Fao-ys
zo;pSE{>b?3)Tw!(BS6mw9gjJ13ce4}1f%hM&<8+wfW8X)JZL@W-FSXK7?a{b&}pDo
zqFf2+L!ftq(z~4wg8m5lHE1)GGco6V3YrS)^=jHppdCP;1|0$VB`CchuP;{ab)c(3
z?*@GY^dRWDSd@PRy&JR{zK`%ZXa?v>&?%rv*alUB_65BX^eE^a(B|0Qy#qQ6TR(j5
zT-yYi0Qx9sCg_Wxb3y&MXjlz;7U(w6KX9?|JZJ$fnmz?x4(i4C94-d!0J;ry1n4WE
z^FWV+t_5w6OVS;nBS4=A&A`=sJ?LuC0B&^b1?>#_3urcI3T~V%1kD6p2YNf`F3=}H
z4}cy4tq0X`rzU{!Q6z$P2AxEAZa`OqE(Co9bRFm$pu0c^<4)KC&|J`Z(1oA@^w&e6
zok3gTzUNrb(V&Y#XM=78ZKj5ne(oeqUmm5m3=@GZxLoT1Iejf*%ln8I;;BVMjf{vL
z9ceBLtk#Ca_wU-XLwhPp<wxK+@bRfrd@qND_>i2whqo8<Tq>_VWU~s#6Ii17`-fQ(
zQ5SoLhx^B&V#rB<C64={=kJMI`s$$mA?Oc5PhW%3Ed5zQ{Tu&5|KoqqlUe=T+_4-H
zaeXh;)6y9iip_~H(BGim4d`skhpZaI^N93=F!Wga()v@UZYJCk7w)p4ziSb1|FKi2
zsO`3`$wB=N=snQKJM|NT`sbl<i+FT&>SqV_pHhE9U*gnz<}rZk^kUpr{7pPNC_Q~`
z!}hO0+E0Ke1NK*;JUzDeUX8(H#ltg#L4=tO%r0QE3A5CJxghB0M$~f<82b8!ZDX<2
zQ#@~gjgO&!j%@UH*r2#S9JE98(JIVq^tBJ$PH|9A^VAmT@r*O5FAwTz{<;(TCQf}$
zP@e()4baoqQf&K0K|Rf<jg?P8kt$Vwm$N*z;kuxWt-vH;?rkg<^d8gR(9?UhyhAX+
zteC@&(MM-P)VD`rXENsG#$us)@%~8YyE=Wz5BiY+eHrwP#Uc~>eCYYN9+nSP!SZvV
zUj;pVMZ@;dGl~HT5Uqy(Ug&Q_J8V6*;hJC@b^w!#bzwdrHpVl@ZsYUNFNMCb`Q%gR
z7eh~9BeTnA1%31)d^4eMY<zWqehT#6o#o~5;rVI=^!d=!*UD`Bql5P6sq({|dbE+k
zM18atdh)-WQ$JmnPk?L(^vj|D&Z(z-`6yV&0boX8ZKOHJ_Q5lp0aQml^ySbGaq3}X
ziSi+U;j{&MdQfVYFAdu74E;{%>8nt-z9gv6hW=^j8_Sc0(C>!6$XVVaCn@r89rQm#
zALG=I4cgxY{a4V_SK;jXrv~*0p#Kv3B&S}c2=`Gv^v9u3bn0gY%Lgz${{Vdtr+$7=
z-x+!j_85(g`E2N;pl>Wb3!$eyOJn}8gT4dw#m@RYbJ+ok&o1aop>Hg{2cVw|eXO(m
zgrNWR&`*c{O!<+3G65{UYoTA@EI(?aQRDSYBP--XH(=_3X)H!#p??ed#(Z21{Q>Cd
z>sNLkdgMSM`x~Lpz<%MZ270+MApPCYp96iIQ=co_NTO4x^w6;x8+GkA9oY^pWP-0k
z+n^W{&=JuS<9t@i23^}h8Y*{vM?HRap{DKEeHVN5??`;DCv>|<d)R|hnwkFh`CkP7
zs|Z-XSG9hhYW*J7N-FxTEPX7Vev9kmA5=WAT~Iuw_%I2xUtEpnZ~Xa#2YB!|rPl9f
z=_|+dvG(Y^)`7QvFH7T#J{V&B`RT7yWpr{J`waTXk%Dz7Qu3Hi`BSbGxRl^eTORzl
z{!={9M>xkeM1IO8QD(K1n3w3&OcG78S_{SVg$T|qc@$6JK|hZx94>kIW7UW6O0)mv
z?WG*I1ev$|z*NutR$g>9dbH0xwhI5ReysP{yPZf)m6A+Fa}}MdXt|=R72TrfHbr+U
zx>wOdiXK(;xT0E`tS3s*1VvL7%~Uj3(YcD2E4o_IEsAbabhn~=6+NWrQALj{YQ2Cx
zDqZ@KplGV1nTqBrI#<zhMOQ1jMbT}F?pAcKqK6bcs_1b=wVtZ|iY6$Us%WO7xr)wJ
zv|Q2Eif&PKo1(iF-K*#!MUN_aTv07U)vsuRqN$2zDw?b4Tt&+jU9IRAMYk!sThYCW
z9#ZtEqQ@20_<{rTgrW(GrYf4LXs)7j6)jhEZ-w;V`inO)^iSwKwV=ARsyZPp4KG<p
z?VeW6Y}%^y^pw<$E=sH&#MqS6f}Dh`SDS{Yxx)PlY4@vn-LE8dzjCxM-%kj>BHI0`
zWcRC?-LFh`zv9*X3T*eQVcoBO^<>JRJf~u_U-4Gvom4zumIC8`rLy~#v8TN<dZ;wK
zOA^ifYT<%mQbCuD^l`sJ*Zm4!_bad6uT*xwdimB7(k@@h;ne*KZ1=0d-LJNGzrxl1
zYF_uNq1~?-cE8%z{VH$wt7F}-Om@F=*8Pfb_p55%uj+NbYWcKR9gmjr;Y$>px?h#+
zepRjeRm|>J61!jV>wZ<Q`&G#9S6sVa!R>zKxBHdA?pIs8U)?TS7yNt28rnAKJeW%s
zqw(!ZmD1k4C_W~^*tAO1Vxqk5Fb&3dz1JX>VglYLv8#dbQ4rsYG1w#=ZZQKzVglmL
z;rQo5=)Cl&i}9oBrrLElAGCaf#wXgK_T%N5cTlT!nsy76fk7$iEDAM<BQQ`F@EyAp
z=9;yj(t`udBlL-#uoVDvmbZDd@c~YT_%W)QH)%?UA&<r5ylE%_H2-n<*gR6i&}j1a
zfw|_*d{5%st7V2jM#oU{(9mLZzn%pNiORh`yfaA)p<=$tsI7U7aUW2=sW@-pk7-9m
zyOXjzhHI=ZZZytYyuKd4Y>!I|9L7}WzpMkccRf|b%@DA--XYgv+ZXU(+XYM?W}^HX
zaH${Hmzh}q{R_bKV<y4>9OnAC{>*gtSK+Q++yG`${ad<$8OTgu|3u7}af6u2^cQpm
zlgUiBKNKk(H<X!N|8iWe#SLR-x_{<eFe93`M0Ioh-=b^cMm9?Tv(R5inr!yE-2V%C
zox@C(KV~wR(dLJF*j@U|kt1>An!JyOuJ*su2F&=#bI;ba3;j1C#Bmb>9bv7;zXCs@
zikleO3(Puy92uAq{uK;t@n1;Ip4DOqG+X^ABf!j#%K@{^KN>-do5Swx^0!9?ac76z
zg3#~w7a_)Rd7<OL?D7ABt!La^_HD2Kc4S>#L0~)#Jg@oQhJ|>+T@vFFa}Xa9g`y#!
z!q^hLs7PzwTsI4HkOM6<P3lB%%T4BXSoOBttmIqF6|BF^yo%}NW*yTj%ukqJX?jN!
z{wgzp>DA^Srq`HfGu>)dGriWlkm+^iE~eL;uQI*C{F3R7X3Q9}bCa3IbeoyY^j7m6
zrrXU8Om~<&nci-`!t@UF1k=0CSfrG<<-O)0rn}7<Odl{;Fn!S6!So^X8Kw`LN0>fh
z{>1cAGYaAKw%lVTGkwfF$@FnE0z=c=@(DAA>67MorcarrOrJKdW%`Wy5YuPPH<><X
ze$VuIGkOA*f5Gg>biX;1X`Oj4(*x#ZOkXq~VEU5zI@6cUADJFBV{)ndD`t15ubMfE
zE@b*I^AbgGXL`tdLD5f{9yX1MRQ|Bpp6P4mP(_PCTeURx=EvsHNtoW;hrDgoGF)%o
zoljco5!9AeE!*f36zo<l+vyP$<yI{_=n)j&RxLa05wds}Jwg`msz*@qiixl)0yLrM
zGa_0%u@JP?(6Hxm`Q^KIE{cxmJ`1o;i|Bl0^bTAHErf0(j>~a)3ZT?FJ%h2@YD}x=
zu;n1_oj7*e+9r52utr9v<>f8q6QuSms9PAoQ*G&fS8Yem=h~`q_xCLTf5V{x<5}RW
zZEa_%jfJL-tv$UqT?=^;27I}dFnSi(97nT$>sURW+8r_+g{P00iJ2jE`kRAcG&Jid
zYHl+md`N)q9N|3BW@Z}B{kt$(w3!`F!&@6kiZ*9Q`4Vv39wv5@4>!U?oz<~F_J?|I
z7+&b6Jpt9TmRgHll?Y9K*nlccdlS<4Y)z-PyF*hL?hTWR3;nAEzmoP=YIr<XxJc+1
zYg)L_w5B+?LZvAY8?a061ZldZ(RT(5mWz9$;5AeeZS@>9N|mk>adU9b9;$L%eK(bk
zo{rvVvqo&eR{VZyUM=)j+8C}uVlEO7mMY9W(C@J^Y$tw9E$nO*>k;XLP`z!bJ-pV%
z7ZyRiS$v4`@D)@)TWXyu)hf3%hx+=cWMm*ElO74zV{pjWRNafkr_FA$?;<?IBz0F?
zrG=Csgx)q&qDE0`y=_LslVH?~DJYQ}XovNd!l08-i%Z5d-MW?DdMb>hJ&}d<I0wq=
zk>x;y&k1dDpc9=GhHim0y^0LB=!UTB;R`~ylV~N2wj#0g@I|4Ikcgn#j2fWYrib_c
z4f)`iuI~uNKctm073cGG(QY1|L<6NCBG=!<A1!WvH|S>S?Re2A<;<cb+Cu#*bUw8|
zCPX16eCA@j)lNTx6^oSV4V4kgo5EI=E*>3-f>=MMk^TtP#eZl3Xc4z015~SvH@f1{
zJ|q<uNQ>BeE>u_O;?o6ql8j>4SSp=>(u0WcLjk%)7eBYwv=0G#l0bCgtYjlL8J>G|
zu{U0VJ~|VK!}6FeCY~oje#A;z;_4_ET0|km=LKDysFAU2N1#tpofda^2~@N6cGT1m
zl1IEsl9zRH?<Q;)AsA0!j&sC~#ZdiA7YAU6VpnR}k;ax5mCe^Yuj}I72w9XTThH6N
zNbpL*byfi_Y^{k3QK{xl=wbeXeS<e4)imZ3O*12zrkgF9W|)sM?PWg4w72;$rhUx!
znD#TLG3{>_G96%+F&${0$8@mSBcJRJF<USlYIb7zFtaDq;pPygBg`>ON19(S9cBK&
zG}}DIG{-c#{222R=Es^>Fdb*!%yhhY7t>sG0OKZ_iA3A=GDk7(ZEh+czK^*JG%jWX
zhEJT{Djln$Z*LrC+{rxqX0%y_h_^pKGYnDQgEZCSb9>-x4mXHbz`TdJeT2jF32bOm
zbF)Y-)3l!;)lh~t`ZuJWP4iLv9Zj}gfXC$!#6q3e5VEWv=9u>PiY!d0dWNNw^Nbeq
zFl@HCV>49duCPjImzQDIFz*gopMbh1p$u(%b^8z2fKeN8>msq>Q7juxYtWL!>TpiQ
z_zf7<iRX*exDUDwmTsrIejzVcux531PYfMhe-iRKOQ-+Atz<xrs7L<22i51cnzntK
zv|KB$*ogHHs?cy{StqrA0YowqiFb?F`$1BO76a4W#&Io8KN<lCmxTMF)|*~C7tG>t
zN>M$eKakNwFx@5IFYdrnMkVzk{8>aMOcc<v@z!K5@!|0GQhOm3>uhE8U@H5V=zO6n
zdka)MgX*E^-^8Z`{j-K_dM{M_ZFSRENnIKKBtoi3FY$qSRxE~N1ku07pA$AV`UiwR
z@dcqbQEC%oF&c;TGMa7{C%!0FV@~1H_-7uq)S&tVm3~Fs(N3vzpqda=hfIL_b>U6a
zG>WRe5USFknx@6Xw}pSSQeOhqrl8tKrQZ`jl_>S?P~9C=A1#IYV=QHIa?xLa>SbHq
z^hQdb^6)6?o#+_MrHS=oFS3Im`uF(rhlQ0ro}FK%C4P54fP`ogiNS`0!yp0CiAd$d
zUqw_GWu!Os11*eZ+y!}}ri;1gG_K?<=w{pcrUQ{miKQ}KjNg$Ji9#2*V96qkUV}fi
zHaN5`*4)H!UA%M_bT>mz|5_5KzjP+_$>9LR=)#``z+Na{b^!{D0Ep8?%Vhw31m)K@
zfD&3WXuU}6po`{MP`P*LANp#EL$;a6D9d?37#WiQPu0c47h}gjo!JY}EF11X(vq0i
zR~OSa%Oz3I1L_<bNrg3oLBn)02@@GDCi+?cuC+n7Io$ytsf*7MWQIQo=xdF@IYcr}
zvYv6eICq>X_%#asVi)8IL4qdg;w(%UY&|*}&wg<PyI<OLz^7te+o<4~fX-|LuKb{N
zKJijrpu1$WtAJl?m*I%YKr`}kUDT#1<V`@`Ya@AvaUieK#j+I&c>t*QZKOS$IbGPQ
zi^z!z{tKW217Eh%hHJ(%<m?T)ID&PSd!ijsX*SZ~EF-t+V#N}L90SxW8|iSCk=u2#
zdX_>~1GU~p+O;cZ8GgGi=3tU#7j^*p(CKi^*n{0`;+?u^GD;y|1?mGE>2Q{j_v+&6
zc?x+Fr~qx?XiC-{&NA`=T`a^P;@aB-)yGD<on`nV*lc3vVE9Bp^G}CsMlvc&d|Vf^
z7AoX<Ky9#*4rdwpj4t*~P{`YWde}xfoMq&5x(FYskpBYeQyb}amf>}}IF8wuo&5{Y
zh-Ow4Y`A9h#86Mf)@~&>i;V0HR9_qEaF&sWba7d4g`5ObfsJ%H%Si0`e#Y9xHqQs@
zG8<{vuF`<v*b$EDui$q9`o!sQ%~*t)JMjZuJd0_L4ZjK0XExH|EF(YB#hvRE@)S^!
zSS(LV14e$Xi|>;ZvI|gyZKT^-hJUGxW^)yMI-m<rhiehl2zla<x)_T&m?oTc0C9_D
zvvXRT(4W$q&`wCp8RiA2d19!(fV~qQR$qZH@B{z|p~j_k!CLI?aDh1xDdz34+AL#w
zvH2#`TJr~{8_fu0zqi9Cvjfvh&HhX`o4HIcGtXmsrMZ>q)#iOnuQgw0dY$<N)9cLu
z#)h}Ujb<07+sx5Sx0`1(z0F+2^mcP4)1BsxOm~@2F}=flpXpuZk4*12W9E~+<IQhn
zKYwcez*ORYZl1>Slg-C5{k8daroS~WWcqva8m50Vf0}5=0+a5zdOH@HXXA>>+p);3
zVmjZvnCSxZ2Br(m2bmU|FEKsGJj!&D`3uv<W-NxNw_}OfkLeO~D$@${Jf>CV4NR-e
zr<g7^KVZ7t{E6ubGYpG~x8o`^j%kgV%yg|el<7t0Y^Il(rA*hE7ct#n-o<p2`6$!P
z<}0B6$01?-*XwWN5<M=b6V7+&;j}_WjKLi4$2Hbvt2OO5>>6Lgp&vsL{ZpK2aeKQ%
zf0G_gJM$1y#?dC*|DevhY+3w$U8HxD#hasoU~!#TEp9MXc#j_b7`9Jc=FbH4oh~kc
z;Sn~Ps+KiI(6-H==n+?zVHScok3iqTBP}8xyB&YJM@$_h9X;1p#a%lWs#|p4K*!Nm
z$-h$%r-YB|iHlzUK0QD!ICt$bFsF1+|3vK3@}`#aHDULEx554swo+)KQU3G(<*iEa
z+Ia%&ed`o`=<hvo!O^)hzNhJ%`V-Du&=xu1yD6d^yO4CMAeJP)9iG<^kLD02;qd%P
z;UtK>N|KnJo^I9X7)VDq#E5fHrT>anuya=^mD1)s0iy$^;-CJukm`D=DRrf9Ug~Dr
z<()6Q*8%LiKkRbARu0L)q@<k{<$Fjx1b#@He$YMKGz`{<JQ~3HBTY#zFPeOF(|3{$
zAKfDLotsV*LS#3z(07s8-yC<yfcyf7PAA&PxdNJN#rp{6?+}>rXk;rG*6B<(vc)T?
zBg(fiA`7CC#P}{X53a^n%E0%b0^_Lw+w<$$P;U-n2FZbz`tEIZ937(h@0bqez9!^q
zU==kiDwdx5`W_cIuEnJs46P+&TssFV_NHX0pB52FqpeVFx7FO-PF#AQxXy>WX)yN$
z)Xx$miNfCL{8AL&FD9l+?Yq!?Xc^FW3+^lGbv=bjLJx_KXcIxaxXuj4Aq~ae6%Ip3
z#M8ZSCkxUpq+uu7i`bd9P=6rCAwdU0mEBO?X(e*s_nElkY<X=m7wY*0kxpKLeDZxM
z+T}|pS3z^BZ6KAxDl7Q_L(KP$c-O0Gw?e<m!f3Jo#+>Q<QIssey&y>IER8JK`Wd9X
zFI1m~9(WI`uNtU%pQE)NL79@M-+C#&O$U7>@-^5%iD^ochc7R&9dvpKA$-TN=J=+^
zzJmxRowE|>N%{jA<GtW?7W88*D@xl{9}$8<0&O8Q#iZpBB+bQ$^$pf9Y>Q1DdT|Xj
zmswhF1Ye75ttTTzecAdQoiRN@|9C?T6_voGZx;bLQGfnCY49}wKRz9-C2h_DZiZfi
zC7*6d{RWH=6AZg0O?9d509gU9bTFADK__ol@M6#X(q+t002b*Y$&Y)TX9D!?2mo#h
z9>K17p$%Yfd4}q8KXuS0*al9<Ri6#uGy0=7{dW%l=8rf@nJUp6bnyXJxJPX?pV1$U
z??m_(29jsk=q<W<9qZ_4Had9AMVh-3HwrNe_|XrJ_E96{?!<R3wzKJScalUP_MY3{
zI*kVS?fQ;PbS+d_IArP!p)uInh=lqM-QN_qW}&LI)wT(FqeU89Iuq!7_*T*-Kwfh?
zS_|d*>QP<1he5C31H^+CO6$eCz50DqFbp7l&C<weOcp($i;!t3S`Xz9Hh{gAfH!sV
z>PP@WkdJL}1e+t<&3DHn^iy5z#tfxr0G4wGD7Q*NvB5iMJfL}it!M=5bkpw<H;w>)
zGq5{syq$PXXfKa={aipF2kZqKI)dUa>(2FvpVtBK9+Y3%09pW@W~O*VU!;kyC*ZCR
z4oABkO`h%%3&~a|Ao|!Ss!Z9+qxIxwk62v-(KsNcTPV5E8FXLKx6>o);7JaZs{ml7
z1=6`EB<OyR7!{>J*8p&<4dUFCpeH@z#6$&p5`a1z#KTL1Uh#;l*DKIR0DNtOI7|{0
zZHVR<D3HG$f`CH?fkLGj9-1YS3=xGcr{zsg1|W?<JdYW4lh2oGh;Ha-9=>Csn`jx)
zq`t2q4$M_UcM)_;?D9S6E}$>dxcWj_ycU|xc4?{2Hh!EX3-5&H9=mMQH)xJHC-pmQ
z6m)}b^Z6zk;ts4Wgwfx?pCbgORZHW0g1+KjKL)`w4e@>_iP81;xD$XwwTf;E`U(v(
zxw$gd4!TaHXJZEI7aO8-s471cx>3RMbo<g*4f_LCtMj2-5Y*HCOW#UE=#@&p2D(dv
zdb;cAyVwvpSox?8`Yq7y4C?8&qi?ezo*JU`&q7xh)YE-O-&RAc0_92PBj~;e>gmR#
z?<PYmLH(@Pv7Hn+RQqWQ>)URK^9-eL2VEyy9~v<k`uh#>6EamF1o=49+1mrTdP>yO
zhB!U|s6rr08=$n%@=Y+a-w?lI{ngh(x!wY3#=YUt9Wq2nf91js=<XyvCtheQLgTA9
z#H9$Oz8CVBt+H|tAOYVS;xht#1mzbNKnuNUEDHZ(h<mD_`x9~lOP=amx~=LvWr)2H
z(F&=z#z`XSxnjPr>MQI+&!u&P?yLGDydu7t#OR{|oN9rkCr!5_O1^^h2ZJTrdc{TH
z2&kWrKbKGmJA7IX+=}&Oc#opzsp6Y(+(8I(K-y$Pj`w_QbIAz#`Z6JcHVnF3>zm;f
z?Ru+<J_Fz@3#3W?Jg?X{O1bXqh@CJFl>>A;*H`8h3o=#tj?g8OUXB6QpX(K6h#`5Y
zXF)fH^m1mnfY!BjUNP-rHN6x;S8kP8QyzmZ^NN}C6lgsFSJ@yr<uT|wuXqW&Y@R&t
z1K@ERB&R$E?evOAa7&9pZvgP24U)525lzESc||R{oI$?=;7zguC#PWsz3LT9YZRyr
z06iOk<f6zcox$)UUeOjiL$)~%&^b2TUcEGl{K6~l9j1`WfV!{&Qh`o-#k;c==mr4p
zwn02vWsA9Dk58nfDdc{j4%<j>ap>*Ti-UaPA@qj+1(YXjfV4snM15m@B6F3p5{5ak
z1rC`@G9(OI;S+(43X}%GKpQ0269#SZi9wk3I1pz6u*e3HC1>0izRf3A6)5;cfL>+8
z9dTpiZl8D>TUR!GA5f1sKxzhqp7n{Vv0yRi4FEp1L5{dF@_nCp8Do}_e*qPO4Yq8t
z%#;Gm8os7}amgaJt|bD{*9P(4(_xe0`F?R^p@L5Ww4fo}VfcK%7&2Vdem+neZ6w>2
zL1&v+_{EB9g}fc8y{99cLFF=c`o&>uO+NzscMZ!pBFpfn{Nk=lR23mempB~3i9}u#
z7>s<=FRsl~$euuDH$=MQ@r7T|ONMz{PylF!4W~18iS^+K1iGpX1=M4#pgAK^hzGI0
zao5n-1MjelaRu~8lgQpe6k|8b6+8#jt2UA<P@o(kHq23=dWcUp0O^bj?L`arY#|=U
z)w&+h72n&$p(eT}*wp!|g$T0}H3hoimOdDLHKj3pgAiw7x#c#@0rdPv;K9<G!3B2+
z(Gx2J7rYvUcAuf3qXW6jQ$k!fUzK?Y_zxQ?qpEmQh&Zdie+9HDHUp0Swu3A?NV@ff
z5PxAIX1BTnKg=$}UCDoB*0M*x3-Rzc1)mM*(lfx_t%weY8q7sp#TMXiYov^7MN&X~
zfy;Y_KLhByXMj5rlHJM+h)iql{Q>y!ZdS{Ktq5Kx%9fuK5bb)YdO86=^bBRVDfCDA
zRvi$_aa)pon+1IJ8Om_d(jQf3bwJR!qq)px;O{s?ncx+#^zGU}%vTr<T;@68-?7Ws
zNS$Y$q`ffh`y>#rOZ0I7L%Umz5B7L4U`dgb^<M;*DWBQ{J@5=Ag1wkjK#S{Ffi25r
z9aDgwXO{@#__?d^kAV0NUBMNu0_qAv^8SW9z;;OsrRTUle~37YQ0aF7_K<Cq8m<`$
zegL9E#CO=NaW$_3@P=hi<44WDRv{t_W1RKhLieLf-zh{~w@iIIBO(RkABP(MB`aaS
zM~KKPmv@Qu6zDQYFE={$ywW!$L|hQ5+A|)yLQ5aK)aS9T84Mp6BJ{orz7o()Hr!q&
z6|y8mWDHWsoj^TmBOM`So2x>^G%S7`y2C(yWFu*%SGCh)Mc;-H@y!&4{2eG0i=7O<
zqjpB#6CwtcC}c;V`rAmmcBkPdLd2uk%d-np0G)R_T;qqUzJnp6wND{e0Y%$*>4L*q
zdaUR>5+W*vLhb@;kBxLV%g8@NL_&;0z6R76Hqz}Z!_83f8?Iy6Sv?h(zBr@{He5bj
z^|cKZtD7ohGEf6-q{CTytmsP#6?fJu<W!)FY^1|kMotVBKV!z=+Ajd=N*ig{t|H6u
zyioCZse<1N=+mdeHGa72tAq=<H^7G90jl0cI-I4)ioP|WqNk~l9&93;;5aP}7`Y=<
z9L`Y4Za@vSk#1)h{y?Z$?^W<wfG#>6E+4M?o(~m=LKX5Npsuo!4rl4HqVM%k(QdIq
z-Urk(HqsGUM*bWsT4Km@0Nw@aTN~+imf>DgJZl*a;D%o;j?>bBk<CppxTi9l4%9Fk
z>2Q|5CgMvnMc*ZuZLmP;vw>P{BiSqZBfkOS>t_nRTz!k;VxTUwk<=^&y4n=<kdVKb
zaTfsei$Lk3ZBA`I=vyVe-KL0NtKdff{k0J|=a)({F1XJWv6w`;o~CGN8yvw<C})nC
z;seWiUjWA0prA7pXa)bt6u*vDHWvW8rV+UGBeq~YR;E`)HMZn80r?<~un~jh#4R@|
z+=={$zYiN~E=7~^+lDR|A=obh|1Q<Q7s8C<`*^26G#*xrn@aS=3%`XxH)$C^W86k1
z_4pEb&Uc@addG8l|N2(A4c@<rfI>cOO6nEM-_Y~ZQ|hDvP1`{eh>b>@lLkk>)d$}I
zgCGxwXEORwr!$=}@;-G^A89w93k-{X58HeC3FO6A0WF$t-z1F^ufigg({IL~+ekf~
za)Q5Dmo!F<zyiXypN8srTg_jrOPbI+Q)=IX;v-wxBri*Ti!_Ax1!+5xdTD96()7*8
z6x(S+I|{`Gd1s|-{d1eG)_>}XyH42rtkEm54bVGRcuf5k@Mjad)blYS-ybafz|u2^
zTswOS6w5rf=im)4gtHX#F6d|~*7;nI(N@zcpjv6E^#xS;LY?lCc0SJ&{!BH73`Dwq
zRYQmt(gFg_+hvlu5_)f!$>tKKQ{-<}y395&WxmL~gXu!^d8WnY5zrbvAFExH(Q#y@
z#X`g{)|e8u9oHx=_T&>YE8^DPcqVY9J+gOB=uVt#{_#z~oXt$Y|8YE+JZ7R|sf>~D
zd2=}?L_kO3@I1T-Wu#`l=T#H8kRY9JY4m4U{RIZIQQ}Eig9o}$U1Y1DC-qu=4Hhn=
z+OrxNeYLH7k#t(fuW;Q*k4=pkA@ta^#eS^lvBv6%RY*L3gqu!~SP~mG9&;wX3j`aV
zlATw%cGj%({27L8AxI6BV~ze!P`%kR=2F;(s=cj#Kd8RKbKwTO%m=EWw)*3s`Wnxg
zNw{eQRZ#=A&L-x(0M{<Yq+DSs)ze^K9=S6uh90hkP;-(-QXrb?ZILiv!2C|g?x8|o
zQ(aOUtA~bS=L^9L(7a6ApGnIP{*7q8IgRlUk|)td&S<5-KSSbvg6wx2pZ7pVJQmkq
zLZ3z;F`D6!)wCvs(NUigjpT&1r=`&~EE}3sch$F|;3%jj*=qjoid6T|A3}TQL$$Pl
zTAJXhGjuO}sfGGV8{!LA&{r=-aCSlUpsnVJ%L)eQJ+M2dgX(QtO{JYaX6vgXa0d|j
z-)#&vL6_CsPt6>s-vBQnF(Tq|Z~$cI<a9%i8dLOU55f&CDI38srs=Duqf;Qr1bB>9
zfWNq}wJt>F8E5O?T!MKBsxn(m1tcc)Y&dN!(8Vq|=D7%nEjEgy$G^Ct#WgHATYru0
z9$tf?6Kh<g2S(y+;Gkw_6yy_fgHNadd_oz+C!4Jk`lnrHksVLOtak9=K3#Mo5!Sx2
z{&4ONq>Lt2dvp<vS&3AgNYw{>5$z)V(J&NyQWxc|rLHB9$eZ;p)VPS{nEwp?e&B}`
zP3wnJ)l`yB9DhP7@?23Ir~P$$4@&tE!b$@Nb@5uIH1J5nvTTYCusab0sW%Sm;`gZ%
zezXy|HhNbakYDI~G3C>5h<?N2iG(LwFV=joM@FG~+^>(r!5Te|)Gg^rxN)Z*&!dTy
zvcO;ZXhdKL_z89aI#Z?St2V|iJ)Sx<gyf-IO{hn_1V{8`kZf#Nt__7nR(b7Q6uwDs
zLH!>>Fj=^ZN4x_k^@kvN#x9&lUdrYT#7m|$?RBU=u+^POEz1w_h_In3|09&%fmSQ2
zysWo1yO`toc?D7o`tCM{j4(#_n*@&YbnJ?05TLWp0ObCW_2zlR$8BI>F<|GP4prVQ
z@re7$yUT&N)ke``ExilfNj-SGNBFU(>wAEB&O*t7%0HJ1?DxGr53ZBL|Azhx3!`(K
z_|c#7f=6VwQXqX0QXhxxa*mb+9r1|usGKb&0gz^c_{Ksg-ApyU@rcv}R5c39X*PiK
zfcjIDsCYvJ5L3Mbh~+kl&9tP){l<2E(Al#<>6xODY=|D=5~$w{^lerNttI{Lz_<-x
z`I=*aGYoO<5Q)(b0{9w%)2V8HglG&hYH+)iD*Y12anf?uOYKNwH}aDz2n<H{<B(-r
z(gQ|gr=Ch*EaeA`#sow3UMMkoF8~J+m`$~$9~~IC>%E%T;OT}q2QvU+^aA`@NMQDg
zA0Qg}hA735rwa88@n;?B*_hOyV~9fRw7LAP(Cs3<EKd&@jVeRDim;R8`ab9m1oiZQ
z(ZB=7o3N8%{m0PN2le!T(ZB=7$;dUf??LziIFx;Qz-ZtBV@e05Zx3DPpq_T9#?^*+
z2qETv9tK@@P)`pKjq44Ojs9eP0dxy(JwF;W?m(|0G4)lD*OHFft`l67fTs-c2ju$A
z_;X(afG+cj9v~X;8{)AFpk4stWeX)AAR3<=;+9d$h0mb-iu5vs^qkN54q1j>Hb3X{
zW#Uc<4yli)2aJJXzT-{t+d4?Qk|yY2OM0kh+@kYSJ$?*mH1&$F5N-nM6Y*!Zs|5WZ
z!?;!FCx@~`N3Rh15~$YzeJPb7?^F=NmZ3z7R}3Nf4*a>VA%LC&8Y8^#j*+$QhxRZb
zf^IV6EN?=Utfd~>9~#===YU4OSFA>=vG3u?iKaMID$;XAV=*4AVVa{R>D{60NqQMa
zdJbqT^NPI-RQYkxQC_L?tiRAJzQO*2%a=e`87xn~1TnUF#XRf*_}<?p=&lHsXZ@94
z@!5EJ6{z0>-Gg>{e!^vJ_lnW|;M<FkzhRYCNkWgnj0e3U9Lb`83FS{VU?5EqeDmLU
z(JPv^2EZJKD=Zw+`)GRZ5xCIz8H&*Kp?8I<zopiBXmKj?0}><LC#K9-$SFY0Yl!6P
zB(jZ9JY^{4DxfZHh~!yOBK!En=#2`w3#g|WB7?ImKNB&o_K6p=6#Q*KKW+fmB<Oyh
zIOtcPKL7~B>?pH_TSR~4jaTD<PwXp0yW0cN-A2)JAfKWeM|>ioI{?F>%&`Dk=p340
z`uRmJCIU|$<YktQb6a)I;%uOX`$b?OP!|EQr2$F{9e`*CblvAi@_25C@(~-rm*8?5
zm`R=Vr|w$<w>$@d_{c_arv+ma+8xVgpwQ!ca0Z~i5NrgF;D9kokR^fpJic8Q$Z5gT
z3V`+&2*YhM^iy<SYNU*xXCQQAExpVL+0VnyL*w4^i`n4{IUlH{XF{eRyNrMP#d=Ih
z<f~^3P}>M;PX_Wa+}xB^Sj_!3nEeU&G$1mZyknYsVKNps|JDvt`!;EZa!-Akj|wy)
zj!uKkZy-O3L$;dsl3Fx<2`zA!FJ35Dqme?ba7YXVQDOG@E<~S^z|#x*tOgjJfvrC;
zL2WI>&xqs<=!<O(Z=iV3D>3cG1!%=e=r=XQ$ZgXT?co%D*z!gqYI^{PeK`2L&cw*?
zItLxp`Mb{17h|*sO2jHu&a>H<fc|8aBgR>di`W+#j$1;zFqx!Xj?1L9#pmNXc*CU#
zW%z4hIU{lLeJP?G{#No0rn(Rhe><7xEg!82;qN5BTYzA-$i-}^hrb_o36)4$4$X&M
z=||kM^hb`;A1BjoCRzHE<PWHH|2cCI{-ORmQ8=y`R}`&=`D17s%&u|;{ad38S`G5Q
zVnYTyAcWQWUw$?qR|k&UkZS@>$y2sMC)%jW?g-N`<E2>K=okf$$rbHleaRY#GYt9-
z{HVtga6ZN`;6@i45;q?~Xmw-2d>6(eCSp)Ue{1-@0hBNmIP9p}-%=0$>Q$c64{WuF
z9dmKpt)K3@7MV>xU5&C~Z8xa3fW3@7_Yz<}_g%3W-@e8WdD=3MF|6q%;Xk-+s)Zj>
zUf*nNYpJAxR1NzLu^`6&^=(*9p1kvSMu#H%;C@fkU%tFfva)2@;I_CbiyV)wL`Z>e
z0^|h<!gQ+Z;4HO9@ts5dL!GWg7NE-TZ+)3agtGuXkHGW}c!m@#Cdl@V_zKoI-{&jw
zmWWE+{j}<(zSN_!6VOH!qPNUPe8rgV_K}4%{GK>6m)u(KOKd6K`jT)If}lrqrbXTt
zgX$Lg=3jt4F{NjYBfE4?u`VO#AuGlizCu)<3B6sP-M5Yia&KOuf0vH2+FJMB*iBBK
z_KjDWT3X<Z_V^Z2Ydvy1oS^s0=ybPP3xs1jO|JK_cngW?k0u5~8R$YfpAr2CM0Du<
zhwoBL)DsZKczv0Oeh8fhMqs=q|17Q1OKNnIN|S-}Nf%~>QTbCO=0DQVJ}Mm941lp7
z2GARAxSVqHElexPlcjEuts@J)wTL}&P+sN<yAPDCpX~w!BB&w9q+9e(9O==RyMayq
zPKpD^(8tLcdgM4Xe>-8g<A~FV)danyCy;zGP+cU7-l8Kz;(`YDBh`{S>fDmg2t|K1
z(T^;2#yXZfNm_^+V_D!cM`dI&kVO&uMfyjt=5a<d9O<9@r_|BwdRV6g4&gL;j*Jt%
zy+``ThE=e3gaWbE6Lvi)1&iM8BfCNZ0;w1e$;}MT2zud<P8p;6@Xbxo6-o04NXIF|
z9Z9Svits1mP#92ko-q1#JXJxj334L?|AH{NLYj&l3jimV?WxZ8B5n!+>QztJRiI>Q
z5Fxp~V5Nb*DFBs7Q}k{e36KVirO>_X3Hz;D8d%X#AJ~-)eTwW3nyuu>;<T0BPSXIt
zu`0YCLo7L;N5eCOWQWNOEqp!(fATrp-$(2Ur0O6R(c~Id(d&+a&THYR!=akS2BXk$
zr@>`p@JUWadMT2lR3H*FOY#(hbrbDk!N8GB6F=bZI=!ky>)TBPi1B~82@`7wzpP60
zzt|K^C^KF^{ZgQt$xOh%!2}b=Oqid3JJKzjnJ9ni5-<_WH1ii=s_Z6TX%_4M1anKb
zDAu&{e}&ngTQoBX{<In}&BEx_5uN?-hJlHRq})!`Le7Fy;Zqi(F&}bUBF3wBYT*Nh
zLR!RuNg=5nX&q%ys)hze3CDE2RZ50P>Ic#oo6Y4*&rm)vn4&vfcKVeB;GX9*GN1-L
z^<Vg@4uI}u2k9+S&W^}I2$Ij$BVkNCWb5cm6XbDV76C5M>9)2;ucVTN84w<gJwoyk
zc9Gsv<!B=71LsiLd-Q0E938>3az=~^_;3lY1?EvUJRskCM6b7U<HG5tOY$Y$0DA3}
zqauz~;3Z1Jc5<$w_hIpH*8(eP+!#{)fNhrtoh<k0xc~^ATR`v4I^A#~0AUh9FVs2>
zAjtJ737|J^NdON$S;gC%0GKJqHT}Mf+lKl6{^pQh<q6vbN|OS;mP_d(llwt;YilCp
zEWN2qhJ@^DQoXGOsi}+T1zy2wwMg1lC+}}fgi6zUy<}<Pl=}G=q^8pJy02iXw8(*%
zqV(OZi4dON0_Lon)pxcaLZ#{DV9vUCcR}gHt%*=+dS{rkZdU)R1raJuuM%_C{c9OY
z|JIram8Lh01?!f>CXz8HTM!`=wYG_1%xm?@n8I79>L$Hg%-iyJrmb3fbyL1$%%_|5
zj<Ff^FOYQaXtwwQ#&plnuz$mtk6+R=ye*a{$9r>H(A$x8&&;qr7?mUFzNKfrcwqpn
zPlEgyjOpLv4<3bfgKBm^o^VMw7B5HgoFg_uNB4<(5}c3{J{E6B@|245e5sw-P#a0l
z)jikwQu1VqRFnD#D$IZQAx9*?9cia;D)t>D*lc06Ncvun=K){GRNS^fp$9FEd^Zxi
z8#x}6l;>$5ebeD2FmDrvPMkH+t1djpeZMS{nBUKY;fVb1`w_DQ6>p0uNjrR@O@YuN
z3n?^f#W)0;1pNr}C%`J?bNcN^_(Mn>$*)CPCmuzf5I>Kg(qVop(nfI++D7rLv5ZJd
z>veuB(iZV}i7XjOZ=myBDLz#d-fQ6<eVY-#3g#pFRHIkpKS{#cKS79CJQf7@0~{WD
z@rlw*5~FYxd;-!xEsg#Xt3RfKGepU1Tt!U5<qZxlC~vIuZ&f1($MYN=JseSwm@VjQ
z287dx;m<fK@GqFs=}hDA{YPZR(`H)dpI$}`k&pgm>A9i^&7Vo7SL4qHyEL6?{5yk)
zq49J<s7KSUoFf*9w|cAVqWb}PmI_eAbUM=?!<qbkLd1Z!+-LFhQ{{-Yq8%o<j{!Mh
z7vMHfDJ`1r)J9w<CZRN&F%iOO8XVLRt&@k;FNjHPrMe3=J#1|}{Tex9n`ht(bS0#V
zaM+i7e4$QKb-~S^a>Wg=y0s7*klqdlO!>q2cTD+%_fJgugZEF(!uh2C%&cMhg}I$+
zy-7cKA3Lvjsn+35<8dSjl|PIM^(4fV|7a~*oQKnt)KK~%p%?V~7LwABHi=I}mJp?1
za;IMlVdM}@`YHLXM<H?PVOMJul)v&CF$Ysp%Dkk-G597pN$HY@|7Zg)T8iKIoQL`;
zqX!ftwa<xYuDEz4a>*VF5$VdYEh(Rvpg0rrU**5oOOD@)n9{cw{VF_U6>8w;{3-o<
z(T~f0^qcUM{=F`N(nrtLQU>&*UzhWZgOtI&ekjH{-C|A|((5G7Tg1W}J!M(Mw`Az;
zWl$_1dL;_m7jKS-s>9F2Rc9dbYa<DB=D5pnxlJ7vdZ7>TIAz4oPlu@v({LXEhiCm_
zBt|dR8QzEC$zVuxER8;$)O>q9@}!YIa3ofkN_0YG6R%i<(LzAI9DkNliOmeAho_Oh
z8tJJ7UX2MqvV~V<Aw3DB--tikZLl#NNgdhBD+c4j;Yt+OpMvf=(z9by-@z;H3Bg2$
zw(IXhS8wU%uEiKhm2~wA`UM6X@k~bma3~|JPsi_ipl2iPq3dqxl@a>!Ph?-O=z?jL
zn>7l6Nd%&1>2#*Gq`O6tzZiWxP}}H7Dv^V{;$(MK?FwMlQVH^1mN35F1kf<AxCKia
z*L@QJ^fPjYS)-a7Fv=@hB7wL8&jIkN%aS-Bps`-DwY9QT55NyDOIKpw7&*}^hIPbE
z4Dy05>6+q@onzmN39H4d&tH`aA+Ls)A*7TtGmy}nGPIwzQ)YS-SegbabI8&h*tJt8
z8*9W8NYA%4I^O`XQ|4TXl$A2m0}`lj2l@^wv4Cvx^L9#^QUY5k^V)?HqaOnBEgNj7
z%yZ%RUJ*6%ICMXgo*lDOW-HcN{ta;y`l%%j*1J;X`mxGLF8~HuAWfzeQl<~|Y-B2Q
zb1l6qWj?c-buIuG5r~?l(^)WO=(dubG70E5_Wf>P9;FiGyDVX+%runXx(@^JZvq9)
z+9~rJHhygBX8?5cp3{<*GC$(p4_j&pKoWr*maLSyygzO-kr#C5Wuyg?x9=z$94SM#
zhW{`|rp!hp@9DG5S5>gI9#*!HCAybyr%VqFi5-yMXKDU!mN~FS0`<3m{x_94k8If~
z(_ohQ5K|IibYnIqT^tf@r_4|T{X<Pmgsuze*)cn1u0%8Gp|w67y789Yl`^f`D<ca5
zD78SrlqqYcjI4w13QO-wnE^GbS@!_2hd|UUoz8+O(_ogNADyu89|H3wl_1|`2|Hze
zM$U5syfmZWaG14I=8NIVQWpR+2;{J2rOXvrE!om|0A{!>St;{aPc_R_0<gjY1@HKB
z%IxZgHieL_G|JHk1LHdKN3XAZux$AOlxsLIQ3-uph5CbkK<UPXfNb@pV4Tsi8}<<<
zuP7aQ%1dP7D=?M3MsJ1zqtO+GyhxGPyx)@UalJWhBX}!8S28;3WS8KYw-4F)7!D>s
ztG68w934R$7ET;O;5O>(0gur=*EYu$`SVy)MY^8^0eT7(6D3ZdIe6jvZ^U_g<Zeuq
zZ)+>!qPk+Ljqye`S&33*C?)7!!6yCbOsvVWGO$_Ov0k?AYtn08^V{~1rPsr1CcV$p
z`~iOi|6w)-3#UojcQXoq1pi?+3;QtNN%-2MV+_5(+?UxJ=SeLV(|HM&i5{Ke*U<Sh
z-EiKy)%ysgZ*L*ayELQg-;i`%<@oMHoO*O^ejNpN`g)vqi=!I{zPFd+yn9Q`1Dfv!
z>@a#{H1QDr<OZDgY8pZ3wF7b9yJ<X~H(QPKKFyNoe9v5*_if7dk7Fy`qhGV(Bp<jA
z=lz>bpz|9ua6X{fEIL1e7Wc?*!u4hh!+DOZ_Y!nukFC<5A(c44wk2bJL!(n;r9Wju
za2_Xp*oVfY#>;wVqAjT{WnIG%n6y~w^Roy>TAcLrezZL;Ui$Vf+MCu=`g0T7o1PrI
zfPCA4Hl}xryMWFgN4wIy$6Z6`gVC1sl(_ro{5QlTJuR-1&YL3+>FMzs===oQp58Nl
zJDt;)g3~kNpP=)S0XXm9oIA}A-_i#*<#ydL2<L<3`HuxSA1u!o6Mj@IcPzdABVEPk
zdcu#EvHF4VW90b?ByIXMS#~*{&y@0iBhKkXF?HlaZ^Su$e)HFH-eNQMUUPf)3~Yi8
zf6m3YXqK<|*ZiJjF!B}u0sk{KU<UJD%_#pPBf*SdCf0wbDVQu~68u?YU?el0{eNLn
z>p6;<RR0rXAe))K{#6>79A+~8k07;sj%Fs?zpxg}m;hbT=lT~DGnSc&{&ncop5vLB
z<i9x!OfEB%{eR_ynZ(Q#e|2XtQ<$0RFN+5=i<z_hrQ^WNW@egyEm_NBX1f1+vX;-x
z4F7Lrt&o|S{v~9sh?!abMPzL;Gqe5YkhKzK=4jy)v%#GkL0fTp0WMD}a{el~6jAQE
zviU<03wl|ucp7J$bU~L=A#|l>(xtGVKOuA>XHwfung9iVgYOfPWrpDov4UQgWYQaG
zO*#{!uul@q(%IlZ#z3PNGLK%Y=06YqW(?wg3_=@UQB<N0=5sF+0FaC!z8IheM`esK
zj(5jXf4fLl1ZAWwGLp{&n(uo+GDi8bWs&j5GfU)EoUCO+Q<{Bckz77Uk-dOqO!U#U
zR@`h1tBh15@(D14CZbC@M)blrz8sd<#DO?$oifz@yRS({e>Cwu{%+PI-bjKr&(nk`
z&0_R=IEe_4X$IANzOhO#i<7Yrf1o9##eCPde^9!Lu#5RVDZNNeVgpZZhIF72aSJM>
z_sRv`;(KB8&%NZ%7M-qSGiDnR6lQw&oa}FMNei??zh<oQa4yjM=#=@KArPN!L{gaP
z^>jMLnEz;j8RgL3DxY)FE9<z3yaN}AhS7|B<h^@(jh(!MM@ypuyxtyw+hk#SznvS<
z=PV>f#z=$Sd8bq3+|9X6f1BdE)DwO-LAVuT<{)b`_RE{OeP$E$|Md1H@Nr$$-S5rl
zX-1YMFR~pwacs#;V!UWy9mla_E3v#_V;f?Y@-iCDNRvo2%FIZ%Lr5T`B`hs5Pzpg!
zN<s^5ftI!uNYd>i4YW-m(Ejq37Fzf<tflM}`q9Go|DSvBn>TM}BF#(FvGtbw?t1RI
z=bn4cx#xb$el<UHvanjZKpFez1>EmssMLo~R*Yky<!*leuz>ha%D$`YTi(l7eMB7Z
zf3eE<_{vw|`(>(8+)tx{IK%$@umZ-~G;4#x)Ledo^@<P9Ai{5}bd*h$bTd|*HgEmo
z(M^;+P+sAaJ+yoVvqArD+la&zVW{F-zI`u3|4Nt(3N%Ws)UEiJJidQgm<kFyD!vaA
z3U`Pwp8}B5cdO+N(4YRhgs1s@`KQZzfj}z<maViWIfiestbyfne2LX~244nRR&)S(
z7+&i^a|T+YO#W88sSkr}SL?~IccKf{A!Y0+VjUnY;V~w1Rty4L@O<(v03x=RPd{qK
z(_uVGM0z2Vh;5cLfT9M^u4WyY7#{m9FmCAOC~|Ohl<o=b94=PNmRk|>2QtFwtWbr<
zY3n_>Ms)*y7wX`~Uq<jc6--x#I**&O2>z<%LC1zV@?#hugSHao)6by}{vvv6@Fyy`
zZAu5*e6nJ!X#7Q|5aE;>e<O?_I6|z}Ib7I^2obxL4WOe$)h)to#vj>(Zx2UA_d(~0
z!2u(Uj(>)+np6&Stys!I7cmdgJos0tlJvPK!D_@SBJtO|5#hg8gwJ~s_+-UyVJrUr
z4n+8LL`D$3H0q51gg}X?badLNf{)Ql@?cyA4{e{r%eLq)ewJ3XkSQK~rvR899d+m_
zcGCS4O8<_fMp#2X2R04<U4-r)RS82~7+8ZxY&w2ajUiNFbO|&bJg&&Z@0NX2B=H0y
zS>rroZSXMxc*}<`;`widI?`LD^o|v8jU#kHHQ*ZzF7;RQ=Ptu!_b<Fq(ANA$Tw-+C
z*F;~3J2)u{_ENqp*t^1tQTEZqfEZmTHgWTBGq=1o(=lB0Mqc<~2jeyK5~DZ4*iR7_
z<F2w8cO5lxpHwq9Q8n|`c^Zf{bd}<!zWXZ>EOuZ11{Sd&)UoA#uf@j)1(@8<q%`2%
z@MN{jgJ=y8iE^AfoYW`oiLzQQ@KgV4zHrl%?ie0zHT3RPO#NLi^lkRPuujp>g68ly
z`ipoNX=&yzrnlSQJOB&$kt^bt^I_!5hVS9F6JNUV7r9{?@mH-`fiIg@egM?;KhZ>c
z44=-L&x)+Cx)z8%vN=AD@6rJ?`2K1yjsyw*uKFmZ_L27Z@q2Z|cOcSlRf*VmIRZzv
ztdnITV8#7TO|0?`J~eX-S2Let+^f>WO;62Sf$iYyjyv(x%u9?LK$^IdD8?ONP5;4o
z|G;?s&^)&nA6P;YjRTvnx(1hb@j^1RgCClCiSf0GW_mlgMWOj_CR>iInh2moL-Q(&
z`963Y!Mk3Hr*8mlW0aXS^EJjrZW9;NF$zVRUWKP-hQ%mji%}fg%%@+q|LisD+?H<c
zw)=f_<{u&IpW<(21gJKSF15O^#;3Pzu&mD@`156--eKSJdia*J2ls=wuzz|^<@KM4
zBgDu$+=L+e^^IQunOK8SsYn#H2-b>!>csn<mk(d95_R&ke0i7s7{K*LtQq)2x$?6Y
z?zevk#OJPc{!n}Q*$b~l%B@YHDh-=tC`K+#Z%rk9uTxgX;EiB*kE;}Cyp%siN>6U>
zX&Bb6jsXR~9o;~(5xI13-7P!h{c81oYTYLQ$W`BoHmmm|+bFP)Tsp9m=b)|nUUU^r
z_#&64VE=(qgJ;Fr3$!fr#0={;T>)5+*c(-5Q&#iMsNOD`s|8P;vlog;=^2e}cHIQb
z*VZsQl!n)FylzvkH(MPvXR~yZC%q>B8w;;(yQbQX)91?CzOrGYtnI5B*6Oyedz7$P
z)v!y$z-oWzS%_<Mz@uZTOkD%ZUbq&aYlu~UDez*Av(P?WE()hhH*ce+3E)2UZu@&c
z=GIqTcEVv6!&Do+0%;d?j>tiN_Cm(w`1dMDYnYp|?nP+u#6NrCS54fXV&JfMI%wt^
zJSos#phRaAK^y&U;|pl!8o6|2XYU9^rax+2aSE7=D(<`z7!m!kdB53erw+^lXG~uk
z{B2S<w7LbM(rQ!3jvFwRpFFA}fON>uUbqeM1p3(FwTafVsH0#W-n-QM&4PJ&zfQfM
z6X-{uu-9|bR^-yDZ8U<7T*CHV>Y*OcWpsLFd=O<w+u+%_ol_Uez<buhdl$7nkxMtj
zEaC_jSUPQ&m-f3z8^FDvmE+#eJlq@J0j_NY$nJ5S4Y(Nj*$W#HD&QEBDo<JMWOc7W
z=v6xIRbJd9!MGiV(f2VOuLR;E;;CkBja)^K$n4(X$AFn{!<XP;l=i}Jn0#Mj>Ok2e
z7m2}xEbWCal*c_H;DYj_Lqw&Q4p_q!N&XbEf`?+-3vtYP(pFPW2RGaW57V?4CJ;|`
z{b%hf%DVou_U^K-|E#^Qtm{8#uhm^|weJ9qz79DpA5#FtNRS`eYwGbmh5FJ4Y_pX8
zbL{eFP7)pOz~xEwJ%8vE`PmCUV3x*k))S+ydtVcJ_=gSGF>lhy4+8=#e$+6m-cMQW
zzj!V1rC?dXvqtTO%?K5+tP${^v)XCBz8|6Yk!0cb9d*O#xzofYx<oI1>@HRJFEnnV
zp?dVv?=zr4EB7w4kI_r-zia15QTgbX8&|&qF)%2s?G*gK2^l?vKbh9%k=Z`i%~&g<
z4Le1#m}Egutp#nuJ*%tH;Z=jG<t@wtn6>5Ya=+Qy!39e@)z+(vu>8`AuJ;o0urzN{
z5w$hrDYdn<U(vyHpo6necdybUcB1t+uH41~L3l6|oL-JOQ0Lv|<voj>JiFO#D&>^E
zgB*SOEM{y(2_774FFb-!U*ROeDEywwR2DbmwTRcN6iq&7E!cE*`&A?Yyk;%u?e>+7
znR;Ly_yR&a^)Q|e3+uj%HqD;{-@+eeYWdj<J#(n4v0&cHxwUEhDkcCdw{mK28Xr}!
zH*cd=GwIi^bI9s(omH!s)hn5mv2Wf+6%j}JF3Rmcq$8s?y4<%ivXRek{S@$X`8zl1
za;^5hgE;mLF^=eTX)oQMBGiYTN33@4BKQ_U9|D^4XO8u?7w(>i`j%eO`PtXA#O&y$
zciy$`-58AV-?g`J2SfDIeRuu3jkkeKNG4qzy>#zgmLP2W5ADl{u!6y}JCW)m_6m-5
z;`q*?QwaED6Y#OSc5VZqkAGApA?xvC5c&AWR0K{~4X?!e$IUy2BeyQ{P@LdV#rDF7
z5bA61IjiG6pt8Xuj_rk2=Y#0{Wu#P%#vn{s@E^aiG^xz;{d$d757>=XWVy!bb6`Fx
zmEA>i_2ALU_QFvq2L~{6cnLnnP7Jef_H_sC*FS$q^#h<JKYQVq@!1;=f@95pyjhP5
z!LjB))*K8NBid%XPiN8VW$}4rp_=g>drMg}zGHXMQUZihh!33f?^ko>IqO0D%ban$
znfOZ>o!`U#hxkjUt#*1O*?0jww5AB7Xbyk&f{Rek`-p(P;}+(BWb0Rd8O+mX+7*@_
z*t#7|?Xu7G@s+f18$FX?cuY0`tCs!W<y<9_z;)1Sf444XK$U`G9%3=ZMqdrQH(sd+
zfEsvj98j;I7~BK%6cXHnalzmF)eYIuj9+k^p944!%0Cg$UZFb{NV?-~>{#v&$m@(&
zdl_xLNCZO1(sD_4?9@s=OUH7jz+s)H#IamN8n0tLR$V4bY#}gREPN8)O&@EH{G2t+
zz4`A%9=#Q{`Avih?DeDwR&WF~2cbVXpsI{l`PmEK3&aH;%vx|la3#0p8@#~#3%Gs(
zOswsD@Zo1j6~A3iIgeoKwUW%}2>N;#f}c2`vM-@vKSH-K6#+6r*Z2n!@)DB;k>o|>
z*8X`jd)^wMTm2-yUhv15I)G96k5{S~smq~Y#n=1&F_6cs^~hy%D!|CEAdmOq>xca@
ztnCpL@TUm+XA>Mj;Zrjp-tU!!$RlCBcegmf>1Ns!z@P8n{&W2GF=gK;dHEbJ)(8(0
zSpF(7Irx(am`$;^(@<_Jf(A`6C&ZOUL5erp_}<Ov3Gf#;;(h{ueT-~ve;mnPhNlVq
zNp4JLbu-2Xmcc6m?ytgMALCdf52NgR@$^>wN$g!xHa!46h@ihS!K@PIxB{L2Y~irL
zOM)*0Y~-omusIl=^^ukQhT+Eit~m{R58NXM5Q5())D45?I*7!!Fn^BQE$^3y-@j|i
zN95uCcb)z}cxXqQGoQeNmEr5j11j}Coyl2#;_$ZGx%Kpwi2bBy%SvPXRS5MFZ*ub&
zEbL0%#Jz%K?Y48b|GkLyZv096IX9Jnyqh`vcn5kL_j`2y7{2ne7e0y5Elf_7+)f7{
z6!v`$f07r+jxR69p4|=F^lEgf&g+DiR~tgNFuCOQ*BBw~2-%50$?NYpLUuFK{-fw`
z+?VMrc6nL61fg4)idnq)CLk#e8JXn!?YKxbL{wjum|{I9=wHYEoBLHpo4x#g3!z&i
zJ)5_6Ic#AO@&x`Qudk!$OL=uO_5myp|1a)e#9tpHTiZX`jI8nWL;QKktZv5m5JrV_
zC+0i+^)ZgsK~vp3bVVS3ke|IUiU`7rMc#iUO>!|A+(HI5@;hycrrd1pT8or7>6F{O
zly@QJ*5fTma?2Gogau@_zDQns)$7gHtrUxGd=L>YzgDHgn2?{n@B~5yfsP5nOl`hk
zHEi5K!CB<e#O8~5X;&}Eh7!2-UqynS?NiA&dfBwxRhi9te>UsAY~Ev2(ATiKr5kBp
zsdIYJ%juT#oDOWI8FRzxq5Baddg-ydZpl~;ZOwd(Tsk{>+sp8AO)G_j(Mv}ftrxFj
z-Yxd4kc;&IF47@v+e7x-@H(BbT16^&3QsHK$=b~#??n!Of&2Z}sG2;kZWzitUjrOr
zejLiD@4>_8@ptBpxLBu|=hylAcD_Dr^Yarr3$u1^Mh0gYor5{U6h8{YILp*%4v>jH
zR)&z^ApWH89In=GR)RZUCU76#j}ZJes~f5~^BPo<snjUNoOe53?!ljA!BJ}MW~9e~
zLhr+UeMJ_(kI*elB_k_^Ea3a;FZllVxJWh}prz5Un<@Sbc=%)7f1>fKR3+=R$WPK^
zWOeZL-jC}zx@c7UB;tTz6)c?LyP1ddV(NUa&Ct*4xQ?ZMkvH2Lwj}X^wFCdnZG+L<
z@b2vc6w-|yf>#T9{w-Uiiy!LvXAH6TAdiQ2hU;{O_QEzbuG9j^{?I|jBEht5#~N$H
zGjIK%Fwsu?x((6Rz0KFat6sKstgW|s--d}c8*v)q7J{2cn%CpSS!YQsyfS@bi|=)~
z8FGsiR&z(3pW^-;$J+L7U|vmENwLfP-?FWxvYJ<#<jcE|GxKTj;!2q+pH?qWS62nE
z@PZMStx&-$9m$LBTosH_Dtk3bl$y8s+t`antug5-*IT>IYHr@&9Bsu+&u|5@u{M6Y
ztj&(LHa9D9vAyfdi!&hIpi4mI*~H7sWA%2}CgK(ThzJLTliol=_6Cln@_MZ!mTfi3
zHlbp1f5kTI00ALu+TLm3*f!C&%3d8iu>KC|n+^u~1GYF;k2GtmZl{-e8_|Z@Y**Q|
zcSP9Qs{+*_{1pye?S1h&Mt#_Ez3K25cu}NFRnP704?q~({7fZpms;=cw0qjJt>sPG
z^ZL7O^aShF*(Dg)CAlk@5K=(!5|q159!$^^L6Q4_D!m(#a<~H{rjLMtP(D)X-Hv9)
z9q`qexk{c%-R42S#~Sj-Xi<$C_QPJaVnhWo&%J^}9kz5|$8rW;(`iXJcXVPHc3hzl
z8@!vpm$9u<#$rd?H65%s&~|^DZE!Iwu(-}YS~1Jp_Lz+DgG|wd6xXXkw+XF3<TchA
zQH?$9HAVVRwPkb!Fe%~t4Z%1D7&n%Gc)h(rr9UF!>=(2w*e_$czA{YMqN83esFZ>C
zo9qr-A=5DpCm~`)KFDT$`THos2?eVa*K~X*Hqx<5`nk6QJnswfA-=bxpY%>a@noCE
zhf~cMelHT3cR1=h=Ei2AAN%M`zu?GO-Z(N|%pO&MnP_VlY<bCLUVkvfP2ECoHlkhU
zMu_Ge8$o<Kz}37|UWMjj5ujVp5#d(>kpkVzHGYypy}|>G9$$iqCCL1O`krm=2izx6
z_$zgSjvYEzJsjFQEY{66pQHNoz73_!ZVrCrV2Y?pCHDFzi*c_%1e)xRq#0_8&?xMm
zxEI4!!3wfAAvS<;$J?WdJf=B8PHIXZIT659CZ2>~dBL7wuGl_;xC*7vhm3oxbVf%5
zk<2lqLX{28Dmz?0Eh90WS!Hi;ZEKEhzGCx>FI#1=yv(w)C9+Q7<S@qp=CgVth{GZu
zqd?PJM#wjyJ7+fRZ*E5Urd<UMHR)C}!<ykytoD)pG)L?+qZoTS1fseqLkG^6Css2W
z7R=?rg#N|yAjW)?-K+-B?cO&{f3d*SgBt;Fu!Y**(O~;q#m2sR2Wm(pzOzNsox6a(
z8vIBG;kZp&qVVIj@+=KPuDvoY?zYQ|R?LS~48nff-|=k3J*DV^><XcO(e{u{>aT|X
zFO@<iuFxH987*bui+rz*evTVpvu$s%OAz4u8&!6?aR&ZxD&;1HsG{F&Ujx9<u<$CN
zFOBOIv3-lZ7Vr0|G`c65g85%6<%D{9MDne6i6eo!2N1bY(E9BqV4`3ux(TbXw(B-<
zm_sY8Td&@J&3n^Oc&9Fn9H1)yU5F9|jWApQRtkvY4`D6eUDhQ~St8DjLIi)^)*~6U
zXUqqD?~p_w_ZvYA;hx9jfOs5p?~xn~wKSzOhllKDoA-xtSHqic@3pVgZ|9m{>fD4J
ze^YW$boRIKtl1*nABNZf@P`rEfw5Kr#N4*+pSHH}h8If(Y{v2!s~!B^gn(P|cMtv+
z@b{Pa`!@d8W18s2-*xyK$6v(W99ePA7n#H7`1&+1Q8MUJ38R`fihovg1uyG(>EPuW
zUXJtf3S1g);nO{QdOM#U=H(A~c><TnXK=Cp5f|rQacTS(FW=_n|M3!Sz~#UAv<goV
zdS8od!zI>@OY{IP@god7#ml{j7d^+P30|goDe!U+E^sD>%e(pdFrV5%dz(Itr^Y|w
zE8Ed<2QJG#jn`#g;N{<NY5E~A|IJGyQZ%k&vJJQ_+rg(ET$=ad5^-#+DPq<s(GS5p
z)w1t9D~?7Y=!FKH$AhnC2^GCJYCE0Lcij~)I+5r%t#eNQF=zM@XG6Dh<s(k4L#2s2
ztw>{*X3?KxQ(<HUGmA=QW(^p9FjD@(tS{l^&U|Q)%9*usbh#a0?W}ypS@x(CDPq$?
zq`~QQuHo&ddP_SIyhY>fP8;qGN1bJpOO0tyI{PDg*Pvz1UvbvXIZepGj`X&n26*Ub
zjC8Gbwlx0GX^wX|_UoK2-RfzwGv3Y!jp>Hf&W6V5?)w^0>FC)=uf6Z?cnO3?fD-)%
z7J6%c;H-bz*>ujp*a5tZYz96T?e9BnUvpxwbDFxGRW~_nk2<S9;IzhH<~YY9>zJh@
z5H@0^=&vJ%fp7#_8TnNdbGXy?L#H7=7m1cSz(~lVPeyEK)sLJ#cRO2)&WaSyL%PRg
z!(KO1x#({?wzKg^&We9UjJNq?7`b5d51MRebNpIo?K2J*!cvwaogF!VL4sfO?F}~k
z&NY3-*%;ZrMmozbIvWYOM{tQW-sh~u-Dy0Brr~}9MNLNbs!Fp>PaKeZtmu~jzlKMh
zl^-C=H9YEX*iTHHFQQ?Q_<3i|oYQs`Id%DC8IgSSZHTq*QD?J8^+t!?U{nFoCmU^N
z1@drA>X>{t>V@dnP>-XJIwy4MxHQ*jF{0nX*ER7IPS@Q|<Zfrv%bo4<w6p1`v+hGq
z<K52Me{@<R-D{lKW06KSu}QKvnw01p&}|*@1J0EnN9o-PNtQ|eMyC_~TbtnA@(pJv
z!Dlxf#Wnf>E)5u&xHSTh8;?07UvrknJDrx}PUNW5GUcp_>}+#3#QU5Tku4ht7!2c!
z@pI0~dz?m$sb5CWK%|*fYLxPfx+?l@4E)RDbI#UyTEVhes%$i3(T||YSb)d(1>t4%
zY|$qHk!_DUS9{QAuNrM%^k>L_Rs5n8iELTt?<}J>j6T+gQE~NGoRxPw-Oo6EN7X=3
zP&fKfc;F;dTBFOJLDzlogU;SZoxbm*-kr|wV+fgaHo}us{61$RM${iVSKsSg_pi>D
zN1S;4ZO)FDJH7I<Cb|VN)*f@NzS~(d=4|?^v-yM004n|g$9Y}kiqbGL8r<lA#8I`@
zuQ{u}?=;1MZjY+EEf)wG{c!Zx0HMnsbuPbK^=FHGHLB+5zvJuSN7W~V4Mw3I{W1V|
z*-u!wP~=wW7^7g1z77f7qAeg>v3Q?~(G1$v6fwH{=<g!N$oCacTY(%+5o0nCeGs2I
z<M%iXk2uTrIUtw&o{7ZR!WB}8u}6sB9k-pPA2?S$?e7|6G!gx$7J>R#oy(qaRz2ce
z4kG-3v;LT~=`pAG8E4P;fy<rF>V3|-Ij8#(XE(4jl6E%m_K33=w`khw=8c%#(AbHh
ziND7hpHY~oW({M`5&a#52uGc+XPjP*2rC4f#)>5R1JI-O7=Bkg;#|Ft*B$$uU1>Gg
zRDQ-<CHgd|!0PyQ&K8sklGMT5QK^^xjI$bV5mh7Sr3$(#xiO}RJ|zPKr@4W~O8+R(
z8Ka!&Qvlt{M}cwvug2Ub`ZsYKLuSiYoUWp?=cu#t0jC$R8t@uLGHmRKqL+}>sz;qG
ziz+KMLXA~Y^q~gKD?h@ia{g)>+otIKG27`v4?g1bYXns7FosgmUqyr+k2=@i?erF%
z6KR#nN`b1e$%_6r&}GGso!HY((@UM!Nlr)7WK|Pm_7(j!K(Y~&!PdC0sVd5to<$$W
z_siqIR|1(rX=B0`eHV(k;s?&=NBk`@26NHxv|zNY_=eN>56+55oVH`m3jnd$wQ9_%
zl8g~v^w-KMyeh|-^F<#=IlX`4#2!-RsISI+F#1&tyUzF>1lc;!R1l3*&I_W;&N=%^
zoX#qNk1=+Pz6Bk$G5!U|iCnif(!_D30B8&<qhF~3Ko!kcY(_tZYPUY-tkF25N-<WX
z(SJuzts?jyb=u}Y%+U`Yloq%zd*QJ&#h#(@L?M%O3&ngUJL%46Qs>8#2<}NvCGu`D
zpU4yoW69Ccfz-@w@#5&bHJ!^&w#y}xEn4+u(x1*`Cq~cox--^nu8=8a=2LDVGnr*J
zBd$A{opX~HE(FW&P2Dzn`dIQzpR0=-oKGc-xjgEbVAc8yncGvS88SIj9CB3_J-z;R
zRcn$-d_FNddiqSiYt4)oin;U2Lb!~2`rQ+5J~ca?NT%Gx+=bDZnVF;o9d=@3K-YVz
zupZ2hrzSI5Gzq;@%*{<(ld0l)c1XCY4Y_CBWN!B2=&9tXW62rI9m~$n6~~IHd;(y!
ziZiq6%yi1iWYHsuX#g|tPG<_}+;l#b%BKqM_*_~yApm+0D?-7(rw<@2q>AozDmz)6
z8b!^@@Bn?8&E;nj({4uBb?g*yGf;=o+1b&If$(6k5kL?RKitH$j#n?1^z;&Q-RVT3
z=;qR+gkt#03Z`P{)mw?-nZyMQmlCcA0D-m_Qu*Sje<)Q0A%;?qJ35L%UJY6nIy{x1
zPZ3g;bYLi(E4pw|gaHYdqxXt}lOb9&l=QG1C56bKXGr=aoynt9SS{T#s^awmx2GGe
znaC7CmozO2QKf;r5I7F86E4OS5Z4=1mTs>#2f8_11Z@Rz2%tAcCJ;R&jt;Q_iDDuw
zB|OxRl(|_&6kh%dmdpv^fJuTglbcT&f>Rnis-JWVmr4(N6GcTE&?Nz!@52e|ron+v
z1852Qa;c+X5VH&V49KL~9LQ}L&|O-FYIIq5`sW{HjjjpVu|0i0M3<q5*-FSy{WJt5
zSIq@3r;~!}pff|RHJ8O4gZb)ZWC>thJC)C!cgGVGpqbOTq>wD%42>9>f}5QKhR^1J
z&#C;_G0eo{r_QQ5x;$zC%f~=IL(J5pqZ2YRPpB#-im3@VnV3x^GsTO5Z(-g&pHIvJ
zfANAUkyt8-KR=bpTo?^Kn+yV(0B+NeTplPqoy=tcX23O<92s%v3+D^TL>BX|J3S>V
z$s)}N2U7ps+3UVU_$qXJA!V4Wo)KNwv$JK@UBXNqs*h129~3+wl<@_9+0^+`WiZ1Z
z>Qyu#1j(*8izxaHrUbxGO{ZqS0HxBoyiAGzLq(iErpE9gjKZ_vz}%UM1h5zr;bPrf
zK>|l-G71wha;taYkm=aW%<Qzx5uo)a!G>#s)H8r~UPz{9i<w;3#oW}>SN5vW)zH~`
zr`8hb1k;o*q*AxC-1=#ko(9gibA=Q*ZIC6<0N;p7>k$KJ-k!^91|~qprQto&@S5QA
zfJks50s5+2rwHUWVEA+_I(kr(WUqBwA(yW{gUA8_t0-@Qu*8|^B&hO<5~Y)+*F<h^
z931=NgD@neRim)31!8cPQY#Jia{y@lekP?l#u}iX1f!~OrFuNfRDeuA1v~&Jn#(69
zQ;JcjWL*2mw1TpXopjG<CQ>pA2-lgpBC#kfD=e(DvgChK?lgw`jGLJ)%mHQjO|J?A
zZIM1zY`2@APfRbB+hCuDVtUmI+FO5s8ZDKH>KP1jVQL|+*UJjbf##Whu*NeJnLH*3
z&<EdY%q=D+Rl0gfLgEb9P#7^2sqwi<%g-u_2*Sc-2(CV#N@M+*P3p0{7@b0O4~s0J
z0_Rji3^LVQ+d(Xexa`7uegJMt$X1;35ug%7@@%;3!7>!>8`6@6r65>87k4A>3(pL?
zTrbP(^%zGkR~}evV-efet9hfP<4-?2f~+?9s(nI(=CTysq$b*t>wdN1$z}>ugux<n
zSV*D-2nrus|I9Iayyj{*RBw<cQiKCi9wBtXB~zNBMP~a7#fiOpz0iH+w)eLKOys_2
zW)tC=iNIn2yb8I8Ox8-y<vCU^x`m4~<2m6?MZ^W>2s2pq2@Gf@i+xbdG|8fcCKypq
zy`uySaZn}_5F!q0IS+?E3JT3W_W=A@s^2n~O%@d$3ByhdCJIF0XTyvz%wC{>JW}l&
z6aCn-!Bv$JuSz#1M<IeZ<AMPzD2Zf`D-zGSEZCiiUW@B#L8GhoTX(t#CH)k-EN_uE
zsp0G^1HD(V?5ZL=Q^=tRqc3%h8uoHwKbz0ZCMG#aqOPo!s{t8ua2mp5L=WxbIiiM(
zW7Bcz#YHcPG<#RJ7!Ei6fNwbC7IS`~H_@P~D7+VEMsuO7L^iXzSuBr|w^~VI{aAbm
zBq?Ko0&}j^Ejg7+-YUW)%0@?Ld@N|a!?LH^ViWy_!Csuo1Xq@oODj!u$!RRIOi0d;
zhb7QGTqDSwpPx%&T|9Te?d5c<z}quK5yNC2tcS!&WQ$|t$H%)zM@^Ba9I#gjEv9pm
z&}XFb`CMLjj4-qz#B}ScZ3R11P5m%Bq$dJQA$loxrZ}9*VX=wjcmEg!hlhFq&pVZ}
zqcjY>Wlnw$!~WuI&4muICixr?Cj<=84OK<T<U3|X(*to)A#2?>movh!>VvLQ|Kt}J
zyU>M<tC1hn74?_tIUurw)IOIsivs|$0Cpef;mKw31~QgFw22gi*}y)&cN5&KBDw@K
zO)&u;lwzw<EN6NKj5fm1@3Zb`4;aI=W>%$BMnSwuzd1SQvKG`z#T*n&7Bx)Js%7<h
zVyVp+-UoB0QFPQx1+-+EvylQ^y&3fM6{eseyp?1#ohh1u9w1)e>-CxqaO!nECfQAp
z6UF={3cIu2?pXo{Xn*=F=N@p-`8?$xC$QyHq<1~N!!r1Nb5hkAErb|hbaZx_0uwhk
zTM%Kqn+8V=GFg4uK5R%nnw(FKQw=1OH!>hUJzOIhI!se-V8B#vPNe!3>k^REa&d-&
z>!L!SP|fzqi2{sSzh77%iX%p6`&g30B98+_=QI`$-<B@D=laHS=ZgtQL@?GNU_wV8
z%uiNdv7=vzp+348pt)u8o*H6@+A>jp&sEH&J!D+Vm3SeT2bn4f*ikM$!a*0~6cB*U
zTRMBOi5)OIrJ1|HcsD#WryAzv8?H52NWu8T^!dcaf}6T+4k8nsGeCWq6gYR0)Bo7<
z@t)C9WG7TPcM;@cbaY;*1_qv<=tXO+W_lJ5SO%-7xHKsO1PN6#Vna9K_KYQko{yxm
zf;yS>*ttUfOtBZypxhYG6whZ$f<{IeJL}Gm4nWK^2hA3U*JwYd-%-F({XY%z2HFN}
zJVS+~s8CFS0q9gEW)<}ZYfw^cSLIGCC&~fH!;DTW1a^74HeXjRy|N*f03NF`Lz)TY
zmP}HW{n?+?O{1lST0$w|n_6GPf`ij5rx8rq5W|A>Uet2+3fP+EDoR=EB<vXykfrPy
zlnVIP{9|f%8}azqvE)%;?dbez%zUTLx`$^^0z0fU7CMkpu?dvLX!fn%`FN13F7&e+
z#$Yd!Ih<-B!#OYrL`Yf=t}#_F|8T9|$Fvh*wS`br_J<$WmJUW)=a!gXB@>y&?4O=a
z)S%j+oX{v6^9PT3hrn;oVg(>8%vP5cid0wB_j+Y3<V`fB#I7@X!7DUpv0)Nwrtaqw
z08|S~r}K&YgvRbWjT(nvRae)TpUN~CYBH`y9#ITt5sX;~#rZhLwXMqfd1;oRX3tmV
z^N=dJx6Ng+bWU9W`+jGco>0204lJ#dmy>%YWy+qP(E{rETxP;(z%3xDOB*tZM%3D&
z4=6h}gE5MUtC#;(uhl!&(aXNov8+R6E*y3-TXkzB@oc1wR6fMuC>fq<2^H#JCY%>c
z+}$q1O^P&)v{S^JI@}|R3T-L$6vHXlm%&a4_Flj;2q~es7bF(?TXlU81|X@~gAi>2
zqoEm4&%CU}F9k@XZ-^{)E*MDXb6LF%^5JtWu7?7r0_Z)28(3b-A{A5&YagQ!<oMI$
zoWl|HdV-5rYj&<Mr6f)ySjyVUS6+aT@9DwvjBpmlL^EXqVGQggSb3JqB-AuqF?0G^
zXpX0<od@BJ(3L_00zySq+}!kpo|wy7#p-iUkeM5W6yJ!91O4ak4Adw96u;Qn$X6gv
z&4P{0%@wfpFAym;d8l`6Cg*FB6!3?nt>{I~UXmzK{g{XRK>F4<r&$5<0r>+ZEr;j;
zHlQ<F-cfJ$&{yRg)l%`hip8TMUN!liVLk9uu%_*HG1lfG><}{}pOmWlgr&wGXQ8>Y
znSuaT;JK0a0dK@Uc^1|l<EKDR_3~Sm?OgIft`wTM9xMsdxzwT1OxYS&p#DG-EE}zL
z5)%{IxfxX?Wg3S?OnQTwuW7_bzR)r&8X4F-NeC-Ml#2khr+Y#%x|mc1uBRZtfmv>1
z!t&^>0xtp$V+nmV@kd)Tf-BC`mSu2S>n_WdX;sHwD5gaXPnUD9;=Zwrf^C?H(W<S@
z0_LAfMNFju2NdSd&jKZiX-H)hR6Uy&&x)}fm60(wlgQty3@a<T6wKZkcOvJl4AK8;
zt|k`OByX6TEG|X}XIgUkt)m#GjX!CRiynp)(VzksvRub1u@_Z6+7uzAnA)iCWT2oC
z^Qk-*twur_Zb*1qL0Qh#o^49T2&cpIHnah!DUUKtBE?)3KSSz|JzF<li>ji31&(Nm
zVVEv5>oj0eRnfSt*s4>-QYa0P6orwMr^nuNUNwe#pj=wuSPsCzWLPHZtC+d>QTMjH
z9dhs#s8yKuRxIuo?agq8i)gN(N^SO$>LId^TpQE&wsJ1<@ms(^h_;1R2<ruHA5x^J
za|y_?A&L&F3kjSsOljq!!U*I8EDa=d&w?_3G2;?Z*sLklD!Ug{^E_nPs*?j{3#!5X
ziMric*x+O?$aIoQC+4Q1oD;zVL86AO&j!~ByC_`~;O=ghl>ti`xGj@OCkB()Ls94%
z((~tNMid%l-wuiJ*k`OV*w3E9ww{E~N>M4kJa$U@D_ob<*hUaiPvVKP789;u7lt;}
zIfHfF@DfF_N^on;5$oj!MF4I3ORP1xfb_T$pFB0RWVytOn<;To?hixxB<5N@q?XDD
z)H2*Hqc;^I_!5&U462a05}ggu(~|jNV1R%#t(5SJ1wjQxrJ|b5f|L}<##lZ~q>|Ib
z=N;P4-~}pn^?Ip!;Kt)8uRnMk>dd)ucg$6Tsxvt&tC$*egRHHn|F}TZYO4?=OilV~
zQDM5Q+RRq6jrCcTYobuYI4a1!z*(N&61aD7g*l7jskO{O>Byfo_jWPAD#MPz)M%6$
zV6jDptjHVpzHthf;)K9e8f7Ai+tOPfs`l-Ow{XV-Omrjlo2>z?WFVJn^QTK$>Ht!t
z#4`e~mzE5Bbfh#7FHOi$ZR9G<1OZ=!Hw(%7d6OSB%@Y%t(o~<-+vX6&T?R@?%`D@N
z%tlqD5y7+Hq>2=%<{CsqEK5P?(^%1lML}cws<xs|s9Q+znE_@b5?IrV6`)A0#4fd_
z7Tz<#Rd5T6cs#ik@CZv0qduy)e+NB%q2_)(17smB!V-rjnI4MQ>`)3k#fC}@b!nB*
zSHGQZiSGKiC9+2#Vi(eRfJSW-Bp`)(UfQ7bRBytE=_R-2-f(`RB<;`w94?CsQ`iR4
z?l%!;d8NTUlc7OKg@_OKH7@j36{d@4UFuaUjckBPV4h&yjK%?#z|M;G<g7^C&S#2K
z&>t5QndyR#VC08OrIEEr)eQ3!v0MR%iSy`6&JD^=NKmC+W(bIUICabzqZZnjFhCSf
zfL0P#c*%L+vV#nW?wA0t;OkZjb5!Tmi{It?x<Cou5c7$Rt4-{sEtf!_KpsNCVBIvC
zQnnvvH%7e`^)ypqmY}rG(26@neHD8|n3XRyWC=-QGJdLP3-~1@_e@26$^`admTO9x
zOA3$zs_m}Td(LmU7HWlJ*u)x@tikS~?q-<~=%hN>3hIBwH-hWlFm@bVtSrl@hy~Jy
z>6;KUDCoq&kcu-Sd;#gzeN#6gYI{PcLO5`#rFO*tBwX_i=#`m+$|KM_W_Sq&6~_y(
zV)QoW<;HJ;4hf5Q;SvgSX)exTQJ5R|Ip(NMcB|3WYIJyJOjIqLsVbzaw0&5_5?Gcy
zbxbaP>qL>cgoCbL;Q;d~zE|=dpC}Xob8uPWL5HFVRnU^BgT6ArgSr7JX2<g(ZQQWH
z^Q#_uJ=FsiXtb9NXiCMrM5H5JEP`oD=c;1R(oN?$ysb2L#xb8d`m2g^Xa+c$P0Xm-
zt2ED7MYxbmyqIkgG~DT8cDX>|ZgdRwFR&DehrN+Tnfibb*y&;TPSRtaZbo^~QKmtC
zLw+4_7MuyT8v-q7FDhi!=Et0OJb6ffJX9{b>LqC<2@TAoARe8;24^UYfXV4%h8^gp
zp-fW*-q(>8qLeb#6xCA5MV8DdOSELLz-Ol7zlJ=g79V<+*Mce)vu<g#u#a1;ibdLs
z$w0`t0qQDD3hsoch)U8N(p8QIU&{gD%B?h^RAh>*mZ_Ui1=y?-+NC{B2tyCR84nD{
zWtJ^BQ7vf#>g{^70ONe9C|R8Y->A}M$qz)Ys);Ct$_8qRb8md%i`x(F+SN1E-qX|B
z-`U;1XQnupO<gPdZ8J%{Ci2OtYcC8B?iuWF-!s|1Cw*${5Uz>B#VkZGxhypGd*-qf
zS?>``-vT~@-%j4T2m6tV;<sQAtw-UU%6uT(H)TEpmiUlN``#67>xE$m4hEYs@!z_0
zOe;g{Csg8{#%uxATMmIRK6g{re8K2L1!V$cLz{I55xIUL+7iY_Nb)Y$VL~~c*D{Q>
zs_uR-SuCoRe9)jrp;G|vGF@}dg5eW38>;Ou^-Z>Z*~b4K$__(_lAiVK>BI2)r6p^a
z)ZW}|CTCfC7=cKMJojPsJ$m7SY$%<!w0kPqv#(7;Dp#rA_PdfbemKB#rKzlR%tANN
z{j#qu;0TIp+R)1p?f#1{2}~YKW?svEm|?>9c3g@)o*Fjz-rKv^FA!34FN)s_*!M1*
z&BTlgn=oasx6dw7U@jIhfOx&5%d_eb;#F^IGp|8zkF^k)W4%0GY@yPx_u6{g)>464
zGJSadh?N=vp#}5-Cf(?n>xC`U1i-WtF6VL!>LzW2SbrBE>K((nY?MkUkKJA(3!xN*
z;;|;1!q#KI-^f~7C^d2!BNx#3_<Y%M^}?ZL33BUAL>OZ!xMac#1Cl;)vX*<JVU6*Y
z6=4A2B03uJ{sF#CtbfB1lS<cIi!h;Quz5^W$Xa<!J2c>o;mrcA?VT=C6NOa@s~2L3
z)^hN&n93%ceaCE(4H5mH@(~h>FsLD<jQK(|S<5AWuHtabh!sQjZ`o=;JQE*=0VReg
zvH$G!oU&T15Z!W%g)!hLGlH`yC@E=X>LnmveGT6V!M9iii}_p_)<CxIn8|C0(Uvc9
ze^if=;V8=%GjZ43D#M-x$bZEuS;eEZUsc{)>j|_PyY>{UBd{lyWOGledxAE|kI*Py
z+!(spDuE6_N0-=u2^gru7ZOZOxqAZXOI%jf6?jNS-`H{2qTFJoq9rKe&q>^j(mS!X
zhz>;x{QG#7F_Cz1fMcy96aest>p9p3p;$5-P!bP|=S0}j7&TC+?cy-U8HD;|A~)kE
zlF3w|;E6BIu8zts6~CWlwpj|N*^KJz^FCUvdLk-s!l)kE3zfw@r<Xguq@3_z!K&14
zM$={n=B`~rb3F593uq-`4#7VU>vmnMFm*9jEj+>WnPO1l6OiTj)phk)lYrBd!N}SJ
z)PaFk=BxK0?aO7~m~Y>!PPbG{^NGlz!u7VGgKdFLp5>kvq&X-!<0)jd^lh5^ATxyt
z<=HgEG^kY)^_%BBf7Go8eJim)_0n^rDpGDdFmx7CaiAnIS~J+bXAcbWxx$Bb2&<2(
z_5<+T<3+!=^cd38cIje%ZD$Cyfg}Rvte#$;qXFjndNC*HBC3oKI8r91P}+YKCP?m^
zMJlF88iE3c3t}YY?UdO^17u}8%3TxT*i~+}$3AWmNh=x`qFDpt1z9EcwIje=`x}on
z4n*N3;)J)}3Bp+>HJQs_^ivzOOelkF6;YCNSPf|Qy>9%~wqoLRzAin6rYuH%0U#}v
zCRK4Ms6=CGy9M}6h(1!;oQLXa;~?;&+?kKII!`C23#t8k_lkbi2pb?Wg^GlB5lU7G
zpb?9~3Y442)C(`aa0*QhkZ-d&y#7@#MMBCW<>+bdpMwE)CWjqg;@q`12AS2F*>_ZZ
z<_6J0mfD_@^RaL5NX-;LsB)f9Z^TR%XxyDl!NUTFSp7})G4`@TT6D0NO^RVkG;$t=
zWp!b>^r&Z7B_`#Rp@|9@2xU$_fd3ig<V6X-(0^Q|lssoDRcZaOQp<pT`W;bS>_deb
zdqyjrt%;(r<ZO-OK;)rR;TgSE{Z*@!J5aD-)M`OXJJSW)rck@=P-D|)?O%U2uqr^e
zYGS`+3KY=68X;F;I75a7z;h7>obf>(L?gfrhW1Uaoa-2SWior%U`porIkt$XjxirF
zUFz+w=Bf7j0g>R2-l7<9s>8&mlHd)!?&`YKODnzUO}pn{_CEIrLXlzbmDkQ-1Hd;n
zFN?1x(L<x7$~A8N_~WBS8jtGFqjD%Lq0+)#!9vNK>(!w-ftfxGxf89Qc7Q{|@9lOm
zW`Y&-R>^K|V*1p);0>np0Jl<-U7yxtq9UJOaj{vUu{Xk!U=Mp+Il)4ftP__!h|3id
ziV-2}=09J+2hRPRz@CMJAePtP_jRDD^my(4e06Y8zL6zJYj_7Mb(?TGO5+l$IbNR#
zG?v;In5PUC_R+~_VcUgb*OW9=@jS0~cNyKBuaIiQIGpTQofEM*sjp&yEMjL!!N7DD
ztaNf3r@;u(d|v7ao<zIssh1+xiL81*OJ=4*tQRB=TAsyOC*)*NWl><{=fvXx=_t9{
zS>j$7W%ctMRH#+zr&{ZoQ*iPwb8;)wIINr0Rv_byA<Sx0oe#wFG;OZ8;~@o;9g{wM
z40NG!bWble^x6g;cgaVu?$f1Gg9?Vd<|3oyQ!kx{h5;7UhLk}iCXV?nn(e{NZF+7-
zykE(J*IU0-F2PU~vJgMGm{NSc?iQ2GfY}qtj2u`O7KzKJBr_b81*X`A3oj|}#(7Nb
zF6rs@JHh}fiq0>|CM@?5JjsYDAZrU+TFZQ})EyX6HH^EBMw`s;S<%-Y5-}wn3wlk%
z<$`QylLb`080bw|GO95ZLv&t}bMQof8Mw*|yF;O;LN;B$)N$wYpiP0ik<R4c{39er
z4Jy?+Jo?o+2DNyG^w`bgBp~D?o=1jc-w6#Jcw!4(txzlyo?+mYR=u`V8z4h*9oj3M
z88E&vQNcsVxRFia8toUCxYkDdO82y~xeR{0F$}~67sHGLL39@$m_pF-(nctl35Xm)
z<faf3P<*9wmXI_t<~-dG%B$IWRPT86nOyo$?h*paLo!MZvlSRCC)hH3(=yF2MST^#
zw05nn(KL{q=N=MC7wIo;vnW0eL(5-F3z`rtz2~h5WYvd>=z)q=e-%~`tnj>r<HX=c
zTtT+pp2G|#@?BTl^pmqrp48Hx@XHfg!x;yeL4V;&%wZ;ms{Tf#QIMeOL&mgA{W6QM
z{V?P%IV!7Zqz<}cb^tGJ{K~d0*?bGQ${fUfaRFA#C*slwxKv)nGwKsNLFF@oB&^(a
zTH3D^cS05Pl!)orw`)zeXNd*{X2zvqjgMo&fu_i(-1Cod{o^@`m0f}y!BUUsBtJ9l
zhu>M_>8M_W1#n&n<O1IMPSd003?fTUx?waK(m1;4s`&Ekn(v{C__~Bpt9C&u<q6fy
zIrS_?J!`1|nKM#OGGis-usRkOR#rq1A3>>@+A3YZp7PwkB5550f|9I;=e*2fhfSdD
zTEb(VB~r17QDnGc5r%&E`1hJqg6G6ysRI(Z0(Cel0yPP&M|^+`EM<Cnd}0u?%|t|@
z9N32^ODUX$;?sr@H1$(fX+2zF7cLfxDRNnwMNssinyU(LoI<ZsI?qj&9u&42OcI{T
zXn%JyZXH-qZ5y&rUsvxq=N_AB3IoWEnmX-K^$!e$Iz64xC4tEhb{#O7Q_h0wXX49E
z2bSvJBV9~^<1;mQc6FmTxhm5(a$XRHit3$u!CFJI0F(-x_6ZydFd#zypO1A5Iu#>A
zyNCtlI(gPTElbRxfx;LTl-i%UMVkN_1k_BM84}EA*`YKFUFwCA84kk5=#z_-Rry@@
z)@<&4*5$%lNVr>4{nBZk_L)~kcu{%)kcb(A1dP&d7FALjqWVb)7_Zth#hIe`TpK$L
z=vN2*Sp#`<Ca1_16gNk3AXRW!@=%|u2XfTiA;xY%O`kruTgKuu#2N{DlxKD7S21Ch
zjJs+JKQu<BlzUN(p@~Ayor0Z(Ita7=UMuHwfB~HQ{H(AXMF{_TJOWC30V(u!Lk*1a
zya(Gz-y|d=Ekpz>$bFr1*rlEawf9f&RAp-kWX;MH)RqQSgK}>6Fb@bKvGUEKRmVgH
z0;#i<4WZmqMt^*@(ms>wn5s%HR1^`d4$%so)aY|s=$Sq9i$fx;$ttbUv7Dcr!TES<
zw{-m=e-7e)Emje#i8-6jizoBBxmg&+YRp`Ob;<}MMoJQ7P%4CzB3}+M=sm&UVuv`C
z&ZnqA%hKNDFr1uN!a~hWqh^JD^-@D$8$b`?Xcv-M1>kyfI@BNB?P88HQDaRT{nbZN
zsEE)MMfWF1<|1+!I{2&fooJQ<i=_rx<Q5p&0i*0-(wTe#`x$faWS$mGgb$m{46Gi-
z9a=bO!T3XQ1d7ZCkhwQ?8$SECt}K<P_=T=u?r=yZ<)he%-cBzb;DON)NUY1>!nMF>
zen4#-h(AyHbkp!M&Nuq5#K}?0*c_*I);K~{o#Dw86y}PJn|Huey%=b8ge9-{HIR*y
zwa?2mxAH?{l!qe@uz~qW{G}3BJ~gR!ZOEIien!$#=2~Y+OR2Sg&-&+Py(j}xD08Vg
zW}qr;I9ep)U~@uBy`WUQK{ZK$s^Fa^2QA`=6ucQM?4bpr5QsgQ&L@)C88DeC!q(2)
zW#cByyvvn`VgCc1x3Y8&L5~Cb|J2-p+89$eCCxDGeO>EOJ>Q~{^WvcfzQ=J+Gi+@!
zpcL*ZtRN4hMbuJ`=M_u!#)QCT)_u;Fh+vgZLU1J(GRjX;*)pMqj0B{w-0uS@9lDP`
z9yw^oj2HKc#VdQuYf1&fC@s}0D8?+?uY=y4EZ<dKV^DgWrrvg8Jfzk?l(d~V*akTn
z3jHHykk660XjPE{dzBT6p+0^&8HQcOat&miR$nv9%akxEReA6VzJ*IRBl4?*I+V}w
z*yHXK@CO!IzI`LgD6M{$4|T-2<FYcaTvL-wpunD9BTnLJAnK5&(@F3Ar7FBz#c?0=
zY2yU~+-f1knF!mQJc$Ul<W%V^F~aak<wP3D#ZXn<5CwtIXu)4c9v%X?Z%SplWJHEY
zP|}H0zAU}tc_Lw->6|kBuOHn}4IkOzA+m59f@z*R!y)6ZbZk={D?>>UwA-wDM0*}S
zDu(V%u@Brq;LIRxWXp5$WM{;FYrFtWG`6jEi4{fHOt#o{K9|2$4%O*`*OR%4M4@XM
zdk(<hh>ErAMPp+(9Ncpj0R{b>K7VW1L~7oh!;IiEW}!=VFT1nc5tk~+M`2@%UE^~Z
zI9L4NDy@LyGLxw;pI77m-IA@YxkA1xlTA*~O`saPc6IgiR153E8G(hWAGp&^GMUbd
zcTFafUGQw<4)*Vv&Sd8<?158b<Y)>g&!8eA%jhE88YrnEqN-=@I;m~c{-!OV<o~rk
z*U+ZyQT7|_S+jEroZGakL=t%M&$f8=i|X-88it#WT}&n=u}57fv~kloHNFtc$wc+o
z6+|G+%WF}dk@N}Tl}StS&ia~|`ZX~<nPcJl6(i2$!X^-gLy3yuv1hD(9B0KnnJjd$
z#R;ra@KI4OJopY5lQ%Ltc+eIA`Yow;vHI$60WZ+3bY>Ef%lK5h3r^q;H(e8;l5pI`
zlQ>e$l>2SxGwcm~0~)J1xe5kS$4#HtEs?!C%u<W32yg8COr~aw2-USM&fpolPtZiT
zK*JHuv+NR82{gZ$ExnOhDZL_GRZ&Giz3^Z>mgz(}+*RRw1RCBe9yCosS)%RHhll<`
z#IhVKZt)kp{~EblZ)k`;e64z17yGz=+8_Ige%c&czh8ab92@qYZqiTNV|VDMnb<eI
zugk7eDR#vM_0x&iJ^JZL>`DDJ5Q`j8@jhY4p3slIv7hLtky!6R^?7yduzu={<-M?b
z^waz8*zW69#DUnje)`Ku?0tt+U~la6`e|n@df4Q+RzF=EJFTBi#U9d6zZs1kxj{ut
z$3CQ=*2NyzPpz@f>8HzM-_lQeVjFH$DcWMY_0#pStbXc<-KU?vW5-@|L`6Ivds07L
z7h682!iHjp^wVJMcKx(E_GbN*ihW-{t&PQwsuY`ISLvs#V#oE<)>uwIb;TagPo1$R
z_0wQ1a?GS{*H4+)8}-xb*n)mqANwQybUbDqS1BfAllrME_745DI`)43bVfz0ezg(Y
zV14iB!LQ2^5V2aVFYPV=(yGH(YBV)pJ9PM|K==^CZR>LDsl1BG^7v!l+tym^OEdE7
zU2ee>%e^m<&%DH6V?7m!|E~zIR{vj>_?KIs4V3#{oqxX`M=!xUe}9iZmitB>zCl7+
z$Ljfi8{xLK+8Tbjj_A8ptIvPQ_f^*MQ@)6JT!8{?YlHRYx}N6iMjies9j>T@Wep=d
zVy&?LOLwk`zhA<aSys0RQTM}=&pPYt0l1ye`I~+*sa`7K>n&^6gs6KC;adP7Z<y%M
zZ`R@75YXYDMEL6REadG=I=(knb)3VXfz00<EIK@)!#$+e;cwC59ud*u@6+MlxYyxN
zBYZXTH{|tk9sX}RzDI6!cw<!6$0JBO{4m0+wJW3JdsJD+e}fM9$fpkfm<}JmUImN-
zF8sAORL}ofgcCj<aZ=H(`*pZS$94E0O1OUU-9B9-|1ax&Jd&c*tZ-Dh9wE}<hjjQ8
z2UI|>4xiWI9vRZ%Z`I)*A=Tl3p~F2Qui<b-V|6%;BAjsW<}#g6L5F+uqYi(M4)-X%
z4*%;K`M1Zampg`Vmg~*1I-lEgxHli^@OSHQk1*@-59@Gm2G-%9)#1T@{3gPy;oAWa
z1lGr!`*l7q)#2VWrNe(shkMhr4*w*=tL1-Llgi(llyv+<I^3Iyb-1g;y=hN}zXsve
z@_(0(?{OzO{+D&QHwEhOCXlvj`CNf;!oi!2b^Mpqh<|I1@K5P{g7sP1%yL_;pY2l_
zZ`AqkMmWp$7#|(}N*(So0y_N7I^5&SbofUkfBoXSeOkx&coqF^IVNV7>oH+E{5phJ
zgU?%Pgnz3>c&tU`?{R}V{}<?RkA2hOuRwUUa(_?9501w#>Tr(%()l!lv0%F*2UNf(
z)XjR44)<6m9X_eUJ?>A3e-z=>>hqM2@3C|`{!eSf-@HQA$Kxb*{F6G|<85{LTXnd{
zv+MBtb$D=`{-F*J(y=ciyjuN#R3m)l%Ifi7P$PT{;e@ltPU?DIl=!XID>a@!sKb9-
z#}CeHf2G5NOy<z4>izg?9qzHaI{&{xc)Nb~-@c~f2l0P9fKv@V`)Y*07~yPhaGtui
zM*M%$@x3L9uGES)mfLDwuKB~ub@(nF9^@+yAe`lTOC%jXp~JluoesZShX?0{hY;Sb
z<M?kM*73bnjsEzp8u1&~REOKkYJ@{tUn~^i;J-78WjfSv(5=7|2E@8pq-W`~fv1*E
zPD8K&HxMw?Do{RXQD8?eUK5?&)nkaa7wGiziHlH47V{UO<%ZvOcVcd4hNm0&-k^kp
zXwV;(rdh{_q5U%lyY}PEb4m?ywzMbHz#HrnV3?yc-mq@wdpD2zt9@*ld&B92Cq~`T
z7apbsm<xx|?&uL6c;xVDwxwk5bNHrCoXpb+_kb5JxG>Q#<g#$SQ@rTTqtWzcV@Yjr
z{_aa(c<{v7A*4Qg;*iN)SK{OiH=Kc0+1Z2FA0Mr5WmV=Qq<-PQ*@o)v5<76?@v-X<
zojd3Db@oGM4hj47?=K9hk${$=U;B`SCcxLG3X`mglk&<<*}X$-MP<|L`ef8&a^fBG
z)?3$Uy(iI?Dz{8gd`Md`Rn)R%(gQHn+7MT1XU#)<{kGQBVwm#{J-e&<Ku6Fj#?!Y^
zPG>B;O0}#0UF_Tfs&i4W)T>}FS6YYxy+90y8{vRPZNBMA6_qbIF)Hx+usZ<EI(Yq<
z+tb-cg-oe$|EJGds-{9xmS|EXj6V#<+fxe2Zf|FA=K$q?P=}WV88c7gbJ9)lNGRB?
z(~s#W&U=EzXP*nT$mz4%b4RUif{}9NDa@XMOVysOVzZ|^TMDUVds=~}@KspLYi2bt
zp;&G+R$^;qd8yQV^S=Hf##ZP_m73J(0-xpB&ZXjZ38O{B?2W@xxPK&+LK)j^d95Ta
z3X!Yq+O2y;&?=>5MKL<#Z&zn;kD{MI@`@AHp%nJVEguU(>o;Rsq)1a~%&-pv9w^3+
z0WHTtT%_nKYC25`Um}MQh#1_^5o4!Wfj$P1A=I2f6I*|q6?{O}0;K<tIA2)YO0vps
zIM`<vQf5pAvRzbfU2o_64Ed@w%Wv&kIc@Q9s?rQs0Ro?$X(jfSHdw=~R*0GMg{mr{
zNm*C|e~?}v)n34w_#ouOYXM9LWHTRj^83L+jP}EzI=Kk;{iyO#^fGY_<C`lwN0?s-
z1T5d(*aM?WF^2Nj)WgGi5ddVw4=#<iWt>C#5z=9d>}&HCB|I=);3v-k>qN6bmj<JR
zB&RQSupbcoP)=N`5crB7!;GY@M{1LnXPNte-}S=X8+c{458sWLzm*w04WSA^5di7T
zkn0DHWX?4N4q#7C-Rh=sT%-Dq@kTbel8jXt=3vgQ#UhrSQY74=@@!H+Y?L>qOaZQI
zKnN?E@GM>AaUe2xmS);obuO{qtg!6(tG~L3dV&VXSa9@#wgikzxC{Ym8jZE*sWR*?
zP9dB6&^RBNQ5{)gBg&WydYclS2;|oIm@41tK<3O3^1y(qm<GzaoffU+Hiw^+Z)Rkn
zU8+<;$wgNRWjG-7uy)$#;X2vmfTeH{e&XRD#IPI^RaU`)g#Ov05>$k~H|NNHk}^WO
zsIR%&n6LQ_U>Hm=OMJfDGnPzZt8sC}^Y}V;u8;>)i)i4wVDfT415*v1f`_?|opt9&
z2j&ygbE(l&SQF^2YB2g#|Ggd6q2{vcM^gm39F#?oi)ja_87ji{2^THTW-aHAou!4f
zk>NlTK?%-Twkv?gOPtC9S3NPjSdPSUPs0uL3|3r+4nej683?*WaHYzqK}|heEE|NC
zyO?zMg<uZKy`cKhRm~+JXLasLM3c&}GGJj|_RT}PVI!8n%Cchby<kdkJrJDCYXD2}
z?br@PCy&KMz9`!k{Zo9!FsqbR_~aBskXq<bKj{|-`o=j!wUrZkw4A(F@GDkl;o=Mq
zTEiWObjy9pJYnlcsuMPBo!noJ^XV^IonDX_3hv2FSQ23hrifPO#KkN!Q+If(kuTU^
zP~h=){udYDFt`#-pr2;p+q{#4MXM8!os&8JK+D!n@h9IY;=ay&PW)STrlzz2b7}&)
znKu-ZOzKlqAw1!@lU$W-(~>;QGYU`4WRN`yW1*-wJ!f`~<DB14NLObdG(}iye2zOK
zc+@e%)vKJyX+DjQ!*1Msf!!a9RIva?^T=S}kN2L>PSS+F;FmLpeZB$-p}K^vg8IE*
zKbU*F4mUTbA<KT9c=M<KlumE%+sb0oMx*?95U>C7^PlHT`QOzK=KdP}ZqfzIKZf*B
z!Flzcg`S!}bB{w`$RC5LvNq{qIU&C@xI)G6rN03E4S(jo8F~i)k9qiiG%NYJum11s
zP+!gcX&u?r-?Y=*r||t}zVx$OR04DV4V|9#XFW~*b+C0F56s)-w{olcV(#D75l#6f
zy=nhzb^7adJZqbN(D$FPbMa$(rU|Bh6T%1+sOi<OyZlc4^8ZXdOxQ2s!Jocer#JVT
zb$^=pP-n@{+%MtHpZ+xi>btp{cq-Jg%)7bYA4q?nPH*m~7AgPXKzd_`W$sr5@W+&E
z>hs%y^u}Ju+@Xdo`vu|mdpf=8f9sTvuJ6aoQkVMA1b;M;-q<~v`!+9Ql_FUFUk1|8
zo>uY9{Yir`D%isx{c3$Ckba-G(=zv)O+<YUmj7jhLp3a8gHep#*;Bv3w^Dzrw^I8}
zwf-F+IOI9D_%n8HU()GKJoU9Q{eR*Eao?mj_FG@q>Ay?l#Lu9S$<N?{vVSY3|A(B4
z{|~OZ?@%}IYSNo~1o^WFQ@&>pcC$+I=Yjq+>CC-3klxt0{rR{`Z|bSuO6@oAtB{^~
znevUD+EY5cDaXWTUH!jxy8Lc`Af8S7U4d|u-rP6q^nqyBPj&fEnTqKMCY_1jStI@5
zq*aU$zShK4_h9<HHPT=Bx{Cjwdj2uF1k)d>k^Z(Hs1!#yx%qy<^k;SYApAc5GnMG^
zxA+p{(WEzbw?_I`|B8xnqd{DqjY((jv^O-*{*oSln+i<?@Glsb?|~?i&5n1dnBA~{
u;cpxMs?9$zL-KHs@yzesLn{59(3|^z!SZ3gP&NJ2f2?BO6-W?xwf;X4{Ahdt
literal 0
HcmV?d00001
new file mode 100644
@@ -0,0 +1,19 @@
+[suppress_function]
+# Suppress libstdc++ functions added to the binary.
+ change_kind = added-function
+ name_regexp = (^std::.*|^__gnu_cxx::.*)
+
+[suppress_function]
+# Suppress libstdc++ function symbols added to the binary.
+ change_kind = added-function
+ symbol_name_regexp = ^_ZNSt7__cxx11.*
+
+[suppress_function]
+# Suppress libstdc++ function deleted from the binary
+ change_kind = deleted-function
+ name_regexp = (^std::.*|^__gnu_cxx|)
+
+[suppress_function]
+# Suppress libstdc++ function symbols deleted from the binary
+ change_kind = deleted-function
+ symbol_name_regexp = (^_init$|^_fini$)
@@ -1,5 +1,5 @@
================ changes of 'libtbb.so.2'===============
- Functions changes summary: 0 Removed, 10 Changed (89 filtered out), 17 Added functions
+ Functions changes summary: 0 Removed, 3 Changed (96 filtered out), 17 Added functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
Function symbols changes summary: 0 Removed, 0 Added function symbol not referenced by debug info
Variable symbols changes summary: 3 Removed, 0 Added variable symbols not referenced by debug info
@@ -24,22 +24,7 @@
[A] 'method void tbb::internal::concurrent_queue_base_v8::move_content(tbb::internal::concurrent_queue_base_v8&)' {_ZN3tbb8internal24concurrent_queue_base_v812move_contentERS1_}
[A] 'method void tbb::task_group_context::capture_fp_settings()' {_ZN3tbb18task_group_context19capture_fp_settingsEv}
- 10 functions with some indirect sub-type change:
-
- [C] 'method void tbb::filter::set_end_of_input()' at pipeline.cpp:710:1 has some indirect sub-type changes:
- implicit parameter 0 of type 'tbb::filter*' has sub-type changes:
- in pointed to type 'class tbb::filter' at pipeline.h:65:1:
- type size hasn't changed
- no member function changes (4 filtered);
- 1 data member changes (4 filtered):
- type of 'input_buffer* my_input_buffer' changed:
- in pointed to type 'class tbb::internal::input_buffer' at pipeline.cpp:52:1:
- type size hasn't changed
- 1 data member change:
- type of 'tbb::spin_mutex array_mutex' changed:
- type size hasn't changed
- 1 base class insertion:
- class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
+ 3 functions with some indirect sub-type change:
[C] 'method tbb::task& tbb::internal::allocate_root_with_context_proxy::allocate(std::size_t) const' at task.cpp:74:1 has some indirect sub-type changes:
implicit parameter 0 of type 'const tbb::internal::allocate_root_with_context_proxy*' has sub-type changes:
@@ -101,10 +86,8 @@
1 member function insertion:
'method virtual tbb::task* tbb::internal::generic_scheduler::receive_or_steal_task(tbb::internal::reference_count&)' at scheduler.h:362:1, virtual at voffset 7/7
no member function changes (4 filtered);
- 3 data member deletions:
+ 1 data member deletion:
'unsigned int hint_for_push', at offset 896 (in bits) at scheduler.h:171:1
- 'volatile intptr_t* my_ref_top_priority', at offset 2560 (in bits) at scheduler.h:433:1
- 'volatile uintptr_t* my_ref_reload_epoch', at offset 2752 (in bits) at scheduler.h:443:1
18 data member changes:
'uintptr_t my_stealing_threshold' offset changed from 704 to 832 (in bits) (by +128 bits)
type of 'market* my_market' changed:
@@ -178,20 +161,6 @@
1 data member change:
'tbb::spin_mutex mutex_ec' offset changed from 0 to 8 (in bits) (by +8 bits)
- [C] 'method bool tbb::internal::hash_map_segment_base::internal_grow_predicate() const' at concurrent_hash_map.cpp:55:1 has some indirect sub-type changes:
- implicit parameter 0 of type 'const tbb::internal::hash_map_segment_base*' has sub-type changes:
- in pointed to type 'const tbb::internal::hash_map_segment_base':
- in unqualified underlying type 'struct tbb::internal::hash_map_segment_base' at concurrent_hash_map.cpp:27:1:
- type size hasn't changed
- 1 data member change:
- type of 'tbb::internal::hash_map_segment_base::segment_mutex_t my_mutex' changed:
- underlying type 'typedef tbb::spin_rw_mutex' at spin_rw_mutex.h:39:1 changed:
- underlying type 'class tbb::spin_rw_mutex_v3' at spin_rw_mutex.h:43:1 changed:
- type size hasn't changed
- 1 base class insertion:
- class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
- no data member change (1 filtered);
-
[C] 'function void tbb::internal::throw_exception_v4(tbb::internal::exception_id)' at tbb_misc.cpp:126:1 has some indirect sub-type changes:
parameter 1 of type 'enum tbb::internal::exception_id' has sub-type changes:
type size hasn't changed
@@ -200,42 +169,6 @@
1 enumerator change:
'tbb::internal::exception_id::eid_max' from value '20' to '21' at tbb_exception.h:79:1
- [C] 'method void tbb::mutex::internal_construct()' at mutex.cpp:116:1 has some indirect sub-type changes:
- implicit parameter 0 of type 'tbb::mutex*' has sub-type changes:
- in pointed to type 'class tbb::mutex' at mutex.h:40:1:
- type size hasn't changed
- 1 base class insertion:
- class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
-
- [C] 'method void tbb::queuing_mutex::internal_construct()' at queuing_mutex.cpp:113:1 has some indirect sub-type changes:
- implicit parameter 0 of type 'tbb::queuing_mutex*' has sub-type changes:
- in pointed to type 'class tbb::queuing_mutex' at queuing_mutex.h:45:1:
- type size hasn't changed
- 1 base class insertion:
- class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
-
- [C] 'method void tbb::queuing_rw_mutex::internal_construct()' at queuing_rw_mutex.cpp:501:1 has some indirect sub-type changes:
- implicit parameter 0 of type 'tbb::queuing_rw_mutex*' has sub-type changes:
- in pointed to type 'class tbb::queuing_rw_mutex' at queuing_rw_mutex.h:47:1:
- type size hasn't changed
- 1 base class insertion:
- class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
-
- [C] 'method void tbb::recursive_mutex::internal_construct()' at recursive_mutex.cpp:104:1 has some indirect sub-type changes:
- implicit parameter 0 of type 'tbb::recursive_mutex*' has sub-type changes:
- in pointed to type 'class tbb::recursive_mutex' at recursive_mutex.h:39:1:
- type size hasn't changed
- 1 base class insertion:
- class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
-
- [C] 'method tbb::thread_bound_filter::result_type tbb::thread_bound_filter::process_item()' at pipeline.cpp:722:1 has some indirect sub-type changes:
- implicit parameter 0 of type 'tbb::thread_bound_filter*' has sub-type changes:
- in pointed to type 'class tbb::thread_bound_filter' at pipeline.h:197:1:
- type size hasn't changed
- 1 base class change:
- 'class tbb::filter' at pipeline.h:74:1 changed:
- details were reported earlier
-
3 Removed variable symbols not referenced by debug info:
[D] _ZTVN3rml16versioned_objectE
@@ -1,5 +1,5 @@
================ changes of 'libtbb.so.2'===============
- Functions changes summary: 0 Removed, 8 Changed (91 filtered out), 17 Added functions
+ Functions changes summary: 0 Removed, 2 Changed (97 filtered out), 17 Added functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
Function symbols changes summary: 0 Removed, 0 Added function symbol not referenced by debug info
Variable symbols changes summary: 3 Removed, 0 Added variable symbols not referenced by debug info
@@ -24,7 +24,7 @@
[A] 'method void tbb::internal::concurrent_queue_base_v8::move_content(tbb::internal::concurrent_queue_base_v8&)' {_ZN3tbb8internal24concurrent_queue_base_v812move_contentERS1_}
[A] 'method void tbb::task_group_context::capture_fp_settings()' {_ZN3tbb18task_group_context19capture_fp_settingsEv}
- 8 functions with some indirect sub-type change:
+ 2 functions with some indirect sub-type change:
[C] 'method tbb::task& tbb::internal::allocate_root_with_context_proxy::allocate(std::size_t) const' at task.cpp:74:1 has some indirect sub-type changes:
implicit parameter 0 of type 'const tbb::internal::allocate_root_with_context_proxy*' has sub-type changes:
@@ -51,49 +51,6 @@
1 enumerator change:
'tbb::internal::exception_id::eid_max' from value '20' to '21' at tbb_exception.h:79:1
- [C] 'method void tbb::mutex::internal_construct()' at mutex.cpp:116:1 has some indirect sub-type changes:
- implicit parameter 0 of type 'tbb::mutex*' has sub-type changes:
- in pointed to type 'class tbb::mutex' at mutex.h:40:1:
- type size hasn't changed
- 1 base class insertion:
- class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
-
- [C] 'method void tbb::queuing_mutex::internal_construct()' at queuing_mutex.cpp:113:1 has some indirect sub-type changes:
- implicit parameter 0 of type 'tbb::queuing_mutex*' has sub-type changes:
- in pointed to type 'class tbb::queuing_mutex' at queuing_mutex.h:45:1:
- type size hasn't changed
- 1 base class insertion:
- class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
-
- [C] 'method void tbb::queuing_rw_mutex::internal_construct()' at queuing_rw_mutex.cpp:501:1 has some indirect sub-type changes:
- implicit parameter 0 of type 'tbb::queuing_rw_mutex*' has sub-type changes:
- in pointed to type 'class tbb::queuing_rw_mutex' at queuing_rw_mutex.h:47:1:
- type size hasn't changed
- 1 base class insertion:
- class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
-
- [C] 'method void tbb::recursive_mutex::internal_construct()' at recursive_mutex.cpp:104:1 has some indirect sub-type changes:
- implicit parameter 0 of type 'tbb::recursive_mutex*' has sub-type changes:
- in pointed to type 'class tbb::recursive_mutex' at recursive_mutex.h:39:1:
- type size hasn't changed
- 1 base class insertion:
- class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
-
- [C] 'method void tbb::spin_mutex::internal_construct()' at spin_mutex.cpp:62:1 has some indirect sub-type changes:
- implicit parameter 0 of type 'tbb::spin_mutex*' has sub-type changes:
- in pointed to type 'class tbb::spin_mutex' at spin_mutex.h:40:1:
- type size hasn't changed
- 1 base class insertion:
- class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
-
- [C] 'method void tbb::spin_rw_mutex_v3::internal_acquire_reader()' at spin_rw_mutex.cpp:73:1 has some indirect sub-type changes:
- implicit parameter 0 of type 'tbb::spin_rw_mutex_v3*' has sub-type changes:
- in pointed to type 'class tbb::spin_rw_mutex_v3' at spin_rw_mutex.h:42:1:
- type size hasn't changed
- 1 base class insertion:
- class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
- no data member change (1 filtered);
-
3 Removed variable symbols not referenced by debug info:
[D] _ZTVN3rml16versioned_objectE
@@ -1290,6 +1290,96 @@ InOutSpec in_out_specs[] =
"data/test-abidiff-exit/pointer-to-member/test-ptr-to-mbr5-output-1.txt",
"output/test-abidiff-exit/pointer-to-member/test-ptr-to-mbr5-output-1.txt"
},
+ {
+ "data/test-abidiff-exit/PR31513/reported/libloremipsum_gcc7.so",
+ "data/test-abidiff-exit/PR31513/reported/libloremipsum_gcc11.so",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "--no-default-suppression",
+ abigail::tools_utils::ABIDIFF_ABI_CHANGE | abigail::tools_utils::ABIDIFF_ABI_INCOMPATIBLE_CHANGE,
+ "data/test-abidiff-exit/PR31513/reported/PR31513-reported-report-1.txt",
+ "output/test-abidiff-exit/PR31513/reported/PR31513-reported-report-1.txt"
+ },
+ {
+ "data/test-abidiff-exit/PR31513/reported/libloremipsum_gcc7.so",
+ "data/test-abidiff-exit/PR31513/reported/libloremipsum_gcc11.so",
+ "data/test-abidiff-exit/PR31513/reported/libstdcpp.suppr",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "--no-default-suppression",
+ abigail::tools_utils::ABIDIFF_OK,
+ "data/test-abidiff-exit/PR31513/reported/PR31513-reported-report-2.txt",
+ "output/test-abidiff-exit/PR31513/reported/PR31513-reported-report-2.txt"
+ },
+ {
+ "data/test-abidiff-exit/PR31513/non-regr/libtest1-v0.so",
+ "data/test-abidiff-exit/PR31513/non-regr/libtest1-v1.so",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "--no-default-suppression",
+ abigail::tools_utils::ABIDIFF_ABI_CHANGE,
+ "data/test-abidiff-exit/PR31513/non-regr/report1.txt",
+ "output/test-abidiff-exit/PR31513/non-regr/report1.txt"
+ },
+ {
+ "data/test-abidiff-exit/PR31513/non-regr/libtest2-v0.so",
+ "data/test-abidiff-exit/PR31513/non-regr/libtest2-v1.so",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "--no-default-suppression",
+ abigail::tools_utils::ABIDIFF_ABI_CHANGE,
+ "data/test-abidiff-exit/PR31513/non-regr/report2.txt",
+ "output/test-abidiff-exit/PR31513/non-regr/report2.txt"
+ },
+ {
+ "data/test-abidiff-exit/PR31513/non-regr/libtest3-v0.so",
+ "data/test-abidiff-exit/PR31513/non-regr/libtest3-v1.so",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "--no-default-suppression",
+ abigail::tools_utils::ABIDIFF_ABI_CHANGE,
+ "data/test-abidiff-exit/PR31513/non-regr/report3.txt",
+ "output/test-abidiff-exit/PR31513/non-regr/report3.txt"
+ },
+ {
+ "data/test-abidiff-exit/PR31513/non-regr/libtest4-v0.so",
+ "data/test-abidiff-exit/PR31513/non-regr/libtest4-v1.so",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "--no-default-suppression",
+ abigail::tools_utils::ABIDIFF_ABI_CHANGE,
+ "data/test-abidiff-exit/PR31513/non-regr/report4.txt",
+ "output/test-abidiff-exit/PR31513/non-regr/report4.txt"
+ },
#ifdef WITH_BTF
{
"data/test-abidiff-exit/btf/test0-v0.o",