From 927a7360f9ca5ba1e69ad8928b3c53044c1e3bd9 Mon Sep 17 00:00:00 2001
From: Jared Hoberock
NVIDIA Corporation
Technical Specification for C++ Extensions for Parallelism
+ Working Draft, Technical Specification for C++ Extensions for Parallelism Version 2
Header
namespace std {
namespace experimental {
namespace parallel {
-inline namespace v1 {
+inline namespace v2<experimental/algorithm>
synopsisv1 {
template<class ExecutionPolicy,
class InputIterator, class Function>
void for_each(ExecutionPolicy&& exec,
@@ -499,7 +499,7 @@ Header
namespace std {
namespace experimental {
namespace parallel {
-inline namespace v1 {
+inline namespace v2<experimental/numeric>
synopsisv1 {
template<class InputIterator>
typename iterator_traits<InputIterator>::value_type
reduce(InputIterator first, InputIterator last);
diff --git a/exceptions.html b/exceptions.html
index 4c07716..caac5de 100644
--- a/exceptions.html
+++ b/exceptions.html
@@ -9,7 +9,7 @@ Exception reporting behavior
During the execution of a standard parallel algorithm, if the invocation of an element access function
- exits viaterminates with an uncaught exception, the behavior of the program is determined by the type of
+ exits via an uncaught exception, the behavior of the program is determined by the type of
execution policy used to invoke the algorithm:
sequential_execution_policy
or
- parallel_execution_policy
, the execution of the algorithm exits viaexception_list
exception_list
containing allexception_list
+parallel_execution_policy
, the execution of the algorithm exits via an + exception. The exception shall be anexception_list
containing all uncaught exceptions thrown during + the invocations of element access functions, or optionally the uncaught exception if there was only one.- For example, the number of invocations of the user-provided function object in -whenfor_each
is unspecified. Wfor_each
is executed sequentially, - if an invocation of the user-provided function object throws an exception,for_each
can exit via the uncaught exception, or throw anexception_list
containing the original exception. -only one exception will be contained in the+ For example, whenexception_list
object.for_each
is executed sequentially, + if an invocation of the user-provided function object throws an exception,for_each
can exit via the uncaught exception, or throw anexception_list
containing the original exception.These guarantees imply that, unless the algorithm has failed to allocate memory and - exits via terminated withstd::bad_alloc
, all exceptions thrown during the execution of + exits viastd::bad_alloc
, all exceptions thrown during the execution of the algorithm are communicated to the caller. It is unspecified whether an algorithm implementation will "forge ahead" after encountering and capturing a user exception.- The algorithm may exit via terminate withthestd::bad_alloc
exception even if one or more - user-provided function objects have exited viaterminated withan exception. For example, this can happen when an algorithm fails to allocate memory while + The algorithm may exit via thestd::bad_alloc
exception even if one or more + user-provided function objects have exited via an exception. For example, this can happen when an algorithm fails to allocate memory while creating or adding elements to theexception_list
object.
<experimental/exception_list>
synopsis<experimental/execution_policy>
synopsisstd
. Unless otherwise specified, all
components described in this Technical Specification are declared in namespace
- std::experimental::parallel::v1
.
+ std::experimental::parallel::v2v1
.
std
.
@@ -60,7 +60,7 @@ Unless otherwise specified, references to such entities described in this
Technical Specification are assumed to be qualified with
- std::experimental::parallel::v1
, and references to entities described in the C++
+ std::experimental::parallel::v2
, and references to entities described in the C++
Standard Library are assumed to be qualified with v1std::
.
Extensions that are expected to eventually be added to an existing header @@ -77,7 +77,7 @@
For the purposes of this document, the terms and definitions given in the C++ Standard and the following apply.
-A parallel algorithm is a function template described by this Technical Specification declared in namespace std::experimental::parallel::v1
with a formal template parameter named ExecutionPolicy
.
A parallel algorithm is a function template described by this Technical Specification declared in namespace std::experimental::parallel::v2
with a formal template parameter named v1ExecutionPolicy
.
Parallel algorithms access objects indirectly accessible via their arguments by invoking the following functions: @@ -95,13 +95,13 @@
An implementation that provides support for this Technical Specification shall define the feature test macro(s) in Table 1.
@@ -152,7 +151,6 @@<experimental/numeric>
+ __cpp_lib_experimental_parallel_task_block
<experimental/task_block>
Document Number: | |
---|---|
Document Number: | |
Date: | |
Date: | |
Revises: | |
Revises: | |
Editor: |
Note: this is an early draft. It’s known to be incomplet and incorrekt, and it has lots of bad formatting.
std
. Unless otherwise specified, all
components described in this Technical Specification are declared in namespace
- std::experimental::parallel::v1
.
+ std::experimental::parallel::v2v1
.
Unless otherwise specified, references to such entities described in this
Technical Specification are assumed to be qualified with
- std::experimental::parallel::v1
, and references to entities described in the C++
+ std::experimental::parallel::v2
, and references to entities described in the C++
Standard Library are assumed to be qualified with v1std::
.
Extensions that are expected to eventually be added to an existing header @@ -1298,7 +1347,7 @@
For the purposes of this document, the terms and definitions given in the C++ Standard and the following apply.
-A parallel algorithm is a function template described by this Technical Specification declared in namespace std::experimental::parallel::v1
with a formal template parameter named ExecutionPolicy
.
A parallel algorithm is a function template described by this Technical Specification declared in namespace std::experimental::parallel::v2
with a formal template parameter named v1ExecutionPolicy
.
Parallel algorithms access objects indirectly accessible via their arguments by invoking the following functions: @@ -1316,7 +1365,7 @@
An implementation that provides support for this Technical Specification shall define the feature test macro(s) in Table 1.
+ +An implementation that provides support for this Technical Specification shall define the feature test macro(s) in Table 1.
__cpp_lib_experimental_parallel_task_block |
+ 201510 | +
+ <experimental/task_block> + |
+
<experimental/execution_policy>
synopsis<experimental/execution_policy>
synopsisnamespace std { namespace experimental { namespace parallel { -inline namespace v1 { +inline namespace v2v1{// 2.3, Execution policy type trait template<class T> struct is_execution_policy; template<class T> constexpr bool is_execution_policy_v = is_execution_policy<T>::value; @@ -1514,7 +1568,10 @@Feature-testing recommendations
template<class T> struct is_execution_policy { see below };-+
is_execution_policy
can be used to detect parallel execution policies for the purpose of excluding function signatures from otherwise ambiguous overload resolution participation.
is_execution_policy
+ can be used to detect parallel execution policies for the purpose of +excluding function signatures from otherwise ambiguous overload +resolution participation.
is_execution_policy<T>
shall be a UnaryTypeTrait with a BaseCharacteristic oftrue_type
ifT
is the type of a standard or implementation-defined execution policy, otherwisefalse_type
. @@ -1543,7 +1600,10 @@Feature-testing recommendations
class sequential_execution_policy{ unspecified };-The class
+sequential_execution_policy
is an execution policy type used as a unique type to disambiguate parallel algorithm overloading and require that a parallel algorithm's execution may not be parallelized.The class
sequential_execution_policy
+ is an execution policy type used as a unique type to disambiguate +parallel algorithm overloading and require that a parallel algorithm's +execution may not be parallelized.
class parallel_execution_policy{ unspecified };-
The class parallel_execution_policy
is an execution policy type used as a unique type to disambiguate parallel algorithm overloading and indicate that a parallel algorithm's execution may be parallelized.
The class parallel_execution_policy
+ is an execution policy type used as a unique type to disambiguate
+parallel algorithm overloading and indicate that a parallel algorithm's
+execution may be parallelized.
class parallel_vector_execution_policy{ unspecified };-
The class class parallel_vector_execution_policy
is an execution policy type used as a unique type to disambiguate parallel algorithm overloading and indicate that a parallel algorithm's execution may be vectorized and parallelized.
The class class parallel_vector_execution_policy
+ is an execution policy type used as a unique type to disambiguate
+parallel algorithm overloading and indicate that a parallel algorithm's
+execution may be vectorized and parallelized.
During the execution of a standard parallel algorithm, if the invocation of an element access function
- exits viaterminates with an uncaught exception, the behavior of the program is determined by the type of
+ exits via an uncaught exception, the behavior of the program is determined by the type of
execution policy used to invoke the algorithm:
sequential_execution_policy
or
- parallel_execution_policy
, the execution of the algorithm exits viaexception_list
exception_list
containing allexception_list
parallel_execution_policy
, the execution of the algorithm exits via an
+ exception. The exception shall be an exception_list
containing all uncaught exceptions thrown during
+ the invocations of element access functions, or optionally the uncaught exception if there was only one.
for_each
is unspecified. Wfor_each
is executed sequentially,
- if an invocation of the user-provided function object throws an exception, for_each
can exit via the uncaught exception, or throw an exception_list
containing the original exception.
- exception_list
object.for_each
is executed sequentially,
+ if an invocation of the user-provided function object throws an exception, for_each
can exit via the uncaught exception, or throw an exception_list
containing the original exception.
+
— end note ]
std::bad_alloc
, all exceptions thrown during the execution of
- the algorithm are communicated to the caller. It is unspecified whether an algorithm implementation will "forge ahead" after
+ exits via std::bad_alloc
, all exceptions
+thrown during the execution of
+ the algorithm are communicated to the caller. It is
+unspecified whether an algorithm implementation will "forge ahead" after
+
encountering and capturing a user exception.
— end note ]
std::bad_alloc
exception even if one or more
- user-provided function objects have exited viastd::bad_alloc
+ exception even if one or more
+ user-provided function objects have exited via an
+exception. For example, this can happen when an algorithm fails to
+allocate memory while
creating or adding elements to the exception_list
object.
— end note ]
@@ -1837,14 +1906,13 @@ <experimental/exception_list>
synopsis<experimental/exception_list>
synopsis-namespace std { +namespace std { namespace experimental { namespace parallel { -inline namespace v1 { +inline namespace v2v1{ class exception_list : public exception { @@ -2403,14 +2471,14 @@Feature-testing recommendations
- 4.3.1 +Header
[parallel.alg.ops.synopsis]<experimental/algorithm>
synopsis4.3.1 Header
[parallel.alg.ops.synopsis]<experimental/algorithm>
synopsisnamespace std { namespace experimental { namespace parallel { -inline namespace v1 { +inline namespace v2v1{ template<class ExecutionPolicy, class InputIterator, class Function> void for_each(ExecutionPolicy&& exec, @@ -2629,14 +2697,14 @@Feature-testing recommendations
- + +4.4.1 +Header
[parallel.alg.numeric.synopsis]<experimental/numeric>
synopsis4.4.1 Header
[parallel.alg.numeric.synopsis]<experimental/numeric>
synopsisnamespace std { namespace experimental { namespace parallel { -inline namespace v1 { +inline namespace v2v1{ template<class InputIterator> typename iterator_traits<InputIterator>::value_type reduce(InputIterator first, InputIterator last); @@ -3275,6 +3343,469 @@Feature-testing recommendations
+ + + + + + diff --git a/parallelism-ts.pdf b/parallelism-ts.pdf deleted file mode 100644 index afabf1739b3dad23ea375a3702291977f9f01be8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212423 zcmce+ +5 + + + +Task Block
[parallel.task_block]+ + + + ++ +5.1 + + + +Header
[parallel.task_block.synopsis]<experimental/task_block>
synopsisnamespace std { +namespace experimental { +namespace parallel { +inline namespace v2 { + class task_cancelled_exception; + + class task_block; + + template<class F> + void define_task_block(F&& f); + + template<class f> + void define_task_block_restore_thread(F&& f); +} +} +} +} ++ ++ + + + ++ +5.2 + + +Class
[parallel.task_block.task_cancelled_exception]task_cancelled_exception
namespace std { +namespace experimental { +namespace parallel +inline namespace v2 { + + class task_cancelled_exception : public exception + { + public: + task_cancelled_exception() noexcept; + virtual const char* what() const noexcept; + }; +} +} +} +} ++ ++ The class
+ +task_cancelled_exception
defines the type of objects thrown by +task_block::run
ortask_block::wait
if they detect than an + exception is pending within the current parallel block. See5.5 , below. ++ + + + ++ +5.2.1 + + + +[parallel.task_block.task_cancelled_exception.what]
task_cancelled_exception
member functionwhat
+ + + ++ +
virtual const char* what() const noexcept + + + +
++ + + +- Returns:
- + An implementation-defined NTBS. +
++ + + + ++ +5.3 + + +Class
[parallel.task_block.class]task_block
namespace std { +namespace experimental { +namespace parallel { +inline namespace v2 { + + class task_block + { + private: + ~task_block(); + + public: + task_block(const task_block&) = delete; + task_block& operator=(const task_block&) = delete; + void operator&() const = delete; + + template<class F> + void run(F&& f); + + void wait(); + }; +} +} +} +} ++ ++ The class
+ +task_block
defines an interface for forking and joining parallel tasks. Thedefine_task_block
anddefine_task_block_restore_thread
function templates create an object of typetask_block
and pass a reference to that object to a user-provided function object. ++ An object of class
+ +task_block
cannot be constructed, + destroyed, copied, or moved except by the implementation of the task +block library. Taking the address of atask_block
object viaoperator&
is ill-formed. Obtaining its address by any other means (includingaddressof
) results in a pointer with an unspecified value; dereferencing such a pointer results in undefined behavior. ++ A
+ +task_block
is active if it was created by the nearest enclosing task block, where “task block” refers to an + invocation ofdefine_task_block
ordefine_task_block_restore_thread
and “nearest enclosing” means the most + recent invocation that has not yet completed. Code designated for execution in another thread by means other + than the facilities in this section (e.g., usingthread
orasync
) are not enclosed in the task block and a +task_block
passed to (or captured by) such code is not active within that code. Performing any operation on a +task_block
that is not active results in undefined behavior. ++ When the argument to
+ +task_block::run
is called, notask_block
is active, not even thetask_block
on whichrun
was called. + (The function object should not, therefore, capture atask_block
from the surrounding block.) ++ + [ Example: + + + +define_task_block([&](auto& tb) { + tb.run([&]{ + tb.run([] { f(); }); // Error: tb is not active within run + define_task_block([&](auto& tb2) { // Define new task block + tb2.run(f); + ... + }); + }); + ... +}); ++ + — end example ] +[ Note: + + Implementations are encouraged to diagnose the above error at translation time. + + — end note ] + + ++ + + + ++ +5.3.1 + + + + +[parallel.task_block.class.run]
task_block
member function templaterun
+ + + ++ +
template<class F> void run(F&& f); + + + +
++ + + +- Requires:
- +
+F
shall beMoveConstructible
.DECAY_COPY(std::forward<F>(f))()
shall be a valid expression. ++ + + +- Preconditions:
- +
+*this
shall be the activetask_block
. ++ + + +- Effects:
- + Evaluates
+DECAY_COPY(std::forward<F>(f))()
, whereDECAY_COPY(std::forward<F>(f))
+ is evaluated synchronously within the current thread. The call to the resulting copy of the function object is + permitted to run on an unspecified thread created by the implementation in an unordered fashion relative to + the sequence of operations following the call torun(f)
(the continuation), or indeterminately sequenced + within the same thread as the continuation. The call torun
synchronizes with the call to the function + object. The completion of the call to the function object synchronizes with the next invocation ofwait
on + the sametask_block
or completion of the nearest enclosing task block (i.e., thedefine_task_block
or +define_task_block_restore_thread
that created thistask_block
). ++ + + +- Throws:
- +
+task_cancelled_exception
, as described in5.5 . ++ + + +- Remarks:
- + The
+run
function may return on a thread other than the one on which it was called; in such cases, + completion of the call torun
synchronizes with the continuation. + +[ Note: + The return from +run
is ordered similarly to an ordinary function call in a single thread. + — end note ] ++ + + + +- Remarks:
- + The invocation of the user-supplied function object
+f
may be immediate or may be delayed until + compute resources are available.run
might or might not return before the invocation off
completes. ++ + + + ++ +5.3.2 + + + + +[parallel.task_block.class.wait]
task_block
member functionwait
+ + + ++ +
void wait(); + + + +
++ + + +- Preconditions:
- +
*this
shall be the activetask_block
.+ + + +- Effects:
- + Blocks until the tasks spawned using this
+task_block
have completed. ++ + + +- Throws:
- +
+task_cancelled_exception
, as described in5.5 . ++ + + +- Postconditions:
- + All tasks spawned by the nearest enclosing task block have completed. +
++ + + +- Remarks:
- + The
+wait
function may return on a thread other than the one on which it was called; in such cases, completion of the call towait
synchronizes with subsequent operations. + +[ Note: + The return from wait is ordered similarly to an ordinary function call in a single thread. + — end note ] + + ++ + [ Example: + +define_task_block([&](auto& tb) { + tb.run([&]{ process(a, w, x); }); // Process a[w] through a[x] + if (y < x) tb.wait(); // Wait if overlap between [w,x) and [y,z) + process(a, y, z); // Process a[y] through a[z] +}); ++ + — end example ] ++ + + + ++ +5.4 + + + +Function template
[parallel.task_block.define_task_block]define_task_block
+ + + ++ +
template<class F> +void define_task_block(F&& f); + template<class F> +void define_task_block_restore_thread(F&& f); + + + + + + +
++ + + +- Requires:
- + Given an lvalue
+tb
of typetask_block
, the expressionf(tb)
shall be well-formed ++ + + +- Effects:
- + Constructs a
+task_block
tb
and callsf(tb)
. ++ + + +- Throws:
- +
+exception_list
, as specified in5.5 . ++ + + +- Postconditions:
- + All tasks spawned from
+f
have finished execution. ++ + + +- Remarks:
- + The
+define_task_block
function may return on a thread other than the one on which it was called + unless there are no task blocks active on entry todefine_task_block
(see5.3 ), in which + case the function returns on the original thread. Whendefine_task_block
returns on a different thread, + it synchronizes with operations following the call.[ Note: + The return from define_task_block is ordered + similarly to an ordinary function call in a single thread. + — end note ] + Thedefine_task_block_restore_thread
+ function always returns on the same thread as the one on which it was called. ++ + + +- Notes:
- + It is expected (but not mandated) that
+f
will (directly or indirectly) calltb.run(function-object)
. ++ + + + ++ +5.5 + + + +Exception Handling
[parallel.task_block.exceptions]+ Every
+ +task_block
has an associated exception list. When the task block starts, its associated exception list is empty. ++ When an exception is thrown from the user-provided function object passed to
+ +define_task_block
or +define_task_block_restore_thread
, it is added to the exception list for that task block. Similarly, when + an exception is thrown from the user-provided function object passed intotask_block::run
, the exception + object is added to the exception list associated with the nearest enclosing task block. In both cases, an + implementation may discard any pending tasks that have not yet been invoked. Tasks that are already in + progress are not interrupted except at a call totask_block::run
ortask_block::wait
as described below. ++ If the implementation is able to detect that an exception has been thrown by another task within + the same nearest enclosing task block, then
+ +task_block::run
ortask_block::wait
may throw +task_canceled_exception
; these instances oftask_canceled_exception
are not added to the exception + list of the corresponding task block. ++ When a task block finishes with a non-empty exception list, the exceptions are aggregated into an
+ +exception_list
object, which is then thrown from the task block. ++ The order of the exceptions in the
+ +exception_list
object is unspecified. +`>W}86p(QYN!z9 z_dMs&%jng+UZ3yn_xj`2IZx+Y*Zq1t9@pc#KOWcPy3PqLc||@jKaB9i^y{8}LP9V| z5aed XI)nnJe7v0 !n;~<^mayqIOW`2y^*foUR@n^G za|iWc@0cO{5Rfw3q(I_Ge|My(BOqm9z6&7zkv2XkVOzMnIXl_}NP@fqT;1Hg9Cxe# z-+@2`F|!O~_h^he>PLTR_sCHX_M?J=6m|fBFaSW_C~xHLY31m>OFw%MpvSwTemEH8 zMlcArXDE8+!30qv+l2uAU_SyFNEhkh0|>*>${F-i8rxw02mutn8^JbG3<8vs-GgAa z*Tr}>2tOPII7=&MXXJnEA0oWV_h1IStpga^iSL%cL9Yto7y8*hj{(xg+s*U8i2;n* zB?cIJ )SKfy*;88z9aT+Z;bIzXqf}v3hkdTLLn5u_$SD2=^R|0 zApD4fvlJtnT~gWch8TV9l?q%K5Ymo|#)xlMm*{Wqlgj=M9rvumd%QK;>FmgVhg4v^ z^=@wfMeFIOw?=C_ZA;ywn{6E)v{d*(3J2pyaYP-!pF4UY zQ45?G2+)y_7t)i@-P6t2(H3b7vh#7ZL8}fJ7cjebVTWx)+SV7^zwGD>E&>c}$ECp0 z_OeS~=m&e{gn|MADcISeJcyg!{<#g +H#d!B2*)v>-5MU@fvfoh>dcB9E?Ra;W z2iF=HKgxsrl8gPchF{HMOxrsY6^x!|I|>j&0LJ>$I?>Z-H;98y3 #vpKib4NNm2CIEZLa7JcT@s}0=@iH3EH#l zmKN&4erdq~mFOUCeQb6GxbQt)K+t2~=>mcxSvz(J-}aMeu?V3*x2r$&gMcPQ&;UGOvD_1W&Aj$_;?%zrp-Qv!OVJObBBWcVacX~#z61#gwJvi92(5{|= zb@NYTj&6Ae!Ja7~v~3g^UGHCvP=4|k2!wYbaQrjrqg(zpg8jor+slDrgZ|6Z-#d+j zfVVr6-| fZ53g>4{R46bnAQZ7`l0$L1jPWJ+17#d4Xh%jf1PB4G@m%x+85I?SPkP!UC8r zNREdGn6p5V%?p(u0iho41donhF8?@kOtx-kwb(O+9b?9z-pOd7QSUfm4C>u!3v_!s zsL|=doy6b{qu!Akx*^P)-J{-RljyIblZ=D{YL2#EAX5xJjJaW!T8#h4m;zeQAhdKr z+i}G(ut-O))KpM*y2@D^IU6EEUg#I^^bv3T` z3sTq38P?f6FMH~{8SfrCe)K+LK8?J)FICkSp%|Xl+DBwFTa$LWPKNJ7I1{J>X1lvq zR?L%ULfPVNuqo#*X@_JumHFL1LVm^F|Bi`$d3Dk4)tZ&kvlAs1L0fqFInLThKmDf& zIfd(;M3Ne7YEQvemAB*-REndyOHL;1=;X_TFNdezoa}N1H`Y%pT{HZCc2FRDIM~_o zB@^wZnui*;@I1c}>IkG6u~0k(O9_K9?CID$Ic3MZ3ECNNoZBu4Y18){BR6lSRc!tc zJim5ib%?1@cjCozV`%vbtSkM&-M5j;Phg4}qss!JL{UeksOg^MlEb8CvKJXATOVam z6SPMse!bt|Bi8R?xjZo1818f-K2G82iOU`}6TaC7d}qbpjuy7efsYmzUED}ZYomzA zow=gcrWW qLkM0WL=j6)BaW~Tp91T1YG2;{rC?ntje0)G{~m(nH*+D zU-dG6XY>DX{xp@= ~q{^QNpCCq% znGVXG2`2L;De$NCjGzV9-2+( zX00p}Hz|v&e3_G(#XL0bQbH%|G4IgL!$+3*Sy4IiZPo8&%h7g%G98$R(9aY)%HsA+ zD%7m_CwGpqEDfZsqm`_iKgbldstW-&FDwE<+b1U34nkWc;QMrtUT!{~s01>Q(^mvi z@#ufSAR+XG0OlzKgi4j76H-8;+Ra863FPDjfPDdwfF6*9HwO$>K*rV84G5b|QENOf zZ-g b1Cfp?3=ZQ*h(LuwLc%~!MF@!PVF)0>2?oLfAq0XS3Ka$e z*k#>3f$TPBL@4*J>tl^h`w6H!x}E_*ppavBC1lXS8t@5_fWD3jA?kl1P6uyqcToWW zKR-WyU^~E-&&%7E-_6rrz{%SNEZ}7Wfe857L%;&IZZ=*5?p8py(@Ov%2!;!|!eD~J z{0`nO&Rmkfe?Rqr9_62m2?hjps4>A|2!4d1AfOI7 8e9NestfNsu6 zy8`j5qZL1p5Z?zDrOs`zJ5C6#R+K0HtrHr&G3NSOh& {s=eF!6KNavGQrVw+aD^5O&hJP zt;~UI&pR)}u0X$=c{0p)akKK`+d>?6J;J9)^-9?38{9b7F6>Rx1O@o=QTy@-r# zGROPc r`RuZSeP&a& z`5pYFioUxPS*^F;$}9z!8O(6xU5{tKov4)Dm8`gVrL3uaWKxE$=))#fGnM9tJH8JL zhsbh!7`m6M`xbDXRh!rb7$6l~PbavSHU*r%L%39-O=3-&hsUoM|JC5cpg}=_YO?+{ zfiqQ_(O*nvR^AY2#o@;(OEEaNaX)Vw3VScDb7pP1oJ+L@(VzC7dwkg;UgLg8AMw&9 zm_u$mGs^&7yKE=USSYd0nYVVX8OKQB^_}gX#3h_EB3=_gB{F0?i?nb`n;=!CF%{<* z*+|wEf?sjo8eBF%QE+Cka7 -LJZuATdLPX>mkK{f{NPCPsm(gvC`431*U zo9g* * Vq!m#Jdr) sWUeHd8wOb>g|kWF0H0R zZ^1>mCAk}lN!I1Z`dAV_p6KIa=5H!CE%)hUiT|c+u4!+w^x#6mfY`eSdXe?Iij@iL zz3Bxp{OM)YHxi!+omxHiKH&7DnEpD5CM-ql8D}%%R+)NMgYn|M`>mnM&F!?cX5~iS zYPZyv@~Udv-))gQx)WPE Q2 -)~R;e zrZJJK^G8lO_&S}r@BZTcQP(C$M=81uoh8!t)>qTQvSD^(EX~Um?qbObqZ_P^HLr>n zoH TIMKO&;HG?;omkKkM*{^# zO}?d)JlmBvJ`U+GOUv?tD$E&Ps{OEw8&lDXy$a#{wO`ZDR(uy@`oiXN>b!G@m}CTA z9mTPl%w8A4%2&^{B1aakLxt5y^I}e4XLdjB+Hzmmp&^YfBS1hffg0-Rsh0I4Yj#ZU z`ptxx2g$DN_(k`|%ZsS01)sjTnE=UZSWhp0FteOsaGm3A+z4U>ktajsxJo=F&v!|% z@^r1S8cF_p&tsLdcoactN7uG+@nh<+G$%p5C1*xLsUo6{waGIRR8Iy}bAG<@w)kX~ z2Afd&Y<2vJ8r?}#<4>BFZwH&4jb*^Ck~grB$SmjA;vd%BK(&`f%CYntWd1HR2gI zPb*?);N~VmI%Wa Y2C469 zFC{hug8f#~1#jcMxh+a!MsbUexuDGVyUx3laJQ#xv}JdBiGRg5PzwTTjR3<$gnuq` zsI`30D)-;$#x|Y!e@izoG+h`&(}giK9f3)AATTr?fuZTBR2M)@5E!zLz>s|eCSE}8 zK%xGIX$6(90^W&WS`optB7$i}1k;KLrWMqF5$cneR#0hb)VuAtV<+&yGy@jIv;#&Z z&Vf&X1u-pwQ5&J?_n5Z8f|$m@g4+Rz;C2KexZU2*NM^geomd7F%%Hf~PwI$jVUOPS zFfIhZNibAohn&C#x5 s1CCPkZX9Uq{1Y5t_ ;L@fbTa` zxX|C3=^h*q!F|&f?V|q#2W-EY!hw+TZ_E_qXt(tOM`eEYOqbt#(|_~=-EXFF*x#Ay z9vo0qf_@JU)Sv%E9^eCZ3jI4f-Gc*DEV6sr{-HaC1CjGy_W_9Zzv~54EwT#-dYS$M zdB8*t*s0*(*(qiL-nI{6)Ox#HFKC|d8yqkp%yJ7u?6*^x$luxN9vqPUZVXLS{sf2c zemg}aT>fUh?5))}D3IU#)1MOt2H$U}FyX&5)V)C9sJzx5%^cvbzvMwM*nUHW!T-)s z_m?f~o4IJV_#4ga5Fr?Jzoo(e RyRpibi(N z-QWAvoh28BlFS|k0)zaesiJK0pDIWcMc-o~f9O-8A_q(r{FkP>7svt4{12zP<3yl{ z{k94f`Ab{f0|bsPvDu{=Fp#7C?K1NdiST}7g(CjaSob19?IrEj4JL5 ZOW`Ba@KuiVw%b03! z!N@OU@_XkB{;8b @OMsa4}BLx@#MXBg3{h^WbzZqfw&6#mvPlznLtqtWG@mF z(%&HYX(tCFE9hTFR@=Lj+jas)Z+h>slixeopW1;Oh^+u${dd~g!{RYjEPIgr4;Q 6w!x!Fzsc50CK+5Y#&eHOUmVP?asu85@w70jZ ^_ro=q$qA1-2?{} zU9N$4Rn6}F8%>x<1{GmM*F>r=wnGKu#%_J1)o@b+~YIB;tbS9 YCq?^eUPYAo z1R1U}jllT0RwJD@y^ uOQ@^X5Z$9>x2;3KkX^Px*39&$ynctcY!6@iH;fV&9`{SG%Q{+Vfp-YWyDJpN(68 zbZKMp(;=6vH|J>Ex+iGfOc6ZbsZG^azgcvnIp@%Tx*2(Wp$~agA@^3YgkGuFgpj!s z {3z}BLCuaa V^k$wT~kpb{4YdQPk+zth!i?=@(M#7+~C_&olhAj zO_izI)~6||@O8)SbI*+%ft%i(8}>fZS>s@mYg&uf_14FMoo~KXmr+l*N)YdGCOy zN>ca(q`;E(Qtl|E<2uRILyvwj*F5Dcl8M3Ug&~vMjZzho6pq0mZLQU*agI{GExO%} z9oLSC>sxaU)B0&9ORs1ze0T}dAKZ*Ja(d42vJ#|_NcQ3o#d)N8()giRU*0d5ptuIU z2tBB>y?ajqXZ7Jc)&-e<6-PfDP+q#he01Nm?Mx+4hql}4%m|N@ZyE0PWt=NM+MPG) zIGh+TbKkX9{2MM4q9g)a;wg7(Q@^$IkK3o85aVR~L7au2B;wc!wG#wf+n6SBf67M5 zynOE5_o?q<&H6W@n6U#Au^iP7EjRZjc}OsusUjC|26Q;EDh5;s_6j#)Gns-e9zHLY zO{R*MD-OMOJNC*wHjC1($8jBt3_3O%=J#y}Llo-BQ+kgx>QyuLHyAxq{Sd~$@>$mY zE!)u3+B_l6MJ1iI+=11hlIzW&G{H{_VkbF#d2b)r#ga?m$5O*iAEt0^NLgIeVi)X7 z*Ig5x7bq3t) Qs>sir6TGX@%~KO(a(x19}y`!MqMvZ*R^P%v3!eeHN>7%T8->{QVdD M53aP4&*VTT4T%iB}tuD~7P5K@zQSkyGEi-;~!sweG`ynDAr*toPeD0~xpUmM`|# zRe2UI>J$ug`FJgOO@?|>C}}M#O%x6L Qg$Qx`@e6Ce$>dQ0H z#(XbgE5={o@L5&=MCI7`lL6R0Qv&T%-JcivHl7n@ObZ%&IUY?bq8-wuhF!UPq5b)o z#o0s3N80^CrOro~( gmVc zDXmJkY$+S7M`@Qui0}8m>C(D&gkJdvMQQcq3zozunO}561_ByD?45l&U(AsH{I2;_ zA>XBMh*W)5&^;G3pu)lngT 1y<;^46+&@nnFHTmu^xUaJ1fKrWg~Rh`9& z bF`JXk6m!acLX=;|rju6)f(T!rq?xlmj zag;Ug&{O{&^ga}?q%;NjSVGn;@?#XSbsWu;&xnGaVGXLO4+Ja&vJtc4$M6qLoqZgU z@c!XvSytUi#-p=&Db9+=uF@*{KOO%#%{g1Gt<_g~g`t#iph~;{p@E a}68_r5Rcu3qsCd;5~
~$Z-o0H6}QAU5JK~Z z8ucCN!TOKVzf;)S^@OzP8Gf{TglBW>%qrFGi1CiVI+-XBC(^t#lo_mfbgu_)PVos) z-IsePF_Fm>@wIodx3*3;%|VX2+_}!b= %6C0D7WNwAocOyjAbn`CyQc~Z%J0k6& z>+z;j{Au3V5V*C7N5WJFckQhfX4;o9^+4p=Zv=Ta_?2;n%J5i}jV=hQTQwYJzL#tl zLYCVAyDy6y8d4&w6XWNsXx#Bwy*)sAE6Gk&G+38qn)ioPjv7e_t)E5Pv9|9IUM>f2 zUcc|Pba%xq33j|)cBVRii cF+UH5dFRE@%PavP};^10|Tgp z5Wou&pkn=>eNPeKY^5Mv_ zfHMwo1nj>7*`H(sqlNbyAV5wJAp+2U7y^~<+YJObuFnqv|3@GPc7nlZ?fnJ_(3=nx z*bsvP=}rh_HxS_HK0jFaKLR T-vB}N1_pA3U
3TC&a)7-$a;$Qmfd)oq$dqEqTsnOi-gm%W-akQfR96*&WL`T zB;j}-K?=L7a{vBg8z i+Ty+sm-Z^(<#tJh04CokAqBFCBe^UXfT4(8)4-GtXlztR_6ZoYCX!XPc$aG3ZV zN4()!^x>cggWCed2I=P7T@1dlhjp`Ta%?9p@HTI(g$=TuJN}V5k+mI?lEGfv6J0U7 zgo8zxC;jm3+13hqg3)x+1@3OLT+a=gYkH(EX4U+CVpTGJue2(0iuGgElOHAUjNUSk zHhcJGIj%U7c${%ubi8?(;mqqHV;wBnK E6zEnT7CSS;ig{YUj?0M xkdJ3}u`?-VU#9a1ewZldA%SL+}0kS4{nC&g>nKUSW#MN822 z*EVnXzvng_FmT2un)d{~yUU@~{i^H)^eh3Pg-4Ufm-Ae;*rWP)GRcn;J^6f>d)ji9 z|2wsV44>_%fNvkU{LX|_v-lGJxLWQVx@c5lZk)NfTyAQ30@o|?=m)-yq2esR>vCj{ z*v8X+*e4X~PhJ$yh$ %&lA2TZzY)>&X$~ou34L7^XzdoC=wasESe> z=V@3wJ}Z(z#n{O!xBi^Q2NL>YEKs0LV@|_M;zW`7snbaxc=DWd+$2=%n~=$j`P8_= zZ8=BM`!w2eyop4L#l+&JylU&bbG^6HUs^52b(+1-Heo_Y=U%v1;Sg(0NQCt7;;5Y3 z 4k%X0(d_~dgG+6!ZSO=xRv}S3tofOtOC5aYy4|UT!WpAs_si! z-0?nk9j7319xR$Ge1`uzJ#(P2^ccdgC2QbzBbGT`%kvcJmzH+)A$C@+S&P#g28fsQ za&bQ9{ylZVpPJ8VRfpDqk}t2W(IvB7z8> a$SwxmY>M%_^`dDd#dgzRiZ_nk@HCg2(tBvI|m?SAr)=k9lLQ;(K0!Iw!GT&HwbS z3*6^6jEL|!tZ&g5G9>zx?4Eg13J0fX!7U=n`-N(q&uB )mF!iIS@VfA#p~W>JW~DS4B#s?wcl_*CxqPf`OnbjK6@P4h~S0`Fb=zS($S=`Bz*E&RTF)`ZbJ9J!FBeTfoTx`^t z_B)*FGWD71t7nOM?uu7}ax~b5(;pRE!NM*dXMK`uiT6W*#TCzv!;~y3Y6H#`8y)xK ziU&CK)~PW`O0yQLu(9T|?6R@i&Dw%bExcsYSHfy>!;wku?%Hu|Z%4uk#B>Ca6;{iw zSH~1+B`;frUCi9N-xWRI&*Qt{+-E&$^TV>+l+p9TleYui$F#;yXxn*CT$&fU8F0iX z3`Sb^Y0AY7yVK#*Tq;ASQnS}YUhRslOlD=%beCp#8d%&mbsnpjOI15W`v;+uQYKUb z#OOayHcBRr{q%%JmQ3@J!aAihpeRlk?-gn0+FI5IKYYY%`iYt>(aJ>T )ObCgE^IAyfEEV6PIrGc3mKx&V)%K?Cdocgx`k 17QgO&1NnazPeexV;b)WKaquZs4I)#f^ z9``=N3*(inNTEkK*?zF_;XZV&JaggBLpm`}VTbPx!=l`scxsx6Q10l;!3U?>+*!jt zk89r7YjJ3EW-ni>Rl(n4xXZ>?rpw7|iF+^MO4xay_G~`5c{s8=4HVf4rEtzSm$pxI zho@+%*#>J2t3Ruk6cjlZWLcJN@ht+o?ppoKqK`w?XWc3nYRfQ<6Rd2Os{Xm+<%O?) zOqywp-g7g KSq8Q?J z+N}&fVdm5IwKejRYj4FqmCz~#HWs)=^$IXY#I8x5ev+W~tH1%hMx)kkFhWG+XW(#v zN&mON0h0s&|0i(RK9;t7D+c}O-#Hcx0_F!O76N?$M^G3zF#D72p=xLZp%BEMlD$1U zb_WXX05bVcuKy=FLVxFflB0V@W3FQe6gm0;K1>*HsBK1lc=2)5QKLo40XK#FT1XCU z!}z*{J{L(xshslzavfz{;l3Az@SLO5MZD}_(~NeN#=T+FR~MyTe0V;=mz8zdHjl%R zgOZQ FE}Jx0U=dee1?i>tQ`+i}>!jCxPWghpxZm)4Aqu&lqa< z;gRx+e13HkgXPuWkpbK|r1mI(n1n*AS|ms%Up|3=pDfHc^Ax4#va`#5?*xA=-zKV~ zIz5y{vmEc8%9MzCX_)A;Ub1)Dp0#{>S<(Q4EBScVk+m!-cJ|8gCE-=1QWW?3Mc$Fo zVu#LCLjvARk{cU!Cj-vlXvIPV+usoDt7|P)d^nXM)z=NV_pEIGw(kSAwla?HoSp}7 zRlL+b-RQEqT+W89=Zmge_2yg0PhncL@v;0w{?WQF1i32x;of?WYsedxSgVNA0H5Is z m#jrVtpg8HV*otJPLE 4o{fArk>)u;LF})fouk6+dWQX z^ YFY~(ng3Y7RB2Gn{7X!F2)ZB5f8$+wG1W32kInzDe zC+4PYY`!xrsM%J0HE6bP7Z;d;K1sG*3s-pEv1oh`PkpVh+Qw?K@yBH+6^WuDBettv zxt%@wYN{)XKfZC_!Hc~wqUUCCkwxs4zM9*K@JmxfOf$>R&n1gd3A{P(Ej8py9@Il; zoYnlK)>DMwXteCeJK~27rRTv^89r~gj }uKEO?~2cd?taG)ZXJaJ&gpvi>FBFo*#a#?x>|fzrdcZAoh-YYA(=$ zQ4r+o2|7=NA4#XzHgJvuYxB-$=*bU{%dwL=x<<5^*~+hWe%@RpBAGS&;ry+A658tl zfkSU|T~6l1Q_&-p#m+V%l+0I P*#`{se;WhU$o>Ku+Yo~z)VG^Uuoqjb7el?_{4w T|R%%ln`s zDRtusQXQvUCL{xVYaguZxbn4EjrAGN4VqabYrcj_J79Y}G*r=wNy~sFoTQ%-Wp|C< zU`Qy8dOi~}5ztt!5U}t#E&942sCTR;jR%yC49y _v{*X+*x zK-Z?G@SAsXI2x(e5rP+UTIxRcUMP0(H6OVp3J-HYz(2I*Sy_Lo?XG%2LeygUG&TLB z&SUn}O`IZOt%?VH!DD(Uk;m79dSAG;c+w|3IG5X(GkQfSYs?-uyit}rAkJ5udc`G0 zJrBodU?U487IN}QK;0ZRM=aY5idG_|K#GJcv5!KDz4B{1t1ia)ms;mHUMu4AAk?59 z4RtCfnPN`ghTklo)w8FniXOIQlJNNAa{6ltYuLN%8$?zt4{6Ia#reP_&@BnCPnXGX zUa0W$)e&bDJJB0TC1CR!h)_LvN`&nttQPK8CF60X(6LaZMAt(8F;}(K)5f?p@*sq1 zb#`-DI{V#H5w2SVnYSL#zMg%Y-J)S_e`T?pRReMLz5Q0A-}|kavsDeOllg7JWrf^* z*Zfuy53IdMzDAEnY zMSh)K1D?WxD cuvF*9j5`9j6Pl@6G z!yMb5GK+&bwmsJt{sIUD2Bb-V(<}e?9NS(X2Xbs^Vf~I|2=asBK>iDit~}YD+5)Zy z{Hq+>9v}zG$1&RacOXD{8BmuC+{Oc>SosA3as#{ovVMZVi6SsivIK>Kp?}JDFlMq- z?Xkap9K8ENi5<4HbNS={+Qm2OMx}xpHn`jipc?d>l+rng^dcU1o{nNvl_~0^S8zKQ zm9u1ZG;aydzkU<*ErinL0teDW#q*M_li&S~rE|4Jr@MNtC?jT)9Jr}CuAEqz8HpB7 z5WJza$+l8Z{_5@FdViJKt()f0diZDUBP~doowu}$p3xyoPq_3LFpP@MT|Rp>l~v2; zsMDyt(_Bxx*s9}P6i3g{ %4=7Q8zeVB}(tsR8sojCav^=?QPcGx42G+M5VTtj%pZdU|;U1lA)yKlRsMe zmWoAJNP?+MYn{b5khn~XB(A=JuS}yM6+0R7nu#rJUPa4+ndAy5lipQZIZCczb=e!O z?DC?lV7#g%7{yC$;Ts%^?$uY*DV|b}H+?@B#98;a cKJRNvi|Q9eo&m$@O{rgx%?p}}xU{uT3+ zP_`QOHtM#tB;S*%cdng$!uaq}k~(i
U}ybKe0 zyh~?C 5WLym2z*HTfuNL1SEAU?xF*qL(6Jx&54e@-dxe>n|da z)y^wmi=_^8jgDi6MV-znmRV-Zb#3{0uFlXc!%xmwZl_M@^ Fq4UQk@x~EE9 z^_BCfRY~IH$=u?r%-U5?hQBiComQOZ;JId8$*9WTN=q~mSfN$9ZddDjY|+!@%VwFk zVL(V3^G&eVWIY@(**XNQRqFNuDy$2#FRm&nbvyb{}~tdnb^-UxLcxO}kc@k-kWc z=fcE>7M9P|VtRr)e>T>OjVUo3@LrkA4%bK1H5VUmG7!8ln9(>L^yrbg;rPQ~%?JAD z5=+MOHM%lArRkY6u=>nnBSr~s#2TKSW9A{xNV%Jl+SIa<+8A+HanV$ov-j! J z*t*;+%`ogr>w3g88BUR+C2wC+T8IH##HOM`Ov`-EGaui?yXs?Qcuxzs$FR~0Sw=jK z69X5HJ`8(fVPZQf$*7;9UU4VWud7OfoSDU;EB0G#=nEQr{_u4M3v<0pM3sCSOyxe7 zrm4Bps-v?P0m&DB-|<<>%j&hyebS;IMLAW(OU)|Mx^TXnRA&iz-{mhiLgRA6Y=(a^ zz^}6#?5E^QeW=;A=!-N9*%D`{^-0ZS2A(%hLZ3!njTlHTV(!q=`-sS9Sh$z6X46PV1^6frdJ%yLPjY&hYHG?9VTA7 zfE#Eti87JrMrV@6$T!aQ*YvODk&3^xt!l7X*Uw1oYE+-0A4RkdwN9}VU$$fD`Cxg) zJ|knIGbGkNzAdQ=o2gUl>*WWsXSb@b!7Zh?JemUD*QpREy6am%WA^e1vwE4>_sN^J z1#$60#;11TXd0Uc3HpcRLd*6%uB)x$8}}D836I54UM=MjxVGM$c0;oyF*lro<2&0e zYiWo?jES%-Sh1*A>wUM5QjzkTAIUmAmuF8^$GVbUZE%`TZOsbrA1C?JTJIF~e!A 41s#q|*edN${|Bt=K9iTaP0A1jr(^CO0CcuVo)yA!>;^pf4= z7){6REv1Qujn_}cIt}0IK4d$80&4cY;H=O1z&O*p;;=1zEfvz3U-2>YYJyH$z~TR# z-aSxw`QP~1&K*DhcRu!4Bn)!{H*i%Css;`?HjBQ98uc$Gw*Uri48c6#CTXZ^rBR>5 z+-JLoq@kPo112C0Py(PI6eZYZ0>CX={4gQdAKXBK*$Cak1P+|w!i?n)fCvcz+irV+ z2nh@QcOVCjaAAb`CqN(~`+=Z#jsL4e4xHh_X!8$%z(s&d5cf(1V2ghP1Y;imTJ(uF zr+){6BJxlOutyCCy4|}+4csUFS9{cZY~;XcLttAKu;bqWf%C&50Lg~JVElpzpnmsf zk`B058c5O!i~J|r`U_)4N$ht(0JaVRl7ztiJimy@?rb3hIAJCN|MP6&9*G<@);+gy z|01-30TO`$$5z0?P<|0Ga9sYUM8Lp_6a;Xu(0`K1L1RVVQN1mZ9U_mpG5dd}ExV0I zT#pG;qtcc|q*}c%Q$R;RBapZhJcsW`sh`L*jHn`GzzOANb)-(7A80XV_msa%!^TO7 z)93FkoF4Rk>O_vPeXMR19h)qdQ|izgI}cwEJ_7rs@Kxc?@)dwPJo6hHE@|t|DIe(` zf$30%I<@F&iEY)_3CuT^d%i@>^HRmUyd+Uf>?2$LY-0KT1iPoX-Z-sW )iw$Izwe;8nh^y@RgyjkBaTP%ngl^&r2)o zlj08{{Mro R#7c5*CiE-=@H^{ct 3( ?!h+gf=56|wSABt{0?B!*cuwJA5savM}r6XKR@3F$V 2<{(fr`@@{dy08`=gFj7d_Dv6V%f1Sk+U*c* dyYOD>SI)5zPKsN9G0JwQOw6)N&VJwvkQ?H)~K$* z =s;yvXQPm?FHynoM1|bbHIZX>e<5j zSN84SrAND+Y~Si6R`D3w`f+5dlYDR(_8%`dznDsEcnPuTIq3gIea;!`S9*(yGfTL& zVBTh8uDI#sv3hR`?x;C-^@@fzyDG)(ucyru1PV!CM!q~gm4Tnob|O9YUf)ug8%~nB z-i)L0xvQO~4>nUfa?G_|kG`$WhFW(}MR03<$}RBsT*@=T<9_-hF2g$B(ShE7hG6Br zX&~ER!eWC&)^jc=iBIwQjY%_t_qCk$tYJ5nnEYeU@{*OmntxrxJ}J=m?1I9YpRwVp zgn&JEYoUBS^epVdLu~z2{hJ@}W`uW7b&floOTj^?tDGLYd6(YglvE^@Th*6qKd|f7 zAG0@UY6*lfAsAfkv~5F)oZmKI3CD}Alv8>U#qbWS^f{^j##idk-30FU5KGs;JMuxi z&zi`M-WJV!5)u21rg))gAT8D)NRm L?eyDQhKy8W11Fw+LK%DZT!rB2zo}TIX}4 z8t7BnF3Ijks~7IO(vx{dSydpXlTuk KmW#&Cii^i;0J<2t&TF^b@ z%swLdVSS}qLrtYxx;uuCf9k>aZfbVegQou67%1Zry02Y&OO8$pwKwo}++~poSrGFW zDDjt53SXoilDs{0)n*y8j(lfU(z+TX_kx3j&9%HfydhK3@`^Hv_^@ecz e%Yh z5&e%7IpW+-FWHC)9ugjA+^8_;ie2ye0*-8T7i_b1OpwH*?tAx!^mEc9|4G_#vwKl& zl|1Z&Ln_u3^i<#DA>+@_>Cy#z^%KvVzd4n$73X)puF+q(mOXU?zOKn}CpFL~2>%*> zTGE#}Pm0J4m=8|k+=kfD`9tI$grUFU=I8|iwP*lYFUZdg#RF^Wf8*vmznbuW=jQ)4 zSBkluAE4daG#&G+0l<4SP2WSq(I5Q{p#W|NKnMd{q(Z=9+r1PEMZ^E54Df$&Jv7#T z2Lc8I=Sc;D8ciW6kQo#~#RI6*PpC3RA>gPu47f)5PYJ~yAO}wDgZKQb#X)BC69^o* z2yrhEI3T0H0kZd`{J}F%Xm$O&NKi-hg@J?nz|StBSf?=jAC3k5b_PFK2>i!e!~aVp zsIYDu$WM-iCW!x&V 1T*=`~)KodL+O@6t5{@ujUFN%|vG =m{3i9f0y|O)($V-q*f_{g0{w!6P9t&DQnlrEaWCiuh~u)DiFC8&P`I7ShO!b zp`lzkC-ziy`I#2C)wgo*T=M4`v=@#K=g#OjRVya(=wS<3gj3$Ql=JnHD*wlFZ|~u^ zGH2^7$I|n)%}(iRTqM+Szo>cjv+!i#Y}K{XoCLDx8J{Lo!%j<+PJc@u>{(BTZxpJO z-YaD+EcJRpNy$qP#Y41Wq@aNafxo(q&EuD|TFz_4Lo_raB5+m1fU)J8M3zp5wAZ^q zUIDA#&YmQJln-}hS(WVV)<1HYXUv!wOU3iv?4!BfQfU^?!Jdb0Yx^)P_vYGiZ+sM% z;6!-F#>ukJMKyLbK8nfmWpcqxnwcZa;8(>C(y{$AI*C!5Ca)0$tF Tb`9%E^~^QW)=BH`aM?tccAQtC4G@o1SDUj8ynk$2v(?$bNU;R2$z@ zLXw%Z{`}b3t$UjIk}k`6-@ZL^B4Z5qrV1InD9BYdd`?j9>5S@O85iDcPZfgLCX-f} zZW~M@B=ogANs;vOW2R!x!V7BE>KBp3AG3)`L!KhjeJKm_MnvFBF`sN&rB8e46kI<% zT|yrLQ;aEpY!tK%TU&7t5qjL;QrbN|=$Oi{*x!3E&+Fy<{q{hU6OMPB8)20QEJ7pN z9NU(5hp2$8I%7&dUUjM#rSqIQ;4=bq#*b#447FsNN*@NvQa%gIrhlt@NU;(tIGF9* z &&tJUBXTk5_HaShVDrW~^+4s7R4ex9fyfmWU%cxh>}90#)md&9iL8xzxt? z(v-R1 Be7Y5LwwL^ui|bCXEFuE^xwalWUHcywS9FHy z|6HxJYa{ZHD*iD)5CH;XezIck3VMJx?AvWb@B`QV0!7lOy{$d>W}sHkzq&{Sb9vpr zrc2P^ezRTx2kV6}%LK5M1}vTbtQWvf`|v}A|2#{vcjY>8#|yx!4lWowKSuCBcGrqb z#$8`OrD<5zC9n28WbgY!L>Ko^opJ4WT7|>Ww+iIcW|tpaS53-f4q657w+*;^4oWRz zwgl0%uDtVhIacJrKl?&|Gg#Ot*j#Mw*BHY@)3?pf*(Ss3LQ<%tVOc9%?yN6V(h z&i1zqe(70o(&an)C3Mij?n~fs;pmdUd2Y$?fj+D6<|V>tuNofp#Fj|*DmtRgbzR6N zw2>K?Rz)y5NY#=5It{s1jJ2kU1Sg+SfTrWu>T~(&X@j#_U*#t&twZPE8#z8@_p5(v zO{JpIUdN?h;t9$dF6b_HWR5=P#@hcu(}G8WYNCCav5YfuDUa~twLZuU@B8+{r#>@( zO)DK)&Wq4k7?I?z3gpbUt}Pf1sJu>FZx!YA@!=?}HfKiTxj1!gAc1~C_pr6GfZ^JU zfw94J(1I$3%Dj)mZX0&GJw(b}qxz<;gY(r+M+fH=f}!_vdM~CA%iOh+ds}5(FD*Dl zDOf1{4C(xS*=H)EKRD;+r@ob-a{_7v1uASslxv1+tHG2f?pY6g^JM3)8X!OF+`)De z%E`_l&U#YQ>1=z_?2oNQic;9pijx6}xQn*HJaT+F$_cN>IXW^}jObKOpW@}duNicG zPp_$;VS~6>Mc7sGrKdH~Bra~P5e-#(<@;xN@?OOEzaKUpmp(dD@!;XNJl&_beKNT) zR&F`EOOV>Ya_3PeL$^dBs?FYr4?%Xk4blWLHIovj&fuTG6BbGQ8W?hG!< Xo*OZj;eYTWb|+Gm9Le_fLJFZ2qtsSRVLNuQPMx=t_+klyYHZ zc+Gv)#~i L;M{xF| K0m?35Tbk{5M@h)XipkuBjvW OcIz+@W5pKMA8o$OvUEN; z%~yo}0S+7N$veFl<|5g3`i?PS7Y1%tuf;8U6B9pR!gY-f2#q9Ic%pNYtv*lm?x6=^ zGvmB{Y)$P1PSgh2O1;fBX3ZKDAXPmw(zm^B_h<2K2|sM<$n+cyOT{}KEndc!AjwYS znOC9il^Sdm^du%MBv<0`7R!YT2{(N8Zom=M0vb=(Ba9?zPRc`ZBU?CWCpquXDTUJw zDc_8X)XNZOdy& PRLlu(^3D*DRwczuWbkB6g!)FhcAWjdx()*W9SDwz#f z (x8038{2?j@EB ziT=c7Eu#+~L|8?oh{ygI-V)~y{6LJGbi54L8%tBj(WUJgl}b8Y+i`&sJ11*smsrO1 z#EBL 9sR7V3vIr1Bw-&s{JR-0{5Y{XlL7KVdHh8mZnQA|GZ{`p z4Y@Vt=4UB4!(%jzXOCG3dr |uv~0vE51l{!S1@&1Y ePWNU!Q;m=RaY(@OWen8gndJQRR4n!y>`^}z6Z_Ze{%=`Zyyy<$s7~4s z))KpW`(RyoU6@bcj;nB}gE_?EYJ4QAux^Jh+}wLrwq-P)wjwOPuBZMHKUdmCzuZd= zO$m6LeRZSnsV7-eRPD+p>^iWV)b6!rD)t*+vHi+$lT``#?HeRPA~ucS8MTz5P?b{# zIkxtP?wpWMBEN7Z$=!%;@Ul3&!M%P+hi3_vgyn?rg8xEwr(n2(X-d>>c$YvTA7gGG z&(gCBcUg}BqMlSw2| W zMqGro;c7~YzF4CzFlCg~XXZqXTM*E9R0v5 KW@)t*?zJkSn!sGr69%6E(JW=q_BYv$7`+CxIO znUpmx%pZ4djW|`mtkO6VO~-c9RSwpGm}_@27-si4O?0>acze{ @82@pqA&8?!ZZDIaH;;Hyg U5|Rl^bxvId+XdSLp4mN^-lC92bAFkVwCF zCCf7t0}Fu=6IS(SI& _?*@Mb9l|zODmq5iYyjz(C_|qNJfH zLXx_fXHqhys@E^1G~TW -EexqDPfEE6zD z3j+?}|)5+nK@sIKawtM09??)#4KPY#1*z&iV6?`N*L=b96Q zD40<+@=g|g|CuE!?mmFjzbaufZ=PKxJaB=v2PSh;YrvT6Fnew6D41SMx*bYwgA<6w zVpFC$ZD{sRz^B|VY>xp-3Lnn!v9EJ>!P`ph$jad|nN)e5MVjM6D>7ocdjI*F)PZ@R zd(eJXdIPhzeEPWUei#emji&j9^~CAhaO1XzEN7GARDl&9kCA6#<>_a7RVHalA>Npj zZ?qly3F46Gx@Lhh>zne&fxByRkWBUntb@3U(t-2(BvX=jt4p~W8F9f$&Z?_-DoYd` zQzRT4qh`_;s3g)7UgLZb#C-{|F}*CY!m9+?RCwAs9D-_2RKur *4@Y+#`kyh zHF+6OVl=`o&BY(Mm!Sg}5Rxzi-JH-f{Gz<5)|Bi)4+Il2zqNU!qoTY|V2TONESMyk z 7<4-B17^IG% 13t94L`=I8>JJyDW!pR zbPE~lvFH_w=a?WoKbhW%^mfA;)H4iSQu3=mYqEZeYGPz(`lq_!kIq5=S(o)|M$`X) z6y`5!fPjYU9~9; ;G(6_)C%hOXKx@a+m>N zO!nXFJpZMVKL|a4ii!M_HK7Oaf*gQ^Jw^a|$;t-!n18#L1(3Ud@n(j9`=a{iO8#Ib z$?zk_?_W5>U(@{lq6I8WmazwnlLX#!f+yV&ii4Uy$`mS+P}!@nrj~`$c8SOIB?xm6 zv)4p3_YX!+CD33d2yot5Qm36-^LV oq;lQn|@6-DlT_SX-e-F|8?0AY7LLq8hq z<9pNSH2df@h_*)dwQrkJLa6Vx`AVVA$W7alRWsF=7b^;Ju;ISA1alW6(Ax;)sJ2-4 z2MiP77Wpy03fSpHFaC=QxAzy93G@gX>xGb8uLzlKJwo`QRb+Vw;zoEc&;}_-YI5vx z3jGXSTlvCe^oFe_nI*D-J_Sy@CWVafRO-skk{#?9tLl!SQj# 0za+a>xh~)S}#Ia@CR$ z#%0(Rdzfc~IOd@-EEkTd(fp{k)lE~j8D_W<#!#8u`PKgFe6N?O1_)GUWAK*!`%iRC zV_^1dn%Q aXeBFh9kDG=dZR8s#URSA#Pv^2MIn);Hb=6 zhM;OSEjdYK<9 5e!+ty0Q0F6ft}d(7cPnRzErs^HW@Gbw8a zJZ01 z8} zM{366iM}{=oKx1mYJvgco`+S$^ui|2uFs&>SFdJO`ZG$#NhZ%?nd?=)a0MyaGUa?D zNaZIIcLr-bjBbz%h^OEcYkr8%YfB2Zo^xx0KJx$CNnO=(35yv%<05OAyRY)_9?Oxm z*q@JH;$}Y{xTS%ZL!$XE+UxoL_F?=hW;{Q{4tn~OutGBP0Lu(-n*0m4YCl#daO?%r zpX%a%90K1D1`f7=UcLRuP59{q{SO~p{}@>NFCSe0Gbi}_(Y^0x;Qx9p@@tajUmS6x z>QeSwqDU)8C=GQujpaw-(L$4m36LUJpP3lu#%@3e!wHv(yMXx@)38VFJoDW&fIfkM zna|XnFW{b%hE|LucP48zdo?3zuk+2l5ViRn7E>XUaL-BBl26{nK;L}mxVNQCt $-aD!`yGG86i-eSRRPrYzjK z%|@_2c_J-@YzPZYV-&e^#8>sw6^+KnzOZLLyaZHaK4=($jnJ@|Fk5oY0+txUh;oxN z^d5tfw2vbQeko7CT*uoIN2|?P1w9&$Px(PerM1>dy=_#>`F51;SYA!esl#T0*GHdt zRrPrNP)6lUBM{zAOWCNW45@gSmCm t=1rOk=OVwo?xN?X89VN5^4xXYDC_)w=N zSsNOaDZSS(*?xP+@|Yu|gpPz@MidI8(3f&Iae{AMPr-vC@lv?x9xN%VwLO|NPe`?0 zxu7MH5U#L;%Q3oOcdCHYQ<(?dqRBYjuqBVb?(jmb$-L*VK2Hq1k5OiZVGZ&Ytv= z6$!n3%iACl_p%5$EU#d@^At6S&EK>^|77?RI9fv(M=Nnw3Ntk(^{RL|W2H)gVdkK8 zzj>}=VkuZ>f%yf4d{U9NNUR(3OOu}y(a5r2&9yjoWj)CQk%eeKcc{^QBMas2L|!2$ zf{hmJlTP;~NYdautoT)bs$*(^1<@1-&?p*|zR_&0lL8S`8@lSO_}sbG+sg3K;h4NV zLNTAVJY%=F&3a+vGAin>a$;{=&rU@!d-O>_W6lmlZrikUj{Er2&qP?}!*k^u7rO)~ z1*SZ%NIXlN`^s!PAcDhq__EE2<3DR_(yT3tn=XW>rlwL^rt|p=uRMPk*4k?`JJTc_ zMZ)jqRIJ(6B)jPCZjLf&7p^9Dw=2Vy@R2&i%?$K1lpjPB`G&T<*4SsxH3C|O_`y3= zIyXiAHpV+0W)&e)*e>x)Gg0;HK|^D((`gJhN6>JT7m(_S=4QR)z@1=F$%UmAH%_B( z&|eEM+3l3`g^+3_e2u14iOV<^VsZ64vl8KAvdU-8W~^ul-|Ra)iud#NOs<`yuF4L7 zok?Tb<^bwl-~+{(^_A_yi`8AXkx>D{iw(mtQp6lG=hDJX(ZG>P&cMJF%k`Iz-8XU9 z+U7bRX_dm*F#+!kzl6%RNUk=i%TuByOdNS9GR{#+Bn^l7 H=WAH}cB^`-YlWT_iUdY3@td{_N`d*U*NP3sc6v#s04$O`}C_@1K^k^j!q zJckL1rk47VRvVCypPE@~1%VtSUK{NSYP6GXCqmAyE4#827xJS+1&3AwU5s#B@WF95 zsP0?s*9&%V2?!?g?PMqz(tHN9UJ4-C{8={>yh{xha0!}WnsC$J8YjkY+zFyaO`%|< zG=>w3uRPy zJLuA(w+FQ2E-VWhr`c#cEiw6eJtl@?w}H6r(g?gP-=?0s{0 z;TszV)xG+Kt#d5>HI?#lB1%?ulfVRL%e!cKkl0$KP_qJ@AW+L-yi{>JOp(FuWp?$> zkwAi^uN>iB!kPoIT`1ynBIF~Qo>LaD<%|quxe;*M1lq{F7u%4hsy(5FV-R@s+I7~O zz#L=3JnZDaCad44CKGZ(_)XMNWQt$dy$VtQjlixAeW(n;)kcqnBq0tvk|j1Uqs^G# z^n8wxT66y*DWJkI 5zH?9zvwlkUqr)jc8?e*|W%4 z O&cq(q&kIJ+Cx2N#x*;5=}%4a-L5ouj=WC?Nx9QRwZ$%$6f!K# zP{5n{Q^IL*p*;npsP5u=HD9u|G~eu#VF*Y~>BOE^)N@2=+Ap%SHmA=AZLpZO@gqpp zt2_GPfok?+YQOwJgWc@rK zwCz&wIJN0Nx~+}Ewu$CbFwW&hc8yzM%$vu{h@#=@mx&&N_UutKeIbKi93#g4W(H9u zp&H-kJ>;BPf42{7SOv|VJb+hP-mnx!4Wy(;L6 ta7{1<*`d{ z=(;RJ-DE`ELlv==l2y`{*e9u3o4Lxqp||s4P#rIK1V7}b`B>cA+#K|Gdfg?g_|1Iq zd;WyhhFcz9Y;}}uuErOw`&r$+Kk$T1d9f3Y5$BUc&qMcl+CE=wA@iSwfHM4e#(xJZ z3>>V#yW#wU3;2HsVg4bk_ iD`#|0QQvjdEf|1Y}jAItEo6)<1`;9snO ze=OJkvL=9_QGiW78vzSDz?T2JKK!?Cn}q`qK*I6wq^SNf!|?N({4pTl#|QQol`sG- zuK`1z0H-p*IORVp0oWrmvM_$nZ~cor*FUY~4*>zc4=(>zEA)Ng{tbKNc8y`{?M9@P z2dd@_f~X+6P(=i={TiMw%Tt|*SeckW>YA0I5)v^*kIe_MTZi3fd-4Y2IOC-gASk__ z6-AXA^=Kt{pXPRX>dgejypo6%aVC2$-H$KiQ2B@~<2Fs`e4)zkxbyK3#6I=C%4XY4 zWBi2ql)C)vZRg-|p^uvI&J*zpxf4 AMCeD$*)Xb)os1?5gUDDOHf)0H)0aUo=8myqD+c+og<_OB5W#p7t%q;e zS0G7=<-iN$K2r}Ml2JjZD2E==XC`F5Gj&zGH$c~4RAG#!Of5}`7?B}kvtNolvvx__ zb~(u>y&v~{k++!QW9h51NI쎒Q?;sPB`qH-M#NgQ^xrdP5w~S6FVGcfcJ W<>liM-=9v0ylv)jZ<2bOdKfo`z{#!-qCZdxOiQ?T07$F 9G|q8cHwFiRQ(hz^405E_%xy&Vr7=oC%}$?jEtuiGcFt3m&r73Xa?1gjBGE2 zJex2fgTC20M?zH69l9eSbvV$sTR@F?KtUi?=sb;#@fAtj$QBek$o`U(N@*k$Gsji% zN77q}0!nG9WXBV4PrK`<+X8%qY&SLCxN&!T6#kS)=zJHe`gf-`@oMNMv~=%f!9;0Y zXtfNbhC`KnwG? BK3Byt9}k()sZesl@&`I;f;73QFg-BXreg13fQ)#n#ZnysK{ zSqhXCK~gGo1rL(8-OTkh`YTXn)l#*Ra7D-?(nnBFkOTBuFp=@t$#?Yu@tMi007JLu zshQP#d0Ftq-Xd1cW8exOb6+F1>$mOzZIg949b(H0E@>hUhan2Ma_m5?MxsxyZ*zak zjVK<-=in+zY2ZQqMdz!o=r;|C5zP@>lkd|>C?s@NoZN2fNp+3LaHKSdjdp7v-n@j= ziyCE(+<;QbbU4MnPDwSIir>&N^03UPxSadqwW57g%-CSw=KDlq);7_O+_CxqeltH_ z6;v}7C!*rd$ssw_5%?s1j8D>#301x0Ax=@R60TUsi1^Kj82m~y_A{$2IIQOv|B^Uz z3(*#?c1KAUIZ{N 8z_KK%7DJKmfTnzty53DNl5gF`0B8Cu`8 z@zgTqiqcudosYF|gS`n1Z>yu*I|XWA6;AZWl^rNhXFpU}0LQ&9GhIA e5m*ZJRYn%%Qn?lqxMU+)A?3f5*9sz{k^82q>S zLYHbgrcvI;@I5FLLpI4`giolSL<@{_cGWQ2!3i^oij 3C GB T%j|O=-pJO-g5YW1WZRh)m7-c2|S7ZfU>7dSb!t7IkV-#gQ1>OnHKQ=6Dd0z zhIZE8r->t;%WBG9X(w6`digjHM%{zP)v31vwC3&Z3KEWGRhluuZ!o7nr_bCk$>cC^ zi6A}nyXAlSk{=CfJkVweCf|C8m_2dBnVII-N#i=Gqw9(3@nDC}s=PllC(!T(ufNNC z!ed+Cklt~XH;sb8W)8Q2ha&;vg!DKsDNL=w+<|oysB{gF6SiCSGbEysB4cvjAcnHf zfl@|11G&|V^jq4sqxSSqD-mD887fw3pjJ> uPBly@_?19q_m z 99k)@$-umx^{t5 zIud;F<~>(ozW30&?qjp|ev&^tapl-zoc0c=@A=r2LNtPxc9GCqnDnAVkDkOJ3eg`z zyh--l@TplzO{4&Y)GB;q
E^3gi7TDTx_Q@I}nWoiaX1Ml=F64!| z{m*W+et?AU5QdSSk^P^#!QZ7V{E{XApP}j>umq6M@c#@||DG6R{nd(vo15-84D=7- z;$IMhm6}#I%dAMxr*A(+Q<&2e2Um+I=vh_6zrreRX20DC+stt_(h9z=%GK$=mTS$P z_Hh(4S0f~mRDDk SoMNhtl#{{xcX6G_{JT H^|MFqN2vS3r_fzxSMiF&%z_L-VpG4gj)?~;5la*6ZzgUJAFCVF z*BXxwZ&*Maj7rx%(`f9M=VqTbV(X=eP{UYm8tf9d)+1jDNEiExZHi^rPohveh+QnK zj|xe6a|wq~N6oox&mT(Z%v5ieu6kFh?o@3Foi?&igfBtVwi9^-pyQe=aVJqJS`EnL z0H-M!C34YbMw?w2=^%MaS~ofAoMttqt2DHbJyfbCZdDl#Kk2+X0OxyujhhDR+^+Gm z{@9N{SnO4!fqG53rSRcRMPUxTACW $CGCKF1s%9DY6`maZZ-_ zVb%MyK`7-aJ4c1;@m}BV>S=FC7CU(pd*@FKTj-8R%L%;%sVF1hRSV9a3L_5BO{~`e zx~o8N_8Ks#uBT3I>Wjt8WLZq#+!VN~V(Q8`rOQiseFL!Zfn-K@Pqo=LFR|7g>=b){ zD|kn`o+{Rs50KKL@ Q; zB4q9_8ygE?MML|lzWI2iv2Ee`@Nqm)9WzH7Gaiazdj@N+?1af?Pjp5n4Q0jhmUkn@ z`+C~~6k9sIcOkLyh@NoJK|Mc1g^x #B zK?8%B@xhO%ROb$2-*A^K!54V5f?)8^;t&vT!o_9%2c1lE?c8WD-iE_K?fZ4V(Dh+H zYxrJ_KicFC5U?Ci5g-+Eu$VMA5@_Qn`=!TxD3r- QwG}f zAPV?V?o~zfzIeCzqrm2a0zL=Q3zXd%3$5O2E=rKW=QiY_9m1mtlpOT6IaI3}8Awz5 zy*HX20W7WAH0u)l R%!X}rjs>1#zJf~m4{@^7MkS@a*WE1_+r$n+;1(o&<)OomQ+yz} zjXUD&1;L ozRSqi37(}nu16m4?PnTCYdC$IDT_?OC6MNm53G7R)e~GUia?)_Eqhai z5#Ul8IGG SHsdrS_tU9Ioj76eL c(P?$ZMp-3)%wTWE|j?R1-`j~Pwd*Ot&@l}4RDBFQ8&>^8)n z1=jm~)9ECRb;!I&;f$#{%HYnb^fA+d1AKupDW$DLXoE{5h13S|aCw~a%6IbBlt1jf z))6)NVY9Iqhc=hKC*A1l >?}kCUhZTSRe)kZxiL?BSqu z=9tN>F?%;?UQQyl_RiCx_W=7){$rtSL9mN}1PZem@Mu{eLqou@F)}j?GkbALtaD>j zjau%vu%I(t9q|s8K~wwz@~L*vSVPDFhZ%L_SG9{>xN@-pED6|pElLS%TS{a?nDndh z!NSk(ZFD|i^ifJg4e9lM7@KlEd0RC-5*{8y-XD#jOj?_k_C`A@o<1#Fua1I> 5;*4Z2S^iyr1~!I~ z?O@`Y6gg$g;xBD1s~PTaHXv#{E5=u7^r~NFr`U}@E9T!5qVMQ5K<(YM9B~5kXDZWw zZH050ND$)1_#}@b*k58;1V43=xXqU|KkP&6-F|<2xyhH!>l0E<+|ZR|B?F&{Gs|#r z6s{4(Mc}-_w@CO1C3nXW{#GvVs*t$Ii~JFM*1g?pu@Bs6W1XkJGTjPpHI8^I0-og6 zUKsUifvu12u&qnFpdu$7ypgs!4s2ptIt9}scgu0ijA<@uByn+%wmz?Kj1nml- `L~%Z!^!nh#9=67ZsC-JJB$ZpgFo{aYTu8i -H_KAi_Iiz@a)&O4C zSMg1CG;>$A{V;R5o4~dPWEh%SM;JJgj*4u2S!XaL?yV}FGB5@W%ii#jgCL8AO0jE1 zBldj *@!9yVJGVh1rdLyXByNQD z?`-63i$p+N9jw=z-wotI+>coYSH??Nkz&4U!|gDq^h6zT`?^m?nXuJ7XFS`CAqEkIn6U#{M(uPm2$_H z)%+8m{JNUwpW@(OhwT6yCi6dW@OKLBCxY)k#KHeJ7v#U2p8@>wZ+Xc4lCuHen12~M zWcbAc5MUJXgM @gU EopGr%k=AX*gg3b5;CW2EI^2fQa%fB^<0$KT*rf2xG#yAtoGHTkhz|8pfw0QMV@ z+W^R70C3Lq--BbB0GY6Wu^%QtIs;&GmYtdL-)4IMs*>Lg`TXgp1F&EL MPbutSEp;zH>%U z&Y+iqpgiB{W_6od{o$%G9aFdy(?lA%q;Pke`u+p#lYC360>biBIeF%!%AT*cxZd2s z^DgK=JV4?YC{c$8R-XE1u_f5^sUN-BI-4`b_PpmTz3=^&pS&2_+nT+#N$c|jnUIro zI;xV6rhKT=R&q*ETqjylpGN7v-ambiOxX=8RXuGqf6PH?3bL=-5m@3|%CjyE$dxsd ziaOo0DqBC_JpXiyf4wP)Da16&WPn*L3*9gdMwX%EG1A-Sq`PNyAeEL3qgl!3^EqvB zvm0kQJW-pHl8E7`WY#No$^3fj#QEUJK-8OOfgs*qVOHephvkf|&h9$rC=3{nu@7S} zkb`8;)1%gb(VOoGY8nwBcNj42v(tq4O|sV>IO8^#6^nsY4pT`_Cu@?Qx3E6ZJ(Ud( zmp@|Mm5WElq?wm5nELkHZhGPqDSRj{T%uFDs7+RcCJIauCu^YZ4u#rs9TWcCY*76w zL1LN$TRYN*?T$58ReH$<=}W|R@f8$H6&<$#I`crzLjfKw-gQ@P0P}MrR#3feU3wO& z9%YIzDMEL?80H)>kSWtfs>8+?6Ea-Tj!RML^I@>FBE?UpcQC_uRzunanNm_UpJ)UM zMWa3sF|t?sQ*s+wf#@S0QuizgGh!rkJBb>-BcFy8G8SIKD6uGAN8v{W%trz7TTxo4 z+)E=My=cn&OJl{2BE+!>r$hF{((B>8vMixv#iQo~OV6Y)A^PyJ2x*+MD>Py5#9MEY z4?L>$?Ul&23OSUE^`YW&fM~(t<2x5!11@3-ROqTMsl1kNtp$wN84n^xn_9QSY;Ov1 z9!LW^oL!un$sL?SJu%lMeK6O>%2X&pv@hO3QSg$zS=b{^;d*1&8oQy4Z4LDyQnR&2 zR8RM0+@hX;=$+ZugmFCC>sK{?jcf>@?E-{XMP(8b7=vccF`%&fdv~i^0>}AvcEgj4 zb7^0ypyU 6>2Gj?6B~kaCRFzGGxs*dbJL z9nK|_TBjkMM7L>2;=dEoW|vH)M&d6x0+|oUr^Fpp=;Nv_Q>`;^FuPO{+FhEhpg4aG zJTvQjG4bkB-SOF*JaIpwZITD-^=L|OF20y(eB~?Ro(JKcVs$~i }sSl*rj1DP_HQavIZ|2roqwkjRm1pc1TCQ zK8ms><*@Cdzl?enB4{Dz^&RN4!ZwM(+lFN>N6RL0@Kd_-N8UoV&}k~B&sUaL_VLcZ z3{E+ZnW&2;;kT%eaM)4DN cE UEt6$l*Uy(Rac zN!^LPR- r$DnI4l~iwJQ_{+HEs^0;3}6MoiL-kKE^@06#q#&QY0_F*B__tzjzOIMXe7E zuG;ALJZW^#=8%x6$ZZ@vm$Yq)p!fEkvusyRNyAqN_|UbIltSUvQE?Z|apKZ7KSqCi zdP**Dnw}S?uNov{q>xfX4~J03>bklP?ss_hskAgu`!fLd HUo^}5{k@-6S_dkmrf2S1q9+&)GApmfh_~rEnj{F&!{DG?d86yEwk~zMc4FC65 zA^?Np??wENgU~;U{GTxrGvHnx5UBw05&?j;pYP>a*}tQ;zi}`BQzd_lL1+8Jr~WT% z!a&Qy3c!s_fH3Qy@8y}k$DRG1d- K1yPW^W<(x}FuJvJLc`w^9G zLOBk`L!5m}SlB@roh+q-Y$*=uRE&W%T;j$6s+S^fzfVH&hJhZ~dm;{J`wuMJ%&quX z?H^y!(T?L3zh@AQxR` B1`Rpo(~syL%i z(ZX%0O3{@*Ewi?~x%j<@&rsD>l6|>0-L3UXq3&eF7XqVHz (`Hz+|DDu9pD=VO2|6ja1FiPUae-lm2gQXoAy3x(g4c?Q62s@LNhs3NJJ<}E z-s8BcQl48Ex)Oss<#KlwE4a1&&dztbXqNVNh|kb8q}`BYx-c{(N;{|@Ed2WFFi842 z(cf&?az%+DZ^5!akb|BJ;7(`sX)R=i)Vwcy3~k;QZkCUk_l_YOjD@ZIOdnYk1jDON z8^^o^7+EIKm~|3sO;4-$nwu?eJz#yu6W#^64eO$f`Ux!hEdi~xFVZ8Vjcnt3Kp%%3 zp{uJ%pjsp3*}TaG2mwOKjp8Dt1_GI%0aBlTI@!HE1&&{B50SV4tCN>Znv;vIVHLBP zRD NiIh_E*#o2%OJ0XZGaMhR>otxAfu@8>=0ogVN#d_$;0As)Ok>G51^ z_v9G~FsL$22NCj4p5cOUSdS09@wB`*xWQ)$;!9ofFWWcHEhTIhj589Y3ft30p~HP5 z8EU>Z%;+LqEAGj1>1{^AOr-NpTI1){Et<>@iasSv9<}?2jfZnI8q8V;WvTsm@gaCP zPMB#C<*HXBsV7v)Q9X;|LkUbG`{RQ} Kv z2U9B%7@AJ*p$Ac URm sp z>Y{V~P|GW910MkZ7eY~@#3yb@oMCy{!;IUIl;W>ilQ%_5$`5(fEI3|-&nSr>c_bAa z8mtlKWyFkKMpc@+$d0RZ)<$jay}XCyP` FnjUqCG7yt4_x^J6WA0r~K^)LW2d!#(TFvY4#9JK(_q{Nop*Cx$9 zYT{l#9)9++3hxr89D#rT6r4QNY?5m)zzijEAxMk}F)VV)I)g1lmkeQrtSQwxw#X#E zzW;e*4vgI9)Y9Ef`Bk4Vj+G}rbb}rvrYxRnlq)!AtDQ8wDhgJH!3-C3b6lu1S4R$> zrN{Eu<~17DcMLXjR$jOs{3rQJ5<`)*9Pl9{!g+}~w9yZ}!Uj7Qh$)lX^a=ql9IkQk z(+Sgt;_soP=!wC~+iQ|vKDp*AoQ|wMBY#f6OyY>AmL`p_RQ9fz)CPx-_B(HOgQ7k{ zkTcvZ^x_cu#)n1E*blVj_lO8fufzHtIO+JY4fX@ri3H$_7Z@mYYgrdiB6$3kG!DgF zF{WPGIunK-ltdEnXP8S^dKHd1;3V4&W8eJcSVLcuy0=NdXm9oaKVY5(97N8iUGF9G zDrI4mu}giE0r1beqyYzo!x&qghJ}{nfJU5=X7>UqfoJys!N_02et35e35wIOf& PuJ~nRL6-9I^3iCsfH{_On!Kg5%A{d;iMjpCVJ9b^l2kp2RSc#N47OuJil|}& z1ih+>`lp9RBlKN+P07XJ(|uavn3Cl*Y2a%Ex?8*6Z2YCWro3LMlAhZ_?-;YhJ;$zz z_Q_c!%lx{xR-A9IPvO^|&Gu}8B`d%$V!p`le51`{|MbrCHq3iP45%{6;mdO6p|c&T znwaQra4DgxBb+YQTkh703kbrq#>0W=2l904y(8zzl?qnFbD~a9a%@Fc1bQR5yRD^D z9Pic^o4Ka+zTJIM!bp80W<2!F uVDV$(M@MKQesro~ZZ-SEw; >RYRm{ zr^qpE`N{}~WZeyGGro6!JvxP)D_o%=>%n(2QRB-t>4$aDQ+&>ICpn4b(X%=bzAA-0 zquxHBCB2#JV%imRfv6esAa4S+fylR+NbCZLNG$!ju6HWRb%%)lnh~}~&+&a~#*m^G zS!iJN!iLyo{Y9rzT3^qoUpq#`*tfOW7g8Ia=Z(Il1DBFS?f7UtZK)~RT{aA$uIi&3 zA>46ithxy7l89GjK0v-ibVYxPT7Tu*7y-Ep|3t07Lk<5GYW>IU_kVf){ >Hqt(B%?Eyf;@5XmbEC2&rR(i&NvR6#sfh>Tw{I}VwAMgEFw9527a`>l8eiZk= zpjCimlY 5ssH^*U;xnk9d2g&?rQvVCBI|ze&x~FzjJGV ze&a863xI*9s4x5oD-S5`8J67FN7>9_?-+&CWNJgA>7{woP?2|JIb^L9YB6(C>m@*0 zeZd%up3j_AHZ-(Ew2*C?@d`xYChMbTPsA7?S@wtP Ry=_y)@WE$aBKX21kV z-KGCZaZu&$t`}12mF=btG0SyRt4E!X?4|nFp7z3SEU=}|F|5vLTH*-*w@RrYAE-x> zqOR edc`O(57kQu2PB{jKdKn zr3NFABK0+3#9axP+n0o#X34D(dh0qS*-Rk|w^^j#8nj9bBIJmrZwnQ;HAuE!RT>X9 z;A*+yxVDHJ{X%sG{586N$;W *hVKQE#l-4I zck-YEp_+8LJk7J`*~wEeY}79b0?7jw<_))>ilEs#M|+aTo8Z5~e<7Yo<12FWW*t6z z+xg_lFx)q6@Xg|)x$y$Mc!v<_&yKSnzqa2u6)V&4#6-WIaeyA^zd6m=e_U1kJu%T= z2aNw-LB#&MVS?Xw;*S>mFLz>J%BVG9C-$Fl_u);$q()~x#pFp&G%M1c Wals^EU6%4a-l-l#pQzNMX#2cw}| zzrq|~q(c6lJi@%8Mit5~*0zb^Yh%_dOOuLO9$ew8Hq_2MRRjwzh4HpYL3P$ &wuaeN!ved)Q@T*WO%utpQR?{5POS5A#I z1O)=b7;)jj_&jJ`$dwQFupq |^>+Y5m`TWc%0E@~#q88Afxy-09^Na+~Hvwl2 zQ3ojLIk$@nEY+_1LT3bph^tNzhbs&h%8Lf{Ww3rJH{>l>+9qhN1i`LU!hD<_TzgTU zo4`+Hk}T4kx8ox8IpjLLB6u`gw7A|rTRv O{WY)T6mQ`c3AG9ogS|ws1ve)!koQW!GgU% z+~V$tDMU!^bvCE}f;+EPlM#YPE4lv|FS|3C{UVZVY>YOmPckVnn|nJj660{lH`6?a za0#6&H(7Sj=ck(f9efY9Z0@A?B|2zW#S-gYTiMejal=6ym)o7M*E-k0*8!tXcH#YE zP2Zlcm&VDOH25mnI_GW!g+Uz-__tB}S0XxNStKt1bo2hoB(bvpGwu_>9Q~i%fd1H8 zf0ID_o16DLNA`~g`fr=}2R-wbn|D-w)Eb!qp<|E2lNx=VY3r@BisZiPAvkdw_9jBZ z5(qSsB=lMD*12c|TY9f-yOb%bpAfdm?N`_1Z@lBuq|>nwp^_B9a0Mdey;t6j-ZCHw z$`{|R^c_`sxMy7ChUcq$uZBy~qDTjsmE%4_+i4<-MF^2t@ p&?njrCJO@3Hp zTEm-)1r#2wx%02G041<3y(bn*K!bOib@o!}bXcZp5E*t`=Ew&~(o6PGWJtRmIIe+L zJkezAqCG_Tc9ORlWa|MJQBA1IFM~pDPcfNPSkAF1Q03R&4~9ZfogUs0nV%u!39i9O zPn*4lx#r$+!Wtl5Kkr|}HlIAql>j?w=rv!Osk>90?1%XyxwIQgJi@DA)RjrAAX}!E z_0I%f+-L9iuzR-fMyNm> ctSU1wde40s+(5-D@lB& ze)+EHJq%9o*Nw&R_hZT;;3|gT#yAsZwaE~OC$l8n@dXq$<6plKmmIG71b*=424cEQ zS_mpON#00U^Ed&~OeFrz7uvEX-`W06JCt}o_;qmmn5&{n|BA|obF0Rb(Y toXr7IbabwC%UN9AU?D;r*7kWaJEd~h&vuBU6O`0(~#S!b>h>xoGH zvL!JuTREd|X@BY4)Ch3~WF+ q;{HB;nDKi{ z@e^wQ&jcClKM3`|hb5Q*%=JG|`Cp$*za#Mhcklo#|1;$O{#QS}jejAinQ7TM0O@&* z-^av$axVpV>-;VE(jN=<8)?t@-Gcq+N`42 Yb_sAFzO}p+qA6R@uM|@+ zAW3P4*%3(sj^DANDP7o0MpgXSG7~)OT3)bydE~-gxe^@SUvtBr%}>-H7J6<^n2|!S z!r#-UwBN9>SjTAHA=aD-<6)^F+p`CWh#o;{3_OTw4i_^d_MY BAxto6n%tIId1$^lr?h0fy!?< zS4SO)RUij~U63Jpmnk-a(r~Ox7LLP|#xrS7zc`AQm#yv29o;v&PZQiC-R2u8^t^ru zaiAi)iJ~J=SG`@p w}27AxUvg?Q1XwGau4?a4yw zXKIW~RfgK6^x1tORpAAeP{2Cq d@TT<9Kk(LrD;m04||Wf-}-8FNSTPX7f~LO503i z^0IjojnPT)@_@Nbk{uO3p%1o63OFbUQrSqU_-Vp!^}Qf8ekgLq*UO!qx@0=tM_ZPb z);l{+f?SZ-7qqTOM%kGGVFzRUp-}jQISY|_$_Ky$( ChH(qxw 7kDYsw-hJ pyVbj&Zu3VZs_&Cm zah64R138;1p(RRx`Us87U_XqCXbE-hglpSdpc_okU8&3}tZmO85y{s#>dq{9vQjjT zg15ng)PF{b^uQ@$Jy*U1q@KeXVU|u!4!ngW9gfMOevbFSx~^cGa7-Akdy^wf$*f$F zG-xpiF{Ef}4${vymYOO9*+(7)E!+c1=4}VLOzZ?w9*nU_$W|VS>vAB6E7Y-dS%O10 zXbab42#T@DpuE}gxu}ATtqO3Df{L5#biH8^TTREwIqB&>d{4UYejX3QN2p3JLsBtx z`yOn1*?I$wy+`Z_=3#Ph4EQBO&OUM&@Uu1j1dxwXk)Y`}s~WXr7+CusZ)@w4?;xh& zQ`!rLMc=-`XY`;L*NW)5t{%FJcazey0%WJ4p001n8JNA&eZR8jeJUav0^u$45U%~v z{o9?vJ#5lm+M^7qY1aJcBU&UqhFH6|QooCBN<^#Qkc0Q5(I&qC5%ZsSXTLUL4D9Ux z6sQ75|NjL@{D*kxI}G@n?b)B;ApmChTdGumJKuL|6cB*?{q-kc^5a|o3q)dK0z{+$ z2J~6JYd@I)>W|-ajw}G}Cldq1zpZopv4+1vB$n@*i=Qj`!y5k#)|i+9Ofd&Q`w2*Y zqh|tmYW-Hpcf}>c-%wosT*)65mmGhhxa9cv6qmEVfwhr*&;r=oLP(H-P)!U|O9GXL z3GhIJ$xD>WflSPn>wkbXV|!sH$rvCS*af1|os}k`Y#CW XGAI%f&TAC~Q5w89#J1O1 ZD3yXa2;h(#Q1aff@O31FY;4`Tl zu6Ws#8iW_4L6oC~Xryfcf>gUleRs084JSr>!?v+Jn&xc?b9;ju?;dgGm5~5pF|}I% z6Xp@DlT*DF*V-yjtC(uc%Z}Etgr@YJ{pc>H#V)RAJf;@^<9I}7An3t0Px&uF`GKRd zzNqO{gqFP*-w{CL2lcnDDM0gB>1ARE{$=tUUS9Bk%auhcLkMxlUaPc-gZN=D#W;CI zeJNz(XFHuMBb}($%1k!xg{}Irg}1_+xw5p<3vaITB -&Kh7&^&je8Jt;%3noC#LgB0Ow^V1Be$VDlb xo#!c--N6*Mz z&rS~_TLu{n>hUPq#7<6)5VOBym`fg<&BuUHOfpDCQ9++LFm#JFY~5U}?tAmxGToe2 zN0L{BXRn*IhDEeN6oKsL$KTr*kAN8OreQ|pL!r*S*fboSn&>plnOu}T`slDpKXIS$ z$#Dh0L3N6&6 KR(a5Q(E>c>utRkrn8kH}GFCg8GejB@@w*u$Dpcs}qqV*ak zP_AxEp+!@!J1c7yNGdU%+q_J(Ri#-g)$Gu1tM-JeZEV$^JUI;=rF*NeeSsTd{m@DH zej;fI>7uBkq}vZ#YnxhwD8Vj>swzx;li|ljM3Jc57@Q}KFt#AKj;Ia*R2V&K Jg5a8AXm~ zCCo-ep)ju3AIL5f3d4J*Wlp1?J{IL@U7KllhfjqJlWa*{XDzfpY) o_>4Idwi9bb3Y7$1d8a)FGdl*a5lcGA z5wN)JK&p5#eU=a~By|9!$ru*1YUIK=IFA?i2ZB)y5nUN#6HbVey%c)zy_$Sln{t*p z_iVOZ{c6CQbk=&~NWKI^q7Yx?h@?eut%*Wpk3Voj>jF*5 o36o|vS+;9p}efo2a1Nd{8cj|V4u3s2&0P>pyZr@I;kn+6i?Fdi{e}V4=q=i^vfDs zj0-|{mtj}25#GKG;6lC}%}5 qdiot5#xy!^*P4j_xK|4gq~!v!7>as;kio>v4>JuEg9n9A~&oR23<&TgpA)V^%TRp!iOX?hqJE@)AAB9fnsVpwN|GEmAZhaPeKu z3&Kxm-MpzLaTFN+nCqUJ`U6qfJq&QpQ0W$u2Jxzh#mK#$xY%Sjs10$wIjWI$y&?!U zVYy>qF^Z&ZDMTA%IDb6<1edtqGQe~-IL$vf)DS=0cEr@;@Scs- 73{_#)v5> z+U&?M=cShmP9}f()I9{-@sO~U*wOzg$z_xsB5Q`I6GjPs9AoDmrlRpfg$813(y{}n zA^P4x5N7m%9_W<)O10+H*7oCQEQJXO`7&HnM+W(KP~wCdDn9#r8|UZ8&A{`M^8iKT zm~Sa!s;uUe?X-r**7L*W<=nmQoIvo}zq2>}B}o4$91QIA{{dcoVbT9B3f5nu`~L$4 z>o4@`U)7nvoB96%$Nj51^96j -xBko5l5F!CIRRHHaaeoGVBYHIA0I#3#{< zY5eiJ;=r6qn`E;&zoq+Q1wZfD%IUsd+EP+|6sgPlZIY#}^e8C-(pcg&a6PN7-J;;T zV8v_*PKEx$J(XU1p~jfXZ|Rnft!6s++hwv+DG9~N?^GU|tTnxX1%2RKzDi|r_58UU z#3ACPGI87TBtC6ZrB-$J*s0bk^(D2rI=>cvwbI>AR8HdKR2-^bdz!_Ri;VQt$la>R z3nxr_icc`*s8eN|Q%a%a<>@;xO11CsXP9_8Lk1A$qk1w2B$Lr|Bk;8*V@Ou)c+pjc z@r3J+DoN%4&~S)*GMx;z&Z?-7x>b@Wmo|zZqcd;+sWeMpE)u__bCP}rFUxBmlBz%Y zg9I=nP%$Zok}$u&E>4krK~&fPO8F*=GGjJh71j5kC?vP;qy=Uk+c69;cQR%b+}^?K zg)Mwu>)AFRVY9d45rB)jTq`_$+O1Y6ro GX2 ^1O2=rNwM{nM0EXa?->SiLF*5i!mxWa<(WiI@f6KEm@(y z)X!XqG`#xE&>#Y45Jeks>0$P=8En&GPQ@ai-R<}4D}sC+13LC@U#YE_!W~w zv6i#FHzhe6_13Lakjxn0)J>T!X`jw#XOH*ehl_`ajkP9xlZ2HCx;fcPzIIrBXxLi? z=bysWDJK+g*hx!uP|DQd-9jPKt6fa9)i)%*5GFt8kgdkZ6)aa79|dA&vmgCUmw313 zhg&WOw2s6C*nZ#bx(}QN&HRL1Q@my@ck3ZnsLCtcTHq6s(5~SZ44<;uKiMc8i9{6` z)8M#Sskq6#x>QFtp;%DTH0CPZ`#}Cq$WIfTJ6qVNbD#Um%y~5#Z=O=Hf}m>7Ea>>8 z%b8<3ge=uk$Q^1nqG=$EQyJ-i@m? IM()575E*IP6j `v@~j_(`g#KtX_@w1Jas!3jdld@?UctjT`m zM_cTkUF0ltkK6JJlIk(0lm5P*$^E zL3 zCe{4c(O7pxRA~OfB?>1qFzPtmOv!ZoT1S*ZtgjBG<=G+-3kh>1sf-{ItEEQ@b3-lc z=C9C+1tmS0aJ0~psx1Z=Eltm3EoP*8$DM}#t6YYkOR%MgEQY1mfonf*H-f|>?6 A2t;8WZ3))&p{LVXo5{R^nfub%;R+_?Kq;*+F&G4g&n^0 zS;A>aq%L#t)F^e;l(6YdDDZNQAi)%*S38uzyaQWNzM{4hUio1SCVB-==3VE02A#J! ze^ZY;FsQDbbc-_!f1wrS5R&gU?;z|>1*m9?{3nt6OLTSb zEc#)_#Y!Qr0Y#btM#Ny` K!{vLrCawK2M V`_*(}n^Th{D zZWyD3*j>58R^?+Vx8syJQC$Sq)ke}oxq+guBmW(J%X=Y`DTQM+k*S|ie4z)K`?{Zw z%{`+^#YgydA)wJ&hxN8pXD&Crl2zLN)SPKzOxMuf$ll~3Vjz7AHCWW({96Nj7^x ;-5-pdJ#4=o#}`4b!4LAyZAA2!bbbi0JP}O02Y*afeP~RT8crT|Z=^{)kll zUY0|mH62sNulzm~*H$FBl|TisN`Imjm~*^vi)Cgyxlj62{GE)$8LIWG<|C665fpY; zM;Ve&JVgv(RBk}1&Wn!?2Uub ODQ4Gl7v9`a5 zoI*1oVX3NT8(MT{X=(Xw3fc~Z@Ju~EwDe;VH6zQ0$w!rnV(Hmu?O^haNYx4*v}3?X zRl9wnpiz~`(xbd#-0xg k9$MV*Xw 4m}J|uf)wR?i@ip_COy>sCMsdr*N#Rnq7 z0!qiWNIVJvjEm})pF@ePB|NXKWR3iG{p=(jvAE=}xq!$-*aJi9n*5DeILa^!fT-Kr zL(T(niXHF}a;Q!KkuloBVF)vKa-Pti-BEluC;U4U7({OKafBqQRZ`~qL0L4}LOXbx zSx)g-@)|BnT;U;KRMnuZD4)&;x6k|a$;-*YeHz;(S>DLL>|X5UW>@$GS}M__QmDEC ztK$2}4FMG@Q+Q9de%|>Z2n##@@gp3{-gave&w+!0yp79}wc*m~2APdnJh7(rFPxKB zHu0K3l#rRdWOuA0(s8`~d7*o6Vem(GRlq|a?$ZiKp@WaKK-8jmjzk $chA#L|3bYWG7;}O&!?a00 zily?yTTtRb0ai&GgBi0*o*AhHPrF8{Z@%=gTZkzqnB1CUA0DLHHC37nyu~~v>b}-m z+gT(bYesZ-C_+Uska~zpM#;ko<#+u?Vg=@b#qc9axvSnLOEZr*w}?K8@cdp#R6DxL zE0$yEm=D&8$i1@F_EyE0P9`my=Q&*NNb=?Ty*Q8($ioRxFEE0i8TWQzqAYdWSPWp% zs7H#q-i@xbx0TIWWC;dO?js+l@q3>-o_xkBkVOay+!D+WF`BA=3oyl-0hBbPHsG;; zo`hbWpoA&0-R$_ZrS6>`5z`rs1*fAs`E@mEZrXE=uU(cO*U`^k(6!lBNBGVPi}?9v zzA&!dq =`dZdA|kJq;?>_)R;?3R8ij=tz~f|hN5h#($PKt zVq;$?^k7lh#5mg;T!en0iASCJr6*O&(!$GC@k%*GOB9tPpc$m${14DT_sVJV^h9ki zcpOy~8uddtkWabevIXrd>}V+GPSA`)_c^6Gp!uecv 1o4SLVuoQmF!~*+V$-0<>Sz#PP4l3c@fAn+hvCn<8H({gtt|haff0Ynu>aTB%3mJ%f5hZJuTcM1^gjn7 z{zMBhFn=vs{~P4`UkmlWyQ}{vx&Dtdeg9ari`d#YLD4BX8#w)yj9JOS+4zqx^_5Rp z-_iIFk$_H4P2lT8rDSex>?mXGs$graZ$m9;Yh?sQCv0PAYh-R?N-@F7Edk5d!2VZ`KhOMgZGYkbzEq~K|9=kFuk?Pbe^jWi8vh($WB(8Czj6Md{*9mI zYa66L{C~UqO2_f{YX8>6e>C)0x4xLaEE`{Dj=!D%Q2$>3r~7~1f6@M2v;U!eUH_f_ zk7vF*^LM^Kv_BpCi{~FL|GfwQe>wlh82z{Q_{((kXKsEawKjAxw{x;}AYi2b3;X*g zH|)Qa{L5SSuh0Cg4jFxGV* PR7 jqR!iw5h`cQorVqg&t26 a=AVO;|^{s*=I(WJ_Ai@qb!Utd44y*TCmh%bsprAPjnqu8fr=56LlZ|GOoP`E@ zkv#`?{kbDF0Z)$lyfM12lhnA4UKq12xO2s%3Y~U@ ;@PG!~l@z4j}AS>i;9FaTk zBW%L)oX>l3U-fTMA^UC>GPd-o;{j$ASq(&K8#_)dJoP)myuaZ= fGIqzUGgPT`lyCd{~GQ&m=2dkBf zDvOEC$-z5hmmI+_2f5^N-jS_GR}L{SL-PRCr-rAS0ks03_a=z&2`=Sj?Vui+H@`xb zXM?21ki~X}n&f591YW@eX-va8@v-J1Xw4Y9-!;+qCYn)kMr{h_nc=l2ZGh(8WmjcW ziNNPRA4zk=>vErnDowl^yBaA$Z_r^fztiVY$?!vt$dK!5-AWsxq)e@%pE(GSD z>SFQ4d_Vd`h cT+*sj&xyC zrXLzPQgLhQb0glINEXHSZ!#B*oFR1r(hZD_hj?Xu9XSH~kpr^+h|27TC%^}A{LU1$ z7(MlsG`k^o5(IHRm-!@s%vyjg?-FQV$8Snfts9XWROAEjgT^PTCEyuA#0Lj9Z)%#) z9#zM`OJa2d*6MxuKJQf?XH(9fp)fmg+V}_)X9%hj TPo$mP~Joy z9TA*y&L!*-g |U%p2M>WnEH-yA$y^TjZ}kO)G)eT%jYyaRXdd11`8d z9Gd{PwXoRTM{&PlBe=S-m5EK>R-Ze|Y @+ML2$W-N3KUxW*DA3lho@g zF`idTSFCSH9D`c@ R`FGdF`pi73*c-er-A7z`eU#{L1lQ-q$oZD2%Y8IvT&>vN z$Y!1J?-=huzb|<19g)0&xSxO=38e9o xwffHVd`7)0)u$Hw4$WQoULjrMW6ihNI~;#EeN)nq zZ!M~KtOqoT10JdKpWK%RA6{45zCoIY&tfs7(Ew*&1wioyATecI4a^j(3b^M5%W|D= zJMlU`B;M|)U=EN-2H;aK50-VmXy{In`SDAq9mP%a!>XTcTl2c(Y9+iY7$4}RGu$`A zH)N}?YbdLii!h!Ld6>j456^*tqSq8qU8<6-DbD-q8PYwnUC2k2*Yx{fZ%{JG+~T zdM^xp;5hHW;W!<${RGH_(FElLJd15_nyg7tHT3epne~~_S#oGJXx&iu{Glg}zPL z>yM?|XfJqQUSFzDl24pZTE0?gKkf;?6|yNtN7vm*7WG=(*my#>%gcna ^J5kOFXNm+of@S1>GZd-kZvb6JSA2_SVx z6l1-c-WkH+#lB-cS~~HqhQKkwp%~(QOB*4-EhUZW^p~NZ+bLP{_rBTVj&kDA0K7!R zd(Xauh^j_n$unt(m=Z$X88t$|>A*4hz*r_ScKSH-KGR~2_6aC51m^@=9D`MA4_!zM z$vNbm?sJ_s^1@!#)Ch BRJ;EnA#m(kf$mT=VLrdrh)fPEmoXV3q6ZX~vF6*{&1%N#OB&!ONx8ZLJ
02 z%M*TiC6B(ybp~9ILuBC#*GA(;Y;MAM4?JPy&OyB2Htiw9=Lfy|iJZbVjW37NZV7&L zL~N%^HynZqD(C;sLt5O*>{y>tu9rC^a}{Fpqx80?E_Udh9vX1d5QO83dR{ISB##HS zu{_iprQH^bJ1~%)8NCL*yWJNy^Nh@F;t0o!4<0MqNz1Ntc9XTU!B{J&rGzl6tg38c z(WrE;#7LP4FLG3Y1P2Q2jkjv(+=26qwM-agoHS3MYVHQ7OdmpILEFLA){TCXt2lft zfy~rQQwM?!Ez>#Il^&+3b?Tf6<3hPDc dDXTI7Dfh2MJm+aph;wzXOXg6dMUDdcRbo O3(7Yh9=6t>>VxX5ntOd`PdW z5;?NJ(82(|_*QeV>2Kq9ch28$ei*!C{=2Zn5$sy}YM9;|`9)>_QIpbjhN*+9FOaiE zNQbw&7F}%*7vsCGI{wPuJ!PnfEP<`6+x8oWgHiPc*_1Z>%x5_+te5e-PAt+xy5~2= z_i{4| ?RHo#S$5Fp22oM5y2K19ha4 cBXW&T{6o*}9bSowsrmflxD^=kV!H;?yU_cSzp8&4XrgPCk|Bn4m9%zfLFim6z zW0T2Kv<{ai+{q(0Qg{d#uj8?Qw2V3gdN+DdLuG1nnJ5tdSmGaLD2L5=OBE)gxpZS6 zxcuzf(q8Z7z3P5bzjAvJ)CT53RiEMV!BKH@f55av*&v{Kh%+ck$+BxWUq
diff --git a/parallelism-ts.html b/parallelism-ts.html index 3097044..8857fdf 100644 --- a/parallelism-ts.html +++ b/parallelism-ts.html @@ -1,6 +1,7 @@ -
-
+